<?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>69128</bug_id>
          
          <creation_ts>2011-09-29 23:17:14 -0700</creation_ts>
          <short_desc>Unifying spell-checking code path should be easy</short_desc>
          <delta_ts>2011-11-10 17:19:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>69241</dependson>
    
    <dependson>69242</dependson>
          <blocked>65849</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Shinya Kawanaka">shinyak</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>morrita</cc>
    
    <cc>rniwa</cc>
    
    <cc>shinyak</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>475925</commentid>
    <comment_count>0</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-09-29 23:17:14 -0700</bug_when>
    <thetext>Editor class has two difference code paths for spell-checking:
(1) checkTextOfParagraph() for Snow Leopard or later
(2) checkSpellingOfString() and checkGrammarOfString() for other platforms.
These paths should be unified so that improving spell-checking code is easy.

At the first step, we should call checkTextOfParagraph() indirectly so that we can implement a function to mimic checkTextOfParagraph() in non-SL or non-Lion platform.
Also, we should introduce a flag to choose a code path which calls checkTextOfParagraph() in non-SL or non-Lion platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475940</commentid>
    <comment_count>1</comment_count>
      <attachid>109258</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-09-30 00:00:14 -0700</bug_when>
    <thetext>Created attachment 109258
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475944</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-30 00:02:41 -0700</bug_when>
    <thetext>Attachment 109258 did not pass style-queue:

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

Source/WebCore/editing/TextCheckingHelper.h:98:  The parameter name &quot;client&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/editing/Editor.cpp:1892:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/editing/Editor.cpp:1980:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/editing/Editor.cpp:3238:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 4 in 9 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>475953</commentid>
    <comment_count>3</comment_count>
      <attachid>109258</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-09-30 00:08:22 -0700</bug_when>
    <thetext>Comment on attachment 109258
Patch

Attachment 109258 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9899334</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475955</commentid>
    <comment_count>4</comment_count>
      <attachid>109258</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-30 00:09:25 -0700</bug_when>
    <thetext>Comment on attachment 109258
Patch

Attachment 109258 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9888737</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475956</commentid>
    <comment_count>5</comment_count>
      <attachid>109258</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-30 00:12:36 -0700</bug_when>
    <thetext>Comment on attachment 109258
Patch

Attachment 109258 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9901303</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475957</commentid>
    <comment_count>6</comment_count>
      <attachid>109258</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-30 00:14:00 -0700</bug_when>
    <thetext>Comment on attachment 109258
Patch

Attachment 109258 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9899335</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475970</commentid>
    <comment_count>7</comment_count>
      <attachid>109263</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-09-30 01:20:11 -0700</bug_when>
    <thetext>Created attachment 109263
Test Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475972</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-30 01:23:32 -0700</bug_when>
    <thetext>Attachment 109263 did not pass style-queue:

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

Source/WebCore/editing/TextCheckingHelper.h:98:  The parameter name &quot;client&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/editing/Editor.cpp:1892:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/editing/Editor.cpp:1980:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/editing/Editor.cpp:3238:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 4 in 9 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>475975</commentid>
    <comment_count>9</comment_count>
      <attachid>109263</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-30 01:31:23 -0700</bug_when>
    <thetext>Comment on attachment 109263
Test Patch

Attachment 109263 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9898327</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475976</commentid>
    <comment_count>10</comment_count>
      <attachid>109263</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-09-30 01:32:07 -0700</bug_when>
    <thetext>Comment on attachment 109263
Test Patch

Attachment 109263 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9901320</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475988</commentid>
    <comment_count>11</comment_count>
      <attachid>109263</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-09-30 02:24:50 -0700</bug_when>
    <thetext>Comment on attachment 109263
Test Patch

Attachment 109263 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9900350</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475997</commentid>
    <comment_count>12</comment_count>
      <attachid>109263</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-09-30 02:48:32 -0700</bug_when>
    <thetext>Comment on attachment 109263
Test Patch

Attachment 109263 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9893601</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476003</commentid>
    <comment_count>13</comment_count>
      <attachid>109274</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-09-30 03:15:51 -0700</bug_when>
    <thetext>Created attachment 109274
Test Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476020</commentid>
    <comment_count>14</comment_count>
      <attachid>109280</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-09-30 04:16:15 -0700</bug_when>
    <thetext>Created attachment 109280
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476039</commentid>
    <comment_count>15</comment_count>
      <attachid>109286</attachid>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-09-30 05:23:46 -0700</bug_when>
    <thetext>Created attachment 109286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476755</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-10-02 21:15:36 -0700</bug_when>
    <thetext>Can we split this patch into smaller pieces?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476761</commentid>
    <comment_count>17</comment_count>
    <who name="Shinya Kawanaka">shinyak</who>
    <bug_when>2011-10-02 21:35:30 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Can we split this patch into smaller pieces?

Hmm...

Maybe we can split this patch into two patches:
1) introduces a wrapper function of TextClientChecker::checkTextOfParagraph(), and uses the wrapper instead of the original one.
2) removing static-#if statements by introducing unifiedTextCheckerEnabled.

Let me try.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>476778</commentid>
    <comment_count>18</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-10-02 22:28:28 -0700</bug_when>
    <thetext>&gt; Maybe we can split this patch into two patches:
&gt; 1) introduces a wrapper function of TextClientChecker::checkTextOfParagraph(), and uses the wrapper instead of the original one.
&gt; 2) removing static-#if statements by introducing unifiedTextCheckerEnabled.
&gt; 
&gt; Let me try.
Sounds nice. In that case, please create sub-bugs which depends on this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>500431</commentid>
    <comment_count>19</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-11-10 17:19:58 -0800</bug_when>
    <thetext>Closing this since dependent bugs are closed.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109258</attachid>
            <date>2011-09-30 00:00:14 -0700</date>
            <delta_ts>2011-09-30 01:19:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>69128.diff</filename>
            <type>text/plain</type>
            <size>36045</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwCmluZGV4IDkwZjNiZTIuLmU3ODU4OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNTAsNyArNTAsOSBA
QAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNp
bmNsdWRlICJSZW5kZXJlZFBvc2l0aW9uLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgorI2luY2x1ZGUgIlRleHRDaGVja2luZ0hlbHBlci5o
IgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAj
aW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgpAQCAtMjg4LDIwICsyOTAsMjAgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpoYXNNaXNzcGVsbGluZygpIGNvbnN0CiAgICAgY29uc3QgVUNoYXIq
IGNoYXJzID0gc3RyaW5nVmFsdWUoKS5jaGFyYWN0ZXJzKCk7CiAgICAgaW50IGNoYXJzTGVuZ3Ro
ID0gc3RyaW5nVmFsdWUoKS5sZW5ndGgoKTsKICAgICBib29sIGlzTWlzc3BlbGxlZCA9IGZhbHNl
OwotICAgIAotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICB0ZXh0Q2hlY2tlci0+Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoY2hhcnMsIGNoYXJzTGVuZ3RoLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3Vs
dHMpOwotICAgIGlmICghcmVzdWx0cy5pc0VtcHR5KCkpCi0gICAgICAgIGlzTWlzc3BlbGxlZCA9
IHRydWU7Ci0jZWxzZQotICAgIGludCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7Ci0gICAgaW50IG1p
c3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKLSAgICB0ZXh0Q2hlY2tlci0+Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKGNoYXJzLCBjaGFyc0xlbmd0aCwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVs
bGluZ0xlbmd0aCk7Ci0gICAgaWYgKG1pc3NwZWxsaW5nTGVuZ3RoIHx8IG1pc3NwZWxsaW5nTG9j
YXRpb24gIT0gLTEpCi0gICAgICAgIGlzTWlzc3BlbGxlZCA9IHRydWU7Ci0jZW5kaWYKLSAgICAK
KworICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKKyAgICAgICAgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgodGV4dENoZWNrZXIsIGNoYXJzLCBjaGFyc0xlbmd0aCwgVGV4dENoZWNraW5nVHlwZVNwZWxs
aW5nLCByZXN1bHRzKTsKKyAgICAgICAgaWYgKCFyZXN1bHRzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIGlzTWlzc3BlbGxlZCA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IG1pc3Nw
ZWxsaW5nTGVuZ3RoID0gMDsKKyAgICAgICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsK
KyAgICAgICAgdGV4dENoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjaGFycywgY2hhcnNM
ZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAg
ICBpZiAobWlzc3BlbGxpbmdMZW5ndGggfHwgbWlzc3BlbGxpbmdMb2NhdGlvbiAhPSAtMSkKKyAg
ICAgICAgICAgIGlzTWlzc3BlbGxlZCA9IHRydWU7CisgICAgfQorCiAgICAgcmV0dXJuIGlzTWlz
c3BlbGxlZDsKIH0KIApAQCAtMTM3Miw1ICsxMzc0LDE1IEBAIEFjY2Vzc2liaWxpdHlCdXR0b25T
dGF0ZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjaGVja2JveE9yUmFkaW9WYWx1ZSgpIGNvbnN0CiAg
ICAgCiAgICAgcmV0dXJuIEJ1dHRvblN0YXRlT2ZmOwogfQotICAgIAorCitib29sIEFjY2Vzc2li
bGVPYmplY3Q6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKQoreworICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkgeworICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRp
bmdzID0gZnJhbWUtPnNldHRpbmdzKCkpCisgICAgICAgICAgICByZXR1cm4gc2V0dGluZ3MtPnVu
aWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXggYWIxMzE2Ny4uZmY0NWEyMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmgKQEAgLTY3Miw3ICs2NzIsOSBAQCBwdWJsaWM6CiAgICAgLy8gYWxsb3dzIGZvciBhbiBBY2Nl
c3NpYmlsaXR5T2JqZWN0IHRvIHVwZGF0ZSBpdHMgcmVuZGVyIHRyZWUgb3IgcGVyZm9ybQogICAg
IC8vIG90aGVyIG9wZXJhdGlvbnMgdXBkYXRlIHR5cGUgb3BlcmF0aW9ucwogICAgIHZvaWQgdXBk
YXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgCisKKyAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVu
YWJsZWQoKTsKKwogcHJvdGVjdGVkOgogICAgIEFYSUQgbV9pZDsKICAgICBBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3IgbV9jaGlsZHJlbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyLm1tIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIu
bW0KaW5kZXggYWMyNWVlMC4uYjU5MWFlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIubW0KQEAgLTY4OCwzOCArNjg4LDM4IEBAIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5n
U2V0QmxvY2txdW90ZUxldmVsKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTCiAKIHN0
YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0U3BlbGxpbmcoTlNNdXRhYmxlQXR0cmlidXRl
ZFN0cmluZyogYXR0clN0cmluZywgTm9kZSogbm9kZSwgY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQg
Y2hhckxlbmd0aCwgTlNSYW5nZSByYW5nZSkKIHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNL
SU5HKQotICAgIC8vIENoZWNrIHRoZSBzcGVsbGluZyBkaXJlY3RseSBzaW5jZSBkb2N1bWVudC0+
bWFya2Vyc0Zvck5vZGUoKSBkb2VzIG5vdCBzdG9yZSB0aGUgbWlzc3BlbGxlZCBtYXJraW5nIHdo
ZW4gdGhlIGN1cnNvciBpcyBpbiBhIHdvcmQuCi0gICAgVGV4dENoZWNrZXJDbGllbnQqIGNoZWNr
ZXIgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dGV4dENoZWNrZXIoKTsK
LQotICAgIC8vIGNoZWNrVGV4dE9mUGFyYWdyYXBoIGlzIHRoZSBvbmx5IHNwZWxsaW5nL2dyYW1t
YXIgY2hlY2tlciBpbXBsZW1lbnRlZCBpbiBXSzEgYW5kIFdLMgotICAgIFZlY3RvcjxUZXh0Q2hl
Y2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hlY2tlci0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgo
Y2hhcnMsIGNoYXJMZW5ndGgsIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cyk7Ci0g
ICAgCi0gICAgc2l6ZV90IHNpemUgPSByZXN1bHRzLnNpemUoKTsKLSAgICBOU051bWJlciogdHJ1
ZVZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU107Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1
bHQmIHJlc3VsdCA9IHJlc3VsdHNbaV07Ci0gICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVt
YmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eU1pc3NwZWxsZWRUZXh0QXR0cmlidXRlLCB0
cnVlVmFsdWUsIE5TTWFrZVJhbmdlKHJlc3VsdC5sb2NhdGlvbiArIHJhbmdlLmxvY2F0aW9uLCBy
ZXN1bHQubGVuZ3RoKSk7Ci0gICAgfSAgICAKLSNlbHNlCi0gICAgaW50IGN1cnJlbnRQb3NpdGlv
biA9IDA7Ci0gICAgd2hpbGUgKGNoYXJMZW5ndGggPiAwKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFy
KiBjaGFyRGF0YSA9IGNoYXJzICsgY3VycmVudFBvc2l0aW9uOworICAgIGlmIChtX29iamVjdCAm
JiBtX29iamVjdC0+dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7CisgICAgICAgIC8vIENo
ZWNrIHRoZSBzcGVsbGluZyBkaXJlY3RseSBzaW5jZSBkb2N1bWVudC0+bWFya2Vyc0Zvck5vZGUo
KSBkb2VzIG5vdCBzdG9yZSB0aGUgbWlzc3BlbGxlZCBtYXJraW5nIHdoZW4gdGhlIGN1cnNvciBp
cyBpbiBhIHdvcmQuCiAgICAgICAgIFRleHRDaGVja2VyQ2xpZW50KiBjaGVja2VyID0gbm9kZS0+
ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnRleHRDaGVja2VyKCk7CisKKyAgICAgICAg
Ly8gY2hlY2tUZXh0T2ZQYXJhZ3JhcGggaXMgdGhlIG9ubHkgc3BlbGxpbmcvZ3JhbW1hciBjaGVj
a2VyIGltcGxlbWVudGVkIGluIFdLMSBhbmQgV0syCisgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tp
bmdSZXN1bHQ+IHJlc3VsdHM7CisgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKGNoZWNrZXIs
IGNoYXJzLCBjaGFyTGVuZ3RoLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMpOwor
ICAgIAorICAgICAgICBzaXplX3Qgc2l6ZSA9IHJlc3VsdHMuc2l6ZSgpOworICAgICAgICBOU051
bWJlciogdHJ1ZVZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU107CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGNvbnN0
IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0ID0gcmVzdWx0c1tpXTsKKyAgICAgICAgICAgIEFY
QXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eU1pc3Nw
ZWxsZWRUZXh0QXR0cmlidXRlLCB0cnVlVmFsdWUsIE5TTWFrZVJhbmdlKHJlc3VsdC5sb2NhdGlv
biArIHJhbmdlLmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKSk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBpbnQgY3VycmVudFBvc2l0aW9uID0gMDsKKyAgICAgICAgd2hpbGUgKGNo
YXJMZW5ndGggPiAwKSB7CisgICAgICAgICAgICBjb25zdCBVQ2hhciogY2hhckRhdGEgPSBjaGFy
cyArIGN1cnJlbnRQb3NpdGlvbjsKKyAgICAgICAgICAgIFRleHRDaGVja2VyQ2xpZW50KiBjaGVj
a2VyID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCktPnRleHRDaGVja2VyKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7
CisgICAgICAgICAgICBpbnQgbWlzc3BlbGxpbmdMZW5ndGggPSAwOworICAgICAgICAgICAgY2hl
Y2tlci0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNoYXJEYXRhLCBjaGFyTGVuZ3RoLCAmbWlzc3Bl
bGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgIGlmIChtaXNz
cGVsbGluZ0xvY2F0aW9uID09IC0xIHx8ICFtaXNzcGVsbGluZ0xlbmd0aCkKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAgIGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0g
LTE7Ci0gICAgICAgIGludCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7Ci0gICAgICAgIGNoZWNrZXIt
PmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjaGFyRGF0YSwgY2hhckxlbmd0aCwgJm1pc3NwZWxsaW5n
TG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgICAgIGlmIChtaXNzcGVsbGluZ0xv
Y2F0aW9uID09IC0xIHx8ICFtaXNzcGVsbGluZ0xlbmd0aCkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAKLSAgICAgICAgTlNSYW5nZSBzcGVsbFJhbmdlID0gTlNNYWtlUmFuZ2UocmFuZ2Uu
bG9jYXRpb24gKyBjdXJyZW50UG9zaXRpb24gKyBtaXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVs
bGluZ0xlbmd0aCk7Ci0gICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJp
bmcsIE5TQWNjZXNzaWJpbGl0eU1pc3NwZWxsZWRUZXh0QXR0cmlidXRlLCBbTlNOdW1iZXIgbnVt
YmVyV2l0aEJvb2w6WUVTXSwgc3BlbGxSYW5nZSk7Ci0gICAgICAgIGNoYXJMZW5ndGggLT0gKG1p
c3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgICAgIGN1cnJlbnRQ
b3NpdGlvbiArPSAobWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAg
ICAgICAgICAgIE5TUmFuZ2Ugc3BlbGxSYW5nZSA9IE5TTWFrZVJhbmdlKHJhbmdlLmxvY2F0aW9u
ICsgY3VycmVudFBvc2l0aW9uICsgbWlzc3BlbGxpbmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5n
dGgpOworICAgICAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywg
TlNBY2Nlc3NpYmlsaXR5TWlzc3BlbGxlZFRleHRBdHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJX
aXRoQm9vbDpZRVNdLCBzcGVsbFJhbmdlKTsKKyAgICAgICAgICAgIGNoYXJMZW5ndGggLT0gKG1p
c3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgICAgICBjdXJy
ZW50UG9zaXRpb24gKz0gKG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCk7
CisgICAgICAgIH0KICAgICB9Ci0jZW5kaWYgICAgCiB9CiAKIHN0YXRpYyB2b2lkIEFYQXR0cmli
dXRlU3RyaW5nU2V0SGVhZGluZ0xldmVsKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJT
dHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVyZXIsIE5TUmFuZ2UgcmFuZ2UpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAKaW5kZXggMzBjNzc1NS4uZjU4MjlhZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmNwcApAQCAtMTcyNSw0NSArMTcyNSwxMSBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRv
TmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgU3RyaW5nIGJh
ZEdyYW1tYXJQaHJhc2U7CiAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkOwogCi0jaWYgVVNFKFVO
SUZJRURfVEVYVF9DSEVDS0lORykKLSAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1Nl
YXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKICAgICBib29sIGlzU3BlbGxpbmcgPSB0cnVlOwog
ICAgIGludCBmb3VuZE9mZnNldCA9IDA7Ci0gICAgU3RyaW5nIGZvdW5kSXRlbSA9IFRleHRDaGVj
a2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3Bl
bGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcs
IGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKLSAgICBpZiAoaXNTcGVsbGluZykgewotICAg
ICAgICBtaXNzcGVsbGVkV29yZCA9IGZvdW5kSXRlbTsKLSAgICAgICAgbWlzc3BlbGxpbmdPZmZz
ZXQgPSBmb3VuZE9mZnNldDsKLSAgICB9IGVsc2UgewotICAgICAgICBiYWRHcmFtbWFyUGhyYXNl
ID0gZm91bmRJdGVtOwotICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZm91bmRPZmZzZXQ7
Ci0gICAgfQotI2Vsc2UKKyAgICBTdHJpbmcgZm91bmRJdGVtOwogICAgIFJlZlB0cjxSYW5nZT4g
Zmlyc3RNaXNzcGVsbGluZ1JhbmdlOwotICAgIG1pc3NwZWxsZWRXb3JkID0gVGV4dENoZWNraW5n
SGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGlu
ZyhtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci0KLSNp
ZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKLSAgICAvLyBTZWFyY2ggZm9yIGJhZCBncmFtbWFyIHRo
YXQgb2NjdXJzIHByaW9yIHRvIHRoZSBuZXh0IG1pc3NwZWxsZWQgd29yZCAoaWYgYW55KQotICAg
IGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMp
OwotICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFN0b3Ag
bG9va2luZyBhdCBzdGFydCBvZiBuZXh0IG1pc3NwZWxsZWQgd29yZAotICAgICAgICBDaGFyYWN0
ZXJJdGVyYXRvciBjaGFycyhncmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCkpOwotICAgICAgICBjaGFy
cy5hZHZhbmNlKG1pc3NwZWxsaW5nT2Zmc2V0KTsKLSAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdl
LT5zZXRFbmQoY2hhcnMucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZWMpLCBjaGFycy5yYW5nZSgp
LT5zdGFydE9mZnNldChlYyksIGVjKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzR3JhbW1hckNo
ZWNraW5nRW5hYmxlZCgpKQotICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gVGV4dENoZWNraW5n
SGVscGVyKGNsaWVudCgpLCBncmFtbWFyU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIo
Z3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOwotI2VuZGlmCi0jZW5k
aWYKLSAgICAKLSAgICAvLyBJZiB3ZSBmb3VuZCBuZWl0aGVyIGJhZCBncmFtbWFyIG5vciBhIG1p
c3NwZWxsZWQgd29yZCwgd3JhcCBhbmQgdHJ5IGFnYWluIChidXQgZG9uJ3QgYm90aGVyIGlmIHdl
IHN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKLSAgICAvLyBibG9jayByYXRoZXIgdGhh
biBhdCBhIHNlbGVjdGlvbikuCi0gICAgaWYgKHN0YXJ0ZWRXaXRoU2VsZWN0aW9uICYmICFtaXNz
cGVsbGVkV29yZCAmJiAhYmFkR3JhbW1hclBocmFzZSkgewotICAgICAgICBzcGVsbGluZ1NlYXJj
aFJhbmdlLT5zZXRTdGFydCh0b3BOb2RlLCAwLCBlYyk7Ci0gICAgICAgIC8vIGdvaW5nIHVudGls
IHRoZSBlbmQgb2YgdGhlIHZlcnkgZmlyc3QgY2h1bmsgd2UgdGVzdGVkIGlzIGZhciBlbm91Z2gK
LSAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5kKHNlYXJjaEVuZE5vZGVBZnRlcldy
YXAsIHNlYXJjaEVuZE9mZnNldEFmdGVyV3JhcCwgZWMpOwotICAgICAgICAKLSNpZiBVU0UoVU5J
RklFRF9URVhUX0NIRUNLSU5HKQorICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkp
IHsKICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xv
bmVSYW5nZShlYyk7CiAgICAgICAgIGZvdW5kSXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcihjbGll
bnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1t
YXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBn
cmFtbWFyRGV0YWlsKTsKICAgICAgICAgaWYgKGlzU3BlbGxpbmcpIHsKQEAgLTE3NzMsMTAgKzE3
MzksMTEgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0
QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9IGZvdW5kSXRl
bTsKICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNldDsKICAgICAg
ICAgfQotI2Vsc2UKKyAgICB9IGVsc2UgewogICAgICAgICBtaXNzcGVsbGVkV29yZCA9IFRleHRD
aGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlz
c3BlbGxpbmcobWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2Up
OwogCiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCisgICAgICAgIC8vIFNlYXJjaCBmb3IgYmFk
IGdyYW1tYXIgdGhhdCBvY2N1cnMgcHJpb3IgdG8gdGhlIG5leHQgbWlzc3BlbGxlZCB3b3JkIChp
ZiBhbnkpCiAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2Ut
PmNsb25lUmFuZ2UoZWMpOwogICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSkg
ewogICAgICAgICAgICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9mIG5leHQgbWlzc3BlbGxl
ZCB3b3JkCkBAIC0xNzg0LDExICsxNzUxLDQ1IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0
TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgICAgIGNoYXJz
LmFkdmFuY2UobWlzc3BlbGxpbmdPZmZzZXQpOwogICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJh
bmdlLT5zZXRFbmQoY2hhcnMucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZWMpLCBjaGFycy5yYW5n
ZSgpLT5zdGFydE9mZnNldChlYyksIGVjKTsKICAgICAgICAgfQotCisgICAgCiAgICAgICAgIGlm
IChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJh
c2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIGdyYW1tYXJTZWFyY2hSYW5nZSkuZmlu
ZEZpcnN0QmFkR3JhbW1hcihncmFtbWFyRGV0YWlsLCBncmFtbWFyUGhyYXNlT2Zmc2V0LCBmYWxz
ZSk7CiAjZW5kaWYKKyAgICB9CisgICAgCisgICAgLy8gSWYgd2UgZm91bmQgbmVpdGhlciBiYWQg
Z3JhbW1hciBub3IgYSBtaXNzcGVsbGVkIHdvcmQsIHdyYXAgYW5kIHRyeSBhZ2FpbiAoYnV0IGRv
bid0IGJvdGhlciBpZiB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICAgLy8g
YmxvY2sgcmF0aGVyIHRoYW4gYXQgYSBzZWxlY3Rpb24pLgorICAgIGlmIChzdGFydGVkV2l0aFNl
bGVjdGlvbiAmJiAhbWlzc3BlbGxlZFdvcmQgJiYgIWJhZEdyYW1tYXJQaHJhc2UpIHsKKyAgICAg
ICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQodG9wTm9kZSwgMCwgZWMpOworICAgICAg
ICAvLyBnb2luZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSB2ZXJ5IGZpcnN0IGNodW5rIHdlIHRlc3Rl
ZCBpcyBmYXIgZW5vdWdoCisgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZChzZWFy
Y2hFbmROb2RlQWZ0ZXJXcmFwLCBzZWFyY2hFbmRPZmZzZXRBZnRlcldyYXAsIGVjKTsKKyAgICAg
ICAgCisgICAgICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKKyAgICAgICAg
ICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2Uo
ZWMpOworICAgICAgICAgICAgZm91bmRJdGVtID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgp
LCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgaXNTcGVsbGluZywgZm91bmRPZmZzZXQsIGdyYW1t
YXJEZXRhaWwpOworICAgICAgICAgICAgaWYgKGlzU3BlbGxpbmcpIHsKKyAgICAgICAgICAgICAg
ICBtaXNzcGVsbGVkV29yZCA9IGZvdW5kSXRlbTsKKyAgICAgICAgICAgICAgICBtaXNzcGVsbGlu
Z09mZnNldCA9IGZvdW5kT2Zmc2V0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICBiYWRHcmFtbWFyUGhyYXNlID0gZm91bmRJdGVtOworICAgICAgICAgICAgICAgIGdyYW1t
YXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gVGV4dENoZWNraW5nSGVscGVyKGNs
aWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGluZyhtaXNzcGVs
bGluZ09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisKKyNpZiBVU0UoR1JB
TU1BUl9DSEVDS0lORykKKyAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5n
U2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOworICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGVk
V29yZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBTdG9wIGxvb2tpbmcgYXQgc3Rh
cnQgb2YgbmV4dCBtaXNzcGVsbGVkIHdvcmQKKyAgICAgICAgICAgICAgICBDaGFyYWN0ZXJJdGVy
YXRvciBjaGFycyhncmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgICAgIGNo
YXJzLmFkdmFuY2UobWlzc3BlbGxpbmdPZmZzZXQpOworICAgICAgICAgICAgICAgIGdyYW1tYXJT
ZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKGVjKSwgY2hh
cnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoZWMpLCBlYyk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBi
YWRHcmFtbWFyUGhyYXNlID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBncmFtbWFyU2Vh
cmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFz
ZU9mZnNldCwgZmFsc2UpOwogI2VuZGlmCisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYg
KCFiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkgewpAQCAtMTg4OCwyNCArMTg4OSwyNCBAQCBW
ZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCkKIAog
VmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNh
bFNlbGVjdGlvbihib29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKQogewotI2lm
IFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZy
YW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghcmFuZ2Up
Ci0gICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwotICAgIHJldHVybiBUZXh0Q2hlY2tp
bmdIZWxwZXIoY2xpZW50KCksIHJhbmdlKS5ndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0
aWNhbFJhbmdlKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBtaXNzcGVsbGVkLCB1bmdyYW1t
YXRpY2FsKTsKLSNlbHNlCi0gICAgbWlzc3BlbGxlZCA9IGlzU2VsZWN0aW9uTWlzc3BlbGxlZCgp
OwotICAgIGlmIChtaXNzcGVsbGVkKSB7CisgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQoKSkgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+c2VsZWN0aW9u
KCktPnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIGlmICghcmFuZ2UpCisgICAgICAgICAg
ICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hl
bHBlcihjbGllbnQoKSwgcmFuZ2UpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2Fs
UmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1hdGlj
YWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1pc3NwZWxsZWQgPSBpc1NlbGVjdGlvbk1pc3Nw
ZWxsZWQoKTsKKyAgICAgICAgaWYgKG1pc3NwZWxsZWQpIHsKKyAgICAgICAgICAgIHVuZ3JhbW1h
dGljYWwgPSBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBndWVzc2VzRm9yTWlzc3BlbGxlZFNl
bGVjdGlvbigpOworICAgICAgICB9CisgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJs
ZWQoKSAmJiBpc1NlbGVjdGlvblVuZ3JhbW1hdGljYWwoKSkgeworICAgICAgICAgICAgdW5ncmFt
bWF0aWNhbCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gZ3Vlc3Nlc0ZvclVuZ3JhbW1hdGlj
YWxTZWxlY3Rpb24oKTsKKyAgICAgICAgfQogICAgICAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7
Ci0gICAgICAgIHJldHVybiBndWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigpOwotICAgIH0K
LSAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkgJiYgaXNTZWxlY3Rpb25VbmdyYW1t
YXRpY2FsKCkpIHsKLSAgICAgICAgdW5ncmFtbWF0aWNhbCA9IHRydWU7Ci0gICAgICAgIHJldHVy
biBndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbigpOworICAgICAgICByZXR1cm4gVmVj
dG9yPFN0cmluZz4oKTsKICAgICB9Ci0gICAgdW5ncmFtbWF0aWNhbCA9IGZhbHNlOwotICAgIHJl
dHVybiBWZWN0b3I8U3RyaW5nPigpOwotI2VuZGlmCiB9CiAKIHZvaWQgRWRpdG9yOjpzaG93U3Bl
bGxpbmdHdWVzc1BhbmVsKCkKQEAgLTE5NDcsODAgKzE5NDgsNzcgQEAgdm9pZCBFZGl0b3I6Om1h
cmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24gJm1vdmlu
Z1NlbGVjdGkKIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29y
ZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRTdGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcsIGJvb2wgZG9SZXBsYWNlbWVudCkKIHsKLSNpZiBVU0Uo
VU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5UGVu
ZGluZ0NvcnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOworICAgIGlmICh1bmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkKCkpIHsKKyAgICAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlQ
ZW5kaW5nQ29ycmVjdGlvbihzZWxlY3Rpb25BZnRlclR5cGluZyk7CiAKLSAgICBUZXh0Q2hlY2tp
bmdUeXBlTWFzayB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gMDsKKyAgICAgICAgVGV4dENoZWNraW5n
VHlwZU1hc2sgdGV4dENoZWNraW5nT3B0aW9ucyA9IDA7CiAKLSAgICBpZiAoaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBU
ZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7CisgICAgICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENo
ZWNraW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0
Q2hlY2tpbmdUeXBlU3BlbGxpbmc7CiAKICNpZiBVU0UoQVVUT01BVElDX1RFWFRfUkVQTEFDRU1F
TlQpCi0gICAgaWYgKGRvUmVwbGFjZW1lbnQgCi0gICAgICAgICYmIChpc0F1dG9tYXRpY1F1b3Rl
U3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICAgICB8fCBpc0F1dG9tYXRpY0xpbmtEZXRl
Y3Rpb25FbmFibGVkKCkKLSAgICAgICAgICAgIHx8IGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlv
bkVuYWJsZWQoKQotICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFi
bGVkKCkKLSAgICAgICAgICAgIHx8ICgodGV4dENoZWNraW5nT3B0aW9ucyAmIFRleHRDaGVja2lu
Z1R5cGVTcGVsbGluZykgJiYgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkp
KSkKLSAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdUeXBlUmVwbGFj
ZW1lbnQ7CisgICAgICAgIGlmIChkb1JlcGxhY2VtZW50IAorICAgICAgICAgICAgJiYgKGlzQXV0
b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgICAgICAgICB8fCBpc0F1
dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKKyAgICAgICAgICAgICAgICB8fCBpc0F1dG9t
YXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkKKyAgICAgICAgICAgICAgICB8fCBpc0F1dG9t
YXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKQorICAgICAgICAgICAgICAgIHx8ICgodGV4dENo
ZWNraW5nT3B0aW9ucyAmIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZykgJiYgaXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpKSkKKyAgICAgICAgICAgIHRleHRDaGVja2luZ09w
dGlvbnMgfD0gVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50OwogI2VuZGlmCi0gICAgaWYgKCF0
ZXh0Q2hlY2tpbmdPcHRpb25zICYgKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVj
a2luZ1R5cGVSZXBsYWNlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChpc0dyYW1t
YXJDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0
Q2hlY2tpbmdUeXBlR3JhbW1hcjsKKyAgICAgICAgaWYgKCF0ZXh0Q2hlY2tpbmdPcHRpb25zICYg
KFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCkp
CisgICAgICAgICAgICByZXR1cm47CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29y
ZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9u
Qm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsK
LSAgICBpZiAodGV4dENoZWNraW5nT3B0aW9ucyAmIFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSB7
Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0ZWRTZW50ZW5jZSA9IFZpc2libGVTZWxl
Y3Rpb24oc3RhcnRPZlNlbnRlbmNlKHdvcmRTdGFydCksIGVuZE9mU2VudGVuY2Uod29yZFN0YXJ0
KSk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4
dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
LCBzZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4
dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
LCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwotICAgIH0KKyAgICAg
ICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgdGV4dENoZWNr
aW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcjsKIAotI2Vsc2UKLSAgICBVTlVT
RURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcpOwotICAgIFVOVVNFRF9QQVJBTShkb1JlcGxh
Y2VtZW50KTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJs
ZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwg
ZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CisgICAgICAgIGlm
ICh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpIHsKKyAgICAg
ICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0ZWRTZW50ZW5jZSA9IFZpc2libGVTZWxlY3Rp
b24oc3RhcnRPZlNlbnRlbmNlKHdvcmRTdGFydCksIGVuZE9mU2VudGVuY2Uod29yZFN0YXJ0KSk7
CisgICAgICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRl
eHRDaGVja2luZ09wdGlvbnMsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQo
KSwgc2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5S
YW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAg
ICAgICB9CiAKLSAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCi0g
ICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoIWlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAvLyBDaGVj
ayBzcGVsbGluZyBvZiBvbmUgd29yZAotICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5n
ZTsKLSAgICBtYXJrTWlzc3BlbGxpbmdzKFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQod29y
ZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3JkU3RhcnQsIFJpZ2h0
V29yZElmT25Cb3VuZGFyeSkpLCBtaXNzcGVsbGluZ1JhbmdlKTsKKyAgICAgICAgLy8gQ2hlY2sg
c3BlbGxpbmcgb2Ygb25lIHdvcmQKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1Jh
bmdlOworICAgICAgICBtYXJrTWlzc3BlbGxpbmdzKFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldv
cmQod29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3JkU3RhcnQs
IFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpLCBtaXNzcGVsbGluZ1JhbmdlKTsKIAotICAgIC8vIEF1
dG9jb3JyZWN0IHRoZSBtaXNzcGVsbGVkIHdvcmQuCi0gICAgaWYgKCFtaXNzcGVsbGluZ1Jhbmdl
KQotICAgICAgICByZXR1cm47CisgICAgICAgIC8vIEF1dG9jb3JyZWN0IHRoZSBtaXNzcGVsbGVk
IHdvcmQuCisgICAgICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKKyAgICAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICAvLyBHZXQgdGhlIG1pc3NwZWxsZWQgd29yZC4KLSAgICBjb25zdCBTdHJp
bmcgbWlzc3BlbGxlZFdvcmQgPSBwbGFpblRleHQobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSk7Ci0g
ICAgU3RyaW5nIGF1dG9jb3JyZWN0ZWRTdHJpbmcgPSB0ZXh0Q2hlY2tlcigpLT5nZXRBdXRvQ29y
cmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7Ci0KLSAgICAv
LyBJZiBhdXRvY29ycmVjdGVkIHdvcmQgaXMgbm9uIGVtcHR5LCByZXBsYWNlIHRoZSBtaXNzcGVs
bGVkIHdvcmQgYnkgdGhpcyB3b3JkLgotICAgIGlmICghYXV0b2NvcnJlY3RlZFN0cmluZy5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24obWlzc3BlbGxp
bmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSk7Ci0gICAgICAgIGlmIChuZXdTZWxlY3Rpb24gIT0g
ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICBpZiAoIWZy
YW1lKCktPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkK
KyAgICAgICAgLy8gR2V0IHRoZSBtaXNzcGVsbGVkIHdvcmQuCisgICAgICAgIGNvbnN0IFN0cmlu
ZyBtaXNzcGVsbGVkV29yZCA9IHBsYWluVGV4dChtaXNzcGVsbGluZ1JhbmdlLmdldCgpKTsKKyAg
ICAgICAgU3RyaW5nIGF1dG9jb3JyZWN0ZWRTdHJpbmcgPSB0ZXh0Q2hlY2tlcigpLT5nZXRBdXRv
Q29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29yZChtaXNzcGVsbGVkV29yZCk7CisKKyAg
ICAgICAgLy8gSWYgYXV0b2NvcnJlY3RlZCB3b3JkIGlzIG5vbiBlbXB0eSwgcmVwbGFjZSB0aGUg
bWlzc3BlbGxlZCB3b3JkIGJ5IHRoaXMgd29yZC4KKyAgICAgICAgaWYgKCFhdXRvY29ycmVjdGVk
U3RyaW5nLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxl
Y3Rpb24obWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICBp
ZiAobmV3U2VsZWN0aW9uICE9IGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSkgewor
ICAgICAgICAgICAgICAgIGlmICghZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNl
bGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rp
b24pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIWZyYW1lKCktPmVkaXRvcigp
LT5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2Uu
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkKICAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVj
dGlvbik7CisgICAgICAgICAgICBmcmFtZSgpLT5lZGl0b3IoKS0+cmVwbGFjZVNlbGVjdGlvbldp
dGhUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIGZhbHNlLCBmYWxzZSk7CisKKyAgICAgICAgICAg
IC8vIFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3RlciBmdXJ0aGVyLgorICAgICAgICAgICAg
ZnJhbWUoKS0+c2VsZWN0aW9uKCktPm1vdmVUbyhmcmFtZSgpLT5zZWxlY3Rpb24oKS0+ZW5kKCkp
OworICAgICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlv
bjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5
KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICghZnJhbWUoKS0+ZWRpdG9yKCktPnNob3VsZElu
c2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRWRp
dG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQorICAgICAgICBpZiAoIWlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBmcmFtZSgpLT5lZGl0b3IoKS0+
cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIGZhbHNlLCBmYWxz
ZSk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdGhlIGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIu
Ci0gICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5tb3ZlVG8oZnJhbWUoKS0+c2VsZWN0aW9u
KCktPmVuZCgpKTsKLSAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNl
bGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51
bGFyaXR5KTsKLSAgICB9Ci0KLSAgICBpZiAoIWlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQot
ICAgICAgICByZXR1cm47CiAgICAgCi0gICAgLy8gQ2hlY2sgZ3JhbW1hciBvZiBlbnRpcmUgc2Vu
dGVuY2UKLSAgICBtYXJrQmFkR3JhbW1hcihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5j
ZSh3b3JkU3RhcnQpLCBlbmRPZlNlbnRlbmNlKHdvcmRTdGFydCkpKTsKLSNlbmRpZgorICAgICAg
ICAvLyBDaGVjayBncmFtbWFyIG9mIGVudGlyZSBzZW50ZW5jZQorICAgICAgICBtYXJrQmFkR3Jh
bW1hcihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZSh3b3JkU3RhcnQpLCBlbmRPZlNl
bnRlbmNlKHdvcmRTdGFydCkpKTsKKyAgICB9CiB9CiAgICAgCiB2b2lkIEVkaXRvcjo6bWFya01p
c3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24s
IGJvb2wgY2hlY2tTcGVsbGluZywgUmVmUHRyPFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1Jhbmdl
KQpAQCAtMjA4OCw3ICsyMDg2LDExIEBAIHZvaWQgRWRpdG9yOjptYXJrQmFkR3JhbW1hcihjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pCiAKIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlz
c3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRD
aGVja2luZ09wdGlvbnMsIFJhbmdlKiBzcGVsbGluZ1JhbmdlLCBSYW5nZSogZ3JhbW1hclJhbmdl
KQogewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCisgICAgaWYgKCF1bmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgcGVuZGluZyBh
dXRvY29ycmVjdGlvbiBhdCB0aGlzIG1vbWVudC4KICAgICBBU1NFUlQoIW1fc3BlbGxpbmdDb3Jy
ZWN0b3ItPmhhc1BlbmRpbmdDb3JyZWN0aW9uKCkpOwogCkBAIC0yMTQyLDEyICsyMTQ0LDExIEBA
IHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRl
eHRDaGVja2luZ1R5cGVNYXNrIHRleHRDCiAKICAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0
PiByZXN1bHRzOwogICAgIGlmIChzaG91bGRNYXJrR3JhbW1hcikKLSAgICAgICAgdGV4dENoZWNr
ZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoZ3JhbW1hclBhcmFncmFwaC50ZXh0Q2hhcmFjdGVy
cygpLCBncmFtbWFyUGFyYWdyYXBoLnRleHRMZW5ndGgoKSwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayh0ZXh0
Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7CisgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBo
KHRleHRDaGVja2VyKCksIGdyYW1tYXJQYXJhZ3JhcGgudGV4dENoYXJhY3RlcnMoKSwgZ3JhbW1h
clBhcmFncmFwaC50ZXh0TGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
c29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7
CiAgICAgZWxzZQotICAgICAgICB0ZXh0Q2hlY2tlcigpLT5jaGVja1RleHRPZlBhcmFncmFwaChz
cGVsbGluZ1BhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygpLCBzcGVsbGluZ1BhcmFncmFwaC50ZXh0
TGVuZ3RoKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyksIHJlc3VsdHMp
OwotICAgICAgICAKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgodGV4dENoZWNrZXIoKSwg
c3BlbGxpbmdQYXJhZ3JhcGgudGV4dENoYXJhY3RlcnMoKSwgc3BlbGxpbmdQYXJhZ3JhcGgudGV4
dExlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlVGV4dENoZWNr
aW5nVHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyksIHJlc3VsdHMpOwogCiAgICAgLy8gSWYg
dGhpcyBjaGVja2luZyBpcyBvbmx5IGZvciBzaG93aW5nIGNvcnJlY3Rpb24gcGFuZWwsIHdlIHNo
b3VsZG4ndCBib3RoZXIgdG8gbWFyayBtaXNzcGVsbGluZ3MuCiAgICAgaWYgKHNob3VsZFNob3dD
b3JyZWN0aW9uUGFuZWwpCkBAIC0yMjc5LDE3ICsyMjgwLDE1IEBAIHZvaWQgRWRpdG9yOjptYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ1R5cGVNYXNr
IHRleHRDCiAgICAgICAgICAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2Vs
ZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVs
YXJpdHkpOwogICAgICAgICB9CiAgICAgfQotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICBVTlVTRURfUEFSQU0odGV4dENoZWNraW5nT3B0aW9ucyk7Ci0gICAgVU5VU0VEX1BB
UkFNKHNwZWxsaW5nUmFuZ2UpOwotICAgIFVOVVNFRF9QQVJBTShncmFtbWFyUmFuZ2UpOwotI2Vu
ZGlmIC8vIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiB9CiAKIHZvaWQgRWRpdG9yOjpjaGFu
Z2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogewot
I2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCisgICAgaWYgKCF1bmlmaWVkVGV4dENoZWNr
ZXJFbmFibGVkKCkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKICAgICBpZiAocmVwbGFjZWRTdHJpbmcuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKQEAgLTIzMDMsMjggKzIzMDIsMjQgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZUJh
Y2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJpbmcpCiAgICAgUmVm
UHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UgPSBwYXJhZ3JhcGguc3VicmFuZ2UocGFyYWdyYXBoLmNo
ZWNraW5nU3RhcnQoKSwgcmVwbGFjZWRTdHJpbmcubGVuZ3RoKCkpOwogICAgIGNoYW5nZWRSYW5n
ZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hh
bmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtlcjo6UmVwbGFjZW1lbnQsIFN0cmluZygpKTsK
ICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5tYXJrUmV2ZXJzZWQoY2hhbmdlZFJhbmdlLmdldCgp
KTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgVU5VU0VEX1BBUkFNKHJl
cGxhY2VkU3RyaW5nKTsKLSNlbmRpZiAvLyBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogfQog
CiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNp
YmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjdGlvbiwgYm9vbCBtYXJrR3JhbW1hciwgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgZ3JhbW1hclNlbGVjdGlvbikKIHsKLSNpZiBVU0UoVU5JRklFRF9U
RVhUX0NIRUNLSU5HKQotICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuOwotICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRDaGVja2lu
Z09wdGlvbnMgPSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlQ29y
cmVjdGlvbjsKLSAgICBpZiAobWFya0dyYW1tYXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KCkpCi0gICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMgfD0gVGV4dENoZWNraW5nVHlwZUdyYW1t
YXI7Ci0gICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hl
Y2tpbmdPcHRpb25zLCBzcGVsbGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgp
LCBncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwotI2Vsc2UKLSAg
ICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsKLSAgICBtYXJrTWlzc3BlbGxp
bmdzKHNwZWxsaW5nU2VsZWN0aW9uLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwotICAgIGlmICht
YXJrR3JhbW1hcikKLSAgICAgICAgbWFya0JhZEdyYW1tYXIoZ3JhbW1hclNlbGVjdGlvbik7Ci0j
ZW5kaWYKKyAgICBpZiAodW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7CisgICAgICAgIGlm
ICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgdGV4dENoZWNraW5nT3B0aW9ucyA9IFRl
eHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVDb3JyZWN0aW9uOworICAg
ICAgICBpZiAobWFya0dyYW1tYXIgJiYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCisgICAg
ICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyOwor
ICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVj
a2luZ09wdGlvbnMsIHNwZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCks
IGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7CisgICAgICAg
IG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZpcnN0TWlzc3BlbGxpbmdSYW5n
ZSk7CisgICAgICAgIGlmIChtYXJrR3JhbW1hcikKKyAgICAgICAgICAgIG1hcmtCYWRHcmFtbWFy
KGdyYW1tYXJTZWxlY3Rpb24pOworICAgIH0KIH0KIAogdm9pZCBFZGl0b3I6OnVuYXBwbGllZFNw
ZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3Rl
ZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKQEAg
LTMyMzYsNCArMzIzMSwxMyBAQCB2b2lkIEVkaXRvcjo6ZGV2aWNlU2NhbGVGYWN0b3JDaGFuZ2Vk
KCkKICAgICBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xsZXItPmRldmljZVNjYWxlRmFjdG9yQ2hhbmdl
ZCgpOwogfQogCitib29sIEVkaXRvcjo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0
Cit7CisgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IG1fZnJhbWUtPnNldHRpbmdzKCkpIHsK
KyAgICAgICAgcmV0dXJuIHNldHRpbmdzLT51bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCk7Cisg
ICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCBiZGI5OGFmLi45ZTFjMjVjIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmgKQEAgLTQyMiw2ICs0MjIsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2hhbmdl
U2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlv
biwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBjbGVhclR5cGluZ1N0eWxlKTsKIAogICAgIE5vZGUq
IGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24oKSBjb25zdDsKKworICAgIGJvb2wgdW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OwogfTsKIAogaW5saW5lIHZvaWQgRWRpdG9yOjpz
ZXRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UoYm9vbCBmbGFnKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4IDBiZGZiZDguLjYxMTFkOTkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTI5
LDcgKzI5LDkgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRN
YXJrZXJDb250cm9sbGVyLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJSYW5nZS5o
IgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIK
ICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIK
QEAgLTE1NSw5ICsxNTcsMTcgQEAgaW50IFRleHRDaGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdM
ZW5ndGgoKSBjb25zdAogVGV4dENoZWNraW5nSGVscGVyOjpUZXh0Q2hlY2tpbmdIZWxwZXIoRWRp
dG9yQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8UmFuZ2U+IHJhbmdlKQogICAgIDogbV9jbGll
bnQoY2xpZW50KQogICAgICwgbV9yYW5nZShyYW5nZSkKKyAgICAsIG1fdW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZChmYWxzZSkKIHsKICAgICBBU1NFUlRfQVJHKG1fY2xpZW50LCBtX2NsaWVudCk7
CiAgICAgQVNTRVJUX0FSRyhtX3JhbmdlLCBtX3JhbmdlKTsKKworICAgIGlmIChtX3JhbmdlKSB7
CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBtX3JhbmdlLT5vd25lckRvY3VtZW50KCktPmZy
YW1lKCkpIHsKKyAgICAgICAgICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0
dGluZ3MoKSkKKyAgICAgICAgICAgICAgICBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQgPSBz
ZXR0aW5ncy0+dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpOworICAgICAgICB9CisgICAgfQog
fQogCiBUZXh0Q2hlY2tpbmdIZWxwZXI6On5UZXh0Q2hlY2tpbmdIZWxwZXIoKQpAQCAtMjI1LDEy
ICsyMzUsMTYgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxp
bmcoaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0LCBib28KIAogU3RyaW5nIFRleHRDaGVja2lu
Z0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1t
YXIsIGJvb2wmIG91dElzU3BlbGxpbmcsIGludCYgb3V0Rmlyc3RGb3VuZE9mZnNldCwgR3JhbW1h
ckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCkKIHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNL
SU5HKQorICAgIGlmICghbV91bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gIiI7CisgICAgfQorCiAgICAgU3Ry
aW5nIGZpcnN0Rm91bmRJdGVtOwogICAgIFN0cmluZyBtaXNzcGVsbGVkV29yZDsKICAgICBTdHJp
bmcgYmFkR3JhbW1hclBocmFzZTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAKKwog
ICAgIC8vIEluaXRpYWxpemUgb3V0IHBhcmFtZXRlcnM7IHRoZXNlIHdpbGwgYmUgdXBkYXRlZCBp
ZiB3ZSBmaW5kIHNvbWV0aGluZyB0byByZXR1cm4uCiAgICAgb3V0SXNTcGVsbGluZyA9IHRydWU7
CiAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IDA7CkBAIC0yMzgsNyArMjUyLDcgQEAgU3RyaW5n
IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9v
bCBjaGVja0dyYW1tYXIsIGIKICAgICBvdXRHcmFtbWFyRGV0YWlsLmxlbmd0aCA9IDA7CiAgICAg
b3V0R3JhbW1hckRldGFpbC5ndWVzc2VzLmNsZWFyKCk7CiAgICAgb3V0R3JhbW1hckRldGFpbC51
c2VyRGVzY3JpcHRpb24gPSAiIjsKLSAgICAKKwogICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNoIHJh
bmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdyYXBocywgc2luY2UgdGV4dCBjaGVja2luZyBu
ZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KICAgICAvLyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBv
ZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBhcmFncmFwaCB0byB0aGUgc3RhcnQgb2YgdGhl
IG9yaWdpbmFsIHNlYXJjaCByYW5nZSwKICAgICAvLyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdu
b3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgpAQCAtMjc2LDggKzI5MCw4IEBAIFN0cmluZyBUZXh0
Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hl
Y2tHcmFtbWFyLCBiCiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdU
eXBlTWFzayBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFyID8gKFRleHRDaGVja2luZ1R5cGVT
cGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6IFRleHRDaGVja2luZ1R5cGVTcGVs
bGluZzsKLSAgICAgICAgICAgICAgICBtX2NsaWVudC0+dGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0
T2ZQYXJhZ3JhcGgocGFyYWdyYXBoU3RyaW5nLmNoYXJhY3RlcnMoKSwgcGFyYWdyYXBoU3RyaW5n
Lmxlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKLSAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaChtX2NsaWVudC0+dGV4dENoZWNrZXIo
KSwgcGFyYWdyYXBoU3RyaW5nLmNoYXJhY3RlcnMoKSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgp
LCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKKwogICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5n
ICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gY3VycmVudFN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bG9j
YXRpb24gKyByZXN1bHQtPmxlbmd0aCA8PSBjdXJyZW50RW5kT2Zmc2V0KSB7CkBAIC0zNDQsMTQg
KzM1OCw2IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5n
T3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgICAgIHRvdGFsTGVuZ3RoUHJv
Y2Vzc2VkICs9IGN1cnJlbnRMZW5ndGg7CiAgICAgfQogICAgIHJldHVybiBmaXJzdEZvdW5kSXRl
bTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNo
ZWNrR3JhbW1hcik7Ci0gICAgVU5VU0VEX1BBUkFNKG91dElzU3BlbGxpbmcpOwotICAgIFVOVVNF
RF9QQVJBTShvdXRGaXJzdEZvdW5kT2Zmc2V0KTsKLSAgICBVTlVTRURfUEFSQU0ob3V0R3JhbW1h
ckRldGFpbCk7Ci0gICAgcmV0dXJuICIiOwotI2VuZGlmIC8vIFVTRShVTklGSUVEX1RFWFRfQ0hF
Q0tJTkcpCiB9CiAKIGludCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRh
aWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRhaWw+JiBncmFtbWFyRGV0YWlscywgaW50IGJhZEdy
YW1tYXJQaHJhc2VMb2NhdGlvbiwgaW50IC8qYmFkR3JhbW1hclBocmFzZUxlbmd0aCovLCBpbnQg
c3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGJvb2wgbWFya0FsbCkKQEAgLTUxMCwxMiArNTE2
LDE2IEBAIGJvb2wgVGV4dENoZWNraW5nSGVscGVyOjppc1VuZ3JhbW1hdGljYWwoVmVjdG9yPFN0
cmluZz4mIGd1ZXNzZXNWZWN0b3IpIGNvbnN0CiAKIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2lu
Z0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sIGNo
ZWNrR3JhbW1hciwgYm9vbCYgbWlzc3BlbGxlZCwgYm9vbCYgdW5ncmFtbWF0aWNhbCkgY29uc3QK
IHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorICAgIGlmICghbV91bmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKyAgICB9CisKICAgICBWZWN0b3I8U3RyaW5nPiBn
dWVzc2VzOwogICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgbWlzc3BlbGxlZCA9IGZhbHNlOwog
ICAgIHVuZ3JhbW1hdGljYWwgPSBmYWxzZTsKLSAgICAKKwogICAgIGlmICghbV9jbGllbnQgfHwg
IW1fcmFuZ2UgfHwgbV9yYW5nZS0+Y29sbGFwc2VkKGVjKSkKICAgICAgICAgcmV0dXJuIGd1ZXNz
ZXM7CiAKQEAgLTUyNiw4ICs1MzYsOCBAQCBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxw
ZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbAogCiAgICAg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICBUZXh0Q2hlY2tpbmdUeXBl
TWFzayBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFtbWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVs
bGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGlu
ZzsKLSAgICBtX2NsaWVudC0+dGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFy
YWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHBhcmFncmFwaC50ZXh0TGVuZ3RoKCksIGNoZWNraW5n
VHlwZXMsIHJlc3VsdHMpOwotICAgIAorICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKG1fY2xpZW50
LT50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGgudGV4dENoYXJhY3RlcnMoKSwgcGFyYWdyYXBoLnRl
eHRMZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7CisKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewogICAgICAgICBjb25zdCBUZXh0Q2hl
Y2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwogICAgICAgICBpZiAocmVzdWx0LT50
eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5n
ZU1hdGNoZXMocmVzdWx0LT5sb2NhdGlvbiwgcmVzdWx0LT5sZW5ndGgpKSB7CkBAIC01MzksMTAg
KzU0OSwxMCBAQCBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbAogICAgICAgICAgICAgcmV0dXJuIGd1
ZXNzZXM7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICBpZiAoIWNoZWNrR3JhbW1hcikK
ICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7Ci0gICAgICAgIAorCiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgY29uc3QgVGV4dENoZWNr
aW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0c1tpXTsKICAgICAgICAgaWYgKHJlc3VsdC0+dHlw
ZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAmJiBwYXJhZ3JhcGguaXNDaGVja2luZ1Jhbmdl
Q292ZXJlZEJ5KHJlc3VsdC0+bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKSkgewpAQCAtNTYyLDEz
ICs1NzIsNiBAQCBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JN
aXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbAogICAgICAgICB9CiAgICAgfQogICAg
IHJldHVybiBndWVzc2VzOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBV
TlVTRURfUEFSQU0oY2hlY2tHcmFtbWFyKTsKLSAgICBVTlVTRURfUEFSQU0obWlzc3BlbGxlZCk7
Ci0gICAgVU5VU0VEX1BBUkFNKHVuZ3JhbW1hdGljYWwpOwotICAgIHJldHVybiBWZWN0b3I8U3Ry
aW5nPigpOwotI2VuZGlmIC8vIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiB9CiAKIApAQCAt
NTkwLDQgKzU5MywyMSBAQCB2b2lkIFRleHRDaGVja2luZ0hlbHBlcjo6bWFya0FsbEJhZEdyYW1t
YXIoKQogICAgIGZpbmRGaXJzdEJhZEdyYW1tYXIoaWdub3JlZEdyYW1tYXJEZXRhaWwsIGlnbm9y
ZWRPZmZzZXQsIHRydWUpOwogfQogCit2b2lkIGNoZWNrVGV4dE9mUGFyYWdyYXBoKFRleHRDaGVj
a2VyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQgbGVuZ3RoLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cykKK3sKKyNpZiBVU0UoVU5JRklFRF9U
RVhUX0NIRUNLSU5HKQorICAgIGNsaWVudC0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgodGV4dCwgbGVu
Z3RoLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKKyNlbHNlCisgICAgLy8gU2hvdWxkIGltcGxl
bWVudCBsYXRlciB0byB1bmlmeSB1bmlmaWVkIHNwZWxsLWNoZWNraW5nIGNvZGUgcGF0aCBhbmQK
KyAgICAvLyBsZWdhY3kgc3BlbGwtY2hlY2tpbmcgY29kZSBwYXRoLgorICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIFVOVVNFRF9QQVJBTShjbGllbnQpOworICAgIFVOVVNFRF9QQVJBTSh0
ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0obGVuZ3RoKTsKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tp
bmdUeXBlcyk7CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdHMpOworI2VuZGlmCit9CisKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oCmluZGV4IDhiNWM2OTEu
LjgwNmU1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5n
SGVscGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
aApAQCAtMjcsNiArMjcsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFJhbmdlOwog
Y2xhc3MgUG9zaXRpb247CitjbGFzcyBTZXR0aW5nczsKIAogY2xhc3MgVGV4dENoZWNraW5nUGFy
YWdyYXBoIHsKIHB1YmxpYzoKQEAgLTkwLDggKzkxLDEzIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgRWRpdG9yQ2xpZW50KiBtX2NsaWVudDsKICAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2U7Cisg
ICAgYm9vbCBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQ7CisKIH07CiAKK3ZvaWQgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGllbnQqIGNsaWVudCwgY29uc3QgVUNoYXIqIHRl
eHQsIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1R5
cGVNYXNrIGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRz
KTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVGV4dENoZWNraW5nSGVs
cGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggZDdlMDBkMS4uN2EyNDFlNSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKQEAgLTE5OSw2ICsxOTksMTEgQEAgU2V0dGluZ3M6OlNl
dHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2Z1bGxTY3JlZW5BUElFbmFibGVkKGZhbHNlKQog
I2VuZGlmCiAgICAgLCBtX2FzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGZhbHNlKQor
I2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCisgICAgLCBtX3VuaWZpZWRUZXh0Q2hlY2tl
ckVuYWJsZWQodHJ1ZSkKKyNlbHNlCisgICAgLCBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQo
ZmFsc2UpCisjZW5kaWYKICAgICAsIG1fbWVtb3J5SW5mb0VuYWJsZWQoZmFsc2UpCiAgICAgLCBt
X2ludGVyYWN0aXZlRm9ybVZhbGlkYXRpb24oZmFsc2UpCiAgICAgLCBtX3VzZVByZUhUTUw1UGFy
c2VyUXVpcmtzKGZhbHNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5n
cy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCmluZGV4IGRiNzM2NDguLmZkZmU5
ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKQEAgLTM4Niw2ICszODYsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJs
ZWQoYm9vbCBmbGFnKSB7IG1fYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBmbGFn
OyB9CiAgICAgICAgIGJvb2wgYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBjb25z
dCAgeyByZXR1cm4gbV9hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZDsgfQogCisgICAg
ICAgIHZvaWQgc2V0VW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChib29sIGZsYWcpIHsgbV91bmlm
aWVkVGV4dENoZWNrZXJFbmFibGVkID0gZmxhZzsgfQorICAgICAgICBib29sIHVuaWZpZWRUZXh0
Q2hlY2tlckVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQ7IH0KKwogICAgICAgICB2b2lkIHNldE1lbW9yeUluZm9FbmFibGVkKGJvb2wgZmxhZykgeyBt
X21lbW9yeUluZm9FbmFibGVkID0gZmxhZzsgfQogICAgICAgICBib29sIG1lbW9yeUluZm9FbmFi
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlJbmZvRW5hYmxlZDsgfQogCkBAIC01ODAsNiAr
NTgzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fZnVsbFNjcmVlbkFQ
SUVuYWJsZWQgOiAxOwogI2VuZGlmCiAgICAgICAgIGJvb2wgbV9hc3luY2hyb25vdXNTcGVsbENo
ZWNraW5nRW5hYmxlZDogMTsKKyAgICAgICAgYm9vbCBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQ6IDE7CiAgICAgICAgIGJvb2wgbV9tZW1vcnlJbmZvRW5hYmxlZDogMTsKICAgICAgICAgYm9v
bCBtX2ludGVyYWN0aXZlRm9ybVZhbGlkYXRpb246IDE7CiAgICAgICAgIGJvb2wgbV91c2VQcmVI
VE1MNVBhcnNlclF1aXJrczogMTsK
</data>
<flag name="commit-queue"
          id="106465"
          type_id="3"
          status="-"
          setter="gustavo.noronha"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109263</attachid>
            <date>2011-09-30 01:20:11 -0700</date>
            <delta_ts>2011-09-30 03:15:51 -0700</delta_ts>
            <desc>Test Patch</desc>
            <filename>69128.diff</filename>
            <type>text/plain</type>
            <size>36186</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9i
amVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmpl
Y3QuY3BwCmluZGV4IDkwZjNiZTIuLmQxMGNiYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcApAQCAtNTAsNyArNTAsOSBA
QAogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJSZW5kZXJXaWRnZXQuaCIKICNp
bmNsdWRlICJSZW5kZXJlZFBvc2l0aW9uLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgorI2luY2x1ZGUgIlRleHRDaGVja2luZ0hlbHBlci5o
IgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgImh0bWxlZGl0aW5nLmgiCiAj
aW5jbHVkZSAidmlzaWJsZV91bml0cy5oIgpAQCAtMjg4LDIwICsyOTAsMjAgQEAgYm9vbCBBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpoYXNNaXNzcGVsbGluZygpIGNvbnN0CiAgICAgY29uc3QgVUNoYXIq
IGNoYXJzID0gc3RyaW5nVmFsdWUoKS5jaGFyYWN0ZXJzKCk7CiAgICAgaW50IGNoYXJzTGVuZ3Ro
ID0gc3RyaW5nVmFsdWUoKS5sZW5ndGgoKTsKICAgICBib29sIGlzTWlzc3BlbGxlZCA9IGZhbHNl
OwotICAgIAotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgVmVjdG9yPFRleHRD
aGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICB0ZXh0Q2hlY2tlci0+Y2hlY2tUZXh0T2ZQYXJh
Z3JhcGgoY2hhcnMsIGNoYXJzTGVuZ3RoLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3Vs
dHMpOwotICAgIGlmICghcmVzdWx0cy5pc0VtcHR5KCkpCi0gICAgICAgIGlzTWlzc3BlbGxlZCA9
IHRydWU7Ci0jZWxzZQotICAgIGludCBtaXNzcGVsbGluZ0xlbmd0aCA9IDA7Ci0gICAgaW50IG1p
c3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKLSAgICB0ZXh0Q2hlY2tlci0+Y2hlY2tTcGVsbGluZ09m
U3RyaW5nKGNoYXJzLCBjaGFyc0xlbmd0aCwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVs
bGluZ0xlbmd0aCk7Ci0gICAgaWYgKG1pc3NwZWxsaW5nTGVuZ3RoIHx8IG1pc3NwZWxsaW5nTG9j
YXRpb24gIT0gLTEpCi0gICAgICAgIGlzTWlzc3BlbGxlZCA9IHRydWU7Ci0jZW5kaWYKLSAgICAK
KworICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKKyAgICAgICAgVmVjdG9y
PFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKKyAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3Jh
cGgodGV4dENoZWNrZXIsIGNoYXJzLCBjaGFyc0xlbmd0aCwgVGV4dENoZWNraW5nVHlwZVNwZWxs
aW5nLCByZXN1bHRzKTsKKyAgICAgICAgaWYgKCFyZXN1bHRzLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIGlzTWlzc3BlbGxlZCA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IG1pc3Nw
ZWxsaW5nTGVuZ3RoID0gMDsKKyAgICAgICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsK
KyAgICAgICAgdGV4dENoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjaGFycywgY2hhcnNM
ZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAg
ICBpZiAobWlzc3BlbGxpbmdMZW5ndGggfHwgbWlzc3BlbGxpbmdMb2NhdGlvbiAhPSAtMSkKKyAg
ICAgICAgICAgIGlzTWlzc3BlbGxlZCA9IHRydWU7CisgICAgfQorCiAgICAgcmV0dXJuIGlzTWlz
c3BlbGxlZDsKIH0KIApAQCAtMTM3Miw1ICsxMzc0LDIyIEBAIEFjY2Vzc2liaWxpdHlCdXR0b25T
dGF0ZSBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpjaGVja2JveE9yUmFkaW9WYWx1ZSgpIGNvbnN0CiAg
ICAgCiAgICAgcmV0dXJuIEJ1dHRvblN0YXRlT2ZmOwogfQorCitib29sIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdAoreworICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IG5vZGUoKS0+ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgCisgICAgRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCk7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2V0
dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCk7CisgICAgaWYgKCFzZXR0aW5ncykK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHNldHRpbmdzLT51bmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKaW5kZXgg
YWIxMzE2Ny4uMzFjMWY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmgKQEAgLTY3Miw3ICs2NzIsOSBAQCBwdWJsaWM6CiAgICAg
Ly8gYWxsb3dzIGZvciBhbiBBY2Nlc3NpYmlsaXR5T2JqZWN0IHRvIHVwZGF0ZSBpdHMgcmVuZGVy
IHRyZWUgb3IgcGVyZm9ybQogICAgIC8vIG90aGVyIG9wZXJhdGlvbnMgdXBkYXRlIHR5cGUgb3Bl
cmF0aW9ucwogICAgIHZvaWQgdXBkYXRlQmFja2luZ1N0b3JlKCk7Ci0gICAgCisKKyAgICBib29s
IHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIEFY
SUQgbV9pZDsKICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3IgbV9jaGlsZHJlbjsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVyLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2Vi
QWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0KaW5kZXggYWMyNWVlMC4uYjU5MWFlYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIubW0KQEAgLTY4OCwzOCArNjg4LDM4IEBAIHN0
YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0QmxvY2txdW90ZUxldmVsKE5TTXV0YWJsZUF0
dHJpYnV0ZWRTdHJpbmcqIGF0dHJTCiAKIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0
U3BlbGxpbmcoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgTm9kZSogbm9k
ZSwgY29uc3QgVUNoYXIqIGNoYXJzLCBpbnQgY2hhckxlbmd0aCwgTlNSYW5nZSByYW5nZSkKIHsK
LSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIC8vIENoZWNrIHRoZSBzcGVsbGlu
ZyBkaXJlY3RseSBzaW5jZSBkb2N1bWVudC0+bWFya2Vyc0Zvck5vZGUoKSBkb2VzIG5vdCBzdG9y
ZSB0aGUgbWlzc3BlbGxlZCBtYXJraW5nIHdoZW4gdGhlIGN1cnNvciBpcyBpbiBhIHdvcmQuCi0g
ICAgVGV4dENoZWNrZXJDbGllbnQqIGNoZWNrZXIgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgp
LT5lZGl0b3IoKS0+dGV4dENoZWNrZXIoKTsKLQotICAgIC8vIGNoZWNrVGV4dE9mUGFyYWdyYXBo
IGlzIHRoZSBvbmx5IHNwZWxsaW5nL2dyYW1tYXIgY2hlY2tlciBpbXBsZW1lbnRlZCBpbiBXSzEg
YW5kIFdLMgotICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7Ci0gICAgY2hl
Y2tlci0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY2hhcnMsIGNoYXJMZW5ndGgsIFRleHRDaGVja2lu
Z1R5cGVTcGVsbGluZywgcmVzdWx0cyk7Ci0gICAgCi0gICAgc2l6ZV90IHNpemUgPSByZXN1bHRz
LnNpemUoKTsKLSAgICBOU051bWJlciogdHJ1ZVZhbHVlID0gW05TTnVtYmVyIG51bWJlcldpdGhC
b29sOllFU107Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAg
ICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQmIHJlc3VsdCA9IHJlc3VsdHNbaV07Ci0gICAg
ICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0
eU1pc3NwZWxsZWRUZXh0QXR0cmlidXRlLCB0cnVlVmFsdWUsIE5TTWFrZVJhbmdlKHJlc3VsdC5s
b2NhdGlvbiArIHJhbmdlLmxvY2F0aW9uLCByZXN1bHQubGVuZ3RoKSk7Ci0gICAgfSAgICAKLSNl
bHNlCi0gICAgaW50IGN1cnJlbnRQb3NpdGlvbiA9IDA7Ci0gICAgd2hpbGUgKGNoYXJMZW5ndGgg
PiAwKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyRGF0YSA9IGNoYXJzICsgY3VycmVudFBv
c2l0aW9uOworICAgIGlmIChtX29iamVjdCAmJiBtX29iamVjdC0+dW5pZmllZFRleHRDaGVja2Vy
RW5hYmxlZCgpKSB7CisgICAgICAgIC8vIENoZWNrIHRoZSBzcGVsbGluZyBkaXJlY3RseSBzaW5j
ZSBkb2N1bWVudC0+bWFya2Vyc0Zvck5vZGUoKSBkb2VzIG5vdCBzdG9yZSB0aGUgbWlzc3BlbGxl
ZCBtYXJraW5nIHdoZW4gdGhlIGN1cnNvciBpcyBpbiBhIHdvcmQuCiAgICAgICAgIFRleHRDaGVj
a2VyQ2xpZW50KiBjaGVja2VyID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZWRpdG9yKCkt
PnRleHRDaGVja2VyKCk7CisKKyAgICAgICAgLy8gY2hlY2tUZXh0T2ZQYXJhZ3JhcGggaXMgdGhl
IG9ubHkgc3BlbGxpbmcvZ3JhbW1hciBjaGVja2VyIGltcGxlbWVudGVkIGluIFdLMSBhbmQgV0sy
CisgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CisgICAgICAgIGNo
ZWNrVGV4dE9mUGFyYWdyYXBoKGNoZWNrZXIsIGNoYXJzLCBjaGFyTGVuZ3RoLCBUZXh0Q2hlY2tp
bmdUeXBlU3BlbGxpbmcsIHJlc3VsdHMpOworICAgIAorICAgICAgICBzaXplX3Qgc2l6ZSA9IHJl
c3VsdHMuc2l6ZSgpOworICAgICAgICBOU051bWJlciogdHJ1ZVZhbHVlID0gW05TTnVtYmVyIG51
bWJlcldpdGhCb29sOllFU107CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXpl
OyBpKyspIHsKKyAgICAgICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0ID0g
cmVzdWx0c1tpXTsKKyAgICAgICAgICAgIEFYQXR0cmlidXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJT
dHJpbmcsIE5TQWNjZXNzaWJpbGl0eU1pc3NwZWxsZWRUZXh0QXR0cmlidXRlLCB0cnVlVmFsdWUs
IE5TTWFrZVJhbmdlKHJlc3VsdC5sb2NhdGlvbiArIHJhbmdlLmxvY2F0aW9uLCByZXN1bHQubGVu
Z3RoKSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgY3VycmVudFBvc2l0
aW9uID0gMDsKKyAgICAgICAgd2hpbGUgKGNoYXJMZW5ndGggPiAwKSB7CisgICAgICAgICAgICBj
b25zdCBVQ2hhciogY2hhckRhdGEgPSBjaGFycyArIGN1cnJlbnRQb3NpdGlvbjsKKyAgICAgICAg
ICAgIFRleHRDaGVja2VyQ2xpZW50KiBjaGVja2VyID0gbm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+ZWRpdG9yKCktPnRleHRDaGVja2VyKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlu
dCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7CisgICAgICAgICAgICBpbnQgbWlzc3BlbGxpbmdM
ZW5ndGggPSAwOworICAgICAgICAgICAgY2hlY2tlci0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNo
YXJEYXRhLCBjaGFyTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVu
Z3RoKTsKKyAgICAgICAgICAgIGlmIChtaXNzcGVsbGluZ0xvY2F0aW9uID09IC0xIHx8ICFtaXNz
cGVsbGluZ0xlbmd0aCkKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCi0gICAgICAg
IGludCBtaXNzcGVsbGluZ0xvY2F0aW9uID0gLTE7Ci0gICAgICAgIGludCBtaXNzcGVsbGluZ0xl
bmd0aCA9IDA7Ci0gICAgICAgIGNoZWNrZXItPmNoZWNrU3BlbGxpbmdPZlN0cmluZyhjaGFyRGF0
YSwgY2hhckxlbmd0aCwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7
Ci0gICAgICAgIGlmIChtaXNzcGVsbGluZ0xvY2F0aW9uID09IC0xIHx8ICFtaXNzcGVsbGluZ0xl
bmd0aCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAKLSAgICAgICAgTlNSYW5nZSBzcGVs
bFJhbmdlID0gTlNNYWtlUmFuZ2UocmFuZ2UubG9jYXRpb24gKyBjdXJyZW50UG9zaXRpb24gKyBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7Ci0gICAgICAgIEFYQXR0cmli
dXRlU3RyaW5nU2V0TnVtYmVyKGF0dHJTdHJpbmcsIE5TQWNjZXNzaWJpbGl0eU1pc3NwZWxsZWRU
ZXh0QXR0cmlidXRlLCBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXSwgc3BlbGxSYW5nZSk7
Ci0gICAgICAgIGNoYXJMZW5ndGggLT0gKG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGlu
Z0xlbmd0aCk7Ci0gICAgICAgIGN1cnJlbnRQb3NpdGlvbiArPSAobWlzc3BlbGxpbmdMb2NhdGlv
biArIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgIE5TUmFuZ2Ugc3BlbGxSYW5nZSA9
IE5TTWFrZVJhbmdlKHJhbmdlLmxvY2F0aW9uICsgY3VycmVudFBvc2l0aW9uICsgbWlzc3BlbGxp
bmdMb2NhdGlvbiwgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICAgICAgQVhBdHRyaWJ1dGVT
dHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5TWlzc3BlbGxlZFRleHRB
dHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBzcGVsbFJhbmdlKTsKKyAg
ICAgICAgICAgIGNoYXJMZW5ndGggLT0gKG1pc3NwZWxsaW5nTG9jYXRpb24gKyBtaXNzcGVsbGlu
Z0xlbmd0aCk7CisgICAgICAgICAgICBjdXJyZW50UG9zaXRpb24gKz0gKG1pc3NwZWxsaW5nTG9j
YXRpb24gKyBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgIH0KICAgICB9Ci0jZW5kaWYgICAg
CiB9CiAKIHN0YXRpYyB2b2lkIEFYQXR0cmlidXRlU3RyaW5nU2V0SGVhZGluZ0xldmVsKE5TTXV0
YWJsZUF0dHJpYnV0ZWRTdHJpbmcqIGF0dHJTdHJpbmcsIFJlbmRlck9iamVjdCogcmVuZGVyZXIs
IE5TUmFuZ2UgcmFuZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMzBjNzc1NS4u
ZjU4MjlhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTcyNSw0NSArMTcyNSwx
MSBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZv
cmVTZWxlY3Rpb24pCiAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7CiAgICAgU3RyaW5nIG1p
c3NwZWxsZWRXb3JkOwogCi0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAgICBncmFt
bWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKICAg
ICBib29sIGlzU3BlbGxpbmcgPSB0cnVlOwogICAgIGludCBmb3VuZE9mZnNldCA9IDA7Ci0gICAg
U3RyaW5nIGZvdW5kSXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdT
ZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsK
LSAgICBpZiAoaXNTcGVsbGluZykgewotICAgICAgICBtaXNzcGVsbGVkV29yZCA9IGZvdW5kSXRl
bTsKLSAgICAgICAgbWlzc3BlbGxpbmdPZmZzZXQgPSBmb3VuZE9mZnNldDsKLSAgICB9IGVsc2Ug
ewotICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gZm91bmRJdGVtOwotICAgICAgICBncmFtbWFy
UGhyYXNlT2Zmc2V0ID0gZm91bmRPZmZzZXQ7Ci0gICAgfQotI2Vsc2UKKyAgICBTdHJpbmcgZm91
bmRJdGVtOwogICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwotICAgIG1p
c3NwZWxsZWRXb3JkID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJj
aFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGluZyhtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UsIGZp
cnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci0KLSNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKLSAgICAv
LyBTZWFyY2ggZm9yIGJhZCBncmFtbWFyIHRoYXQgb2NjdXJzIHByaW9yIHRvIHRoZSBuZXh0IG1p
c3NwZWxsZWQgd29yZCAoaWYgYW55KQotICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5n
U2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwotICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNF
bXB0eSgpKSB7Ci0gICAgICAgIC8vIFN0b3AgbG9va2luZyBhdCBzdGFydCBvZiBuZXh0IG1pc3Nw
ZWxsZWQgd29yZAotICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycyhncmFtbWFyU2VhcmNo
UmFuZ2UuZ2V0KCkpOwotICAgICAgICBjaGFycy5hZHZhbmNlKG1pc3NwZWxsaW5nT2Zmc2V0KTsK
LSAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hhcnMucmFuZ2UoKS0+c3RhcnRD
b250YWluZXIoZWMpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldChlYyksIGVjKTsKLSAgICB9
Ci0gICAgCi0gICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICBiYWRH
cmFtbWFyUGhyYXNlID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBncmFtbWFyU2VhcmNo
UmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9m
ZnNldCwgZmFsc2UpOwotI2VuZGlmCi0jZW5kaWYKLSAgICAKLSAgICAvLyBJZiB3ZSBmb3VuZCBu
ZWl0aGVyIGJhZCBncmFtbWFyIG5vciBhIG1pc3NwZWxsZWQgd29yZCwgd3JhcCBhbmQgdHJ5IGFn
YWluIChidXQgZG9uJ3QgYm90aGVyIGlmIHdlIHN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0
aGUKLSAgICAvLyBibG9jayByYXRoZXIgdGhhbiBhdCBhIHNlbGVjdGlvbikuCi0gICAgaWYgKHN0
YXJ0ZWRXaXRoU2VsZWN0aW9uICYmICFtaXNzcGVsbGVkV29yZCAmJiAhYmFkR3JhbW1hclBocmFz
ZSkgewotICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRTdGFydCh0b3BOb2RlLCAwLCBl
Yyk7Ci0gICAgICAgIC8vIGdvaW5nIHVudGlsIHRoZSBlbmQgb2YgdGhlIHZlcnkgZmlyc3QgY2h1
bmsgd2UgdGVzdGVkIGlzIGZhciBlbm91Z2gKLSAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+
c2V0RW5kKHNlYXJjaEVuZE5vZGVBZnRlcldyYXAsIHNlYXJjaEVuZE9mZnNldEFmdGVyV3JhcCwg
ZWMpOwotICAgICAgICAKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorICAgIGlmICh1
bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdl
ID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xvbmVSYW5nZShlYyk7CiAgICAgICAgIGZvdW5kSXRl
bSA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmlu
ZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCks
IGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAgaWYgKGlz
U3BlbGxpbmcpIHsKQEAgLTE3NzMsMTAgKzE3MzksMTEgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VU
b05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAgICAg
YmFkR3JhbW1hclBocmFzZSA9IGZvdW5kSXRlbTsKICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VP
ZmZzZXQgPSBmb3VuZE9mZnNldDsKICAgICAgICAgfQotI2Vsc2UKKyAgICB9IGVsc2UgewogICAg
ICAgICBtaXNzcGVsbGVkV29yZCA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxp
bmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmcobWlzc3BlbGxpbmdPZmZzZXQsIGZh
bHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogCiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcp
CisgICAgICAgIC8vIFNlYXJjaCBmb3IgYmFkIGdyYW1tYXIgdGhhdCBvY2N1cnMgcHJpb3IgdG8g
dGhlIG5leHQgbWlzc3BlbGxlZCB3b3JkIChpZiBhbnkpCiAgICAgICAgIGdyYW1tYXJTZWFyY2hS
YW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwogICAgICAgICBpZiAo
IW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gU3RvcCBsb29raW5n
IGF0IHN0YXJ0IG9mIG5leHQgbWlzc3BlbGxlZCB3b3JkCkBAIC0xNzg0LDExICsxNzUxLDQ1IEBA
IHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNl
bGVjdGlvbikKICAgICAgICAgICAgIGNoYXJzLmFkdmFuY2UobWlzc3BlbGxpbmdPZmZzZXQpOwog
ICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hhcnMucmFuZ2UoKS0+c3Rh
cnRDb250YWluZXIoZWMpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldChlYyksIGVjKTsKICAg
ICAgICAgfQotCisgICAgCiAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkK
ICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50
KCksIGdyYW1tYXJTZWFyY2hSYW5nZSkuZmluZEZpcnN0QmFkR3JhbW1hcihncmFtbWFyRGV0YWls
LCBncmFtbWFyUGhyYXNlT2Zmc2V0LCBmYWxzZSk7CiAjZW5kaWYKKyAgICB9CisgICAgCisgICAg
Ly8gSWYgd2UgZm91bmQgbmVpdGhlciBiYWQgZ3JhbW1hciBub3IgYSBtaXNzcGVsbGVkIHdvcmQs
IHdyYXAgYW5kIHRyeSBhZ2FpbiAoYnV0IGRvbid0IGJvdGhlciBpZiB3ZSBzdGFydGVkIGF0IHRo
ZSBiZWdpbm5pbmcgb2YgdGhlCisgICAgLy8gYmxvY2sgcmF0aGVyIHRoYW4gYXQgYSBzZWxlY3Rp
b24pLgorICAgIGlmIChzdGFydGVkV2l0aFNlbGVjdGlvbiAmJiAhbWlzc3BlbGxlZFdvcmQgJiYg
IWJhZEdyYW1tYXJQaHJhc2UpIHsKKyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3Rh
cnQodG9wTm9kZSwgMCwgZWMpOworICAgICAgICAvLyBnb2luZyB1bnRpbCB0aGUgZW5kIG9mIHRo
ZSB2ZXJ5IGZpcnN0IGNodW5rIHdlIHRlc3RlZCBpcyBmYXIgZW5vdWdoCisgICAgICAgIHNwZWxs
aW5nU2VhcmNoUmFuZ2UtPnNldEVuZChzZWFyY2hFbmROb2RlQWZ0ZXJXcmFwLCBzZWFyY2hFbmRP
ZmZzZXRBZnRlcldyYXAsIGVjKTsKKyAgICAgICAgCisgICAgICAgIGlmICh1bmlmaWVkVGV4dENo
ZWNrZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxs
aW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOworICAgICAgICAgICAgZm91bmRJdGVtID0g
VGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmly
c3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgaXNT
cGVsbGluZywgZm91bmRPZmZzZXQsIGdyYW1tYXJEZXRhaWwpOworICAgICAgICAgICAgaWYgKGlz
U3BlbGxpbmcpIHsKKyAgICAgICAgICAgICAgICBtaXNzcGVsbGVkV29yZCA9IGZvdW5kSXRlbTsK
KyAgICAgICAgICAgICAgICBtaXNzcGVsbGluZ09mZnNldCA9IGZvdW5kT2Zmc2V0OworICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gZm91bmRJ
dGVtOworICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNldDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1pc3NwZWxsZWRX
b3JkID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5m
aW5kRmlyc3RNaXNzcGVsbGluZyhtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSk7CisKKyNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKKyAgICAgICAgICAgIGdy
YW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwor
ICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
ICAgICAvLyBTdG9wIGxvb2tpbmcgYXQgc3RhcnQgb2YgbmV4dCBtaXNzcGVsbGVkIHdvcmQKKyAg
ICAgICAgICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycyhncmFtbWFyU2VhcmNoUmFuZ2Uu
Z2V0KCkpOworICAgICAgICAgICAgICAgIGNoYXJzLmFkdmFuY2UobWlzc3BlbGxpbmdPZmZzZXQp
OworICAgICAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdl
KCktPnN0YXJ0Q29udGFpbmVyKGVjKSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoZWMpLCBl
Yyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoKSkKKyAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gVGV4dENoZWNraW5n
SGVscGVyKGNsaWVudCgpLCBncmFtbWFyU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIo
Z3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOwogI2VuZGlmCisgICAg
ICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKCFiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkg
ewpAQCAtMTg4OCwyNCArMTg4OSwyNCBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkU2VsZWN0aW9uKCkKIAogVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2Vz
Rm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29sJiBtaXNzcGVsbGVkLCBi
b29sJiB1bmdyYW1tYXRpY2FsKQogewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0g
ICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6
ZWRSYW5nZSgpOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5n
PigpOwotICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIHJhbmdlKS5ndWVz
c2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGlzR3JhbW1hckNoZWNraW5nRW5h
YmxlZCgpLCBtaXNzcGVsbGVkLCB1bmdyYW1tYXRpY2FsKTsKLSNlbHNlCi0gICAgbWlzc3BlbGxl
ZCA9IGlzU2VsZWN0aW9uTWlzc3BlbGxlZCgpOwotICAgIGlmIChtaXNzcGVsbGVkKSB7CisgICAg
aWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgeworICAgICAgICBSZWZQdHI8UmFuZ2U+
IHJhbmdlID0gZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAg
ICAgIGlmICghcmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKyAg
ICAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1hdGljYWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1p
c3NwZWxsZWQgPSBpc1NlbGVjdGlvbk1pc3NwZWxsZWQoKTsKKyAgICAgICAgaWYgKG1pc3NwZWxs
ZWQpIHsKKyAgICAgICAgICAgIHVuZ3JhbW1hdGljYWwgPSBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiBndWVzc2VzRm9yTWlzc3BlbGxlZFNlbGVjdGlvbigpOworICAgICAgICB9CisgICAgICAg
IGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSAmJiBpc1NlbGVjdGlvblVuZ3JhbW1hdGlj
YWwoKSkgeworICAgICAgICAgICAgdW5ncmFtbWF0aWNhbCA9IHRydWU7CisgICAgICAgICAgICBy
ZXR1cm4gZ3Vlc3Nlc0ZvclVuZ3JhbW1hdGljYWxTZWxlY3Rpb24oKTsKKyAgICAgICAgfQogICAg
ICAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7Ci0gICAgICAgIHJldHVybiBndWVzc2VzRm9yTWlz
c3BlbGxlZFNlbGVjdGlvbigpOwotICAgIH0KLSAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKCkgJiYgaXNTZWxlY3Rpb25VbmdyYW1tYXRpY2FsKCkpIHsKLSAgICAgICAgdW5ncmFtbWF0
aWNhbCA9IHRydWU7Ci0gICAgICAgIHJldHVybiBndWVzc2VzRm9yVW5ncmFtbWF0aWNhbFNlbGVj
dGlvbigpOworICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICAgICB9Ci0gICAgdW5n
cmFtbWF0aWNhbCA9IGZhbHNlOwotICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwotI2VuZGlm
CiB9CiAKIHZvaWQgRWRpdG9yOjpzaG93U3BlbGxpbmdHdWVzc1BhbmVsKCkKQEAgLTE5NDcsODAg
KzE5NDgsNzcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24gJm1vdmluZ1NlbGVjdGkKIAogdm9pZCBFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZChjb25zdCBWaXNpYmxlUG9zaXRpb24gJndvcmRT
dGFydCwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uQWZ0ZXJUeXBpbmcsIGJvb2wg
ZG9SZXBsYWNlbWVudCkKIHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIG1f
c3BlbGxpbmdDb3JyZWN0b3ItPmFwcGx5UGVuZGluZ0NvcnJlY3Rpb24oc2VsZWN0aW9uQWZ0ZXJU
eXBpbmcpOworICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKKyAgICAgICAg
bV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihzZWxlY3Rpb25BZnRl
clR5cGluZyk7CiAKLSAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0Q2hlY2tpbmdPcHRpb25z
ID0gMDsKKyAgICAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgdGV4dENoZWNraW5nT3B0aW9ucyA9
IDA7CiAKLSAgICBpZiAoaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAg
ICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7CisgICAg
ICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICAgICAg
dGV4dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7CiAKICNpZiBV
U0UoQVVUT01BVElDX1RFWFRfUkVQTEFDRU1FTlQpCi0gICAgaWYgKGRvUmVwbGFjZW1lbnQgCi0g
ICAgICAgICYmIChpc0F1dG9tYXRpY1F1b3RlU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAg
ICAgICB8fCBpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkKLSAgICAgICAgICAgIHx8
IGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQotICAgICAgICAgICAgfHwgaXNB
dXRvbWF0aWNUZXh0UmVwbGFjZW1lbnRFbmFibGVkKCkKLSAgICAgICAgICAgIHx8ICgodGV4dENo
ZWNraW5nT3B0aW9ucyAmIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZykgJiYgaXNBdXRvbWF0aWNT
cGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpKSkKLSAgICAgICAgdGV4dENoZWNraW5nT3B0aW9u
cyB8PSBUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQ7CisgICAgICAgIGlmIChkb1JlcGxhY2Vt
ZW50IAorICAgICAgICAgICAgJiYgKGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVk
KCkKKyAgICAgICAgICAgICAgICB8fCBpc0F1dG9tYXRpY0xpbmtEZXRlY3Rpb25FbmFibGVkKCkK
KyAgICAgICAgICAgICAgICB8fCBpc0F1dG9tYXRpY0Rhc2hTdWJzdGl0dXRpb25FbmFibGVkKCkK
KyAgICAgICAgICAgICAgICB8fCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKQor
ICAgICAgICAgICAgICAgIHx8ICgodGV4dENoZWNraW5nT3B0aW9ucyAmIFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZykgJiYgaXNBdXRvbWF0aWNTcGVsbGluZ0NvcnJlY3Rpb25FbmFibGVkKCkpKSkK
KyAgICAgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMgfD0gVGV4dENoZWNraW5nVHlwZVJlcGxh
Y2VtZW50OwogI2VuZGlmCi0gICAgaWYgKCF0ZXh0Q2hlY2tpbmdPcHRpb25zICYgKFRleHRDaGVj
a2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAg
dGV4dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcjsKKyAgICAgICAg
aWYgKCF0ZXh0Q2hlY2tpbmdPcHRpb25zICYgKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRl
eHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCkpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICBW
aXNpYmxlU2VsZWN0aW9uIGFkamFjZW50V29yZHMgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZX
b3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0
LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKTsKLSAgICBpZiAodGV4dENoZWNraW5nT3B0aW9ucyAm
IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0ZWRTZW50ZW5jZSA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKHdvcmRTdGFy
dCksIGVuZE9mU2VudGVuY2Uod29yZFN0YXJ0KSk7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBzZWxlY3RlZFNlbnRlbmNlLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1hcmtBbGxNaXNzcGVsbGlu
Z3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgYWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCkpOwotICAgIH0KKyAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCgpKQorICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdUeXBl
R3JhbW1hcjsKIAotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2VsZWN0aW9uQWZ0ZXJUeXBpbmcp
OwotICAgIFVOVVNFRF9QQVJBTShkb1JlcGxhY2VtZW50KTsKKyAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3Rh
cnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3Jk
SWZPbkJvdW5kYXJ5KSk7CisgICAgICAgIGlmICh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgVGV4dENo
ZWNraW5nVHlwZUdyYW1tYXIpIHsKKyAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0
ZWRTZW50ZW5jZSA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKHdvcmRTdGFydCks
IGVuZE9mU2VudGVuY2Uod29yZFN0YXJ0KSk7CisgICAgICAgICAgICBtYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFkamFjZW50V29y
ZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgc2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6
ZWRSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1hcmtBbGxN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgYWRq
YWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBhZGphY2VudFdvcmRzLnRvTm9y
bWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgICAgICB9CiAKLSAgICBpZiAoIWlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICAvLyBDaGVjayBzcGVsbGluZyBvZiBvbmUgd29yZAotICAgIFJl
ZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZTsKLSAgICBtYXJrTWlzc3BlbGxpbmdzKFZpc2li
bGVTZWxlY3Rpb24oc3RhcnRPZldvcmQod29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSks
IGVuZE9mV29yZCh3b3JkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpLCBtaXNzcGVsbGlu
Z1JhbmdlKTsKKyAgICAgICAgLy8gQ2hlY2sgc3BlbGxpbmcgb2Ygb25lIHdvcmQKKyAgICAgICAg
UmVmUHRyPFJhbmdlPiBtaXNzcGVsbGluZ1JhbmdlOworICAgICAgICBtYXJrTWlzc3BlbGxpbmdz
KFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQod29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3Vu
ZGFyeSksIGVuZE9mV29yZCh3b3JkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpLCBtaXNz
cGVsbGluZ1JhbmdlKTsKIAotICAgIC8vIEF1dG9jb3JyZWN0IHRoZSBtaXNzcGVsbGVkIHdvcmQu
Ci0gICAgaWYgKCFtaXNzcGVsbGluZ1JhbmdlKQotICAgICAgICByZXR1cm47CisgICAgICAgIC8v
IEF1dG9jb3JyZWN0IHRoZSBtaXNzcGVsbGVkIHdvcmQuCisgICAgICAgIGlmICghbWlzc3BlbGxp
bmdSYW5nZSkKKyAgICAgICAgICAgIHJldHVybjsKICAgICAKLSAgICAvLyBHZXQgdGhlIG1pc3Nw
ZWxsZWQgd29yZC4KLSAgICBjb25zdCBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwbGFpblRleHQo
bWlzc3BlbGxpbmdSYW5nZS5nZXQoKSk7Ci0gICAgU3RyaW5nIGF1dG9jb3JyZWN0ZWRTdHJpbmcg
PSB0ZXh0Q2hlY2tlcigpLT5nZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVkV29y
ZChtaXNzcGVsbGVkV29yZCk7Ci0KLSAgICAvLyBJZiBhdXRvY29ycmVjdGVkIHdvcmQgaXMgbm9u
IGVtcHR5LCByZXBsYWNlIHRoZSBtaXNzcGVsbGVkIHdvcmQgYnkgdGhpcyB3b3JkLgotICAgIGlm
ICghYXV0b2NvcnJlY3RlZFN0cmluZy5pc0VtcHR5KCkpIHsKLSAgICAgICAgVmlzaWJsZVNlbGVj
dGlvbiBuZXdTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRE9XTlNUUkVBTSk7Ci0g
ICAgICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bigpKSB7Ci0gICAgICAgICAgICBpZiAoIWZyYW1lKCktPnNlbGVjdGlvbigpLT5zaG91bGRDaGFu
Z2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICAgICAgLy8gR2V0IHRoZSBtaXNzcGVsbGVk
IHdvcmQuCisgICAgICAgIGNvbnN0IFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IHBsYWluVGV4dCht
aXNzcGVsbGluZ1JhbmdlLmdldCgpKTsKKyAgICAgICAgU3RyaW5nIGF1dG9jb3JyZWN0ZWRTdHJp
bmcgPSB0ZXh0Q2hlY2tlcigpLT5nZXRBdXRvQ29ycmVjdFN1Z2dlc3Rpb25Gb3JNaXNzcGVsbGVk
V29yZChtaXNzcGVsbGVkV29yZCk7CisKKyAgICAgICAgLy8gSWYgYXV0b2NvcnJlY3RlZCB3b3Jk
IGlzIG5vbiBlbXB0eSwgcmVwbGFjZSB0aGUgbWlzc3BlbGxlZCB3b3JkIGJ5IHRoaXMgd29yZC4K
KyAgICAgICAgaWYgKCFhdXRvY29ycmVjdGVkU3RyaW5nLmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgVmlzaWJsZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24obWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwg
RE9XTlNUUkVBTSk7CisgICAgICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IGZyYW1lKCktPnNl
bGVjdGlvbigpLT5zZWxlY3Rpb24oKSkgeworICAgICAgICAgICAgICAgIGlmICghZnJhbWUoKS0+
c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxlY3Rpb24pKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9u
KCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAoIWZyYW1lKCktPmVkaXRvcigpLT5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0
ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVk
KSkKICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBmcmFtZSgpLT5zZWxlY3Rp
b24oKS0+c2V0U2VsZWN0aW9uKG5ld1NlbGVjdGlvbik7CisgICAgICAgICAgICBmcmFtZSgpLT5l
ZGl0b3IoKS0+cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIGZh
bHNlLCBmYWxzZSk7CisKKyAgICAgICAgICAgIC8vIFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJh
Y3RlciBmdXJ0aGVyLgorICAgICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPm1vdmVUbyhm
cmFtZSgpLT5zZWxlY3Rpb24oKS0+ZW5kKCkpOworICAgICAgICAgICAgZnJhbWUoKS0+c2VsZWN0
aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZv
cndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICgh
ZnJhbWUoKS0+ZWRpdG9yKCktPnNob3VsZEluc2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywg
bWlzc3BlbGxpbmdSYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQorICAgICAg
ICBpZiAoIWlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQogICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBmcmFtZSgpLT5lZGl0b3IoKS0+cmVwbGFjZVNlbGVjdGlvbldpdGhUZXh0KGF1dG9j
b3JyZWN0ZWRTdHJpbmcsIGZhbHNlLCBmYWxzZSk7Ci0KLSAgICAgICAgLy8gUmVzZXQgdGhlIGNo
YXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCi0gICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigp
LT5tb3ZlVG8oZnJhbWUoKS0+c2VsZWN0aW9uKCktPmVuZCgpKTsKLSAgICAgICAgZnJhbWUoKS0+
c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVj
dGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKLSAgICB9Ci0KLSAgICBpZiAoIWlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47CiAgICAgCi0gICAgLy8g
Q2hlY2sgZ3JhbW1hciBvZiBlbnRpcmUgc2VudGVuY2UKLSAgICBtYXJrQmFkR3JhbW1hcihWaXNp
YmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZSh3b3JkU3RhcnQpLCBlbmRPZlNlbnRlbmNlKHdv
cmRTdGFydCkpKTsKLSNlbmRpZgorICAgICAgICAvLyBDaGVjayBncmFtbWFyIG9mIGVudGlyZSBz
ZW50ZW5jZQorICAgICAgICBtYXJrQmFkR3JhbW1hcihWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZT
ZW50ZW5jZSh3b3JkU3RhcnQpLCBlbmRPZlNlbnRlbmNlKHdvcmRTdGFydCkpKTsKKyAgICB9CiB9
CiAgICAgCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc09yQmFkR3JhbW1hcihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24sIGJvb2wgY2hlY2tTcGVsbGluZywgUmVmUHRyPFJh
bmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQpAQCAtMjA4OCw3ICsyMDg2LDExIEBAIHZvaWQg
RWRpdG9yOjptYXJrQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24p
CiAKIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRDaGVja2luZ09wdGlvbnMsIFJhbmdlKiBzcGVsbGlu
Z1JhbmdlLCBSYW5nZSogZ3JhbW1hclJhbmdlKQogewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hF
Q0tJTkcpCisgICAgaWYgKCF1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICAvLyBU
aGVyZSBzaG91bGRuJ3QgYmUgcGVuZGluZyBhdXRvY29ycmVjdGlvbiBhdCB0aGlzIG1vbWVudC4K
ICAgICBBU1NFUlQoIW1fc3BlbGxpbmdDb3JyZWN0b3ItPmhhc1BlbmRpbmdDb3JyZWN0aW9uKCkp
OwogCkBAIC0yMTQyLDEyICsyMTQ0LDExIEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRDCiAKICAg
ICBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogICAgIGlmIChzaG91bGRNYXJr
R3JhbW1hcikKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoZ3Jh
bW1hclBhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygpLCBncmFtbWFyUGFyYWdyYXBoLnRleHRMZW5n
dGgoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29s
dmVUZXh0Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7Cisg
ICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKHRleHRDaGVja2VyKCksIGdyYW1tYXJQYXJhZ3Jh
cGgudGV4dENoYXJhY3RlcnMoKSwgZ3JhbW1hclBhcmFncmFwaC50ZXh0TGVuZ3RoKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayh0ZXh0
Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7CiAgICAgZWxzZQotICAgICAgICB0ZXh0Q2hlY2tl
cigpLT5jaGVja1RleHRPZlBhcmFncmFwaChzcGVsbGluZ1BhcmFncmFwaC50ZXh0Q2hhcmFjdGVy
cygpLCBzcGVsbGluZ1BhcmFncmFwaC50ZXh0TGVuZ3RoKCksIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4
dENoZWNraW5nT3B0aW9ucyksIHJlc3VsdHMpOwotICAgICAgICAKKyAgICAgICAgY2hlY2tUZXh0
T2ZQYXJhZ3JhcGgodGV4dENoZWNrZXIoKSwgc3BlbGxpbmdQYXJhZ3JhcGgudGV4dENoYXJhY3Rl
cnMoKSwgc3BlbGxpbmdQYXJhZ3JhcGgudGV4dExlbmd0aCgpLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9u
cyksIHJlc3VsdHMpOwogCiAgICAgLy8gSWYgdGhpcyBjaGVja2luZyBpcyBvbmx5IGZvciBzaG93
aW5nIGNvcnJlY3Rpb24gcGFuZWwsIHdlIHNob3VsZG4ndCBib3RoZXIgdG8gbWFyayBtaXNzcGVs
bGluZ3MuCiAgICAgaWYgKHNob3VsZFNob3dDb3JyZWN0aW9uUGFuZWwpCkBAIC0yMjc5LDE3ICsy
MjgwLDE1IEBAIHZvaWQgRWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcklu
UmFuZ2VzKFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRDCiAgICAgICAgICAgICBtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0
aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgICAgICB9CiAgICAgfQotI2Vs
c2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBVTlVTRURfUEFSQU0odGV4dENoZWNr
aW5nT3B0aW9ucyk7Ci0gICAgVU5VU0VEX1BBUkFNKHNwZWxsaW5nUmFuZ2UpOwotICAgIFVOVVNF
RF9QQVJBTShncmFtbWFyUmFuZ2UpOwotI2VuZGlmIC8vIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJ
TkcpCiB9CiAKIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBT
dHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcp
CisgICAgaWYgKCF1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAocmVwbGFj
ZWRTdHJpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIzMDMsMjggKzIzMDIs
MjQgQEAgdm9pZCBFZGl0b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZWRTdHJpbmcpCiAgICAgUmVmUHRyPFJhbmdlPiBjaGFuZ2VkUmFuZ2UgPSBwYXJh
Z3JhcGguc3VicmFuZ2UocGFyYWdyYXBoLmNoZWNraW5nU3RhcnQoKSwgcmVwbGFjZWRTdHJpbmcu
bGVuZ3RoKCkpOwogICAgIGNoYW5nZWRSYW5nZS0+c3RhcnRDb250YWluZXIoKS0+ZG9jdW1lbnQo
KS0+bWFya2VycygpLT5hZGRNYXJrZXIoY2hhbmdlZFJhbmdlLmdldCgpLCBEb2N1bWVudE1hcmtl
cjo6UmVwbGFjZW1lbnQsIFN0cmluZygpKTsKICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5tYXJr
UmV2ZXJzZWQoY2hhbmdlZFJhbmdlLmdldCgpKTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgVU5VU0VEX1BBUkFNKHJlcGxhY2VkU3RyaW5nKTsKLSNlbmRpZiAvLyBVU0Uo
VU5JRklFRF9URVhUX0NIRUNLSU5HKQogfQogCiAKIHZvaWQgRWRpdG9yOjptYXJrTWlzc3BlbGxp
bmdzQW5kQmFkR3JhbW1hcihjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzcGVsbGluZ1NlbGVjdGlv
biwgYm9vbCBtYXJrR3JhbW1hciwgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgZ3JhbW1hclNlbGVj
dGlvbikKIHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQotICAgIGlmICghaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFRleHRD
aGVja2luZ1R5cGVNYXNrIHRleHRDaGVja2luZ09wdGlvbnMgPSBUZXh0Q2hlY2tpbmdUeXBlU3Bl
bGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjsKLSAgICBpZiAobWFya0dyYW1tYXIg
JiYgaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgIHRleHRDaGVja2luZ09wdGlv
bnMgfD0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXI7Ci0gICAgbWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBzcGVsbGluZ1NlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXpl
ZFJhbmdlKCkuZ2V0KCkpOwotI2Vsc2UKLSAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxp
bmdSYW5nZTsKLSAgICBtYXJrTWlzc3BlbGxpbmdzKHNwZWxsaW5nU2VsZWN0aW9uLCBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2UpOwotICAgIGlmIChtYXJrR3JhbW1hcikKLSAgICAgICAgbWFya0JhZEdy
YW1tYXIoZ3JhbW1hclNlbGVjdGlvbik7Ci0jZW5kaWYKKyAgICBpZiAodW5pZmllZFRleHRDaGVj
a2VyRW5hYmxlZCgpKSB7CisgICAgICAgIGlmICghaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgVGV4dENoZWNraW5nVHlwZU1h
c2sgdGV4dENoZWNraW5nT3B0aW9ucyA9IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRD
aGVja2luZ1R5cGVDb3JyZWN0aW9uOworICAgICAgICBpZiAobWFya0dyYW1tYXIgJiYgaXNHcmFt
bWFyQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9
IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyOworICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIHNwZWxsaW5nU2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUmVmUHRyPFJhbmdlPiBmaXJz
dE1pc3NwZWxsaW5nUmFuZ2U7CisgICAgICAgIG1hcmtNaXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxl
Y3Rpb24sIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisgICAgICAgIGlmIChtYXJrR3JhbW1hcikK
KyAgICAgICAgICAgIG1hcmtCYWRHcmFtbWFyKGdyYW1tYXJTZWxlY3Rpb24pOworICAgIH0KIH0K
IAogdm9pZCBFZGl0b3I6OnVuYXBwbGllZFNwZWxsQ29ycmVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb25PZkNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0ZWQsIGNv
bnN0IFN0cmluZyYgY29ycmVjdGlvbikKQEAgLTMyMzYsNCArMzIzMSwxMyBAQCB2b2lkIEVkaXRv
cjo6ZGV2aWNlU2NhbGVGYWN0b3JDaGFuZ2VkKCkKICAgICBtX2RlbGV0ZUJ1dHRvbkNvbnRyb2xs
ZXItPmRldmljZVNjYWxlRmFjdG9yQ2hhbmdlZCgpOwogfQogCitib29sIEVkaXRvcjo6dW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5n
cyA9IG1fZnJhbWUtPnNldHRpbmdzKCkpIHsKKyAgICAgICAgcmV0dXJuIHNldHRpbmdzLT51bmlm
aWVkVGV4dENoZWNrZXJFbmFibGVkKCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQor
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCBiZGI5
OGFmLi45ZTFjMjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTQyMiw2ICs0MjIsOCBA
QCBwcml2YXRlOgogICAgIHZvaWQgY2hhbmdlU2VsZWN0aW9uQWZ0ZXJDb21tYW5kKGNvbnN0IFZp
c2libGVTZWxlY3Rpb24mIG5ld1NlbGVjdGlvbiwgYm9vbCBjbG9zZVR5cGluZywgYm9vbCBjbGVh
clR5cGluZ1N0eWxlKTsKIAogICAgIE5vZGUqIGZpbmRFdmVudFRhcmdldEZyb21TZWxlY3Rpb24o
KSBjb25zdDsKKworICAgIGJvb2wgdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0Owog
fTsKIAogaW5saW5lIHZvaWQgRWRpdG9yOjpzZXRTdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UoYm9v
bCBmbGFnKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdI
ZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3Bw
CmluZGV4IDBiZGZiZDguLjYxMTFkOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTI5LDcgKzI5LDkgQEAKIAogI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJSYW5nZS5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKICNp
bmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKQEAgLTE1NSw5ICsxNTcsMTcgQEAgaW50IFRleHRD
aGVja2luZ1BhcmFncmFwaDo6Y2hlY2tpbmdMZW5ndGgoKSBjb25zdAogVGV4dENoZWNraW5nSGVs
cGVyOjpUZXh0Q2hlY2tpbmdIZWxwZXIoRWRpdG9yQ2xpZW50KiBjbGllbnQsIFBhc3NSZWZQdHI8
UmFuZ2U+IHJhbmdlKQogICAgIDogbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9yYW5nZShyYW5n
ZSkKKyAgICAsIG1fdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChmYWxzZSkKIHsKICAgICBBU1NF
UlRfQVJHKG1fY2xpZW50LCBtX2NsaWVudCk7CiAgICAgQVNTRVJUX0FSRyhtX3JhbmdlLCBtX3Jh
bmdlKTsKKworICAgIGlmIChtX3JhbmdlKSB7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBt
X3JhbmdlLT5vd25lckRvY3VtZW50KCktPmZyYW1lKCkpIHsKKyAgICAgICAgICAgIGlmIChTZXR0
aW5ncyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKSkKKyAgICAgICAgICAgICAgICBtX3Vu
aWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQgPSBzZXR0aW5ncy0+dW5pZmllZFRleHRDaGVja2VyRW5h
YmxlZCgpOworICAgICAgICB9CisgICAgfQogfQogCiBUZXh0Q2hlY2tpbmdIZWxwZXI6On5UZXh0
Q2hlY2tpbmdIZWxwZXIoKQpAQCAtMjI1LDEyICsyMzUsMTYgQEAgU3RyaW5nIFRleHRDaGVja2lu
Z0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmcoaW50JiBmaXJzdE1pc3NwZWxsaW5nT2Zmc2V0
LCBib28KIAogU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdP
ckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGJvb2wmIG91dElzU3BlbGxpbmcsIGludCYg
b3V0Rmlyc3RGb3VuZE9mZnNldCwgR3JhbW1hckRldGFpbCYgb3V0R3JhbW1hckRldGFpbCkKIHsK
LSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorICAgIGlmICghbV91bmlmaWVkVGV4dENo
ZWNrZXJFbmFibGVkKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gIiI7CisgICAgfQorCiAgICAgU3RyaW5nIGZpcnN0Rm91bmRJdGVtOwogICAgIFN0cmlu
ZyBtaXNzcGVsbGVkV29yZDsKICAgICBTdHJpbmcgYmFkR3JhbW1hclBocmFzZTsKICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKLSAgICAKKwogICAgIC8vIEluaXRpYWxpemUgb3V0IHBhcmFtZXRl
cnM7IHRoZXNlIHdpbGwgYmUgdXBkYXRlZCBpZiB3ZSBmaW5kIHNvbWV0aGluZyB0byByZXR1cm4u
CiAgICAgb3V0SXNTcGVsbGluZyA9IHRydWU7CiAgICAgb3V0Rmlyc3RGb3VuZE9mZnNldCA9IDA7
CkBAIC0yMzgsNyArMjUyLDcgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAgICBvdXRHcmFt
bWFyRGV0YWlsLmxlbmd0aCA9IDA7CiAgICAgb3V0R3JhbW1hckRldGFpbC5ndWVzc2VzLmNsZWFy
KCk7CiAgICAgb3V0R3JhbW1hckRldGFpbC51c2VyRGVzY3JpcHRpb24gPSAiIjsKLSAgICAKKwog
ICAgIC8vIEV4cGFuZCB0aGUgc2VhcmNoIHJhbmdlIHRvIGVuY29tcGFzcyBlbnRpcmUgcGFyYWdy
YXBocywgc2luY2UgdGV4dCBjaGVja2luZyBuZWVkcyB0aGF0IG11Y2ggY29udGV4dC4KICAgICAv
LyBEZXRlcm1pbmUgdGhlIGNoYXJhY3RlciBvZmZzZXQgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHBh
cmFncmFwaCB0byB0aGUgc3RhcnQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCByYW5nZSwKICAgICAv
LyBzaW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgpAQCAt
Mjc2LDggKzI5MCw4IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3Nw
ZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAg
ICAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzID0gY2hlY2tH
cmFtbWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFt
bWFyKSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICAgICAgICAgICAgICBtX2NsaWVu
dC0+dGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFyYWdyYXBoU3RyaW5nLmNo
YXJhY3RlcnMoKSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1
bHRzKTsKLSAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBhcmFn
cmFwaChtX2NsaWVudC0+dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoU3RyaW5nLmNoYXJhY3RlcnMo
KSwgcGFyYWdyYXBoU3RyaW5nLmxlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKKwog
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsg
aSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCogcmVz
dWx0ID0gJnJlc3VsdHNbaV07CiAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUg
PT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHJlc3VsdC0+bG9jYXRpb24gPj0gY3VycmVu
dFN0YXJ0T2Zmc2V0ICYmIHJlc3VsdC0+bG9jYXRpb24gKyByZXN1bHQtPmxlbmd0aCA8PSBjdXJy
ZW50RW5kT2Zmc2V0KSB7CkBAIC0zNDQsMTQgKzM1OCw2IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdI
ZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFy
LCBiCiAgICAgICAgIHRvdGFsTGVuZ3RoUHJvY2Vzc2VkICs9IGN1cnJlbnRMZW5ndGg7CiAgICAg
fQogICAgIHJldHVybiBmaXJzdEZvdW5kSXRlbTsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgVU5VU0VEX1BBUkFNKGNoZWNrR3JhbW1hcik7Ci0gICAgVU5VU0VEX1BBUkFN
KG91dElzU3BlbGxpbmcpOwotICAgIFVOVVNFRF9QQVJBTShvdXRGaXJzdEZvdW5kT2Zmc2V0KTsK
LSAgICBVTlVTRURfUEFSQU0ob3V0R3JhbW1hckRldGFpbCk7Ci0gICAgcmV0dXJuICIiOwotI2Vu
ZGlmIC8vIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCiB9CiAKIGludCBUZXh0Q2hlY2tpbmdI
ZWxwZXI6OmZpbmRGaXJzdEdyYW1tYXJEZXRhaWwoY29uc3QgVmVjdG9yPEdyYW1tYXJEZXRhaWw+
JiBncmFtbWFyRGV0YWlscywgaW50IGJhZEdyYW1tYXJQaHJhc2VMb2NhdGlvbiwgaW50IC8qYmFk
R3JhbW1hclBocmFzZUxlbmd0aCovLCBpbnQgc3RhcnRPZmZzZXQsIGludCBlbmRPZmZzZXQsIGJv
b2wgbWFya0FsbCkKQEAgLTUxMCwxMiArNTE2LDE2IEBAIGJvb2wgVGV4dENoZWNraW5nSGVscGVy
Ojppc1VuZ3JhbW1hdGljYWwoVmVjdG9yPFN0cmluZz4mIGd1ZXNzZXNWZWN0b3IpIGNvbnN0CiAK
IFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRP
clVuZ3JhbW1hdGljYWxSYW5nZShib29sIGNoZWNrR3JhbW1hciwgYm9vbCYgbWlzc3BlbGxlZCwg
Ym9vbCYgdW5ncmFtbWF0aWNhbCkgY29uc3QKIHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNL
SU5HKQorICAgIGlmICghbV91bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKSB7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKyAg
ICB9CisKICAgICBWZWN0b3I8U3RyaW5nPiBndWVzc2VzOwogICAgIEV4Y2VwdGlvbkNvZGUgZWM7
CiAgICAgbWlzc3BlbGxlZCA9IGZhbHNlOwogICAgIHVuZ3JhbW1hdGljYWwgPSBmYWxzZTsKLSAg
ICAKKwogICAgIGlmICghbV9jbGllbnQgfHwgIW1fcmFuZ2UgfHwgbV9yYW5nZS0+Y29sbGFwc2Vk
KGVjKSkKICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CiAKQEAgLTUyNiw4ICs1MzYsOCBAQCBWZWN0
b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdy
YW1tYXRpY2FsUmFuZ2UoYm9vbAogCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVz
dWx0czsKICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBjaGVja2luZ1R5cGVzID0gY2hlY2tHcmFt
bWFyID8gKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVHcmFtbWFy
KSA6IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKLSAgICBtX2NsaWVudC0+dGV4dENoZWNrZXIo
KS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgocGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHBhcmFn
cmFwaC50ZXh0TGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOwotICAgIAorICAgIGNo
ZWNrVGV4dE9mUGFyYWdyYXBoKG1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLCBwYXJhZ3JhcGgudGV4
dENoYXJhY3RlcnMoKSwgcGFyYWdyYXBoLnRleHRMZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVz
dWx0cyk7CisKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkr
KykgewogICAgICAgICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRz
W2ldOwogICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGlu
ZyAmJiBwYXJhZ3JhcGguY2hlY2tpbmdSYW5nZU1hdGNoZXMocmVzdWx0LT5sb2NhdGlvbiwgcmVz
dWx0LT5sZW5ndGgpKSB7CkBAIC01MzksMTAgKzU0OSwxMCBAQCBWZWN0b3I8U3RyaW5nPiBUZXh0
Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2Uo
Ym9vbAogICAgICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7CiAgICAgICAgIH0KICAgICB9Ci0gICAg
CisKICAgICBpZiAoIWNoZWNrR3JhbW1hcikKICAgICAgICAgcmV0dXJuIGd1ZXNzZXM7Ci0gICAg
ICAgIAorCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKysp
IHsKICAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0c1tp
XTsKICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hciAm
JiBwYXJhZ3JhcGguaXNDaGVja2luZ1JhbmdlQ292ZXJlZEJ5KHJlc3VsdC0+bG9jYXRpb24sIHJl
c3VsdC0+bGVuZ3RoKSkgewpAQCAtNTYyLDEzICs1NzIsNiBAQCBWZWN0b3I8U3RyaW5nPiBUZXh0
Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2Uo
Ym9vbAogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBndWVzc2VzOwotI2Vsc2UKLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBVTlVTRURfUEFSQU0oY2hlY2tHcmFtbWFyKTsKLSAg
ICBVTlVTRURfUEFSQU0obWlzc3BlbGxlZCk7Ci0gICAgVU5VU0VEX1BBUkFNKHVuZ3JhbW1hdGlj
YWwpOwotICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwotI2VuZGlmIC8vIFVTRShVTklGSUVE
X1RFWFRfQ0hFQ0tJTkcpCiB9CiAKIApAQCAtNTkwLDQgKzU5MywyMSBAQCB2b2lkIFRleHRDaGVj
a2luZ0hlbHBlcjo6bWFya0FsbEJhZEdyYW1tYXIoKQogICAgIGZpbmRGaXJzdEJhZEdyYW1tYXIo
aWdub3JlZEdyYW1tYXJEZXRhaWwsIGlnbm9yZWRPZmZzZXQsIHRydWUpOwogfQogCit2b2lkIGNo
ZWNrVGV4dE9mUGFyYWdyYXBoKFRleHRDaGVja2VyQ2xpZW50KiBjbGllbnQsIGNvbnN0IFVDaGFy
KiB0ZXh0LCBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0Q2hlY2tp
bmdUeXBlTWFzayBjaGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVz
dWx0cykKK3sKKyNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorICAgIGNsaWVudC0+Y2hl
Y2tUZXh0T2ZQYXJhZ3JhcGgodGV4dCwgbGVuZ3RoLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsK
KyNlbHNlCisgICAgLy8gU2hvdWxkIGltcGxlbWVudCBsYXRlciB0byB1bmlmeSB1bmlmaWVkIHNw
ZWxsLWNoZWNraW5nIGNvZGUgcGF0aCBhbmQKKyAgICAvLyBsZWdhY3kgc3BlbGwtY2hlY2tpbmcg
Y29kZSBwYXRoLgorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIFVOVVNFRF9QQVJBTShj
bGllbnQpOworICAgIFVOVVNFRF9QQVJBTSh0ZXh0KTsKKyAgICBVTlVTRURfUEFSQU0obGVuZ3Ro
KTsKKyAgICBVTlVTRURfUEFSQU0oY2hlY2tpbmdUeXBlcyk7CisgICAgVU5VU0VEX1BBUkFNKHJl
c3VsdHMpOworI2VuZGlmCit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVGV4dENoZWNraW5nSGVscGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5oCmluZGV4IDhiNWM2OTEuLjgwNmU1M2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaApAQCAtMjcsNiArMjcsNyBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIFJhbmdlOwogY2xhc3MgUG9zaXRpb247CitjbGFzcyBTZXR0aW5n
czsKIAogY2xhc3MgVGV4dENoZWNraW5nUGFyYWdyYXBoIHsKIHB1YmxpYzoKQEAgLTkwLDggKzkx
LDEzIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgRWRpdG9yQ2xpZW50KiBtX2NsaWVudDsKICAg
ICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2U7CisgICAgYm9vbCBtX3VuaWZpZWRUZXh0Q2hlY2tlckVu
YWJsZWQ7CisKIH07CiAKK3ZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNrZXJDbGll
bnQqIGNsaWVudCwgY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQog
CiAjZW5kaWYgLy8gVGV4dENoZWNraW5nSGVscGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAK
aW5kZXggZDdlMDBkMS4uN2EyNDFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9T
ZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKQEAgLTE5
OSw2ICsxOTksMTEgQEAgU2V0dGluZ3M6OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2Z1
bGxTY3JlZW5BUElFbmFibGVkKGZhbHNlKQogI2VuZGlmCiAgICAgLCBtX2FzeW5jaHJvbm91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKGZhbHNlKQorI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcp
CisgICAgLCBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQodHJ1ZSkKKyNlbHNlCisgICAgLCBt
X3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoZmFsc2UpCisjZW5kaWYKICAgICAsIG1fbWVtb3J5
SW5mb0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2ludGVyYWN0aXZlRm9ybVZhbGlkYXRpb24oZmFs
c2UpCiAgICAgLCBtX3VzZVByZUhUTUw1UGFyc2VyUXVpcmtzKGZhbHNlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0
aW5ncy5oCmluZGV4IGRiNzM2NDguLmZkZmU5ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKQEAg
LTM4Niw2ICszODYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0QXN5
bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9vbCBmbGFnKSB7IG1fYXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQgPSBmbGFnOyB9CiAgICAgICAgIGJvb2wgYXN5bmNocm9ub3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSBjb25zdCAgeyByZXR1cm4gbV9hc3luY2hyb25vdXNTcGVs
bENoZWNraW5nRW5hYmxlZDsgfQogCisgICAgICAgIHZvaWQgc2V0VW5pZmllZFRleHRDaGVja2Vy
RW5hYmxlZChib29sIGZsYWcpIHsgbV91bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkID0gZmxhZzsg
fQorICAgICAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQ7IH0KKwogICAgICAgICB2b2lkIHNldE1lbW9y
eUluZm9FbmFibGVkKGJvb2wgZmxhZykgeyBtX21lbW9yeUluZm9FbmFibGVkID0gZmxhZzsgfQog
ICAgICAgICBib29sIG1lbW9yeUluZm9FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlJ
bmZvRW5hYmxlZDsgfQogCkBAIC01ODAsNiArNTgzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBib29sIG1fZnVsbFNjcmVlbkFQSUVuYWJsZWQgOiAxOwogI2VuZGlmCiAgICAgICAg
IGJvb2wgbV9hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZDogMTsKKyAgICAgICAgYm9v
bCBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQ6IDE7CiAgICAgICAgIGJvb2wgbV9tZW1vcnlJ
bmZvRW5hYmxlZDogMTsKICAgICAgICAgYm9vbCBtX2ludGVyYWN0aXZlRm9ybVZhbGlkYXRpb246
IDE7CiAgICAgICAgIGJvb2wgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrczogMTsK
</data>
<flag name="commit-queue"
          id="106467"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109274</attachid>
            <date>2011-09-30 03:15:51 -0700</date>
            <delta_ts>2011-09-30 04:16:15 -0700</delta_ts>
            <desc>Test Patch</desc>
            <filename>69128.diff</filename>
            <type>text/plain</type>
            <size>43675</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZDJkYTMzYi4uNmQwMjlkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTY0Myw5ICs2NDMsMTEgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGVkaXRp
bmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNw
cAorICAgIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0
UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKICAgICBlZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCisgICAgZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAKICAg
ICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRUZXh0
Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCmluZGV4IDFlNWY3NTQuLmYwYzcyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtMTQyMyw2ICsxNDIzLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmggXAorICAgIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgXAorICAgIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NtYXJ0
UmVwbGFjZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBsYWNlLmggXAog
CVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcCBcCkBAIC0xNDMwLDYg
KzE0MzIsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxDaGVja2VyLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRD
b21tYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5k
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybwppbmRleCBlYzIwMjNjLi42NTc1N2NkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpA
QCAtNjA2LDggKzYwNiwxMCBAQCBTT1VSQ0VTICs9IFwKICAgICBlZGl0aW5nL1JlcGxhY2VOb2Rl
V2l0aFNwYW5Db21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAgXAogICAgIGVkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIFwKKyAgICBl
ZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFj
ZUlDVS5jcHAgXAogICAgIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBcCisgICAgZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNw
cCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgXApAQCAtMTYxOSw2ICsx
NjIxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5oIFwKICAgICBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmggXAogICAgIGVkaXRp
bmcvU21hcnRSZXBsYWNlLmggXAorICAgIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5oIFwKICAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBcCiAgICAg
ZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmggXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9k
ZUNvbW1hbmQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IGZlOWZiZjUuLmU0ZTEzMWYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC01MjQyMSw2ICs1MjQyMSw2MiBAQAogCQkJCQkvPgog
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQor
ICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU2V0U2VsZWN0aW9uQ29t
bWFuZC5jcHAiCisgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZp
Z3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJEZWJ1Z3xXaW4zMiIKKyAgICAg
ICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAgICAg
ICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAgICAgICAg
IC8+CisgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAgICAg
ICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iUmVs
ZWFzZXxXaW4zMiIKKyAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKKyAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3Vy
YXRpb24+CisgICAgICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAg
ICAgICAgICAgTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorICAgICAgICAgICAgICAg
ICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICAgID4K
KyAgICAgICAgICAgICAgICAgICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAg
ICAgICAgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8Rmls
ZUNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJSZWxlYXNlX0NhaXJv
X0NGTGl0ZXxXaW4zMiIKKyAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29s
CisgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZp
Z3VyYXRpb24+CisgICAgICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAg
ICAgICAgICAgICAgTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorICAgICAgICAgICAgICAgICAgICAg
IEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAg
ICAgICAgICAgICAgICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAg
ICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZp
Z3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgor
ICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorICAgICAgICAg
ICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgPFRvb2wKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4KKyAgICAg
ICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
UmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNldFNlbGVjdGlvbkNvbW1hbmQuaCIKKyAgICAgICAg
ICAgICAgICAgID4KKyAgICAgICAgICAgICAgICA8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5cZWRpdGluZ1xTbWFydFJlcGxhY2UuaCIKIAkJCQk+CkBAIC01MjUzMyw2ICs1
MjU4OSw2MiBAQAogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGVsbENoZWNrZXIuaCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICBS
ZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAiCisg
ICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24KKyAg
ICAgICAgICAgICAgICAgICAgICBOYW1lPSJEZWJ1Z3xXaW4zMiIKKyAgICAgICAgICAgICAgICAg
ICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgICA+Cisg
ICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAg
ICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPEZpbGVD
b25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iUmVsZWFzZXxXaW4zMiIK
KyAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAg
ICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAg
ICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgTmFt
ZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAg
ICAgICAgICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAg
ICAgPC9GaWxlQ29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRp
b24KKyAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4z
MiIKKyAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAg
ICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+Cisg
ICAgICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAg
TmFtZT0iRGVidWdfQWxsfFdpbjMyIgorICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAg
ICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9G
aWxlQ29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24KKyAg
ICAgICAgICAgICAgICAgICAgICBOYW1lPSJSZWxlYXNlX0xUQ0d8V2luMzIiCisgICAgICAgICAg
ICAgICAgICAgICAgRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisgICAgICAgICAgICAgICAgICAg
ICAgPgorICAgICAgICAgICAgICAgICAgICA8VG9vbAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorICAgICAgICAgICAgICAgICAgICAgICAgICAvPgor
ICAgICAgICAgICAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAg
IDwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBh
dGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgorICAgICAgICAgICAg
ICAgICAgPgorICAgICAgICAgICAgPC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAiCiAJCQkJPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKaW5kZXggOTBmM2JlMi4uZDEwY2JiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC01MCw3ICs1MCw5IEBACiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1
ZGUgIlJlbmRlcmVkUG9zaXRpb24uaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IlRleHRDaGVja2VyQ2xpZW50LmgiCisjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCiAj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNs
dWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC0yODgsMjAgKzI5MCwyMCBAQCBib29sIEFjY2Vzc2li
aWxpdHlPYmplY3Q6Omhhc01pc3NwZWxsaW5nKCkgY29uc3QKICAgICBjb25zdCBVQ2hhciogY2hh
cnMgPSBzdHJpbmdWYWx1ZSgpLmNoYXJhY3RlcnMoKTsKICAgICBpbnQgY2hhcnNMZW5ndGggPSBz
dHJpbmdWYWx1ZSgpLmxlbmd0aCgpOwogICAgIGJvb2wgaXNNaXNzcGVsbGVkID0gZmFsc2U7Ci0g
ICAgCi0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAgICBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiByZXN1bHRzOwotICAgIHRleHRDaGVja2VyLT5jaGVja1RleHRPZlBhcmFncmFw
aChjaGFycywgY2hhcnNMZW5ndGgsIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cyk7
Ci0gICAgaWYgKCFyZXN1bHRzLmlzRW1wdHkoKSkKLSAgICAgICAgaXNNaXNzcGVsbGVkID0gdHJ1
ZTsKLSNlbHNlCi0gICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICBpbnQgbWlzc3Bl
bGxpbmdMb2NhdGlvbiA9IC0xOwotICAgIHRleHRDaGVja2VyLT5jaGVja1NwZWxsaW5nT2ZTdHJp
bmcoY2hhcnMsIGNoYXJzTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5n
TGVuZ3RoKTsKLSAgICBpZiAobWlzc3BlbGxpbmdMZW5ndGggfHwgbWlzc3BlbGxpbmdMb2NhdGlv
biAhPSAtMSkKLSAgICAgICAgaXNNaXNzcGVsbGVkID0gdHJ1ZTsKLSNlbmRpZgotICAgIAorCisg
ICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgeworICAgICAgICBWZWN0b3I8VGV4
dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOworICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCh0
ZXh0Q2hlY2tlciwgY2hhcnMsIGNoYXJzTGVuZ3RoLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcs
IHJlc3VsdHMpOworICAgICAgICBpZiAoIXJlc3VsdHMuaXNFbXB0eSgpKQorICAgICAgICAgICAg
aXNNaXNzcGVsbGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgbWlzc3BlbGxp
bmdMZW5ndGggPSAwOworICAgICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOworICAg
ICAgICB0ZXh0Q2hlY2tlci0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNoYXJzLCBjaGFyc0xlbmd0
aCwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgIGlm
IChtaXNzcGVsbGluZ0xlbmd0aCB8fCBtaXNzcGVsbGluZ0xvY2F0aW9uICE9IC0xKQorICAgICAg
ICAgICAgaXNNaXNzcGVsbGVkID0gdHJ1ZTsKKyAgICB9CisKICAgICByZXR1cm4gaXNNaXNzcGVs
bGVkOwogfQogCkBAIC0xMzcyLDUgKzEzNzQsMjIgQEAgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRl
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkgY29uc3QKICAgICAK
ICAgICByZXR1cm4gQnV0dG9uU3RhdGVPZmY7CiB9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU9iamVj
dDo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gbm9kZSgpLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2V0dGluZ3MtPnVuaWZpZWRUZXh0Q2hl
Y2tlckVuYWJsZWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCBhYjEz
MTY3Li4zMWMxZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaApAQCAtNjcyLDcgKzY3Miw5IEBAIHB1YmxpYzoKICAgICAvLyBh
bGxvd3MgZm9yIGFuIEFjY2Vzc2liaWxpdHlPYmplY3QgdG8gdXBkYXRlIGl0cyByZW5kZXIgdHJl
ZSBvciBwZXJmb3JtCiAgICAgLy8gb3RoZXIgb3BlcmF0aW9ucyB1cGRhdGUgdHlwZSBvcGVyYXRp
b25zCiAgICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmUoKTsKLSAgICAKKworICAgIGJvb2wgdW5p
ZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgQVhJRCBt
X2lkOwogICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBtX2NoaWxkcmVuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQppbmRleCBhYzI1ZWUwLi5iNTkxYWViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQpAQCAtNjg4LDM4ICs2ODgsMzggQEAgc3RhdGlj
IHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRCbG9ja3F1b3RlTGV2ZWwoTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyogYXR0clMKIAogc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTcGVs
bGluZyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOb2RlKiBub2RlLCBj
b25zdCBVQ2hhciogY2hhcnMsIGludCBjaGFyTGVuZ3RoLCBOU1JhbmdlIHJhbmdlKQogewotI2lm
IFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgLy8gQ2hlY2sgdGhlIHNwZWxsaW5nIGRp
cmVjdGx5IHNpbmNlIGRvY3VtZW50LT5tYXJrZXJzRm9yTm9kZSgpIGRvZXMgbm90IHN0b3JlIHRo
ZSBtaXNzcGVsbGVkIG1hcmtpbmcgd2hlbiB0aGUgY3Vyc29yIGlzIGluIGEgd29yZC4KLSAgICBU
ZXh0Q2hlY2tlckNsaWVudCogY2hlY2tlciA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCktPmVk
aXRvcigpLT50ZXh0Q2hlY2tlcigpOwotCi0gICAgLy8gY2hlY2tUZXh0T2ZQYXJhZ3JhcGggaXMg
dGhlIG9ubHkgc3BlbGxpbmcvZ3JhbW1hciBjaGVja2VyIGltcGxlbWVudGVkIGluIFdLMSBhbmQg
V0syCi0gICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICBjaGVja2Vy
LT5jaGVja1RleHRPZlBhcmFncmFwaChjaGFycywgY2hhckxlbmd0aCwgVGV4dENoZWNraW5nVHlw
ZVNwZWxsaW5nLCByZXN1bHRzKTsKLSAgICAKLSAgICBzaXplX3Qgc2l6ZSA9IHJlc3VsdHMuc2l6
ZSgpOwotICAgIE5TTnVtYmVyKiB0cnVlVmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6
WUVTXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAg
IGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0ID0gcmVzdWx0c1tpXTsKLSAgICAgICAg
QVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5TWlz
c3BlbGxlZFRleHRBdHRyaWJ1dGUsIHRydWVWYWx1ZSwgTlNNYWtlUmFuZ2UocmVzdWx0LmxvY2F0
aW9uICsgcmFuZ2UubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpKTsKLSAgICB9ICAgIAotI2Vsc2UK
LSAgICBpbnQgY3VycmVudFBvc2l0aW9uID0gMDsKLSAgICB3aGlsZSAoY2hhckxlbmd0aCA+IDAp
IHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJEYXRhID0gY2hhcnMgKyBjdXJyZW50UG9zaXRp
b247CisgICAgaWYgKG1fb2JqZWN0ICYmIG1fb2JqZWN0LT51bmlmaWVkVGV4dENoZWNrZXJFbmFi
bGVkKCkpIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHNwZWxsaW5nIGRpcmVjdGx5IHNpbmNlIGRv
Y3VtZW50LT5tYXJrZXJzRm9yTm9kZSgpIGRvZXMgbm90IHN0b3JlIHRoZSBtaXNzcGVsbGVkIG1h
cmtpbmcgd2hlbiB0aGUgY3Vyc29yIGlzIGluIGEgd29yZC4KICAgICAgICAgVGV4dENoZWNrZXJD
bGllbnQqIGNoZWNrZXIgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dGV4
dENoZWNrZXIoKTsKKworICAgICAgICAvLyBjaGVja1RleHRPZlBhcmFncmFwaCBpcyB0aGUgb25s
eSBzcGVsbGluZy9ncmFtbWFyIGNoZWNrZXIgaW1wbGVtZW50ZWQgaW4gV0sxIGFuZCBXSzIKKyAg
ICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKKyAgICAgICAgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoY2hlY2tlciwgY2hhcnMsIGNoYXJMZW5ndGgsIFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZywgcmVzdWx0cyk7CisgICAgCisgICAgICAgIHNpemVfdCBzaXplID0gcmVzdWx0
cy5zaXplKCk7CisgICAgICAgIE5TTnVtYmVyKiB0cnVlVmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVy
V2l0aEJvb2w6WUVTXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkr
KykgeworICAgICAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQgPSByZXN1
bHRzW2ldOworICAgICAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmlu
ZywgTlNBY2Nlc3NpYmlsaXR5TWlzc3BlbGxlZFRleHRBdHRyaWJ1dGUsIHRydWVWYWx1ZSwgTlNN
YWtlUmFuZ2UocmVzdWx0LmxvY2F0aW9uICsgcmFuZ2UubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgp
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGludCBjdXJyZW50UG9zaXRpb24g
PSAwOworICAgICAgICB3aGlsZSAoY2hhckxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIGNvbnN0
IFVDaGFyKiBjaGFyRGF0YSA9IGNoYXJzICsgY3VycmVudFBvc2l0aW9uOworICAgICAgICAgICAg
VGV4dENoZWNrZXJDbGllbnQqIGNoZWNrZXIgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5l
ZGl0b3IoKS0+dGV4dENoZWNrZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IG1p
c3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKKyAgICAgICAgICAgIGludCBtaXNzcGVsbGluZ0xlbmd0
aCA9IDA7CisgICAgICAgICAgICBjaGVja2VyLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoY2hhckRh
dGEsIGNoYXJMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgp
OworICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPT0gLTEgfHwgIW1pc3NwZWxs
aW5nTGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgaW50
IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKLSAgICAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3Ro
ID0gMDsKLSAgICAgICAgY2hlY2tlci0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNoYXJEYXRhLCBj
aGFyTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAg
ICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPT0gLTEgfHwgIW1pc3NwZWxsaW5nTGVuZ3Ro
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBOU1JhbmdlIHNwZWxsUmFu
Z2UgPSBOU01ha2VSYW5nZShyYW5nZS5sb2NhdGlvbiArIGN1cnJlbnRQb3NpdGlvbiArIG1pc3Nw
ZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICAgICAgQVhBdHRyaWJ1dGVT
dHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5TWlzc3BlbGxlZFRleHRB
dHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBzcGVsbFJhbmdlKTsKLSAg
ICAgICAgY2hhckxlbmd0aCAtPSAobWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVu
Z3RoKTsKLSAgICAgICAgY3VycmVudFBvc2l0aW9uICs9IChtaXNzcGVsbGluZ0xvY2F0aW9uICsg
bWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICAgICAgTlNSYW5nZSBzcGVsbFJhbmdlID0gTlNN
YWtlUmFuZ2UocmFuZ2UubG9jYXRpb24gKyBjdXJyZW50UG9zaXRpb24gKyBtaXNzcGVsbGluZ0xv
Y2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmlu
Z1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlNaXNzcGVsbGVkVGV4dEF0dHJp
YnV0ZSwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIHNwZWxsUmFuZ2UpOworICAgICAg
ICAgICAgY2hhckxlbmd0aCAtPSAobWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVu
Z3RoKTsKKyAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiArPSAobWlzc3BlbGxpbmdMb2NhdGlv
biArIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgfQogICAgIH0KLSNlbmRpZiAgICAKIH0K
IAogc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFkaW5nTGV2ZWwoTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgTlNS
YW5nZSByYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0Fs
bEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcApp
bmRleCBkODYzMDk3Li5jMDI5OWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmdBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
QWxsSW5PbmUuY3BwCkBAIC02MSw4ICs2MSwxMCBAQAogI2luY2x1ZGUgPFJlcGxhY2VOb2RlV2l0
aFNwYW5Db21tYW5kLmNwcD4KICNpbmNsdWRlIDxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA+
CiAjaW5jbHVkZSA8U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwPgorI2luY2x1ZGUgPFNldFNl
bGVjdGlvbkNvbW1hbmQuY3BwPgogI2luY2x1ZGUgPFNtYXJ0UmVwbGFjZS5jcHA+CiAjaW5jbHVk
ZSA8U21hcnRSZXBsYWNlQ0YuY3BwPgorI2luY2x1ZGUgPFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuY3BwPgogI2luY2x1ZGUgPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwPgogI2lu
Y2x1ZGUgPFNwZWxsQ2hlY2tlci5jcHA+CiAjaW5jbHVkZSA8U3BsaXRFbGVtZW50Q29tbWFuZC5j
cHA+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMzBjNzc1NS4uYzgxODczYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTcyNSw0NSArMTcyNSwxMSBAQCB2b2lkIEVk
aXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24p
CiAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7CiAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3Jk
OwogCi0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAgICBncmFtbWFyU2VhcmNoUmFu
Z2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKICAgICBib29sIGlzU3Bl
bGxpbmcgPSB0cnVlOwogICAgIGludCBmb3VuZE9mZnNldCA9IDA7Ci0gICAgU3RyaW5nIGZvdW5k
SXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSku
ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KCksIGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKLSAgICBpZiAoaXNT
cGVsbGluZykgewotICAgICAgICBtaXNzcGVsbGVkV29yZCA9IGZvdW5kSXRlbTsKLSAgICAgICAg
bWlzc3BlbGxpbmdPZmZzZXQgPSBmb3VuZE9mZnNldDsKLSAgICB9IGVsc2UgewotICAgICAgICBi
YWRHcmFtbWFyUGhyYXNlID0gZm91bmRJdGVtOwotICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0
ID0gZm91bmRPZmZzZXQ7Ci0gICAgfQotI2Vsc2UKKyAgICBTdHJpbmcgZm91bmRJdGVtOwogICAg
IFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwotICAgIG1pc3NwZWxsZWRXb3Jk
ID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5k
Rmlyc3RNaXNzcGVsbGluZyhtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3BlbGxp
bmdSYW5nZSk7Ci0KLSNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKLSAgICAvLyBTZWFyY2ggZm9y
IGJhZCBncmFtbWFyIHRoYXQgb2NjdXJzIHByaW9yIHRvIHRoZSBuZXh0IG1pc3NwZWxsZWQgd29y
ZCAoaWYgYW55KQotICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2Ut
PmNsb25lUmFuZ2UoZWMpOwotICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIC8vIFN0b3AgbG9va2luZyBhdCBzdGFydCBvZiBuZXh0IG1pc3NwZWxsZWQgd29yZAot
ICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycyhncmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCkp
OwotICAgICAgICBjaGFycy5hZHZhbmNlKG1pc3NwZWxsaW5nT2Zmc2V0KTsKLSAgICAgICAgZ3Jh
bW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hhcnMucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZWMp
LCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldChlYyksIGVjKTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICBiYWRHcmFtbWFyUGhyYXNl
ID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBncmFtbWFyU2VhcmNoUmFuZ2UpLmZpbmRG
aXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2Up
OwotI2VuZGlmCi0jZW5kaWYKLSAgICAKLSAgICAvLyBJZiB3ZSBmb3VuZCBuZWl0aGVyIGJhZCBn
cmFtbWFyIG5vciBhIG1pc3NwZWxsZWQgd29yZCwgd3JhcCBhbmQgdHJ5IGFnYWluIChidXQgZG9u
J3QgYm90aGVyIGlmIHdlIHN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKLSAgICAvLyBi
bG9jayByYXRoZXIgdGhhbiBhdCBhIHNlbGVjdGlvbikuCi0gICAgaWYgKHN0YXJ0ZWRXaXRoU2Vs
ZWN0aW9uICYmICFtaXNzcGVsbGVkV29yZCAmJiAhYmFkR3JhbW1hclBocmFzZSkgewotICAgICAg
ICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRTdGFydCh0b3BOb2RlLCAwLCBlYyk7Ci0gICAgICAg
IC8vIGdvaW5nIHVudGlsIHRoZSBlbmQgb2YgdGhlIHZlcnkgZmlyc3QgY2h1bmsgd2UgdGVzdGVk
IGlzIGZhciBlbm91Z2gKLSAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5kKHNlYXJj
aEVuZE5vZGVBZnRlcldyYXAsIHNlYXJjaEVuZE9mZnNldEFmdGVyV3JhcCwgZWMpOwotICAgICAg
ICAKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorICAgIGlmICh1bmlmaWVkVGV4dENo
ZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdT
ZWFyY2hSYW5nZS0+Y2xvbmVSYW5nZShlYyk7CiAgICAgICAgIGZvdW5kSXRlbSA9IFRleHRDaGVj
a2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3Bl
bGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcs
IGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAgaWYgKGlzU3BlbGxpbmcpIHsK
QEAgLTE3NzMsMTAgKzE3MzksMTEgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVs
bGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAgICAgYmFkR3JhbW1hclBo
cmFzZSA9IGZvdW5kSXRlbTsKICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3Vu
ZE9mZnNldDsKICAgICAgICAgfQotI2Vsc2UKKyAgICB9IGVsc2UgewogICAgICAgICBtaXNzcGVs
bGVkV29yZCA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5n
ZSkuZmluZEZpcnN0TWlzc3BlbGxpbmcobWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2UpOwogCiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCisgICAgICAgIC8v
IFNlYXJjaCBmb3IgYmFkIGdyYW1tYXIgdGhhdCBvY2N1cnMgcHJpb3IgdG8gdGhlIG5leHQgbWlz
c3BlbGxlZCB3b3JkIChpZiBhbnkpCiAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxs
aW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwogICAgICAgICBpZiAoIW1pc3NwZWxsZWRX
b3JkLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9m
IG5leHQgbWlzc3BlbGxlZCB3b3JkCkBAIC0xNzg0LDExICsxNzUxLDQ1IEBAIHZvaWQgRWRpdG9y
OjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAg
ICAgICAgICAgIGNoYXJzLmFkdmFuY2UobWlzc3BlbGxpbmdPZmZzZXQpOwogICAgICAgICAgICAg
Z3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hhcnMucmFuZ2UoKS0+c3RhcnRDb250YWluZXIo
ZWMpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldChlYyksIGVjKTsKICAgICAgICAgfQotCisg
ICAgCiAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgICAg
IGJhZEdyYW1tYXJQaHJhc2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIGdyYW1tYXJT
ZWFyY2hSYW5nZSkuZmluZEZpcnN0QmFkR3JhbW1hcihncmFtbWFyRGV0YWlsLCBncmFtbWFyUGhy
YXNlT2Zmc2V0LCBmYWxzZSk7CiAjZW5kaWYKKyAgICB9CisgICAgCisgICAgLy8gSWYgd2UgZm91
bmQgbmVpdGhlciBiYWQgZ3JhbW1hciBub3IgYSBtaXNzcGVsbGVkIHdvcmQsIHdyYXAgYW5kIHRy
eSBhZ2FpbiAoYnV0IGRvbid0IGJvdGhlciBpZiB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcg
b2YgdGhlCisgICAgLy8gYmxvY2sgcmF0aGVyIHRoYW4gYXQgYSBzZWxlY3Rpb24pLgorICAgIGlm
IChzdGFydGVkV2l0aFNlbGVjdGlvbiAmJiAhbWlzc3BlbGxlZFdvcmQgJiYgIWJhZEdyYW1tYXJQ
aHJhc2UpIHsKKyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQodG9wTm9kZSwg
MCwgZWMpOworICAgICAgICAvLyBnb2luZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSB2ZXJ5IGZpcnN0
IGNodW5rIHdlIHRlc3RlZCBpcyBmYXIgZW5vdWdoCisgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFu
Z2UtPnNldEVuZChzZWFyY2hFbmROb2RlQWZ0ZXJXcmFwLCBzZWFyY2hFbmRPZmZzZXRBZnRlcldy
YXAsIGVjKTsKKyAgICAgICAgCisgICAgICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVk
KCkpIHsKKyAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFu
Z2UtPmNsb25lUmFuZ2UoZWMpOworICAgICAgICAgICAgZm91bmRJdGVtID0gVGV4dENoZWNraW5n
SGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGlu
Z09yQmFkR3JhbW1hcihpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgaXNTcGVsbGluZywgZm91
bmRPZmZzZXQsIGdyYW1tYXJEZXRhaWwpOworICAgICAgICAgICAgaWYgKGlzU3BlbGxpbmcpIHsK
KyAgICAgICAgICAgICAgICBtaXNzcGVsbGVkV29yZCA9IGZvdW5kSXRlbTsKKyAgICAgICAgICAg
ICAgICBtaXNzcGVsbGluZ09mZnNldCA9IGZvdW5kT2Zmc2V0OworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gZm91bmRJdGVtOworICAgICAg
ICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNldDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gVGV4dENo
ZWNraW5nSGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNz
cGVsbGluZyhtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7
CisKKyNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKKyAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hS
YW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOworICAgICAgICAgICAg
aWYgKCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBTdG9w
IGxvb2tpbmcgYXQgc3RhcnQgb2YgbmV4dCBtaXNzcGVsbGVkIHdvcmQKKyAgICAgICAgICAgICAg
ICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycyhncmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIGNoYXJzLmFkdmFuY2UobWlzc3BlbGxpbmdPZmZzZXQpOworICAgICAgICAg
ICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29u
dGFpbmVyKGVjKSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoZWMpLCBlYyk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKKyAg
ICAgICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVu
dCgpLCBncmFtbWFyU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFp
bCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOwogI2VuZGlmCisgICAgICAgIH0KICAgICB9
CiAgICAgCiAgICAgaWYgKCFiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkgewpAQCAtMTg4OCwx
MiArMTg4OSwxMyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVk
U2VsZWN0aW9uKCkKIAogVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxl
ZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1t
YXRpY2FsKQogewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpOwot
ICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwotICAgIHJl
dHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIHJhbmdlKS5ndWVzc2VzRm9yTWlzc3Bl
bGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBtaXNz
cGVsbGVkLCB1bmdyYW1tYXRpY2FsKTsKLSNlbHNlCisgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tl
ckVuYWJsZWQoKSkgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+c2Vs
ZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIGlmICghcmFuZ2UpCisgICAg
ICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJuIFRleHRDaGVj
a2luZ0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1t
YXRpY2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3Jh
bW1hdGljYWwpOworICAgIH0KKwogICAgIG1pc3NwZWxsZWQgPSBpc1NlbGVjdGlvbk1pc3NwZWxs
ZWQoKTsKICAgICBpZiAobWlzc3BlbGxlZCkgewogICAgICAgICB1bmdyYW1tYXRpY2FsID0gZmFs
c2U7CkBAIC0xOTA1LDcgKzE5MDcsNiBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKGJvb2wmIG1pc3NwZQogICAgIH0K
ICAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7CiAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7
Ci0jZW5kaWYKIH0KIAogdm9pZCBFZGl0b3I6OnNob3dTcGVsbGluZ0d1ZXNzUGFuZWwoKQpAQCAt
MTk0Nyw4MCArMTk0OCw3NSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0aQogCiB2b2lkIEVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGlu
ZywgYm9vbCBkb1JlcGxhY2VtZW50KQogewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcp
Ci0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihzZWxlY3Rp
b25BZnRlclR5cGluZyk7CisgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewor
ICAgICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseVBlbmRpbmdDb3JyZWN0aW9uKHNlbGVj
dGlvbkFmdGVyVHlwaW5nKTsKIAotICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRDaGVja2lu
Z09wdGlvbnMgPSAwOworICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0Q2hlY2tpbmdP
cHRpb25zID0gMDsKIAotICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgp
KQotICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IFRleHRDaGVja2luZ1R5cGVTcGVsbGlu
ZzsKKyAgICAgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAg
ICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsK
IAogI2lmIFVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKLSAgICBpZiAoZG9SZXBsYWNl
bWVudCAKLSAgICAgICAgJiYgKGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkK
LSAgICAgICAgICAgIHx8IGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKQotICAgICAg
ICAgICAgfHwgaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICAg
ICB8fCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKQotICAgICAgICAgICAgfHwg
KCh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKSAmJiBpc0F1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkpKQotICAgICAgICB0ZXh0Q2hlY2tp
bmdPcHRpb25zIHw9IFRleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudDsKKyAgICAgICAgaWYgKGRv
UmVwbGFjZW1lbnQgCisgICAgICAgICAgICAmJiAoaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlv
bkVuYWJsZWQoKQorICAgICAgICAgICAgICAgIHx8IGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVu
YWJsZWQoKQorICAgICAgICAgICAgICAgIHx8IGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVu
YWJsZWQoKQorICAgICAgICAgICAgICAgIHx8IGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5h
YmxlZCgpCisgICAgICAgICAgICAgICAgfHwgKCh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgVGV4dENo
ZWNraW5nVHlwZVNwZWxsaW5nKSAmJiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJs
ZWQoKSkpKQorICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdU
eXBlUmVwbGFjZW1lbnQ7CiAjZW5kaWYKLSAgICBpZiAoIXRleHRDaGVja2luZ09wdGlvbnMgJiAo
VGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50KSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIXRleHRDaGVja2luZ09wdGlvbnMgJiAoVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50KSkKKyAg
ICAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkK
LSAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcjsK
KyAgICAgICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgdGV4
dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcjsKIAotICAgIFZpc2li
bGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQo
d29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSksIGVuZE9mV29yZCh3b3JkU3RhcnQsIFJp
Z2h0V29yZElmT25Cb3VuZGFyeSkpOwotICAgIGlmICh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgVGV4
dENoZWNraW5nVHlwZUdyYW1tYXIpIHsKLSAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rl
ZFNlbnRlbmNlID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VudGVuY2Uod29yZFN0YXJ0KSwg
ZW5kT2ZTZW50ZW5jZSh3b3JkU3RhcnQpKTsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBhZGphY2VudFdvcmRzLnRv
Tm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIHNlbGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSk7CisgICAgICAgIFZpc2libGVTZWxlY3Rpb24gYWRqYWNlbnRXb3JkcyA9IFZp
c2libGVTZWxlY3Rpb24oc3RhcnRPZldvcmQod29yZFN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFy
eSksIGVuZE9mV29yZCh3b3JkU3RhcnQsIFJpZ2h0V29yZElmT25Cb3VuZGFyeSkpOworICAgICAg
ICBpZiAodGV4dENoZWNraW5nT3B0aW9ucyAmIFRleHRDaGVja2luZ1R5cGVHcmFtbWFyKSB7Cisg
ICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGVkU2VudGVuY2UgPSBWaXNpYmxlU2Vs
ZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZSh3b3JkU3RhcnQpLCBlbmRPZlNlbnRlbmNlKHdvcmRTdGFy
dCkpOworICAgICAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdlKCku
Z2V0KCksIHNlbGVjdGVkU2VudGVuY2UudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CisgICAg
ICAgIH0gZWxzZQorICAgICAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJh
bmdlKCkuZ2V0KCksIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJh
bmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBhZGphY2VudFdvcmRzLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCksIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Ci0gICAg
fQotCi0jZWxzZQotICAgIFVOVVNFRF9QQVJBTShzZWxlY3Rpb25BZnRlclR5cGluZyk7Ci0gICAg
VU5VU0VEX1BBUkFNKGRvUmVwbGFjZW1lbnQpOwotCi0gICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVs
bENoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghaXNDb250
aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKIAotICAg
IC8vIENoZWNrIHNwZWxsaW5nIG9mIG9uZSB3b3JkCi0gICAgUmVmUHRyPFJhbmdlPiBtaXNzcGVs
bGluZ1JhbmdlOwotICAgIG1hcmtNaXNzcGVsbGluZ3MoVmlzaWJsZVNlbGVjdGlvbihzdGFydE9m
V29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFy
dCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSksIG1pc3NwZWxsaW5nUmFuZ2UpOworICAgICAgICAv
LyBDaGVjayBzcGVsbGluZyBvZiBvbmUgd29yZAorICAgICAgICBSZWZQdHI8UmFuZ2U+IG1pc3Nw
ZWxsaW5nUmFuZ2U7CisgICAgICAgIG1hcmtNaXNzcGVsbGluZ3MoVmlzaWJsZVNlbGVjdGlvbihz
dGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdv
cmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSksIG1pc3NwZWxsaW5nUmFuZ2UpOwogCi0g
ICAgLy8gQXV0b2NvcnJlY3QgdGhlIG1pc3NwZWxsZWQgd29yZC4KLSAgICBpZiAoIW1pc3NwZWxs
aW5nUmFuZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gQXV0b2NvcnJlY3QgdGhlIG1p
c3NwZWxsZWQgd29yZC4KKyAgICAgICAgaWYgKCFtaXNzcGVsbGluZ1JhbmdlKQorICAgICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIC8vIEdldCB0aGUgbWlzc3BlbGxlZCB3b3JkLgotICAgIGNv
bnN0IFN0cmluZyBtaXNzcGVsbGVkV29yZCA9IHBsYWluVGV4dChtaXNzcGVsbGluZ1JhbmdlLmdl
dCgpKTsKLSAgICBTdHJpbmcgYXV0b2NvcnJlY3RlZFN0cmluZyA9IHRleHRDaGVja2VyKCktPmdl
dEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3JkKTsK
LQotICAgIC8vIElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHksIHJlcGxhY2UgdGhl
IG1pc3NwZWxsZWQgd29yZCBieSB0aGlzIHdvcmQuCi0gICAgaWYgKCFhdXRvY29ycmVjdGVkU3Ry
aW5nLmlzRW1wdHkoKSkgewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIG5ld1NlbGVjdGlvbiht
aXNzcGVsbGluZ1JhbmdlLmdldCgpLCBET1dOU1RSRUFNKTsKLSAgICAgICAgaWYgKG5ld1NlbGVj
dGlvbiAhPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpIHsKLSAgICAgICAgICAg
IGlmICghZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNob3VsZENoYW5nZVNlbGVjdGlvbihuZXdTZWxl
Y3Rpb24pKQorICAgICAgICAvLyBHZXQgdGhlIG1pc3NwZWxsZWQgd29yZC4KKyAgICAgICAgY29u
c3QgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGxhaW5UZXh0KG1pc3NwZWxsaW5nUmFuZ2UuZ2V0
KCkpOworICAgICAgICBTdHJpbmcgYXV0b2NvcnJlY3RlZFN0cmluZyA9IHRleHRDaGVja2VyKCkt
PmdldEF1dG9Db3JyZWN0U3VnZ2VzdGlvbkZvck1pc3NwZWxsZWRXb3JkKG1pc3NwZWxsZWRXb3Jk
KTsKKworICAgICAgICAvLyBJZiBhdXRvY29ycmVjdGVkIHdvcmQgaXMgbm9uIGVtcHR5LCByZXBs
YWNlIHRoZSBtaXNzcGVsbGVkIHdvcmQgYnkgdGhpcyB3b3JkLgorICAgICAgICBpZiAoIWF1dG9j
b3JyZWN0ZWRTdHJpbmcuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9u
IG5ld1NlbGVjdGlvbihtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBET1dOU1RSRUFNKTsKKyAgICAg
ICAgICAgIGlmIChuZXdTZWxlY3Rpb24gIT0gZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNlbGVjdGlv
bigpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2hvdWxk
Q2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2V0U2VsZWN0aW9uKG5l
d1NlbGVjdGlvbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghZnJhbWUoKS0+
ZWRpdG9yKCktPnNob3VsZEluc2VydFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgbWlzc3BlbGxp
bmdSYW5nZS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uVHlwZWQpKQogICAgICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24o
bmV3U2VsZWN0aW9uKTsKKyAgICAgICAgICAgIGZyYW1lKCktPmVkaXRvcigpLT5yZXBsYWNlU2Vs
ZWN0aW9uV2l0aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgZmFsc2UsIGZhbHNlKTsKKworICAg
ICAgICAgICAgLy8gUmVzZXQgdGhlIGNoYXJldCBvbmUgY2hhcmFjdGVyIGZ1cnRoZXIuCisgICAg
ICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+bW92ZVRvKGZyYW1lKCktPnNlbGVjdGlvbigp
LT5lbmQoKSk7CisgICAgICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+bW9kaWZ5KEZyYW1l
U2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3Jh
bnVsYXJpdHkpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFmcmFtZSgpLT5lZGl0b3IoKS0+
c2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdl
dCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCisgICAgICAgIGlmICghaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGZyYW1lKCktPmVk
aXRvcigpLT5yZXBsYWNlU2VsZWN0aW9uV2l0aFRleHQoYXV0b2NvcnJlY3RlZFN0cmluZywgZmFs
c2UsIGZhbHNlKTsKLQotICAgICAgICAvLyBSZXNldCB0aGUgY2hhcmV0IG9uZSBjaGFyYWN0ZXIg
ZnVydGhlci4KLSAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPm1vdmVUbyhmcmFtZSgpLT5z
ZWxlY3Rpb24oKS0+ZW5kKCkpOwotICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+bW9kaWZ5
KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFj
dGVyR3JhbnVsYXJpdHkpOwotICAgIH0KLQotICAgIGlmICghaXNHcmFtbWFyQ2hlY2tpbmdFbmFi
bGVkKCkpCi0gICAgICAgIHJldHVybjsKICAgICAKLSAgICAvLyBDaGVjayBncmFtbWFyIG9mIGVu
dGlyZSBzZW50ZW5jZQotICAgIG1hcmtCYWRHcmFtbWFyKFZpc2libGVTZWxlY3Rpb24oc3RhcnRP
ZlNlbnRlbmNlKHdvcmRTdGFydCksIGVuZE9mU2VudGVuY2Uod29yZFN0YXJ0KSkpOwotI2VuZGlm
CisgICAgICAgIC8vIENoZWNrIGdyYW1tYXIgb2YgZW50aXJlIHNlbnRlbmNlCisgICAgICAgIG1h
cmtCYWRHcmFtbWFyKFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKHdvcmRTdGFydCks
IGVuZE9mU2VudGVuY2Uod29yZFN0YXJ0KSkpOworICAgIH0KIH0KICAgICAKIHZvaWQgRWRpdG9y
OjptYXJrTWlzc3BlbGxpbmdzT3JCYWRHcmFtbWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNl
bGVjdGlvbiwgYm9vbCBjaGVja1NwZWxsaW5nLCBSZWZQdHI8UmFuZ2U+JiBmaXJzdE1pc3NwZWxs
aW5nUmFuZ2UpCkBAIC0yMDg4LDcgKzIwODQsMTEgQEAgdm9pZCBFZGl0b3I6Om1hcmtCYWRHcmFt
bWFyKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikKIAogdm9pZCBFZGl0b3I6Om1h
cmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5nVHlwZU1h
c2sgdGV4dENoZWNraW5nT3B0aW9ucywgUmFuZ2UqIHNwZWxsaW5nUmFuZ2UsIFJhbmdlKiBncmFt
bWFyUmFuZ2UpCiB7Ci0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKKyAgICBpZiAoIXVu
aWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIFRoZXJlIHNob3VsZG4ndCBiZSBw
ZW5kaW5nIGF1dG9jb3JyZWN0aW9uIGF0IHRoaXMgbW9tZW50LgogICAgIEFTU0VSVCghbV9zcGVs
bGluZ0NvcnJlY3Rvci0+aGFzUGVuZGluZ0NvcnJlY3Rpb24oKSk7CiAKQEAgLTIxNDIsMTIgKzIx
NDIsMTEgQEAgdm9pZCBFZGl0b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5S
YW5nZXMoVGV4dENoZWNraW5nVHlwZU1hc2sgdGV4dEMKIAogICAgIFZlY3RvcjxUZXh0Q2hlY2tp
bmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgaWYgKHNob3VsZE1hcmtHcmFtbWFyKQotICAgICAgICB0
ZXh0Q2hlY2tlcigpLT5jaGVja1RleHRPZlBhcmFncmFwaChncmFtbWFyUGFyYWdyYXBoLnRleHRD
aGFyYWN0ZXJzKCksIGdyYW1tYXJQYXJhZ3JhcGgudGV4dExlbmd0aCgpLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVN
YXNrKHRleHRDaGVja2luZ09wdGlvbnMpLCByZXN1bHRzKTsKKyAgICAgICAgY2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgodGV4dENoZWNrZXIoKSwgZ3JhbW1hclBhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygp
LCBncmFtbWFyUGFyYWdyYXBoLnRleHRMZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKHRleHRDaGVja2luZ09wdGlvbnMpLCBy
ZXN1bHRzKTsKICAgICBlbHNlCi0gICAgICAgIHRleHRDaGVja2VyKCktPmNoZWNrVGV4dE9mUGFy
YWdyYXBoKHNwZWxsaW5nUGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHNwZWxsaW5nUGFyYWdy
YXBoLnRleHRMZW5ndGgoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwg
cmVzdWx0cyk7Ci0gICAgICAgIAorICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCh0ZXh0Q2hl
Y2tlcigpLCBzcGVsbGluZ1BhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygpLCBzcGVsbGluZ1BhcmFn
cmFwaC50ZXh0TGVuZ3RoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVU
ZXh0Q2hlY2tpbmdUeXBlTWFzayh0ZXh0Q2hlY2tpbmdPcHRpb25zKSwgcmVzdWx0cyk7CiAKICAg
ICAvLyBJZiB0aGlzIGNoZWNraW5nIGlzIG9ubHkgZm9yIHNob3dpbmcgY29ycmVjdGlvbiBwYW5l
bCwgd2Ugc2hvdWxkbid0IGJvdGhlciB0byBtYXJrIG1pc3NwZWxsaW5ncy4KICAgICBpZiAoc2hv
dWxkU2hvd0NvcnJlY3Rpb25QYW5lbCkKQEAgLTIyNzksMTcgKzIyNzgsMTUgQEAgdm9pZCBFZGl0
b3I6Om1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMoVGV4dENoZWNraW5n
VHlwZU1hc2sgdGV4dEMKICAgICAgICAgICAgIG1fZnJhbWUtPnNlbGVjdGlvbigpLT5tb2RpZnko
RnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0
ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0KICAgICB9Ci0jZWxzZQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIFVOVVNFRF9QQVJBTSh0ZXh0Q2hlY2tpbmdPcHRpb25zKTsKLSAgICBV
TlVTRURfUEFSQU0oc3BlbGxpbmdSYW5nZSk7Ci0gICAgVU5VU0VEX1BBUkFNKGdyYW1tYXJSYW5n
ZSk7Ci0jZW5kaWYgLy8gVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKIH0KIAogdm9pZCBFZGl0
b3I6OmNoYW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKGNvbnN0IFN0cmluZyYgcmVwbGFjZWRTdHJp
bmcpCiB7Ci0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKKyAgICBpZiAoIXVuaWZpZWRU
ZXh0Q2hlY2tlckVuYWJsZWQoKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChyZXBsYWNlZFN0cmluZy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybjsKIApAQCAtMjMwMywyOCArMjMwMCwyNCBAQCB2b2lkIEVkaXRvcjo6
Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykK
ICAgICBSZWZQdHI8UmFuZ2U+IGNoYW5nZWRSYW5nZSA9IHBhcmFncmFwaC5zdWJyYW5nZShwYXJh
Z3JhcGguY2hlY2tpbmdTdGFydCgpLCByZXBsYWNlZFN0cmluZy5sZW5ndGgoKSk7CiAgICAgY2hh
bmdlZFJhbmdlLT5zdGFydENvbnRhaW5lcigpLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPmFkZE1h
cmtlcihjaGFuZ2VkUmFuZ2UuZ2V0KCksIERvY3VtZW50TWFya2VyOjpSZXBsYWNlbWVudCwgU3Ry
aW5nKCkpOwogICAgIG1fc3BlbGxpbmdDb3JyZWN0b3ItPm1hcmtSZXZlcnNlZChjaGFuZ2VkUmFu
Z2UuZ2V0KCkpOwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBVTlVTRURf
UEFSQU0ocmVwbGFjZWRTdHJpbmcpOwotI2VuZGlmIC8vIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJ
TkcpCiB9CiAKIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHNwZWxsaW5nU2VsZWN0aW9uLCBib29sIG1hcmtHcmFtbWFy
LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBncmFtbWFyU2VsZWN0aW9uKQogewotI2lmIFVTRShV
TklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5n
RW5hYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgVGV4dENoZWNraW5nVHlwZU1hc2sgdGV4
dENoZWNraW5nT3B0aW9ucyA9IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2lu
Z1R5cGVDb3JyZWN0aW9uOwotICAgIGlmIChtYXJrR3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2lu
Z0VuYWJsZWQoKSkKLSAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdU
eXBlR3JhbW1hcjsKLSAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2Vz
KHRleHRDaGVja2luZ09wdGlvbnMsIHNwZWxsaW5nU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCksIGdyYW1tYXJTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSk7Ci0j
ZWxzZQotICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwotICAgIG1hcmtN
aXNzcGVsbGluZ3Moc3BlbGxpbmdTZWxlY3Rpb24sIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci0g
ICAgaWYgKG1hcmtHcmFtbWFyKQotICAgICAgICBtYXJrQmFkR3JhbW1hcihncmFtbWFyU2VsZWN0
aW9uKTsKLSNlbmRpZgorICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKKyAg
ICAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0Q2hlY2tpbmdPcHRp
b25zID0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rp
b247CisgICAgICAgIGlmIChtYXJrR3JhbW1hciAmJiBpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQo
KSkKKyAgICAgICAgICAgIHRleHRDaGVja2luZ09wdGlvbnMgfD0gVGV4dENoZWNraW5nVHlwZUdy
YW1tYXI7CisgICAgICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXMo
dGV4dENoZWNraW5nT3B0aW9ucywgc3BlbGxpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSwgZ3JhbW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IGZpcnN0TWlzc3BlbGxpbmdSYW5nZTsK
KyAgICAgICAgbWFya01pc3NwZWxsaW5ncyhzcGVsbGluZ1NlbGVjdGlvbiwgZmlyc3RNaXNzcGVs
bGluZ1JhbmdlKTsKKyAgICAgICAgaWYgKG1hcmtHcmFtbWFyKQorICAgICAgICAgICAgbWFya0Jh
ZEdyYW1tYXIoZ3JhbW1hclNlbGVjdGlvbik7CisgICAgfQogfQogCiB2b2lkIEVkaXRvcjo6dW5h
cHBsaWVkU3BlbGxDb3JyZWN0aW9uKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbk9m
Q29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0
aW9uKQpAQCAtMzIzNiw0ICszMjI5LDEyIEBAIHZvaWQgRWRpdG9yOjpkZXZpY2VTY2FsZUZhY3Rv
ckNoYW5nZWQoKQogICAgIG1fZGVsZXRlQnV0dG9uQ29udHJvbGxlci0+ZGV2aWNlU2NhbGVGYWN0
b3JDaGFuZ2VkKCk7CiB9CiAKK2Jvb2wgRWRpdG9yOjp1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVk
KCkgY29uc3QKK3sKKyAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gbV9mcmFtZS0+c2V0dGlu
Z3MoKSkKKyAgICAgICAgcmV0dXJuIHNldHRpbmdzLT51bmlmaWVkVGV4dENoZWNrZXJFbmFibGVk
KCk7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IGJkYjk4YWYuLjllMWMyNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaApAQCAtNDIyLDYgKzQyMiw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjaGFuZ2VT
ZWxlY3Rpb25BZnRlckNvbW1hbmQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgbmV3U2VsZWN0aW9u
LCBib29sIGNsb3NlVHlwaW5nLCBib29sIGNsZWFyVHlwaW5nU3R5bGUpOwogCiAgICAgTm9kZSog
ZmluZEV2ZW50VGFyZ2V0RnJvbVNlbGVjdGlvbigpIGNvbnN0OworCisgICAgYm9vbCB1bmlmaWVk
VGV4dENoZWNrZXJFbmFibGVkKCkgY29uc3Q7CiB9OwogCiBpbmxpbmUgdm9pZCBFZGl0b3I6OnNl
dFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZShib29sIGZsYWcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKaW5kZXggMGJkZmJkOC4uNjExMWQ5OSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMjks
NyArMjksOSBAQAogCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudE1h
cmtlckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlJhbmdlLmgi
CisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgog
I2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgpA
QCAtMTU1LDkgKzE1NywxNyBAQCBpbnQgVGV4dENoZWNraW5nUGFyYWdyYXBoOjpjaGVja2luZ0xl
bmd0aCgpIGNvbnN0CiBUZXh0Q2hlY2tpbmdIZWxwZXI6OlRleHRDaGVja2luZ0hlbHBlcihFZGl0
b3JDbGllbnQqIGNsaWVudCwgUGFzc1JlZlB0cjxSYW5nZT4gcmFuZ2UpCiAgICAgOiBtX2NsaWVu
dChjbGllbnQpCiAgICAgLCBtX3JhbmdlKHJhbmdlKQorICAgICwgbV91bmlmaWVkVGV4dENoZWNr
ZXJFbmFibGVkKGZhbHNlKQogewogICAgIEFTU0VSVF9BUkcobV9jbGllbnQsIG1fY2xpZW50KTsK
ICAgICBBU1NFUlRfQVJHKG1fcmFuZ2UsIG1fcmFuZ2UpOworCisgICAgaWYgKG1fcmFuZ2UpIHsK
KyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IG1fcmFuZ2UtPm93bmVyRG9jdW1lbnQoKS0+ZnJh
bWUoKSkgeworICAgICAgICAgICAgaWYgKFNldHRpbmdzKiBzZXR0aW5ncyA9IGZyYW1lLT5zZXR0
aW5ncygpKQorICAgICAgICAgICAgICAgIG1fdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCA9IHNl
dHRpbmdzLT51bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCk7CisgICAgICAgIH0KKyAgICB9CiB9
CiAKIFRleHRDaGVja2luZ0hlbHBlcjo6flRleHRDaGVja2luZ0hlbHBlcigpCkBAIC0yMjUsMTIg
KzIzNSwxNiBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGlu
ZyhpbnQmIGZpcnN0TWlzc3BlbGxpbmdPZmZzZXQsIGJvbwogCiBTdHJpbmcgVGV4dENoZWNraW5n
SGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1h
ciwgYm9vbCYgb3V0SXNTcGVsbGluZywgaW50JiBvdXRGaXJzdEZvdW5kT2Zmc2V0LCBHcmFtbWFy
RGV0YWlsJiBvdXRHcmFtbWFyRGV0YWlsKQogewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJ
TkcpCisgICAgaWYgKCFtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAiIjsKKyAgICB9CisKICAgICBTdHJp
bmcgZmlyc3RGb3VuZEl0ZW07CiAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkOwogICAgIFN0cmlu
ZyBiYWRHcmFtbWFyUGhyYXNlOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIAorCiAg
ICAgLy8gSW5pdGlhbGl6ZSBvdXQgcGFyYW1ldGVyczsgdGhlc2Ugd2lsbCBiZSB1cGRhdGVkIGlm
IHdlIGZpbmQgc29tZXRoaW5nIHRvIHJldHVybi4KICAgICBvdXRJc1NwZWxsaW5nID0gdHJ1ZTsK
ICAgICBvdXRGaXJzdEZvdW5kT2Zmc2V0ID0gMDsKQEAgLTIzOCw3ICsyNTIsNyBAQCBTdHJpbmcg
VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29s
IGNoZWNrR3JhbW1hciwgYgogICAgIG91dEdyYW1tYXJEZXRhaWwubGVuZ3RoID0gMDsKICAgICBv
dXRHcmFtbWFyRGV0YWlsLmd1ZXNzZXMuY2xlYXIoKTsKICAgICBvdXRHcmFtbWFyRGV0YWlsLnVz
ZXJEZXNjcmlwdGlvbiA9ICIiOwotICAgIAorCiAgICAgLy8gRXhwYW5kIHRoZSBzZWFyY2ggcmFu
Z2UgdG8gZW5jb21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0ZXh0IGNoZWNraW5nIG5l
ZWRzIHRoYXQgbXVjaCBjb250ZXh0LgogICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9m
ZnNldCBmcm9tIHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBvZiB0aGUg
b3JpZ2luYWwgc2VhcmNoIHJhbmdlLAogICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25v
cmUgcmVzdWx0cyBpbiB0aGlzIGFyZWEuCkBAIC0yNzYsOCArMjkwLDggQEAgU3RyaW5nIFRleHRD
aGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoYm9vbCBjaGVj
a0dyYW1tYXIsIGIKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBWZWN0b3I8VGV4
dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1R5
cGVNYXNrIGNoZWNraW5nVHlwZXMgPSBjaGVja0dyYW1tYXIgPyAoVGV4dENoZWNraW5nVHlwZVNw
ZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpIDogVGV4dENoZWNraW5nVHlwZVNwZWxs
aW5nOwotICAgICAgICAgICAgICAgIG1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLT5jaGVja1RleHRP
ZlBhcmFncmFwaChwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJhZ3JhcGhTdHJpbmcu
bGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOwotICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKG1fY2xpZW50LT50ZXh0Q2hlY2tlcigp
LCBwYXJhZ3JhcGhTdHJpbmcuY2hhcmFjdGVycygpLCBwYXJhZ3JhcGhTdHJpbmcubGVuZ3RoKCks
IGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOworCiAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVGV4dENoZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0c1tpXTsKICAgICAgICAg
ICAgICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcg
JiYgcmVzdWx0LT5sb2NhdGlvbiA+PSBjdXJyZW50U3RhcnRPZmZzZXQgJiYgcmVzdWx0LT5sb2Nh
dGlvbiArIHJlc3VsdC0+bGVuZ3RoIDw9IGN1cnJlbnRFbmRPZmZzZXQpIHsKQEAgLTM0NCwxNCAr
MzU4LDYgQEAgU3RyaW5nIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxpbmdP
ckJhZEdyYW1tYXIoYm9vbCBjaGVja0dyYW1tYXIsIGIKICAgICAgICAgdG90YWxMZW5ndGhQcm9j
ZXNzZWQgKz0gY3VycmVudExlbmd0aDsKICAgICB9CiAgICAgcmV0dXJuIGZpcnN0Rm91bmRJdGVt
OwotI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBVTlVTRURfUEFSQU0oY2hl
Y2tHcmFtbWFyKTsKLSAgICBVTlVTRURfUEFSQU0ob3V0SXNTcGVsbGluZyk7Ci0gICAgVU5VU0VE
X1BBUkFNKG91dEZpcnN0Rm91bmRPZmZzZXQpOwotICAgIFVOVVNFRF9QQVJBTShvdXRHcmFtbWFy
RGV0YWlsKTsKLSAgICByZXR1cm4gIiI7Ci0jZW5kaWYgLy8gVVNFKFVOSUZJRURfVEVYVF9DSEVD
S0lORykKIH0KIAogaW50IFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0R3JhbW1hckRldGFp
bChjb25zdCBWZWN0b3I8R3JhbW1hckRldGFpbD4mIGdyYW1tYXJEZXRhaWxzLCBpbnQgYmFkR3Jh
bW1hclBocmFzZUxvY2F0aW9uLCBpbnQgLypiYWRHcmFtbWFyUGhyYXNlTGVuZ3RoKi8sIGludCBz
dGFydE9mZnNldCwgaW50IGVuZE9mZnNldCwgYm9vbCBtYXJrQWxsKQpAQCAtNTEwLDEyICs1MTYs
MTYgQEAgYm9vbCBUZXh0Q2hlY2tpbmdIZWxwZXI6OmlzVW5ncmFtbWF0aWNhbChWZWN0b3I8U3Ry
aW5nPiYgZ3Vlc3Nlc1ZlY3RvcikgY29uc3QKIAogVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5n
SGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wgY2hl
Y2tHcmFtbWFyLCBib29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKSBjb25zdAog
ewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCisgICAgaWYgKCFtX3VuaWZpZWRUZXh0
Q2hlY2tlckVuYWJsZWQpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworICAgIH0KKwogICAgIFZlY3RvcjxTdHJpbmc+IGd1
ZXNzZXM7CiAgICAgRXhjZXB0aW9uQ29kZSBlYzsKICAgICBtaXNzcGVsbGVkID0gZmFsc2U7CiAg
ICAgdW5ncmFtbWF0aWNhbCA9IGZhbHNlOwotICAgIAorCiAgICAgaWYgKCFtX2NsaWVudCB8fCAh
bV9yYW5nZSB8fCBtX3JhbmdlLT5jb2xsYXBzZWQoZWMpKQogICAgICAgICByZXR1cm4gZ3Vlc3Nl
czsKIApAQCAtNTI2LDggKzUzNiw4IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBl
cjo6Z3Vlc3Nlc0Zvck1pc3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sCiAKICAgICBW
ZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOwogICAgIFRleHRDaGVja2luZ1R5cGVN
YXNrIGNoZWNraW5nVHlwZXMgPSBjaGVja0dyYW1tYXIgPyAoVGV4dENoZWNraW5nVHlwZVNwZWxs
aW5nIHwgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpIDogVGV4dENoZWNraW5nVHlwZVNwZWxsaW5n
OwotICAgIG1fY2xpZW50LT50ZXh0Q2hlY2tlcigpLT5jaGVja1RleHRPZlBhcmFncmFwaChwYXJh
Z3JhcGgudGV4dENoYXJhY3RlcnMoKSwgcGFyYWdyYXBoLnRleHRMZW5ndGgoKSwgY2hlY2tpbmdU
eXBlcywgcmVzdWx0cyk7Ci0gICAgCisgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgobV9jbGllbnQt
PnRleHRDaGVja2VyKCksIHBhcmFncmFwaC50ZXh0Q2hhcmFjdGVycygpLCBwYXJhZ3JhcGgudGV4
dExlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzKTsKKwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGNvbnN0IFRleHRDaGVj
a2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07CiAgICAgICAgIGlmIChyZXN1bHQtPnR5
cGUgPT0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nICYmIHBhcmFncmFwaC5jaGVja2luZ1Jhbmdl
TWF0Y2hlcyhyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCkpIHsKQEAgLTUzOSwxMCAr
NTQ5LDEwIEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1p
c3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sCiAgICAgICAgICAgICByZXR1cm4gZ3Vl
c3NlczsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGlmICghY2hlY2tHcmFtbWFyKQog
ICAgICAgICByZXR1cm4gZ3Vlc3NlczsKLSAgICAgICAgCisKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewogICAgICAgICBjb25zdCBUZXh0Q2hlY2tp
bmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwogICAgICAgICBpZiAocmVzdWx0LT50eXBl
ID09IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyICYmIHBhcmFncmFwaC5pc0NoZWNraW5nUmFuZ2VD
b3ZlcmVkQnkocmVzdWx0LT5sb2NhdGlvbiwgcmVzdWx0LT5sZW5ndGgpKSB7CkBAIC01NjIsMTMg
KzU3Miw2IEBAIFZlY3RvcjxTdHJpbmc+IFRleHRDaGVja2luZ0hlbHBlcjo6Z3Vlc3Nlc0Zvck1p
c3NwZWxsZWRPclVuZ3JhbW1hdGljYWxSYW5nZShib29sCiAgICAgICAgIH0KICAgICB9CiAgICAg
cmV0dXJuIGd1ZXNzZXM7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIFVO
VVNFRF9QQVJBTShjaGVja0dyYW1tYXIpOwotICAgIFVOVVNFRF9QQVJBTShtaXNzcGVsbGVkKTsK
LSAgICBVTlVTRURfUEFSQU0odW5ncmFtbWF0aWNhbCk7Ci0gICAgcmV0dXJuIFZlY3RvcjxTdHJp
bmc+KCk7Ci0jZW5kaWYgLy8gVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKIH0KIAogCkBAIC01
OTAsNCArNTkzLDIxIEBAIHZvaWQgVGV4dENoZWNraW5nSGVscGVyOjptYXJrQWxsQmFkR3JhbW1h
cigpCiAgICAgZmluZEZpcnN0QmFkR3JhbW1hcihpZ25vcmVkR3JhbW1hckRldGFpbCwgaWdub3Jl
ZE9mZnNldCwgdHJ1ZSk7CiB9CiAKK3ZvaWQgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoVGV4dENoZWNr
ZXJDbGllbnQqIGNsaWVudCwgY29uc3QgVUNoYXIqIHRleHQsIGludCBsZW5ndGgsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIGNoZWNraW5nVHlwZXMsIFZl
Y3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKQoreworI2lmIFVTRShVTklGSUVEX1RF
WFRfQ0hFQ0tJTkcpCisgICAgY2xpZW50LT5jaGVja1RleHRPZlBhcmFncmFwaCh0ZXh0LCBsZW5n
dGgsIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOworI2Vsc2UKKyAgICAvLyBTaG91bGQgaW1wbGVt
ZW50IGxhdGVyIHRvIHVuaWZ5IHVuaWZpZWQgc3BlbGwtY2hlY2tpbmcgY29kZSBwYXRoIGFuZAor
ICAgIC8vIGxlZ2FjeSBzcGVsbC1jaGVja2luZyBjb2RlIHBhdGguCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgVU5VU0VEX1BBUkFNKGNsaWVudCk7CisgICAgVU5VU0VEX1BBUkFNKHRl
eHQpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOworICAgIFVOVVNFRF9QQVJBTShjaGVja2lu
Z1R5cGVzKTsKKyAgICBVTlVTRURfUEFSQU0ocmVzdWx0cyk7CisjZW5kaWYKK30KKwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmgKaW5kZXggOGI1YzY5MS4u
YjJhOWE2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdI
ZWxwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5o
CkBAIC0yNyw2ICsyNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUmFuZ2U7CiBj
bGFzcyBQb3NpdGlvbjsKK2NsYXNzIFNldHRpbmdzOwogCiBjbGFzcyBUZXh0Q2hlY2tpbmdQYXJh
Z3JhcGggewogcHVibGljOgpAQCAtOTAsOCArOTEsMTMgQEAgcHVibGljOgogcHJpdmF0ZToKICAg
ICBFZGl0b3JDbGllbnQqIG1fY2xpZW50OwogICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZTsKKyAg
ICBib29sIG1fdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZDsKKwogfTsKIAordm9pZCBjaGVja1Rl
eHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVudCosIGNvbnN0IFVDaGFyKiB0ZXh0LCBpbnQg
bGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayBj
aGVja2luZ1R5cGVzLCBWZWN0b3I8VGV4dENoZWNraW5nUmVzdWx0PiYgcmVzdWx0cyk7CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFRleHRDaGVja2luZ0hlbHBlcl9oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvU2V0dGluZ3MuY3BwCmluZGV4IGQ3ZTAwZDEuLjdhMjQxZTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvU2V0dGluZ3MuY3BwCkBAIC0xOTksNiArMTk5LDExIEBAIFNldHRpbmdzOjpTZXR0aW5ncyhQ
YWdlKiBwYWdlKQogICAgICwgbV9mdWxsU2NyZWVuQVBJRW5hYmxlZChmYWxzZSkKICNlbmRpZgog
ICAgICwgbV9hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZChmYWxzZSkKKyNpZiBVU0Uo
VU5JRklFRF9URVhUX0NIRUNLSU5HKQorICAgICwgbV91bmlmaWVkVGV4dENoZWNrZXJFbmFibGVk
KHRydWUpCisjZWxzZQorICAgICwgbV91bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKGZhbHNlKQor
I2VuZGlmCiAgICAgLCBtX21lbW9yeUluZm9FbmFibGVkKGZhbHNlKQogICAgICwgbV9pbnRlcmFj
dGl2ZUZvcm1WYWxpZGF0aW9uKGZhbHNlKQogICAgICwgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJr
cyhmYWxzZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAppbmRleCBkYjczNjQ4Li5mZGZlOWQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9TZXR0aW5ncy5oCkBAIC0zODYsNiArMzg2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIHNldEFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGJvb2wg
ZmxhZykgeyBtX2FzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkID0gZmxhZzsgfQogICAg
ICAgICBib29sIGFzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkgY29uc3QgIHsgcmV0
dXJuIG1fYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQ7IH0KIAorICAgICAgICB2b2lk
IHNldFVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoYm9vbCBmbGFnKSB7IG1fdW5pZmllZFRleHRD
aGVja2VyRW5hYmxlZCA9IGZsYWc7IH0KKyAgICAgICAgYm9vbCB1bmlmaWVkVGV4dENoZWNrZXJF
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV91bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkOyB9CisK
ICAgICAgICAgdm9pZCBzZXRNZW1vcnlJbmZvRW5hYmxlZChib29sIGZsYWcpIHsgbV9tZW1vcnlJ
bmZvRW5hYmxlZCA9IGZsYWc7IH0KICAgICAgICAgYm9vbCBtZW1vcnlJbmZvRW5hYmxlZCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWVtb3J5SW5mb0VuYWJsZWQ7IH0KIApAQCAtNTgwLDYgKzU4Myw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBtX2Z1bGxTY3JlZW5BUElFbmFibGVk
IDogMTsKICNlbmRpZgogICAgICAgICBib29sIG1fYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQ6IDE7CisgICAgICAgIGJvb2wgbV91bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkOiAxOwog
ICAgICAgICBib29sIG1fbWVtb3J5SW5mb0VuYWJsZWQ6IDE7CiAgICAgICAgIGJvb2wgbV9pbnRl
cmFjdGl2ZUZvcm1WYWxpZGF0aW9uOiAxOwogICAgICAgICBib29sIG1fdXNlUHJlSFRNTDVQYXJz
ZXJRdWlya3M6IDE7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109280</attachid>
            <date>2011-09-30 04:16:15 -0700</date>
            <delta_ts>2011-09-30 05:23:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>69128.diff</filename>
            <type>text/plain</type>
            <size>43677</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZDJkYTMzYi4uNmQwMjlkNSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKQEAgLTY0Myw5ICs2NDMsMTEgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGVkaXRp
bmcvUmVwbGFjZU5vZGVXaXRoU3BhbkNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNw
cAorICAgIGVkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0
UmVwbGFjZS5jcHAKICAgICBlZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKICAgICBlZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwCisgICAgZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAKICAg
ICBlZGl0aW5nL1NwbGl0VGV4dE5vZGVDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRUZXh0
Tm9kZUNvbnRhaW5pbmdFbGVtZW50Q29tbWFuZC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCmluZGV4IDFlNWY3NTQuLmYwYzcyYjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQpAQCAtMTQyMyw2ICsxNDIzLDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmggXAorICAgIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgXAorICAgIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NtYXJ0
UmVwbGFjZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBsYWNlLmggXAog
CVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcCBcCkBAIC0xNDMwLDYg
KzE0MzIsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
U3BlbGxDaGVja2VyLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0
aW9uQ29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3Jy
ZWN0aW9uQ29udHJvbGxlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRD
b21tYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5k
LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnBybwppbmRleCBlYzIwMjNjLi42NTc1N2NkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpA
QCAtNjA2LDggKzYwNiwxMCBAQCBTT1VSQ0VTICs9IFwKICAgICBlZGl0aW5nL1JlcGxhY2VOb2Rl
V2l0aFNwYW5Db21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAgXAogICAgIGVkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIFwKKyAgICBl
ZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1hbmQuY3BwIFwKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFj
ZUlDVS5jcHAgXAogICAgIGVkaXRpbmcvU3BlbGxDaGVja2VyLmNwcCBcCisgICAgZWRpdGluZy9T
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db250cm9sbGVyLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNw
cCBcCiAgICAgZWRpdGluZy9TcGxpdFRleHROb2RlQ29tbWFuZC5jcHAgXApAQCAtMTYxOSw2ICsx
NjIxLDcgQEAgSEVBREVSUyArPSBcCiAgICAgZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5oIFwKICAgICBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmggXAogICAgIGVkaXRp
bmcvU21hcnRSZXBsYWNlLmggXAorICAgIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZC5oIFwKICAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBcCiAgICAg
ZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmggXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9k
ZUNvbW1hbmQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9X
ZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCmluZGV4IGZlOWZiZjUuLmU0ZTEzMWYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qCkBAIC01MjQyMSw2ICs1MjQyMSw2MiBAQAogCQkJCQkvPgog
CQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CiAJCQk8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQor
ICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU2V0U2VsZWN0aW9uQ29t
bWFuZC5jcHAiCisgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZp
Z3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJEZWJ1Z3xXaW4zMiIKKyAgICAg
ICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAgICAg
ICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAgICAgICAg
IC8+CisgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAgICAg
ICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iUmVs
ZWFzZXxXaW4zMiIKKyAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKKyAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3Vy
YXRpb24+CisgICAgICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAg
ICAgICAgICAgTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorICAgICAgICAgICAgICAg
ICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICAgID4K
KyAgICAgICAgICAgICAgICAgICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAg
ICAgICAgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8Rmls
ZUNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJSZWxlYXNlX0NhaXJv
X0NGTGl0ZXxXaW4zMiIKKyAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0i
dHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29s
CisgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZp
Z3VyYXRpb24+CisgICAgICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAg
ICAgICAgICAgICAgTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorICAgICAgICAgICAgICAgICAgICAg
IEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAg
ICAgICAgICAgICAgICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iVkND
TENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAg
ICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZp
Z3VyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgor
ICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorICAgICAgICAg
ICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgPFRvb2wKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4KKyAgICAg
ICAgICAgICAgICA8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAg
UmVsYXRpdmVQYXRoPSIuLlxlZGl0aW5nXFNldFNlbGVjdGlvbkNvbW1hbmQuaCIKKyAgICAgICAg
ICAgICAgICAgID4KKyAgICAgICAgICAgICAgICA8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0
aXZlUGF0aD0iLi5cZWRpdGluZ1xTbWFydFJlcGxhY2UuaCIKIAkJCQk+CkBAIC01MjUzMyw2ICs1
MjU4OSw2MiBAQAogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGVsbENoZWNrZXIuaCIK
IAkJCQk+CiAJCQk8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICBS
ZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAiCisg
ICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24KKyAg
ICAgICAgICAgICAgICAgICAgICBOYW1lPSJEZWJ1Z3xXaW4zMiIKKyAgICAgICAgICAgICAgICAg
ICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgICA+Cisg
ICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAg
ICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPEZpbGVD
b25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iUmVsZWFzZXxXaW4zMiIK
KyAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAg
ICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAg
ICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgTmFt
ZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAg
ICAgICAgICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iVkNDTENvbXBp
bGVyVG9vbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAg
ICAgPC9GaWxlQ29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRp
b24KKyAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4z
MiIKKyAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAg
ICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+Cisg
ICAgICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAg
TmFtZT0iRGVidWdfQWxsfFdpbjMyIgorICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJv
bUJ1aWxkPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAg
ICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iVkNDTENvbXBpbGVyVG9v
bCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9G
aWxlQ29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24KKyAg
ICAgICAgICAgICAgICAgICAgICBOYW1lPSJSZWxlYXNlX0xUQ0d8V2luMzIiCisgICAgICAgICAg
ICAgICAgICAgICAgRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisgICAgICAgICAgICAgICAgICAg
ICAgPgorICAgICAgICAgICAgICAgICAgICA8VG9vbAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorICAgICAgICAgICAgICAgICAgICAgICAgICAvPgor
ICAgICAgICAgICAgICAgICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAg
IDwvRmlsZT4KKyAgICAgICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBh
dGg9Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgorICAgICAgICAgICAg
ICAgICAgPgorICAgICAgICAgICAgPC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAiCiAJCQkJPgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5j
cHAKaW5kZXggOTBmM2JlMi4uZDEwY2JiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC01MCw3ICs1MCw5IEBACiAj
aW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1
ZGUgIlJlbmRlcmVkUG9zaXRpb24uaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IlRleHRDaGVja2VyQ2xpZW50LmgiCisjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCiAj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNs
dWRlICJ2aXNpYmxlX3VuaXRzLmgiCkBAIC0yODgsMjAgKzI5MCwyMCBAQCBib29sIEFjY2Vzc2li
aWxpdHlPYmplY3Q6Omhhc01pc3NwZWxsaW5nKCkgY29uc3QKICAgICBjb25zdCBVQ2hhciogY2hh
cnMgPSBzdHJpbmdWYWx1ZSgpLmNoYXJhY3RlcnMoKTsKICAgICBpbnQgY2hhcnNMZW5ndGggPSBz
dHJpbmdWYWx1ZSgpLmxlbmd0aCgpOwogICAgIGJvb2wgaXNNaXNzcGVsbGVkID0gZmFsc2U7Ci0g
ICAgCi0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAgICBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiByZXN1bHRzOwotICAgIHRleHRDaGVja2VyLT5jaGVja1RleHRPZlBhcmFncmFw
aChjaGFycywgY2hhcnNMZW5ndGgsIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cyk7
Ci0gICAgaWYgKCFyZXN1bHRzLmlzRW1wdHkoKSkKLSAgICAgICAgaXNNaXNzcGVsbGVkID0gdHJ1
ZTsKLSNlbHNlCi0gICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICBpbnQgbWlzc3Bl
bGxpbmdMb2NhdGlvbiA9IC0xOwotICAgIHRleHRDaGVja2VyLT5jaGVja1NwZWxsaW5nT2ZTdHJp
bmcoY2hhcnMsIGNoYXJzTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5n
TGVuZ3RoKTsKLSAgICBpZiAobWlzc3BlbGxpbmdMZW5ndGggfHwgbWlzc3BlbGxpbmdMb2NhdGlv
biAhPSAtMSkKLSAgICAgICAgaXNNaXNzcGVsbGVkID0gdHJ1ZTsKLSNlbmRpZgotICAgIAorCisg
ICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgeworICAgICAgICBWZWN0b3I8VGV4
dENoZWNraW5nUmVzdWx0PiByZXN1bHRzOworICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCh0
ZXh0Q2hlY2tlciwgY2hhcnMsIGNoYXJzTGVuZ3RoLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcs
IHJlc3VsdHMpOworICAgICAgICBpZiAoIXJlc3VsdHMuaXNFbXB0eSgpKQorICAgICAgICAgICAg
aXNNaXNzcGVsbGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgbWlzc3BlbGxp
bmdMZW5ndGggPSAwOworICAgICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOworICAg
ICAgICB0ZXh0Q2hlY2tlci0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNoYXJzLCBjaGFyc0xlbmd0
aCwgJm1pc3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgIGlm
IChtaXNzcGVsbGluZ0xlbmd0aCB8fCBtaXNzcGVsbGluZ0xvY2F0aW9uICE9IC0xKQorICAgICAg
ICAgICAgaXNNaXNzcGVsbGVkID0gdHJ1ZTsKKyAgICB9CisKICAgICByZXR1cm4gaXNNaXNzcGVs
bGVkOwogfQogCkBAIC0xMzcyLDUgKzEzNzQsMjIgQEAgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRl
IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkgY29uc3QKICAgICAK
ICAgICByZXR1cm4gQnV0dG9uU3RhdGVPZmY7CiB9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU9iamVj
dDo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgRG9jdW1lbnQqIGRv
Y3VtZW50ID0gbm9kZSgpLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsKKyAgICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTZXR0aW5n
cyogc2V0dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2V0dGluZ3MtPnVuaWZpZWRUZXh0Q2hl
Y2tlckVuYWJsZWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCBhYjEz
MTY3Li4zMWMxZjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlPYmplY3QuaApAQCAtNjcyLDcgKzY3Miw5IEBAIHB1YmxpYzoKICAgICAvLyBh
bGxvd3MgZm9yIGFuIEFjY2Vzc2liaWxpdHlPYmplY3QgdG8gdXBkYXRlIGl0cyByZW5kZXIgdHJl
ZSBvciBwZXJmb3JtCiAgICAgLy8gb3RoZXIgb3BlcmF0aW9ucyB1cGRhdGUgdHlwZSBvcGVyYXRp
b25zCiAgICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmUoKTsKLSAgICAKKworICAgIGJvb2wgdW5p
ZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgQVhJRCBt
X2lkOwogICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBtX2NoaWxkcmVuOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQppbmRleCBhYzI1ZWUwLi5iNTkxYWViIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0V3JhcHBlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQpAQCAtNjg4LDM4ICs2ODgsMzggQEAgc3RhdGlj
IHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRCbG9ja3F1b3RlTGV2ZWwoTlNNdXRhYmxlQXR0cmli
dXRlZFN0cmluZyogYXR0clMKIAogc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRTcGVs
bGluZyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBOb2RlKiBub2RlLCBj
b25zdCBVQ2hhciogY2hhcnMsIGludCBjaGFyTGVuZ3RoLCBOU1JhbmdlIHJhbmdlKQogewotI2lm
IFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgLy8gQ2hlY2sgdGhlIHNwZWxsaW5nIGRp
cmVjdGx5IHNpbmNlIGRvY3VtZW50LT5tYXJrZXJzRm9yTm9kZSgpIGRvZXMgbm90IHN0b3JlIHRo
ZSBtaXNzcGVsbGVkIG1hcmtpbmcgd2hlbiB0aGUgY3Vyc29yIGlzIGluIGEgd29yZC4KLSAgICBU
ZXh0Q2hlY2tlckNsaWVudCogY2hlY2tlciA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCktPmVk
aXRvcigpLT50ZXh0Q2hlY2tlcigpOwotCi0gICAgLy8gY2hlY2tUZXh0T2ZQYXJhZ3JhcGggaXMg
dGhlIG9ubHkgc3BlbGxpbmcvZ3JhbW1hciBjaGVja2VyIGltcGxlbWVudGVkIGluIFdLMSBhbmQg
V0syCi0gICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKLSAgICBjaGVja2Vy
LT5jaGVja1RleHRPZlBhcmFncmFwaChjaGFycywgY2hhckxlbmd0aCwgVGV4dENoZWNraW5nVHlw
ZVNwZWxsaW5nLCByZXN1bHRzKTsKLSAgICAKLSAgICBzaXplX3Qgc2l6ZSA9IHJlc3VsdHMuc2l6
ZSgpOwotICAgIE5TTnVtYmVyKiB0cnVlVmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6
WUVTXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAg
IGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0ID0gcmVzdWx0c1tpXTsKLSAgICAgICAg
QVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5TWlz
c3BlbGxlZFRleHRBdHRyaWJ1dGUsIHRydWVWYWx1ZSwgTlNNYWtlUmFuZ2UocmVzdWx0LmxvY2F0
aW9uICsgcmFuZ2UubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpKTsKLSAgICB9ICAgIAotI2Vsc2UK
LSAgICBpbnQgY3VycmVudFBvc2l0aW9uID0gMDsKLSAgICB3aGlsZSAoY2hhckxlbmd0aCA+IDAp
IHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJEYXRhID0gY2hhcnMgKyBjdXJyZW50UG9zaXRp
b247CisgICAgaWYgKG1fb2JqZWN0ICYmIG1fb2JqZWN0LT51bmlmaWVkVGV4dENoZWNrZXJFbmFi
bGVkKCkpIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHNwZWxsaW5nIGRpcmVjdGx5IHNpbmNlIGRv
Y3VtZW50LT5tYXJrZXJzRm9yTm9kZSgpIGRvZXMgbm90IHN0b3JlIHRoZSBtaXNzcGVsbGVkIG1h
cmtpbmcgd2hlbiB0aGUgY3Vyc29yIGlzIGluIGEgd29yZC4KICAgICAgICAgVGV4dENoZWNrZXJD
bGllbnQqIGNoZWNrZXIgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5lZGl0b3IoKS0+dGV4
dENoZWNrZXIoKTsKKworICAgICAgICAvLyBjaGVja1RleHRPZlBhcmFncmFwaCBpcyB0aGUgb25s
eSBzcGVsbGluZy9ncmFtbWFyIGNoZWNrZXIgaW1wbGVtZW50ZWQgaW4gV0sxIGFuZCBXSzIKKyAg
ICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKKyAgICAgICAgY2hlY2tU
ZXh0T2ZQYXJhZ3JhcGgoY2hlY2tlciwgY2hhcnMsIGNoYXJMZW5ndGgsIFRleHRDaGVja2luZ1R5
cGVTcGVsbGluZywgcmVzdWx0cyk7CisgICAgCisgICAgICAgIHNpemVfdCBzaXplID0gcmVzdWx0
cy5zaXplKCk7CisgICAgICAgIE5TTnVtYmVyKiB0cnVlVmFsdWUgPSBbTlNOdW1iZXIgbnVtYmVy
V2l0aEJvb2w6WUVTXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkr
KykgeworICAgICAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiByZXN1bHQgPSByZXN1
bHRzW2ldOworICAgICAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmlu
ZywgTlNBY2Nlc3NpYmlsaXR5TWlzc3BlbGxlZFRleHRBdHRyaWJ1dGUsIHRydWVWYWx1ZSwgTlNN
YWtlUmFuZ2UocmVzdWx0LmxvY2F0aW9uICsgcmFuZ2UubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgp
KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGludCBjdXJyZW50UG9zaXRpb24g
PSAwOworICAgICAgICB3aGlsZSAoY2hhckxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgIGNvbnN0
IFVDaGFyKiBjaGFyRGF0YSA9IGNoYXJzICsgY3VycmVudFBvc2l0aW9uOworICAgICAgICAgICAg
VGV4dENoZWNrZXJDbGllbnQqIGNoZWNrZXIgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5l
ZGl0b3IoKS0+dGV4dENoZWNrZXIoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IG1p
c3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKKyAgICAgICAgICAgIGludCBtaXNzcGVsbGluZ0xlbmd0
aCA9IDA7CisgICAgICAgICAgICBjaGVja2VyLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoY2hhckRh
dGEsIGNoYXJMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3BlbGxpbmdMZW5ndGgp
OworICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPT0gLTEgfHwgIW1pc3NwZWxs
aW5nTGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKLSAgICAgICAgaW50
IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKLSAgICAgICAgaW50IG1pc3NwZWxsaW5nTGVuZ3Ro
ID0gMDsKLSAgICAgICAgY2hlY2tlci0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNoYXJEYXRhLCBj
aGFyTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAg
ICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPT0gLTEgfHwgIW1pc3NwZWxsaW5nTGVuZ3Ro
KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBOU1JhbmdlIHNwZWxsUmFu
Z2UgPSBOU01ha2VSYW5nZShyYW5nZS5sb2NhdGlvbiArIGN1cnJlbnRQb3NpdGlvbiArIG1pc3Nw
ZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICAgICAgQVhBdHRyaWJ1dGVT
dHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5TWlzc3BlbGxlZFRleHRB
dHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBzcGVsbFJhbmdlKTsKLSAg
ICAgICAgY2hhckxlbmd0aCAtPSAobWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVu
Z3RoKTsKLSAgICAgICAgY3VycmVudFBvc2l0aW9uICs9IChtaXNzcGVsbGluZ0xvY2F0aW9uICsg
bWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICAgICAgTlNSYW5nZSBzcGVsbFJhbmdlID0gTlNN
YWtlUmFuZ2UocmFuZ2UubG9jYXRpb24gKyBjdXJyZW50UG9zaXRpb24gKyBtaXNzcGVsbGluZ0xv
Y2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgICAgICBBWEF0dHJpYnV0ZVN0cmlu
Z1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlNaXNzcGVsbGVkVGV4dEF0dHJp
YnV0ZSwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIHNwZWxsUmFuZ2UpOworICAgICAg
ICAgICAgY2hhckxlbmd0aCAtPSAobWlzc3BlbGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVu
Z3RoKTsKKyAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiArPSAobWlzc3BlbGxpbmdMb2NhdGlv
biArIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgfQogICAgIH0KLSNlbmRpZiAgICAKIH0K
IAogc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFkaW5nTGV2ZWwoTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgTlNS
YW5nZSByYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0Fs
bEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0FsbEluT25lLmNwcApp
bmRleCBkODYzMDk3Li5jMDI5OWIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0VkaXRpbmdBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
QWxsSW5PbmUuY3BwCkBAIC02MSw4ICs2MSwxMCBAQAogI2luY2x1ZGUgPFJlcGxhY2VOb2RlV2l0
aFNwYW5Db21tYW5kLmNwcD4KICNpbmNsdWRlIDxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHA+
CiAjaW5jbHVkZSA8U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwPgorI2luY2x1ZGUgPFNldFNl
bGVjdGlvbkNvbW1hbmQuY3BwPgogI2luY2x1ZGUgPFNtYXJ0UmVwbGFjZS5jcHA+CiAjaW5jbHVk
ZSA8U21hcnRSZXBsYWNlQ0YuY3BwPgorI2luY2x1ZGUgPFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuY3BwPgogI2luY2x1ZGUgPFNwZWxsaW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuY3BwPgogI2lu
Y2x1ZGUgPFNwZWxsQ2hlY2tlci5jcHA+CiAjaW5jbHVkZSA8U3BsaXRFbGVtZW50Q29tbWFuZC5j
cHA+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMzBjNzc1NS4uZjdlZTFjNiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMTcyNSw0NSArMTcyNSwxMSBAQCB2b2lkIEVk
aXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxsaW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24p
CiAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJhc2U7CiAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3Jk
OwogCi0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAgICBncmFtbWFyU2VhcmNoUmFu
Z2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5jbG9uZVJhbmdlKGVjKTsKICAgICBib29sIGlzU3Bl
bGxpbmcgPSB0cnVlOwogICAgIGludCBmb3VuZE9mZnNldCA9IDA7Ci0gICAgU3RyaW5nIGZvdW5k
SXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSku
ZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVk
KCksIGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKLSAgICBpZiAoaXNT
cGVsbGluZykgewotICAgICAgICBtaXNzcGVsbGVkV29yZCA9IGZvdW5kSXRlbTsKLSAgICAgICAg
bWlzc3BlbGxpbmdPZmZzZXQgPSBmb3VuZE9mZnNldDsKLSAgICB9IGVsc2UgewotICAgICAgICBi
YWRHcmFtbWFyUGhyYXNlID0gZm91bmRJdGVtOwotICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0
ID0gZm91bmRPZmZzZXQ7Ci0gICAgfQotI2Vsc2UKKyAgICBTdHJpbmcgZm91bmRJdGVtOwogICAg
IFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOwotICAgIG1pc3NwZWxsZWRXb3Jk
ID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5k
Rmlyc3RNaXNzcGVsbGluZyhtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3BlbGxp
bmdSYW5nZSk7Ci0KLSNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKLSAgICAvLyBTZWFyY2ggZm9y
IGJhZCBncmFtbWFyIHRoYXQgb2NjdXJzIHByaW9yIHRvIHRoZSBuZXh0IG1pc3NwZWxsZWQgd29y
ZCAoaWYgYW55KQotICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2Ut
PmNsb25lUmFuZ2UoZWMpOwotICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIC8vIFN0b3AgbG9va2luZyBhdCBzdGFydCBvZiBuZXh0IG1pc3NwZWxsZWQgd29yZAot
ICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycyhncmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCkp
OwotICAgICAgICBjaGFycy5hZHZhbmNlKG1pc3NwZWxsaW5nT2Zmc2V0KTsKLSAgICAgICAgZ3Jh
bW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hhcnMucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZWMp
LCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldChlYyksIGVjKTsKLSAgICB9Ci0gICAgCi0gICAg
aWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICBiYWRHcmFtbWFyUGhyYXNl
ID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBncmFtbWFyU2VhcmNoUmFuZ2UpLmZpbmRG
aXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2Up
OwotI2VuZGlmCi0jZW5kaWYKLSAgICAKLSAgICAvLyBJZiB3ZSBmb3VuZCBuZWl0aGVyIGJhZCBn
cmFtbWFyIG5vciBhIG1pc3NwZWxsZWQgd29yZCwgd3JhcCBhbmQgdHJ5IGFnYWluIChidXQgZG9u
J3QgYm90aGVyIGlmIHdlIHN0YXJ0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKLSAgICAvLyBi
bG9jayByYXRoZXIgdGhhbiBhdCBhIHNlbGVjdGlvbikuCi0gICAgaWYgKHN0YXJ0ZWRXaXRoU2Vs
ZWN0aW9uICYmICFtaXNzcGVsbGVkV29yZCAmJiAhYmFkR3JhbW1hclBocmFzZSkgewotICAgICAg
ICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRTdGFydCh0b3BOb2RlLCAwLCBlYyk7Ci0gICAgICAg
IC8vIGdvaW5nIHVudGlsIHRoZSBlbmQgb2YgdGhlIHZlcnkgZmlyc3QgY2h1bmsgd2UgdGVzdGVk
IGlzIGZhciBlbm91Z2gKLSAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5kKHNlYXJj
aEVuZE5vZGVBZnRlcldyYXAsIHNlYXJjaEVuZE9mZnNldEFmdGVyV3JhcCwgZWMpOwotICAgICAg
ICAKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorICAgIGlmICh1bmlmaWVkVGV4dENo
ZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdT
ZWFyY2hSYW5nZS0+Y2xvbmVSYW5nZShlYyk7CiAgICAgICAgIGZvdW5kSXRlbSA9IFRleHRDaGVj
a2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3Bl
bGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcs
IGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWlsKTsKICAgICAgICAgaWYgKGlzU3BlbGxpbmcpIHsK
QEAgLTE3NzMsMTAgKzE3MzksMTEgQEAgdm9pZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVs
bGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0aW9uKQogICAgICAgICAgICAgYmFkR3JhbW1hclBo
cmFzZSA9IGZvdW5kSXRlbTsKICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3Vu
ZE9mZnNldDsKICAgICAgICAgfQotI2Vsc2UKKyAgICB9IGVsc2UgewogICAgICAgICBtaXNzcGVs
bGVkV29yZCA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5n
ZSkuZmluZEZpcnN0TWlzc3BlbGxpbmcobWlzc3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1p
c3NwZWxsaW5nUmFuZ2UpOwogCiAjaWYgVVNFKEdSQU1NQVJfQ0hFQ0tJTkcpCisgICAgICAgIC8v
IFNlYXJjaCBmb3IgYmFkIGdyYW1tYXIgdGhhdCBvY2N1cnMgcHJpb3IgdG8gdGhlIG5leHQgbWlz
c3BlbGxlZCB3b3JkIChpZiBhbnkpCiAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxs
aW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwogICAgICAgICBpZiAoIW1pc3NwZWxsZWRX
b3JkLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9m
IG5leHQgbWlzc3BlbGxlZCB3b3JkCkBAIC0xNzg0LDExICsxNzUxLDQ1IEBAIHZvaWQgRWRpdG9y
OjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmcoYm9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAg
ICAgICAgICAgIGNoYXJzLmFkdmFuY2UobWlzc3BlbGxpbmdPZmZzZXQpOwogICAgICAgICAgICAg
Z3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hhcnMucmFuZ2UoKS0+c3RhcnRDb250YWluZXIo
ZWMpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNldChlYyksIGVjKTsKICAgICAgICAgfQotCisg
ICAgCiAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgICAg
IGJhZEdyYW1tYXJQaHJhc2UgPSBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIGdyYW1tYXJT
ZWFyY2hSYW5nZSkuZmluZEZpcnN0QmFkR3JhbW1hcihncmFtbWFyRGV0YWlsLCBncmFtbWFyUGhy
YXNlT2Zmc2V0LCBmYWxzZSk7CiAjZW5kaWYKKyAgICB9CisgICAgCisgICAgLy8gSWYgd2UgZm91
bmQgbmVpdGhlciBiYWQgZ3JhbW1hciBub3IgYSBtaXNzcGVsbGVkIHdvcmQsIHdyYXAgYW5kIHRy
eSBhZ2FpbiAoYnV0IGRvbid0IGJvdGhlciBpZiB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcg
b2YgdGhlCisgICAgLy8gYmxvY2sgcmF0aGVyIHRoYW4gYXQgYSBzZWxlY3Rpb24pLgorICAgIGlm
IChzdGFydGVkV2l0aFNlbGVjdGlvbiAmJiAhbWlzc3BlbGxlZFdvcmQgJiYgIWJhZEdyYW1tYXJQ
aHJhc2UpIHsKKyAgICAgICAgc3BlbGxpbmdTZWFyY2hSYW5nZS0+c2V0U3RhcnQodG9wTm9kZSwg
MCwgZWMpOworICAgICAgICAvLyBnb2luZyB1bnRpbCB0aGUgZW5kIG9mIHRoZSB2ZXJ5IGZpcnN0
IGNodW5rIHdlIHRlc3RlZCBpcyBmYXIgZW5vdWdoCisgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFu
Z2UtPnNldEVuZChzZWFyY2hFbmROb2RlQWZ0ZXJXcmFwLCBzZWFyY2hFbmRPZmZzZXRBZnRlcldy
YXAsIGVjKTsKKyAgICAgICAgCisgICAgICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVk
KCkpIHsKKyAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFu
Z2UtPmNsb25lUmFuZ2UoZWMpOworICAgICAgICAgICAgZm91bmRJdGVtID0gVGV4dENoZWNraW5n
SGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGlu
Z09yQmFkR3JhbW1hcihpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSwgaXNTcGVsbGluZywgZm91
bmRPZmZzZXQsIGdyYW1tYXJEZXRhaWwpOworICAgICAgICAgICAgaWYgKGlzU3BlbGxpbmcpIHsK
KyAgICAgICAgICAgICAgICBtaXNzcGVsbGVkV29yZCA9IGZvdW5kSXRlbTsKKyAgICAgICAgICAg
ICAgICBtaXNzcGVsbGluZ09mZnNldCA9IGZvdW5kT2Zmc2V0OworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gZm91bmRJdGVtOworICAgICAg
ICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNldDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1pc3NwZWxsZWRXb3JkID0gVGV4dENo
ZWNraW5nSGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNz
cGVsbGluZyhtaXNzcGVsbGluZ09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7
CisKKyNpZiBVU0UoR1JBTU1BUl9DSEVDS0lORykKKyAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hS
YW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOworICAgICAgICAgICAg
aWYgKCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBTdG9w
IGxvb2tpbmcgYXQgc3RhcnQgb2YgbmV4dCBtaXNzcGVsbGVkIHdvcmQKKyAgICAgICAgICAgICAg
ICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycyhncmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCkpOworICAg
ICAgICAgICAgICAgIGNoYXJzLmFkdmFuY2UobWlzc3BlbGxpbmdPZmZzZXQpOworICAgICAgICAg
ICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29u
dGFpbmVyKGVjKSwgY2hhcnMucmFuZ2UoKS0+c3RhcnRPZmZzZXQoZWMpLCBlYyk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmIChpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKKyAg
ICAgICAgICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVu
dCgpLCBncmFtbWFyU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFp
bCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOwogI2VuZGlmCisgICAgICAgIH0KICAgICB9
CiAgICAgCiAgICAgaWYgKCFiYWRHcmFtbWFyUGhyYXNlLmlzRW1wdHkoKSkgewpAQCAtMTg4OCwx
MiArMTg4OSwxMyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVk
U2VsZWN0aW9uKCkKIAogVmVjdG9yPFN0cmluZz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxl
ZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihib29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1t
YXRpY2FsKQogewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgUmVmUHRyPFJh
bmdlPiByYW5nZSA9IGZyYW1lKCktPnNlbGVjdGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpOwot
ICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOwotICAgIHJl
dHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xpZW50KCksIHJhbmdlKS5ndWVzc2VzRm9yTWlzc3Bl
bGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBtaXNz
cGVsbGVkLCB1bmdyYW1tYXRpY2FsKTsKLSNlbHNlCisgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tl
ckVuYWJsZWQoKSkgeworICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+c2Vs
ZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdlKCk7CisgICAgICAgIGlmICghcmFuZ2UpCisgICAg
ICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKKyAgICAgICAgcmV0dXJuIFRleHRDaGVj
a2luZ0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1t
YXRpY2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3Jh
bW1hdGljYWwpOworICAgIH0KKwogICAgIG1pc3NwZWxsZWQgPSBpc1NlbGVjdGlvbk1pc3NwZWxs
ZWQoKTsKICAgICBpZiAobWlzc3BlbGxlZCkgewogICAgICAgICB1bmdyYW1tYXRpY2FsID0gZmFs
c2U7CkBAIC0xOTA1LDcgKzE5MDcsNiBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNG
b3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKGJvb2wmIG1pc3NwZQogICAgIH0K
ICAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7CiAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7
Ci0jZW5kaWYKIH0KIAogdm9pZCBFZGl0b3I6OnNob3dTcGVsbGluZ0d1ZXNzUGFuZWwoKQpAQCAt
MTk0Nyw4MCArMTk0OCw3NSBAQCB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiAmbW92aW5nU2VsZWN0aQogCiB2b2lkIEVkaXRv
cjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlv
biAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGlu
ZywgYm9vbCBkb1JlcGxhY2VtZW50KQogewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcp
Ci0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihzZWxlY3Rp
b25BZnRlclR5cGluZyk7CisgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewor
ICAgICAgICBtX3NwZWxsaW5nQ29ycmVjdG9yLT5hcHBseVBlbmRpbmdDb3JyZWN0aW9uKHNlbGVj
dGlvbkFmdGVyVHlwaW5nKTsKIAotICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRDaGVja2lu
Z09wdGlvbnMgPSAwOworICAgICAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0Q2hlY2tpbmdP
cHRpb25zID0gMDsKIAotICAgIGlmIChpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgp
KQotICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IFRleHRDaGVja2luZ1R5cGVTcGVsbGlu
ZzsKKyAgICAgICAgaWYgKGlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAg
ICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsK
IAogI2lmIFVTRShBVVRPTUFUSUNfVEVYVF9SRVBMQUNFTUVOVCkKLSAgICBpZiAoZG9SZXBsYWNl
bWVudCAKLSAgICAgICAgJiYgKGlzQXV0b21hdGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkK
LSAgICAgICAgICAgIHx8IGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKQotICAgICAg
ICAgICAgfHwgaXNBdXRvbWF0aWNEYXNoU3Vic3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICAg
ICB8fCBpc0F1dG9tYXRpY1RleHRSZXBsYWNlbWVudEVuYWJsZWQoKQotICAgICAgICAgICAgfHwg
KCh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKSAmJiBpc0F1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkpKQotICAgICAgICB0ZXh0Q2hlY2tp
bmdPcHRpb25zIHw9IFRleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudDsKKyAgICAgICAgaWYgKGRv
UmVwbGFjZW1lbnQgCisgICAgICAgICAgICAmJiAoaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlv
bkVuYWJsZWQoKQorICAgICAgICAgICAgICAgIHx8IGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVu
YWJsZWQoKQorICAgICAgICAgICAgICAgIHx8IGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVu
YWJsZWQoKQorICAgICAgICAgICAgICAgIHx8IGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5h
YmxlZCgpCisgICAgICAgICAgICAgICAgfHwgKCh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgVGV4dENo
ZWNraW5nVHlwZVNwZWxsaW5nKSAmJiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJs
ZWQoKSkpKQorICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdU
eXBlUmVwbGFjZW1lbnQ7CiAjZW5kaWYKLSAgICBpZiAoIXRleHRDaGVja2luZ09wdGlvbnMgJiAo
VGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50KSkK
LSAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoISh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgKFRl
eHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRleHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCkpKQor
ICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgp
KQotICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IFRleHRDaGVja2luZ1R5cGVHcmFtbWFy
OworICAgICAgICBpZiAoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAgICAgICB0
ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyOwogCi0gICAgVmlz
aWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29y
ZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwg
UmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7Ci0gICAgaWYgKHRleHRDaGVja2luZ09wdGlvbnMgJiBU
ZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgewotICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVj
dGVkU2VudGVuY2UgPSBWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZTZW50ZW5jZSh3b3JkU3RhcnQp
LCBlbmRPZlNlbnRlbmNlKHdvcmRTdGFydCkpOwotICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdz
QW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFkamFjZW50V29yZHMu
dG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgc2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRS
YW5nZSgpLmdldCgpKTsKKyAgICAgICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0g
VmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5k
YXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CisgICAg
ICAgIGlmICh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpIHsK
KyAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0ZWRTZW50ZW5jZSA9IFZpc2libGVT
ZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKHdvcmRTdGFydCksIGVuZE9mU2VudGVuY2Uod29yZFN0
YXJ0KSk7CisgICAgICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFu
Z2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2Uo
KS5nZXQoKSwgc2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1h
ckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSwgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsK
ICAgICB9IGVsc2UgewotICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hcklu
UmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSwgYWRqYWNlbnRXb3Jkcy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKLSAg
ICB9Ci0KLSNlbHNlCi0gICAgVU5VU0VEX1BBUkFNKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsKLSAg
ICBVTlVTRURfUEFSQU0oZG9SZXBsYWNlbWVudCk7Ci0KLSAgICBpZiAoIWlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgcmV0dXJuOwogCi0g
ICAgLy8gQ2hlY2sgc3BlbGxpbmcgb2Ygb25lIHdvcmQKLSAgICBSZWZQdHI8UmFuZ2U+IG1pc3Nw
ZWxsaW5nUmFuZ2U7Ci0gICAgbWFya01pc3NwZWxsaW5ncyhWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0
T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0
YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKSwgbWlzc3BlbGxpbmdSYW5nZSk7CisgICAgICAg
IC8vIENoZWNrIHNwZWxsaW5nIG9mIG9uZSB3b3JkCisgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlz
c3BlbGxpbmdSYW5nZTsKKyAgICAgICAgbWFya01pc3NwZWxsaW5ncyhWaXNpYmxlU2VsZWN0aW9u
KHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQo
d29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkpKSwgbWlzc3BlbGxpbmdSYW5nZSk7CiAK
LSAgICAvLyBBdXRvY29ycmVjdCB0aGUgbWlzc3BlbGxlZCB3b3JkLgotICAgIGlmICghbWlzc3Bl
bGxpbmdSYW5nZSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBBdXRvY29ycmVjdCB0aGUg
bWlzc3BlbGxlZCB3b3JkLgorICAgICAgICBpZiAoIW1pc3NwZWxsaW5nUmFuZ2UpCisgICAgICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgLy8gR2V0IHRoZSBtaXNzcGVsbGVkIHdvcmQuCi0gICAg
Y29uc3QgU3RyaW5nIG1pc3NwZWxsZWRXb3JkID0gcGxhaW5UZXh0KG1pc3NwZWxsaW5nUmFuZ2Uu
Z2V0KCkpOwotICAgIFN0cmluZyBhdXRvY29ycmVjdGVkU3RyaW5nID0gdGV4dENoZWNrZXIoKS0+
Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQp
OwotCi0gICAgLy8gSWYgYXV0b2NvcnJlY3RlZCB3b3JkIGlzIG5vbiBlbXB0eSwgcmVwbGFjZSB0
aGUgbWlzc3BlbGxlZCB3b3JkIGJ5IHRoaXMgd29yZC4KLSAgICBpZiAoIWF1dG9jb3JyZWN0ZWRT
dHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9u
KG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOwotICAgICAgICBpZiAobmV3U2Vs
ZWN0aW9uICE9IGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKSkgewotICAgICAgICAg
ICAgaWYgKCFmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1Nl
bGVjdGlvbikpCisgICAgICAgIC8vIEdldCB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICAgICAgICBj
b25zdCBTdHJpbmcgbWlzc3BlbGxlZFdvcmQgPSBwbGFpblRleHQobWlzc3BlbGxpbmdSYW5nZS5n
ZXQoKSk7CisgICAgICAgIFN0cmluZyBhdXRvY29ycmVjdGVkU3RyaW5nID0gdGV4dENoZWNrZXIo
KS0+Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9yTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdv
cmQpOworCisgICAgICAgIC8vIElmIGF1dG9jb3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHksIHJl
cGxhY2UgdGhlIG1pc3NwZWxsZWQgd29yZCBieSB0aGlzIHdvcmQuCisgICAgICAgIGlmICghYXV0
b2NvcnJlY3RlZFN0cmluZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gbmV3U2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOworICAg
ICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbiAhPSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0
aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWZyYW1lKCktPnNlbGVjdGlvbigpLT5zaG91
bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24o
bmV3U2VsZWN0aW9uKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFmcmFtZSgp
LT5lZGl0b3IoKS0+c2hvdWxkSW5zZXJ0VGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVs
bGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25UeXBlZCkpCiAgICAgICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICAgICAgZnJhbWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlv
bihuZXdTZWxlY3Rpb24pOworICAgICAgICAgICAgZnJhbWUoKS0+ZWRpdG9yKCktPnJlcGxhY2VT
ZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBmYWxzZSwgZmFsc2UpOworCisg
ICAgICAgICAgICAvLyBSZXNldCB0aGUgY2hhcmV0IG9uZSBjaGFyYWN0ZXIgZnVydGhlci4KKyAg
ICAgICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5tb3ZlVG8oZnJhbWUoKS0+c2VsZWN0aW9u
KCktPmVuZCgpKTsKKyAgICAgICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJh
bWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJH
cmFudWxhcml0eSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWZyYW1lKCktPmVkaXRvcigp
LT5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3JyZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2Uu
Z2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5cGVkKSkKKyAgICAgICAgaWYgKCFpc0dyYW1tYXJD
aGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgZnJhbWUoKS0+
ZWRpdG9yKCktPnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBm
YWxzZSwgZmFsc2UpOwotCi0gICAgICAgIC8vIFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3Rl
ciBmdXJ0aGVyLgotICAgICAgICBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+bW92ZVRvKGZyYW1lKCkt
PnNlbGVjdGlvbigpLT5lbmQoKSk7Ci0gICAgICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5tb2Rp
ZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFy
YWN0ZXJHcmFudWxhcml0eSk7Ci0gICAgfQotCi0gICAgaWYgKCFpc0dyYW1tYXJDaGVja2luZ0Vu
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwogICAgIAotICAgIC8vIENoZWNrIGdyYW1tYXIgb2Yg
ZW50aXJlIHNlbnRlbmNlCi0gICAgbWFya0JhZEdyYW1tYXIoVmlzaWJsZVNlbGVjdGlvbihzdGFy
dE9mU2VudGVuY2Uod29yZFN0YXJ0KSwgZW5kT2ZTZW50ZW5jZSh3b3JkU3RhcnQpKSk7Ci0jZW5k
aWYKKyAgICAgICAgLy8gQ2hlY2sgZ3JhbW1hciBvZiBlbnRpcmUgc2VudGVuY2UKKyAgICAgICAg
bWFya0JhZEdyYW1tYXIoVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VudGVuY2Uod29yZFN0YXJ0
KSwgZW5kT2ZTZW50ZW5jZSh3b3JkU3RhcnQpKSk7CisgICAgfQogfQogICAgIAogdm9pZCBFZGl0
b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uLCBib29sIGNoZWNrU3BlbGxpbmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3Bl
bGxpbmdSYW5nZSkKQEAgLTIwODgsNyArMjA4NCwxMSBAQCB2b2lkIEVkaXRvcjo6bWFya0JhZEdy
YW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uKQogCiB2b2lkIEVkaXRvcjo6
bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdUeXBl
TWFzayB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBSYW5nZSogc3BlbGxpbmdSYW5nZSwgUmFuZ2UqIGdy
YW1tYXJSYW5nZSkKIHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorICAgIGlmICgh
dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gVGhlcmUgc2hvdWxkbid0IGJl
IHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYXQgdGhpcyBtb21lbnQuCiAgICAgQVNTRVJUKCFtX3Nw
ZWxsaW5nQ29ycmVjdG9yLT5oYXNQZW5kaW5nQ29ycmVjdGlvbigpKTsKIApAQCAtMjE0MiwxMiAr
MjE0MiwxMSBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJ
blJhbmdlcyhUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0QwogCiAgICAgVmVjdG9yPFRleHRDaGVj
a2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICBpZiAoc2hvdWxkTWFya0dyYW1tYXIpCi0gICAgICAg
IHRleHRDaGVja2VyKCktPmNoZWNrVGV4dE9mUGFyYWdyYXBoKGdyYW1tYXJQYXJhZ3JhcGgudGV4
dENoYXJhY3RlcnMoKSwgZ3JhbW1hclBhcmFncmFwaC50ZXh0TGVuZ3RoKCksIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlVGV4dENoZWNraW5nVHlw
ZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyksIHJlc3VsdHMpOworICAgICAgICBjaGVja1RleHRP
ZlBhcmFncmFwaCh0ZXh0Q2hlY2tlcigpLCBncmFtbWFyUGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJz
KCksIGdyYW1tYXJQYXJhZ3JhcGgudGV4dExlbmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyks
IHJlc3VsdHMpOwogICAgIGVsc2UKLSAgICAgICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQ
YXJhZ3JhcGgoc3BlbGxpbmdQYXJhZ3JhcGgudGV4dENoYXJhY3RlcnMoKSwgc3BlbGxpbmdQYXJh
Z3JhcGgudGV4dExlbmd0aCgpLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKHRleHRDaGVja2luZ09wdGlvbnMp
LCByZXN1bHRzKTsKLSAgICAgICAgCisgICAgICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKHRleHRD
aGVja2VyKCksIHNwZWxsaW5nUGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHNwZWxsaW5nUGFy
YWdyYXBoLnRleHRMZW5ndGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2
ZVRleHRDaGVja2luZ1R5cGVNYXNrKHRleHRDaGVja2luZ09wdGlvbnMpLCByZXN1bHRzKTsKIAog
ICAgIC8vIElmIHRoaXMgY2hlY2tpbmcgaXMgb25seSBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBh
bmVsLCB3ZSBzaG91bGRuJ3QgYm90aGVyIHRvIG1hcmsgbWlzc3BlbGxpbmdzLgogICAgIGlmIChz
aG91bGRTaG93Q29ycmVjdGlvblBhbmVsKQpAQCAtMjI3OSwxNyArMjI3OCwxNSBAQCB2b2lkIEVk
aXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tp
bmdUeXBlTWFzayB0ZXh0QwogICAgICAgICAgICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlm
eShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJh
Y3RlckdyYW51bGFyaXR5KTsKICAgICAgICAgfQogICAgIH0KLSNlbHNlCi0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgVU5VU0VEX1BBUkFNKHRleHRDaGVja2luZ09wdGlvbnMpOwotICAg
IFVOVVNFRF9QQVJBTShzcGVsbGluZ1JhbmdlKTsKLSAgICBVTlVTRURfUEFSQU0oZ3JhbW1hclJh
bmdlKTsKLSNlbmRpZiAvLyBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogfQogCiB2b2lkIEVk
aXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRTdHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0
cmluZykKIHsKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQorICAgIGlmICghdW5pZmll
ZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKHJlcGxhY2VkU3RyaW5nLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzAzLDI4ICsyMzAwLDI0IEBAIHZvaWQgRWRpdG9y
OjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmluZyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5n
KQogICAgIFJlZlB0cjxSYW5nZT4gY2hhbmdlZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHBh
cmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHJlcGxhY2VkU3RyaW5nLmxlbmd0aCgpKTsKICAgICBj
aGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRk
TWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwgRG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBT
dHJpbmcoKSk7CiAgICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+bWFya1JldmVyc2VkKGNoYW5nZWRS
YW5nZS5nZXQoKSk7Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIFVOVVNF
RF9QQVJBTShyZXBsYWNlZFN0cmluZyk7Ci0jZW5kaWYgLy8gVVNFKFVOSUZJRURfVEVYVF9DSEVD
S0lORykKIH0KIAogCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIo
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3BlbGxpbmdTZWxlY3Rpb24sIGJvb2wgbWFya0dyYW1t
YXIsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIGdyYW1tYXJTZWxlY3Rpb24pCiB7Ci0jaWYgVVNF
KFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tp
bmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayB0
ZXh0Q2hlY2tpbmdPcHRpb25zID0gVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNr
aW5nVHlwZUNvcnJlY3Rpb247Ci0gICAgaWYgKG1hcmtHcmFtbWFyICYmIGlzR3JhbW1hckNoZWNr
aW5nRW5hYmxlZCgpKQotICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IFRleHRDaGVja2lu
Z1R5cGVHcmFtbWFyOwotICAgIG1hcmtBbGxNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5n
ZXModGV4dENoZWNraW5nT3B0aW9ucywgc3BlbGxpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFu
Z2UoKS5nZXQoKSwgZ3JhbW1hclNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsK
LSNlbHNlCi0gICAgUmVmUHRyPFJhbmdlPiBmaXJzdE1pc3NwZWxsaW5nUmFuZ2U7Ci0gICAgbWFy
a01pc3NwZWxsaW5ncyhzcGVsbGluZ1NlbGVjdGlvbiwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsK
LSAgICBpZiAobWFya0dyYW1tYXIpCi0gICAgICAgIG1hcmtCYWRHcmFtbWFyKGdyYW1tYXJTZWxl
Y3Rpb24pOwotI2VuZGlmCisgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewor
ICAgICAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIFRleHRDaGVja2luZ1R5cGVNYXNrIHRleHRDaGVja2luZ09w
dGlvbnMgPSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVj
dGlvbjsKKyAgICAgICAgaWYgKG1hcmtHcmFtbWFyICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCgpKQorICAgICAgICAgICAgdGV4dENoZWNraW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdUeXBl
R3JhbW1hcjsKKyAgICAgICAgbWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdl
cyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBzcGVsbGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5n
ZSgpLmdldCgpLCBncmFtbWFyU2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOwor
ICAgIH0gZWxzZSB7CisgICAgICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1Jhbmdl
OworICAgICAgICBtYXJrTWlzc3BlbGxpbmdzKHNwZWxsaW5nU2VsZWN0aW9uLCBmaXJzdE1pc3Nw
ZWxsaW5nUmFuZ2UpOworICAgICAgICBpZiAobWFya0dyYW1tYXIpCisgICAgICAgICAgICBtYXJr
QmFkR3JhbW1hcihncmFtbWFyU2VsZWN0aW9uKTsKKyAgICB9CiB9CiAKIHZvaWQgRWRpdG9yOjp1
bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
T2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJl
Y3Rpb24pCkBAIC0zMjM2LDQgKzMyMjksMTIgQEAgdm9pZCBFZGl0b3I6OmRldmljZVNjYWxlRmFj
dG9yQ2hhbmdlZCgpCiAgICAgbV9kZWxldGVCdXR0b25Db250cm9sbGVyLT5kZXZpY2VTY2FsZUZh
Y3RvckNoYW5nZWQoKTsKIH0KIAorYm9vbCBFZGl0b3I6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQoKSBjb25zdAoreworICAgIGlmIChTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0
aW5ncygpKQorICAgICAgICByZXR1cm4gc2V0dGluZ3MtPnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQoKTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggYmRiOThhZi4uOWUxYzI1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5oCkBAIC00MjIsNiArNDIyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoYW5n
ZVNlbGVjdGlvbkFmdGVyQ29tbWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rp
b24sIGJvb2wgY2xvc2VUeXBpbmcsIGJvb2wgY2xlYXJUeXBpbmdTdHlsZSk7CiAKICAgICBOb2Rl
KiBmaW5kRXZlbnRUYXJnZXRGcm9tU2VsZWN0aW9uKCkgY29uc3Q7CisKKyAgICBib29sIHVuaWZp
ZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdDsKIH07CiAKIGlubGluZSB2b2lkIEVkaXRvcjo6
c2V0U3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKGJvb2wgZmxhZykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAppbmRleCAwYmRmYmQ4Li42MTExZDk5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0y
OSw3ICsyOSw5IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUmFuZ2Uu
aCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50Lmgi
CiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgi
CkBAIC0xNTUsOSArMTU3LDE3IEBAIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5n
TGVuZ3RoKCkgY29uc3QKIFRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKEVk
aXRvckNsaWVudCogY2xpZW50LCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSkKICAgICA6IG1fY2xp
ZW50KGNsaWVudCkKICAgICAsIG1fcmFuZ2UocmFuZ2UpCisgICAgLCBtX3VuaWZpZWRUZXh0Q2hl
Y2tlckVuYWJsZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUX0FSRyhtX2NsaWVudCwgbV9jbGllbnQp
OwogICAgIEFTU0VSVF9BUkcobV9yYW5nZSwgbV9yYW5nZSk7CisKKyAgICBpZiAobV9yYW5nZSkg
eworICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gbV9yYW5nZS0+b3duZXJEb2N1bWVudCgpLT5m
cmFtZSgpKSB7CisgICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNl
dHRpbmdzKCkpCisgICAgICAgICAgICAgICAgbV91bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkID0g
c2V0dGluZ3MtPnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKTsKKyAgICAgICAgfQorICAgIH0K
IH0KIAogVGV4dENoZWNraW5nSGVscGVyOjp+VGV4dENoZWNraW5nSGVscGVyKCkKQEAgLTIyNSwx
MiArMjM1LDE2IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxs
aW5nKGludCYgZmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vCiAKIFN0cmluZyBUZXh0Q2hlY2tp
bmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFt
bWFyLCBib29sJiBvdXRJc1NwZWxsaW5nLCBpbnQmIG91dEZpcnN0Rm91bmRPZmZzZXQsIEdyYW1t
YXJEZXRhaWwmIG91dEdyYW1tYXJEZXRhaWwpCiB7Ci0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVD
S0lORykKKyAgICBpZiAoIW1fdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCkgeworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKwogICAgIFN0
cmluZyBmaXJzdEZvdW5kSXRlbTsKICAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQ7CiAgICAgU3Ry
aW5nIGJhZEdyYW1tYXJQaHJhc2U7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgCisK
ICAgICAvLyBJbml0aWFsaXplIG91dCBwYXJhbWV0ZXJzOyB0aGVzZSB3aWxsIGJlIHVwZGF0ZWQg
aWYgd2UgZmluZCBzb21ldGhpbmcgdG8gcmV0dXJuLgogICAgIG91dElzU3BlbGxpbmcgPSB0cnVl
OwogICAgIG91dEZpcnN0Rm91bmRPZmZzZXQgPSAwOwpAQCAtMjM4LDcgKzI1Miw3IEBAIFN0cmlu
ZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJv
b2wgY2hlY2tHcmFtbWFyLCBiCiAgICAgb3V0R3JhbW1hckRldGFpbC5sZW5ndGggPSAwOwogICAg
IG91dEdyYW1tYXJEZXRhaWwuZ3Vlc3Nlcy5jbGVhcigpOwogICAgIG91dEdyYW1tYXJEZXRhaWwu
dXNlckRlc2NyaXB0aW9uID0gIiI7Ci0gICAgCisKICAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCBy
YW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tpbmcg
bmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIg
b2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRo
ZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGln
bm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KQEAgLTI3Niw4ICsyOTAsOCBAQCBTdHJpbmcgVGV4
dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNo
ZWNrR3JhbW1hciwgYgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgICAgICAgICAgICAgVGV4dENoZWNraW5n
VHlwZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBl
U3BlbGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3Bl
bGxpbmc7Ci0gICAgICAgICAgICAgICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNrVGV4
dE9mUGFyYWdyYXBoKHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0cmlu
Zy5sZW5ndGgoKSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7Ci0gICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgobV9jbGllbnQtPnRleHRDaGVja2Vy
KCksIHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0cmluZy5sZW5ndGgo
KSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7CisKICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgICAg
ICBjb25zdCBUZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwogICAgICAg
ICAgICAgICAgICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGlu
ZyAmJiByZXN1bHQtPmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1bHQtPmxv
Y2F0aW9uICsgcmVzdWx0LT5sZW5ndGggPD0gY3VycmVudEVuZE9mZnNldCkgewpAQCAtMzQ0LDE0
ICszNTgsNiBAQCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGlu
Z09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgICAgICB0b3RhbExlbmd0aFBy
b2Nlc3NlZCArPSBjdXJyZW50TGVuZ3RoOwogICAgIH0KICAgICByZXR1cm4gZmlyc3RGb3VuZEl0
ZW07Ci0jZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIFVOVVNFRF9QQVJBTShj
aGVja0dyYW1tYXIpOwotICAgIFVOVVNFRF9QQVJBTShvdXRJc1NwZWxsaW5nKTsKLSAgICBVTlVT
RURfUEFSQU0ob3V0Rmlyc3RGb3VuZE9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKG91dEdyYW1t
YXJEZXRhaWwpOwotICAgIHJldHVybiAiIjsKLSNlbmRpZiAvLyBVU0UoVU5JRklFRF9URVhUX0NI
RUNLSU5HKQogfQogCiBpbnQgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RHcmFtbWFyRGV0
YWlsKGNvbnN0IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludCBiYWRH
cmFtbWFyUGhyYXNlTG9jYXRpb24sIGludCAvKmJhZEdyYW1tYXJQaHJhc2VMZW5ndGgqLywgaW50
IHN0YXJ0T2Zmc2V0LCBpbnQgZW5kT2Zmc2V0LCBib29sIG1hcmtBbGwpCkBAIC01MTAsMTIgKzUx
NiwxNiBAQCBib29sIFRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2FsKFZlY3RvcjxT
dHJpbmc+JiBndWVzc2VzVmVjdG9yKSBjb25zdAogCiBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tp
bmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbCBj
aGVja0dyYW1tYXIsIGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpIGNvbnN0
CiB7Ci0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKKyAgICBpZiAoIW1fdW5pZmllZFRl
eHRDaGVja2VyRW5hYmxlZCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7CisgICAgfQorCiAgICAgVmVjdG9yPFN0cmluZz4g
Z3Vlc3NlczsKICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgIG1pc3NwZWxsZWQgPSBmYWxzZTsK
ICAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7Ci0gICAgCisKICAgICBpZiAoIW1fY2xpZW50IHx8
ICFtX3JhbmdlIHx8IG1fcmFuZ2UtPmNvbGxhcHNlZChlYykpCiAgICAgICAgIHJldHVybiBndWVz
c2VzOwogCkBAIC01MjYsOCArNTM2LDggQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVs
cGVyOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKIAogICAg
IFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgVGV4dENoZWNraW5nVHlw
ZU1hc2sgY2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3Bl
bGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxp
bmc7Ci0gICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBh
cmFncmFwaC50ZXh0Q2hhcmFjdGVycygpLCBwYXJhZ3JhcGgudGV4dExlbmd0aCgpLCBjaGVja2lu
Z1R5cGVzLCByZXN1bHRzKTsKLSAgICAKKyAgICBjaGVja1RleHRPZlBhcmFncmFwaChtX2NsaWVu
dC0+dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHBhcmFncmFwaC50
ZXh0TGVuZ3RoKCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOworCiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgY29uc3QgVGV4dENo
ZWNraW5nUmVzdWx0KiByZXN1bHQgPSAmcmVzdWx0c1tpXTsKICAgICAgICAgaWYgKHJlc3VsdC0+
dHlwZSA9PSBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcGFyYWdyYXBoLmNoZWNraW5nUmFu
Z2VNYXRjaGVzKHJlc3VsdC0+bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKSkgewpAQCAtNTM5LDEw
ICs1NDksMTAgQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9y
TWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICAgICAgICAgIHJldHVybiBn
dWVzc2VzOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgaWYgKCFjaGVja0dyYW1tYXIp
CiAgICAgICAgIHJldHVybiBndWVzc2VzOwotICAgICAgICAKKwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCByZXN1bHRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGNvbnN0IFRleHRDaGVj
a2luZ1Jlc3VsdCogcmVzdWx0ID0gJnJlc3VsdHNbaV07CiAgICAgICAgIGlmIChyZXN1bHQtPnR5
cGUgPT0gVGV4dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgcGFyYWdyYXBoLmlzQ2hlY2tpbmdSYW5n
ZUNvdmVyZWRCeShyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCkpIHsKQEAgLTU2Miwx
MyArNTcyLDYgQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9y
TWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICAgICAgfQogICAgIH0KICAg
ICByZXR1cm4gZ3Vlc3NlczsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
VU5VU0VEX1BBUkFNKGNoZWNrR3JhbW1hcik7Ci0gICAgVU5VU0VEX1BBUkFNKG1pc3NwZWxsZWQp
OwotICAgIFVOVVNFRF9QQVJBTSh1bmdyYW1tYXRpY2FsKTsKLSAgICByZXR1cm4gVmVjdG9yPFN0
cmluZz4oKTsKLSNlbmRpZiAvLyBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogfQogCiAKQEAg
LTU5MCw0ICs1OTMsMjEgQEAgdm9pZCBUZXh0Q2hlY2tpbmdIZWxwZXI6Om1hcmtBbGxCYWRHcmFt
bWFyKCkKICAgICBmaW5kRmlyc3RCYWRHcmFtbWFyKGlnbm9yZWRHcmFtbWFyRGV0YWlsLCBpZ25v
cmVkT2Zmc2V0LCB0cnVlKTsKIH0KIAordm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hl
Y2tlckNsaWVudCogY2xpZW50LCBjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywg
VmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCit7CisjaWYgVVNFKFVOSUZJRURf
VEVYVF9DSEVDS0lORykKKyAgICBjbGllbnQtPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHRleHQsIGxl
bmd0aCwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7CisjZWxzZQorICAgIC8vIFNob3VsZCBpbXBs
ZW1lbnQgbGF0ZXIgdG8gdW5pZnkgdW5pZmllZCBzcGVsbC1jaGVja2luZyBjb2RlIHBhdGggYW5k
CisgICAgLy8gbGVnYWN5IHNwZWxsLWNoZWNraW5nIGNvZGUgcGF0aC4KKyAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICBVTlVTRURfUEFSQU0oY2xpZW50KTsKKyAgICBVTlVTRURfUEFSQU0o
dGV4dCk7CisgICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNr
aW5nVHlwZXMpOworICAgIFVOVVNFRF9QQVJBTShyZXN1bHRzKTsKKyNlbmRpZgorfQorCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oIGIv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAppbmRleCA4YjVjNjkx
Li5iMmE5YTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmgKQEAgLTI3LDYgKzI3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSYW5nZTsK
IGNsYXNzIFBvc2l0aW9uOworY2xhc3MgU2V0dGluZ3M7CiAKIGNsYXNzIFRleHRDaGVja2luZ1Bh
cmFncmFwaCB7CiBwdWJsaWM6CkBAIC05MCw4ICs5MSwxMyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIEVkaXRvckNsaWVudCogbV9jbGllbnQ7CiAgICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOwor
ICAgIGJvb2wgbV91bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkOworCiB9OwogCit2b2lkIGNoZWNr
VGV4dE9mUGFyYWdyYXBoKFRleHRDaGVja2VyQ2xpZW50KiwgY29uc3QgVUNoYXIqIHRleHQsIGlu
dCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1R5cGVNYXNr
IGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVGV4dENoZWNraW5nSGVscGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggZDdlMDBkMS4uN2EyNDFlNSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9TZXR0aW5ncy5jcHAKQEAgLTE5OSw2ICsxOTksMTEgQEAgU2V0dGluZ3M6OlNldHRpbmdz
KFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2Z1bGxTY3JlZW5BUElFbmFibGVkKGZhbHNlKQogI2VuZGlm
CiAgICAgLCBtX2FzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGZhbHNlKQorI2lmIFVT
RShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCisgICAgLCBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQodHJ1ZSkKKyNlbHNlCisgICAgLCBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoZmFsc2Up
CisjZW5kaWYKICAgICAsIG1fbWVtb3J5SW5mb0VuYWJsZWQoZmFsc2UpCiAgICAgLCBtX2ludGVy
YWN0aXZlRm9ybVZhbGlkYXRpb24oZmFsc2UpCiAgICAgLCBtX3VzZVByZUhUTUw1UGFyc2VyUXVp
cmtzKGZhbHNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCmluZGV4IGRiNzM2NDguLmZkZmU5ZDMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL1NldHRpbmdzLmgKQEAgLTM4Niw2ICszODYsOSBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgc2V0QXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoYm9v
bCBmbGFnKSB7IG1fYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQgPSBmbGFnOyB9CiAg
ICAgICAgIGJvb2wgYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSBjb25zdCAgeyBy
ZXR1cm4gbV9hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxlZDsgfQogCisgICAgICAgIHZv
aWQgc2V0VW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChib29sIGZsYWcpIHsgbV91bmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkID0gZmxhZzsgfQorICAgICAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tl
ckVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQ7IH0K
KwogICAgICAgICB2b2lkIHNldE1lbW9yeUluZm9FbmFibGVkKGJvb2wgZmxhZykgeyBtX21lbW9y
eUluZm9FbmFibGVkID0gZmxhZzsgfQogICAgICAgICBib29sIG1lbW9yeUluZm9FbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9tZW1vcnlJbmZvRW5hYmxlZDsgfQogCkBAIC01ODAsNiArNTgzLDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1fZnVsbFNjcmVlbkFQSUVuYWJs
ZWQgOiAxOwogI2VuZGlmCiAgICAgICAgIGJvb2wgbV9hc3luY2hyb25vdXNTcGVsbENoZWNraW5n
RW5hYmxlZDogMTsKKyAgICAgICAgYm9vbCBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQ6IDE7
CiAgICAgICAgIGJvb2wgbV9tZW1vcnlJbmZvRW5hYmxlZDogMTsKICAgICAgICAgYm9vbCBtX2lu
dGVyYWN0aXZlRm9ybVZhbGlkYXRpb246IDE7CiAgICAgICAgIGJvb2wgbV91c2VQcmVIVE1MNVBh
cnNlclF1aXJrczogMTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109286</attachid>
            <date>2011-09-30 05:23:46 -0700</date>
            <delta_ts>2011-10-02 23:07:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69128-20110930212344.patch</filename>
            <type>text/plain</type>
            <size>48141</size>
            <attacher name="Shinya Kawanaka">shinyak</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTYzODAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggZDJkYTMz
YjRiNTMxNzc4YzA5ZWIyODBhZTI5ZjI2NjIwNDVjN2Y0MS4uNmQwMjlkNWU4ODg0YTI4NTMzOTMx
NDI3NTQzNThhOWFjZjU0Zjk1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTY0Myw5ICs2NDMs
MTEgQEAgU0VUKFdlYkNvcmVfU09VUkNFUwogICAgIGVkaXRpbmcvUmVwbGFjZU5vZGVXaXRoU3Bh
bkNvbW1hbmQuY3BwCiAgICAgZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKICAg
ICBlZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmNwcAorICAgIGVkaXRpbmcvU2V0U2Vs
ZWN0aW9uQ29tbWFuZC5jcHAKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAKICAgICBlZGl0
aW5nL1NwZWxsQ2hlY2tlci5jcHAKICAgICBlZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbnRy
b2xsZXIuY3BwCisgICAgZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcAogICAg
IGVkaXRpbmcvU3BsaXRFbGVtZW50Q29tbWFuZC5jcHAKICAgICBlZGl0aW5nL1NwbGl0VGV4dE5v
ZGVDb21tYW5kLmNwcAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbnRhaW5pbmdFbGVtZW50
Q29tbWFuZC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmNjUxNTUxYTBjNjVkZWIxZGE2NGJmOGNkMDRlZWZi
MzA1Nzk2YTkwLi4wYWE2N2RkYjIxNDAxNjdiYzI5NWRhZDgyZjVkZmJlNmQ0MTFhNTA0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNjMgQEAKKzIwMTEtMDktMzAgIFNoaW55YSBLYXdhbmFrYSAgPHNo
aW55YWtAZ29vZ2xlLmNvbT4KKworICAgICAgICBTaG91bGQgY2FsbCBjaGVja1RleHRPZlBhcmFn
cmFwaCgpIGluZGlyZWN0bHkgdG8gbWFrZSB1bmlmeWluZyBzcGVsbC1jaGVja2luZyBjb2RlIHBh
dGggZWFzeS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTY5MTI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2ViQ29yZSBoYXMgdHdvIGRpZmZlcmVudCBjb2RlIHBhdGhzIGZvciBzcGVsbC1jaGVja2luZzoK
KyAgICAgICAgICAxKSBjaGVja1RleHRPZlBhcmFncmFwaCgpIGZvciBTbm93IExlb3BhcmQgb3Ig
bGF0ZXIKKyAgICAgICAgICAyKSBjaGVja1NwZWxsaW5nT2ZTdHJpbmcoKSBmb3IgY2hlY2tHcmFt
bWFyT2ZTdHJpbmcoKSBmb3Igb3RoZXIgcGxhdGZvcm1zLgorCisgICAgICAgIEF0IHRoZSBmaXJz
dCBzdGVwLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW4gaW5kaXJlY3QgZnVuY3Rpb24gdG8gY2Fs
bAorICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgpIGluIFNub3cgTGVvcGFyZCBvciBsYXRl
ci4gVGhpcyBpcyBpbnRlbmRlZCB0byBtYWtlIGl0IGVhc3kgdG8KKyAgICAgICAgaW50cm9kdWNl
IGEgZnVuY3Rpb24gZm9yIG1pbWljaW5nIGNoZWNrVGV4dE9mUGFyYWdyYXBoKCkgaW4gQ2hyb21p
dW0gcGxhdGZvcm0gb3IKKyAgICAgICAgb3RoZXIgbm9uLVNMIG9yIG5vbi1MaW9uIHBsYXRmb3Jt
LgorCisgICAgICAgIEFsc28sIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGZsYWcgdG8gY2hhbmdl
IGNvZGUgcGF0aHMgZHluYW1pY2FsbHkuCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBpbmNsdWRl
cyBidWlsZCBmaXggZm9yIFFULCBHVEssIGFuZCBXaW5kb3dzIHBsYXRmb3Jtcy4KKworICAgICAg
ICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGlzIHBhdGNoIGRvZXMgbm90IGNoYW5nZSBhIGJlaGF2
aW9yLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUu
bGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzTWlz
c3BlbGxpbmcpOgorICAgICAgICAgIENoYW5nZWQgc3RhdGljIGlmLVVTRShVTklGSUVEX1RFWFRf
Q0hFQ0tJTkcpIHN0YXRlbWVudCB0byBkeW5hbWljCisgICAgICAgICAgY29uZGl0aW9uIGJyYW5j
aCB0byBhY2hpZXZlIGVhc3kgY29kZSBwYXRoIGNoYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQpOiBBZGRlZC4KKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaDoKKyAgICAgICAgKiBh
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbToKKyAgICAg
ICAgKEFYQXR0cmlidXRlU3RyaW5nU2V0U3BlbGxpbmcpOiBTYW1lIGFzIEFjY2Vzc2liaWxpdHlP
YmplY3QuY3BwCisgICAgICAgICogZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwOgorICAgICAg
ICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWR2YW5j
ZVRvTmV4dE1pc3NwZWxsaW5nKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omd1
ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsU2VsZWN0aW9uKTogZGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZCk6
IGRpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjptYXJrQWxsTWlzc3BlbGxpbmdzQW5k
QmFkR3JhbW1hckluUmFuZ2VzKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNo
YW5nZUJhY2tUb1JlcGxhY2VkU3RyaW5nKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpFZGl0
b3I6Om1hcmtNaXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFyKTogZGl0dG8uCisgICAgICAgIChXZWJD
b3JlOjpFZGl0b3I6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQpOiBkaXR0by4KKyAgICAgICAg
KiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5n
SGVscGVyKTogZGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpUZXh0Q2hlY2tpbmdIZWxwZXI6OmZp
bmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKTogZGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpUZXh0Q2hlY2tpbmdIZWxwZXI6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2Fs
UmFuZ2UpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OmNoZWNrVGV4dE9mUGFyYWdyYXBoKToK
KyAgICAgICAgICBBIHdyYXBwZWQgZnVuY3Rpb24gdG8gY2FsbCBUZXh0Q2hlY2tlckNsaWVudDo6
Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKSBpbmRpcmVjdGx5LgorICAgICAgICAgIFRoaXMgZnVuY3Rp
b24gd2lsbCBiZSBleHRlbmRlZCB0byBtaW1pYyBjaGVja1RleHRPZlBhcmFncmFwaCgpIGluIHRo
ZSBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IGhhdmUKKyAgICAgICAgICBUZXh0Q2hlY2tlckNsaWVu
dDo6Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKS4KKyAgICAgICAgKiBlZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5oOgorICAgICAgICAqIHBhZ2UvU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2V0dGluZ3M6OlNldHRpbmdzKToKKyAgICAgICAgKiBwYWdlL1NldHRpbmdzLmg6CisgICAg
ICAgIChXZWJDb3JlOjpTZXR0aW5nczo6c2V0VW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCk6Cisg
ICAgICAgICAgU2V0cyBhIGZsYWcgdG8gY2hhbmdlIHRoZSBjb2RlIHBhdGguCisgICAgICAgIChX
ZWJDb3JlOjpTZXR0aW5nczo6dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCk6CisgICAgICAgICAg
QSBmbGFnIHRvIGNoYW5nZSB0aGUgY29kZSBwYXRoLgorCiAyMDExLTA5LTI5ICBNYXJ0aW4gUm9i
aW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAogICAgICAgICBbRnJlZXR5cGVdIFNvbWUg
dGV4dCBpbiBQbGFuZXQgR05PTUUgcmVuZGVycyBpbiB0aGUgd3JvbmcgcGxhY2UKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9H
TlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDFlNWY3NTQwOTYyY2Q1OTc1Njc1ZmE4MTM0ZmFmODRj
OGMzM2UyOGMuLmYwYzcyYjVjY2VhYzc1MmEzMjhhYzkyZGEzMzBhNmM5ZjMyYWY1YTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtMTQyMyw2ICsxNDIzLDggQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21t
YW5kLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQu
Y3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NldE5vZGVBdHRyaWJ1dGVDb21tYW5kLmgg
XAorICAgIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAgXAor
ICAgIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU2V0U2VsZWN0aW9uQ29tbWFuZC5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NtYXJ0UmVwbGFjZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvU21hcnRSZXBsYWNlLmggXAogCVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBs
YWNlSUNVLmNwcCBcCkBAIC0xNDMwLDYgKzE0MzIsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2VyLmggXAogCVNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAgXAogCVNvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5oIFwKKwlTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwIFwKIAlTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaCBcCiAJU291cmNlL1dlYkNv
cmUvZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcm8gYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBlYzIwMjNjMzdl
ZDJhNmQ4MjEyNWQ1MjY4NGRlYzFkYzk5YzJiNGZiLi42NTc1N2NkMGMxNTE1ODI5ODQ4YjAwM2Q1
YTc3NWEzZDdhZWRkYWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtNjA2LDggKzYwNiwxMCBAQCBTT1VS
Q0VTICs9IFwKICAgICBlZGl0aW5nL1JlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcCBcCiAg
ICAgZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAgXAogICAgIGVkaXRpbmcvU2V0
Tm9kZUF0dHJpYnV0ZUNvbW1hbmQuY3BwIFwKKyAgICBlZGl0aW5nL1NldFNlbGVjdGlvbkNvbW1h
bmQuY3BwIFwKICAgICBlZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAgXAogICAgIGVkaXRpbmcv
U3BlbGxDaGVja2VyLmNwcCBcCisgICAgZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcCBcCiAgICAgZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db250cm9sbGVyLmNwcCBcCiAg
ICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21tYW5kLmNwcCBcCiAgICAgZWRpdGluZy9TcGxpdFRl
eHROb2RlQ29tbWFuZC5jcHAgXApAQCAtMTYxOSw2ICsxNjIxLDcgQEAgSEVBREVSUyArPSBcCiAg
ICAgZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL1NldE5v
ZGVBdHRyaWJ1dGVDb21tYW5kLmggXAogICAgIGVkaXRpbmcvU21hcnRSZXBsYWNlLmggXAorICAg
IGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIFwKICAgICBlZGl0aW5nL1NwZWxs
aW5nQ29ycmVjdGlvbkNvbnRyb2xsZXIuaCBcCiAgICAgZWRpdGluZy9TcGxpdEVsZW1lbnRDb21t
YW5kLmggXAogICAgIGVkaXRpbmcvU3BsaXRUZXh0Tm9kZUNvbW1hbmQuaCBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCmluZGV4IGZlOWZiZjVlZDIwMmRm
YWFhMmNhODgwOWRhMTRjM2U0ZDJkZGMxMWQuLmU0ZTEzMWYxZTE2NjhkNDFiMGZlNWE5MzE4M2Rh
NzczMDVjYTlmMzAgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dl
YkNvcmUudmNwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUu
dmNwcm9qCkBAIC01MjQyMSw2ICs1MjQyMSw2MiBAQAogCQkJCQkvPgogCQkJCTwvRmlsZUNvbmZp
Z3VyYXRpb24+CiAJCQk8L0ZpbGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAg
ICBSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU2V0U2VsZWN0aW9uQ29tbWFuZC5jcHAiCisgICAg
ICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24KKyAgICAg
ICAgICAgICAgICAgICAgICBOYW1lPSJEZWJ1Z3xXaW4zMiIKKyAgICAgICAgICAgICAgICAgICAg
ICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgICA+CisgICAg
ICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlZD
Q0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAg
ICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPEZpbGVDb25m
aWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iUmVsZWFzZXxXaW4zMiIKKyAg
ICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAg
ICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAg
ICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgTmFtZT0i
RGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVk
RnJvbUJ1aWxkPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAg
ICAgICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iVkNDTENvbXBpbGVy
VG9vbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAg
PC9GaWxlQ29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24K
KyAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIK
KyAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAg
ICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAg
ICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgTmFt
ZT0iRGVidWdfQWxsfFdpbjMyIgorICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAg
PFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9GaWxl
Q29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24KKyAgICAg
ICAgICAgICAgICAgICAgICBOYW1lPSJQcm9kdWN0aW9ufFdpbjMyIgorICAgICAgICAgICAgICAg
ICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorICAgICAgICAgICAgICAgICAgICAgID4K
KyAgICAgICAgICAgICAgICAgICAgPFRvb2wKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFt
ZT0iVkNDTENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAg
ICAgICAgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8L0Zp
bGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICAgUmVsYXRpdmVQYXRoPSIu
LlxlZGl0aW5nXFNldFNlbGVjdGlvbkNvbW1hbmQuaCIKKyAgICAgICAgICAgICAgICAgID4KKyAg
ICAgICAgICAgICAgICA8L0ZpbGU+CiAJCQk8RmlsZQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cZWRp
dGluZ1xTbWFydFJlcGxhY2UuaCIKIAkJCQk+CkBAIC01MjUzMyw2ICs1MjU4OSw2MiBAQAogCQkJ
CVJlbGF0aXZlUGF0aD0iLi5cZWRpdGluZ1xTcGVsbENoZWNrZXIuaCIKIAkJCQk+CiAJCQk8L0Zp
bGU+CisgICAgICAgICAgICA8RmlsZQorICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4u
XGVkaXRpbmdcU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAiCisgICAgICAgICAgICAgICAg
ID4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAg
ICAgICBOYW1lPSJEZWJ1Z3xXaW4zMiIKKyAgICAgICAgICAgICAgICAgICAgICBFeGNsdWRlZEZy
b21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgICA+CisgICAgICAgICAgICAgICAg
ICAgIDxUb29sCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWU9IlZDQ0xDb21waWxlclRv
b2wiCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAgICAgICAgICAgICAgICAgIDwv
RmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPEZpbGVDb25maWd1cmF0aW9uCisg
ICAgICAgICAgICAgICAgICAgICAgTmFtZT0iUmVsZWFzZXxXaW4zMiIKKyAgICAgICAgICAgICAg
ICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAgICA+
CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5h
bWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8+CisgICAg
ICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAgPEZp
bGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iRGVidWdfQ2Fpcm9f
Q0ZMaXRlfFdpbjMyIgorICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0
cnVlIgorICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgPFRvb2wK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9GaWxlQ29uZmln
dXJhdGlvbj4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAg
ICAgICAgICAgICBOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKyAgICAgICAgICAg
ICAgICAgICAgICBFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKyAgICAgICAgICAgICAgICAgICAg
ICA+CisgICAgICAgICAgICAgICAgICAgIDxUb29sCisgICAgICAgICAgICAgICAgICAgICAgICAg
IE5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisgICAgICAgICAgICAgICAgICAgICAgICAgIC8+Cisg
ICAgICAgICAgICAgICAgICAgIDwvRmlsZUNvbmZpZ3VyYXRpb24+CisgICAgICAgICAgICAgICAg
PEZpbGVDb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgTmFtZT0iRGVidWdfQWxs
fFdpbjMyIgorICAgICAgICAgICAgICAgICAgICAgIEV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgor
ICAgICAgICAgICAgICAgICAgICAgID4KKyAgICAgICAgICAgICAgICAgICAgPFRvb2wKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgLz4KKyAgICAgICAgICAgICAgICAgICAgPC9GaWxlQ29uZmlndXJhdGlv
bj4KKyAgICAgICAgICAgICAgICA8RmlsZUNvbmZpZ3VyYXRpb24KKyAgICAgICAgICAgICAgICAg
ICAgICBOYW1lPSJSZWxlYXNlX0xUQ0d8V2luMzIiCisgICAgICAgICAgICAgICAgICAgICAgRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisgICAgICAgICAgICAgICAgICAgICAgPgorICAgICAgICAg
ICAgICAgICAgICA8VG9vbAorICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lPSJWQ0NMQ29t
cGlsZXJUb29sIgorICAgICAgICAgICAgICAgICAgICAgICAgICAvPgorICAgICAgICAgICAgICAg
ICAgICA8L0ZpbGVDb25maWd1cmF0aW9uPgorICAgICAgICAgICAgICAgIDwvRmlsZT4KKyAgICAg
ICAgICAgIDxGaWxlCisgICAgICAgICAgICAgICAgICBSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdc
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oIgorICAgICAgICAgICAgICAgICAgPgorICAgICAg
ICAgICAgPC9GaWxlPgogCQkJPEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXGVkaXRpbmdcU3Bl
bGxpbmdDb3JyZWN0aW9uQ29udHJvbGxlci5jcHAiCiAJCQkJPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKaW5kZXggOTBmM2Jl
MmUwNjZhMDBiMjA4MDQ3NzUzOGJhM2ViMjljOTNjNGVhOS4uZDEwY2JiNmQ0NmRhYzE5ZDMxZWE5
M2ZjNTIzNTI4NDhmY2JkMDM3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuY3BwCkBAIC01MCw3ICs1MCw5IEBACiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlJlbmRlcldpZGdldC5oIgogI2luY2x1ZGUgIlJl
bmRlcmVkUG9zaXRpb24uaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHRD
aGVja2VyQ2xpZW50LmgiCisjaW5jbHVkZSAiVGV4dENoZWNraW5nSGVscGVyLmgiCiAjaW5jbHVk
ZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlICJ2
aXNpYmxlX3VuaXRzLmgiCkBAIC0yODgsMjAgKzI5MCwyMCBAQCBib29sIEFjY2Vzc2liaWxpdHlP
YmplY3Q6Omhhc01pc3NwZWxsaW5nKCkgY29uc3QKICAgICBjb25zdCBVQ2hhciogY2hhcnMgPSBz
dHJpbmdWYWx1ZSgpLmNoYXJhY3RlcnMoKTsKICAgICBpbnQgY2hhcnNMZW5ndGggPSBzdHJpbmdW
YWx1ZSgpLmxlbmd0aCgpOwogICAgIGJvb2wgaXNNaXNzcGVsbGVkID0gZmFsc2U7Ci0gICAgCi0j
aWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAgICBWZWN0b3I8VGV4dENoZWNraW5nUmVz
dWx0PiByZXN1bHRzOwotICAgIHRleHRDaGVja2VyLT5jaGVja1RleHRPZlBhcmFncmFwaChjaGFy
cywgY2hhcnNMZW5ndGgsIFRleHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cyk7Ci0gICAg
aWYgKCFyZXN1bHRzLmlzRW1wdHkoKSkKLSAgICAgICAgaXNNaXNzcGVsbGVkID0gdHJ1ZTsKLSNl
bHNlCi0gICAgaW50IG1pc3NwZWxsaW5nTGVuZ3RoID0gMDsKLSAgICBpbnQgbWlzc3BlbGxpbmdM
b2NhdGlvbiA9IC0xOwotICAgIHRleHRDaGVja2VyLT5jaGVja1NwZWxsaW5nT2ZTdHJpbmcoY2hh
cnMsIGNoYXJzTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5nTGVuZ3Ro
KTsKLSAgICBpZiAobWlzc3BlbGxpbmdMZW5ndGggfHwgbWlzc3BlbGxpbmdMb2NhdGlvbiAhPSAt
MSkKLSAgICAgICAgaXNNaXNzcGVsbGVkID0gdHJ1ZTsKLSNlbmRpZgotICAgIAorCisgICAgaWYg
KHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgeworICAgICAgICBWZWN0b3I8VGV4dENoZWNr
aW5nUmVzdWx0PiByZXN1bHRzOworICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCh0ZXh0Q2hl
Y2tlciwgY2hhcnMsIGNoYXJzTGVuZ3RoLCBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcsIHJlc3Vs
dHMpOworICAgICAgICBpZiAoIXJlc3VsdHMuaXNFbXB0eSgpKQorICAgICAgICAgICAgaXNNaXNz
cGVsbGVkID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpbnQgbWlzc3BlbGxpbmdMZW5n
dGggPSAwOworICAgICAgICBpbnQgbWlzc3BlbGxpbmdMb2NhdGlvbiA9IC0xOworICAgICAgICB0
ZXh0Q2hlY2tlci0+Y2hlY2tTcGVsbGluZ09mU3RyaW5nKGNoYXJzLCBjaGFyc0xlbmd0aCwgJm1p
c3NwZWxsaW5nTG9jYXRpb24sICZtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgIGlmIChtaXNz
cGVsbGluZ0xlbmd0aCB8fCBtaXNzcGVsbGluZ0xvY2F0aW9uICE9IC0xKQorICAgICAgICAgICAg
aXNNaXNzcGVsbGVkID0gdHJ1ZTsKKyAgICB9CisKICAgICByZXR1cm4gaXNNaXNzcGVsbGVkOwog
fQogCkBAIC0xMzcyLDUgKzEzNzQsMjIgQEAgQWNjZXNzaWJpbGl0eUJ1dHRvblN0YXRlIEFjY2Vz
c2liaWxpdHlPYmplY3Q6OmNoZWNrYm94T3JSYWRpb1ZhbHVlKCkgY29uc3QKICAgICAKICAgICBy
ZXR1cm4gQnV0dG9uU3RhdGVPZmY7CiB9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6dW5p
ZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0Cit7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gbm9kZSgpLT5kb2N1bWVudCgpOworICAgIGlmICghZG9jdW1lbnQpCisgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAKKyAgICBGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAg
ICBpZiAoIWZyYW1lKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTZXR0aW5ncyogc2V0
dGluZ3MgPSBmcmFtZS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoIXNldHRpbmdzKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gc2V0dGluZ3MtPnVuaWZpZWRUZXh0Q2hlY2tlckVu
YWJsZWQoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAppbmRleCBhYjEzMTY3YjBl
NmQ3ZjRkYTgzZjNjZjEyNjM1Y2IyYWFjMWE2MzdmLi4zMWMxZjViNGJkYjBlMjExNGJiNDEzMWIw
NzNmOTY2Y2MzMjNiY2VjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlPYmplY3QuaApAQCAtNjcyLDcgKzY3Miw5IEBAIHB1YmxpYzoKICAgICAv
LyBhbGxvd3MgZm9yIGFuIEFjY2Vzc2liaWxpdHlPYmplY3QgdG8gdXBkYXRlIGl0cyByZW5kZXIg
dHJlZSBvciBwZXJmb3JtCiAgICAgLy8gb3RoZXIgb3BlcmF0aW9ucyB1cGRhdGUgdHlwZSBvcGVy
YXRpb25zCiAgICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmUoKTsKLSAgICAKKworICAgIGJvb2wg
dW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpIGNvbnN0OworCiBwcm90ZWN0ZWQ6CiAgICAgQVhJ
RCBtX2lkOwogICAgIEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBtX2NoaWxkcmVuOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQppbmRleCBhYzI1ZWUwZmZlMGE2YTAyMzFmNDMx
ODM3MWZkMGViYmMxZGU3ODJlLi5iNTkxYWViNTdiZTExM2MxZGM2NTdkZWY5ZDBiNGMwMWI4Mjgz
YjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlci5tbQpAQCAtNjg4LDM4ICs2ODgs
MzggQEAgc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRCbG9ja3F1b3RlTGV2ZWwoTlNN
dXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clMKIAogc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVT
dHJpbmdTZXRTcGVsbGluZyhOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nKiBhdHRyU3RyaW5nLCBO
b2RlKiBub2RlLCBjb25zdCBVQ2hhciogY2hhcnMsIGludCBjaGFyTGVuZ3RoLCBOU1JhbmdlIHJh
bmdlKQogewotI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgLy8gQ2hlY2sgdGhl
IHNwZWxsaW5nIGRpcmVjdGx5IHNpbmNlIGRvY3VtZW50LT5tYXJrZXJzRm9yTm9kZSgpIGRvZXMg
bm90IHN0b3JlIHRoZSBtaXNzcGVsbGVkIG1hcmtpbmcgd2hlbiB0aGUgY3Vyc29yIGlzIGluIGEg
d29yZC4KLSAgICBUZXh0Q2hlY2tlckNsaWVudCogY2hlY2tlciA9IG5vZGUtPmRvY3VtZW50KCkt
PmZyYW1lKCktPmVkaXRvcigpLT50ZXh0Q2hlY2tlcigpOwotCi0gICAgLy8gY2hlY2tUZXh0T2ZQ
YXJhZ3JhcGggaXMgdGhlIG9ubHkgc3BlbGxpbmcvZ3JhbW1hciBjaGVja2VyIGltcGxlbWVudGVk
IGluIFdLMSBhbmQgV0syCi0gICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsK
LSAgICBjaGVja2VyLT5jaGVja1RleHRPZlBhcmFncmFwaChjaGFycywgY2hhckxlbmd0aCwgVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nLCByZXN1bHRzKTsKLSAgICAKLSAgICBzaXplX3Qgc2l6ZSA9
IHJlc3VsdHMuc2l6ZSgpOwotICAgIE5TTnVtYmVyKiB0cnVlVmFsdWUgPSBbTlNOdW1iZXIgbnVt
YmVyV2l0aEJvb2w6WUVTXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsr
KSB7Ci0gICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jlc3VsdCYgcmVzdWx0ID0gcmVzdWx0c1tp
XTsKLSAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nl
c3NpYmlsaXR5TWlzc3BlbGxlZFRleHRBdHRyaWJ1dGUsIHRydWVWYWx1ZSwgTlNNYWtlUmFuZ2Uo
cmVzdWx0LmxvY2F0aW9uICsgcmFuZ2UubG9jYXRpb24sIHJlc3VsdC5sZW5ndGgpKTsKLSAgICB9
ICAgIAotI2Vsc2UKLSAgICBpbnQgY3VycmVudFBvc2l0aW9uID0gMDsKLSAgICB3aGlsZSAoY2hh
ckxlbmd0aCA+IDApIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJEYXRhID0gY2hhcnMgKyBj
dXJyZW50UG9zaXRpb247CisgICAgaWYgKG1fb2JqZWN0ICYmIG1fb2JqZWN0LT51bmlmaWVkVGV4
dENoZWNrZXJFbmFibGVkKCkpIHsKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHNwZWxsaW5nIGRpcmVj
dGx5IHNpbmNlIGRvY3VtZW50LT5tYXJrZXJzRm9yTm9kZSgpIGRvZXMgbm90IHN0b3JlIHRoZSBt
aXNzcGVsbGVkIG1hcmtpbmcgd2hlbiB0aGUgY3Vyc29yIGlzIGluIGEgd29yZC4KICAgICAgICAg
VGV4dENoZWNrZXJDbGllbnQqIGNoZWNrZXIgPSBub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpLT5l
ZGl0b3IoKS0+dGV4dENoZWNrZXIoKTsKKworICAgICAgICAvLyBjaGVja1RleHRPZlBhcmFncmFw
aCBpcyB0aGUgb25seSBzcGVsbGluZy9ncmFtbWFyIGNoZWNrZXIgaW1wbGVtZW50ZWQgaW4gV0sx
IGFuZCBXSzIKKyAgICAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKKyAg
ICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoY2hlY2tlciwgY2hhcnMsIGNoYXJMZW5ndGgsIFRl
eHRDaGVja2luZ1R5cGVTcGVsbGluZywgcmVzdWx0cyk7CisgICAgCisgICAgICAgIHNpemVfdCBz
aXplID0gcmVzdWx0cy5zaXplKCk7CisgICAgICAgIE5TTnVtYmVyKiB0cnVlVmFsdWUgPSBbTlNO
dW1iZXIgbnVtYmVyV2l0aEJvb2w6WUVTXTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVzdWx0JiBy
ZXN1bHQgPSByZXN1bHRzW2ldOworICAgICAgICAgICAgQVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1i
ZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5TWlzc3BlbGxlZFRleHRBdHRyaWJ1dGUsIHRy
dWVWYWx1ZSwgTlNNYWtlUmFuZ2UocmVzdWx0LmxvY2F0aW9uICsgcmFuZ2UubG9jYXRpb24sIHJl
c3VsdC5sZW5ndGgpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGludCBjdXJy
ZW50UG9zaXRpb24gPSAwOworICAgICAgICB3aGlsZSAoY2hhckxlbmd0aCA+IDApIHsKKyAgICAg
ICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyRGF0YSA9IGNoYXJzICsgY3VycmVudFBvc2l0aW9uOwor
ICAgICAgICAgICAgVGV4dENoZWNrZXJDbGllbnQqIGNoZWNrZXIgPSBub2RlLT5kb2N1bWVudCgp
LT5mcmFtZSgpLT5lZGl0b3IoKS0+dGV4dENoZWNrZXIoKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKKyAgICAgICAgICAgIGludCBtaXNz
cGVsbGluZ0xlbmd0aCA9IDA7CisgICAgICAgICAgICBjaGVja2VyLT5jaGVja1NwZWxsaW5nT2ZT
dHJpbmcoY2hhckRhdGEsIGNoYXJMZW5ndGgsICZtaXNzcGVsbGluZ0xvY2F0aW9uLCAmbWlzc3Bl
bGxpbmdMZW5ndGgpOworICAgICAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPT0gLTEg
fHwgIW1pc3NwZWxsaW5nTGVuZ3RoKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAK
LSAgICAgICAgaW50IG1pc3NwZWxsaW5nTG9jYXRpb24gPSAtMTsKLSAgICAgICAgaW50IG1pc3Nw
ZWxsaW5nTGVuZ3RoID0gMDsKLSAgICAgICAgY2hlY2tlci0+Y2hlY2tTcGVsbGluZ09mU3RyaW5n
KGNoYXJEYXRhLCBjaGFyTGVuZ3RoLCAmbWlzc3BlbGxpbmdMb2NhdGlvbiwgJm1pc3NwZWxsaW5n
TGVuZ3RoKTsKLSAgICAgICAgaWYgKG1pc3NwZWxsaW5nTG9jYXRpb24gPT0gLTEgfHwgIW1pc3Nw
ZWxsaW5nTGVuZ3RoKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAotICAgICAgICBOU1Jh
bmdlIHNwZWxsUmFuZ2UgPSBOU01ha2VSYW5nZShyYW5nZS5sb2NhdGlvbiArIGN1cnJlbnRQb3Np
dGlvbiArIG1pc3NwZWxsaW5nTG9jYXRpb24sIG1pc3NwZWxsaW5nTGVuZ3RoKTsKLSAgICAgICAg
QVhBdHRyaWJ1dGVTdHJpbmdTZXROdW1iZXIoYXR0clN0cmluZywgTlNBY2Nlc3NpYmlsaXR5TWlz
c3BlbGxlZFRleHRBdHRyaWJ1dGUsIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBzcGVs
bFJhbmdlKTsKLSAgICAgICAgY2hhckxlbmd0aCAtPSAobWlzc3BlbGxpbmdMb2NhdGlvbiArIG1p
c3NwZWxsaW5nTGVuZ3RoKTsKLSAgICAgICAgY3VycmVudFBvc2l0aW9uICs9IChtaXNzcGVsbGlu
Z0xvY2F0aW9uICsgbWlzc3BlbGxpbmdMZW5ndGgpOworICAgICAgICAgICAgTlNSYW5nZSBzcGVs
bFJhbmdlID0gTlNNYWtlUmFuZ2UocmFuZ2UubG9jYXRpb24gKyBjdXJyZW50UG9zaXRpb24gKyBt
aXNzcGVsbGluZ0xvY2F0aW9uLCBtaXNzcGVsbGluZ0xlbmd0aCk7CisgICAgICAgICAgICBBWEF0
dHJpYnV0ZVN0cmluZ1NldE51bWJlcihhdHRyU3RyaW5nLCBOU0FjY2Vzc2liaWxpdHlNaXNzcGVs
bGVkVGV4dEF0dHJpYnV0ZSwgW05TTnVtYmVyIG51bWJlcldpdGhCb29sOllFU10sIHNwZWxsUmFu
Z2UpOworICAgICAgICAgICAgY2hhckxlbmd0aCAtPSAobWlzc3BlbGxpbmdMb2NhdGlvbiArIG1p
c3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgICAgIGN1cnJlbnRQb3NpdGlvbiArPSAobWlzc3Bl
bGxpbmdMb2NhdGlvbiArIG1pc3NwZWxsaW5nTGVuZ3RoKTsKKyAgICAgICAgfQogICAgIH0KLSNl
bmRpZiAgICAKIH0KIAogc3RhdGljIHZvaWQgQVhBdHRyaWJ1dGVTdHJpbmdTZXRIZWFkaW5nTGV2
ZWwoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyogYXR0clN0cmluZywgUmVuZGVyT2JqZWN0KiBy
ZW5kZXJlciwgTlNSYW5nZSByYW5nZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdGluZ0FsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ0Fs
bEluT25lLmNwcAppbmRleCBkODYzMDk3NDE4ZDQ0ZmIwYzUzNjk1M2Q3M2UyZDJmNGUxZjhhZGZm
Li5jMDI5OWIzMjBhOGNiMDk5YTAyN2NlYWQ2ZDkxZDVmZjRhMDI5ZTQ0IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdBbGxJbk9uZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0aW5nQWxsSW5PbmUuY3BwCkBAIC02MSw4ICs2MSwxMCBAQAogI2lu
Y2x1ZGUgPFJlcGxhY2VOb2RlV2l0aFNwYW5Db21tYW5kLmNwcD4KICNpbmNsdWRlIDxSZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHA+CiAjaW5jbHVkZSA8U2V0Tm9kZUF0dHJpYnV0ZUNvbW1hbmQu
Y3BwPgorI2luY2x1ZGUgPFNldFNlbGVjdGlvbkNvbW1hbmQuY3BwPgogI2luY2x1ZGUgPFNtYXJ0
UmVwbGFjZS5jcHA+CiAjaW5jbHVkZSA8U21hcnRSZXBsYWNlQ0YuY3BwPgorI2luY2x1ZGUgPFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwPgogI2luY2x1ZGUgPFNwZWxsaW5nQ29ycmVjdGlv
bkNvbnRyb2xsZXIuY3BwPgogI2luY2x1ZGUgPFNwZWxsQ2hlY2tlci5jcHA+CiAjaW5jbHVkZSA8
U3BsaXRFbGVtZW50Q29tbWFuZC5jcHA+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXgg
MzBjNzc1NWYyY2FlYjlhNWE4MWUyOGJlZDNkODJhMTg2ZjJlNjE4Mi4uZjdlZTFjNjY2YzY0OTYx
MTgyMDcxZmE4ZGYwMjJiMDJhNTBhNGQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApA
QCAtMTcyNSw0NSArMTcyNSwxMSBAQCB2b2lkIEVkaXRvcjo6YWR2YW5jZVRvTmV4dE1pc3NwZWxs
aW5nKGJvb2wgc3RhcnRCZWZvcmVTZWxlY3Rpb24pCiAgICAgU3RyaW5nIGJhZEdyYW1tYXJQaHJh
c2U7CiAgICAgU3RyaW5nIG1pc3NwZWxsZWRXb3JkOwogCi0jaWYgVVNFKFVOSUZJRURfVEVYVF9D
SEVDS0lORykKLSAgICBncmFtbWFyU2VhcmNoUmFuZ2UgPSBzcGVsbGluZ1NlYXJjaFJhbmdlLT5j
bG9uZVJhbmdlKGVjKTsKICAgICBib29sIGlzU3BlbGxpbmcgPSB0cnVlOwogICAgIGludCBmb3Vu
ZE9mZnNldCA9IDA7Ci0gICAgU3RyaW5nIGZvdW5kSXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcihj
bGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdy
YW1tYXIoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0
LCBncmFtbWFyRGV0YWlsKTsKLSAgICBpZiAoaXNTcGVsbGluZykgewotICAgICAgICBtaXNzcGVs
bGVkV29yZCA9IGZvdW5kSXRlbTsKLSAgICAgICAgbWlzc3BlbGxpbmdPZmZzZXQgPSBmb3VuZE9m
ZnNldDsKLSAgICB9IGVsc2UgewotICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gZm91bmRJdGVt
OwotICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ID0gZm91bmRPZmZzZXQ7Ci0gICAgfQotI2Vs
c2UKKyAgICBTdHJpbmcgZm91bmRJdGVtOwogICAgIFJlZlB0cjxSYW5nZT4gZmlyc3RNaXNzcGVs
bGluZ1JhbmdlOwotICAgIG1pc3NwZWxsZWRXb3JkID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVu
dCgpLCBzcGVsbGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGluZyhtaXNzcGVsbGlu
Z09mZnNldCwgZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7Ci0KLSNpZiBVU0UoR1JBTU1B
Ul9DSEVDS0lORykKLSAgICAvLyBTZWFyY2ggZm9yIGJhZCBncmFtbWFyIHRoYXQgb2NjdXJzIHBy
aW9yIHRvIHRoZSBuZXh0IG1pc3NwZWxsZWQgd29yZCAoaWYgYW55KQotICAgIGdyYW1tYXJTZWFy
Y2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOwotICAgIGlmICgh
bWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIFN0b3AgbG9va2luZyBhdCBz
dGFydCBvZiBuZXh0IG1pc3NwZWxsZWQgd29yZAotICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBj
aGFycyhncmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCkpOwotICAgICAgICBjaGFycy5hZHZhbmNlKG1p
c3NwZWxsaW5nT2Zmc2V0KTsKLSAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQoY2hh
cnMucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZWMpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9mZnNl
dChlYyksIGVjKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxl
ZCgpKQotICAgICAgICBiYWRHcmFtbWFyUGhyYXNlID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVu
dCgpLCBncmFtbWFyU2VhcmNoUmFuZ2UpLmZpbmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFp
bCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFsc2UpOwotI2VuZGlmCi0jZW5kaWYKLSAgICAKLSAg
ICAvLyBJZiB3ZSBmb3VuZCBuZWl0aGVyIGJhZCBncmFtbWFyIG5vciBhIG1pc3NwZWxsZWQgd29y
ZCwgd3JhcCBhbmQgdHJ5IGFnYWluIChidXQgZG9uJ3QgYm90aGVyIGlmIHdlIHN0YXJ0ZWQgYXQg
dGhlIGJlZ2lubmluZyBvZiB0aGUKLSAgICAvLyBibG9jayByYXRoZXIgdGhhbiBhdCBhIHNlbGVj
dGlvbikuCi0gICAgaWYgKHN0YXJ0ZWRXaXRoU2VsZWN0aW9uICYmICFtaXNzcGVsbGVkV29yZCAm
JiAhYmFkR3JhbW1hclBocmFzZSkgewotICAgICAgICBzcGVsbGluZ1NlYXJjaFJhbmdlLT5zZXRT
dGFydCh0b3BOb2RlLCAwLCBlYyk7Ci0gICAgICAgIC8vIGdvaW5nIHVudGlsIHRoZSBlbmQgb2Yg
dGhlIHZlcnkgZmlyc3QgY2h1bmsgd2UgdGVzdGVkIGlzIGZhciBlbm91Z2gKLSAgICAgICAgc3Bl
bGxpbmdTZWFyY2hSYW5nZS0+c2V0RW5kKHNlYXJjaEVuZE5vZGVBZnRlcldyYXAsIHNlYXJjaEVu
ZE9mZnNldEFmdGVyV3JhcCwgZWMpOwotICAgICAgICAKLSNpZiBVU0UoVU5JRklFRF9URVhUX0NI
RUNLSU5HKQorICAgIGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKICAgICAgICAg
Z3JhbW1hclNlYXJjaFJhbmdlID0gc3BlbGxpbmdTZWFyY2hSYW5nZS0+Y2xvbmVSYW5nZShlYyk7
CiAgICAgICAgIGZvdW5kSXRlbSA9IFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgc3BlbGxp
bmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmdPckJhZEdyYW1tYXIoaXNHcmFtbWFy
Q2hlY2tpbmdFbmFibGVkKCksIGlzU3BlbGxpbmcsIGZvdW5kT2Zmc2V0LCBncmFtbWFyRGV0YWls
KTsKICAgICAgICAgaWYgKGlzU3BlbGxpbmcpIHsKQEAgLTE3NzMsMTAgKzE3MzksMTEgQEAgdm9p
ZCBFZGl0b3I6OmFkdmFuY2VUb05leHRNaXNzcGVsbGluZyhib29sIHN0YXJ0QmVmb3JlU2VsZWN0
aW9uKQogICAgICAgICAgICAgYmFkR3JhbW1hclBocmFzZSA9IGZvdW5kSXRlbTsKICAgICAgICAg
ICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgPSBmb3VuZE9mZnNldDsKICAgICAgICAgfQotI2Vsc2UK
KyAgICB9IGVsc2UgewogICAgICAgICBtaXNzcGVsbGVkV29yZCA9IFRleHRDaGVja2luZ0hlbHBl
cihjbGllbnQoKSwgc3BlbGxpbmdTZWFyY2hSYW5nZSkuZmluZEZpcnN0TWlzc3BlbGxpbmcobWlz
c3BlbGxpbmdPZmZzZXQsIGZhbHNlLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOwogCiAjaWYgVVNF
KEdSQU1NQVJfQ0hFQ0tJTkcpCisgICAgICAgIC8vIFNlYXJjaCBmb3IgYmFkIGdyYW1tYXIgdGhh
dCBvY2N1cnMgcHJpb3IgdG8gdGhlIG5leHQgbWlzc3BlbGxlZCB3b3JkIChpZiBhbnkpCiAgICAg
ICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2Uo
ZWMpOwogICAgICAgICBpZiAoIW1pc3NwZWxsZWRXb3JkLmlzRW1wdHkoKSkgewogICAgICAgICAg
ICAgLy8gU3RvcCBsb29raW5nIGF0IHN0YXJ0IG9mIG5leHQgbWlzc3BlbGxlZCB3b3JkCkBAIC0x
Nzg0LDExICsxNzUxLDQ1IEBAIHZvaWQgRWRpdG9yOjphZHZhbmNlVG9OZXh0TWlzc3BlbGxpbmco
Ym9vbCBzdGFydEJlZm9yZVNlbGVjdGlvbikKICAgICAgICAgICAgIGNoYXJzLmFkdmFuY2UobWlz
c3BlbGxpbmdPZmZzZXQpOwogICAgICAgICAgICAgZ3JhbW1hclNlYXJjaFJhbmdlLT5zZXRFbmQo
Y2hhcnMucmFuZ2UoKS0+c3RhcnRDb250YWluZXIoZWMpLCBjaGFycy5yYW5nZSgpLT5zdGFydE9m
ZnNldChlYyksIGVjKTsKICAgICAgICAgfQotCisgICAgCiAgICAgICAgIGlmIChpc0dyYW1tYXJD
aGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UgPSBUZXh0Q2hl
Y2tpbmdIZWxwZXIoY2xpZW50KCksIGdyYW1tYXJTZWFyY2hSYW5nZSkuZmluZEZpcnN0QmFkR3Jh
bW1hcihncmFtbWFyRGV0YWlsLCBncmFtbWFyUGhyYXNlT2Zmc2V0LCBmYWxzZSk7CiAjZW5kaWYK
KyAgICB9CisgICAgCisgICAgLy8gSWYgd2UgZm91bmQgbmVpdGhlciBiYWQgZ3JhbW1hciBub3Ig
YSBtaXNzcGVsbGVkIHdvcmQsIHdyYXAgYW5kIHRyeSBhZ2FpbiAoYnV0IGRvbid0IGJvdGhlciBp
ZiB3ZSBzdGFydGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlCisgICAgLy8gYmxvY2sgcmF0aGVy
IHRoYW4gYXQgYSBzZWxlY3Rpb24pLgorICAgIGlmIChzdGFydGVkV2l0aFNlbGVjdGlvbiAmJiAh
bWlzc3BlbGxlZFdvcmQgJiYgIWJhZEdyYW1tYXJQaHJhc2UpIHsKKyAgICAgICAgc3BlbGxpbmdT
ZWFyY2hSYW5nZS0+c2V0U3RhcnQodG9wTm9kZSwgMCwgZWMpOworICAgICAgICAvLyBnb2luZyB1
bnRpbCB0aGUgZW5kIG9mIHRoZSB2ZXJ5IGZpcnN0IGNodW5rIHdlIHRlc3RlZCBpcyBmYXIgZW5v
dWdoCisgICAgICAgIHNwZWxsaW5nU2VhcmNoUmFuZ2UtPnNldEVuZChzZWFyY2hFbmROb2RlQWZ0
ZXJXcmFwLCBzZWFyY2hFbmRPZmZzZXRBZnRlcldyYXAsIGVjKTsKKyAgICAgICAgCisgICAgICAg
IGlmICh1bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkKCkpIHsKKyAgICAgICAgICAgIGdyYW1tYXJT
ZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2UtPmNsb25lUmFuZ2UoZWMpOworICAgICAg
ICAgICAgZm91bmRJdGVtID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBzcGVsbGluZ1Nl
YXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihpc0dyYW1tYXJDaGVj
a2luZ0VuYWJsZWQoKSwgaXNTcGVsbGluZywgZm91bmRPZmZzZXQsIGdyYW1tYXJEZXRhaWwpOwor
ICAgICAgICAgICAgaWYgKGlzU3BlbGxpbmcpIHsKKyAgICAgICAgICAgICAgICBtaXNzcGVsbGVk
V29yZCA9IGZvdW5kSXRlbTsKKyAgICAgICAgICAgICAgICBtaXNzcGVsbGluZ09mZnNldCA9IGZv
dW5kT2Zmc2V0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBiYWRHcmFt
bWFyUGhyYXNlID0gZm91bmRJdGVtOworICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZz
ZXQgPSBmb3VuZE9mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIG1pc3NwZWxsZWRXb3JkID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBzcGVs
bGluZ1NlYXJjaFJhbmdlKS5maW5kRmlyc3RNaXNzcGVsbGluZyhtaXNzcGVsbGluZ09mZnNldCwg
ZmFsc2UsIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSk7CisKKyNpZiBVU0UoR1JBTU1BUl9DSEVDS0lO
RykKKyAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZSA9IHNwZWxsaW5nU2VhcmNoUmFuZ2Ut
PmNsb25lUmFuZ2UoZWMpOworICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgICAgICAvLyBTdG9wIGxvb2tpbmcgYXQgc3RhcnQgb2YgbmV4dCBt
aXNzcGVsbGVkIHdvcmQKKyAgICAgICAgICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFycyhn
cmFtbWFyU2VhcmNoUmFuZ2UuZ2V0KCkpOworICAgICAgICAgICAgICAgIGNoYXJzLmFkdmFuY2Uo
bWlzc3BlbGxpbmdPZmZzZXQpOworICAgICAgICAgICAgICAgIGdyYW1tYXJTZWFyY2hSYW5nZS0+
c2V0RW5kKGNoYXJzLnJhbmdlKCktPnN0YXJ0Q29udGFpbmVyKGVjKSwgY2hhcnMucmFuZ2UoKS0+
c3RhcnRPZmZzZXQoZWMpLCBlYyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChp
c0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBiYWRHcmFtbWFyUGhy
YXNlID0gVGV4dENoZWNraW5nSGVscGVyKGNsaWVudCgpLCBncmFtbWFyU2VhcmNoUmFuZ2UpLmZp
bmRGaXJzdEJhZEdyYW1tYXIoZ3JhbW1hckRldGFpbCwgZ3JhbW1hclBocmFzZU9mZnNldCwgZmFs
c2UpOwogI2VuZGlmCisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYgKCFiYWRHcmFtbWFy
UGhyYXNlLmlzRW1wdHkoKSkgewpAQCAtMTg4OCwxMiArMTg4OSwxMyBAQCBWZWN0b3I8U3RyaW5n
PiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkU2VsZWN0aW9uKCkKIAogVmVjdG9yPFN0cmlu
Zz4gRWRpdG9yOjpndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFNlbGVjdGlvbihi
b29sJiBtaXNzcGVsbGVkLCBib29sJiB1bmdyYW1tYXRpY2FsKQogewotI2lmIFVTRShVTklGSUVE
X1RFWFRfQ0hFQ0tJTkcpCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lKCktPnNlbGVj
dGlvbigpLT50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJl
dHVybiBWZWN0b3I8U3RyaW5nPigpOwotICAgIHJldHVybiBUZXh0Q2hlY2tpbmdIZWxwZXIoY2xp
ZW50KCksIHJhbmdlKS5ndWVzc2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGlz
R3JhbW1hckNoZWNraW5nRW5hYmxlZCgpLCBtaXNzcGVsbGVkLCB1bmdyYW1tYXRpY2FsKTsKLSNl
bHNlCisgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgeworICAgICAgICBSZWZQ
dHI8UmFuZ2U+IHJhbmdlID0gZnJhbWUoKS0+c2VsZWN0aW9uKCktPnRvTm9ybWFsaXplZFJhbmdl
KCk7CisgICAgICAgIGlmICghcmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gVmVjdG9yPFN0cmlu
Zz4oKTsKKyAgICAgICAgcmV0dXJuIFRleHRDaGVja2luZ0hlbHBlcihjbGllbnQoKSwgcmFuZ2Up
Lmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tp
bmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1hdGljYWwpOworICAgIH0KKwogICAgIG1p
c3NwZWxsZWQgPSBpc1NlbGVjdGlvbk1pc3NwZWxsZWQoKTsKICAgICBpZiAobWlzc3BlbGxlZCkg
ewogICAgICAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7CkBAIC0xOTA1LDcgKzE5MDcsNiBAQCBW
ZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2Fs
U2VsZWN0aW9uKGJvb2wmIG1pc3NwZQogICAgIH0KICAgICB1bmdyYW1tYXRpY2FsID0gZmFsc2U7
CiAgICAgcmV0dXJuIFZlY3RvcjxTdHJpbmc+KCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBFZGl0b3I6
OnNob3dTcGVsbGluZ0d1ZXNzUGFuZWwoKQpAQCAtMTk0Nyw4MCArMTk0OCw3NSBAQCB2b2lkIEVk
aXRvcjo6bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlv
biAmbW92aW5nU2VsZWN0aQogCiB2b2lkIEVkaXRvcjo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlw
aW5nVG9Xb3JkKGNvbnN0IFZpc2libGVQb3NpdGlvbiAmd29yZFN0YXJ0LCBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb25BZnRlclR5cGluZywgYm9vbCBkb1JlcGxhY2VtZW50KQogewot
I2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCi0gICAgbV9zcGVsbGluZ0NvcnJlY3Rvci0+
YXBwbHlQZW5kaW5nQ29ycmVjdGlvbihzZWxlY3Rpb25BZnRlclR5cGluZyk7CisgICAgaWYgKHVu
aWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgeworICAgICAgICBtX3NwZWxsaW5nQ29ycmVjdG9y
LT5hcHBseVBlbmRpbmdDb3JyZWN0aW9uKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsKIAotICAgIFRl
eHRDaGVja2luZ1R5cGVNYXNrIHRleHRDaGVja2luZ09wdGlvbnMgPSAwOworICAgICAgICBUZXh0
Q2hlY2tpbmdUeXBlTWFzayB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gMDsKIAotICAgIGlmIChpc0Nv
bnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRp
b25zIHw9IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKKyAgICAgICAgaWYgKGlzQ29udGludW91
c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25z
IHw9IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZzsKIAogI2lmIFVTRShBVVRPTUFUSUNfVEVYVF9S
RVBMQUNFTUVOVCkKLSAgICBpZiAoZG9SZXBsYWNlbWVudCAKLSAgICAgICAgJiYgKGlzQXV0b21h
dGljUXVvdGVTdWJzdGl0dXRpb25FbmFibGVkKCkKLSAgICAgICAgICAgIHx8IGlzQXV0b21hdGlj
TGlua0RldGVjdGlvbkVuYWJsZWQoKQotICAgICAgICAgICAgfHwgaXNBdXRvbWF0aWNEYXNoU3Vi
c3RpdHV0aW9uRW5hYmxlZCgpCi0gICAgICAgICAgICB8fCBpc0F1dG9tYXRpY1RleHRSZXBsYWNl
bWVudEVuYWJsZWQoKQotICAgICAgICAgICAgfHwgKCh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgVGV4
dENoZWNraW5nVHlwZVNwZWxsaW5nKSAmJiBpc0F1dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVu
YWJsZWQoKSkpKQotICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IFRleHRDaGVja2luZ1R5
cGVSZXBsYWNlbWVudDsKKyAgICAgICAgaWYgKGRvUmVwbGFjZW1lbnQgCisgICAgICAgICAgICAm
JiAoaXNBdXRvbWF0aWNRdW90ZVN1YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICAgICAgICAg
IHx8IGlzQXV0b21hdGljTGlua0RldGVjdGlvbkVuYWJsZWQoKQorICAgICAgICAgICAgICAgIHx8
IGlzQXV0b21hdGljRGFzaFN1YnN0aXR1dGlvbkVuYWJsZWQoKQorICAgICAgICAgICAgICAgIHx8
IGlzQXV0b21hdGljVGV4dFJlcGxhY2VtZW50RW5hYmxlZCgpCisgICAgICAgICAgICAgICAgfHwg
KCh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nKSAmJiBpc0F1
dG9tYXRpY1NwZWxsaW5nQ29ycmVjdGlvbkVuYWJsZWQoKSkpKQorICAgICAgICAgICAgdGV4dENo
ZWNraW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdUeXBlUmVwbGFjZW1lbnQ7CiAjZW5kaWYKLSAg
ICBpZiAoIXRleHRDaGVja2luZ09wdGlvbnMgJiAoVGV4dENoZWNraW5nVHlwZVNwZWxsaW5nIHwg
VGV4dENoZWNraW5nVHlwZVJlcGxhY2VtZW50KSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICBp
ZiAoISh0ZXh0Q2hlY2tpbmdPcHRpb25zICYgKFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyB8IFRl
eHRDaGVja2luZ1R5cGVSZXBsYWNlbWVudCkpKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRp
b25zIHw9IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyOworICAgICAgICBpZiAoaXNHcmFtbWFyQ2hl
Y2tpbmdFbmFibGVkKCkpCisgICAgICAgICAgICB0ZXh0Q2hlY2tpbmdPcHRpb25zIHw9IFRleHRD
aGVja2luZ1R5cGVHcmFtbWFyOwogCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRz
ID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29yZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJv
dW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwgUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7Ci0g
ICAgaWYgKHRleHRDaGVja2luZ09wdGlvbnMgJiBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgewot
ICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGVkU2VudGVuY2UgPSBWaXNpYmxlU2VsZWN0
aW9uKHN0YXJ0T2ZTZW50ZW5jZSh3b3JkU3RhcnQpLCBlbmRPZlNlbnRlbmNlKHdvcmRTdGFydCkp
OwotICAgICAgICBtYXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRD
aGVja2luZ09wdGlvbnMsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwg
c2VsZWN0ZWRTZW50ZW5jZS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgVmlz
aWJsZVNlbGVjdGlvbiBhZGphY2VudFdvcmRzID0gVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mV29y
ZCh3b3JkU3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KSwgZW5kT2ZXb3JkKHdvcmRTdGFydCwg
UmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSk7CisgICAgICAgIGlmICh0ZXh0Q2hlY2tpbmdPcHRpb25z
ICYgVGV4dENoZWNraW5nVHlwZUdyYW1tYXIpIHsKKyAgICAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0ZWRTZW50ZW5jZSA9IFZpc2libGVTZWxlY3Rpb24oc3RhcnRPZlNlbnRlbmNlKHdv
cmRTdGFydCksIGVuZE9mU2VudGVuY2Uod29yZFN0YXJ0KSk7CisgICAgICAgICAgICBtYXJrQWxs
TWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMsIGFk
amFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgc2VsZWN0ZWRTZW50ZW5jZS50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBt
YXJrQWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlv
bnMsIGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgYWRqYWNlbnRXb3Jk
cy50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKICAgICB9IGVsc2UgewotICAgICAgICBtYXJr
QWxsTWlzc3BlbGxpbmdzQW5kQmFkR3JhbW1hckluUmFuZ2VzKHRleHRDaGVja2luZ09wdGlvbnMs
IGFkamFjZW50V29yZHMudG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgYWRqYWNlbnRXb3Jkcy50
b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKLSAgICB9Ci0KLSNlbHNlCi0gICAgVU5VU0VEX1BB
UkFNKHNlbGVjdGlvbkFmdGVyVHlwaW5nKTsKLSAgICBVTlVTRURfUEFSQU0oZG9SZXBsYWNlbWVu
dCk7Ci0KLSAgICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKCFpc0NvbnRpbnVvdXNTcGVsbENoZWNraW5nRW5hYmxl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gQ2hlY2sgc3BlbGxpbmcgb2Ygb25l
IHdvcmQKLSAgICBSZWZQdHI8UmFuZ2U+IG1pc3NwZWxsaW5nUmFuZ2U7Ci0gICAgbWFya01pc3Nw
ZWxsaW5ncyhWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVmdFdvcmRJ
Zk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91bmRhcnkp
KSwgbWlzc3BlbGxpbmdSYW5nZSk7CisgICAgICAgIC8vIENoZWNrIHNwZWxsaW5nIG9mIG9uZSB3
b3JkCisgICAgICAgIFJlZlB0cjxSYW5nZT4gbWlzc3BlbGxpbmdSYW5nZTsKKyAgICAgICAgbWFy
a01pc3NwZWxsaW5ncyhWaXNpYmxlU2VsZWN0aW9uKHN0YXJ0T2ZXb3JkKHdvcmRTdGFydCwgTGVm
dFdvcmRJZk9uQm91bmRhcnkpLCBlbmRPZldvcmQod29yZFN0YXJ0LCBSaWdodFdvcmRJZk9uQm91
bmRhcnkpKSwgbWlzc3BlbGxpbmdSYW5nZSk7CiAKLSAgICAvLyBBdXRvY29ycmVjdCB0aGUgbWlz
c3BlbGxlZCB3b3JkLgotICAgIGlmICghbWlzc3BlbGxpbmdSYW5nZSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICAvLyBBdXRvY29ycmVjdCB0aGUgbWlzc3BlbGxlZCB3b3JkLgorICAgICAgICBp
ZiAoIW1pc3NwZWxsaW5nUmFuZ2UpCisgICAgICAgICAgICByZXR1cm47CiAgICAgCi0gICAgLy8g
R2V0IHRoZSBtaXNzcGVsbGVkIHdvcmQuCi0gICAgY29uc3QgU3RyaW5nIG1pc3NwZWxsZWRXb3Jk
ID0gcGxhaW5UZXh0KG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCkpOwotICAgIFN0cmluZyBhdXRvY29y
cmVjdGVkU3RyaW5nID0gdGV4dENoZWNrZXIoKS0+Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9uRm9y
TWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOwotCi0gICAgLy8gSWYgYXV0b2NvcnJlY3Rl
ZCB3b3JkIGlzIG5vbiBlbXB0eSwgcmVwbGFjZSB0aGUgbWlzc3BlbGxlZCB3b3JkIGJ5IHRoaXMg
d29yZC4KLSAgICBpZiAoIWF1dG9jb3JyZWN0ZWRTdHJpbmcuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIERP
V05TVFJFQU0pOwotICAgICAgICBpZiAobmV3U2VsZWN0aW9uICE9IGZyYW1lKCktPnNlbGVjdGlv
bigpLT5zZWxlY3Rpb24oKSkgewotICAgICAgICAgICAgaWYgKCFmcmFtZSgpLT5zZWxlY3Rpb24o
KS0+c2hvdWxkQ2hhbmdlU2VsZWN0aW9uKG5ld1NlbGVjdGlvbikpCisgICAgICAgIC8vIEdldCB0
aGUgbWlzc3BlbGxlZCB3b3JkLgorICAgICAgICBjb25zdCBTdHJpbmcgbWlzc3BlbGxlZFdvcmQg
PSBwbGFpblRleHQobWlzc3BlbGxpbmdSYW5nZS5nZXQoKSk7CisgICAgICAgIFN0cmluZyBhdXRv
Y29ycmVjdGVkU3RyaW5nID0gdGV4dENoZWNrZXIoKS0+Z2V0QXV0b0NvcnJlY3RTdWdnZXN0aW9u
Rm9yTWlzc3BlbGxlZFdvcmQobWlzc3BlbGxlZFdvcmQpOworCisgICAgICAgIC8vIElmIGF1dG9j
b3JyZWN0ZWQgd29yZCBpcyBub24gZW1wdHksIHJlcGxhY2UgdGhlIG1pc3NwZWxsZWQgd29yZCBi
eSB0aGlzIHdvcmQuCisgICAgICAgIGlmICghYXV0b2NvcnJlY3RlZFN0cmluZy5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0aW9uKG1pc3NwZWxsaW5n
UmFuZ2UuZ2V0KCksIERPV05TVFJFQU0pOworICAgICAgICAgICAgaWYgKG5ld1NlbGVjdGlvbiAh
PSBmcmFtZSgpLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoIWZyYW1lKCktPnNlbGVjdGlvbigpLT5zaG91bGRDaGFuZ2VTZWxlY3Rpb24obmV3U2VsZWN0
aW9uKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGZyYW1l
KCktPnNlbGVjdGlvbigpLT5zZXRTZWxlY3Rpb24obmV3U2VsZWN0aW9uKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaWYgKCFmcmFtZSgpLT5lZGl0b3IoKS0+c2hvdWxkSW5zZXJ0VGV4
dChhdXRvY29ycmVjdGVkU3RyaW5nLCBtaXNzcGVsbGluZ1JhbmdlLmdldCgpLCBFZGl0b3JJbnNl
cnRBY3Rpb25UeXBlZCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgZnJh
bWUoKS0+c2VsZWN0aW9uKCktPnNldFNlbGVjdGlvbihuZXdTZWxlY3Rpb24pOworICAgICAgICAg
ICAgZnJhbWUoKS0+ZWRpdG9yKCktPnJlcGxhY2VTZWxlY3Rpb25XaXRoVGV4dChhdXRvY29ycmVj
dGVkU3RyaW5nLCBmYWxzZSwgZmFsc2UpOworCisgICAgICAgICAgICAvLyBSZXNldCB0aGUgY2hh
cmV0IG9uZSBjaGFyYWN0ZXIgZnVydGhlci4KKyAgICAgICAgICAgIGZyYW1lKCktPnNlbGVjdGlv
bigpLT5tb3ZlVG8oZnJhbWUoKS0+c2VsZWN0aW9uKCktPmVuZCgpKTsKKyAgICAgICAgICAgIGZy
YW1lKCktPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRpb25Nb3Zl
LCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoIWZyYW1lKCktPmVkaXRvcigpLT5zaG91bGRJbnNlcnRUZXh0KGF1dG9jb3Jy
ZWN0ZWRTdHJpbmcsIG1pc3NwZWxsaW5nUmFuZ2UuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblR5
cGVkKSkKKyAgICAgICAgaWYgKCFpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgZnJhbWUoKS0+ZWRpdG9yKCktPnJlcGxhY2VTZWxlY3Rpb25X
aXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBmYWxzZSwgZmFsc2UpOwotCi0gICAgICAgIC8v
IFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3RlciBmdXJ0aGVyLgotICAgICAgICBmcmFtZSgp
LT5zZWxlY3Rpb24oKS0+bW92ZVRvKGZyYW1lKCktPnNlbGVjdGlvbigpLT5lbmQoKSk7Ci0gICAg
ICAgIGZyYW1lKCktPnNlbGVjdGlvbigpLT5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFsdGVyYXRp
b25Nb3ZlLCBEaXJlY3Rpb25Gb3J3YXJkLCBDaGFyYWN0ZXJHcmFudWxhcml0eSk7Ci0gICAgfQot
Ci0gICAgaWYgKCFpc0dyYW1tYXJDaGVja2luZ0VuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIC8vIENoZWNrIGdyYW1tYXIgb2YgZW50aXJlIHNlbnRlbmNlCi0gICAgbWFya0Jh
ZEdyYW1tYXIoVmlzaWJsZVNlbGVjdGlvbihzdGFydE9mU2VudGVuY2Uod29yZFN0YXJ0KSwgZW5k
T2ZTZW50ZW5jZSh3b3JkU3RhcnQpKSk7Ci0jZW5kaWYKKyAgICAgICAgLy8gQ2hlY2sgZ3JhbW1h
ciBvZiBlbnRpcmUgc2VudGVuY2UKKyAgICAgICAgbWFya0JhZEdyYW1tYXIoVmlzaWJsZVNlbGVj
dGlvbihzdGFydE9mU2VudGVuY2Uod29yZFN0YXJ0KSwgZW5kT2ZTZW50ZW5jZSh3b3JkU3RhcnQp
KSk7CisgICAgfQogfQogICAgIAogdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGluZ3NPckJhZEdy
YW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uLCBib29sIGNoZWNrU3BlbGxp
bmcsIFJlZlB0cjxSYW5nZT4mIGZpcnN0TWlzc3BlbGxpbmdSYW5nZSkKQEAgLTIwODgsNyArMjA4
NCwxMSBAQCB2b2lkIEVkaXRvcjo6bWFya0JhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgc2VsZWN0aW9uKQogCiB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdy
YW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0Q2hlY2tpbmdPcHRpb25zLCBS
YW5nZSogc3BlbGxpbmdSYW5nZSwgUmFuZ2UqIGdyYW1tYXJSYW5nZSkKIHsKLSNpZiBVU0UoVU5J
RklFRF9URVhUX0NIRUNLSU5HKQorICAgIGlmICghdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgp
KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAg
fQorCiAgICAgLy8gVGhlcmUgc2hvdWxkbid0IGJlIHBlbmRpbmcgYXV0b2NvcnJlY3Rpb24gYXQg
dGhpcyBtb21lbnQuCiAgICAgQVNTRVJUKCFtX3NwZWxsaW5nQ29ycmVjdG9yLT5oYXNQZW5kaW5n
Q29ycmVjdGlvbigpKTsKIApAQCAtMjE0MiwxMiArMjE0MiwxMSBAQCB2b2lkIEVkaXRvcjo6bWFy
a0FsbE1pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdUeXBlTWFz
ayB0ZXh0QwogCiAgICAgVmVjdG9yPFRleHRDaGVja2luZ1Jlc3VsdD4gcmVzdWx0czsKICAgICBp
ZiAoc2hvdWxkTWFya0dyYW1tYXIpCi0gICAgICAgIHRleHRDaGVja2VyKCktPmNoZWNrVGV4dE9m
UGFyYWdyYXBoKGdyYW1tYXJQYXJhZ3JhcGgudGV4dENoYXJhY3RlcnMoKSwgZ3JhbW1hclBhcmFn
cmFwaC50ZXh0TGVuZ3RoKCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyks
IHJlc3VsdHMpOworICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCh0ZXh0Q2hlY2tlcigpLCBn
cmFtbWFyUGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIGdyYW1tYXJQYXJhZ3JhcGgudGV4dExl
bmd0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlVGV4dENoZWNraW5n
VHlwZU1hc2sodGV4dENoZWNraW5nT3B0aW9ucyksIHJlc3VsdHMpOwogICAgIGVsc2UKLSAgICAg
ICAgdGV4dENoZWNrZXIoKS0+Y2hlY2tUZXh0T2ZQYXJhZ3JhcGgoc3BlbGxpbmdQYXJhZ3JhcGgu
dGV4dENoYXJhY3RlcnMoKSwgc3BlbGxpbmdQYXJhZ3JhcGgudGV4dExlbmd0aCgpLCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVRleHRDaGVja2lu
Z1R5cGVNYXNrKHRleHRDaGVja2luZ09wdGlvbnMpLCByZXN1bHRzKTsKLSAgICAgICAgCisgICAg
ICAgIGNoZWNrVGV4dE9mUGFyYWdyYXBoKHRleHRDaGVja2VyKCksIHNwZWxsaW5nUGFyYWdyYXBo
LnRleHRDaGFyYWN0ZXJzKCksIHNwZWxsaW5nUGFyYWdyYXBoLnRleHRMZW5ndGgoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKHRleHRD
aGVja2luZ09wdGlvbnMpLCByZXN1bHRzKTsKIAogICAgIC8vIElmIHRoaXMgY2hlY2tpbmcgaXMg
b25seSBmb3Igc2hvd2luZyBjb3JyZWN0aW9uIHBhbmVsLCB3ZSBzaG91bGRuJ3QgYm90aGVyIHRv
IG1hcmsgbWlzc3BlbGxpbmdzLgogICAgIGlmIChzaG91bGRTaG93Q29ycmVjdGlvblBhbmVsKQpA
QCAtMjI3OSwxNyArMjI3OCwxNSBAQCB2b2lkIEVkaXRvcjo6bWFya0FsbE1pc3NwZWxsaW5nc0Fu
ZEJhZEdyYW1tYXJJblJhbmdlcyhUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0QwogICAgICAgICAg
ICAgbV9mcmFtZS0+c2VsZWN0aW9uKCktPm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlv
bk1vdmUsIERpcmVjdGlvbkZvcndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAg
fQogICAgIH0KLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgVU5VU0VEX1BB
UkFNKHRleHRDaGVja2luZ09wdGlvbnMpOwotICAgIFVOVVNFRF9QQVJBTShzcGVsbGluZ1Jhbmdl
KTsKLSAgICBVTlVTRURfUEFSQU0oZ3JhbW1hclJhbmdlKTsKLSNlbmRpZiAvLyBVU0UoVU5JRklF
RF9URVhUX0NIRUNLSU5HKQogfQogCiB2b2lkIEVkaXRvcjo6Y2hhbmdlQmFja1RvUmVwbGFjZWRT
dHJpbmcoY29uc3QgU3RyaW5nJiByZXBsYWNlZFN0cmluZykKIHsKLSNpZiBVU0UoVU5JRklFRF9U
RVhUX0NIRUNLSU5HKQorICAgIGlmICghdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCgpKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAg
ICAgaWYgKHJlcGxhY2VkU3RyaW5nLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0y
MzAzLDI4ICsyMzAwLDI0IEBAIHZvaWQgRWRpdG9yOjpjaGFuZ2VCYWNrVG9SZXBsYWNlZFN0cmlu
Zyhjb25zdCBTdHJpbmcmIHJlcGxhY2VkU3RyaW5nKQogICAgIFJlZlB0cjxSYW5nZT4gY2hhbmdl
ZFJhbmdlID0gcGFyYWdyYXBoLnN1YnJhbmdlKHBhcmFncmFwaC5jaGVja2luZ1N0YXJ0KCksIHJl
cGxhY2VkU3RyaW5nLmxlbmd0aCgpKTsKICAgICBjaGFuZ2VkUmFuZ2UtPnN0YXJ0Q29udGFpbmVy
KCktPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+YWRkTWFya2VyKGNoYW5nZWRSYW5nZS5nZXQoKSwg
RG9jdW1lbnRNYXJrZXI6OlJlcGxhY2VtZW50LCBTdHJpbmcoKSk7CiAgICAgbV9zcGVsbGluZ0Nv
cnJlY3Rvci0+bWFya1JldmVyc2VkKGNoYW5nZWRSYW5nZS5nZXQoKSk7Ci0jZWxzZQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIFVOVVNFRF9QQVJBTShyZXBsYWNlZFN0cmluZyk7Ci0j
ZW5kaWYgLy8gVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKIH0KIAogCiB2b2lkIEVkaXRvcjo6
bWFya01pc3NwZWxsaW5nc0FuZEJhZEdyYW1tYXIoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3Bl
bGxpbmdTZWxlY3Rpb24sIGJvb2wgbWFya0dyYW1tYXIsIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IGdyYW1tYXJTZWxlY3Rpb24pCiB7Ci0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKLSAg
ICBpZiAoIWlzQ29udGludW91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBUZXh0Q2hlY2tpbmdUeXBlTWFzayB0ZXh0Q2hlY2tpbmdPcHRpb25zID0gVGV4dENo
ZWNraW5nVHlwZVNwZWxsaW5nIHwgVGV4dENoZWNraW5nVHlwZUNvcnJlY3Rpb247Ci0gICAgaWYg
KG1hcmtHcmFtbWFyICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQotICAgICAgICB0ZXh0
Q2hlY2tpbmdPcHRpb25zIHw9IFRleHRDaGVja2luZ1R5cGVHcmFtbWFyOwotICAgIG1hcmtBbGxN
aXNzcGVsbGluZ3NBbmRCYWRHcmFtbWFySW5SYW5nZXModGV4dENoZWNraW5nT3B0aW9ucywgc3Bl
bGxpbmdTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKSwgZ3JhbW1hclNlbGVjdGlv
bi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpKTsKLSNlbHNlCi0gICAgUmVmUHRyPFJhbmdlPiBm
aXJzdE1pc3NwZWxsaW5nUmFuZ2U7Ci0gICAgbWFya01pc3NwZWxsaW5ncyhzcGVsbGluZ1NlbGVj
dGlvbiwgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKTsKLSAgICBpZiAobWFya0dyYW1tYXIpCi0gICAg
ICAgIG1hcmtCYWRHcmFtbWFyKGdyYW1tYXJTZWxlY3Rpb24pOwotI2VuZGlmCisgICAgaWYgKHVu
aWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgeworICAgICAgICBpZiAoIWlzQ29udGludW91c1Nw
ZWxsQ2hlY2tpbmdFbmFibGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFRleHRD
aGVja2luZ1R5cGVNYXNrIHRleHRDaGVja2luZ09wdGlvbnMgPSBUZXh0Q2hlY2tpbmdUeXBlU3Bl
bGxpbmcgfCBUZXh0Q2hlY2tpbmdUeXBlQ29ycmVjdGlvbjsKKyAgICAgICAgaWYgKG1hcmtHcmFt
bWFyICYmIGlzR3JhbW1hckNoZWNraW5nRW5hYmxlZCgpKQorICAgICAgICAgICAgdGV4dENoZWNr
aW5nT3B0aW9ucyB8PSBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcjsKKyAgICAgICAgbWFya0FsbE1p
c3NwZWxsaW5nc0FuZEJhZEdyYW1tYXJJblJhbmdlcyh0ZXh0Q2hlY2tpbmdPcHRpb25zLCBzcGVs
bGluZ1NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBncmFtbWFyU2VsZWN0aW9u
LnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIFJlZlB0
cjxSYW5nZT4gZmlyc3RNaXNzcGVsbGluZ1JhbmdlOworICAgICAgICBtYXJrTWlzc3BlbGxpbmdz
KHNwZWxsaW5nU2VsZWN0aW9uLCBmaXJzdE1pc3NwZWxsaW5nUmFuZ2UpOworICAgICAgICBpZiAo
bWFya0dyYW1tYXIpCisgICAgICAgICAgICBtYXJrQmFkR3JhbW1hcihncmFtbWFyU2VsZWN0aW9u
KTsKKyAgICB9CiB9CiAKIHZvaWQgRWRpdG9yOjp1bmFwcGxpZWRTcGVsbENvcnJlY3Rpb24oY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uT2ZDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYg
Y29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCkBAIC0zMjM2LDQgKzMyMjksMTIg
QEAgdm9pZCBFZGl0b3I6OmRldmljZVNjYWxlRmFjdG9yQ2hhbmdlZCgpCiAgICAgbV9kZWxldGVC
dXR0b25Db250cm9sbGVyLT5kZXZpY2VTY2FsZUZhY3RvckNoYW5nZWQoKTsKIH0KIAorYm9vbCBF
ZGl0b3I6OnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdAoreworICAgIGlmIChTZXR0
aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpKQorICAgICAgICByZXR1cm4gc2V0
dGluZ3MtPnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXgg
YmRiOThhZjljZGZiZmE1ODYwZjE2ZjM1Y2Q5N2EyOTYzZWMxZmI5ZC4uOWUxYzI1Y2M0MjVhNTYw
NTMzODczYjkwZWU0NGVlNDMwOTE3ZmZiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC00
MjIsNiArNDIyLDggQEAgcHJpdmF0ZToKICAgICB2b2lkIGNoYW5nZVNlbGVjdGlvbkFmdGVyQ29t
bWFuZChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBuZXdTZWxlY3Rpb24sIGJvb2wgY2xvc2VUeXBp
bmcsIGJvb2wgY2xlYXJUeXBpbmdTdHlsZSk7CiAKICAgICBOb2RlKiBmaW5kRXZlbnRUYXJnZXRG
cm9tU2VsZWN0aW9uKCkgY29uc3Q7CisKKyAgICBib29sIHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQoKSBjb25zdDsKIH07CiAKIGlubGluZSB2b2lkIEVkaXRvcjo6c2V0U3RhcnROZXdLaWxsUmlu
Z1NlcXVlbmNlKGJvb2wgZmxhZykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VGV4dENoZWNraW5nSGVscGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNr
aW5nSGVscGVyLmNwcAppbmRleCAwYmRmYmQ4MjY5NzExNjBmNzI5ZmY5ZWI4YmEzNjMxNzRhOThk
MzhkLi42MTExZDk5NmZhNDRlOWQyZmQxNjZjMTg1NTVkN2RhZTA3ZjExNTEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCkBAIC0yOSw3ICsyOSw5
IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TWFya2VyQ29u
dHJvbGxlci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKKyNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHRDaGVja2VyQ2xpZW50LmgiCiAjaW5jbHVk
ZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCkBAIC0xNTUs
OSArMTU3LDE3IEBAIGludCBUZXh0Q2hlY2tpbmdQYXJhZ3JhcGg6OmNoZWNraW5nTGVuZ3RoKCkg
Y29uc3QKIFRleHRDaGVja2luZ0hlbHBlcjo6VGV4dENoZWNraW5nSGVscGVyKEVkaXRvckNsaWVu
dCogY2xpZW50LCBQYXNzUmVmUHRyPFJhbmdlPiByYW5nZSkKICAgICA6IG1fY2xpZW50KGNsaWVu
dCkKICAgICAsIG1fcmFuZ2UocmFuZ2UpCisgICAgLCBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQoZmFsc2UpCiB7CiAgICAgQVNTRVJUX0FSRyhtX2NsaWVudCwgbV9jbGllbnQpOwogICAgIEFT
U0VSVF9BUkcobV9yYW5nZSwgbV9yYW5nZSk7CisKKyAgICBpZiAobV9yYW5nZSkgeworICAgICAg
ICBpZiAoRnJhbWUqIGZyYW1lID0gbV9yYW5nZS0+b3duZXJEb2N1bWVudCgpLT5mcmFtZSgpKSB7
CisgICAgICAgICAgICBpZiAoU2V0dGluZ3MqIHNldHRpbmdzID0gZnJhbWUtPnNldHRpbmdzKCkp
CisgICAgICAgICAgICAgICAgbV91bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkID0gc2V0dGluZ3Mt
PnVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogVGV4
dENoZWNraW5nSGVscGVyOjp+VGV4dENoZWNraW5nSGVscGVyKCkKQEAgLTIyNSwxMiArMjM1LDE2
IEBAIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nKGludCYg
Zmlyc3RNaXNzcGVsbGluZ09mZnNldCwgYm9vCiAKIFN0cmluZyBUZXh0Q2hlY2tpbmdIZWxwZXI6
OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tHcmFtbWFyLCBib29s
JiBvdXRJc1NwZWxsaW5nLCBpbnQmIG91dEZpcnN0Rm91bmRPZmZzZXQsIEdyYW1tYXJEZXRhaWwm
IG91dEdyYW1tYXJEZXRhaWwpCiB7Ci0jaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKKyAg
ICBpZiAoIW1fdW5pZmllZFRleHRDaGVja2VyRW5hYmxlZCkgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIH0KKwogICAgIFN0cmluZyBmaXJz
dEZvdW5kSXRlbTsKICAgICBTdHJpbmcgbWlzc3BlbGxlZFdvcmQ7CiAgICAgU3RyaW5nIGJhZEdy
YW1tYXJQaHJhc2U7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgCisKICAgICAvLyBJ
bml0aWFsaXplIG91dCBwYXJhbWV0ZXJzOyB0aGVzZSB3aWxsIGJlIHVwZGF0ZWQgaWYgd2UgZmlu
ZCBzb21ldGhpbmcgdG8gcmV0dXJuLgogICAgIG91dElzU3BlbGxpbmcgPSB0cnVlOwogICAgIG91
dEZpcnN0Rm91bmRPZmZzZXQgPSAwOwpAQCAtMjM4LDcgKzI1Miw3IEBAIFN0cmluZyBUZXh0Q2hl
Y2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsaW5nT3JCYWRHcmFtbWFyKGJvb2wgY2hlY2tH
cmFtbWFyLCBiCiAgICAgb3V0R3JhbW1hckRldGFpbC5sZW5ndGggPSAwOwogICAgIG91dEdyYW1t
YXJEZXRhaWwuZ3Vlc3Nlcy5jbGVhcigpOwogICAgIG91dEdyYW1tYXJEZXRhaWwudXNlckRlc2Ny
aXB0aW9uID0gIiI7Ci0gICAgCisKICAgICAvLyBFeHBhbmQgdGhlIHNlYXJjaCByYW5nZSB0byBl
bmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tpbmcgbmVlZHMgdGhh
dCBtdWNoIGNvbnRleHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZy
b20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9mIHRoZSBvcmlnaW5h
bCBzZWFyY2ggcmFuZ2UsCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRvIGlnbm9yZSByZXN1
bHRzIGluIHRoaXMgYXJlYS4KQEAgLTI3Niw4ICsyOTAsOCBAQCBTdHJpbmcgVGV4dENoZWNraW5n
SGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3JhbW1hcihib29sIGNoZWNrR3JhbW1h
ciwgYgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIFZlY3RvcjxUZXh0Q2hlY2tp
bmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgICAgICAgICAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sg
Y2hlY2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcg
fCBUZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0g
ICAgICAgICAgICAgICAgbV9jbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNrVGV4dE9mUGFyYWdy
YXBoKHBhcmFncmFwaFN0cmluZy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0cmluZy5sZW5ndGgo
KSwgY2hlY2tpbmdUeXBlcywgcmVzdWx0cyk7Ci0gICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgobV9jbGllbnQtPnRleHRDaGVja2VyKCksIHBhcmFn
cmFwaFN0cmluZy5jaGFyYWN0ZXJzKCksIHBhcmFncmFwaFN0cmluZy5sZW5ndGgoKSwgY2hlY2tp
bmdUeXBlcywgcmVzdWx0cyk7CisKICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcmVzdWx0cy5zaXplKCk7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBU
ZXh0Q2hlY2tpbmdSZXN1bHQqIHJlc3VsdCA9ICZyZXN1bHRzW2ldOwogICAgICAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0LT50eXBlID09IFRleHRDaGVja2luZ1R5cGVTcGVsbGluZyAmJiByZXN1
bHQtPmxvY2F0aW9uID49IGN1cnJlbnRTdGFydE9mZnNldCAmJiByZXN1bHQtPmxvY2F0aW9uICsg
cmVzdWx0LT5sZW5ndGggPD0gY3VycmVudEVuZE9mZnNldCkgewpAQCAtMzQ0LDE0ICszNTgsNiBA
QCBTdHJpbmcgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGluZ09yQmFkR3Jh
bW1hcihib29sIGNoZWNrR3JhbW1hciwgYgogICAgICAgICB0b3RhbExlbmd0aFByb2Nlc3NlZCAr
PSBjdXJyZW50TGVuZ3RoOwogICAgIH0KICAgICByZXR1cm4gZmlyc3RGb3VuZEl0ZW07Ci0jZWxz
ZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIFVOVVNFRF9QQVJBTShjaGVja0dyYW1t
YXIpOwotICAgIFVOVVNFRF9QQVJBTShvdXRJc1NwZWxsaW5nKTsKLSAgICBVTlVTRURfUEFSQU0o
b3V0Rmlyc3RGb3VuZE9mZnNldCk7Ci0gICAgVU5VU0VEX1BBUkFNKG91dEdyYW1tYXJEZXRhaWwp
OwotICAgIHJldHVybiAiIjsKLSNlbmRpZiAvLyBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQog
fQogCiBpbnQgVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RHcmFtbWFyRGV0YWlsKGNvbnN0
IFZlY3RvcjxHcmFtbWFyRGV0YWlsPiYgZ3JhbW1hckRldGFpbHMsIGludCBiYWRHcmFtbWFyUGhy
YXNlTG9jYXRpb24sIGludCAvKmJhZEdyYW1tYXJQaHJhc2VMZW5ndGgqLywgaW50IHN0YXJ0T2Zm
c2V0LCBpbnQgZW5kT2Zmc2V0LCBib29sIG1hcmtBbGwpCkBAIC01MTAsMTIgKzUxNiwxNiBAQCBi
b29sIFRleHRDaGVja2luZ0hlbHBlcjo6aXNVbmdyYW1tYXRpY2FsKFZlY3RvcjxTdHJpbmc+JiBn
dWVzc2VzVmVjdG9yKSBjb25zdAogCiBWZWN0b3I8U3RyaW5nPiBUZXh0Q2hlY2tpbmdIZWxwZXI6
Omd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRpY2FsUmFuZ2UoYm9vbCBjaGVja0dyYW1t
YXIsIGJvb2wmIG1pc3NwZWxsZWQsIGJvb2wmIHVuZ3JhbW1hdGljYWwpIGNvbnN0CiB7Ci0jaWYg
VVNFKFVOSUZJRURfVEVYVF9DSEVDS0lORykKKyAgICBpZiAoIW1fdW5pZmllZFRleHRDaGVja2Vy
RW5hYmxlZCkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IFZlY3RvcjxTdHJpbmc+KCk7CisgICAgfQorCiAgICAgVmVjdG9yPFN0cmluZz4gZ3Vlc3NlczsK
ICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgIG1pc3NwZWxsZWQgPSBmYWxzZTsKICAgICB1bmdy
YW1tYXRpY2FsID0gZmFsc2U7Ci0gICAgCisKICAgICBpZiAoIW1fY2xpZW50IHx8ICFtX3Jhbmdl
IHx8IG1fcmFuZ2UtPmNvbGxhcHNlZChlYykpCiAgICAgICAgIHJldHVybiBndWVzc2VzOwogCkBA
IC01MjYsOCArNTM2LDggQEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVz
c2VzRm9yTWlzc3BlbGxlZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKIAogICAgIFZlY3RvcjxU
ZXh0Q2hlY2tpbmdSZXN1bHQ+IHJlc3VsdHM7CiAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hl
Y2tpbmdUeXBlcyA9IGNoZWNrR3JhbW1hciA/IChUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgfCBU
ZXh0Q2hlY2tpbmdUeXBlR3JhbW1hcikgOiBUZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmc7Ci0gICAg
bV9jbGllbnQtPnRleHRDaGVja2VyKCktPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHBhcmFncmFwaC50
ZXh0Q2hhcmFjdGVycygpLCBwYXJhZ3JhcGgudGV4dExlbmd0aCgpLCBjaGVja2luZ1R5cGVzLCBy
ZXN1bHRzKTsKLSAgICAKKyAgICBjaGVja1RleHRPZlBhcmFncmFwaChtX2NsaWVudC0+dGV4dENo
ZWNrZXIoKSwgcGFyYWdyYXBoLnRleHRDaGFyYWN0ZXJzKCksIHBhcmFncmFwaC50ZXh0TGVuZ3Ro
KCksIGNoZWNraW5nVHlwZXMsIHJlc3VsdHMpOworCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHJlc3VsdHMuc2l6ZSgpOyBpKyspIHsKICAgICAgICAgY29uc3QgVGV4dENoZWNraW5nUmVz
dWx0KiByZXN1bHQgPSAmcmVzdWx0c1tpXTsKICAgICAgICAgaWYgKHJlc3VsdC0+dHlwZSA9PSBU
ZXh0Q2hlY2tpbmdUeXBlU3BlbGxpbmcgJiYgcGFyYWdyYXBoLmNoZWNraW5nUmFuZ2VNYXRjaGVz
KHJlc3VsdC0+bG9jYXRpb24sIHJlc3VsdC0+bGVuZ3RoKSkgewpAQCAtNTM5LDEwICs1NDksMTAg
QEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxl
ZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICAgICAgICAgIHJldHVybiBndWVzc2VzOwog
ICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgaWYgKCFjaGVja0dyYW1tYXIpCiAgICAgICAg
IHJldHVybiBndWVzc2VzOwotICAgICAgICAKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCByZXN1bHRzLnNpemUoKTsgaSsrKSB7CiAgICAgICAgIGNvbnN0IFRleHRDaGVja2luZ1Jlc3Vs
dCogcmVzdWx0ID0gJnJlc3VsdHNbaV07CiAgICAgICAgIGlmIChyZXN1bHQtPnR5cGUgPT0gVGV4
dENoZWNraW5nVHlwZUdyYW1tYXIgJiYgcGFyYWdyYXBoLmlzQ2hlY2tpbmdSYW5nZUNvdmVyZWRC
eShyZXN1bHQtPmxvY2F0aW9uLCByZXN1bHQtPmxlbmd0aCkpIHsKQEAgLTU2MiwxMyArNTcyLDYg
QEAgVmVjdG9yPFN0cmluZz4gVGV4dENoZWNraW5nSGVscGVyOjpndWVzc2VzRm9yTWlzc3BlbGxl
ZE9yVW5ncmFtbWF0aWNhbFJhbmdlKGJvb2wKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4g
Z3Vlc3NlczsKLSNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgVU5VU0VEX1BB
UkFNKGNoZWNrR3JhbW1hcik7Ci0gICAgVU5VU0VEX1BBUkFNKG1pc3NwZWxsZWQpOwotICAgIFVO
VVNFRF9QQVJBTSh1bmdyYW1tYXRpY2FsKTsKLSAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsK
LSNlbmRpZiAvLyBVU0UoVU5JRklFRF9URVhUX0NIRUNLSU5HKQogfQogCiAKQEAgLTU5MCw0ICs1
OTMsMjEgQEAgdm9pZCBUZXh0Q2hlY2tpbmdIZWxwZXI6Om1hcmtBbGxCYWRHcmFtbWFyKCkKICAg
ICBmaW5kRmlyc3RCYWRHcmFtbWFyKGlnbm9yZWRHcmFtbWFyRGV0YWlsLCBpZ25vcmVkT2Zmc2V0
LCB0cnVlKTsKIH0KIAordm9pZCBjaGVja1RleHRPZlBhcmFncmFwaChUZXh0Q2hlY2tlckNsaWVu
dCogY2xpZW50LCBjb25zdCBVQ2hhciogdGV4dCwgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgVGV4dENoZWNraW5nVHlwZU1hc2sgY2hlY2tpbmdUeXBlcywgVmVjdG9yPFRl
eHRDaGVja2luZ1Jlc3VsdD4mIHJlc3VsdHMpCit7CisjaWYgVVNFKFVOSUZJRURfVEVYVF9DSEVD
S0lORykKKyAgICBjbGllbnQtPmNoZWNrVGV4dE9mUGFyYWdyYXBoKHRleHQsIGxlbmd0aCwgY2hl
Y2tpbmdUeXBlcywgcmVzdWx0cyk7CisjZWxzZQorICAgIC8vIFNob3VsZCBpbXBsZW1lbnQgbGF0
ZXIgdG8gdW5pZnkgdW5pZmllZCBzcGVsbC1jaGVja2luZyBjb2RlIHBhdGggYW5kCisgICAgLy8g
bGVnYWN5IHNwZWxsLWNoZWNraW5nIGNvZGUgcGF0aC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICBVTlVTRURfUEFSQU0oY2xpZW50KTsKKyAgICBVTlVTRURfUEFSQU0odGV4dCk7Cisg
ICAgVU5VU0VEX1BBUkFNKGxlbmd0aCk7CisgICAgVU5VU0VEX1BBUkFNKGNoZWNraW5nVHlwZXMp
OworICAgIFVOVVNFRF9QQVJBTShyZXN1bHRzKTsKKyNlbmRpZgorfQorCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuaAppbmRleCA4YjVjNjkxMDUyOGY0MDUx
YTNhZDg1NmM2YjZjYWExOTRmNzkyZmUyLi5iMmE5YTYwNzkyZjhkYzhlMDk5NGVkZWUwMzMwMzZh
OTAyNDJjNjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVja2lu
Z0hlbHBlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVy
LmgKQEAgLTI3LDYgKzI3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBSYW5nZTsK
IGNsYXNzIFBvc2l0aW9uOworY2xhc3MgU2V0dGluZ3M7CiAKIGNsYXNzIFRleHRDaGVja2luZ1Bh
cmFncmFwaCB7CiBwdWJsaWM6CkBAIC05MCw4ICs5MSwxMyBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIEVkaXRvckNsaWVudCogbV9jbGllbnQ7CiAgICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOwor
ICAgIGJvb2wgbV91bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkOworCiB9OwogCit2b2lkIGNoZWNr
VGV4dE9mUGFyYWdyYXBoKFRleHRDaGVja2VyQ2xpZW50KiwgY29uc3QgVUNoYXIqIHRleHQsIGlu
dCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRDaGVja2luZ1R5cGVNYXNr
IGNoZWNraW5nVHlwZXMsIFZlY3RvcjxUZXh0Q2hlY2tpbmdSZXN1bHQ+JiByZXN1bHRzKTsKKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVGV4dENoZWNraW5nSGVscGVyX2gK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3MuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKaW5kZXggZDdlMDBkMWM3ZGE2MjdkMWE3ZmE1YjRhYmUy
NmVhMGJiOTAwOWIwNC4uN2EyNDFlNTZlNTZjMzRlOGU4MjhmMzEwOTdkNDNiZjMxNGQzYmE1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5jcHAKQEAgLTE5OSw2ICsxOTksMTEgQEAgU2V0dGluZ3M6
OlNldHRpbmdzKFBhZ2UqIHBhZ2UpCiAgICAgLCBtX2Z1bGxTY3JlZW5BUElFbmFibGVkKGZhbHNl
KQogI2VuZGlmCiAgICAgLCBtX2FzeW5jaHJvbm91c1NwZWxsQ2hlY2tpbmdFbmFibGVkKGZhbHNl
KQorI2lmIFVTRShVTklGSUVEX1RFWFRfQ0hFQ0tJTkcpCisgICAgLCBtX3VuaWZpZWRUZXh0Q2hl
Y2tlckVuYWJsZWQodHJ1ZSkKKyNlbHNlCisgICAgLCBtX3VuaWZpZWRUZXh0Q2hlY2tlckVuYWJs
ZWQoZmFsc2UpCisjZW5kaWYKICAgICAsIG1fbWVtb3J5SW5mb0VuYWJsZWQoZmFsc2UpCiAgICAg
LCBtX2ludGVyYWN0aXZlRm9ybVZhbGlkYXRpb24oZmFsc2UpCiAgICAgLCBtX3VzZVByZUhUTUw1
UGFyc2VyUXVpcmtzKGZhbHNlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0
aW5ncy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9TZXR0aW5ncy5oCmluZGV4IGRiNzM2NDhkNGEx
MGI5YjJkY2Y1NTQ0MmI5MjdhMTlmOGIwZmIxYzAuLmZkZmU5ZDNjMTFiNDcyNzEwOGYwZmQ2ZjU0
M2VmMGRkODRjNjhiYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvU2V0dGluZ3Mu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1NldHRpbmdzLmgKQEAgLTM4Niw2ICszODYsOSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0QXN5bmNocm9ub3VzU3BlbGxD
aGVja2luZ0VuYWJsZWQoYm9vbCBmbGFnKSB7IG1fYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQgPSBmbGFnOyB9CiAgICAgICAgIGJvb2wgYXN5bmNocm9ub3VzU3BlbGxDaGVja2luZ0Vu
YWJsZWQoKSBjb25zdCAgeyByZXR1cm4gbV9hc3luY2hyb25vdXNTcGVsbENoZWNraW5nRW5hYmxl
ZDsgfQogCisgICAgICAgIHZvaWQgc2V0VW5pZmllZFRleHRDaGVja2VyRW5hYmxlZChib29sIGZs
YWcpIHsgbV91bmlmaWVkVGV4dENoZWNrZXJFbmFibGVkID0gZmxhZzsgfQorICAgICAgICBib29s
IHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX3VuaWZpZWRUZXh0
Q2hlY2tlckVuYWJsZWQ7IH0KKwogICAgICAgICB2b2lkIHNldE1lbW9yeUluZm9FbmFibGVkKGJv
b2wgZmxhZykgeyBtX21lbW9yeUluZm9FbmFibGVkID0gZmxhZzsgfQogICAgICAgICBib29sIG1l
bW9yeUluZm9FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9tZW1vcnlJbmZvRW5hYmxlZDsgfQog
CkBAIC01ODAsNiArNTgzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIG1f
ZnVsbFNjcmVlbkFQSUVuYWJsZWQgOiAxOwogI2VuZGlmCiAgICAgICAgIGJvb2wgbV9hc3luY2hy
b25vdXNTcGVsbENoZWNraW5nRW5hYmxlZDogMTsKKyAgICAgICAgYm9vbCBtX3VuaWZpZWRUZXh0
Q2hlY2tlckVuYWJsZWQ6IDE7CiAgICAgICAgIGJvb2wgbV9tZW1vcnlJbmZvRW5hYmxlZDogMTsK
ICAgICAgICAgYm9vbCBtX2ludGVyYWN0aXZlRm9ybVZhbGlkYXRpb246IDE7CiAgICAgICAgIGJv
b2wgbV91c2VQcmVIVE1MNVBhcnNlclF1aXJrczogMTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>