<?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>104815</bug_id>
          
          <creation_ts>2012-12-12 08:26:00 -0800</creation_ts>
          <short_desc>[Texmap] Instead of having multiple shaders sources with lots of duplication, we should have one shader source with MACRO variants</short_desc>
          <delta_ts>2012-12-28 00:31:33 -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>New Bugs</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>105439</dependson>
    
    <dependson>105820</dependson>
          <blocked>105377</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>dongseong.hwang</cc>
    
    <cc>d-r</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>kenneth</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ossy</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>789582</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-12 08:26:00 -0800</bug_when>
    <thetext>[Texmap] Instead of having multiple shaders sources with lots of duplication, we should have one shader source with MACRO variants</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789749</commentid>
    <comment_count>1</comment_count>
      <attachid>179092</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-12 11:37:47 -0800</bug_when>
    <thetext>Created attachment 179092
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>789795</commentid>
    <comment_count>2</comment_count>
      <attachid>179100</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-12 12:20:23 -0800</bug_when>
    <thetext>Created attachment 179100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794259</commentid>
    <comment_count>3</comment_count>
      <attachid>180074</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-18 18:37:32 -0800</bug_when>
    <thetext>Created attachment 180074
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794260</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 18:40:26 -0800</bug_when>
    <thetext>Attachment 180074 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:111:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 4 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>794266</commentid>
    <comment_count>5</comment_count>
      <attachid>180074</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-18 18:48:07 -0800</bug_when>
    <thetext>Comment on attachment 180074
Patch

Attachment 180074 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/15413394</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794267</commentid>
    <comment_count>6</comment_count>
      <attachid>180074</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-12-18 18:52:07 -0800</bug_when>
    <thetext>Comment on attachment 180074
Patch

Attachment 180074 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/15400451</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794329</commentid>
    <comment_count>7</comment_count>
      <attachid>180085</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-18 21:27:36 -0800</bug_when>
    <thetext>Created attachment 180085
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794330</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 21:30:21 -0800</bug_when>
    <thetext>Attachment 180085 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:111:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 4 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>794331</commentid>
    <comment_count>9</comment_count>
      <attachid>180086</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-18 21:30:32 -0800</bug_when>
    <thetext>Created attachment 180086
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794332</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-18 21:35:37 -0800</bug_when>
    <thetext>Attachment 180086 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:111:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 4 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>794426</commentid>
    <comment_count>11</comment_count>
      <attachid>180086</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2012-12-19 00:56:44 -0800</bug_when>
    <thetext>Comment on attachment 180086
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794450</commentid>
    <comment_count>12</comment_count>
      <attachid>180086</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2012-12-19 01:44:17 -0800</bug_when>
    <thetext>Comment on attachment 180086
Patch

Attachment 180086 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/15404601</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794601</commentid>
    <comment_count>13</comment_count>
      <attachid>180150</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-19 06:12:01 -0800</bug_when>
    <thetext>Created attachment 180150
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794605</commentid>
    <comment_count>14</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-19 06:13:10 -0800</bug_when>
    <thetext>Submitted style-checker false positive bug, https://bugs.webkit.org/show_bug.cgi?id=105427</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794608</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-19 06:14:51 -0800</bug_when>
    <thetext>Attachment 180150 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:112:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 4 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>794632</commentid>
    <comment_count>16</comment_count>
      <attachid>180150</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-19 06:53:19 -0800</bug_when>
    <thetext>Comment on attachment 180150
Patch

Clearing flags on attachment: 180150

Committed r138157: &lt;http://trac.webkit.org/changeset/138157&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794633</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-19 06:53:24 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794694</commentid>
    <comment_count>18</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-12-19 08:31:21 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; All reviewed patches have been landed.  Closing bug.

Looks like this is breaking API tests.
http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Debug%20WK2/builds/7337/steps/API%20tests/logs/stdio

/home/buildslave-1/webkit-buildslave/efl-linux-64-debug-wk2/build/Source/WebCore/platform/graphics/opengl/GraphicsContext3DOpenGLCommon.cpp(479) : void WebCore::GraphicsContext3D::compileShader(Platform3DObject)
1   0x2afabf27da69 WebCore::GraphicsContext3D::compileShader(unsigned int)
2   0x2afabf2906c1 WebCore::TextureMapperShaderProgram::TextureMapperShaderProgram(WTF::PassRefPtr&lt;WebCore::GraphicsContext3D&gt;, WTF::String const&amp;, WTF::String const&amp;)
3   0x2afabf291253 WebCore::TextureMapperShaderProgram::create(WTF::PassRefPtr&lt;WebCore::GraphicsContext3D&gt;, WTF::String const&amp;, WTF::String const&amp;)
4   0x2afabf291123 WebCore::TextureMapperShaderManager::getShaderProgram(unsigned int)
5   0x2afabf288ef9 WebCore::TextureMapperGL::drawTexture(unsigned int, int, WebCore::IntSize const&amp;, WebCore::FloatRect const&amp;, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture const*, unsigned int)
6   0x2afabf288d79 WebCore::TextureMapperGL::drawTexture(WebCore::BitmapTexture const&amp;, WebCore::FloatRect const&amp;, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture const*, unsigned int)
7   0x2afabe839d3c WebCore::TextureMapperTile::paint(WebCore::TextureMapper*, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture*, unsigned int)
8   0x2afab7b5b26e WebKit::CoordinatedBackingStore::paintTilesToTextureMapper(WTF::Vector&lt;WebCore::TextureMapperTile*, 0ul&gt;&amp;, WebCore::TextureMapper*, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture*, WebCore::FloatRect const&amp;)
9   0x2afab7b5b7fc WebKit::CoordinatedBackingStore::paintToTextureMapper(WebCore::TextureMapper*, WebCore::FloatRect const&amp;, WebCore::TransformationMatrix const&amp;, float, WebCore::BitmapTexture*)
10  0x2afabe83d582 WebCore::TextureMapperLayer::paintSelf(WebCore::TextureMapperPaintOptions const&amp;)
11  0x2afabe83d783 WebCore::TextureMapperLayer::paintSelfAndChildren(WebCore::TextureMapperPaintOptions const&amp;)
12  0x2afabe83e0c5 WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica(WebCore::TextureMapperPaintOptions const&amp;)
13  0x2afabe83e1f7 WebCore::TextureMapperLayer::paintRecursive(WebCore::TextureMapperPaintOptions const&amp;)
14  0x2afabe83d8ef WebCore::TextureMapperLayer::paintSelfAndChildren(WebCore::TextureMapperPaintOptions const&amp;)
15  0x2afabe83e0c5 WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica(WebCore::TextureMapperPaintOptions const&amp;)
16  0x2afabe83e1f7 WebCore::TextureMapperLayer::paintRecursive(WebCore::TextureMapperPaintOptions const&amp;)
17  0x2afabe83d8ef WebCore::TextureMapperLayer::paintSelfAndChildren(WebCore::TextureMapperPaintOptions const&amp;)
18  0x2afabe83e0c5 WebCore::TextureMapperLayer::paintSelfAndChildrenWithReplica(WebCore::TextureMapperPaintOptions const&amp;)
19  0x2afabe83e1f7 WebCore::TextureMapperLayer::paintRecursive(WebCore::TextureMapperPaintOptions const&amp;)
20  0x2afabe83d119 WebCore::TextureMapperLayer::paint()
21  0x2afab7b69ab3 WebKit::LayerTreeRenderer::paintToCurrentGLContext(WebCore::TransformationMatrix const&amp;, float, WebCore::FloatRect const&amp;, unsigned int)
22  0x2afab7cadeb7 EwkViewImpl::displayTimerFired(WebCore::Timer&lt;EwkViewImpl&gt;*)
23  0x2afab7cb554c WebCore::Timer&lt;EwkViewImpl&gt;::fired()
24  0x2afabe7b0f3e WebCore::ThreadTimers::sharedTimerFiredInternal()
25  0x2afabe7b0e5f WebCore::ThreadTimers::sharedTimerFired()
26  0x2afabf21206d
27  0x2afab9e9a33e _ecore_timer_expired_call
28  0x2afab9e9a50b _ecore_timer_expired_timers_call
29  0x2afab9e97421
30  0x2afab9e97a15 ecore_main_loop_iterate
31  0x43721b TestWebKitAPI::Util::run(bool*)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794695</commentid>
    <comment_count>19</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-12-19 08:32:06 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; All reviewed patches have been landed.  Closing bug.
&gt; 
&gt; Looks like this is breaking API tests.
&gt; http://build.webkit.org/builders/EFL%20Linux%2064-bit%20Debug%20WK2/builds/7337/steps/API%20tests/logs/stdio

Sorry, I missed the important first line:
ASSERTION FAILED: GLCompileSuccess == GL_TRUE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794700</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-19 08:38:45 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 105439</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794723</commentid>
    <comment_count>21</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-12-19 09:05:54 -0800</bug_when>
    <thetext>Additionally it broke all pixel tests on the Qt-WK2 pixel tester bot:
http://build.webkit.sed.hu/builders/x86-64%20Linux%20Qt%20Release%20WebKit2%20%28Pixel%20Tests%29/builds/1023/steps/layout-test/logs/stdio

All of the png became empty.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794731</commentid>
    <comment_count>22</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-19 09:14:33 -0800</bug_when>
    <thetext>Hmm, all worked on my machine with no asserts; I will try on a different computer and try to reproduce. Either way thanks for rolling out.
Btw would be great if this kind of thing wad caught by ews or cq...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794736</commentid>
    <comment_count>23</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-12-19 09:20:42 -0800</bug_when>
    <thetext>(In reply to comment #22)
&gt; Hmm, all worked on my machine with no asserts; I will try on a different computer and try to reproduce. Either way thanks for rolling out.
&gt; Btw would be great if this kind of thing wad caught by ews or cq...

It would be good, but we&apos;re not confident enough yet wrt to gardening and stability to let our EFL EWS cq- patches due to test failures. Sorry for the trouble in this case - you can always ask someone in #webkit-efl to pre-run this patch, we should be able to help with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>794740</commentid>
    <comment_count>24</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-19 09:25:03 -0800</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; Hmm, all worked on my machine with no asserts; I will try on a different computer and try to reproduce. Either way thanks for rolling out.
&gt; &gt; Btw would be great if this kind of thing wad caught by ews or cq...
&gt; 
&gt; It would be good, but we&apos;re not confident enough yet wrt to gardening and stability to let our EFL EWS cq- patches due to test failures. Sorry for the trouble in this case - you can always ask someone in #webkit-efl to pre-run this patch, we should be able to help with that.

can we have something where the ews bot posts information potential test failures without cq-? This way the info would be there and the contributor can decide whether to submit or not...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795402</commentid>
    <comment_count>25</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-12-20 06:24:36 -0800</bug_when>
    <thetext>(In reply to comment #24)

&gt; can we have something where the ews bot posts information potential test failures without cq-? This way the info would be there and the contributor can decide whether to submit or not...

Thanks for the suggestion - I&apos;ll add it to my list to see if that&apos;s possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>795420</commentid>
    <comment_count>26</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-12-20 07:13:01 -0800</bug_when>
    <thetext>I filed a new bug report for the EWS discussion: https://bugs.webkit.org/show_bug.cgi?id=105534</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797427</commentid>
    <comment_count>27</comment_count>
      <attachid>180769</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-26 17:33:51 -0800</bug_when>
    <thetext>Created attachment 180769
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797428</commentid>
    <comment_count>28</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2012-12-26 17:35:38 -0800</bug_when>
    <thetext>OK, I was able to reproduce the issue, it has to do with different GL versions...
New patch should &quot;work just fine&quot;(tm) but if something fails when I&apos;m unavailable and it&apos;s not trivial feel free to re-rollout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797429</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-26 17:38:13 -0800</bug_when>
    <thetext>Attachment 180769 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/texmap/TextureMapperShaderManager.cpp:112:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 4 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>797442</commentid>
    <comment_count>30</comment_count>
      <attachid>180769</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-26 18:30:34 -0800</bug_when>
    <thetext>Comment on attachment 180769
Patch for landing

Clearing flags on attachment: 180769

Committed r138489: &lt;http://trac.webkit.org/changeset/138489&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797443</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-26 18:30:40 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>797794</commentid>
    <comment_count>32</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-12-28 00:31:33 -0800</bug_when>
    <thetext>(In reply to comment #30)
&gt; (From update of attachment 180769 [details])
&gt; Clearing flags on attachment: 180769
&gt; 
&gt; Committed r138489: &lt;http://trac.webkit.org/changeset/138489&gt;

It caused a regression on Qt - https://bugs.webkit.org/show_bug.cgi?id=105820</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179092</attachid>
            <date>2012-12-12 11:37:47 -0800</date>
            <delta_ts>2012-12-18 18:37:29 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104815-20121212113514.patch</filename>
            <type>text/plain</type>
            <size>48356</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzRlOTMxM2U2NTUwZDU2
NjAyYzQ5Njc3ZDUyNmE1NGE0MzI0YTY4ZS4uMTAwZGMwNTc5NzdkNGRiNTY4NDQ5OWExODU2ODEy
ZTZmM2UyYjZkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTEyLTEyICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gSW5zdGVh
ZCBvZiBoYXZpbmcgbXVsdGlwbGUgc2hhZGVycyBzb3VyY2VzIHdpdGggbG90cyBvZiBkdXBsaWNh
dGlvbiwgd2Ugc2hvdWxkIGhhdmUgb25lIHNoYWRlciBzb3VyY2Ugd2l0aCBNQUNSTyB2YXJpYW50
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0ODE1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRl
ZCB0ZW1wbGF0ZXMgZm9yIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMsIGFuZCBhZGRl
ZCBzb21lIE1BQ1JPcyBpbiAKKyAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgdG8g
YWxsb3cgR0xTTCBwcmVjb21waWxlci1iYXNlZCBjb25maWd1cmF0aW9uLgorCisgICAgICAgIFRo
ZSB0ZW1wbGF0ZSBmb2xsb3dzIGEgcGF0dGVybiB3aGVyZSB0aGUgbWFpbiBmdW5jdGlvbiBpbiB0
aGUgc2hhZGVyIGNhbGxzCisgICAgICAgIGFwcGx5Rm9vQmFySWZOZWVkZWQoKSwgd2hpbGUgYXBw
bHlGb29CYXIoKSBpcyBpbXBsZW1lbnRlZC4gVGhlIE1hY3JvcyBwcmVwZW5kZWQgdG8gdGhlIHRl
bXBsYXRlIGRlZmluZSB3aGV0aGVyIGFwcGx5SWZOZWVkZWQgcmVzb2x2ZXMgdG8gdGhlIHJlYWwg
ZnVuY3Rpb24gb3IgdG8gYSBub29wLgorCisgICAgICAgIEluIGFkZGl0aW9uLCBtYWRlIHNvbWUg
c21hbGwgY2hhbmdlcyB0byB0aGUgZmlsdGVyIHNoYWRlcnMgc28gdGhhdCB0aGV5IGNhbiB1c2Ug
dGhlIHNhbWUgY29kZSBhcyB0aGUgbm9ybWFsIHNoYWRlcnMuCisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyBwaXhlbC9yZWYgdGVzdHMgd2hlbiBydW4gb24gUXQvRUZML0dUSy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wdGlvbnNGb3JGaWx0ZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6cHJlcGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZUdMOjphcHBseUZpbHRlcnMpOgorICAgICAgICAgICAgQWx3YXlzIGRyYXcgdXNpbmcgdGhlIGRy
YXdRdWFkIGZ1bmN0aW9uLCBhbmQgdXNlIHRoZSBuZXcgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6Ok9wdGlvbnMgbWFzayBpbnN0ZWFkIG9mIHRoZSBvbGQgU2hhZGVyS2V5LgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVy
UHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6
CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisKIDIwMTItMTItMTEgIE5v
J2FtIFJvc2VudGhhbCAgPG5vYW1Ad2Via2l0Lm9yZz4KIAogICAgICAgICBbVGV4bWFwXSBSZW1v
dmUgbG93cC9oaWdocCBpbmRpY2F0b3JzIGFzIHRoZXkncmUgbm90IG5lZWRlZCB3aXRoIEFOR0xF
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmNwcAppbmRleCA0NTUzYjNmOGNlMzU4YmU1NWExNDAzZmYzMTg2
NWUzYTIxNjRkZDc3Li42ZTY2ZmM0ZTI2MjM5YTkxNjU3Y2MzNjczZTA1NzNhY2QxMmFjNzcxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVy
ZU1hcHBlckdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlckdMLmNwcApAQCAtODUsOCArODUsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFNoYXJlZEdMRGF0YShjb250ZXh0KSk7CiAgICAgICAg
IH0KIAotCi0KICAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgdGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI7CiAKICAgICAgICAgZXhwbGljaXQgU2hhcmVkR0xEYXRhKEdyYXBoaWNz
Q29udGV4dDNEKiBjb250ZXh0KQpAQCAtNDEzLDE2ICs0MTEsMTYgQEAgdm9pZCBUZXh0dXJlTWFw
cGVyR0w6OmRyYXdUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgRmxhZ3MgZmxhZ3Ms
IGNvbnN0IEkKICAgICBib29sIHVzZVJlY3QgPSBmbGFncyAmIFNob3VsZFVzZUFSQlRleHR1cmVS
ZWN0OwogICAgIGJvb2wgbWFza2VkID0gISFtYXNrVGV4dHVyZTsKIAotICAgIFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5ID0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OkRlZmF1bHQ7Ci0gICAgaWYgKG1hc2tlZCAmJiB1c2VSZWN0KQotICAgICAgICBrZXkgPSBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFza2VkUmVjdDsKLSAgICBlbHNlIGlmIChtYXNr
ZWQpCi0gICAgICAgIGtleSA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpNYXNrZWQ7Ci0g
ICAgZWxzZSBpZiAodXNlUmVjdCkKLSAgICAgICAga2V5ID0gVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlJlY3Q7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0
aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlOworICAgIGlmICghIW1h
c2tUZXh0dXJlKQorICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpNYXNrOworICAgIGlmIChmbGFncyAmIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0KQorICAgICAg
ICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0OworICAgIGlmIChv
cGFjaXR5IDwgMSkKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6T3BhY2l0eTsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJv
Z3JhbTsKLSAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oa2V5KTsKKyAgICBwcm9ncmFtID0gZGF0YSgp
LnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dy
YW0ob3B0aW9ucyk7CiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3Jh
bUlEKCkpOwogCiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0uZ2V0KCks
IHRleHR1cmUsIGZsYWdzLCB0ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3TWF0cml4
LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSk7CkBAIC01NjIsOCArNTYwLDExIEBAIGJvb2wgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4dHVyZSwg
RmxhZ3MgZmxhZ3MsCiAgICAgZmxvYXQgdGFyZ2V0UXVhZEVkZ2VzWzI0XTsKICAgICBxdWFkVG9F
ZGdlQXJyYXkoZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSwgdGFyZ2V0UXVhZEVkZ2VzKTsKICAg
ICBxdWFkVG9FZGdlQXJyYXkoaW5mbGF0ZVF1YWQocXVhZEluU2NyZWVuU3BhY2UuYm91bmRpbmdC
b3goKSwgIGluZmxhdGlvbkRpc3RhbmNlKSwgdGFyZ2V0UXVhZEVkZ2VzICsgMTIpOworICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRl
eHR1cmU7CisgICAgaWYgKG9wYWNpdHkgPCAxKQorICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5OwogCi0gICAgUmVmUHRyPFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OkFudGlhbGlhc2VkKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+
IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3Jh
bShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0zZnYocHJv
Z3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwgdGFyZ2V0
UXVhZEVkZ2VzKTsKIApAQCAtNzU2LDMyICs3NTcsMzMgQEAgdm9pZCBCaXRtYXBUZXh0dXJlR0w6
OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0UmVjdCwg
Y28KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKIAotc3RhdGljIFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5Rm9yRmlsdGVyVHlwZShGaWx0ZXJPcGVyYXRpb246Ok9w
ZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKK3N0YXRpYyBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zRm9yRmlsdGVyVHlwZShGaWx0ZXJPcGVyYXRpb246
Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKIHsKICAgICBzd2l0Y2ggKHR5cGUp
IHsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICByZXR1cm4g
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRlcjsKKyAgICAgICAgcmV0
dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0VQSUE6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2VwaWFG
aWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVy
ZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTZXBpYUZpbHRlcjsKICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6U2F0dXJhdGVGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTYXR1
cmF0ZUZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAg
ICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpIdWVSb3RhdGVGaWx0ZXI7Cisg
ICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpIdWVSb3RhdGVGaWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OklOVkVSVDoKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpJbnZlcnRGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpJbnZlcnRGaWx0ZXI7
CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgICAgIHJldHVybiBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QnJpZ2h0bmVzc0ZpbHRlcjsKKyAgICAgICAgcmV0
dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OkJyaWdodG5lc3NGaWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkNPTlRSQVNUOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkNv
bnRyYXN0RmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Q29udHJhc3RGaWx0ZXI7CiAg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIHJldHVybiBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6Ok9wYWNpdHlGaWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CiAgICAg
ICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcjsKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIHJldHVybiBwYXNzID8g
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MyIDogVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MxOworICAgICAgICByZXR1cm4gVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkFscGhhQmx1cgorICAgICAgICAgICAgfCAocGFzcyA/
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpDb250ZW50VGV4dHVyZSB8IFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9yOiAwKTsKICAgICBkZWZhdWx0OgogICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpJbnZhbGlkOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKQEAgLTg1Miwx
MyArODU0LDEzIEBAIHN0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBGaWx0CiAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OlNFUElBOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgY29udGV4dC0+dW5pZm9y
bTFmKHByb2dyYW0tPmFtb3VudExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29s
b3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAg
Y29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmZpbHRlckFtb3VudExvY2F0aW9uKCksIHN0YXRp
Y19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24p
LmFtb3VudCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklO
VkVSVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJ
VFk6Ci0gICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5hbW91bnRMb2NhdGlvbigp
LCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9u
Jj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9n
cmFtLT5maWx0ZXJBbW91bnRMb2NhdGlvbigpLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBv
bmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAgICAgICAgIGNv
bnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXIgPSBzdGF0aWNfY2FzdDxjb25zdCBCbHVyRmls
dGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKTsKQEAgLTg3OSwxOSArODgxLDIwIEBAIHN0YXRpYyB2
b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9n
cmFtLCBjb25zdCBGaWx0CiAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3JhbS0+Z2F1
c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1c3NpYW5L
ZXJuZWwoKSk7CiAgICAgICAgIHN3aXRjaCAocGFzcykgewogICAgICAgICBjYXNlIDA6Ci0gICAg
ICAgICAgICAvLyBGaXJzdCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyLgorICAgICAgICAgICAg
Ly8gRmlyc3QgcGFzczogaG9yaXpvbnRhbCBhbHBoYSBibHVyLgorICAgICAgICAgICAgY29udGV4
dC0+dW5pZm9ybTJmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCBzaGFkb3cuc3RkRGV2
aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpLCAwKTsKICAgICAgICAgICAgIGNvbnRleHQt
PnVuaWZvcm0yZihwcm9ncmFtLT5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCBmbG9hdChzaGFkb3cu
bG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hhZG93LmxvY2F0
aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQt
PnVuaWZvcm0xZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwgc2hhZG93LnN0ZERldmlh
dGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhlIHNoYWRv
dyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0gICAgICAg
ICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0aW9uKCksIHNo
YWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAg
IGZsb2F0IHIsIGcsIGIsIGE7CisgICAgICAgICAgICBzaGFkb3cuY29sb3IoKS5nZXRSR0JBKHIs
IGcsIGIsIGEpOworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPmNvbG9y
TG9jYXRpb24oKSwgciwgZywgYiwgYSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYo
cHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0aW9uKCksIDAsIHNoYWRvdy5zdGREZXZpYXRpb24oKSAv
IGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihw
cm9ncmFtLT5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCAwLCAwKTsKICAgICAgICAgICAgIGNvbnRl
eHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKICAgICAgICAg
ICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBj
b250ZW50VGV4dHVyZSk7CiAgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3JhbS0+
Y29udGVudFRleHR1cmVMb2NhdGlvbigpLCAxKTsKLSAgICAgICAgICAgIGZsb2F0IHIsIGcsIGIs
IGE7Ci0gICAgICAgICAgICBzaGFkb3cuY29sb3IoKS5nZXRSR0JBKHIsIGcsIGIsIGEpOwotICAg
ICAgICAgICAgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPnNoYWRvd0NvbG9yTG9jYXRpb24o
KSwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBi
cmVhazsKQEAgLTk2MCwyNSArOTYzLDEzIEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpkcmF3VXNp
bmdDdXN0b21GaWx0ZXIoQml0bWFwVGV4dHVyZSYgdGFyZ2V0LCBjb25zdCBCaXRtYXBUCiB2b2lk
IFRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNhbXBs
ZXIsIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb24mIGZpbHRlciwgaW50IHBhc3MpCiB7CiAgICAgLy8gRm9yIHN0YW5kYXJkIGZpbHRlcnMs
IHdlIGFsd2F5cyBkcmF3IHRoZSB3aG9sZSB0ZXh0dXJlIHdpdGhvdXQgdHJhbnNmb3JtYXRpb25z
LgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5ID0ga2V5Rm9y
RmlsdGVyVHlwZShmaWx0ZXIuZ2V0T3BlcmF0aW9uVHlwZSgpLCBwYXNzKTsKLSAgICBSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRh
KCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShrZXkpOworICAg
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBvcHRpb25zRm9y
RmlsdGVyVHlwZShmaWx0ZXIuZ2V0T3BlcmF0aW9uVHlwZSgpLCBwYXNzKTsKKyAgICBSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRh
KCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsK
ICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKICAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShwcm9ncmFt
LmdldCgpLCBmaWx0ZXIsIHBhc3MsIHNhbXBsZXIuY29udGVudFNpemUoKSwgc3RhdGljX2Nhc3Q8
Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oY29udGVudFRleHR1cmUpLmlkKCkpOwotCi0gICAgbV9j
b250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9u
KCkpOwotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT50
ZXhDb29yZExvY2F0aW9uKCkpOwotICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFMCk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0
dXJlR0wmPihzYW1wbGVyKS5pZCgpKTsKLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFpKHByb2dy
YW0tPnNhbXBsZXJMb2NhdGlvbigpLCAwKTsKLSAgICBjb25zdCBHQzNEZmxvYXQgdGFyZ2V0VmVy
dGljZXNbXSA9IHstMSwgLTEsIDEsIC0xLCAxLCAxLCAtMSwgMX07Ci0gICAgY29uc3QgR0MzRGZs
b2F0IHNvdXJjZVZlcnRpY2VzW10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0gICAgbV9j
b250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSwg
MiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih0YXJnZXRW
ZXJ0aWNlcykpOwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHByb2dyYW0t
PnRleENvb3JkTG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwg
MCwgR0MzRGludHB0cihzb3VyY2VWZXJ0aWNlcykpOwotICAgIG1fY29udGV4dDNELT5kaXNhYmxl
KEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgbV9jb250ZXh0M0QtPmRyYXdBcnJheXMo
R3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7Ci0gICAgbV9jb250ZXh0M0Qt
PmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKLSAg
ICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3Jk
TG9jYXRpb24oKSk7CisgICAgRmxvYXRSZWN0IHRhcmdldFJlY3QoSW50UG9pbnQ6Onplcm8oKSwg
c2FtcGxlci5jb250ZW50U2l6ZSgpKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0o
cHJvZ3JhbS5nZXQoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc2FtcGxl
cikuaWQoKSwgMCwgSW50U2l6ZSgxLCAxKSwgdGFyZ2V0UmVjdCwgVHJhbnNmb3JtYXRpb25NYXRy
aXgoKSwgMSwgMCk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVy
ZUdMOjphcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgQml0
bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRl
cnMpCkBAIC0xMTcyLDcgKzExNjMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVnaW5DbGlw
KGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgogCiAgICAg
ZGF0YSgpLmluaXRpYWxpemVTdGVuY2lsKCk7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6RGVmYXVsdCk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9n
cmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdl
dFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNvbGlkQ29sb3IpOwog
CiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwogICAg
IG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2Nh
dGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCmluZGV4
IDIxNzU2MjBhZTE3ZjQzZWZjNDgxZmE1NjczODM3YmY3YTE2OGZjMjkuLjhjYmMwNWM3NTExNjVi
YjhmY2RlN2Y2MTQwOGI5MmFjYTdiY2YyNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyLmNwcApAQCAtMzIsNyArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLQogc3RhdGljIGlubGluZSBib29sIGNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpCiB7CiAjaWYg
IUxPR19ESVNBQkxFRApAQCAtMTA2LDQyMyArMTA1LDI4OCBAQCBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKICAgICBtX2NvbnRleHQtPmRl
bGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKIH0KIAotc3RydWN0IFNoYWRlclNwZWMgewotICAgIFN0
cmluZyB2ZXJ0ZXhTaGFkZXI7Ci0gICAgU3RyaW5nIGZyYWdtZW50U2hhZGVyOwotICAgIFNoYWRl
clNwZWMoY29uc3QgY2hhciogdmVydGV4ID0gMCwgY29uc3QgY2hhciogZnJhZ21lbnQgPSAwKQot
ICAgICAgICA6IHZlcnRleFNoYWRlcih2ZXJ0ZXggPyBTdHJpbmcoQVNDSUlMaXRlcmFsKHZlcnRl
eCkpIDogU3RyaW5nKCkpCi0gICAgICAgICwgZnJhZ21lbnRTaGFkZXIoZnJhZ21lbnQgPyBTdHJp
bmcoQVNDSUlMaXRlcmFsKGZyYWdtZW50KSkgOiBTdHJpbmcoKSkKLSAgICB7Ci0gICAgfQotfTsK
LQotc3RhdGljIHZvaWQgZ2V0U2hhZGVyU3BlYyhUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
U2hhZGVyS2V5IGtleSwgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21lbnRTb3Vy
Y2UpCi17Ci0gICAgc3RhdGljIFZlY3RvcjxTaGFkZXJTcGVjPiBzcGVjcyA9IFZlY3RvcjxTaGFk
ZXJTcGVjPigpOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudE9wYWNpdHlBbmRNYXNr
ID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7Ci0gICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7Ci0gICAgICAgICAg
ICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7Ci0gICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVf
b3BhY2l0eTsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAg
ICAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwotICAgICAgICAgICAgdm9pZCBt
YWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjNCBjb2xvciA9IHRl
eHR1cmUyRChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29vcmQpOwotICAgICAgICAgICAgICAgIHZl
YzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpOwotICAgICAg
ICAgICAgICAgIGZsb2F0IGZyYWdtZW50QWxwaGEgPSB1X29wYWNpdHkgKiBtYXNrQ29sb3IuYTsK
LSAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZyYWdtZW50
QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFscGhhKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
KTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFJlY3RPcGFjaXR5QW5kTWFzayA9
Ci0gICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc2FtcGxlcjsKLSAgICAgICAg
ICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX21hc2s7Ci0gICAgICAgICAgICB1bmlmb3JtIGZs
b2F0IHVfb3BhY2l0eTsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3NvdXJjZVRleENvb3Jk
OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwotICAgICAgICAgICAg
dm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjNCBjb2xv
ciA9IHRleHR1cmUyRFJlY3Qoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKLSAgICAgICAg
ICAgICAgICB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21hc2tUZXhD
b29yZCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVfb3BhY2l0eSAq
IG1hc2tDb2xvci5hOwotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3Iu
cmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOwotICAgICAgICAg
ICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleE9wYWNpdHlB
bmRNYXNrID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IHVf
bWF0cml4OwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2ZsaXA7Ci0gICAgICAgICAgICB1
bmlmb3JtIHZlYzIgdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFf
dmVydGV4OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAg
ICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2b2lkIG1h
aW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2X3NvdXJjZVRleENvb3Jk
ID0gdmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55LCB1X2Zs
aXApKSAqIHVfdGV4dHVyZVNpemU7Ci0gICAgICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQgPSB2
ZWMyKGFfdmVydGV4KTsKLSAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICog
YV92ZXJ0ZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRTaW1wbGUgPQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNf
c2FtcGxlcjsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICAg
ICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2b2lkIG1haW4o
dm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IGNvbG9yID0gdGV4dHVy
ZTJEKHNfc2FtcGxlciwgdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAgZ2xfRnJh
Z0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiB1X29wYWNpdHksIGNvbG9yLmEgKiB1X29wYWNpdHkp
OwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZy
YWdtZW50QW50aWFsaWFzaW5nTm9NYXNrID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAg
ICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIy
RCBzX3NhbXBsZXI7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsK
LSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICAgICAgdW5pZm9y
bSB2ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzhdOwotCi0gICAgICAgICAg
ICAgICAgLy8gVGhlIGRhdGEgcGFzc2VkIGluIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlIGlzIG1lcmVseSB0aGUKLSAgICAgICAgICAgICAgICAvLyBwcmUtc2NhbGVkIGNvZWZmZWNp
ZW50cyBvZiB0aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUgZm91ciBlZGdlcwotICAg
ICAgICAgICAgICAgIC8vIG9mIHRoZSBleHBhbmRlZCBxdWFkIGluIHNjcmVlbiBzcGFjZSBhbmQg
dGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveAotICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBl
eHBhbmRlZCBxdWFkLgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBmbG9hdCBub3Jt
YWxpemVkRGlzdGFuY2UodmVjMyBlZGdlQ29lZmZpY2llbnQpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5nIGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9u
IGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOgotICAgICAgICAgICAgICAgIC8vIChBKnAu
eCArIEIqcC55ICsgQykgLyBzcXJ0KEFeMiArIEJeMikgPSBkaXN0YW5jZSBmcm9tIGxpbmUgdG8g
cAotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBBLCBCIGFuZCBDIGhhdmUgYWxyZWFkeSBi
ZWVuIHNjYWxlZCBieSAxIC8gc3FydChBXjIgKyBCXjIpLgotICAgICAgICAgICAgICAgIHJldHVy
biBjbGFtcChkb3QoZWRnZUNvZWZmaWNpZW50LCB2ZWMzKGdsX0ZyYWdDb29yZC54eSwgMS4pKSwg
MC4sIDEuKTsKK3N0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQorICAgIFNU
UklOR0lGWSgKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAgICAgICB1bmlmb3Jt
IGZsb2F0IHVfZmxpcDsKKyAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdGV4dHVyZVNpemU7CisgICAg
ICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhD
b29yZDsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOworCisgICAgICAgIHZv
aWQgbWFpbih2b2lkKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWM0IHBvc2l0aW9uID0gYV92
ZXJ0ZXg7CisgICAgICAgICAgICB2X3RleENvb3JkID0gdmVjMihwb3NpdGlvbi54LCBtaXgocG9z
aXRpb24ueSwgMS4gLSBwb3NpdGlvbi55LCB1X2ZsaXApKSAqIHVfdGV4dHVyZVNpemU7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHZfbWFza1RleENvb3JkID0g
dmVjMihwb3NpdGlvbik7CisgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92
ZXJ0ZXg7CisgICAgICAgIH0KKyAgICApOworCisjZGVmaW5lIEdMU0xfRElSRUNUSVZFKC4uLikg
IiMiI19fVkFfQVJHU19fIlxuIgorI2RlZmluZSBERUZJTkVfQVBQTElFUihOYW1lKSBcCisgICAg
IiNpZmRlZiBFTkFCTEVfIiNOYW1lIlxuIiBcCisgICAgIiNkZWZpbmUgYXBwbHkiI05hbWUiSWZO
ZWVkZWQgYXBwbHkiI05hbWUiXG4iXAorICAgICIjZWxzZVxuIlwKKyAgICAiI2RlZmluZSBhcHBs
eSIjTmFtZSJJZk5lZWRlZCBub29wXG4iXAorICAgICIjZW5kaWZcbiIKKworI2RlZmluZSBSRUNU
X1RFWFRVUkVfRElSRUNUSVZFIFwKKyAgICBHTFNMX0RJUkVDVElWRShpZmRlZiBFTkFCTEVfUmVj
dCkgXAorICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlclR5cGUgc2FtcGxlcjJE
UmVjdCkgXAorICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlckZ1bmN0aW9uIHRl
eHR1cmUyRFJlY3QpIFwKKyAgICBHTFNMX0RJUkVDVElWRShlbHNlKSBcCisgICAgICAgIEdMU0xf
RElSRUNUSVZFKGRlZmluZSBTYW1wbGVyVHlwZSBzYW1wbGVyMkQpIFwKKyAgICAgICAgR0xTTF9E
SVJFQ1RJVkUoZGVmaW5lIFNhbXBsZXJGdW5jdGlvbiB0ZXh0dXJlMkQpIFwKKyAgICBHTFNMX0RJ
UkVDVElWRShlbmRpZikKKworI2RlZmluZSBFTkFCTEVfQVBQTElFUihOYW1lKSAiI2RlZmluZSBF
TkFCTEVfIiNOYW1lIlxuIgorI2RlZmluZSBCTFVSX0NPTlNUQU5UUyBcCisgICAgR0xTTF9ESVJF
Q1RJVkUoZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIIDExKSBcCisgICAgR0xTTF9E
SVJFQ1RJVkUoZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9TVEVQIDAuMikKKworCitzdGF0aWMgY29u
c3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CisgICAgREVGSU5FX0FQUExJRVIoVGV4dHVyZSkK
KyAgICBERUZJTkVfQVBQTElFUihTb2xpZENvbG9yKQorICAgIERFRklORV9BUFBMSUVSKE9wYWNp
dHkpCisgICAgREVGSU5FX0FQUExJRVIoTWFzaykKKyAgICBERUZJTkVfQVBQTElFUihBbnRpYWxp
YXMpCisgICAgREVGSU5FX0FQUExJRVIoR3JheXNjYWxlRmlsdGVyKQorICAgIERFRklORV9BUFBM
SUVSKFNlcGlhRmlsdGVyKQorICAgIERFRklORV9BUFBMSUVSKFNhdHVyYXRlRmlsdGVyKQorICAg
IERFRklORV9BUFBMSUVSKEh1ZVJvdGF0ZUZpbHRlcikKKyAgICBERUZJTkVfQVBQTElFUihJbnZl
cnRGaWx0ZXIpCisgICAgREVGSU5FX0FQUExJRVIoQnJpZ2h0bmVzc0ZpbHRlcikKKyAgICBERUZJ
TkVfQVBQTElFUihDb250cmFzdEZpbHRlcikKKyAgICBERUZJTkVfQVBQTElFUihPcGFjaXR5Rmls
dGVyKQorICAgIERFRklORV9BUFBMSUVSKEJsdXJGaWx0ZXIpCisgICAgREVGSU5FX0FQUExJRVIo
QWxwaGFCbHVyKQorICAgIERFRklORV9BUFBMSUVSKENvbnRlbnRUZXh0dXJlKQorICAgIFJFQ1Rf
VEVYVFVSRV9ESVJFQ1RJVkUKKyAgICBCTFVSX0NPTlNUQU5UUworICAgIFNUUklOR0lGWSgKKyAg
ICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7CisgICAgICAgIHVuaWZvcm0gU2FtcGxlclR5
cGUgc19zYW1wbGVyOworICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7CisgICAgICAg
IHVuaWZvcm0gc2FtcGxlcjJEIHNfY29udGVudFRleHR1cmU7CisgICAgICAgIHVuaWZvcm0gZmxv
YXQgdV9vcGFjaXR5OworICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKKyAgICAgICAg
dmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOworICAgICAgICB1bmlmb3JtIHZlYzMgdV9leHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07CisgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9m
aWx0ZXJBbW91bnQ7CisgICAgICAgIHVuaWZvcm0gdmVjMiB1X2JsdXJSYWRpdXM7CisgICAgICAg
IHVuaWZvcm0gdmVjMiB1X3NoYWRvd09mZnNldDsKKyAgICAgICAgdW5pZm9ybSB2ZWM0IHVfY29s
b3I7CisgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJO
RUxfSEFMRl9XSURUSF07CisKKyAgICAgICAgdm9pZCBub29wKHZlYzQpIHsgfQorCisgICAgICAg
IC8vIFRoZSBkYXRhIHBhc3NlZCBpbiB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZSBp
cyBtZXJlbHkgdGhlCisgICAgICAgIC8vIHByZS1zY2FsZWQgY29lZmZlY2llbnRzIG9mIHRoZSBs
aW5lIGVxdWF0aW9ucyBkZXNjcmliaW5nIHRoZSBmb3VyIGVkZ2VzCisgICAgICAgIC8vIG9mIHRo
ZSBleHBhbmRlZCBxdWFkIGluIHNjcmVlbiBzcGFjZSBhbmQgdGhlIHJlY3Rhbmd1bGFyIGJvdW5k
aW5nIGJveAorICAgICAgICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZC4KKyAgICAgICAgLy8KKyAg
ICAgICAgZmxvYXQgbm9ybWFsaXplZERpc3RhbmNlKHZlYzMgZWRnZUNvZWZmaWNpZW50KQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBXZSBhcmUgZG9pbmcgYSBzaW1wbGUgZGlzdGFuY2UgY2Fs
Y3VsYXRpb24gaGVyZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm11bGE6CisgICAgICAgICAgICAvLyAo
QSpwLnggKyBCKnAueSArIEMpIC8gc3FydChBXjIgKyBCXjIpID0gZGlzdGFuY2UgZnJvbSBsaW5l
IHRvIHAKKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBBLCBCIGFuZCBDIGhhdmUgYWxyZWFkeSBi
ZWVuIHNjYWxlZCBieSAxIC8gc3FydChBXjIgKyBCXjIpLgorICAgICAgICAgICAgcmV0dXJuIGNs
YW1wKGRvdChlZGdlQ29lZmZpY2llbnQsIHZlYzMoZ2xfRnJhZ0Nvb3JkLnh5LCAxLikpLCAwLiwg
MS4pOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgYW50aWFsaWFzUXVhZCh2ZWMzIGNvZWZm
aWNpZW50MSwgdmVjMyBjb2VmZmljaWVudDIsIHZlYzMgY29lZmZpY2llbnQzLCB2ZWMzIGNvZWZm
aWNpZW50NCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gTm93IHdlIHdhbnQgdG8gcmVkdWNl
IHRoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgZnJhZ21lbnQgaWYgaXQgaXMgY2xvc2UgdG8gdGhlCisg
ICAgICAgICAgICAvLyBlZGdlcyBvZiB0aGUgZXhwYW5kZWQgcXVhZCAob3IgcmVjdGFuZ3VsYXIg
Ym91bmRpbmcgYm94IC0tIHdoaWNoIHNlZW1zIHRvIGJlCisgICAgICAgICAgICAvLyBpbXBvcnRh
bnQgZm9yIGJhY2tmYWNpbmcgcXVhZHMpLiBOb3RlIHRoYXQgd2UgYXJlIGNvbWJpbmluZyB0aGUg
Y29udHJpYnV0aW9uCisgICAgICAgICAgICAvLyBmcm9tIHRoZSAodG9wIHx8IGJvdHRvbSkgYW5k
IChsZWZ0IHx8IHJpZ2h0KSBlZGdlIGJ5IHNpbXBseSBtdWx0aXBseWluZy4gVGhpcyBmb2xsb3dz
CisgICAgICAgICAgICAvLyB0aGUgYXBwcm9hY2ggZGVzY3JpYmVkIGF0OiBodHRwOi8vaHR0cC5k
ZXZlbG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMi9ncHVnZW1zMl9jaGFwdGVyMjIuaHRtbCwKKyAg
ICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3aXRob3V0IHVzaW5nIEdhdXNzaWFuIHdlaWdodHMu
CisgICAgICAgICAgICByZXR1cm4gbWluKG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDEp
LCBub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQyKSkKKyAgICAgICAgICAgICAgICAqIG1p
bihub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQzKSwgbm9ybWFsaXplZERpc3RhbmNlKGNv
ZWZmaWNpZW50NCkpOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgYW50aWFsaWFzKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZmxvYXQgYW50aWFsaWFzVmFsdWVGb3JRdWFkID0gCisgICAg
ICAgICAgICAgICAgYW50aWFsaWFzUXVhZCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFj
ZVswXSwKKyAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3Bh
Y2VbMV0sCisgICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlWzJdLAorICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5T
cGFjZVszXSk7CisKKyAgICAgICAgICAgIGZsb2F0IGFudGlhbGlhc1ZhbHVlRm9yQm91bmRpbmdS
ZWN0ID0gCisgICAgICAgICAgICAgICAgYW50aWFsaWFzUXVhZCh1X2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZVs0XSwKKyAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdl
c0luU2NyZWVuU3BhY2VbNV0sCisgICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRn
ZXNJblNjcmVlblNwYWNlWzZdLAorICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVk
Z2VzSW5TY3JlZW5TcGFjZVs3XSk7CisKKyAgICAgICAgICAgIHJldHVybiBtaW4oYW50aWFsaWFz
VmFsdWVGb3JRdWFkLCBhbnRpYWxpYXNWYWx1ZUZvckJvdW5kaW5nUmVjdCk7ICAgICAgICAgICAK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXBwbHlUZXh0dXJlKGlub3V0IHZlYzQgY29sb3Ip
IHsgY29sb3IgPSBTYW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCB2X3RleENvb3JkKTsgfQorICAg
ICAgICB2b2lkIGFwcGx5T3BhY2l0eShpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHVfb3Bh
Y2l0eTsgfQorICAgICAgICB2b2lkIGFwcGx5QW50aWFsaWFzKGlub3V0IHZlYzQgY29sb3IpIHsg
Y29sb3IgKj0gYW50aWFsaWFzKCk7IH0KKyAgICAgICAgdm9pZCBhcHBseU1hc2soaW5vdXQgdmVj
NCBjb2xvcikgeyBjb2xvciAqPSB0ZXh0dXJlMkQoc19tYXNrLCB2X21hc2tUZXhDb29yZCkuYTsg
fQorCisgICAgICAgIHZvaWQgYXBwbHlHcmF5c2NhbGVGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9maWx0ZXJBbW91
bnQ7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoKDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkg
KiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcy
MiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICgwLjIxMjYg
LSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgKyAwLjI4NDggKiBhbW91bnQp
ICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAg
ICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUy
IC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyICsgMC45Mjc4ICogYW1vdW50
KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgY29sb3IuYSk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGFwcGx5U2VwaWFGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgewor
ICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9maWx0ZXJBbW91bnQ7CisgICAgICAg
ICAgICBjb2xvciA9IHZlYzQoKDAuMzkzICsgMC42MDcgKiBhbW91bnQpICogY29sb3IuciArICgw
Ljc2OSAtIDAuNzY5ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xODkgLSAwLjE4OSAqIGFtb3Vu
dCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICgwLjM0OSAtIDAuMzQ5ICogYW1vdW50KSAq
IGNvbG9yLnIgKyAoMC42ODYgKyAwLjMxNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTY4IC0g
MC4xNjggKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAoMC4yNzIgLSAwLjI3
MiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNTM0IC0gMC41MzQgKiBhbW91bnQpICogY29sb3Iu
ZyArICgwLjEzMSArIDAuODY5ICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAg
Y29sb3IuYSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5U2F0dXJhdGVGaWx0ZXIo
aW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KCgw
LjIxMyArIDAuNzg3ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1
ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuZyArICgwLjA3MiAtIDAuMDcyICogdV9maWx0ZXJB
bW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIxMyAqIHVfZmls
dGVyQW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgKyAwLjI4NSAqIHVfZmlsdGVyQW1vdW50KSAq
IGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsCisg
ICAgICAgICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5y
ICsgKDAuNzE1IC0gMC43MTUgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyICsg
MC45MjggKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgIGNvbG9y
LmEpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseUh1ZVJvdGF0ZUZpbHRlcihpbm91
dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCBwaSA9IDMuMTQxNTky
NjUzNTg5NzkzMjM4NDY7CisgICAgICAgICAgICBmbG9hdCBjID0gY29zKHVfZmlsdGVyQW1vdW50
ICogcGkgLyAxODAuMCk7CisgICAgICAgICAgICBmbG9hdCBzID0gc2luKHVfZmlsdGVyQW1vdW50
ICogcGkgLyAxODAuMCk7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoY29sb3IuciAqICgwLjIx
MyArIGMgKiAwLjc4NyAtIHMgKiAwLjIxMykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1
IC0gcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgKyBzICogMC45Mjgp
LAorICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgKyBzICogMC4x
NDMpICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAwLjI4NSArIHMgKiAwLjE0MCkgKyBjb2xvci5i
ICogKDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwKKyAgICAgICAgICAgICAgICBjb2xv
ci5yICogKDAuMjEzIC0gYyAqIDAuMjEzIC0gcyAqIDAuNzg3KSArICBjb2xvci5nICogKDAuNzE1
IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgKyBjICogMC45Mjgg
KyBzICogMC4wNzIpLAorICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICB9CisKKyAg
ICAgICAgZmxvYXQgaW52ZXJ0KGZsb2F0IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfZmlsdGVy
QW1vdW50ICsgbiAqICgxLjAgLSB1X2ZpbHRlckFtb3VudCk7IH0KKyAgICAgICAgdm9pZCBhcHBs
eUludmVydEZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBj
b2xvciA9IHZlYzQoaW52ZXJ0KGNvbG9yLnIpLCBpbnZlcnQoY29sb3IuZyksIGludmVydChjb2xv
ci5iKSwgY29sb3IuYSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5QnJpZ2h0bmVz
c0ZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBjb2xvciA9
IHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfZmlsdGVyQW1vdW50KSwgY29sb3IuYSk7CisgICAg
ICAgIH0KKworICAgICAgICBmbG9hdCBjb250cmFzdChmbG9hdCBuKSB7IHJldHVybiAobiAtIDAu
NSkgKiB1X2ZpbHRlckFtb3VudCArIDAuNTsgfQorICAgICAgICB2b2lkIGFwcGx5Q29udHJhc3RG
aWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgY29sb3IgPSB2
ZWM0KGNvbnRyYXN0KGNvbG9yLnIpLCBjb250cmFzdChjb2xvci5nKSwgY29udHJhc3QoY29sb3Iu
YiksIGNvbG9yLmEpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseU9wYWNpdHlGaWx0
ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgY29sb3IgPSB2ZWM0
KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEgKiB1X2ZpbHRlckFtb3VudCk7Cisg
ICAgICAgIH0KKworICAgICAgICB2ZWM0IHNhbXBsZUNvbG9yQXRSYWRpdXMoZmxvYXQgcmFkaXVz
KQorICAgICAgICB7CisgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCArIHJhZGl1
cyAqIHVfYmx1clJhZGl1czsKKyAgICAgICAgICAgIHJldHVybiBTYW1wbGVyRnVuY3Rpb24oc19z
YW1wbGVyLCBjb29yZCkgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNv
b3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQg
c2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdCByYWRpdXMpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHZlYzIgY29vcmQgPSB2X3RleENvb3JkIC0gdV9zaGFkb3dPZmZzZXQgKyByYWRpdXMgKiB1X2Js
dXJSYWRpdXM7CisgICAgICAgICAgICByZXR1cm4gU2FtcGxlckZ1bmN0aW9uKHNfc2FtcGxlciwg
Y29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLngg
PCAxLiAmJiBjb29yZC55IDwgMS4pOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseUJs
dXJGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgdmVjNCB0
b3RhbCA9IHNhbXBsZUNvbG9yQXRSYWRpdXMoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKKyAg
ICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7
IGkrKykgeworICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUNvbG9yQXRSYWRpdXMoZmxv
YXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOworICAg
ICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUNvbG9yQXRSYWRpdXMoZmxvYXQoLTEgKiBpKSAq
IEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGZsb2F0IGFudGlhbGlhc1F1YWQodmVjMyBjb2VmZmljaWVudDEs
IHZlYzMgY29lZmZpY2llbnQyLCB2ZWMzIGNvZWZmaWNpZW50MywgdmVjMyBjb2VmZmljaWVudDQp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gTm93IHdlIHdhbnQgdG8gcmVkdWNl
IHRoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgZnJhZ21lbnQgaWYgaXQgaXMgY2xvc2UgdG8gdGhlCi0g
ICAgICAgICAgICAgICAgLy8gZWRnZXMgb2YgdGhlIGV4cGFuZGVkIHF1YWQgKG9yIHJlY3Rhbmd1
bGFyIGJvdW5kaW5nIGJveCAtLSB3aGljaCBzZWVtcyB0byBiZQotICAgICAgICAgICAgICAgIC8v
IGltcG9ydGFudCBmb3IgYmFja2ZhY2luZyBxdWFkcykuIE5vdGUgdGhhdCB3ZSBhcmUgY29tYmlu
aW5nIHRoZSBjb250cmlidXRpb24KLSAgICAgICAgICAgICAgICAvLyBmcm9tIHRoZSAodG9wIHx8
IGJvdHRvbSkgYW5kIChsZWZ0IHx8IHJpZ2h0KSBlZGdlIGJ5IHNpbXBseSBtdWx0aXBseWluZy4g
VGhpcyBmb2xsb3dzCi0gICAgICAgICAgICAgICAgLy8gdGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBh
dDogaHR0cDovL2h0dHAuZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2VtczIvZ3B1Z2VtczJfY2hh
cHRlcjIyLmh0bWwsCi0gICAgICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdpdGhvdXQgdXNp
bmcgR2F1c3NpYW4gd2VpZ2h0cy4KLSAgICAgICAgICAgICAgICByZXR1cm4gbWluKG5vcm1hbGl6
ZWREaXN0YW5jZShjb2VmZmljaWVudDEpLCBub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQy
KSkKLSAgICAgICAgICAgICAgICAgICAgKiBtaW4obm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNp
ZW50MyksIG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDQpKTsKLSAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGNvbG9yID0gdG90YWw7CisgICAgICAgIH0KIAotICAgICAgICAgICAgZmxv
YXQgYW50aWFsaWFzKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBhbnRp
YWxpYXNWYWx1ZUZvclF1YWQgPSAKLSAgICAgICAgICAgICAgICAgICAgYW50aWFsaWFzUXVhZCh1
X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVswXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzFdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMl0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVszXSk7Ci0KLSAg
ICAgICAgICAgICAgICBmbG9hdCBhbnRpYWxpYXNWYWx1ZUZvckJvdW5kaW5nUmVjdCA9IAotICAg
ICAgICAgICAgICAgICAgICBhbnRpYWxpYXNRdWFkKHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVl
blNwYWNlWzRdLAotICAgICAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2VbNV0sCi0gICAgICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVk
Z2VzSW5TY3JlZW5TcGFjZVs2XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRR
dWFkRWRnZXNJblNjcmVlblNwYWNlWzddKTsKLQotICAgICAgICAgICAgICAgIHJldHVybiBtaW4o
YW50aWFsaWFzVmFsdWVGb3JRdWFkLCBhbnRpYWxpYXNWYWx1ZUZvckJvdW5kaW5nUmVjdCk7ICAg
ICAgICAgICAKKyAgICAgICAgdm9pZCBhcHBseUFscGhhQmx1cihpbm91dCB2ZWM0IGNvbG9yKQor
ICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhQXRSYWRpdXMo
MC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBp
IDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgeworICAgICAgICAgICAgICAgIHRv
dGFsICs9IHNhbXBsZUFscGhhQXRSYWRpdXMoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RF
UCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOworICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBs
ZUFscGhhQXRSYWRpdXMoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVf
Z2F1c3NpYW5LZXJuZWxbaV07CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHZvaWQgbWFp
bigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjNCBzYW1wbGVkQ29sb3IgPSB0
ZXh0dXJlMkQoc19zYW1wbGVyLCBjbGFtcCh2X3NvdXJjZVRleENvb3JkLCAwLjAsIDEuMCkpOwot
ICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNhbXBsZWRDb2xvciAqIHVfb3BhY2l0eSAq
IGFudGlhbGlhcygpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNv
bnN0IGNoYXIqIGZyYWdtZW50UmVjdFNpbXBsZSA9Ci0gICAgICAgIFNUUklOR0lGWSgKLSAgICAg
ICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICAgICAgdW5pZm9ybSBzYW1w
bGVyMkRSZWN0IHNfc2FtcGxlcjsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5
OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgICAg
ICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IGNv
bG9yID0gdGV4dHVyZTJEUmVjdChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29vcmQpOwotICAgICAg
ICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogdV9vcGFjaXR5LCBjb2xv
ci5hICogdV9vcGFjaXR5KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaW1wbGUgPQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAg
ICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0gICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVf
ZmxpcDsKLSAgICAgICAgICAgIHVuaWZvcm0gdmVjMiB1X3RleHR1cmVTaXplOwotICAgICAgICAg
ICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9z
b3VyY2VUZXhDb29yZDsKLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHZfc291cmNlVGV4Q29vcmQgPSB2ZWMyKGFfdmVydGV4LngsIG1p
eChhX3ZlcnRleC55LCAxLiAtIGFfdmVydGV4LnksIHVfZmxpcCkpICogdV90ZXh0dXJlU2l6ZTsK
LSAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U29s
aWRDb2xvciA9Ci0gICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgIHVuaWZvcm0gbWF0NCB1
X21hdHJpeDsKLSAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICAg
ICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2xfUG9z
aXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OwotICAgICAgICAgICAgfQotICAgICAgICApOwot
Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTb2xpZENvbG9yID0KLSAgICAgICAg
U1RSSU5HSUZZKAotICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAg
ICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsKLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHVfY29sb3I7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4
RmlsdGVyID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQg
YV92ZXJ0ZXg7Ci0gICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3RleENvb3JkOwotICAgICAg
ICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICB2b2lkIG1haW4odm9p
ZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2X3RleENvb3JkID0gdmVjMihhX3Rl
eENvb3JkKTsKLSAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IGFfdmVydGV4OwotICAgICAg
ICAgICAgfQotICAgICAgICApOwotCi0jZGVmaW5lIFNUQU5EQVJEX0ZJTFRFUiguLi4pIFwKLSAg
ICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xuIlwKLSAgICAgICAgInZhcnlpbmcgdmVj
MiB2X3RleENvb3JkO1xuIlwKLSAgICAgICAgInVuaWZvcm0gZmxvYXQgdV9hbW91bnQ7XG4iXAot
ICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyO1xuIiNfX1ZBX0FSR1NfXyBcCi0g
ICAgICAgICJ2b2lkIG1haW4odm9pZClcbiB7IGdsX0ZyYWdDb2xvciA9IHNoYWRlKHRleHR1cmUy
RChzX3NhbXBsZXIsIHZfdGV4Q29vcmQpKTsgfSIKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudEdyYXlzY2FsZUZpbHRlciA9Ci0gICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKLSAgICAg
ICAgICAgIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OwotICAgICAgICAgICAgICAg
IHJldHVybiB2ZWM0KCgwLjIxMjYgKyAwLjc4NzQgKiBhbW91bnQpICogY29sb3IuciArICgwLjcx
NTIgLSAwLjcxNTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91
bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4y
MTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyICsgMC4yODQ4ICogYW1vdW50KSAqIGNv
bG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsg
KDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiArIDAuOTI3OCAq
IGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEp
OwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZy
YWdtZW50U2VwaWFGaWx0ZXIgPQotICAgICAgICBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAg
ICB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKLSAgICAgICAgICAgICAgICByZXR1
cm4gdmVjNCgoMC4zOTMgKyAwLjYwNyAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzY5IC0gMC43
NjkgKiBhbW91bnQpICogY29sb3IuZyArICgwLjE4OSAtIDAuMTg5ICogYW1vdW50KSAqIGNvbG9y
LmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMzQ5IC0gMC4zNDkgKiBhbW91bnQp
ICogY29sb3IuciArICgwLjY4NiArIDAuMzE0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xNjgg
LSAwLjE2OCAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC41MzQgLSAwLjUzNCAqIGFt
b3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44NjkgKiBhbW91bnQpICogY29sb3IuYiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNhdHVyYXRlRmlsdGVyID0K
LSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZl
YzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAu
MjEzICsgMC43ODcgKiB1X2Ftb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2Ft
b3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBjb2xvci5iLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9hbW91bnQpICog
Y29sb3IuciArICgwLjcxNSArIDAuMjg1ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiAt
IDAuMDcyICogdV9hbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoMC4yMTMgLSAwLjIxMyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAq
IHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgKyAwLjkyOCAqIHVfYW1vdW50KSAqIGNvbG9y
LmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRIdWVSb3RhdGVG
aWx0ZXIgPQotICAgICAgICBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICB2ZWM0IHNoYWRl
KGxvd3AgdmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBw
aSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7Ci0gICAgICAgICAgICAgICAgZmxvYXQgYyA9IGNv
cyh1X2Ftb3VudCAqIHBpIC8gMTgwLjApOwotICAgICAgICAgICAgICAgIGZsb2F0IHMgPSBzaW4o
dV9hbW91bnQgKiBwaSAvIDE4MC4wKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xv
ci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAqIDAuMjEzKSArIGNvbG9yLmcgKiAoMC43MTUg
LSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiAr
IHMgKiAwLjkyOCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuciAqICgwLjIx
MyAtIGMgKiAwLjIxMyArIHMgKiAwLjE0MykgKyBjb2xvci5nICogKDAuNzE1ICsgYyAqIDAuMjg1
ICsgcyAqIDAuMTQwKSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgLSBzICogMC4yODMp
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4y
MTMgLSBzICogMC43ODcpICsgIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgKyBzICogMC43
MTUpICsgY29sb3IuYiAqICgwLjA3MiArIGMgKiAwLjkyOCArIHMgKiAwLjA3MiksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7
Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRJbnZlcnRGaWx0ZXIgPQotICAgICAg
ICBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBmbG9hdCBpbnZlcnQobG93cCBmbG9hdCBu
KSB7IHJldHVybiAoMS4wIC0gbikgKiB1X2Ftb3VudCArIG4gKiAoMS4wIC0gdV9hbW91bnQpOyB9
Ci0gICAgICAgICAgICB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChpbnZlcnQoY29sb3IuciksIGludmVydChjb2xv
ci5nKSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5hKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
KTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEJyaWdodG5lc3NGaWx0ZXIgPQot
ICAgICAgICBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICB2ZWM0IHNoYWRlKGxvd3AgdmVj
NCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb2xv
ci5yZ2IgKiAoMS4wICsgdV9hbW91bnQpLCBjb2xvci5hKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudENvbnRyYXN0RmlsdGVyID0K
LSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgZmxvYXQgY29udHJhc3QobG93
cCBmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2Ftb3VudCArIDAuNTsgfQotICAgICAg
ICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3QoY29sb3IuciksIGNvbnRyYXN0KGNvbG9yLmcp
LCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7
Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRPcGFjaXR5RmlsdGVyID0KLSAgICAg
ICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29s
b3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3Iuciwg
Y29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVfYW1vdW50KTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgKTsKLQotI2RlZmluZSBCTFVSX0NPTlNUQU5UUyAiI2RlZmluZSBHQVVTU0lBTl9LRVJO
RUxfSEFMRl9XSURUSCAxMVxuI2RlZmluZSBHQVVTU0lBTl9LRVJORUxfU1RFUCAwLjJcbiIKLQot
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEJsdXJGaWx0ZXIgPQotICAgICAgICBCTFVS
X0NPTlNUQU5UUwotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICAvLyBDcmVhdGUgYSBu
b3JtYWwgZGlzdHJpYnV0aW9uIG9mIDIxIHZhbHVlcyBiZXR3ZWVuIC0yIGFuZCAyLgotICAgICAg
ICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIg
dl90ZXhDb29yZDsKLSAgICAgICAgICAgIHVuaWZvcm0gdmVjMiB1X2JsdXJSYWRpdXM7Ci0gICAg
ICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7Ci0gICAgICAgICAgICB1bmlmb3Jt
IGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwotCi0g
ICAgICAgICAgICB2ZWM0IHNhbXBsZUNvbG9yKGZsb2F0IHJhZGl1cykKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCArIHJhZGl1cyAqIHVfYmx1
clJhZGl1czsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxlciwgY29v
cmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4g
JiYgY29vcmQueSA8IDEuKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmVjNCBibHVy
KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IHRvdGFsID0gc2FtcGxlQ29s
b3IoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBp
ID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAgICAg
ICAgICAgICAgdG90YWwgKz0gc2FtcGxlQ29sb3IoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxf
U1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAgICB0b3RhbCAr
PSBzYW1wbGVDb2xvcihmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9n
YXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdG90YWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lk
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IGJsdXIoKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFn
bWVudFNoYWRvd0ZpbHRlcjEgPQotICAgICAgICBCTFVSX0NPTlNUQU5UUwotICAgICAgICBTVFJJ
TkdJRlkoCi0gICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAg
IHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2Js
dXJSYWRpdXM7Ci0gICAgICAgICAgICB1bmlmb3JtIHZlYzIgdV9zaGFkb3dPZmZzZXQ7Ci0gICAg
ICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7Ci0gICAgICAgICAgICB1bmlmb3Jt
IGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwotCi0g
ICAgICAgICAgICBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByYWRpdXMpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgLSB1X3NoYWRvd09mZnNl
dCArIHZlYzIocmFkaXVzICogdV9ibHVyUmFkaXVzLCAwLik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIHRleHR1cmUyRChzX3NhbXBsZXIsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAuICYm
IGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgZmxvYXQgc2hhZG93Qmx1ckhvcml6b250YWwoKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMC4pICog
dV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8
IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAg
dG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1
X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVB
bHBoYShmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktl
cm5lbFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdG90
YWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4sIDEuLCAxLiwg
MS4pICogc2hhZG93Qmx1ckhvcml6b250YWwoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsK
LQotICAgIC8vIFNlY29uZCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyIGFuZCBjb21wb3NpdGUg
d2l0aCBvcmlnaW4uCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZG93RmlsdGVy
MiA9Ci0gICAgICAgIEJMVVJfQ09OU1RBTlRTCi0gICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAg
ICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZf
dGV4Q29vcmQ7Ci0gICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfYmx1clJhZGl1czsKLSAgICAg
ICAgICAgIHVuaWZvcm0gdmVjNCB1X3NoYWRvd0NvbG9yOwotICAgICAgICAgICAgdW5pZm9ybSBz
YW1wbGVyMkQgc19zYW1wbGVyOwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19jb250
ZW50VGV4dHVyZTsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtH
QVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07Ci0KLSAgICAgICAgICAgIGZsb2F0IHNhbXBsZUFs
cGhhKGZsb2F0IHIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9
IHZfdGV4Q29vcmQgKyB2ZWMyKDAuLCByICogdV9ibHVyUmFkaXVzKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxlciwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4g
MC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBmbG9hdCBzaGFkb3dCbHVyVmVydGljYWwoKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMC4p
ICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsg
aSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkg
KiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1w
bGVBbHBoYShmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lh
bktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
dG90YWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZlYzQgc291cmNlT3Zlcihsb3dw
IHZlYzQgc291cmNlLCB2ZWM0IGRlc3RpbmF0aW9uKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIC8vIENvbXBvc2l0ZSB0aGUgc2hhZG93IHdpdGggdGhlIG9yaWdpbmFsIHRleHR1cmUu
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZSArIGRlc3RpbmF0aW9uICogKDEuIC0gc291
cmNlLmEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBzb3VyY2VPdmVyKHRl
eHR1cmUyRChzX2NvbnRlbnRUZXh0dXJlLCB2X3RleENvb3JkKSwgc2hhZG93Qmx1clZlcnRpY2Fs
KCkgKiB1X3NoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIGlm
IChzcGVjcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3BlY3MucmVzaXplKFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpMYXN0RmlsdGVyKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OkRlZmF1bHRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50
U2ltcGxlKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNvbGlk
Q29sb3JdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTb2xpZENvbG9yLCBmcmFnbWVudFNvbGlkQ29sb3Ip
OwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdF0gPSBTaGFk
ZXJTcGVjKHZlcnRleFNpbXBsZSwgZnJhZ21lbnRSZWN0U2ltcGxlKTsKLSAgICAgICAgc3BlY3Nb
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZF0gPSBTaGFkZXJTcGVjKHZlcnRleE9w
YWNpdHlBbmRNYXNrLCBmcmFnbWVudE9wYWNpdHlBbmRNYXNrKTsKLSAgICAgICAgc3BlY3NbVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZFJlY3RdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhP
cGFjaXR5QW5kTWFzaywgZnJhZ21lbnRSZWN0T3BhY2l0eUFuZE1hc2spOwotICAgICAgICBzcGVj
c1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzZWRdID0gU2hhZGVyU3BlYyh2
ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50QW50aWFsaWFzaW5nTm9NYXNrKTsKLSAgICAgICAgc3BlY3Nb
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRlcl0gPSBTaGFkZXJTcGVj
KHZlcnRleEZpbHRlciwgZnJhZ21lbnRHcmF5c2NhbGVGaWx0ZXIpOwotICAgICAgICBzcGVjc1tU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2VwaWFGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0
ZXhGaWx0ZXIsIGZyYWdtZW50U2VwaWFGaWx0ZXIpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6U2F0dXJhdGVGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0
ZXIsIGZyYWdtZW50U2F0dXJhdGVGaWx0ZXIpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6SHVlUm90YXRlRmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVy
LCBmcmFnbWVudEh1ZVJvdGF0ZUZpbHRlcik7Ci0gICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpCcmlnaHRuZXNzRmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVy
LCBmcmFnbWVudEJyaWdodG5lc3NGaWx0ZXIpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6Q29udHJhc3RGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIs
IGZyYWdtZW50Q29udHJhc3RGaWx0ZXIpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6SW52ZXJ0RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFn
bWVudEludmVydEZpbHRlcik7Ci0gICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpPcGFjaXR5RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudE9w
YWNpdHlGaWx0ZXIpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
Qmx1ckZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRCbHVyRmlsdGVy
KTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRl
clBhc3MxXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNoYWRvd0ZpbHRlcjEp
OwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZG93RmlsdGVy
UGFzczJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2hhZG93RmlsdGVyMik7
Ci0gICAgfQotCi0gICAgQVNTRVJUKHNwZWNzLnNpemUoKSA+IGtleSk7Ci0gICAgU2hhZGVyU3Bl
YyYgc3BlYyA9IHNwZWNzW2tleV07Ci0gICAgdmVydGV4U291cmNlID0gc3BlYy52ZXJ0ZXhTaGFk
ZXI7Ci0gICAgZnJhZ21lbnRTb3VyY2UgPSBzcGVjLmZyYWdtZW50U2hhZGVyOworICAgICAgICAg
ICAgY29sb3IgKj0gdG90YWw7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5Q29udGVu
dFRleHR1cmUoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgdmVjNCBz
b3VyY2UgPSB0ZXh0dXJlMkQoc19jb250ZW50VGV4dHVyZSwgdl90ZXhDb29yZCk7CisgICAgICAg
ICAgICAvLyBDb21wb3NpdGUgdGhlIHNoYWRvdyB3aXRoIHRoZSBvcmlnaW5hbCB0ZXh0dXJlLgor
ICAgICAgICAgICAgY29sb3IgPSBzb3VyY2UgKyBjb2xvciAqICgxLiAtIHNvdXJjZS5hKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgYXBwbHlTb2xpZENvbG9yKGlub3V0IHZlYzQgY29sb3Ip
CisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbG9yICo9IHVfY29sb3I7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmVjNCBjb2xv
ciA9IHZlYzQoMS4sIDEuLCAxLiwgMS4pOworICAgICAgICAgICAgYXBwbHlUZXh0dXJlSWZOZWVk
ZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlTb2xpZENvbG9ySWZOZWVkZWQoY29sb3IpOwor
ICAgICAgICAgICAgYXBwbHlBbnRpYWxpYXNJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBh
cHBseU1hc2tJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseU9wYWNpdHlJZk5lZWRl
ZChjb2xvcik7CisgICAgICAgICAgICBhcHBseUdyYXlzY2FsZUZpbHRlcklmTmVlZGVkKGNvbG9y
KTsKKyAgICAgICAgICAgIGFwcGx5U2VwaWFGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAg
ICAgICBhcHBseVNhdHVyYXRlRmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBw
bHlIdWVSb3RhdGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseUludmVy
dEZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5QnJpZ2h0bmVzc0ZpbHRl
cklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5Q29udHJhc3RGaWx0ZXJJZk5lZWRl
ZChjb2xvcik7CisgICAgICAgICAgICBhcHBseU9wYWNpdHlGaWx0ZXJJZk5lZWRlZChjb2xvcik7
CisgICAgICAgICAgICBhcHBseUJsdXJGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAg
ICBhcHBseUFscGhhQmx1cklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5Q29udGVu
dFRleHR1cmVJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBjb2xv
cjsKKyAgICAgICAgfQorICAgICk7CisKKworc3RhdGljIHZvaWQgZ2V0U2hhZGVyU3BlYyhUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zLCBTdHJpbmcmIHZlcnRleFNv
dXJjZSwgU3RyaW5nJiBmcmFnbWVudFNvdXJjZSkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGZyYWdt
ZW50QnVpbGRlcjsKKyNkZWZpbmUgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFwcGxpZXIpIFwK
KyAgICBpZiAob3B0aW9ucyAmIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBcHBsaWVyKSBc
CisgICAgICAgIGZyYWdtZW50QnVpbGRlci5hcHBlbmQoRU5BQkxFX0FQUExJRVIoQXBwbGllcikp
OworCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE1hdHJpeCkKKyAgICBTRVRfQVBQTElF
Ul9GUk9NX09QVElPTlMoVGV4dHVyZSkKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoUmVj
dCkKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU29saWRDb2xvcikKKyAgICBTRVRfQVBQ
TElFUl9GUk9NX09QVElPTlMoT3BhY2l0eSkKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMo
TWFzaykKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQW50aWFsaWFzKQorICAgIFNFVF9B
UFBMSUVSX0ZST01fT1BUSU9OUyhHcmF5c2NhbGVGaWx0ZXIpCisgICAgU0VUX0FQUExJRVJfRlJP
TV9PUFRJT05TKFNlcGlhRmlsdGVyKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTYXR1
cmF0ZUZpbHRlcikKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoSHVlUm90YXRlRmlsdGVy
KQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhCcmlnaHRuZXNzRmlsdGVyKQorICAgIFNF
VF9BUFBMSUVSX0ZST01fT1BUSU9OUyhDb250cmFzdEZpbHRlcikKKyAgICBTRVRfQVBQTElFUl9G
Uk9NX09QVElPTlMoSW52ZXJ0RmlsdGVyKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhP
cGFjaXR5RmlsdGVyKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhCbHVyRmlsdGVyKQor
ICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBbHBoYUJsdXIpCisgICAgU0VUX0FQUExJRVJf
RlJPTV9PUFRJT05TKENvbnRlbnRUZXh0dXJlKQorCisgICAgZnJhZ21lbnRCdWlsZGVyLmFwcGVu
ZChmcmFnbWVudFRlbXBsYXRlKTsKKyAgICB2ZXJ0ZXhTb3VyY2UgPSB2ZXJ0ZXhTaGFkZXJTb3Vy
Y2U7CisgICAgZnJhZ21lbnRTb3VyY2UgPSBmcmFnbWVudEJ1aWxkZXIudG9TdHJpbmcoKTsKIH0K
IAogVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
KEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0KQpAQCAtNTM0LDE3ICszOTgsMTcgQEAgVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6On5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpCiB7CiB9
CiAKLVBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQcm9ncmFtKFNoYWRlcktleSBrZXkpCitQYXNzUmVmUHRy
PFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
Z2V0U2hhZGVyUHJvZ3JhbShPcHRpb25zIG9wdGlvbnMpCiB7Ci0gICAgVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW1NYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9ncmFtcy5maW5kKGtleSk7CisgICAg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA6Oml0ZXJhdG9yIGl0ID0gbV9wcm9ncmFtcy5m
aW5kKG9wdGlvbnMpOwogICAgIGlmIChpdCAhPSBtX3Byb2dyYW1zLmVuZCgpKQogICAgICAgICBy
ZXR1cm4gaXQtPnZhbHVlOwogCiAgICAgU3RyaW5nIHZlcnRleFNoYWRlcjsKICAgICBTdHJpbmcg
ZnJhZ21lbnRTaGFkZXI7Ci0gICAgZ2V0U2hhZGVyU3BlYyhrZXksIHZlcnRleFNoYWRlciwgZnJh
Z21lbnRTaGFkZXIpOworICAgIGdldFNoYWRlclNwZWMob3B0aW9ucywgdmVydGV4U2hhZGVyLCBm
cmFnbWVudFNoYWRlcik7CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBw
cm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OmNyZWF0ZShtX2NvbnRleHQsIHZl
cnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpOwotICAgIG1fcHJvZ3JhbXMuYWRkKGtleSwgcHJv
Z3JhbSk7CisgICAgbV9wcm9ncmFtcy5hZGQob3B0aW9ucywgcHJvZ3JhbSk7CiAgICAgcmV0dXJu
IHByb2dyYW07CiB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaApp
bmRleCA2MDYwNWY0MmQwZTMyMzg3YzQyYTRmZGQwNTMxNDI3ZTA0YWQ3MjJhLi42MDdlZDQ3YTUz
MzA2NDFkM2U5MjgyZTNkMTNmYzZhMTViYzUwOGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuaApAQCAtNTksMTAgKzU5LDkgQEAgcHVibGljOgogICAgIFRFWE1BUF9E
RUNMQVJFX1NBTVBMRVIobWFzaykKIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBURVhN
QVBfREVDTEFSRV9VTklGT1JNKGFtb3VudCkKKyAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGZp
bHRlckFtb3VudCkKICAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKGdhdXNzaWFuS2VybmVsKQog
ICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oYmx1clJhZGl1cykKLSAgICBURVhNQVBfREVDTEFS
RV9VTklGT1JNKHNoYWRvd0NvbG9yKQogICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oc2hhZG93
T2Zmc2V0KQogICAgIFRFWE1BUF9ERUNMQVJFX1NBTVBMRVIoY29udGVudFRleHR1cmUpCiAjZW5k
aWYKQEAgLTgyLDM2ICs4MSwzNyBAQCBwcml2YXRlOgogCiBjbGFzcyBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlciB7CiBwdWJsaWM6Ci0gICAgZW51bSBTaGFkZXJLZXkgewotICAgICAgICBJbnZh
bGlkID0gMCwKLSAgICAgICAgRGVmYXVsdCwKLSAgICAgICAgUmVjdCwKLSAgICAgICAgTWFza2Vk
LAotICAgICAgICBNYXNrZWRSZWN0LAotICAgICAgICBTb2xpZENvbG9yLAotICAgICAgICBBbnRp
YWxpYXNlZCwKLSAgICAgICAgR3JheXNjYWxlRmlsdGVyLAotICAgICAgICBTZXBpYUZpbHRlciwK
LSAgICAgICAgU2F0dXJhdGVGaWx0ZXIsCi0gICAgICAgIEh1ZVJvdGF0ZUZpbHRlciwKLSAgICAg
ICAgQnJpZ2h0bmVzc0ZpbHRlciwKLSAgICAgICAgQ29udHJhc3RGaWx0ZXIsCi0gICAgICAgIE9w
YWNpdHlGaWx0ZXIsCi0gICAgICAgIEludmVydEZpbHRlciwKLSAgICAgICAgQmx1ckZpbHRlciwK
LSAgICAgICAgU2hhZG93RmlsdGVyUGFzczEsCi0gICAgICAgIFNoYWRvd0ZpbHRlclBhc3MyLAot
ICAgICAgICBMYXN0RmlsdGVyCisgICAgZW51bSBPcHRpb24geworICAgICAgICBNYXRyaXggICAg
ICAgICAgID0gMUwgPDwgMCwKKyAgICAgICAgVGV4dHVyZSAgICAgICAgICA9IDFMIDw8IDEsCisg
ICAgICAgIFJlY3QgICAgICAgICAgICAgPSAxTCA8PCAyLAorICAgICAgICBTb2xpZENvbG9yICAg
ICAgID0gMUwgPDwgMywKKyAgICAgICAgT3BhY2l0eSAgICAgICAgICA9IDFMIDw8IDQsCisgICAg
ICAgIE1hc2sgICAgICAgICAgICAgPSAxTCA8PCA1LAorICAgICAgICBBbnRpYWxpYXMgICAgICAg
ID0gMUwgPDwgNiwKKyAgICAgICAgR3JheXNjYWxlRmlsdGVyICA9IDFMIDw8IDcsCisgICAgICAg
IFNlcGlhRmlsdGVyICAgICAgPSAxTCA8PCA4LAorICAgICAgICBTYXR1cmF0ZUZpbHRlciAgID0g
MUwgPDwgOSwKKyAgICAgICAgSHVlUm90YXRlRmlsdGVyICA9IDFMIDw8IDEwLAorICAgICAgICBC
cmlnaHRuZXNzRmlsdGVyID0gMUwgPDwgMTEsCisgICAgICAgIENvbnRyYXN0RmlsdGVyICAgPSAx
TCA8PCAxMiwKKyAgICAgICAgSW52ZXJ0RmlsdGVyICAgICA9IDFMIDw8IDEzLAorICAgICAgICBP
cGFjaXR5RmlsdGVyICAgID0gMUwgPDwgMTQsCisgICAgICAgIEJsdXJGaWx0ZXIgICAgICAgPSAx
TCA8PCAxNSwKKyAgICAgICAgQWxwaGFCbHVyICAgICAgICA9IDFMIDw8IDE2LAorICAgICAgICBD
b250ZW50VGV4dHVyZSAgID0gMUwgPDwgMTcKICAgICB9OwogCisgICAgdHlwZWRlZiB1bnNpZ25l
ZCBPcHRpb25zOworCiAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKSB7IH0KICAgICBl
eHBsaWNpdCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGljc0NvbnRleHQzRCopOwog
ICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCk7CiAKLSAgICBQYXNzUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFkZXJQcm9ncmFtKFNoYWRlcktl
eSk7CisgICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gZ2V0U2hhZGVy
UHJvZ3JhbShPcHRpb25zKTsKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8U2hhZGVy
S2V5LCBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+LCBEZWZhdWx0SGFzaDxpbnQ+
OjpIYXNoLCBIYXNoVHJhaXRzPGludD4gPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8T3B0aW9ucywgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtPiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwogICAgIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtTWFwIG1fcHJvZ3JhbXM7CiAgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBtX2NvbnRleHQ7CiB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>179100</attachid>
            <date>2012-12-12 12:20:23 -0800</date>
            <delta_ts>2012-12-17 16:44:16 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104815-20121212121751.patch</filename>
            <type>text/plain</type>
            <size>16244</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3NDY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjgwZDQzMzdiOTZiZjE3
N2EzOTUwYmU4OTBmNTRjN2ZiNjQ2ZDgxMC4uNzRlOTMxM2U2NTUwZDU2NjAyYzQ5Njc3ZDUyNmE1
NGE0MzI0YTY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE5IEBACiAyMDEyLTEyLTExICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CiAKKyAgICAgICAgW1RleG1hcF0gUmVtb3Zl
IGxvd3AvaGlnaHAgaW5kaWNhdG9ycyBhcyB0aGV5J3JlIG5vdCBuZWVkZWQgd2l0aCBBTkdMRS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDcwNwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGxvd3AvaGln
aHAgaW5kaWNhdG9yIHdlcmUgbmVlZGVkIGZvciBHTEVTMiwgYnV0IEFOR0xFIGRvZXMgbm90IHJl
cXVpcmUgdGhlbS4KKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmdldFNoYWRlclNwZWMpOgorCisyMDEyLTEyLTExICBO
bydhbSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKICAgICAgICAgW1RleG1hcF0gQ29u
c29saWRhdGUgcmVkdW5kYW50IGNvZGUgZm9yIEFSQl9SRUNUIHRleHR1cmUKICAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwNDcwNQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAppbmRleCBlMDRmODU4NzM1YTBlZjA4OTMy
YmUwMWNjNTY0NjljNDRjY2M1MGI4Li4yMTc1NjIwYWUxN2Y0M2VmYzQ4MWZhNTY3MzgzN2JmN2Ex
NjhmYzI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKQEAg
LTEyNCwxNCArMTI0LDE0IEBAIHN0YXRpYyB2b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBrZXksIFN0cmluZyYgdmVyCiAgICAgICAgICAgICBw
cmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNf
c2FtcGxlcjsKICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfbWFzazsKLSAgICAgICAg
ICAgIHVuaWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgICAgICB2YXJ5aW5nIGhp
Z2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVj
MiB2X21hc2tUZXhDb29yZDsKKyAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5Owor
ICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB2
YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CiAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkK
ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJl
MkQoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKLSAgICAgICAgICAgICAgICBsb3dwIHZl
YzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpOwotICAgICAg
ICAgICAgICAgIGxvd3AgZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xv
ci5hOworICAgICAgICAgICAgICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoc19zYW1wbGVyLCB2
X3NvdXJjZVRleENvb3JkKTsKKyAgICAgICAgICAgICAgICB2ZWM0IG1hc2tDb2xvciA9IHRleHR1
cmUyRChzX21hc2ssIHZfbWFza1RleENvb3JkKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBmcmFn
bWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7CiAgICAgICAgICAgICAgICAgZ2xf
RnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJh
Z21lbnRBbHBoYSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICk7CkBAIC0xNDEsMTQgKzE0MSwx
NCBAQCBzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpTaGFkZXJLZXkga2V5LCBTdHJpbmcmIHZlcgogICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7CiAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zYW1wbGVyOwog
ICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfbWFzazsKLSAgICAgICAgICAgIHVu
aWZvcm0gbG93cCBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZl
YzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X21h
c2tUZXhDb29yZDsKKyAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OworICAgICAg
ICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB2YXJ5aW5n
IHZlYzIgdl9tYXNrVGV4Q29vcmQ7CiAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKICAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0
KHNfc2FtcGxlciwgdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAgbG93cCB2ZWM0
IG1hc2tDb2xvciA9IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7Ci0gICAg
ICAgICAgICAgICAgbG93cCBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0Nv
bG9yLmE7CisgICAgICAgICAgICAgICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zYW1w
bGVyLCB2X3NvdXJjZVRleENvb3JkKTsKKyAgICAgICAgICAgICAgICB2ZWM0IG1hc2tDb2xvciA9
IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7CisgICAgICAgICAgICAgICAg
ZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOwogICAgICAgICAg
ICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29s
b3IuYSAqIGZyYWdtZW50QWxwaGEpOwogICAgICAgICAgICAgfQogICAgICAgICApOwpAQCAtMTU2
LDExICsxNTYsMTEgQEAgc3RhdGljIHZvaWQgZ2V0U2hhZGVyU3BlYyhUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6U2hhZGVyS2V5IGtleSwgU3RyaW5nJiB2ZXIKICAgICBzdGF0aWMgY29uc3Qg
Y2hhciogdmVydGV4T3BhY2l0eUFuZE1hc2sgPQogICAgICAgICBTVFJJTkdJRlkoCiAgICAgICAg
ICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0gICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxv
YXQgdV9mbGlwOwotICAgICAgICAgICAgdW5pZm9ybSBsb3dwIHZlYzIgdV90ZXh0dXJlU2l6ZTsK
KyAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9mbGlwOworICAgICAgICAgICAgdW5pZm9ybSB2
ZWMyIHVfdGV4dHVyZVNpemU7CiAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsK
LSAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAgICAg
ICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfbWFza1RleENvb3JkOworICAgICAgICAgICAgdmFy
eWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9t
YXNrVGV4Q29vcmQ7CiAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICB2X3NvdXJjZVRleENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBtaXgo
YV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55LCB1X2ZsaXApKSAqIHVfdGV4dHVyZVNpemU7CkBA
IC0xNzMsMTEgKzE3MywxMSBAQCBzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5LCBTdHJpbmcmIHZlcgogICAgICAgICBTVFJJ
TkdJRlkoCiAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAgICAgICAg
IHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKLSAgICAgICAgICAgIHVuaWZvcm0gbG93cCBm
bG9hdCB1X29wYWNpdHk7Ci0gICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VU
ZXhDb29yZDsKKyAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OworICAgICAgICAg
ICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CiAgICAgICAgICAgICB2b2lkIG1haW4o
dm9pZCkKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBsb3dwIHZlYzQgY29sb3IgPSB0
ZXh0dXJlMkQoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKKyAgICAgICAgICAgICAgICB2
ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNfc2FtcGxlciwgdl9zb3VyY2VUZXhDb29yZCk7CiAgICAg
ICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiB1X29wYWNpdHksIGNv
bG9yLmEgKiB1X29wYWNpdHkpOwogICAgICAgICAgICAgfQogICAgICAgICApOwpAQCAtMTg2LDgg
KzE4Niw4IEBAIHN0YXRpYyB2b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlNoYWRlcktleSBrZXksIFN0cmluZyYgdmVyCiAgICAgICAgIFNUUklOR0lGWSgKICAg
ICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwogICAgICAgICAgICAgdW5pZm9ybSBz
YW1wbGVyMkQgc19zYW1wbGVyOwotICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfc291
cmNlVGV4Q29vcmQ7Ci0gICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5Owor
ICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB1
bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTsKICAgICAgICAgICAgIHVuaWZvcm0gdmVjMyB1X2V4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs4XTsKIAogICAgICAgICAgICAgICAgIC8vIFRoZSBk
YXRhIHBhc3NlZCBpbiB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZSBpcyBtZXJlbHkg
dGhlCkBAIC0yNDMsMTEgKzI0MywxMSBAQCBzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5LCBTdHJpbmcmIHZlcgogICAgICAg
ICBTVFJJTkdJRlkoCiAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKICAgICAg
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NhbXBsZXI7Ci0gICAgICAgICAgICB1bmlm
b3JtIGxvd3AgZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMy
IHZfc291cmNlVGV4Q29vcmQ7CisgICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTsK
KyAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3NvdXJjZVRleENvb3JkOwogICAgICAgICAgICAg
dm9pZCBtYWluKHZvaWQpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbG93cCB2ZWM0
IGNvbG9yID0gdGV4dHVyZTJEUmVjdChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29vcmQpOworICAg
ICAgICAgICAgICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkRSZWN0KHNfc2FtcGxlciwgdl9zb3Vy
Y2VUZXhDb29yZCk7CiAgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5y
Z2IgKiB1X29wYWNpdHksIGNvbG9yLmEgKiB1X29wYWNpdHkpOwogICAgICAgICAgICAgfQogICAg
ICAgICApOwpAQCAtMjU1LDEwICsyNTUsMTAgQEAgc3RhdGljIHZvaWQgZ2V0U2hhZGVyU3BlYyhU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZGVyS2V5IGtleSwgU3RyaW5nJiB2ZXIKICAg
ICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2ltcGxlID0KICAgICAgICAgU1RSSU5HSUZZKAog
ICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OwotICAgICAgICAgICAgdW5pZm9ybSBs
b3dwIGZsb2F0IHVfZmxpcDsKLSAgICAgICAgICAgIHVuaWZvcm0gbG93cCB2ZWMyIHVfdGV4dHVy
ZVNpemU7CisgICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmxpcDsKKyAgICAgICAgICAgIHVu
aWZvcm0gdmVjMiB1X3RleHR1cmVTaXplOwogICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92
ZXJ0ZXg7Ci0gICAgICAgICAgICB2YXJ5aW5nIGhpZ2hwIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsK
KyAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3NvdXJjZVRleENvb3JkOwogICAgICAgICAgICAg
dm9pZCBtYWluKHZvaWQpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdl9zb3VyY2VU
ZXhDb29yZCA9IHZlYzIoYV92ZXJ0ZXgueCwgbWl4KGFfdmVydGV4LnksIDEuIC0gYV92ZXJ0ZXgu
eSwgdV9mbGlwKSkgKiB1X3RleHR1cmVTaXplOwpAQCAtMjkxLDcgKzI5MSw3IEBAIHN0YXRpYyB2
b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBr
ZXksIFN0cmluZyYgdmVyCiAgICAgICAgIFNUUklOR0lGWSgKICAgICAgICAgICAgIGF0dHJpYnV0
ZSB2ZWM0IGFfdmVydGV4OwogICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV90ZXhDb29yZDsK
LSAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOworICAgICAgICAgICAg
dmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7CiAgICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICB2X3RleENvb3JkID0gdmVjMihhX3RleENvb3Jk
KTsKQEAgLTMwMSwxNiArMzAxLDE2IEBAIHN0YXRpYyB2b2lkIGdldFNoYWRlclNwZWMoVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBrZXksIFN0cmluZyYgdmVyCiAKICNkZWZp
bmUgU1RBTkRBUkRfRklMVEVSKC4uLikgXAogICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7XG4iXAotICAgICAgICAidmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAotICAg
ICAgICAidW5pZm9ybSBoaWdocCBmbG9hdCB1X2Ftb3VudDtcbiJcCisgICAgICAgICJ2YXJ5aW5n
IHZlYzIgdl90ZXhDb29yZDtcbiJcCisgICAgICAgICJ1bmlmb3JtIGZsb2F0IHVfYW1vdW50O1xu
IlwKICAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjtcbiIjX19WQV9BUkdTX18g
XAogICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4geyBnbF9GcmFnQ29sb3IgPSBzaGFkZSh0ZXh0
dXJlMkQoc19zYW1wbGVyLCB2X3RleENvb3JkKSk7IH0iCiAKICAgICBzdGF0aWMgY29uc3QgY2hh
ciogZnJhZ21lbnRHcmF5c2NhbGVGaWx0ZXIgPQogICAgICAgICBTVEFOREFSRF9GSUxURVIoCi0g
ICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQorICAgICAgICAgICAg
dmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKKyAgICAgICAgICAgICAgICBm
bG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKICAgICAgICAgICAgICAgICByZXR1cm4gdmVj
NCgoMC4yMTI2ICsgMC43ODc0ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUy
ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9y
LmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3Vu
dCkgKiBjb2xvci5yICsgKDAuNzE1MiArIDAuMjg0OCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAu
MDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAw
LjcxNTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgKyAwLjkyNzggKiBhbW91bnQpICog
Y29sb3IuYiwKQEAgLTMyMCw5ICszMjAsOSBAQCBzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5LCBTdHJpbmcmIHZlcgogCiAg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2VwaWFGaWx0ZXIgPQogICAgICAgICBTVEFO
REFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9y
KQorICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgbG93cCBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKKyAg
ICAgICAgICAgICAgICBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3VudDsKICAgICAgICAgICAg
ICAgICByZXR1cm4gdmVjNCgoMC4zOTMgKyAwLjYwNyAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAu
NzY5IC0gMC43NjkgKiBhbW91bnQpICogY29sb3IuZyArICgwLjE4OSAtIDAuMTg5ICogYW1vdW50
KSAqIGNvbG9yLmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMzQ5IC0gMC4zNDkg
KiBhbW91bnQpICogY29sb3IuciArICgwLjY4NiArIDAuMzE0ICogYW1vdW50KSAqIGNvbG9yLmcg
KyAoMC4xNjggLSAwLjE2OCAqIGFtb3VudCkgKiBjb2xvci5iLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC41MzQgLSAw
LjUzNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44NjkgKiBhbW91bnQpICogY29s
b3IuYiwKQEAgLTMzMiw3ICszMzIsNyBAQCBzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5LCBTdHJpbmcmIHZlcgogCiAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2F0dXJhdGVGaWx0ZXIgPQogICAgICAgICBTVEFO
REFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9y
KQorICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMjEzICsgMC43ODcgKiB1X2Ftb3VudCkg
KiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAuMDcy
IC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBjb2xvci5iLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgwLjIxMyAtIDAuMjEzICogdV9hbW91bnQpICogY29sb3IuciArICgwLjcxNSArIDAuMjg1
ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiAtIDAuMDcyICogdV9hbW91bnQpICogY29s
b3IuYiwKQEAgLTM0MywxMSArMzQzLDExIEBAIHN0YXRpYyB2b2lkIGdldFNoYWRlclNwZWMoVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBrZXksIFN0cmluZyYgdmVyCiAKICAg
ICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRIdWVSb3RhdGVGaWx0ZXIgPQogICAgICAgICBT
VEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNv
bG9yKQorICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCiAgICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgaGlnaHAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIz
ODQ2OwotICAgICAgICAgICAgICAgIGhpZ2hwIGZsb2F0IGMgPSBjb3ModV9hbW91bnQgKiBwaSAv
IDE4MC4wKTsKLSAgICAgICAgICAgICAgICBoaWdocCBmbG9hdCBzID0gc2luKHVfYW1vdW50ICog
cGkgLyAxODAuMCk7CisgICAgICAgICAgICAgICAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5
MzIzODQ2OworICAgICAgICAgICAgICAgIGZsb2F0IGMgPSBjb3ModV9hbW91bnQgKiBwaSAvIDE4
MC4wKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBzID0gc2luKHVfYW1vdW50ICogcGkgLyAxODAu
MCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciAqICgwLjIxMyArIGMgKiAw
Ljc4NyAtIHMgKiAwLjIxMykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1IC0gcyAqIDAu
NzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgKyBzICogMC45MjgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgKyBzICog
MC4xNDMpICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAwLjI4NSArIHMgKiAwLjE0MCkgKyBjb2xv
ci5iICogKDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzIC0gcyAqIDAuNzg3KSArICBj
b2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4w
NzIgKyBjICogMC45MjggKyBzICogMC4wNzIpLApAQCAtMzU3LDggKzM1Nyw4IEBAIHN0YXRpYyB2
b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBr
ZXksIFN0cmluZyYgdmVyCiAKICAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRJbnZlcnRG
aWx0ZXIgPQogICAgICAgICBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIGZsb2F0
IGludmVydChsb3dwIGZsb2F0IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAq
ICgxLjAgLSB1X2Ftb3VudCk7IH0KLSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZl
YzQgY29sb3IpCisgICAgICAgICAgICBmbG9hdCBpbnZlcnQobG93cCBmbG9hdCBuKSB7IHJldHVy
biAoMS4wIC0gbikgKiB1X2Ftb3VudCArIG4gKiAoMS4wIC0gdV9hbW91bnQpOyB9CisgICAgICAg
ICAgICB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICByZXR1cm4gdmVjNChpbnZlcnQoY29sb3IuciksIGludmVydChjb2xvci5nKSwgaW52
ZXJ0KGNvbG9yLmIpLCBjb2xvci5hKTsKICAgICAgICAgICAgIH0KQEAgLTM2Niw3ICszNjYsNyBA
QCBzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpT
aGFkZXJLZXkga2V5LCBTdHJpbmcmIHZlcgogCiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdt
ZW50QnJpZ2h0bmVzc0ZpbHRlciA9CiAgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAg
ICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICB2ZWM0IHNo
YWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICByZXR1
cm4gdmVjNChjb2xvci5yZ2IgKiAoMS4wICsgdV9hbW91bnQpLCBjb2xvci5hKTsKICAgICAgICAg
ICAgIH0KQEAgLTM3NCw4ICszNzQsOCBAQCBzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5LCBTdHJpbmcmIHZlcgogCiAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50Q29udHJhc3RGaWx0ZXIgPQogICAgICAgICBTVEFO
REFSRF9GSUxURVIoCi0gICAgICAgICAgICBsb3dwIGZsb2F0IGNvbnRyYXN0KGxvd3AgZmxvYXQg
bikgeyByZXR1cm4gKG4gLSAwLjUpICogdV9hbW91bnQgKyAwLjU7IH0KLSAgICAgICAgICAgIGxv
d3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAgICBmbG9hdCBjb250cmFz
dChsb3dwIGZsb2F0IG4pIHsgcmV0dXJuIChuIC0gMC41KSAqIHVfYW1vdW50ICsgMC41OyB9Cisg
ICAgICAgICAgICB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICByZXR1cm4gdmVjNChjb250cmFzdChjb2xvci5yKSwgY29udHJhc3QoY29s
b3IuZyksIGNvbnRyYXN0KGNvbG9yLmIpLCBjb2xvci5hKTsKICAgICAgICAgICAgIH0KQEAgLTM4
Myw3ICszODMsNyBAQCBzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5LCBTdHJpbmcmIHZlcgogCiAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGZyYWdtZW50T3BhY2l0eUZpbHRlciA9CiAgICAgICAgIFNUQU5EQVJEX0ZJTFRFUigK
LSAgICAgICAgICAgIGxvd3AgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCisgICAgICAgICAg
ICB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICByZXR1cm4gdmVjNChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5iLCBjb2xvci5hICogdV9h
bW91bnQpOwogICAgICAgICAgICAgfQpAQCAtMzk2LDEyICszOTYsMTIgQEAgc3RhdGljIHZvaWQg
Z2V0U2hhZGVyU3BlYyhUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZGVyS2V5IGtleSwg
U3RyaW5nJiB2ZXIKICAgICAgICAgU1RSSU5HSUZZKAogICAgICAgICAgICAgLy8gQ3JlYXRlIGEg
bm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiAyMSB2YWx1ZXMgYmV0d2VlbiAtMiBhbmQgMi4KICAgICAg
ICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICAgICAgdmFyeWluZyBoaWdo
cCB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICB1bmlmb3JtIGxvd3AgdmVjMiB1X2JsdXJS
YWRpdXM7CisgICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKKyAgICAgICAgICAg
IHVuaWZvcm0gdmVjMiB1X2JsdXJSYWRpdXM7CiAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIy
RCBzX3NhbXBsZXI7CiAgICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxb
R0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwogCi0gICAgICAgICAgICBsb3dwIHZlYzQgc2Ft
cGxlQ29sb3IoZmxvYXQgcmFkaXVzKQorICAgICAgICAgICAgdmVjNCBzYW1wbGVDb2xvcihmbG9h
dCByYWRpdXMpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZf
dGV4Q29vcmQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRleHR1cmUyRChzX3NhbXBsZXIsIGNvb3JkKSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29y
ZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CkBAIC00MjgsMTkgKzQy
OCwxOSBAQCBzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpTaGFkZXJLZXkga2V5LCBTdHJpbmcmIHZlcgogICAgICAgICBCTFVSX0NPTlNUQU5UUwog
ICAgICAgICBTVFJJTkdJRlkoCiAgICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsK
LSAgICAgICAgICAgIHZhcnlpbmcgaGlnaHAgdmVjMiB2X3RleENvb3JkOwotICAgICAgICAgICAg
dW5pZm9ybSBsb3dwIGZsb2F0IHVfYmx1clJhZGl1czsKLSAgICAgICAgICAgIHVuaWZvcm0gbG93
cCB2ZWMyIHVfc2hhZG93T2Zmc2V0OworICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29v
cmQ7CisgICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfYmx1clJhZGl1czsKKyAgICAgICAgICAg
IHVuaWZvcm0gdmVjMiB1X3NoYWRvd09mZnNldDsKICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxl
cjJEIHNfc2FtcGxlcjsKICAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5l
bFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07CiAKLSAgICAgICAgICAgIGxvd3AgZmxvYXQg
c2FtcGxlQWxwaGEoZmxvYXQgcmFkaXVzKQorICAgICAgICAgICAgZmxvYXQgc2FtcGxlQWxwaGEo
ZmxvYXQgcmFkaXVzKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZlYzIgY29vcmQg
PSB2X3RleENvb3JkIC0gdV9zaGFkb3dPZmZzZXQgKyB2ZWMyKHJhZGl1cyAqIHVfYmx1clJhZGl1
cywgMC4pOwogICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQoc19zYW1wbGVyLCBjb29y
ZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEu
ICYmIGNvb3JkLnkgPCAxLik7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGxvd3AgZmxv
YXQgc2hhZG93Qmx1ckhvcml6b250YWwoKQorICAgICAgICAgICAgZmxvYXQgc2hhZG93Qmx1ckhv
cml6b250YWwoKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0g
c2FtcGxlQWxwaGEoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKICAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKQEAg
LTQ2MiwyMCArNDYyLDIwIEBAIHN0YXRpYyB2b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBrZXksIFN0cmluZyYgdmVyCiAgICAgICAgIEJMVVJf
Q09OU1RBTlRTCiAgICAgICAgIFNUUklOR0lGWSgKICAgICAgICAgICAgIHByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OwotICAgICAgICAgICAgdmFyeWluZyBoaWdocCB2ZWMyIHZfdGV4Q29vcmQ7Ci0g
ICAgICAgICAgICB1bmlmb3JtIGxvd3AgZmxvYXQgdV9ibHVyUmFkaXVzOwotICAgICAgICAgICAg
dW5pZm9ybSBsb3dwIHZlYzQgdV9zaGFkb3dDb2xvcjsKKyAgICAgICAgICAgIHZhcnlpbmcgdmVj
MiB2X3RleENvb3JkOworICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2JsdXJSYWRpdXM7Cisg
ICAgICAgICAgICB1bmlmb3JtIHZlYzQgdV9zaGFkb3dDb2xvcjsKICAgICAgICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNf
Y29udGVudFRleHR1cmU7CiAgICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJu
ZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwogCi0gICAgICAgICAgICBsb3dwIGZsb2F0
IHNhbXBsZUFscGhhKGZsb2F0IHIpCisgICAgICAgICAgICBmbG9hdCBzYW1wbGVBbHBoYShmbG9h
dCByKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENv
b3JkICsgdmVjMigwLiwgciAqIHVfYmx1clJhZGl1cyk7CiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRleHR1cmUyRChzX3NhbXBsZXIsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNv
b3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKICAgICAgICAgICAg
IH0KIAotICAgICAgICAgICAgbG93cCBmbG9hdCBzaGFkb3dCbHVyVmVydGljYWwoKQorICAgICAg
ICAgICAgZmxvYXQgc2hhZG93Qmx1clZlcnRpY2FsKCkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxb
MF07CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxf
SEFMRl9XSURUSDsgaSsrKSB7CkBAIC00ODYsNyArNDg2LDcgQEAgc3RhdGljIHZvaWQgZ2V0U2hh
ZGVyU3BlYyhUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZGVyS2V5IGtleSwgU3RyaW5n
JiB2ZXIKICAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7CiAgICAgICAgICAgICB9CiAKLSAg
ICAgICAgICAgIGxvd3AgdmVjNCBzb3VyY2VPdmVyKGxvd3AgdmVjNCBzb3VyY2UsIGxvd3AgdmVj
NCBkZXN0aW5hdGlvbikKKyAgICAgICAgICAgIHZlYzQgc291cmNlT3Zlcihsb3dwIHZlYzQgc291
cmNlLCB2ZWM0IGRlc3RpbmF0aW9uKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIC8v
IENvbXBvc2l0ZSB0aGUgc2hhZG93IHdpdGggdGhlIG9yaWdpbmFsIHRleHR1cmUuCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIHNvdXJjZSArIGRlc3RpbmF0aW9uICogKDEuIC0gc291cmNlLmEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180074</attachid>
            <date>2012-12-18 18:37:32 -0800</date>
            <delta_ts>2012-12-18 21:27:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104815-20121218183506.patch</filename>
            <type>text/plain</type>
            <size>48469</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlMGI1YjdmNzIzNDgy
NDNhNmZkYTc4YTJhMjVkYTg4OWNmYjQwNS4uMjk2YTBiODA3ZTIwZTMyNjBmNzQxZmQ5ZTgxMzUw
ZWYzZDZiZmRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTEyLTEyICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gSW5zdGVh
ZCBvZiBoYXZpbmcgbXVsdGlwbGUgc2hhZGVycyBzb3VyY2VzIHdpdGggbG90cyBvZiBkdXBsaWNh
dGlvbiwgd2Ugc2hvdWxkIGhhdmUgb25lIHNoYWRlciBzb3VyY2Ugd2l0aCBNQUNSTyB2YXJpYW50
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0ODE1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRl
ZCB0ZW1wbGF0ZXMgZm9yIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMsIGFuZCBhZGRl
ZCBzb21lIE1BQ1JPcyBpbiAKKyAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgdG8g
YWxsb3cgR0xTTCBwcmVjb21waWxlci1iYXNlZCBjb25maWd1cmF0aW9uLgorCisgICAgICAgIFRo
ZSB0ZW1wbGF0ZSBmb2xsb3dzIGEgcGF0dGVybiB3aGVyZSB0aGUgbWFpbiBmdW5jdGlvbiBpbiB0
aGUgc2hhZGVyIGNhbGxzCisgICAgICAgIGFwcGx5Rm9vQmFySWZOZWVkZWQoKSwgd2hpbGUgYXBw
bHlGb29CYXIoKSBpcyBpbXBsZW1lbnRlZC4gVGhlIE1hY3JvcyBwcmVwZW5kZWQgdG8gdGhlIHRl
bXBsYXRlIGRlZmluZSB3aGV0aGVyIGFwcGx5SWZOZWVkZWQgcmVzb2x2ZXMgdG8gdGhlIHJlYWwg
ZnVuY3Rpb24gb3IgdG8gYSBub29wLgorCisgICAgICAgIEluIGFkZGl0aW9uLCBtYWRlIHNvbWUg
c21hbGwgY2hhbmdlcyB0byB0aGUgZmlsdGVyIHNoYWRlcnMgc28gdGhhdCB0aGV5IGNhbiB1c2Ug
dGhlIHNhbWUgY29kZSBhcyB0aGUgbm9ybWFsIHNoYWRlcnMuCisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyBwaXhlbC9yZWYgdGVzdHMgd2hlbiBydW4gb24gUXQvRUZML0dUSy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wdGlvbnNGb3JGaWx0ZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6cHJlcGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZUdMOjphcHBseUZpbHRlcnMpOgorICAgICAgICAgICAgQWx3YXlzIGRyYXcgdXNpbmcgdGhlIGRy
YXdRdWFkIGZ1bmN0aW9uLCBhbmQgdXNlIHRoZSBuZXcgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6Ok9wdGlvbnMgbWFzayBpbnN0ZWFkIG9mIHRoZSBvbGQgU2hhZGVyS2V5LgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVy
UHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6
CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisKIDIwMTItMTItMTggIExl
dmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIElucHV0IGVsZW1l
bnRzIHdpdGggZGVmYXVsdCB0b3VjaCBoYW5kbGVycyBkb24ndCB1cGRhdGUgaGFuZGxlciBjb3Vu
dHMgd2hlbiBjaGFuZ2luZyBkb2N1bWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggZGMx
ZjJkYjhmZWRiY2ZiYWYyNzgwZjJkZmE1OTMyMDE2MjE2MTc1Mi4uNThmYzI0MGZlYmQ2Njk3MmIx
MmE4ZTU4ZTk4MzJkZjYyNmY0YWRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTg1LDgg
Kzg1LDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRH
TERhdGEoY29udGV4dCkpOwogICAgICAgICB9CiAKLQotCiAgICAgICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCiAgICAgICAgIGV4cGxp
Y2l0IFNoYXJlZEdMRGF0YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKQEAgLTQxMywxNiAr
NDExLDE2IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2Jq
ZWN0IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJCiAgICAgaWYgKCF1c2VSZWN0ICYmIG5l
ZWRzQW50aWFsaWFzaW5nICYmIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh0ZXh0dXJlLCBm
bGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwg
bWFza1RleHR1cmUsIGV4cG9zZWRFZGdlcykpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5ID0gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OkRlZmF1bHQ7Ci0gICAgaWYgKG1hc2tlZCAmJiB1c2VSZWN0KQotICAgICAgICBr
ZXkgPSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFza2VkUmVjdDsKLSAgICBlbHNlIGlm
IChtYXNrZWQpCi0gICAgICAgIGtleSA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpNYXNr
ZWQ7Ci0gICAgZWxzZSBpZiAodXNlUmVjdCkKLSAgICAgICAga2V5ID0gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlJlY3Q7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlv
bnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlOworICAgIGlm
ICghIW1hc2tUZXh0dXJlKQorICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpNYXNrOworICAgIGlmIChmbGFncyAmIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0KQor
ICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0OworICAg
IGlmIChvcGFjaXR5IDwgMSkKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6T3BhY2l0eTsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bT4gcHJvZ3JhbTsKLSAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oa2V5KTsKKyAgICBwcm9ncmFtID0g
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRl
clByb2dyYW0ob3B0aW9ucyk7CiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+
cHJvZ3JhbUlEKCkpOwogCiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0u
Z2V0KCksIHRleHR1cmUsIGZsYWdzLCB0ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3
TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSk7CkBAIC01NjIsOCArNTYwLDExIEBAIGJvb2wg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4
dHVyZSwgRmxhZ3MgZmxhZ3MsCiAgICAgZmxvYXQgdGFyZ2V0UXVhZEVkZ2VzWzI0XTsKICAgICBx
dWFkVG9FZGdlQXJyYXkoZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSwgdGFyZ2V0UXVhZEVkZ2Vz
KTsKICAgICBxdWFkVG9FZGdlQXJyYXkoaW5mbGF0ZVF1YWQocXVhZEluU2NyZWVuU3BhY2UuYm91
bmRpbmdCb3goKSwgIGluZmxhdGlvbkRpc3RhbmNlKSwgdGFyZ2V0UXVhZEVkZ2VzICsgMTIpOwor
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OlRleHR1cmU7CisgICAgaWYgKG9wYWNpdHkgPCAxKQorICAgICAgICBvcHRpb25zIHw9IFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5OwogCi0gICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OkFudGlhbGlhc2VkKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBtX2NvbnRleHQzRC0+dXNl
UHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0z
ZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwg
dGFyZ2V0UXVhZEVkZ2VzKTsKIApAQCAtNzU2LDMyICs3NTcsMzMgQEAgdm9pZCBCaXRtYXBUZXh0
dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0
UmVjdCwgY28KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKIAotc3RhdGljIFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5Rm9yRmlsdGVyVHlwZShGaWx0ZXJPcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKK3N0YXRpYyBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zRm9yRmlsdGVyVHlwZShGaWx0ZXJPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKIHsKICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICBy
ZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRlcjsKKyAgICAg
ICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0VQSUE6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
U2VwaWFGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTZXBpYUZpbHRlcjsKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6U2F0dXJhdGVGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpTYXR1cmF0ZUZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToK
LSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpIdWVSb3RhdGVGaWx0
ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZSB8
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpIdWVSb3RhdGVGaWx0ZXI7CiAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpJbnZlcnRGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpJbnZlcnRG
aWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgICAgIHJl
dHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QnJpZ2h0bmVzc0ZpbHRlcjsKKyAgICAg
ICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OkJyaWdodG5lc3NGaWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkNPTlRSQVNUOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OkNvbnRyYXN0RmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Q29udHJhc3RGaWx0
ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIHJldHVybiBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUZpbHRlcjsKKyAgICAgICAgcmV0dXJu
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6Ok9wYWNpdHlGaWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6
CiAgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcjsK
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIHJldHVybiBw
YXNzID8gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MyIDogVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MxOworICAgICAgICByZXR1
cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkFscGhhQmx1cgorICAgICAgICAgICAgfCAo
cGFzcyA/IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpDb250ZW50VGV4dHVyZSB8IFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9yOiAwKTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpJbnZhbGlkOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKQEAg
LTg1MiwxMyArODU0LDEzIEBAIHN0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBGaWx0CiAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlNFUElBOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToK
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgY29udGV4dC0+
dW5pZm9ybTFmKHByb2dyYW0tPmFtb3VudExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAg
ICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmZpbHRlckFtb3VudExvY2F0aW9uKCks
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVy
YXRpb24pLmFtb3VudCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OklOVkVSVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
Ok9QQUNJVFk6Ci0gICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5hbW91bnRMb2Nh
dGlvbigpLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0x
Zihwcm9ncmFtLT5maWx0ZXJBbW91bnRMb2NhdGlvbigpLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAgICAg
ICAgIGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXIgPSBzdGF0aWNfY2FzdDxjb25zdCBC
bHVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKTsKQEAgLTg3OSwxOSArODgxLDIwIEBAIHN0
YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
KiBwcm9ncmFtLCBjb25zdCBGaWx0CiAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3Jh
bS0+Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1
c3NpYW5LZXJuZWwoKSk7CiAgICAgICAgIHN3aXRjaCAocGFzcykgewogICAgICAgICBjYXNlIDA6
Ci0gICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyLgorICAgICAg
ICAgICAgLy8gRmlyc3QgcGFzczogaG9yaXpvbnRhbCBhbHBoYSBibHVyLgorICAgICAgICAgICAg
Y29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCBzaGFkb3cu
c3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpLCAwKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnVuaWZvcm0yZihwcm9ncmFtLT5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCBmbG9hdChz
aGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hhZG93
LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwgc2hhZG93LnN0
ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhl
IHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0g
ICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0aW9u
KCksIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAg
ICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgICAgICAgICBzaGFkb3cuY29sb3IoKS5nZXRS
R0JBKHIsIGcsIGIsIGEpOworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0t
PmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlm
b3JtMmYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0aW9uKCksIDAsIHNoYWRvdy5zdGREZXZpYXRp
b24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZv
cm0yZihwcm9ncmFtLT5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCAwLCAwKTsKICAgICAgICAgICAg
IGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBjb250ZW50VGV4dHVyZSk7CiAgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMWkocHJv
Z3JhbS0+Y29udGVudFRleHR1cmVMb2NhdGlvbigpLCAxKTsKLSAgICAgICAgICAgIGZsb2F0IHIs
IGcsIGIsIGE7Ci0gICAgICAgICAgICBzaGFkb3cuY29sb3IoKS5nZXRSR0JBKHIsIGcsIGIsIGEp
OwotICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPnNoYWRvd0NvbG9yTG9j
YXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKQEAgLTk2MCwyNSArOTYzLDEzIEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpk
cmF3VXNpbmdDdXN0b21GaWx0ZXIoQml0bWFwVGV4dHVyZSYgdGFyZ2V0LCBjb25zdCBCaXRtYXBU
CiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUm
IHNhbXBsZXIsIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb24mIGZpbHRlciwgaW50IHBhc3MpCiB7CiAgICAgLy8gRm9yIHN0YW5kYXJkIGZp
bHRlcnMsIHdlIGFsd2F5cyBkcmF3IHRoZSB3aG9sZSB0ZXh0dXJlIHdpdGhvdXQgdHJhbnNmb3Jt
YXRpb25zLgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5ID0g
a2V5Rm9yRmlsdGVyVHlwZShmaWx0ZXIuZ2V0T3BlcmF0aW9uVHlwZSgpLCBwYXNzKTsKLSAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVk
R0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShrZXkp
OworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBvcHRp
b25zRm9yRmlsdGVyVHlwZShmaWx0ZXIuZ2V0T3BlcmF0aW9uVHlwZSgpLCBwYXNzKTsKKyAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVk
R0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRp
b25zKTsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKICAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShw
cm9ncmFtLmdldCgpLCBmaWx0ZXIsIHBhc3MsIHNhbXBsZXIuY29udGVudFNpemUoKSwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oY29udGVudFRleHR1cmUpLmlkKCkpOwotCi0g
ICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExv
Y2F0aW9uKCkpOwotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9n
cmFtLT50ZXhDb29yZExvY2F0aW9uKCkpOwotICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRt
YXBUZXh0dXJlR0wmPihzYW1wbGVyKS5pZCgpKTsKLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFp
KHByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpLCAwKTsKLSAgICBjb25zdCBHQzNEZmxvYXQgdGFy
Z2V0VmVydGljZXNbXSA9IHstMSwgLTEsIDEsIC0xLCAxLCAxLCAtMSwgMX07Ci0gICAgY29uc3Qg
R0MzRGZsb2F0IHNvdXJjZVZlcnRpY2VzW10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0g
ICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRp
b24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih0
YXJnZXRWZXJ0aWNlcykpOwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBy
b2dyYW0tPnRleENvb3JkTG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBm
YWxzZSwgMCwgR0MzRGludHB0cihzb3VyY2VWZXJ0aWNlcykpOwotICAgIG1fY29udGV4dDNELT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgbV9jb250ZXh0M0QtPmRyYXdB
cnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7Ci0gICAgbV9jb250
ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigp
KTsKLSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRl
eENvb3JkTG9jYXRpb24oKSk7CisgICAgRmxvYXRSZWN0IHRhcmdldFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgc2FtcGxlci5jb250ZW50U2l6ZSgpKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFBy
b2dyYW0ocHJvZ3JhbS5nZXQoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4o
c2FtcGxlcikuaWQoKSwgMCwgSW50U2l6ZSgxLCAxKSwgdGFyZ2V0UmVjdCwgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgMSwgMCk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFw
VGV4dHVyZUdMOjphcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29u
c3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IGZpbHRlcnMpCkBAIC0xMTcyLDcgKzExNjMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVn
aW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgog
CiAgICAgZGF0YSgpLmluaXRpYWxpemVTdGVuY2lsKCk7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6RGVmYXVsdCk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
PiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNvbGlkQ29s
b3IpOwogCiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkp
OwogICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0
ZXhMb2NhdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3Bw
CmluZGV4IDIxNzU2MjBhZTE3ZjQzZWZjNDgxZmE1NjczODM3YmY3YTE2OGZjMjkuLmY2ZGRhZTNi
N2U2MDFiNDk5MmYzMGZhYmRhZmI1NWM1NTZiZDY0ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmNwcApAQCAtMzIsNyArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLQogc3RhdGljIGlubGluZSBib29sIGNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpCiB7
CiAjaWYgIUxPR19ESVNBQkxFRApAQCAtMTA2LDQyMyArMTA1LDI4OSBAQCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKICAgICBtX2NvbnRl
eHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKIH0KIAotc3RydWN0IFNoYWRlclNwZWMgewot
ICAgIFN0cmluZyB2ZXJ0ZXhTaGFkZXI7Ci0gICAgU3RyaW5nIGZyYWdtZW50U2hhZGVyOwotICAg
IFNoYWRlclNwZWMoY29uc3QgY2hhciogdmVydGV4ID0gMCwgY29uc3QgY2hhciogZnJhZ21lbnQg
PSAwKQotICAgICAgICA6IHZlcnRleFNoYWRlcih2ZXJ0ZXggPyBTdHJpbmcoQVNDSUlMaXRlcmFs
KHZlcnRleCkpIDogU3RyaW5nKCkpCi0gICAgICAgICwgZnJhZ21lbnRTaGFkZXIoZnJhZ21lbnQg
PyBTdHJpbmcoQVNDSUlMaXRlcmFsKGZyYWdtZW50KSkgOiBTdHJpbmcoKSkKLSAgICB7Ci0gICAg
fQotfTsKLQotc3RhdGljIHZvaWQgZ2V0U2hhZGVyU3BlYyhUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6U2hhZGVyS2V5IGtleSwgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21l
bnRTb3VyY2UpCi17Ci0gICAgc3RhdGljIFZlY3RvcjxTaGFkZXJTcGVjPiBzcGVjcyA9IFZlY3Rv
cjxTaGFkZXJTcGVjPigpOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudE9wYWNpdHlB
bmRNYXNrID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7Ci0gICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7Ci0gICAg
ICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7Ci0gICAgICAgICAgICB1bmlmb3JtIGZs
b2F0IHVfb3BhY2l0eTsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3NvdXJjZVRleENvb3Jk
OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwotICAgICAgICAgICAg
dm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjNCBjb2xv
ciA9IHRleHR1cmUyRChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29vcmQpOwotICAgICAgICAgICAg
ICAgIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpOwot
ICAgICAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50QWxwaGEgPSB1X29wYWNpdHkgKiBtYXNrQ29s
b3IuYTsKLSAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZy
YWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFscGhhKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFJlY3RPcGFjaXR5QW5k
TWFzayA9Ci0gICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1w
IGZsb2F0OwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc2FtcGxlcjsKLSAg
ICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX21hc2s7Ci0gICAgICAgICAgICB1bmlm
b3JtIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3NvdXJjZVRl
eENvb3JkOwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwotICAgICAg
ICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVj
NCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKLSAg
ICAgICAgICAgICAgICB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21h
c2tUZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVfb3Bh
Y2l0eSAqIG1hc2tDb2xvci5hOwotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQo
Y29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOwotICAg
ICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleE9w
YWNpdHlBbmRNYXNrID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgdW5pZm9ybSBt
YXQ0IHVfbWF0cml4OwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2ZsaXA7Ci0gICAgICAg
ICAgICB1bmlmb3JtIHZlYzIgdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgICAgIGF0dHJpYnV0ZSB2
ZWM0IGFfdmVydGV4OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7
Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2
b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2X3NvdXJjZVRl
eENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55
LCB1X2ZsaXApKSAqIHVfdGV4dHVyZVNpemU7Ci0gICAgICAgICAgICAgICAgdl9tYXNrVGV4Q29v
cmQgPSB2ZWMyKGFfdmVydGV4KTsKLSAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0
cml4ICogYV92ZXJ0ZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogZnJhZ21lbnRTaW1wbGUgPQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAg
ICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxl
cjJEIHNfc2FtcGxlcjsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OwotICAg
ICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2b2lk
IG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IGNvbG9yID0g
dGV4dHVyZTJEKHNfc2FtcGxlciwgdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAg
Z2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiB1X29wYWNpdHksIGNvbG9yLmEgKiB1X29w
YWNpdHkpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50QW50aWFsaWFzaW5nTm9NYXNrID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAg
ICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRCBzX3NhbXBsZXI7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhD
b29yZDsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICAgICAg
dW5pZm9ybSB2ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzhdOwotCi0gICAg
ICAgICAgICAgICAgLy8gVGhlIGRhdGEgcGFzc2VkIGluIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNj
cmVlblNwYWNlIGlzIG1lcmVseSB0aGUKLSAgICAgICAgICAgICAgICAvLyBwcmUtc2NhbGVkIGNv
ZWZmZWNpZW50cyBvZiB0aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUgZm91ciBlZGdl
cwotICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBleHBhbmRlZCBxdWFkIGluIHNjcmVlbiBzcGFj
ZSBhbmQgdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveAotICAgICAgICAgICAgICAgIC8vIG9m
IHRoZSBleHBhbmRlZCBxdWFkLgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBmbG9h
dCBub3JtYWxpemVkRGlzdGFuY2UodmVjMyBlZGdlQ29lZmZpY2llbnQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5nIGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1
bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOgotICAgICAgICAgICAgICAgIC8v
IChBKnAueCArIEIqcC55ICsgQykgLyBzcXJ0KEFeMiArIEJeMikgPSBkaXN0YW5jZSBmcm9tIGxp
bmUgdG8gcAotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBBLCBCIGFuZCBDIGhhdmUgYWxy
ZWFkeSBiZWVuIHNjYWxlZCBieSAxIC8gc3FydChBXjIgKyBCXjIpLgotICAgICAgICAgICAgICAg
IHJldHVybiBjbGFtcChkb3QoZWRnZUNvZWZmaWNpZW50LCB2ZWMzKGdsX0ZyYWdDb29yZC54eSwg
MS4pKSwgMC4sIDEuKTsKK3N0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQor
ICAgIFNUUklOR0lGWSgKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAgICAgICB1
bmlmb3JtIGZsb2F0IHVfZmxpcDsKKyAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdGV4dHVyZVNpemU7
CisgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworICAgICAgICB2YXJ5aW5nIHZlYzIg
dl90ZXhDb29yZDsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOworCisgICAg
ICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWM0IHBvc2l0aW9u
ID0gYV92ZXJ0ZXg7CisgICAgICAgICAgICB2X3RleENvb3JkID0gdmVjMihwb3NpdGlvbi54LCBt
aXgocG9zaXRpb24ueSwgMS4gLSBwb3NpdGlvbi55LCB1X2ZsaXApKSAqIHVfdGV4dHVyZVNpemU7
CisgICAgICAgICAgICB2X21hc2tUZXhDb29yZCA9IHZlYzIocG9zaXRpb24pOworICAgICAgICAg
ICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OworICAgICAgICB9CisgICAgKTsK
KworI2RlZmluZSBHTFNMX0RJUkVDVElWRSguLi4pICIjIiNfX1ZBX0FSR1NfXyJcbiIKKyNkZWZp
bmUgREVGSU5FX0FQUExJRVIoTmFtZSkgXAorICAgICIjaWZkZWYgRU5BQkxFXyIjTmFtZSJcbiIg
XAorICAgICIjZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIGFwcGx5IiNOYW1lIlxuIlwKKyAg
ICAiI2Vsc2VcbiJcCisgICAgIiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQgbm9vcFxuIlwK
KyAgICAiI2VuZGlmXG4iCisKKyNkZWZpbmUgUkVDVF9URVhUVVJFX0RJUkVDVElWRSBcCisgICAg
R0xTTF9ESVJFQ1RJVkUoaWZkZWYgRU5BQkxFX1JlY3QpIFwKKyAgICAgICAgR0xTTF9ESVJFQ1RJ
VkUoZGVmaW5lIFNhbXBsZXJUeXBlIHNhbXBsZXIyRFJlY3QpIFwKKyAgICAgICAgR0xTTF9ESVJF
Q1RJVkUoZGVmaW5lIFNhbXBsZXJGdW5jdGlvbiB0ZXh0dXJlMkRSZWN0KSBcCisgICAgR0xTTF9E
SVJFQ1RJVkUoZWxzZSkgXAorICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlclR5
cGUgc2FtcGxlcjJEKSBcCisgICAgICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyRnVu
Y3Rpb24gdGV4dHVyZTJEKSBcCisgICAgR0xTTF9ESVJFQ1RJVkUoZW5kaWYpCisKKyNkZWZpbmUg
RU5BQkxFX0FQUExJRVIoTmFtZSkgIiNkZWZpbmUgRU5BQkxFXyIjTmFtZSJcbiIKKyNkZWZpbmUg
QkxVUl9DT05TVEFOVFMgXAorICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBHQVVTU0lBTl9LRVJO
RUxfSEFMRl9XSURUSCAxMSkgXAorICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBHQVVTU0lBTl9L
RVJORUxfU1RFUCAwLjIpCisKKworc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUg
PQorICAgIERFRklORV9BUFBMSUVSKFRleHR1cmUpCisgICAgREVGSU5FX0FQUExJRVIoU29saWRD
b2xvcikKKyAgICBERUZJTkVfQVBQTElFUihPcGFjaXR5KQorICAgIERFRklORV9BUFBMSUVSKE1h
c2spCisgICAgREVGSU5FX0FQUExJRVIoQW50aWFsaWFzKQorICAgIERFRklORV9BUFBMSUVSKEdy
YXlzY2FsZUZpbHRlcikKKyAgICBERUZJTkVfQVBQTElFUihTZXBpYUZpbHRlcikKKyAgICBERUZJ
TkVfQVBQTElFUihTYXR1cmF0ZUZpbHRlcikKKyAgICBERUZJTkVfQVBQTElFUihIdWVSb3RhdGVG
aWx0ZXIpCisgICAgREVGSU5FX0FQUExJRVIoSW52ZXJ0RmlsdGVyKQorICAgIERFRklORV9BUFBM
SUVSKEJyaWdodG5lc3NGaWx0ZXIpCisgICAgREVGSU5FX0FQUExJRVIoQ29udHJhc3RGaWx0ZXIp
CisgICAgREVGSU5FX0FQUExJRVIoT3BhY2l0eUZpbHRlcikKKyAgICBERUZJTkVfQVBQTElFUihC
bHVyRmlsdGVyKQorICAgIERFRklORV9BUFBMSUVSKEFscGhhQmx1cikKKyAgICBERUZJTkVfQVBQ
TElFUihDb250ZW50VGV4dHVyZSkKKyAgICBSRUNUX1RFWFRVUkVfRElSRUNUSVZFCisgICAgQkxV
Ul9DT05TVEFOVFMKKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OworICAgICAgICB1bmlmb3JtIFNhbXBsZXJUeXBlIHNfc2FtcGxlcjsKKyAgICAgICAgdW5p
Zm9ybSBzYW1wbGVyMkQgc19tYXNrOworICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX2NvbnRl
bnRUZXh0dXJlOworICAgICAgICB1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTsKKyAgICAgICAgdmFy
eWluZyB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X21hc2tUZXhDb29y
ZDsKKyAgICAgICAgdW5pZm9ybSB2ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNl
WzhdOworICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmlsdGVyQW1vdW50OworICAgICAgICB1bmlm
b3JtIHZlYzIgdV9ibHVyUmFkaXVzOworICAgICAgICB1bmlmb3JtIHZlYzIgdV9zaGFkb3dPZmZz
ZXQ7CisgICAgICAgIHVuaWZvcm0gdmVjNCB1X2NvbG9yOworICAgICAgICB1bmlmb3JtIGZsb2F0
IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOworCisgICAgICAg
IHZvaWQgbm9vcCh2ZWM0KSB7IH0KKworICAgICAgICAvLyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9l
eHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UgaXMgbWVyZWx5IHRoZQorICAgICAgICAvLyBw
cmUtc2NhbGVkIGNvZWZmZWNpZW50cyBvZiB0aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0
aGUgZm91ciBlZGdlcworICAgICAgICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4g
c3BhY2UgYW5kIHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBib3gKKyAgICAgICAgLy8gb2YgdGhl
IGV4cGFuZGVkIHF1YWQuCisgICAgICAgIC8vCisgICAgICAgIGZsb2F0IG5vcm1hbGl6ZWREaXN0
YW5jZSh2ZWMzIGVkZ2VDb2VmZmljaWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2Ug
YXJlIGRvaW5nIGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRv
IHRoZSBmb3JtdWxhOgorICAgICAgICAgICAgLy8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQo
QV4yICsgQl4yKSA9IGRpc3RhbmNlIGZyb20gbGluZSB0byBwCisgICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgQSwgQiBhbmQgQyBoYXZlIGFscmVhZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4y
ICsgQl4yKS4KKyAgICAgICAgICAgIHJldHVybiBjbGFtcChkb3QoZWRnZUNvZWZmaWNpZW50LCB2
ZWMzKGdsX0ZyYWdDb29yZC54eSwgMS4pKSwgMC4sIDEuKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZsb2F0IGFudGlhbGlhc1F1YWQodmVjMyBjb2VmZmljaWVudDEsIHZlYzMgY29lZmZpY2llbnQy
LCB2ZWMzIGNvZWZmaWNpZW50MywgdmVjMyBjb2VmZmljaWVudDQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIE5vdyB3ZSB3YW50IHRvIHJlZHVjZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZy
YWdtZW50IGlmIGl0IGlzIGNsb3NlIHRvIHRoZQorICAgICAgICAgICAgLy8gZWRnZXMgb2YgdGhl
IGV4cGFuZGVkIHF1YWQgKG9yIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveCAtLSB3aGljaCBzZWVt
cyB0byBiZQorICAgICAgICAgICAgLy8gaW1wb3J0YW50IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4g
Tm90ZSB0aGF0IHdlIGFyZSBjb21iaW5pbmcgdGhlIGNvbnRyaWJ1dGlvbgorICAgICAgICAgICAg
Ly8gZnJvbSB0aGUgKHRvcCB8fCBib3R0b20pIGFuZCAobGVmdCB8fCByaWdodCkgZWRnZSBieSBz
aW1wbHkgbXVsdGlwbHlpbmcuIFRoaXMgZm9sbG93cworICAgICAgICAgICAgLy8gdGhlIGFwcHJv
YWNoIGRlc2NyaWJlZCBhdDogaHR0cDovL2h0dHAuZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2Vt
czIvZ3B1Z2VtczJfY2hhcHRlcjIyLmh0bWwsCisgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ug
d2l0aG91dCB1c2luZyBHYXVzc2lhbiB3ZWlnaHRzLgorICAgICAgICAgICAgcmV0dXJuIG1pbihu
b3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQxKSwgbm9ybWFsaXplZERpc3RhbmNlKGNvZWZm
aWNpZW50MikpCisgICAgICAgICAgICAgICAgKiBtaW4obm9ybWFsaXplZERpc3RhbmNlKGNvZWZm
aWNpZW50MyksIG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGZsb2F0IGFudGlhbGlhcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0
IGFudGlhbGlhc1ZhbHVlRm9yUXVhZCA9IAorICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQo
dV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMF0sCisgICAgICAgICAgICAgICAgICAg
IHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzFdLAorICAgICAgICAgICAgICAgICAg
ICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsyXSwKKyAgICAgICAgICAgICAgICAg
ICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbM10pOworCisgICAgICAgICAgICBm
bG9hdCBhbnRpYWxpYXNWYWx1ZUZvckJvdW5kaW5nUmVjdCA9IAorICAgICAgICAgICAgICAgIGFu
dGlhbGlhc1F1YWQodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNF0sCisgICAgICAg
ICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLAorICAgICAg
ICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs2XSwKKyAgICAg
ICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbN10pOworCisg
ICAgICAgICAgICByZXR1cm4gbWluKGFudGlhbGlhc1ZhbHVlRm9yUXVhZCwgYW50aWFsaWFzVmFs
dWVGb3JCb3VuZGluZ1JlY3QpOyAgICAgICAgICAgCisgICAgICAgIH0KKworICAgICAgICB2b2lk
IGFwcGx5VGV4dHVyZShpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yID0gU2FtcGxlckZ1bmN0aW9u
KHNfc2FtcGxlciwgdl90ZXhDb29yZCk7IH0KKyAgICAgICAgdm9pZCBhcHBseU9wYWNpdHkoaW5v
dXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB1X29wYWNpdHk7IH0KKyAgICAgICAgdm9pZCBhcHBs
eUFudGlhbGlhcyhpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IGFudGlhbGlhcygpOyB9Cisg
ICAgICAgIHZvaWQgYXBwbHlNYXNrKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdGV4dHVy
ZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpLmE7IH0KKworICAgICAgICB2b2lkIGFwcGx5R3Jh
eXNjYWxlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZs
b2F0IGFtb3VudCA9IDEuMCAtIHVfZmlsdGVyQW1vdW50OworICAgICAgICAgICAgY29sb3IgPSB2
ZWM0KCgwLjIxMjYgKyAwLjc4NzQgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcx
NTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29s
b3IuYiwKKyAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9y
LnIgKyAoMC43MTUyICsgMC4yODQ4ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4w
NzIyICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEy
NiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xv
ci5nICsgKDAuMDcyMiArIDAuOTI3OCAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAg
ICAgIGNvbG9yLmEpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseVNlcGlhRmlsdGVy
KGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IDEuMCAtIHVfZmlsdGVyQW1vdW50OworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KCgwLjM5MyAr
IDAuNjA3ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43NjkgLSAwLjc2OSAqIGFtb3VudCkgKiBj
b2xvci5nICsgKDAuMTg5IC0gMC4xODkgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAg
ICAgICAoMC4zNDkgLSAwLjM0OSAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNjg2ICsgMC4zMTQg
KiBhbW91bnQpICogY29sb3IuZyArICgwLjE2OCAtIDAuMTY4ICogYW1vdW50KSAqIGNvbG9yLmIs
CisgICAgICAgICAgICAgICAgKDAuMjcyIC0gMC4yNzIgKiBhbW91bnQpICogY29sb3IuciArICgw
LjUzNCAtIDAuNTM0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xMzEgKyAwLjg2OSAqIGFtb3Vu
dCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBhcHBseVNhdHVyYXRlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVfZmlsdGVyQW1v
dW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9y
LmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAg
ICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5yICsgKDAu
NzE1ICsgMC4yODUgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIg
KiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICgwLjIxMyAtIDAu
MjEzICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9maWx0
ZXJBbW91bnQpICogY29sb3IuZyArICgwLjA3MiArIDAuOTI4ICogdV9maWx0ZXJBbW91bnQpICog
Y29sb3IuYiwKKyAgICAgICAgICAgICAgICBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgYXBwbHlIdWVSb3RhdGVGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgewor
ICAgICAgICAgICAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2OworICAgICAgICAg
ICAgZmxvYXQgYyA9IGNvcyh1X2ZpbHRlckFtb3VudCAqIHBpIC8gMTgwLjApOworICAgICAgICAg
ICAgZmxvYXQgcyA9IHNpbih1X2ZpbHRlckFtb3VudCAqIHBpIC8gMTgwLjApOworICAgICAgICAg
ICAgY29sb3IgPSB2ZWM0KGNvbG9yLnIgKiAoMC4yMTMgKyBjICogMC43ODcgLSBzICogMC4yMTMp
ICsgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSAtIHMgKiAwLjcxNSkgKyBjb2xvci5iICog
KDAuMDcyIC0gYyAqIDAuMDcyICsgcyAqIDAuOTI4KSwKKyAgICAgICAgICAgICAgICBjb2xvci5y
ICogKDAuMjEzIC0gYyAqIDAuMjEzICsgcyAqIDAuMTQzKSArIGNvbG9yLmcgKiAoMC43MTUgKyBj
ICogMC4yODUgKyBzICogMC4xNDApICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiAtIHMg
KiAwLjI4MyksCisgICAgICAgICAgICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyAt
IHMgKiAwLjc4NykgKyAgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSArIHMgKiAwLjcxNSkg
KyBjb2xvci5iICogKDAuMDcyICsgYyAqIDAuOTI4ICsgcyAqIDAuMDcyKSwKKyAgICAgICAgICAg
ICAgICBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IGludmVydChmbG9hdCBu
KSB7IHJldHVybiAoMS4wIC0gbikgKiB1X2ZpbHRlckFtb3VudCArIG4gKiAoMS4wIC0gdV9maWx0
ZXJBbW91bnQpOyB9CisgICAgICAgIHZvaWQgYXBwbHlJbnZlcnRGaWx0ZXIoaW5vdXQgdmVjNCBj
b2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGludmVydChjb2xvci5y
KSwgaW52ZXJ0KGNvbG9yLmcpLCBpbnZlcnQoY29sb3IuYiksIGNvbG9yLmEpOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBhcHBseUJyaWdodG5lc3NGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqICgxLjAgKyB1
X2ZpbHRlckFtb3VudCksIGNvbG9yLmEpOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgY29u
dHJhc3QoZmxvYXQgbikgeyByZXR1cm4gKG4gLSAwLjUpICogdV9maWx0ZXJBbW91bnQgKyAwLjU7
IH0KKyAgICAgICAgdm9pZCBhcHBseUNvbnRyYXN0RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNChjb250cmFzdChjb2xvci5yKSwgY29u
dHJhc3QoY29sb3IuZyksIGNvbnRyYXN0KGNvbG9yLmIpLCBjb2xvci5hKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgYXBwbHlPcGFjaXR5RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5i
LCBjb2xvci5hICogdV9maWx0ZXJBbW91bnQpOworICAgICAgICB9CisKKyAgICAgICAgdmVjNCBz
YW1wbGVDb2xvckF0UmFkaXVzKGZsb2F0IHJhZGl1cykKKyAgICAgICAgeworICAgICAgICAgICAg
dmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7CisgICAgICAg
ICAgICByZXR1cm4gU2FtcGxlckZ1bmN0aW9uKHNfc2FtcGxlciwgY29vcmQpICogZmxvYXQoY29v
cmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEu
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IHNhbXBsZUFscGhhQXRSYWRpdXMoZmxvYXQg
cmFkaXVzKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAt
IHVfc2hhZG93T2Zmc2V0ICsgcmFkaXVzICogdV9ibHVyUmFkaXVzOworICAgICAgICAgICAgcmV0
dXJuIFNhbXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+
IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgYXBwbHlCbHVyRmlsdGVyKGlub3V0IHZlYzQgY29sb3Ip
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzQgdG90YWwgPSBzYW1wbGVDb2xvckF0UmFkaXVz
KDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTsg
aSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKKyAgICAgICAgICAgICAgICB0
b3RhbCArPSBzYW1wbGVDb2xvckF0UmFkaXVzKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NU
RVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKKyAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1w
bGVDb2xvckF0UmFkaXVzKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1
X2dhdXNzaWFuS2VybmVsW2ldOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmbG9hdCBh
bnRpYWxpYXNRdWFkKHZlYzMgY29lZmZpY2llbnQxLCB2ZWMzIGNvZWZmaWNpZW50MiwgdmVjMyBj
b2VmZmljaWVudDMsIHZlYzMgY29lZmZpY2llbnQ0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIC8vIE5vdyB3ZSB3YW50IHRvIHJlZHVjZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZy
YWdtZW50IGlmIGl0IGlzIGNsb3NlIHRvIHRoZQotICAgICAgICAgICAgICAgIC8vIGVkZ2VzIG9m
IHRoZSBleHBhbmRlZCBxdWFkIChvciByZWN0YW5ndWxhciBib3VuZGluZyBib3ggLS0gd2hpY2gg
c2VlbXMgdG8gYmUKLSAgICAgICAgICAgICAgICAvLyBpbXBvcnRhbnQgZm9yIGJhY2tmYWNpbmcg
cXVhZHMpLiBOb3RlIHRoYXQgd2UgYXJlIGNvbWJpbmluZyB0aGUgY29udHJpYnV0aW9uCi0gICAg
ICAgICAgICAgICAgLy8gZnJvbSB0aGUgKHRvcCB8fCBib3R0b20pIGFuZCAobGVmdCB8fCByaWdo
dCkgZWRnZSBieSBzaW1wbHkgbXVsdGlwbHlpbmcuIFRoaXMgZm9sbG93cwotICAgICAgICAgICAg
ICAgIC8vIHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYXQ6IGh0dHA6Ly9odHRwLmRldmVsb3Blci5u
dmlkaWEuY29tL0dQVUdlbXMyL2dwdWdlbXMyX2NoYXB0ZXIyMi5odG1sLAotICAgICAgICAgICAg
ICAgIC8vIGluIHRoaXMgY2FzZSB3aXRob3V0IHVzaW5nIEdhdXNzaWFuIHdlaWdodHMuCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1pbihub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQxKSwg
bm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MikpCi0gICAgICAgICAgICAgICAgICAgICog
bWluKG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDMpLCBub3JtYWxpemVkRGlzdGFuY2Uo
Y29lZmZpY2llbnQ0KSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBjb2xvciA9IHRvdGFs
OworICAgICAgICB9CiAKLSAgICAgICAgICAgIGZsb2F0IGFudGlhbGlhcygpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgYW50aWFsaWFzVmFsdWVGb3JRdWFkID0gCi0gICAg
ICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVu
U3BhY2VbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5T
Y3JlZW5TcGFjZVsxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRn
ZXNJblNjcmVlblNwYWNlWzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1
YWRFZGdlc0luU2NyZWVuU3BhY2VbM10pOwotCi0gICAgICAgICAgICAgICAgZmxvYXQgYW50aWFs
aWFzVmFsdWVGb3JCb3VuZGluZ1JlY3QgPSAKLSAgICAgICAgICAgICAgICAgICAgYW50aWFsaWFz
UXVhZCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs0XSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLAotICAgICAgICAg
ICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNl0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs3XSk7
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbWluKGFudGlhbGlhc1ZhbHVlRm9yUXVhZCwgYW50
aWFsaWFzVmFsdWVGb3JCb3VuZGluZ1JlY3QpOyAgICAgICAgICAgCisgICAgICAgIHZvaWQgYXBw
bHlBbHBoYUJsdXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgZmxv
YXQgdG90YWwgPSBzYW1wbGVBbHBoYUF0UmFkaXVzKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJ
RFRIOyBpKyspIHsKKyAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYUF0UmFkaXVz
KGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsK
KyAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYUF0UmFkaXVzKGZsb2F0KC0xICog
aSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICB2b2lkIG1haW4oKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHZlYzQgc2FtcGxlZENvbG9yID0gdGV4dHVyZTJEKHNfc2FtcGxlciwgY2xhbXAo
dl9zb3VyY2VUZXhDb29yZCwgMC4wLCAxLjApKTsKLSAgICAgICAgICAgICAgICBnbF9GcmFnQ29s
b3IgPSBzYW1wbGVkQ29sb3IgKiB1X29wYWNpdHkgKiBhbnRpYWxpYXMoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFJlY3RTaW1w
bGUgPQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NhbXBsZXI7Ci0gICAg
ICAgICAgICB1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVj
MiB2X3NvdXJjZVRleENvb3JkOwotICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zYW1w
bGVyLCB2X3NvdXJjZVRleENvb3JkKTsKLSAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2
ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2ltcGxl
ID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4
OwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2ZsaXA7Ci0gICAgICAgICAgICB1bmlmb3Jt
IHZlYzIgdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4
OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgICAg
ICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2X3NvdXJj
ZVRleENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRl
eC55LCB1X2ZsaXApKSAqIHVfdGV4dHVyZVNpemU7Ci0gICAgICAgICAgICAgICAgZ2xfUG9zaXRp
b24gPSB1X21hdHJpeCAqIGFfdmVydGV4OwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0g
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNvbGlkQ29sb3IgPQotICAgICAgICBTVFJJTkdJ
RlkoCi0gICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0gICAgICAgICAgICBhdHRy
aWJ1dGUgdmVjNCBhX3ZlcnRleDsKLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRl
eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50U29saWRDb2xvciA9Ci0gICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgIHBy
ZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICAgICAgdW5pZm9ybSB2ZWM0IHVfY29sb3I7
Ci0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yOwotICAgICAgICAgICAgfQotICAgICAgICApOwot
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleEZpbHRlciA9Ci0gICAgICAgIFNUUklOR0lG
WSgKLSAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICAgICAgYXR0
cmlidXRlIHZlYzQgYV90ZXhDb29yZDsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENv
b3JkOwotICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgdl90ZXhDb29yZCA9IHZlYzIoYV90ZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAg
Z2xfUG9zaXRpb24gPSBhX3ZlcnRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotI2Rl
ZmluZSBTVEFOREFSRF9GSUxURVIoLi4uKSBcCi0gICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDtcbiJcCi0gICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDtcbiJcCi0gICAgICAg
ICJ1bmlmb3JtIGZsb2F0IHVfYW1vdW50O1xuIlwKLSAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJE
IHNfc2FtcGxlcjtcbiIjX19WQV9BUkdTX18gXAotICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4g
eyBnbF9GcmFnQ29sb3IgPSBzaGFkZSh0ZXh0dXJlMkQoc19zYW1wbGVyLCB2X3RleENvb3JkKSk7
IH0iCi0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRHcmF5c2NhbGVGaWx0ZXIgPQot
ICAgICAgICBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICB2ZWM0IHNoYWRlKGxvd3AgdmVj
NCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBhbW91bnQgPSAx
LjAgLSB1X2Ftb3VudDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTI2ICsgMC43
ODc0ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNv
bG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsg
KDAuNzE1MiArIDAuMjg0OCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAq
IGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMjYg
LSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQp
ICogY29sb3IuZyArICgwLjA3MjIgKyAwLjkyNzggKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
KTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNlcGlhRmlsdGVyID0KLSAgICAg
ICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29s
b3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4wIC0g
dV9hbW91bnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMzkzICsgMC42MDcgKiBh
bW91bnQpICogY29sb3IuciArICgwLjc2OSAtIDAuNzY5ICogYW1vdW50KSAqIGNvbG9yLmcgKyAo
MC4xODkgLSAwLjE4OSAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgwLjM0OSAtIDAuMzQ5ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC42ODYgKyAwLjMx
NCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTY4IC0gMC4xNjggKiBhbW91bnQpICogY29sb3Iu
YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNzIgLSAwLjI3MiAqIGFtb3VudCkg
KiBjb2xvci5yICsgKDAuNTM0IC0gMC41MzQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjEzMSAr
IDAuODY5ICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29sb3IuYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRTYXR1cmF0ZUZpbHRlciA9Ci0gICAgICAgIFNUQU5EQVJEX0ZJTFRFUigK
LSAgICAgICAgICAgIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjIxMyArIDAuNzg3ICogdV9hbW91bnQpICog
Y29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiAt
IDAuMDcyICogdV9hbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoMC4yMTMgLSAwLjIxMyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgKyAwLjI4NSAq
IHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9y
LmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2Ftb3Vu
dCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAu
MDcyICsgMC45MjggKiB1X2Ftb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbG9yLmEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50SHVlUm90YXRlRmlsdGVyID0KLSAgICAgICAgU1RBTkRBUkRf
RklMVEVSKAotICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2
OwotICAgICAgICAgICAgICAgIGZsb2F0IGMgPSBjb3ModV9hbW91bnQgKiBwaSAvIDE4MC4wKTsK
LSAgICAgICAgICAgICAgICBmbG9hdCBzID0gc2luKHVfYW1vdW50ICogcGkgLyAxODAuMCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciAqICgwLjIxMyArIGMgKiAwLjc4NyAt
IHMgKiAwLjIxMykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1IC0gcyAqIDAuNzE1KSAr
IGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgKyBzICogMC45MjgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgKyBzICogMC4xNDMp
ICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAwLjI4NSArIHMgKiAwLjE0MCkgKyBjb2xvci5iICog
KDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzIC0gcyAqIDAuNzg3KSArICBjb2xvci5n
ICogKDAuNzE1IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgKyBj
ICogMC45MjggKyBzICogMC4wNzIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9y
LmEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50SW52ZXJ0RmlsdGVyID0KLSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAg
ICAgICAgZmxvYXQgaW52ZXJ0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICogdV9h
bW91bnQgKyBuICogKDEuMCAtIHVfYW1vdW50KTsgfQotICAgICAgICAgICAgdmVjNCBzaGFkZShs
b3dwIHZlYzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZl
YzQoaW52ZXJ0KGNvbG9yLnIpLCBpbnZlcnQoY29sb3IuZyksIGludmVydChjb2xvci5iKSwgY29s
b3IuYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogZnJhZ21lbnRCcmlnaHRuZXNzRmlsdGVyID0KLSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAot
ICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfYW1vdW50KSwg
Y29sb3IuYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRDb250cmFzdEZpbHRlciA9Ci0gICAgICAgIFNUQU5EQVJEX0ZJTFRFUigK
LSAgICAgICAgICAgIGZsb2F0IGNvbnRyYXN0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKG4gLSAw
LjUpICogdV9hbW91bnQgKyAwLjU7IH0KLSAgICAgICAgICAgIHZlYzQgc2hhZGUobG93cCB2ZWM0
IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbnRy
YXN0KGNvbG9yLnIpLCBjb250cmFzdChjb2xvci5nKSwgY29udHJhc3QoY29sb3IuYiksIGNvbG9y
LmEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50T3BhY2l0eUZpbHRlciA9Ci0gICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKLSAgICAg
ICAgICAgIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEg
KiB1X2Ftb3VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSNkZWZpbmUgQkxVUl9D
T05TVEFOVFMgIiNkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEggMTFcbiNkZWZpbmUg
R0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yXG4iCi0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRCbHVyRmlsdGVyID0KLSAgICAgICAgQkxVUl9DT05TVEFOVFMKLSAgICAgICAgU1RSSU5H
SUZZKAotICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiAyMSB2
YWx1ZXMgYmV0d2VlbiAtMiBhbmQgMi4KLSAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICB1
bmlmb3JtIHZlYzIgdV9ibHVyUmFkaXVzOwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQg
c19zYW1wbGVyOwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dB
VVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKLQotICAgICAgICAgICAgdmVjNCBzYW1wbGVDb2xv
cihmbG9hdCByYWRpdXMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjMiBjb29y
ZCA9IHZfdGV4Q29vcmQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRleHR1cmUyRChzX3NhbXBsZXIsIGNvb3JkKSAqIGZsb2F0KGNvb3JkLnggPiAwLiAm
JiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHZlYzQgYmx1cigpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgdmVjNCB0b3RhbCA9IHNhbXBsZUNvbG9yKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxb
MF07Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxf
SEFMRl9XSURUSDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUNv
bG9yKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtp
XTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQ29sb3IoZmxvYXQoLTEgKiBp
KSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBnbF9GcmFnQ29sb3IgPSBibHVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7
Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkb3dGaWx0ZXIxID0KLSAgICAg
ICAgQkxVUl9DT05TVEFOVFMKLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgcHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsK
LSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9ibHVyUmFkaXVzOwotICAgICAgICAgICAgdW5p
Zm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQg
c19zYW1wbGVyOwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dB
VVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKLQotICAgICAgICAgICAgZmxvYXQgc2FtcGxlQWxw
aGEoZmxvYXQgcmFkaXVzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZlYzIgY29v
cmQgPSB2X3RleENvb3JkIC0gdV9zaGFkb3dPZmZzZXQgKyB2ZWMyKHJhZGl1cyAqIHVfYmx1clJh
ZGl1cywgMC4pOwotICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQoc19zYW1wbGVyLCBj
b29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8
IDEuICYmIGNvb3JkLnkgPCAxLik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZsb2F0
IHNoYWRvd0JsdXJIb3Jpem9udGFsKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBm
bG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07Ci0gICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURU
SDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0
KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAg
ICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBpKSAqIEdBVVNT
SUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
bF9GcmFnQ29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEuKSAqIHNoYWRvd0JsdXJIb3Jpem9udGFs
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICAvLyBTZWNvbmQgcGFzczogdmVy
dGljYWwgYWxwaGEgYmx1ciBhbmQgY29tcG9zaXRlIHdpdGggb3JpZ2luLgotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRvd0ZpbHRlcjIgPQotICAgICAgICBCTFVSX0NPTlNUQU5U
UwotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwotICAgICAgICAgICAgdW5p
Zm9ybSBmbG9hdCB1X2JsdXJSYWRpdXM7Ci0gICAgICAgICAgICB1bmlmb3JtIHZlYzQgdV9zaGFk
b3dDb2xvcjsKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKLSAgICAg
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfY29udGVudFRleHR1cmU7Ci0gICAgICAgICAgICB1
bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhd
OwotCi0gICAgICAgICAgICBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkICsgdmVjMigwLiwgciAq
IHVfYmx1clJhZGl1cyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRChzX3NhbXBs
ZXIsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29y
ZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ZmxvYXQgc2hhZG93Qmx1clZlcnRpY2FsKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9X
SURUSDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZs
b2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAg
ICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBpKSAqIEdB
VVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB2ZWM0IHNvdXJjZU92ZXIobG93cCB2ZWM0IHNvdXJjZSwgdmVjNCBkZXN0aW5h
dGlvbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBDb21wb3NpdGUgdGhlIHNo
YWRvdyB3aXRoIHRoZSBvcmlnaW5hbCB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIHJldHVybiBz
b3VyY2UgKyBkZXN0aW5hdGlvbiAqICgxLiAtIHNvdXJjZS5hKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2xfRnJhZ0NvbG9yID0gc291cmNlT3Zlcih0ZXh0dXJlMkQoc19jb250ZW50VGV4dHVyZSwg
dl90ZXhDb29yZCksIHNoYWRvd0JsdXJWZXJ0aWNhbCgpICogdV9zaGFkb3dDb2xvcik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBpZiAoc3BlY3MuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIHNwZWNzLnJlc2l6ZShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TGFzdEZpbHRlcik7
Ci0gICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpEZWZhdWx0XSA9IFNo
YWRlclNwZWModmVydGV4U2ltcGxlLCBmcmFnbWVudFNpbXBsZSk7Ci0gICAgICAgIHNwZWNzW1Rl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9yXSA9IFNoYWRlclNwZWModmVydGV4
U29saWRDb2xvciwgZnJhZ21lbnRTb2xpZENvbG9yKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlJlY3RdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdt
ZW50UmVjdFNpbXBsZSk7Ci0gICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpNYXNrZWRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRPcGFj
aXR5QW5kTWFzayk7Ci0gICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpN
YXNrZWRSZWN0XSA9IFNoYWRlclNwZWModmVydGV4T3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50UmVj
dE9wYWNpdHlBbmRNYXNrKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OkFudGlhbGlhc2VkXSA9IFNoYWRlclNwZWModmVydGV4U2ltcGxlLCBmcmFnbWVudEFudGlh
bGlhc2luZ05vTWFzayk7Ci0gICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpHcmF5c2NhbGVGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50R3Jh
eXNjYWxlRmlsdGVyKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OlNlcGlhRmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNlcGlhRmls
dGVyKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNhdHVyYXRl
RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNhdHVyYXRlRmlsdGVy
KTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Okh1ZVJvdGF0ZUZp
bHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRIdWVSb3RhdGVGaWx0ZXIp
OwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QnJpZ2h0bmVzc0Zp
bHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRCcmlnaHRuZXNzRmlsdGVy
KTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkNvbnRyYXN0Rmls
dGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudENvbnRyYXN0RmlsdGVyKTsK
LSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmVydEZpbHRlcl0g
PSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRJbnZlcnRGaWx0ZXIpOwotICAgICAg
ICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUZpbHRlcl0gPSBTaGFk
ZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRPcGFjaXR5RmlsdGVyKTsKLSAgICAgICAgc3Bl
Y3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkJsdXJGaWx0ZXJdID0gU2hhZGVyU3BlYyh2
ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50Qmx1ckZpbHRlcik7Ci0gICAgICAgIHNwZWNzW1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkb3dGaWx0ZXJQYXNzMV0gPSBTaGFkZXJTcGVjKHZlcnRl
eEZpbHRlciwgZnJhZ21lbnRTaGFkb3dGaWx0ZXIxKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MyXSA9IFNoYWRlclNwZWModmVydGV4
RmlsdGVyLCBmcmFnbWVudFNoYWRvd0ZpbHRlcjIpOwotICAgIH0KLQotICAgIEFTU0VSVChzcGVj
cy5zaXplKCkgPiBrZXkpOwotICAgIFNoYWRlclNwZWMmIHNwZWMgPSBzcGVjc1trZXldOwotICAg
IHZlcnRleFNvdXJjZSA9IHNwZWMudmVydGV4U2hhZGVyOwotICAgIGZyYWdtZW50U291cmNlID0g
c3BlYy5mcmFnbWVudFNoYWRlcjsKKyAgICAgICAgICAgIGNvbG9yICo9IHRvdGFsOworICAgICAg
ICB9CisKKyAgICAgICAgdmVjNCBzb3VyY2VPdmVyKHZlYzQgc3JjLCB2ZWM0IGRzdCkgeyByZXR1
cm4gc3JjICsgZHN0ICogKDEuIC0gZHN0LmEpOyB9CisKKyAgICAgICAgdm9pZCBhcHBseUNvbnRl
bnRUZXh0dXJlKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzQg
Y29udGVudENvbG9yID0gdGV4dHVyZTJEKHNfY29udGVudFRleHR1cmUsIHZfdGV4Q29vcmQpOwor
ICAgICAgICAgICAgY29sb3IgPSBzb3VyY2VPdmVyKGNvbnRlbnRDb2xvciwgY29sb3IpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseVNvbGlkQ29sb3IoaW5vdXQgdmVjNCBjb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgY29sb3IgKj0gdV9jb2xvcjsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWM0IGNvbG9y
ID0gdmVjNCgxLiwgMS4sIDEuLCAxLik7CisgICAgICAgICAgICBhcHBseVRleHR1cmVJZk5lZWRl
ZChjb2xvcik7CisgICAgICAgICAgICBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZChjb2xvcik7Cisg
ICAgICAgICAgICBhcHBseUFudGlhbGlhc0lmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFw
cGx5TWFza0lmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5T3BhY2l0eUlmTmVlZGVk
KGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5R3JheXNjYWxlRmlsdGVySWZOZWVkZWQoY29sb3Ip
OworICAgICAgICAgICAgYXBwbHlTZXBpYUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAg
ICAgIGFwcGx5U2F0dXJhdGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBs
eUh1ZVJvdGF0ZUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5SW52ZXJ0
RmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlCcmlnaHRuZXNzRmlsdGVy
SWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlDb250cmFzdEZpbHRlcklmTmVlZGVk
KGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5T3BhY2l0eUZpbHRlcklmTmVlZGVkKGNvbG9yKTsK
KyAgICAgICAgICAgIGFwcGx5Qmx1ckZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAg
IGFwcGx5QWxwaGFCbHVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlDb250ZW50
VGV4dHVyZUlmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9y
OworICAgICAgICB9CisgICAgKTsKKworCitzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMsIFN0cmluZyYgdmVydGV4U291
cmNlLCBTdHJpbmcmIGZyYWdtZW50U291cmNlKQoreworICAgIFN0cmluZ0J1aWxkZXIgZnJhZ21l
bnRCdWlsZGVyOworI2RlZmluZSBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQXBwbGllcikgXAor
ICAgIGlmIChvcHRpb25zICYgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkFwcGxpZXIpIFwK
KyAgICAgICAgZnJhZ21lbnRCdWlsZGVyLmFwcGVuZChFTkFCTEVfQVBQTElFUihBcHBsaWVyKSk7
CisKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoTWF0cml4KQorICAgIFNFVF9BUFBMSUVS
X0ZST01fT1BUSU9OUyhUZXh0dXJlKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhSZWN0
KQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTb2xpZENvbG9yKQorICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhN
YXNrKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBbnRpYWxpYXMpCisgICAgU0VUX0FQ
UExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2FsZUZpbHRlcikKKyAgICBTRVRfQVBQTElFUl9GUk9N
X09QVElPTlMoU2VwaWFGaWx0ZXIpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNhdHVy
YXRlRmlsdGVyKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhIdWVSb3RhdGVGaWx0ZXIp
CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJyaWdodG5lc3NGaWx0ZXIpCisgICAgU0VU
X0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRyYXN0RmlsdGVyKQorICAgIFNFVF9BUFBMSUVSX0ZS
T01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE9w
YWNpdHlGaWx0ZXIpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJsdXJGaWx0ZXIpCisg
ICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFscGhhQmx1cikKKyAgICBTRVRfQVBQTElFUl9G
Uk9NX09QVElPTlMoQ29udGVudFRleHR1cmUpCisKKyAgICBmcmFnbWVudEJ1aWxkZXIuYXBwZW5k
KGZyYWdtZW50VGVtcGxhdGUpOworICAgIHZlcnRleFNvdXJjZSA9IHZlcnRleFNoYWRlclNvdXJj
ZTsKKyAgICBmcmFnbWVudFNvdXJjZSA9IGZyYWdtZW50QnVpbGRlci50b1N0cmluZygpOwogfQog
CiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCkBAIC01MzQsMTcgKzM5OSwxNyBAQCBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkKIHsKIH0K
IAotUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0oU2hhZGVyS2V5IGtleSkKK1Bhc3NSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpn
ZXRTaGFkZXJQcm9ncmFtKE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2dyYW1zLmZpbmQoa2V5KTsKKyAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2dyYW1zLmZp
bmQob3B0aW9ucyk7CiAgICAgaWYgKGl0ICE9IG1fcHJvZ3JhbXMuZW5kKCkpCiAgICAgICAgIHJl
dHVybiBpdC0+dmFsdWU7CiAKICAgICBTdHJpbmcgdmVydGV4U2hhZGVyOwogICAgIFN0cmluZyBm
cmFnbWVudFNoYWRlcjsKLSAgICBnZXRTaGFkZXJTcGVjKGtleSwgdmVydGV4U2hhZGVyLCBmcmFn
bWVudFNoYWRlcik7CisgICAgZ2V0U2hhZGVyU3BlYyhvcHRpb25zLCB2ZXJ0ZXhTaGFkZXIsIGZy
YWdtZW50U2hhZGVyKTsKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHBy
b2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKG1fY29udGV4dCwgdmVy
dGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgbV9wcm9ncmFtcy5hZGQoa2V5LCBwcm9n
cmFtKTsKKyAgICBtX3Byb2dyYW1zLmFkZChvcHRpb25zLCBwcm9ncmFtKTsKICAgICByZXR1cm4g
cHJvZ3JhbTsKIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmlu
ZGV4IDYwNjA1ZjQyZDBlMzIzODdjNDJhNGZkZDA1MzE0MjdlMDRhZDcyMmEuLjYwN2VkNDdhNTMz
MDY0MWQzZTkyODJlM2QxM2ZjNmExNWJjNTA4ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5oCkBAIC01OSwxMCArNTksOSBAQCBwdWJsaWM6CiAgICAgVEVYTUFQX0RF
Q0xBUkVfU0FNUExFUihtYXNrKQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIFRFWE1B
UF9ERUNMQVJFX1VOSUZPUk0oYW1vdW50KQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZmls
dGVyQW1vdW50KQogICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZ2F1c3NpYW5LZXJuZWwpCiAg
ICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShibHVyUmFkaXVzKQotICAgIFRFWE1BUF9ERUNMQVJF
X1VOSUZPUk0oc2hhZG93Q29sb3IpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShzaGFkb3dP
ZmZzZXQpCiAgICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihjb250ZW50VGV4dHVyZSkKICNlbmRp
ZgpAQCAtODIsMzYgKzgxLDM3IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyIHsKIHB1YmxpYzoKLSAgICBlbnVtIFNoYWRlcktleSB7Ci0gICAgICAgIEludmFs
aWQgPSAwLAotICAgICAgICBEZWZhdWx0LAotICAgICAgICBSZWN0LAotICAgICAgICBNYXNrZWQs
Ci0gICAgICAgIE1hc2tlZFJlY3QsCi0gICAgICAgIFNvbGlkQ29sb3IsCi0gICAgICAgIEFudGlh
bGlhc2VkLAotICAgICAgICBHcmF5c2NhbGVGaWx0ZXIsCi0gICAgICAgIFNlcGlhRmlsdGVyLAot
ICAgICAgICBTYXR1cmF0ZUZpbHRlciwKLSAgICAgICAgSHVlUm90YXRlRmlsdGVyLAotICAgICAg
ICBCcmlnaHRuZXNzRmlsdGVyLAotICAgICAgICBDb250cmFzdEZpbHRlciwKLSAgICAgICAgT3Bh
Y2l0eUZpbHRlciwKLSAgICAgICAgSW52ZXJ0RmlsdGVyLAotICAgICAgICBCbHVyRmlsdGVyLAot
ICAgICAgICBTaGFkb3dGaWx0ZXJQYXNzMSwKLSAgICAgICAgU2hhZG93RmlsdGVyUGFzczIsCi0g
ICAgICAgIExhc3RGaWx0ZXIKKyAgICBlbnVtIE9wdGlvbiB7CisgICAgICAgIE1hdHJpeCAgICAg
ICAgICAgPSAxTCA8PCAwLAorICAgICAgICBUZXh0dXJlICAgICAgICAgID0gMUwgPDwgMSwKKyAg
ICAgICAgUmVjdCAgICAgICAgICAgICA9IDFMIDw8IDIsCisgICAgICAgIFNvbGlkQ29sb3IgICAg
ICAgPSAxTCA8PCAzLAorICAgICAgICBPcGFjaXR5ICAgICAgICAgID0gMUwgPDwgNCwKKyAgICAg
ICAgTWFzayAgICAgICAgICAgICA9IDFMIDw8IDUsCisgICAgICAgIEFudGlhbGlhcyAgICAgICAg
PSAxTCA8PCA2LAorICAgICAgICBHcmF5c2NhbGVGaWx0ZXIgID0gMUwgPDwgNywKKyAgICAgICAg
U2VwaWFGaWx0ZXIgICAgICA9IDFMIDw8IDgsCisgICAgICAgIFNhdHVyYXRlRmlsdGVyICAgPSAx
TCA8PCA5LAorICAgICAgICBIdWVSb3RhdGVGaWx0ZXIgID0gMUwgPDwgMTAsCisgICAgICAgIEJy
aWdodG5lc3NGaWx0ZXIgPSAxTCA8PCAxMSwKKyAgICAgICAgQ29udHJhc3RGaWx0ZXIgICA9IDFM
IDw8IDEyLAorICAgICAgICBJbnZlcnRGaWx0ZXIgICAgID0gMUwgPDwgMTMsCisgICAgICAgIE9w
YWNpdHlGaWx0ZXIgICAgPSAxTCA8PCAxNCwKKyAgICAgICAgQmx1ckZpbHRlciAgICAgICA9IDFM
IDw8IDE1LAorICAgICAgICBBbHBoYUJsdXIgICAgICAgID0gMUwgPDwgMTYsCisgICAgICAgIENv
bnRlbnRUZXh0dXJlICAgPSAxTCA8PCAxNwogICAgIH07CiAKKyAgICB0eXBlZGVmIHVuc2lnbmVk
IE9wdGlvbnM7CisKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpIHsgfQogICAgIGV4
cGxpY2l0IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKik7CiAg
ICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKIAotICAgIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGdldFNoYWRlclByb2dyYW0oU2hhZGVyS2V5
KTsKKyAgICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFkZXJQ
cm9ncmFtKE9wdGlvbnMpOwogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxTaGFkZXJL
ZXksIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGludD46
Okhhc2gsIEhhc2hUcmFpdHM8aW50PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxPcHRpb25zLCBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0+ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CiAgICAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1NYXAgbV9wcm9ncmFtczsKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IG1fY29udGV4dDsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180085</attachid>
            <date>2012-12-18 21:27:36 -0800</date>
            <delta_ts>2012-12-18 21:30:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104815-20121218212456.patch</filename>
            <type>text/plain</type>
            <size>48469</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlMGI1YjdmNzIzNDgy
NDNhNmZkYTc4YTJhMjVkYTg4OWNmYjQwNS4uMjk2YTBiODA3ZTIwZTMyNjBmNzQxZmQ5ZTgxMzUw
ZWYzZDZiZmRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTEyLTEyICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gSW5zdGVh
ZCBvZiBoYXZpbmcgbXVsdGlwbGUgc2hhZGVycyBzb3VyY2VzIHdpdGggbG90cyBvZiBkdXBsaWNh
dGlvbiwgd2Ugc2hvdWxkIGhhdmUgb25lIHNoYWRlciBzb3VyY2Ugd2l0aCBNQUNSTyB2YXJpYW50
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0ODE1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRl
ZCB0ZW1wbGF0ZXMgZm9yIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMsIGFuZCBhZGRl
ZCBzb21lIE1BQ1JPcyBpbiAKKyAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgdG8g
YWxsb3cgR0xTTCBwcmVjb21waWxlci1iYXNlZCBjb25maWd1cmF0aW9uLgorCisgICAgICAgIFRo
ZSB0ZW1wbGF0ZSBmb2xsb3dzIGEgcGF0dGVybiB3aGVyZSB0aGUgbWFpbiBmdW5jdGlvbiBpbiB0
aGUgc2hhZGVyIGNhbGxzCisgICAgICAgIGFwcGx5Rm9vQmFySWZOZWVkZWQoKSwgd2hpbGUgYXBw
bHlGb29CYXIoKSBpcyBpbXBsZW1lbnRlZC4gVGhlIE1hY3JvcyBwcmVwZW5kZWQgdG8gdGhlIHRl
bXBsYXRlIGRlZmluZSB3aGV0aGVyIGFwcGx5SWZOZWVkZWQgcmVzb2x2ZXMgdG8gdGhlIHJlYWwg
ZnVuY3Rpb24gb3IgdG8gYSBub29wLgorCisgICAgICAgIEluIGFkZGl0aW9uLCBtYWRlIHNvbWUg
c21hbGwgY2hhbmdlcyB0byB0aGUgZmlsdGVyIHNoYWRlcnMgc28gdGhhdCB0aGV5IGNhbiB1c2Ug
dGhlIHNhbWUgY29kZSBhcyB0aGUgbm9ybWFsIHNoYWRlcnMuCisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyBwaXhlbC9yZWYgdGVzdHMgd2hlbiBydW4gb24gUXQvRUZML0dUSy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wdGlvbnNGb3JGaWx0ZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6cHJlcGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZUdMOjphcHBseUZpbHRlcnMpOgorICAgICAgICAgICAgQWx3YXlzIGRyYXcgdXNpbmcgdGhlIGRy
YXdRdWFkIGZ1bmN0aW9uLCBhbmQgdXNlIHRoZSBuZXcgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6Ok9wdGlvbnMgbWFzayBpbnN0ZWFkIG9mIHRoZSBvbGQgU2hhZGVyS2V5LgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVy
UHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6
CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisKIDIwMTItMTItMTggIExl
dmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIElucHV0IGVsZW1l
bnRzIHdpdGggZGVmYXVsdCB0b3VjaCBoYW5kbGVycyBkb24ndCB1cGRhdGUgaGFuZGxlciBjb3Vu
dHMgd2hlbiBjaGFuZ2luZyBkb2N1bWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggZGMx
ZjJkYjhmZWRiY2ZiYWYyNzgwZjJkZmE1OTMyMDE2MjE2MTc1Mi4uNThmYzI0MGZlYmQ2Njk3MmIx
MmE4ZTU4ZTk4MzJkZjYyNmY0YWRmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTg1LDgg
Kzg1LDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRH
TERhdGEoY29udGV4dCkpOwogICAgICAgICB9CiAKLQotCiAgICAgICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCiAgICAgICAgIGV4cGxp
Y2l0IFNoYXJlZEdMRGF0YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKQEAgLTQxMywxNiAr
NDExLDE2IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2Jq
ZWN0IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJCiAgICAgaWYgKCF1c2VSZWN0ICYmIG5l
ZWRzQW50aWFsaWFzaW5nICYmIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh0ZXh0dXJlLCBm
bGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwg
bWFza1RleHR1cmUsIGV4cG9zZWRFZGdlcykpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5ID0gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OkRlZmF1bHQ7Ci0gICAgaWYgKG1hc2tlZCAmJiB1c2VSZWN0KQotICAgICAgICBr
ZXkgPSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFza2VkUmVjdDsKLSAgICBlbHNlIGlm
IChtYXNrZWQpCi0gICAgICAgIGtleSA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpNYXNr
ZWQ7Ci0gICAgZWxzZSBpZiAodXNlUmVjdCkKLSAgICAgICAga2V5ID0gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlJlY3Q7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlv
bnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlOworICAgIGlm
ICghIW1hc2tUZXh0dXJlKQorICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpNYXNrOworICAgIGlmIChmbGFncyAmIFNob3VsZFVzZUFSQlRleHR1cmVSZWN0KQor
ICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpSZWN0OworICAg
IGlmIChvcGFjaXR5IDwgMSkKKyAgICAgICAgb3B0aW9ucyB8PSBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6T3BhY2l0eTsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bT4gcHJvZ3JhbTsKLSAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oa2V5KTsKKyAgICBwcm9ncmFtID0g
ZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRl
clByb2dyYW0ob3B0aW9ucyk7CiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+
cHJvZ3JhbUlEKCkpOwogCiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHByb2dyYW0u
Z2V0KCksIHRleHR1cmUsIGZsYWdzLCB0ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9kZWxWaWV3
TWF0cml4LCBvcGFjaXR5LCBtYXNrVGV4dHVyZSk7CkBAIC01NjIsOCArNTYwLDExIEBAIGJvb2wg
VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZVdpdGhBbnRpYWxpYXNpbmcodWludDMyX3QgdGV4
dHVyZSwgRmxhZ3MgZmxhZ3MsCiAgICAgZmxvYXQgdGFyZ2V0UXVhZEVkZ2VzWzI0XTsKICAgICBx
dWFkVG9FZGdlQXJyYXkoZXhwYW5kZWRRdWFkSW5TY3JlZW5TcGFjZSwgdGFyZ2V0UXVhZEVkZ2Vz
KTsKICAgICBxdWFkVG9FZGdlQXJyYXkoaW5mbGF0ZVF1YWQocXVhZEluU2NyZWVuU3BhY2UuYm91
bmRpbmdCb3goKSwgIGluZmxhdGlvbkRpc3RhbmNlKSwgdGFyZ2V0UXVhZEVkZ2VzICsgMTIpOwor
ICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OlRleHR1cmU7CisgICAgaWYgKG9wYWNpdHkgPCAxKQorICAgICAgICBvcHRpb25zIHw9IFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5OwogCi0gICAgUmVmUHRyPFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OkFudGlhbGlhc2VkKTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBtX2NvbnRleHQzRC0+dXNl
UHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAgICAgbV9jb250ZXh0M0QtPnVuaWZvcm0z
ZnYocHJvZ3JhbS0+ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlTG9jYXRpb24oKSwgOCwg
dGFyZ2V0UXVhZEVkZ2VzKTsKIApAQCAtNzU2LDMyICs3NTcsMzMgQEAgdm9pZCBCaXRtYXBUZXh0
dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVjdCYgdGFyZ2V0
UmVjdCwgY28KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKIAotc3RhdGljIFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5Rm9yRmlsdGVyVHlwZShGaWx0ZXJPcGVyYXRp
b246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKK3N0YXRpYyBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6T3B0aW9ucyBvcHRpb25zRm9yRmlsdGVyVHlwZShGaWx0ZXJPcGVy
YXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5zaWduZWQgcGFzcykKIHsKICAgICBzd2l0Y2gg
KHR5cGUpIHsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgICAgICBy
ZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRlcjsKKyAgICAg
ICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0VQSUE6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
U2VwaWFGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTZXBpYUZpbHRlcjsKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6U2F0dXJhdGVGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpTYXR1cmF0ZUZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToK
LSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpIdWVSb3RhdGVGaWx0
ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZSB8
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpIdWVSb3RhdGVGaWx0ZXI7CiAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OklOVkVSVDoKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpJbnZlcnRGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpJbnZlcnRG
aWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgICAgIHJl
dHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QnJpZ2h0bmVzc0ZpbHRlcjsKKyAgICAg
ICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OkJyaWdodG5lc3NGaWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246OkNPTlRSQVNUOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OkNvbnRyYXN0RmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Q29udHJhc3RGaWx0
ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6Ci0gICAgICAgIHJldHVybiBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUZpbHRlcjsKKyAgICAgICAgcmV0dXJu
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6Ok9wYWNpdHlGaWx0ZXI7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6
CiAgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcjsK
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIHJldHVybiBw
YXNzID8gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MyIDogVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MxOworICAgICAgICByZXR1
cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkFscGhhQmx1cgorICAgICAgICAgICAgfCAo
cGFzcyA/IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpDb250ZW50VGV4dHVyZSB8IFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9yOiAwKTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpJbnZhbGlkOworICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CiAKQEAg
LTg1MiwxMyArODU0LDEzIEBAIHN0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBGaWx0CiAgICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlNFUElBOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToK
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgY29udGV4dC0+
dW5pZm9ybTFmKHByb2dyYW0tPmFtb3VudExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAg
ICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmZpbHRlckFtb3VudExvY2F0aW9uKCks
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29sb3JNYXRyaXhGaWx0ZXJPcGVyYXRpb24mPihvcGVy
YXRpb24pLmFtb3VudCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OklOVkVSVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
Ok9QQUNJVFk6Ci0gICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5hbW91bnRMb2Nh
dGlvbigpLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNpY0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3Bl
cmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0x
Zihwcm9ncmFtLT5maWx0ZXJBbW91bnRMb2NhdGlvbigpLCBzdGF0aWNfY2FzdDxjb25zdCBCYXNp
Y0NvbXBvbmVudFRyYW5zZmVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKS5hbW91bnQoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCTFVSOiB7CiAgICAg
ICAgIGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mIGJsdXIgPSBzdGF0aWNfY2FzdDxjb25zdCBC
bHVyRmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9uKTsKQEAgLTg3OSwxOSArODgxLDIwIEBAIHN0
YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
KiBwcm9ncmFtLCBjb25zdCBGaWx0CiAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3Jh
bS0+Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1
c3NpYW5LZXJuZWwoKSk7CiAgICAgICAgIHN3aXRjaCAocGFzcykgewogICAgICAgICBjYXNlIDA6
Ci0gICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyLgorICAgICAg
ICAgICAgLy8gRmlyc3QgcGFzczogaG9yaXpvbnRhbCBhbHBoYSBibHVyLgorICAgICAgICAgICAg
Y29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCBzaGFkb3cu
c3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpLCAwKTsKICAgICAgICAgICAgIGNv
bnRleHQtPnVuaWZvcm0yZihwcm9ncmFtLT5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCBmbG9hdChz
aGFkb3cubG9jYXRpb24oKS54KCkpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgZmxvYXQoc2hhZG93
LmxvY2F0aW9uKCkueSgpKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwgc2hhZG93LnN0
ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgLy8gU2Vjb25kIHBhc3M6IHdlIG5lZWQgdGhl
IHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3IgY29tcG9zaXRpbmcuCi0g
ICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0aW9u
KCksIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAg
ICAgICAgIGZsb2F0IHIsIGcsIGIsIGE7CisgICAgICAgICAgICBzaGFkb3cuY29sb3IoKS5nZXRS
R0JBKHIsIGcsIGIsIGEpOworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0t
PmNvbG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlm
b3JtMmYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0aW9uKCksIDAsIHNoYWRvdy5zdGREZXZpYXRp
b24oKSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZv
cm0yZihwcm9ncmFtLT5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCAwLCAwKTsKICAgICAgICAgICAg
IGNvbnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKICAg
ICAgICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBjb250ZW50VGV4dHVyZSk7CiAgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMWkocHJv
Z3JhbS0+Y29udGVudFRleHR1cmVMb2NhdGlvbigpLCAxKTsKLSAgICAgICAgICAgIGZsb2F0IHIs
IGcsIGIsIGE7Ci0gICAgICAgICAgICBzaGFkb3cuY29sb3IoKS5nZXRSR0JBKHIsIGcsIGIsIGEp
OwotICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPnNoYWRvd0NvbG9yTG9j
YXRpb24oKSwgciwgZywgYiwgYSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBicmVhazsKQEAgLTk2MCwyNSArOTYzLDEzIEBAIGJvb2wgVGV4dHVyZU1hcHBlckdMOjpk
cmF3VXNpbmdDdXN0b21GaWx0ZXIoQml0bWFwVGV4dHVyZSYgdGFyZ2V0LCBjb25zdCBCaXRtYXBU
CiB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUm
IHNhbXBsZXIsIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0
ZXJPcGVyYXRpb24mIGZpbHRlciwgaW50IHBhc3MpCiB7CiAgICAgLy8gRm9yIHN0YW5kYXJkIGZp
bHRlcnMsIHdlIGFsd2F5cyBkcmF3IHRoZSB3aG9sZSB0ZXh0dXJlIHdpdGhvdXQgdHJhbnNmb3Jt
YXRpb25zLgotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5ID0g
a2V5Rm9yRmlsdGVyVHlwZShmaWx0ZXIuZ2V0T3BlcmF0aW9uVHlwZSgpLCBwYXNzKTsKLSAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVk
R0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShrZXkp
OworICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMgPSBvcHRp
b25zRm9yRmlsdGVyVHlwZShmaWx0ZXIuZ2V0T3BlcmF0aW9uVHlwZSgpLCBwYXNzKTsKKyAgICBS
ZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVk
R0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRp
b25zKTsKICAgICBBU1NFUlQocHJvZ3JhbSk7CiAKICAgICBwcmVwYXJlRmlsdGVyUHJvZ3JhbShw
cm9ncmFtLmdldCgpLCBmaWx0ZXIsIHBhc3MsIHNhbXBsZXIuY29udGVudFNpemUoKSwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oY29udGVudFRleHR1cmUpLmlkKCkpOwotCi0g
ICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExv
Y2F0aW9uKCkpOwotICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9n
cmFtLT50ZXhDb29yZExvY2F0aW9uKCkpOwotICAgIG1fY29udGV4dDNELT5hY3RpdmVUZXh0dXJl
KEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMCk7Ci0gICAgbV9jb250ZXh0M0QtPmJpbmRUZXh0
dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBzdGF0aWNfY2FzdDxjb25zdCBCaXRt
YXBUZXh0dXJlR0wmPihzYW1wbGVyKS5pZCgpKTsKLSAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTFp
KHByb2dyYW0tPnNhbXBsZXJMb2NhdGlvbigpLCAwKTsKLSAgICBjb25zdCBHQzNEZmxvYXQgdGFy
Z2V0VmVydGljZXNbXSA9IHstMSwgLTEsIDEsIC0xLCAxLCAxLCAtMSwgMX07Ci0gICAgY29uc3Qg
R0MzRGZsb2F0IHNvdXJjZVZlcnRpY2VzW10gPSB7MCwgMCwgMSwgMCwgMSwgMSwgMCwgMX07Ci0g
ICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dmVydGV4TG9jYXRp
b24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBmYWxzZSwgMCwgR0MzRGludHB0cih0
YXJnZXRWZXJ0aWNlcykpOwotICAgIG1fY29udGV4dDNELT52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBy
b2dyYW0tPnRleENvb3JkTG9jYXRpb24oKSwgMiwgR3JhcGhpY3NDb250ZXh0M0Q6OkZMT0FULCBm
YWxzZSwgMCwgR0MzRGludHB0cihzb3VyY2VWZXJ0aWNlcykpOwotICAgIG1fY29udGV4dDNELT5k
aXNhYmxlKEdyYXBoaWNzQ29udGV4dDNEOjpCTEVORCk7Ci0gICAgbV9jb250ZXh0M0QtPmRyYXdB
cnJheXMoR3JhcGhpY3NDb250ZXh0M0Q6OlRSSUFOR0xFX0ZBTiwgMCwgNCk7Ci0gICAgbV9jb250
ZXh0M0QtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigp
KTsKLSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRl
eENvb3JkTG9jYXRpb24oKSk7CisgICAgRmxvYXRSZWN0IHRhcmdldFJlY3QoSW50UG9pbnQ6Onpl
cm8oKSwgc2FtcGxlci5jb250ZW50U2l6ZSgpKTsKKyAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFBy
b2dyYW0ocHJvZ3JhbS5nZXQoKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4o
c2FtcGxlcikuaWQoKSwgMCwgSW50U2l6ZSgxLCAxKSwgdGFyZ2V0UmVjdCwgVHJhbnNmb3JtYXRp
b25NYXRyaXgoKSwgMSwgMCk7CiB9CiAKIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFw
VGV4dHVyZUdMOjphcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29u
c3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IGZpbHRlcnMpCkBAIC0xMTcyLDcgKzExNjMsNyBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6YmVn
aW5DbGlwKGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtb2RlbFZpZXdNYXRyaXgsIGNvbgog
CiAgICAgZGF0YSgpLmluaXRpYWxpemVTdGVuY2lsKCk7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6RGVmYXVsdCk7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFt
PiBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLnRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmdldFNoYWRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNvbGlkQ29s
b3IpOwogCiAgICAgbV9jb250ZXh0M0QtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkp
OwogICAgIG1fY29udGV4dDNELT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwcm9ncmFtLT52ZXJ0
ZXhMb2NhdGlvbigpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3Bw
CmluZGV4IDIxNzU2MjBhZTE3ZjQzZWZjNDgxZmE1NjczODM3YmY3YTE2OGZjMjkuLmY2ZGRhZTNi
N2U2MDFiNDk5MmYzMGZhYmRhZmI1NWM1NTZiZDY0ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyLmNwcApAQCAtMzIsNyArMzIsNiBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLQogc3RhdGljIGlubGluZSBib29sIGNvbXBvc2l0aW5nTG9nRW5hYmxlZCgpCiB7
CiAjaWYgIUxPR19ESVNBQkxFRApAQCAtMTA2LDQyMyArMTA1LDI4OSBAQCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6flRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKCkKICAgICBtX2NvbnRl
eHQtPmRlbGV0ZVByb2dyYW0ocHJvZ3JhbUlEKTsKIH0KIAotc3RydWN0IFNoYWRlclNwZWMgewot
ICAgIFN0cmluZyB2ZXJ0ZXhTaGFkZXI7Ci0gICAgU3RyaW5nIGZyYWdtZW50U2hhZGVyOwotICAg
IFNoYWRlclNwZWMoY29uc3QgY2hhciogdmVydGV4ID0gMCwgY29uc3QgY2hhciogZnJhZ21lbnQg
PSAwKQotICAgICAgICA6IHZlcnRleFNoYWRlcih2ZXJ0ZXggPyBTdHJpbmcoQVNDSUlMaXRlcmFs
KHZlcnRleCkpIDogU3RyaW5nKCkpCi0gICAgICAgICwgZnJhZ21lbnRTaGFkZXIoZnJhZ21lbnQg
PyBTdHJpbmcoQVNDSUlMaXRlcmFsKGZyYWdtZW50KSkgOiBTdHJpbmcoKSkKLSAgICB7Ci0gICAg
fQotfTsKLQotc3RhdGljIHZvaWQgZ2V0U2hhZGVyU3BlYyhUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6U2hhZGVyS2V5IGtleSwgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21l
bnRTb3VyY2UpCi17Ci0gICAgc3RhdGljIFZlY3RvcjxTaGFkZXJTcGVjPiBzcGVjcyA9IFZlY3Rv
cjxTaGFkZXJTcGVjPigpOwotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudE9wYWNpdHlB
bmRNYXNrID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7Ci0gICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7Ci0gICAg
ICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX21hc2s7Ci0gICAgICAgICAgICB1bmlmb3JtIGZs
b2F0IHVfb3BhY2l0eTsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3NvdXJjZVRleENvb3Jk
OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwotICAgICAgICAgICAg
dm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjNCBjb2xv
ciA9IHRleHR1cmUyRChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29vcmQpOwotICAgICAgICAgICAg
ICAgIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpOwot
ICAgICAgICAgICAgICAgIGZsb2F0IGZyYWdtZW50QWxwaGEgPSB1X29wYWNpdHkgKiBtYXNrQ29s
b3IuYTsKLSAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIGZy
YWdtZW50QWxwaGEsIGNvbG9yLmEgKiBmcmFnbWVudEFscGhhKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFJlY3RPcGFjaXR5QW5k
TWFzayA9Ci0gICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1w
IGZsb2F0OwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc2FtcGxlcjsKLSAg
ICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX21hc2s7Ci0gICAgICAgICAgICB1bmlm
b3JtIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3NvdXJjZVRl
eENvb3JkOwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOwotICAgICAg
ICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVj
NCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKLSAg
ICAgICAgICAgICAgICB2ZWM0IG1hc2tDb2xvciA9IHRleHR1cmUyRFJlY3Qoc19tYXNrLCB2X21h
c2tUZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVfb3Bh
Y2l0eSAqIG1hc2tDb2xvci5hOwotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQo
Y29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOwotICAg
ICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleE9w
YWNpdHlBbmRNYXNrID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgdW5pZm9ybSBt
YXQ0IHVfbWF0cml4OwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2ZsaXA7Ci0gICAgICAg
ICAgICB1bmlmb3JtIHZlYzIgdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgICAgIGF0dHJpYnV0ZSB2
ZWM0IGFfdmVydGV4OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7
Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2
b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2X3NvdXJjZVRl
eENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRleC55
LCB1X2ZsaXApKSAqIHVfdGV4dHVyZVNpemU7Ci0gICAgICAgICAgICAgICAgdl9tYXNrVGV4Q29v
cmQgPSB2ZWMyKGFfdmVydGV4KTsKLSAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0
cml4ICogYV92ZXJ0ZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogZnJhZ21lbnRTaW1wbGUgPQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAg
ICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxl
cjJEIHNfc2FtcGxlcjsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OwotICAg
ICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2b2lk
IG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IGNvbG9yID0g
dGV4dHVyZTJEKHNfc2FtcGxlciwgdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAg
Z2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiB1X29wYWNpdHksIGNvbG9yLmEgKiB1X29w
YWNpdHkpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50QW50aWFsaWFzaW5nTm9NYXNrID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAg
ICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRCBzX3NhbXBsZXI7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhD
b29yZDsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICAgICAg
dW5pZm9ybSB2ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzhdOwotCi0gICAg
ICAgICAgICAgICAgLy8gVGhlIGRhdGEgcGFzc2VkIGluIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNj
cmVlblNwYWNlIGlzIG1lcmVseSB0aGUKLSAgICAgICAgICAgICAgICAvLyBwcmUtc2NhbGVkIGNv
ZWZmZWNpZW50cyBvZiB0aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0aGUgZm91ciBlZGdl
cwotICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBleHBhbmRlZCBxdWFkIGluIHNjcmVlbiBzcGFj
ZSBhbmQgdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveAotICAgICAgICAgICAgICAgIC8vIG9m
IHRoZSBleHBhbmRlZCBxdWFkLgotICAgICAgICAgICAgICAgIC8vCi0gICAgICAgICAgICBmbG9h
dCBub3JtYWxpemVkRGlzdGFuY2UodmVjMyBlZGdlQ29lZmZpY2llbnQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIGRvaW5nIGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1
bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRvIHRoZSBmb3JtdWxhOgotICAgICAgICAgICAgICAgIC8v
IChBKnAueCArIEIqcC55ICsgQykgLyBzcXJ0KEFeMiArIEJeMikgPSBkaXN0YW5jZSBmcm9tIGxp
bmUgdG8gcAotICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBBLCBCIGFuZCBDIGhhdmUgYWxy
ZWFkeSBiZWVuIHNjYWxlZCBieSAxIC8gc3FydChBXjIgKyBCXjIpLgotICAgICAgICAgICAgICAg
IHJldHVybiBjbGFtcChkb3QoZWRnZUNvZWZmaWNpZW50LCB2ZWMzKGdsX0ZyYWdDb29yZC54eSwg
MS4pKSwgMC4sIDEuKTsKK3N0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaGFkZXJTb3VyY2UgPQor
ICAgIFNUUklOR0lGWSgKKyAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OworICAgICAgICB1
bmlmb3JtIGZsb2F0IHVfZmxpcDsKKyAgICAgICAgdW5pZm9ybSB2ZWMyIHVfdGV4dHVyZVNpemU7
CisgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OworICAgICAgICB2YXJ5aW5nIHZlYzIg
dl90ZXhDb29yZDsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOworCisgICAg
ICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWM0IHBvc2l0aW9u
ID0gYV92ZXJ0ZXg7CisgICAgICAgICAgICB2X3RleENvb3JkID0gdmVjMihwb3NpdGlvbi54LCBt
aXgocG9zaXRpb24ueSwgMS4gLSBwb3NpdGlvbi55LCB1X2ZsaXApKSAqIHVfdGV4dHVyZVNpemU7
CisgICAgICAgICAgICB2X21hc2tUZXhDb29yZCA9IHZlYzIocG9zaXRpb24pOworICAgICAgICAg
ICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OworICAgICAgICB9CisgICAgKTsK
KworI2RlZmluZSBHTFNMX0RJUkVDVElWRSguLi4pICIjIiNfX1ZBX0FSR1NfXyJcbiIKKyNkZWZp
bmUgREVGSU5FX0FQUExJRVIoTmFtZSkgXAorICAgICIjaWZkZWYgRU5BQkxFXyIjTmFtZSJcbiIg
XAorICAgICIjZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIGFwcGx5IiNOYW1lIlxuIlwKKyAg
ICAiI2Vsc2VcbiJcCisgICAgIiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQgbm9vcFxuIlwK
KyAgICAiI2VuZGlmXG4iCisKKyNkZWZpbmUgUkVDVF9URVhUVVJFX0RJUkVDVElWRSBcCisgICAg
R0xTTF9ESVJFQ1RJVkUoaWZkZWYgRU5BQkxFX1JlY3QpIFwKKyAgICAgICAgR0xTTF9ESVJFQ1RJ
VkUoZGVmaW5lIFNhbXBsZXJUeXBlIHNhbXBsZXIyRFJlY3QpIFwKKyAgICAgICAgR0xTTF9ESVJF
Q1RJVkUoZGVmaW5lIFNhbXBsZXJGdW5jdGlvbiB0ZXh0dXJlMkRSZWN0KSBcCisgICAgR0xTTF9E
SVJFQ1RJVkUoZWxzZSkgXAorICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlclR5
cGUgc2FtcGxlcjJEKSBcCisgICAgICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyRnVu
Y3Rpb24gdGV4dHVyZTJEKSBcCisgICAgR0xTTF9ESVJFQ1RJVkUoZW5kaWYpCisKKyNkZWZpbmUg
RU5BQkxFX0FQUExJRVIoTmFtZSkgIiNkZWZpbmUgRU5BQkxFXyIjTmFtZSJcbiIKKyNkZWZpbmUg
QkxVUl9DT05TVEFOVFMgXAorICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBHQVVTU0lBTl9LRVJO
RUxfSEFMRl9XSURUSCAxMSkgXAorICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBHQVVTU0lBTl9L
RVJORUxfU1RFUCAwLjIpCisKKworc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50VGVtcGxhdGUg
PQorICAgIERFRklORV9BUFBMSUVSKFRleHR1cmUpCisgICAgREVGSU5FX0FQUExJRVIoU29saWRD
b2xvcikKKyAgICBERUZJTkVfQVBQTElFUihPcGFjaXR5KQorICAgIERFRklORV9BUFBMSUVSKE1h
c2spCisgICAgREVGSU5FX0FQUExJRVIoQW50aWFsaWFzKQorICAgIERFRklORV9BUFBMSUVSKEdy
YXlzY2FsZUZpbHRlcikKKyAgICBERUZJTkVfQVBQTElFUihTZXBpYUZpbHRlcikKKyAgICBERUZJ
TkVfQVBQTElFUihTYXR1cmF0ZUZpbHRlcikKKyAgICBERUZJTkVfQVBQTElFUihIdWVSb3RhdGVG
aWx0ZXIpCisgICAgREVGSU5FX0FQUExJRVIoSW52ZXJ0RmlsdGVyKQorICAgIERFRklORV9BUFBM
SUVSKEJyaWdodG5lc3NGaWx0ZXIpCisgICAgREVGSU5FX0FQUExJRVIoQ29udHJhc3RGaWx0ZXIp
CisgICAgREVGSU5FX0FQUExJRVIoT3BhY2l0eUZpbHRlcikKKyAgICBERUZJTkVfQVBQTElFUihC
bHVyRmlsdGVyKQorICAgIERFRklORV9BUFBMSUVSKEFscGhhQmx1cikKKyAgICBERUZJTkVfQVBQ
TElFUihDb250ZW50VGV4dHVyZSkKKyAgICBSRUNUX1RFWFRVUkVfRElSRUNUSVZFCisgICAgQkxV
Ul9DT05TVEFOVFMKKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OworICAgICAgICB1bmlmb3JtIFNhbXBsZXJUeXBlIHNfc2FtcGxlcjsKKyAgICAgICAgdW5p
Zm9ybSBzYW1wbGVyMkQgc19tYXNrOworICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX2NvbnRl
bnRUZXh0dXJlOworICAgICAgICB1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTsKKyAgICAgICAgdmFy
eWluZyB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X21hc2tUZXhDb29y
ZDsKKyAgICAgICAgdW5pZm9ybSB2ZWMzIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNl
WzhdOworICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmlsdGVyQW1vdW50OworICAgICAgICB1bmlm
b3JtIHZlYzIgdV9ibHVyUmFkaXVzOworICAgICAgICB1bmlmb3JtIHZlYzIgdV9zaGFkb3dPZmZz
ZXQ7CisgICAgICAgIHVuaWZvcm0gdmVjNCB1X2NvbG9yOworICAgICAgICB1bmlmb3JtIGZsb2F0
IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOworCisgICAgICAg
IHZvaWQgbm9vcCh2ZWM0KSB7IH0KKworICAgICAgICAvLyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9l
eHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UgaXMgbWVyZWx5IHRoZQorICAgICAgICAvLyBw
cmUtc2NhbGVkIGNvZWZmZWNpZW50cyBvZiB0aGUgbGluZSBlcXVhdGlvbnMgZGVzY3JpYmluZyB0
aGUgZm91ciBlZGdlcworICAgICAgICAvLyBvZiB0aGUgZXhwYW5kZWQgcXVhZCBpbiBzY3JlZW4g
c3BhY2UgYW5kIHRoZSByZWN0YW5ndWxhciBib3VuZGluZyBib3gKKyAgICAgICAgLy8gb2YgdGhl
IGV4cGFuZGVkIHF1YWQuCisgICAgICAgIC8vCisgICAgICAgIGZsb2F0IG5vcm1hbGl6ZWREaXN0
YW5jZSh2ZWMzIGVkZ2VDb2VmZmljaWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2Ug
YXJlIGRvaW5nIGEgc2ltcGxlIGRpc3RhbmNlIGNhbGN1bGF0aW9uIGhlcmUgYWNjb3JkaW5nIHRv
IHRoZSBmb3JtdWxhOgorICAgICAgICAgICAgLy8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQo
QV4yICsgQl4yKSA9IGRpc3RhbmNlIGZyb20gbGluZSB0byBwCisgICAgICAgICAgICAvLyBOb3Rl
IHRoYXQgQSwgQiBhbmQgQyBoYXZlIGFscmVhZHkgYmVlbiBzY2FsZWQgYnkgMSAvIHNxcnQoQV4y
ICsgQl4yKS4KKyAgICAgICAgICAgIHJldHVybiBjbGFtcChkb3QoZWRnZUNvZWZmaWNpZW50LCB2
ZWMzKGdsX0ZyYWdDb29yZC54eSwgMS4pKSwgMC4sIDEuKTsKKyAgICAgICAgfQorCisgICAgICAg
IGZsb2F0IGFudGlhbGlhc1F1YWQodmVjMyBjb2VmZmljaWVudDEsIHZlYzMgY29lZmZpY2llbnQy
LCB2ZWMzIGNvZWZmaWNpZW50MywgdmVjMyBjb2VmZmljaWVudDQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIE5vdyB3ZSB3YW50IHRvIHJlZHVjZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZy
YWdtZW50IGlmIGl0IGlzIGNsb3NlIHRvIHRoZQorICAgICAgICAgICAgLy8gZWRnZXMgb2YgdGhl
IGV4cGFuZGVkIHF1YWQgKG9yIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveCAtLSB3aGljaCBzZWVt
cyB0byBiZQorICAgICAgICAgICAgLy8gaW1wb3J0YW50IGZvciBiYWNrZmFjaW5nIHF1YWRzKS4g
Tm90ZSB0aGF0IHdlIGFyZSBjb21iaW5pbmcgdGhlIGNvbnRyaWJ1dGlvbgorICAgICAgICAgICAg
Ly8gZnJvbSB0aGUgKHRvcCB8fCBib3R0b20pIGFuZCAobGVmdCB8fCByaWdodCkgZWRnZSBieSBz
aW1wbHkgbXVsdGlwbHlpbmcuIFRoaXMgZm9sbG93cworICAgICAgICAgICAgLy8gdGhlIGFwcHJv
YWNoIGRlc2NyaWJlZCBhdDogaHR0cDovL2h0dHAuZGV2ZWxvcGVyLm52aWRpYS5jb20vR1BVR2Vt
czIvZ3B1Z2VtczJfY2hhcHRlcjIyLmh0bWwsCisgICAgICAgICAgICAvLyBpbiB0aGlzIGNhc2Ug
d2l0aG91dCB1c2luZyBHYXVzc2lhbiB3ZWlnaHRzLgorICAgICAgICAgICAgcmV0dXJuIG1pbihu
b3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQxKSwgbm9ybWFsaXplZERpc3RhbmNlKGNvZWZm
aWNpZW50MikpCisgICAgICAgICAgICAgICAgKiBtaW4obm9ybWFsaXplZERpc3RhbmNlKGNvZWZm
aWNpZW50MyksIG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDQpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGZsb2F0IGFudGlhbGlhcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0
IGFudGlhbGlhc1ZhbHVlRm9yUXVhZCA9IAorICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQo
dV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMF0sCisgICAgICAgICAgICAgICAgICAg
IHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzFdLAorICAgICAgICAgICAgICAgICAg
ICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsyXSwKKyAgICAgICAgICAgICAgICAg
ICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbM10pOworCisgICAgICAgICAgICBm
bG9hdCBhbnRpYWxpYXNWYWx1ZUZvckJvdW5kaW5nUmVjdCA9IAorICAgICAgICAgICAgICAgIGFu
dGlhbGlhc1F1YWQodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNF0sCisgICAgICAg
ICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLAorICAgICAg
ICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs2XSwKKyAgICAg
ICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbN10pOworCisg
ICAgICAgICAgICByZXR1cm4gbWluKGFudGlhbGlhc1ZhbHVlRm9yUXVhZCwgYW50aWFsaWFzVmFs
dWVGb3JCb3VuZGluZ1JlY3QpOyAgICAgICAgICAgCisgICAgICAgIH0KKworICAgICAgICB2b2lk
IGFwcGx5VGV4dHVyZShpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yID0gU2FtcGxlckZ1bmN0aW9u
KHNfc2FtcGxlciwgdl90ZXhDb29yZCk7IH0KKyAgICAgICAgdm9pZCBhcHBseU9wYWNpdHkoaW5v
dXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB1X29wYWNpdHk7IH0KKyAgICAgICAgdm9pZCBhcHBs
eUFudGlhbGlhcyhpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IGFudGlhbGlhcygpOyB9Cisg
ICAgICAgIHZvaWQgYXBwbHlNYXNrKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdGV4dHVy
ZTJEKHNfbWFzaywgdl9tYXNrVGV4Q29vcmQpLmE7IH0KKworICAgICAgICB2b2lkIGFwcGx5R3Jh
eXNjYWxlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZs
b2F0IGFtb3VudCA9IDEuMCAtIHVfZmlsdGVyQW1vdW50OworICAgICAgICAgICAgY29sb3IgPSB2
ZWM0KCgwLjIxMjYgKyAwLjc4NzQgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcx
NTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29s
b3IuYiwKKyAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9y
LnIgKyAoMC43MTUyICsgMC4yODQ4ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4w
NzIyICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEy
NiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xv
ci5nICsgKDAuMDcyMiArIDAuOTI3OCAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAg
ICAgIGNvbG9yLmEpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseVNlcGlhRmlsdGVy
KGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9
IDEuMCAtIHVfZmlsdGVyQW1vdW50OworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KCgwLjM5MyAr
IDAuNjA3ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43NjkgLSAwLjc2OSAqIGFtb3VudCkgKiBj
b2xvci5nICsgKDAuMTg5IC0gMC4xODkgKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAg
ICAgICAoMC4zNDkgLSAwLjM0OSAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNjg2ICsgMC4zMTQg
KiBhbW91bnQpICogY29sb3IuZyArICgwLjE2OCAtIDAuMTY4ICogYW1vdW50KSAqIGNvbG9yLmIs
CisgICAgICAgICAgICAgICAgKDAuMjcyIC0gMC4yNzIgKiBhbW91bnQpICogY29sb3IuciArICgw
LjUzNCAtIDAuNTM0ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xMzEgKyAwLjg2OSAqIGFtb3Vu
dCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBhcHBseVNhdHVyYXRlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNCgoMC4yMTMgKyAwLjc4NyAqIHVfZmlsdGVyQW1v
dW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9y
LmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAg
ICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5yICsgKDAu
NzE1ICsgMC4yODUgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIg
KiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICgwLjIxMyAtIDAu
MjEzICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9maWx0
ZXJBbW91bnQpICogY29sb3IuZyArICgwLjA3MiArIDAuOTI4ICogdV9maWx0ZXJBbW91bnQpICog
Y29sb3IuYiwKKyAgICAgICAgICAgICAgICBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgYXBwbHlIdWVSb3RhdGVGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgewor
ICAgICAgICAgICAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2OworICAgICAgICAg
ICAgZmxvYXQgYyA9IGNvcyh1X2ZpbHRlckFtb3VudCAqIHBpIC8gMTgwLjApOworICAgICAgICAg
ICAgZmxvYXQgcyA9IHNpbih1X2ZpbHRlckFtb3VudCAqIHBpIC8gMTgwLjApOworICAgICAgICAg
ICAgY29sb3IgPSB2ZWM0KGNvbG9yLnIgKiAoMC4yMTMgKyBjICogMC43ODcgLSBzICogMC4yMTMp
ICsgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSAtIHMgKiAwLjcxNSkgKyBjb2xvci5iICog
KDAuMDcyIC0gYyAqIDAuMDcyICsgcyAqIDAuOTI4KSwKKyAgICAgICAgICAgICAgICBjb2xvci5y
ICogKDAuMjEzIC0gYyAqIDAuMjEzICsgcyAqIDAuMTQzKSArIGNvbG9yLmcgKiAoMC43MTUgKyBj
ICogMC4yODUgKyBzICogMC4xNDApICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiAtIHMg
KiAwLjI4MyksCisgICAgICAgICAgICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyAt
IHMgKiAwLjc4NykgKyAgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSArIHMgKiAwLjcxNSkg
KyBjb2xvci5iICogKDAuMDcyICsgYyAqIDAuOTI4ICsgcyAqIDAuMDcyKSwKKyAgICAgICAgICAg
ICAgICBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IGludmVydChmbG9hdCBu
KSB7IHJldHVybiAoMS4wIC0gbikgKiB1X2ZpbHRlckFtb3VudCArIG4gKiAoMS4wIC0gdV9maWx0
ZXJBbW91bnQpOyB9CisgICAgICAgIHZvaWQgYXBwbHlJbnZlcnRGaWx0ZXIoaW5vdXQgdmVjNCBj
b2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGludmVydChjb2xvci5y
KSwgaW52ZXJ0KGNvbG9yLmcpLCBpbnZlcnQoY29sb3IuYiksIGNvbG9yLmEpOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBhcHBseUJyaWdodG5lc3NGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqICgxLjAgKyB1
X2ZpbHRlckFtb3VudCksIGNvbG9yLmEpOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgY29u
dHJhc3QoZmxvYXQgbikgeyByZXR1cm4gKG4gLSAwLjUpICogdV9maWx0ZXJBbW91bnQgKyAwLjU7
IH0KKyAgICAgICAgdm9pZCBhcHBseUNvbnRyYXN0RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNChjb250cmFzdChjb2xvci5yKSwgY29u
dHJhc3QoY29sb3IuZyksIGNvbnRyYXN0KGNvbG9yLmIpLCBjb2xvci5hKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgYXBwbHlPcGFjaXR5RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNChjb2xvci5yLCBjb2xvci5nLCBjb2xvci5i
LCBjb2xvci5hICogdV9maWx0ZXJBbW91bnQpOworICAgICAgICB9CisKKyAgICAgICAgdmVjNCBz
YW1wbGVDb2xvckF0UmFkaXVzKGZsb2F0IHJhZGl1cykKKyAgICAgICAgeworICAgICAgICAgICAg
dmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7CisgICAgICAg
ICAgICByZXR1cm4gU2FtcGxlckZ1bmN0aW9uKHNfc2FtcGxlciwgY29vcmQpICogZmxvYXQoY29v
cmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEu
KTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IHNhbXBsZUFscGhhQXRSYWRpdXMoZmxvYXQg
cmFkaXVzKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAt
IHVfc2hhZG93T2Zmc2V0ICsgcmFkaXVzICogdV9ibHVyUmFkaXVzOworICAgICAgICAgICAgcmV0
dXJuIFNhbXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+
IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgYXBwbHlCbHVyRmlsdGVyKGlub3V0IHZlYzQgY29sb3Ip
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzQgdG90YWwgPSBzYW1wbGVDb2xvckF0UmFkaXVz
KDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTsg
aSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKKyAgICAgICAgICAgICAgICB0
b3RhbCArPSBzYW1wbGVDb2xvckF0UmFkaXVzKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NU
RVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKKyAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1w
bGVDb2xvckF0UmFkaXVzKGZsb2F0KC0xICogaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1
X2dhdXNzaWFuS2VybmVsW2ldOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBmbG9hdCBh
bnRpYWxpYXNRdWFkKHZlYzMgY29lZmZpY2llbnQxLCB2ZWMzIGNvZWZmaWNpZW50MiwgdmVjMyBj
b2VmZmljaWVudDMsIHZlYzMgY29lZmZpY2llbnQ0KQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIC8vIE5vdyB3ZSB3YW50IHRvIHJlZHVjZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZy
YWdtZW50IGlmIGl0IGlzIGNsb3NlIHRvIHRoZQotICAgICAgICAgICAgICAgIC8vIGVkZ2VzIG9m
IHRoZSBleHBhbmRlZCBxdWFkIChvciByZWN0YW5ndWxhciBib3VuZGluZyBib3ggLS0gd2hpY2gg
c2VlbXMgdG8gYmUKLSAgICAgICAgICAgICAgICAvLyBpbXBvcnRhbnQgZm9yIGJhY2tmYWNpbmcg
cXVhZHMpLiBOb3RlIHRoYXQgd2UgYXJlIGNvbWJpbmluZyB0aGUgY29udHJpYnV0aW9uCi0gICAg
ICAgICAgICAgICAgLy8gZnJvbSB0aGUgKHRvcCB8fCBib3R0b20pIGFuZCAobGVmdCB8fCByaWdo
dCkgZWRnZSBieSBzaW1wbHkgbXVsdGlwbHlpbmcuIFRoaXMgZm9sbG93cwotICAgICAgICAgICAg
ICAgIC8vIHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYXQ6IGh0dHA6Ly9odHRwLmRldmVsb3Blci5u
dmlkaWEuY29tL0dQVUdlbXMyL2dwdWdlbXMyX2NoYXB0ZXIyMi5odG1sLAotICAgICAgICAgICAg
ICAgIC8vIGluIHRoaXMgY2FzZSB3aXRob3V0IHVzaW5nIEdhdXNzaWFuIHdlaWdodHMuCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1pbihub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQxKSwg
bm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MikpCi0gICAgICAgICAgICAgICAgICAgICog
bWluKG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDMpLCBub3JtYWxpemVkRGlzdGFuY2Uo
Y29lZmZpY2llbnQ0KSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBjb2xvciA9IHRvdGFs
OworICAgICAgICB9CiAKLSAgICAgICAgICAgIGZsb2F0IGFudGlhbGlhcygpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgYW50aWFsaWFzVmFsdWVGb3JRdWFkID0gCi0gICAg
ICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVu
U3BhY2VbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5T
Y3JlZW5TcGFjZVsxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRn
ZXNJblNjcmVlblNwYWNlWzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1
YWRFZGdlc0luU2NyZWVuU3BhY2VbM10pOwotCi0gICAgICAgICAgICAgICAgZmxvYXQgYW50aWFs
aWFzVmFsdWVGb3JCb3VuZGluZ1JlY3QgPSAKLSAgICAgICAgICAgICAgICAgICAgYW50aWFsaWFz
UXVhZCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs0XSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLAotICAgICAgICAg
ICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNl0sCi0gICAg
ICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs3XSk7
Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbWluKGFudGlhbGlhc1ZhbHVlRm9yUXVhZCwgYW50
aWFsaWFzVmFsdWVGb3JCb3VuZGluZ1JlY3QpOyAgICAgICAgICAgCisgICAgICAgIHZvaWQgYXBw
bHlBbHBoYUJsdXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgZmxv
YXQgdG90YWwgPSBzYW1wbGVBbHBoYUF0UmFkaXVzKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07
CisgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJ
RFRIOyBpKyspIHsKKyAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYUF0UmFkaXVz
KGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsK
KyAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYUF0UmFkaXVzKGZsb2F0KC0xICog
aSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwogICAgICAg
ICAgICAgfQogCi0gICAgICAgICAgICB2b2lkIG1haW4oKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHZlYzQgc2FtcGxlZENvbG9yID0gdGV4dHVyZTJEKHNfc2FtcGxlciwgY2xhbXAo
dl9zb3VyY2VUZXhDb29yZCwgMC4wLCAxLjApKTsKLSAgICAgICAgICAgICAgICBnbF9GcmFnQ29s
b3IgPSBzYW1wbGVkQ29sb3IgKiB1X29wYWNpdHkgKiBhbnRpYWxpYXMoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFJlY3RTaW1w
bGUgPQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEUmVjdCBzX3NhbXBsZXI7Ci0gICAg
ICAgICAgICB1bmlmb3JtIGZsb2F0IHVfb3BhY2l0eTsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVj
MiB2X3NvdXJjZVRleENvb3JkOwotICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjNCBjb2xvciA9IHRleHR1cmUyRFJlY3Qoc19zYW1w
bGVyLCB2X3NvdXJjZVRleENvb3JkKTsKLSAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2
ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2ltcGxl
ID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4
OwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2ZsaXA7Ci0gICAgICAgICAgICB1bmlmb3Jt
IHZlYzIgdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4
OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgICAg
ICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2X3NvdXJj
ZVRleENvb3JkID0gdmVjMihhX3ZlcnRleC54LCBtaXgoYV92ZXJ0ZXgueSwgMS4gLSBhX3ZlcnRl
eC55LCB1X2ZsaXApKSAqIHVfdGV4dHVyZVNpemU7Ci0gICAgICAgICAgICAgICAgZ2xfUG9zaXRp
b24gPSB1X21hdHJpeCAqIGFfdmVydGV4OwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0g
ICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNvbGlkQ29sb3IgPQotICAgICAgICBTVFJJTkdJ
RlkoCi0gICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0gICAgICAgICAgICBhdHRy
aWJ1dGUgdmVjNCBhX3ZlcnRleDsKLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRl
eDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50U29saWRDb2xvciA9Ci0gICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgIHBy
ZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICAgICAgdW5pZm9ybSB2ZWM0IHVfY29sb3I7
Ci0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBnbF9GcmFnQ29sb3IgPSB1X2NvbG9yOwotICAgICAgICAgICAgfQotICAgICAgICApOwot
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleEZpbHRlciA9Ci0gICAgICAgIFNUUklOR0lG
WSgKLSAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdmVydGV4OwotICAgICAgICAgICAgYXR0
cmlidXRlIHZlYzQgYV90ZXhDb29yZDsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENv
b3JkOwotICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgdl90ZXhDb29yZCA9IHZlYzIoYV90ZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAg
Z2xfUG9zaXRpb24gPSBhX3ZlcnRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotI2Rl
ZmluZSBTVEFOREFSRF9GSUxURVIoLi4uKSBcCi0gICAgICAgICJwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDtcbiJcCi0gICAgICAgICJ2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDtcbiJcCi0gICAgICAg
ICJ1bmlmb3JtIGZsb2F0IHVfYW1vdW50O1xuIlwKLSAgICAgICAgInVuaWZvcm0gc2FtcGxlcjJE
IHNfc2FtcGxlcjtcbiIjX19WQV9BUkdTX18gXAotICAgICAgICAidm9pZCBtYWluKHZvaWQpXG4g
eyBnbF9GcmFnQ29sb3IgPSBzaGFkZSh0ZXh0dXJlMkQoc19zYW1wbGVyLCB2X3RleENvb3JkKSk7
IH0iCi0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRHcmF5c2NhbGVGaWx0ZXIgPQot
ICAgICAgICBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICB2ZWM0IHNoYWRlKGxvd3AgdmVj
NCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBhbW91bnQgPSAx
LjAgLSB1X2Ftb3VudDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTI2ICsgMC43
ODc0ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNv
bG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsg
KDAuNzE1MiArIDAuMjg0OCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAq
IGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMjYg
LSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQp
ICogY29sb3IuZyArICgwLjA3MjIgKyAwLjkyNzggKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
KTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNlcGlhRmlsdGVyID0KLSAgICAg
ICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29s
b3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4wIC0g
dV9hbW91bnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMzkzICsgMC42MDcgKiBh
bW91bnQpICogY29sb3IuciArICgwLjc2OSAtIDAuNzY5ICogYW1vdW50KSAqIGNvbG9yLmcgKyAo
MC4xODkgLSAwLjE4OSAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgwLjM0OSAtIDAuMzQ5ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC42ODYgKyAwLjMx
NCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTY4IC0gMC4xNjggKiBhbW91bnQpICogY29sb3Iu
YiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yNzIgLSAwLjI3MiAqIGFtb3VudCkg
KiBjb2xvci5yICsgKDAuNTM0IC0gMC41MzQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjEzMSAr
IDAuODY5ICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29sb3IuYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRTYXR1cmF0ZUZpbHRlciA9Ci0gICAgICAgIFNUQU5EQVJEX0ZJTFRFUigK
LSAgICAgICAgICAgIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjIxMyArIDAuNzg3ICogdV9hbW91bnQpICog
Y29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiAt
IDAuMDcyICogdV9hbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoMC4yMTMgLSAwLjIxMyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgKyAwLjI4NSAq
IHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9y
LmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2Ftb3Vu
dCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAu
MDcyICsgMC45MjggKiB1X2Ftb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbG9yLmEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGZyYWdtZW50SHVlUm90YXRlRmlsdGVyID0KLSAgICAgICAgU1RBTkRBUkRf
RklMVEVSKAotICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgcGkgPSAzLjE0MTU5MjY1MzU4OTc5MzIzODQ2
OwotICAgICAgICAgICAgICAgIGZsb2F0IGMgPSBjb3ModV9hbW91bnQgKiBwaSAvIDE4MC4wKTsK
LSAgICAgICAgICAgICAgICBmbG9hdCBzID0gc2luKHVfYW1vdW50ICogcGkgLyAxODAuMCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IuciAqICgwLjIxMyArIGMgKiAwLjc4NyAt
IHMgKiAwLjIxMykgKyBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1IC0gcyAqIDAuNzE1KSAr
IGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgKyBzICogMC45MjgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgKyBzICogMC4xNDMp
ICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAwLjI4NSArIHMgKiAwLjE0MCkgKyBjb2xvci5iICog
KDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgzKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzIC0gcyAqIDAuNzg3KSArICBjb2xvci5n
ICogKDAuNzE1IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIgKyBj
ICogMC45MjggKyBzICogMC4wNzIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9y
LmEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50SW52ZXJ0RmlsdGVyID0KLSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAg
ICAgICAgZmxvYXQgaW52ZXJ0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKDEuMCAtIG4pICogdV9h
bW91bnQgKyBuICogKDEuMCAtIHVfYW1vdW50KTsgfQotICAgICAgICAgICAgdmVjNCBzaGFkZShs
b3dwIHZlYzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZl
YzQoaW52ZXJ0KGNvbG9yLnIpLCBpbnZlcnQoY29sb3IuZyksIGludmVydChjb2xvci5iKSwgY29s
b3IuYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogZnJhZ21lbnRCcmlnaHRuZXNzRmlsdGVyID0KLSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAot
ICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfYW1vdW50KSwg
Y29sb3IuYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRDb250cmFzdEZpbHRlciA9Ci0gICAgICAgIFNUQU5EQVJEX0ZJTFRFUigK
LSAgICAgICAgICAgIGZsb2F0IGNvbnRyYXN0KGxvd3AgZmxvYXQgbikgeyByZXR1cm4gKG4gLSAw
LjUpICogdV9hbW91bnQgKyAwLjU7IH0KLSAgICAgICAgICAgIHZlYzQgc2hhZGUobG93cCB2ZWM0
IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbnRy
YXN0KGNvbG9yLnIpLCBjb250cmFzdChjb2xvci5nKSwgY29udHJhc3QoY29sb3IuYiksIGNvbG9y
LmEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIq
IGZyYWdtZW50T3BhY2l0eUZpbHRlciA9Ci0gICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKLSAgICAg
ICAgICAgIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9yLmEg
KiB1X2Ftb3VudCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSNkZWZpbmUgQkxVUl9D
T05TVEFOVFMgIiNkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEggMTFcbiNkZWZpbmUg
R0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yXG4iCi0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRCbHVyRmlsdGVyID0KLSAgICAgICAgQkxVUl9DT05TVEFOVFMKLSAgICAgICAgU1RSSU5H
SUZZKAotICAgICAgICAgICAgLy8gQ3JlYXRlIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiAyMSB2
YWx1ZXMgYmV0d2VlbiAtMiBhbmQgMi4KLSAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICB1
bmlmb3JtIHZlYzIgdV9ibHVyUmFkaXVzOwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQg
c19zYW1wbGVyOwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dB
VVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKLQotICAgICAgICAgICAgdmVjNCBzYW1wbGVDb2xv
cihmbG9hdCByYWRpdXMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjMiBjb29y
ZCA9IHZfdGV4Q29vcmQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRleHR1cmUyRChzX3NhbXBsZXIsIGNvb3JkKSAqIGZsb2F0KGNvb3JkLnggPiAwLiAm
JiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHZlYzQgYmx1cigpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgdmVjNCB0b3RhbCA9IHNhbXBsZUNvbG9yKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxb
MF07Ci0gICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxf
SEFMRl9XSURUSDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUNv
bG9yKGZsb2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtp
XTsKLSAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQ29sb3IoZmxvYXQoLTEgKiBp
KSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBnbF9GcmFnQ29sb3IgPSBibHVyKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7
Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRTaGFkb3dGaWx0ZXIxID0KLSAgICAg
ICAgQkxVUl9DT05TVEFOVFMKLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgcHJlY2lz
aW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsK
LSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9ibHVyUmFkaXVzOwotICAgICAgICAgICAgdW5p
Zm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0OwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQg
c19zYW1wbGVyOwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dB
VVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKLQotICAgICAgICAgICAgZmxvYXQgc2FtcGxlQWxw
aGEoZmxvYXQgcmFkaXVzKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZlYzIgY29v
cmQgPSB2X3RleENvb3JkIC0gdV9zaGFkb3dPZmZzZXQgKyB2ZWMyKHJhZGl1cyAqIHVfYmx1clJh
ZGl1cywgMC4pOwotICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlMkQoc19zYW1wbGVyLCBj
b29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8
IDEuICYmIGNvb3JkLnkgPCAxLik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZsb2F0
IHNoYWRvd0JsdXJIb3Jpem9udGFsKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBm
bG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07Ci0gICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURU
SDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZsb2F0
KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAg
ICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBpKSAqIEdBVVNT
SUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBn
bF9GcmFnQ29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEuKSAqIHNoYWRvd0JsdXJIb3Jpem9udGFs
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICAvLyBTZWNvbmQgcGFzczogdmVy
dGljYWwgYWxwaGEgYmx1ciBhbmQgY29tcG9zaXRlIHdpdGggb3JpZ2luLgotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRvd0ZpbHRlcjIgPQotICAgICAgICBCTFVSX0NPTlNUQU5U
UwotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwotICAgICAgICAgICAgdW5p
Zm9ybSBmbG9hdCB1X2JsdXJSYWRpdXM7Ci0gICAgICAgICAgICB1bmlmb3JtIHZlYzQgdV9zaGFk
b3dDb2xvcjsKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKLSAgICAg
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfY29udGVudFRleHR1cmU7Ci0gICAgICAgICAgICB1
bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhd
OwotCi0gICAgICAgICAgICBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByKQotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkICsgdmVjMigwLiwgciAq
IHVfYmx1clJhZGl1cyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRChzX3NhbXBs
ZXIsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29y
ZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
ZmxvYXQgc2hhZG93Qmx1clZlcnRpY2FsKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICBmbG9hdCB0b3RhbCA9IHNhbXBsZUFscGhhKDAuKSAqIHVfZ2F1c3NpYW5LZXJuZWxbMF07Ci0g
ICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9X
SURUSDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhKGZs
b2F0KGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAg
ICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoLTEgKiBpKSAqIEdB
VVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICB2ZWM0IHNvdXJjZU92ZXIobG93cCB2ZWM0IHNvdXJjZSwgdmVjNCBkZXN0aW5h
dGlvbikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBDb21wb3NpdGUgdGhlIHNo
YWRvdyB3aXRoIHRoZSBvcmlnaW5hbCB0ZXh0dXJlLgotICAgICAgICAgICAgICAgIHJldHVybiBz
b3VyY2UgKyBkZXN0aW5hdGlvbiAqICgxLiAtIHNvdXJjZS5hKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZ2xfRnJhZ0NvbG9yID0gc291cmNlT3Zlcih0ZXh0dXJlMkQoc19jb250ZW50VGV4dHVyZSwg
dl90ZXhDb29yZCksIHNoYWRvd0JsdXJWZXJ0aWNhbCgpICogdV9zaGFkb3dDb2xvcik7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBpZiAoc3BlY3MuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIHNwZWNzLnJlc2l6ZShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TGFzdEZpbHRlcik7
Ci0gICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpEZWZhdWx0XSA9IFNo
YWRlclNwZWModmVydGV4U2ltcGxlLCBmcmFnbWVudFNpbXBsZSk7Ci0gICAgICAgIHNwZWNzW1Rl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTb2xpZENvbG9yXSA9IFNoYWRlclNwZWModmVydGV4
U29saWRDb2xvciwgZnJhZ21lbnRTb2xpZENvbG9yKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlJlY3RdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdt
ZW50UmVjdFNpbXBsZSk7Ci0gICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpNYXNrZWRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRPcGFj
aXR5QW5kTWFzayk7Ci0gICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpN
YXNrZWRSZWN0XSA9IFNoYWRlclNwZWModmVydGV4T3BhY2l0eUFuZE1hc2ssIGZyYWdtZW50UmVj
dE9wYWNpdHlBbmRNYXNrKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OkFudGlhbGlhc2VkXSA9IFNoYWRlclNwZWModmVydGV4U2ltcGxlLCBmcmFnbWVudEFudGlh
bGlhc2luZ05vTWFzayk7Ci0gICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpHcmF5c2NhbGVGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50R3Jh
eXNjYWxlRmlsdGVyKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OlNlcGlhRmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNlcGlhRmls
dGVyKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNhdHVyYXRl
RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNhdHVyYXRlRmlsdGVy
KTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Okh1ZVJvdGF0ZUZp
bHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRIdWVSb3RhdGVGaWx0ZXIp
OwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QnJpZ2h0bmVzc0Zp
bHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRCcmlnaHRuZXNzRmlsdGVy
KTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkNvbnRyYXN0Rmls
dGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudENvbnRyYXN0RmlsdGVyKTsK
LSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmVydEZpbHRlcl0g
PSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRJbnZlcnRGaWx0ZXIpOwotICAgICAg
ICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUZpbHRlcl0gPSBTaGFk
ZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRPcGFjaXR5RmlsdGVyKTsKLSAgICAgICAgc3Bl
Y3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkJsdXJGaWx0ZXJdID0gU2hhZGVyU3BlYyh2
ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50Qmx1ckZpbHRlcik7Ci0gICAgICAgIHNwZWNzW1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkb3dGaWx0ZXJQYXNzMV0gPSBTaGFkZXJTcGVjKHZlcnRl
eEZpbHRlciwgZnJhZ21lbnRTaGFkb3dGaWx0ZXIxKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MyXSA9IFNoYWRlclNwZWModmVydGV4
RmlsdGVyLCBmcmFnbWVudFNoYWRvd0ZpbHRlcjIpOwotICAgIH0KLQotICAgIEFTU0VSVChzcGVj
cy5zaXplKCkgPiBrZXkpOwotICAgIFNoYWRlclNwZWMmIHNwZWMgPSBzcGVjc1trZXldOwotICAg
IHZlcnRleFNvdXJjZSA9IHNwZWMudmVydGV4U2hhZGVyOwotICAgIGZyYWdtZW50U291cmNlID0g
c3BlYy5mcmFnbWVudFNoYWRlcjsKKyAgICAgICAgICAgIGNvbG9yICo9IHRvdGFsOworICAgICAg
ICB9CisKKyAgICAgICAgdmVjNCBzb3VyY2VPdmVyKHZlYzQgc3JjLCB2ZWM0IGRzdCkgeyByZXR1
cm4gc3JjICsgZHN0ICogKDEuIC0gZHN0LmEpOyB9CisKKyAgICAgICAgdm9pZCBhcHBseUNvbnRl
bnRUZXh0dXJlKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzQg
Y29udGVudENvbG9yID0gdGV4dHVyZTJEKHNfY29udGVudFRleHR1cmUsIHZfdGV4Q29vcmQpOwor
ICAgICAgICAgICAgY29sb3IgPSBzb3VyY2VPdmVyKGNvbnRlbnRDb2xvciwgY29sb3IpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseVNvbGlkQ29sb3IoaW5vdXQgdmVjNCBjb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgY29sb3IgKj0gdV9jb2xvcjsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWM0IGNvbG9y
ID0gdmVjNCgxLiwgMS4sIDEuLCAxLik7CisgICAgICAgICAgICBhcHBseVRleHR1cmVJZk5lZWRl
ZChjb2xvcik7CisgICAgICAgICAgICBhcHBseVNvbGlkQ29sb3JJZk5lZWRlZChjb2xvcik7Cisg
ICAgICAgICAgICBhcHBseUFudGlhbGlhc0lmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFw
cGx5TWFza0lmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5T3BhY2l0eUlmTmVlZGVk
KGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5R3JheXNjYWxlRmlsdGVySWZOZWVkZWQoY29sb3Ip
OworICAgICAgICAgICAgYXBwbHlTZXBpYUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAg
ICAgIGFwcGx5U2F0dXJhdGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBs
eUh1ZVJvdGF0ZUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5SW52ZXJ0
RmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlCcmlnaHRuZXNzRmlsdGVy
SWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlDb250cmFzdEZpbHRlcklmTmVlZGVk
KGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5T3BhY2l0eUZpbHRlcklmTmVlZGVkKGNvbG9yKTsK
KyAgICAgICAgICAgIGFwcGx5Qmx1ckZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAg
IGFwcGx5QWxwaGFCbHVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlDb250ZW50
VGV4dHVyZUlmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9y
OworICAgICAgICB9CisgICAgKTsKKworCitzdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnMsIFN0cmluZyYgdmVydGV4U291
cmNlLCBTdHJpbmcmIGZyYWdtZW50U291cmNlKQoreworICAgIFN0cmluZ0J1aWxkZXIgZnJhZ21l
bnRCdWlsZGVyOworI2RlZmluZSBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQXBwbGllcikgXAor
ICAgIGlmIChvcHRpb25zICYgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkFwcGxpZXIpIFwK
KyAgICAgICAgZnJhZ21lbnRCdWlsZGVyLmFwcGVuZChFTkFCTEVfQVBQTElFUihBcHBsaWVyKSk7
CisKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoTWF0cml4KQorICAgIFNFVF9BUFBMSUVS
X0ZST01fT1BUSU9OUyhUZXh0dXJlKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhSZWN0
KQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTb2xpZENvbG9yKQorICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhPcGFjaXR5KQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhN
YXNrKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBbnRpYWxpYXMpCisgICAgU0VUX0FQ
UExJRVJfRlJPTV9PUFRJT05TKEdyYXlzY2FsZUZpbHRlcikKKyAgICBTRVRfQVBQTElFUl9GUk9N
X09QVElPTlMoU2VwaWFGaWx0ZXIpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNhdHVy
YXRlRmlsdGVyKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhIdWVSb3RhdGVGaWx0ZXIp
CisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJyaWdodG5lc3NGaWx0ZXIpCisgICAgU0VU
X0FQUExJRVJfRlJPTV9PUFRJT05TKENvbnRyYXN0RmlsdGVyKQorICAgIFNFVF9BUFBMSUVSX0ZS
T01fT1BUSU9OUyhJbnZlcnRGaWx0ZXIpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE9w
YWNpdHlGaWx0ZXIpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJsdXJGaWx0ZXIpCisg
ICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFscGhhQmx1cikKKyAgICBTRVRfQVBQTElFUl9G
Uk9NX09QVElPTlMoQ29udGVudFRleHR1cmUpCisKKyAgICBmcmFnbWVudEJ1aWxkZXIuYXBwZW5k
KGZyYWdtZW50VGVtcGxhdGUpOworICAgIHZlcnRleFNvdXJjZSA9IHZlcnRleFNoYWRlclNvdXJj
ZTsKKyAgICBmcmFnbWVudFNvdXJjZSA9IGZyYWdtZW50QnVpbGRlci50b1N0cmluZygpOwogfQog
CiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIo
R3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQpCkBAIC01MzQsMTcgKzM5OSwxNyBAQCBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkKIHsKIH0K
IAotUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0oU2hhZGVyS2V5IGtleSkKK1Bhc3NSZWZQdHI8
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpn
ZXRTaGFkZXJQcm9ncmFtKE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2dyYW1zLmZpbmQoa2V5KTsKKyAgICBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2dyYW1zLmZp
bmQob3B0aW9ucyk7CiAgICAgaWYgKGl0ICE9IG1fcHJvZ3JhbXMuZW5kKCkpCiAgICAgICAgIHJl
dHVybiBpdC0+dmFsdWU7CiAKICAgICBTdHJpbmcgdmVydGV4U2hhZGVyOwogICAgIFN0cmluZyBm
cmFnbWVudFNoYWRlcjsKLSAgICBnZXRTaGFkZXJTcGVjKGtleSwgdmVydGV4U2hhZGVyLCBmcmFn
bWVudFNoYWRlcik7CisgICAgZ2V0U2hhZGVyU3BlYyhvcHRpb25zLCB2ZXJ0ZXhTaGFkZXIsIGZy
YWdtZW50U2hhZGVyKTsKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHBy
b2dyYW0gPSBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKG1fY29udGV4dCwgdmVy
dGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlcik7Ci0gICAgbV9wcm9ncmFtcy5hZGQoa2V5LCBwcm9n
cmFtKTsKKyAgICBtX3Byb2dyYW1zLmFkZChvcHRpb25zLCBwcm9ncmFtKTsKICAgICByZXR1cm4g
cHJvZ3JhbTsKIH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmlu
ZGV4IDYwNjA1ZjQyZDBlMzIzODdjNDJhNGZkZDA1MzE0MjdlMDRhZDcyMmEuLjYwN2VkNDdhNTMz
MDY0MWQzZTkyODJlM2QxM2ZjNmExNWJjNTA4ZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5oCkBAIC01OSwxMCArNTksOSBAQCBwdWJsaWM6CiAgICAgVEVYTUFQX0RF
Q0xBUkVfU0FNUExFUihtYXNrKQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIFRFWE1B
UF9ERUNMQVJFX1VOSUZPUk0oYW1vdW50KQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZmls
dGVyQW1vdW50KQogICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZ2F1c3NpYW5LZXJuZWwpCiAg
ICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShibHVyUmFkaXVzKQotICAgIFRFWE1BUF9ERUNMQVJF
X1VOSUZPUk0oc2hhZG93Q29sb3IpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShzaGFkb3dP
ZmZzZXQpCiAgICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihjb250ZW50VGV4dHVyZSkKICNlbmRp
ZgpAQCAtODIsMzYgKzgxLDM3IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyIHsKIHB1YmxpYzoKLSAgICBlbnVtIFNoYWRlcktleSB7Ci0gICAgICAgIEludmFs
aWQgPSAwLAotICAgICAgICBEZWZhdWx0LAotICAgICAgICBSZWN0LAotICAgICAgICBNYXNrZWQs
Ci0gICAgICAgIE1hc2tlZFJlY3QsCi0gICAgICAgIFNvbGlkQ29sb3IsCi0gICAgICAgIEFudGlh
bGlhc2VkLAotICAgICAgICBHcmF5c2NhbGVGaWx0ZXIsCi0gICAgICAgIFNlcGlhRmlsdGVyLAot
ICAgICAgICBTYXR1cmF0ZUZpbHRlciwKLSAgICAgICAgSHVlUm90YXRlRmlsdGVyLAotICAgICAg
ICBCcmlnaHRuZXNzRmlsdGVyLAotICAgICAgICBDb250cmFzdEZpbHRlciwKLSAgICAgICAgT3Bh
Y2l0eUZpbHRlciwKLSAgICAgICAgSW52ZXJ0RmlsdGVyLAotICAgICAgICBCbHVyRmlsdGVyLAot
ICAgICAgICBTaGFkb3dGaWx0ZXJQYXNzMSwKLSAgICAgICAgU2hhZG93RmlsdGVyUGFzczIsCi0g
ICAgICAgIExhc3RGaWx0ZXIKKyAgICBlbnVtIE9wdGlvbiB7CisgICAgICAgIE1hdHJpeCAgICAg
ICAgICAgPSAxTCA8PCAwLAorICAgICAgICBUZXh0dXJlICAgICAgICAgID0gMUwgPDwgMSwKKyAg
ICAgICAgUmVjdCAgICAgICAgICAgICA9IDFMIDw8IDIsCisgICAgICAgIFNvbGlkQ29sb3IgICAg
ICAgPSAxTCA8PCAzLAorICAgICAgICBPcGFjaXR5ICAgICAgICAgID0gMUwgPDwgNCwKKyAgICAg
ICAgTWFzayAgICAgICAgICAgICA9IDFMIDw8IDUsCisgICAgICAgIEFudGlhbGlhcyAgICAgICAg
PSAxTCA8PCA2LAorICAgICAgICBHcmF5c2NhbGVGaWx0ZXIgID0gMUwgPDwgNywKKyAgICAgICAg
U2VwaWFGaWx0ZXIgICAgICA9IDFMIDw8IDgsCisgICAgICAgIFNhdHVyYXRlRmlsdGVyICAgPSAx
TCA8PCA5LAorICAgICAgICBIdWVSb3RhdGVGaWx0ZXIgID0gMUwgPDwgMTAsCisgICAgICAgIEJy
aWdodG5lc3NGaWx0ZXIgPSAxTCA8PCAxMSwKKyAgICAgICAgQ29udHJhc3RGaWx0ZXIgICA9IDFM
IDw8IDEyLAorICAgICAgICBJbnZlcnRGaWx0ZXIgICAgID0gMUwgPDwgMTMsCisgICAgICAgIE9w
YWNpdHlGaWx0ZXIgICAgPSAxTCA8PCAxNCwKKyAgICAgICAgQmx1ckZpbHRlciAgICAgICA9IDFM
IDw8IDE1LAorICAgICAgICBBbHBoYUJsdXIgICAgICAgID0gMUwgPDwgMTYsCisgICAgICAgIENv
bnRlbnRUZXh0dXJlICAgPSAxTCA8PCAxNwogICAgIH07CiAKKyAgICB0eXBlZGVmIHVuc2lnbmVk
IE9wdGlvbnM7CisKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpIHsgfQogICAgIGV4
cGxpY2l0IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKEdyYXBoaWNzQ29udGV4dDNEKik7CiAg
ICAgdmlydHVhbCB+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKTsKIAotICAgIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGdldFNoYWRlclByb2dyYW0oU2hhZGVyS2V5
KTsKKyAgICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFkZXJQ
cm9ncmFtKE9wdGlvbnMpOwogCiBwcml2YXRlOgotICAgIHR5cGVkZWYgSGFzaE1hcDxTaGFkZXJL
ZXksIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4sIERlZmF1bHRIYXNoPGludD46
Okhhc2gsIEhhc2hUcmFpdHM8aW50PiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwor
ICAgIHR5cGVkZWYgSGFzaE1hcDxPcHRpb25zLCBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0+ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CiAgICAgVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW1NYXAgbV9wcm9ncmFtczsKICAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IG1fY29udGV4dDsKIH07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180086</attachid>
            <date>2012-12-18 21:30:32 -0800</date>
            <delta_ts>2012-12-19 06:11:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104815-20121218212751.patch</filename>
            <type>text/plain</type>
            <size>48462</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlMGI1YjdmNzIzNDgy
NDNhNmZkYTc4YTJhMjVkYTg4OWNmYjQwNS4uMjk2YTBiODA3ZTIwZTMyNjBmNzQxZmQ5ZTgxMzUw
ZWYzZDZiZmRmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTEyLTEyICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gSW5zdGVh
ZCBvZiBoYXZpbmcgbXVsdGlwbGUgc2hhZGVycyBzb3VyY2VzIHdpdGggbG90cyBvZiBkdXBsaWNh
dGlvbiwgd2Ugc2hvdWxkIGhhdmUgb25lIHNoYWRlciBzb3VyY2Ugd2l0aCBNQUNSTyB2YXJpYW50
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0ODE1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3JlYXRl
ZCB0ZW1wbGF0ZXMgZm9yIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRlcnMsIGFuZCBhZGRl
ZCBzb21lIE1BQ1JPcyBpbiAKKyAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgdG8g
YWxsb3cgR0xTTCBwcmVjb21waWxlci1iYXNlZCBjb25maWd1cmF0aW9uLgorCisgICAgICAgIFRo
ZSB0ZW1wbGF0ZSBmb2xsb3dzIGEgcGF0dGVybiB3aGVyZSB0aGUgbWFpbiBmdW5jdGlvbiBpbiB0
aGUgc2hhZGVyIGNhbGxzCisgICAgICAgIGFwcGx5Rm9vQmFySWZOZWVkZWQoKSwgd2hpbGUgYXBw
bHlGb29CYXIoKSBpcyBpbXBsZW1lbnRlZC4gVGhlIE1hY3JvcyBwcmVwZW5kZWQgdG8gdGhlIHRl
bXBsYXRlIGRlZmluZSB3aGV0aGVyIGFwcGx5SWZOZWVkZWQgcmVzb2x2ZXMgdG8gdGhlIHJlYWwg
ZnVuY3Rpb24gb3IgdG8gYSBub29wLgorCisgICAgICAgIEluIGFkZGl0aW9uLCBtYWRlIHNvbWUg
c21hbGwgY2hhbmdlcyB0byB0aGUgZmlsdGVyIHNoYWRlcnMgc28gdGhhdCB0aGV5IGNhbiB1c2Ug
dGhlIHNhbWUgY29kZSBhcyB0aGUgbm9ybWFsIHNoYWRlcnMuCisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyBwaXhlbC9yZWYgdGVzdHMgd2hlbiBydW4gb24gUXQvRUZML0dUSy4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFzaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wdGlvbnNGb3JGaWx0ZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6cHJlcGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVy
ZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVy
ZUdMOjphcHBseUZpbHRlcnMpOgorICAgICAgICAgICAgQWx3YXlzIGRyYXcgdXNpbmcgdGhlIGRy
YXdRdWFkIGZ1bmN0aW9uLCBhbmQgdXNlIHRoZSBuZXcgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6Ok9wdGlvbnMgbWFzayBpbnN0ZWFkIG9mIHRoZSBvbGQgU2hhZGVyS2V5LgorCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0U2hhZGVyU3BlYyk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0U2hhZGVy
UHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbSk6
CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisKIDIwMTItMTItMTggIExl
dmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIElucHV0IGVsZW1l
bnRzIHdpdGggZGVmYXVsdCB0b3VjaCBoYW5kbGVycyBkb24ndCB1cGRhdGUgaGFuZGxlciBjb3Vu
dHMgd2hlbiBjaGFuZ2luZyBkb2N1bWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggZGMx
ZjJkYjhmZWRiY2ZiYWYyNzgwZjJkZmE1OTMyMDE2MjE2MTc1Mi4uOTFiNGFlMjlhZWU5NzA5NzM4
Y2ZjOWQyNWE0MGNjMGUwY2IwMmY4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTg1LDgg
Kzg1LDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRH
TERhdGEoY29udGV4dCkpOwogICAgICAgICB9CiAKLQotCiAgICAgICAgIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCiAgICAgICAgIGV4cGxp
Y2l0IFNoYXJlZEdMRGF0YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKQEAgLTQxMywxNiAr
NDExLDE2IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2Jq
ZWN0IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJCiAgICAgaWYgKCF1c2VSZWN0ICYmIG5l
ZWRzQW50aWFsaWFzaW5nICYmIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh0ZXh0dXJlLCBm
bGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwg
bWFza1RleHR1cmUsIGV4cG9zZWRFZGdlcykpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5ID0gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OkRlZmF1bHQ7Ci0gICAgaWYgKG1hc2tlZCAmJiB1c2VSZWN0KQotICAgICAgICBr
ZXkgPSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFza2VkUmVjdDsKLSAgICBlbHNlIGlm
IChtYXNrZWQpCi0gICAgICAgIGtleSA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpNYXNr
ZWQ7Ci0gICAgZWxzZSBpZiAodXNlUmVjdCkKLSAgICAgICAga2V5ID0gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlJlY3Q7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlv
bnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlOworICAgIGlm
IChtYXNrZWQpCisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
Ok1hc2s7CisgICAgaWYgKGZsYWdzICYgU2hvdWxkVXNlQVJCVGV4dHVyZVJlY3QpCisgICAgICAg
IG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3Q7CisgICAgaWYgKG9w
YWNpdHkgPCAxKQorICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpPcGFjaXR5OwogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9n
cmFtOwotICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShrZXkpOworICAgIHByb2dyYW0gPSBkYXRhKCku
c2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3Jh
bShvcHRpb25zKTsKICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFt
SUQoKSk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwg
dGV4dHVyZSwgZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgs
IG9wYWNpdHksIG1hc2tUZXh0dXJlKTsKQEAgLTU2Miw4ICs1NjAsMTEgQEAgYm9vbCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBG
bGFncyBmbGFncywKICAgICBmbG9hdCB0YXJnZXRRdWFkRWRnZXNbMjRdOwogICAgIHF1YWRUb0Vk
Z2VBcnJheShleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlLCB0YXJnZXRRdWFkRWRnZXMpOwogICAg
IHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5TY3JlZW5TcGFjZS5ib3VuZGluZ0Jv
eCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRnZXMgKyAxMik7CisgICAgVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpBbnRpYWxpYXMgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4
dHVyZTsKKyAgICBpZiAob3BhY2l0eSA8IDEpCisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHk7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6QW50aWFsaWFzZWQpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4g
cHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFt
KHByb2dyYW0tPnByb2dyYW1JRCgpKTsKICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTNmdihwcm9n
cmFtLT5leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigpLCA4LCB0YXJnZXRR
dWFkRWRnZXMpOwogCkBAIC03NTYsMzIgKzc1NywzMyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6
dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBj
bwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogCi1zdGF0aWMgVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlNoYWRlcktleSBrZXlGb3JGaWx0ZXJUeXBlKEZpbHRlck9wZXJhdGlvbjo6T3Bl
cmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQorc3RhdGljIFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnNGb3JGaWx0ZXJUeXBlKEZpbHRlck9wZXJhdGlvbjo6
T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQogewogICAgIHN3aXRjaCAodHlwZSkg
ewogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgICAgIHJldHVybiBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6R3JheXNjYWxlRmlsdGVyOworICAgICAgICByZXR1
cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6R3JheXNjYWxlRmlsdGVyOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpT
RVBJQToKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTZXBpYUZp
bHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJl
IHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNlcGlhRmlsdGVyOwogICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyOjpTYXR1cmF0ZUZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNhdHVy
YXRlRmlsdGVyOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAg
ICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Okh1ZVJvdGF0ZUZpbHRlcjsKKyAg
ICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6Okh1ZVJvdGF0ZUZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6SU5WRVJUOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OkludmVydEZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmVydEZpbHRlcjsK
ICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAgICAgICAgcmV0dXJuIFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpCcmlnaHRuZXNzRmlsdGVyOworICAgICAgICByZXR1
cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6QnJpZ2h0bmVzc0ZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
Q09OVFJBU1Q6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Q29u
dHJhc3RGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6
VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpDb250cmFzdEZpbHRlcjsKICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgcmV0dXJuIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5RmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6T3BhY2l0eUZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKICAgICAg
ICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpCbHVyRmlsdGVyOwogICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgcmV0dXJuIHBhc3MgPyBU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZG93RmlsdGVyUGFzczIgOiBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6U2hhZG93RmlsdGVyUGFzczE7CisgICAgICAgIHJldHVybiBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QWxwaGFCbHVyCisgICAgICAgICAgICB8IChwYXNzID8g
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkNvbnRlbnRUZXh0dXJlIHwgVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OlNvbGlkQ29sb3I6IDApOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OkludmFsaWQ7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0KIApAQCAtODUyLDEz
ICs4NTQsMTMgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRlclByb2dyYW0oVGV4dHVyZU1hcHBl
clNoYWRlclByb2dyYW0qIHByb2dyYW0sIGNvbnN0IEZpbHQKICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0VQSUE6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgogICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICBjb250ZXh0LT51bmlmb3Jt
MWYocHJvZ3JhbS0+YW1vdW50TG9jYXRpb24oKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOworICAgICAgICBj
b250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+ZmlsdGVyQW1vdW50TG9jYXRpb24oKSwgc3RhdGlj
X2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbiku
YW1vdW50KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5W
RVJUOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgogICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lU
WToKLSAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmFtb3VudExvY2F0aW9uKCks
IHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24m
PihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dy
YW0tPmZpbHRlckFtb3VudExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9u
ZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAgICAgICAgY29u
c3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ciA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0
ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOwpAQCAtODc5LDE5ICs4ODEsMjAgQEAgc3RhdGljIHZv
aWQgcHJlcGFyZUZpbHRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dy
YW0sIGNvbnN0IEZpbHQKICAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmdihwcm9ncmFtLT5nYXVz
c2lhbktlcm5lbExvY2F0aW9uKCksIEdhdXNzaWFuS2VybmVsSGFsZldpZHRoLCBnYXVzc2lhbktl
cm5lbCgpKTsKICAgICAgICAgc3dpdGNoIChwYXNzKSB7CiAgICAgICAgIGNhc2UgMDoKLSAgICAg
ICAgICAgIC8vIEZpcnN0IHBhc3M6IHZlcnRpY2FsIGFscGhhIGJsdXIuCisgICAgICAgICAgICAv
LyBGaXJzdCBwYXNzOiBob3Jpem9udGFsIGFscGhhIGJsdXIuCisgICAgICAgICAgICBjb250ZXh0
LT51bmlmb3JtMmYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0aW9uKCksIHNoYWRvdy5zdGREZXZp
YXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSksIDApOwogICAgICAgICAgICAgY29udGV4dC0+
dW5pZm9ybTJmKHByb2dyYW0tPnNoYWRvd09mZnNldExvY2F0aW9uKCksIGZsb2F0KHNoYWRvdy5s
b2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRp
b24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgY29udGV4dC0+
dW5pZm9ybTFmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCBzaGFkb3cuc3RkRGV2aWF0
aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIDE6CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVlZCB0aGUgc2hhZG93
IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGluZy4KLSAgICAgICAg
ICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwgc2hh
ZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAg
ZmxvYXQgciwgZywgYiwgYTsKKyAgICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdldFJHQkEociwg
ZywgYiwgYSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JM
b2NhdGlvbigpLCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihw
cm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwgMCwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8g
ZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTJmKHBy
b2dyYW0tPnNoYWRvd09mZnNldExvY2F0aW9uKCksIDAsIDApOwogICAgICAgICAgICAgY29udGV4
dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOwogICAgICAgICAg
ICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNv
bnRlbnRUZXh0dXJlKTsKICAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5j
b250ZW50VGV4dHVyZUxvY2F0aW9uKCksIDEpOwotICAgICAgICAgICAgZmxvYXQgciwgZywgYiwg
YTsKLSAgICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdldFJHQkEociwgZywgYiwgYSk7Ci0gICAg
ICAgICAgICBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+c2hhZG93Q29sb3JMb2NhdGlvbigp
LCByLCBnLCBiLCBhKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwpAQCAtOTYwLDI1ICs5NjMsMTMgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdVc2lu
Z0N1c3RvbUZpbHRlcihCaXRtYXBUZXh0dXJlJiB0YXJnZXQsIGNvbnN0IEJpdG1hcFQKIHZvaWQg
VGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4dHVyZSYgc2FtcGxl
ciwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJh
dGlvbiYgZmlsdGVyLCBpbnQgcGFzcykKIHsKICAgICAvLyBGb3Igc3RhbmRhcmQgZmlsdGVycywg
d2UgYWx3YXlzIGRyYXcgdGhlIHdob2xlIHRleHR1cmUgd2l0aG91dCB0cmFuc2Zvcm1hdGlvbnMu
Ci0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBrZXkgPSBrZXlGb3JG
aWx0ZXJUeXBlKGZpbHRlci5nZXRPcGVyYXRpb25UeXBlKCksIHBhc3MpOwotICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEo
KS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKGtleSk7CisgICAg
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucyA9IG9wdGlvbnNGb3JG
aWx0ZXJUeXBlKGZpbHRlci5nZXRPcGVyYXRpb25UeXBlKCksIHBhc3MpOworICAgIFJlZlB0cjxU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEo
KS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwog
ICAgIEFTU0VSVChwcm9ncmFtKTsKIAogICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFtKHByb2dyYW0u
Z2V0KCksIGZpbHRlciwgcGFzcywgc2FtcGxlci5jb250ZW50U2l6ZSgpLCBzdGF0aWNfY2FzdDxj
b25zdCBCaXRtYXBUZXh0dXJlR0wmPihjb250ZW50VGV4dHVyZSkuaWQoKSk7Ci0KLSAgICBtX2Nv
bnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24o
KSk7Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRl
eENvb3JkTG9jYXRpb24oKSk7Ci0gICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKLSAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3Jh
cGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1
cmVHTCY+KHNhbXBsZXIpLmlkKCkpOwotICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3Jh
bS0+c2FtcGxlckxvY2F0aW9uKCksIDApOwotICAgIGNvbnN0IEdDM0RmbG9hdCB0YXJnZXRWZXJ0
aWNlc1tdID0gey0xLCAtMSwgMSwgLTEsIDEsIDEsIC0xLCAxfTsKLSAgICBjb25zdCBHQzNEZmxv
YXQgc291cmNlVmVydGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBtX2Nv
bnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAy
LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHRhcmdldFZl
cnRpY2VzKSk7Ci0gICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+
dGV4Q29vcmRMb2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAw
LCBHQzNEaW50cHRyKHNvdXJjZVZlcnRpY2VzKSk7Ci0gICAgbV9jb250ZXh0M0QtPmRpc2FibGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhH
cmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKLSAgICBtX2NvbnRleHQzRC0+
ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwotICAg
IG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRM
b2NhdGlvbigpKTsKKyAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdChJbnRQb2ludDo6emVybygpLCBz
YW1wbGVyLmNvbnRlbnRTaXplKCkpOworICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShw
cm9ncmFtLmdldCgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihzYW1wbGVy
KS5pZCgpLCAwLCBJbnRTaXplKDEsIDEpLCB0YXJnZXRSZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCgpLCAxLCAwKTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJl
R0w6OmFwcGx5RmlsdGVycyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBCaXRt
YXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVy
cykKQEAgLTExNzIsNyArMTE2Myw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBk
YXRhKCkuaW5pdGlhbGl6ZVN0ZW5jaWwoKTsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpEZWZhdWx0KTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dy
YW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0
U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U29saWRDb2xvcik7CiAK
ICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAgICAg
bV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0
aW9uKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXgg
MjE3NTYyMGFlMTdmNDNlZmM0ODFmYTU2NzM4MzdiZjdhMTY4ZmMyOS4uZjZkZGFlM2I3ZTYwMWI0
OTkyZjMwZmFiZGFmYjU1YzU1NmJkNjRkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXIuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotCiBzdGF0aWMgaW5saW5lIGJvb2wgY29tcG9zaXRpbmdMb2dFbmFibGVkKCkKIHsKICNpZiAh
TE9HX0RJU0FCTEVECkBAIC0xMDYsNDIzICsxMDUsMjg5IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQogICAgIG1fY29udGV4dC0+ZGVs
ZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1zdHJ1Y3QgU2hhZGVyU3BlYyB7Ci0gICAgU3Ry
aW5nIHZlcnRleFNoYWRlcjsKLSAgICBTdHJpbmcgZnJhZ21lbnRTaGFkZXI7Ci0gICAgU2hhZGVy
U3BlYyhjb25zdCBjaGFyKiB2ZXJ0ZXggPSAwLCBjb25zdCBjaGFyKiBmcmFnbWVudCA9IDApCi0g
ICAgICAgIDogdmVydGV4U2hhZGVyKHZlcnRleCA/IFN0cmluZyhBU0NJSUxpdGVyYWwodmVydGV4
KSkgOiBTdHJpbmcoKSkKLSAgICAgICAgLCBmcmFnbWVudFNoYWRlcihmcmFnbWVudCA/IFN0cmlu
ZyhBU0NJSUxpdGVyYWwoZnJhZ21lbnQpKSA6IFN0cmluZygpKQotICAgIHsKLSAgICB9Ci19Owot
Ci1zdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpT
aGFkZXJLZXkga2V5LCBTdHJpbmcmIHZlcnRleFNvdXJjZSwgU3RyaW5nJiBmcmFnbWVudFNvdXJj
ZSkKLXsKLSAgICBzdGF0aWMgVmVjdG9yPFNoYWRlclNwZWM+IHNwZWNzID0gVmVjdG9yPFNoYWRl
clNwZWM+KCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50T3BhY2l0eUFuZE1hc2sg
PQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKLSAgICAgICAgICAg
IHVuaWZvcm0gc2FtcGxlcjJEIHNfbWFzazsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9v
cGFjaXR5OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAg
ICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2b2lkIG1h
aW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IGNvbG9yID0gdGV4
dHVyZTJEKHNfc2FtcGxlciwgdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAgdmVj
NCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7Ci0gICAgICAg
ICAgICAgICAgZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOwot
ICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogZnJhZ21lbnRB
bHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOwotICAgICAgICAgICAgfQotICAgICAgICAp
OwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50UmVjdE9wYWNpdHlBbmRNYXNrID0K
LSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
Ci0gICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zYW1wbGVyOwotICAgICAgICAg
ICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfbWFzazsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxv
YXQgdV9vcGFjaXR5OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7
Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2
b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IGNvbG9y
ID0gdGV4dHVyZTJEUmVjdChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29vcmQpOwotICAgICAgICAg
ICAgICAgIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEUmVjdChzX21hc2ssIHZfbWFza1RleENv
b3JkKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9vcGFjaXR5ICog
bWFza0NvbG9yLmE7Ci0gICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5y
Z2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJhZ21lbnRBbHBoYSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4T3BhY2l0eUFu
ZE1hc2sgPQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9t
YXRyaXg7Ci0gICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmxpcDsKLSAgICAgICAgICAgIHVu
aWZvcm0gdmVjMiB1X3RleHR1cmVTaXplOwotICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92
ZXJ0ZXg7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAg
ICAgICAgIHZhcnlpbmcgdmVjMiB2X21hc2tUZXhDb29yZDsKLSAgICAgICAgICAgIHZvaWQgbWFp
bih2b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZfc291cmNlVGV4Q29vcmQg
PSB2ZWMyKGFfdmVydGV4LngsIG1peChhX3ZlcnRleC55LCAxLiAtIGFfdmVydGV4LnksIHVfZmxp
cCkpICogdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgICAgICAgICB2X21hc2tUZXhDb29yZCA9IHZl
YzIoYV92ZXJ0ZXgpOwotICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBh
X3ZlcnRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBmcmFnbWVudFNpbXBsZSA9Ci0gICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgIHBy
ZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19z
YW1wbGVyOwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgICAg
ICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgICAgIHZvaWQgbWFpbih2
b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJl
MkQoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKLSAgICAgICAgICAgICAgICBnbF9GcmFn
Q29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJh
Z21lbnRBbnRpYWxpYXNpbmdOb01hc2sgPQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAg
ICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJE
IHNfc2FtcGxlcjsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3NvdXJjZVRleENvb3JkOwot
ICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgICAgICB1bmlmb3Jt
IHZlYzMgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07Ci0KLSAgICAgICAgICAg
ICAgICAvLyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3Bh
Y2UgaXMgbWVyZWx5IHRoZQotICAgICAgICAgICAgICAgIC8vIHByZS1zY2FsZWQgY29lZmZlY2ll
bnRzIG9mIHRoZSBsaW5lIGVxdWF0aW9ucyBkZXNjcmliaW5nIHRoZSBmb3VyIGVkZ2VzCi0gICAg
ICAgICAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQgaW4gc2NyZWVuIHNwYWNlIGFuZCB0
aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94Ci0gICAgICAgICAgICAgICAgLy8gb2YgdGhlIGV4
cGFuZGVkIHF1YWQuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGZsb2F0IG5vcm1h
bGl6ZWREaXN0YW5jZSh2ZWMzIGVkZ2VDb2VmZmljaWVudCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICAvLyBXZSBhcmUgZG9pbmcgYSBzaW1wbGUgZGlzdGFuY2UgY2FsY3VsYXRpb24g
aGVyZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm11bGE6Ci0gICAgICAgICAgICAgICAgLy8gKEEqcC54
ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4yICsgQl4yKSA9IGRpc3RhbmNlIGZyb20gbGluZSB0byBw
Ci0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IEEsIEIgYW5kIEMgaGF2ZSBhbHJlYWR5IGJl
ZW4gc2NhbGVkIGJ5IDEgLyBzcXJ0KEFeMiArIEJeMikuCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGNsYW1wKGRvdChlZGdlQ29lZmZpY2llbnQsIHZlYzMoZ2xfRnJhZ0Nvb3JkLnh5LCAxLikpLCAw
LiwgMS4pOworc3RhdGljIGNvbnN0IGNoYXIqIHZlcnRleFNoYWRlclNvdXJjZSA9CisgICAgU1RS
SU5HSUZZKAorICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7CisgICAgICAgIHVuaWZvcm0g
ZmxvYXQgdV9mbGlwOworICAgICAgICB1bmlmb3JtIHZlYzIgdV90ZXh0dXJlU2l6ZTsKKyAgICAg
ICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENv
b3JkOworICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisKKyAgICAgICAgdm9p
ZCBtYWluKHZvaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzQgcG9zaXRpb24gPSBhX3Zl
cnRleDsKKyAgICAgICAgICAgIHZfdGV4Q29vcmQgPSB2ZWMyKHBvc2l0aW9uLngsIG1peChwb3Np
dGlvbi55LCAxLiAtIHBvc2l0aW9uLnksIHVfZmxpcCkpICogdV90ZXh0dXJlU2l6ZTsKKyAgICAg
ICAgICAgIHZfbWFza1RleENvb3JkID0gdmVjMihwb3NpdGlvbik7CisgICAgICAgICAgICBnbF9Q
b3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7CisgICAgICAgIH0KKyAgICApOworCisjZGVm
aW5lIEdMU0xfRElSRUNUSVZFKC4uLikgIiMiI19fVkFfQVJHU19fIlxuIgorI2RlZmluZSBERUZJ
TkVfQVBQTElFUihOYW1lKSBcCisgICAgIiNpZmRlZiBFTkFCTEVfIiNOYW1lIlxuIiBcCisgICAg
IiNkZWZpbmUgYXBwbHkiI05hbWUiSWZOZWVkZWQgYXBwbHkiI05hbWUiXG4iXAorICAgICIjZWxz
ZVxuIlwKKyAgICAiI2RlZmluZSBhcHBseSIjTmFtZSJJZk5lZWRlZCBub29wXG4iXAorICAgICIj
ZW5kaWZcbiIKKworI2RlZmluZSBSRUNUX1RFWFRVUkVfRElSRUNUSVZFIFwKKyAgICBHTFNMX0RJ
UkVDVElWRShpZmRlZiBFTkFCTEVfUmVjdCkgXAorICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZp
bmUgU2FtcGxlclR5cGUgc2FtcGxlcjJEUmVjdCkgXAorICAgICAgICBHTFNMX0RJUkVDVElWRShk
ZWZpbmUgU2FtcGxlckZ1bmN0aW9uIHRleHR1cmUyRFJlY3QpIFwKKyAgICBHTFNMX0RJUkVDVElW
RShlbHNlKSBcCisgICAgICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyVHlwZSBzYW1w
bGVyMkQpIFwKKyAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNhbXBsZXJGdW5jdGlvbiB0
ZXh0dXJlMkQpIFwKKyAgICBHTFNMX0RJUkVDVElWRShlbmRpZikKKworI2RlZmluZSBFTkFCTEVf
QVBQTElFUihOYW1lKSAiI2RlZmluZSBFTkFCTEVfIiNOYW1lIlxuIgorI2RlZmluZSBCTFVSX0NP
TlNUQU5UUyBcCisgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9IQUxG
X1dJRFRIIDExKSBcCisgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIEdBVVNTSUFOX0tFUk5FTF9T
VEVQIDAuMikKKworCitzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRUZW1wbGF0ZSA9CisgICAg
REVGSU5FX0FQUExJRVIoVGV4dHVyZSkKKyAgICBERUZJTkVfQVBQTElFUihTb2xpZENvbG9yKQor
ICAgIERFRklORV9BUFBMSUVSKE9wYWNpdHkpCisgICAgREVGSU5FX0FQUExJRVIoTWFzaykKKyAg
ICBERUZJTkVfQVBQTElFUihBbnRpYWxpYXMpCisgICAgREVGSU5FX0FQUExJRVIoR3JheXNjYWxl
RmlsdGVyKQorICAgIERFRklORV9BUFBMSUVSKFNlcGlhRmlsdGVyKQorICAgIERFRklORV9BUFBM
SUVSKFNhdHVyYXRlRmlsdGVyKQorICAgIERFRklORV9BUFBMSUVSKEh1ZVJvdGF0ZUZpbHRlcikK
KyAgICBERUZJTkVfQVBQTElFUihJbnZlcnRGaWx0ZXIpCisgICAgREVGSU5FX0FQUExJRVIoQnJp
Z2h0bmVzc0ZpbHRlcikKKyAgICBERUZJTkVfQVBQTElFUihDb250cmFzdEZpbHRlcikKKyAgICBE
RUZJTkVfQVBQTElFUihPcGFjaXR5RmlsdGVyKQorICAgIERFRklORV9BUFBMSUVSKEJsdXJGaWx0
ZXIpCisgICAgREVGSU5FX0FQUExJRVIoQWxwaGFCbHVyKQorICAgIERFRklORV9BUFBMSUVSKENv
bnRlbnRUZXh0dXJlKQorICAgIFJFQ1RfVEVYVFVSRV9ESVJFQ1RJVkUKKyAgICBCTFVSX0NPTlNU
QU5UUworICAgIFNUUklOR0lGWSgKKyAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Cisg
ICAgICAgIHVuaWZvcm0gU2FtcGxlclR5cGUgc19zYW1wbGVyOworICAgICAgICB1bmlmb3JtIHNh
bXBsZXIyRCBzX21hc2s7CisgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfY29udGVudFRleHR1
cmU7CisgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OworICAgICAgICB2YXJ5aW5nIHZl
YzIgdl90ZXhDb29yZDsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZfbWFza1RleENvb3JkOworICAg
ICAgICB1bmlmb3JtIHZlYzMgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07Cisg
ICAgICAgIHVuaWZvcm0gZmxvYXQgdV9maWx0ZXJBbW91bnQ7CisgICAgICAgIHVuaWZvcm0gdmVj
MiB1X2JsdXJSYWRpdXM7CisgICAgICAgIHVuaWZvcm0gdmVjMiB1X3NoYWRvd09mZnNldDsKKyAg
ICAgICAgdW5pZm9ybSB2ZWM0IHVfY29sb3I7CisgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVz
c2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07CisKKyAgICAgICAgdm9pZCBu
b29wKHZlYzQpIHsgfQorCisgICAgICAgIC8vIFRoZSBkYXRhIHBhc3NlZCBpbiB1X2V4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZSBpcyBtZXJlbHkgdGhlCisgICAgICAgIC8vIHByZS1zY2Fs
ZWQgY29lZmZlY2llbnRzIG9mIHRoZSBsaW5lIGVxdWF0aW9ucyBkZXNjcmliaW5nIHRoZSBmb3Vy
IGVkZ2VzCisgICAgICAgIC8vIG9mIHRoZSBleHBhbmRlZCBxdWFkIGluIHNjcmVlbiBzcGFjZSBh
bmQgdGhlIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveAorICAgICAgICAvLyBvZiB0aGUgZXhwYW5k
ZWQgcXVhZC4KKyAgICAgICAgLy8KKyAgICAgICAgZmxvYXQgbm9ybWFsaXplZERpc3RhbmNlKHZl
YzMgZWRnZUNvZWZmaWNpZW50KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSBhcmUgZG9p
bmcgYSBzaW1wbGUgZGlzdGFuY2UgY2FsY3VsYXRpb24gaGVyZSBhY2NvcmRpbmcgdG8gdGhlIGZv
cm11bGE6CisgICAgICAgICAgICAvLyAoQSpwLnggKyBCKnAueSArIEMpIC8gc3FydChBXjIgKyBC
XjIpID0gZGlzdGFuY2UgZnJvbSBsaW5lIHRvIHAKKyAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBB
LCBCIGFuZCBDIGhhdmUgYWxyZWFkeSBiZWVuIHNjYWxlZCBieSAxIC8gc3FydChBXjIgKyBCXjIp
LgorICAgICAgICAgICAgcmV0dXJuIGNsYW1wKGRvdChlZGdlQ29lZmZpY2llbnQsIHZlYzMoZ2xf
RnJhZ0Nvb3JkLnh5LCAxLikpLCAwLiwgMS4pOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQg
YW50aWFsaWFzUXVhZCh2ZWMzIGNvZWZmaWNpZW50MSwgdmVjMyBjb2VmZmljaWVudDIsIHZlYzMg
Y29lZmZpY2llbnQzLCB2ZWMzIGNvZWZmaWNpZW50NCkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gTm93IHdlIHdhbnQgdG8gcmVkdWNlIHRoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgZnJhZ21lbnQg
aWYgaXQgaXMgY2xvc2UgdG8gdGhlCisgICAgICAgICAgICAvLyBlZGdlcyBvZiB0aGUgZXhwYW5k
ZWQgcXVhZCAob3IgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94IC0tIHdoaWNoIHNlZW1zIHRvIGJl
CisgICAgICAgICAgICAvLyBpbXBvcnRhbnQgZm9yIGJhY2tmYWNpbmcgcXVhZHMpLiBOb3RlIHRo
YXQgd2UgYXJlIGNvbWJpbmluZyB0aGUgY29udHJpYnV0aW9uCisgICAgICAgICAgICAvLyBmcm9t
IHRoZSAodG9wIHx8IGJvdHRvbSkgYW5kIChsZWZ0IHx8IHJpZ2h0KSBlZGdlIGJ5IHNpbXBseSBt
dWx0aXBseWluZy4gVGhpcyBmb2xsb3dzCisgICAgICAgICAgICAvLyB0aGUgYXBwcm9hY2ggZGVz
Y3JpYmVkIGF0OiBodHRwOi8vaHR0cC5kZXZlbG9wZXIubnZpZGlhLmNvbS9HUFVHZW1zMi9ncHVn
ZW1zMl9jaGFwdGVyMjIuaHRtbCwKKyAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3aXRob3V0
IHVzaW5nIEdhdXNzaWFuIHdlaWdodHMuCisgICAgICAgICAgICByZXR1cm4gbWluKG5vcm1hbGl6
ZWREaXN0YW5jZShjb2VmZmljaWVudDEpLCBub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQy
KSkKKyAgICAgICAgICAgICAgICAqIG1pbihub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQz
KSwgbm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50NCkpOworICAgICAgICB9CisKKyAgICAg
ICAgZmxvYXQgYW50aWFsaWFzKCkKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQgYW50aWFs
aWFzVmFsdWVGb3JRdWFkID0gCisgICAgICAgICAgICAgICAgYW50aWFsaWFzUXVhZCh1X2V4cGFu
ZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVswXSwKKyAgICAgICAgICAgICAgICAgICAgdV9leHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMV0sCisgICAgICAgICAgICAgICAgICAgIHVfZXhw
YW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzJdLAorICAgICAgICAgICAgICAgICAgICB1X2V4
cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVszXSk7CisKKyAgICAgICAgICAgIGZsb2F0IGFu
dGlhbGlhc1ZhbHVlRm9yQm91bmRpbmdSZWN0ID0gCisgICAgICAgICAgICAgICAgYW50aWFsaWFz
UXVhZCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs0XSwKKyAgICAgICAgICAgICAg
ICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNV0sCisgICAgICAgICAgICAg
ICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzZdLAorICAgICAgICAgICAg
ICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs3XSk7CisKKyAgICAgICAg
ICAgIHJldHVybiBtaW4oYW50aWFsaWFzVmFsdWVGb3JRdWFkLCBhbnRpYWxpYXNWYWx1ZUZvckJv
dW5kaW5nUmVjdCk7ICAgICAgICAgICAKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXBwbHlU
ZXh0dXJlKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgPSBTYW1wbGVyRnVuY3Rpb24oc19zYW1w
bGVyLCB2X3RleENvb3JkKTsgfQorICAgICAgICB2b2lkIGFwcGx5T3BhY2l0eShpbm91dCB2ZWM0
IGNvbG9yKSB7IGNvbG9yICo9IHVfb3BhY2l0eTsgfQorICAgICAgICB2b2lkIGFwcGx5QW50aWFs
aWFzKGlub3V0IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gYW50aWFsaWFzKCk7IH0KKyAgICAgICAg
dm9pZCBhcHBseU1hc2soaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSB0ZXh0dXJlMkQoc19t
YXNrLCB2X21hc2tUZXhDb29yZCkuYTsgfQorCisgICAgICAgIHZvaWQgYXBwbHlHcmF5c2NhbGVG
aWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQgYW1v
dW50ID0gMS4wIC0gdV9maWx0ZXJBbW91bnQ7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoKDAu
MjEyNiArIDAuNzg3NCAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFt
b3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBjb2xvci5iLAor
ICAgICAgICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgw
LjcxNTIgKyAwLjI4NDggKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBh
bW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1v
dW50KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAo
MC4wNzIyICsgMC45Mjc4ICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgY29s
b3IuYSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5U2VwaWFGaWx0ZXIoaW5vdXQg
dmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4wIC0g
dV9maWx0ZXJBbW91bnQ7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoKDAuMzkzICsgMC42MDcg
KiBhbW91bnQpICogY29sb3IuciArICgwLjc2OSAtIDAuNzY5ICogYW1vdW50KSAqIGNvbG9yLmcg
KyAoMC4xODkgLSAwLjE4OSAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICgw
LjM0OSAtIDAuMzQ5ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC42ODYgKyAwLjMxNCAqIGFtb3Vu
dCkgKiBjb2xvci5nICsgKDAuMTY4IC0gMC4xNjggKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAg
ICAgICAgICAgICAoMC4yNzIgLSAwLjI3MiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNTM0IC0g
MC41MzQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjEzMSArIDAuODY5ICogYW1vdW50KSAqIGNv
bG9yLmIsCisgICAgICAgICAgICAgICAgY29sb3IuYSk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGFwcGx5U2F0dXJhdGVGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAg
ICAgICAgICAgY29sb3IgPSB2ZWM0KCgwLjIxMyArIDAuNzg3ICogdV9maWx0ZXJBbW91bnQpICog
Y29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuZyArICgw
LjA3MiAtIDAuMDcyICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAg
ICAoMC4yMTMgLSAwLjIxMyAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgKyAw
LjI4NSAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfZmls
dGVyQW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1
X2ZpbHRlckFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2ZpbHRlckFtb3Vu
dCkgKiBjb2xvci5nICsgKDAuMDcyICsgMC45MjggKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5i
LAorICAgICAgICAgICAgICAgIGNvbG9yLmEpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBh
cHBseUh1ZVJvdGF0ZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAg
ICAgICBmbG9hdCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7CisgICAgICAgICAgICBmbG9h
dCBjID0gY29zKHVfZmlsdGVyQW1vdW50ICogcGkgLyAxODAuMCk7CisgICAgICAgICAgICBmbG9h
dCBzID0gc2luKHVfZmlsdGVyQW1vdW50ICogcGkgLyAxODAuMCk7CisgICAgICAgICAgICBjb2xv
ciA9IHZlYzQoY29sb3IuciAqICgwLjIxMyArIGMgKiAwLjc4NyAtIHMgKiAwLjIxMykgKyBjb2xv
ci5nICogKDAuNzE1IC0gYyAqIDAuNzE1IC0gcyAqIDAuNzE1KSArIGNvbG9yLmIgKiAoMC4wNzIg
LSBjICogMC4wNzIgKyBzICogMC45MjgpLAorICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4y
MTMgLSBjICogMC4yMTMgKyBzICogMC4xNDMpICsgY29sb3IuZyAqICgwLjcxNSArIGMgKiAwLjI4
NSArIHMgKiAwLjE0MCkgKyBjb2xvci5iICogKDAuMDcyIC0gYyAqIDAuMDcyIC0gcyAqIDAuMjgz
KSwKKyAgICAgICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAqIDAuMjEzIC0gcyAqIDAu
Nzg3KSArICBjb2xvci5nICogKDAuNzE1IC0gYyAqIDAuNzE1ICsgcyAqIDAuNzE1KSArIGNvbG9y
LmIgKiAoMC4wNzIgKyBjICogMC45MjggKyBzICogMC4wNzIpLAorICAgICAgICAgICAgICAgIGNv
bG9yLmEpOworICAgICAgICB9CisKKyAgICAgICAgZmxvYXQgaW52ZXJ0KGZsb2F0IG4pIHsgcmV0
dXJuICgxLjAgLSBuKSAqIHVfZmlsdGVyQW1vdW50ICsgbiAqICgxLjAgLSB1X2ZpbHRlckFtb3Vu
dCk7IH0KKyAgICAgICAgdm9pZCBhcHBseUludmVydEZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQor
ICAgICAgICB7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoaW52ZXJ0KGNvbG9yLnIpLCBpbnZl
cnQoY29sb3IuZyksIGludmVydChjb2xvci5iKSwgY29sb3IuYSk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGFwcGx5QnJpZ2h0bmVzc0ZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoY29sb3IucmdiICogKDEuMCArIHVfZmlsdGVy
QW1vdW50KSwgY29sb3IuYSk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBjb250cmFzdChm
bG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2ZpbHRlckFtb3VudCArIDAuNTsgfQorICAg
ICAgICB2b2lkIGFwcGx5Q29udHJhc3RGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAg
eworICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGNvbnRyYXN0KGNvbG9yLnIpLCBjb250cmFzdChj
b2xvci5nKSwgY29udHJhc3QoY29sb3IuYiksIGNvbG9yLmEpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBhcHBseU9wYWNpdHlGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgewor
ICAgICAgICAgICAgY29sb3IgPSB2ZWM0KGNvbG9yLnIsIGNvbG9yLmcsIGNvbG9yLmIsIGNvbG9y
LmEgKiB1X2ZpbHRlckFtb3VudCk7CisgICAgICAgIH0KKworICAgICAgICB2ZWM0IHNhbXBsZUNv
bG9yQXRSYWRpdXMoZmxvYXQgcmFkaXVzKQorICAgICAgICB7CisgICAgICAgICAgICB2ZWMyIGNv
b3JkID0gdl90ZXhDb29yZCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsKKyAgICAgICAgICAgIHJl
dHVybiBTYW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCBjb29yZCkgKiBmbG9hdChjb29yZC54ID4g
MC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOworICAg
ICAgICB9CisKKyAgICAgICAgZmxvYXQgc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdCByYWRpdXMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2X3RleENvb3JkIC0gdV9zaGFk
b3dPZmZzZXQgKyByYWRpdXMgKiB1X2JsdXJSYWRpdXM7CisgICAgICAgICAgICByZXR1cm4gU2Ft
cGxlckZ1bmN0aW9uKHNfc2FtcGxlciwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYg
Y29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBhcHBseUJsdXJGaWx0ZXIoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAg
ICAgeworICAgICAgICAgICAgdmVjNCB0b3RhbCA9IHNhbXBsZUNvbG9yQXRSYWRpdXMoMC4pICog
dV9nYXVzc2lhbktlcm5lbFswXTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FV
U1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkrKykgeworICAgICAgICAgICAgICAgIHRvdGFsICs9
IHNhbXBsZUNvbG9yQXRSYWRpdXMoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1
X2dhdXNzaWFuS2VybmVsW2ldOworICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUNvbG9y
QXRSYWRpdXMoZmxvYXQoLTEgKiBpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3Np
YW5LZXJuZWxbaV07CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZsb2F0IGFudGlhbGlh
c1F1YWQodmVjMyBjb2VmZmljaWVudDEsIHZlYzMgY29lZmZpY2llbnQyLCB2ZWMzIGNvZWZmaWNp
ZW50MywgdmVjMyBjb2VmZmljaWVudDQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg
Ly8gTm93IHdlIHdhbnQgdG8gcmVkdWNlIHRoZSBhbHBoYSB2YWx1ZSBvZiB0aGUgZnJhZ21lbnQg
aWYgaXQgaXMgY2xvc2UgdG8gdGhlCi0gICAgICAgICAgICAgICAgLy8gZWRnZXMgb2YgdGhlIGV4
cGFuZGVkIHF1YWQgKG9yIHJlY3Rhbmd1bGFyIGJvdW5kaW5nIGJveCAtLSB3aGljaCBzZWVtcyB0
byBiZQotICAgICAgICAgICAgICAgIC8vIGltcG9ydGFudCBmb3IgYmFja2ZhY2luZyBxdWFkcyku
IE5vdGUgdGhhdCB3ZSBhcmUgY29tYmluaW5nIHRoZSBjb250cmlidXRpb24KLSAgICAgICAgICAg
ICAgICAvLyBmcm9tIHRoZSAodG9wIHx8IGJvdHRvbSkgYW5kIChsZWZ0IHx8IHJpZ2h0KSBlZGdl
IGJ5IHNpbXBseSBtdWx0aXBseWluZy4gVGhpcyBmb2xsb3dzCi0gICAgICAgICAgICAgICAgLy8g
dGhlIGFwcHJvYWNoIGRlc2NyaWJlZCBhdDogaHR0cDovL2h0dHAuZGV2ZWxvcGVyLm52aWRpYS5j
b20vR1BVR2VtczIvZ3B1Z2VtczJfY2hhcHRlcjIyLmh0bWwsCi0gICAgICAgICAgICAgICAgLy8g
aW4gdGhpcyBjYXNlIHdpdGhvdXQgdXNpbmcgR2F1c3NpYW4gd2VpZ2h0cy4KLSAgICAgICAgICAg
ICAgICByZXR1cm4gbWluKG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDEpLCBub3JtYWxp
emVkRGlzdGFuY2UoY29lZmZpY2llbnQyKSkKLSAgICAgICAgICAgICAgICAgICAgKiBtaW4obm9y
bWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MyksIG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmlj
aWVudDQpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbG9yID0gdG90YWw7CisgICAg
ICAgIH0KIAotICAgICAgICAgICAgZmxvYXQgYW50aWFsaWFzKCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICBmbG9hdCBhbnRpYWxpYXNWYWx1ZUZvclF1YWQgPSAKLSAgICAgICAgICAg
ICAgICAgICAgYW50aWFsaWFzUXVhZCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsw
XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNw
YWNlWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2Ny
ZWVuU3BhY2VbMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2Vz
SW5TY3JlZW5TcGFjZVszXSk7Ci0KLSAgICAgICAgICAgICAgICBmbG9hdCBhbnRpYWxpYXNWYWx1
ZUZvckJvdW5kaW5nUmVjdCA9IAotICAgICAgICAgICAgICAgICAgICBhbnRpYWxpYXNRdWFkKHVf
ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzRdLAotICAgICAgICAgICAgICAgICAgICAg
ICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNV0sCi0gICAgICAgICAgICAgICAg
ICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs2XSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzddKTsKLQotICAg
ICAgICAgICAgICAgIHJldHVybiBtaW4oYW50aWFsaWFzVmFsdWVGb3JRdWFkLCBhbnRpYWxpYXNW
YWx1ZUZvckJvdW5kaW5nUmVjdCk7ICAgICAgICAgICAKKyAgICAgICAgdm9pZCBhcHBseUFscGhh
Qmx1cihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCB0b3Rh
bCA9IHNhbXBsZUFscGhhQXRSYWRpdXMoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKKyAgICAg
ICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEg7IGkr
KykgeworICAgICAgICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhQXRSYWRpdXMoZmxvYXQo
aSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOworICAgICAg
ICAgICAgICAgIHRvdGFsICs9IHNhbXBsZUFscGhhQXRSYWRpdXMoZmxvYXQoLTEgKiBpKSAqIEdB
VVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CiAgICAgICAgICAgICB9
CiAKLSAgICAgICAgICAgIHZvaWQgbWFpbigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdmVjNCBzYW1wbGVkQ29sb3IgPSB0ZXh0dXJlMkQoc19zYW1wbGVyLCBjbGFtcCh2X3NvdXJj
ZVRleENvb3JkLCAwLjAsIDEuMCkpOwotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNh
bXBsZWRDb2xvciAqIHVfb3BhY2l0eSAqIGFudGlhbGlhcygpOwotICAgICAgICAgICAgfQotICAg
ICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50UmVjdFNpbXBsZSA9Ci0g
ICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owot
ICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc2FtcGxlcjsKLSAgICAgICAgICAg
IHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291
cmNlVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEUmVjdChzX3NhbXBsZXIsIHZf
c291cmNlVGV4Q29vcmQpOwotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29s
b3IucmdiICogdV9vcGFjaXR5LCBjb2xvci5hICogdV9vcGFjaXR5KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaW1wbGUgPQotICAg
ICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0gICAg
ICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmxpcDsKLSAgICAgICAgICAgIHVuaWZvcm0gdmVjMiB1
X3RleHR1cmVTaXplOwotICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAg
ICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgICAgIHZvaWQg
bWFpbih2b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZfc291cmNlVGV4Q29v
cmQgPSB2ZWMyKGFfdmVydGV4LngsIG1peChhX3ZlcnRleC55LCAxLiAtIGFfdmVydGV4LnksIHVf
ZmxpcCkpICogdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVf
bWF0cml4ICogYV92ZXJ0ZXg7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0
aWMgY29uc3QgY2hhciogdmVydGV4U29saWRDb2xvciA9Ci0gICAgICAgIFNUUklOR0lGWSgKLSAg
ICAgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKLSAgICAgICAgICAgIGF0dHJpYnV0ZSB2
ZWM0IGFfdmVydGV4OwotICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZ2xfUG9zaXRpb24gPSB1X21hdHJpeCAqIGFfdmVydGV4OwotICAg
ICAgICAgICAgfQotICAgICAgICApOwotCi0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRTb2xpZENvbG9yID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgcHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsKLSAgICAg
ICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGds
X0ZyYWdDb2xvciA9IHVfY29sb3I7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBz
dGF0aWMgY29uc3QgY2hhciogdmVydGV4RmlsdGVyID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAg
ICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgICAgICBhdHRyaWJ1dGUg
dmVjNCBhX3RleENvb3JkOwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7Ci0g
ICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB2X3RleENvb3JkID0gdmVjMihhX3RleENvb3JkKTsKLSAgICAgICAgICAgICAgICBnbF9Qb3Np
dGlvbiA9IGFfdmVydGV4OwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0jZGVmaW5lIFNU
QU5EQVJEX0ZJTFRFUiguLi4pIFwKLSAgICAgICAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0O1xu
IlwKLSAgICAgICAgInZhcnlpbmcgdmVjMiB2X3RleENvb3JkO1xuIlwKLSAgICAgICAgInVuaWZv
cm0gZmxvYXQgdV9hbW91bnQ7XG4iXAotICAgICAgICAidW5pZm9ybSBzYW1wbGVyMkQgc19zYW1w
bGVyO1xuIiNfX1ZBX0FSR1NfXyBcCi0gICAgICAgICJ2b2lkIG1haW4odm9pZClcbiB7IGdsX0Zy
YWdDb2xvciA9IHNoYWRlKHRleHR1cmUyRChzX3NhbXBsZXIsIHZfdGV4Q29vcmQpKTsgfSIKLQot
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEdyYXlzY2FsZUZpbHRlciA9Ci0gICAgICAg
IFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9y
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVf
YW1vdW50OwotICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KCgwLjIxMjYgKyAwLjc4NzQgKiBh
bW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQpICogY29sb3IuZyAr
ICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUy
ICsgMC4yODQ4ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50
KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEy
NiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xv
ci5nICsgKDAuMDcyMiArIDAuOTI3OCAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbG9yLmEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0g
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2VwaWFGaWx0ZXIgPQotICAgICAgICBTVEFO
REFSRF9GSUxURVIoCi0gICAgICAgICAgICB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2Ftb3Vu
dDsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4zOTMgKyAwLjYwNyAqIGFtb3VudCkg
KiBjb2xvci5yICsgKDAuNzY5IC0gMC43NjkgKiBhbW91bnQpICogY29sb3IuZyArICgwLjE4OSAt
IDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
KDAuMzQ5IC0gMC4zNDkgKiBhbW91bnQpICogY29sb3IuciArICgwLjY4NiArIDAuMzE0ICogYW1v
dW50KSAqIGNvbG9yLmcgKyAoMC4xNjggLSAwLjE2OCAqIGFtb3VudCkgKiBjb2xvci5iLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNvbG9y
LnIgKyAoMC41MzQgLSAwLjUzNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44Njkg
KiBhbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5h
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudFNhdHVyYXRlRmlsdGVyID0KLSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAg
ICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIHZlYzQoKDAuMjEzICsgMC43ODcgKiB1X2Ftb3VudCkgKiBjb2xvci5y
ICsgKDAuNzE1IC0gMC43MTUgKiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIg
KiB1X2Ftb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIx
MyAtIDAuMjEzICogdV9hbW91bnQpICogY29sb3IuciArICgwLjcxNSArIDAuMjg1ICogdV9hbW91
bnQpICogY29sb3IuZyArICgwLjA3MiAtIDAuMDcyICogdV9hbW91bnQpICogY29sb3IuYiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIxMyAqIHVfYW1vdW50KSAqIGNv
bG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgKyAw
LjkyOCAqIHVfYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29sb3IuYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZnJhZ21lbnRIdWVSb3RhdGVGaWx0ZXIgPQotICAgICAgICBTVEFOREFSRF9GSUxURVIo
Ci0gICAgICAgICAgICB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBmbG9hdCBwaSA9IDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7Ci0gICAg
ICAgICAgICAgICAgZmxvYXQgYyA9IGNvcyh1X2Ftb3VudCAqIHBpIC8gMTgwLjApOwotICAgICAg
ICAgICAgICAgIGZsb2F0IHMgPSBzaW4odV9hbW91bnQgKiBwaSAvIDE4MC4wKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAqIDAu
MjEzKSArIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29sb3Iu
YiAqICgwLjA3MiAtIGMgKiAwLjA3MiArIHMgKiAwLjkyOCksCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyArIHMgKiAwLjE0MykgKyBjb2xv
ci5nICogKDAuNzE1ICsgYyAqIDAuMjg1ICsgcyAqIDAuMTQwKSArIGNvbG9yLmIgKiAoMC4wNzIg
LSBjICogMC4wNzIgLSBzICogMC4yODMpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgLSBzICogMC43ODcpICsgIGNvbG9yLmcgKiAoMC43
MTUgLSBjICogMC43MTUgKyBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiArIGMgKiAwLjky
OCArIHMgKiAwLjA3MiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRJbnZlcnRGaWx0ZXIgPQotICAgICAgICBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICBm
bG9hdCBpbnZlcnQobG93cCBmbG9hdCBuKSB7IHJldHVybiAoMS4wIC0gbikgKiB1X2Ftb3VudCAr
IG4gKiAoMS4wIC0gdV9hbW91bnQpOyB9Ci0gICAgICAgICAgICB2ZWM0IHNoYWRlKGxvd3AgdmVj
NCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChpbnZl
cnQoY29sb3IuciksIGludmVydChjb2xvci5nKSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5hKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFn
bWVudEJyaWdodG5lc3NGaWx0ZXIgPQotICAgICAgICBTVEFOREFSRF9GSUxURVIoCi0gICAgICAg
ICAgICB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gdmVjNChjb2xvci5yZ2IgKiAoMS4wICsgdV9hbW91bnQpLCBjb2xvci5h
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudENvbnRyYXN0RmlsdGVyID0KLSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAg
ICAgICAgZmxvYXQgY29udHJhc3QobG93cCBmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1
X2Ftb3VudCArIDAuNTsgfQotICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3Ip
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3QoY29s
b3IuciksIGNvbnRyYXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21l
bnRPcGFjaXR5RmlsdGVyID0KLSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAg
dmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHZlYzQoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVfYW1v
dW50KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotI2RlZmluZSBCTFVSX0NPTlNUQU5U
UyAiI2RlZmluZSBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCAxMVxuI2RlZmluZSBHQVVTU0lB
Tl9LRVJORUxfU1RFUCAwLjJcbiIKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEJs
dXJGaWx0ZXIgPQotICAgICAgICBCTFVSX0NPTlNUQU5UUwotICAgICAgICBTVFJJTkdJRlkoCi0g
ICAgICAgICAgICAvLyBDcmVhdGUgYSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIDIxIHZhbHVlcyBi
ZXR3ZWVuIC0yIGFuZCAyLgotICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0g
ICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAgIHVuaWZvcm0g
dmVjMiB1X2JsdXJSYWRpdXM7Ci0gICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBs
ZXI7Ci0gICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5f
S0VSTkVMX0hBTEZfV0lEVEhdOwotCi0gICAgICAgICAgICB2ZWM0IHNhbXBsZUNvbG9yKGZsb2F0
IHJhZGl1cykKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90
ZXhDb29yZCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dGV4dHVyZTJEKHNfc2FtcGxlciwgY29vcmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3Jk
LnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgdmVjNCBibHVyKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICB2ZWM0IHRvdGFsID0gc2FtcGxlQ29sb3IoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJ
RFRIOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQ29sb3IoZmxv
YXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAg
ICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVDb2xvcihmbG9hdCgtMSAqIGkpICogR0FV
U1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGdsX0ZyYWdDb2xvciA9IGJsdXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNoYWRvd0ZpbHRlcjEgPQotICAgICAgICBCTFVS
X0NPTlNUQU5UUwotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBwcmVjaXNpb24gbWVk
aXVtcCBmbG9hdDsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwotICAgICAg
ICAgICAgdW5pZm9ybSBmbG9hdCB1X2JsdXJSYWRpdXM7Ci0gICAgICAgICAgICB1bmlmb3JtIHZl
YzIgdV9zaGFkb3dPZmZzZXQ7Ci0gICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBs
ZXI7Ci0gICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5f
S0VSTkVMX0hBTEZfV0lEVEhdOwotCi0gICAgICAgICAgICBmbG9hdCBzYW1wbGVBbHBoYShmbG9h
dCByYWRpdXMpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZf
dGV4Q29vcmQgLSB1X3NoYWRvd09mZnNldCArIHZlYzIocmFkaXVzICogdV9ibHVyUmFkaXVzLCAw
Lik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRChzX3NhbXBsZXIsIGNvb3JkKS5h
ICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYg
Y29vcmQueSA8IDEuKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmxvYXQgc2hhZG93
Qmx1ckhvcml6b250YWwoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0IHRv
dGFsID0gc2FtcGxlQWxwaGEoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKysp
IHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoaSkgKiBH
QVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAg
ICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VS
TkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gdG90YWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHZvaWQgbWFpbih2b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsX0ZyYWdD
b2xvciA9IHZlYzQoMS4sIDEuLCAxLiwgMS4pICogc2hhZG93Qmx1ckhvcml6b250YWwoKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIC8vIFNlY29uZCBwYXNzOiB2ZXJ0aWNhbCBh
bHBoYSBibHVyIGFuZCBjb21wb3NpdGUgd2l0aCBvcmlnaW4uCi0gICAgc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50U2hhZG93RmlsdGVyMiA9Ci0gICAgICAgIEJMVVJfQ09OU1RBTlRTCi0gICAg
ICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAg
ICAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICB1bmlmb3JtIGZs
b2F0IHVfYmx1clJhZGl1czsKLSAgICAgICAgICAgIHVuaWZvcm0gdmVjNCB1X3NoYWRvd0NvbG9y
OwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOwotICAgICAgICAgICAg
dW5pZm9ybSBzYW1wbGVyMkQgc19jb250ZW50VGV4dHVyZTsKLSAgICAgICAgICAgIHVuaWZvcm0g
ZmxvYXQgdV9nYXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07Ci0KLSAg
ICAgICAgICAgIGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0IHIpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgKyB2ZWMyKDAuLCByICogdV9ibHVy
UmFkaXVzKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxlciwgY29v
cmQpLmEgKiBmbG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAx
LiAmJiBjb29yZC55IDwgMS4pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmbG9hdCBz
aGFkb3dCbHVyVmVydGljYWwoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0
IHRvdGFsID0gc2FtcGxlQWxwaGEoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAg
ICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBp
KyspIHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoaSkg
KiBHQVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAg
ICAgICAgICAgICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5f
S0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gdG90YWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIHZlYzQgc291cmNlT3Zlcihsb3dwIHZlYzQgc291cmNlLCB2ZWM0IGRlc3RpbmF0aW9uKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIENvbXBvc2l0ZSB0aGUgc2hhZG93IHdp
dGggdGhlIG9yaWdpbmFsIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZSAr
IGRlc3RpbmF0aW9uICogKDEuIC0gc291cmNlLmEpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbF9G
cmFnQ29sb3IgPSBzb3VyY2VPdmVyKHRleHR1cmUyRChzX2NvbnRlbnRUZXh0dXJlLCB2X3RleENv
b3JkKSwgc2hhZG93Qmx1clZlcnRpY2FsKCkgKiB1X3NoYWRvd0NvbG9yKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgKTsKLQotICAgIGlmIChzcGVjcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3Bl
Y3MucmVzaXplKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpMYXN0RmlsdGVyKTsKLSAgICAg
ICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkRlZmF1bHRdID0gU2hhZGVyU3Bl
Yyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50U2ltcGxlKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlNvbGlkQ29sb3JdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTb2xpZENv
bG9yLCBmcmFnbWVudFNvbGlkQ29sb3IpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6UmVjdF0gPSBTaGFkZXJTcGVjKHZlcnRleFNpbXBsZSwgZnJhZ21lbnRSZWN0
U2ltcGxlKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tl
ZF0gPSBTaGFkZXJTcGVjKHZlcnRleE9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudE9wYWNpdHlBbmRN
YXNrKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZFJl
Y3RdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRSZWN0T3BhY2l0
eUFuZE1hc2spOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50
aWFsaWFzZWRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50QW50aWFsaWFzaW5n
Tm9NYXNrKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkdyYXlz
Y2FsZUZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRHcmF5c2NhbGVG
aWx0ZXIpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2VwaWFG
aWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2VwaWFGaWx0ZXIpOwot
ICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2F0dXJhdGVGaWx0ZXJd
ID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2F0dXJhdGVGaWx0ZXIpOwotICAg
ICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SHVlUm90YXRlRmlsdGVyXSA9
IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEh1ZVJvdGF0ZUZpbHRlcik7Ci0gICAg
ICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpCcmlnaHRuZXNzRmlsdGVyXSA9
IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEJyaWdodG5lc3NGaWx0ZXIpOwotICAg
ICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Q29udHJhc3RGaWx0ZXJdID0g
U2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50Q29udHJhc3RGaWx0ZXIpOwotICAgICAg
ICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SW52ZXJ0RmlsdGVyXSA9IFNoYWRl
clNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEludmVydEZpbHRlcik7Ci0gICAgICAgIHNwZWNz
W1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5RmlsdGVyXSA9IFNoYWRlclNwZWMo
dmVydGV4RmlsdGVyLCBmcmFnbWVudE9wYWNpdHlGaWx0ZXIpOwotICAgICAgICBzcGVjc1tUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZp
bHRlciwgZnJhZ21lbnRCbHVyRmlsdGVyKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlNoYWRvd0ZpbHRlclBhc3MxXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVy
LCBmcmFnbWVudFNoYWRvd0ZpbHRlcjEpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6U2hhZG93RmlsdGVyUGFzczJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIs
IGZyYWdtZW50U2hhZG93RmlsdGVyMik7Ci0gICAgfQotCi0gICAgQVNTRVJUKHNwZWNzLnNpemUo
KSA+IGtleSk7Ci0gICAgU2hhZGVyU3BlYyYgc3BlYyA9IHNwZWNzW2tleV07Ci0gICAgdmVydGV4
U291cmNlID0gc3BlYy52ZXJ0ZXhTaGFkZXI7Ci0gICAgZnJhZ21lbnRTb3VyY2UgPSBzcGVjLmZy
YWdtZW50U2hhZGVyOworICAgICAgICAgICAgY29sb3IgKj0gdG90YWw7CisgICAgICAgIH0KKwor
ICAgICAgICB2ZWM0IHNvdXJjZU92ZXIodmVjNCBzcmMsIHZlYzQgZHN0KSB7IHJldHVybiBzcmMg
KyBkc3QgKiAoMS4gLSBkc3QuYSk7IH0KKworICAgICAgICB2b2lkIGFwcGx5Q29udGVudFRleHR1
cmUoaW5vdXQgdmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgdmVjNCBjb250ZW50
Q29sb3IgPSB0ZXh0dXJlMkQoc19jb250ZW50VGV4dHVyZSwgdl90ZXhDb29yZCk7CisgICAgICAg
ICAgICBjb2xvciA9IHNvdXJjZU92ZXIoY29udGVudENvbG9yLCBjb2xvcik7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGFwcGx5U29saWRDb2xvcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb2xvciAqPSB1X2NvbG9yOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBtYWluKHZvaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzQgY29sb3IgPSB2ZWM0
KDEuLCAxLiwgMS4sIDEuKTsKKyAgICAgICAgICAgIGFwcGx5VGV4dHVyZUlmTmVlZGVkKGNvbG9y
KTsKKyAgICAgICAgICAgIGFwcGx5U29saWRDb2xvcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAg
ICAgIGFwcGx5QW50aWFsaWFzSWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlNYXNr
SWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlPcGFjaXR5SWZOZWVkZWQoY29sb3Ip
OworICAgICAgICAgICAgYXBwbHlHcmF5c2NhbGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAg
ICAgICAgICBhcHBseVNlcGlhRmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBw
bHlTYXR1cmF0ZUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5SHVlUm90
YXRlRmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlJbnZlcnRGaWx0ZXJJ
Zk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseUJyaWdodG5lc3NGaWx0ZXJJZk5lZWRl
ZChjb2xvcik7CisgICAgICAgICAgICBhcHBseUNvbnRyYXN0RmlsdGVySWZOZWVkZWQoY29sb3Ip
OworICAgICAgICAgICAgYXBwbHlPcGFjaXR5RmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAg
ICAgICAgYXBwbHlCbHVyRmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlB
bHBoYUJsdXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseUNvbnRlbnRUZXh0dXJl
SWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7CisgICAg
ICAgIH0KKyAgICApOworCisKK3N0YXRpYyB2b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucywgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0
cmluZyYgZnJhZ21lbnRTb3VyY2UpCit7CisgICAgU3RyaW5nQnVpbGRlciBmcmFnbWVudEJ1aWxk
ZXI7CisjZGVmaW5lIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBcHBsaWVyKSBcCisgICAgaWYg
KG9wdGlvbnMgJiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QXBwbGllcikgXAorICAgICAg
ICBmcmFnbWVudEJ1aWxkZXIuYXBwZW5kKEVOQUJMRV9BUFBMSUVSKEFwcGxpZXIpKTsKKworICAg
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhNYXRyaXgpCisgICAgU0VUX0FQUExJRVJfRlJPTV9P
UFRJT05TKFRleHR1cmUpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFJlY3QpCisgICAg
U0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNvbGlkQ29sb3IpCisgICAgU0VUX0FQUExJRVJfRlJP
TV9PUFRJT05TKE9wYWNpdHkpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE1hc2spCisg
ICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEFudGlhbGlhcykKKyAgICBTRVRfQVBQTElFUl9G
Uk9NX09QVElPTlMoR3JheXNjYWxlRmlsdGVyKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9O
UyhTZXBpYUZpbHRlcikKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2F0dXJhdGVGaWx0
ZXIpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEh1ZVJvdGF0ZUZpbHRlcikKKyAgICBT
RVRfQVBQTElFUl9GUk9NX09QVElPTlMoQnJpZ2h0bmVzc0ZpbHRlcikKKyAgICBTRVRfQVBQTElF
Ul9GUk9NX09QVElPTlMoQ29udHJhc3RGaWx0ZXIpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJ
T05TKEludmVydEZpbHRlcikKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoT3BhY2l0eUZp
bHRlcikKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQmx1ckZpbHRlcikKKyAgICBTRVRf
QVBQTElFUl9GUk9NX09QVElPTlMoQWxwaGFCbHVyKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BU
SU9OUyhDb250ZW50VGV4dHVyZSkKKworICAgIGZyYWdtZW50QnVpbGRlci5hcHBlbmQoZnJhZ21l
bnRUZW1wbGF0ZSk7CisgICAgdmVydGV4U291cmNlID0gdmVydGV4U2hhZGVyU291cmNlOworICAg
IGZyYWdtZW50U291cmNlID0gZnJhZ21lbnRCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGlj
c0NvbnRleHQzRCogY29udGV4dCkKQEAgLTUzNCwxNyArMzk5LDE3IEBAIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQogewogfQogCi1QYXNz
UmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6Z2V0U2hhZGVyUHJvZ3JhbShTaGFkZXJLZXkga2V5KQorUGFzc1JlZlB0cjxUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRl
clByb2dyYW0oT3B0aW9ucyBvcHRpb25zKQogewotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9n
cmFtTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZ3JhbXMuZmluZChrZXkpOworICAgIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZ3JhbXMuZmluZChvcHRp
b25zKTsKICAgICBpZiAoaXQgIT0gbV9wcm9ncmFtcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGl0
LT52YWx1ZTsKIAogICAgIFN0cmluZyB2ZXJ0ZXhTaGFkZXI7CiAgICAgU3RyaW5nIGZyYWdtZW50
U2hhZGVyOwotICAgIGdldFNoYWRlclNwZWMoa2V5LCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hh
ZGVyKTsKKyAgICBnZXRTaGFkZXJTcGVjKG9wdGlvbnMsIHZlcnRleFNoYWRlciwgZnJhZ21lbnRT
aGFkZXIpOwogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0LCB2ZXJ0ZXhTaGFk
ZXIsIGZyYWdtZW50U2hhZGVyKTsKLSAgICBtX3Byb2dyYW1zLmFkZChrZXksIHByb2dyYW0pOwor
ICAgIG1fcHJvZ3JhbXMuYWRkKG9wdGlvbnMsIHByb2dyYW0pOwogICAgIHJldHVybiBwcm9ncmFt
OwogfQogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKaW5kZXggNjA2
MDVmNDJkMGUzMjM4N2M0MmE0ZmRkMDUzMTQyN2UwNGFkNzIyYS4uNjA3ZWQ0N2E1MzMwNjQxZDNl
OTI4MmUzZDEzZmM2YTE1YmM1MDhmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyLmgKQEAgLTU5LDEwICs1OSw5IEBAIHB1YmxpYzoKICAgICBURVhNQVBfREVDTEFSRV9T
QU1QTEVSKG1hc2spCiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgVEVYTUFQX0RFQ0xB
UkVfVU5JRk9STShhbW91bnQpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShmaWx0ZXJBbW91
bnQpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShnYXVzc2lhbktlcm5lbCkKICAgICBURVhN
QVBfREVDTEFSRV9VTklGT1JNKGJsdXJSYWRpdXMpCi0gICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9S
TShzaGFkb3dDb2xvcikKICAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHNoYWRvd09mZnNldCkK
ICAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKGNvbnRlbnRUZXh0dXJlKQogI2VuZGlmCkBAIC04
MiwzNiArODEsMzcgQEAgcHJpdmF0ZToKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXIgewogcHVibGljOgotICAgIGVudW0gU2hhZGVyS2V5IHsKLSAgICAgICAgSW52YWxpZCA9IDAs
Ci0gICAgICAgIERlZmF1bHQsCi0gICAgICAgIFJlY3QsCi0gICAgICAgIE1hc2tlZCwKLSAgICAg
ICAgTWFza2VkUmVjdCwKLSAgICAgICAgU29saWRDb2xvciwKLSAgICAgICAgQW50aWFsaWFzZWQs
Ci0gICAgICAgIEdyYXlzY2FsZUZpbHRlciwKLSAgICAgICAgU2VwaWFGaWx0ZXIsCi0gICAgICAg
IFNhdHVyYXRlRmlsdGVyLAotICAgICAgICBIdWVSb3RhdGVGaWx0ZXIsCi0gICAgICAgIEJyaWdo
dG5lc3NGaWx0ZXIsCi0gICAgICAgIENvbnRyYXN0RmlsdGVyLAotICAgICAgICBPcGFjaXR5Rmls
dGVyLAotICAgICAgICBJbnZlcnRGaWx0ZXIsCi0gICAgICAgIEJsdXJGaWx0ZXIsCi0gICAgICAg
IFNoYWRvd0ZpbHRlclBhc3MxLAotICAgICAgICBTaGFkb3dGaWx0ZXJQYXNzMiwKLSAgICAgICAg
TGFzdEZpbHRlcgorICAgIGVudW0gT3B0aW9uIHsKKyAgICAgICAgTWF0cml4ICAgICAgICAgICA9
IDFMIDw8IDAsCisgICAgICAgIFRleHR1cmUgICAgICAgICAgPSAxTCA8PCAxLAorICAgICAgICBS
ZWN0ICAgICAgICAgICAgID0gMUwgPDwgMiwKKyAgICAgICAgU29saWRDb2xvciAgICAgICA9IDFM
IDw8IDMsCisgICAgICAgIE9wYWNpdHkgICAgICAgICAgPSAxTCA8PCA0LAorICAgICAgICBNYXNr
ICAgICAgICAgICAgID0gMUwgPDwgNSwKKyAgICAgICAgQW50aWFsaWFzICAgICAgICA9IDFMIDw8
IDYsCisgICAgICAgIEdyYXlzY2FsZUZpbHRlciAgPSAxTCA8PCA3LAorICAgICAgICBTZXBpYUZp
bHRlciAgICAgID0gMUwgPDwgOCwKKyAgICAgICAgU2F0dXJhdGVGaWx0ZXIgICA9IDFMIDw8IDks
CisgICAgICAgIEh1ZVJvdGF0ZUZpbHRlciAgPSAxTCA8PCAxMCwKKyAgICAgICAgQnJpZ2h0bmVz
c0ZpbHRlciA9IDFMIDw8IDExLAorICAgICAgICBDb250cmFzdEZpbHRlciAgID0gMUwgPDwgMTIs
CisgICAgICAgIEludmVydEZpbHRlciAgICAgPSAxTCA8PCAxMywKKyAgICAgICAgT3BhY2l0eUZp
bHRlciAgICA9IDFMIDw8IDE0LAorICAgICAgICBCbHVyRmlsdGVyICAgICAgID0gMUwgPDwgMTUs
CisgICAgICAgIEFscGhhQmx1ciAgICAgICAgPSAxTCA8PCAxNiwKKyAgICAgICAgQ29udGVudFRl
eHR1cmUgICA9IDFMIDw8IDE3CiAgICAgfTsKIAorICAgIHR5cGVkZWYgdW5zaWduZWQgT3B0aW9u
czsKKwogICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkgeyB9CiAgICAgZXhwbGljaXQg
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2aXJ0
dWFsIH5UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOwogCi0gICAgUGFzc1JlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gZ2V0U2hhZGVyUHJvZ3JhbShTaGFkZXJLZXkpOworICAg
IFBhc3NSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGdldFNoYWRlclByb2dyYW0o
T3B0aW9ucyk7CiAKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFNoYWRlcktleSwgUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiwgRGVmYXVsdEhhc2g8aW50Pjo6SGFzaCwg
SGFzaFRyYWl0czxpbnQ+ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPE9wdGlvbnMsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4g
PiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbU1hcCBtX3Byb2dyYW1zOwogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9j
b250ZXh0OwogfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180150</attachid>
            <date>2012-12-19 06:12:01 -0800</date>
            <delta_ts>2012-12-26 17:33:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-104815-20121219060917.patch</filename>
            <type>text/plain</type>
            <size>48738</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4MDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzhlMGI1YjdmNzIzNDgy
NDNhNmZkYTc4YTJhMjVkYTg4OWNmYjQwNS4uZDIwYWViZjM5OWJlYzIxMTc4YjRkOTAxMDBlMTll
ZDBjOWU5YWI0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTEyLTEyICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gSW5zdGVh
ZCBvZiBoYXZpbmcgbXVsdGlwbGUgc2hhZGVycyBzb3VyY2VzIHdpdGggbG90cyBvZiBkdXBsaWNh
dGlvbiwgd2Ugc2hvdWxkIGhhdmUgb25lIHNoYWRlciBzb3VyY2Ugd2l0aCBNQUNSTyB2YXJpYW50
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0ODE1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAg
ICAgICAgQ3JlYXRlZCB0ZW1wbGF0ZXMgZm9yIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRl
cnMsIGFuZCBhZGRlZCBzb21lIE1BQ1JPcyBpbiAKKyAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIgdG8gYWxsb3cgR0xTTCBwcmVjb21waWxlci1iYXNlZCBjb25maWd1cmF0aW9uLgor
CisgICAgICAgIFRoZSB0ZW1wbGF0ZSBmb2xsb3dzIGEgcGF0dGVybiB3aGVyZSB0aGUgbWFpbiBm
dW5jdGlvbiBpbiB0aGUgc2hhZGVyIGNhbGxzCisgICAgICAgIGFwcGx5Rm9vQmFySWZOZWVkZWQo
KSwgd2hpbGUgYXBwbHlGb29CYXIoKSBpcyBpbXBsZW1lbnRlZC4gVGhlIE1hY3JvcyBwcmVwZW5k
ZWQgdG8gdGhlIHRlbXBsYXRlIGRlZmluZSB3aGV0aGVyIGFwcGx5SWZOZWVkZWQgcmVzb2x2ZXMg
dG8gdGhlIHJlYWwgZnVuY3Rpb24gb3IgdG8gYSBub29wLgorCisgICAgICAgIEluIGFkZGl0aW9u
LCBtYWRlIHNvbWUgc21hbGwgY2hhbmdlcyB0byB0aGUgZmlsdGVyIHNoYWRlcnMgc28gdGhhdCB0
aGV5IGNhbiB1c2UgdGhlIHNhbWUgY29kZSBhcyB0aGUgbm9ybWFsIHNoYWRlcnMuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyBwaXhlbC9yZWYgdGVzdHMgd2hlbiBydW4gb24gUXQvRUZM
L0dUSy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFz
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Om9wdGlvbnNGb3JGaWx0ZXJUeXBlKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6cHJlcGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZUdMOjphcHBseUZpbHRlcnMpOgorICAgICAgICAgICAgQWx3YXlzIGRyYXcg
dXNpbmcgdGhlIGRyYXdRdWFkIGZ1bmN0aW9uLCBhbmQgdXNlIHRoZSBuZXcgVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgbWFzayBpbnN0ZWFkIG9mIHRoZSBvbGQgU2hhZGVyS2V5
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
U2hhZGVyU3BlYyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisKIDIw
MTItMTItMTggIExldmkgV2VpbnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IElucHV0IGVsZW1lbnRzIHdpdGggZGVmYXVsdCB0b3VjaCBoYW5kbGVycyBkb24ndCB1cGRhdGUg
aGFuZGxlciBjb3VudHMgd2hlbiBjaGFuZ2luZyBkb2N1bWVudHMKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5j
cHAKaW5kZXggZGMxZjJkYjhmZWRiY2ZiYWYyNzgwZjJkZmE1OTMyMDE2MjE2MTc1Mi4uOTFiNGFl
MjlhZWU5NzA5NzM4Y2ZjOWQyNWE0MGNjMGUwY2IwMmY4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5j
cHAKQEAgLTg1LDggKzg1LDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBTaGFyZWRHTERhdGEoY29udGV4dCkpOwogICAgICAgICB9CiAKLQotCiAgICAgICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOwogCiAg
ICAgICAgIGV4cGxpY2l0IFNoYXJlZEdMRGF0YShHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
QEAgLTQxMywxNiArNDExLDE2IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQ
bGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEZsYWdzIGZsYWdzLCBjb25zdCBJCiAgICAgaWYgKCF1
c2VSZWN0ICYmIG5lZWRzQW50aWFsaWFzaW5nICYmIGRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2lu
Zyh0ZXh0dXJlLCBmbGFncywgdGV4dHVyZVNpemUsIHRhcmdldFJlY3QsIG1vZGVsVmlld01hdHJp
eCwgb3BhY2l0eSwgbWFza1RleHR1cmUsIGV4cG9zZWRFZGdlcykpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5ID0gVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OkRlZmF1bHQ7Ci0gICAgaWYgKG1hc2tlZCAmJiB1c2VSZWN0
KQotICAgICAgICBrZXkgPSBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6TWFza2VkUmVjdDsK
LSAgICBlbHNlIGlmIChtYXNrZWQpCi0gICAgICAgIGtleSA9IFRleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpNYXNrZWQ7Ci0gICAgZWxzZSBpZiAodXNlUmVjdCkKLSAgICAgICAga2V5ID0gVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3Q7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0
dXJlOworICAgIGlmIChtYXNrZWQpCisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6Ok1hc2s7CisgICAgaWYgKGZsYWdzICYgU2hvdWxkVXNlQVJCVGV4dHVyZVJl
Y3QpCisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3Q7
CisgICAgaWYgKG9wYWNpdHkgPCAxKQorICAgICAgICBvcHRpb25zIHw9IFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpPcGFjaXR5OwogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtPiBwcm9ncmFtOwotICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShrZXkpOworICAgIHByb2dy
YW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0
U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9n
cmFtLT5wcm9ncmFtSUQoKSk7CiAKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJv
Z3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2Rl
bFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJlKTsKQEAgLTU2Miw4ICs1NjAsMTEgQEAg
Ym9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh1aW50MzJf
dCB0ZXh0dXJlLCBGbGFncyBmbGFncywKICAgICBmbG9hdCB0YXJnZXRRdWFkRWRnZXNbMjRdOwog
ICAgIHF1YWRUb0VkZ2VBcnJheShleHBhbmRlZFF1YWRJblNjcmVlblNwYWNlLCB0YXJnZXRRdWFk
RWRnZXMpOwogICAgIHF1YWRUb0VkZ2VBcnJheShpbmZsYXRlUXVhZChxdWFkSW5TY3JlZW5TcGFj
ZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFuY2UpLCB0YXJnZXRRdWFkRWRnZXMgKyAx
Mik7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucyA9IFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBbnRpYWxpYXMgfCBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6VGV4dHVyZTsKKyAgICBpZiAob3BhY2l0eSA8IDEpCisgICAgICAgIG9wdGlvbnMg
fD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wYWNpdHk7CiAKLSAgICBSZWZQdHI8VGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCku
dGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzZWQpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogICAgIG1fY29udGV4dDNE
LT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgpKTsKICAgICBtX2NvbnRleHQzRC0+dW5p
Zm9ybTNmdihwcm9ncmFtLT5leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VMb2NhdGlvbigp
LCA4LCB0YXJnZXRRdWFkRWRnZXMpOwogCkBAIC03NTYsMzIgKzc1NywzMyBAQCB2b2lkIEJpdG1h
cFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiB0
YXJnZXRSZWN0LCBjbwogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogCi1zdGF0aWMgVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBrZXlGb3JGaWx0ZXJUeXBlKEZpbHRlck9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQorc3RhdGljIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9wdGlvbnNGb3JGaWx0ZXJUeXBlKEZpbHRl
ck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNpZ25lZCBwYXNzKQogewogICAgIHN3
aXRjaCAodHlwZSkgewogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAg
ICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6R3JheXNjYWxlRmlsdGVyOwor
ICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6R3JheXNjYWxlRmlsdGVyOwogICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpTRVBJQToKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpTZXBpYUZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNlcGlhRmlsdGVyOwog
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICAgICAgcmV0dXJuIFRleHR1
cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTYXR1cmF0ZUZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRl
eHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OlNhdHVyYXRlRmlsdGVyOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9U
QVRFOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Okh1ZVJvdGF0
ZUZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0
dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Okh1ZVJvdGF0ZUZpbHRlcjsKICAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OkludmVydEZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Oklu
dmVydEZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKLSAgICAg
ICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpCcmlnaHRuZXNzRmlsdGVyOwor
ICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QnJpZ2h0bmVzc0ZpbHRlcjsKICAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlcjo6Q29udHJhc3RGaWx0ZXI7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpDb250cmFz
dEZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgcmV0
dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5RmlsdGVyOworICAgICAgICBy
ZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6T3BhY2l0eUZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
QkxVUjoKICAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpCbHVyRmls
dGVyOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgcmV0
dXJuIHBhc3MgPyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZG93RmlsdGVyUGFzczIg
OiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZG93RmlsdGVyUGFzczE7CisgICAgICAg
IHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QWxwaGFCbHVyCisgICAgICAgICAg
ICB8IChwYXNzID8gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkNvbnRlbnRUZXh0dXJlIHwg
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNvbGlkQ29sb3I6IDApOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OkludmFsaWQ7CisgICAgICAgIHJldHVybiAwOwogICAgIH0KIH0K
IApAQCAtODUyLDEzICs4NTQsMTMgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRlclByb2dyYW0o
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0sIGNvbnN0IEZpbHQKICAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVS
QVRFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICBjb250
ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+YW1vdW50TG9jYXRpb24oKSwgc3RhdGljX2Nhc3Q8Y29u
c3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkp
OworICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+ZmlsdGVyQW1vdW50TG9jYXRp
b24oKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+
KG9wZXJhdGlvbikuYW1vdW50KCkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6SU5WRVJUOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgog
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6T1BBQ0lUWToKLSAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmFtb3Vu
dExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgY29udGV4dC0+dW5p
Zm9ybTFmKHByb2dyYW0tPmZpbHRlckFtb3VudExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNvbnN0
IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3Vu
dCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsK
ICAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ciA9IHN0YXRpY19jYXN0PGNv
bnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOwpAQCAtODc5LDE5ICs4ODEsMjAg
QEAgc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0qIHByb2dyYW0sIGNvbnN0IEZpbHQKICAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmdihw
cm9ncmFtLT5nYXVzc2lhbktlcm5lbExvY2F0aW9uKCksIEdhdXNzaWFuS2VybmVsSGFsZldpZHRo
LCBnYXVzc2lhbktlcm5lbCgpKTsKICAgICAgICAgc3dpdGNoIChwYXNzKSB7CiAgICAgICAgIGNh
c2UgMDoKLSAgICAgICAgICAgIC8vIEZpcnN0IHBhc3M6IHZlcnRpY2FsIGFscGhhIGJsdXIuCisg
ICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiBob3Jpem9udGFsIGFscGhhIGJsdXIuCisgICAgICAg
ICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0aW9uKCksIHNo
YWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSksIDApOwogICAgICAgICAg
ICAgY29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPnNoYWRvd09mZnNldExvY2F0aW9uKCksIGZs
b2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChz
aGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwotICAgICAgICAg
ICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCBzaGFk
b3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndpZHRoKCkpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAvLyBTZWNvbmQgcGFzczogd2UgbmVl
ZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVudCB0ZXh0dXJlIGZvciBjb21wb3NpdGlu
Zy4KLSAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9j
YXRpb24oKSwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwor
ICAgICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKKyAgICAgICAgICAgIHNoYWRvdy5jb2xvcigp
LmdldFJHQkEociwgZywgYiwgYSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtNGYocHJv
Z3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PnVuaWZvcm0yZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwgMCwgc2hhZG93LnN0ZERl
dmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgY29udGV4dC0+
dW5pZm9ybTJmKHByb2dyYW0tPnNoYWRvd09mZnNldExvY2F0aW9uKCksIDAsIDApOwogICAgICAg
ICAgICAgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTEp
OwogICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRF
WFRVUkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsKICAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0x
aShwcm9ncmFtLT5jb250ZW50VGV4dHVyZUxvY2F0aW9uKCksIDEpOwotICAgICAgICAgICAgZmxv
YXQgciwgZywgYiwgYTsKLSAgICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdldFJHQkEociwgZywg
YiwgYSk7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+c2hhZG93Q29s
b3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGJyZWFrOwpAQCAtOTYwLDI1ICs5NjMsMTMgQEAgYm9vbCBUZXh0dXJlTWFwcGVy
R0w6OmRyYXdVc2luZ0N1c3RvbUZpbHRlcihCaXRtYXBUZXh0dXJlJiB0YXJnZXQsIGNvbnN0IEJp
dG1hcFQKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4
dHVyZSYgc2FtcGxlciwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUsIGNvbnN0
IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFzcykKIHsKICAgICAvLyBGb3Igc3RhbmRh
cmQgZmlsdGVycywgd2UgYWx3YXlzIGRyYXcgdGhlIHdob2xlIHRleHR1cmUgd2l0aG91dCB0cmFu
c2Zvcm1hdGlvbnMuCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBr
ZXkgPSBrZXlGb3JGaWx0ZXJUeXBlKGZpbHRlci5nZXRPcGVyYXRpb25UeXBlKCksIHBhc3MpOwot
ICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5z
aGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFt
KGtleSk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucyA9
IG9wdGlvbnNGb3JGaWx0ZXJUeXBlKGZpbHRlci5nZXRPcGVyYXRpb25UeXBlKCksIHBhc3MpOwor
ICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5z
aGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFt
KG9wdGlvbnMpOwogICAgIEFTU0VSVChwcm9ncmFtKTsKIAogICAgIHByZXBhcmVGaWx0ZXJQcm9n
cmFtKHByb2dyYW0uZ2V0KCksIGZpbHRlciwgcGFzcywgc2FtcGxlci5jb250ZW50U2l6ZSgpLCBz
dGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihjb250ZW50VGV4dHVyZSkuaWQoKSk7
Ci0KLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVy
dGV4TG9jYXRpb24oKSk7Ci0gICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KHByb2dyYW0tPnRleENvb3JkTG9jYXRpb24oKSk7Ci0gICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRl
eHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUwKTsKLSAgICBtX2NvbnRleHQzRC0+Ymlu
ZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIHN0YXRpY19jYXN0PGNvbnN0
IEJpdG1hcFRleHR1cmVHTCY+KHNhbXBsZXIpLmlkKCkpOwotICAgIG1fY29udGV4dDNELT51bmlm
b3JtMWkocHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDApOwotICAgIGNvbnN0IEdDM0RmbG9h
dCB0YXJnZXRWZXJ0aWNlc1tdID0gey0xLCAtMSwgMSwgLTEsIDEsIDEsIC0xLCAxfTsKLSAgICBj
b25zdCBHQzNEZmxvYXQgc291cmNlVmVydGljZXNbXSA9IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAx
fTsKLSAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmliUG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhM
b2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50
cHRyKHRhcmdldFZlcnRpY2VzKSk7Ci0gICAgbV9jb250ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50
ZXIocHJvZ3JhbS0+dGV4Q29vcmRMb2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxP
QVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHNvdXJjZVZlcnRpY2VzKSk7Ci0gICAgbV9jb250ZXh0
M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJMRU5EKTsKLSAgICBtX2NvbnRleHQzRC0+
ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJQU5HTEVfRkFOLCAwLCA0KTsKLSAgICBt
X2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0
aW9uKCkpOwotICAgIG1fY29udGV4dDNELT5kaXNhYmxlVmVydGV4QXR0cmliQXJyYXkocHJvZ3Jh
bS0+dGV4Q29vcmRMb2NhdGlvbigpKTsKKyAgICBGbG9hdFJlY3QgdGFyZ2V0UmVjdChJbnRQb2lu
dDo6emVybygpLCBzYW1wbGVyLmNvbnRlbnRTaXplKCkpOworICAgIGRyYXdUZXh0dXJlZFF1YWRX
aXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJl
R0wmPihzYW1wbGVyKS5pZCgpLCAwLCBJbnRTaXplKDEsIDEpLCB0YXJnZXRSZWN0LCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpLCAxLCAwKTsKIH0KIAogUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBC
aXRtYXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVy
LCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycykKQEAgLTExNzIsNyArMTE2Myw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdM
OjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwg
Y29uCiAKICAgICBkYXRhKCkuaW5pdGlhbGl6ZVN0ZW5jaWwoKTsKIAotICAgIFJlZlB0cjxUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpEZWZhdWx0KTsKKyAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U29s
aWRDb2xvcik7CiAKICAgICBtX2NvbnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFt
SUQoKSk7CiAgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
ci5jcHAKaW5kZXggMjE3NTYyMGFlMTdmNDNlZmM0ODFmYTU2NzM4MzdiZjdhMTY4ZmMyOS4uZjRk
Y2ZmZWFkZjBmY2VlNGRkYmY4YWQ3ZDJkNTUxNTk4MTQxNWRlNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4
dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC0yMywxNiArMjMsMTYgQEAKICNpbmNsdWRl
ICJUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIgogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIpCi0KICNpbmNsdWRlICJMZW5ndGhGdW5j
dGlvbnMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckdM
LmgiCiAKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKICNkZWZpbmUgU1RS
SU5HSUZZKC4uLikgI19fVkFfQVJHU19fCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotCiBzdGF0
aWMgaW5saW5lIGJvb2wgY29tcG9zaXRpbmdMb2dFbmFibGVkKCkKIHsKICNpZiAhTE9HX0RJU0FC
TEVECkBAIC0xMDYsNDIzICsxMDYsMjg5IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQogICAgIG1fY29udGV4dC0+ZGVsZXRlUHJvZ3Jh
bShwcm9ncmFtSUQpOwogfQogCi1zdHJ1Y3QgU2hhZGVyU3BlYyB7Ci0gICAgU3RyaW5nIHZlcnRl
eFNoYWRlcjsKLSAgICBTdHJpbmcgZnJhZ21lbnRTaGFkZXI7Ci0gICAgU2hhZGVyU3BlYyhjb25z
dCBjaGFyKiB2ZXJ0ZXggPSAwLCBjb25zdCBjaGFyKiBmcmFnbWVudCA9IDApCi0gICAgICAgIDog
dmVydGV4U2hhZGVyKHZlcnRleCA/IFN0cmluZyhBU0NJSUxpdGVyYWwodmVydGV4KSkgOiBTdHJp
bmcoKSkKLSAgICAgICAgLCBmcmFnbWVudFNoYWRlcihmcmFnbWVudCA/IFN0cmluZyhBU0NJSUxp
dGVyYWwoZnJhZ21lbnQpKSA6IFN0cmluZygpKQotICAgIHsKLSAgICB9Ci19OwotCi1zdGF0aWMg
dm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkg
a2V5LCBTdHJpbmcmIHZlcnRleFNvdXJjZSwgU3RyaW5nJiBmcmFnbWVudFNvdXJjZSkKLXsKLSAg
ICBzdGF0aWMgVmVjdG9yPFNoYWRlclNwZWM+IHNwZWNzID0gVmVjdG9yPFNoYWRlclNwZWM+KCk7
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50T3BhY2l0eUFuZE1hc2sgPQotICAgICAg
ICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAg
ICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKLSAgICAgICAgICAgIHVuaWZvcm0g
c2FtcGxlcjJEIHNfbWFzazsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5Owot
ICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2
YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNf
c2FtcGxlciwgdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAgdmVjNCBtYXNrQ29s
b3IgPSB0ZXh0dXJlMkQoc19tYXNrLCB2X21hc2tUZXhDb29yZCk7Ci0gICAgICAgICAgICAgICAg
ZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVfb3BhY2l0eSAqIG1hc2tDb2xvci5hOwotICAgICAgICAg
ICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogZnJhZ21lbnRBbHBoYSwgY29s
b3IuYSAqIGZyYWdtZW50QWxwaGEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAg
c3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50UmVjdE9wYWNpdHlBbmRNYXNrID0KLSAgICAgICAg
U1RSSU5HSUZZKAotICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAg
ICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zYW1wbGVyOwotICAgICAgICAgICAgdW5pZm9y
bSBzYW1wbGVyMkRSZWN0IHNfbWFzazsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFj
aXR5OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAg
ICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2b2lkIG1haW4o
dm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IGNvbG9yID0gdGV4dHVy
ZTJEUmVjdChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29vcmQpOwotICAgICAgICAgICAgICAgIHZl
YzQgbWFza0NvbG9yID0gdGV4dHVyZTJEUmVjdChzX21hc2ssIHZfbWFza1RleENvb3JkKTsKLSAg
ICAgICAgICAgICAgICBmbG9hdCBmcmFnbWVudEFscGhhID0gdV9vcGFjaXR5ICogbWFza0NvbG9y
LmE7Ci0gICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNChjb2xvci5yZ2IgKiBmcmFn
bWVudEFscGhhLCBjb2xvci5hICogZnJhZ21lbnRBbHBoYSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogdmVydGV4T3BhY2l0eUFuZE1hc2sgPQot
ICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0g
ICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmxpcDsKLSAgICAgICAgICAgIHVuaWZvcm0gdmVj
MiB1X3RleHR1cmVTaXplOwotICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0g
ICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgICAgIHZh
cnlpbmcgdmVjMiB2X21hc2tUZXhDb29yZDsKLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZfc291cmNlVGV4Q29vcmQgPSB2ZWMyKGFf
dmVydGV4LngsIG1peChhX3ZlcnRleC55LCAxLiAtIGFfdmVydGV4LnksIHVfZmxpcCkpICogdV90
ZXh0dXJlU2l6ZTsKLSAgICAgICAgICAgICAgICB2X21hc2tUZXhDb29yZCA9IHZlYzIoYV92ZXJ0
ZXgpOwotICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFn
bWVudFNpbXBsZSA9Ci0gICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgIHByZWNpc2lvbiBt
ZWRpdW1wIGZsb2F0OwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOwot
ICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgICAgICB2YXJ5aW5n
IHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHZlYzQgY29sb3IgPSB0ZXh0dXJlMkQoc19zYW1w
bGVyLCB2X3NvdXJjZVRleENvb3JkKTsKLSAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2
ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3IuYSAqIHVfb3BhY2l0eSk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRBbnRp
YWxpYXNpbmdOb01hc2sgPQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBwcmVjaXNp
b24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxl
cjsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3NvdXJjZVRleENvb3JkOwotICAgICAgICAg
ICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7Ci0gICAgICAgICAgICB1bmlmb3JtIHZlYzMgdV9l
eHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07Ci0KLSAgICAgICAgICAgICAgICAvLyBU
aGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2UgaXMgbWVy
ZWx5IHRoZQotICAgICAgICAgICAgICAgIC8vIHByZS1zY2FsZWQgY29lZmZlY2llbnRzIG9mIHRo
ZSBsaW5lIGVxdWF0aW9ucyBkZXNjcmliaW5nIHRoZSBmb3VyIGVkZ2VzCi0gICAgICAgICAgICAg
ICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQgaW4gc2NyZWVuIHNwYWNlIGFuZCB0aGUgcmVjdGFu
Z3VsYXIgYm91bmRpbmcgYm94Ci0gICAgICAgICAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1
YWQuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIGZsb2F0IG5vcm1hbGl6ZWREaXN0
YW5jZSh2ZWMzIGVkZ2VDb2VmZmljaWVudCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg
ICAvLyBXZSBhcmUgZG9pbmcgYSBzaW1wbGUgZGlzdGFuY2UgY2FsY3VsYXRpb24gaGVyZSBhY2Nv
cmRpbmcgdG8gdGhlIGZvcm11bGE6Ci0gICAgICAgICAgICAgICAgLy8gKEEqcC54ICsgQipwLnkg
KyBDKSAvIHNxcnQoQV4yICsgQl4yKSA9IGRpc3RhbmNlIGZyb20gbGluZSB0byBwCi0gICAgICAg
ICAgICAgICAgLy8gTm90ZSB0aGF0IEEsIEIgYW5kIEMgaGF2ZSBhbHJlYWR5IGJlZW4gc2NhbGVk
IGJ5IDEgLyBzcXJ0KEFeMiArIEJeMikuCi0gICAgICAgICAgICAgICAgcmV0dXJuIGNsYW1wKGRv
dChlZGdlQ29lZmZpY2llbnQsIHZlYzMoZ2xfRnJhZ0Nvb3JkLnh5LCAxLikpLCAwLiwgMS4pOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmbG9hdCBhbnRpYWxpYXNRdWFkKHZlYzMgY29l
ZmZpY2llbnQxLCB2ZWMzIGNvZWZmaWNpZW50MiwgdmVjMyBjb2VmZmljaWVudDMsIHZlYzMgY29l
ZmZpY2llbnQ0KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIC8vIE5vdyB3ZSB3YW50
IHRvIHJlZHVjZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhlIGZyYWdtZW50IGlmIGl0IGlzIGNsb3Nl
IHRvIHRoZQotICAgICAgICAgICAgICAgIC8vIGVkZ2VzIG9mIHRoZSBleHBhbmRlZCBxdWFkIChv
ciByZWN0YW5ndWxhciBib3VuZGluZyBib3ggLS0gd2hpY2ggc2VlbXMgdG8gYmUKLSAgICAgICAg
ICAgICAgICAvLyBpbXBvcnRhbnQgZm9yIGJhY2tmYWNpbmcgcXVhZHMpLiBOb3RlIHRoYXQgd2Ug
YXJlIGNvbWJpbmluZyB0aGUgY29udHJpYnV0aW9uCi0gICAgICAgICAgICAgICAgLy8gZnJvbSB0
aGUgKHRvcCB8fCBib3R0b20pIGFuZCAobGVmdCB8fCByaWdodCkgZWRnZSBieSBzaW1wbHkgbXVs
dGlwbHlpbmcuIFRoaXMgZm9sbG93cwotICAgICAgICAgICAgICAgIC8vIHRoZSBhcHByb2FjaCBk
ZXNjcmliZWQgYXQ6IGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQVUdlbXMyL2dw
dWdlbXMyX2NoYXB0ZXIyMi5odG1sLAotICAgICAgICAgICAgICAgIC8vIGluIHRoaXMgY2FzZSB3
aXRob3V0IHVzaW5nIEdhdXNzaWFuIHdlaWdodHMuCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1p
bihub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQxKSwgbm9ybWFsaXplZERpc3RhbmNlKGNv
ZWZmaWNpZW50MikpCi0gICAgICAgICAgICAgICAgICAgICogbWluKG5vcm1hbGl6ZWREaXN0YW5j
ZShjb2VmZmljaWVudDMpLCBub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQ0KSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZsb2F0IGFudGlhbGlhcygpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgZmxvYXQgYW50aWFsaWFzVmFsdWVGb3JRdWFkID0gCi0gICAgICAg
ICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3Bh
Y2VbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3Jl
ZW5TcGFjZVsxXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJ
blNjcmVlblNwYWNlWzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRF
ZGdlc0luU2NyZWVuU3BhY2VbM10pOwotCi0gICAgICAgICAgICAgICAgZmxvYXQgYW50aWFsaWFz
VmFsdWVGb3JCb3VuZGluZ1JlY3QgPSAKLSAgICAgICAgICAgICAgICAgICAgYW50aWFsaWFzUXVh
ZCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs0XSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzVdLAotICAgICAgICAgICAg
ICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNl0sCi0gICAgICAg
ICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs3XSk7Ci0K
LSAgICAgICAgICAgICAgICByZXR1cm4gbWluKGFudGlhbGlhc1ZhbHVlRm9yUXVhZCwgYW50aWFs
aWFzVmFsdWVGb3JCb3VuZGluZ1JlY3QpOyAgICAgICAgICAgCi0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIHZvaWQgbWFpbigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVj
NCBzYW1wbGVkQ29sb3IgPSB0ZXh0dXJlMkQoc19zYW1wbGVyLCBjbGFtcCh2X3NvdXJjZVRleENv
b3JkLCAwLjAsIDEuMCkpOwotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHNhbXBsZWRD
b2xvciAqIHVfb3BhY2l0eSAqIGFudGlhbGlhcygpOwotICAgICAgICAgICAgfQotICAgICAgICAp
OwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50UmVjdFNpbXBsZSA9Ci0gICAgICAg
IFNUUklOR0lGWSgKLSAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAg
ICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc2FtcGxlcjsKLSAgICAgICAgICAgIHVuaWZv
cm0gZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNlVGV4
Q29vcmQ7Ci0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEUmVjdChzX3NhbXBsZXIsIHZfc291cmNl
VGV4Q29vcmQpOwotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3Iucmdi
ICogdV9vcGFjaXR5LCBjb2xvci5hICogdV9vcGFjaXR5KTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhTaW1wbGUgPQotICAgICAgICBT
VFJJTkdJRlkoCi0gICAgICAgICAgICB1bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0gICAgICAgICAg
ICB1bmlmb3JtIGZsb2F0IHVfZmxpcDsKLSAgICAgICAgICAgIHVuaWZvcm0gdmVjMiB1X3RleHR1
cmVTaXplOwotICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgICAg
ICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAgICAgIHZvaWQgbWFpbih2
b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZfc291cmNlVGV4Q29vcmQgPSB2
ZWMyKGFfdmVydGV4LngsIG1peChhX3ZlcnRleC55LCAxLiAtIGFfdmVydGV4LnksIHVfZmxpcCkp
ICogdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4
ICogYV92ZXJ0ZXg7CitzdGF0aWMgY29uc3QgY2hhciogdmVydGV4U2hhZGVyU291cmNlID0KKyAg
ICBTVFJJTkdJRlkoCisgICAgICAgIHVuaWZvcm0gbWF0NCB1X21hdHJpeDsKKyAgICAgICAgdW5p
Zm9ybSBmbG9hdCB1X2ZsaXA7CisgICAgICAgIHVuaWZvcm0gdmVjMiB1X3RleHR1cmVTaXplOwor
ICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsKKyAgICAgICAgdmFyeWluZyB2ZWMyIHZf
dGV4Q29vcmQ7CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X21hc2tUZXhDb29yZDsKKworICAgICAg
ICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgeworICAgICAgICAgICAgdmVjNCBwb3NpdGlvbiA9
IGFfdmVydGV4OworICAgICAgICAgICAgdl90ZXhDb29yZCA9IHZlYzIocG9zaXRpb24ueCwgbWl4
KHBvc2l0aW9uLnksIDEuIC0gcG9zaXRpb24ueSwgdV9mbGlwKSkgKiB1X3RleHR1cmVTaXplOwor
ICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQgPSB2ZWMyKHBvc2l0aW9uKTsKKyAgICAgICAgICAg
IGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRleDsKKyAgICAgICAgfQorICAgICk7CisK
KyNkZWZpbmUgR0xTTF9ESVJFQ1RJVkUoLi4uKSAiIyIjX19WQV9BUkdTX18iXG4iCisjZGVmaW5l
IERFRklORV9BUFBMSUVSKE5hbWUpIFwKKyAgICAiI2lmZGVmIEVOQUJMRV8iI05hbWUiXG4iIFwK
KyAgICAiI2RlZmluZSBhcHBseSIjTmFtZSJJZk5lZWRlZCBhcHBseSIjTmFtZSJcbiJcCisgICAg
IiNlbHNlXG4iXAorICAgICIjZGVmaW5lIGFwcGx5IiNOYW1lIklmTmVlZGVkIG5vb3BcbiJcCisg
ICAgIiNlbmRpZlxuIgorCisjZGVmaW5lIFJFQ1RfVEVYVFVSRV9ESVJFQ1RJVkUgXAorICAgIEdM
U0xfRElSRUNUSVZFKGlmZGVmIEVOQUJMRV9SZWN0KSBcCisgICAgICAgIEdMU0xfRElSRUNUSVZF
KGRlZmluZSBTYW1wbGVyVHlwZSBzYW1wbGVyMkRSZWN0KSBcCisgICAgICAgIEdMU0xfRElSRUNU
SVZFKGRlZmluZSBTYW1wbGVyRnVuY3Rpb24gdGV4dHVyZTJEUmVjdCkgXAorICAgIEdMU0xfRElS
RUNUSVZFKGVsc2UpIFwKKyAgICAgICAgR0xTTF9ESVJFQ1RJVkUoZGVmaW5lIFNhbXBsZXJUeXBl
IHNhbXBsZXIyRCkgXAorICAgICAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgU2FtcGxlckZ1bmN0
aW9uIHRleHR1cmUyRCkgXAorICAgIEdMU0xfRElSRUNUSVZFKGVuZGlmKQorCisjZGVmaW5lIEVO
QUJMRV9BUFBMSUVSKE5hbWUpICIjZGVmaW5lIEVOQUJMRV8iI05hbWUiXG4iCisjZGVmaW5lIEJM
VVJfQ09OU1RBTlRTIFwKKyAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgR0FVU1NJQU5fS0VSTkVM
X0hBTEZfV0lEVEggMTEpIFwKKyAgICBHTFNMX0RJUkVDVElWRShkZWZpbmUgR0FVU1NJQU5fS0VS
TkVMX1NURVAgMC4yKQorCisKK3N0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFRlbXBsYXRlID0K
KyAgICBERUZJTkVfQVBQTElFUihUZXh0dXJlKQorICAgIERFRklORV9BUFBMSUVSKFNvbGlkQ29s
b3IpCisgICAgREVGSU5FX0FQUExJRVIoT3BhY2l0eSkKKyAgICBERUZJTkVfQVBQTElFUihNYXNr
KQorICAgIERFRklORV9BUFBMSUVSKEFudGlhbGlhcykKKyAgICBERUZJTkVfQVBQTElFUihHcmF5
c2NhbGVGaWx0ZXIpCisgICAgREVGSU5FX0FQUExJRVIoU2VwaWFGaWx0ZXIpCisgICAgREVGSU5F
X0FQUExJRVIoU2F0dXJhdGVGaWx0ZXIpCisgICAgREVGSU5FX0FQUExJRVIoSHVlUm90YXRlRmls
dGVyKQorICAgIERFRklORV9BUFBMSUVSKEludmVydEZpbHRlcikKKyAgICBERUZJTkVfQVBQTElF
UihCcmlnaHRuZXNzRmlsdGVyKQorICAgIERFRklORV9BUFBMSUVSKENvbnRyYXN0RmlsdGVyKQor
ICAgIERFRklORV9BUFBMSUVSKE9wYWNpdHlGaWx0ZXIpCisgICAgREVGSU5FX0FQUExJRVIoQmx1
ckZpbHRlcikKKyAgICBERUZJTkVfQVBQTElFUihBbHBoYUJsdXIpCisgICAgREVGSU5FX0FQUExJ
RVIoQ29udGVudFRleHR1cmUpCisgICAgUkVDVF9URVhUVVJFX0RJUkVDVElWRQorICAgIEJMVVJf
Q09OU1RBTlRTCisgICAgU1RSSU5HSUZZKAorICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsKKyAgICAgICAgdW5pZm9ybSBTYW1wbGVyVHlwZSBzX3NhbXBsZXI7CisgICAgICAgIHVuaWZv
cm0gc2FtcGxlcjJEIHNfbWFzazsKKyAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19jb250ZW50
VGV4dHVyZTsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7CisgICAgICAgIHZhcnlp
bmcgdmVjMiB2X3RleENvb3JkOworICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7
CisgICAgICAgIHVuaWZvcm0gdmVjMyB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs4
XTsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2ZpbHRlckFtb3VudDsKKyAgICAgICAgdW5pZm9y
bSB2ZWMyIHVfYmx1clJhZGl1czsKKyAgICAgICAgdW5pZm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0
OworICAgICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1
X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIXTsKKworICAgICAgICB2
b2lkIG5vb3AodmVjNCkgeyB9CisKKyAgICAgICAgLy8gVGhlIGRhdGEgcGFzc2VkIGluIHVfZXhw
YW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlIGlzIG1lcmVseSB0aGUKKyAgICAgICAgLy8gcHJl
LXNjYWxlZCBjb2VmZmVjaWVudHMgb2YgdGhlIGxpbmUgZXF1YXRpb25zIGRlc2NyaWJpbmcgdGhl
IGZvdXIgZWRnZXMKKyAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQgaW4gc2NyZWVuIHNw
YWNlIGFuZCB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94CisgICAgICAgIC8vIG9mIHRoZSBl
eHBhbmRlZCBxdWFkLgorICAgICAgICAvLworICAgICAgICBmbG9hdCBub3JtYWxpemVkRGlzdGFu
Y2UodmVjMyBlZGdlQ29lZmZpY2llbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGFy
ZSBkb2luZyBhIHNpbXBsZSBkaXN0YW5jZSBjYWxjdWxhdGlvbiBoZXJlIGFjY29yZGluZyB0byB0
aGUgZm9ybXVsYToKKyAgICAgICAgICAgIC8vIChBKnAueCArIEIqcC55ICsgQykgLyBzcXJ0KEFe
MiArIEJeMikgPSBkaXN0YW5jZSBmcm9tIGxpbmUgdG8gcAorICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IEEsIEIgYW5kIEMgaGF2ZSBhbHJlYWR5IGJlZW4gc2NhbGVkIGJ5IDEgLyBzcXJ0KEFeMiAr
IEJeMikuCisgICAgICAgICAgICByZXR1cm4gY2xhbXAoZG90KGVkZ2VDb2VmZmljaWVudCwgdmVj
MyhnbF9GcmFnQ29vcmQueHksIDEuKSksIDAuLCAxLik7CisgICAgICAgIH0KKworICAgICAgICBm
bG9hdCBhbnRpYWxpYXNRdWFkKHZlYzMgY29lZmZpY2llbnQxLCB2ZWMzIGNvZWZmaWNpZW50Miwg
dmVjMyBjb2VmZmljaWVudDMsIHZlYzMgY29lZmZpY2llbnQ0KQorICAgICAgICB7CisgICAgICAg
ICAgICAvLyBOb3cgd2Ugd2FudCB0byByZWR1Y2UgdGhlIGFscGhhIHZhbHVlIG9mIHRoZSBmcmFn
bWVudCBpZiBpdCBpcyBjbG9zZSB0byB0aGUKKyAgICAgICAgICAgIC8vIGVkZ2VzIG9mIHRoZSBl
eHBhbmRlZCBxdWFkIChvciByZWN0YW5ndWxhciBib3VuZGluZyBib3ggLS0gd2hpY2ggc2VlbXMg
dG8gYmUKKyAgICAgICAgICAgIC8vIGltcG9ydGFudCBmb3IgYmFja2ZhY2luZyBxdWFkcykuIE5v
dGUgdGhhdCB3ZSBhcmUgY29tYmluaW5nIHRoZSBjb250cmlidXRpb24KKyAgICAgICAgICAgIC8v
IGZyb20gdGhlICh0b3AgfHwgYm90dG9tKSBhbmQgKGxlZnQgfHwgcmlnaHQpIGVkZ2UgYnkgc2lt
cGx5IG11bHRpcGx5aW5nLiBUaGlzIGZvbGxvd3MKKyAgICAgICAgICAgIC8vIHRoZSBhcHByb2Fj
aCBkZXNjcmliZWQgYXQ6IGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQVUdlbXMy
L2dwdWdlbXMyX2NoYXB0ZXIyMi5odG1sLAorICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdp
dGhvdXQgdXNpbmcgR2F1c3NpYW4gd2VpZ2h0cy4KKyAgICAgICAgICAgIHJldHVybiBtaW4obm9y
bWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MSksIG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmlj
aWVudDIpKQorICAgICAgICAgICAgICAgICogbWluKG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmlj
aWVudDMpLCBub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQ0KSk7CisgICAgICAgIH0KKwor
ICAgICAgICBmbG9hdCBhbnRpYWxpYXMoKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCBh
bnRpYWxpYXNWYWx1ZUZvclF1YWQgPSAKKyAgICAgICAgICAgICAgICBhbnRpYWxpYXNRdWFkKHVf
ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzBdLAorICAgICAgICAgICAgICAgICAgICB1
X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsxXSwKKyAgICAgICAgICAgICAgICAgICAg
dV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMl0sCisgICAgICAgICAgICAgICAgICAg
IHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzNdKTsKKworICAgICAgICAgICAgZmxv
YXQgYW50aWFsaWFzVmFsdWVGb3JCb3VuZGluZ1JlY3QgPSAKKyAgICAgICAgICAgICAgICBhbnRp
YWxpYXNRdWFkKHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzRdLAorICAgICAgICAg
ICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs1XSwKKyAgICAgICAg
ICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNl0sCisgICAgICAg
ICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzddKTsKKworICAg
ICAgICAgICAgcmV0dXJuIG1pbihhbnRpYWxpYXNWYWx1ZUZvclF1YWQsIGFudGlhbGlhc1ZhbHVl
Rm9yQm91bmRpbmdSZWN0KTsgICAgICAgICAgIAorICAgICAgICB9CisKKyAgICAgICAgdm9pZCBh
cHBseVRleHR1cmUoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciA9IFNhbXBsZXJGdW5jdGlvbihz
X3NhbXBsZXIsIHZfdGV4Q29vcmQpOyB9CisgICAgICAgIHZvaWQgYXBwbHlPcGFjaXR5KGlub3V0
IHZlYzQgY29sb3IpIHsgY29sb3IgKj0gdV9vcGFjaXR5OyB9CisgICAgICAgIHZvaWQgYXBwbHlB
bnRpYWxpYXMoaW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSBhbnRpYWxpYXMoKTsgfQorICAg
ICAgICB2b2lkIGFwcGx5TWFzayhpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHRleHR1cmUy
RChzX21hc2ssIHZfbWFza1RleENvb3JkKS5hOyB9CisKKyAgICAgICAgdm9pZCBhcHBseUdyYXlz
Y2FsZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9h
dCBhbW91bnQgPSAxLjAgLSB1X2ZpbHRlckFtb3VudDsKKyAgICAgICAgICAgIGNvbG9yID0gdmVj
NCgoMC4yMTI2ICsgMC43ODc0ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUy
ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9y
LmIsCisgICAgICAgICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5y
ICsgKDAuNzE1MiArIDAuMjg0OCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcy
MiAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYg
KiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQpICogY29sb3Iu
ZyArICgwLjA3MjIgKyAwLjkyNzggKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAg
ICBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXBwbHlTZXBpYUZpbHRlcihp
bm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCBhbW91bnQgPSAx
LjAgLSB1X2ZpbHRlckFtb3VudDsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNCgoMC4zOTMgKyAw
LjYwNyAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzY5IC0gMC43NjkgKiBhbW91bnQpICogY29s
b3IuZyArICgwLjE4OSAtIDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAg
ICAgKDAuMzQ5IC0gMC4zNDkgKiBhbW91bnQpICogY29sb3IuciArICgwLjY4NiArIDAuMzE0ICog
YW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xNjggLSAwLjE2OCAqIGFtb3VudCkgKiBjb2xvci5iLAor
ICAgICAgICAgICAgICAgICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC41
MzQgLSAwLjUzNCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44NjkgKiBhbW91bnQp
ICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgYXBwbHlTYXR1cmF0ZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7
CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoKDAuMjEzICsgMC43ODcgKiB1X2ZpbHRlckFtb3Vu
dCkgKiBjb2xvci5yICsgKDAuNzE1IC0gMC43MTUgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5n
ICsgKDAuMDcyIC0gMC4wNzIgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAg
ICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuciArICgwLjcx
NSArIDAuMjg1ICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuZyArICgwLjA3MiAtIDAuMDcyICog
dV9maWx0ZXJBbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIx
MyAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfZmlsdGVy
QW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgKyAwLjkyOCAqIHVfZmlsdGVyQW1vdW50KSAqIGNv
bG9yLmIsCisgICAgICAgICAgICAgICAgY29sb3IuYSk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGFwcGx5SHVlUm90YXRlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGZsb2F0IHBpID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKKyAgICAgICAgICAg
IGZsb2F0IGMgPSBjb3ModV9maWx0ZXJBbW91bnQgKiBwaSAvIDE4MC4wKTsKKyAgICAgICAgICAg
IGZsb2F0IHMgPSBzaW4odV9maWx0ZXJBbW91bnQgKiBwaSAvIDE4MC4wKTsKKyAgICAgICAgICAg
IGNvbG9yID0gdmVjNChjb2xvci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAqIDAuMjEzKSAr
IGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29sb3IuYiAqICgw
LjA3MiAtIGMgKiAwLjA3MiArIHMgKiAwLjkyOCksCisgICAgICAgICAgICAgICAgY29sb3IuciAq
ICgwLjIxMyAtIGMgKiAwLjIxMyArIHMgKiAwLjE0MykgKyBjb2xvci5nICogKDAuNzE1ICsgYyAq
IDAuMjg1ICsgcyAqIDAuMTQwKSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgLSBzICog
MC4yODMpLAorICAgICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgLSBz
ICogMC43ODcpICsgIGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgKyBzICogMC43MTUpICsg
Y29sb3IuYiAqICgwLjA3MiArIGMgKiAwLjkyOCArIHMgKiAwLjA3MiksCisgICAgICAgICAgICAg
ICAgY29sb3IuYSk7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBpbnZlcnQoZmxvYXQgbikg
eyByZXR1cm4gKDEuMCAtIG4pICogdV9maWx0ZXJBbW91bnQgKyBuICogKDEuMCAtIHVfZmlsdGVy
QW1vdW50KTsgfQorICAgICAgICB2b2lkIGFwcGx5SW52ZXJ0RmlsdGVyKGlub3V0IHZlYzQgY29s
b3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNChpbnZlcnQoY29sb3Iuciks
IGludmVydChjb2xvci5nKSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5hKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgYXBwbHlCcmlnaHRuZXNzRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNChjb2xvci5yZ2IgKiAoMS4wICsgdV9m
aWx0ZXJBbW91bnQpLCBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IGNvbnRy
YXN0KGZsb2F0IG4pIHsgcmV0dXJuIChuIC0gMC41KSAqIHVfZmlsdGVyQW1vdW50ICsgMC41OyB9
CisgICAgICAgIHZvaWQgYXBwbHlDb250cmFzdEZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAg
ICAgICB7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoY29udHJhc3QoY29sb3IuciksIGNvbnRy
YXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGFwcGx5T3BhY2l0eUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAg
ICB7CisgICAgICAgICAgICBjb2xvciA9IHZlYzQoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwg
Y29sb3IuYSAqIHVfZmlsdGVyQW1vdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHZlYzQgc2Ft
cGxlQ29sb3JBdFJhZGl1cyhmbG9hdCByYWRpdXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZl
YzIgY29vcmQgPSB2X3RleENvb3JkICsgcmFkaXVzICogdV9ibHVyUmFkaXVzOworICAgICAgICAg
ICAgcmV0dXJuIFNhbXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIGNvb3JkKSAqIGZsb2F0KGNvb3Jk
LnggPiAwLiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7
CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBzYW1wbGVBbHBoYUF0UmFkaXVzKGZsb2F0IHJh
ZGl1cykKKyAgICAgICAgeworICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgLSB1
X3NoYWRvd09mZnNldCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsKKyAgICAgICAgICAgIHJldHVy
biBTYW1wbGVyRnVuY3Rpb24oc19zYW1wbGVyLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAw
LiAmJiBjb29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5Qmx1ckZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQor
ICAgICAgICB7CisgICAgICAgICAgICB2ZWM0IHRvdGFsID0gc2FtcGxlQ29sb3JBdFJhZGl1cygw
LikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkg
PCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdG90
YWwgKz0gc2FtcGxlQ29sb3JBdFJhZGl1cyhmbG9hdChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQ
KSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxl
Q29sb3JBdFJhZGl1cyhmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9n
YXVzc2lhbktlcm5lbFtpXTsKICAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRp
YyBjb25zdCBjaGFyKiB2ZXJ0ZXhTb2xpZENvbG9yID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAg
ICAgICAgICAgdW5pZm9ybSBtYXQ0IHVfbWF0cml4OwotICAgICAgICAgICAgYXR0cmlidXRlIHZl
YzQgYV92ZXJ0ZXg7Ci0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICk7CiAKKyAgICAgICAgICAgIGNvbG9yID0gdG90YWw7CisgICAg
ICAgIH0KIAotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNvbGlkQ29sb3IgPQotICAg
ICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAg
ICAgICAgICAgIHVuaWZvcm0gdmVjNCB1X2NvbG9yOwotICAgICAgICAgICAgdm9pZCBtYWluKHZv
aWQpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xv
cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2
ZXJ0ZXhGaWx0ZXIgPQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBhdHRyaWJ1dGUg
dmVjNCBhX3ZlcnRleDsKLSAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdGV4Q29vcmQ7Ci0g
ICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAgIHZvaWQgbWFp
bih2b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZfdGV4Q29vcmQgPSB2ZWMy
KGFfdGV4Q29vcmQpOwotICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gYV92ZXJ0ZXg7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSNkZWZpbmUgU1RBTkRBUkRfRklMVEVSKC4uLikg
XAotICAgICAgICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iXAotICAgICAgICAidmFyeWlu
ZyB2ZWMyIHZfdGV4Q29vcmQ7XG4iXAotICAgICAgICAidW5pZm9ybSBmbG9hdCB1X2Ftb3VudDtc
biJcCi0gICAgICAgICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7XG4iI19fVkFfQVJHU19f
IFwKLSAgICAgICAgInZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJhZ0NvbG9yID0gc2hhZGUodGV4
dHVyZTJEKHNfc2FtcGxlciwgdl90ZXhDb29yZCkpOyB9IgotCi0gICAgc3RhdGljIGNvbnN0IGNo
YXIqIGZyYWdtZW50R3JheXNjYWxlRmlsdGVyID0KLSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAot
ICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIHZlYzQoKDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkgKiBjb2xvci5yICsg
KDAuNzE1MiAtIDAuNzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAq
IGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMjYg
LSAwLjIxMjYgKiBhbW91bnQpICogY29sb3IuciArICgwLjcxNTIgKyAwLjI4NDggKiBhbW91bnQp
ICogY29sb3IuZyArICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9y
LnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyICsgMC45
Mjc4ICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29s
b3IuYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hh
ciogZnJhZ21lbnRTZXBpYUZpbHRlciA9Ci0gICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKLSAgICAg
ICAgICAgIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGZsb2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OwotICAgICAgICAgICAgICAg
IHJldHVybiB2ZWM0KCgwLjM5MyArIDAuNjA3ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43Njkg
LSAwLjc2OSAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTg5IC0gMC4xODkgKiBhbW91bnQpICog
Y29sb3IuYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4zNDkgLSAwLjM0OSAqIGFt
b3VudCkgKiBjb2xvci5yICsgKDAuNjg2ICsgMC4zMTQgKiBhbW91bnQpICogY29sb3IuZyArICgw
LjE2OCAtIDAuMTY4ICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKDAuMjcyIC0gMC4yNzIgKiBhbW91bnQpICogY29sb3IuciArICgwLjUzNCAtIDAuNTM0
ICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4xMzEgKyAwLjg2OSAqIGFtb3VudCkgKiBjb2xvci5i
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOwotICAgICAgICAgICAgfQot
ICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2F0dXJhdGVGaWx0
ZXIgPQotICAgICAgICBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICB2ZWM0IHNoYWRlKGxv
d3AgdmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVj
NCgoMC4yMTMgKyAwLjc4NyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAq
IHVfYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9y
LmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2Ftb3Vu
dCkgKiBjb2xvci5yICsgKDAuNzE1ICsgMC4yODUgKiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAu
MDcyIC0gMC4wNzIgKiB1X2Ftb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgwLjIxMyAtIDAuMjEzICogdV9hbW91bnQpICogY29sb3IuciArICgwLjcxNSAtIDAu
NzE1ICogdV9hbW91bnQpICogY29sb3IuZyArICgwLjA3MiArIDAuOTI4ICogdV9hbW91bnQpICog
Y29sb3IuYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEh1ZVJv
dGF0ZUZpbHRlciA9Ci0gICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIHZlYzQg
c2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZs
b2F0IHBpID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKLSAgICAgICAgICAgICAgICBmbG9hdCBj
ID0gY29zKHVfYW1vdW50ICogcGkgLyAxODAuMCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgcyA9
IHNpbih1X2Ftb3VudCAqIHBpIC8gMTgwLjApOwotICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0
KGNvbG9yLnIgKiAoMC4yMTMgKyBjICogMC43ODcgLSBzICogMC4yMTMpICsgY29sb3IuZyAqICgw
LjcxNSAtIGMgKiAwLjcxNSAtIHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyIC0gYyAqIDAu
MDcyICsgcyAqIDAuOTI4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5yICog
KDAuMjEzIC0gYyAqIDAuMjEzICsgcyAqIDAuMTQzKSArIGNvbG9yLmcgKiAoMC43MTUgKyBjICog
MC4yODUgKyBzICogMC4xNDApICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiAtIHMgKiAw
LjI4MyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMg
KiAwLjIxMyAtIHMgKiAwLjc4NykgKyAgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSArIHMg
KiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyICsgYyAqIDAuOTI4ICsgcyAqIDAuMDcyKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEludmVydEZpbHRlciA9Ci0g
ICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGZsb2F0IGludmVydChsb3dwIGZs
b2F0IG4pIHsgcmV0dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAqICgxLjAgLSB1X2Ftb3Vu
dCk7IH0KLSAgICAgICAgICAgIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGludmVydChjb2xvci5yKSwgaW52ZXJ0
KGNvbG9yLmcpLCBpbnZlcnQoY29sb3IuYiksIGNvbG9yLmEpOworICAgICAgICB2b2lkIGFwcGx5
QWxwaGFCbHVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0
IHRvdGFsID0gc2FtcGxlQWxwaGFBdFJhZGl1cygwLikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOwor
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURU
SDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGFBdFJhZGl1cyhm
bG9hdChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07Cisg
ICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdCgtMSAqIGkp
ICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgKTsKIAotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEJyaWdo
dG5lc3NGaWx0ZXIgPQotICAgICAgICBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICB2ZWM0
IHNoYWRlKGxvd3AgdmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gdmVjNChjb2xvci5yZ2IgKiAoMS4wICsgdV9hbW91bnQpLCBjb2xvci5hKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudENv
bnRyYXN0RmlsdGVyID0KLSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgZmxv
YXQgY29udHJhc3QobG93cCBmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2Ftb3VudCAr
IDAuNTsgfQotICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3QoY29sb3IuciksIGNv
bnRyYXN0KGNvbG9yLmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRPcGFjaXR5
RmlsdGVyID0KLSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgdmVjNCBzaGFk
ZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHZlYzQoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVfYW1vdW50KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotI2RlZmluZSBCTFVSX0NPTlNUQU5UUyAiI2RlZmlu
ZSBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSCAxMVxuI2RlZmluZSBHQVVTU0lBTl9LRVJORUxf
U1RFUCAwLjJcbiIKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEJsdXJGaWx0ZXIg
PQotICAgICAgICBCTFVSX0NPTlNUQU5UUwotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAg
ICAvLyBDcmVhdGUgYSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIDIxIHZhbHVlcyBiZXR3ZWVuIC0y
IGFuZCAyLgotICAgICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAg
ICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAgIHVuaWZvcm0gdmVjMiB1X2Js
dXJSYWRpdXM7Ci0gICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7Ci0gICAg
ICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hB
TEZfV0lEVEhdOwotCi0gICAgICAgICAgICB2ZWM0IHNhbXBsZUNvbG9yKGZsb2F0IHJhZGl1cykK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCAr
IHJhZGl1cyAqIHVfYmx1clJhZGl1czsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJE
KHNfc2FtcGxlciwgY29vcmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAm
JiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgdmVjNCBibHVyKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IHRv
dGFsID0gc2FtcGxlQ29sb3IoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAg
ICAgICBmb3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKysp
IHsKLSAgICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQ29sb3IoZmxvYXQoaSkgKiBH
QVVTU0lBTl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAg
ICAgICAgICB0b3RhbCArPSBzYW1wbGVDb2xvcihmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VS
TkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICByZXR1cm4gdG90YWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IHZvaWQgbWFpbih2b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsX0ZyYWdD
b2xvciA9IGJsdXIoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBmcmFnbWVudFNoYWRvd0ZpbHRlcjEgPQotICAgICAgICBCTFVSX0NPTlNUQU5U
UwotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwotICAgICAgICAgICAgdW5p
Zm9ybSBmbG9hdCB1X2JsdXJSYWRpdXM7Ci0gICAgICAgICAgICB1bmlmb3JtIHZlYzIgdV9zaGFk
b3dPZmZzZXQ7Ci0gICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7Ci0gICAg
ICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hB
TEZfV0lEVEhdOwotCi0gICAgICAgICAgICBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByYWRpdXMp
Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQg
LSB1X3NoYWRvd09mZnNldCArIHZlYzIocmFkaXVzICogdV9ibHVyUmFkaXVzLCAwLik7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRleHR1cmUyRChzX3NhbXBsZXIsIGNvb3JkKS5hICogZmxvYXQo
Y29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8
IDEuKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmxvYXQgc2hhZG93Qmx1ckhvcml6
b250YWwoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2Ft
cGxlQWxwaGEoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAg
ICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoaSkgKiBHQVVTU0lBTl9L
RVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAgICB0
b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVAp
ICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gdG90YWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgbWFp
bih2b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZl
YzQoMS4sIDEuLCAxLiwgMS4pICogc2hhZG93Qmx1ckhvcml6b250YWwoKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgKTsKLQotICAgIC8vIFNlY29uZCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVy
IGFuZCBjb21wb3NpdGUgd2l0aCBvcmlnaW4uCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdt
ZW50U2hhZG93RmlsdGVyMiA9Ci0gICAgICAgIEJMVVJfQ09OU1RBTlRTCi0gICAgICAgIFNUUklO
R0lGWSgKLSAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICAgICAg
dmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfYmx1
clJhZGl1czsKLSAgICAgICAgICAgIHVuaWZvcm0gdmVjNCB1X3NoYWRvd0NvbG9yOwotICAgICAg
ICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19zYW1wbGVyOwotICAgICAgICAgICAgdW5pZm9ybSBz
YW1wbGVyMkQgc19jb250ZW50VGV4dHVyZTsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9n
YXVzc2lhbktlcm5lbFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07Ci0KLSAgICAgICAgICAg
IGZsb2F0IHNhbXBsZUFscGhhKGZsb2F0IHIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgKyB2ZWMyKDAuLCByICogdV9ibHVyUmFkaXVzKTsK
LSAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxlciwgY29vcmQpLmEgKiBm
bG9hdChjb29yZC54ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29y
ZC55IDwgMS4pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmbG9hdCBzaGFkb3dCbHVy
VmVydGljYWwoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0g
c2FtcGxlQWxwaGEoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgICAgICBm
b3IgKGludCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAg
ICAgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoaSkgKiBHQVVTU0lB
Tl9LRVJORUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAg
ICB0b3RhbCArPSBzYW1wbGVBbHBoYShmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NU
RVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gdG90YWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZlYzQg
c291cmNlT3Zlcihsb3dwIHZlYzQgc291cmNlLCB2ZWM0IGRlc3RpbmF0aW9uKQotICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIC8vIENvbXBvc2l0ZSB0aGUgc2hhZG93IHdpdGggdGhlIG9y
aWdpbmFsIHRleHR1cmUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZSArIGRlc3RpbmF0
aW9uICogKDEuIC0gc291cmNlLmEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2b2lk
IG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3Ig
PSBzb3VyY2VPdmVyKHRleHR1cmUyRChzX2NvbnRlbnRUZXh0dXJlLCB2X3RleENvb3JkKSwgc2hh
ZG93Qmx1clZlcnRpY2FsKCkgKiB1X3NoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgKTsKLQotICAgIGlmIChzcGVjcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3BlY3MucmVzaXpl
KFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpMYXN0RmlsdGVyKTsKLSAgICAgICAgc3BlY3Nb
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkRlZmF1bHRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhT
aW1wbGUsIGZyYWdtZW50U2ltcGxlKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlNvbGlkQ29sb3JdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTb2xpZENvbG9yLCBmcmFn
bWVudFNvbGlkQ29sb3IpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6UmVjdF0gPSBTaGFkZXJTcGVjKHZlcnRleFNpbXBsZSwgZnJhZ21lbnRSZWN0U2ltcGxlKTsK
LSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZF0gPSBTaGFk
ZXJTcGVjKHZlcnRleE9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudE9wYWNpdHlBbmRNYXNrKTsKLSAg
ICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZFJlY3RdID0gU2hh
ZGVyU3BlYyh2ZXJ0ZXhPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRSZWN0T3BhY2l0eUFuZE1hc2sp
OwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzZWRd
ID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50QW50aWFsaWFzaW5nTm9NYXNrKTsK
LSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRl
cl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRHcmF5c2NhbGVGaWx0ZXIpOwot
ICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2VwaWFGaWx0ZXJdID0g
U2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2VwaWFGaWx0ZXIpOwotICAgICAgICBz
cGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2F0dXJhdGVGaWx0ZXJdID0gU2hhZGVy
U3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2F0dXJhdGVGaWx0ZXIpOwotICAgICAgICBzcGVj
c1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SHVlUm90YXRlRmlsdGVyXSA9IFNoYWRlclNw
ZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEh1ZVJvdGF0ZUZpbHRlcik7Ci0gICAgICAgIHNwZWNz
W1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpCcmlnaHRuZXNzRmlsdGVyXSA9IFNoYWRlclNw
ZWModmVydGV4RmlsdGVyLCBmcmFnbWVudEJyaWdodG5lc3NGaWx0ZXIpOwotICAgICAgICBzcGVj
c1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Q29udHJhc3RGaWx0ZXJdID0gU2hhZGVyU3Bl
Yyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50Q29udHJhc3RGaWx0ZXIpOwotICAgICAgICBzcGVjc1tU
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6SW52ZXJ0RmlsdGVyXSA9IFNoYWRlclNwZWModmVy
dGV4RmlsdGVyLCBmcmFnbWVudEludmVydEZpbHRlcik7Ci0gICAgICAgIHNwZWNzW1RleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4Rmls
dGVyLCBmcmFnbWVudE9wYWNpdHlGaWx0ZXIpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6Qmx1ckZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJh
Z21lbnRCbHVyRmlsdGVyKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OlNoYWRvd0ZpbHRlclBhc3MxXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVu
dFNoYWRvd0ZpbHRlcjEpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6U2hhZG93RmlsdGVyUGFzczJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50
U2hhZG93RmlsdGVyMik7Ci0gICAgfQotCi0gICAgQVNTRVJUKHNwZWNzLnNpemUoKSA+IGtleSk7
Ci0gICAgU2hhZGVyU3BlYyYgc3BlYyA9IHNwZWNzW2tleV07Ci0gICAgdmVydGV4U291cmNlID0g
c3BlYy52ZXJ0ZXhTaGFkZXI7Ci0gICAgZnJhZ21lbnRTb3VyY2UgPSBzcGVjLmZyYWdtZW50U2hh
ZGVyOworICAgICAgICAgICAgY29sb3IgKj0gdG90YWw7CisgICAgICAgIH0KKworICAgICAgICB2
ZWM0IHNvdXJjZU92ZXIodmVjNCBzcmMsIHZlYzQgZHN0KSB7IHJldHVybiBzcmMgKyBkc3QgKiAo
MS4gLSBkc3QuYSk7IH0KKworICAgICAgICB2b2lkIGFwcGx5Q29udGVudFRleHR1cmUoaW5vdXQg
dmVjNCBjb2xvcikKKyAgICAgICAgeworICAgICAgICAgICAgdmVjNCBjb250ZW50Q29sb3IgPSB0
ZXh0dXJlMkQoc19jb250ZW50VGV4dHVyZSwgdl90ZXhDb29yZCk7CisgICAgICAgICAgICBjb2xv
ciA9IHNvdXJjZU92ZXIoY29udGVudENvbG9yLCBjb2xvcik7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGFwcGx5U29saWRDb2xvcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb2xvciAqPSB1X2NvbG9yOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBtYWlu
KHZvaWQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzQgY29sb3IgPSB2ZWM0KDEuLCAxLiwg
MS4sIDEuKTsKKyAgICAgICAgICAgIGFwcGx5VGV4dHVyZUlmTmVlZGVkKGNvbG9yKTsKKyAgICAg
ICAgICAgIGFwcGx5U29saWRDb2xvcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5
QW50aWFsaWFzSWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlNYXNrSWZOZWVkZWQo
Y29sb3IpOworICAgICAgICAgICAgYXBwbHlPcGFjaXR5SWZOZWVkZWQoY29sb3IpOworICAgICAg
ICAgICAgYXBwbHlHcmF5c2NhbGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBh
cHBseVNlcGlhRmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlTYXR1cmF0
ZUZpbHRlcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5SHVlUm90YXRlRmlsdGVy
SWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlJbnZlcnRGaWx0ZXJJZk5lZWRlZChj
b2xvcik7CisgICAgICAgICAgICBhcHBseUJyaWdodG5lc3NGaWx0ZXJJZk5lZWRlZChjb2xvcik7
CisgICAgICAgICAgICBhcHBseUNvbnRyYXN0RmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAg
ICAgICAgYXBwbHlPcGFjaXR5RmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBw
bHlCbHVyRmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlBbHBoYUJsdXJJ
Zk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseUNvbnRlbnRUZXh0dXJlSWZOZWVkZWQo
Y29sb3IpOworICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7CisgICAgICAgIH0KKyAg
ICApOworCisKK3N0YXRpYyB2b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6Ok9wdGlvbnMgb3B0aW9ucywgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJh
Z21lbnRTb3VyY2UpCit7CisgICAgU3RyaW5nQnVpbGRlciBmcmFnbWVudEJ1aWxkZXI7CisjZGVm
aW5lIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBcHBsaWVyKSBcCisgICAgaWYgKG9wdGlvbnMg
JiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QXBwbGllcikgXAorICAgICAgICBmcmFnbWVu
dEJ1aWxkZXIuYXBwZW5kKEVOQUJMRV9BUFBMSUVSKEFwcGxpZXIpKTsKKworICAgIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhNYXRyaXgpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFRl
eHR1cmUpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFJlY3QpCisgICAgU0VUX0FQUExJ
RVJfRlJPTV9PUFRJT05TKFNvbGlkQ29sb3IpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05T
KE9wYWNpdHkpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE1hc2spCisgICAgU0VUX0FQ
UExJRVJfRlJPTV9PUFRJT05TKEFudGlhbGlhcykKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElP
TlMoR3JheXNjYWxlRmlsdGVyKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTZXBpYUZp
bHRlcikKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoU2F0dXJhdGVGaWx0ZXIpCisgICAg
U0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEh1ZVJvdGF0ZUZpbHRlcikKKyAgICBTRVRfQVBQTElF
Ul9GUk9NX09QVElPTlMoQnJpZ2h0bmVzc0ZpbHRlcikKKyAgICBTRVRfQVBQTElFUl9GUk9NX09Q
VElPTlMoQ29udHJhc3RGaWx0ZXIpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEludmVy
dEZpbHRlcikKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoT3BhY2l0eUZpbHRlcikKKyAg
ICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMoQmx1ckZpbHRlcikKKyAgICBTRVRfQVBQTElFUl9G
Uk9NX09QVElPTlMoQWxwaGFCbHVyKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhDb250
ZW50VGV4dHVyZSkKKworICAgIGZyYWdtZW50QnVpbGRlci5hcHBlbmQoZnJhZ21lbnRUZW1wbGF0
ZSk7CisgICAgdmVydGV4U291cmNlID0gdmVydGV4U2hhZGVyU291cmNlOworICAgIGZyYWdtZW50
U291cmNlID0gZnJhZ21lbnRCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CiAKIFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCkKQEAgLTUzNCwxNyArNDAwLDE3IEBAIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjp+VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKQogewogfQogCi1QYXNzUmVmUHRyPFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Z2V0
U2hhZGVyUHJvZ3JhbShTaGFkZXJLZXkga2V5KQorUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OmdldFNoYWRlclByb2dyYW0o
T3B0aW9ucyBvcHRpb25zKQogewotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOjpp
dGVyYXRvciBpdCA9IG1fcHJvZ3JhbXMuZmluZChrZXkpOworICAgIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtTWFwOjppdGVyYXRvciBpdCA9IG1fcHJvZ3JhbXMuZmluZChvcHRpb25zKTsKICAg
ICBpZiAoaXQgIT0gbV9wcm9ncmFtcy5lbmQoKSkKICAgICAgICAgcmV0dXJuIGl0LT52YWx1ZTsK
IAogICAgIFN0cmluZyB2ZXJ0ZXhTaGFkZXI7CiAgICAgU3RyaW5nIGZyYWdtZW50U2hhZGVyOwot
ICAgIGdldFNoYWRlclNwZWMoa2V5LCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyKTsKKyAg
ICBnZXRTaGFkZXJTcGVjKG9wdGlvbnMsIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpOwog
ICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUobV9jb250ZXh0LCB2ZXJ0ZXhTaGFkZXIsIGZyYWdt
ZW50U2hhZGVyKTsKLSAgICBtX3Byb2dyYW1zLmFkZChrZXksIHByb2dyYW0pOworICAgIG1fcHJv
Z3JhbXMuYWRkKG9wdGlvbnMsIHByb2dyYW0pOwogICAgIHJldHVybiBwcm9ncmFtOwogfQogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKaW5kZXggNjA2MDVmNDJkMGUz
MjM4N2M0MmE0ZmRkMDUzMTQyN2UwNGFkNzIyYS4uNjA3ZWQ0N2E1MzMwNjQxZDNlOTI4MmUzZDEz
ZmM2YTE1YmM1MDhmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmgK
QEAgLTU5LDEwICs1OSw5IEBAIHB1YmxpYzoKICAgICBURVhNQVBfREVDTEFSRV9TQU1QTEVSKG1h
c2spCiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9S
TShhbW91bnQpCisgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShmaWx0ZXJBbW91bnQpCiAgICAg
VEVYTUFQX0RFQ0xBUkVfVU5JRk9STShnYXVzc2lhbktlcm5lbCkKICAgICBURVhNQVBfREVDTEFS
RV9VTklGT1JNKGJsdXJSYWRpdXMpCi0gICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShzaGFkb3dD
b2xvcikKICAgICBURVhNQVBfREVDTEFSRV9VTklGT1JNKHNoYWRvd09mZnNldCkKICAgICBURVhN
QVBfREVDTEFSRV9TQU1QTEVSKGNvbnRlbnRUZXh0dXJlKQogI2VuZGlmCkBAIC04MiwzNiArODEs
MzcgQEAgcHJpdmF0ZToKIAogY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIgewogcHVi
bGljOgotICAgIGVudW0gU2hhZGVyS2V5IHsKLSAgICAgICAgSW52YWxpZCA9IDAsCi0gICAgICAg
IERlZmF1bHQsCi0gICAgICAgIFJlY3QsCi0gICAgICAgIE1hc2tlZCwKLSAgICAgICAgTWFza2Vk
UmVjdCwKLSAgICAgICAgU29saWRDb2xvciwKLSAgICAgICAgQW50aWFsaWFzZWQsCi0gICAgICAg
IEdyYXlzY2FsZUZpbHRlciwKLSAgICAgICAgU2VwaWFGaWx0ZXIsCi0gICAgICAgIFNhdHVyYXRl
RmlsdGVyLAotICAgICAgICBIdWVSb3RhdGVGaWx0ZXIsCi0gICAgICAgIEJyaWdodG5lc3NGaWx0
ZXIsCi0gICAgICAgIENvbnRyYXN0RmlsdGVyLAotICAgICAgICBPcGFjaXR5RmlsdGVyLAotICAg
ICAgICBJbnZlcnRGaWx0ZXIsCi0gICAgICAgIEJsdXJGaWx0ZXIsCi0gICAgICAgIFNoYWRvd0Zp
bHRlclBhc3MxLAotICAgICAgICBTaGFkb3dGaWx0ZXJQYXNzMiwKLSAgICAgICAgTGFzdEZpbHRl
cgorICAgIGVudW0gT3B0aW9uIHsKKyAgICAgICAgTWF0cml4ICAgICAgICAgICA9IDFMIDw8IDAs
CisgICAgICAgIFRleHR1cmUgICAgICAgICAgPSAxTCA8PCAxLAorICAgICAgICBSZWN0ICAgICAg
ICAgICAgID0gMUwgPDwgMiwKKyAgICAgICAgU29saWRDb2xvciAgICAgICA9IDFMIDw8IDMsCisg
ICAgICAgIE9wYWNpdHkgICAgICAgICAgPSAxTCA8PCA0LAorICAgICAgICBNYXNrICAgICAgICAg
ICAgID0gMUwgPDwgNSwKKyAgICAgICAgQW50aWFsaWFzICAgICAgICA9IDFMIDw8IDYsCisgICAg
ICAgIEdyYXlzY2FsZUZpbHRlciAgPSAxTCA8PCA3LAorICAgICAgICBTZXBpYUZpbHRlciAgICAg
ID0gMUwgPDwgOCwKKyAgICAgICAgU2F0dXJhdGVGaWx0ZXIgICA9IDFMIDw8IDksCisgICAgICAg
IEh1ZVJvdGF0ZUZpbHRlciAgPSAxTCA8PCAxMCwKKyAgICAgICAgQnJpZ2h0bmVzc0ZpbHRlciA9
IDFMIDw8IDExLAorICAgICAgICBDb250cmFzdEZpbHRlciAgID0gMUwgPDwgMTIsCisgICAgICAg
IEludmVydEZpbHRlciAgICAgPSAxTCA8PCAxMywKKyAgICAgICAgT3BhY2l0eUZpbHRlciAgICA9
IDFMIDw8IDE0LAorICAgICAgICBCbHVyRmlsdGVyICAgICAgID0gMUwgPDwgMTUsCisgICAgICAg
IEFscGhhQmx1ciAgICAgICAgPSAxTCA8PCAxNiwKKyAgICAgICAgQ29udGVudFRleHR1cmUgICA9
IDFMIDw8IDE3CiAgICAgfTsKIAorICAgIHR5cGVkZWYgdW5zaWduZWQgT3B0aW9uczsKKwogICAg
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkgeyB9CiAgICAgZXhwbGljaXQgVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3NDb250ZXh0M0QqKTsKICAgICB2aXJ0dWFsIH5UZXh0
dXJlTWFwcGVyU2hhZGVyTWFuYWdlcigpOwogCi0gICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbT4gZ2V0U2hhZGVyUHJvZ3JhbShTaGFkZXJLZXkpOworICAgIFBhc3NSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IGdldFNoYWRlclByb2dyYW0oT3B0aW9ucyk7
CiAKIHByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFNoYWRlcktleSwgUmVmUHRyPFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiwgRGVmYXVsdEhhc2g8aW50Pjo6SGFzaCwgSGFzaFRyYWl0
czxpbnQ+ID4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW1NYXA7CisgICAgdHlwZWRlZiBIYXNo
TWFwPE9wdGlvbnMsIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gPiBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbU1hcDsKICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbU1h
cCBtX3Byb2dyYW1zOwogICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gbV9jb250ZXh0Owog
fTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>180769</attachid>
            <date>2012-12-26 17:33:51 -0800</date>
            <delta_ts>2012-12-26 18:30:34 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-104815-20121226172945.patch</filename>
            <type>text/plain</type>
            <size>48650</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM4NDg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDQ2ZWYxNGYwNzczZTg0
YTU5YTczZTU4Yzg4YzQ2OWMwZDVlNTY0OS4uN2UxOTQzN2UxM2Q3OWZlZDhiN2UyNmFjYjc2ZTE2
ODUyZmUwYWYwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQwIEBACisyMDEyLTEyLTE5ICBObydh
bSBSb3NlbnRoYWwgIDxub2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1RleG1hcF0gSW5zdGVh
ZCBvZiBoYXZpbmcgbXVsdGlwbGUgc2hhZGVycyBzb3VyY2VzIHdpdGggbG90cyBvZiBkdXBsaWNh
dGlvbiwgd2Ugc2hvdWxkIGhhdmUgb25lIHNoYWRlciBzb3VyY2Ugd2l0aCBNQUNSTyB2YXJpYW50
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA0ODE1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCisKKyAg
ICAgICAgQ3JlYXRlZCB0ZW1wbGF0ZXMgZm9yIHRoZSB2ZXJ0ZXggYW5kIGZyYWdtZW50IHNoYWRl
cnMsIGFuZCBhZGRlZCBzb21lIE1BQ1JPcyBpbiAKKyAgICAgICAgVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXIgdG8gYWxsb3cgR0xTTCBwcmVjb21waWxlci1iYXNlZCBjb25maWd1cmF0aW9uLgor
CisgICAgICAgIFRoZSB0ZW1wbGF0ZSBmb2xsb3dzIGEgcGF0dGVybiB3aGVyZSB0aGUgbWFpbiBm
dW5jdGlvbiBpbiB0aGUgc2hhZGVyIGNhbGxzCisgICAgICAgIGFwcGx5Rm9vQmFySWZOZWVkZWQo
KSwgd2hpbGUgYXBwbHlGb29CYXIoKSBpcyBpbXBsZW1lbnRlZC4gVGhlIE1hY3JvcyBwcmVwZW5k
ZWQgdG8gdGhlIHRlbXBsYXRlIGRlZmluZSB3aGV0aGVyIGFwcGx5SWZOZWVkZWQgcmVzb2x2ZXMg
dG8gdGhlIHJlYWwgZnVuY3Rpb24gb3IgdG8gYSBub29wLgorCisgICAgICAgIEluIGFkZGl0aW9u
LCBtYWRlIHNvbWUgc21hbGwgY2hhbmdlcyB0byB0aGUgZmlsdGVyIHNoYWRlcnMgc28gdGhhdCB0
aGV5IGNhbiB1c2UgdGhlIHNhbWUgY29kZSBhcyB0aGUgbm9ybWFsIHNoYWRlcnMuCisKKyAgICAg
ICAgQ292ZXJlZCBieSBleGlzdGluZyBwaXhlbC9yZWYgdGVzdHMgd2hlbiBydW4gb24gUXQvRUZM
L0dUSy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVy
R0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZSk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdTb2xpZENvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmVXaXRoQW50aWFsaWFz
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6Om9wdGlvbnNGb3JGaWx0ZXJUeXBlKToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6cHJlcGFyZUZpbHRlclByb2dyYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3RmlsdGVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6
Qml0bWFwVGV4dHVyZUdMOjphcHBseUZpbHRlcnMpOgorICAgICAgICAgICAgQWx3YXlzIGRyYXcg
dXNpbmcgdGhlIGRyYXdRdWFkIGZ1bmN0aW9uLCBhbmQgdXNlIHRoZSBuZXcgVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgbWFzayBpbnN0ZWFkIG9mIHRoZSBvbGQgU2hhZGVyS2V5
LgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0
U2hhZGVyU3BlYyk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6Z2V0U2hhZGVyUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmg6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbSk6CisgICAgICAgIChUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcik6CisKIDIw
MTItMTItMjYgIEh1YW5nIERvbmdzdW5nICA8bHV4dGVsbGFAY29tcGFueTEwMC5uZXQ+CiAKICAg
ICAgICAgW1RleE1hcF0gQSBNaW5vciBvcHRpbWl6YXRpb24gb2YgR3JhcGhpY3NMYXllclRyYW5z
Zm9ybS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9UZXh0dXJlTWFwcGVyR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKaW5kZXggZGMxZjJkYjhmZWRiY2ZiYWYyNzgwZjJk
ZmE1OTMyMDE2MjE2MTc1Mi4uOTFiNGFlMjlhZWU5NzA5NzM4Y2ZjOWQyNWE0MGNjMGUwY2IwMmY4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXJHTC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJHTC5jcHAKQEAgLTg1LDggKzg1LDYgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTaGFyZWRHTERhdGEoY29udGV4dCkpOwogICAg
ICAgICB9CiAKLQotCiAgICAgICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyIHRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOwogCiAgICAgICAgIGV4cGxpY2l0IFNoYXJlZEdMRGF0YShHcmFw
aGljc0NvbnRleHQzRCogY29udGV4dCkKQEAgLTQxMywxNiArNDExLDE2IEBAIHZvaWQgVGV4dHVy
ZU1hcHBlckdMOjpkcmF3VGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUsIEZsYWdzIGZs
YWdzLCBjb25zdCBJCiAgICAgaWYgKCF1c2VSZWN0ICYmIG5lZWRzQW50aWFsaWFzaW5nICYmIGRy
YXdUZXh0dXJlV2l0aEFudGlhbGlhc2luZyh0ZXh0dXJlLCBmbGFncywgdGV4dHVyZVNpemUsIHRh
cmdldFJlY3QsIG1vZGVsVmlld01hdHJpeCwgb3BhY2l0eSwgbWFza1RleHR1cmUsIGV4cG9zZWRF
ZGdlcykpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
OjpTaGFkZXJLZXkga2V5ID0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkRlZmF1bHQ7Ci0g
ICAgaWYgKG1hc2tlZCAmJiB1c2VSZWN0KQotICAgICAgICBrZXkgPSBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6TWFza2VkUmVjdDsKLSAgICBlbHNlIGlmIChtYXNrZWQpCi0gICAgICAgIGtl
eSA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpNYXNrZWQ7Ci0gICAgZWxzZSBpZiAodXNl
UmVjdCkKLSAgICAgICAga2V5ID0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlJlY3Q7Cisg
ICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlOworICAgIGlmIChtYXNrZWQpCisgICAgICAgIG9w
dGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2s7CisgICAgaWYgKGZsYWdz
ICYgU2hvdWxkVXNlQVJCVGV4dHVyZVJlY3QpCisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1h
cHBlclNoYWRlck1hbmFnZXI6OlJlY3Q7CisgICAgaWYgKG9wYWNpdHkgPCAxKQorICAgICAgICBv
cHRpb25zIHw9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcGFjaXR5OwogCiAgICAgUmVm
UHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwotICAgIHByb2dyYW0gPSBk
YXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVy
UHJvZ3JhbShrZXkpOworICAgIHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25zKTsKICAgICBtX2Nv
bnRleHQzRC0+dXNlUHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAKICAgICBkcmF3VGV4
dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgdGV4dHVyZSwgZmxhZ3MsIHRleHR1
cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgsIG9wYWNpdHksIG1hc2tUZXh0dXJl
KTsKQEAgLTU2Miw4ICs1NjAsMTEgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdUZXh0dXJl
V2l0aEFudGlhbGlhc2luZyh1aW50MzJfdCB0ZXh0dXJlLCBGbGFncyBmbGFncywKICAgICBmbG9h
dCB0YXJnZXRRdWFkRWRnZXNbMjRdOwogICAgIHF1YWRUb0VkZ2VBcnJheShleHBhbmRlZFF1YWRJ
blNjcmVlblNwYWNlLCB0YXJnZXRRdWFkRWRnZXMpOwogICAgIHF1YWRUb0VkZ2VBcnJheShpbmZs
YXRlUXVhZChxdWFkSW5TY3JlZW5TcGFjZS5ib3VuZGluZ0JveCgpLCAgaW5mbGF0aW9uRGlzdGFu
Y2UpLCB0YXJnZXRRdWFkRWRnZXMgKyAxMik7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6Ok9wdGlvbnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpBbnRpYWxp
YXMgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZTsKKyAgICBpZiAob3BhY2l0
eSA8IDEpCisgICAgICAgIG9wdGlvbnMgfD0gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9w
YWNpdHk7CiAKLSAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0g
PSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hh
ZGVyUHJvZ3JhbShUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzZWQpOworICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFy
ZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKG9w
dGlvbnMpOwogICAgIG1fY29udGV4dDNELT51c2VQcm9ncmFtKHByb2dyYW0tPnByb2dyYW1JRCgp
KTsKICAgICBtX2NvbnRleHQzRC0+dW5pZm9ybTNmdihwcm9ncmFtLT5leHBhbmRlZFF1YWRFZGdl
c0luU2NyZWVuU3BhY2VMb2NhdGlvbigpLCA4LCB0YXJnZXRRdWFkRWRnZXMpOwogCkBAIC03NTYs
MzIgKzc1NywzMyBAQCB2b2lkIEJpdG1hcFRleHR1cmVHTDo6dXBkYXRlQ29udGVudHMoSW1hZ2Uq
IGltYWdlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0LCBjbwogCiAjaWYgRU5BQkxFKENTU19G
SUxURVJTKQogCi1zdGF0aWMgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRlcktleSBr
ZXlGb3JGaWx0ZXJUeXBlKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1bnNp
Z25lZCBwYXNzKQorc3RhdGljIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpPcHRpb25zIG9w
dGlvbnNGb3JGaWx0ZXJUeXBlKEZpbHRlck9wZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlLCB1
bnNpZ25lZCBwYXNzKQogewogICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6R3JheXNjYWxlRmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6R3JheXNjYWxl
RmlsdGVyOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICAgICAgcmV0dXJu
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTZXBpYUZpbHRlcjsKKyAgICAgICAgcmV0dXJu
IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlNlcGlhRmlsdGVyOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFU
RToKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpTYXR1cmF0ZUZp
bHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJl
IHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNhdHVyYXRlRmlsdGVyOwogICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6Okh1ZVJvdGF0ZUZpbHRlcjsKKyAgICAgICAgcmV0dXJuIFRleHR1cmVN
YXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
Okh1ZVJvdGF0ZUZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAg
ICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmVydEZpbHRlcjsKKyAg
ICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpUZXh0dXJlIHwgVGV4dHVy
ZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmVydEZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6QlJJR0hUTkVTUzoKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5h
Z2VyOjpCcmlnaHRuZXNzRmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRl
ck1hbmFnZXI6OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QnJpZ2h0bmVz
c0ZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgICAgIHJl
dHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6Q29udHJhc3RGaWx0ZXI7CisgICAgICAg
IHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZSB8IFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpDb250cmFzdEZpbHRlcjsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6T1BBQ0lUWToKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpP
cGFjaXR5RmlsdGVyOworICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6
OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6T3BhY2l0eUZpbHRlcjsKICAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKICAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpCbHVyRmlsdGVyOwogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpE
Uk9QX1NIQURPVzoKLSAgICAgICAgcmV0dXJuIHBhc3MgPyBUZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlcjo6U2hhZG93RmlsdGVyUGFzczIgOiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hh
ZG93RmlsdGVyUGFzczE7CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6QWxwaGFCbHVyCisgICAgICAgICAgICB8IChwYXNzID8gVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6OkNvbnRlbnRUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNvbGlk
Q29sb3I6IDApOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkludmFsaWQ7CisgICAg
ICAgIHJldHVybiAwOwogICAgIH0KIH0KIApAQCAtODUyLDEzICs4NTQsMTMgQEAgc3RhdGljIHZv
aWQgcHJlcGFyZUZpbHRlclByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dy
YW0sIGNvbnN0IEZpbHQKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CiAgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpI
VUVfUk9UQVRFOgotICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+YW1vdW50TG9j
YXRpb24oKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
biY+KG9wZXJhdGlvbikuYW1vdW50KCkpOworICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJv
Z3JhbS0+ZmlsdGVyQW1vdW50TG9jYXRpb24oKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgogICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCUklHSFRORVNTOgogICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFT
VDoKICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgY29udGV4dC0+
dW5pZm9ybTFmKHByb2dyYW0tPmFtb3VudExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNvbnN0IEJh
c2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgp
KTsKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmZpbHRlckFtb3VudExvY2F0
aW9uKCksIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVy
YXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKICAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlv
biYgYmx1ciA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRp
b24pOwpAQCAtODc5LDE5ICs4ODEsMjAgQEAgc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRlclByb2dy
YW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0sIGNvbnN0IEZpbHQKICAgICAg
ICAgY29udGV4dC0+dW5pZm9ybTFmdihwcm9ncmFtLT5nYXVzc2lhbktlcm5lbExvY2F0aW9uKCks
IEdhdXNzaWFuS2VybmVsSGFsZldpZHRoLCBnYXVzc2lhbktlcm5lbCgpKTsKICAgICAgICAgc3dp
dGNoIChwYXNzKSB7CiAgICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIC8vIEZpcnN0IHBhc3M6
IHZlcnRpY2FsIGFscGhhIGJsdXIuCisgICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiBob3Jpem9u
dGFsIGFscGhhIGJsdXIuCisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS0+
Ymx1clJhZGl1c0xvY2F0aW9uKCksIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUu
d2lkdGgoKSksIDApOwogICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPnNo
YWRvd09mZnNldExvY2F0aW9uKCksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9h
dChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6
ZS5oZWlnaHQoKSkpOwotICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmJs
dXJSYWRpdXNMb2NhdGlvbigpLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLndp
ZHRoKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDE6CiAgICAgICAgICAg
ICAvLyBTZWNvbmQgcGFzczogd2UgbmVlZCB0aGUgc2hhZG93IGNvbG9yIGFuZCB0aGUgY29udGVu
dCB0ZXh0dXJlIGZvciBjb21wb3NpdGluZy4KLSAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0x
Zihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8g
ZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKKyAg
ICAgICAgICAgIHNoYWRvdy5jb2xvcigpLmdldFJHQkEociwgZywgYiwgYSk7CisgICAgICAgICAg
ICBjb250ZXh0LT51bmlmb3JtNGYocHJvZ3JhbS0+Y29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBh
KTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9j
YXRpb24oKSwgMCwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkp
OworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPnNoYWRvd09mZnNldExv
Y2F0aW9uKCksIDAsIDApOwogICAgICAgICAgICAgY29udGV4dC0+YWN0aXZlVGV4dHVyZShHcmFw
aGljc0NvbnRleHQzRDo6VEVYVFVSRTEpOwogICAgICAgICAgICAgY29udGV4dC0+YmluZFRleHR1
cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIGNvbnRlbnRUZXh0dXJlKTsKICAgICAg
ICAgICAgIGNvbnRleHQtPnVuaWZvcm0xaShwcm9ncmFtLT5jb250ZW50VGV4dHVyZUxvY2F0aW9u
KCksIDEpOwotICAgICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKLSAgICAgICAgICAgIHNoYWRv
dy5jb2xvcigpLmdldFJHQkEociwgZywgYiwgYSk7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmlm
b3JtNGYocHJvZ3JhbS0+c2hhZG93Q29sb3JMb2NhdGlvbigpLCByLCBnLCBiLCBhKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtOTYwLDI1ICs5NjMs
MTMgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdVc2luZ0N1c3RvbUZpbHRlcihCaXRtYXBU
ZXh0dXJlJiB0YXJnZXQsIGNvbnN0IEJpdG1hcFQKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3
RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4dHVyZSYgc2FtcGxlciwgY29uc3QgQml0bWFwVGV4dHVy
ZSYgY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFz
cykKIHsKICAgICAvLyBGb3Igc3RhbmRhcmQgZmlsdGVycywgd2UgYWx3YXlzIGRyYXcgdGhlIHdo
b2xlIHRleHR1cmUgd2l0aG91dCB0cmFuc2Zvcm1hdGlvbnMuCi0gICAgVGV4dHVyZU1hcHBlclNo
YWRlck1hbmFnZXI6OlNoYWRlcktleSBrZXkgPSBrZXlGb3JGaWx0ZXJUeXBlKGZpbHRlci5nZXRP
cGVyYXRpb25UeXBlKCksIHBhc3MpOwotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKGtleSk7CisgICAgVGV4dHVyZU1hcHBlclNoYWRlck1h
bmFnZXI6Ok9wdGlvbnMgb3B0aW9ucyA9IG9wdGlvbnNGb3JGaWx0ZXJUeXBlKGZpbHRlci5nZXRP
cGVyYXRpb25UeXBlKCksIHBhc3MpOworICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVy
TWFuYWdlci5nZXRTaGFkZXJQcm9ncmFtKG9wdGlvbnMpOwogICAgIEFTU0VSVChwcm9ncmFtKTsK
IAogICAgIHByZXBhcmVGaWx0ZXJQcm9ncmFtKHByb2dyYW0uZ2V0KCksIGZpbHRlciwgcGFzcywg
c2FtcGxlci5jb250ZW50U2l6ZSgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wm
Pihjb250ZW50VGV4dHVyZSkuaWQoKSk7Ci0KLSAgICBtX2NvbnRleHQzRC0+ZW5hYmxlVmVydGV4
QXR0cmliQXJyYXkocHJvZ3JhbS0+dmVydGV4TG9jYXRpb24oKSk7Ci0gICAgbV9jb250ZXh0M0Qt
PmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnRleENvb3JkTG9jYXRpb24oKSk7Ci0g
ICAgbV9jb250ZXh0M0QtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUw
KTsKLSAgICBtX2NvbnRleHQzRC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHNhbXBsZXIpLmlkKCkp
OwotICAgIG1fY29udGV4dDNELT51bmlmb3JtMWkocHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCks
IDApOwotICAgIGNvbnN0IEdDM0RmbG9hdCB0YXJnZXRWZXJ0aWNlc1tdID0gey0xLCAtMSwgMSwg
LTEsIDEsIDEsIC0xLCAxfTsKLSAgICBjb25zdCBHQzNEZmxvYXQgc291cmNlVmVydGljZXNbXSA9
IHswLCAwLCAxLCAwLCAxLCAxLCAwLCAxfTsKLSAgICBtX2NvbnRleHQzRC0+dmVydGV4QXR0cmli
UG9pbnRlcihwcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpLCAyLCBHcmFwaGljc0NvbnRleHQzRDo6
RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHRhcmdldFZlcnRpY2VzKSk7Ci0gICAgbV9jb250
ZXh0M0QtPnZlcnRleEF0dHJpYlBvaW50ZXIocHJvZ3JhbS0+dGV4Q29vcmRMb2NhdGlvbigpLCAy
LCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCBHQzNEaW50cHRyKHNvdXJjZVZl
cnRpY2VzKSk7Ci0gICAgbV9jb250ZXh0M0QtPmRpc2FibGUoR3JhcGhpY3NDb250ZXh0M0Q6OkJM
RU5EKTsKLSAgICBtX2NvbnRleHQzRC0+ZHJhd0FycmF5cyhHcmFwaGljc0NvbnRleHQzRDo6VFJJ
QU5HTEVfRkFOLCAwLCA0KTsKLSAgICBtX2NvbnRleHQzRC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFy
cmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwotICAgIG1fY29udGV4dDNELT5kaXNhYmxl
VmVydGV4QXR0cmliQXJyYXkocHJvZ3JhbS0+dGV4Q29vcmRMb2NhdGlvbigpKTsKKyAgICBGbG9h
dFJlY3QgdGFyZ2V0UmVjdChJbnRQb2ludDo6emVybygpLCBzYW1wbGVyLmNvbnRlbnRTaXplKCkp
OworICAgIGRyYXdUZXh0dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCBzdGF0aWNf
Y2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihzYW1wbGVyKS5pZCgpLCAwLCBJbnRTaXplKDEs
IDEpLCB0YXJnZXRSZWN0LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCAxLCAwKTsKIH0KIAogUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyhUZXh0
dXJlTWFwcGVyKiB0ZXh0dXJlTWFwcGVyLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4
dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKQEAgLTExNzIsNyArMTE2Myw3
IEBAIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpiZWdpbkNsaXAoY29uc3QgVHJhbnNmb3JtYXRpb25N
YXRyaXgmIG1vZGVsVmlld01hdHJpeCwgY29uCiAKICAgICBkYXRhKCkuaW5pdGlhbGl6ZVN0ZW5j
aWwoKTsKIAotICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gcHJvZ3JhbSA9
IGRhdGEoKS5zaGFyZWRHTERhdGEoKS50ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5nZXRTaGFk
ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpEZWZhdWx0KTsKKyAgICBSZWZQ
dHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xE
YXRhKCkudGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuZ2V0U2hhZGVyUHJvZ3JhbShUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6U29saWRDb2xvcik7CiAKICAgICBtX2NvbnRleHQzRC0+dXNl
UHJvZ3JhbShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7CiAgICAgbV9jb250ZXh0M0QtPmVuYWJsZVZl
cnRleEF0dHJpYkFycmF5KHByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJTaGFk
ZXJNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5jcHAKaW5kZXggMjE3NTYyMGFlMTdmNDNlZmM0ODFm
YTU2NzM4MzdiZjdhMTY4ZmMyOS4uMmQ4NmJmODU5ZGE4NjE3ZmM0ODc5ZjJkNzE3NTkyMjhhYTFj
MDQzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFw
L1RleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuY3BwCkBAIC0y
MywxNiArMjMsMTYgQEAKICNpbmNsdWRlICJUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oIgog
CiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKSAmJiBVU0UoVEVYVFVSRV9NQVBQRVIp
Ci0KICNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiVGV4dHVyZU1hcHBlckdMLmgiCiAKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdC
dWlsZGVyLmg+CisKICNkZWZpbmUgU1RSSU5HSUZZKC4uLikgI19fVkFfQVJHU19fCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotCiBzdGF0aWMgaW5saW5lIGJvb2wgY29tcG9zaXRpbmdMb2dFbmFi
bGVkKCkKIHsKICNpZiAhTE9HX0RJU0FCTEVECkBAIC0xMDYsNDIzICsxMDYsMjg4IEBAIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjp+VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0oKQogICAg
IG1fY29udGV4dC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtSUQpOwogfQogCi1zdHJ1Y3QgU2hhZGVy
U3BlYyB7Ci0gICAgU3RyaW5nIHZlcnRleFNoYWRlcjsKLSAgICBTdHJpbmcgZnJhZ21lbnRTaGFk
ZXI7Ci0gICAgU2hhZGVyU3BlYyhjb25zdCBjaGFyKiB2ZXJ0ZXggPSAwLCBjb25zdCBjaGFyKiBm
cmFnbWVudCA9IDApCi0gICAgICAgIDogdmVydGV4U2hhZGVyKHZlcnRleCA/IFN0cmluZyhBU0NJ
SUxpdGVyYWwodmVydGV4KSkgOiBTdHJpbmcoKSkKLSAgICAgICAgLCBmcmFnbWVudFNoYWRlcihm
cmFnbWVudCA/IFN0cmluZyhBU0NJSUxpdGVyYWwoZnJhZ21lbnQpKSA6IFN0cmluZygpKQotICAg
IHsKLSAgICB9Ci19OwotCi1zdGF0aWMgdm9pZCBnZXRTaGFkZXJTcGVjKFRleHR1cmVNYXBwZXJT
aGFkZXJNYW5hZ2VyOjpTaGFkZXJLZXkga2V5LCBTdHJpbmcmIHZlcnRleFNvdXJjZSwgU3RyaW5n
JiBmcmFnbWVudFNvdXJjZSkKLXsKLSAgICBzdGF0aWMgVmVjdG9yPFNoYWRlclNwZWM+IHNwZWNz
ID0gVmVjdG9yPFNoYWRlclNwZWM+KCk7Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50
T3BhY2l0eUFuZE1hc2sgPQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBwcmVjaXNp
b24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxl
cjsKLSAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfbWFzazsKLSAgICAgICAgICAgIHVu
aWZvcm0gZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZfc291cmNl
VGV4Q29vcmQ7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7Ci0gICAg
ICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2
ZWM0IGNvbG9yID0gdGV4dHVyZTJEKHNfc2FtcGxlciwgdl9zb3VyY2VUZXhDb29yZCk7Ci0gICAg
ICAgICAgICAgICAgdmVjNCBtYXNrQ29sb3IgPSB0ZXh0dXJlMkQoc19tYXNrLCB2X21hc2tUZXhD
b29yZCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgZnJhZ21lbnRBbHBoYSA9IHVfb3BhY2l0eSAq
IG1hc2tDb2xvci5hOwotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoY29sb3Iu
cmdiICogZnJhZ21lbnRBbHBoYSwgY29sb3IuYSAqIGZyYWdtZW50QWxwaGEpOwotICAgICAgICAg
ICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50UmVjdE9w
YWNpdHlBbmRNYXNrID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgcHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRFJlY3Qgc19zYW1w
bGVyOwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfbWFzazsKLSAgICAgICAg
ICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMyIHZf
c291cmNlVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7
Ci0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJEUmVjdChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29v
cmQpOwotICAgICAgICAgICAgICAgIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEUmVjdChzX21h
c2ssIHZfbWFza1RleENvb3JkKTsKLSAgICAgICAgICAgICAgICBmbG9hdCBmcmFnbWVudEFscGhh
ID0gdV9vcGFjaXR5ICogbWFza0NvbG9yLmE7Ci0gICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9y
ID0gdmVjNChjb2xvci5yZ2IgKiBmcmFnbWVudEFscGhhLCBjb2xvci5hICogZnJhZ21lbnRBbHBo
YSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciog
dmVydGV4T3BhY2l0eUFuZE1hc2sgPQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICB1
bmlmb3JtIG1hdDQgdV9tYXRyaXg7Ci0gICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmxpcDsK
LSAgICAgICAgICAgIHVuaWZvcm0gdmVjMiB1X3RleHR1cmVTaXplOwotICAgICAgICAgICAgYXR0
cmlidXRlIHZlYzQgYV92ZXJ0ZXg7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VU
ZXhDb29yZDsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X21hc2tUZXhDb29yZDsKLSAgICAg
ICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZf
c291cmNlVGV4Q29vcmQgPSB2ZWMyKGFfdmVydGV4LngsIG1peChhX3ZlcnRleC55LCAxLiAtIGFf
dmVydGV4LnksIHVfZmxpcCkpICogdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgICAgICAgICB2X21h
c2tUZXhDb29yZCA9IHZlYzIoYV92ZXJ0ZXgpOwotICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9u
ID0gdV9tYXRyaXggKiBhX3ZlcnRleDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNpbXBsZSA9Ci0gICAgICAgIFNUUklOR0lGWSgK
LSAgICAgICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICAgICAgdW5pZm9y
bSBzYW1wbGVyMkQgc19zYW1wbGVyOwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNp
dHk7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsKLSAgICAgICAg
ICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHZlYzQg
Y29sb3IgPSB0ZXh0dXJlMkQoc19zYW1wbGVyLCB2X3NvdXJjZVRleENvb3JkKTsKLSAgICAgICAg
ICAgICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLnJnYiAqIHVfb3BhY2l0eSwgY29sb3Iu
YSAqIHVfb3BhY2l0eSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMg
Y29uc3QgY2hhciogZnJhZ21lbnRBbnRpYWxpYXNpbmdOb01hc2sgPQotICAgICAgICBTVFJJTkdJ
RlkoCi0gICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAgIHVu
aWZvcm0gc2FtcGxlcjJEIHNfc2FtcGxlcjsKLSAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3Nv
dXJjZVRleENvb3JkOwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1X29wYWNpdHk7Ci0gICAg
ICAgICAgICB1bmlmb3JtIHZlYzMgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbOF07
Ci0KLSAgICAgICAgICAgICAgICAvLyBUaGUgZGF0YSBwYXNzZWQgaW4gdV9leHBhbmRlZFF1YWRF
ZGdlc0luU2NyZWVuU3BhY2UgaXMgbWVyZWx5IHRoZQotICAgICAgICAgICAgICAgIC8vIHByZS1z
Y2FsZWQgY29lZmZlY2llbnRzIG9mIHRoZSBsaW5lIGVxdWF0aW9ucyBkZXNjcmliaW5nIHRoZSBm
b3VyIGVkZ2VzCi0gICAgICAgICAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQgaW4gc2Ny
ZWVuIHNwYWNlIGFuZCB0aGUgcmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94Ci0gICAgICAgICAgICAg
ICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQuCi0gICAgICAgICAgICAgICAgLy8KLSAgICAgICAg
ICAgIGZsb2F0IG5vcm1hbGl6ZWREaXN0YW5jZSh2ZWMzIGVkZ2VDb2VmZmljaWVudCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgZG9pbmcgYSBzaW1wbGUgZGlzdGFu
Y2UgY2FsY3VsYXRpb24gaGVyZSBhY2NvcmRpbmcgdG8gdGhlIGZvcm11bGE6Ci0gICAgICAgICAg
ICAgICAgLy8gKEEqcC54ICsgQipwLnkgKyBDKSAvIHNxcnQoQV4yICsgQl4yKSA9IGRpc3RhbmNl
IGZyb20gbGluZSB0byBwCi0gICAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IEEsIEIgYW5kIEMg
aGF2ZSBhbHJlYWR5IGJlZW4gc2NhbGVkIGJ5IDEgLyBzcXJ0KEFeMiArIEJeMikuCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGNsYW1wKGRvdChlZGdlQ29lZmZpY2llbnQsIHZlYzMoZ2xfRnJhZ0Nv
b3JkLnh5LCAxLikpLCAwLiwgMS4pOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmbG9h
dCBhbnRpYWxpYXNRdWFkKHZlYzMgY29lZmZpY2llbnQxLCB2ZWMzIGNvZWZmaWNpZW50MiwgdmVj
MyBjb2VmZmljaWVudDMsIHZlYzMgY29lZmZpY2llbnQ0KQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8vIE5vdyB3ZSB3YW50IHRvIHJlZHVjZSB0aGUgYWxwaGEgdmFsdWUgb2YgdGhl
IGZyYWdtZW50IGlmIGl0IGlzIGNsb3NlIHRvIHRoZQotICAgICAgICAgICAgICAgIC8vIGVkZ2Vz
IG9mIHRoZSBleHBhbmRlZCBxdWFkIChvciByZWN0YW5ndWxhciBib3VuZGluZyBib3ggLS0gd2hp
Y2ggc2VlbXMgdG8gYmUKLSAgICAgICAgICAgICAgICAvLyBpbXBvcnRhbnQgZm9yIGJhY2tmYWNp
bmcgcXVhZHMpLiBOb3RlIHRoYXQgd2UgYXJlIGNvbWJpbmluZyB0aGUgY29udHJpYnV0aW9uCi0g
ICAgICAgICAgICAgICAgLy8gZnJvbSB0aGUgKHRvcCB8fCBib3R0b20pIGFuZCAobGVmdCB8fCBy
aWdodCkgZWRnZSBieSBzaW1wbHkgbXVsdGlwbHlpbmcuIFRoaXMgZm9sbG93cwotICAgICAgICAg
ICAgICAgIC8vIHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYXQ6IGh0dHA6Ly9odHRwLmRldmVsb3Bl
ci5udmlkaWEuY29tL0dQVUdlbXMyL2dwdWdlbXMyX2NoYXB0ZXIyMi5odG1sLAotICAgICAgICAg
ICAgICAgIC8vIGluIHRoaXMgY2FzZSB3aXRob3V0IHVzaW5nIEdhdXNzaWFuIHdlaWdodHMuCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1pbihub3JtYWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQx
KSwgbm9ybWFsaXplZERpc3RhbmNlKGNvZWZmaWNpZW50MikpCi0gICAgICAgICAgICAgICAgICAg
ICogbWluKG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDMpLCBub3JtYWxpemVkRGlzdGFu
Y2UoY29lZmZpY2llbnQ0KSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZsb2F0IGFu
dGlhbGlhcygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZmxvYXQgYW50aWFsaWFz
VmFsdWVGb3JRdWFkID0gCi0gICAgICAgICAgICAgICAgICAgIGFudGlhbGlhc1F1YWQodV9leHBh
bmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICB1
X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVsxXSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzJdLAotICAgICAgICAgICAgICAg
ICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbM10pOwotCi0gICAgICAg
ICAgICAgICAgZmxvYXQgYW50aWFsaWFzVmFsdWVGb3JCb3VuZGluZ1JlY3QgPSAKLSAgICAgICAg
ICAgICAgICAgICAgYW50aWFsaWFzUXVhZCh1X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFj
ZVs0XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVl
blNwYWNlWzVdLAotICAgICAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1YWRFZGdlc0lu
U2NyZWVuU3BhY2VbNl0sCi0gICAgICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVhZEVk
Z2VzSW5TY3JlZW5TcGFjZVs3XSk7Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4gbWluKGFudGlh
bGlhc1ZhbHVlRm9yUXVhZCwgYW50aWFsaWFzVmFsdWVGb3JCb3VuZGluZ1JlY3QpOyAgICAgICAg
ICAgCi0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgbWFpbigpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgdmVjNCBzYW1wbGVkQ29sb3IgPSB0ZXh0dXJlMkQoc19zYW1w
bGVyLCBjbGFtcCh2X3NvdXJjZVRleENvb3JkLCAwLjAsIDEuMCkpOwotICAgICAgICAgICAgICAg
IGdsX0ZyYWdDb2xvciA9IHNhbXBsZWRDb2xvciAqIHVfb3BhY2l0eSAqIGFudGlhbGlhcygpOwot
ICAgICAgICAgICAgfQotICAgICAgICApOwotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdt
ZW50UmVjdFNpbXBsZSA9Ci0gICAgICAgIFNUUklOR0lGWSgKLSAgICAgICAgICAgIHByZWNpc2lv
biBtZWRpdW1wIGZsb2F0OwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkRSZWN0IHNfc2Ft
cGxlcjsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9vcGFjaXR5OwotICAgICAgICAgICAg
dmFyeWluZyB2ZWMyIHZfc291cmNlVGV4Q29vcmQ7Ci0gICAgICAgICAgICB2b2lkIG1haW4odm9p
ZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IGNvbG9yID0gdGV4dHVyZTJE
UmVjdChzX3NhbXBsZXIsIHZfc291cmNlVGV4Q29vcmQpOwotICAgICAgICAgICAgICAgIGdsX0Zy
YWdDb2xvciA9IHZlYzQoY29sb3IucmdiICogdV9vcGFjaXR5LCBjb2xvci5hICogdV9vcGFjaXR5
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2
ZXJ0ZXhTaW1wbGUgPQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICB1bmlmb3JtIG1h
dDQgdV9tYXRyaXg7Ci0gICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfZmxpcDsKLSAgICAgICAg
ICAgIHVuaWZvcm0gdmVjMiB1X3RleHR1cmVTaXplOwotICAgICAgICAgICAgYXR0cmlidXRlIHZl
YzQgYV92ZXJ0ZXg7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl9zb3VyY2VUZXhDb29yZDsK
LSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHZfc291cmNlVGV4Q29vcmQgPSB2ZWMyKGFfdmVydGV4LngsIG1peChhX3ZlcnRleC55LCAx
LiAtIGFfdmVydGV4LnksIHVfZmxpcCkpICogdV90ZXh0dXJlU2l6ZTsKLSAgICAgICAgICAgICAg
ICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7CitzdGF0aWMgY29uc3QgY2hhciog
dmVydGV4U2hhZGVyU291cmNlID0KKyAgICBTVFJJTkdJRlkoCisgICAgICAgIHVuaWZvcm0gbWF0
NCB1X21hdHJpeDsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2ZsaXA7CisgICAgICAgIHVuaWZv
cm0gdmVjMiB1X3RleHR1cmVTaXplOworICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRleDsK
KyAgICAgICAgdmFyeWluZyB2ZWMyIHZfdGV4Q29vcmQ7CisgICAgICAgIHZhcnlpbmcgdmVjMiB2
X21hc2tUZXhDb29yZDsKKworICAgICAgICB2b2lkIG1haW4odm9pZCkKKyAgICAgICAgeworICAg
ICAgICAgICAgdmVjNCBwb3NpdGlvbiA9IGFfdmVydGV4OworICAgICAgICAgICAgdl90ZXhDb29y
ZCA9IHZlYzIocG9zaXRpb24ueCwgbWl4KHBvc2l0aW9uLnksIDEuIC0gcG9zaXRpb24ueSwgdV9m
bGlwKSkgKiB1X3RleHR1cmVTaXplOworICAgICAgICAgICAgdl9tYXNrVGV4Q29vcmQgPSB2ZWMy
KHBvc2l0aW9uKTsKKyAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gdV9tYXRyaXggKiBhX3ZlcnRl
eDsKKyAgICAgICAgfQorICAgICk7CisKKyNkZWZpbmUgR0xTTF9ESVJFQ1RJVkUoLi4uKSAiIyIj
X19WQV9BUkdTX18iXG4iCisjZGVmaW5lIERFRklORV9BUFBMSUVSKE5hbWUpIFwKKyAgICAiI2lm
ZGVmIEVOQUJMRV8iI05hbWUiXG4iIFwKKyAgICAiI2RlZmluZSBhcHBseSIjTmFtZSJJZk5lZWRl
ZCBhcHBseSIjTmFtZSJcbiJcCisgICAgIiNlbHNlXG4iXAorICAgICIjZGVmaW5lIGFwcGx5IiNO
YW1lIklmTmVlZGVkIG5vb3BcbiJcCisgICAgIiNlbmRpZlxuIgorCisjZGVmaW5lIFJFQ1RfVEVY
VFVSRV9ESVJFQ1RJVkUgXAorICAgIEdMU0xfRElSRUNUSVZFKGlmZGVmIEVOQUJMRV9SZWN0KSBc
CisgICAgICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyVHlwZSBzYW1wbGVyMkRSZWN0
KSBcCisgICAgICAgIEdMU0xfRElSRUNUSVZFKGRlZmluZSBTYW1wbGVyRnVuY3Rpb24gdGV4dHVy
ZTJEUmVjdCkgXAorICAgIEdMU0xfRElSRUNUSVZFKGVsc2UpIFwKKyAgICAgICAgR0xTTF9ESVJF
Q1RJVkUoZGVmaW5lIFNhbXBsZXJUeXBlIHNhbXBsZXIyRCkgXAorICAgICAgICBHTFNMX0RJUkVD
VElWRShkZWZpbmUgU2FtcGxlckZ1bmN0aW9uIHRleHR1cmUyRCkgXAorICAgIEdMU0xfRElSRUNU
SVZFKGVuZGlmKQorCisjZGVmaW5lIEVOQUJMRV9BUFBMSUVSKE5hbWUpICIjZGVmaW5lIEVOQUJM
RV8iI05hbWUiXG4iCisjZGVmaW5lIEJMVVJfQ09OU1RBTlRTIFwKKyAgICBHTFNMX0RJUkVDVElW
RShkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEggMTEpIFwKKyAgICBHTFNMX0RJUkVD
VElWRShkZWZpbmUgR0FVU1NJQU5fS0VSTkVMX1NURVAgMC4yKQorCisKK3N0YXRpYyBjb25zdCBj
aGFyKiBmcmFnbWVudFRlbXBsYXRlID0KKyAgICBERUZJTkVfQVBQTElFUihUZXh0dXJlKQorICAg
IERFRklORV9BUFBMSUVSKFNvbGlkQ29sb3IpCisgICAgREVGSU5FX0FQUExJRVIoT3BhY2l0eSkK
KyAgICBERUZJTkVfQVBQTElFUihNYXNrKQorICAgIERFRklORV9BUFBMSUVSKEFudGlhbGlhcykK
KyAgICBERUZJTkVfQVBQTElFUihHcmF5c2NhbGVGaWx0ZXIpCisgICAgREVGSU5FX0FQUExJRVIo
U2VwaWFGaWx0ZXIpCisgICAgREVGSU5FX0FQUExJRVIoU2F0dXJhdGVGaWx0ZXIpCisgICAgREVG
SU5FX0FQUExJRVIoSHVlUm90YXRlRmlsdGVyKQorICAgIERFRklORV9BUFBMSUVSKEludmVydEZp
bHRlcikKKyAgICBERUZJTkVfQVBQTElFUihCcmlnaHRuZXNzRmlsdGVyKQorICAgIERFRklORV9B
UFBMSUVSKENvbnRyYXN0RmlsdGVyKQorICAgIERFRklORV9BUFBMSUVSKE9wYWNpdHlGaWx0ZXIp
CisgICAgREVGSU5FX0FQUExJRVIoQmx1ckZpbHRlcikKKyAgICBERUZJTkVfQVBQTElFUihBbHBo
YUJsdXIpCisgICAgREVGSU5FX0FQUExJRVIoQ29udGVudFRleHR1cmUpCisgICAgUkVDVF9URVhU
VVJFX0RJUkVDVElWRQorICAgIEJMVVJfQ09OU1RBTlRTCisgICAgU1RSSU5HSUZZKAorICAgICAg
ICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKKyAgICAgICAgdW5pZm9ybSBTYW1wbGVyVHlwZSBz
X3NhbXBsZXI7CisgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHNfbWFzazsKKyAgICAgICAgdW5p
Zm9ybSBzYW1wbGVyMkQgc19jb250ZW50VGV4dHVyZTsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1
X29wYWNpdHk7CisgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOworICAgICAgICB2YXJ5
aW5nIHZlYzIgdl9tYXNrVGV4Q29vcmQ7CisgICAgICAgIHVuaWZvcm0gdmVjMyB1X2V4cGFuZGVk
UXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs4XTsKKyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2ZpbHRl
ckFtb3VudDsKKyAgICAgICAgdW5pZm9ybSB2ZWMyIHVfYmx1clJhZGl1czsKKyAgICAgICAgdW5p
Zm9ybSB2ZWMyIHVfc2hhZG93T2Zmc2V0OworICAgICAgICB1bmlmb3JtIHZlYzQgdV9jb2xvcjsK
KyAgICAgICAgdW5pZm9ybSBmbG9hdCB1X2dhdXNzaWFuS2VybmVsW0dBVVNTSUFOX0tFUk5FTF9I
QUxGX1dJRFRIXTsKKworICAgICAgICB2b2lkIG5vb3AoaW5vdXQgdmVjNCBkdW1teVBhcmFtZXRl
cikgeyB9CisKKyAgICAgICAgLy8gVGhlIGRhdGEgcGFzc2VkIGluIHVfZXhwYW5kZWRRdWFkRWRn
ZXNJblNjcmVlblNwYWNlIGlzIG1lcmVseSB0aGUKKyAgICAgICAgLy8gcHJlLXNjYWxlZCBjb2Vm
ZmVjaWVudHMgb2YgdGhlIGxpbmUgZXF1YXRpb25zIGRlc2NyaWJpbmcgdGhlIGZvdXIgZWRnZXMK
KyAgICAgICAgLy8gb2YgdGhlIGV4cGFuZGVkIHF1YWQgaW4gc2NyZWVuIHNwYWNlIGFuZCB0aGUg
cmVjdGFuZ3VsYXIgYm91bmRpbmcgYm94CisgICAgICAgIC8vIG9mIHRoZSBleHBhbmRlZCBxdWFk
LgorICAgICAgICAvLworICAgICAgICBmbG9hdCBub3JtYWxpemVkRGlzdGFuY2UodmVjMyBlZGdl
Q29lZmZpY2llbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGFyZSBkb2luZyBhIHNp
bXBsZSBkaXN0YW5jZSBjYWxjdWxhdGlvbiBoZXJlIGFjY29yZGluZyB0byB0aGUgZm9ybXVsYToK
KyAgICAgICAgICAgIC8vIChBKnAueCArIEIqcC55ICsgQykgLyBzcXJ0KEFeMiArIEJeMikgPSBk
aXN0YW5jZSBmcm9tIGxpbmUgdG8gcAorICAgICAgICAgICAgLy8gTm90ZSB0aGF0IEEsIEIgYW5k
IEMgaGF2ZSBhbHJlYWR5IGJlZW4gc2NhbGVkIGJ5IDEgLyBzcXJ0KEFeMiArIEJeMikuCisgICAg
ICAgICAgICByZXR1cm4gY2xhbXAoZG90KGVkZ2VDb2VmZmljaWVudCwgdmVjMyhnbF9GcmFnQ29v
cmQueHksIDEuKSksIDAuLCAxLik7CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBhbnRpYWxp
YXNRdWFkKHZlYzMgY29lZmZpY2llbnQxLCB2ZWMzIGNvZWZmaWNpZW50MiwgdmVjMyBjb2VmZmlj
aWVudDMsIHZlYzMgY29lZmZpY2llbnQ0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBOb3cg
d2Ugd2FudCB0byByZWR1Y2UgdGhlIGFscGhhIHZhbHVlIG9mIHRoZSBmcmFnbWVudCBpZiBpdCBp
cyBjbG9zZSB0byB0aGUKKyAgICAgICAgICAgIC8vIGVkZ2VzIG9mIHRoZSBleHBhbmRlZCBxdWFk
IChvciByZWN0YW5ndWxhciBib3VuZGluZyBib3ggLS0gd2hpY2ggc2VlbXMgdG8gYmUKKyAgICAg
ICAgICAgIC8vIGltcG9ydGFudCBmb3IgYmFja2ZhY2luZyBxdWFkcykuIE5vdGUgdGhhdCB3ZSBh
cmUgY29tYmluaW5nIHRoZSBjb250cmlidXRpb24KKyAgICAgICAgICAgIC8vIGZyb20gdGhlICh0
b3AgfHwgYm90dG9tKSBhbmQgKGxlZnQgfHwgcmlnaHQpIGVkZ2UgYnkgc2ltcGx5IG11bHRpcGx5
aW5nLiBUaGlzIGZvbGxvd3MKKyAgICAgICAgICAgIC8vIHRoZSBhcHByb2FjaCBkZXNjcmliZWQg
YXQ6IGh0dHA6Ly9odHRwLmRldmVsb3Blci5udmlkaWEuY29tL0dQVUdlbXMyL2dwdWdlbXMyX2No
YXB0ZXIyMi5odG1sLAorICAgICAgICAgICAgLy8gaW4gdGhpcyBjYXNlIHdpdGhvdXQgdXNpbmcg
R2F1c3NpYW4gd2VpZ2h0cy4KKyAgICAgICAgICAgIHJldHVybiBtaW4obm9ybWFsaXplZERpc3Rh
bmNlKGNvZWZmaWNpZW50MSksIG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDIpKQorICAg
ICAgICAgICAgICAgICogbWluKG5vcm1hbGl6ZWREaXN0YW5jZShjb2VmZmljaWVudDMpLCBub3Jt
YWxpemVkRGlzdGFuY2UoY29lZmZpY2llbnQ0KSk7CisgICAgICAgIH0KKworICAgICAgICBmbG9h
dCBhbnRpYWxpYXMoKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCBhbnRpYWxpYXNWYWx1
ZUZvclF1YWQgPSAKKyAgICAgICAgICAgICAgICBhbnRpYWxpYXNRdWFkKHVfZXhwYW5kZWRRdWFk
RWRnZXNJblNjcmVlblNwYWNlWzBdLAorICAgICAgICAgICAgICAgICAgICB1X2V4cGFuZGVkUXVh
ZEVkZ2VzSW5TY3JlZW5TcGFjZVsxXSwKKyAgICAgICAgICAgICAgICAgICAgdV9leHBhbmRlZFF1
YWRFZGdlc0luU2NyZWVuU3BhY2VbMl0sCisgICAgICAgICAgICAgICAgICAgIHVfZXhwYW5kZWRR
dWFkRWRnZXNJblNjcmVlblNwYWNlWzNdKTsKKworICAgICAgICAgICAgZmxvYXQgYW50aWFsaWFz
VmFsdWVGb3JCb3VuZGluZ1JlY3QgPSAKKyAgICAgICAgICAgICAgICBhbnRpYWxpYXNRdWFkKHVf
ZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzRdLAorICAgICAgICAgICAgICAgICAgICB1
X2V4cGFuZGVkUXVhZEVkZ2VzSW5TY3JlZW5TcGFjZVs1XSwKKyAgICAgICAgICAgICAgICAgICAg
dV9leHBhbmRlZFF1YWRFZGdlc0luU2NyZWVuU3BhY2VbNl0sCisgICAgICAgICAgICAgICAgICAg
IHVfZXhwYW5kZWRRdWFkRWRnZXNJblNjcmVlblNwYWNlWzddKTsKKworICAgICAgICAgICAgcmV0
dXJuIG1pbihhbnRpYWxpYXNWYWx1ZUZvclF1YWQsIGFudGlhbGlhc1ZhbHVlRm9yQm91bmRpbmdS
ZWN0KTsgICAgICAgICAgIAorICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhcHBseVRleHR1cmUo
aW5vdXQgdmVjNCBjb2xvcikgeyBjb2xvciA9IFNhbXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIHZf
dGV4Q29vcmQpOyB9CisgICAgICAgIHZvaWQgYXBwbHlPcGFjaXR5KGlub3V0IHZlYzQgY29sb3Ip
IHsgY29sb3IgKj0gdV9vcGFjaXR5OyB9CisgICAgICAgIHZvaWQgYXBwbHlBbnRpYWxpYXMoaW5v
dXQgdmVjNCBjb2xvcikgeyBjb2xvciAqPSBhbnRpYWxpYXMoKTsgfQorICAgICAgICB2b2lkIGFw
cGx5TWFzayhpbm91dCB2ZWM0IGNvbG9yKSB7IGNvbG9yICo9IHRleHR1cmUyRChzX21hc2ssIHZf
bWFza1RleENvb3JkKS5hOyB9CisKKyAgICAgICAgdm9pZCBhcHBseUdyYXlzY2FsZUZpbHRlcihp
bm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCBhbW91bnQgPSAx
LjAgLSB1X2ZpbHRlckFtb3VudDsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNCgoMC4yMTI2ICsg
MC43ODc0ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUyIC0gMC43MTUyICogYW1vdW50KSAq
IGNvbG9yLmcgKyAoMC4wNzIyIC0gMC4wNzIyICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAg
ICAgICAgICAgKDAuMjEyNiAtIDAuMjEyNiAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAr
IDAuMjg0OCAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkg
KiBjb2xvci5iLAorICAgICAgICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBhbW91bnQpICog
Y29sb3IuciArICgwLjcxNTIgLSAwLjcxNTIgKiBhbW91bnQpICogY29sb3IuZyArICgwLjA3MjIg
KyAwLjkyNzggKiBhbW91bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICBjb2xvci5hKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXBwbHlTZXBpYUZpbHRlcihpbm91dCB2ZWM0IGNv
bG9yKQorICAgICAgICB7CisgICAgICAgICAgICBmbG9hdCBhbW91bnQgPSAxLjAgLSB1X2ZpbHRl
ckFtb3VudDsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNCgoMC4zOTMgKyAwLjYwNyAqIGFtb3Vu
dCkgKiBjb2xvci5yICsgKDAuNzY5IC0gMC43NjkgKiBhbW91bnQpICogY29sb3IuZyArICgwLjE4
OSAtIDAuMTg5ICogYW1vdW50KSAqIGNvbG9yLmIsCisgICAgICAgICAgICAgICAgKDAuMzQ5IC0g
MC4zNDkgKiBhbW91bnQpICogY29sb3IuciArICgwLjY4NiArIDAuMzE0ICogYW1vdW50KSAqIGNv
bG9yLmcgKyAoMC4xNjggLSAwLjE2OCAqIGFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAg
ICAgICgwLjI3MiAtIDAuMjcyICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC41MzQgLSAwLjUzNCAq
IGFtb3VudCkgKiBjb2xvci5nICsgKDAuMTMxICsgMC44NjkgKiBhbW91bnQpICogY29sb3IuYiwK
KyAgICAgICAgICAgICAgICBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYXBw
bHlTYXR1cmF0ZUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAg
ICBjb2xvciA9IHZlYzQoKDAuMjEzICsgMC43ODcgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5y
ICsgKDAuNzE1IC0gMC43MTUgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0g
MC4wNzIgKiB1X2ZpbHRlckFtb3VudCkgKiBjb2xvci5iLAorICAgICAgICAgICAgICAgICgwLjIx
MyAtIDAuMjEzICogdV9maWx0ZXJBbW91bnQpICogY29sb3IuciArICgwLjcxNSArIDAuMjg1ICog
dV9maWx0ZXJBbW91bnQpICogY29sb3IuZyArICgwLjA3MiAtIDAuMDcyICogdV9maWx0ZXJBbW91
bnQpICogY29sb3IuYiwKKyAgICAgICAgICAgICAgICAoMC4yMTMgLSAwLjIxMyAqIHVfZmlsdGVy
QW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfZmlsdGVyQW1vdW50KSAqIGNv
bG9yLmcgKyAoMC4wNzIgKyAwLjkyOCAqIHVfZmlsdGVyQW1vdW50KSAqIGNvbG9yLmIsCisgICAg
ICAgICAgICAgICAgY29sb3IuYSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5SHVl
Um90YXRlRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZs
b2F0IHBpID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKKyAgICAgICAgICAgIGZsb2F0IGMgPSBj
b3ModV9maWx0ZXJBbW91bnQgKiBwaSAvIDE4MC4wKTsKKyAgICAgICAgICAgIGZsb2F0IHMgPSBz
aW4odV9maWx0ZXJBbW91bnQgKiBwaSAvIDE4MC4wKTsKKyAgICAgICAgICAgIGNvbG9yID0gdmVj
NChjb2xvci5yICogKDAuMjEzICsgYyAqIDAuNzg3IC0gcyAqIDAuMjEzKSArIGNvbG9yLmcgKiAo
MC43MTUgLSBjICogMC43MTUgLSBzICogMC43MTUpICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAw
LjA3MiArIHMgKiAwLjkyOCksCisgICAgICAgICAgICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMg
KiAwLjIxMyArIHMgKiAwLjE0MykgKyBjb2xvci5nICogKDAuNzE1ICsgYyAqIDAuMjg1ICsgcyAq
IDAuMTQwKSArIGNvbG9yLmIgKiAoMC4wNzIgLSBjICogMC4wNzIgLSBzICogMC4yODMpLAorICAg
ICAgICAgICAgICAgIGNvbG9yLnIgKiAoMC4yMTMgLSBjICogMC4yMTMgLSBzICogMC43ODcpICsg
IGNvbG9yLmcgKiAoMC43MTUgLSBjICogMC43MTUgKyBzICogMC43MTUpICsgY29sb3IuYiAqICgw
LjA3MiArIGMgKiAwLjkyOCArIHMgKiAwLjA3MiksCisgICAgICAgICAgICAgICAgY29sb3IuYSk7
CisgICAgICAgIH0KKworICAgICAgICBmbG9hdCBpbnZlcnQoZmxvYXQgbikgeyByZXR1cm4gKDEu
MCAtIG4pICogdV9maWx0ZXJBbW91bnQgKyBuICogKDEuMCAtIHVfZmlsdGVyQW1vdW50KTsgfQor
ICAgICAgICB2b2lkIGFwcGx5SW52ZXJ0RmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGNvbG9yID0gdmVjNChpbnZlcnQoY29sb3IuciksIGludmVydChjb2xv
ci5nKSwgaW52ZXJ0KGNvbG9yLmIpLCBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgYXBwbHlCcmlnaHRuZXNzRmlsdGVyKGlub3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGNvbG9yID0gdmVjNChjb2xvci5yZ2IgKiAoMS4wICsgdV9maWx0ZXJBbW91bnQp
LCBjb2xvci5hKTsKKyAgICAgICAgfQorCisgICAgICAgIGZsb2F0IGNvbnRyYXN0KGZsb2F0IG4p
IHsgcmV0dXJuIChuIC0gMC41KSAqIHVfZmlsdGVyQW1vdW50ICsgMC41OyB9CisgICAgICAgIHZv
aWQgYXBwbHlDb250cmFzdEZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAg
ICAgICAgICBjb2xvciA9IHZlYzQoY29udHJhc3QoY29sb3IuciksIGNvbnRyYXN0KGNvbG9yLmcp
LCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IGFwcGx5T3BhY2l0eUZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAg
ICAgICBjb2xvciA9IHZlYzQoY29sb3IuciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVf
ZmlsdGVyQW1vdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHZlYzQgc2FtcGxlQ29sb3JBdFJh
ZGl1cyhmbG9hdCByYWRpdXMpCisgICAgICAgIHsKKyAgICAgICAgICAgIHZlYzIgY29vcmQgPSB2
X3RleENvb3JkICsgcmFkaXVzICogdV9ibHVyUmFkaXVzOworICAgICAgICAgICAgcmV0dXJuIFNh
bXBsZXJGdW5jdGlvbihzX3NhbXBsZXIsIGNvb3JkKSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBj
b29yZC55ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CisgICAgICAgIH0K
KworICAgICAgICBmbG9hdCBzYW1wbGVBbHBoYUF0UmFkaXVzKGZsb2F0IHJhZGl1cykKKyAgICAg
ICAgeworICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgLSB1X3NoYWRvd09mZnNl
dCArIHJhZGl1cyAqIHVfYmx1clJhZGl1czsKKyAgICAgICAgICAgIHJldHVybiBTYW1wbGVyRnVu
Y3Rpb24oc19zYW1wbGVyLCBjb29yZCkuYSAqIGZsb2F0KGNvb3JkLnggPiAwLiAmJiBjb29yZC55
ID4gMC4gJiYgY29vcmQueCA8IDEuICYmIGNvb3JkLnkgPCAxLik7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGFwcGx5Qmx1ckZpbHRlcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7Cisg
ICAgICAgICAgICB2ZWM0IHRvdGFsID0gc2FtcGxlQ29sb3JBdFJhZGl1cygwLikgKiB1X2dhdXNz
aWFuS2VybmVsWzBdOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9L
RVJORUxfSEFMRl9XSURUSDsgaSsrKSB7CisgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxl
Q29sb3JBdFJhZGl1cyhmbG9hdChpKSAqIEdBVVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3Np
YW5LZXJuZWxbaV07CisgICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQ29sb3JBdFJhZGl1
cyhmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5l
bFtpXTsKICAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFy
KiB2ZXJ0ZXhTb2xpZENvbG9yID0KLSAgICAgICAgU1RSSU5HSUZZKAotICAgICAgICAgICAgdW5p
Zm9ybSBtYXQ0IHVfbWF0cml4OwotICAgICAgICAgICAgYXR0cmlidXRlIHZlYzQgYV92ZXJ0ZXg7
Ci0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICBnbF9Qb3NpdGlvbiA9IHVfbWF0cml4ICogYV92ZXJ0ZXg7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICk7CiAKKyAgICAgICAgICAgIGNvbG9yID0gdG90YWw7CisgICAgICAgIH0KIAotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudFNvbGlkQ29sb3IgPQotICAgICAgICBTVFJJTkdJ
RlkoCi0gICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAgICAgIHVu
aWZvcm0gdmVjNCB1X2NvbG9yOwotICAgICAgICAgICAgdm9pZCBtYWluKHZvaWQpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gdV9jb2xvcjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiB2ZXJ0ZXhGaWx0ZXIg
PQotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICBhdHRyaWJ1dGUgdmVjNCBhX3ZlcnRl
eDsKLSAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWM0IGFfdGV4Q29vcmQ7Ci0gICAgICAgICAgICB2
YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIHZfdGV4Q29vcmQgPSB2ZWMyKGFfdGV4Q29vcmQp
OwotICAgICAgICAgICAgICAgIGdsX1Bvc2l0aW9uID0gYV92ZXJ0ZXg7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICk7Ci0KLSNkZWZpbmUgU1RBTkRBUkRfRklMVEVSKC4uLikgXAotICAgICAgICAi
cHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7XG4iXAotICAgICAgICAidmFyeWluZyB2ZWMyIHZfdGV4
Q29vcmQ7XG4iXAotICAgICAgICAidW5pZm9ybSBmbG9hdCB1X2Ftb3VudDtcbiJcCi0gICAgICAg
ICJ1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7XG4iI19fVkFfQVJHU19fIFwKLSAgICAgICAg
InZvaWQgbWFpbih2b2lkKVxuIHsgZ2xfRnJhZ0NvbG9yID0gc2hhZGUodGV4dHVyZTJEKHNfc2Ft
cGxlciwgdl90ZXhDb29yZCkpOyB9IgotCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50
R3JheXNjYWxlRmlsdGVyID0KLSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAg
dmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgZmxvYXQgYW1vdW50ID0gMS4wIC0gdV9hbW91bnQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IHZlYzQoKDAuMjEyNiArIDAuNzg3NCAqIGFtb3VudCkgKiBjb2xvci5yICsgKDAuNzE1MiAtIDAu
NzE1MiAqIGFtb3VudCkgKiBjb2xvci5nICsgKDAuMDcyMiAtIDAuMDcyMiAqIGFtb3VudCkgKiBj
b2xvci5iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIxMjYgLSAwLjIxMjYgKiBh
bW91bnQpICogY29sb3IuciArICgwLjcxNTIgKyAwLjI4NDggKiBhbW91bnQpICogY29sb3IuZyAr
ICgwLjA3MjIgLSAwLjA3MjIgKiBhbW91bnQpICogY29sb3IuYiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoMC4yMTI2IC0gMC4yMTI2ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUy
IC0gMC43MTUyICogYW1vdW50KSAqIGNvbG9yLmcgKyAoMC4wNzIyICsgMC45Mjc4ICogYW1vdW50
KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuYSk7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRT
ZXBpYUZpbHRlciA9Ci0gICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIHZlYzQg
c2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZs
b2F0IGFtb3VudCA9IDEuMCAtIHVfYW1vdW50OwotICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0
KCgwLjM5MyArIDAuNjA3ICogYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43NjkgLSAwLjc2OSAqIGFt
b3VudCkgKiBjb2xvci5nICsgKDAuMTg5IC0gMC4xODkgKiBhbW91bnQpICogY29sb3IuYiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoMC4zNDkgLSAwLjM0OSAqIGFtb3VudCkgKiBjb2xv
ci5yICsgKDAuNjg2ICsgMC4zMTQgKiBhbW91bnQpICogY29sb3IuZyArICgwLjE2OCAtIDAuMTY4
ICogYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDAuMjcy
IC0gMC4yNzIgKiBhbW91bnQpICogY29sb3IuciArICgwLjUzNCAtIDAuNTM0ICogYW1vdW50KSAq
IGNvbG9yLmcgKyAoMC4xMzEgKyAwLjg2OSAqIGFtb3VudCkgKiBjb2xvci5iLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbG9yLmEpOwotICAgICAgICAgICAgfQotICAgICAgICApOwot
Ci0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2F0dXJhdGVGaWx0ZXIgPQotICAgICAg
ICBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICB2ZWM0IHNoYWRlKGxvd3AgdmVjNCBjb2xv
cikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNCgoMC4yMTMgKyAw
Ljc4NyAqIHVfYW1vdW50KSAqIGNvbG9yLnIgKyAoMC43MTUgLSAwLjcxNSAqIHVfYW1vdW50KSAq
IGNvbG9yLmcgKyAoMC4wNzIgLSAwLjA3MiAqIHVfYW1vdW50KSAqIGNvbG9yLmIsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKDAuMjEzIC0gMC4yMTMgKiB1X2Ftb3VudCkgKiBjb2xvci5y
ICsgKDAuNzE1ICsgMC4yODUgKiB1X2Ftb3VudCkgKiBjb2xvci5nICsgKDAuMDcyIC0gMC4wNzIg
KiB1X2Ftb3VudCkgKiBjb2xvci5iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICgwLjIx
MyAtIDAuMjEzICogdV9hbW91bnQpICogY29sb3IuciArICgwLjcxNSAtIDAuNzE1ICogdV9hbW91
bnQpICogY29sb3IuZyArICgwLjA3MiArIDAuOTI4ICogdV9hbW91bnQpICogY29sb3IuYiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEh1ZVJvdGF0ZUZpbHRlciA9
Ci0gICAgICAgIFNUQU5EQVJEX0ZJTFRFUigKLSAgICAgICAgICAgIHZlYzQgc2hhZGUobG93cCB2
ZWM0IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0IHBpID0gMy4x
NDE1OTI2NTM1ODk3OTMyMzg0NjsKLSAgICAgICAgICAgICAgICBmbG9hdCBjID0gY29zKHVfYW1v
dW50ICogcGkgLyAxODAuMCk7Ci0gICAgICAgICAgICAgICAgZmxvYXQgcyA9IHNpbih1X2Ftb3Vu
dCAqIHBpIC8gMTgwLjApOwotICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0KGNvbG9yLnIgKiAo
MC4yMTMgKyBjICogMC43ODcgLSBzICogMC4yMTMpICsgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAw
LjcxNSAtIHMgKiAwLjcxNSkgKyBjb2xvci5iICogKDAuMDcyIC0gYyAqIDAuMDcyICsgcyAqIDAu
OTI4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvci5yICogKDAuMjEzIC0gYyAq
IDAuMjEzICsgcyAqIDAuMTQzKSArIGNvbG9yLmcgKiAoMC43MTUgKyBjICogMC4yODUgKyBzICog
MC4xNDApICsgY29sb3IuYiAqICgwLjA3MiAtIGMgKiAwLjA3MiAtIHMgKiAwLjI4MyksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IuciAqICgwLjIxMyAtIGMgKiAwLjIxMyAtIHMg
KiAwLjc4NykgKyAgY29sb3IuZyAqICgwLjcxNSAtIGMgKiAwLjcxNSArIHMgKiAwLjcxNSkgKyBj
b2xvci5iICogKDAuMDcyICsgYyAqIDAuOTI4ICsgcyAqIDAuMDcyKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2xvci5hKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEludmVydEZpbHRlciA9Ci0gICAgICAgIFNUQU5E
QVJEX0ZJTFRFUigKLSAgICAgICAgICAgIGZsb2F0IGludmVydChsb3dwIGZsb2F0IG4pIHsgcmV0
dXJuICgxLjAgLSBuKSAqIHVfYW1vdW50ICsgbiAqICgxLjAgLSB1X2Ftb3VudCk7IH0KLSAgICAg
ICAgICAgIHZlYzQgc2hhZGUobG93cCB2ZWM0IGNvbG9yKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiB2ZWM0KGludmVydChjb2xvci5yKSwgaW52ZXJ0KGNvbG9yLmcpLCBp
bnZlcnQoY29sb3IuYiksIGNvbG9yLmEpOworICAgICAgICB2b2lkIGFwcGx5QWxwaGFCbHVyKGlu
b3V0IHZlYzQgY29sb3IpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2Ft
cGxlQWxwaGFBdFJhZGl1cygwLikgKiB1X2dhdXNzaWFuS2VybmVsWzBdOworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDE7IGkgPCBHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSDsgaSsrKSB7Cisg
ICAgICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdChpKSAqIEdB
VVNTSUFOX0tFUk5FTF9TVEVQKSAqIHVfZ2F1c3NpYW5LZXJuZWxbaV07CisgICAgICAgICAgICAg
ICAgdG90YWwgKz0gc2FtcGxlQWxwaGFBdFJhZGl1cyhmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5f
S0VSTkVMX1NURVApICogdV9nYXVzc2lhbktlcm5lbFtpXTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgKTsKIAotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEJyaWdodG5lc3NGaWx0ZXIg
PQotICAgICAgICBTVEFOREFSRF9GSUxURVIoCi0gICAgICAgICAgICB2ZWM0IHNoYWRlKGxvd3Ag
dmVjNCBjb2xvcikKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdmVjNChj
b2xvci5yZ2IgKiAoMS4wICsgdV9hbW91bnQpLCBjb2xvci5hKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudENvbnRyYXN0RmlsdGVy
ID0KLSAgICAgICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgZmxvYXQgY29udHJhc3Qo
bG93cCBmbG9hdCBuKSB7IHJldHVybiAobiAtIDAuNSkgKiB1X2Ftb3VudCArIDAuNTsgfQotICAg
ICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQgY29sb3IpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29udHJhc3QoY29sb3IuciksIGNvbnRyYXN0KGNvbG9y
LmcpLCBjb250cmFzdChjb2xvci5iKSwgY29sb3IuYSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICk7Ci0KLSAgICBzdGF0aWMgY29uc3QgY2hhciogZnJhZ21lbnRPcGFjaXR5RmlsdGVyID0KLSAg
ICAgICAgU1RBTkRBUkRfRklMVEVSKAotICAgICAgICAgICAgdmVjNCBzaGFkZShsb3dwIHZlYzQg
Y29sb3IpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQoY29sb3Iu
ciwgY29sb3IuZywgY29sb3IuYiwgY29sb3IuYSAqIHVfYW1vdW50KTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgKTsKLQotI2RlZmluZSBCTFVSX0NPTlNUQU5UUyAiI2RlZmluZSBHQVVTU0lBTl9L
RVJORUxfSEFMRl9XSURUSCAxMVxuI2RlZmluZSBHQVVTU0lBTl9LRVJORUxfU1RFUCAwLjJcbiIK
LQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBmcmFnbWVudEJsdXJGaWx0ZXIgPQotICAgICAgICBC
TFVSX0NPTlNUQU5UUwotICAgICAgICBTVFJJTkdJRlkoCi0gICAgICAgICAgICAvLyBDcmVhdGUg
YSBub3JtYWwgZGlzdHJpYnV0aW9uIG9mIDIxIHZhbHVlcyBiZXR3ZWVuIC0yIGFuZCAyLgotICAg
ICAgICAgICAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7Ci0gICAgICAgICAgICB2YXJ5aW5nIHZl
YzIgdl90ZXhDb29yZDsKLSAgICAgICAgICAgIHVuaWZvcm0gdmVjMiB1X2JsdXJSYWRpdXM7Ci0g
ICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7Ci0gICAgICAgICAgICB1bmlm
b3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwot
Ci0gICAgICAgICAgICB2ZWM0IHNhbXBsZUNvbG9yKGZsb2F0IHJhZGl1cykKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICB2ZWMyIGNvb3JkID0gdl90ZXhDb29yZCArIHJhZGl1cyAqIHVf
Ymx1clJhZGl1czsKLSAgICAgICAgICAgICAgICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxlciwg
Y29vcmQpICogZmxvYXQoY29vcmQueCA+IDAuICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwg
MS4gJiYgY29vcmQueSA8IDEuKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdmVjNCBi
bHVyKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB2ZWM0IHRvdGFsID0gc2FtcGxl
Q29sb3IoMC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAg
ICAgICAgICAgICAgdG90YWwgKz0gc2FtcGxlQ29sb3IoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJO
RUxfU1RFUCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAgICB0b3Rh
bCArPSBzYW1wbGVDb2xvcihmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICog
dV9nYXVzc2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gdG90YWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgbWFpbih2
b2lkKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IGJsdXIo
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAgIHN0YXRpYyBjb25zdCBjaGFyKiBm
cmFnbWVudFNoYWRvd0ZpbHRlcjEgPQotICAgICAgICBCTFVSX0NPTlNUQU5UUwotICAgICAgICBT
VFJJTkdJRlkoCi0gICAgICAgICAgICBwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKLSAgICAgICAg
ICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOwotICAgICAgICAgICAgdW5pZm9ybSBmbG9hdCB1
X2JsdXJSYWRpdXM7Ci0gICAgICAgICAgICB1bmlmb3JtIHZlYzIgdV9zaGFkb3dPZmZzZXQ7Ci0g
ICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBzX3NhbXBsZXI7Ci0gICAgICAgICAgICB1bmlm
b3JtIGZsb2F0IHVfZ2F1c3NpYW5LZXJuZWxbR0FVU1NJQU5fS0VSTkVMX0hBTEZfV0lEVEhdOwot
Ci0gICAgICAgICAgICBmbG9hdCBzYW1wbGVBbHBoYShmbG9hdCByYWRpdXMpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgdmVjMiBjb29yZCA9IHZfdGV4Q29vcmQgLSB1X3NoYWRvd09m
ZnNldCArIHZlYzIocmFkaXVzICogdV9ibHVyUmFkaXVzLCAwLik7Ci0gICAgICAgICAgICAgICAg
cmV0dXJuIHRleHR1cmUyRChzX3NhbXBsZXIsIGNvb3JkKS5hICogZmxvYXQoY29vcmQueCA+IDAu
ICYmIGNvb3JkLnkgPiAwLiAmJiBjb29yZC54IDwgMS4gJiYgY29vcmQueSA8IDEuKTsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgZmxvYXQgc2hhZG93Qmx1ckhvcml6b250YWwoKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEoMC4p
ICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMTsg
aSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAgICAgICAgICAg
ICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RFUCkg
KiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBzYW1w
bGVBbHBoYShmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVzc2lh
bktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1cm4g
dG90YWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZvaWQgbWFpbih2b2lkKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4sIDEuLCAx
LiwgMS4pICogc2hhZG93Qmx1ckhvcml6b250YWwoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
KTsKLQotICAgIC8vIFNlY29uZCBwYXNzOiB2ZXJ0aWNhbCBhbHBoYSBibHVyIGFuZCBjb21wb3Np
dGUgd2l0aCBvcmlnaW4uCi0gICAgc3RhdGljIGNvbnN0IGNoYXIqIGZyYWdtZW50U2hhZG93Rmls
dGVyMiA9Ci0gICAgICAgIEJMVVJfQ09OU1RBTlRTCi0gICAgICAgIFNUUklOR0lGWSgKLSAgICAg
ICAgICAgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OwotICAgICAgICAgICAgdmFyeWluZyB2ZWMy
IHZfdGV4Q29vcmQ7Ci0gICAgICAgICAgICB1bmlmb3JtIGZsb2F0IHVfYmx1clJhZGl1czsKLSAg
ICAgICAgICAgIHVuaWZvcm0gdmVjNCB1X3NoYWRvd0NvbG9yOwotICAgICAgICAgICAgdW5pZm9y
bSBzYW1wbGVyMkQgc19zYW1wbGVyOwotICAgICAgICAgICAgdW5pZm9ybSBzYW1wbGVyMkQgc19j
b250ZW50VGV4dHVyZTsKLSAgICAgICAgICAgIHVuaWZvcm0gZmxvYXQgdV9nYXVzc2lhbktlcm5l
bFtHQVVTU0lBTl9LRVJORUxfSEFMRl9XSURUSF07Ci0KLSAgICAgICAgICAgIGZsb2F0IHNhbXBs
ZUFscGhhKGZsb2F0IHIpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdmVjMiBjb29y
ZCA9IHZfdGV4Q29vcmQgKyB2ZWMyKDAuLCByICogdV9ibHVyUmFkaXVzKTsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gdGV4dHVyZTJEKHNfc2FtcGxlciwgY29vcmQpLmEgKiBmbG9hdChjb29yZC54
ID4gMC4gJiYgY29vcmQueSA+IDAuICYmIGNvb3JkLnggPCAxLiAmJiBjb29yZC55IDwgMS4pOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmbG9hdCBzaGFkb3dCbHVyVmVydGljYWwoKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGZsb2F0IHRvdGFsID0gc2FtcGxlQWxwaGEo
MC4pICogdV9nYXVzc2lhbktlcm5lbFswXTsKLSAgICAgICAgICAgICAgICBmb3IgKGludCBpID0g
MTsgaSA8IEdBVVNTSUFOX0tFUk5FTF9IQUxGX1dJRFRIOyBpKyspIHsKLSAgICAgICAgICAgICAg
ICAgICAgdG90YWwgKz0gc2FtcGxlQWxwaGEoZmxvYXQoaSkgKiBHQVVTU0lBTl9LRVJORUxfU1RF
UCkgKiB1X2dhdXNzaWFuS2VybmVsW2ldOwotICAgICAgICAgICAgICAgICAgICB0b3RhbCArPSBz
YW1wbGVBbHBoYShmbG9hdCgtMSAqIGkpICogR0FVU1NJQU5fS0VSTkVMX1NURVApICogdV9nYXVz
c2lhbktlcm5lbFtpXTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICByZXR1
cm4gdG90YWw7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHZlYzQgc291cmNlT3Zlcihs
b3dwIHZlYzQgc291cmNlLCB2ZWM0IGRlc3RpbmF0aW9uKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIC8vIENvbXBvc2l0ZSB0aGUgc2hhZG93IHdpdGggdGhlIG9yaWdpbmFsIHRleHR1
cmUuCi0gICAgICAgICAgICAgICAgcmV0dXJuIHNvdXJjZSArIGRlc3RpbmF0aW9uICogKDEuIC0g
c291cmNlLmEpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB2b2lkIG1haW4odm9pZCkK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSBzb3VyY2VPdmVy
KHRleHR1cmUyRChzX2NvbnRlbnRUZXh0dXJlLCB2X3RleENvb3JkKSwgc2hhZG93Qmx1clZlcnRp
Y2FsKCkgKiB1X3NoYWRvd0NvbG9yKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgKTsKLQotICAg
IGlmIChzcGVjcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgc3BlY3MucmVzaXplKFRleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpMYXN0RmlsdGVyKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBl
clNoYWRlck1hbmFnZXI6OkRlZmF1bHRdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTaW1wbGUsIGZyYWdt
ZW50U2ltcGxlKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNv
bGlkQ29sb3JdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhTb2xpZENvbG9yLCBmcmFnbWVudFNvbGlkQ29s
b3IpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6UmVjdF0gPSBT
aGFkZXJTcGVjKHZlcnRleFNpbXBsZSwgZnJhZ21lbnRSZWN0U2ltcGxlKTsKLSAgICAgICAgc3Bl
Y3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZF0gPSBTaGFkZXJTcGVjKHZlcnRl
eE9wYWNpdHlBbmRNYXNrLCBmcmFnbWVudE9wYWNpdHlBbmRNYXNrKTsKLSAgICAgICAgc3BlY3Nb
VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok1hc2tlZFJlY3RdID0gU2hhZGVyU3BlYyh2ZXJ0
ZXhPcGFjaXR5QW5kTWFzaywgZnJhZ21lbnRSZWN0T3BhY2l0eUFuZE1hc2spOwotICAgICAgICBz
cGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6QW50aWFsaWFzZWRdID0gU2hhZGVyU3Bl
Yyh2ZXJ0ZXhTaW1wbGUsIGZyYWdtZW50QW50aWFsaWFzaW5nTm9NYXNrKTsKLSAgICAgICAgc3Bl
Y3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OkdyYXlzY2FsZUZpbHRlcl0gPSBTaGFkZXJT
cGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRHcmF5c2NhbGVGaWx0ZXIpOwotICAgICAgICBzcGVj
c1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2VwaWFGaWx0ZXJdID0gU2hhZGVyU3BlYyh2
ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2VwaWFGaWx0ZXIpOwotICAgICAgICBzcGVjc1tUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6U2F0dXJhdGVGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhG
aWx0ZXIsIGZyYWdtZW50U2F0dXJhdGVGaWx0ZXIpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6SHVlUm90YXRlRmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4Rmls
dGVyLCBmcmFnbWVudEh1ZVJvdGF0ZUZpbHRlcik7Ci0gICAgICAgIHNwZWNzW1RleHR1cmVNYXBw
ZXJTaGFkZXJNYW5hZ2VyOjpCcmlnaHRuZXNzRmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4Rmls
dGVyLCBmcmFnbWVudEJyaWdodG5lc3NGaWx0ZXIpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6Q29udHJhc3RGaWx0ZXJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0
ZXIsIGZyYWdtZW50Q29udHJhc3RGaWx0ZXIpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVy
U2hhZGVyTWFuYWdlcjo6SW52ZXJ0RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBm
cmFnbWVudEludmVydEZpbHRlcik7Ci0gICAgICAgIHNwZWNzW1RleHR1cmVNYXBwZXJTaGFkZXJN
YW5hZ2VyOjpPcGFjaXR5RmlsdGVyXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVu
dE9wYWNpdHlGaWx0ZXIpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdl
cjo6Qmx1ckZpbHRlcl0gPSBTaGFkZXJTcGVjKHZlcnRleEZpbHRlciwgZnJhZ21lbnRCbHVyRmls
dGVyKTsKLSAgICAgICAgc3BlY3NbVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6OlNoYWRvd0Zp
bHRlclBhc3MxXSA9IFNoYWRlclNwZWModmVydGV4RmlsdGVyLCBmcmFnbWVudFNoYWRvd0ZpbHRl
cjEpOwotICAgICAgICBzcGVjc1tUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcjo6U2hhZG93Rmls
dGVyUGFzczJdID0gU2hhZGVyU3BlYyh2ZXJ0ZXhGaWx0ZXIsIGZyYWdtZW50U2hhZG93RmlsdGVy
Mik7Ci0gICAgfQotCi0gICAgQVNTRVJUKHNwZWNzLnNpemUoKSA+IGtleSk7Ci0gICAgU2hhZGVy
U3BlYyYgc3BlYyA9IHNwZWNzW2tleV07Ci0gICAgdmVydGV4U291cmNlID0gc3BlYy52ZXJ0ZXhT
aGFkZXI7Ci0gICAgZnJhZ21lbnRTb3VyY2UgPSBzcGVjLmZyYWdtZW50U2hhZGVyOworICAgICAg
ICAgICAgY29sb3IgKj0gdG90YWw7CisgICAgICAgIH0KKworICAgICAgICB2ZWM0IHNvdXJjZU92
ZXIodmVjNCBzcmMsIHZlYzQgZHN0KSB7IHJldHVybiBzcmMgKyBkc3QgKiAoMS4gLSBkc3QuYSk7
IH0KKworICAgICAgICB2b2lkIGFwcGx5Q29udGVudFRleHR1cmUoaW5vdXQgdmVjNCBjb2xvcikK
KyAgICAgICAgeworICAgICAgICAgICAgdmVjNCBjb250ZW50Q29sb3IgPSB0ZXh0dXJlMkQoc19j
b250ZW50VGV4dHVyZSwgdl90ZXhDb29yZCk7CisgICAgICAgICAgICBjb2xvciA9IHNvdXJjZU92
ZXIoY29udGVudENvbG9yLCBjb2xvcik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFwcGx5
U29saWRDb2xvcihpbm91dCB2ZWM0IGNvbG9yKQorICAgICAgICB7CisgICAgICAgICAgICBjb2xv
ciAqPSB1X2NvbG9yOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBtYWluKHZvaWQpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHZlYzQgY29sb3IgPSB2ZWM0KDEuLCAxLiwgMS4sIDEuKTsKKyAg
ICAgICAgICAgIGFwcGx5VGV4dHVyZUlmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5
U29saWRDb2xvcklmTmVlZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5QW50aWFsaWFzSWZO
ZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlNYXNrSWZOZWVkZWQoY29sb3IpOworICAg
ICAgICAgICAgYXBwbHlPcGFjaXR5SWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlH
cmF5c2NhbGVGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAgICBhcHBseVNlcGlhRmls
dGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlTYXR1cmF0ZUZpbHRlcklmTmVl
ZGVkKGNvbG9yKTsKKyAgICAgICAgICAgIGFwcGx5SHVlUm90YXRlRmlsdGVySWZOZWVkZWQoY29s
b3IpOworICAgICAgICAgICAgYXBwbHlJbnZlcnRGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAg
ICAgICAgICBhcHBseUJyaWdodG5lc3NGaWx0ZXJJZk5lZWRlZChjb2xvcik7CisgICAgICAgICAg
ICBhcHBseUNvbnRyYXN0RmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlP
cGFjaXR5RmlsdGVySWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlCbHVyRmlsdGVy
SWZOZWVkZWQoY29sb3IpOworICAgICAgICAgICAgYXBwbHlBbHBoYUJsdXJJZk5lZWRlZChjb2xv
cik7CisgICAgICAgICAgICBhcHBseUNvbnRlbnRUZXh0dXJlSWZOZWVkZWQoY29sb3IpOworICAg
ICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7CisgICAgICAgIH0KKyAgICApOworCisKK3N0
YXRpYyB2b2lkIGdldFNoYWRlclNwZWMoVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXI6Ok9wdGlv
bnMgb3B0aW9ucywgU3RyaW5nJiB2ZXJ0ZXhTb3VyY2UsIFN0cmluZyYgZnJhZ21lbnRTb3VyY2Up
Cit7CisgICAgU3RyaW5nQnVpbGRlciBmcmFnbWVudEJ1aWxkZXI7CisjZGVmaW5lIFNFVF9BUFBM
SUVSX0ZST01fT1BUSU9OUyhBcHBsaWVyKSBcCisgICAgaWYgKG9wdGlvbnMgJiBUZXh0dXJlTWFw
cGVyU2hhZGVyTWFuYWdlcjo6QXBwbGllcikgXAorICAgICAgICBmcmFnbWVudEJ1aWxkZXIuYXBw
ZW5kKEVOQUJMRV9BUFBMSUVSKEFwcGxpZXIpKTsKKworICAgIFNFVF9BUFBMSUVSX0ZST01fT1BU
SU9OUyhUZXh0dXJlKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhSZWN0KQorICAgIFNF
VF9BUFBMSUVSX0ZST01fT1BUSU9OUyhTb2xpZENvbG9yKQorICAgIFNFVF9BUFBMSUVSX0ZST01f
T1BUSU9OUyhPcGFjaXR5KQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhNYXNrKQorICAg
IFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhBbnRpYWxpYXMpCisgICAgU0VUX0FQUExJRVJfRlJP
TV9PUFRJT05TKEdyYXlzY2FsZUZpbHRlcikKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElPTlMo
U2VwaWFGaWx0ZXIpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKFNhdHVyYXRlRmlsdGVy
KQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9OUyhIdWVSb3RhdGVGaWx0ZXIpCisgICAgU0VU
X0FQUExJRVJfRlJPTV9PUFRJT05TKEJyaWdodG5lc3NGaWx0ZXIpCisgICAgU0VUX0FQUExJRVJf
RlJPTV9PUFRJT05TKENvbnRyYXN0RmlsdGVyKQorICAgIFNFVF9BUFBMSUVSX0ZST01fT1BUSU9O
UyhJbnZlcnRGaWx0ZXIpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKE9wYWNpdHlGaWx0
ZXIpCisgICAgU0VUX0FQUExJRVJfRlJPTV9PUFRJT05TKEJsdXJGaWx0ZXIpCisgICAgU0VUX0FQ
UExJRVJfRlJPTV9PUFRJT05TKEFscGhhQmx1cikKKyAgICBTRVRfQVBQTElFUl9GUk9NX09QVElP
TlMoQ29udGVudFRleHR1cmUpCisKKyAgICBmcmFnbWVudEJ1aWxkZXIuYXBwZW5kKGZyYWdtZW50
VGVtcGxhdGUpOworICAgIHZlcnRleFNvdXJjZSA9IHZlcnRleFNoYWRlclNvdXJjZTsKKyAgICBm
cmFnbWVudFNvdXJjZSA9IGZyYWdtZW50QnVpbGRlci50b1N0cmluZygpOwogfQogCiBUZXh0dXJl
TWFwcGVyU2hhZGVyTWFuYWdlcjo6VGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoR3JhcGhpY3ND
b250ZXh0M0QqIGNvbnRleHQpCkBAIC01MzQsMTcgKzM5OSwxNyBAQCBUZXh0dXJlTWFwcGVyU2hh
ZGVyTWFuYWdlcjo6flRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCkKIHsKIH0KIAotUGFzc1Jl
ZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gVGV4dHVyZU1hcHBlclNoYWRlck1hbmFn
ZXI6OmdldFNoYWRlclByb2dyYW0oU2hhZGVyS2V5IGtleSkKK1Bhc3NSZWZQdHI8VGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW0+IFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyOjpnZXRTaGFkZXJQ
cm9ncmFtKE9wdGlvbnMgb3B0aW9ucykKIHsKLSAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3Jh
bU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2dyYW1zLmZpbmQoa2V5KTsKKyAgICBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbU1hcDo6aXRlcmF0b3IgaXQgPSBtX3Byb2dyYW1zLmZpbmQob3B0aW9u
cyk7CiAgICAgaWYgKGl0ICE9IG1fcHJvZ3JhbXMuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdC0+
dmFsdWU7CiAKICAgICBTdHJpbmcgdmVydGV4U2hhZGVyOwogICAgIFN0cmluZyBmcmFnbWVudFNo
YWRlcjsKLSAgICBnZXRTaGFkZXJTcGVjKGtleSwgdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRl
cik7CisgICAgZ2V0U2hhZGVyU3BlYyhvcHRpb25zLCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hh
ZGVyKTsKICAgICBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+IHByb2dyYW0gPSBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Y3JlYXRlKG1fY29udGV4dCwgdmVydGV4U2hhZGVy
LCBmcmFnbWVudFNoYWRlcik7Ci0gICAgbV9wcm9ncmFtcy5hZGQoa2V5LCBwcm9ncmFtKTsKKyAg
ICBtX3Byb2dyYW1zLmFkZChvcHRpb25zLCBwcm9ncmFtKTsKICAgICByZXR1cm4gcHJvZ3JhbTsK
IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCmluZGV4IDYwNjA1
ZjQyZDBlMzIzODdjNDJhNGZkZDA1MzE0MjdlMDRhZDcyMmEuLmIzODIyYzRkOWU2OWJhZDRlOTFm
OWQ5M2Q5ZWQ3MDg1NTI2MzI3OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyU2hhZGVyTWFu
YWdlci5oCkBAIC01OSwxMCArNTksOSBAQCBwdWJsaWM6CiAgICAgVEVYTUFQX0RFQ0xBUkVfU0FN
UExFUihtYXNrKQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIFRFWE1BUF9ERUNMQVJF
X1VOSUZPUk0oYW1vdW50KQorICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZmlsdGVyQW1vdW50
KQogICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0oZ2F1c3NpYW5LZXJuZWwpCiAgICAgVEVYTUFQ
X0RFQ0xBUkVfVU5JRk9STShibHVyUmFkaXVzKQotICAgIFRFWE1BUF9ERUNMQVJFX1VOSUZPUk0o
c2hhZG93Q29sb3IpCiAgICAgVEVYTUFQX0RFQ0xBUkVfVU5JRk9STShzaGFkb3dPZmZzZXQpCiAg
ICAgVEVYTUFQX0RFQ0xBUkVfU0FNUExFUihjb250ZW50VGV4dHVyZSkKICNlbmRpZgpAQCAtODIs
MzYgKzgxLDM2IEBAIHByaXZhdGU6CiAKIGNsYXNzIFRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2Vy
IHsKIHB1YmxpYzoKLSAgICBlbnVtIFNoYWRlcktleSB7Ci0gICAgICAgIEludmFsaWQgPSAwLAot
ICAgICAgICBEZWZhdWx0LAotICAgICAgICBSZWN0LAotICAgICAgICBNYXNrZWQsCi0gICAgICAg
IE1hc2tlZFJlY3QsCi0gICAgICAgIFNvbGlkQ29sb3IsCi0gICAgICAgIEFudGlhbGlhc2VkLAot
ICAgICAgICBHcmF5c2NhbGVGaWx0ZXIsCi0gICAgICAgIFNlcGlhRmlsdGVyLAotICAgICAgICBT
YXR1cmF0ZUZpbHRlciwKLSAgICAgICAgSHVlUm90YXRlRmlsdGVyLAotICAgICAgICBCcmlnaHRu
ZXNzRmlsdGVyLAotICAgICAgICBDb250cmFzdEZpbHRlciwKLSAgICAgICAgT3BhY2l0eUZpbHRl
ciwKLSAgICAgICAgSW52ZXJ0RmlsdGVyLAotICAgICAgICBCbHVyRmlsdGVyLAotICAgICAgICBT
aGFkb3dGaWx0ZXJQYXNzMSwKLSAgICAgICAgU2hhZG93RmlsdGVyUGFzczIsCi0gICAgICAgIExh
c3RGaWx0ZXIKKyAgICBlbnVtIE9wdGlvbiB7CisgICAgICAgIFRleHR1cmUgICAgICAgICAgPSAx
TCA8PCAwLAorICAgICAgICBSZWN0ICAgICAgICAgICAgID0gMUwgPDwgMSwKKyAgICAgICAgU29s
aWRDb2xvciAgICAgICA9IDFMIDw8IDIsCisgICAgICAgIE9wYWNpdHkgICAgICAgICAgPSAxTCA8
PCAzLAorICAgICAgICBNYXNrICAgICAgICAgICAgID0gMUwgPDwgNCwKKyAgICAgICAgQW50aWFs
aWFzICAgICAgICA9IDFMIDw8IDUsCisgICAgICAgIEdyYXlzY2FsZUZpbHRlciAgPSAxTCA8PCA2
LAorICAgICAgICBTZXBpYUZpbHRlciAgICAgID0gMUwgPDwgNywKKyAgICAgICAgU2F0dXJhdGVG
aWx0ZXIgICA9IDFMIDw8IDgsCisgICAgICAgIEh1ZVJvdGF0ZUZpbHRlciAgPSAxTCA8PCA5LAor
ICAgICAgICBCcmlnaHRuZXNzRmlsdGVyID0gMUwgPDwgMTAsCisgICAgICAgIENvbnRyYXN0Rmls
dGVyICAgPSAxTCA8PCAxMSwKKyAgICAgICAgSW52ZXJ0RmlsdGVyICAgICA9IDFMIDw8IDEyLAor
ICAgICAgICBPcGFjaXR5RmlsdGVyICAgID0gMUwgPDwgMTMsCisgICAgICAgIEJsdXJGaWx0ZXIg
ICAgICAgPSAxTCA8PCAxNCwKKyAgICAgICAgQWxwaGFCbHVyICAgICAgICA9IDFMIDw8IDE1LAor
ICAgICAgICBDb250ZW50VGV4dHVyZSAgID0gMUwgPDwgMTYKICAgICB9OwogCisgICAgdHlwZWRl
ZiB1bnNpZ25lZCBPcHRpb25zOworCiAgICAgVGV4dHVyZU1hcHBlclNoYWRlck1hbmFnZXIoKSB7
IH0KICAgICBleHBsaWNpdCBUZXh0dXJlTWFwcGVyU2hhZGVyTWFuYWdlcihHcmFwaGljc0NvbnRl
eHQzRCopOwogICAgIHZpcnR1YWwgflRleHR1cmVNYXBwZXJTaGFkZXJNYW5hZ2VyKCk7CiAKLSAg
ICBQYXNzUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBnZXRTaGFkZXJQcm9ncmFt
KFNoYWRlcktleSk7CisgICAgUGFzc1JlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4g
Z2V0U2hhZGVyUHJvZ3JhbShPcHRpb25zKTsKIAogcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hN
YXA8U2hhZGVyS2V5LCBSZWZQdHI8VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0+LCBEZWZhdWx0
SGFzaDxpbnQ+OjpIYXNoLCBIYXNoVHJhaXRzPGludD4gPiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbU1hcDsKKyAgICB0eXBlZGVmIEhhc2hNYXA8T3B0aW9ucywgUmVmUHRyPFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtPiA+IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwOwogICAgIFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtTWFwIG1fcHJvZ3JhbXM7CiAgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CiB9Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>