<?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>34719</bug_id>
          
          <creation_ts>2010-02-08 13:01:19 -0800</creation_ts>
          <short_desc>WebGL rendering results must be made available to Canvas.toDataURL and 2D drawImage</short_desc>
          <delta_ts>2010-07-22 17:43:24 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>gman</cc>
    
    <cc>jamesr</cc>
    
    <cc>japhet</cc>
    
    <cc>mdelaney7</cc>
    
    <cc>oliver</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit-ews</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>188738</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-02-08 13:01:19 -0800</bug_when>
    <thetext>Rendering into one Canvas element using WebGL and then drawing that Canvas into another using CanvasRenderingContext2D.drawImage() does not always work. Appropriate hooks need to be placed in the Canvas implementation to force the WebGL context to prepare its contents for drawing via the 2D Canvas APIs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>235389</commentid>
    <comment_count>1</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-06-08 11:23:41 -0700</bug_when>
    <thetext>The same problem exists with Canvas.toDataURL().

Both of these APIs must respect the premultipliedAlpha flag in the WebGLContextAttributes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246365</commentid>
    <comment_count>2</comment_count>
      <attachid>60461</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-03 16:40:08 -0700</bug_when>
    <thetext>Created attachment 60461
patch

Tested in both Safari and Chrome in Mac in Release mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246387</commentid>
    <comment_count>3</comment_count>
      <attachid>60461</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-07-03 22:30:01 -0700</bug_when>
    <thetext>Comment on attachment 60461
patch

paintRenderingResultsToCanvas is leaking &apos;pixels&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>246460</commentid>
    <comment_count>4</comment_count>
      <attachid>60482</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-04 14:57:52 -0700</bug_when>
    <thetext>Created attachment 60482
revised patch: responding to Simon Fraser&apos;s review

Use OwnArrayPtr for pixels to avoid leak.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247188</commentid>
    <comment_count>5</comment_count>
      <attachid>60482</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-07-06 13:01:04 -0700</bug_when>
    <thetext>Comment on attachment 60482
revised patch: responding to Simon Fraser&apos;s review


WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:256
 +      // BEGIN: the same code as in WebGraphicsContext3DDefaultImpl.cpp::readBackFramebuffer
Either share the code, or remove the comment. As-is, the comment is not useful.

Can you share code with GraphicsContext3D::readPixels()?

WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:290
 +      CGImageRef cgImage = CGImageCreate(m_currentWidth,
You should use RetainPtr for the dataProvider, colorSpace and cgImage.

Do you need to save/restore the state in the imageBuffer-&gt;context()?

WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:307
 +      // We want to completely overwrite the previous frame&apos;s rendering results.

Is that described in a spec anywhere?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247937</commentid>
    <comment_count>6</comment_count>
      <attachid>60482</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-07 19:10:04 -0700</bug_when>
    <thetext>Comment on attachment 60482
revised patch: responding to Simon Fraser&apos;s review

Generally looks good, but one high-level comment about code refactoring which I would prefer be done.


WebCore/platform/graphics/GraphicsContext3D.h:711
 +          void paintRenderingResultsToCanvas(WebGLRenderingContext*context);
Formatting: WebGLRenderingContext* context

WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:256
 +      // BEGIN: the same code as in WebGraphicsContext3DDefaultImpl.cpp::readBackFramebuffer
The CG portions of this code should be refactored rather than duplicated. Given that the original code came from GraphicsContext3D.cpp in WebKit/chromium/src, it should be possible to refactor it into WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp. It might be necessary to split it into two routines (before/after readback), or pass a callback function. If it seems reasonable to do the refactoring, please do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247941</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-07 19:14:28 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:307
&gt;  +      // We want to completely overwrite the previous frame&apos;s rendering results.
&gt; 
&gt; Is that described in a spec anywhere?

The comment refers to the fact that the kCGBlendModeCopy blend mode is used, so that transparent pixels aren&apos;t blended with any content previously in the image.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247948</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-07-07 19:22:15 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:307
&gt; &gt;  +      // We want to completely overwrite the previous frame&apos;s rendering results.
&gt; &gt; 
&gt; &gt; Is that described in a spec anywhere?
&gt; 
&gt; The comment refers to the fact that the kCGBlendModeCopy blend mode is used, so that transparent pixels aren&apos;t blended with any content previously in the image.

I realize that, but where is that behavior spec&apos;d? I imagine this affect the outcome of mixing a 2D and 2D context on the same canvas, but I&apos;d hope that transparent pixels in the 3D context wouldn&apos;t clobber earlier 2D drawing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247955</commentid>
    <comment_count>9</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-07 19:33:57 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:307
&gt; &gt; &gt;  +      // We want to completely overwrite the previous frame&apos;s rendering results.
&gt; &gt; &gt; 
&gt; &gt; &gt; Is that described in a spec anywhere?
&gt; &gt; 
&gt; &gt; The comment refers to the fact that the kCGBlendModeCopy blend mode is used, so that transparent pixels aren&apos;t blended with any content previously in the image.
&gt; 
&gt; I realize that, but where is that behavior spec&apos;d? I imagine this affect the outcome of mixing a 2D and 2D context on the same canvas, but I&apos;d hope that transparent pixels in the 3D context wouldn&apos;t clobber earlier 2D drawing.

There have been some changes pending to the HTML Canvas specification for some time now regarding mixing of contexts, and I believe the latest resolution is that using the 2D and 3D contexts simultaneously will be explicitly disallowed in the spec. Regardless, even if you&apos;re just using the 3D context, it&apos;s still necessary to completely overwrite the rendering results. Consider the case where you draw one 3D scene with a certain set of pixels as transparent, and then perform a drawImage call with that canvas as source. Then draw a different 3D scene with a different set of transparent pixels, and perform another similar drawImage call (into a second, clean, canvas). It would be an error if portions of the first scene were visible where the pixels are transparent in the second scene because the data read back from the graphics card was blended with the previously read back data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>247973</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-07-07 20:41:43 -0700</bug_when>
    <thetext>Fair enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>248748</commentid>
    <comment_count>11</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-07-08 22:44:28 -0700</bug_when>
    <thetext>This may also fix bug 30722.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249540</commentid>
    <comment_count>12</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-10 12:28:12 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 60482 [details])
&gt; 
&gt; WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:256
&gt;  +      // BEGIN: the same code as in WebGraphicsContext3DDefaultImpl.cpp::readBackFramebuffer
&gt; Either share the code, or remove the comment. As-is, the comment is not useful.

Removed.

&gt; 
&gt; Can you share code with GraphicsContext3D::readPixels()?

readPixels() logic is different.  Here we always read from backbuffer, whereas readPixels might read from user created fbo.

&gt; 
&gt; WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:290
&gt;  +      CGImageRef cgImage = CGImageCreate(m_currentWidth,
&gt; You should use RetainPtr for the dataProvider, colorSpace and cgImage.
&gt; 
&gt; Do you need to save/restore the state in the imageBuffer-&gt;context()?

Done.

&gt; 
&gt; WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:307
&gt;  +      // We want to completely overwrite the previous frame&apos;s rendering results.
&gt; 
&gt; Is that described in a spec anywhere?
&gt; 
&gt; r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249541</commentid>
    <comment_count>13</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-10 12:28:48 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 60482 [details])
&gt; Generally looks good, but one high-level comment about code refactoring which I would prefer be done.
&gt; 
&gt; 
&gt; WebCore/platform/graphics/GraphicsContext3D.h:711
&gt;  +          void paintRenderingResultsToCanvas(WebGLRenderingContext*context);
&gt; Formatting: WebGLRenderingContext* context

Done.

&gt; 
&gt; WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:256
&gt;  +      // BEGIN: the same code as in WebGraphicsContext3DDefaultImpl.cpp::readBackFramebuffer
&gt; The CG portions of this code should be refactored rather than duplicated. Given that the original code came from GraphicsContext3D.cpp in WebKit/chromium/src, it should be possible to refactor it into WebCore/platform/graphics/cg/GraphicsContext3DCG.cpp. It might be necessary to split it into two routines (before/after readback), or pass a callback function. If it seems reasonable to do the refactoring, please do so.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249542</commentid>
    <comment_count>14</comment_count>
      <attachid>61159</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-10 12:30:02 -0700</bug_when>
    <thetext>Created attachment 61159
revised patch: responding to Simon Fraser and kbr&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249586</commentid>
    <comment_count>15</comment_count>
      <attachid>61170</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-10 17:47:42 -0700</bug_when>
    <thetext>Created attachment 61170
revised patch: fix a bug

in WebGLRenderingContext::markedContextChanged(), always set the dirty flag when context has changed.

Also, add another test canvas-test.html for this change.  (This test is copied from WebGL conformance tests with minor modifications).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249591</commentid>
    <comment_count>16</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-10 18:27:53 -0700</bug_when>
    <thetext>Yike, this patch is so out-of-date.  CanvasSurface.h/cpp is gone.  Have to manually merge.

Add jamesr@chromium.org to cc list since he did the code refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249592</commentid>
    <comment_count>17</comment_count>
      <attachid>61172</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-10 18:35:15 -0700</bug_when>
    <thetext>Created attachment 61172
revised patch: resolving svn merge conflicts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250881</commentid>
    <comment_count>18</comment_count>
      <attachid>61447</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-13 18:15:56 -0700</bug_when>
    <thetext>Created attachment 61447
revised patch: deal with Qt part of GraphicsContext3D

Try my luck!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250884</commentid>
    <comment_count>19</comment_count>
      <attachid>61449</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-13 18:18:19 -0700</bug_when>
    <thetext>Created attachment 61449
revised patch: fix a ChangeLog issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250894</commentid>
    <comment_count>20</comment_count>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2010-07-13 18:27:43 -0700</bug_when>
    <thetext>Attachment 61449 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/3523150</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250904</commentid>
    <comment_count>21</comment_count>
      <attachid>61451</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-13 18:42:56 -0700</bug_when>
    <thetext>Created attachment 61451
revised patch: fix the Qt bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>250914</commentid>
    <comment_count>22</comment_count>
      <attachid>61457</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-13 19:13:15 -0700</bug_when>
    <thetext>Created attachment 61457
revised patch

Seems like Qt/Gtk/Win bots failure may have nothing to do with CG stuff.  Revert the changes I made based on the blame-CG assumption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252075</commentid>
    <comment_count>23</comment_count>
      <attachid>61712</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-15 13:44:11 -0700</bug_when>
    <thetext>Created attachment 61712
revised patch

Using kbr&apos;s script to sync the two tests in this patch with khronos conformance tests.  No other changes,</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252098</commentid>
    <comment_count>24</comment_count>
      <attachid>61712</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-15 14:12:35 -0700</bug_when>
    <thetext>Comment on attachment 61712
revised patch

Looks good. Thanks for waiting and keeping the tests in sync.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252185</commentid>
    <comment_count>25</comment_count>
      <attachid>61712</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-07-15 15:44:00 -0700</bug_when>
    <thetext>Comment on attachment 61712
revised patch


&gt; +#if ENABLE(3D_CANVAS)
&gt; +    if (sourceCanvas-&gt;is3D()) {
&gt; +        WebGLRenderingContext* context3d = reinterpret_cast&lt;WebGLRenderingContext*&gt;(sourceCanvas-&gt;renderingContext());
&gt; +        context3d-&gt;paintRenderingResultsToCanvas();
&gt; +    }
&gt; +#endif
&gt; +

We probably shouldn&apos;t be doing 3D things in CanvasRenderingContext2D.



&gt; +  intervalId = window.setInterval(function() {

If there&apos;s any way to make this test work without setInterval, please do so, lest it be slow and flaky.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252223</commentid>
    <comment_count>26</comment_count>
      <attachid>61747</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-15 16:49:51 -0700</bug_when>
    <thetext>Created attachment 61747
revised patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252227</commentid>
    <comment_count>27</comment_count>
      <attachid>61747</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-15 16:53:47 -0700</bug_when>
    <thetext>Comment on attachment 61747
revised patch

This looks better to me.

I think the setInterval call is needed in the test (I&apos;m not the test author but there&apos;s probably a reason it was used), but the modifications that have been made should prevent any flakiness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252228</commentid>
    <comment_count>28</comment_count>
      <attachid>61747</attachid>
    <who name="Nate Chapin">japhet</who>
    <bug_when>2010-07-15 16:58:30 -0700</bug_when>
    <thetext>Comment on attachment 61747
revised patch

Alright, sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>252262</commentid>
    <comment_count>29</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-07-15 18:01:14 -0700</bug_when>
    <thetext>Committed r63502: &lt;http://trac.webkit.org/changeset/63502&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253105</commentid>
    <comment_count>30</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2010-07-19 00:27:52 -0700</bug_when>
    <thetext>This patch does not builds on mac-leopard:

/Users/hzoli/WebKitHZ/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm: In member function &apos;void WebCore::GraphicsContext3D::paintRenderingResultsToCanvas(WebCore::WebGLRenderingContext*)&apos;:
/Users/hzoli/WebKitHZ/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:257: warning: &apos;mustRestoreFBO&apos; may be used uninitialized in this function

I think it should be false by default, isn&apos;t it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253409</commentid>
    <comment_count>31</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-19 14:57:07 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; This patch does not builds on mac-leopard:
&gt; 
&gt; /Users/hzoli/WebKitHZ/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm: In member function &apos;void WebCore::GraphicsContext3D::paintRenderingResultsToCanvas(WebCore::WebGLRenderingContext*)&apos;:
&gt; /Users/hzoli/WebKitHZ/WebCore/platform/graphics/mac/GraphicsContext3DMac.mm:257: warning: &apos;mustRestoreFBO&apos; may be used uninitialized in this function
&gt; 
&gt; I think it should be false by default, isn&apos;t it?

Yes, you&apos;re right. I&apos;ll upload a patch fixing this. Not sure why it wasn&apos;t caught by the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253410</commentid>
    <comment_count>32</comment_count>
      <attachid>61996</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-19 14:58:18 -0700</bug_when>
    <thetext>Created attachment 61996
Patch fixing compiler warning

From the ChangeLog:

Fixed compiler warning introduced by original patch. No new tests; covered by existing tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253514</commentid>
    <comment_count>33</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-19 18:45:47 -0700</bug_when>
    <thetext>Committed r63705: &lt;http://trac.webkit.org/changeset/63705&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253535</commentid>
    <comment_count>34</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-07-19 20:24:37 -0700</bug_when>
    <thetext>Does this fix bug 30722?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>253783</commentid>
    <comment_count>35</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-07-20 09:59:35 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; Does this fix bug 30722?

I&apos;m not sure (and Mo is on vacation this week). Was there a test case for 30722?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255013</commentid>
    <comment_count>36</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-07-22 15:08:24 -0700</bug_when>
    <thetext>This caused bug 42852.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255109</commentid>
    <comment_count>37</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-07-22 17:43:24 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; (In reply to comment #34)
&gt; &gt; Does this fix bug 30722?
&gt; 
&gt; I&apos;m not sure (and Mo is on vacation this week). Was there a test case for 30722?

See bug 42862.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60461</attachid>
            <date>2010-07-03 16:40:08 -0700</date>
            <delta_ts>2010-07-04 14:57:52 -0700</delta_ts>
            <desc>patch</desc>
            <filename>canvas.patch</filename>
            <type>text/plain</type>
            <size>19204</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjQ1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDctMDMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFV
UkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1w
aXhlbHN0b3JlaS5odG1sCisKKyAgICAgICAgKiBkb20vQ2FudmFzU3VyZmFjZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzU3VyZmFjZTo6dG9EYXRhVVJMKTogTWFrZSBpdCB2aXJ0dWFsIHNv
IGl0IGNhbiBiZSBvdmVyd3JpdHRlbiBpbiBIVE1MQ2FudmFzRWxlbWVudC4KKyAgICAgICAgKiBo
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50Ojp0b0RhdGFVUkwpOiBQYWludCB0aGUgV2ViR0wgcmVuZGVyaW5nIHJlc3VsdHMgdG8g
Y2FudmFzIGlmIGl0J3MgM2QuCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTCk6IE92ZXJ3cml0
ZSB0b0RhdGFVUkwoKS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3SW1hZ2UpOiBQYWludCB0aGUgV2ViR0wgcmVuZGVyaW5nIHJlc3VsdHMgdG8gY2FudmFzIGlm
IGl0J3MgM2QgYmVmb3JlIGRyYXdpbmcuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOiBQYWludCB0aGUgV2ViR0wgcmVuZGVy
aW5nIHJlc3VsdHMgdG8gY2FudmFzIGlmIGl0J3MgZGlydHkuCisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6IERlY2xhcmUgcGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oOiBEZWNsYXJlIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KTogSW1wbGVtZW50IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisKIDIwMTAtMDct
MDMgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVWdoLiAg
SGF2ZSB0byBwdXQgdGhlIGRlc3RydWN0b3IgaW4gdGhlIC5oIGZpbGUgc2luY2UgdGhlIC5jY3Ag
aXNuJ3QgY29tcGlsZWQgeWV0LgpJbmRleDogV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAkocmV2aXNpb24gNjI0MDkp
CisrKyBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDgg
KzU5LDggQEAgcHVibGljOgogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53
aWR0aCgpOyB9CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQo
KTsgfQogCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25z
dCBkb3VibGUqIHF1YWxpdHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgdG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0b0Rh
dGFVUkwobWltZVR5cGUsIDAsIGVjKTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHksIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHRvRGF0YVVSTChtaW1lVHlwZSwgMCwgZWMp
OyB9CiAKICAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gNjI0MDkpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzcsNiArMjc3LDE1IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzM0QoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczNkKCk7CiB9CisKK1N0cmluZyBI
VE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IGRvdWJsZSogcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKGlzM0QoKSkg
eworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQzZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4ocmVuZGVyaW5nQ29udGV4dCgpKTsKKyAgICAg
ICAgY29udGV4dDNkLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIH0KKyAg
ICByZXR1cm4gQ2FudmFzU3VyZmFjZTo6dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBlYyk7
Cit9CiAjZW5kaWYKIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVD
aGFuZ2UgY2hhbmdlKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHJldmlzaW9uIDYy
NDA5KQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDYgKzg5LDkgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCiAg
ICAgYm9vbCBpczNEKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0b0RhdGFVUkwobWltZVR5cGUsIDAsIGVjKTsg
fQogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA2MjQwOSkKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNiArNjMsMTAgQEAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1VudXNlZFBhcmFtLmg+CiAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorI2luY2x1ZGUgIldlYkdM
UmVuZGVyaW5nQ29udGV4dC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMjQsNiArMTEyOCwxMyBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgaWYgKCFzb3VyY2VDYW52YXMtPm9yaWdpbkNs
ZWFuKCkpCiAgICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7CiAKKyNpZiBFTkFC
TEUoM0RfQ0FOVkFTKQorICAgIGlmIChzb3VyY2VDYW52YXMtPmlzM0QoKSkgeworICAgICAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQzZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kj4oc291cmNlQ2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpOworICAg
ICAgICBjb250ZXh0M2QtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgfQor
I2VuZGlmCisKICAgICBjLT5kcmF3SW1hZ2UoYnVmZmVyLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBkZXN0UmVjdCwgc291cmNlUmVjdCwgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSk7CiAg
ICAgd2lsbERyYXcoZGVzdFJlY3QpOyAvLyBUaGlzIGNhbGwgY29tZXMgYWZ0ZXIgZHJhd0ltYWdl
LCBzaW5jZSB0aGUgYnVmZmVyIHdlIGRyYXcgaW50byBtYXkgYmUgb3VyIG93biwgYW5kIHdlIG5l
ZWQgdG8gbWFrZSBzdXJlIGl0IGlzIGRpcnR5LgogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IEFyZ3VhYmx5IHdpbGxEcmF3IHNob3VsZCBiZWNvbWUgZGlkRHJhdyBhbmQgb2NjdXIg
YWZ0ZXIgZHJhd2luZyBjYWxscyBhbmQgbm90IGJlZm9yZSB0aGVtIHRvIGF2b2lkIHByb2JsZW1z
IGxpa2UgdGhpcy4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAJKHJldmlzaW9uIDYyNDA5KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDE2IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dEMKICNlbmRpZgogfQogCiti
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMo
KQoreworICAgIGlmIChtX21hcmtlZENhbnZhc0RpcnR5KSB7CisgICAgICAgIG1fbWFya2VkQ2Fu
dmFzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJlZ2luUGFpbnQoKQog
ewogICAgIGlmIChtX21hcmtlZENhbnZhc0RpcnR5KSB7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDYyNDA5KQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzA0LDYgKzMwNCwxMCBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAgICAgCiAgICAgICAgIHZv
aWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCisgICAgICAgIC8vIFJldHVybiB2
YWx1ZSB0cnVlIGluZGljYXRlcyBjYW52YXMgaXMgdXBkYXRlZCBkdXJpbmcgdGhlIGNhbGwsCisg
ICAgICAgIC8vIGZhbHNlIGluZGljYXRlcyBubyB1cGRhdGVzLgorICAgICAgICBib29sIHBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisKICAgICAgICAgLy8gSGVscGVycyBmb3Igbm90
aWZpY2F0aW9uIGFib3V0IHBhaW50IGV2ZW50cy4KICAgICAgICAgdm9pZCBiZWdpblBhaW50KCk7
CiAgICAgICAgIHZvaWQgZW5kUGFpbnQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDYyNDA5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MDcsNyArNzA3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHZpZXdwb3J0
KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdo
dCk7CiAKICAgICAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0gICAg
ICAgIAorCisgICAgICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KmNvbnRleHQpOworCiAgICAgICAgIC8vIEhlbHBlcnMgZm9yIG5vdGlm
aWNhdGlvbiBhYm91dCBwYWludCBldmVudHMKICAgICAgICAgdm9pZCBiZWdpblBhaW50KFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7CiAgICAgICAgIHZvaWQgZW5kUGFpbnQoKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLm1tCShyZXZpc2lvbiA2MjQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCAr
MzgsMTMgQEAKICNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0MzJBcnJh
eS5oIgogI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkludDMy
QXJyYXkuaCIKICNpbmNsdWRlICJXZWJHTExheWVyLmgiCiAjaW5jbHVkZSAiV2ViR0xQcm9ncmFt
LmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRl
cmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgogI2luY2x1ZGUgIldlYkdM
VGV4dHVyZS5oIgogI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKQEAgLTIzNiw2ICsyMzksODQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZQogICAgIENHTFNldEN1cnJl
bnRDb250ZXh0KG1fY29udGV4dE9iaik7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7
CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKworICAg
IGludCByb3dCeXRlcyA9IG1fY3VycmVudFdpZHRoICogNDsKKyAgICBpbnQgdG90YWxCeXRlcyA9
IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0OworCisgICAgdW5zaWduZWQgY2hhciogcGl4ZWxz
ID0gbmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRlc107CisgICAgaWYgKCFwaXhlbHMpCisgICAg
ICAgIHJldHVybjsKKworICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CisK
KyAgICAvLyBCRUdJTjogdGhlIHNhbWUgY29kZSBhcyBpbiBXZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsLmNwcDo6cmVhZEJhY2tGcmFtZWJ1ZmZlcgorICAgIGJvb2wgbXVzdFJlc3RvcmVG
Qk87CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zi
byk7CisgICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoMCwgMCwgbV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwg
R0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgbXVzdFJlc3RvcmVG
Qk8gPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJv
KSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICB9
CisgICAgfQorCisgICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7CisgICAgYm9vbCBtdXN0UmVz
dG9yZVBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICA6OmdsR2V0SW50ZWdlcnYoR0xfUEFDS19B
TElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKKyAgICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsK
KyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsKKyAgICAgICAg
bXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICA6OmdsUmVhZFBp
eGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9CR1JBLCBHTF9V
TlNJR05FRF9JTlRfOF84XzhfOF9SRVYsIHBpeGVscyk7CisKKyAgICBpZiAobXVzdFJlc3RvcmVQ
YWNrQWxpZ25tZW50KQorICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQs
IHBhY2tBbGlnbm1lbnQpOworCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CisgICAg
Ly8gRU5EOiB0aGUgc2FtZSBjb2RlIGFzIGluIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdElt
cGwuY3BwOjpyZWFkQmFja0ZyYW1lYnVmZmVyCisKKyAgICBDR0RhdGFQcm92aWRlclJlZiBkYXRh
UHJvdmlkZXIgPSBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIHBpeGVscywgdG90YWxC
eXRlcywgMCk7CisgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VD
cmVhdGVEZXZpY2VSR0IoKTsKKyAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBDR0ltYWdlQ3JlYXRl
KG1fY3VycmVudFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9jdXJyZW50SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Qnl0ZXMsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0Jp
dG1hcEJ5dGVPcmRlcjMySG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFQcm92aWRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR1JlbmRlcmluZ0ludGVudERlZmF1
bHQpOworICAgIC8vIENTUyBzdHlsaW5nIG1heSBjYXVzZSB0aGUgY2FudmFzJ3MgY29udGVudCB0
byBiZSByZXNpemVkIG9uCisgICAgLy8gdGhlIHBhZ2UuIEdvIGJhY2sgdG8gdGhlIENhbnZhcyB0
byBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0CisgICAgLy8gd2lkdGggYW5kIGhlaWdodCB0byBkcmF3
LgorICAgIENHUmVjdCByZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5jYW52YXMoKS0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGV4dC0+Y2FudmFzKCktPmhlaWdodCgpKTsKKyAgICAvLyBXZSB3YW50
IHRvIGNvbXBsZXRlbHkgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBmcmFtZSdzCisgICAgLy8gcmVu
ZGVyaW5nIHJlc3VsdHMuCisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGltYWdlQnVmZmVyLT5j
b250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBr
Q0dCbGVuZE1vZGVDb3B5KTsKKyAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShp
bWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbnRlcnBvbGF0aW9uTm9uZSk7CisgICAgQ0dDb250
ZXh0RHJhd0ltYWdlKGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLAor
ICAgICAgICAgICAgICAgICAgICAgICByZWN0LCBjZ0ltYWdlKTsKKyAgICBDR0ltYWdlUmVsZWFz
ZShjZ0ltYWdlKTsKKyAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOworICAgIENH
RGF0YVByb3ZpZGVyUmVsZWFzZShkYXRhUHJvdmlkZXIpOworfQorCiB2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsKICAg
ICBVTlVTRURfUEFSQU0oY29udGV4dCk7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyNDU1
KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE0IEBACisyMDEwLTA3LTAzICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViR0wgcmVuZGVyaW5n
IHJlc3VsdHMgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB0byBDYW52YXMudG9EYXRhVVJMIGFuZCAy
RCBkcmF3SW1hZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTM0NzE5CisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMpOiBJbXBsZW1lbnQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKS4K
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpbnQp
OiBKdXN0IHVzZSBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgorCiAyMDEwLTA3LTAz
ICBFcmlrIEFydmlkc3NvbiAgPGFydkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgT2phbiBWYWZhaS4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0
M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0
M0QuY3BwCShyZXZpc2lvbiA2MjQwOSkKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKKyAgICB2b2lkIHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCk7CiAgICAgdm9pZCBiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7
CiAgICAgdm9pZCBlbmRQYWludCgpOwogCkBAIC0zOTcsNyArMzk4LDcgQEAgV2ViR0xMYXllckNo
cm9taXVtKiBHcmFwaGljc0NvbnRleHQzREludAogfQogI2VuZGlmCiAKLXZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvQ2FudmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsKICAgICBIVE1MQ2Fu
dmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CiAgICAgSW1hZ2VCdWZmZXIq
IGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKQEAgLTQ4NSw2ICs0ODYsMTEgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBhaQogI2VuZGlmCiB9CiAKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQpCit7CisgICAgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoY29udGV4
dCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZW5kUGFpbnQoKQogewog
fQpAQCAtMTMxMSw2ICsxMzE3LDcgQEAgREVMRUdBVEVfVE9fSU5URVJOQUxfNih2ZXJ0ZXhBdHRy
aWJQb2ludAogCiBERUxFR0FURV9UT19JTlRFUk5BTF80KHZpZXdwb3J0LCBsb25nLCBsb25nLCB1
bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCitERUxFR0FURV9UT19JTlRFUk5BTF8xKHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqKQogREVM
RUdBVEVfVE9fSU5URVJOQUxfMShiZWdpblBhaW50LCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqKQog
REVMRUdBVEVfVE9fSU5URVJOQUwoZW5kUGFpbnQpCiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYyNDU1
KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTAtMDctMDMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCByZW5kZXJpbmcgcmVz
dWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFVUkwgYW5kIDJEIGRy
YXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzQ3MTkKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9y
ZWkuaHRtbDogQWRkZWQuCisKIDIwMTAtMDctMDMgIFJvYmVydCBIb2dhbiAgPHJvYmVydEB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2Vu
LgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWktZXhw
ZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2ds
LXBpeGVsc3RvcmVpLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMSBAQAorICAgIAorVGhlcmUgc2hvdWxkIGJlIDUgcmVkIHRyaWFuZ2xlcyBv
biA1IGJsYWNrIHNxdWFyZXMgYWJvdmUKKworVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGRyYXdJbWFn
ZSBhbmQgcmVhZFBpeGVscyBhcmUgbm90IGVmZmVjdGVkIGJ5IGdsLlBpeGVsc3RvcmVpKGdsLlBB
Q0tfQUxJR05NRU5UKSBhbmQgdmlzYSB2ZXJzYQorCitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBp
biAzZCBjb250ZXh0CitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAyZCBjb250ZXh0CitQQVNT
IFBBQ0tfQUxJR05NRU5UIGlzIDEKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDNkIGNvbnRl
eHQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDJkIGNvbnRleHQKK1BBU1MgUEFDS19BTElH
Tk1FTlQgaXMgMgorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gM2QgY29udGV4dAorUEFTUyBk
cmF3aW5nIGlzIGNvcnJlY3QgaW4gMmQgY29udGV4dAorUEFTUyBQQUNLX0FMSUdOTUVOVCBpcyA0
CitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAzZCBjb250ZXh0CitQQVNTIGRyYXdpbmcgaXMg
Y29ycmVjdCBpbiAyZCBjb250ZXh0CitQQVNTIFBBQ0tfQUxJR05NRU5UIGlzIDgKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgImh0dHA6Ly93d3cu
dzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPHRpdGxlPldlYkdM
IHBpeGVsU3RvcmVpIFRlc3Q8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSIuLi8u
Li9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy91dGlsczNkLmpzIj4gPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dl
YmdsLXRlc3QuanMiPiA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iZXhh
bXBsZSIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxjYW52YXMgaWQ9IjJkMDAi
IHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSIyZDAxIiB3aWR0
aD0iNTAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iMmQwMiIgd2lkdGg9IjUw
IiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxjYW52YXMgaWQ9IjJkMDMiIHdpZHRoPSI1MCIgaGVp
Z2h0PSI1MCI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlk
PSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgaWQ9InZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gt
dmVydGV4Ij4KK2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsKK3ZvaWQgbWFpbigpIHsKKyAgZ2xf
UG9zaXRpb24gPSB2UG9zaXRpb247Cit9Cis8L3NjcmlwdD4KKworPHNjcmlwdCBpZD0iZnNoYWRl
ciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+Cit2b2lkIG1haW4oKSB7CisgIGdsX0ZyYWdD
b2xvciA9IHZlYzQoMS4wLDAuMCwwLjAsMS4wKTsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0Pgor
ZnVuY3Rpb24gZmFpbCh4LHksIG5hbWUsIGJ1Ziwgc2hvdWxkQmUpIHsKKyAgdmFyIGkgPSAoeSo1
MCt4KSAqIDQ7CisgIHZhciByZWFzb24gPSAicGl4ZWwgaW4gIituYW1lKyIgYXQgKCIreCsiLCIr
eSsiKSBpcyAoIitidWZbaV0rIiwiK2J1ZltpKzFdKyIsIitidWZbaSsyXSsiLCIrYnVmW2krM10r
IiksIHNob3VsZCBiZSAiK3Nob3VsZEJlOworICBhc3NlcnRNc2coZmFsc2UsIHJlYXNvbik7Cit9
CisKK2Z1bmN0aW9uIHBhc3MobmFtZSkgeworICBhc3NlcnRNc2codHJ1ZSwgImRyYXdpbmcgaXMg
Y29ycmVjdCBpbiAiICsgbmFtZSk7Cit9CisKK2Z1bmN0aW9uIGluaXQoKSB7CisgIGRlYnVnKCJU
aGVyZSBzaG91bGQgYmUgNSByZWQgdHJpYW5nbGVzIG9uIDUgYmxhY2sgc3F1YXJlcyBhYm92ZSIp
OworICBkZWJ1ZygiIik7CisKKyAgZGVidWcoIlRoaXMgdGVzdCBjaGVja3MgdGhhdCBkcmF3SW1h
Z2UgYW5kIHJlYWRQaXhlbHMgYXJlIG5vdCBlZmZlY3RlZCBieSBnbC5QaXhlbHN0b3JlaShnbC5Q
QUNLX0FMSUdOTUVOVCkgYW5kIHZpc2EgdmVyc2EiKTsKKyAgZGVidWcoIiIpOworCisgIHZhciBj
YW52YXMzZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJleGFtcGxlIik7CisgIGdsID0gaW5p
dFdlYkdMKCJleGFtcGxlIiwgInZzaGFkZXIiLCAiZnNoYWRlciIsIFsgInZQb3NpdGlvbiJdLCBb
IDAsIDAsIDAsIDEgXSwgMSk7CisKKyAgdmFyIHZlcnRleE9iamVjdCA9IGdsLmNyZWF0ZUJ1ZmZl
cigpOworICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4T2JqZWN0KTsKKyAg
Z2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWyAwLDAuNSww
LCAtMC41LC0wLjUsMCwgMC41LC0wLjUsMCBdKSwgZ2wuU1RBVElDX0RSQVcpOworICBnbC5lbmFi
bGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCAzLCBn
bC5GTE9BVCwgZmFsc2UsIDAsIDApOworCisgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQg
fCBnbC5ERVBUSF9CVUZGRVJfQklUKTsKKyAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAs
IDMpOworCisKKyAgZnVuY3Rpb24gY2hlY2tEYXRhKGJ1ZiwgbmFtZSkgeworICAgIC8vIFRlc3Qg
c2V2ZXJhbCBsb2NhdGlvbnMKKyAgICAvLyBGaXJzdCBsaW5lIHNob3VsZCBiZSBhbGwgYmxhY2sK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgIGlmIChidWZbaSo0XSAh
PSAwIHx8IGJ1ZltpKjQrMV0gIT0gMCB8fCBidWZbaSo0KzJdICE9IDAgfHwgYnVmW2kqNCszXSAh
PSAyNTUpIHsKKyAgICAgICAgZmFpbChpLCAwLCBuYW1lLCBidWYsICIoMCwwLDAsMjU1KSIpOwor
ICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gTGluZSAyNSBzaG91bGQg
YmUgcmVkIGZvciBhdCBsZWFzdCA2IHJlZCBwaXhlbHMgc3RhcnRpbmcgMjIgcGl4ZWxzIGluCisg
ICAgdmFyIG9mZnNldCA9ICgyNSo1MCsyMikgKiA0OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
NjsgKytpKSB7CisgICAgICBpZiAoYnVmW29mZnNldCtpKjRdICE9IDI1NSB8fCBidWZbb2Zmc2V0
K2kqNCsxXSAhPSAwIHx8IGJ1ZltvZmZzZXQraSo0KzJdICE9IDAgfHwgYnVmW29mZnNldCtpKjQr
M10gIT0gMjU1KSB7CisgICAgICAgIGZhaWwoMjIgKyBpLCAyNSwgbmFtZSwgYnVmLCAiKDI1NSww
LDAsMjU1KSIpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gTGFz
dCBsaW5lIHNob3VsZCBiZSBhbGwgYmxhY2sKKyAgICBvZmZzZXQgPSAoNDkqNTApICogNDsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgIGlmIChidWZbb2Zmc2V0K2kq
NF0gIT0gMCB8fCBidWZbb2Zmc2V0K2kqNCsxXSAhPSAwIHx8IGJ1ZltvZmZzZXQraSo0KzJdICE9
IDAgfHwgYnVmW29mZnNldCtpKjQrM10gIT0gMjU1KSB7CisgICAgICAgIGZhaWwoaSwgNDksIG5h
bWUsIGJ1ZiwgIigwLDAsMCwyNTUpIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9
CisKKyAgICBwYXNzKG5hbWUpOworICB9CisKKyAgZnVuY3Rpb24gY2hlY2tDb2xvcnMoKSB7Cisg
ICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KDUwICogNTAgKiA0KTsKKyAgICBnbC5yZWFkUGl4
ZWxzKDAsIDAsIDUwLCA1MCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgYnVmKTsKKyAgICBj
aGVja0RhdGEoYnVmLCAiM2QgY29udGV4dCIpOworICAgIHZhciBpbWdEYXRhID0gY3R4MmQuZ2V0
SW1hZ2VEYXRhKDAsIDAsIDUwLCA1MCk7CisgICAgY2hlY2tEYXRhKGltZ0RhdGEuZGF0YSwgIjJk
IGNvbnRleHQiKTsKKyAgfQorCisgIHZhciB0YWJsZSA9IFsxLCAyLCA0LCA4XTsKKyAgZm9yICh2
YXIgaWkgPSAwOyBpaSA8IHRhYmxlLmxlbmd0aDsgKytpaSkgeworICAgIGdsLnBpeGVsU3RvcmVp
KGdsLlBBQ0tfQUxJR05NRU5ULCB0YWJsZVtpaV0pOworICAgIGN0eDJkID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoIjJkMCIgKyBpaSkuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBjdHgyZC5nbG9i
YWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7CisgICAgY3R4MmQuZHJhd0ltYWdlKGNhbnZh
czNkLCAwLCAwKTsKKyAgICBjaGVja0NvbG9ycygpOworICAgIGFzc2VydE1zZyhnbC5nZXRQYXJh
bWV0ZXIoZ2wuUEFDS19BTElHTk1FTlQpID09IHRhYmxlW2lpXSwKKyAgICAgICAgIlBBQ0tfQUxJ
R05NRU5UIGlzICIgKyB0YWJsZVtpaV0pOworICB9Cit9CisKK2luaXQoKTsKK3N1Y2Nlc3NmdWxs
eVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="47977"
          type_id="1"
          status="-"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="47978"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>60482</attachid>
            <date>2010-07-04 14:57:52 -0700</date>
            <delta_ts>2010-07-10 12:30:02 -0700</delta_ts>
            <desc>revised patch: responding to Simon Fraser&apos;s review</desc>
            <filename>canvas.patch</filename>
            <type>text/plain</type>
            <size>19227</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MjQ1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDctMDMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFV
UkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1w
aXhlbHN0b3JlaS5odG1sCisKKyAgICAgICAgKiBkb20vQ2FudmFzU3VyZmFjZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzU3VyZmFjZTo6dG9EYXRhVVJMKTogTWFrZSBpdCB2aXJ0dWFsIHNv
IGl0IGNhbiBiZSBvdmVyd3JpdHRlbiBpbiBIVE1MQ2FudmFzRWxlbWVudC4KKyAgICAgICAgKiBo
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50Ojp0b0RhdGFVUkwpOiBQYWludCB0aGUgV2ViR0wgcmVuZGVyaW5nIHJlc3VsdHMgdG8g
Y2FudmFzIGlmIGl0J3MgM2QuCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTCk6IE92ZXJ3cml0
ZSB0b0RhdGFVUkwoKS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3SW1hZ2UpOiBQYWludCB0aGUgV2ViR0wgcmVuZGVyaW5nIHJlc3VsdHMgdG8gY2FudmFzIGlm
IGl0J3MgM2QgYmVmb3JlIGRyYXdpbmcuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOiBQYWludCB0aGUgV2ViR0wgcmVuZGVy
aW5nIHJlc3VsdHMgdG8gY2FudmFzIGlmIGl0J3MgZGlydHkuCisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6IERlY2xhcmUgcGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oOiBEZWNsYXJlIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KTogSW1wbGVtZW50IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisKIDIwMTAtMDct
MDMgIEplcmVteSBPcmxvdyAgPGpvcmxvd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVWdoLiAg
SGF2ZSB0byBwdXQgdGhlIGRlc3RydWN0b3IgaW4gdGhlIC5oIGZpbGUgc2luY2UgdGhlIC5jY3Ag
aXNuJ3QgY29tcGlsZWQgeWV0LgpJbmRleDogV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAkocmV2aXNpb24gNjI0MDkp
CisrKyBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDgg
KzU5LDggQEAgcHVibGljOgogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53
aWR0aCgpOyB9CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQo
KTsgfQogCi0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25z
dCBkb3VibGUqIHF1YWxpdHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgdG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0b0Rh
dGFVUkwobWltZVR5cGUsIDAsIGVjKTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChj
b25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHksIEV4Y2VwdGlvbkNv
ZGUmKTsKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHRvRGF0YVVSTChtaW1lVHlwZSwgMCwgZWMp
OyB9CiAKICAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9
CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gNjI0MDkpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NzcsNiArMjc3LDE1IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzM0QoKSBjb25zdAogewog
ICAgIHJldHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczNkKCk7CiB9CisKK1N0cmluZyBI
VE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0
IGRvdWJsZSogcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKGlzM0QoKSkg
eworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQzZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4ocmVuZGVyaW5nQ29udGV4dCgpKTsKKyAgICAg
ICAgY29udGV4dDNkLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIH0KKyAg
ICByZXR1cm4gQ2FudmFzU3VyZmFjZTo6dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBlYyk7
Cit9CiAjZW5kaWYKIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVD
aGFuZ2UgY2hhbmdlKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHJldmlzaW9uIDYy
NDA5KQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDYgKzg5LDkgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCiAg
ICAgYm9vbCBpczNEKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5LCBFeGNlcHRpb25Db2Rl
Jik7CisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0b0RhdGFVUkwobWltZVR5cGUsIDAsIGVjKTsg
fQogI2VuZGlmCiAKIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA2MjQwOSkKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjMsNiArNjMsMTAgQEAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1VudXNlZFBhcmFtLmg+CiAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorI2luY2x1ZGUgIldlYkdM
UmVuZGVyaW5nQ29udGV4dC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExMjQsNiArMTEyOCwxMyBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgaWYgKCFzb3VyY2VDYW52YXMtPm9yaWdpbkNs
ZWFuKCkpCiAgICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7CiAKKyNpZiBFTkFC
TEUoM0RfQ0FOVkFTKQorICAgIGlmIChzb3VyY2VDYW52YXMtPmlzM0QoKSkgeworICAgICAgICBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQzZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xS
ZW5kZXJpbmdDb250ZXh0Kj4oc291cmNlQ2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpOworICAg
ICAgICBjb250ZXh0M2QtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgfQor
I2VuZGlmCisKICAgICBjLT5kcmF3SW1hZ2UoYnVmZmVyLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNw
YWNlLCBkZXN0UmVjdCwgc291cmNlUmVjdCwgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSk7CiAg
ICAgd2lsbERyYXcoZGVzdFJlY3QpOyAvLyBUaGlzIGNhbGwgY29tZXMgYWZ0ZXIgZHJhd0ltYWdl
LCBzaW5jZSB0aGUgYnVmZmVyIHdlIGRyYXcgaW50byBtYXkgYmUgb3VyIG93biwgYW5kIHdlIG5l
ZWQgdG8gbWFrZSBzdXJlIGl0IGlzIGRpcnR5LgogICAgICAgICAgICAgICAgICAgICAgICAgLy8g
RklYTUU6IEFyZ3VhYmx5IHdpbGxEcmF3IHNob3VsZCBiZWNvbWUgZGlkRHJhdyBhbmQgb2NjdXIg
YWZ0ZXIgZHJhd2luZyBjYWxscyBhbmQgbm90IGJlZm9yZSB0aGVtIHRvIGF2b2lkIHByb2JsZW1z
IGxpa2UgdGhpcy4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAJKHJldmlzaW9uIDYyNDA5KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNiArMTU0LDE2IEBA
IHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dEMKICNlbmRpZgogfQogCiti
b29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMo
KQoreworICAgIGlmIChtX21hcmtlZENhbnZhc0RpcnR5KSB7CisgICAgICAgIG1fbWFya2VkQ2Fu
dmFzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVy
biBmYWxzZTsKK30KKwogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJlZ2luUGFpbnQoKQog
ewogICAgIGlmIChtX21hcmtlZENhbnZhc0RpcnR5KSB7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDYyNDA5KQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAt
MzA0LDYgKzMwNCwxMCBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAgICAgCiAgICAgICAgIHZv
aWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCisgICAgICAgIC8vIFJldHVybiB2
YWx1ZSB0cnVlIGluZGljYXRlcyBjYW52YXMgaXMgdXBkYXRlZCBkdXJpbmcgdGhlIGNhbGwsCisg
ICAgICAgIC8vIGZhbHNlIGluZGljYXRlcyBubyB1cGRhdGVzLgorICAgICAgICBib29sIHBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisKICAgICAgICAgLy8gSGVscGVycyBmb3Igbm90
aWZpY2F0aW9uIGFib3V0IHBhaW50IGV2ZW50cy4KICAgICAgICAgdm9pZCBiZWdpblBhaW50KCk7
CiAgICAgICAgIHZvaWQgZW5kUGFpbnQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDYyNDA5KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3JraW5nIGNvcHkpCkBAIC03
MDcsNyArNzA3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHZpZXdwb3J0
KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdo
dCk7CiAKICAgICAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7Ci0gICAg
ICAgIAorCisgICAgICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KmNvbnRleHQpOworCiAgICAgICAgIC8vIEhlbHBlcnMgZm9yIG5vdGlm
aWNhdGlvbiBhYm91dCBwYWludCBldmVudHMKICAgICAgICAgdm9pZCBiZWdpblBhaW50KFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7CiAgICAgICAgIHZvaWQgZW5kUGFpbnQoKTsKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29u
dGV4dDNETWFjLm1tCShyZXZpc2lvbiA2MjQwOSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCAr
MzgsMTMgQEAKICNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0MzJBcnJh
eS5oIgogI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkludDMy
QXJyYXkuaCIKICNpbmNsdWRlICJXZWJHTExheWVyLmgiCiAjaW5jbHVkZSAiV2ViR0xQcm9ncmFt
LmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRl
cmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgogI2luY2x1ZGUgIldlYkdM
VGV4dHVyZS5oIgogI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKQEAgLTIzNiw2ICsyMzksODQgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZQogICAgIENHTFNldEN1cnJl
bnRDb250ZXh0KG1fY29udGV4dE9iaik7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dCkKK3sKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7
CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKworICAg
IGludCByb3dCeXRlcyA9IG1fY3VycmVudFdpZHRoICogNDsKKyAgICBpbnQgdG90YWxCeXRlcyA9
IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0OworCisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQg
Y2hhcj4gcGl4ZWxzKG5ldyB1bnNpZ25lZCBjaGFyW3RvdGFsQnl0ZXNdKTsKKyAgICBpZiAoIXBp
eGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250
ZXh0T2JqKTsKKworICAgIC8vIEJFR0lOOiB0aGUgc2FtZSBjb2RlIGFzIGluIFdlYkdyYXBoaWNz
Q29udGV4dDNERGVmYXVsdEltcGwuY3BwOjpyZWFkQmFja0ZyYW1lYnVmZmVyCisgICAgYm9vbCBt
dXN0UmVzdG9yZUZCTzsKKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBs
ZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZF
Ul9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAwLCBtX2N1
cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJy
ZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBt
dXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fYm91bmRG
Qk8gIT0gbV9mYm8pIHsKKyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAg
ICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKKyAgICBi
b29sIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIDo6Z2xHZXRJbnRlZ2Vy
dihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGlnbm1lbnQpOworICAgIGlmIChwYWNrQWxpZ25t
ZW50ID4gNCkgeworICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIDQp
OworICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0KKworICAg
IDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdM
X0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzLmdldCgpKTsKKworICAg
IGlmIChtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQpCisgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShH
TF9QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7CisKKyAgICBpZiAobXVzdFJlc3RvcmVG
Qk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBt
X2JvdW5kRkJPKTsKKyAgICAvLyBFTkQ6IHRoZSBzYW1lIGNvZGUgYXMgaW4gV2ViR3JhcGhpY3ND
b250ZXh0M0REZWZhdWx0SW1wbC5jcHA6OnJlYWRCYWNrRnJhbWVidWZmZXIKKworICAgIENHRGF0
YVByb3ZpZGVyUmVmIGRhdGFQcm92aWRlciA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEo
MCwgcGl4ZWxzLmdldCgpLCB0b3RhbEJ5dGVzLCAwKTsKKyAgICBDR0NvbG9yU3BhY2VSZWYgY29s
b3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAgIENHSW1hZ2VSZWYg
Y2dJbWFnZSA9IENHSW1hZ2VDcmVhdGUobV9jdXJyZW50V2lkdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2N1cnJlbnRIZWlnaHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dC
eXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2Us
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJl
bXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVByb3ZpZGVyLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7CisgICAgLy8gQ1NTIHN0eWxpbmcgbWF5IGNhdXNl
IHRoZSBjYW52YXMncyBjb250ZW50IHRvIGJlIHJlc2l6ZWQgb24KKyAgICAvLyB0aGUgcGFnZS4g
R28gYmFjayB0byB0aGUgQ2FudmFzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QKKyAgICAvLyB3
aWR0aCBhbmQgaGVpZ2h0IHRvIGRyYXcuCisgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKDAs
IDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmNhbnZhcygpLT53aWR0
aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5jYW52YXMoKS0+aGVp
Z2h0KCkpOworICAgIC8vIFdlIHdhbnQgdG8gY29tcGxldGVseSBvdmVyd3JpdGUgdGhlIHByZXZp
b3VzIGZyYW1lJ3MKKyAgICAvLyByZW5kZXJpbmcgcmVzdWx0cy4KKyAgICBDR0NvbnRleHRTZXRC
bGVuZE1vZGUoaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dFNl
dEludGVycG9sYXRpb25RdWFsaXR5KGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ludGVycG9s
YXRpb25Ob25lKTsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoaW1hZ2VCdWZmZXItPmNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCksCisgICAgICAgICAgICAgICAgICAgICAgIHJlY3QsIGNnSW1h
Z2UpOworICAgIENHSW1hZ2VSZWxlYXNlKGNnSW1hZ2UpOworICAgIENHQ29sb3JTcGFjZVJlbGVh
c2UoY29sb3JTcGFjZSk7CisgICAgQ0dEYXRhUHJvdmlkZXJSZWxlYXNlKGRhdGFQcm92aWRlcik7
Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdD
b250ZXh0KiBjb250ZXh0KQogewogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKSW5kZXg6IFdl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwkocmV2aXNpb24gNjI0NTUpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDctMDMgIFpoZW55YW8gTW8gIDx6
bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBXZWJHTCByZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRv
IENhbnZhcy50b0RhdGFVUkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICAqIHNyYy9HcmFwaGlj
c0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6IEltcGxlbWVudCBwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6YmVnaW5QYWludCk6IEp1c3QgdXNlIHBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKCkuCisKIDIwMTAtMDctMDMgIEVyaWsgQXJ2aWRzc29uICA8YXJ2QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBPamFuIFZhZmFpLgpJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDYyNDA5KQorKysgV2ViS2l0
L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Miw2ICsxMTIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KTsKIAorICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKICAgICB2b2lkIGJlZ2luUGFpbnQoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKICAgICB2b2lkIGVuZFBhaW50KCk7CiAKQEAgLTM5Nyw3
ICszOTgsNyBAQCBXZWJHTExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNESW50CiB9CiAj
ZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBhaW50KFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQogewogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52
YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwpA
QCAtNDg1LDYgKzQ4NiwxMSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2lu
UGFpCiAjZW5kaWYKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBh
aW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhjb250ZXh0KTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjplbmRQYWludCgpCiB7CiB9CkBAIC0xMzExLDYgKzEzMTcsNyBAQCBERUxFR0FURV9U
T19JTlRFUk5BTF82KHZlcnRleEF0dHJpYlBvaW50CiAKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzQo
dmlld3BvcnQsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpCiAKK0RF
TEVHQVRFX1RPX0lOVEVSTkFMXzEocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMsIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCopCiBERUxFR0FURV9UT19JTlRFUk5BTF8xKGJlZ2luUGFpbnQsIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCopCiBERUxFR0FURV9UT19JTlRFUk5BTChlbmRQYWludCkKIApJ
bmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0No
YW5nZUxvZwkocmV2aXNpb24gNjI0NTUpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMC0wNy0wMyAgWmhlbnlhbyBNbyAgPHptb0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdlYkdMIHJlbmRlcmluZyByZXN1bHRzIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdG8gQ2Fu
dmFzLnRvRGF0YVVSTCBhbmQgMkQgZHJhd0ltYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDcxOQorCisgICAgICAgICogZmFzdC9jYW52YXMvd2Vi
Z2wvZ2wtcGl4ZWxzdG9yZWktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Nh
bnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS5odG1sOiBBZGRlZC4KKwogMjAxMC0wNy0wMyAgUm9i
ZXJ0IEhvZ2FuICA8cm9iZXJ0QHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2Vu
bmV0aCBSb2hkZSBDaHJpc3RpYW5zZW4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9nbC1waXhlbHN0b3JlaS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWktZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWktZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACisgICAgCitUaGVyZSBzaG91
bGQgYmUgNSByZWQgdHJpYW5nbGVzIG9uIDUgYmxhY2sgc3F1YXJlcyBhYm92ZQorCitUaGlzIHRl
c3QgY2hlY2tzIHRoYXQgZHJhd0ltYWdlIGFuZCByZWFkUGl4ZWxzIGFyZSBub3QgZWZmZWN0ZWQg
YnkgZ2wuUGl4ZWxzdG9yZWkoZ2wuUEFDS19BTElHTk1FTlQpIGFuZCB2aXNhIHZlcnNhCisKK1BB
U1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDNkIGNvbnRleHQKK1BBU1MgZHJhd2luZyBpcyBjb3Jy
ZWN0IGluIDJkIGNvbnRleHQKK1BBU1MgUEFDS19BTElHTk1FTlQgaXMgMQorUEFTUyBkcmF3aW5n
IGlzIGNvcnJlY3QgaW4gM2QgY29udGV4dAorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gMmQg
Y29udGV4dAorUEFTUyBQQUNLX0FMSUdOTUVOVCBpcyAyCitQQVNTIGRyYXdpbmcgaXMgY29ycmVj
dCBpbiAzZCBjb250ZXh0CitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAyZCBjb250ZXh0CitQ
QVNTIFBBQ0tfQUxJR05NRU5UIGlzIDQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDNkIGNv
bnRleHQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDJkIGNvbnRleHQKK1BBU1MgUEFDS19B
TElHTk1FTlQgaXMgOAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3Rv
cmVpLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wt
cGl4ZWxzdG9yZWkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2dsLXBpeGVsc3RvcmVpLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9u
YWwvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1s
PgorPGhlYWQ+Cis8dGl0bGU+V2ViR0wgcGl4ZWxTdG9yZWkgVGVzdDwvdGl0bGU+Cis8bGluayBy
ZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNz
cyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3V0aWxzM2QuanMiPiA8L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+IDwvc2NyaXB0PgorPC9oZWFkPgor
PGJvZHk+Cis8Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwvY2Fu
dmFzPgorPGNhbnZhcyBpZD0iMmQwMCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4K
KzxjYW52YXMgaWQ9IjJkMDEiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+Cis8Y2Fu
dmFzIGlkPSIyZDAyIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorPGNhbnZhcyBp
ZD0iMmQwMyIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxkaXYgaWQ9ImRlc2Ny
aXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBpZD0idnNo
YWRlciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9u
Owordm9pZCBtYWluKCkgeworICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsKK30KKzwvc2NyaXB0
PgorCis8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KK3Zv
aWQgbWFpbigpIHsKKyAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsMC4wLDAuMCwxLjApOworfQor
PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBmYWlsKHgseSwgbmFtZSwgYnVmLCBzaG91
bGRCZSkgeworICB2YXIgaSA9ICh5KjUwK3gpICogNDsKKyAgdmFyIHJlYXNvbiA9ICJwaXhlbCBp
biAiK25hbWUrIiBhdCAoIit4KyIsIit5KyIpIGlzICgiK2J1ZltpXSsiLCIrYnVmW2krMV0rIiwi
K2J1ZltpKzJdKyIsIitidWZbaSszXSsiKSwgc2hvdWxkIGJlICIrc2hvdWxkQmU7CisgIGFzc2Vy
dE1zZyhmYWxzZSwgcmVhc29uKTsKK30KKworZnVuY3Rpb24gcGFzcyhuYW1lKSB7CisgIGFzc2Vy
dE1zZyh0cnVlLCAiZHJhd2luZyBpcyBjb3JyZWN0IGluICIgKyBuYW1lKTsKK30KKworZnVuY3Rp
b24gaW5pdCgpIHsKKyAgZGVidWcoIlRoZXJlIHNob3VsZCBiZSA1IHJlZCB0cmlhbmdsZXMgb24g
NSBibGFjayBzcXVhcmVzIGFib3ZlIik7CisgIGRlYnVnKCIiKTsKKworICBkZWJ1ZygiVGhpcyB0
ZXN0IGNoZWNrcyB0aGF0IGRyYXdJbWFnZSBhbmQgcmVhZFBpeGVscyBhcmUgbm90IGVmZmVjdGVk
IGJ5IGdsLlBpeGVsc3RvcmVpKGdsLlBBQ0tfQUxJR05NRU5UKSBhbmQgdmlzYSB2ZXJzYSIpOwor
ICBkZWJ1ZygiIik7CisKKyAgdmFyIGNhbnZhczNkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImV4YW1wbGUiKTsKKyAgZ2wgPSBpbml0V2ViR0woImV4YW1wbGUiLCAidnNoYWRlciIsICJmc2hh
ZGVyIiwgWyAidlBvc2l0aW9uIl0sIFsgMCwgMCwgMCwgMSBdLCAxKTsKKworICB2YXIgdmVydGV4
T2JqZWN0ID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVG
RkVSLCB2ZXJ0ZXhPYmplY3QpOworICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3
IEZsb2F0MzJBcnJheShbIDAsMC41LDAsIC0wLjUsLTAuNSwwLCAwLjUsLTAuNSwwIF0pLCBnbC5T
VEFUSUNfRFJBVyk7CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICBnbC52ZXJ0
ZXhBdHRyaWJQb2ludGVyKDAsIDMsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgZ2wuY2xl
YXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpOworICBnbC5kcmF3
QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgMyk7CisKKworICBmdW5jdGlvbiBjaGVja0RhdGEoYnVm
LCBuYW1lKSB7CisgICAgLy8gVGVzdCBzZXZlcmFsIGxvY2F0aW9ucworICAgIC8vIEZpcnN0IGxp
bmUgc2hvdWxkIGJlIGFsbCBibGFjaworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkg
eworICAgICAgaWYgKGJ1ZltpKjRdICE9IDAgfHwgYnVmW2kqNCsxXSAhPSAwIHx8IGJ1ZltpKjQr
Ml0gIT0gMCB8fCBidWZbaSo0KzNdICE9IDI1NSkgeworICAgICAgICBmYWlsKGksIDAsIG5hbWUs
IGJ1ZiwgIigwLDAsMCwyNTUpIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBMaW5lIDI1IHNob3VsZCBiZSByZWQgZm9yIGF0IGxlYXN0IDYgcmVkIHBpeGVscyBz
dGFydGluZyAyMiBwaXhlbHMgaW4KKyAgICB2YXIgb2Zmc2V0ID0gKDI1KjUwKzIyKSAqIDQ7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyArK2kpIHsKKyAgICAgIGlmIChidWZbb2Zmc2V0K2kq
NF0gIT0gMjU1IHx8IGJ1ZltvZmZzZXQraSo0KzFdICE9IDAgfHwgYnVmW29mZnNldCtpKjQrMl0g
IT0gMCB8fCBidWZbb2Zmc2V0K2kqNCszXSAhPSAyNTUpIHsKKyAgICAgICAgZmFpbCgyMiArIGks
IDI1LCBuYW1lLCBidWYsICIoMjU1LDAsMCwyNTUpIik7CisgICAgICAgIHJldHVybjsKKyAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBMYXN0IGxpbmUgc2hvdWxkIGJlIGFsbCBibGFjaworICAgIG9m
ZnNldCA9ICg0OSo1MCkgKiA0OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkgewor
ICAgICAgaWYgKGJ1ZltvZmZzZXQraSo0XSAhPSAwIHx8IGJ1ZltvZmZzZXQraSo0KzFdICE9IDAg
fHwgYnVmW29mZnNldCtpKjQrMl0gIT0gMCB8fCBidWZbb2Zmc2V0K2kqNCszXSAhPSAyNTUpIHsK
KyAgICAgICAgZmFpbChpLCA0OSwgbmFtZSwgYnVmLCAiKDAsMCwwLDI1NSkiKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgfQorICAgIH0KKworICAgIHBhc3MobmFtZSk7CisgIH0KKworICBmdW5j
dGlvbiBjaGVja0NvbG9ycygpIHsKKyAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkoNTAgKiA1
MCAqIDQpOworICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgNTAsIDUwLCBnbC5SR0JBLCBnbC5VTlNJ
R05FRF9CWVRFLCBidWYpOworICAgIGNoZWNrRGF0YShidWYsICIzZCBjb250ZXh0Iik7CisgICAg
dmFyIGltZ0RhdGEgPSBjdHgyZC5nZXRJbWFnZURhdGEoMCwgMCwgNTAsIDUwKTsKKyAgICBjaGVj
a0RhdGEoaW1nRGF0YS5kYXRhLCAiMmQgY29udGV4dCIpOworICB9CisKKyAgdmFyIHRhYmxlID0g
WzEsIDIsIDQsIDhdOworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgdGFibGUubGVuZ3RoOyArK2lp
KSB7CisgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuUEFDS19BTElHTk1FTlQsIHRhYmxlW2lpXSk7Cisg
ICAgY3R4MmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiMmQwIiArIGlpKS5nZXRDb250ZXh0
KCIyZCIpOworICAgIGN0eDJkLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JzsKKyAg
ICBjdHgyZC5kcmF3SW1hZ2UoY2FudmFzM2QsIDAsIDApOworICAgIGNoZWNrQ29sb3JzKCk7Cisg
ICAgYXNzZXJ0TXNnKGdsLmdldFBhcmFtZXRlcihnbC5QQUNLX0FMSUdOTUVOVCkgPT0gdGFibGVb
aWldLAorICAgICAgICAiUEFDS19BTElHTk1FTlQgaXMgIiArIHRhYmxlW2lpXSk7CisgIH0KK30K
KworaW5pdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorCis8c2Ny
aXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisK
KzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="48013"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
    <flag name="commit-queue"
          id="48014"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61159</attachid>
            <date>2010-07-10 12:30:02 -0700</date>
            <delta_ts>2010-07-10 17:47:42 -0700</delta_ts>
            <desc>revised patch: responding to Simon Fraser and kbr&apos;s review</desc>
            <filename>canvas.patch</filename>
            <type>text/plain</type>
            <size>23079</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzA0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjkgQEAKKzIwMTAtMDctMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFV
UkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1w
aXhlbHN0b3JlaS5odG1sCisKKyAgICAgICAgKiBkb20vQ2FudmFzU3VyZmFjZS5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzU3VyZmFjZTo6dG9EYXRhVVJMKTogTWFrZSBpdCB2aXJ0dWFsIHNv
IGl0IGNhbiBiZSBvdmVyd3JpdHRlbiBpbiBIVE1MQ2FudmFzRWxlbWVudC4KKyAgICAgICAgKiBo
dG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxDYW52YXNF
bGVtZW50Ojp0b0RhdGFVUkwpOiBQYWludCB0aGUgV2ViR0wgcmVuZGVyaW5nIHJlc3VsdHMgdG8g
Y2FudmFzIGlmIGl0J3MgM2QuCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTCk6IE92ZXJ3cml0
ZSB0b0RhdGFVUkwoKS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpk
cmF3SW1hZ2UpOiBQYWludCB0aGUgV2ViR0wgcmVuZGVyaW5nIHJlc3VsdHMgdG8gY2FudmFzIGlm
IGl0J3MgM2QgYmVmb3JlIGRyYXdpbmcuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4
dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOiBQYWludCB0aGUgV2ViR0wgcmVuZGVy
aW5nIHJlc3VsdHMgdG8gY2FudmFzIGlmIGl0J3MgZGlydHkuCisgICAgICAgICogaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6IERlY2xhcmUgcGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQz
RC5oOiBEZWNsYXJlIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkgJiBwYWludFRvQ2Fu
dmFzKCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RD
Ry5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRUb0NhbnZh
cyk6IFBhaW50IHRoZSByZW5kZXJlZCBpbWFnZSBwaXhlbHMgdG8gdGhlIGNhbnZhcy4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW06CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMpOiBJbXBsZW1lbnQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKS4KKwogMjAx
MC0wNy0xMCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgJKHJldmlzaW9uIDYy
NDA5KQorKysgV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
OSw4ICs1OSw4IEBAIHB1YmxpYzoKICAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3Np
emUud2lkdGgoKTsgfQogICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX3NpemUuaGVp
Z2h0KCk7IH0KIAotICAgIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwg
Y29uc3QgZG91YmxlKiBxdWFsaXR5LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgU3RyaW5nIHRvRGF0
YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
dG9EYXRhVVJMKG1pbWVUeXBlLCAwLCBlYyk7IH0KKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFV
UkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5LCBFeGNlcHRp
b25Db2RlJik7CisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0b0RhdGFVUkwobWltZVR5cGUsIDAs
IGVjKTsgfQogCiAgICAgY29uc3QgSW50U2l6ZSYgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6
ZTsgfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHJldmlzaW9uIDYyNDA5
KQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjc3LDYgKzI3NywxNSBAQCBib29sIEhUTUxDYW52YXNFbGVtZW50OjppczNEKCkgY29uc3QK
IHsKICAgICByZXR1cm4gbV9jb250ZXh0ICYmIG1fY29udGV4dC0+aXMzZCgpOwogfQorCitTdHJp
bmcgSFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBj
b25zdCBkb3VibGUqIHF1YWxpdHksIEV4Y2VwdGlvbkNvZGUmIGVjKQoreworICAgIGlmIChpczNE
KCkpIHsKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0M2QgPSByZWludGVy
cHJldF9jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KHJlbmRlcmluZ0NvbnRleHQoKSk7Cisg
ICAgICAgIGNvbnRleHQzZC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICB9
CisgICAgcmV0dXJuIENhbnZhc1N1cmZhY2U6OnRvRGF0YVVSTChtaW1lVHlwZSwgcXVhbGl0eSwg
ZWMpOworfQogI2VuZGlmCiAKIHZvaWQgSFRNTENhbnZhc0VsZW1lbnQ6OnJlY2FsY1N0eWxlKFN0
eWxlQ2hhbmdlIGNoYW5nZSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCShyZXZpc2lv
biA2MjQwOSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC04OSw2ICs4OSw5IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpICAg
IAogICAgIGJvb2wgaXMzRCgpIGNvbnN0OworCisgICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJM
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJsZSogcXVhbGl0eSwgRXhjZXB0aW9u
Q29kZSYpOworICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVU
eXBlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gdG9EYXRhVVJMKG1pbWVUeXBlLCAwLCBl
Yyk7IH0KICNlbmRpZgogCiBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gNjI0MDkpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTYzLDYgKzYzLDEwIEBACiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUg
PHd0Zi9VbnVzZWRQYXJhbS5oPgogCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyNpbmNsdWRlICJX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKKyNlbmRpZgorCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMTI0LDYgKzExMjgsMTMgQEAgdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAgIGlmICghc291cmNlQ2FudmFzLT5vcmln
aW5DbGVhbigpKQogICAgICAgICBjYW52YXMoKS0+c2V0T3JpZ2luVGFpbnRlZCgpOwogCisjaWYg
RU5BQkxFKDNEX0NBTlZBUykKKyAgICBpZiAoc291cmNlQ2FudmFzLT5pczNEKCkpIHsKKyAgICAg
ICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0M2QgPSByZWludGVycHJldF9jYXN0PFdl
YkdMUmVuZGVyaW5nQ29udGV4dCo+KHNvdXJjZUNhbnZhcy0+cmVuZGVyaW5nQ29udGV4dCgpKTsK
KyAgICAgICAgY29udGV4dDNkLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAg
IH0KKyNlbmRpZgorCiAgICAgYy0+ZHJhd0ltYWdlKGJ1ZmZlci0+aW1hZ2UoKSwgRGV2aWNlQ29s
b3JTcGFjZSwgZGVzdFJlY3QsIHNvdXJjZVJlY3QsIHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUp
OwogICAgIHdpbGxEcmF3KGRlc3RSZWN0KTsgLy8gVGhpcyBjYWxsIGNvbWVzIGFmdGVyIGRyYXdJ
bWFnZSwgc2luY2UgdGhlIGJ1ZmZlciB3ZSBkcmF3IGludG8gbWF5IGJlIG91ciBvd24sIGFuZCB3
ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCBpcyBkaXJ0eS4KICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBBcmd1YWJseSB3aWxsRHJhdyBzaG91bGQgYmVjb21lIGRpZERyYXcgYW5kIG9j
Y3VyIGFmdGVyIGRyYXdpbmcgY2FsbHMgYW5kIG5vdCBiZWZvcmUgdGhlbSB0byBhdm9pZCBwcm9i
bGVtcyBsaWtlIHRoaXMuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA2MjQwOSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDYgKzE1NCwx
NiBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDCiAjZW5kaWYKIH0K
IAorYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKCkKK3sKKyAgICBpZiAobV9tYXJrZWRDYW52YXNEaXJ0eSkgeworICAgICAgICBtX21hcmtl
ZENhbnZhc0RpcnR5ID0gZmFsc2U7CisgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXModGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiZWdpblBhaW50
KCkKIHsKICAgICBpZiAobV9tYXJrZWRDYW52YXNEaXJ0eSkgewpJbmRleDogV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA2MjQwOSkKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwNCw2ICszMDQsMTAgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgIAogICAgICAg
ICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAorICAgICAgICAvLyBSZXR1
cm4gdmFsdWUgdHJ1ZSBpbmRpY2F0ZXMgY2FudmFzIGlzIHVwZGF0ZWQgZHVyaW5nIHRoZSBjYWxs
LAorICAgICAgICAvLyBmYWxzZSBpbmRpY2F0ZXMgbm8gdXBkYXRlcy4KKyAgICAgICAgYm9vbCBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworCiAgICAgICAgIC8vIEhlbHBlcnMgZm9y
IG5vdGlmaWNhdGlvbiBhYm91dCBwYWludCBldmVudHMuCiAgICAgICAgIHZvaWQgYmVnaW5QYWlu
dCgpOwogICAgICAgICB2b2lkIGVuZFBhaW50KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA2MjQwOSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpA
QCAtNjgsNiArNjgsMTAgQEAgdHlwZWRlZiBpbnQgUGxhdGZvcm0zRE9iamVjdDsKIGNvbnN0IFBs
YXRmb3JtM0RPYmplY3QgTnVsbFBsYXRmb3JtM0RPYmplY3QgPSAwOwogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFdlYkdMQWN0aXZlSW5mbzsKICAgICBj
bGFzcyBBcnJheUJ1ZmZlclZpZXc7CkBAIC03MDcsNyArNzExLDE0IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgdm9pZCB2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9u
ZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQpOwogCiAgICAgICAgIHZvaWQgcmVzaGFwZShp
bnQgd2lkdGgsIGludCBoZWlnaHQpOwotICAgICAgICAKKworI2lmIFBMQVRGT1JNKENHKQorICAg
ICAgICB2b2lkIHBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMs
IGludCBpbWFnZVdpZHRoLCBpbnQgaW1hZ2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgY2FudmFzV2lkdGgsIGludCBjYW52YXNIZWlnaHQsIENHQ29udGV4dFJlZiBjb250
ZXh0KTsKKyNlbmRpZgorCisgICAgICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKKwogICAgICAgICAvLyBIZWxwZXJz
IGZvciBub3RpZmljYXRpb24gYWJvdXQgcGFpbnQgZXZlbnRzCiAgICAgICAgIHZvaWQgYmVnaW5Q
YWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpOwogICAgICAgICB2b2lkIGVuZFBh
aW50KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4
dDNEQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0M0RDRy5jcHAJKHJldmlzaW9uIDYyNDA5KQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzYsNiArMzYsOCBAQAogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgogCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5o
PgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldElt
YWdlRGF0YShJbWFnZSogaW1hZ2UsCkBAIC0xMDQsNiArMTA2LDQxIEBAIGJvb2wgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWEKICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQs
IHR5cGUsIG5lZWRlZEFscGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOwogfQogCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdl
UGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LCBpbnQgY2FudmFzV2lkdGgs
IGludCBjYW52YXNIZWlnaHQsIENHQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIGlmICghaW1h
Z2VQaXhlbHMgfHwgaW1hZ2VXaWR0aCA8PSAwIHx8IGltYWdlSGVpZ2h0IDw9IDAgfHwgY2FudmFz
V2lkdGggPD0gMCB8fCBjYW52YXNIZWlnaHQgPD0gMCB8fCAhY29udGV4dCkKKyAgICAgICAgcmV0
dXJuOworICAgIGludCByb3dCeXRlcyA9IGltYWdlV2lkdGggKiA0OworICAgIFJldGFpblB0cjxD
R0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRo
RGF0YSgwLCBpbWFnZVBpeGVscywgcm93Qnl0ZXMgKiBpbWFnZUhlaWdodCwgMCk7CisgICAgUmV0
YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURl
dmljZVJHQigpOworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0gQ0dJbWFnZUNy
ZWF0ZShpbWFnZVdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbWFnZUhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJvd0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZp
cnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dSZW5kZXJpbmdJbnRlbnRE
ZWZhdWx0KTsKKyAgICAvLyBDU1Mgc3R5bGluZyBtYXkgY2F1c2UgdGhlIGNhbnZhcydzIGNvbnRl
bnQgdG8gYmUgcmVzaXplZCBvbgorICAgIC8vIHRoZSBwYWdlLiBHbyBiYWNrIHRvIHRoZSBDYW52
YXMgdG8gZmlndXJlIG91dCB0aGUgY29ycmVjdAorICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgdG8g
ZHJhdy4KKyAgICBDR1JlY3QgcmVjdCA9IENHUmVjdE1ha2UoMCwgMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2FudmFzV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhbnZhc0hlaWdodCk7CisgICAgLy8gV2Ugd2FudCB0byBjb21wbGV0ZWx5IG92ZXJ3cml0ZSB0
aGUgcHJldmlvdXMgZnJhbWUncworICAgIC8vIHJlbmRlcmluZyByZXN1bHRzLgorICAgIENHQ29u
dGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRl
eHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENH
Q29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KGNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAga0NHSW50ZXJwb2xhdGlvbk5vbmUpOworICAgIENHQ29udGV4
dERyYXdJbWFnZShjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICByZWN0LCBjZ0ltYWdl
LmdldCgpKTsKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2MjQwOSkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMTMgQEAKICNpbmNsdWRlICJXZWJHTEJ1ZmZlci5o
IgogI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxl
bWVudC5oIgogI2luY2x1ZGUgIkludDMyQXJyYXkuaCIKICNpbmNsdWRlICJXZWJHTExheWVyLmgi
CiAjaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIu
aCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJHTFNo
YWRlci5oIgogI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgogI2luY2x1ZGUgIlVpbnQ4QXJyYXku
aCIKQEAgLTIzNiw2ICsyMzksNTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRl
eHRDdXJyZQogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CiB9CiAKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2Fu
dmFzID0gY29udGV4dC0+Y2FudmFzKCk7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0g
Y2FudmFzLT5idWZmZXIoKTsKKworICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVudFdpZHRoICog
NDsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0OworCisg
ICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzKG5ldyB1bnNpZ25lZCBjaGFyW3Rv
dGFsQnl0ZXNdKTsKKyAgICBpZiAoIXBpeGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dM
U2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKKworICAgIGJvb2wgbXVzdFJlc3RvcmVG
Qk87CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zi
byk7CisgICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoMCwgMCwgbV9jdXJyZW50V2lkdGgs
IG1fY3VycmVudEhlaWdodCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwg
R0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1
ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgbXVzdFJlc3RvcmVG
Qk8gPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJv
KSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgICAgICA6Omds
QmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICB9
CisgICAgfQorCisgICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7CisgICAgYm9vbCBtdXN0UmVz
dG9yZVBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICA6OmdsR2V0SW50ZWdlcnYoR0xfUEFDS19B
TElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKKyAgICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsK
KyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsKKyAgICAgICAg
bXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICA6OmdsUmVhZFBp
eGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9CR1JBLCBHTF9V
TlNJR05FRF9JTlRfOF84XzhfOF9SRVYsIHBpeGVscy5nZXQoKSk7CisKKyAgICBpZiAobXVzdFJl
c3RvcmVQYWNrQWxpZ25tZW50KQorICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElH
Tk1FTlQsIHBhY2tBbGlnbm1lbnQpOworCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAg
ICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7
CisKKyAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3Vy
cmVudEhlaWdodCwKKyAgICAgICAgICAgICAgICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5o
ZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworfQor
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKIHsKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CkluZGV4OiBXZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VM
b2cJKHJldmlzaW9uIDYzMDQ4KQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA3LTEwICBaaGVueWFvIE1vICA8em1vQGdv
b2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgV2ViR0wgcmVuZGVyaW5nIHJlc3VsdHMgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB0byBDYW52
YXMudG9EYXRhVVJMIGFuZCAyRCBkcmF3SW1hZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NzE5CisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250
ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOiBJbXBsZW1lbnQgcGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmJlZ2luUGFpbnQpOiBKdXN0IHVzZSBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cygpLgorCiAyMDEwLTA3LTA5ICBKb2huIEFiZC1FbC1NYWxlayAgPGphbUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDYyNDA5KQorKysgV2ViS2l0
L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Miw2ICsxMTIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KTsKIAorICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKICAgICB2b2lkIGJlZ2luUGFpbnQoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKICAgICB2b2lkIGVuZFBhaW50KCk7CiAKQEAgLTM5Nyw3
ICszOTgsNyBAQCBXZWJHTExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNESW50CiB9CiAj
ZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBhaW50KFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQogewogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52
YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwpA
QCAtNDQ3LDQ0ICs0NDgsMjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdp
blBhaQogICAgICAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3QobV9yZXNpemluZ0JpdG1hcCwgMCwg
ZHN0KTsKICAgICB9CiAjZWxpZiBQTEFURk9STShDRykKLSAgICBpZiAobV9yZW5kZXJPdXRwdXQp
IHsKLSAgICAgICAgaW50IHJvd0J5dGVzID0gbV9pbXBsLT53aWR0aCgpICogNDsKLSAgICAgICAg
Q0dEYXRhUHJvdmlkZXJSZWYgZGF0YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRo
RGF0YSgwLCBtX3JlbmRlck91dHB1dCwgcm93Qnl0ZXMgKiBtX2ltcGwtPmhlaWdodCgpLCAwKTsK
LSAgICAgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVE
ZXZpY2VSR0IoKTsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gQ0dJbWFnZUNyZWF0ZSht
X2ltcGwtPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbXBsLT5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0J5dGVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvdmlkZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKLSAgICAgICAgLy8g
Q1NTIHN0eWxpbmcgbWF5IGNhdXNlIHRoZSBjYW52YXMncyBjb250ZW50IHRvIGJlIHJlc2l6ZWQg
b24KLSAgICAgICAgLy8gdGhlIHBhZ2UuIEdvIGJhY2sgdG8gdGhlIENhbnZhcyB0byBmaWd1cmUg
b3V0IHRoZSBjb3JyZWN0Ci0gICAgICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgdG8gZHJhdy4KLSAg
ICAgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKDAsIDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5jYW52YXMoKS0+d2lkdGgoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmNhbnZhcygpLT5oZWlnaHQoKSk7Ci0gICAgICAg
IC8vIFdlIHdhbnQgdG8gY29tcGxldGVseSBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGZyYW1lJ3MK
LSAgICAgICAgLy8gcmVuZGVyaW5nIHJlc3VsdHMuCi0gICAgICAgIENHQ29udGV4dFNldEJsZW5k
TW9kZShpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRl
eHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9y
bUNvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NH
SW50ZXJwb2xhdGlvbk5vbmUpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoaW1hZ2VCdWZm
ZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWN0LCBjZ0ltYWdlKTsKLSAgICAgICAgQ0dJbWFnZVJlbGVhc2UoY2dJbWFnZSk7Ci0g
ICAgICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7Ci0gICAgICAgIENHRGF0YVBy
b3ZpZGVyUmVsZWFzZShkYXRhUHJvdmlkZXIpOwotICAgIH0KKyAgICBpZiAobV9yZW5kZXJPdXRw
dXQpCisgICAgICAgIGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnBhaW50VG9DYW52YXMo
bV9yZW5kZXJPdXRwdXQsIG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMtPndp
ZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250
ZXh0KCkpOwogI2Vsc2UKICNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQogI2VuZGlm
CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludChXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMoY29udGV4dCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZW5k
UGFpbnQoKQogewogfQpAQCAtMTMxMSw2ICsxMjg4LDcgQEAgREVMRUdBVEVfVE9fSU5URVJOQUxf
Nih2ZXJ0ZXhBdHRyaWJQb2ludAogCiBERUxFR0FURV9UT19JTlRFUk5BTF80KHZpZXdwb3J0LCBs
b25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCitERUxFR0FURV9UT19J
TlRFUk5BTF8xKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzLCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqKQogREVMRUdBVEVfVE9fSU5URVJOQUxfMShiZWdpblBhaW50LCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqKQogREVMRUdBVEVfVE9fSU5URVJOQUwoZW5kUGFpbnQpCiAKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDYzMDQ4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTAtMDctMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFV
UkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVs
c3RvcmVpLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wv
Z2wtcGl4ZWxzdG9yZWkuaHRtbDogQWRkZWQuCisKIDIwMTAtMDctMTAgIERhbiBCZXJuc3RlaW4g
IDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNzb24u
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wt
cGl4ZWxzdG9yZWktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDIxIEBACisgICAgCitUaGVyZSBzaG91bGQgYmUgNSByZWQgdHJpYW5nbGVzIG9u
IDUgYmxhY2sgc3F1YXJlcyBhYm92ZQorCitUaGlzIHRlc3QgY2hlY2tzIHRoYXQgZHJhd0ltYWdl
IGFuZCByZWFkUGl4ZWxzIGFyZSBub3QgZWZmZWN0ZWQgYnkgZ2wuUGl4ZWxzdG9yZWkoZ2wuUEFD
S19BTElHTk1FTlQpIGFuZCB2aXNhIHZlcnNhCisKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGlu
IDNkIGNvbnRleHQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDJkIGNvbnRleHQKK1BBU1Mg
UEFDS19BTElHTk1FTlQgaXMgMQorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gM2QgY29udGV4
dAorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gMmQgY29udGV4dAorUEFTUyBQQUNLX0FMSUdO
TUVOVCBpcyAyCitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAzZCBjb250ZXh0CitQQVNTIGRy
YXdpbmcgaXMgY29ycmVjdCBpbiAyZCBjb250ZXh0CitQQVNTIFBBQ0tfQUxJR05NRU5UIGlzIDQK
K1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDNkIGNvbnRleHQKK1BBU1MgZHJhd2luZyBpcyBj
b3JyZWN0IGluIDJkIGNvbnRleHQKK1BBU1MgUEFDS19BTElHTk1FTlQgaXMgOAorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWkuaHRtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMg
Ii0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53
My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+V2ViR0wg
cGl4ZWxTdG9yZWkgVGVzdDwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4u
Ly4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVz
b3VyY2VzL3V0aWxzM2QuanMiPiA8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2Vi
Z2wtdGVzdC5qcyI+IDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJleGFt
cGxlIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iMmQwMCIg
d2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxjYW52YXMgaWQ9IjJkMDEiIHdpZHRo
PSI1MCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSIyZDAyIiB3aWR0aD0iNTAi
IGhlaWdodD0iNTAiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iMmQwMyIgd2lkdGg9IjUwIiBoZWln
aHQ9IjUwIj48L2NhbnZhcz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9
ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBpZD0idnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC12
ZXJ0ZXgiPgorYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uOwordm9pZCBtYWluKCkgeworICBnbF9Q
b3NpdGlvbiA9IHZQb3NpdGlvbjsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0IGlkPSJmc2hhZGVy
IiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KK3ZvaWQgbWFpbigpIHsKKyAgZ2xfRnJhZ0Nv
bG9yID0gdmVjNCgxLjAsMC4wLDAuMCwxLjApOworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQ+Citm
dW5jdGlvbiBmYWlsKHgseSwgbmFtZSwgYnVmLCBzaG91bGRCZSkgeworICB2YXIgaSA9ICh5KjUw
K3gpICogNDsKKyAgdmFyIHJlYXNvbiA9ICJwaXhlbCBpbiAiK25hbWUrIiBhdCAoIit4KyIsIit5
KyIpIGlzICgiK2J1ZltpXSsiLCIrYnVmW2krMV0rIiwiK2J1ZltpKzJdKyIsIitidWZbaSszXSsi
KSwgc2hvdWxkIGJlICIrc2hvdWxkQmU7CisgIGFzc2VydE1zZyhmYWxzZSwgcmVhc29uKTsKK30K
KworZnVuY3Rpb24gcGFzcyhuYW1lKSB7CisgIGFzc2VydE1zZyh0cnVlLCAiZHJhd2luZyBpcyBj
b3JyZWN0IGluICIgKyBuYW1lKTsKK30KKworZnVuY3Rpb24gaW5pdCgpIHsKKyAgZGVidWcoIlRo
ZXJlIHNob3VsZCBiZSA1IHJlZCB0cmlhbmdsZXMgb24gNSBibGFjayBzcXVhcmVzIGFib3ZlIik7
CisgIGRlYnVnKCIiKTsKKworICBkZWJ1ZygiVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGRyYXdJbWFn
ZSBhbmQgcmVhZFBpeGVscyBhcmUgbm90IGVmZmVjdGVkIGJ5IGdsLlBpeGVsc3RvcmVpKGdsLlBB
Q0tfQUxJR05NRU5UKSBhbmQgdmlzYSB2ZXJzYSIpOworICBkZWJ1ZygiIik7CisKKyAgdmFyIGNh
bnZhczNkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV4YW1wbGUiKTsKKyAgZ2wgPSBpbml0
V2ViR0woImV4YW1wbGUiLCAidnNoYWRlciIsICJmc2hhZGVyIiwgWyAidlBvc2l0aW9uIl0sIFsg
MCwgMCwgMCwgMSBdLCAxKTsKKworICB2YXIgdmVydGV4T2JqZWN0ID0gZ2wuY3JlYXRlQnVmZmVy
KCk7CisgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2ZXJ0ZXhPYmplY3QpOworICBn
bC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShbIDAsMC41LDAs
IC0wLjUsLTAuNSwwLCAwLjUsLTAuNSwwIF0pLCBnbC5TVEFUSUNfRFJBVyk7CisgIGdsLmVuYWJs
ZVZlcnRleEF0dHJpYkFycmF5KDApOworICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDMsIGds
LkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8
IGdsLkRFUFRIX0JVRkZFUl9CSVQpOworICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwg
Myk7CisKKworICBmdW5jdGlvbiBjaGVja0RhdGEoYnVmLCBuYW1lKSB7CisgICAgLy8gVGVzdCBz
ZXZlcmFsIGxvY2F0aW9ucworICAgIC8vIEZpcnN0IGxpbmUgc2hvdWxkIGJlIGFsbCBibGFjawor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgICAgaWYgKGJ1ZltpKjRdICE9
IDAgfHwgYnVmW2kqNCsxXSAhPSAwIHx8IGJ1ZltpKjQrMl0gIT0gMCB8fCBidWZbaSo0KzNdICE9
IDI1NSkgeworICAgICAgICBmYWlsKGksIDAsIG5hbWUsIGJ1ZiwgIigwLDAsMCwyNTUpIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBMaW5lIDI1IHNob3VsZCBi
ZSByZWQgZm9yIGF0IGxlYXN0IDYgcmVkIHBpeGVscyBzdGFydGluZyAyMiBwaXhlbHMgaW4KKyAg
ICB2YXIgb2Zmc2V0ID0gKDI1KjUwKzIyKSAqIDQ7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2
OyArK2kpIHsKKyAgICAgIGlmIChidWZbb2Zmc2V0K2kqNF0gIT0gMjU1IHx8IGJ1ZltvZmZzZXQr
aSo0KzFdICE9IDAgfHwgYnVmW29mZnNldCtpKjQrMl0gIT0gMCB8fCBidWZbb2Zmc2V0K2kqNCsz
XSAhPSAyNTUpIHsKKyAgICAgICAgZmFpbCgyMiArIGksIDI1LCBuYW1lLCBidWYsICIoMjU1LDAs
MCwyNTUpIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBMYXN0
IGxpbmUgc2hvdWxkIGJlIGFsbCBibGFjaworICAgIG9mZnNldCA9ICg0OSo1MCkgKiA0OworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgICAgaWYgKGJ1ZltvZmZzZXQraSo0
XSAhPSAwIHx8IGJ1ZltvZmZzZXQraSo0KzFdICE9IDAgfHwgYnVmW29mZnNldCtpKjQrMl0gIT0g
MCB8fCBidWZbb2Zmc2V0K2kqNCszXSAhPSAyNTUpIHsKKyAgICAgICAgZmFpbChpLCA0OSwgbmFt
ZSwgYnVmLCAiKDAsMCwwLDI1NSkiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0K
KworICAgIHBhc3MobmFtZSk7CisgIH0KKworICBmdW5jdGlvbiBjaGVja0NvbG9ycygpIHsKKyAg
ICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkoNTAgKiA1MCAqIDQpOworICAgIGdsLnJlYWRQaXhl
bHMoMCwgMCwgNTAsIDUwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBidWYpOworICAgIGNo
ZWNrRGF0YShidWYsICIzZCBjb250ZXh0Iik7CisgICAgdmFyIGltZ0RhdGEgPSBjdHgyZC5nZXRJ
bWFnZURhdGEoMCwgMCwgNTAsIDUwKTsKKyAgICBjaGVja0RhdGEoaW1nRGF0YS5kYXRhLCAiMmQg
Y29udGV4dCIpOworICB9CisKKyAgdmFyIHRhYmxlID0gWzEsIDIsIDQsIDhdOworICBmb3IgKHZh
ciBpaSA9IDA7IGlpIDwgdGFibGUubGVuZ3RoOyArK2lpKSB7CisgICAgZ2wucGl4ZWxTdG9yZWko
Z2wuUEFDS19BTElHTk1FTlQsIHRhYmxlW2lpXSk7CisgICAgY3R4MmQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZCgiMmQwIiArIGlpKS5nZXRDb250ZXh0KCIyZCIpOworICAgIGN0eDJkLmdsb2Jh
bENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JzsKKyAgICBjdHgyZC5kcmF3SW1hZ2UoY2FudmFz
M2QsIDAsIDApOworICAgIGNoZWNrQ29sb3JzKCk7CisgICAgYXNzZXJ0TXNnKGdsLmdldFBhcmFt
ZXRlcihnbC5QQUNLX0FMSUdOTUVOVCkgPT0gdGFibGVbaWldLAorICAgICAgICAiUEFDS19BTElH
Tk1FTlQgaXMgIiArIHRhYmxlW2lpXSk7CisgIH0KK30KKworaW5pdCgpOworc3VjY2Vzc2Z1bGx5
UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3Vy
Y2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="commit-queue"
          id="49142"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61170</attachid>
            <date>2010-07-10 17:47:42 -0700</date>
            <delta_ts>2010-07-10 18:35:15 -0700</delta_ts>
            <desc>revised patch: fix a bug</desc>
            <filename>canvas.patch</filename>
            <type>text/plain</type>
            <size>31020</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzA0OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDctMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFV
UkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1w
aXhlbHN0b3JlaS5odG1sCisgICAgICAgICAgICAgIGZhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10
ZXN0Lmh0bWwKKworICAgICAgICAqIGRvbS9DYW52YXNTdXJmYWNlLmg6CisgICAgICAgIChXZWJD
b3JlOjpDYW52YXNTdXJmYWNlOjp0b0RhdGFVUkwpOiBNYWtlIGl0IHZpcnR1YWwgc28gaXQgY2Fu
IGJlIG92ZXJ3cml0dGVuIGluIEhUTUxDYW52YXNFbGVtZW50LgorICAgICAgICAqIGh0bWwvSFRN
TENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6
OnRvRGF0YVVSTCk6IFBhaW50IHRoZSBXZWJHTCByZW5kZXJpbmcgcmVzdWx0cyB0byBjYW52YXMg
aWYgaXQncyAzZC4KKyAgICAgICAgKiBodG1sL0hUTUxDYW52YXNFbGVtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKTogT3ZlcndyaXRlIHRvRGF0
YVVSTCgpLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFn
ZSk6IFBhaW50IHRoZSBXZWJHTCByZW5kZXJpbmcgcmVzdWx0cyB0byBjYW52YXMgaWYgaXQncyAz
ZCBiZWZvcmUgZHJhd2luZy4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJr
Q29udGV4dENoYW5nZWQpOiBNYXJrIGl0IGFsd2F5cyBmb3IgY2FudmFzMmQuZHJhd0ltYWdlIHB1
cnBvc2UuIAorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6IFBhaW50IHRoZSBXZWJHTCByZW5kZXJpbmcgcmVzdWx0
cyB0byBjYW52YXMgaWYgaXQncyBkaXJ0eS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaDogRGVjbGFyZSBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygp
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmg6IERlY2xh
cmUgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKSAmIHBhaW50VG9DYW52YXMoKS4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFzKTogUGFpbnQg
dGhlIHJlbmRlcmVkIGltYWdlIHBpeGVscyB0byB0aGUgY2FudmFzLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6IElt
cGxlbWVudCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgorCiAyMDEwLTA3LTEwICBE
YW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5k
ZXJzIENhcmxzc29uLgpJbmRleDogV2ViQ29yZS9kb20vQ2FudmFzU3VyZmFjZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0NhbnZhc1N1cmZhY2UuaAkocmV2aXNpb24gNjI0MDkpCisrKyBX
ZWJDb3JlL2RvbS9DYW52YXNTdXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDggKzU5LDgg
QEAgcHVibGljOgogICAgIGludCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS53aWR0aCgp
OyB9CiAgICAgaW50IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZS5oZWlnaHQoKTsgfQog
Ci0gICAgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3Vi
bGUqIHF1YWxpdHksIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiB0b0RhdGFVUkwo
bWltZVR5cGUsIDAsIGVjKTsgfQorICAgIHZpcnR1YWwgU3RyaW5nIHRvRGF0YVVSTChjb25zdCBT
dHJpbmcmIG1pbWVUeXBlLCBjb25zdCBkb3VibGUqIHF1YWxpdHksIEV4Y2VwdGlvbkNvZGUmKTsK
KyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHRvRGF0YVVSTChtaW1lVHlwZSwgMCwgZWMpOyB9CiAK
ICAgICBjb25zdCBJbnRTaXplJiBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9CiAKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gNjI0MDkpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzcsNiAr
Mjc3LDE1IEBAIGJvb2wgSFRNTENhbnZhc0VsZW1lbnQ6OmlzM0QoKSBjb25zdAogewogICAgIHJl
dHVybiBtX2NvbnRleHQgJiYgbV9jb250ZXh0LT5pczNkKCk7CiB9CisKK1N0cmluZyBIVE1MQ2Fu
dmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIGNvbnN0IGRvdWJs
ZSogcXVhbGl0eSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKGlzM0QoKSkgeworICAg
ICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQzZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4ocmVuZGVyaW5nQ29udGV4dCgpKTsKKyAgICAgICAgY29u
dGV4dDNkLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIH0KKyAgICByZXR1
cm4gQ2FudmFzU3VyZmFjZTo6dG9EYXRhVVJMKG1pbWVUeXBlLCBxdWFsaXR5LCBlYyk7Cit9CiAj
ZW5kaWYKIAogdm9pZCBIVE1MQ2FudmFzRWxlbWVudDo6cmVjYWxjU3R5bGUoU3R5bGVDaGFuZ2Ug
Y2hhbmdlKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHJldmlzaW9uIDYyNDA5KQor
KysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5
LDYgKzg5LDkgQEAgcHVibGljOgogCiAjaWYgRU5BQkxFKDNEX0NBTlZBUykgICAgCiAgICAgYm9v
bCBpczNEKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIFN0cmluZyB0b0RhdGFVUkwoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgY29uc3QgZG91YmxlKiBxdWFsaXR5LCBFeGNlcHRpb25Db2RlJik7Cisg
ICAgdmlydHVhbCBTdHJpbmcgdG9EYXRhVVJMKGNvbnN0IFN0cmluZyYgbWltZVR5cGUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKSB7IHJldHVybiB0b0RhdGFVUkwobWltZVR5cGUsIDAsIGVjKTsgfQogI2Vu
ZGlmCiAKIHByaXZhdGU6CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA2MjQwOSkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMs
NiArNjMsMTAgQEAKICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNl
ZFBhcmFtLmg+CiAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorI2luY2x1ZGUgIldlYkdMUmVuZGVy
aW5nQ29udGV4dC5oIgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKQEAgLTExMjQsNiArMTEyOCwxMyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgaWYgKCFzb3VyY2VDYW52YXMtPm9yaWdpbkNsZWFuKCkp
CiAgICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7CiAKKyNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQorICAgIGlmIChzb3VyY2VDYW52YXMtPmlzM0QoKSkgeworICAgICAgICBXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQzZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJp
bmdDb250ZXh0Kj4oc291cmNlQ2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpOworICAgICAgICBj
b250ZXh0M2QtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgfQorI2VuZGlm
CisKICAgICBjLT5kcmF3SW1hZ2UoYnVmZmVyLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBk
ZXN0UmVjdCwgc291cmNlUmVjdCwgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSk7CiAgICAgd2ls
bERyYXcoZGVzdFJlY3QpOyAvLyBUaGlzIGNhbGwgY29tZXMgYWZ0ZXIgZHJhd0ltYWdlLCBzaW5j
ZSB0aGUgYnVmZmVyIHdlIGRyYXcgaW50byBtYXkgYmUgb3VyIG93biwgYW5kIHdlIG5lZWQgdG8g
bWFrZSBzdXJlIGl0IGlzIGRpcnR5LgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IEFyZ3VhYmx5IHdpbGxEcmF3IHNob3VsZCBiZWNvbWUgZGlkRHJhdyBhbmQgb2NjdXIgYWZ0ZXIg
ZHJhd2luZyBjYWxscyBhbmQgbm90IGJlZm9yZSB0aGVtIHRvIGF2b2lkIHByb2JsZW1zIGxpa2Ug
dGhpcy4KSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4
dC5jcHAJKHJldmlzaW9uIDYyNDA5KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsMTcgKzE0MSwyMyBAQCB2b2lk
IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDCiAgICAgUmVuZGVyQm94KiByZW5k
ZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94KCk7CiAgICAgaWYgKHJlbmRlckJveCAmJiByZW5k
ZXJCb3gtPmhhc0xheWVyKCkgJiYgcmVuZGVyQm94LT5sYXllcigpLT5oYXNBY2NlbGVyYXRlZENv
bXBvc2l0aW5nKCkpCiAgICAgICAgIHJlbmRlckJveC0+bGF5ZXIoKS0+cmVuZGVyZXJDb250ZW50
Q2hhbmdlZCgpOwotICAgIGVsc2UgewogI2VuZGlmCi0gICAgICAgIGlmICghbV9tYXJrZWRDYW52
YXNEaXJ0eSkgewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjYW52YXMncyBpbWFnZSBi
dWZmZXIgaXMgYWxsb2NhdGVkLgotICAgICAgICAgICAgY2FudmFzKCktPmJ1ZmZlcigpOwotICAg
ICAgICAgICAgY2FudmFzKCktPndpbGxEcmF3KEZsb2F0UmVjdCgwLCAwLCBjYW52YXMoKS0+d2lk
dGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBtX21hcmtlZENhbnZhc0Rp
cnR5ID0gdHJ1ZTsKLSAgICAgICAgfQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
KyAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGlydHkpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRo
ZSBjYW52YXMncyBpbWFnZSBidWZmZXIgaXMgYWxsb2NhdGVkLgorICAgICAgICBjYW52YXMoKS0+
YnVmZmVyKCk7CisgICAgICAgIGNhbnZhcygpLT53aWxsRHJhdyhGbG9hdFJlY3QoMCwgMCwgY2Fu
dmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOworICAgICAgICBtX21hcmtlZENh
bnZhc0RpcnR5ID0gdHJ1ZTsKICAgICB9Ci0jZW5kaWYKK30KKworYm9vbCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkKK3sKKyAgICBpZiAobV9t
YXJrZWRDYW52YXNEaXJ0eSkgeworICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7
CisgICAgICAgIG1fY29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcyk7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZv
aWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpiZWdpblBhaW50KCkKSW5kZXg6IFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gNjI0MDkpCisrKyBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMDQsNiArMzA0LDEwIEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAKICAgICAg
ICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKKyAgICAgICAgLy8gUmV0
dXJuIHZhbHVlIHRydWUgaW5kaWNhdGVzIGNhbnZhcyBpcyB1cGRhdGVkIGR1cmluZyB0aGUgY2Fs
bCwKKyAgICAgICAgLy8gZmFsc2UgaW5kaWNhdGVzIG5vIHVwZGF0ZXMuCisgICAgICAgIGJvb2wg
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKwogICAgICAgICAvLyBIZWxwZXJzIGZv
ciBub3RpZmljYXRpb24gYWJvdXQgcGFpbnQgZXZlbnRzLgogICAgICAgICB2b2lkIGJlZ2luUGFp
bnQoKTsKICAgICAgICAgdm9pZCBlbmRQYWludCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNjI0MDkpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDYgKzY4LDEwIEBAIHR5cGVkZWYgaW50IFBsYXRmb3JtM0RPYmplY3Q7CiBjb25zdCBQ
bGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9ybTNET2JqZWN0ID0gMDsKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgorI2VuZGlm
CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBXZWJHTEFjdGl2ZUluZm87CiAgICAg
Y2xhc3MgQXJyYXlCdWZmZXJWaWV3OwpAQCAtNzA3LDcgKzcxMSwxNCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZvaWQgdmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2lnbmVkIGxv
bmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAogICAgICAgICB2b2lkIHJlc2hhcGUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSAgICAgICAgCisKKyNpZiBQTEFURk9STShDRykKKyAg
ICAgICAgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxz
LCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IGNhbnZhc1dpZHRoLCBpbnQgY2FudmFzSGVpZ2h0LCBDR0NvbnRleHRSZWYgY29u
dGV4dCk7CisjZW5kaWYKKworICAgICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7CisKICAgICAgICAgLy8gSGVscGVy
cyBmb3Igbm90aWZpY2F0aW9uIGFib3V0IHBhaW50IGV2ZW50cwogICAgICAgICB2b2lkIGJlZ2lu
UGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKICAgICAgICAgdm9pZCBlbmRQ
YWludCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRl
eHQzRENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dy
YXBoaWNzQ29udGV4dDNEQ0cuY3BwCShyZXZpc2lvbiA2MjQwOSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDYgKzM2LDggQEAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CiAjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2UuaD4KIAorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJ
bWFnZURhdGEoSW1hZ2UqIGltYWdlLApAQCAtMTA0LDYgKzEwNiw0MSBAQCBib29sIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hCiAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0
LCB0eXBlLCBuZWVkZWRBbHBoYU9wLCBvdXRwdXRWZWN0b3IuZGF0YSgpKTsKIH0KIAordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFn
ZVBpeGVscywgaW50IGltYWdlV2lkdGgsIGludCBpbWFnZUhlaWdodCwgaW50IGNhbnZhc1dpZHRo
LCBpbnQgY2FudmFzSGVpZ2h0LCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBpZiAoIWlt
YWdlUGl4ZWxzIHx8IGltYWdlV2lkdGggPD0gMCB8fCBpbWFnZUhlaWdodCA8PSAwIHx8IGNhbnZh
c1dpZHRoIDw9IDAgfHwgY2FudmFzSGVpZ2h0IDw9IDAgfHwgIWNvbnRleHQpCisgICAgICAgIHJl
dHVybjsKKyAgICBpbnQgcm93Qnl0ZXMgPSBpbWFnZVdpZHRoICogNDsKKyAgICBSZXRhaW5QdHI8
Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aERhdGEoMCwgaW1hZ2VQaXhlbHMsIHJvd0J5dGVzICogaW1hZ2VIZWlnaHQsIDApOworICAgIFJl
dGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVE
ZXZpY2VSR0IoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZSA9IENHSW1hZ2VD
cmVhdGUoaW1hZ2VXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW1hZ2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByb3dCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRG
aXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVByb3ZpZGVyLmdldCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHUmVuZGVyaW5nSW50ZW50
RGVmYXVsdCk7CisgICAgLy8gQ1NTIHN0eWxpbmcgbWF5IGNhdXNlIHRoZSBjYW52YXMncyBjb250
ZW50IHRvIGJlIHJlc2l6ZWQgb24KKyAgICAvLyB0aGUgcGFnZS4gR28gYmFjayB0byB0aGUgQ2Fu
dmFzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QKKyAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IHRv
IGRyYXcuCisgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKDAsIDAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNhbnZhc1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYW52YXNIZWlnaHQpOworICAgIC8vIFdlIHdhbnQgdG8gY29tcGxldGVseSBvdmVyd3JpdGUg
dGhlIHByZXZpb3VzIGZyYW1lJ3MKKyAgICAvLyByZW5kZXJpbmcgcmVzdWx0cy4KKyAgICBDR0Nv
bnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBD
R0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtDR0ludGVycG9sYXRpb25Ob25lKTsKKyAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVjdCwgY2dJbWFn
ZS5nZXQoKSk7CisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKK30KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQkocmV2aXNpb24gNjI0MDkpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMzgsMTAgKzM4LDEzIEBACiAjaW5jbHVkZSAiV2ViR0xCdWZmZXIu
aCIKICNpbmNsdWRlICJGbG9hdDMyQXJyYXkuaCIKICNpbmNsdWRlICJXZWJHTEZyYW1lYnVmZmVy
LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTENhbnZhc0Vs
ZW1lbnQuaCIKICNpbmNsdWRlICJJbnQzMkFycmF5LmgiCiAjaW5jbHVkZSAiV2ViR0xMYXllci5o
IgogI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVyYnVmZmVy
LmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViR0xT
aGFkZXIuaCIKICNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKICNpbmNsdWRlICJVaW50OEFycmF5
LmgiCkBAIC0yMzYsNiArMjM5LDU0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250
ZXh0Q3VycmUKICAgICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopOwogfQogCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9
IGNhbnZhcy0+YnVmZmVyKCk7CisKKyAgICBpbnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRXaWR0aCAq
IDQ7CisgICAgaW50IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdodDsKKwor
ICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHBpeGVscyhuZXcgdW5zaWduZWQgY2hhclt0
b3RhbEJ5dGVzXSk7CisgICAgaWYgKCFwaXhlbHMpCisgICAgICAgIHJldHVybjsKKworICAgIENH
TFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CisKKyAgICBib29sIG11c3RSZXN0b3Jl
RkJPOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsKKyAg
ICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VYVCwgbV9m
Ym8pOworICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKDAsIDAsIG1fY3VycmVudFdpZHRo
LCBtX2N1cnJlbnRIZWlnaHQsIDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQs
IEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIG11c3RSZXN0b3Jl
RkJPID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9ib3VuZEZCTyAhPSBtX2Zi
bykgeworICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIEdMaW50IHBhY2tBbGlnbm1lbnQgPSA0OworICAgIGJvb2wgbXVzdFJl
c3RvcmVQYWNrQWxpZ25tZW50ID0gZmFsc2U7CisgICAgOjpnbEdldEludGVnZXJ2KEdMX1BBQ0tf
QUxJR05NRU5ULCAmcGFja0FsaWdubWVudCk7CisgICAgaWYgKHBhY2tBbGlnbm1lbnQgPiA0KSB7
CisgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgNCk7CisgICAgICAg
IG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7CisgICAgfQorCisgICAgOjpnbFJlYWRQ
aXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQkdSQSwgR0xf
VU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMuZ2V0KCkpOworCisgICAgaWYgKG11c3RS
ZXN0b3JlUGFja0FsaWdubWVudCkKKyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJ
R05NRU5ULCBwYWNrQWxpZ25tZW50KTsKKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykKKyAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91bmRGQk8p
OworCisgICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRoLCBtX2N1
cnJlbnRIZWlnaHQsCisgICAgICAgICAgICAgICAgICBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+
aGVpZ2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKK30K
Kwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwpJbmRleDogV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCShyZXZpc2lvbiA2MzA0OCkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wNy0xMCAgWmhlbnlhbyBNbyAgPHptb0Bn
b29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFdlYkdMIHJlbmRlcmluZyByZXN1bHRzIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdG8gQ2Fu
dmFzLnRvRGF0YVVSTCBhbmQgMkQgZHJhd0ltYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDcxOQorCisgICAgICAgICogc3JjL0dyYXBoaWNzQ29u
dGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKTogSW1wbGVtZW50IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpiZWdpblBhaW50KTogSnVzdCB1c2UgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoKS4KKwogMjAxMC0wNy0wOSAgSm9obiBBYmQtRWwtTWFsZWsgIDxqYW1AY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJv
bWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCShyZXZpc2lvbiA2MjQwOSkKKysrIFdlYktp
dC9jaHJvbWl1bS9zcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTIsNiArMTEyLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50
IGhlaWdodCk7CiAKKyAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7CiAgICAgdm9pZCBiZWdpblBhaW50KFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCk7CiAgICAgdm9pZCBlbmRQYWludCgpOwogCkBAIC0zOTcs
NyArMzk4LDcgQEAgV2ViR0xMYXllckNocm9taXVtKiBHcmFwaGljc0NvbnRleHQzREludAogfQog
I2VuZGlmCiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludChXZWJH
TFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCkKIHsKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2Fu
dmFzKCk7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsK
QEAgLTQ0Nyw0NCArNDQ4LDIwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVn
aW5QYWkKICAgICAgICAgY2FudmFzLmRyYXdCaXRtYXBSZWN0KG1fcmVzaXppbmdCaXRtYXAsIDAs
IGRzdCk7CiAgICAgfQogI2VsaWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKG1fcmVuZGVyT3V0cHV0
KSB7Ci0gICAgICAgIGludCByb3dCeXRlcyA9IG1faW1wbC0+d2lkdGgoKSAqIDQ7Ci0gICAgICAg
IENHRGF0YVByb3ZpZGVyUmVmIGRhdGFQcm92aWRlciA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aERhdGEoMCwgbV9yZW5kZXJPdXRwdXQsIHJvd0J5dGVzICogbV9pbXBsLT5oZWlnaHQoKSwgMCk7
Ci0gICAgICAgIENHQ29sb3JTcGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRl
RGV2aWNlUkdCKCk7Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IENHSW1hZ2VDcmVhdGUo
bV9pbXBsLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1faW1wbC0+aGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgOCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAz
MiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dCeXRlcywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQ
cmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVByb3ZpZGVyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7Ci0gICAgICAgIC8v
IENTUyBzdHlsaW5nIG1heSBjYXVzZSB0aGUgY2FudmFzJ3MgY29udGVudCB0byBiZSByZXNpemVk
IG9uCi0gICAgICAgIC8vIHRoZSBwYWdlLiBHbyBiYWNrIHRvIHRoZSBDYW52YXMgdG8gZmlndXJl
IG91dCB0aGUgY29ycmVjdAotICAgICAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IHRvIGRyYXcuCi0g
ICAgICAgIENHUmVjdCByZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+Y2FudmFzKCktPndpZHRoKCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5jYW52YXMoKS0+aGVpZ2h0KCkpOwotICAgICAg
ICAvLyBXZSB3YW50IHRvIGNvbXBsZXRlbHkgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBmcmFtZSdz
Ci0gICAgICAgIC8vIHJlbmRlcmluZyByZXN1bHRzLgotICAgICAgICBDR0NvbnRleHRTZXRCbGVu
ZE1vZGUoaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250
ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZv
cm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtD
R0ludGVycG9sYXRpb25Ob25lKTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGltYWdlQnVm
ZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmVjdCwgY2dJbWFnZSk7Ci0gICAgICAgIENHSW1hZ2VSZWxlYXNlKGNnSW1hZ2UpOwot
ICAgICAgICBDR0NvbG9yU3BhY2VSZWxlYXNlKGNvbG9yU3BhY2UpOwotICAgICAgICBDR0RhdGFQ
cm92aWRlclJlbGVhc2UoZGF0YVByb3ZpZGVyKTsKLSAgICB9CisgICAgaWYgKG1fcmVuZGVyT3V0
cHV0KQorICAgICAgICBjb250ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5wYWludFRvQ2FudmFz
KG1fcmVuZGVyT3V0cHV0LCBtX2ltcGwtPndpZHRoKCksIG1faW1wbC0+aGVpZ2h0KCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLT53
aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpKTsKICNlbHNlCiAjZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KICNlbmRp
ZgogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpbnQoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIHBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKGNvbnRleHQpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmVu
ZFBhaW50KCkKIHsKIH0KQEAgLTEzMTEsNiArMTI4OCw3IEBAIERFTEVHQVRFX1RPX0lOVEVSTkFM
XzYodmVydGV4QXR0cmliUG9pbnQKIAogREVMRUdBVEVfVE9fSU5URVJOQUxfNCh2aWV3cG9ydCwg
bG9uZywgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykKIAorREVMRUdBVEVfVE9f
SU5URVJOQUxfMShwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywgV2ViR0xSZW5kZXJpbmdD
b250ZXh0KikKIERFTEVHQVRFX1RPX0lOVEVSTkFMXzEoYmVnaW5QYWludCwgV2ViR0xSZW5kZXJp
bmdDb250ZXh0KikKIERFTEVHQVRFX1RPX0lOVEVSTkFMKGVuZFBhaW50KQogCkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA2MzA0OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE1IEBACisyMDEwLTA3LTEwICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViR0wg
cmVuZGVyaW5nIHJlc3VsdHMgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB0byBDYW52YXMudG9EYXRh
VVJMIGFuZCAyRCBkcmF3SW1hZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTM0NzE5CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMt
dGVzdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2Nh
bnZhcy10ZXN0Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2dsLXBp
eGVsc3RvcmVpLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2Vi
Z2wvZ2wtcGl4ZWxzdG9yZWkuaHRtbDogQWRkZWQuCisKIDIwMTAtMDctMTAgIERhbiBCZXJuc3Rl
aW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBbmRlcnMgQ2FybHNz
b24uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY2Fu
dmFzLXRlc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvY2FudmFzLXRlc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDE2IEBACitUaGlzIHRlc3QgZW5zdXJlcyBXZWJHTCBpbXBsZW1lbnRhdGlvbnMgaW50ZXJh
Y3QgY29ycmVjdGx5IHdpdGggdGhlIGNhbnZhcyB0YWcuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitDYW52YXMuZ2V0Q29udGV4dAorUEFTUyBjb250ZXh0IGV4aXN0cworCitDaGVj
a2luZyBjYW52YXMgYW5kIFdlYkdMIGludGVyYWN0aW9uCitQQVNTIGNhbnZhcy53aWR0aCBpcyAz
MDAKK1BBU1MgY2FudmFzLmhlaWdodCBpcyAxNTAKK1BBU1MgcGl4ZWxzIGFyZSAwLDAsMCwwCitQ
QVNTIGdldFZpZXdwb3J0KCkgaXMgIjAsMCwzMDAsMTUwIgorCitjaGFuZ2UgZGlzcGxheSBzaXpl
IG9mIGNhbnZhcyBhbmQgc2VlIHRoYXQgdmlld3BvcnQgZG9lcyBub3QgY2hhbmdlCisgCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0Lmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4NyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgImh0dHA6Ly93d3cu
dzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1l
cXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgor
PHRpdGxlPldlYkdMIENhbnZhcyBDb25mb3JtYW5jZSBUZXN0czwvdGl0bGU+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIv
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgc3R5bGU9IndpZHRoOiA1MHB4OyBoZWln
aHQ6IDUwcHg7Ij4gPC9jYW52YXM+Cis8Y2FudmFzIGlkPSJjYW52YXMyZCIgd2lkdGg9IjQwIiBo
ZWlnaHQ9IjQwIj4gPC9jYW52YXM+Cis8c2NyaXB0PgorZGVzY3JpcHRpb24oIlRoaXMgdGVzdCBl
bnN1cmVzIFdlYkdMIGltcGxlbWVudGF0aW9ucyBpbnRlcmFjdCBjb3JyZWN0bHkgd2l0aCB0aGUg
Y2FudmFzIHRhZy4iKTsKKworZGVidWcoIiIpOworZGVidWcoIkNhbnZhcy5nZXRDb250ZXh0Iik7
CisKK3ZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzIik7Cit2YXIg
Y2FudmFzMmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzMmQiKTsKK3ZhciBjdHgy
ZCA9IGNhbnZhczJkLmdldENvbnRleHQoIjJkIik7Cit2YXIgZ2wgPSBudWxsOwordHJ5IHsKKyAg
Z2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIik7Cit9IGNhdGNoKGUp
IHt9CitpZiAoIWdsKSB7CisgIHRyeSB7CisgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgid2Vi
a2l0LTNkIik7CisgIH0gY2F0Y2goZSkge30KK30KK2lmICghZ2wpIHsKKyAgdGVzdEZhaWxlZCgi
Y29udGV4dCBkb2VzIG5vdCBleGlzdCIpOworfSBlbHNlIHsKKyAgdGVzdFBhc3NlZCgiY29udGV4
dCBleGlzdHMiKTsKKworICBkZWJ1ZygiIik7CisgIGRlYnVnKCJDaGVja2luZyBjYW52YXMgYW5k
IFdlYkdMIGludGVyYWN0aW9uIik7CisKKyAgLy8gQ2hlY2sgdGhhdCBhIGNhbnZhcyB3aXRoIG5v
IHdpZHRoIG9yIGhlaWdodCBpcyAzMDB4MTUwIHBpeGVscworICBzaG91bGRCZSgnY2FudmFzLndp
ZHRoJywgJzMwMCcpOworICBzaG91bGRCZSgnY2FudmFzLmhlaWdodCcsICcxNTAnKTsKKworICAv
LyBDaGVjayBnZXQgYSA0IHZhbHVlIGdsIHBhcmFtZXRlciBhcyBhIGNzdiBzdHJpbmcuCisgIGZ1
bmN0aW9uIGdldFZhbHVlNHYobmFtZSkgeworICAgIHZhciB2ID0gZ2wuZ2V0UGFyYW1ldGVyKG5h
bWUpOworICAgIHZhciByZXN1bHQgPSAnJyArCisgICAgICAgIHZbMF0gKyAnLCcgKworICAgICAg
ICB2WzFdICsgJywnICsKKyAgICAgICAgdlsyXSArICcsJyArCisgICAgICAgIHZbM107CisgICAg
cmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGZ1bmN0aW9uIGdldFZpZXdwb3J0KCkgeworICAgIHJl
dHVybiBnZXRWYWx1ZTR2KGdsLlZJRVdQT1JUKTsKKyAgfQorCisgIGZ1bmN0aW9uIGdldENsZWFy
Q29sb3IoKSB7CisgICAgcmV0dXJuIGdldFZhbHVlNHYoZ2wuQ09MT1JfQ0xFQVJfVkFMVUUpOwor
ICB9CisKKyAgZnVuY3Rpb24gaXNBYm91dEVxdWFsKGEsIGIpIHsKKyAgICByZXR1cm4gTWF0aC5h
YnMoYSAtIGIpIDwgMC4wMTsKKyAgfQorCisgIGZ1bmN0aW9uIGlzQWJvdXRFcXVhbEludChhLCBi
KSB7CisgICAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8IDM7CisgIH0KKworICBmdW5jdGlvbiBj
aGVja0NhbnZhc0NvbnRlbnRJcyhyM2QsZzNkLGIzZCxhM2QpIHsKKyAgICB2YXIgcjJkOworICAg
IHZhciBnMmQ7CisgICAgdmFyIGIyZDsKKyAgICB2YXIgYTJkOworCisgICAgZnVuY3Rpb24gY2hl
Y2tQaXhlbCh4LCB5LCByM2QsZzNkLGIzZCxhM2QpIHsKKyAgICAgIHZhciBvZmZzZXQgPSAoeSAq
IDQwICsgeCkgKiA0OworICAgICAgcjJkID0gaW1nRGF0YS5kYXRhW29mZnNldF07CisgICAgICBn
MmQgPSBpbWdEYXRhLmRhdGFbb2Zmc2V0ICsgMV07CisgICAgICBiMmQgPSBpbWdEYXRhLmRhdGFb
b2Zmc2V0ICsgMl07CisgICAgICBhMmQgPSBpbWdEYXRhLmRhdGFbb2Zmc2V0ICsgM107CisgICAg
ICAvL2RlYnVnKCcnICsgeCArICcsICcgKyB5ICsgIigiICsgb2Zmc2V0ICsgIikgPSAiICsgcjJk
ICsgIiwgIiArIGcyZCArICIsICIgKyBiMmQgKyAiLCAiICsgYTJkKTsKKyAgICAgIHJldHVybiBp
c0Fib3V0RXF1YWxJbnQocjJkLCByM2QpICYmCisgICAgICAgICAgICAgaXNBYm91dEVxdWFsSW50
KGcyZCwgZzNkKSAmJgorICAgICAgICAgICAgIGlzQWJvdXRFcXVhbEludChiMmQsIGIzZCkgJiYK
KyAgICAgICAgICAgICBpc0Fib3V0RXF1YWxJbnQoYTJkLCBhM2QpOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGNoZWNrUGl4ZWxzKHIzZCxnM2QsYjNkLGEzZCkgeworICAgICAgcmV0dXJuIGNoZWNr
UGl4ZWwoMCwgMCwgcjNkLCBnM2QsIGIzZCwgYTNkKSAmJgorICAgICAgICAgICAgIGNoZWNrUGl4
ZWwoMCwgMzksIHIzZCwgZzNkLCBiM2QsIGEzZCkgJiYKKyAgICAgICAgICAgICBjaGVja1BpeGVs
KDM5LCAwLCByM2QsIGczZCwgYjNkLCBhM2QpICYmCisgICAgICAgICAgICAgY2hlY2tQaXhlbCgz
OSwgMzksIHIzZCwgZzNkLCBiM2QsIGEzZCk7CisgICAgfTsKKworICAgIC8vIFNldCB0byBqdXN0
IHRha2UgdGhlIGNvbG9yIGZyb20gdGhlIDNkIGNhbnZhcworICAgIGN0eDJkLmdsb2JhbENvbXBv
c2l0ZU9wZXJhdGlvbiA9ICdjb3B5JzsKKworICAgIC8vIGZpbGwgMmQgY2FudmFzIHdpdGggb3Jh
bmdlCisgICAgY3R4MmQuZmlsbFN0eWxlID0gInJnYigyNTUsMTkyLDEyOCkiOworICAgIGN0eDJk
LmZpbGxSZWN0ICgwLCAwLCA0MCwgNDApOworCisgICAgLy8gZ2V0IHRoZSBpbWFnZSBkYXRhCisg
ICAgdmFyIGltZ0RhdGEgPSBjdHgyZC5nZXRJbWFnZURhdGEoMCwgMCwgNDAsIDQwKTsKKworICAg
IC8vIGNoZWNrIGl0IGdvdCBjbGVhcmVkLgorICAgIGlmICghY2hlY2tQaXhlbHMoMjU1LCAxOTIs
IDEyOCwgMjU1KSkgeworICAgICAgdGVzdEZhaWxlZCgidW5hYmxlIHRvIGZpbGwgMmQgY29udGV4
dC4iKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBkcmF3IDNkIGNhbnZhcyBvbiB0
b3AuCisgICAgY3R4MmQuZHJhd0ltYWdlKGNhbnZhcywgMCwgMCwgNDAsIDQwKTsKKworICAgIC8v
IGdldCB0aGUgaW1hZ2UgZGF0YQorICAgIHZhciBpbWdEYXRhID0gY3R4MmQuZ2V0SW1hZ2VEYXRh
KDAsIDAsIDQwLCA0MCk7CisKKyAgICAvLyBDaGVjayBpdCdzIHRoZSBleHBlY3RlZCBjb2xvci4K
KyAgICBpZiAoIWNoZWNrUGl4ZWxzKHIzZCwgZzNkLCBiM2QsIGEzZCkpIHsKKyAgICAgIHRlc3RG
YWlsZWQoInBpeGVscyBhcmUgIiArIHIyZCArICIsIiArIGcyZCArICIsIiArIGIyZCArICIsIiAr
IGEyZCArCisgICAgICAgICAgICAgICAgICIgZXhwZWN0ZWQgIiArIHIzZCArICIsIiArIGczZCAr
ICIsIiArIGIzZCArICIsIiArIGEzZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlc3RQYXNzZWQo
InBpeGVscyBhcmUgIiArIHIzZCArICIsIiArIGczZCArICIsIiArIGIzZCArICIsIiArIGEzZCk7
CisgICAgfQorICB9CisKKyAgY2hlY2tDYW52YXNDb250ZW50SXMoMCwgMCwgMCwgMCk7CisgIHNo
b3VsZEJlKCdnZXRWaWV3cG9ydCgpJywgJyIwLDAsMzAwLDE1MCInKTsKKworICAvLyBDaGFuZ2Ug
dGhlIGRpc3BsYXkgc2l6ZSBvZiB0aGUgY2FudmFzIGFuZCBjaGVjaworICAvLyB0aGUgdmlld3Bv
cnQgc2l6ZSBkb2VzIG5vdCBjaGFuZ2UuCisgIGRlYnVnKCIiKTsKKyAgZGVidWcoImNoYW5nZSBk
aXNwbGF5IHNpemUgb2YgY2FudmFzIGFuZCBzZWUgdGhhdCB2aWV3cG9ydCBkb2VzIG5vdCBjaGFu
Z2UiKTsKKyAgY2FudmFzLnN0eWxlLndpZHRoID0gIjEwMHB4IjsKKyAgY2FudmFzLnN0eWxlLmhl
aWdodCA9ICIyNXB4IjsKKyAgdmFyIGludGVydmFsSWQ7CisgIGludGVydmFsSWQgPSB3aW5kb3cu
c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CisgICAgaWYgKGNhbnZhcy5jbGllbnRXaWR0aCA9PSAx
MDAgJiYKKyAgICAgICAgY2FudmFzLmNsaWVudEhlaWdodCA9PSAyNSkgeworICAgICAgd2luZG93
LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7CisgICAgICBzaG91bGRCZSgnZ2V0Vmlld3BvcnQo
KScsICciMCwwLDMwMCwxNTAiJyk7CisgICAgICBzaG91bGRCZSgnY2FudmFzLndpZHRoJywgJzMw
MCcpOworICAgICAgc2hvdWxkQmUoJ2NhbnZhcy5oZWlnaHQnLCAnMTUwJyk7CisKKyAgICAgIC8v
IENoYW5nZSB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNhbnZhcworICAgICAgLy8gQ2hlY2sgdGhh
dCB0aGUgdmlld3BvcnQgZG9lcyBub3QgY2hhbmdlLgorICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUg
Y2xlYXIgY29sb3IgZG9lcyBub3QgY2hhbmdlLgorICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgY29s
b3IgbWFzayBkb2VzIG5vdCBjaGFuZ2UuCisgICAgICBkZWJ1ZygiIik7CisgICAgICBkZWJ1Zygi
Y2hhbmdlIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgY2FudmFzIGFuZCBzZWUgdGhhdCB0aGUgdmll
d3BvcnQgZG9lcyBub3QgY2hhbmdlIik7CisgICAgICBnbC5jbGVhckNvbG9yKDAuMjUsIDAuNSwg
MC43NSwgMSk7CisgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhf
QlVGRkVSX0JJVCk7CisgICAgICBjaGVja0NhbnZhc0NvbnRlbnRJcyg2NCwgMTI4LCAxOTIsIDI1
NSk7CisgICAgICBnbC5jb2xvck1hc2soMCwwLDAsMCk7CisgICAgICBjYW52YXMud2lkdGggPSA0
MDA7CisgICAgICBjYW52YXMuaGVpZ2h0ID0gMTA7CisKKyAgICAgIHZhciB2ID0gZ2wuZ2V0UGFy
YW1ldGVyKGdsLkNPTE9SX0NMRUFSX1ZBTFVFKTsKKyAgICAgIGFzc2VydE1zZyhpc0Fib3V0RXF1
YWwodlswXSwgMC4yNSkgJiYKKyAgICAgICAgICAgICAgICBpc0Fib3V0RXF1YWwodlsxXSwgMC41
KSAmJgorICAgICAgICAgICAgICAgIGlzQWJvdXRFcXVhbCh2WzJdLCAwLjc1KSAmJgorICAgICAg
ICAgICAgICAgIGlzQWJvdXRFcXVhbCh2WzNdLCAxKSwKKyAgICAgICAgICAgICAgICAiZ2wuY2xl
YXJDb2xvciBzaG91bGQgbm90IGNoYW5nZSBhZnRlciBjYW52YXMgcmVzaXplIik7CisgICAgICB2
ID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLkNPTE9SX1dSSVRFTUFTSyk7CisgICAgICBhc3NlcnRNc2co
aXNBYm91dEVxdWFsKHZbMF0sIDApICYmCisgICAgICAgICAgICAgICAgaXNBYm91dEVxdWFsKHZb
MV0sIDApICYmCisgICAgICAgICAgICAgICAgaXNBYm91dEVxdWFsKHZbMl0sIDApICYmCisgICAg
ICAgICAgICAgICAgaXNBYm91dEVxdWFsKHZbM10sIDApLAorICAgICAgICAgICAgICAgICJnbC5j
b2xvck1hc2sgc2hvdWxkIG5vdCBjaGFuZ2UgYWZ0ZXIgY2FudmFzIHJlc2l6ZSIpOworICAgICAg
c2hvdWxkQmUoJ2dldFZpZXdwb3J0KCknLCAnIjAsMCwzMDAsMTUwIicpOworICAgICAgY2hlY2tD
YW52YXNDb250ZW50SXMoMCwgMCwgMCwgMCk7CisKKyAgICAgIGRlYnVnKCIiKTsKKyAgICAgIHN1
Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgICAgICBzaG91bGRCZVRydWUoInN1Y2Nlc3NmdWxs
eVBhcnNlZCIpOworICAgICAgZGVidWcoJzxiciAvPjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENP
TVBMRVRFPC9zcGFuPicpOworICAgIH0KKyAgfSwgMTAwMC8zMCk7Cit9CisKKzwvc2NyaXB0Pgor
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9n
bC1waXhlbHN0b3JlaS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWktZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACisgICAgCitUaGVyZSBzaG91bGQgYmUg
NSByZWQgdHJpYW5nbGVzIG9uIDUgYmxhY2sgc3F1YXJlcyBhYm92ZQorCitUaGlzIHRlc3QgY2hl
Y2tzIHRoYXQgZHJhd0ltYWdlIGFuZCByZWFkUGl4ZWxzIGFyZSBub3QgZWZmZWN0ZWQgYnkgZ2wu
UGl4ZWxzdG9yZWkoZ2wuUEFDS19BTElHTk1FTlQpIGFuZCB2aXNhIHZlcnNhCisKK1BBU1MgZHJh
d2luZyBpcyBjb3JyZWN0IGluIDNkIGNvbnRleHQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGlu
IDJkIGNvbnRleHQKK1BBU1MgUEFDS19BTElHTk1FTlQgaXMgMQorUEFTUyBkcmF3aW5nIGlzIGNv
cnJlY3QgaW4gM2QgY29udGV4dAorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gMmQgY29udGV4
dAorUEFTUyBQQUNLX0FMSUdOTUVOVCBpcyAyCitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAz
ZCBjb250ZXh0CitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAyZCBjb250ZXh0CitQQVNTIFBB
Q0tfQUxJR05NRU5UIGlzIDQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDNkIGNvbnRleHQK
K1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDJkIGNvbnRleHQKK1BBU1MgUEFDS19BTElHTk1F
TlQgaXMgOAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxz
dG9yZWkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L2dsLXBpeGVsc3RvcmVpLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VO
IgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhl
YWQ+Cis8dGl0bGU+V2ViR0wgcGl4ZWxTdG9yZWkgVGVzdDwvdGl0bGU+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3V0aWxzM2QuanMiPiA8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+IDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgor
PGNhbnZhcyBpZD0iMmQwMCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxjYW52
YXMgaWQ9IjJkMDEiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+Cis8Y2FudmFzIGlk
PSIyZDAyIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iMmQw
MyIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9u
Ij48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBpZD0idnNoYWRlciIg
dHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uOwordm9p
ZCBtYWluKCkgeworICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsKK30KKzwvc2NyaXB0PgorCis8
c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KK3ZvaWQgbWFp
bigpIHsKKyAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsMC4wLDAuMCwxLjApOworfQorPC9zY3Jp
cHQ+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBmYWlsKHgseSwgbmFtZSwgYnVmLCBzaG91bGRCZSkg
eworICB2YXIgaSA9ICh5KjUwK3gpICogNDsKKyAgdmFyIHJlYXNvbiA9ICJwaXhlbCBpbiAiK25h
bWUrIiBhdCAoIit4KyIsIit5KyIpIGlzICgiK2J1ZltpXSsiLCIrYnVmW2krMV0rIiwiK2J1Zltp
KzJdKyIsIitidWZbaSszXSsiKSwgc2hvdWxkIGJlICIrc2hvdWxkQmU7CisgIGFzc2VydE1zZyhm
YWxzZSwgcmVhc29uKTsKK30KKworZnVuY3Rpb24gcGFzcyhuYW1lKSB7CisgIGFzc2VydE1zZyh0
cnVlLCAiZHJhd2luZyBpcyBjb3JyZWN0IGluICIgKyBuYW1lKTsKK30KKworZnVuY3Rpb24gaW5p
dCgpIHsKKyAgZGVidWcoIlRoZXJlIHNob3VsZCBiZSA1IHJlZCB0cmlhbmdsZXMgb24gNSBibGFj
ayBzcXVhcmVzIGFib3ZlIik7CisgIGRlYnVnKCIiKTsKKworICBkZWJ1ZygiVGhpcyB0ZXN0IGNo
ZWNrcyB0aGF0IGRyYXdJbWFnZSBhbmQgcmVhZFBpeGVscyBhcmUgbm90IGVmZmVjdGVkIGJ5IGds
LlBpeGVsc3RvcmVpKGdsLlBBQ0tfQUxJR05NRU5UKSBhbmQgdmlzYSB2ZXJzYSIpOworICBkZWJ1
ZygiIik7CisKKyAgdmFyIGNhbnZhczNkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV4YW1w
bGUiKTsKKyAgZ2wgPSBpbml0V2ViR0woImV4YW1wbGUiLCAidnNoYWRlciIsICJmc2hhZGVyIiwg
WyAidlBvc2l0aW9uIl0sIFsgMCwgMCwgMCwgMSBdLCAxKTsKKworICB2YXIgdmVydGV4T2JqZWN0
ID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2
ZXJ0ZXhPYmplY3QpOworICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0
MzJBcnJheShbIDAsMC41LDAsIC0wLjUsLTAuNSwwLCAwLjUsLTAuNSwwIF0pLCBnbC5TVEFUSUNf
RFJBVyk7CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICBnbC52ZXJ0ZXhBdHRy
aWJQb2ludGVyKDAsIDMsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgZ2wuY2xlYXIoZ2wu
Q09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpOworICBnbC5kcmF3QXJyYXlz
KGdsLlRSSUFOR0xFUywgMCwgMyk7CisKKworICBmdW5jdGlvbiBjaGVja0RhdGEoYnVmLCBuYW1l
KSB7CisgICAgLy8gVGVzdCBzZXZlcmFsIGxvY2F0aW9ucworICAgIC8vIEZpcnN0IGxpbmUgc2hv
dWxkIGJlIGFsbCBibGFjaworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAg
ICAgaWYgKGJ1ZltpKjRdICE9IDAgfHwgYnVmW2kqNCsxXSAhPSAwIHx8IGJ1ZltpKjQrMl0gIT0g
MCB8fCBidWZbaSo0KzNdICE9IDI1NSkgeworICAgICAgICBmYWlsKGksIDAsIG5hbWUsIGJ1Ziwg
IigwLDAsMCwyNTUpIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBMaW5lIDI1IHNob3VsZCBiZSByZWQgZm9yIGF0IGxlYXN0IDYgcmVkIHBpeGVscyBzdGFydGlu
ZyAyMiBwaXhlbHMgaW4KKyAgICB2YXIgb2Zmc2V0ID0gKDI1KjUwKzIyKSAqIDQ7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCA2OyArK2kpIHsKKyAgICAgIGlmIChidWZbb2Zmc2V0K2kqNF0gIT0g
MjU1IHx8IGJ1ZltvZmZzZXQraSo0KzFdICE9IDAgfHwgYnVmW29mZnNldCtpKjQrMl0gIT0gMCB8
fCBidWZbb2Zmc2V0K2kqNCszXSAhPSAyNTUpIHsKKyAgICAgICAgZmFpbCgyMiArIGksIDI1LCBu
YW1lLCBidWYsICIoMjU1LDAsMCwyNTUpIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBMYXN0IGxpbmUgc2hvdWxkIGJlIGFsbCBibGFjaworICAgIG9mZnNldCA9
ICg0OSo1MCkgKiA0OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgICAg
aWYgKGJ1ZltvZmZzZXQraSo0XSAhPSAwIHx8IGJ1ZltvZmZzZXQraSo0KzFdICE9IDAgfHwgYnVm
W29mZnNldCtpKjQrMl0gIT0gMCB8fCBidWZbb2Zmc2V0K2kqNCszXSAhPSAyNTUpIHsKKyAgICAg
ICAgZmFpbChpLCA0OSwgbmFtZSwgYnVmLCAiKDAsMCwwLDI1NSkiKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgfQorICAgIH0KKworICAgIHBhc3MobmFtZSk7CisgIH0KKworICBmdW5jdGlvbiBj
aGVja0NvbG9ycygpIHsKKyAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkoNTAgKiA1MCAqIDQp
OworICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgNTAsIDUwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9C
WVRFLCBidWYpOworICAgIGNoZWNrRGF0YShidWYsICIzZCBjb250ZXh0Iik7CisgICAgdmFyIGlt
Z0RhdGEgPSBjdHgyZC5nZXRJbWFnZURhdGEoMCwgMCwgNTAsIDUwKTsKKyAgICBjaGVja0RhdGEo
aW1nRGF0YS5kYXRhLCAiMmQgY29udGV4dCIpOworICB9CisKKyAgdmFyIHRhYmxlID0gWzEsIDIs
IDQsIDhdOworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgdGFibGUubGVuZ3RoOyArK2lpKSB7Cisg
ICAgZ2wucGl4ZWxTdG9yZWkoZ2wuUEFDS19BTElHTk1FTlQsIHRhYmxlW2lpXSk7CisgICAgY3R4
MmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiMmQwIiArIGlpKS5nZXRDb250ZXh0KCIyZCIp
OworICAgIGN0eDJkLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JzsKKyAgICBjdHgy
ZC5kcmF3SW1hZ2UoY2FudmFzM2QsIDAsIDApOworICAgIGNoZWNrQ29sb3JzKCk7CisgICAgYXNz
ZXJ0TXNnKGdsLmdldFBhcmFtZXRlcihnbC5QQUNLX0FMSUdOTUVOVCkgPT0gdGFibGVbaWldLAor
ICAgICAgICAiUEFDS19BTElHTk1FTlQgaXMgIiArIHRhYmxlW2lpXSk7CisgIH0KK30KKworaW5p
dCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNy
Yz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisKKzwvYm9k
eT4KKzwvaHRtbD4K
</data>
<flag name="commit-queue"
          id="49154"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61172</attachid>
            <date>2010-07-10 18:35:15 -0700</date>
            <delta_ts>2010-07-13 18:15:56 -0700</delta_ts>
            <desc>revised patch: resolving svn merge conflicts</desc>
            <filename>canvas.patch</filename>
            <type>text/plain</type>
            <size>30345</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzA1NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMjcgQEAKKzIwMTAtMDctMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFV
UkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICBUZXN0OiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1w
aXhlbHN0b3JlaS5odG1sCisgICAgICAgICAgICAgIGZhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10
ZXN0Lmh0bWwKKworICAgICAgICAqIGh0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTENhbnZhc0VsZW1lbnQ6OnRvRGF0YVVSTCk6IFBhaW50IHRoZSBXZWJH
TCByZW5kZXJpbmcgcmVzdWx0cyB0byBjYW52YXMgaWYgaXQncyAzZC4KKyAgICAgICAgKiBodG1s
L2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UpOiBQYWludCB0aGUgV2ViR0wgcmVu
ZGVyaW5nIHJlc3VsdHMgdG8gY2FudmFzIGlmIGl0J3MgM2QgYmVmb3JlIGRyYXdpbmcuCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFya0NvbnRleHRDaGFuZ2VkKTogTWFyayBp
dCBhbHdheXMgZm9yIGNhbnZhczJkLmRyYXdJbWFnZSBwdXJwb3NlLiAKKyAgICAgICAgKFdlYkNv
cmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMp
OiBQYWludCB0aGUgV2ViR0wgcmVuZGVyaW5nIHJlc3VsdHMgdG8gY2FudmFzIGlmIGl0J3MgZGly
dHkuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0Lmg6IERlY2xh
cmUgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOiBEZWNsYXJlIHBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvQ2FudmFzKCkgJiBwYWludFRvQ2FudmFzKCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyk6IFBhaW50IHRoZSByZW5kZXJlZCBpbWFnZSBwaXhl
bHMgdG8gdGhlIGNhbnZhcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NDb250ZXh0M0RNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOiBJbXBsZW1lbnQgcGFpbnRSZW5kZXJpbmdS
ZXN1bHRzVG9DYW52YXMoKS4KKwogMjAxMC0wNy0xMCAgVG9ueSBHZW50aWxjb3JlICA8dG9ueWdA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2MzA1NSkKKysrIFdlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNCw2ICszMjQs
MTEgQEAgU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojp0b0RhdGFVUkwoY29ucwogCiAgICAgU3Ry
aW5nIGxvd2VyY2FzZU1pbWVUeXBlID0gbWltZVR5cGUubG93ZXIoKTsKIAorICAgIGlmIChpczNE
KCkpIHsKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0M2QgPSByZWludGVy
cHJldF9jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KHJlbmRlcmluZ0NvbnRleHQoKSk7Cisg
ICAgICAgIGNvbnRleHQzZC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICB9
CisKICAgICAvLyBGSVhNRTogTWFrZSBpc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGlu
ZyB0aHJlYWRzYWZlICh0byBhbGxvdyB0aGlzIG1ldGhvZCB0byBiZSB1c2VkIG9uIGEgd29ya2Vy
IHRocmVhZCkuCiAgICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpIHx8ICFNSU1FVHlwZVJlZ2lzdHJ5
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhsb3dlcmNhc2VNaW1lVHlwZSkp
CiAgICAgICAgIHJldHVybiBidWZmZXIoKS0+dG9EYXRhVVJMKCJpbWFnZS9wbmciKTsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAJ
KHJldmlzaW9uIDYzMDU1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxMCBAQAogI2luY2x1ZGUg
PHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAorI2lmIEVOQUJM
RSgzRF9DQU5WQVMpCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisjZW5kaWYK
KwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTEyNCw2
ICsxMTI4LDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1hZ2UKICAg
ICBpZiAoIXNvdXJjZUNhbnZhcy0+b3JpZ2luQ2xlYW4oKSkKICAgICAgICAgY2FudmFzKCktPnNl
dE9yaWdpblRhaW50ZWQoKTsKIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgaWYgKHNvdXJj
ZUNhbnZhcy0+aXMzRCgpKSB7CisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4
dDNkID0gcmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihzb3VyY2VDYW52
YXMtPnJlbmRlcmluZ0NvbnRleHQoKSk7CisgICAgICAgIGNvbnRleHQzZC0+cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIGMtPmRyYXdJbWFnZShi
dWZmZXItPmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzb3VyY2VSZWN0LCBz
dGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKTsKICAgICB3aWxsRHJhdyhkZXN0UmVjdCk7IC8vIFRo
aXMgY2FsbCBjb21lcyBhZnRlciBkcmF3SW1hZ2UsIHNpbmNlIHRoZSBidWZmZXIgd2UgZHJhdyBp
bnRvIG1heSBiZSBvdXIgb3duLCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMgZGlydHku
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQXJndWFibHkgd2lsbERyYXcgc2hv
dWxkIGJlY29tZSBkaWREcmF3IGFuZCBvY2N1ciBhZnRlciBkcmF3aW5nIGNhbGxzIGFuZCBub3Qg
YmVmb3JlIHRoZW0gdG8gYXZvaWQgcHJvYmxlbXMgbGlrZSB0aGlzLgpJbmRleDogV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNjMwNTUp
CisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE0MSwxNyArMTQxLDIzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0
OjptYXJrQ29udGV4dEMKICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygpLT5yZW5k
ZXJCb3goKTsKICAgICBpZiAocmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzTGF5ZXIoKSAmJiBy
ZW5kZXJCb3gtPmxheWVyKCktPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKICAgICAgICAg
cmVuZGVyQm94LT5sYXllcigpLT5yZW5kZXJlckNvbnRlbnRDaGFuZ2VkKCk7Ci0gICAgZWxzZSB7
CiAjZW5kaWYKLSAgICAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KSB7Ci0gICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhlIGNhbnZhcydzIGltYWdlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQuCi0g
ICAgICAgICAgICBjYW52YXMoKS0+YnVmZmVyKCk7Ci0gICAgICAgICAgICBjYW52YXMoKS0+d2ls
bERyYXcoRmxvYXRSZWN0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0
KCkpKTsKLSAgICAgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOwotICAgICAgICB9
Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV9tYXJrZWRDYW52
YXNEaXJ0eSkgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNhbnZhcydzIGltYWdlIGJ1ZmZl
ciBpcyBhbGxvY2F0ZWQuCisgICAgICAgIGNhbnZhcygpLT5idWZmZXIoKTsKKyAgICAgICAgY2Fu
dmFzKCktPndpbGxEcmF3KEZsb2F0UmVjdCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFz
KCktPmhlaWdodCgpKSk7CisgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOwogICAg
IH0KLSNlbmRpZgorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoKQoreworICAgIGlmIChtX21hcmtlZENhbnZhc0RpcnR5KSB7Cisg
ICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgbV9jb250ZXh0LT5w
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OmJlZ2luUGFpbnQoKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oCShyZXZpc2lvbiA2MzA1NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw2ICszMDQsMTAgQEAg
Y2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgIAogICAgICAgICB2b2lkIHJlc2hhcGUoaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KTsKIAorICAgICAgICAvLyBSZXR1cm4gdmFsdWUgdHJ1ZSBpbmRpY2F0
ZXMgY2FudmFzIGlzIHVwZGF0ZWQgZHVyaW5nIHRoZSBjYWxsLAorICAgICAgICAvLyBmYWxzZSBp
bmRpY2F0ZXMgbm8gdXBkYXRlcy4KKyAgICAgICAgYm9vbCBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcygpOworCiAgICAgICAgIC8vIEhlbHBlcnMgZm9yIG5vdGlmaWNhdGlvbiBhYm91dCBw
YWludCBldmVudHMuCiAgICAgICAgIHZvaWQgYmVnaW5QYWludCgpOwogICAgICAgICB2b2lkIGVu
ZFBhaW50KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5oCShyZXZpc2lvbiA2MzA1NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsMTAgQEAgdHlw
ZWRlZiBpbnQgUGxhdGZvcm0zRE9iamVjdDsKIGNvbnN0IFBsYXRmb3JtM0RPYmplY3QgTnVsbFBs
YXRmb3JtM0RPYmplY3QgPSAwOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDRykKKyNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgIGNsYXNzIFdlYkdMQWN0aXZlSW5mbzsKICAgICBjbGFzcyBBcnJheUJ1ZmZlclZpZXc7
CkBAIC03MDcsNyArNzExLDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB2
aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9u
ZyBoZWlnaHQpOwogCiAgICAgICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQp
OwotICAgICAgICAKKworI2lmIFBMQVRGT1JNKENHKQorICAgICAgICB2b2lkIHBhaW50VG9DYW52
YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFnZVdpZHRoLCBpbnQg
aW1hZ2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2FudmFzV2lkdGgs
IGludCBjYW52YXNIZWlnaHQsIENHQ29udGV4dFJlZiBjb250ZXh0KTsKKyNlbmRpZgorCisgICAg
ICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250
ZXh0KiBjb250ZXh0KTsKKwogICAgICAgICAvLyBIZWxwZXJzIGZvciBub3RpZmljYXRpb24gYWJv
dXQgcGFpbnQgZXZlbnRzCiAgICAgICAgIHZvaWQgYmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpOwogICAgICAgICB2b2lkIGVuZFBhaW50KCk7CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAJ
KHJldmlzaW9uIDYzMDU1KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHQzRENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1
ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJ
bWFnZS5oPgogCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2Us
CkBAIC0xMDQsNiArMTA2LDQxIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0
YShJbWEKICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIG5lZWRlZEFscGhhT3As
IG91dHB1dFZlY3Rvci5kYXRhKCkpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWlu
dFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0
aCwgaW50IGltYWdlSGVpZ2h0LCBpbnQgY2FudmFzV2lkdGgsIGludCBjYW52YXNIZWlnaHQsIENH
Q29udGV4dFJlZiBjb250ZXh0KQoreworICAgIGlmICghaW1hZ2VQaXhlbHMgfHwgaW1hZ2VXaWR0
aCA8PSAwIHx8IGltYWdlSGVpZ2h0IDw9IDAgfHwgY2FudmFzV2lkdGggPD0gMCB8fCBjYW52YXNI
ZWlnaHQgPD0gMCB8fCAhY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIGludCByb3dCeXRl
cyA9IGltYWdlV2lkdGggKiA0OworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0
YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBpbWFnZVBpeGVscywg
cm93Qnl0ZXMgKiBpbWFnZUhlaWdodCwgMCk7CisgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJl
Zj4gY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAgIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0gQ0dJbWFnZUNyZWF0ZShpbWFnZVdpZHRoLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUhlaWdo
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0J5dGVz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xv
clNwYWNlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9y
ZGVyMzJIb3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhUHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKKyAgICAvLyBDU1Mg
c3R5bGluZyBtYXkgY2F1c2UgdGhlIGNhbnZhcydzIGNvbnRlbnQgdG8gYmUgcmVzaXplZCBvbgor
ICAgIC8vIHRoZSBwYWdlLiBHbyBiYWNrIHRvIHRoZSBDYW52YXMgdG8gZmlndXJlIG91dCB0aGUg
Y29ycmVjdAorICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgdG8gZHJhdy4KKyAgICBDR1JlY3QgcmVj
dCA9IENHUmVjdE1ha2UoMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFz
V2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0hlaWdodCk7CisgICAg
Ly8gV2Ugd2FudCB0byBjb21wbGV0ZWx5IG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgZnJhbWUncwor
ICAgIC8vIHJlbmRlcmluZyByZXN1bHRzLgorICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4
dCk7CisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dFNldEludGVycG9sYXRp
b25RdWFsaXR5KGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a0NHSW50ZXJwb2xhdGlvbk5vbmUpOworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICByZWN0LCBjZ0ltYWdlLmdldCgpKTsKKyAgICBDR0NvbnRl
eHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2MzA1NSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwx
MCArMzgsMTMgQEAKICNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0MzJB
cnJheS5oIgogI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIklu
dDMyQXJyYXkuaCIKICNpbmNsdWRlICJXZWJHTExheWVyLmgiCiAjaW5jbHVkZSAiV2ViR0xQcm9n
cmFtLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTFJl
bmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgogI2luY2x1ZGUgIldl
YkdMVGV4dHVyZS5oIgogI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKQEAgLTIzNiw2ICsyMzksNTQg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZQogICAgIENHTFNldEN1
cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK3sKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFz
KCk7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKwor
ICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVudFdpZHRoICogNDsKKyAgICBpbnQgdG90YWxCeXRl
cyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0OworCisgICAgT3duQXJyYXlQdHI8dW5zaWdu
ZWQgY2hhcj4gcGl4ZWxzKG5ldyB1bnNpZ25lZCBjaGFyW3RvdGFsQnl0ZXNdKTsKKyAgICBpZiAo
IXBpeGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9j
b250ZXh0T2JqKTsKKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk87CisgICAgaWYgKG1fYXR0cnMu
YW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFN
RUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVm
ZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xCbGl0
RnJhbWVidWZmZXJFWFQoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgMCwg
MCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwg
R0xfTElORUFSKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZF
Ul9FWFQsIG1fZmJvKTsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAgICAgICBtdXN0
UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICB9CisgICAgfQorCisgICAgR0xpbnQg
cGFja0FsaWdubWVudCA9IDQ7CisgICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSBm
YWxzZTsKKyAgICA6OmdsR2V0SW50ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZwYWNrQWxpZ25t
ZW50KTsKKyAgICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsKKyAgICAgICAgOjpnbFBpeGVsU3Rv
cmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsKKyAgICAgICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25t
ZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1cnJlbnRX
aWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9S
RVYsIHBpeGVscy5nZXQoKSk7CisKKyAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQor
ICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQp
OworCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CisKKyAgICBwYWludFRvQ2FudmFz
KHBpeGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwKKyAgICAgICAg
ICAgICAgICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsKICAgICBV
TlVTRURfUEFSQU0oY29udGV4dCk7CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMDU1KQor
KysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0
IEBACisyMDEwLTA3LTEwICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIHJl
c3VsdHMgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB0byBDYW52YXMudG9EYXRhVVJMIGFuZCAyRCBk
cmF3SW1hZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTM0NzE5CisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMpOiBJbXBsZW1lbnQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKS4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpbnQpOiBK
dXN0IHVzZSBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgorCiAyMDEwLTA3LTA5ICBK
b2huIEFiZC1FbC1NYWxlayAgPGphbUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgRGFyaW4gRmlzaGVyLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRl
eHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRl
eHQzRC5jcHAJKHJldmlzaW9uIDYzMDU1KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGlj
c0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsNyBAQCBwdWJsaWM6
CiAKICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAorICAgIHZvaWQg
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KTsKICAgICB2b2lkIGJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KTsKICAgICB2b2lkIGVuZFBhaW50KCk7CiAKQEAgLTM5Nyw3ICszOTgsNyBAQCBXZWJHTExheWVy
Q2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNESW50CiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjpiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIEhUTUxD
YW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZl
ciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwpAQCAtNDQ3LDQ0ICs0NDgsMjAgQEAg
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBhaQogICAgICAgICBjYW52YXMu
ZHJhd0JpdG1hcFJlY3QobV9yZXNpemluZ0JpdG1hcCwgMCwgZHN0KTsKICAgICB9CiAjZWxpZiBQ
TEFURk9STShDRykKLSAgICBpZiAobV9yZW5kZXJPdXRwdXQpIHsKLSAgICAgICAgaW50IHJvd0J5
dGVzID0gbV9pbXBsLT53aWR0aCgpICogNDsKLSAgICAgICAgQ0dEYXRhUHJvdmlkZXJSZWYgZGF0
YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX3JlbmRlck91dHB1
dCwgcm93Qnl0ZXMgKiBtX2ltcGwtPmhlaWdodCgpLCAwKTsKLSAgICAgICAgQ0dDb2xvclNwYWNl
UmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAgICAgICAg
Q0dJbWFnZVJlZiBjZ0ltYWdlID0gQ0dJbWFnZUNyZWF0ZShtX2ltcGwtPndpZHRoKCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbXBsLT5oZWlnaHQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0J5dGVzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtD
R0JpdG1hcEJ5dGVPcmRlcjMySG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhUHJvdmlkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dS
ZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKLSAgICAgICAgLy8gQ1NTIHN0eWxpbmcgbWF5IGNhdXNl
IHRoZSBjYW52YXMncyBjb250ZW50IHRvIGJlIHJlc2l6ZWQgb24KLSAgICAgICAgLy8gdGhlIHBh
Z2UuIEdvIGJhY2sgdG8gdGhlIENhbnZhcyB0byBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0Ci0gICAg
ICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgdG8gZHJhdy4KLSAgICAgICAgQ0dSZWN0IHJlY3QgPSBD
R1JlY3RNYWtlKDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0
LT5jYW52YXMoKS0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRleHQtPmNhbnZhcygpLT5oZWlnaHQoKSk7Ci0gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGxl
dGVseSBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGZyYW1lJ3MKLSAgICAgICAgLy8gcmVuZGVyaW5n
IHJlc3VsdHMuCi0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShpbWFnZUJ1ZmZlci0+Y29u
dGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVh
bGl0eShpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW50ZXJwb2xhdGlvbk5vbmUpOwot
ICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZv
cm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LCBjZ0ltYWdlKTsK
LSAgICAgICAgQ0dJbWFnZVJlbGVhc2UoY2dJbWFnZSk7Ci0gICAgICAgIENHQ29sb3JTcGFjZVJl
bGVhc2UoY29sb3JTcGFjZSk7Ci0gICAgICAgIENHRGF0YVByb3ZpZGVyUmVsZWFzZShkYXRhUHJv
dmlkZXIpOwotICAgIH0KKyAgICBpZiAobV9yZW5kZXJPdXRwdXQpCisgICAgICAgIGNvbnRleHQt
PmdyYXBoaWNzQ29udGV4dDNEKCktPnBhaW50VG9DYW52YXMobV9yZW5kZXJPdXRwdXQsIG1faW1w
bC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwogI2Vsc2UKICNlcnJv
ciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQogI2VuZGlmCiB9CiAKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRl
eHQpCit7CisgICAgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoY29udGV4dCk7Cit9CisK
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZW5kUGFpbnQoKQogewogfQpAQCAtMTMx
MSw2ICsxMjg4LDcgQEAgREVMRUdBVEVfVE9fSU5URVJOQUxfNih2ZXJ0ZXhBdHRyaWJQb2ludAog
CiBERUxFR0FURV9UT19JTlRFUk5BTF80KHZpZXdwb3J0LCBsb25nLCBsb25nLCB1bnNpZ25lZCBs
b25nLCB1bnNpZ25lZCBsb25nKQogCitERUxFR0FURV9UT19JTlRFUk5BTF8xKHBhaW50UmVuZGVy
aW5nUmVzdWx0c1RvQ2FudmFzLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqKQogREVMRUdBVEVfVE9f
SU5URVJOQUxfMShiZWdpblBhaW50LCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqKQogREVMRUdBVEVf
VE9fSU5URVJOQUwoZW5kUGFpbnQpCiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMDU1KQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAt
MDctMTAgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCByZW5kZXJpbmcgcmVzdWx0cyBtdXN0
IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFVUkwgYW5kIDJEIGRyYXdJbWFnZQor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ3MTkKKwor
ICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0LWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFzLXRlc3QuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWktZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS5odG1s
OiBBZGRlZC4KKwogMjAxMC0wNy0xMCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEFuZGVycyBDYXJsc3Nvbi4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKK1RoaXMgdGVzdCBlbnN1
cmVzIFdlYkdMIGltcGxlbWVudGF0aW9ucyBpbnRlcmFjdCBjb3JyZWN0bHkgd2l0aCB0aGUgY2Fu
dmFzIHRhZy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0NhbnZhcy5nZXRDb250
ZXh0CitQQVNTIGNvbnRleHQgZXhpc3RzCisKK0NoZWNraW5nIGNhbnZhcyBhbmQgV2ViR0wgaW50
ZXJhY3Rpb24KK1BBU1MgY2FudmFzLndpZHRoIGlzIDMwMAorUEFTUyBjYW52YXMuaGVpZ2h0IGlz
IDE1MAorUEFTUyBwaXhlbHMgYXJlIDAsMCwwLDAKK1BBU1MgZ2V0Vmlld3BvcnQoKSBpcyAiMCww
LDMwMCwxNTAiCisKK2NoYW5nZSBkaXNwbGF5IHNpemUgb2YgY2FudmFzIGFuZCBzZWUgdGhhdCB2
aWV3cG9ydCBkb2VzIG5vdCBjaGFuZ2UKK1BBU1MgZ2V0Vmlld3BvcnQoKSBpcyAiMCwwLDMwMCwx
NTAiCitQQVNTIGNhbnZhcy53aWR0aCBpcyAzMDAKK1BBU1MgY2FudmFzLmhlaWdodCBpcyAxNTAK
KworY2hhbmdlIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgY2FudmFzIGFuZCBzZWUgdGhhdCB0aGUg
dmlld3BvcnQgZG9lcyBub3QgY2hhbmdlCitQQVNTIHBpeGVscyBhcmUgNjQsMTI4LDE5MiwyNTUK
K1BBU1MgZ2wuY2xlYXJDb2xvciBzaG91bGQgbm90IGNoYW5nZSBhZnRlciBjYW52YXMgcmVzaXpl
CitQQVNTIGdsLmNvbG9yTWFzayBzaG91bGQgbm90IGNoYW5nZSBhZnRlciBjYW52YXMgcmVzaXpl
CitQQVNTIGdldFZpZXdwb3J0KCkgaXMgIjAsMCwzMDAsMTUwIgorUEFTUyBwaXhlbHMgYXJlIDAs
MCwwLDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisgCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52
YXMtdGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwMyBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgImh0
dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1l
dGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9
dXRmLTgiPgorPHRpdGxlPldlYkdMIENhbnZhcyBDb25mb3JtYW5jZSBUZXN0czwvdGl0bGU+Cis8
bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2
IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgc3R5bGU9IndpZHRoOiA1
MHB4OyBoZWlnaHQ6IDUwcHg7Ij4gPC9jYW52YXM+Cis8Y2FudmFzIGlkPSJjYW52YXMyZCIgd2lk
dGg9IjQwIiBoZWlnaHQ9IjQwIj4gPC9jYW52YXM+Cis8c2NyaXB0PgorCitpZiAod2luZG93Lmxh
eW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJl
ZmVyZW5jZSgiV2ViS2l0V2ViR0xFbmFibGVkIiwgIjEiKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7
Cit9CisKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyBXZWJHTCBpbXBsZW1lbnRhdGlv
bnMgaW50ZXJhY3QgY29ycmVjdGx5IHdpdGggdGhlIGNhbnZhcyB0YWcuIik7CisKK2RlYnVnKCIi
KTsKK2RlYnVnKCJDYW52YXMuZ2V0Q29udGV4dCIpOworCit2YXIgY2FudmFzID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwordmFyIGNhbnZhczJkID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImNhbnZhczJkIik7Cit2YXIgY3R4MmQgPSBjYW52YXMyZC5nZXRDb250ZXh0KCIy
ZCIpOwordmFyIGdsID0gbnVsbDsKK3RyeSB7CisgIGdsID0gY2FudmFzLmdldENvbnRleHQoImV4
cGVyaW1lbnRhbC13ZWJnbCIpOworfSBjYXRjaChlKSB7fQoraWYgKCFnbCkgeworICB0cnkgewor
ICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoIndlYmtpdC0zZCIpOworICB9IGNhdGNoKGUpIHt9
Cit9CitpZiAoIWdsKSB7CisgIHRlc3RGYWlsZWQoImNvbnRleHQgZG9lcyBub3QgZXhpc3QiKTsK
K30gZWxzZSB7CisgIHRlc3RQYXNzZWQoImNvbnRleHQgZXhpc3RzIik7CisKKyAgZGVidWcoIiIp
OworICBkZWJ1ZygiQ2hlY2tpbmcgY2FudmFzIGFuZCBXZWJHTCBpbnRlcmFjdGlvbiIpOworCisg
IC8vIENoZWNrIHRoYXQgYSBjYW52YXMgd2l0aCBubyB3aWR0aCBvciBoZWlnaHQgaXMgMzAweDE1
MCBwaXhlbHMKKyAgc2hvdWxkQmUoJ2NhbnZhcy53aWR0aCcsICczMDAnKTsKKyAgc2hvdWxkQmUo
J2NhbnZhcy5oZWlnaHQnLCAnMTUwJyk7CisKKyAgLy8gQ2hlY2sgZ2V0IGEgNCB2YWx1ZSBnbCBw
YXJhbWV0ZXIgYXMgYSBjc3Ygc3RyaW5nLgorICBmdW5jdGlvbiBnZXRWYWx1ZTR2KG5hbWUpIHsK
KyAgICB2YXIgdiA9IGdsLmdldFBhcmFtZXRlcihuYW1lKTsKKyAgICB2YXIgcmVzdWx0ID0gJycg
KworICAgICAgICB2WzBdICsgJywnICsKKyAgICAgICAgdlsxXSArICcsJyArCisgICAgICAgIHZb
Ml0gKyAnLCcgKworICAgICAgICB2WzNdOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBm
dW5jdGlvbiBnZXRWaWV3cG9ydCgpIHsKKyAgICByZXR1cm4gZ2V0VmFsdWU0dihnbC5WSUVXUE9S
VCk7CisgIH0KKworICBmdW5jdGlvbiBnZXRDbGVhckNvbG9yKCkgeworICAgIHJldHVybiBnZXRW
YWx1ZTR2KGdsLkNPTE9SX0NMRUFSX1ZBTFVFKTsKKyAgfQorCisgIGZ1bmN0aW9uIGlzQWJvdXRF
cXVhbChhLCBiKSB7CisgICAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8IDAuMDE7CisgIH0KKwor
ICBmdW5jdGlvbiBpc0Fib3V0RXF1YWxJbnQoYSwgYikgeworICAgIHJldHVybiBNYXRoLmFicyhh
IC0gYikgPCAzOworICB9CisKKyAgZnVuY3Rpb24gY2hlY2tDYW52YXNDb250ZW50SXMocjNkLGcz
ZCxiM2QsYTNkKSB7CisgICAgdmFyIHIyZDsKKyAgICB2YXIgZzJkOworICAgIHZhciBiMmQ7Cisg
ICAgdmFyIGEyZDsKKworICAgIGZ1bmN0aW9uIGNoZWNrUGl4ZWwoeCwgeSwgcjNkLGczZCxiM2Qs
YTNkKSB7CisgICAgICB2YXIgb2Zmc2V0ID0gKHkgKiA0MCArIHgpICogNDsKKyAgICAgIHIyZCA9
IGltZ0RhdGEuZGF0YVtvZmZzZXRdOworICAgICAgZzJkID0gaW1nRGF0YS5kYXRhW29mZnNldCAr
IDFdOworICAgICAgYjJkID0gaW1nRGF0YS5kYXRhW29mZnNldCArIDJdOworICAgICAgYTJkID0g
aW1nRGF0YS5kYXRhW29mZnNldCArIDNdOworICAgICAgLy9kZWJ1ZygnJyArIHggKyAnLCAnICsg
eSArICIoIiArIG9mZnNldCArICIpID0gIiArIHIyZCArICIsICIgKyBnMmQgKyAiLCAiICsgYjJk
ICsgIiwgIiArIGEyZCk7CisgICAgICByZXR1cm4gaXNBYm91dEVxdWFsSW50KHIyZCwgcjNkKSAm
JgorICAgICAgICAgICAgIGlzQWJvdXRFcXVhbEludChnMmQsIGczZCkgJiYKKyAgICAgICAgICAg
ICBpc0Fib3V0RXF1YWxJbnQoYjJkLCBiM2QpICYmCisgICAgICAgICAgICAgaXNBYm91dEVxdWFs
SW50KGEyZCwgYTNkKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja1BpeGVscyhyM2QsZzNk
LGIzZCxhM2QpIHsKKyAgICAgIHJldHVybiBjaGVja1BpeGVsKDAsIDAsIHIzZCwgZzNkLCBiM2Qs
IGEzZCkgJiYKKyAgICAgICAgICAgICBjaGVja1BpeGVsKDAsIDM5LCByM2QsIGczZCwgYjNkLCBh
M2QpICYmCisgICAgICAgICAgICAgY2hlY2tQaXhlbCgzOSwgMCwgcjNkLCBnM2QsIGIzZCwgYTNk
KSAmJgorICAgICAgICAgICAgIGNoZWNrUGl4ZWwoMzksIDM5LCByM2QsIGczZCwgYjNkLCBhM2Qp
OworICAgIH07CisKKyAgICAvLyBTZXQgdG8ganVzdCB0YWtlIHRoZSBjb2xvciBmcm9tIHRoZSAz
ZCBjYW52YXMKKyAgICBjdHgyZC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7CisK
KyAgICAvLyBmaWxsIDJkIGNhbnZhcyB3aXRoIG9yYW5nZQorICAgIGN0eDJkLmZpbGxTdHlsZSA9
ICJyZ2IoMjU1LDE5MiwxMjgpIjsKKyAgICBjdHgyZC5maWxsUmVjdCAoMCwgMCwgNDAsIDQwKTsK
KworICAgIC8vIGdldCB0aGUgaW1hZ2UgZGF0YQorICAgIHZhciBpbWdEYXRhID0gY3R4MmQuZ2V0
SW1hZ2VEYXRhKDAsIDAsIDQwLCA0MCk7CisKKyAgICAvLyBjaGVjayBpdCBnb3QgY2xlYXJlZC4K
KyAgICBpZiAoIWNoZWNrUGl4ZWxzKDI1NSwgMTkyLCAxMjgsIDI1NSkpIHsKKyAgICAgIHRlc3RG
YWlsZWQoInVuYWJsZSB0byBmaWxsIDJkIGNvbnRleHQuIik7CisgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gZHJhdyAzZCBjYW52YXMgb24gdG9wLgorICAgIGN0eDJkLmRyYXdJbWFnZShj
YW52YXMsIDAsIDAsIDQwLCA0MCk7CisKKyAgICAvLyBnZXQgdGhlIGltYWdlIGRhdGEKKyAgICB2
YXIgaW1nRGF0YSA9IGN0eDJkLmdldEltYWdlRGF0YSgwLCAwLCA0MCwgNDApOworCisgICAgLy8g
Q2hlY2sgaXQncyB0aGUgZXhwZWN0ZWQgY29sb3IuCisgICAgaWYgKCFjaGVja1BpeGVscyhyM2Qs
IGczZCwgYjNkLCBhM2QpKSB7CisgICAgICB0ZXN0RmFpbGVkKCJwaXhlbHMgYXJlICIgKyByMmQg
KyAiLCIgKyBnMmQgKyAiLCIgKyBiMmQgKyAiLCIgKyBhMmQgKworICAgICAgICAgICAgICAgICAi
IGV4cGVjdGVkICIgKyByM2QgKyAiLCIgKyBnM2QgKyAiLCIgKyBiM2QgKyAiLCIgKyBhM2QpOwor
ICAgIH0gZWxzZSB7CisgICAgICB0ZXN0UGFzc2VkKCJwaXhlbHMgYXJlICIgKyByM2QgKyAiLCIg
KyBnM2QgKyAiLCIgKyBiM2QgKyAiLCIgKyBhM2QpOworICAgIH0KKyAgfQorCisgIGNoZWNrQ2Fu
dmFzQ29udGVudElzKDAsIDAsIDAsIDApOworICBzaG91bGRCZSgnZ2V0Vmlld3BvcnQoKScsICci
MCwwLDMwMCwxNTAiJyk7CisKKyAgLy8gQ2hhbmdlIHRoZSBkaXNwbGF5IHNpemUgb2YgdGhlIGNh
bnZhcyBhbmQgY2hlY2sKKyAgLy8gdGhlIHZpZXdwb3J0IHNpemUgZG9lcyBub3QgY2hhbmdlLgor
ICBkZWJ1ZygiIik7CisgIGRlYnVnKCJjaGFuZ2UgZGlzcGxheSBzaXplIG9mIGNhbnZhcyBhbmQg
c2VlIHRoYXQgdmlld3BvcnQgZG9lcyBub3QgY2hhbmdlIik7CisgIGNhbnZhcy5zdHlsZS53aWR0
aCA9ICIxMDBweCI7CisgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSAiMjVweCI7CisgIHZhciBpbnRl
cnZhbElkOworICBpbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgewor
ICAgIGlmIChjYW52YXMuY2xpZW50V2lkdGggPT0gMTAwICYmCisgICAgICAgIGNhbnZhcy5jbGll
bnRIZWlnaHQgPT0gMjUpIHsKKyAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsSWQp
OworICAgICAgc2hvdWxkQmUoJ2dldFZpZXdwb3J0KCknLCAnIjAsMCwzMDAsMTUwIicpOworICAg
ICAgc2hvdWxkQmUoJ2NhbnZhcy53aWR0aCcsICczMDAnKTsKKyAgICAgIHNob3VsZEJlKCdjYW52
YXMuaGVpZ2h0JywgJzE1MCcpOworCisgICAgICAvLyBDaGFuZ2UgdGhlIGFjdHVhbCBzaXplIG9m
IHRoZSBjYW52YXMKKyAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHZpZXdwb3J0IGRvZXMgbm90IGNo
YW5nZS4KKyAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGNsZWFyIGNvbG9yIGRvZXMgbm90IGNoYW5n
ZS4KKyAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGNvbG9yIG1hc2sgZG9lcyBub3QgY2hhbmdlLgor
ICAgICAgZGVidWcoIiIpOworICAgICAgZGVidWcoImNoYW5nZSB0aGUgYWN0dWFsIHNpemUgb2Yg
dGhlIGNhbnZhcyBhbmQgc2VlIHRoYXQgdGhlIHZpZXdwb3J0IGRvZXMgbm90IGNoYW5nZSIpOwor
ICAgICAgZ2wuY2xlYXJDb2xvcigwLjI1LCAwLjUsIDAuNzUsIDEpOworICAgICAgZ2wuY2xlYXIo
Z2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpOworICAgICAgY2hlY2tD
YW52YXNDb250ZW50SXMoNjQsIDEyOCwgMTkyLCAyNTUpOworICAgICAgZ2wuY29sb3JNYXNrKDAs
MCwwLDApOworICAgICAgY2FudmFzLndpZHRoID0gNDAwOworICAgICAgY2FudmFzLmhlaWdodCA9
IDEwOworCisgICAgICB2YXIgdiA9IGdsLmdldFBhcmFtZXRlcihnbC5DT0xPUl9DTEVBUl9WQUxV
RSk7CisgICAgICBhc3NlcnRNc2coaXNBYm91dEVxdWFsKHZbMF0sIDAuMjUpICYmCisgICAgICAg
ICAgICAgICAgaXNBYm91dEVxdWFsKHZbMV0sIDAuNSkgJiYKKyAgICAgICAgICAgICAgICBpc0Fi
b3V0RXF1YWwodlsyXSwgMC43NSkgJiYKKyAgICAgICAgICAgICAgICBpc0Fib3V0RXF1YWwodlsz
XSwgMSksCisgICAgICAgICAgICAgICAgImdsLmNsZWFyQ29sb3Igc2hvdWxkIG5vdCBjaGFuZ2Ug
YWZ0ZXIgY2FudmFzIHJlc2l6ZSIpOworICAgICAgdiA9IGdsLmdldFBhcmFtZXRlcihnbC5DT0xP
Ul9XUklURU1BU0spOworICAgICAgYXNzZXJ0TXNnKGlzQWJvdXRFcXVhbCh2WzBdLCAwKSAmJgor
ICAgICAgICAgICAgICAgIGlzQWJvdXRFcXVhbCh2WzFdLCAwKSAmJgorICAgICAgICAgICAgICAg
IGlzQWJvdXRFcXVhbCh2WzJdLCAwKSAmJgorICAgICAgICAgICAgICAgIGlzQWJvdXRFcXVhbCh2
WzNdLCAwKSwKKyAgICAgICAgICAgICAgICAiZ2wuY29sb3JNYXNrIHNob3VsZCBub3QgY2hhbmdl
IGFmdGVyIGNhbnZhcyByZXNpemUiKTsKKyAgICAgIHNob3VsZEJlKCdnZXRWaWV3cG9ydCgpJywg
JyIwLDAsMzAwLDE1MCInKTsKKyAgICAgIGNoZWNrQ2FudmFzQ29udGVudElzKDAsIDAsIDAsIDAp
OworCisgICAgICBkZWJ1ZygiIik7CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
CisgICAgICB2YXIgZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsK
KyAgICAgIGVwaWxvZ3VlLm9ubG9hZCA9IGZpbmlzaDsKKyAgICAgIGVwaWxvZ3VlLnNyYyA9ICIu
Li8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKKyAgICAgIGRvY3VtZW50LmJvZHku
YXBwZW5kQ2hpbGQoZXBpbG9ndWUpOworICAgIH0KKyAgfSwgMTAwMC8zMCk7Cit9CisKK2Z1bmN0
aW9uIGZpbmlzaCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Cisg
ICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9CisKKzwv
c2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9nbC1waXhlbHN0b3JlaS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWktZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWkt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACisgICAgCitUaGVyZSBz
aG91bGQgYmUgNSByZWQgdHJpYW5nbGVzIG9uIDUgYmxhY2sgc3F1YXJlcyBhYm92ZQorCitUaGlz
IHRlc3QgY2hlY2tzIHRoYXQgZHJhd0ltYWdlIGFuZCByZWFkUGl4ZWxzIGFyZSBub3QgZWZmZWN0
ZWQgYnkgZ2wuUGl4ZWxzdG9yZWkoZ2wuUEFDS19BTElHTk1FTlQpIGFuZCB2aXNhIHZlcnNhCisK
K1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDNkIGNvbnRleHQKK1BBU1MgZHJhd2luZyBpcyBj
b3JyZWN0IGluIDJkIGNvbnRleHQKK1BBU1MgUEFDS19BTElHTk1FTlQgaXMgMQorUEFTUyBkcmF3
aW5nIGlzIGNvcnJlY3QgaW4gM2QgY29udGV4dAorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4g
MmQgY29udGV4dAorUEFTUyBQQUNLX0FMSUdOTUVOVCBpcyAyCitQQVNTIGRyYXdpbmcgaXMgY29y
cmVjdCBpbiAzZCBjb250ZXh0CitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAyZCBjb250ZXh0
CitQQVNTIFBBQ0tfQUxJR05NRU5UIGlzIDQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDNk
IGNvbnRleHQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDJkIGNvbnRleHQKK1BBU1MgUEFD
S19BTElHTk1FTlQgaXMgOAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVs
c3RvcmVpLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
Z2wtcGl4ZWxzdG9yZWkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIx
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0
aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxo
dG1sPgorPGhlYWQ+Cis8dGl0bGU+V2ViR0wgcGl4ZWxTdG9yZWkgVGVzdDwvdGl0bGU+Cis8bGlu
ayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxl
LmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3V0aWxzM2QuanMiPiA8L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+IDwvc2NyaXB0PgorPC9oZWFk
PgorPGJvZHk+Cis8Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwv
Y2FudmFzPgorPGNhbnZhcyBpZD0iMmQwMCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZh
cz4KKzxjYW52YXMgaWQ9IjJkMDEiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+Cis8
Y2FudmFzIGlkPSIyZDAyIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorPGNhbnZh
cyBpZD0iMmQwMyIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxkaXYgaWQ9ImRl
c2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBpZD0i
dnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorYXR0cmlidXRlIHZlYzQgdlBvc2l0
aW9uOwordm9pZCBtYWluKCkgeworICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsKK30KKzwvc2Ny
aXB0PgorCis8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4K
K3ZvaWQgbWFpbigpIHsKKyAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsMC4wLDAuMCwxLjApOwor
fQorPC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBmYWlsKHgseSwgbmFtZSwgYnVmLCBz
aG91bGRCZSkgeworICB2YXIgaSA9ICh5KjUwK3gpICogNDsKKyAgdmFyIHJlYXNvbiA9ICJwaXhl
bCBpbiAiK25hbWUrIiBhdCAoIit4KyIsIit5KyIpIGlzICgiK2J1ZltpXSsiLCIrYnVmW2krMV0r
IiwiK2J1ZltpKzJdKyIsIitidWZbaSszXSsiKSwgc2hvdWxkIGJlICIrc2hvdWxkQmU7CisgIGFz
c2VydE1zZyhmYWxzZSwgcmVhc29uKTsKK30KKworZnVuY3Rpb24gcGFzcyhuYW1lKSB7CisgIGFz
c2VydE1zZyh0cnVlLCAiZHJhd2luZyBpcyBjb3JyZWN0IGluICIgKyBuYW1lKTsKK30KKworZnVu
Y3Rpb24gaW5pdCgpIHsKKyAgZGVidWcoIlRoZXJlIHNob3VsZCBiZSA1IHJlZCB0cmlhbmdsZXMg
b24gNSBibGFjayBzcXVhcmVzIGFib3ZlIik7CisgIGRlYnVnKCIiKTsKKworICBkZWJ1ZygiVGhp
cyB0ZXN0IGNoZWNrcyB0aGF0IGRyYXdJbWFnZSBhbmQgcmVhZFBpeGVscyBhcmUgbm90IGVmZmVj
dGVkIGJ5IGdsLlBpeGVsc3RvcmVpKGdsLlBBQ0tfQUxJR05NRU5UKSBhbmQgdmlzYSB2ZXJzYSIp
OworICBkZWJ1ZygiIik7CisKKyAgdmFyIGNhbnZhczNkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImV4YW1wbGUiKTsKKyAgZ2wgPSBpbml0V2ViR0woImV4YW1wbGUiLCAidnNoYWRlciIsICJm
c2hhZGVyIiwgWyAidlBvc2l0aW9uIl0sIFsgMCwgMCwgMCwgMSBdLCAxKTsKKworICB2YXIgdmVy
dGV4T2JqZWN0ID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlf
QlVGRkVSLCB2ZXJ0ZXhPYmplY3QpOworICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwg
bmV3IEZsb2F0MzJBcnJheShbIDAsMC41LDAsIC0wLjUsLTAuNSwwLCAwLjUsLTAuNSwwIF0pLCBn
bC5TVEFUSUNfRFJBVyk7CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICBnbC52
ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDMsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgZ2wu
Y2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpOworICBnbC5k
cmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgMyk7CisKKworICBmdW5jdGlvbiBjaGVja0RhdGEo
YnVmLCBuYW1lKSB7CisgICAgLy8gVGVzdCBzZXZlcmFsIGxvY2F0aW9ucworICAgIC8vIEZpcnN0
IGxpbmUgc2hvdWxkIGJlIGFsbCBibGFjaworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsr
aSkgeworICAgICAgaWYgKGJ1ZltpKjRdICE9IDAgfHwgYnVmW2kqNCsxXSAhPSAwIHx8IGJ1Zltp
KjQrMl0gIT0gMCB8fCBidWZbaSo0KzNdICE9IDI1NSkgeworICAgICAgICBmYWlsKGksIDAsIG5h
bWUsIGJ1ZiwgIigwLDAsMCwyNTUpIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBMaW5lIDI1IHNob3VsZCBiZSByZWQgZm9yIGF0IGxlYXN0IDYgcmVkIHBpeGVs
cyBzdGFydGluZyAyMiBwaXhlbHMgaW4KKyAgICB2YXIgb2Zmc2V0ID0gKDI1KjUwKzIyKSAqIDQ7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyArK2kpIHsKKyAgICAgIGlmIChidWZbb2Zmc2V0
K2kqNF0gIT0gMjU1IHx8IGJ1ZltvZmZzZXQraSo0KzFdICE9IDAgfHwgYnVmW29mZnNldCtpKjQr
Ml0gIT0gMCB8fCBidWZbb2Zmc2V0K2kqNCszXSAhPSAyNTUpIHsKKyAgICAgICAgZmFpbCgyMiAr
IGksIDI1LCBuYW1lLCBidWYsICIoMjU1LDAsMCwyNTUpIik7CisgICAgICAgIHJldHVybjsKKyAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBMYXN0IGxpbmUgc2hvdWxkIGJlIGFsbCBibGFjaworICAg
IG9mZnNldCA9ICg0OSo1MCkgKiA0OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkg
eworICAgICAgaWYgKGJ1ZltvZmZzZXQraSo0XSAhPSAwIHx8IGJ1ZltvZmZzZXQraSo0KzFdICE9
IDAgfHwgYnVmW29mZnNldCtpKjQrMl0gIT0gMCB8fCBidWZbb2Zmc2V0K2kqNCszXSAhPSAyNTUp
IHsKKyAgICAgICAgZmFpbChpLCA0OSwgbmFtZSwgYnVmLCAiKDAsMCwwLDI1NSkiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKworICAgIHBhc3MobmFtZSk7CisgIH0KKworICBm
dW5jdGlvbiBjaGVja0NvbG9ycygpIHsKKyAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkoNTAg
KiA1MCAqIDQpOworICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgNTAsIDUwLCBnbC5SR0JBLCBnbC5V
TlNJR05FRF9CWVRFLCBidWYpOworICAgIGNoZWNrRGF0YShidWYsICIzZCBjb250ZXh0Iik7Cisg
ICAgdmFyIGltZ0RhdGEgPSBjdHgyZC5nZXRJbWFnZURhdGEoMCwgMCwgNTAsIDUwKTsKKyAgICBj
aGVja0RhdGEoaW1nRGF0YS5kYXRhLCAiMmQgY29udGV4dCIpOworICB9CisKKyAgdmFyIHRhYmxl
ID0gWzEsIDIsIDQsIDhdOworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgdGFibGUubGVuZ3RoOyAr
K2lpKSB7CisgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuUEFDS19BTElHTk1FTlQsIHRhYmxlW2lpXSk7
CisgICAgY3R4MmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiMmQwIiArIGlpKS5nZXRDb250
ZXh0KCIyZCIpOworICAgIGN0eDJkLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JzsK
KyAgICBjdHgyZC5kcmF3SW1hZ2UoY2FudmFzM2QsIDAsIDApOworICAgIGNoZWNrQ29sb3JzKCk7
CisgICAgYXNzZXJ0TXNnKGdsLmdldFBhcmFtZXRlcihnbC5QQUNLX0FMSUdOTUVOVCkgPT0gdGFi
bGVbaWldLAorICAgICAgICAiUEFDS19BTElHTk1FTlQgaXMgIiArIHRhYmxlW2lpXSk7CisgIH0K
K30KKworaW5pdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorCis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+
CisKKzwvYm9keT4KKzwvaHRtbD4K
</data>
<flag name="commit-queue"
          id="49157"
          type_id="3"
          status="-"
          setter="zmo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61447</attachid>
            <date>2010-07-13 18:15:56 -0700</date>
            <delta_ts>2010-07-13 18:18:19 -0700</delta_ts>
            <desc>revised patch: deal with Qt part of GraphicsContext3D</desc>
            <filename>canvas.patch</filename>
            <type>text/plain</type>
            <size>35513</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzI3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDctMTMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFV
UkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICBUZXN0czogZmFzdC9jYW52YXMvd2ViZ2wvY2Fu
dmFzLXRlc3QuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxz
dG9yZWkuaHRtbAorCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKTogUGFpbnQgdGhlIFdl
YkdMIHJlbmRlcmluZyByZXN1bHRzIHRvIGNhbnZhcyBpZiBpdCdzIDNkLgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZSk6IFBhaW50IHRoZSBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyB0byBjYW52YXMgaWYgaXQncyAzZCBiZWZvcmUgZHJhd2luZy4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQpOiBNYXJr
IGl0IGFsd2F5cyBmb3IgY2FudmFzMmQuZHJhd0ltYWdlIHB1cnBvc2UuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KTogUGFpbnQgdGhlIFdlYkdMIHJlbmRlcmluZyByZXN1bHRzIHRvIGNhbnZhcyBpZiBpdCdzIGRp
cnR5LgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBEZWNs
YXJlIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDogRGVjbGFyZSBwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcygpICYgcGFpbnRUb0NhbnZhcygpLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMpOiBQYWludCB0aGUgcmVuZGVyZWQgaW1hZ2UgcGl4
ZWxzIHRvIHRoZSBjYW52YXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKTogSW1wbGVtZW50IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
YmVnaW5QYWludCk6IEp1c3QgY2FsbCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyk6IEltcGxlbWVudCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgorCiAyMDEwLTA3
LTEzICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgR2F2aW4gQmFycmFjbG91Z2guCkBAIC0yNiw2NCArNTQsMjcgQEAKIAogMjAxMC0wNy0xMyAg
U2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAotICAgICAgICBSZXZpZXdl
ZCBieSBEYW4gQmVybnN0ZWluLgotCi0gICAgICAgIFNob3cgSURzIGFuZCBjbGFzc25hbWVzIGlu
IGxheWVyIHRyZWUgZHVtcHMKLSAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTQyMjEzCi0KLSAgICAgICAgV2hlbiBkdW1waW5nIHRoZSBsYXllciB0cmVlIHZp
YSBzaG93TGF5ZXJUcmVlKCksIGluY2x1ZGUgaWQgYW5kIGNsYXNzIGF0dHJpYnV0ZXMgZm9yCi0g
ICAgICAgIGVhc2Ugb2YgZGVidWdnaW5nLgotICAgICAgICAKLSAgICAgICAgTm8gdGVzdHMsIHNp
bmNlIHRoaXMgaXMgZGVidWctb25seSBjb2RlLgotCi0gICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyLmNwcDoKLSAgICAgICAgKHNob3dMYXllclRyZWUpOgotICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUcmVlQXNUZXh0LmNwcDoKLSAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVBc1Rl
eHQ6OndyaXRlUmVuZGVyT2JqZWN0KToKLSAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFz
VGV4dC5oOgotICAgICAgICAoV2ViQ29yZTo6KToKLQotMjAxMC0wNy0xMyAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KLQotICAgICAgICBCdWlsZCBmaXg6IGZpeCBXZWJD
b3JlIGV4cG9ydHMgYnkgZWRpdGluZyB0aGUgLmluIGZpbGUsIHJhdGhlciB0aGFuIHRoZSBnZW5l
cmF0ZWQgZmlsZS4KKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAKLSAgICAg
ICAgKiBXZWJDb3JlLmV4cC5pbjoKLQotMjAxMC0wNy0xMyAgQWxleGV5IFByb3NrdXJ5YWtvdiAg
PGFwQGFwcGxlLmNvbT4KLQotICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KLQotICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDIyMTYKLSAgICAg
ICAgUmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNlUmVxdWVzdCgpIGNyYXNoZXMgaWYg
Y2xpZW50IGRlbmllZCByZXF1ZXN0Ci0KLSAgICAgICAgVGhpcyBpcyBjb3ZlcmVkIGJ5IG1hbnkg
cmVncmVzc2lvbiB0ZXN0cyB3aXRoIHBhdGNoIGZvciBidWcgNDIyMDEgYXBwbGllZCAoYmVjYXVz
ZSBpdCBtYWtlcwotICAgICAgICB1cyBhbHNvIHVzZSB0aGlzIGNvZGUgcGF0aCBmb3Igc3luYyBy
ZXF1ZXN0cywgYW5kIHRob3NlIGN1cnJlbnRseSBoYXZlIG1vcmUgc3RyaWN0IGxpbWl0YXRpb25z
KS4KLQotICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2YvUmVzb3VyY2VSZXF1ZXN0Q0ZOZXQu
Y3BwOgotICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0Ojpkb1VwZGF0ZVJlc291cmNl
UmVxdWVzdCk6IEFkZGVkIGEgbnVsbCBjaGVjay4KLQotMjAxMC0wNy0xMyAgRXJpYyBTZWlkZWwg
IDxlcmljQHdlYmtpdC5vcmc+Ci0KLSAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KLQot
ICAgICAgICBNYWtlIG91ciBlbmQgdGFnIGluLWZvcmVpZ24tY29udGVudCBtb2RlIHNwZWMgYnVn
IHdvcmthcm91bmRzIG1vcmUgY2xvc2VseSBtYXRjaCBtaW5lZmllbGQKLSAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQyMTg3Ci0KLSAgICAgICAgSSBkbyBu
b3QgZXhwZWN0IHRoZXNlIHdvcmstYXJvdW5kcyB0byBiZSBwZXJtYW5lbnQuICBIaXhpZSBoYXMg
cHJvbWlzZWQgdG8KLSAgICAgICAgYWRkcmVzc2VzIHRoZSBmZWVkYmFjayB0byB0aGUgcGFyc2Vy
IHNlY3Rpb25zIG9mIEhUTUw1IHNvb24uCi0gICAgICAgIEkgYWRkZWQgdGhlc2UgaGFja3MgdG8g
bWFrZSBvdXIgaGFja3MgbW9yZS1jbG9zZWx5IG1hdGNoIE1pbmVmaWVsZCdzIGhhY2tzCi0gICAg
ICAgIGFuZCB0aHVzIGhhdmUgdXMgInBhc3MiIGEgZmV3IG1vcmUgaHRtbDVsaWIgcnVubmVyIHRl
c3RzLgorICAgICAgICBXZWJHTCByZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxh
YmxlIHRvIENhbnZhcy50b0RhdGFVUkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ3MTkKIAotICAgICAgICBXZSBub3cg
cGFzcyBhbGwgb2YgdGhlIGh0bWw1bGliIGZvcmVpZ24gY29udGVudCB0ZXN0cwotICAgICAgICAo
dGh1cyB3ZSdsbCBsaWtlbHkgbmVlZCB0byB3cml0ZSBtb3JlKS4KKyAgICAgICAgVGVzdDogZmFz
dC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWkuaHRtbAorICAgICAgICAgICAgICBmYXN0L2Nh
bnZhcy93ZWJnbC9jYW52YXMtdGVzdC5odG1sCiAKLSAgICAgICAgVGVzdGVkIGJ5IGh0bWw1bGli
L3J1bm5lci5odG1sCi0KLSAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50U3RhY2suY3BwOgotICAg
ICAgICAoV2ViQ29yZTo6SFRNTEVsZW1lbnRTdGFjazo6Y29udGFpbnMpOgotICAgICAgICAqIGh0
bWwvSFRNTEVsZW1lbnRTdGFjay5oOgotICAgICAgICAqIGh0bWwvSFRNTFRyZWVCdWlsZGVyLmNw
cDoKLSAgICAgICAgKFdlYkNvcmU6OkhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyk6Cisg
ICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKTogUGFpbnQgdGhlIFdlYkdMIHJlbmRlcmluZyBy
ZXN1bHRzIHRvIGNhbnZhcyBpZiBpdCdzIDNkLgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OmRyYXdJbWFnZSk6IFBhaW50IHRoZSBXZWJHTCByZW5kZXJpbmcgcmVzdWx0
cyB0byBjYW52YXMgaWYgaXQncyAzZCBiZWZvcmUgZHJhd2luZy4KKyAgICAgICAgKiBodG1sL2Nh
bnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQpOiBNYXJrIGl0IGFsd2F5cyBmb3Ig
Y2FudmFzMmQuZHJhd0ltYWdlIHB1cnBvc2UuIAorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyk6IFBhaW50IHRoZSBX
ZWJHTCByZW5kZXJpbmcgcmVzdWx0cyB0byBjYW52YXMgaWYgaXQncyBkaXJ0eS4KKyAgICAgICAg
KiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaDogRGVjbGFyZSBwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmg6IERlY2xhcmUgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKSAm
IHBhaW50VG9DYW52YXMoKS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHQzRENHLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpw
YWludFRvQ2FudmFzKTogUGFpbnQgdGhlIHJlbmRlcmVkIGltYWdlIHBpeGVscyB0byB0aGUgY2Fu
dmFzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5tbToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyk6IEltcGxlbWVudCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cygpLgogCiAyMDEwLTA3LTEyICBUb255IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+
CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAkocmV2aXNpb24gNjMyNjkpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MjcsNiArMzI3LDExIEBAIFN0cmluZyBIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKGNvbnMK
IAogICAgIFN0cmluZyBsb3dlcmNhc2VNaW1lVHlwZSA9IG1pbWVUeXBlLmxvd2VyKCk7CiAKKyAg
ICBpZiAoaXMzRCgpKSB7CisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dDNk
ID0gcmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihyZW5kZXJpbmdDb250
ZXh0KCkpOworICAgICAgICBjb250ZXh0M2QtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KCk7CisgICAgfQorCiAgICAgLy8gRklYTUU6IE1ha2UgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBl
Rm9yRW5jb2RpbmcgdGhyZWFkc2FmZSAodG8gYWxsb3cgdGhpcyBtZXRob2QgdG8gYmUgdXNlZCBv
biBhIHdvcmtlciB0aHJlYWQpLgogICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSB8fCAhTUlNRVR5
cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobG93ZXJjYXNl
TWltZVR5cGUpKQogICAgICAgICByZXR1cm4gYnVmZmVyKCktPnRvRGF0YVVSTCgiaW1hZ2UvcG5n
Iik7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQuY3BwCShyZXZpc2lvbiA2MzI2OSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTAgQEAK
ICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAK
KyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5o
IgorI2VuZGlmCisKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
QEAgLTExMjYsNiArMTEzMCwxMyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJh
d0ltYWdlCiAgICAgaWYgKCFzb3VyY2VDYW52YXMtPm9yaWdpbkNsZWFuKCkpCiAgICAgICAgIGNh
bnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7CiAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAg
IGlmIChzb3VyY2VDYW52YXMtPmlzM0QoKSkgeworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQzZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4o
c291cmNlQ2FudmFzLT5yZW5kZXJpbmdDb250ZXh0KCkpOworICAgICAgICBjb250ZXh0M2QtPnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgfQorI2VuZGlmCisKICAgICBjLT5k
cmF3SW1hZ2UoYnVmZmVyLT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVjdCwgc291
cmNlUmVjdCwgc3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSk7CiAgICAgd2lsbERyYXcoZGVzdFJl
Y3QpOyAvLyBUaGlzIGNhbGwgY29tZXMgYWZ0ZXIgZHJhd0ltYWdlLCBzaW5jZSB0aGUgYnVmZmVy
IHdlIGRyYXcgaW50byBtYXkgYmUgb3VyIG93biwgYW5kIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGl0
IGlzIGRpcnR5LgogICAgICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFyZ3VhYmx5IHdp
bGxEcmF3IHNob3VsZCBiZWNvbWUgZGlkRHJhdyBhbmQgb2NjdXIgYWZ0ZXIgZHJhd2luZyBjYWxs
cyBhbmQgbm90IGJlZm9yZSB0aGVtIHRvIGF2b2lkIHByb2JsZW1zIGxpa2UgdGhpcy4KSW5kZXg6
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlz
aW9uIDYzMjY5KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsMTcgKzE0MSwyMyBAQCB2b2lkIFdlYkdMUmVuZGVy
aW5nQ29udGV4dDo6bWFya0NvbnRleHRDCiAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52
YXMoKS0+cmVuZGVyQm94KCk7CiAgICAgaWYgKHJlbmRlckJveCAmJiByZW5kZXJCb3gtPmhhc0xh
eWVyKCkgJiYgcmVuZGVyQm94LT5sYXllcigpLT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkp
CiAgICAgICAgIHJlbmRlckJveC0+bGF5ZXIoKS0+cmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpOwot
ICAgIGVsc2UgewogI2VuZGlmCi0gICAgICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSkgewot
ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjYW52YXMncyBpbWFnZSBidWZmZXIgaXMgYWxs
b2NhdGVkLgotICAgICAgICAgICAgY2FudmFzKCktPmJ1ZmZlcigpOwotICAgICAgICAgICAgY2Fu
dmFzKCktPndpbGxEcmF3KEZsb2F0UmVjdCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFz
KCktPmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gdHJ1ZTsK
LSAgICAgICAgfQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoIW1f
bWFya2VkQ2FudmFzRGlydHkpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjYW52YXMncyBp
bWFnZSBidWZmZXIgaXMgYWxsb2NhdGVkLgorICAgICAgICBjYW52YXMoKS0+YnVmZmVyKCk7Cisg
ICAgICAgIGNhbnZhcygpLT53aWxsRHJhdyhGbG9hdFJlY3QoMCwgMCwgY2FudmFzKCktPndpZHRo
KCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOworICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0g
dHJ1ZTsKICAgICB9Ci0jZW5kaWYKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkKK3sKKyAgICBpZiAobV9tYXJrZWRDYW52YXNE
aXJ0eSkgeworICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisgICAgICAgIG1f
Y29udGV4dC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcyk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0OjpiZWdpblBhaW50KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gNjMyNjkpCisrKyBXZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNiAr
MzA2LDEwIEBAIGNsYXNzIFdlYktpdENTU01hdHJpeDsKICAgICAKICAgICAgICAgdm9pZCByZXNo
YXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIHRy
dWUgaW5kaWNhdGVzIGNhbnZhcyBpcyB1cGRhdGVkIGR1cmluZyB0aGUgY2FsbCwKKyAgICAgICAg
Ly8gZmFsc2UgaW5kaWNhdGVzIG5vIHVwZGF0ZXMuCisgICAgICAgIGJvb2wgcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoKTsKKwogICAgICAgICAvLyBIZWxwZXJzIGZvciBub3RpZmljYXRp
b24gYWJvdXQgcGFpbnQgZXZlbnRzLgogICAgICAgICB2b2lkIGJlZ2luUGFpbnQoKTsKICAgICAg
ICAgdm9pZCBlbmRQYWludCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R3JhcGhpY3NDb250ZXh0M0QuaAkocmV2aXNpb24gNjMyNjkpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4
LDEwIEBAIHR5cGVkZWYgaW50IFBsYXRmb3JtM0RPYmplY3Q7CiBjb25zdCBQbGF0Zm9ybTNET2Jq
ZWN0IE51bGxQbGF0Zm9ybTNET2JqZWN0ID0gMDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ0cp
CisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICBjbGFzcyBXZWJHTEFjdGl2ZUluZm87CiAgICAgY2xhc3MgQXJyYXlC
dWZmZXI7CkBAIC03MTAsNyArNzE0LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
dm9pZCB2aWV3cG9ydChsb25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWdu
ZWQgbG9uZyBoZWlnaHQpOwogCiAgICAgICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpOwotICAgICAgICAKKworI2lmIFBMQVRGT1JNKENHKQorICAgICAgICB2b2lkIHBhaW50
VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFnZVdpZHRo
LCBpbnQgaW1hZ2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2FudmFz
V2lkdGgsIGludCBjYW52YXNIZWlnaHQsIENHQ29udGV4dFJlZiBjb250ZXh0KTsKKyNlbmRpZgor
CisgICAgICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KTsKKwogICAgICAgICAvLyBIZWxwZXJzIGZvciBub3RpZmljYXRp
b24gYWJvdXQgcGFpbnQgZXZlbnRzCiAgICAgICAgIHZvaWQgYmVnaW5QYWludChXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQpOwogICAgICAgICB2b2lkIGVuZFBhaW50KCk7CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RD
Ry5jcHAJKHJldmlzaW9uIDYzMjY5KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9H
cmFwaGljc0NvbnRleHQzRENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQAog
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ0dJbWFnZS5oPgogCisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSog
aW1hZ2UsCkBAIC0xMDQsNiArMTA2LDQxIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldElt
YWdlRGF0YShJbWEKICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIG5lZWRlZEFs
cGhhT3AsIG91dHB1dFZlY3Rvci5kYXRhKCkpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1h
Z2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LCBpbnQgY2FudmFzV2lkdGgsIGludCBjYW52YXNIZWln
aHQsIENHQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIGlmICghaW1hZ2VQaXhlbHMgfHwgaW1h
Z2VXaWR0aCA8PSAwIHx8IGltYWdlSGVpZ2h0IDw9IDAgfHwgY2FudmFzV2lkdGggPD0gMCB8fCBj
YW52YXNIZWlnaHQgPD0gMCB8fCAhY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIGludCBy
b3dCeXRlcyA9IGltYWdlV2lkdGggKiA0OworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJl
Zj4gZGF0YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBpbWFnZVBp
eGVscywgcm93Qnl0ZXMgKiBpbWFnZUhlaWdodCwgMCk7CisgICAgUmV0YWluUHRyPENHQ29sb3JT
cGFjZVJlZj4gY29sb3JTcGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAg
IFJldGFpblB0cjxDR0ltYWdlUmVmPiBjZ0ltYWdlID0gQ0dJbWFnZUNyZWF0ZShpbWFnZVdpZHRo
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFn
ZUhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJv
d0J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb2xvclNwYWNlLmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFw
Qnl0ZU9yZGVyMzJIb3N0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBkYXRhUHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKKyAgICAv
LyBDU1Mgc3R5bGluZyBtYXkgY2F1c2UgdGhlIGNhbnZhcydzIGNvbnRlbnQgdG8gYmUgcmVzaXpl
ZCBvbgorICAgIC8vIHRoZSBwYWdlLiBHbyBiYWNrIHRvIHRoZSBDYW52YXMgdG8gZmlndXJlIG91
dCB0aGUgY29ycmVjdAorICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgdG8gZHJhdy4KKyAgICBDR1Jl
Y3QgcmVjdCA9IENHUmVjdE1ha2UoMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FudmFzV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0hlaWdodCk7
CisgICAgLy8gV2Ugd2FudCB0byBjb21wbGV0ZWx5IG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgZnJh
bWUncworICAgIC8vIHJlbmRlcmluZyByZXN1bHRzLgorICAgIENHQ29udGV4dFNhdmVHU3RhdGUo
Y29udGV4dCk7CisgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dFNldEludGVy
cG9sYXRpb25RdWFsaXR5KGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga0NHSW50ZXJwb2xhdGlvbk5vbmUpOworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250
ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICByZWN0LCBjZ0ltYWdlLmdldCgpKTsKKyAgICBD
R0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4
dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dy
YXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2MzI2OSkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSwxMCArMzksMTMgQEAKICNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgogI2luY2x1ZGUgIkZs
b2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1
ZGUgIkludDMyQXJyYXkuaCIKICNpbmNsdWRlICJXZWJHTExheWVyLmgiCiAjaW5jbHVkZSAiV2Vi
R0xQcm9ncmFtLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJX
ZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgogI2luY2x1
ZGUgIldlYkdMVGV4dHVyZS5oIgogI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKQEAgLTIzNyw2ICsy
NDAsNTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZQogICAgIENH
TFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK3sKKyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+
Y2FudmFzKCk7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIo
KTsKKworICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVudFdpZHRoICogNDsKKyAgICBpbnQgdG90
YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0OworCisgICAgT3duQXJyYXlQdHI8
dW5zaWduZWQgY2hhcj4gcGl4ZWxzKG5ldyB1bnNpZ25lZCBjaGFyW3RvdGFsQnl0ZXNdKTsKKyAg
ICBpZiAoIXBpeGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dMU2V0Q3VycmVudENvbnRl
eHQobV9jb250ZXh0T2JqKTsKKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk87CisgICAgaWYgKG1f
YXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVB
RF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6
Z2xCbGl0RnJhbWVidWZmZXJFWFQoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdo
dCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQ09MT1JfQlVGRkVS
X0JJVCwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFN
RUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAg
IH0gZWxzZSB7CisgICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAgICAg
ICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICB9CisgICAgfQorCisgICAg
R0xpbnQgcGFja0FsaWdubWVudCA9IDQ7CisgICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGlnbm1l
bnQgPSBmYWxzZTsKKyAgICA6OmdsR2V0SW50ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZwYWNr
QWxpZ25tZW50KTsKKyAgICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsKKyAgICAgICAgOjpnbFBp
eGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsKKyAgICAgICAgbXVzdFJlc3RvcmVQYWNr
QWxpZ25tZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1
cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84
XzhfOF9SRVYsIHBpeGVscy5nZXQoKSk7CisKKyAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25t
ZW50KQorICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGln
bm1lbnQpOworCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1l
YnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CisKKyAgICBwYWludFRv
Q2FudmFzKHBpeGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwKKyAg
ICAgICAgICAgICAgICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VC
dWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOworfQorCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsK
ICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHJldmlzaW9uIDYzMjY5
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTIxLDYgKzUyMSwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjptYWtlQ29udGV4dEN1cnJlCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFp
bnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogeworICAgIHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50
KCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorewogICAgIG1faW50ZXJu
YWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNh
bnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9
IGNhbnZhcy0+YnVmZmVyKCk7CkBAIC01MjgsMTAgKzUzNyw2IEBAIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJlZ2luUGFpbnQoV2ViR0wKICAgICBwYWludChwYWludGVyLCBRUmVjdChRUG9pbnQo
MCwgMCksIFFTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpKSk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KCkKLXsKLX0KLQogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0JiByZWN0KSBjb25z
dAogewogI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA3LCAwKQpJbmRleDog
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0v
Q2hhbmdlTG9nCShyZXZpc2lvbiA2MzI3MykKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0wNy0xMyAgWmhlbnlhbyBNbyAg
PHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFdlYkdMIHJlbmRlcmluZyByZXN1bHRzIG11c3QgYmUgbWFkZSBhdmFpbGFibGUg
dG8gQ2FudmFzLnRvRGF0YVVSTCBhbmQgMkQgZHJhd0ltYWdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDcxOQorCisgICAgICAgICogc3JjL0dyYXBo
aWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKTogSW1wbGVtZW50IHBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpiZWdpblBhaW50KTogSnVzdCB1c2UgcGFpbnRSZW5kZXJpbmdSZXN1bHRz
VG9DYW52YXMoKS4KKwogMjAxMC0wNy0xMyAgQ2hyaXMgR3VpbGxvcnkgIDxjaHJpcy5ndWlsbG9y
eUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDog
V2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDYzMjY5
KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExMiw2ICsxMTIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2hhcGUoaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAorICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKICAgICB2b2lkIGJlZ2luUGFp
bnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKICAgICB2b2lkIGVuZFBhaW50KCk7
CiAKQEAgLTM5OSw3ICs0MDAsNyBAQCBXZWJHTExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4
dDNESW50CiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdp
blBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBj
b250ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMt
PmJ1ZmZlcigpOwpAQCAtNDQ5LDQ0ICs0NTAsMjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpiZWdpblBhaQogICAgICAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3QobV9yZXNpemlu
Z0JpdG1hcCwgMCwgZHN0KTsKICAgICB9CiAjZWxpZiBQTEFURk9STShDRykKLSAgICBpZiAobV9y
ZW5kZXJPdXRwdXQpIHsKLSAgICAgICAgaW50IHJvd0J5dGVzID0gbV9pbXBsLT53aWR0aCgpICog
NDsKLSAgICAgICAgQ0dEYXRhUHJvdmlkZXJSZWYgZGF0YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlk
ZXJDcmVhdGVXaXRoRGF0YSgwLCBtX3JlbmRlck91dHB1dCwgcm93Qnl0ZXMgKiBtX2ltcGwtPmhl
aWdodCgpLCAwKTsKLSAgICAgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9y
U3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gQ0dJ
bWFnZUNyZWF0ZShtX2ltcGwtPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbXBsLT5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDMyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJvd0J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bG9yU3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NH
SW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvdmlkZXIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsK
LSAgICAgICAgLy8gQ1NTIHN0eWxpbmcgbWF5IGNhdXNlIHRoZSBjYW52YXMncyBjb250ZW50IHRv
IGJlIHJlc2l6ZWQgb24KLSAgICAgICAgLy8gdGhlIHBhZ2UuIEdvIGJhY2sgdG8gdGhlIENhbnZh
cyB0byBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0Ci0gICAgICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQg
dG8gZHJhdy4KLSAgICAgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKDAsIDAsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5jYW52YXMoKS0+d2lkdGgoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmNhbnZhcygpLT5oZWlnaHQo
KSk7Ci0gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGxldGVseSBvdmVyd3JpdGUgdGhlIHByZXZp
b3VzIGZyYW1lJ3MKLSAgICAgICAgLy8gcmVuZGVyaW5nIHJlc3VsdHMuCi0gICAgICAgIENHQ29u
dGV4dFNldEJsZW5kTW9kZShpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQo
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0JsZW5kTW9kZUNvcHkpOwotICAg
ICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShpbWFnZUJ1ZmZlci0+Y29udGV4
dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga0NHSW50ZXJwb2xhdGlvbk5vbmUpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UoaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWN0LCBjZ0ltYWdlKTsKLSAgICAgICAgQ0dJbWFnZVJlbGVhc2Uo
Y2dJbWFnZSk7Ci0gICAgICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7Ci0gICAg
ICAgIENHRGF0YVByb3ZpZGVyUmVsZWFzZShkYXRhUHJvdmlkZXIpOwotICAgIH0KKyAgICBpZiAo
bV9yZW5kZXJPdXRwdXQpCisgICAgICAgIGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnBh
aW50VG9DYW52YXMobV9yZW5kZXJPdXRwdXQsIG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWln
aHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+
cGxhdGZvcm1Db250ZXh0KCkpOwogI2Vsc2UKICNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0
Zm9ybQogI2VuZGlmCiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5Q
YWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoY29udGV4dCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6ZW5kUGFpbnQoKQogewogfQpAQCAtMTMyNSw2ICsxMzAyLDcgQEAgREVMRUdBVEVf
VE9fSU5URVJOQUxfNih2ZXJ0ZXhBdHRyaWJQb2ludAogCiBERUxFR0FURV9UT19JTlRFUk5BTF80
KHZpZXdwb3J0LCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCitE
RUxFR0FURV9UT19JTlRFUk5BTF8xKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzLCBXZWJH
TFJlbmRlcmluZ0NvbnRleHQqKQogREVMRUdBVEVfVE9fSU5URVJOQUxfMShiZWdpblBhaW50LCBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqKQogREVMRUdBVEVfVE9fSU5URVJOQUwoZW5kUGFpbnQpCiAK
SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDYzMjczKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDctMTMgIFpoZW55YW8gTW8gIDx6bW9A
Z29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBXZWJHTCByZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENh
bnZhcy50b0RhdGFVUkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dl
YmdsL2NhbnZhcy10ZXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvY2FudmFzLXRlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMv
d2ViZ2wvZ2wtcGl4ZWxzdG9yZWktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS5odG1sOiBBZGRlZC4KKwogMjAxMC0wNy0xMyAg
T2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdh
dmluIEJhcnJhY2xvdWdoLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY2Fu
dmFzLXRlc3QtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2NhbnZhcy10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwzMCBAQAorVGhpcyB0ZXN0IGVuc3VyZXMgV2ViR0wgaW1wbGVtZW50
YXRpb25zIGludGVyYWN0IGNvcnJlY3RseSB3aXRoIHRoZSBjYW52YXMgdGFnLgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworQ2FudmFzLmdldENvbnRleHQKK1BBU1MgY29udGV4dCBl
eGlzdHMKKworQ2hlY2tpbmcgY2FudmFzIGFuZCBXZWJHTCBpbnRlcmFjdGlvbgorUEFTUyBjYW52
YXMud2lkdGggaXMgMzAwCitQQVNTIGNhbnZhcy5oZWlnaHQgaXMgMTUwCitQQVNTIHBpeGVscyBh
cmUgMCwwLDAsMAorUEFTUyBnZXRWaWV3cG9ydCgpIGlzICIwLDAsMzAwLDE1MCIKKworY2hhbmdl
IGRpc3BsYXkgc2l6ZSBvZiBjYW52YXMgYW5kIHNlZSB0aGF0IHZpZXdwb3J0IGRvZXMgbm90IGNo
YW5nZQorUEFTUyBnZXRWaWV3cG9ydCgpIGlzICIwLDAsMzAwLDE1MCIKK1BBU1MgY2FudmFzLndp
ZHRoIGlzIDMwMAorUEFTUyBjYW52YXMuaGVpZ2h0IGlzIDE1MAorCitjaGFuZ2UgdGhlIGFjdHVh
bCBzaXplIG9mIHRoZSBjYW52YXMgYW5kIHNlZSB0aGF0IHRoZSB2aWV3cG9ydCBkb2VzIG5vdCBj
aGFuZ2UKK1BBU1MgcGl4ZWxzIGFyZSA2NCwxMjgsMTkyLDI1NQorUEFTUyBnbC5jbGVhckNvbG9y
IHNob3VsZCBub3QgY2hhbmdlIGFmdGVyIGNhbnZhcyByZXNpemUKK1BBU1MgZ2wuY29sb3JNYXNr
IHNob3VsZCBub3QgY2hhbmdlIGFmdGVyIGNhbnZhcyByZXNpemUKK1BBU1MgZ2V0Vmlld3BvcnQo
KSBpcyAiMCwwLDMwMCwxNTAiCitQQVNTIHBpeGVscyBhcmUgMCwwLDAsMAorCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKyAKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFzLXRlc3QuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0Lmh0bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjAzIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8v
RFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcvVFIv
aHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250
ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD11dGYtOCI+Cis8dGl0bGU+V2Vi
R0wgQ2FudmFzIENvbmZvcm1hbmNlIFRlc3RzPC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVl
dCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPGNhbnZhcyBpZD0iY2FudmFzIiBzdHlsZT0id2lkdGg6IDUwcHg7IGhlaWdodDogNTBweDsi
PiA8L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImNhbnZhczJkIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAi
PiA8L2NhbnZhcz4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIp
IHsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJH
TEVuYWJsZWQiLCAiMSIpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7Cisg
IGxheW91dFRlc3RDb250cm9sbGVyLndhaXRVbnRpbERvbmUoKTsKK30KKworZGVzY3JpcHRpb24o
IlRoaXMgdGVzdCBlbnN1cmVzIFdlYkdMIGltcGxlbWVudGF0aW9ucyBpbnRlcmFjdCBjb3JyZWN0
bHkgd2l0aCB0aGUgY2FudmFzIHRhZy4iKTsKKworZGVidWcoIiIpOworZGVidWcoIkNhbnZhcy5n
ZXRDb250ZXh0Iik7CisKK3ZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2Fu
dmFzIik7Cit2YXIgY2FudmFzMmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzMmQi
KTsKK3ZhciBjdHgyZCA9IGNhbnZhczJkLmdldENvbnRleHQoIjJkIik7Cit2YXIgZ2wgPSBudWxs
OwordHJ5IHsKKyAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIik7
Cit9IGNhdGNoKGUpIHt9CitpZiAoIWdsKSB7CisgIHRyeSB7CisgICAgZ2wgPSBjYW52YXMuZ2V0
Q29udGV4dCgid2Via2l0LTNkIik7CisgIH0gY2F0Y2goZSkge30KK30KK2lmICghZ2wpIHsKKyAg
dGVzdEZhaWxlZCgiY29udGV4dCBkb2VzIG5vdCBleGlzdCIpOworfSBlbHNlIHsKKyAgdGVzdFBh
c3NlZCgiY29udGV4dCBleGlzdHMiKTsKKworICBkZWJ1ZygiIik7CisgIGRlYnVnKCJDaGVja2lu
ZyBjYW52YXMgYW5kIFdlYkdMIGludGVyYWN0aW9uIik7CisKKyAgLy8gQ2hlY2sgdGhhdCBhIGNh
bnZhcyB3aXRoIG5vIHdpZHRoIG9yIGhlaWdodCBpcyAzMDB4MTUwIHBpeGVscworICBzaG91bGRC
ZSgnY2FudmFzLndpZHRoJywgJzMwMCcpOworICBzaG91bGRCZSgnY2FudmFzLmhlaWdodCcsICcx
NTAnKTsKKworICAvLyBDaGVjayBnZXQgYSA0IHZhbHVlIGdsIHBhcmFtZXRlciBhcyBhIGNzdiBz
dHJpbmcuCisgIGZ1bmN0aW9uIGdldFZhbHVlNHYobmFtZSkgeworICAgIHZhciB2ID0gZ2wuZ2V0
UGFyYW1ldGVyKG5hbWUpOworICAgIHZhciByZXN1bHQgPSAnJyArCisgICAgICAgIHZbMF0gKyAn
LCcgKworICAgICAgICB2WzFdICsgJywnICsKKyAgICAgICAgdlsyXSArICcsJyArCisgICAgICAg
IHZbM107CisgICAgcmV0dXJuIHJlc3VsdDsKKyAgfQorCisgIGZ1bmN0aW9uIGdldFZpZXdwb3J0
KCkgeworICAgIHJldHVybiBnZXRWYWx1ZTR2KGdsLlZJRVdQT1JUKTsKKyAgfQorCisgIGZ1bmN0
aW9uIGdldENsZWFyQ29sb3IoKSB7CisgICAgcmV0dXJuIGdldFZhbHVlNHYoZ2wuQ09MT1JfQ0xF
QVJfVkFMVUUpOworICB9CisKKyAgZnVuY3Rpb24gaXNBYm91dEVxdWFsKGEsIGIpIHsKKyAgICBy
ZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDwgMC4wMTsKKyAgfQorCisgIGZ1bmN0aW9uIGlzQWJvdXRF
cXVhbEludChhLCBiKSB7CisgICAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8IDM7CisgIH0KKwor
ICBmdW5jdGlvbiBjaGVja0NhbnZhc0NvbnRlbnRJcyhyM2QsZzNkLGIzZCxhM2QpIHsKKyAgICB2
YXIgcjJkOworICAgIHZhciBnMmQ7CisgICAgdmFyIGIyZDsKKyAgICB2YXIgYTJkOworCisgICAg
ZnVuY3Rpb24gY2hlY2tQaXhlbCh4LCB5LCByM2QsZzNkLGIzZCxhM2QpIHsKKyAgICAgIHZhciBv
ZmZzZXQgPSAoeSAqIDQwICsgeCkgKiA0OworICAgICAgcjJkID0gaW1nRGF0YS5kYXRhW29mZnNl
dF07CisgICAgICBnMmQgPSBpbWdEYXRhLmRhdGFbb2Zmc2V0ICsgMV07CisgICAgICBiMmQgPSBp
bWdEYXRhLmRhdGFbb2Zmc2V0ICsgMl07CisgICAgICBhMmQgPSBpbWdEYXRhLmRhdGFbb2Zmc2V0
ICsgM107CisgICAgICAvL2RlYnVnKCcnICsgeCArICcsICcgKyB5ICsgIigiICsgb2Zmc2V0ICsg
IikgPSAiICsgcjJkICsgIiwgIiArIGcyZCArICIsICIgKyBiMmQgKyAiLCAiICsgYTJkKTsKKyAg
ICAgIHJldHVybiBpc0Fib3V0RXF1YWxJbnQocjJkLCByM2QpICYmCisgICAgICAgICAgICAgaXNB
Ym91dEVxdWFsSW50KGcyZCwgZzNkKSAmJgorICAgICAgICAgICAgIGlzQWJvdXRFcXVhbEludChi
MmQsIGIzZCkgJiYKKyAgICAgICAgICAgICBpc0Fib3V0RXF1YWxJbnQoYTJkLCBhM2QpOworICAg
IH0KKworICAgIGZ1bmN0aW9uIGNoZWNrUGl4ZWxzKHIzZCxnM2QsYjNkLGEzZCkgeworICAgICAg
cmV0dXJuIGNoZWNrUGl4ZWwoMCwgMCwgcjNkLCBnM2QsIGIzZCwgYTNkKSAmJgorICAgICAgICAg
ICAgIGNoZWNrUGl4ZWwoMCwgMzksIHIzZCwgZzNkLCBiM2QsIGEzZCkgJiYKKyAgICAgICAgICAg
ICBjaGVja1BpeGVsKDM5LCAwLCByM2QsIGczZCwgYjNkLCBhM2QpICYmCisgICAgICAgICAgICAg
Y2hlY2tQaXhlbCgzOSwgMzksIHIzZCwgZzNkLCBiM2QsIGEzZCk7CisgICAgfTsKKworICAgIC8v
IFNldCB0byBqdXN0IHRha2UgdGhlIGNvbG9yIGZyb20gdGhlIDNkIGNhbnZhcworICAgIGN0eDJk
Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JzsKKworICAgIC8vIGZpbGwgMmQgY2Fu
dmFzIHdpdGggb3JhbmdlCisgICAgY3R4MmQuZmlsbFN0eWxlID0gInJnYigyNTUsMTkyLDEyOCki
OworICAgIGN0eDJkLmZpbGxSZWN0ICgwLCAwLCA0MCwgNDApOworCisgICAgLy8gZ2V0IHRoZSBp
bWFnZSBkYXRhCisgICAgdmFyIGltZ0RhdGEgPSBjdHgyZC5nZXRJbWFnZURhdGEoMCwgMCwgNDAs
IDQwKTsKKworICAgIC8vIGNoZWNrIGl0IGdvdCBjbGVhcmVkLgorICAgIGlmICghY2hlY2tQaXhl
bHMoMjU1LCAxOTIsIDEyOCwgMjU1KSkgeworICAgICAgdGVzdEZhaWxlZCgidW5hYmxlIHRvIGZp
bGwgMmQgY29udGV4dC4iKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBkcmF3IDNk
IGNhbnZhcyBvbiB0b3AuCisgICAgY3R4MmQuZHJhd0ltYWdlKGNhbnZhcywgMCwgMCwgNDAsIDQw
KTsKKworICAgIC8vIGdldCB0aGUgaW1hZ2UgZGF0YQorICAgIHZhciBpbWdEYXRhID0gY3R4MmQu
Z2V0SW1hZ2VEYXRhKDAsIDAsIDQwLCA0MCk7CisKKyAgICAvLyBDaGVjayBpdCdzIHRoZSBleHBl
Y3RlZCBjb2xvci4KKyAgICBpZiAoIWNoZWNrUGl4ZWxzKHIzZCwgZzNkLCBiM2QsIGEzZCkpIHsK
KyAgICAgIHRlc3RGYWlsZWQoInBpeGVscyBhcmUgIiArIHIyZCArICIsIiArIGcyZCArICIsIiAr
IGIyZCArICIsIiArIGEyZCArCisgICAgICAgICAgICAgICAgICIgZXhwZWN0ZWQgIiArIHIzZCAr
ICIsIiArIGczZCArICIsIiArIGIzZCArICIsIiArIGEzZCk7CisgICAgfSBlbHNlIHsKKyAgICAg
IHRlc3RQYXNzZWQoInBpeGVscyBhcmUgIiArIHIzZCArICIsIiArIGczZCArICIsIiArIGIzZCAr
ICIsIiArIGEzZCk7CisgICAgfQorICB9CisKKyAgY2hlY2tDYW52YXNDb250ZW50SXMoMCwgMCwg
MCwgMCk7CisgIHNob3VsZEJlKCdnZXRWaWV3cG9ydCgpJywgJyIwLDAsMzAwLDE1MCInKTsKKwor
ICAvLyBDaGFuZ2UgdGhlIGRpc3BsYXkgc2l6ZSBvZiB0aGUgY2FudmFzIGFuZCBjaGVjaworICAv
LyB0aGUgdmlld3BvcnQgc2l6ZSBkb2VzIG5vdCBjaGFuZ2UuCisgIGRlYnVnKCIiKTsKKyAgZGVi
dWcoImNoYW5nZSBkaXNwbGF5IHNpemUgb2YgY2FudmFzIGFuZCBzZWUgdGhhdCB2aWV3cG9ydCBk
b2VzIG5vdCBjaGFuZ2UiKTsKKyAgY2FudmFzLnN0eWxlLndpZHRoID0gIjEwMHB4IjsKKyAgY2Fu
dmFzLnN0eWxlLmhlaWdodCA9ICIyNXB4IjsKKyAgdmFyIGludGVydmFsSWQ7CisgIGludGVydmFs
SWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7CisgICAgaWYgKGNhbnZhcy5jbGll
bnRXaWR0aCA9PSAxMDAgJiYKKyAgICAgICAgY2FudmFzLmNsaWVudEhlaWdodCA9PSAyNSkgewor
ICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7CisgICAgICBzaG91bGRCZSgn
Z2V0Vmlld3BvcnQoKScsICciMCwwLDMwMCwxNTAiJyk7CisgICAgICBzaG91bGRCZSgnY2FudmFz
LndpZHRoJywgJzMwMCcpOworICAgICAgc2hvdWxkQmUoJ2NhbnZhcy5oZWlnaHQnLCAnMTUwJyk7
CisKKyAgICAgIC8vIENoYW5nZSB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNhbnZhcworICAgICAg
Ly8gQ2hlY2sgdGhhdCB0aGUgdmlld3BvcnQgZG9lcyBub3QgY2hhbmdlLgorICAgICAgLy8gQ2hl
Y2sgdGhhdCB0aGUgY2xlYXIgY29sb3IgZG9lcyBub3QgY2hhbmdlLgorICAgICAgLy8gQ2hlY2sg
dGhhdCB0aGUgY29sb3IgbWFzayBkb2VzIG5vdCBjaGFuZ2UuCisgICAgICBkZWJ1ZygiIik7Cisg
ICAgICBkZWJ1ZygiY2hhbmdlIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgY2FudmFzIGFuZCBzZWUg
dGhhdCB0aGUgdmlld3BvcnQgZG9lcyBub3QgY2hhbmdlIik7CisgICAgICBnbC5jbGVhckNvbG9y
KDAuMjUsIDAuNSwgMC43NSwgMSk7CisgICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklU
IHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7CisgICAgICBjaGVja0NhbnZhc0NvbnRlbnRJcyg2NCwg
MTI4LCAxOTIsIDI1NSk7CisgICAgICBnbC5jb2xvck1hc2soMCwwLDAsMCk7CisgICAgICBjYW52
YXMud2lkdGggPSA0MDA7CisgICAgICBjYW52YXMuaGVpZ2h0ID0gMTA7CisKKyAgICAgIHZhciB2
ID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLkNPTE9SX0NMRUFSX1ZBTFVFKTsKKyAgICAgIGFzc2VydE1z
Zyhpc0Fib3V0RXF1YWwodlswXSwgMC4yNSkgJiYKKyAgICAgICAgICAgICAgICBpc0Fib3V0RXF1
YWwodlsxXSwgMC41KSAmJgorICAgICAgICAgICAgICAgIGlzQWJvdXRFcXVhbCh2WzJdLCAwLjc1
KSAmJgorICAgICAgICAgICAgICAgIGlzQWJvdXRFcXVhbCh2WzNdLCAxKSwKKyAgICAgICAgICAg
ICAgICAiZ2wuY2xlYXJDb2xvciBzaG91bGQgbm90IGNoYW5nZSBhZnRlciBjYW52YXMgcmVzaXpl
Iik7CisgICAgICB2ID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLkNPTE9SX1dSSVRFTUFTSyk7CisgICAg
ICBhc3NlcnRNc2coaXNBYm91dEVxdWFsKHZbMF0sIDApICYmCisgICAgICAgICAgICAgICAgaXNB
Ym91dEVxdWFsKHZbMV0sIDApICYmCisgICAgICAgICAgICAgICAgaXNBYm91dEVxdWFsKHZbMl0s
IDApICYmCisgICAgICAgICAgICAgICAgaXNBYm91dEVxdWFsKHZbM10sIDApLAorICAgICAgICAg
ICAgICAgICJnbC5jb2xvck1hc2sgc2hvdWxkIG5vdCBjaGFuZ2UgYWZ0ZXIgY2FudmFzIHJlc2l6
ZSIpOworICAgICAgc2hvdWxkQmUoJ2dldFZpZXdwb3J0KCknLCAnIjAsMCwzMDAsMTUwIicpOwor
ICAgICAgY2hlY2tDYW52YXNDb250ZW50SXMoMCwgMCwgMCwgMCk7CisKKyAgICAgIGRlYnVnKCIi
KTsKKyAgICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisKKyAgICAgIHZhciBlcGlsb2d1
ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOworICAgICAgZXBpbG9ndWUub25s
b2FkID0gZmluaXNoOworICAgICAgZXBpbG9ndWUuc3JjID0gIi4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiOworICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlcGlsb2d1
ZSk7CisgICAgfQorICB9LCAxMDAwLzMwKTsKK30KKworZnVuY3Rpb24gZmluaXNoKCkgeworICAg
IGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICAgICAgbGF5b3V0VGVzdENv
bnRyb2xsZXIubm90aWZ5RG9uZSgpOworICAgIH0KK30KKworPC9zY3JpcHQ+CisKKzwvYm9keT4K
KzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3Rv
cmVpLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9nbC1waXhlbHN0b3JlaS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKKyAgICAKK1RoZXJlIHNob3VsZCBiZSA1IHJlZCB0cmlh
bmdsZXMgb24gNSBibGFjayBzcXVhcmVzIGFib3ZlCisKK1RoaXMgdGVzdCBjaGVja3MgdGhhdCBk
cmF3SW1hZ2UgYW5kIHJlYWRQaXhlbHMgYXJlIG5vdCBlZmZlY3RlZCBieSBnbC5QaXhlbHN0b3Jl
aShnbC5QQUNLX0FMSUdOTUVOVCkgYW5kIHZpc2EgdmVyc2EKKworUEFTUyBkcmF3aW5nIGlzIGNv
cnJlY3QgaW4gM2QgY29udGV4dAorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gMmQgY29udGV4
dAorUEFTUyBQQUNLX0FMSUdOTUVOVCBpcyAxCitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAz
ZCBjb250ZXh0CitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAyZCBjb250ZXh0CitQQVNTIFBB
Q0tfQUxJR05NRU5UIGlzIDIKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDNkIGNvbnRleHQK
K1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDJkIGNvbnRleHQKK1BBU1MgUEFDS19BTElHTk1F
TlQgaXMgNAorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gM2QgY29udGV4dAorUEFTUyBkcmF3
aW5nIGlzIGNvcnJlY3QgaW4gMmQgY29udGV4dAorUEFTUyBQQUNLX0FMSUdOTUVOVCBpcyA4CitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWkuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxz
dG9yZWkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjEgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgICJodHRw
Oi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzx0aXRs
ZT5XZWJHTCBwaXhlbFN0b3JlaSBUZXN0PC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5bGVzaGVldCIg
aHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvdXRpbHMzZC5qcyI+IDwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291
cmNlcy93ZWJnbC10ZXN0LmpzIj4gPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxjYW52YXMg
aWQ9ImV4YW1wbGUiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+Cis8Y2FudmFzIGlk
PSIyZDAwIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iMmQw
MSIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxjYW52YXMgaWQ9IjJkMDIiIHdp
ZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSIyZDAzIiB3aWR0aD0i
NTAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2Pgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IGlkPSJ2c2hhZGVyIiB0eXBlPSJ4LXNo
YWRlci94LXZlcnRleCI+CithdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247Cit2b2lkIG1haW4oKSB7
CisgIGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQgaWQ9
ImZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtZnJhZ21lbnQiPgordm9pZCBtYWluKCkgeworICBn
bF9GcmFnQ29sb3IgPSB2ZWM0KDEuMCwwLjAsMC4wLDEuMCk7Cit9Cis8L3NjcmlwdD4KKworPHNj
cmlwdD4KK2Z1bmN0aW9uIGZhaWwoeCx5LCBuYW1lLCBidWYsIHNob3VsZEJlKSB7CisgIHZhciBp
ID0gKHkqNTAreCkgKiA0OworICB2YXIgcmVhc29uID0gInBpeGVsIGluICIrbmFtZSsiIGF0ICgi
K3grIiwiK3krIikgaXMgKCIrYnVmW2ldKyIsIitidWZbaSsxXSsiLCIrYnVmW2krMl0rIiwiK2J1
ZltpKzNdKyIpLCBzaG91bGQgYmUgIitzaG91bGRCZTsKKyAgYXNzZXJ0TXNnKGZhbHNlLCByZWFz
b24pOworfQorCitmdW5jdGlvbiBwYXNzKG5hbWUpIHsKKyAgYXNzZXJ0TXNnKHRydWUsICJkcmF3
aW5nIGlzIGNvcnJlY3QgaW4gIiArIG5hbWUpOworfQorCitmdW5jdGlvbiBpbml0KCkgeworICBk
ZWJ1ZygiVGhlcmUgc2hvdWxkIGJlIDUgcmVkIHRyaWFuZ2xlcyBvbiA1IGJsYWNrIHNxdWFyZXMg
YWJvdmUiKTsKKyAgZGVidWcoIiIpOworCisgIGRlYnVnKCJUaGlzIHRlc3QgY2hlY2tzIHRoYXQg
ZHJhd0ltYWdlIGFuZCByZWFkUGl4ZWxzIGFyZSBub3QgZWZmZWN0ZWQgYnkgZ2wuUGl4ZWxzdG9y
ZWkoZ2wuUEFDS19BTElHTk1FTlQpIGFuZCB2aXNhIHZlcnNhIik7CisgIGRlYnVnKCIiKTsKKwor
ICB2YXIgY2FudmFzM2QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZXhhbXBsZSIpOworICBn
bCA9IGluaXRXZWJHTCgiZXhhbXBsZSIsICJ2c2hhZGVyIiwgImZzaGFkZXIiLCBbICJ2UG9zaXRp
b24iXSwgWyAwLCAwLCAwLCAxIF0sIDEpOworCisgIHZhciB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVh
dGVCdWZmZXIoKTsKKyAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZlcnRleE9iamVj
dCk7CisgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFsg
MCwwLjUsMCwgLTAuNSwtMC41LDAsIDAuNSwtMC41LDAgXSksIGdsLlNUQVRJQ19EUkFXKTsKKyAg
Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMCk7CisgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIo
MCwgMywgZ2wuRkxPQVQsIGZhbHNlLCAwLCAwKTsKKworICBnbC5jbGVhcihnbC5DT0xPUl9CVUZG
RVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7CisgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5H
TEVTLCAwLCAzKTsKKworCisgIGZ1bmN0aW9uIGNoZWNrRGF0YShidWYsIG5hbWUpIHsKKyAgICAv
LyBUZXN0IHNldmVyYWwgbG9jYXRpb25zCisgICAgLy8gRmlyc3QgbGluZSBzaG91bGQgYmUgYWxs
IGJsYWNrCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKSB7CisgICAgICBpZiAoYnVm
W2kqNF0gIT0gMCB8fCBidWZbaSo0KzFdICE9IDAgfHwgYnVmW2kqNCsyXSAhPSAwIHx8IGJ1Zltp
KjQrM10gIT0gMjU1KSB7CisgICAgICAgIGZhaWwoaSwgMCwgbmFtZSwgYnVmLCAiKDAsMCwwLDI1
NSkiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKworICAgIC8vIExpbmUgMjUg
c2hvdWxkIGJlIHJlZCBmb3IgYXQgbGVhc3QgNiByZWQgcGl4ZWxzIHN0YXJ0aW5nIDIyIHBpeGVs
cyBpbgorICAgIHZhciBvZmZzZXQgPSAoMjUqNTArMjIpICogNDsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDY7ICsraSkgeworICAgICAgaWYgKGJ1ZltvZmZzZXQraSo0XSAhPSAyNTUgfHwgYnVm
W29mZnNldCtpKjQrMV0gIT0gMCB8fCBidWZbb2Zmc2V0K2kqNCsyXSAhPSAwIHx8IGJ1ZltvZmZz
ZXQraSo0KzNdICE9IDI1NSkgeworICAgICAgICBmYWlsKDIyICsgaSwgMjUsIG5hbWUsIGJ1Ziwg
IigyNTUsMCwwLDI1NSkiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKworICAg
IC8vIExhc3QgbGluZSBzaG91bGQgYmUgYWxsIGJsYWNrCisgICAgb2Zmc2V0ID0gKDQ5KjUwKSAq
IDQ7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKSB7CisgICAgICBpZiAoYnVmW29m
ZnNldCtpKjRdICE9IDAgfHwgYnVmW29mZnNldCtpKjQrMV0gIT0gMCB8fCBidWZbb2Zmc2V0K2kq
NCsyXSAhPSAwIHx8IGJ1ZltvZmZzZXQraSo0KzNdICE9IDI1NSkgeworICAgICAgICBmYWlsKGks
IDQ5LCBuYW1lLCBidWYsICIoMCwwLDAsMjU1KSIpOworICAgICAgICByZXR1cm47CisgICAgICB9
CisgICAgfQorCisgICAgcGFzcyhuYW1lKTsKKyAgfQorCisgIGZ1bmN0aW9uIGNoZWNrQ29sb3Jz
KCkgeworICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheSg1MCAqIDUwICogNCk7CisgICAgZ2wu
cmVhZFBpeGVscygwLCAwLCA1MCwgNTAsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7
CisgICAgY2hlY2tEYXRhKGJ1ZiwgIjNkIGNvbnRleHQiKTsKKyAgICB2YXIgaW1nRGF0YSA9IGN0
eDJkLmdldEltYWdlRGF0YSgwLCAwLCA1MCwgNTApOworICAgIGNoZWNrRGF0YShpbWdEYXRhLmRh
dGEsICIyZCBjb250ZXh0Iik7CisgIH0KKworICB2YXIgdGFibGUgPSBbMSwgMiwgNCwgOF07Cisg
IGZvciAodmFyIGlpID0gMDsgaWkgPCB0YWJsZS5sZW5ndGg7ICsraWkpIHsKKyAgICBnbC5waXhl
bFN0b3JlaShnbC5QQUNLX0FMSUdOTUVOVCwgdGFibGVbaWldKTsKKyAgICBjdHgyZCA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCIyZDAiICsgaWkpLmdldENvbnRleHQoIjJkIik7CisgICAgY3R4
MmQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2NvcHknOworICAgIGN0eDJkLmRyYXdJbWFn
ZShjYW52YXMzZCwgMCwgMCk7CisgICAgY2hlY2tDb2xvcnMoKTsKKyAgICBhc3NlcnRNc2coZ2wu
Z2V0UGFyYW1ldGVyKGdsLlBBQ0tfQUxJR05NRU5UKSA9PSB0YWJsZVtpaV0sCisgICAgICAgICJQ
QUNLX0FMSUdOTUVOVCBpcyAiICsgdGFibGVbaWldKTsKKyAgfQorfQorCitpbml0KCk7CitzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1s
Pgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61449</attachid>
            <date>2010-07-13 18:18:19 -0700</date>
            <delta_ts>2010-07-13 18:42:56 -0700</delta_ts>
            <desc>revised patch: fix a ChangeLog issue</desc>
            <filename>canvas.patch</filename>
            <type>text/plain</type>
            <size>31705</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzI3NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDctMTMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFV
UkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICBUZXN0czogZmFzdC9jYW52YXMvd2ViZ2wvY2Fu
dmFzLXRlc3QuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxz
dG9yZWkuaHRtbAorCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKTogUGFpbnQgdGhlIFdl
YkdMIHJlbmRlcmluZyByZXN1bHRzIHRvIGNhbnZhcyBpZiBpdCdzIDNkLgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZSk6IFBhaW50IHRoZSBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyB0byBjYW52YXMgaWYgaXQncyAzZCBiZWZvcmUgZHJhd2luZy4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQpOiBNYXJr
IGl0IGFsd2F5cyBmb3IgY2FudmFzMmQuZHJhd0ltYWdlIHB1cnBvc2UuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KTogUGFpbnQgdGhlIFdlYkdMIHJlbmRlcmluZyByZXN1bHRzIHRvIGNhbnZhcyBpZiBpdCdzIGRp
cnR5LgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBEZWNs
YXJlIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDogRGVjbGFyZSBwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcygpICYgcGFpbnRUb0NhbnZhcygpLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMpOiBQYWludCB0aGUgcmVuZGVyZWQgaW1hZ2UgcGl4
ZWxzIHRvIHRoZSBjYW52YXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKTogSW1wbGVtZW50IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
YmVnaW5QYWludCk6IEp1c3QgY2FsbCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyk6IEltcGxlbWVudCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgorCiAyMDEwLTA3
LTEzICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lv
biA2MzI2OSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyNyw2ICszMjcsMTEgQEAgU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojp0b0Rh
dGFVUkwoY29ucwogCiAgICAgU3RyaW5nIGxvd2VyY2FzZU1pbWVUeXBlID0gbWltZVR5cGUubG93
ZXIoKTsKIAorICAgIGlmIChpczNEKCkpIHsKKyAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
KiBjb250ZXh0M2QgPSByZWludGVycHJldF9jYXN0PFdlYkdMUmVuZGVyaW5nQ29udGV4dCo+KHJl
bmRlcmluZ0NvbnRleHQoKSk7CisgICAgICAgIGNvbnRleHQzZC0+cGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoKTsKKyAgICB9CisKICAgICAvLyBGSVhNRTogTWFrZSBpc1N1cHBvcnRlZElt
YWdlTUlNRVR5cGVGb3JFbmNvZGluZyB0aHJlYWRzYWZlICh0byBhbGxvdyB0aGlzIG1ldGhvZCB0
byBiZSB1c2VkIG9uIGEgd29ya2VyIHRocmVhZCkuCiAgICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgp
IHx8ICFNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGlu
Zyhsb3dlcmNhc2VNaW1lVHlwZSkpCiAgICAgICAgIHJldHVybiBidWZmZXIoKS0+dG9EYXRhVVJM
KCJpbWFnZS9wbmciKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRC5jcHAJKHJldmlzaW9uIDYzMjY5KQorKysgV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2
ICs2MywxMCBAQAogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVW51c2Vk
UGFyYW0uaD4KIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmgiCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtMTEyNiw2ICsxMTMwLDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpkcmF3SW1hZ2UKICAgICBpZiAoIXNvdXJjZUNhbnZhcy0+b3JpZ2luQ2xlYW4oKSkK
ICAgICAgICAgY2FudmFzKCktPnNldE9yaWdpblRhaW50ZWQoKTsKIAorI2lmIEVOQUJMRSgzRF9D
QU5WQVMpCisgICAgaWYgKHNvdXJjZUNhbnZhcy0+aXMzRCgpKSB7CisgICAgICAgIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dDNkID0gcmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqPihzb3VyY2VDYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSk7CisgICAgICAgIGNv
bnRleHQzZC0+cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICB9CisjZW5kaWYK
KwogICAgIGMtPmRyYXdJbWFnZShidWZmZXItPmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRl
c3RSZWN0LCBzb3VyY2VSZWN0LCBzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKTsKICAgICB3aWxs
RHJhdyhkZXN0UmVjdCk7IC8vIFRoaXMgY2FsbCBjb21lcyBhZnRlciBkcmF3SW1hZ2UsIHNpbmNl
IHRoZSBidWZmZXIgd2UgZHJhdyBpbnRvIG1heSBiZSBvdXIgb3duLCBhbmQgd2UgbmVlZCB0byBt
YWtlIHN1cmUgaXQgaXMgZGlydHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTog
QXJndWFibHkgd2lsbERyYXcgc2hvdWxkIGJlY29tZSBkaWREcmF3IGFuZCBvY2N1ciBhZnRlciBk
cmF3aW5nIGNhbGxzIGFuZCBub3QgYmVmb3JlIHRoZW0gdG8gYXZvaWQgcHJvYmxlbXMgbGlrZSB0
aGlzLgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAkocmV2aXNpb24gNjMyNjkpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSwxNyArMTQxLDIzIEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dEMKICAgICBSZW5kZXJCb3gqIHJlbmRl
ckJveCA9IGNhbnZhcygpLT5yZW5kZXJCb3goKTsKICAgICBpZiAocmVuZGVyQm94ICYmIHJlbmRl
ckJveC0+aGFzTGF5ZXIoKSAmJiByZW5kZXJCb3gtPmxheWVyKCktPmhhc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmcoKSkKICAgICAgICAgcmVuZGVyQm94LT5sYXllcigpLT5yZW5kZXJlckNvbnRlbnRD
aGFuZ2VkKCk7Ci0gICAgZWxzZSB7CiAjZW5kaWYKLSAgICAgICAgaWYgKCFtX21hcmtlZENhbnZh
c0RpcnR5KSB7Ci0gICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNhbnZhcydzIGltYWdlIGJ1
ZmZlciBpcyBhbGxvY2F0ZWQuCi0gICAgICAgICAgICBjYW52YXMoKS0+YnVmZmVyKCk7Ci0gICAg
ICAgICAgICBjYW52YXMoKS0+d2lsbERyYXcoRmxvYXRSZWN0KDAsIDAsIGNhbnZhcygpLT53aWR0
aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIG1fbWFya2VkQ2FudmFzRGly
dHkgPSB0cnVlOwotICAgICAgICB9Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQor
ICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSkgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhl
IGNhbnZhcydzIGltYWdlIGJ1ZmZlciBpcyBhbGxvY2F0ZWQuCisgICAgICAgIGNhbnZhcygpLT5i
dWZmZXIoKTsKKyAgICAgICAgY2FudmFzKCktPndpbGxEcmF3KEZsb2F0UmVjdCgwLCAwLCBjYW52
YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7CisgICAgICAgIG1fbWFya2VkQ2Fu
dmFzRGlydHkgPSB0cnVlOwogICAgIH0KLSNlbmRpZgorfQorCitib29sIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQoreworICAgIGlmIChtX21h
cmtlZENhbnZhc0RpcnR5KSB7CisgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsK
KyAgICAgICAgbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9p
ZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OmJlZ2luUGFpbnQoKQpJbmRleDogV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA2MzI2OSkKKysrIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTMwNiw2ICszMDYsMTAgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgIAogICAgICAg
ICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAorICAgICAgICAvLyBSZXR1
cm4gdmFsdWUgdHJ1ZSBpbmRpY2F0ZXMgY2FudmFzIGlzIHVwZGF0ZWQgZHVyaW5nIHRoZSBjYWxs
LAorICAgICAgICAvLyBmYWxzZSBpbmRpY2F0ZXMgbm8gdXBkYXRlcy4KKyAgICAgICAgYm9vbCBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworCiAgICAgICAgIC8vIEhlbHBlcnMgZm9y
IG5vdGlmaWNhdGlvbiBhYm91dCBwYWludCBldmVudHMuCiAgICAgICAgIHZvaWQgYmVnaW5QYWlu
dCgpOwogICAgICAgICB2b2lkIGVuZFBhaW50KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA2MzI2OSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpA
QCAtNjgsNiArNjgsMTAgQEAgdHlwZWRlZiBpbnQgUGxhdGZvcm0zRE9iamVjdDsKIGNvbnN0IFBs
YXRmb3JtM0RPYmplY3QgTnVsbFBsYXRmb3JtM0RPYmplY3QgPSAwOwogI2VuZGlmCiAKKyNpZiBQ
TEFURk9STShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CisjZW5kaWYK
KwogbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFdlYkdMQWN0aXZlSW5mbzsKICAgICBj
bGFzcyBBcnJheUJ1ZmZlcjsKQEAgLTcxMCw3ICs3MTQsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2b2lkIHZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdp
ZHRoLCB1bnNpZ25lZCBsb25nIGhlaWdodCk7CiAKICAgICAgICAgdm9pZCByZXNoYXBlKGludCB3
aWR0aCwgaW50IGhlaWdodCk7Ci0gICAgICAgIAorCisjaWYgUExBVEZPUk0oQ0cpCisgICAgICAg
IHZvaWQgcGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgaW50
IGltYWdlV2lkdGgsIGludCBpbWFnZUhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IGludCBjYW52YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdodCwgQ0dDb250ZXh0UmVmIGNvbnRleHQp
OworI2VuZGlmCisKKyAgICAgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpOworCiAgICAgICAgIC8vIEhlbHBlcnMgZm9y
IG5vdGlmaWNhdGlvbiBhYm91dCBwYWludCBldmVudHMKICAgICAgICAgdm9pZCBiZWdpblBhaW50
KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7CiAgICAgICAgIHZvaWQgZW5kUGFpbnQo
KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RD
Ry5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHQzRENHLmNwcAkocmV2aXNpb24gNjMyNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2
ICszNiw4IEBACiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgogI2luY2x1ZGUg
PENvcmVHcmFwaGljcy9DR0ltYWdlLmg+CiAKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VE
YXRhKEltYWdlKiBpbWFnZSwKQEAgLTEwNCw2ICsxMDYsNDEgQEAgYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0SW1hZ2VEYXRhKEltYQogICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlw
ZSwgbmVlZGVkQWxwaGFPcCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7CiB9CiAKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhl
bHMsIGludCBpbWFnZVdpZHRoLCBpbnQgaW1hZ2VIZWlnaHQsIGludCBjYW52YXNXaWR0aCwgaW50
IGNhbnZhc0hlaWdodCwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgaWYgKCFpbWFnZVBp
eGVscyB8fCBpbWFnZVdpZHRoIDw9IDAgfHwgaW1hZ2VIZWlnaHQgPD0gMCB8fCBjYW52YXNXaWR0
aCA8PSAwIHx8IGNhbnZhc0hlaWdodCA8PSAwIHx8ICFjb250ZXh0KQorICAgICAgICByZXR1cm47
CisgICAgaW50IHJvd0J5dGVzID0gaW1hZ2VXaWR0aCAqIDQ7CisgICAgUmV0YWluUHRyPENHRGF0
YVByb3ZpZGVyUmVmPiBkYXRhUHJvdmlkZXIgPSBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRh
KDAsIGltYWdlUGl4ZWxzLCByb3dCeXRlcyAqIGltYWdlSGVpZ2h0LCAwKTsKKyAgICBSZXRhaW5Q
dHI8Q0dDb2xvclNwYWNlUmVmPiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNl
UkdCKCk7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBDR0ltYWdlQ3JlYXRl
KGltYWdlV2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGltYWdlSGVpZ2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcm93Qnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbG9yU3BhY2UuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3Qg
fCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFQcm92aWRlci5nZXQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR1JlbmRlcmluZ0ludGVudERlZmF1
bHQpOworICAgIC8vIENTUyBzdHlsaW5nIG1heSBjYXVzZSB0aGUgY2FudmFzJ3MgY29udGVudCB0
byBiZSByZXNpemVkIG9uCisgICAgLy8gdGhlIHBhZ2UuIEdvIGJhY2sgdG8gdGhlIENhbnZhcyB0
byBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0CisgICAgLy8gd2lkdGggYW5kIGhlaWdodCB0byBkcmF3
LgorICAgIENHUmVjdCByZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjYW52YXNXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fu
dmFzSGVpZ2h0KTsKKyAgICAvLyBXZSB3YW50IHRvIGNvbXBsZXRlbHkgb3ZlcndyaXRlIHRoZSBw
cmV2aW91cyBmcmFtZSdzCisgICAgLy8gcmVuZGVyaW5nIHJlc3VsdHMuCisgICAgQ0dDb250ZXh0
U2F2ZUdTdGF0ZShjb250ZXh0KTsKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAga0NHQmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250
ZXh0U2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrQ0dJbnRlcnBvbGF0aW9uTm9uZSk7CisgICAgQ0dDb250ZXh0RHJh
d0ltYWdlKGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgIHJlY3QsIGNnSW1hZ2UuZ2V0
KCkpOworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Cit9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3Jh
cGhpY3NDb250ZXh0M0RNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHJldmlzaW9uIDYzMjY5KQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHdvcmtp
bmcgY29weSkKQEAgLTM5LDEwICszOSwxMyBAQAogI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCiAj
aW5jbHVkZSAiRmxvYXQzMkFycmF5LmgiCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50
LmgiCiAjaW5jbHVkZSAiSW50MzJBcnJheS5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXIuaCIKICNp
bmNsdWRlICJXZWJHTFByb2dyYW0uaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgor
I2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkdMU2hhZGVy
LmgiCiAjaW5jbHVkZSAiV2ViR0xUZXh0dXJlLmgiCiAjaW5jbHVkZSAiVWludDhBcnJheS5oIgpA
QCAtMjM3LDYgKzI0MCw1NCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1
cnJlCiAgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKIH0KIAordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMg
PSBjb250ZXh0LT5jYW52YXMoKTsKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52
YXMtPmJ1ZmZlcigpOworCisgICAgaW50IHJvd0J5dGVzID0gbV9jdXJyZW50V2lkdGggKiA0Owor
ICAgIGludCB0b3RhbEJ5dGVzID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7CisKKyAgICBP
d25BcnJheVB0cjx1bnNpZ25lZCBjaGFyPiBwaXhlbHMobmV3IHVuc2lnbmVkIGNoYXJbdG90YWxC
eXRlc10pOworICAgIGlmICghcGl4ZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0xTZXRD
dXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopOworCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTzsK
KyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZl
ckVYVChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAg
IDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsK
KyAgICAgICAgOjpnbEJsaXRGcmFtZWJ1ZmZlckVYVCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9j
dXJyZW50SGVpZ2h0LCAwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9D
T0xPUl9CVUZGRVJfQklULCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVy
RVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9
IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsK
KyAgICAgICAgICAgIG11c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBHTGludCBwYWNrQWxpZ25tZW50ID0gNDsKKyAgICBib29sIG11c3RSZXN0b3Jl
UGFja0FsaWdubWVudCA9IGZhbHNlOworICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdO
TUVOVCwgJnBhY2tBbGlnbm1lbnQpOworICAgIGlmIChwYWNrQWxpZ25tZW50ID4gNCkgeworICAg
ICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIDQpOworICAgICAgICBtdXN0
UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSB0cnVlOworICAgIH0KKworICAgIDo6Z2xSZWFkUGl4ZWxz
KDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lH
TkVEX0lOVF84XzhfOF84X1JFViwgcGl4ZWxzLmdldCgpKTsKKworICAgIGlmIChtdXN0UmVzdG9y
ZVBhY2tBbGlnbm1lbnQpCisgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVO
VCwgcGFja0FsaWdubWVudCk7CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKwor
ICAgIHBhaW50VG9DYW52YXMocGl4ZWxzLmdldCgpLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50
SGVpZ2h0LAorICAgICAgICAgICAgICAgICAgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdo
dCgpLCBpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQogewogICAgIFVOVVNFRF9QQVJBTShjb250ZXh0KTsKSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkocmV2
aXNpb24gNjMyNjkpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29u
dGV4dDNEUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MjEsNiArNTIxLDE1IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmUKIAogdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7CisgICAgcGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZW5kUGFpbnQoKQoreworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CiAg
ICAgbV9pbnRlcm5hbC0+bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBIVE1MQ2FudmFz
RWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CiAgICAgSW1hZ2VCdWZmZXIqIGlt
YWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKQEAgLTUyOCwxMCArNTM3LDYgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6YmVnaW5QYWludChXZWJHTAogICAgIHBhaW50KHBhaW50ZXIsIFFS
ZWN0KFFQb2ludCgwLCAwKSwgUVNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkp
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQoKQotewotfQotCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3Qm
IHJlY3QpIGNvbnN0CiB7CiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDcs
IDApCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMjczKQorKysgV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA3LTEzICBa
aGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIHJlc3VsdHMgbXVzdCBiZSBtYWRl
IGF2YWlsYWJsZSB0byBDYW52YXMudG9EYXRhVVJMIGFuZCAyRCBkcmF3SW1hZ2UKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NzE5CisKKyAgICAgICAg
KiBzcmMvR3JhcGhpY3NDb250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOiBJbXBsZW1l
bnQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKS4KKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpbnQpOiBKdXN0IHVzZSBwYWludFJlbmRl
cmluZ1Jlc3VsdHNUb0NhbnZhcygpLgorCiAyMDEwLTA3LTEzICBDaHJpcyBHdWlsbG9yeSAgPGNo
cmlzLmd1aWxsb3J5QGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2
aW4uCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcAkocmV2
aXNpb24gNjMyNjkpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL0dyYXBoaWNzQ29udGV4dDNELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDYgKzExMiw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
cmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCisgICAgdm9pZCBwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0NhbnZhcyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpOwogICAgIHZv
aWQgYmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpOwogICAgIHZvaWQg
ZW5kUGFpbnQoKTsKIApAQCAtMzk5LDcgKzQwMCw3IEBAIFdlYkdMTGF5ZXJDaHJvbWl1bSogR3Jh
cGhpY3NDb250ZXh0M0RJbnQKIH0KICNlbmRpZgogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQordm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQq
IGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZl
ciA9IGNhbnZhcy0+YnVmZmVyKCk7CkBAIC00NDksNDQgKzQ1MCwyMCBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpCiAgICAgICAgIGNhbnZhcy5kcmF3Qml0bWFwUmVj
dChtX3Jlc2l6aW5nQml0bWFwLCAwLCBkc3QpOwogICAgIH0KICNlbGlmIFBMQVRGT1JNKENHKQot
ICAgIGlmIChtX3JlbmRlck91dHB1dCkgewotICAgICAgICBpbnQgcm93Qnl0ZXMgPSBtX2ltcGwt
PndpZHRoKCkgKiA0OwotICAgICAgICBDR0RhdGFQcm92aWRlclJlZiBkYXRhUHJvdmlkZXIgPSBD
R0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIG1fcmVuZGVyT3V0cHV0LCByb3dCeXRlcyAq
IG1faW1wbC0+aGVpZ2h0KCksIDApOwotICAgICAgICBDR0NvbG9yU3BhY2VSZWYgY29sb3JTcGFj
ZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOwotICAgICAgICBDR0ltYWdlUmVmIGNn
SW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKG1faW1wbC0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX2ltcGwtPmhlaWdodCgpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMzIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcm93Qnl0ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29sb3JTcGFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBrQ0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9y
ZGVyMzJIb3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRh
dGFQcm92aWRlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR1JlbmRlcmluZ0ludGVu
dERlZmF1bHQpOwotICAgICAgICAvLyBDU1Mgc3R5bGluZyBtYXkgY2F1c2UgdGhlIGNhbnZhcydz
IGNvbnRlbnQgdG8gYmUgcmVzaXplZCBvbgotICAgICAgICAvLyB0aGUgcGFnZS4gR28gYmFjayB0
byB0aGUgQ2FudmFzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QKLSAgICAgICAgLy8gd2lkdGgg
YW5kIGhlaWdodCB0byBkcmF3LgotICAgICAgICBDR1JlY3QgcmVjdCA9IENHUmVjdE1ha2UoMCwg
MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmNhbnZhcygpLT53
aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+Y2FudmFz
KCktPmhlaWdodCgpKTsKLSAgICAgICAgLy8gV2Ugd2FudCB0byBjb21wbGV0ZWx5IG92ZXJ3cml0
ZSB0aGUgcHJldmlvdXMgZnJhbWUncwotICAgICAgICAvLyByZW5kZXJpbmcgcmVzdWx0cy4KLSAg
ICAgICAgQ0dDb250ZXh0U2V0QmxlbmRNb2RlKGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHQmxlbmRNb2Rl
Q29weSk7Ci0gICAgICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5KGltYWdlQnVm
ZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBrQ0dJbnRlcnBvbGF0aW9uTm9uZSk7Ci0gICAgICAgIENHQ29u
dGV4dERyYXdJbWFnZShpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QsIGNnSW1hZ2UpOwotICAgICAgICBDR0lt
YWdlUmVsZWFzZShjZ0ltYWdlKTsKLSAgICAgICAgQ0dDb2xvclNwYWNlUmVsZWFzZShjb2xvclNw
YWNlKTsKLSAgICAgICAgQ0dEYXRhUHJvdmlkZXJSZWxlYXNlKGRhdGFQcm92aWRlcik7Ci0gICAg
fQorICAgIGlmIChtX3JlbmRlck91dHB1dCkKKyAgICAgICAgY29udGV4dC0+Z3JhcGhpY3NDb250
ZXh0M0QoKS0+cGFpbnRUb0NhbnZhcyhtX3JlbmRlck91dHB1dCwgbV9pbXBsLT53aWR0aCgpLCBt
X2ltcGwtPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUJ1ZmZlci0+
Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7CiAjZWxzZQogI2Vycm9yIE11c3QgcG9ydCB0
byB5b3VyIHBsYXRmb3JtCiAjZW5kaWYKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBw
YWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhjb250ZXh0KTsKK30KKwogdm9pZCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjplbmRQYWludCgpCiB7CiB9CkBAIC0xMzI1LDYgKzEzMDIsNyBA
QCBERUxFR0FURV9UT19JTlRFUk5BTF82KHZlcnRleEF0dHJpYlBvaW50CiAKIERFTEVHQVRFX1RP
X0lOVEVSTkFMXzQodmlld3BvcnQsIGxvbmcsIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVk
IGxvbmcpCiAKK0RFTEVHQVRFX1RPX0lOVEVSTkFMXzEocGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCopCiBERUxFR0FURV9UT19JTlRFUk5BTF8xKGJl
Z2luUGFpbnQsIFdlYkdMUmVuZGVyaW5nQ29udGV4dCopCiBERUxFR0FURV9UT19JTlRFUk5BTChl
bmRQYWludCkKIApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNjMyNzMpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wNy0xMyAgWmhlbnlh
byBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFdlYkdMIHJlbmRlcmluZyByZXN1bHRzIG11c3QgYmUgbWFkZSBhdmFp
bGFibGUgdG8gQ2FudmFzLnRvRGF0YVVSTCBhbmQgMkQgZHJhd0ltYWdlCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDcxOQorCisgICAgICAgICogZmFz
dC9jYW52YXMvd2ViZ2wvY2FudmFzLXRlc3QtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLmh0bWw6IEFkZGVkLgorCiAy
MDEwLTA3LTEzICBPbGl2ZXIgSHVudCAgPG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgR2F2aW4gQmFycmFjbG91Z2guCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9jYW52YXMtdGVzdC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFzLXRlc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFzLXRlc3QtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACitUaGlzIHRlc3QgZW5zdXJlcyBXZWJH
TCBpbXBsZW1lbnRhdGlvbnMgaW50ZXJhY3QgY29ycmVjdGx5IHdpdGggdGhlIGNhbnZhcyB0YWcu
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitDYW52YXMuZ2V0Q29udGV4dAorUEFT
UyBjb250ZXh0IGV4aXN0cworCitDaGVja2luZyBjYW52YXMgYW5kIFdlYkdMIGludGVyYWN0aW9u
CitQQVNTIGNhbnZhcy53aWR0aCBpcyAzMDAKK1BBU1MgY2FudmFzLmhlaWdodCBpcyAxNTAKK1BB
U1MgcGl4ZWxzIGFyZSAwLDAsMCwwCitQQVNTIGdldFZpZXdwb3J0KCkgaXMgIjAsMCwzMDAsMTUw
IgorCitjaGFuZ2UgZGlzcGxheSBzaXplIG9mIGNhbnZhcyBhbmQgc2VlIHRoYXQgdmlld3BvcnQg
ZG9lcyBub3QgY2hhbmdlCitQQVNTIGdldFZpZXdwb3J0KCkgaXMgIjAsMCwzMDAsMTUwIgorUEFT
UyBjYW52YXMud2lkdGggaXMgMzAwCitQQVNTIGNhbnZhcy5oZWlnaHQgaXMgMTUwCisKK2NoYW5n
ZSB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNhbnZhcyBhbmQgc2VlIHRoYXQgdGhlIHZpZXdwb3J0
IGRvZXMgbm90IGNoYW5nZQorUEFTUyBwaXhlbHMgYXJlIDY0LDEyOCwxOTIsMjU1CitQQVNTIGds
LmNsZWFyQ29sb3Igc2hvdWxkIG5vdCBjaGFuZ2UgYWZ0ZXIgY2FudmFzIHJlc2l6ZQorUEFTUyBn
bC5jb2xvck1hc2sgc2hvdWxkIG5vdCBjaGFuZ2UgYWZ0ZXIgY2FudmFzIHJlc2l6ZQorUEFTUyBn
ZXRWaWV3cG9ydCgpIGlzICIwLDAsMzAwLDE1MCIKK1BBU1MgcGl4ZWxzIGFyZSAwLDAsMCwwCisK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorIApJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFzLXRlc3QuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC5odG1sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFzLXRlc3Qu
aHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDMgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgICJodHRwOi8vd3d3
LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0dHAt
ZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Ij4K
Kzx0aXRsZT5XZWJHTCBDYW52YXMgQ29uZm9ybWFuY2UgVGVzdHM8L3RpdGxlPgorPGxpbmsgcmVs
PSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3Mi
Lz4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj48L3NjcmlwdD4KKzwv
aGVhZD4KKzxib2R5PgorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2PgorPGRpdiBpZD0iY29u
c29sZSI+PC9kaXY+Cis8Y2FudmFzIGlkPSJjYW52YXMiIHN0eWxlPSJ3aWR0aDogNTBweDsgaGVp
Z2h0OiA1MHB4OyI+IDwvY2FudmFzPgorPGNhbnZhcyBpZD0iY2FudmFzMmQiIHdpZHRoPSI0MCIg
aGVpZ2h0PSI0MCI+IDwvY2FudmFzPgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgeworICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVuY2Uo
IldlYktpdFdlYkdMRW5hYmxlZCIsICIxIik7CisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworfQorCitk
ZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGVuc3VyZXMgV2ViR0wgaW1wbGVtZW50YXRpb25zIGludGVy
YWN0IGNvcnJlY3RseSB3aXRoIHRoZSBjYW52YXMgdGFnLiIpOworCitkZWJ1ZygiIik7CitkZWJ1
ZygiQ2FudmFzLmdldENvbnRleHQiKTsKKwordmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjYW52YXMiKTsKK3ZhciBjYW52YXMyZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMyZCIpOwordmFyIGN0eDJkID0gY2FudmFzMmQuZ2V0Q29udGV4dCgiMmQiKTsKK3Zh
ciBnbCA9IG51bGw7Cit0cnkgeworICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50
YWwtd2ViZ2wiKTsKK30gY2F0Y2goZSkge30KK2lmICghZ2wpIHsKKyAgdHJ5IHsKKyAgICBnbCA9
IGNhbnZhcy5nZXRDb250ZXh0KCJ3ZWJraXQtM2QiKTsKKyAgfSBjYXRjaChlKSB7fQorfQoraWYg
KCFnbCkgeworICB0ZXN0RmFpbGVkKCJjb250ZXh0IGRvZXMgbm90IGV4aXN0Iik7Cit9IGVsc2Ug
eworICB0ZXN0UGFzc2VkKCJjb250ZXh0IGV4aXN0cyIpOworCisgIGRlYnVnKCIiKTsKKyAgZGVi
dWcoIkNoZWNraW5nIGNhbnZhcyBhbmQgV2ViR0wgaW50ZXJhY3Rpb24iKTsKKworICAvLyBDaGVj
ayB0aGF0IGEgY2FudmFzIHdpdGggbm8gd2lkdGggb3IgaGVpZ2h0IGlzIDMwMHgxNTAgcGl4ZWxz
CisgIHNob3VsZEJlKCdjYW52YXMud2lkdGgnLCAnMzAwJyk7CisgIHNob3VsZEJlKCdjYW52YXMu
aGVpZ2h0JywgJzE1MCcpOworCisgIC8vIENoZWNrIGdldCBhIDQgdmFsdWUgZ2wgcGFyYW1ldGVy
IGFzIGEgY3N2IHN0cmluZy4KKyAgZnVuY3Rpb24gZ2V0VmFsdWU0dihuYW1lKSB7CisgICAgdmFy
IHYgPSBnbC5nZXRQYXJhbWV0ZXIobmFtZSk7CisgICAgdmFyIHJlc3VsdCA9ICcnICsKKyAgICAg
ICAgdlswXSArICcsJyArCisgICAgICAgIHZbMV0gKyAnLCcgKworICAgICAgICB2WzJdICsgJywn
ICsKKyAgICAgICAgdlszXTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgZnVuY3Rpb24g
Z2V0Vmlld3BvcnQoKSB7CisgICAgcmV0dXJuIGdldFZhbHVlNHYoZ2wuVklFV1BPUlQpOworICB9
CisKKyAgZnVuY3Rpb24gZ2V0Q2xlYXJDb2xvcigpIHsKKyAgICByZXR1cm4gZ2V0VmFsdWU0dihn
bC5DT0xPUl9DTEVBUl9WQUxVRSk7CisgIH0KKworICBmdW5jdGlvbiBpc0Fib3V0RXF1YWwoYSwg
YikgeworICAgIHJldHVybiBNYXRoLmFicyhhIC0gYikgPCAwLjAxOworICB9CisKKyAgZnVuY3Rp
b24gaXNBYm91dEVxdWFsSW50KGEsIGIpIHsKKyAgICByZXR1cm4gTWF0aC5hYnMoYSAtIGIpIDwg
MzsKKyAgfQorCisgIGZ1bmN0aW9uIGNoZWNrQ2FudmFzQ29udGVudElzKHIzZCxnM2QsYjNkLGEz
ZCkgeworICAgIHZhciByMmQ7CisgICAgdmFyIGcyZDsKKyAgICB2YXIgYjJkOworICAgIHZhciBh
MmQ7CisKKyAgICBmdW5jdGlvbiBjaGVja1BpeGVsKHgsIHksIHIzZCxnM2QsYjNkLGEzZCkgewor
ICAgICAgdmFyIG9mZnNldCA9ICh5ICogNDAgKyB4KSAqIDQ7CisgICAgICByMmQgPSBpbWdEYXRh
LmRhdGFbb2Zmc2V0XTsKKyAgICAgIGcyZCA9IGltZ0RhdGEuZGF0YVtvZmZzZXQgKyAxXTsKKyAg
ICAgIGIyZCA9IGltZ0RhdGEuZGF0YVtvZmZzZXQgKyAyXTsKKyAgICAgIGEyZCA9IGltZ0RhdGEu
ZGF0YVtvZmZzZXQgKyAzXTsKKyAgICAgIC8vZGVidWcoJycgKyB4ICsgJywgJyArIHkgKyAiKCIg
KyBvZmZzZXQgKyAiKSA9ICIgKyByMmQgKyAiLCAiICsgZzJkICsgIiwgIiArIGIyZCArICIsICIg
KyBhMmQpOworICAgICAgcmV0dXJuIGlzQWJvdXRFcXVhbEludChyMmQsIHIzZCkgJiYKKyAgICAg
ICAgICAgICBpc0Fib3V0RXF1YWxJbnQoZzJkLCBnM2QpICYmCisgICAgICAgICAgICAgaXNBYm91
dEVxdWFsSW50KGIyZCwgYjNkKSAmJgorICAgICAgICAgICAgIGlzQWJvdXRFcXVhbEludChhMmQs
IGEzZCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gY2hlY2tQaXhlbHMocjNkLGczZCxiM2QsYTNk
KSB7CisgICAgICByZXR1cm4gY2hlY2tQaXhlbCgwLCAwLCByM2QsIGczZCwgYjNkLCBhM2QpICYm
CisgICAgICAgICAgICAgY2hlY2tQaXhlbCgwLCAzOSwgcjNkLCBnM2QsIGIzZCwgYTNkKSAmJgor
ICAgICAgICAgICAgIGNoZWNrUGl4ZWwoMzksIDAsIHIzZCwgZzNkLCBiM2QsIGEzZCkgJiYKKyAg
ICAgICAgICAgICBjaGVja1BpeGVsKDM5LCAzOSwgcjNkLCBnM2QsIGIzZCwgYTNkKTsKKyAgICB9
OworCisgICAgLy8gU2V0IHRvIGp1c3QgdGFrZSB0aGUgY29sb3IgZnJvbSB0aGUgM2QgY2FudmFz
CisgICAgY3R4MmQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uID0gJ2NvcHknOworCisgICAgLy8g
ZmlsbCAyZCBjYW52YXMgd2l0aCBvcmFuZ2UKKyAgICBjdHgyZC5maWxsU3R5bGUgPSAicmdiKDI1
NSwxOTIsMTI4KSI7CisgICAgY3R4MmQuZmlsbFJlY3QgKDAsIDAsIDQwLCA0MCk7CisKKyAgICAv
LyBnZXQgdGhlIGltYWdlIGRhdGEKKyAgICB2YXIgaW1nRGF0YSA9IGN0eDJkLmdldEltYWdlRGF0
YSgwLCAwLCA0MCwgNDApOworCisgICAgLy8gY2hlY2sgaXQgZ290IGNsZWFyZWQuCisgICAgaWYg
KCFjaGVja1BpeGVscygyNTUsIDE5MiwgMTI4LCAyNTUpKSB7CisgICAgICB0ZXN0RmFpbGVkKCJ1
bmFibGUgdG8gZmlsbCAyZCBjb250ZXh0LiIpOworICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIGRyYXcgM2QgY2FudmFzIG9uIHRvcC4KKyAgICBjdHgyZC5kcmF3SW1hZ2UoY2FudmFzLCAw
LCAwLCA0MCwgNDApOworCisgICAgLy8gZ2V0IHRoZSBpbWFnZSBkYXRhCisgICAgdmFyIGltZ0Rh
dGEgPSBjdHgyZC5nZXRJbWFnZURhdGEoMCwgMCwgNDAsIDQwKTsKKworICAgIC8vIENoZWNrIGl0
J3MgdGhlIGV4cGVjdGVkIGNvbG9yLgorICAgIGlmICghY2hlY2tQaXhlbHMocjNkLCBnM2QsIGIz
ZCwgYTNkKSkgeworICAgICAgdGVzdEZhaWxlZCgicGl4ZWxzIGFyZSAiICsgcjJkICsgIiwiICsg
ZzJkICsgIiwiICsgYjJkICsgIiwiICsgYTJkICsKKyAgICAgICAgICAgICAgICAgIiBleHBlY3Rl
ZCAiICsgcjNkICsgIiwiICsgZzNkICsgIiwiICsgYjNkICsgIiwiICsgYTNkKTsKKyAgICB9IGVs
c2UgeworICAgICAgdGVzdFBhc3NlZCgicGl4ZWxzIGFyZSAiICsgcjNkICsgIiwiICsgZzNkICsg
IiwiICsgYjNkICsgIiwiICsgYTNkKTsKKyAgICB9CisgIH0KKworICBjaGVja0NhbnZhc0NvbnRl
bnRJcygwLCAwLCAwLCAwKTsKKyAgc2hvdWxkQmUoJ2dldFZpZXdwb3J0KCknLCAnIjAsMCwzMDAs
MTUwIicpOworCisgIC8vIENoYW5nZSB0aGUgZGlzcGxheSBzaXplIG9mIHRoZSBjYW52YXMgYW5k
IGNoZWNrCisgIC8vIHRoZSB2aWV3cG9ydCBzaXplIGRvZXMgbm90IGNoYW5nZS4KKyAgZGVidWco
IiIpOworICBkZWJ1ZygiY2hhbmdlIGRpc3BsYXkgc2l6ZSBvZiBjYW52YXMgYW5kIHNlZSB0aGF0
IHZpZXdwb3J0IGRvZXMgbm90IGNoYW5nZSIpOworICBjYW52YXMuc3R5bGUud2lkdGggPSAiMTAw
cHgiOworICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gIjI1cHgiOworICB2YXIgaW50ZXJ2YWxJZDsK
KyAgaW50ZXJ2YWxJZCA9IHdpbmRvdy5zZXRJbnRlcnZhbChmdW5jdGlvbigpIHsKKyAgICBpZiAo
Y2FudmFzLmNsaWVudFdpZHRoID09IDEwMCAmJgorICAgICAgICBjYW52YXMuY2xpZW50SGVpZ2h0
ID09IDI1KSB7CisgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChpbnRlcnZhbElkKTsKKyAgICAg
IHNob3VsZEJlKCdnZXRWaWV3cG9ydCgpJywgJyIwLDAsMzAwLDE1MCInKTsKKyAgICAgIHNob3Vs
ZEJlKCdjYW52YXMud2lkdGgnLCAnMzAwJyk7CisgICAgICBzaG91bGRCZSgnY2FudmFzLmhlaWdo
dCcsICcxNTAnKTsKKworICAgICAgLy8gQ2hhbmdlIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgY2Fu
dmFzCisgICAgICAvLyBDaGVjayB0aGF0IHRoZSB2aWV3cG9ydCBkb2VzIG5vdCBjaGFuZ2UuCisg
ICAgICAvLyBDaGVjayB0aGF0IHRoZSBjbGVhciBjb2xvciBkb2VzIG5vdCBjaGFuZ2UuCisgICAg
ICAvLyBDaGVjayB0aGF0IHRoZSBjb2xvciBtYXNrIGRvZXMgbm90IGNoYW5nZS4KKyAgICAgIGRl
YnVnKCIiKTsKKyAgICAgIGRlYnVnKCJjaGFuZ2UgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBjYW52
YXMgYW5kIHNlZSB0aGF0IHRoZSB2aWV3cG9ydCBkb2VzIG5vdCBjaGFuZ2UiKTsKKyAgICAgIGds
LmNsZWFyQ29sb3IoMC4yNSwgMC41LCAwLjc1LCAxKTsKKyAgICAgIGdsLmNsZWFyKGdsLkNPTE9S
X0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTsKKyAgICAgIGNoZWNrQ2FudmFzQ29u
dGVudElzKDY0LCAxMjgsIDE5MiwgMjU1KTsKKyAgICAgIGdsLmNvbG9yTWFzaygwLDAsMCwwKTsK
KyAgICAgIGNhbnZhcy53aWR0aCA9IDQwMDsKKyAgICAgIGNhbnZhcy5oZWlnaHQgPSAxMDsKKwor
ICAgICAgdmFyIHYgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuQ09MT1JfQ0xFQVJfVkFMVUUpOworICAg
ICAgYXNzZXJ0TXNnKGlzQWJvdXRFcXVhbCh2WzBdLCAwLjI1KSAmJgorICAgICAgICAgICAgICAg
IGlzQWJvdXRFcXVhbCh2WzFdLCAwLjUpICYmCisgICAgICAgICAgICAgICAgaXNBYm91dEVxdWFs
KHZbMl0sIDAuNzUpICYmCisgICAgICAgICAgICAgICAgaXNBYm91dEVxdWFsKHZbM10sIDEpLAor
ICAgICAgICAgICAgICAgICJnbC5jbGVhckNvbG9yIHNob3VsZCBub3QgY2hhbmdlIGFmdGVyIGNh
bnZhcyByZXNpemUiKTsKKyAgICAgIHYgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuQ09MT1JfV1JJVEVN
QVNLKTsKKyAgICAgIGFzc2VydE1zZyhpc0Fib3V0RXF1YWwodlswXSwgMCkgJiYKKyAgICAgICAg
ICAgICAgICBpc0Fib3V0RXF1YWwodlsxXSwgMCkgJiYKKyAgICAgICAgICAgICAgICBpc0Fib3V0
RXF1YWwodlsyXSwgMCkgJiYKKyAgICAgICAgICAgICAgICBpc0Fib3V0RXF1YWwodlszXSwgMCks
CisgICAgICAgICAgICAgICAgImdsLmNvbG9yTWFzayBzaG91bGQgbm90IGNoYW5nZSBhZnRlciBj
YW52YXMgcmVzaXplIik7CisgICAgICBzaG91bGRCZSgnZ2V0Vmlld3BvcnQoKScsICciMCwwLDMw
MCwxNTAiJyk7CisgICAgICBjaGVja0NhbnZhc0NvbnRlbnRJcygwLCAwLCAwLCAwKTsKKworICAg
ICAgZGVidWcoIiIpOworICAgICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKworICAgICAg
dmFyIGVwaWxvZ3VlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7CisgICAgICBl
cGlsb2d1ZS5vbmxvYWQgPSBmaW5pc2g7CisgICAgICBlcGlsb2d1ZS5zcmMgPSAiLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI7CisgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKGVwaWxvZ3VlKTsKKyAgICB9CisgIH0sIDEwMDAvMzApOworfQorCitmdW5jdGlvbiBmaW5p
c2goKSB7CisgICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgICAgICBs
YXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgICAgfQorfQorCis8L3NjcmlwdD4K
KworPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
Z2wtcGl4ZWxzdG9yZWktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLWV4cGVjdGVk
LnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorICAgIAorVGhlcmUgc2hvdWxkIGJl
IDUgcmVkIHRyaWFuZ2xlcyBvbiA1IGJsYWNrIHNxdWFyZXMgYWJvdmUKKworVGhpcyB0ZXN0IGNo
ZWNrcyB0aGF0IGRyYXdJbWFnZSBhbmQgcmVhZFBpeGVscyBhcmUgbm90IGVmZmVjdGVkIGJ5IGds
LlBpeGVsc3RvcmVpKGdsLlBBQ0tfQUxJR05NRU5UKSBhbmQgdmlzYSB2ZXJzYQorCitQQVNTIGRy
YXdpbmcgaXMgY29ycmVjdCBpbiAzZCBjb250ZXh0CitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBp
biAyZCBjb250ZXh0CitQQVNTIFBBQ0tfQUxJR05NRU5UIGlzIDEKK1BBU1MgZHJhd2luZyBpcyBj
b3JyZWN0IGluIDNkIGNvbnRleHQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDJkIGNvbnRl
eHQKK1BBU1MgUEFDS19BTElHTk1FTlQgaXMgMgorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4g
M2QgY29udGV4dAorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gMmQgY29udGV4dAorUEFTUyBQ
QUNLX0FMSUdOTUVOVCBpcyA0CitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAzZCBjb250ZXh0
CitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAyZCBjb250ZXh0CitQQVNTIFBBQ0tfQUxJR05N
RU5UIGlzIDgKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVU
RQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVs
c3RvcmVpLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9nbC1waXhlbHN0b3JlaS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyMSBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9F
TiIKKyAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxo
ZWFkPgorPHRpdGxlPldlYkdMIHBpeGVsU3RvcmVpIFRlc3Q8L3RpdGxlPgorPGxpbmsgcmVsPSJz
dHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy91dGlsczNkLmpzIj4gPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPiA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5
PgorPGNhbnZhcyBpZD0iZXhhbXBsZSIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4K
KzxjYW52YXMgaWQ9IjJkMDAiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+Cis8Y2Fu
dmFzIGlkPSIyZDAxIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorPGNhbnZhcyBp
ZD0iMmQwMiIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxjYW52YXMgaWQ9IjJk
MDMiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlv
biI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxzY3JpcHQgaWQ9InZzaGFkZXIi
IHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4Ij4KK2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsKK3Zv
aWQgbWFpbigpIHsKKyAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247Cit9Cis8L3NjcmlwdD4KKwor
PHNjcmlwdCBpZD0iZnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+Cit2b2lkIG1h
aW4oKSB7CisgIGdsX0ZyYWdDb2xvciA9IHZlYzQoMS4wLDAuMCwwLjAsMS4wKTsKK30KKzwvc2Ny
aXB0PgorCis8c2NyaXB0PgorZnVuY3Rpb24gZmFpbCh4LHksIG5hbWUsIGJ1Ziwgc2hvdWxkQmUp
IHsKKyAgdmFyIGkgPSAoeSo1MCt4KSAqIDQ7CisgIHZhciByZWFzb24gPSAicGl4ZWwgaW4gIitu
YW1lKyIgYXQgKCIreCsiLCIreSsiKSBpcyAoIitidWZbaV0rIiwiK2J1ZltpKzFdKyIsIitidWZb
aSsyXSsiLCIrYnVmW2krM10rIiksIHNob3VsZCBiZSAiK3Nob3VsZEJlOworICBhc3NlcnRNc2co
ZmFsc2UsIHJlYXNvbik7Cit9CisKK2Z1bmN0aW9uIHBhc3MobmFtZSkgeworICBhc3NlcnRNc2co
dHJ1ZSwgImRyYXdpbmcgaXMgY29ycmVjdCBpbiAiICsgbmFtZSk7Cit9CisKK2Z1bmN0aW9uIGlu
aXQoKSB7CisgIGRlYnVnKCJUaGVyZSBzaG91bGQgYmUgNSByZWQgdHJpYW5nbGVzIG9uIDUgYmxh
Y2sgc3F1YXJlcyBhYm92ZSIpOworICBkZWJ1ZygiIik7CisKKyAgZGVidWcoIlRoaXMgdGVzdCBj
aGVja3MgdGhhdCBkcmF3SW1hZ2UgYW5kIHJlYWRQaXhlbHMgYXJlIG5vdCBlZmZlY3RlZCBieSBn
bC5QaXhlbHN0b3JlaShnbC5QQUNLX0FMSUdOTUVOVCkgYW5kIHZpc2EgdmVyc2EiKTsKKyAgZGVi
dWcoIiIpOworCisgIHZhciBjYW52YXMzZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJleGFt
cGxlIik7CisgIGdsID0gaW5pdFdlYkdMKCJleGFtcGxlIiwgInZzaGFkZXIiLCAiZnNoYWRlciIs
IFsgInZQb3NpdGlvbiJdLCBbIDAsIDAsIDAsIDEgXSwgMSk7CisKKyAgdmFyIHZlcnRleE9iamVj
dCA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwg
dmVydGV4T2JqZWN0KTsKKyAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9h
dDMyQXJyYXkoWyAwLDAuNSwwLCAtMC41LC0wLjUsMCwgMC41LC0wLjUsMCBdKSwgZ2wuU1RBVElD
X0RSQVcpOworICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgZ2wudmVydGV4QXR0
cmliUG9pbnRlcigwLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOworCisgIGdsLmNsZWFyKGds
LkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTsKKyAgZ2wuZHJhd0FycmF5
cyhnbC5UUklBTkdMRVMsIDAsIDMpOworCisKKyAgZnVuY3Rpb24gY2hlY2tEYXRhKGJ1ZiwgbmFt
ZSkgeworICAgIC8vIFRlc3Qgc2V2ZXJhbCBsb2NhdGlvbnMKKyAgICAvLyBGaXJzdCBsaW5lIHNo
b3VsZCBiZSBhbGwgYmxhY2sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAg
ICAgIGlmIChidWZbaSo0XSAhPSAwIHx8IGJ1ZltpKjQrMV0gIT0gMCB8fCBidWZbaSo0KzJdICE9
IDAgfHwgYnVmW2kqNCszXSAhPSAyNTUpIHsKKyAgICAgICAgZmFpbChpLCAwLCBuYW1lLCBidWYs
ICIoMCwwLDAsMjU1KSIpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAg
Ly8gTGluZSAyNSBzaG91bGQgYmUgcmVkIGZvciBhdCBsZWFzdCA2IHJlZCBwaXhlbHMgc3RhcnRp
bmcgMjIgcGl4ZWxzIGluCisgICAgdmFyIG9mZnNldCA9ICgyNSo1MCsyMikgKiA0OworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgNjsgKytpKSB7CisgICAgICBpZiAoYnVmW29mZnNldCtpKjRdICE9
IDI1NSB8fCBidWZbb2Zmc2V0K2kqNCsxXSAhPSAwIHx8IGJ1ZltvZmZzZXQraSo0KzJdICE9IDAg
fHwgYnVmW29mZnNldCtpKjQrM10gIT0gMjU1KSB7CisgICAgICAgIGZhaWwoMjIgKyBpLCAyNSwg
bmFtZSwgYnVmLCAiKDI1NSwwLDAsMjU1KSIpOworICAgICAgICByZXR1cm47CisgICAgICB9Cisg
ICAgfQorCisgICAgLy8gTGFzdCBsaW5lIHNob3VsZCBiZSBhbGwgYmxhY2sKKyAgICBvZmZzZXQg
PSAoNDkqNTApICogNDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAg
IGlmIChidWZbb2Zmc2V0K2kqNF0gIT0gMCB8fCBidWZbb2Zmc2V0K2kqNCsxXSAhPSAwIHx8IGJ1
ZltvZmZzZXQraSo0KzJdICE9IDAgfHwgYnVmW29mZnNldCtpKjQrM10gIT0gMjU1KSB7CisgICAg
ICAgIGZhaWwoaSwgNDksIG5hbWUsIGJ1ZiwgIigwLDAsMCwyNTUpIik7CisgICAgICAgIHJldHVy
bjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwYXNzKG5hbWUpOworICB9CisKKyAgZnVuY3Rpb24g
Y2hlY2tDb2xvcnMoKSB7CisgICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KDUwICogNTAgKiA0
KTsKKyAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIDUwLCA1MCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURf
QllURSwgYnVmKTsKKyAgICBjaGVja0RhdGEoYnVmLCAiM2QgY29udGV4dCIpOworICAgIHZhciBp
bWdEYXRhID0gY3R4MmQuZ2V0SW1hZ2VEYXRhKDAsIDAsIDUwLCA1MCk7CisgICAgY2hlY2tEYXRh
KGltZ0RhdGEuZGF0YSwgIjJkIGNvbnRleHQiKTsKKyAgfQorCisgIHZhciB0YWJsZSA9IFsxLCAy
LCA0LCA4XTsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHRhYmxlLmxlbmd0aDsgKytpaSkgewor
ICAgIGdsLnBpeGVsU3RvcmVpKGdsLlBBQ0tfQUxJR05NRU5ULCB0YWJsZVtpaV0pOworICAgIGN0
eDJkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjJkMCIgKyBpaSkuZ2V0Q29udGV4dCgiMmQi
KTsKKyAgICBjdHgyZC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7CisgICAgY3R4
MmQuZHJhd0ltYWdlKGNhbnZhczNkLCAwLCAwKTsKKyAgICBjaGVja0NvbG9ycygpOworICAgIGFz
c2VydE1zZyhnbC5nZXRQYXJhbWV0ZXIoZ2wuUEFDS19BTElHTk1FTlQpID09IHRhYmxlW2lpXSwK
KyAgICAgICAgIlBBQ0tfQUxJR05NRU5UIGlzICIgKyB0YWJsZVtpaV0pOworICB9Cit9CisKK2lu
aXQoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3NjcmlwdD4KKworPHNjcmlwdCBz
cmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorCis8L2Jv
ZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61451</attachid>
            <date>2010-07-13 18:42:56 -0700</date>
            <delta_ts>2010-07-13 19:13:15 -0700</delta_ts>
            <desc>revised patch: fix the Qt bug</desc>
            <filename>canvas.patch</filename>
            <type>text/plain</type>
            <size>31818</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzI3NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDctMTMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFV
UkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICBUZXN0czogZmFzdC9jYW52YXMvd2ViZ2wvY2Fu
dmFzLXRlc3QuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxz
dG9yZWkuaHRtbAorCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKTogUGFpbnQgdGhlIFdl
YkdMIHJlbmRlcmluZyByZXN1bHRzIHRvIGNhbnZhcyBpZiBpdCdzIDNkLgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZSk6IFBhaW50IHRoZSBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyB0byBjYW52YXMgaWYgaXQncyAzZCBiZWZvcmUgZHJhd2luZy4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQpOiBNYXJr
IGl0IGFsd2F5cyBmb3IgY2FudmFzMmQuZHJhd0ltYWdlIHB1cnBvc2UuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KTogUGFpbnQgdGhlIFdlYkdMIHJlbmRlcmluZyByZXN1bHRzIHRvIGNhbnZhcyBpZiBpdCdzIGRp
cnR5LgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBEZWNs
YXJlIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDogRGVjbGFyZSBwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcygpICYgcGFpbnRUb0NhbnZhcygpLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMpOiBQYWludCB0aGUgcmVuZGVyZWQgaW1hZ2UgcGl4
ZWxzIHRvIHRoZSBjYW52YXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKTogSW1wbGVtZW50IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
YmVnaW5QYWludCk6IEp1c3QgY2FsbCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyk6IEltcGxlbWVudCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgorCiAyMDEwLTA3
LTEzICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lv
biA2MzI3NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyNyw2ICszMjcsMTMgQEAgU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojp0b0Rh
dGFVUkwoY29ucwogCiAgICAgU3RyaW5nIGxvd2VyY2FzZU1pbWVUeXBlID0gbWltZVR5cGUubG93
ZXIoKTsKIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgaWYgKGlzM0QoKSkgeworICAgICAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQzZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kj4ocmVuZGVyaW5nQ29udGV4dCgpKTsKKyAgICAgICAgY29udGV4
dDNkLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIH0KKyNlbmRpZgorCiAg
ICAgLy8gRklYTUU6IE1ha2UgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcgdGhy
ZWFkc2FmZSAodG8gYWxsb3cgdGhpcyBtZXRob2QgdG8gYmUgdXNlZCBvbiBhIHdvcmtlciB0aHJl
YWQpLgogICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSB8fCAhTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobG93ZXJjYXNlTWltZVR5cGUpKQogICAg
ICAgICByZXR1cm4gYnVmZmVyKCktPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7CkluZGV4OiBXZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZp
c2lvbiA2MzI3NCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTAgQEAKICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKKyNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2VuZGlmCisKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExNDMsNiArMTE0
NywxMyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgaWYg
KCFzb3VyY2VDYW52YXMtPm9yaWdpbkNsZWFuKCkpCiAgICAgICAgIGNhbnZhcygpLT5zZXRPcmln
aW5UYWludGVkKCk7CiAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIGlmIChzb3VyY2VDYW52
YXMtPmlzM0QoKSkgeworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQzZCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oc291cmNlQ2FudmFzLT5y
ZW5kZXJpbmdDb250ZXh0KCkpOworICAgICAgICBjb250ZXh0M2QtPnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKCk7CisgICAgfQorI2VuZGlmCisKICAgICBjLT5kcmF3SW1hZ2UoYnVmZmVy
LT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVjdCwgc291cmNlUmVjdCwgc3RhdGUo
KS5tX2dsb2JhbENvbXBvc2l0ZSk7CiAgICAgd2lsbERyYXcoZGVzdFJlY3QpOyAvLyBUaGlzIGNh
bGwgY29tZXMgYWZ0ZXIgZHJhd0ltYWdlLCBzaW5jZSB0aGUgYnVmZmVyIHdlIGRyYXcgaW50byBt
YXkgYmUgb3VyIG93biwgYW5kIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGl0IGlzIGRpcnR5LgogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFyZ3VhYmx5IHdpbGxEcmF3IHNob3VsZCBi
ZWNvbWUgZGlkRHJhdyBhbmQgb2NjdXIgYWZ0ZXIgZHJhd2luZyBjYWxscyBhbmQgbm90IGJlZm9y
ZSB0aGVtIHRvIGF2b2lkIHByb2JsZW1zIGxpa2UgdGhpcy4KSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDYzMjc0KQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDEsMTcgKzE0MSwyMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFy
a0NvbnRleHRDCiAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94
KCk7CiAgICAgaWYgKHJlbmRlckJveCAmJiByZW5kZXJCb3gtPmhhc0xheWVyKCkgJiYgcmVuZGVy
Qm94LT5sYXllcigpLT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpCiAgICAgICAgIHJlbmRl
ckJveC0+bGF5ZXIoKS0+cmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpOwotICAgIGVsc2UgewogI2Vu
ZGlmCi0gICAgICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSkgewotICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoZSBjYW52YXMncyBpbWFnZSBidWZmZXIgaXMgYWxsb2NhdGVkLgotICAgICAg
ICAgICAgY2FudmFzKCktPmJ1ZmZlcigpOwotICAgICAgICAgICAgY2FudmFzKCktPndpbGxEcmF3
KEZsb2F0UmVjdCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7
Ci0gICAgICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgfQotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGly
dHkpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjYW52YXMncyBpbWFnZSBidWZmZXIgaXMg
YWxsb2NhdGVkLgorICAgICAgICBjYW52YXMoKS0+YnVmZmVyKCk7CisgICAgICAgIGNhbnZhcygp
LT53aWxsRHJhdyhGbG9hdFJlY3QoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5o
ZWlnaHQoKSkpOworICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gdHJ1ZTsKICAgICB9Ci0j
ZW5kaWYKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKCkKK3sKKyAgICBpZiAobV9tYXJrZWRDYW52YXNEaXJ0eSkgeworICAgICAg
ICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisgICAgICAgIG1fY29udGV4dC0+cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
ZWdpblBhaW50KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaAkocmV2aXNpb24gNjMyNzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNiArMzA2LDEwIEBAIGNsYXNz
IFdlYktpdENTU01hdHJpeDsKICAgICAKICAgICAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwg
aW50IGhlaWdodCk7CiAKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIHRydWUgaW5kaWNhdGVzIGNh
bnZhcyBpcyB1cGRhdGVkIGR1cmluZyB0aGUgY2FsbCwKKyAgICAgICAgLy8gZmFsc2UgaW5kaWNh
dGVzIG5vIHVwZGF0ZXMuCisgICAgICAgIGJvb2wgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoKTsKKwogICAgICAgICAvLyBIZWxwZXJzIGZvciBub3RpZmljYXRpb24gYWJvdXQgcGFpbnQg
ZXZlbnRzLgogICAgICAgICB2b2lkIGJlZ2luUGFpbnQoKTsKICAgICAgICAgdm9pZCBlbmRQYWlu
dCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaAkocmV2aXNpb24gNjMyNzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDEwIEBAIHR5cGVkZWYg
aW50IFBsYXRmb3JtM0RPYmplY3Q7CiBjb25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9y
bTNET2JqZWN0ID0gMDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ0cpCisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NHQ29udGV4dC5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBXZWJHTEFjdGl2ZUluZm87CiAgICAgY2xhc3MgQXJyYXlCdWZmZXI7CkBAIC03MTAs
NyArNzE0LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB2aWV3cG9ydChs
b25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQp
OwogCiAgICAgICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotICAgICAg
ICAKKworI2lmIFBMQVRGT1JNKENHKSAmJiAoUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShDSFJP
TUlVTSkpCisgICAgICAgIHZvaWQgcGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBp
bWFnZVBpeGVscywgaW50IGltYWdlV2lkdGgsIGludCBpbWFnZUhlaWdodCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCBjYW52YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdodCwgQ0dDb250
ZXh0UmVmIGNvbnRleHQpOworI2VuZGlmCisKKyAgICAgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpOworCiAgICAgICAg
IC8vIEhlbHBlcnMgZm9yIG5vdGlmaWNhdGlvbiBhYm91dCBwYWludCBldmVudHMKICAgICAgICAg
dm9pZCBiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7CiAgICAgICAg
IHZvaWQgZW5kUGFpbnQoKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0M0RDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNwcAkocmV2aXNpb24gNjMyNzQpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4
dC5oPgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0ltYWdlLmg+CiAKKyNpbmNsdWRlIDx3dGYv
UmV0YWluUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogYm9vbCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFnZSwKQEAgLTEwNCw2ICsxMDYsNDMgQEAgYm9v
bCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYQogICAgICAgICAgICAgICAgICAg
ICAgIGZvcm1hdCwgdHlwZSwgbmVlZGVkQWxwaGFPcCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7CiB9
CiAKKyNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKENIUk9NSVVNKQordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVs
cywgaW50IGltYWdlV2lkdGgsIGludCBpbWFnZUhlaWdodCwgaW50IGNhbnZhc1dpZHRoLCBpbnQg
Y2FudmFzSGVpZ2h0LCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBpZiAoIWltYWdlUGl4
ZWxzIHx8IGltYWdlV2lkdGggPD0gMCB8fCBpbWFnZUhlaWdodCA8PSAwIHx8IGNhbnZhc1dpZHRo
IDw9IDAgfHwgY2FudmFzSGVpZ2h0IDw9IDAgfHwgIWNvbnRleHQpCisgICAgICAgIHJldHVybjsK
KyAgICBpbnQgcm93Qnl0ZXMgPSBpbWFnZVdpZHRoICogNDsKKyAgICBSZXRhaW5QdHI8Q0dEYXRh
UHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEo
MCwgaW1hZ2VQaXhlbHMsIHJvd0J5dGVzICogaW1hZ2VIZWlnaHQsIDApOworICAgIFJldGFpblB0
cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VS
R0IoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZSA9IENHSW1hZ2VDcmVhdGUo
aW1hZ2VXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW1hZ2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByb3dCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29sb3JTcGFjZS5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8
IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGF0YVByb3ZpZGVyLmdldCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHUmVuZGVyaW5nSW50ZW50RGVmYXVs
dCk7CisgICAgLy8gQ1NTIHN0eWxpbmcgbWF5IGNhdXNlIHRoZSBjYW52YXMncyBjb250ZW50IHRv
IGJlIHJlc2l6ZWQgb24KKyAgICAvLyB0aGUgcGFnZS4gR28gYmFjayB0byB0aGUgQ2FudmFzIHRv
IGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QKKyAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IHRvIGRyYXcu
CisgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKDAsIDAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbnZhc1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52
YXNIZWlnaHQpOworICAgIC8vIFdlIHdhbnQgdG8gY29tcGxldGVseSBvdmVyd3JpdGUgdGhlIHBy
ZXZpb3VzIGZyYW1lJ3MKKyAgICAvLyByZW5kZXJpbmcgcmVzdWx0cy4KKyAgICBDR0NvbnRleHRT
YXZlR1N0YXRlKGNvbnRleHQpOworICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShjb250ZXh0LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dCbGVuZE1vZGVDb3B5KTsKKyAgICBDR0NvbnRl
eHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGtDR0ludGVycG9sYXRpb25Ob25lKTsKKyAgICBDR0NvbnRleHREcmF3
SW1hZ2UoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVjdCwgY2dJbWFnZS5nZXQo
KSk7CisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKK30KKyNlbmRpZgogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
bWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCShyZXZpc2lvbiA2MzI3NCkK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMCArMzksMTMgQEAKICNpbmNsdWRlICJXZWJHTEJ1ZmZl
ci5oIgogI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgogI2luY2x1ZGUgIldlYkdMRnJhbWVidWZm
ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJIVE1MQ2FudmFz
RWxlbWVudC5oIgogI2luY2x1ZGUgIkludDMyQXJyYXkuaCIKICNpbmNsdWRlICJXZWJHTExheWVy
LmgiCiAjaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgiCiAjaW5jbHVkZSAiV2ViR0xSZW5kZXJidWZm
ZXIuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJXZWJH
TFNoYWRlci5oIgogI2luY2x1ZGUgIldlYkdMVGV4dHVyZS5oIgogI2luY2x1ZGUgIlVpbnQ4QXJy
YXkuaCIKQEAgLTIzNyw2ICsyNDAsNTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNv
bnRleHRDdXJyZQogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CiB9CiAK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdl
YkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBIVE1MQ2FudmFzRWxlbWVudCog
Y2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CisgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVy
ID0gY2FudmFzLT5idWZmZXIoKTsKKworICAgIGludCByb3dCeXRlcyA9IG1fY3VycmVudFdpZHRo
ICogNDsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5dGVzICogbV9jdXJyZW50SGVpZ2h0Owor
CisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4gcGl4ZWxzKG5ldyB1bnNpZ25lZCBjaGFy
W3RvdGFsQnl0ZXNdKTsKKyAgICBpZiAoIXBpeGVscykKKyAgICAgICAgcmV0dXJuOworCisgICAg
Q0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKKworICAgIGJvb2wgbXVzdFJlc3Rv
cmVGQk87CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7CisgICAgICAgIDo6Z2xCaW5kRnJh
bWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9FWFQsIG1fbXVsdGlzYW1wbGVGQk8pOwor
ICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0RSQVdfRlJBTUVCVUZGRVJfRVhULCBt
X2Zibyk7CisgICAgICAgIDo6Z2xCbGl0RnJhbWVidWZmZXJFWFQoMCwgMCwgbV9jdXJyZW50V2lk
dGgsIG1fY3VycmVudEhlaWdodCwgMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdo
dCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFSKTsKKyAgICAgICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgbXVzdFJlc3Rv
cmVGQk8gPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChtX2JvdW5kRkJPICE9IG1f
ZmJvKSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgICAgICAgICA6
OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8pOworICAgICAg
ICB9CisgICAgfQorCisgICAgR0xpbnQgcGFja0FsaWdubWVudCA9IDQ7CisgICAgYm9vbCBtdXN0
UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAgICA6OmdsR2V0SW50ZWdlcnYoR0xfUEFD
S19BTElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKKyAgICBpZiAocGFja0FsaWdubWVudCA+IDQp
IHsKKyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BBQ0tfQUxJR05NRU5ULCA0KTsKKyAgICAg
ICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICA6OmdsUmVh
ZFBpeGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9CR1JBLCBH
TF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYsIHBpeGVscy5nZXQoKSk7CisKKyAgICBpZiAobXVz
dFJlc3RvcmVQYWNrQWxpZ25tZW50KQorICAgICAgICA6OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19B
TElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOworCisgICAgaWYgKG11c3RSZXN0b3JlRkJPKQorICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZC
Tyk7CisKKyAgICBwYWludFRvQ2FudmFzKHBpeGVscy5nZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1f
Y3VycmVudEhlaWdodCwKKyAgICAgICAgICAgICAgICAgIGNhbnZhcy0+d2lkdGgoKSwgY2FudmFz
LT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwor
fQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCogY29udGV4dCkKIHsKICAgICBVTlVTRURfUEFSQU0oY29udGV4dCk7CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5j
cHAJKHJldmlzaW9uIDYzMjc0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFw
aGljc0NvbnRleHQzRFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIxLDYgKzUyMSwxNSBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlCiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewor
ICAgIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmVuZFBhaW50KCkKK3sKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0
KQorewogICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQtPm1ha2VDdXJyZW50KCk7CiAgICAgSFRN
TENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOwogICAgIEltYWdlQnVm
ZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CkBAIC01MjgsMTAgKzUzNyw2IEBA
IHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQoV2ViR0wKICAgICBwYWludChwYWlu
dGVyLCBRUmVjdChRUG9pbnQoMCwgMCksIFFTaXplKG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KCkKLXsKLX0K
LQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnQoUVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0
IFFSZWN0JiByZWN0KSBjb25zdAogewogI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVD
Syg0LCA3LCAwKQpJbmRleDogV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA2MzI3NCkKKysrIFdlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMC0w
Ny0xMyAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkdMIHJlbmRlcmluZyByZXN1bHRzIG11c3Qg
YmUgbWFkZSBhdmFpbGFibGUgdG8gQ2FudmFzLnRvRGF0YVVSTCBhbmQgMkQgZHJhd0ltYWdlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDcxOQorCisg
ICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKTog
SW1wbGVtZW50IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBhaW50KTogSnVzdCB1c2UgcGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKS4KKwogMjAxMC0wNy0xMyAgQ2hyaXMgR3VpbGxv
cnkgIDxjaHJpcy5ndWlsbG9yeUBnb29nbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERh
dmlkIExldmluLgpJbmRleDogV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5j
cHAJKHJldmlzaW9uIDYzMjc0KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRl
eHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAorICAgIHZvaWQgcGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsK
ICAgICB2b2lkIGJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKICAg
ICB2b2lkIGVuZFBhaW50KCk7CiAKQEAgLTM5OSw3ICs0MDAsNyBAQCBXZWJHTExheWVyQ2hyb21p
dW0qIEdyYXBoaWNzQ29udGV4dDNESW50CiB9CiAjZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewogICAgIEhUTUxDYW52YXNF
bGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1h
Z2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwpAQCAtNDQ5LDQ0ICs0NTAsMjAgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBhaQogICAgICAgICBjYW52YXMuZHJhd0Jp
dG1hcFJlY3QobV9yZXNpemluZ0JpdG1hcCwgMCwgZHN0KTsKICAgICB9CiAjZWxpZiBQTEFURk9S
TShDRykKLSAgICBpZiAobV9yZW5kZXJPdXRwdXQpIHsKLSAgICAgICAgaW50IHJvd0J5dGVzID0g
bV9pbXBsLT53aWR0aCgpICogNDsKLSAgICAgICAgQ0dEYXRhUHJvdmlkZXJSZWYgZGF0YVByb3Zp
ZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBtX3JlbmRlck91dHB1dCwgcm93
Qnl0ZXMgKiBtX2ltcGwtPmhlaWdodCgpLCAwKTsKLSAgICAgICAgQ0dDb2xvclNwYWNlUmVmIGNv
bG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZpY2VSR0IoKTsKLSAgICAgICAgQ0dJbWFn
ZVJlZiBjZ0ltYWdlID0gQ0dJbWFnZUNyZWF0ZShtX2ltcGwtPndpZHRoKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9pbXBsLT5oZWlnaHQoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJvd0J5dGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1h
cEJ5dGVPcmRlcjMySG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkYXRhUHJvdmlkZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxz
ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dSZW5kZXJp
bmdJbnRlbnREZWZhdWx0KTsKLSAgICAgICAgLy8gQ1NTIHN0eWxpbmcgbWF5IGNhdXNlIHRoZSBj
YW52YXMncyBjb250ZW50IHRvIGJlIHJlc2l6ZWQgb24KLSAgICAgICAgLy8gdGhlIHBhZ2UuIEdv
IGJhY2sgdG8gdGhlIENhbnZhcyB0byBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0Ci0gICAgICAgIC8v
IHdpZHRoIGFuZCBoZWlnaHQgdG8gZHJhdy4KLSAgICAgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RN
YWtlKDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5jYW52
YXMoKS0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQt
PmNhbnZhcygpLT5oZWlnaHQoKSk7Ci0gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGxldGVseSBv
dmVyd3JpdGUgdGhlIHByZXZpb3VzIGZyYW1lJ3MKLSAgICAgICAgLy8gcmVuZGVyaW5nIHJlc3Vs
dHMuCi0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9kZShpbWFnZUJ1ZmZlci0+Y29udGV4dCgp
LT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0Js
ZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShp
bWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW50ZXJwb2xhdGlvbk5vbmUpOwotICAgICAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250
ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LCBjZ0ltYWdlKTsKLSAgICAg
ICAgQ0dJbWFnZVJlbGVhc2UoY2dJbWFnZSk7Ci0gICAgICAgIENHQ29sb3JTcGFjZVJlbGVhc2Uo
Y29sb3JTcGFjZSk7Ci0gICAgICAgIENHRGF0YVByb3ZpZGVyUmVsZWFzZShkYXRhUHJvdmlkZXIp
OwotICAgIH0KKyAgICBpZiAobV9yZW5kZXJPdXRwdXQpCisgICAgICAgIGNvbnRleHQtPmdyYXBo
aWNzQ29udGV4dDNEKCktPnBhaW50VG9DYW52YXMobV9yZW5kZXJPdXRwdXQsIG1faW1wbC0+d2lk
dGgoKSwgbV9pbXBsLT5oZWlnaHQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYW52YXMtPndpZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VC
dWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCkpOwogI2Vsc2UKICNlcnJvciBNdXN0
IHBvcnQgdG8geW91ciBwbGF0Zm9ybQogI2VuZGlmCiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6YmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7
CisgICAgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoY29udGV4dCk7Cit9CisKIHZvaWQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZW5kUGFpbnQoKQogewogfQpAQCAtMTMyNSw2ICsx
MzAyLDcgQEAgREVMRUdBVEVfVE9fSU5URVJOQUxfNih2ZXJ0ZXhBdHRyaWJQb2ludAogCiBERUxF
R0FURV9UT19JTlRFUk5BTF80KHZpZXdwb3J0LCBsb25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1
bnNpZ25lZCBsb25nKQogCitERUxFR0FURV9UT19JTlRFUk5BTF8xKHBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzLCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqKQogREVMRUdBVEVfVE9fSU5URVJO
QUxfMShiZWdpblBhaW50LCBXZWJHTFJlbmRlcmluZ0NvbnRleHQqKQogREVMRUdBVEVfVE9fSU5U
RVJOQUwoZW5kUGFpbnQpCiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDYzMjc0KQorKysgTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDctMTMg
IFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCByZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1h
ZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFVUkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAg
ICAqIGZhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFzLXRlc3QuaHRtbDogQWRkZWQuCisgICAg
ICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWktZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS5odG1sOiBBZGRl
ZC4KKwogMjAxMC0wNy0xMyAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2NhbnZhcy10ZXN0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKK1RoaXMgdGVzdCBlbnN1cmVzIFdlYkdM
IGltcGxlbWVudGF0aW9ucyBpbnRlcmFjdCBjb3JyZWN0bHkgd2l0aCB0aGUgY2FudmFzIHRhZy4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0NhbnZhcy5nZXRDb250ZXh0CitQQVNT
IGNvbnRleHQgZXhpc3RzCisKK0NoZWNraW5nIGNhbnZhcyBhbmQgV2ViR0wgaW50ZXJhY3Rpb24K
K1BBU1MgY2FudmFzLndpZHRoIGlzIDMwMAorUEFTUyBjYW52YXMuaGVpZ2h0IGlzIDE1MAorUEFT
UyBwaXhlbHMgYXJlIDAsMCwwLDAKK1BBU1MgZ2V0Vmlld3BvcnQoKSBpcyAiMCwwLDMwMCwxNTAi
CisKK2NoYW5nZSBkaXNwbGF5IHNpemUgb2YgY2FudmFzIGFuZCBzZWUgdGhhdCB2aWV3cG9ydCBk
b2VzIG5vdCBjaGFuZ2UKK1BBU1MgZ2V0Vmlld3BvcnQoKSBpcyAiMCwwLDMwMCwxNTAiCitQQVNT
IGNhbnZhcy53aWR0aCBpcyAzMDAKK1BBU1MgY2FudmFzLmhlaWdodCBpcyAxNTAKKworY2hhbmdl
IHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgY2FudmFzIGFuZCBzZWUgdGhhdCB0aGUgdmlld3BvcnQg
ZG9lcyBub3QgY2hhbmdlCitQQVNTIHBpeGVscyBhcmUgNjQsMTI4LDE5MiwyNTUKK1BBU1MgZ2wu
Y2xlYXJDb2xvciBzaG91bGQgbm90IGNoYW5nZSBhZnRlciBjYW52YXMgcmVzaXplCitQQVNTIGds
LmNvbG9yTWFzayBzaG91bGQgbm90IGNoYW5nZSBhZnRlciBjYW52YXMgcmVzaXplCitQQVNTIGdl
dFZpZXdwb3J0KCkgaXMgIjAsMCwzMDAsMTUwIgorUEFTUyBwaXhlbHMgYXJlIDAsMCwwLDAKKwor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisgCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0Lmh0bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC5o
dG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwMyBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgImh0dHA6Ly93d3cu
dzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1l
cXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgor
PHRpdGxlPldlYkdMIENhbnZhcyBDb25mb3JtYW5jZSBUZXN0czwvdGl0bGU+Cis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIv
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmdsLXRlc3QuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxjYW52YXMgaWQ9ImNhbnZhcyIgc3R5bGU9IndpZHRoOiA1MHB4OyBoZWln
aHQ6IDUwcHg7Ij4gPC9jYW52YXM+Cis8Y2FudmFzIGlkPSJjYW52YXMyZCIgd2lkdGg9IjQwIiBo
ZWlnaHQ9IjQwIj4gPC9jYW52YXM+Cis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgi
V2ViS2l0V2ViR0xFbmFibGVkIiwgIjEiKTsKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisKK2Rl
c2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyBXZWJHTCBpbXBsZW1lbnRhdGlvbnMgaW50ZXJh
Y3QgY29ycmVjdGx5IHdpdGggdGhlIGNhbnZhcyB0YWcuIik7CisKK2RlYnVnKCIiKTsKK2RlYnVn
KCJDYW52YXMuZ2V0Q29udGV4dCIpOworCit2YXIgY2FudmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImNhbnZhcyIpOwordmFyIGNhbnZhczJkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo
ImNhbnZhczJkIik7Cit2YXIgY3R4MmQgPSBjYW52YXMyZC5nZXRDb250ZXh0KCIyZCIpOwordmFy
IGdsID0gbnVsbDsKK3RyeSB7CisgIGdsID0gY2FudmFzLmdldENvbnRleHQoImV4cGVyaW1lbnRh
bC13ZWJnbCIpOworfSBjYXRjaChlKSB7fQoraWYgKCFnbCkgeworICB0cnkgeworICAgIGdsID0g
Y2FudmFzLmdldENvbnRleHQoIndlYmtpdC0zZCIpOworICB9IGNhdGNoKGUpIHt9Cit9CitpZiAo
IWdsKSB7CisgIHRlc3RGYWlsZWQoImNvbnRleHQgZG9lcyBub3QgZXhpc3QiKTsKK30gZWxzZSB7
CisgIHRlc3RQYXNzZWQoImNvbnRleHQgZXhpc3RzIik7CisKKyAgZGVidWcoIiIpOworICBkZWJ1
ZygiQ2hlY2tpbmcgY2FudmFzIGFuZCBXZWJHTCBpbnRlcmFjdGlvbiIpOworCisgIC8vIENoZWNr
IHRoYXQgYSBjYW52YXMgd2l0aCBubyB3aWR0aCBvciBoZWlnaHQgaXMgMzAweDE1MCBwaXhlbHMK
KyAgc2hvdWxkQmUoJ2NhbnZhcy53aWR0aCcsICczMDAnKTsKKyAgc2hvdWxkQmUoJ2NhbnZhcy5o
ZWlnaHQnLCAnMTUwJyk7CisKKyAgLy8gQ2hlY2sgZ2V0IGEgNCB2YWx1ZSBnbCBwYXJhbWV0ZXIg
YXMgYSBjc3Ygc3RyaW5nLgorICBmdW5jdGlvbiBnZXRWYWx1ZTR2KG5hbWUpIHsKKyAgICB2YXIg
diA9IGdsLmdldFBhcmFtZXRlcihuYW1lKTsKKyAgICB2YXIgcmVzdWx0ID0gJycgKworICAgICAg
ICB2WzBdICsgJywnICsKKyAgICAgICAgdlsxXSArICcsJyArCisgICAgICAgIHZbMl0gKyAnLCcg
KworICAgICAgICB2WzNdOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICBmdW5jdGlvbiBn
ZXRWaWV3cG9ydCgpIHsKKyAgICByZXR1cm4gZ2V0VmFsdWU0dihnbC5WSUVXUE9SVCk7CisgIH0K
KworICBmdW5jdGlvbiBnZXRDbGVhckNvbG9yKCkgeworICAgIHJldHVybiBnZXRWYWx1ZTR2KGds
LkNPTE9SX0NMRUFSX1ZBTFVFKTsKKyAgfQorCisgIGZ1bmN0aW9uIGlzQWJvdXRFcXVhbChhLCBi
KSB7CisgICAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8IDAuMDE7CisgIH0KKworICBmdW5jdGlv
biBpc0Fib3V0RXF1YWxJbnQoYSwgYikgeworICAgIHJldHVybiBNYXRoLmFicyhhIC0gYikgPCAz
OworICB9CisKKyAgZnVuY3Rpb24gY2hlY2tDYW52YXNDb250ZW50SXMocjNkLGczZCxiM2QsYTNk
KSB7CisgICAgdmFyIHIyZDsKKyAgICB2YXIgZzJkOworICAgIHZhciBiMmQ7CisgICAgdmFyIGEy
ZDsKKworICAgIGZ1bmN0aW9uIGNoZWNrUGl4ZWwoeCwgeSwgcjNkLGczZCxiM2QsYTNkKSB7Cisg
ICAgICB2YXIgb2Zmc2V0ID0gKHkgKiA0MCArIHgpICogNDsKKyAgICAgIHIyZCA9IGltZ0RhdGEu
ZGF0YVtvZmZzZXRdOworICAgICAgZzJkID0gaW1nRGF0YS5kYXRhW29mZnNldCArIDFdOworICAg
ICAgYjJkID0gaW1nRGF0YS5kYXRhW29mZnNldCArIDJdOworICAgICAgYTJkID0gaW1nRGF0YS5k
YXRhW29mZnNldCArIDNdOworICAgICAgLy9kZWJ1ZygnJyArIHggKyAnLCAnICsgeSArICIoIiAr
IG9mZnNldCArICIpID0gIiArIHIyZCArICIsICIgKyBnMmQgKyAiLCAiICsgYjJkICsgIiwgIiAr
IGEyZCk7CisgICAgICByZXR1cm4gaXNBYm91dEVxdWFsSW50KHIyZCwgcjNkKSAmJgorICAgICAg
ICAgICAgIGlzQWJvdXRFcXVhbEludChnMmQsIGczZCkgJiYKKyAgICAgICAgICAgICBpc0Fib3V0
RXF1YWxJbnQoYjJkLCBiM2QpICYmCisgICAgICAgICAgICAgaXNBYm91dEVxdWFsSW50KGEyZCwg
YTNkKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVja1BpeGVscyhyM2QsZzNkLGIzZCxhM2Qp
IHsKKyAgICAgIHJldHVybiBjaGVja1BpeGVsKDAsIDAsIHIzZCwgZzNkLCBiM2QsIGEzZCkgJiYK
KyAgICAgICAgICAgICBjaGVja1BpeGVsKDAsIDM5LCByM2QsIGczZCwgYjNkLCBhM2QpICYmCisg
ICAgICAgICAgICAgY2hlY2tQaXhlbCgzOSwgMCwgcjNkLCBnM2QsIGIzZCwgYTNkKSAmJgorICAg
ICAgICAgICAgIGNoZWNrUGl4ZWwoMzksIDM5LCByM2QsIGczZCwgYjNkLCBhM2QpOworICAgIH07
CisKKyAgICAvLyBTZXQgdG8ganVzdCB0YWtlIHRoZSBjb2xvciBmcm9tIHRoZSAzZCBjYW52YXMK
KyAgICBjdHgyZC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAnY29weSc7CisKKyAgICAvLyBm
aWxsIDJkIGNhbnZhcyB3aXRoIG9yYW5nZQorICAgIGN0eDJkLmZpbGxTdHlsZSA9ICJyZ2IoMjU1
LDE5MiwxMjgpIjsKKyAgICBjdHgyZC5maWxsUmVjdCAoMCwgMCwgNDAsIDQwKTsKKworICAgIC8v
IGdldCB0aGUgaW1hZ2UgZGF0YQorICAgIHZhciBpbWdEYXRhID0gY3R4MmQuZ2V0SW1hZ2VEYXRh
KDAsIDAsIDQwLCA0MCk7CisKKyAgICAvLyBjaGVjayBpdCBnb3QgY2xlYXJlZC4KKyAgICBpZiAo
IWNoZWNrUGl4ZWxzKDI1NSwgMTkyLCAxMjgsIDI1NSkpIHsKKyAgICAgIHRlc3RGYWlsZWQoInVu
YWJsZSB0byBmaWxsIDJkIGNvbnRleHQuIik7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gZHJhdyAzZCBjYW52YXMgb24gdG9wLgorICAgIGN0eDJkLmRyYXdJbWFnZShjYW52YXMsIDAs
IDAsIDQwLCA0MCk7CisKKyAgICAvLyBnZXQgdGhlIGltYWdlIGRhdGEKKyAgICB2YXIgaW1nRGF0
YSA9IGN0eDJkLmdldEltYWdlRGF0YSgwLCAwLCA0MCwgNDApOworCisgICAgLy8gQ2hlY2sgaXQn
cyB0aGUgZXhwZWN0ZWQgY29sb3IuCisgICAgaWYgKCFjaGVja1BpeGVscyhyM2QsIGczZCwgYjNk
LCBhM2QpKSB7CisgICAgICB0ZXN0RmFpbGVkKCJwaXhlbHMgYXJlICIgKyByMmQgKyAiLCIgKyBn
MmQgKyAiLCIgKyBiMmQgKyAiLCIgKyBhMmQgKworICAgICAgICAgICAgICAgICAiIGV4cGVjdGVk
ICIgKyByM2QgKyAiLCIgKyBnM2QgKyAiLCIgKyBiM2QgKyAiLCIgKyBhM2QpOworICAgIH0gZWxz
ZSB7CisgICAgICB0ZXN0UGFzc2VkKCJwaXhlbHMgYXJlICIgKyByM2QgKyAiLCIgKyBnM2QgKyAi
LCIgKyBiM2QgKyAiLCIgKyBhM2QpOworICAgIH0KKyAgfQorCisgIGNoZWNrQ2FudmFzQ29udGVu
dElzKDAsIDAsIDAsIDApOworICBzaG91bGRCZSgnZ2V0Vmlld3BvcnQoKScsICciMCwwLDMwMCwx
NTAiJyk7CisKKyAgLy8gQ2hhbmdlIHRoZSBkaXNwbGF5IHNpemUgb2YgdGhlIGNhbnZhcyBhbmQg
Y2hlY2sKKyAgLy8gdGhlIHZpZXdwb3J0IHNpemUgZG9lcyBub3QgY2hhbmdlLgorICBkZWJ1Zygi
Iik7CisgIGRlYnVnKCJjaGFuZ2UgZGlzcGxheSBzaXplIG9mIGNhbnZhcyBhbmQgc2VlIHRoYXQg
dmlld3BvcnQgZG9lcyBub3QgY2hhbmdlIik7CisgIGNhbnZhcy5zdHlsZS53aWR0aCA9ICIxMDBw
eCI7CisgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSAiMjVweCI7CisgIHZhciBpbnRlcnZhbElkOwor
ICBpbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKGZ1bmN0aW9uKCkgeworICAgIGlmIChj
YW52YXMuY2xpZW50V2lkdGggPT0gMTAwICYmCisgICAgICAgIGNhbnZhcy5jbGllbnRIZWlnaHQg
PT0gMjUpIHsKKyAgICAgIHdpbmRvdy5jbGVhckludGVydmFsKGludGVydmFsSWQpOworICAgICAg
c2hvdWxkQmUoJ2dldFZpZXdwb3J0KCknLCAnIjAsMCwzMDAsMTUwIicpOworICAgICAgc2hvdWxk
QmUoJ2NhbnZhcy53aWR0aCcsICczMDAnKTsKKyAgICAgIHNob3VsZEJlKCdjYW52YXMuaGVpZ2h0
JywgJzE1MCcpOworCisgICAgICAvLyBDaGFuZ2UgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBjYW52
YXMKKyAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHZpZXdwb3J0IGRvZXMgbm90IGNoYW5nZS4KKyAg
ICAgIC8vIENoZWNrIHRoYXQgdGhlIGNsZWFyIGNvbG9yIGRvZXMgbm90IGNoYW5nZS4KKyAgICAg
IC8vIENoZWNrIHRoYXQgdGhlIGNvbG9yIG1hc2sgZG9lcyBub3QgY2hhbmdlLgorICAgICAgZGVi
dWcoIiIpOworICAgICAgZGVidWcoImNoYW5nZSB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNhbnZh
cyBhbmQgc2VlIHRoYXQgdGhlIHZpZXdwb3J0IGRvZXMgbm90IGNoYW5nZSIpOworICAgICAgZ2wu
Y2xlYXJDb2xvcigwLjI1LCAwLjUsIDAuNzUsIDEpOworICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1Jf
QlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpOworICAgICAgY2hlY2tDYW52YXNDb250
ZW50SXMoNjQsIDEyOCwgMTkyLCAyNTUpOworICAgICAgZ2wuY29sb3JNYXNrKDAsMCwwLDApOwor
ICAgICAgY2FudmFzLndpZHRoID0gNDAwOworICAgICAgY2FudmFzLmhlaWdodCA9IDEwOworCisg
ICAgICB2YXIgdiA9IGdsLmdldFBhcmFtZXRlcihnbC5DT0xPUl9DTEVBUl9WQUxVRSk7CisgICAg
ICBhc3NlcnRNc2coaXNBYm91dEVxdWFsKHZbMF0sIDAuMjUpICYmCisgICAgICAgICAgICAgICAg
aXNBYm91dEVxdWFsKHZbMV0sIDAuNSkgJiYKKyAgICAgICAgICAgICAgICBpc0Fib3V0RXF1YWwo
dlsyXSwgMC43NSkgJiYKKyAgICAgICAgICAgICAgICBpc0Fib3V0RXF1YWwodlszXSwgMSksCisg
ICAgICAgICAgICAgICAgImdsLmNsZWFyQ29sb3Igc2hvdWxkIG5vdCBjaGFuZ2UgYWZ0ZXIgY2Fu
dmFzIHJlc2l6ZSIpOworICAgICAgdiA9IGdsLmdldFBhcmFtZXRlcihnbC5DT0xPUl9XUklURU1B
U0spOworICAgICAgYXNzZXJ0TXNnKGlzQWJvdXRFcXVhbCh2WzBdLCAwKSAmJgorICAgICAgICAg
ICAgICAgIGlzQWJvdXRFcXVhbCh2WzFdLCAwKSAmJgorICAgICAgICAgICAgICAgIGlzQWJvdXRF
cXVhbCh2WzJdLCAwKSAmJgorICAgICAgICAgICAgICAgIGlzQWJvdXRFcXVhbCh2WzNdLCAwKSwK
KyAgICAgICAgICAgICAgICAiZ2wuY29sb3JNYXNrIHNob3VsZCBub3QgY2hhbmdlIGFmdGVyIGNh
bnZhcyByZXNpemUiKTsKKyAgICAgIHNob3VsZEJlKCdnZXRWaWV3cG9ydCgpJywgJyIwLDAsMzAw
LDE1MCInKTsKKyAgICAgIGNoZWNrQ2FudmFzQ29udGVudElzKDAsIDAsIDAsIDApOworCisgICAg
ICBkZWJ1ZygiIik7CisgICAgICBzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworCisgICAgICB2
YXIgZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKKyAgICAgIGVw
aWxvZ3VlLm9ubG9hZCA9IGZpbmlzaDsKKyAgICAgIGVwaWxvZ3VlLnNyYyA9ICIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKKyAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hp
bGQoZXBpbG9ndWUpOworICAgIH0KKyAgfSwgMTAwMC8zMCk7Cit9CisKK2Z1bmN0aW9uIGZpbmlz
aCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxh
eW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKKyAgICB9Cit9CisKKzwvc2NyaXB0Pgor
Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9n
bC1waXhlbHN0b3JlaS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWktZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBACisgICAgCitUaGVyZSBzaG91bGQgYmUg
NSByZWQgdHJpYW5nbGVzIG9uIDUgYmxhY2sgc3F1YXJlcyBhYm92ZQorCitUaGlzIHRlc3QgY2hl
Y2tzIHRoYXQgZHJhd0ltYWdlIGFuZCByZWFkUGl4ZWxzIGFyZSBub3QgZWZmZWN0ZWQgYnkgZ2wu
UGl4ZWxzdG9yZWkoZ2wuUEFDS19BTElHTk1FTlQpIGFuZCB2aXNhIHZlcnNhCisKK1BBU1MgZHJh
d2luZyBpcyBjb3JyZWN0IGluIDNkIGNvbnRleHQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGlu
IDJkIGNvbnRleHQKK1BBU1MgUEFDS19BTElHTk1FTlQgaXMgMQorUEFTUyBkcmF3aW5nIGlzIGNv
cnJlY3QgaW4gM2QgY29udGV4dAorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gMmQgY29udGV4
dAorUEFTUyBQQUNLX0FMSUdOTUVOVCBpcyAyCitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAz
ZCBjb250ZXh0CitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAyZCBjb250ZXh0CitQQVNTIFBB
Q0tfQUxJR05NRU5UIGlzIDQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDNkIGNvbnRleHQK
K1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDJkIGNvbnRleHQKK1BBU1MgUEFDS19BTElHTk1F
TlQgaXMgOAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxz
dG9yZWkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L2dsLXBpeGVsc3RvcmVpLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIxIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VO
IgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj4KKzxodG1sPgorPGhl
YWQ+Cis8dGl0bGU+V2ViR0wgcGl4ZWxTdG9yZWkgVGVzdDwvdGl0bGU+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3V0aWxzM2QuanMiPiA8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+IDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+
Cis8Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgor
PGNhbnZhcyBpZD0iMmQwMCIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxjYW52
YXMgaWQ9IjJkMDEiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+Cis8Y2FudmFzIGlk
PSIyZDAyIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iMmQw
MyIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9u
Ij48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBpZD0idnNoYWRlciIg
dHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uOwordm9p
ZCBtYWluKCkgeworICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsKK30KKzwvc2NyaXB0PgorCis8
c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRlci94LWZyYWdtZW50Ij4KK3ZvaWQgbWFp
bigpIHsKKyAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsMC4wLDAuMCwxLjApOworfQorPC9zY3Jp
cHQ+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBmYWlsKHgseSwgbmFtZSwgYnVmLCBzaG91bGRCZSkg
eworICB2YXIgaSA9ICh5KjUwK3gpICogNDsKKyAgdmFyIHJlYXNvbiA9ICJwaXhlbCBpbiAiK25h
bWUrIiBhdCAoIit4KyIsIit5KyIpIGlzICgiK2J1ZltpXSsiLCIrYnVmW2krMV0rIiwiK2J1Zltp
KzJdKyIsIitidWZbaSszXSsiKSwgc2hvdWxkIGJlICIrc2hvdWxkQmU7CisgIGFzc2VydE1zZyhm
YWxzZSwgcmVhc29uKTsKK30KKworZnVuY3Rpb24gcGFzcyhuYW1lKSB7CisgIGFzc2VydE1zZyh0
cnVlLCAiZHJhd2luZyBpcyBjb3JyZWN0IGluICIgKyBuYW1lKTsKK30KKworZnVuY3Rpb24gaW5p
dCgpIHsKKyAgZGVidWcoIlRoZXJlIHNob3VsZCBiZSA1IHJlZCB0cmlhbmdsZXMgb24gNSBibGFj
ayBzcXVhcmVzIGFib3ZlIik7CisgIGRlYnVnKCIiKTsKKworICBkZWJ1ZygiVGhpcyB0ZXN0IGNo
ZWNrcyB0aGF0IGRyYXdJbWFnZSBhbmQgcmVhZFBpeGVscyBhcmUgbm90IGVmZmVjdGVkIGJ5IGds
LlBpeGVsc3RvcmVpKGdsLlBBQ0tfQUxJR05NRU5UKSBhbmQgdmlzYSB2ZXJzYSIpOworICBkZWJ1
ZygiIik7CisKKyAgdmFyIGNhbnZhczNkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImV4YW1w
bGUiKTsKKyAgZ2wgPSBpbml0V2ViR0woImV4YW1wbGUiLCAidnNoYWRlciIsICJmc2hhZGVyIiwg
WyAidlBvc2l0aW9uIl0sIFsgMCwgMCwgMCwgMSBdLCAxKTsKKworICB2YXIgdmVydGV4T2JqZWN0
ID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2
ZXJ0ZXhPYmplY3QpOworICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0
MzJBcnJheShbIDAsMC41LDAsIC0wLjUsLTAuNSwwLCAwLjUsLTAuNSwwIF0pLCBnbC5TVEFUSUNf
RFJBVyk7CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KDApOworICBnbC52ZXJ0ZXhBdHRy
aWJQb2ludGVyKDAsIDMsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisKKyAgZ2wuY2xlYXIoZ2wu
Q09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQpOworICBnbC5kcmF3QXJyYXlz
KGdsLlRSSUFOR0xFUywgMCwgMyk7CisKKworICBmdW5jdGlvbiBjaGVja0RhdGEoYnVmLCBuYW1l
KSB7CisgICAgLy8gVGVzdCBzZXZlcmFsIGxvY2F0aW9ucworICAgIC8vIEZpcnN0IGxpbmUgc2hv
dWxkIGJlIGFsbCBibGFjaworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAg
ICAgaWYgKGJ1ZltpKjRdICE9IDAgfHwgYnVmW2kqNCsxXSAhPSAwIHx8IGJ1ZltpKjQrMl0gIT0g
MCB8fCBidWZbaSo0KzNdICE9IDI1NSkgeworICAgICAgICBmYWlsKGksIDAsIG5hbWUsIGJ1Ziwg
IigwLDAsMCwyNTUpIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBMaW5lIDI1IHNob3VsZCBiZSByZWQgZm9yIGF0IGxlYXN0IDYgcmVkIHBpeGVscyBzdGFydGlu
ZyAyMiBwaXhlbHMgaW4KKyAgICB2YXIgb2Zmc2V0ID0gKDI1KjUwKzIyKSAqIDQ7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCA2OyArK2kpIHsKKyAgICAgIGlmIChidWZbb2Zmc2V0K2kqNF0gIT0g
MjU1IHx8IGJ1ZltvZmZzZXQraSo0KzFdICE9IDAgfHwgYnVmW29mZnNldCtpKjQrMl0gIT0gMCB8
fCBidWZbb2Zmc2V0K2kqNCszXSAhPSAyNTUpIHsKKyAgICAgICAgZmFpbCgyMiArIGksIDI1LCBu
YW1lLCBidWYsICIoMjU1LDAsMCwyNTUpIik7CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBMYXN0IGxpbmUgc2hvdWxkIGJlIGFsbCBibGFjaworICAgIG9mZnNldCA9
ICg0OSo1MCkgKiA0OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgICAg
aWYgKGJ1ZltvZmZzZXQraSo0XSAhPSAwIHx8IGJ1ZltvZmZzZXQraSo0KzFdICE9IDAgfHwgYnVm
W29mZnNldCtpKjQrMl0gIT0gMCB8fCBidWZbb2Zmc2V0K2kqNCszXSAhPSAyNTUpIHsKKyAgICAg
ICAgZmFpbChpLCA0OSwgbmFtZSwgYnVmLCAiKDAsMCwwLDI1NSkiKTsKKyAgICAgICAgcmV0dXJu
OworICAgICAgfQorICAgIH0KKworICAgIHBhc3MobmFtZSk7CisgIH0KKworICBmdW5jdGlvbiBj
aGVja0NvbG9ycygpIHsKKyAgICB2YXIgYnVmID0gbmV3IFVpbnQ4QXJyYXkoNTAgKiA1MCAqIDQp
OworICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgNTAsIDUwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9C
WVRFLCBidWYpOworICAgIGNoZWNrRGF0YShidWYsICIzZCBjb250ZXh0Iik7CisgICAgdmFyIGlt
Z0RhdGEgPSBjdHgyZC5nZXRJbWFnZURhdGEoMCwgMCwgNTAsIDUwKTsKKyAgICBjaGVja0RhdGEo
aW1nRGF0YS5kYXRhLCAiMmQgY29udGV4dCIpOworICB9CisKKyAgdmFyIHRhYmxlID0gWzEsIDIs
IDQsIDhdOworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgdGFibGUubGVuZ3RoOyArK2lpKSB7Cisg
ICAgZ2wucGl4ZWxTdG9yZWkoZ2wuUEFDS19BTElHTk1FTlQsIHRhYmxlW2lpXSk7CisgICAgY3R4
MmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiMmQwIiArIGlpKS5nZXRDb250ZXh0KCIyZCIp
OworICAgIGN0eDJkLmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbiA9ICdjb3B5JzsKKyAgICBjdHgy
ZC5kcmF3SW1hZ2UoY2FudmFzM2QsIDAsIDApOworICAgIGNoZWNrQ29sb3JzKCk7CisgICAgYXNz
ZXJ0TXNnKGdsLmdldFBhcmFtZXRlcihnbC5QQUNLX0FMSUdOTUVOVCkgPT0gdGFibGVbaWldLAor
ICAgICAgICAiUEFDS19BTElHTk1FTlQgaXMgIiArIHRhYmxlW2lpXSk7CisgIH0KK30KKworaW5p
dCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorCis8c2NyaXB0IHNy
Yz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisKKzwvYm9k
eT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61457</attachid>
            <date>2010-07-13 19:13:15 -0700</date>
            <delta_ts>2010-07-15 13:44:11 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>canvas.patch</filename>
            <type>text/plain</type>
            <size>31728</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzI3NCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDctMTMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFV
UkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICBUZXN0czogZmFzdC9jYW52YXMvd2ViZ2wvY2Fu
dmFzLXRlc3QuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxz
dG9yZWkuaHRtbAorCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKTogUGFpbnQgdGhlIFdl
YkdMIHJlbmRlcmluZyByZXN1bHRzIHRvIGNhbnZhcyBpZiBpdCdzIDNkLgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZSk6IFBhaW50IHRoZSBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyB0byBjYW52YXMgaWYgaXQncyAzZCBiZWZvcmUgZHJhd2luZy4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQpOiBNYXJr
IGl0IGFsd2F5cyBmb3IgY2FudmFzMmQuZHJhd0ltYWdlIHB1cnBvc2UuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KTogUGFpbnQgdGhlIFdlYkdMIHJlbmRlcmluZyByZXN1bHRzIHRvIGNhbnZhcyBpZiBpdCdzIGRp
cnR5LgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBEZWNs
YXJlIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDogRGVjbGFyZSBwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcygpICYgcGFpbnRUb0NhbnZhcygpLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMpOiBQYWludCB0aGUgcmVuZGVyZWQgaW1hZ2UgcGl4
ZWxzIHRvIHRoZSBjYW52YXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKTogSW1wbGVtZW50IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
YmVnaW5QYWludCk6IEp1c3QgY2FsbCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyk6IEltcGxlbWVudCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgorCiAyMDEwLTA3
LTEzICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBi
eSBBZGFtIEJhcnRoLgpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0VsZW1lbnQuY3BwCShyZXZpc2lv
biA2MzI3NCkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMyNyw2ICszMjcsMTMgQEAgU3RyaW5nIEhUTUxDYW52YXNFbGVtZW50Ojp0b0Rh
dGFVUkwoY29ucwogCiAgICAgU3RyaW5nIGxvd2VyY2FzZU1pbWVUeXBlID0gbWltZVR5cGUubG93
ZXIoKTsKIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgaWYgKGlzM0QoKSkgeworICAgICAg
ICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQzZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2Vi
R0xSZW5kZXJpbmdDb250ZXh0Kj4ocmVuZGVyaW5nQ29udGV4dCgpKTsKKyAgICAgICAgY29udGV4
dDNkLT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworICAgIH0KKyNlbmRpZgorCiAg
ICAgLy8gRklYTUU6IE1ha2UgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcgdGhy
ZWFkc2FmZSAodG8gYWxsb3cgdGhpcyBtZXRob2QgdG8gYmUgdXNlZCBvbiBhIHdvcmtlciB0aHJl
YWQpLgogICAgIGlmIChtaW1lVHlwZS5pc051bGwoKSB8fCAhTUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWRJbWFnZU1JTUVUeXBlRm9yRW5jb2RpbmcobG93ZXJjYXNlTWltZVR5cGUpKQogICAg
ICAgICByZXR1cm4gYnVmZmVyKCktPnRvRGF0YVVSTCgiaW1hZ2UvcG5nIik7CkluZGV4OiBXZWJD
b3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCShyZXZp
c2lvbiA2MzI3NCkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTAgQEAKICNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKKyNpZiBFTkFCTEUoM0Rf
Q0FOVkFTKQorI2luY2x1ZGUgIldlYkdMUmVuZGVyaW5nQ29udGV4dC5oIgorI2VuZGlmCisKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTExNDMsNiArMTE0
NywxMyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZHJhd0ltYWdlCiAgICAgaWYg
KCFzb3VyY2VDYW52YXMtPm9yaWdpbkNsZWFuKCkpCiAgICAgICAgIGNhbnZhcygpLT5zZXRPcmln
aW5UYWludGVkKCk7CiAKKyNpZiBFTkFCTEUoM0RfQ0FOVkFTKQorICAgIGlmIChzb3VyY2VDYW52
YXMtPmlzM0QoKSkgeworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQzZCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oc291cmNlQ2FudmFzLT5y
ZW5kZXJpbmdDb250ZXh0KCkpOworICAgICAgICBjb250ZXh0M2QtPnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKCk7CisgICAgfQorI2VuZGlmCisKICAgICBjLT5kcmF3SW1hZ2UoYnVmZmVy
LT5pbWFnZSgpLCBEZXZpY2VDb2xvclNwYWNlLCBkZXN0UmVjdCwgc291cmNlUmVjdCwgc3RhdGUo
KS5tX2dsb2JhbENvbXBvc2l0ZSk7CiAgICAgd2lsbERyYXcoZGVzdFJlY3QpOyAvLyBUaGlzIGNh
bGwgY29tZXMgYWZ0ZXIgZHJhd0ltYWdlLCBzaW5jZSB0aGUgYnVmZmVyIHdlIGRyYXcgaW50byBt
YXkgYmUgb3VyIG93biwgYW5kIHdlIG5lZWQgdG8gbWFrZSBzdXJlIGl0IGlzIGRpcnR5LgogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEFyZ3VhYmx5IHdpbGxEcmF3IHNob3VsZCBi
ZWNvbWUgZGlkRHJhdyBhbmQgb2NjdXIgYWZ0ZXIgZHJhd2luZyBjYWxscyBhbmQgbm90IGJlZm9y
ZSB0aGVtIHRvIGF2b2lkIHByb2JsZW1zIGxpa2UgdGhpcy4KSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDYzMjc0KQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDEsMTcgKzE0MSwyMyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6bWFy
a0NvbnRleHRDCiAgICAgUmVuZGVyQm94KiByZW5kZXJCb3ggPSBjYW52YXMoKS0+cmVuZGVyQm94
KCk7CiAgICAgaWYgKHJlbmRlckJveCAmJiByZW5kZXJCb3gtPmhhc0xheWVyKCkgJiYgcmVuZGVy
Qm94LT5sYXllcigpLT5oYXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCkpCiAgICAgICAgIHJlbmRl
ckJveC0+bGF5ZXIoKS0+cmVuZGVyZXJDb250ZW50Q2hhbmdlZCgpOwotICAgIGVsc2UgewogI2Vu
ZGlmCi0gICAgICAgIGlmICghbV9tYXJrZWRDYW52YXNEaXJ0eSkgewotICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoZSBjYW52YXMncyBpbWFnZSBidWZmZXIgaXMgYWxsb2NhdGVkLgotICAgICAg
ICAgICAgY2FudmFzKCktPmJ1ZmZlcigpOwotICAgICAgICAgICAgY2FudmFzKCktPndpbGxEcmF3
KEZsb2F0UmVjdCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdodCgpKSk7
Ci0gICAgICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgfQotI2lm
IFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyAgICBpZiAoIW1fbWFya2VkQ2FudmFzRGly
dHkpIHsKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjYW52YXMncyBpbWFnZSBidWZmZXIgaXMg
YWxsb2NhdGVkLgorICAgICAgICBjYW52YXMoKS0+YnVmZmVyKCk7CisgICAgICAgIGNhbnZhcygp
LT53aWxsRHJhdyhGbG9hdFJlY3QoMCwgMCwgY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5o
ZWlnaHQoKSkpOworICAgICAgICBtX21hcmtlZENhbnZhc0RpcnR5ID0gdHJ1ZTsKICAgICB9Ci0j
ZW5kaWYKK30KKworYm9vbCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKCkKK3sKKyAgICBpZiAobV9tYXJrZWRDYW52YXNEaXJ0eSkgeworICAgICAg
ICBtX21hcmtlZENhbnZhc0RpcnR5ID0gZmFsc2U7CisgICAgICAgIG1fY29udGV4dC0+cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXModGhpcyk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojpi
ZWdpblBhaW50KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250
ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaAkocmV2aXNpb24gNjMyNzQpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVu
ZGVyaW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMDYsNiArMzA2LDEwIEBAIGNsYXNz
IFdlYktpdENTU01hdHJpeDsKICAgICAKICAgICAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwg
aW50IGhlaWdodCk7CiAKKyAgICAgICAgLy8gUmV0dXJuIHZhbHVlIHRydWUgaW5kaWNhdGVzIGNh
bnZhcyBpcyB1cGRhdGVkIGR1cmluZyB0aGUgY2FsbCwKKyAgICAgICAgLy8gZmFsc2UgaW5kaWNh
dGVzIG5vIHVwZGF0ZXMuCisgICAgICAgIGJvb2wgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoKTsKKwogICAgICAgICAvLyBIZWxwZXJzIGZvciBub3RpZmljYXRpb24gYWJvdXQgcGFpbnQg
ZXZlbnRzLgogICAgICAgICB2b2lkIGJlZ2luUGFpbnQoKTsKICAgICAgICAgdm9pZCBlbmRQYWlu
dCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
M0QuaAkocmV2aXNpb24gNjMyNzQpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBo
aWNzQ29udGV4dDNELmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDEwIEBAIHR5cGVkZWYg
aW50IFBsYXRmb3JtM0RPYmplY3Q7CiBjb25zdCBQbGF0Zm9ybTNET2JqZWN0IE51bGxQbGF0Zm9y
bTNET2JqZWN0ID0gMDsKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQ0cpCisjaW5jbHVkZSA8Q29y
ZUdyYXBoaWNzL0NHQ29udGV4dC5oPgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAg
ICBjbGFzcyBXZWJHTEFjdGl2ZUluZm87CiAgICAgY2xhc3MgQXJyYXlCdWZmZXI7CkBAIC03MTAs
NyArNzE0LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCB2aWV3cG9ydChs
b25nIHgsIGxvbmcgeSwgdW5zaWduZWQgbG9uZyB3aWR0aCwgdW5zaWduZWQgbG9uZyBoZWlnaHQp
OwogCiAgICAgICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwotICAgICAg
ICAKKworI2lmIFBMQVRGT1JNKENHKQorICAgICAgICB2b2lkIHBhaW50VG9DYW52YXMoY29uc3Qg
dW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFnZVdpZHRoLCBpbnQgaW1hZ2VIZWln
aHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2FudmFzV2lkdGgsIGludCBjYW52
YXNIZWlnaHQsIENHQ29udGV4dFJlZiBjb250ZXh0KTsKKyNlbmRpZgorCisgICAgICAgIHZvaWQg
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KTsKKwogICAgICAgICAvLyBIZWxwZXJzIGZvciBub3RpZmljYXRpb24gYWJvdXQgcGFpbnQg
ZXZlbnRzCiAgICAgICAgIHZvaWQgYmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQpOwogICAgICAgICB2b2lkIGVuZFBhaW50KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAJKHJldmlzaW9u
IDYzMjc0KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQz
RENHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsOCBAQAogI2luY2x1ZGUgPENvcmVH
cmFwaGljcy9DR0NvbnRleHQuaD4KICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dJbWFnZS5oPgog
CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJv
b2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsCkBAIC0xMDQs
NiArMTA2LDQxIEBAIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJbWEKICAg
ICAgICAgICAgICAgICAgICAgICBmb3JtYXQsIHR5cGUsIG5lZWRlZEFscGhhT3AsIG91dHB1dFZl
Y3Rvci5kYXRhKCkpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFRvQ2FudmFz
KGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdlUGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwgaW50IGlt
YWdlSGVpZ2h0LCBpbnQgY2FudmFzV2lkdGgsIGludCBjYW52YXNIZWlnaHQsIENHQ29udGV4dFJl
ZiBjb250ZXh0KQoreworICAgIGlmICghaW1hZ2VQaXhlbHMgfHwgaW1hZ2VXaWR0aCA8PSAwIHx8
IGltYWdlSGVpZ2h0IDw9IDAgfHwgY2FudmFzV2lkdGggPD0gMCB8fCBjYW52YXNIZWlnaHQgPD0g
MCB8fCAhY29udGV4dCkKKyAgICAgICAgcmV0dXJuOworICAgIGludCByb3dCeXRlcyA9IGltYWdl
V2lkdGggKiA0OworICAgIFJldGFpblB0cjxDR0RhdGFQcm92aWRlclJlZj4gZGF0YVByb3ZpZGVy
ID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0YSgwLCBpbWFnZVBpeGVscywgcm93Qnl0ZXMg
KiBpbWFnZUhlaWdodCwgMCk7CisgICAgUmV0YWluUHRyPENHQ29sb3JTcGFjZVJlZj4gY29sb3JT
cGFjZSA9IENHQ29sb3JTcGFjZUNyZWF0ZURldmljZVJHQigpOworICAgIFJldGFpblB0cjxDR0lt
YWdlUmVmPiBjZ0ltYWdlID0gQ0dJbWFnZUNyZWF0ZShpbWFnZVdpZHRoLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUhlaWdodCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMzIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0J5dGVzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLmdl
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
Q0dJbWFnZUFscGhhUHJlbXVsdGlwbGllZEZpcnN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJIb3N0
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRh
UHJvdmlkZXIuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKKyAgICAvLyBDU1Mgc3R5bGluZyBt
YXkgY2F1c2UgdGhlIGNhbnZhcydzIGNvbnRlbnQgdG8gYmUgcmVzaXplZCBvbgorICAgIC8vIHRo
ZSBwYWdlLiBHbyBiYWNrIHRvIHRoZSBDYW52YXMgdG8gZmlndXJlIG91dCB0aGUgY29ycmVjdAor
ICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgdG8gZHJhdy4KKyAgICBDR1JlY3QgcmVjdCA9IENHUmVj
dE1ha2UoMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzV2lkdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc0hlaWdodCk7CisgICAgLy8gV2Ugd2Fu
dCB0byBjb21wbGV0ZWx5IG92ZXJ3cml0ZSB0aGUgcHJldmlvdXMgZnJhbWUncworICAgIC8vIHJl
bmRlcmluZyByZXN1bHRzLgorICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisgICAg
Q0dDb250ZXh0U2V0QmxlbmRNb2RlKGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
IGtDR0JsZW5kTW9kZUNvcHkpOworICAgIENHQ29udGV4dFNldEludGVycG9sYXRpb25RdWFsaXR5
KGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW50ZXJw
b2xhdGlvbk5vbmUpOworICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICByZWN0LCBjZ0ltYWdlLmdldCgpKTsKKyAgICBDR0NvbnRleHRSZXN0b3Jl
R1N0YXRlKGNvbnRleHQpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNE
TWFjLm1tCShyZXZpc2lvbiA2MzI3NCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zOSwxMCArMzksMTMg
QEAKICNpbmNsdWRlICJXZWJHTEJ1ZmZlci5oIgogI2luY2x1ZGUgIkZsb2F0MzJBcnJheS5oIgog
I2luY2x1ZGUgIldlYkdMRnJhbWVidWZmZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKKyNpbmNsdWRlICJIVE1MQ2FudmFzRWxlbWVudC5oIgogI2luY2x1ZGUgIkludDMyQXJyYXku
aCIKICNpbmNsdWRlICJXZWJHTExheWVyLmgiCiAjaW5jbHVkZSAiV2ViR0xQcm9ncmFtLmgiCiAj
aW5jbHVkZSAiV2ViR0xSZW5kZXJidWZmZXIuaCIKKyNpbmNsdWRlICJXZWJHTFJlbmRlcmluZ0Nv
bnRleHQuaCIKICNpbmNsdWRlICJXZWJHTFNoYWRlci5oIgogI2luY2x1ZGUgIldlYkdMVGV4dHVy
ZS5oIgogI2luY2x1ZGUgIlVpbnQ4QXJyYXkuaCIKQEAgLTIzNyw2ICsyNDAsNTQgQEAgdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZQogICAgIENHTFNldEN1cnJlbnRDb250
ZXh0KG1fY29udGV4dE9iaik7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3sK
KyAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CisgICAg
SW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKKworICAgIGludCBy
b3dCeXRlcyA9IG1fY3VycmVudFdpZHRoICogNDsKKyAgICBpbnQgdG90YWxCeXRlcyA9IHJvd0J5
dGVzICogbV9jdXJyZW50SGVpZ2h0OworCisgICAgT3duQXJyYXlQdHI8dW5zaWduZWQgY2hhcj4g
cGl4ZWxzKG5ldyB1bnNpZ25lZCBjaGFyW3RvdGFsQnl0ZXNdKTsKKyAgICBpZiAoIXBpeGVscykK
KyAgICAgICAgcmV0dXJuOworCisgICAgQ0dMU2V0Q3VycmVudENvbnRleHQobV9jb250ZXh0T2Jq
KTsKKworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk87CisgICAgaWYgKG1fYXR0cnMuYW50aWFsaWFz
KSB7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfUkVBRF9GUkFNRUJVRkZFUl9F
WFQsIG1fbXVsdGlzYW1wbGVGQk8pOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdM
X0RSQVdfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIDo6Z2xCbGl0RnJhbWVidWZm
ZXJFWFQoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgMCwgMCwgbV9jdXJy
ZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQ09MT1JfQlVGRkVSX0JJVCwgR0xfTElORUFS
KTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1f
ZmJvKTsKKyAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGlmIChtX2JvdW5kRkJPICE9IG1fZmJvKSB7CisgICAgICAgICAgICBtdXN0UmVzdG9yZUZC
TyA9IHRydWU7CisgICAgICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgbV9mYm8pOworICAgICAgICB9CisgICAgfQorCisgICAgR0xpbnQgcGFja0FsaWdu
bWVudCA9IDQ7CisgICAgYm9vbCBtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQgPSBmYWxzZTsKKyAg
ICA6OmdsR2V0SW50ZWdlcnYoR0xfUEFDS19BTElHTk1FTlQsICZwYWNrQWxpZ25tZW50KTsKKyAg
ICBpZiAocGFja0FsaWdubWVudCA+IDQpIHsKKyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BB
Q0tfQUxJR05NRU5ULCA0KTsKKyAgICAgICAgbXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gdHJ1
ZTsKKyAgICB9CisKKyAgICA6OmdsUmVhZFBpeGVscygwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9j
dXJyZW50SGVpZ2h0LCBHTF9CR1JBLCBHTF9VTlNJR05FRF9JTlRfOF84XzhfOF9SRVYsIHBpeGVs
cy5nZXQoKSk7CisKKyAgICBpZiAobXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50KQorICAgICAgICA6
OmdsUGl4ZWxTdG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIHBhY2tBbGlnbm1lbnQpOworCisgICAg
aWYgKG11c3RSZXN0b3JlRkJPKQorICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZS
QU1FQlVGRkVSX0VYVCwgbV9ib3VuZEZCTyk7CisKKyAgICBwYWludFRvQ2FudmFzKHBpeGVscy5n
ZXQoKSwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwKKyAgICAgICAgICAgICAgICAg
IGNhbnZhcy0+d2lkdGgoKSwgY2FudmFzLT5oZWlnaHQoKSwgaW1hZ2VCdWZmZXItPmNvbnRleHQo
KS0+cGxhdGZvcm1Db250ZXh0KCkpOworfQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdp
blBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsKICAgICBVTlVTRURfUEFS
QU0oY29udGV4dCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNz
Q29udGV4dDNEUXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHJldmlzaW9uIDYzMjc0KQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTIxLDYgKzUyMSwxNSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4
dEN1cnJlCiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFpbnQoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KQogeworICAgIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KCkKK3sKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQorewogICAgIG1faW50ZXJuYWwtPm1fZ2xXaWRnZXQt
Pm1ha2VDdXJyZW50KCk7CiAgICAgSFRNTENhbnZhc0VsZW1lbnQqIGNhbnZhcyA9IGNvbnRleHQt
PmNhbnZhcygpOwogICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1ZmZlciA9IGNhbnZhcy0+YnVmZmVy
KCk7CkBAIC01MjgsMTAgKzUzNyw2IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJlZ2luUGFp
bnQoV2ViR0wKICAgICBwYWludChwYWludGVyLCBRUmVjdChRUG9pbnQoMCwgMCksIFFTaXplKG1f
Y3VycmVudFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQpKSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmVuZFBhaW50KCkKLXsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnQo
UVBhaW50ZXIqIHBhaW50ZXIsIGNvbnN0IFFSZWN0JiByZWN0KSBjb25zdAogewogI2lmIFFUX1ZF
UlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg0LCA3LCAwKQpJbmRleDogV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZp
c2lvbiA2MzI3NCkKKysrIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxNCBAQAorMjAxMC0wNy0xMyAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYkdM
IHJlbmRlcmluZyByZXN1bHRzIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdG8gQ2FudmFzLnRvRGF0
YVVSTCBhbmQgMkQgZHJhd0ltYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNDcxOQorCisgICAgICAgICogc3JjL0dyYXBoaWNzQ29udGV4dDNELmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50UmVu
ZGVyaW5nUmVzdWx0c1RvQ2FudmFzKTogSW1wbGVtZW50IHBhaW50UmVuZGVyaW5nUmVzdWx0c1Rv
Q2FudmFzKCkuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpi
ZWdpblBhaW50KTogSnVzdCB1c2UgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKS4KKwog
MjAxMC0wNy0xMyAgQ2hyaXMgR3VpbGxvcnkgIDxjaHJpcy5ndWlsbG9yeUBnb29nbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogV2ViS2l0L2Nocm9taXVt
L3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVt
L3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDYzMjc0KQorKysgV2ViS2l0L2No
cm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw2
ICsxMTIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KTsKIAorICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKICAgICB2b2lkIGJlZ2luUGFpbnQoV2ViR0xSZW5kZXJp
bmdDb250ZXh0KiBjb250ZXh0KTsKICAgICB2b2lkIGVuZFBhaW50KCk7CiAKQEAgLTM5OSw3ICs0
MDAsNyBAQCBXZWJHTExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNESW50CiB9CiAjZW5k
aWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBhaW50KFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250
ZXh0KQogewogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMo
KTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwpAQCAt
NDQ5LDQ0ICs0NTAsMjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBh
aQogICAgICAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3QobV9yZXNpemluZ0JpdG1hcCwgMCwgZHN0
KTsKICAgICB9CiAjZWxpZiBQTEFURk9STShDRykKLSAgICBpZiAobV9yZW5kZXJPdXRwdXQpIHsK
LSAgICAgICAgaW50IHJvd0J5dGVzID0gbV9pbXBsLT53aWR0aCgpICogNDsKLSAgICAgICAgQ0dE
YXRhUHJvdmlkZXJSZWYgZGF0YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRoRGF0
YSgwLCBtX3JlbmRlck91dHB1dCwgcm93Qnl0ZXMgKiBtX2ltcGwtPmhlaWdodCgpLCAwKTsKLSAg
ICAgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVEZXZp
Y2VSR0IoKTsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gQ0dJbWFnZUNyZWF0ZShtX2lt
cGwtPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9pbXBsLT5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0J5dGVzLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvdmlkZXIsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKLSAgICAgICAgLy8gQ1NT
IHN0eWxpbmcgbWF5IGNhdXNlIHRoZSBjYW52YXMncyBjb250ZW50IHRvIGJlIHJlc2l6ZWQgb24K
LSAgICAgICAgLy8gdGhlIHBhZ2UuIEdvIGJhY2sgdG8gdGhlIENhbnZhcyB0byBmaWd1cmUgb3V0
IHRoZSBjb3JyZWN0Ci0gICAgICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgdG8gZHJhdy4KLSAgICAg
ICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKDAsIDAsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5jYW52YXMoKS0+d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPmNhbnZhcygpLT5oZWlnaHQoKSk7Ci0gICAgICAgIC8v
IFdlIHdhbnQgdG8gY29tcGxldGVseSBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGZyYW1lJ3MKLSAg
ICAgICAgLy8gcmVuZGVyaW5nIHJlc3VsdHMuCi0gICAgICAgIENHQ29udGV4dFNldEJsZW5kTW9k
ZShpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRleHRT
ZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNv
bnRleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW50
ZXJwb2xhdGlvbk5vbmUpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICByZWN0LCBjZ0ltYWdlKTsKLSAgICAgICAgQ0dJbWFnZVJlbGVhc2UoY2dJbWFnZSk7Ci0gICAg
ICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7Ci0gICAgICAgIENHRGF0YVByb3Zp
ZGVyUmVsZWFzZShkYXRhUHJvdmlkZXIpOwotICAgIH0KKyAgICBpZiAobV9yZW5kZXJPdXRwdXQp
CisgICAgICAgIGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnBhaW50VG9DYW52YXMobV9y
ZW5kZXJPdXRwdXQsIG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMtPndpZHRo
KCksIGNhbnZhcy0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCkpOwogI2Vsc2UKICNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQogI2VuZGlmCiB9
CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludChXZWJHTFJlbmRl
cmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52
YXMoY29udGV4dCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZW5kUGFp
bnQoKQogewogfQpAQCAtMTMyNSw2ICsxMzAyLDcgQEAgREVMRUdBVEVfVE9fSU5URVJOQUxfNih2
ZXJ0ZXhBdHRyaWJQb2ludAogCiBERUxFR0FURV9UT19JTlRFUk5BTF80KHZpZXdwb3J0LCBsb25n
LCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCitERUxFR0FURV9UT19JTlRF
Uk5BTF8xKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzLCBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqKQogREVMRUdBVEVfVE9fSU5URVJOQUxfMShiZWdpblBhaW50LCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqKQogREVMRUdBVEVfVE9fSU5URVJOQUwoZW5kUGFpbnQpCiAKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDYzMjc0KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTUgQEAKKzIwMTAtMDctMTMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCByZW5k
ZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFVUkwg
YW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFz
LXRlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxz
dG9yZWktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9n
bC1waXhlbHN0b3JlaS5odG1sOiBBZGRlZC4KKwogMjAxMC0wNy0xMyAgRXJpYyBTZWlkZWwgIDxl
cmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0LWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJn
bC9jYW52YXMtdGVzdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAK
K1RoaXMgdGVzdCBlbnN1cmVzIFdlYkdMIGltcGxlbWVudGF0aW9ucyBpbnRlcmFjdCBjb3JyZWN0
bHkgd2l0aCB0aGUgY2FudmFzIHRhZy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K0NhbnZhcy5nZXRDb250ZXh0CitQQVNTIGNvbnRleHQgZXhpc3RzCisKK0NoZWNraW5nIGNhbnZh
cyBhbmQgV2ViR0wgaW50ZXJhY3Rpb24KK1BBU1MgY2FudmFzLndpZHRoIGlzIDMwMAorUEFTUyBj
YW52YXMuaGVpZ2h0IGlzIDE1MAorUEFTUyBwaXhlbHMgYXJlIDAsMCwwLDAKK1BBU1MgZ2V0Vmll
d3BvcnQoKSBpcyAiMCwwLDMwMCwxNTAiCisKK2NoYW5nZSBkaXNwbGF5IHNpemUgb2YgY2FudmFz
IGFuZCBzZWUgdGhhdCB2aWV3cG9ydCBkb2VzIG5vdCBjaGFuZ2UKK1BBU1MgZ2V0Vmlld3BvcnQo
KSBpcyAiMCwwLDMwMCwxNTAiCitQQVNTIGNhbnZhcy53aWR0aCBpcyAzMDAKK1BBU1MgY2FudmFz
LmhlaWdodCBpcyAxNTAKKworY2hhbmdlIHRoZSBhY3R1YWwgc2l6ZSBvZiB0aGUgY2FudmFzIGFu
ZCBzZWUgdGhhdCB0aGUgdmlld3BvcnQgZG9lcyBub3QgY2hhbmdlCitQQVNTIHBpeGVscyBhcmUg
NjQsMTI4LDE5MiwyNTUKK1BBU1MgZ2wuY2xlYXJDb2xvciBzaG91bGQgbm90IGNoYW5nZSBhZnRl
ciBjYW52YXMgcmVzaXplCitQQVNTIGdsLmNvbG9yTWFzayBzaG91bGQgbm90IGNoYW5nZSBhZnRl
ciBjYW52YXMgcmVzaXplCitQQVNTIGdldFZpZXdwb3J0KCkgaXMgIjAsMCwzMDAsMTUwIgorUEFT
UyBwaXhlbHMgYXJlIDAsMCwwLDAKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisgCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9j
YW52YXMtdGVzdC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2NhbnZhcy10ZXN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2Nh
bnZhcy93ZWJnbC9jYW52YXMtdGVzdC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwMyBA
QAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlv
bmFsLy9FTiIKKyAgImh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRt
bD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0
L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPgorPHRpdGxlPldlYkdMIENhbnZhcyBDb25mb3JtYW5jZSBU
ZXN0czwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3dlYmds
LXRlc3QuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJkZXNjcmlwdGlv
biI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKzxjYW52YXMgaWQ9ImNhbnZhcyIg
c3R5bGU9IndpZHRoOiA1MHB4OyBoZWlnaHQ6IDUwcHg7Ij4gPC9jYW52YXM+Cis8Y2FudmFzIGlk
PSJjYW52YXMyZCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIj4gPC9jYW52YXM+Cis8c2NyaXB0Pgor
CitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgIGxheW91dFRlc3RDb250cm9s
bGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViR0xFbmFibGVkIiwgIjEiKTsKKyAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7Cit9CisKK2Rlc2NyaXB0aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyBXZWJH
TCBpbXBsZW1lbnRhdGlvbnMgaW50ZXJhY3QgY29ycmVjdGx5IHdpdGggdGhlIGNhbnZhcyB0YWcu
Iik7CisKK2RlYnVnKCIiKTsKK2RlYnVnKCJDYW52YXMuZ2V0Q29udGV4dCIpOworCit2YXIgY2Fu
dmFzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhcyIpOwordmFyIGNhbnZhczJkID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhczJkIik7Cit2YXIgY3R4MmQgPSBjYW52YXMy
ZC5nZXRDb250ZXh0KCIyZCIpOwordmFyIGdsID0gbnVsbDsKK3RyeSB7CisgIGdsID0gY2FudmFz
LmdldENvbnRleHQoImV4cGVyaW1lbnRhbC13ZWJnbCIpOworfSBjYXRjaChlKSB7fQoraWYgKCFn
bCkgeworICB0cnkgeworICAgIGdsID0gY2FudmFzLmdldENvbnRleHQoIndlYmtpdC0zZCIpOwor
ICB9IGNhdGNoKGUpIHt9Cit9CitpZiAoIWdsKSB7CisgIHRlc3RGYWlsZWQoImNvbnRleHQgZG9l
cyBub3QgZXhpc3QiKTsKK30gZWxzZSB7CisgIHRlc3RQYXNzZWQoImNvbnRleHQgZXhpc3RzIik7
CisKKyAgZGVidWcoIiIpOworICBkZWJ1ZygiQ2hlY2tpbmcgY2FudmFzIGFuZCBXZWJHTCBpbnRl
cmFjdGlvbiIpOworCisgIC8vIENoZWNrIHRoYXQgYSBjYW52YXMgd2l0aCBubyB3aWR0aCBvciBo
ZWlnaHQgaXMgMzAweDE1MCBwaXhlbHMKKyAgc2hvdWxkQmUoJ2NhbnZhcy53aWR0aCcsICczMDAn
KTsKKyAgc2hvdWxkQmUoJ2NhbnZhcy5oZWlnaHQnLCAnMTUwJyk7CisKKyAgLy8gQ2hlY2sgZ2V0
IGEgNCB2YWx1ZSBnbCBwYXJhbWV0ZXIgYXMgYSBjc3Ygc3RyaW5nLgorICBmdW5jdGlvbiBnZXRW
YWx1ZTR2KG5hbWUpIHsKKyAgICB2YXIgdiA9IGdsLmdldFBhcmFtZXRlcihuYW1lKTsKKyAgICB2
YXIgcmVzdWx0ID0gJycgKworICAgICAgICB2WzBdICsgJywnICsKKyAgICAgICAgdlsxXSArICcs
JyArCisgICAgICAgIHZbMl0gKyAnLCcgKworICAgICAgICB2WzNdOworICAgIHJldHVybiByZXN1
bHQ7CisgIH0KKworICBmdW5jdGlvbiBnZXRWaWV3cG9ydCgpIHsKKyAgICByZXR1cm4gZ2V0VmFs
dWU0dihnbC5WSUVXUE9SVCk7CisgIH0KKworICBmdW5jdGlvbiBnZXRDbGVhckNvbG9yKCkgewor
ICAgIHJldHVybiBnZXRWYWx1ZTR2KGdsLkNPTE9SX0NMRUFSX1ZBTFVFKTsKKyAgfQorCisgIGZ1
bmN0aW9uIGlzQWJvdXRFcXVhbChhLCBiKSB7CisgICAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8
IDAuMDE7CisgIH0KKworICBmdW5jdGlvbiBpc0Fib3V0RXF1YWxJbnQoYSwgYikgeworICAgIHJl
dHVybiBNYXRoLmFicyhhIC0gYikgPCAzOworICB9CisKKyAgZnVuY3Rpb24gY2hlY2tDYW52YXND
b250ZW50SXMocjNkLGczZCxiM2QsYTNkKSB7CisgICAgdmFyIHIyZDsKKyAgICB2YXIgZzJkOwor
ICAgIHZhciBiMmQ7CisgICAgdmFyIGEyZDsKKworICAgIGZ1bmN0aW9uIGNoZWNrUGl4ZWwoeCwg
eSwgcjNkLGczZCxiM2QsYTNkKSB7CisgICAgICB2YXIgb2Zmc2V0ID0gKHkgKiA0MCArIHgpICog
NDsKKyAgICAgIHIyZCA9IGltZ0RhdGEuZGF0YVtvZmZzZXRdOworICAgICAgZzJkID0gaW1nRGF0
YS5kYXRhW29mZnNldCArIDFdOworICAgICAgYjJkID0gaW1nRGF0YS5kYXRhW29mZnNldCArIDJd
OworICAgICAgYTJkID0gaW1nRGF0YS5kYXRhW29mZnNldCArIDNdOworICAgICAgLy9kZWJ1Zygn
JyArIHggKyAnLCAnICsgeSArICIoIiArIG9mZnNldCArICIpID0gIiArIHIyZCArICIsICIgKyBn
MmQgKyAiLCAiICsgYjJkICsgIiwgIiArIGEyZCk7CisgICAgICByZXR1cm4gaXNBYm91dEVxdWFs
SW50KHIyZCwgcjNkKSAmJgorICAgICAgICAgICAgIGlzQWJvdXRFcXVhbEludChnMmQsIGczZCkg
JiYKKyAgICAgICAgICAgICBpc0Fib3V0RXF1YWxJbnQoYjJkLCBiM2QpICYmCisgICAgICAgICAg
ICAgaXNBYm91dEVxdWFsSW50KGEyZCwgYTNkKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBjaGVj
a1BpeGVscyhyM2QsZzNkLGIzZCxhM2QpIHsKKyAgICAgIHJldHVybiBjaGVja1BpeGVsKDAsIDAs
IHIzZCwgZzNkLCBiM2QsIGEzZCkgJiYKKyAgICAgICAgICAgICBjaGVja1BpeGVsKDAsIDM5LCBy
M2QsIGczZCwgYjNkLCBhM2QpICYmCisgICAgICAgICAgICAgY2hlY2tQaXhlbCgzOSwgMCwgcjNk
LCBnM2QsIGIzZCwgYTNkKSAmJgorICAgICAgICAgICAgIGNoZWNrUGl4ZWwoMzksIDM5LCByM2Qs
IGczZCwgYjNkLCBhM2QpOworICAgIH07CisKKyAgICAvLyBTZXQgdG8ganVzdCB0YWtlIHRoZSBj
b2xvciBmcm9tIHRoZSAzZCBjYW52YXMKKyAgICBjdHgyZC5nbG9iYWxDb21wb3NpdGVPcGVyYXRp
b24gPSAnY29weSc7CisKKyAgICAvLyBmaWxsIDJkIGNhbnZhcyB3aXRoIG9yYW5nZQorICAgIGN0
eDJkLmZpbGxTdHlsZSA9ICJyZ2IoMjU1LDE5MiwxMjgpIjsKKyAgICBjdHgyZC5maWxsUmVjdCAo
MCwgMCwgNDAsIDQwKTsKKworICAgIC8vIGdldCB0aGUgaW1hZ2UgZGF0YQorICAgIHZhciBpbWdE
YXRhID0gY3R4MmQuZ2V0SW1hZ2VEYXRhKDAsIDAsIDQwLCA0MCk7CisKKyAgICAvLyBjaGVjayBp
dCBnb3QgY2xlYXJlZC4KKyAgICBpZiAoIWNoZWNrUGl4ZWxzKDI1NSwgMTkyLCAxMjgsIDI1NSkp
IHsKKyAgICAgIHRlc3RGYWlsZWQoInVuYWJsZSB0byBmaWxsIDJkIGNvbnRleHQuIik7CisgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gZHJhdyAzZCBjYW52YXMgb24gdG9wLgorICAgIGN0
eDJkLmRyYXdJbWFnZShjYW52YXMsIDAsIDAsIDQwLCA0MCk7CisKKyAgICAvLyBnZXQgdGhlIGlt
YWdlIGRhdGEKKyAgICB2YXIgaW1nRGF0YSA9IGN0eDJkLmdldEltYWdlRGF0YSgwLCAwLCA0MCwg
NDApOworCisgICAgLy8gQ2hlY2sgaXQncyB0aGUgZXhwZWN0ZWQgY29sb3IuCisgICAgaWYgKCFj
aGVja1BpeGVscyhyM2QsIGczZCwgYjNkLCBhM2QpKSB7CisgICAgICB0ZXN0RmFpbGVkKCJwaXhl
bHMgYXJlICIgKyByMmQgKyAiLCIgKyBnMmQgKyAiLCIgKyBiMmQgKyAiLCIgKyBhMmQgKworICAg
ICAgICAgICAgICAgICAiIGV4cGVjdGVkICIgKyByM2QgKyAiLCIgKyBnM2QgKyAiLCIgKyBiM2Qg
KyAiLCIgKyBhM2QpOworICAgIH0gZWxzZSB7CisgICAgICB0ZXN0UGFzc2VkKCJwaXhlbHMgYXJl
ICIgKyByM2QgKyAiLCIgKyBnM2QgKyAiLCIgKyBiM2QgKyAiLCIgKyBhM2QpOworICAgIH0KKyAg
fQorCisgIGNoZWNrQ2FudmFzQ29udGVudElzKDAsIDAsIDAsIDApOworICBzaG91bGRCZSgnZ2V0
Vmlld3BvcnQoKScsICciMCwwLDMwMCwxNTAiJyk7CisKKyAgLy8gQ2hhbmdlIHRoZSBkaXNwbGF5
IHNpemUgb2YgdGhlIGNhbnZhcyBhbmQgY2hlY2sKKyAgLy8gdGhlIHZpZXdwb3J0IHNpemUgZG9l
cyBub3QgY2hhbmdlLgorICBkZWJ1ZygiIik7CisgIGRlYnVnKCJjaGFuZ2UgZGlzcGxheSBzaXpl
IG9mIGNhbnZhcyBhbmQgc2VlIHRoYXQgdmlld3BvcnQgZG9lcyBub3QgY2hhbmdlIik7CisgIGNh
bnZhcy5zdHlsZS53aWR0aCA9ICIxMDBweCI7CisgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSAiMjVw
eCI7CisgIHZhciBpbnRlcnZhbElkOworICBpbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFs
KGZ1bmN0aW9uKCkgeworICAgIGlmIChjYW52YXMuY2xpZW50V2lkdGggPT0gMTAwICYmCisgICAg
ICAgIGNhbnZhcy5jbGllbnRIZWlnaHQgPT0gMjUpIHsKKyAgICAgIHdpbmRvdy5jbGVhckludGVy
dmFsKGludGVydmFsSWQpOworICAgICAgc2hvdWxkQmUoJ2dldFZpZXdwb3J0KCknLCAnIjAsMCwz
MDAsMTUwIicpOworICAgICAgc2hvdWxkQmUoJ2NhbnZhcy53aWR0aCcsICczMDAnKTsKKyAgICAg
IHNob3VsZEJlKCdjYW52YXMuaGVpZ2h0JywgJzE1MCcpOworCisgICAgICAvLyBDaGFuZ2UgdGhl
IGFjdHVhbCBzaXplIG9mIHRoZSBjYW52YXMKKyAgICAgIC8vIENoZWNrIHRoYXQgdGhlIHZpZXdw
b3J0IGRvZXMgbm90IGNoYW5nZS4KKyAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGNsZWFyIGNvbG9y
IGRvZXMgbm90IGNoYW5nZS4KKyAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGNvbG9yIG1hc2sgZG9l
cyBub3QgY2hhbmdlLgorICAgICAgZGVidWcoIiIpOworICAgICAgZGVidWcoImNoYW5nZSB0aGUg
YWN0dWFsIHNpemUgb2YgdGhlIGNhbnZhcyBhbmQgc2VlIHRoYXQgdGhlIHZpZXdwb3J0IGRvZXMg
bm90IGNoYW5nZSIpOworICAgICAgZ2wuY2xlYXJDb2xvcigwLjI1LCAwLjUsIDAuNzUsIDEpOwor
ICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZFUl9CSVQp
OworICAgICAgY2hlY2tDYW52YXNDb250ZW50SXMoNjQsIDEyOCwgMTkyLCAyNTUpOworICAgICAg
Z2wuY29sb3JNYXNrKDAsMCwwLDApOworICAgICAgY2FudmFzLndpZHRoID0gNDAwOworICAgICAg
Y2FudmFzLmhlaWdodCA9IDEwOworCisgICAgICB2YXIgdiA9IGdsLmdldFBhcmFtZXRlcihnbC5D
T0xPUl9DTEVBUl9WQUxVRSk7CisgICAgICBhc3NlcnRNc2coaXNBYm91dEVxdWFsKHZbMF0sIDAu
MjUpICYmCisgICAgICAgICAgICAgICAgaXNBYm91dEVxdWFsKHZbMV0sIDAuNSkgJiYKKyAgICAg
ICAgICAgICAgICBpc0Fib3V0RXF1YWwodlsyXSwgMC43NSkgJiYKKyAgICAgICAgICAgICAgICBp
c0Fib3V0RXF1YWwodlszXSwgMSksCisgICAgICAgICAgICAgICAgImdsLmNsZWFyQ29sb3Igc2hv
dWxkIG5vdCBjaGFuZ2UgYWZ0ZXIgY2FudmFzIHJlc2l6ZSIpOworICAgICAgdiA9IGdsLmdldFBh
cmFtZXRlcihnbC5DT0xPUl9XUklURU1BU0spOworICAgICAgYXNzZXJ0TXNnKGlzQWJvdXRFcXVh
bCh2WzBdLCAwKSAmJgorICAgICAgICAgICAgICAgIGlzQWJvdXRFcXVhbCh2WzFdLCAwKSAmJgor
ICAgICAgICAgICAgICAgIGlzQWJvdXRFcXVhbCh2WzJdLCAwKSAmJgorICAgICAgICAgICAgICAg
IGlzQWJvdXRFcXVhbCh2WzNdLCAwKSwKKyAgICAgICAgICAgICAgICAiZ2wuY29sb3JNYXNrIHNo
b3VsZCBub3QgY2hhbmdlIGFmdGVyIGNhbnZhcyByZXNpemUiKTsKKyAgICAgIHNob3VsZEJlKCdn
ZXRWaWV3cG9ydCgpJywgJyIwLDAsMzAwLDE1MCInKTsKKyAgICAgIGNoZWNrQ2FudmFzQ29udGVu
dElzKDAsIDAsIDAsIDApOworCisgICAgICBkZWJ1ZygiIik7CisgICAgICBzdWNjZXNzZnVsbHlQ
YXJzZWQgPSB0cnVlOworCisgICAgICB2YXIgZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJzY3JpcHQiKTsKKyAgICAgIGVwaWxvZ3VlLm9ubG9hZCA9IGZpbmlzaDsKKyAgICAgIGVw
aWxvZ3VlLnNyYyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKKyAgICAg
IGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZXBpbG9ndWUpOworICAgIH0KKyAgfSwgMTAwMC8z
MCk7Cit9CisKK2Z1bmN0aW9uIGZpbmlzaCgpIHsKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsK
KyAgICB9Cit9CisKKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWktZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
Z2wtcGl4ZWxzdG9yZWktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxIEBA
CisgICAgCitUaGVyZSBzaG91bGQgYmUgNSByZWQgdHJpYW5nbGVzIG9uIDUgYmxhY2sgc3F1YXJl
cyBhYm92ZQorCitUaGlzIHRlc3QgY2hlY2tzIHRoYXQgZHJhd0ltYWdlIGFuZCByZWFkUGl4ZWxz
IGFyZSBub3QgZWZmZWN0ZWQgYnkgZ2wuUGl4ZWxzdG9yZWkoZ2wuUEFDS19BTElHTk1FTlQpIGFu
ZCB2aXNhIHZlcnNhCisKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDNkIGNvbnRleHQKK1BB
U1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDJkIGNvbnRleHQKK1BBU1MgUEFDS19BTElHTk1FTlQg
aXMgMQorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gM2QgY29udGV4dAorUEFTUyBkcmF3aW5n
IGlzIGNvcnJlY3QgaW4gMmQgY29udGV4dAorUEFTUyBQQUNLX0FMSUdOTUVOVCBpcyAyCitQQVNT
IGRyYXdpbmcgaXMgY29ycmVjdCBpbiAzZCBjb250ZXh0CitQQVNTIGRyYXdpbmcgaXMgY29ycmVj
dCBpbiAyZCBjb250ZXh0CitQQVNTIFBBQ0tfQUxJR05NRU5UIGlzIDQKK1BBU1MgZHJhd2luZyBp
cyBjb3JyZWN0IGluIDNkIGNvbnRleHQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDJkIGNv
bnRleHQKK1BBU1MgUEFDS19BTElHTk1FTlQgaXMgOAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2dsLXBpeGVsc3RvcmVpLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWkuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLmh0bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTIxIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhU
TUwgNC4wMSBUcmFuc2l0aW9uYWwvL0VOIgorICAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQv
bG9vc2UuZHRkIj4KKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+V2ViR0wgcGl4ZWxTdG9yZWkgVGVz
dDwvdGl0bGU+Cis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXN0eWxlLmNzcyIvPgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9q
cy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL3V0aWxzM2Qu
anMiPiA8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+IDwv
c2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0iNTAi
IGhlaWdodD0iNTAiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iMmQwMCIgd2lkdGg9IjUwIiBoZWln
aHQ9IjUwIj48L2NhbnZhcz4KKzxjYW52YXMgaWQ9IjJkMDEiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1
MCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSIyZDAyIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAiPjwv
Y2FudmFzPgorPGNhbnZhcyBpZD0iMmQwMyIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZh
cz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2
PgorPHNjcmlwdCBpZD0idnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorYXR0cmli
dXRlIHZlYzQgdlBvc2l0aW9uOwordm9pZCBtYWluKCkgeworICBnbF9Qb3NpdGlvbiA9IHZQb3Np
dGlvbjsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNoYWRl
ci94LWZyYWdtZW50Ij4KK3ZvaWQgbWFpbigpIHsKKyAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAs
MC4wLDAuMCwxLjApOworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBmYWlsKHgs
eSwgbmFtZSwgYnVmLCBzaG91bGRCZSkgeworICB2YXIgaSA9ICh5KjUwK3gpICogNDsKKyAgdmFy
IHJlYXNvbiA9ICJwaXhlbCBpbiAiK25hbWUrIiBhdCAoIit4KyIsIit5KyIpIGlzICgiK2J1Zltp
XSsiLCIrYnVmW2krMV0rIiwiK2J1ZltpKzJdKyIsIitidWZbaSszXSsiKSwgc2hvdWxkIGJlICIr
c2hvdWxkQmU7CisgIGFzc2VydE1zZyhmYWxzZSwgcmVhc29uKTsKK30KKworZnVuY3Rpb24gcGFz
cyhuYW1lKSB7CisgIGFzc2VydE1zZyh0cnVlLCAiZHJhd2luZyBpcyBjb3JyZWN0IGluICIgKyBu
YW1lKTsKK30KKworZnVuY3Rpb24gaW5pdCgpIHsKKyAgZGVidWcoIlRoZXJlIHNob3VsZCBiZSA1
IHJlZCB0cmlhbmdsZXMgb24gNSBibGFjayBzcXVhcmVzIGFib3ZlIik7CisgIGRlYnVnKCIiKTsK
KworICBkZWJ1ZygiVGhpcyB0ZXN0IGNoZWNrcyB0aGF0IGRyYXdJbWFnZSBhbmQgcmVhZFBpeGVs
cyBhcmUgbm90IGVmZmVjdGVkIGJ5IGdsLlBpeGVsc3RvcmVpKGdsLlBBQ0tfQUxJR05NRU5UKSBh
bmQgdmlzYSB2ZXJzYSIpOworICBkZWJ1ZygiIik7CisKKyAgdmFyIGNhbnZhczNkID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImV4YW1wbGUiKTsKKyAgZ2wgPSBpbml0V2ViR0woImV4YW1wbGUi
LCAidnNoYWRlciIsICJmc2hhZGVyIiwgWyAidlBvc2l0aW9uIl0sIFsgMCwgMCwgMCwgMSBdLCAx
KTsKKworICB2YXIgdmVydGV4T2JqZWN0ID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgIGdsLmJpbmRC
dWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCB2ZXJ0ZXhPYmplY3QpOworICBnbC5idWZmZXJEYXRhKGds
LkFSUkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShbIDAsMC41LDAsIC0wLjUsLTAuNSwwLCAw
LjUsLTAuNSwwIF0pLCBnbC5TVEFUSUNfRFJBVyk7CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KDApOworICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKDAsIDMsIGdsLkZMT0FULCBmYWxzZSwg
MCwgMCk7CisKKyAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JVRkZF
Ul9CSVQpOworICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgMyk7CisKKworICBmdW5j
dGlvbiBjaGVja0RhdGEoYnVmLCBuYW1lKSB7CisgICAgLy8gVGVzdCBzZXZlcmFsIGxvY2F0aW9u
cworICAgIC8vIEZpcnN0IGxpbmUgc2hvdWxkIGJlIGFsbCBibGFjaworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgNTA7ICsraSkgeworICAgICAgaWYgKGJ1ZltpKjRdICE9IDAgfHwgYnVmW2kqNCsx
XSAhPSAwIHx8IGJ1ZltpKjQrMl0gIT0gMCB8fCBidWZbaSo0KzNdICE9IDI1NSkgeworICAgICAg
ICBmYWlsKGksIDAsIG5hbWUsIGJ1ZiwgIigwLDAsMCwyNTUpIik7CisgICAgICAgIHJldHVybjsK
KyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBMaW5lIDI1IHNob3VsZCBiZSByZWQgZm9yIGF0IGxl
YXN0IDYgcmVkIHBpeGVscyBzdGFydGluZyAyMiBwaXhlbHMgaW4KKyAgICB2YXIgb2Zmc2V0ID0g
KDI1KjUwKzIyKSAqIDQ7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA2OyArK2kpIHsKKyAgICAg
IGlmIChidWZbb2Zmc2V0K2kqNF0gIT0gMjU1IHx8IGJ1ZltvZmZzZXQraSo0KzFdICE9IDAgfHwg
YnVmW29mZnNldCtpKjQrMl0gIT0gMCB8fCBidWZbb2Zmc2V0K2kqNCszXSAhPSAyNTUpIHsKKyAg
ICAgICAgZmFpbCgyMiArIGksIDI1LCBuYW1lLCBidWYsICIoMjU1LDAsMCwyNTUpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvLyBMYXN0IGxpbmUgc2hvdWxkIGJl
IGFsbCBibGFjaworICAgIG9mZnNldCA9ICg0OSo1MCkgKiA0OworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgNTA7ICsraSkgeworICAgICAgaWYgKGJ1ZltvZmZzZXQraSo0XSAhPSAwIHx8IGJ1Zltv
ZmZzZXQraSo0KzFdICE9IDAgfHwgYnVmW29mZnNldCtpKjQrMl0gIT0gMCB8fCBidWZbb2Zmc2V0
K2kqNCszXSAhPSAyNTUpIHsKKyAgICAgICAgZmFpbChpLCA0OSwgbmFtZSwgYnVmLCAiKDAsMCww
LDI1NSkiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKworICAgIHBhc3MobmFt
ZSk7CisgIH0KKworICBmdW5jdGlvbiBjaGVja0NvbG9ycygpIHsKKyAgICB2YXIgYnVmID0gbmV3
IFVpbnQ4QXJyYXkoNTAgKiA1MCAqIDQpOworICAgIGdsLnJlYWRQaXhlbHMoMCwgMCwgNTAsIDUw
LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBidWYpOworICAgIGNoZWNrRGF0YShidWYsICIz
ZCBjb250ZXh0Iik7CisgICAgdmFyIGltZ0RhdGEgPSBjdHgyZC5nZXRJbWFnZURhdGEoMCwgMCwg
NTAsIDUwKTsKKyAgICBjaGVja0RhdGEoaW1nRGF0YS5kYXRhLCAiMmQgY29udGV4dCIpOworICB9
CisKKyAgdmFyIHRhYmxlID0gWzEsIDIsIDQsIDhdOworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwg
dGFibGUubGVuZ3RoOyArK2lpKSB7CisgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuUEFDS19BTElHTk1F
TlQsIHRhYmxlW2lpXSk7CisgICAgY3R4MmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiMmQw
IiArIGlpKS5nZXRDb250ZXh0KCIyZCIpOworICAgIGN0eDJkLmdsb2JhbENvbXBvc2l0ZU9wZXJh
dGlvbiA9ICdjb3B5JzsKKyAgICBjdHgyZC5kcmF3SW1hZ2UoY2FudmFzM2QsIDAsIDApOworICAg
IGNoZWNrQ29sb3JzKCk7CisgICAgYXNzZXJ0TXNnKGdsLmdldFBhcmFtZXRlcihnbC5QQUNLX0FM
SUdOTUVOVCkgPT0gdGFibGVbaWldLAorICAgICAgICAiUEFDS19BTElHTk1FTlQgaXMgIiArIHRh
YmxlW2lpXSk7CisgIH0KK30KKworaW5pdCgpOworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
Kzwvc2NyaXB0PgorCis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+CisKKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61712</attachid>
            <date>2010-07-15 13:44:11 -0700</date>
            <delta_ts>2010-07-15 16:49:51 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>canvas.patch</filename>
            <type>text/plain</type>
            <size>31016</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzQ1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMTAtMDctMTMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFV
UkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICBUZXN0czogZmFzdC9jYW52YXMvd2ViZ2wvY2Fu
dmFzLXRlc3QuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxz
dG9yZWkuaHRtbAorCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKTogUGFpbnQgdGhlIFdl
YkdMIHJlbmRlcmluZyByZXN1bHRzIHRvIGNhbnZhcyBpZiBpdCdzIDNkLgorICAgICAgICAqIGh0
bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZSk6IFBhaW50IHRoZSBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyB0byBjYW52YXMgaWYgaXQncyAzZCBiZWZvcmUgZHJhd2luZy4KKyAg
ICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENoYW5nZWQpOiBNYXJr
IGl0IGFsd2F5cyBmb3IgY2FudmFzMmQuZHJhd0ltYWdlIHB1cnBvc2UuCisgICAgICAgIChXZWJD
b3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFz
KTogUGFpbnQgdGhlIFdlYkdMIHJlbmRlcmluZyByZXN1bHRzIHRvIGNhbnZhcyBpZiBpdCdzIGRp
cnR5LgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oOiBEZWNs
YXJlIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDogRGVjbGFyZSBwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcygpICYgcGFpbnRUb0NhbnZhcygpLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMpOiBQYWludCB0aGUgcmVuZGVyZWQgaW1hZ2UgcGl4
ZWxzIHRvIHRoZSBjYW52YXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBo
aWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKTogSW1wbGVtZW50IHBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvR3JhcGhp
Y3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
YmVnaW5QYWludCk6IEp1c3QgY2FsbCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyk6IEltcGxlbWVudCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgorCiAyMDEwLTA3
LTE1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTENhbnZhc0Vs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5j
cHAJKHJldmlzaW9uIDYzNDUyKQorKysgV2ViQ29yZS9odG1sL0hUTUxDYW52YXNFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDYgKzMyNywxMyBAQCBTdHJpbmcgSFRNTENhbnZhc0Vs
ZW1lbnQ6OnRvRGF0YVVSTChjb25zCiAKICAgICBTdHJpbmcgbG93ZXJjYXNlTWltZVR5cGUgPSBt
aW1lVHlwZS5sb3dlcigpOwogCisjaWYgRU5BQkxFKDNEX0NBTlZBUykKKyAgICBpZiAoaXMzRCgp
KSB7CisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dDNkID0gcmVpbnRlcnBy
ZXRfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihyZW5kZXJpbmdDb250ZXh0KCkpOworICAg
ICAgICBjb250ZXh0M2QtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisgICAgfQor
I2VuZGlmCisKICAgICAvLyBGSVhNRTogTWFrZSBpc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JF
bmNvZGluZyB0aHJlYWRzYWZlICh0byBhbGxvdyB0aGlzIG1ldGhvZCB0byBiZSB1c2VkIG9uIGEg
d29ya2VyIHRocmVhZCkuCiAgICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpIHx8ICFNSU1FVHlwZVJl
Z2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhsb3dlcmNhc2VNaW1l
VHlwZSkpCiAgICAgICAgIHJldHVybiBidWZmZXIoKS0+dG9EYXRhVVJMKCJpbWFnZS9wbmciKTsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RC5jcHAJKHJldmlzaW9uIDYzNDUyKQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2MywxMCBAQAogI2lu
Y2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAorI2lm
IEVOQUJMRSgzRF9DQU5WQVMpCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCisj
ZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAt
MTE1Nyw2ICsxMTYxLDEzIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpkcmF3SW1h
Z2UKICAgICBpZiAoIXNvdXJjZUNhbnZhcy0+b3JpZ2luQ2xlYW4oKSkKICAgICAgICAgY2FudmFz
KCktPnNldE9yaWdpblRhaW50ZWQoKTsKIAorI2lmIEVOQUJMRSgzRF9DQU5WQVMpCisgICAgaWYg
KHNvdXJjZUNhbnZhcy0+aXMzRCgpKSB7CisgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dDNkID0gcmVpbnRlcnByZXRfY2FzdDxXZWJHTFJlbmRlcmluZ0NvbnRleHQqPihzb3Vy
Y2VDYW52YXMtPnJlbmRlcmluZ0NvbnRleHQoKSk7CisgICAgICAgIGNvbnRleHQzZC0+cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIGMtPmRyYXdJ
bWFnZShidWZmZXItPmltYWdlKCksIERldmljZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzb3VyY2VS
ZWN0LCBzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlKTsKICAgICB3aWxsRHJhdyhkZXN0UmVjdCk7
IC8vIFRoaXMgY2FsbCBjb21lcyBhZnRlciBkcmF3SW1hZ2UsIHNpbmNlIHRoZSBidWZmZXIgd2Ug
ZHJhdyBpbnRvIG1heSBiZSBvdXIgb3duLCBhbmQgd2UgbmVlZCB0byBtYWtlIHN1cmUgaXQgaXMg
ZGlydHkuCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQXJndWFibHkgd2lsbERy
YXcgc2hvdWxkIGJlY29tZSBkaWREcmF3IGFuZCBvY2N1ciBhZnRlciBkcmF3aW5nIGNhbGxzIGFu
ZCBub3QgYmVmb3JlIHRoZW0gdG8gYXZvaWQgcHJvYmxlbXMgbGlrZSB0aGlzLgpJbmRleDogV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24g
NjM0NTIpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MSwxNyArMTQxLDIzIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjptYXJrQ29udGV4dEMKICAgICBSZW5kZXJCb3gqIHJlbmRlckJveCA9IGNhbnZhcygp
LT5yZW5kZXJCb3goKTsKICAgICBpZiAocmVuZGVyQm94ICYmIHJlbmRlckJveC0+aGFzTGF5ZXIo
KSAmJiByZW5kZXJCb3gtPmxheWVyKCktPmhhc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKSkKICAg
ICAgICAgcmVuZGVyQm94LT5sYXllcigpLT5yZW5kZXJlckNvbnRlbnRDaGFuZ2VkKCk7Ci0gICAg
ZWxzZSB7CiAjZW5kaWYKLSAgICAgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KSB7Ci0gICAg
ICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNhbnZhcydzIGltYWdlIGJ1ZmZlciBpcyBhbGxvY2F0
ZWQuCi0gICAgICAgICAgICBjYW52YXMoKS0+YnVmZmVyKCk7Ci0gICAgICAgICAgICBjYW52YXMo
KS0+d2lsbERyYXcoRmxvYXRSZWN0KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+
aGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVlOwotICAg
ICAgICB9Ci0jaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIGlmICghbV9tYXJr
ZWRDYW52YXNEaXJ0eSkgeworICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGNhbnZhcydzIGltYWdl
IGJ1ZmZlciBpcyBhbGxvY2F0ZWQuCisgICAgICAgIGNhbnZhcygpLT5idWZmZXIoKTsKKyAgICAg
ICAgY2FudmFzKCktPndpbGxEcmF3KEZsb2F0UmVjdCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwg
Y2FudmFzKCktPmhlaWdodCgpKSk7CisgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSB0cnVl
OwogICAgIH0KLSNlbmRpZgorfQorCitib29sIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoKQoreworICAgIGlmIChtX21hcmtlZENhbnZhc0RpcnR5
KSB7CisgICAgICAgIG1fbWFya2VkQ2FudmFzRGlydHkgPSBmYWxzZTsKKyAgICAgICAgbV9jb250
ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyh0aGlzKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQ6OmJlZ2luUGFpbnQoKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiA2MzQ1MikKKysrIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwNiw2ICszMDYs
MTAgQEAgY2xhc3MgV2ViS2l0Q1NTTWF0cml4OwogICAgIAogICAgICAgICB2b2lkIHJlc2hhcGUo
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKIAorICAgICAgICAvLyBSZXR1cm4gdmFsdWUgdHJ1ZSBp
bmRpY2F0ZXMgY2FudmFzIGlzIHVwZGF0ZWQgZHVyaW5nIHRoZSBjYWxsLAorICAgICAgICAvLyBm
YWxzZSBpbmRpY2F0ZXMgbm8gdXBkYXRlcy4KKyAgICAgICAgYm9vbCBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcygpOworCiAgICAgICAgIC8vIEhlbHBlcnMgZm9yIG5vdGlmaWNhdGlvbiBh
Ym91dCBwYWludCBldmVudHMuCiAgICAgICAgIHZvaWQgYmVnaW5QYWludCgpOwogICAgICAgICB2
b2lkIGVuZFBhaW50KCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQzRC5oCShyZXZpc2lvbiA2MzQ1MikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAkod29ya2luZyBjb3B5KQpAQCAtNjgsNiArNjgsMTAg
QEAgdHlwZWRlZiBpbnQgUGxhdGZvcm0zRE9iamVjdDsKIGNvbnN0IFBsYXRmb3JtM0RPYmplY3Qg
TnVsbFBsYXRmb3JtM0RPYmplY3QgPSAwOwogI2VuZGlmCiAKKyNpZiBQTEFURk9STShDRykKKyNp
bmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgIGNsYXNzIFdlYkdMQWN0aXZlSW5mbzsKICAgICBjbGFzcyBBcnJheUJ1ZmZl
cjsKQEAgLTcxMCw3ICs3MTQsMTQgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lk
IHZpZXdwb3J0KGxvbmcgeCwgbG9uZyB5LCB1bnNpZ25lZCBsb25nIHdpZHRoLCB1bnNpZ25lZCBs
b25nIGhlaWdodCk7CiAKICAgICAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdo
dCk7Ci0gICAgICAgIAorCisjaWYgUExBVEZPUk0oQ0cpCisgICAgICAgIHZvaWQgcGFpbnRUb0Nh
bnZhcyhjb25zdCB1bnNpZ25lZCBjaGFyKiBpbWFnZVBpeGVscywgaW50IGltYWdlV2lkdGgsIGlu
dCBpbWFnZUhlaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjYW52YXNXaWR0
aCwgaW50IGNhbnZhc0hlaWdodCwgQ0dDb250ZXh0UmVmIGNvbnRleHQpOworI2VuZGlmCisKKyAg
ICAgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqIGNvbnRleHQpOworCiAgICAgICAgIC8vIEhlbHBlcnMgZm9yIG5vdGlmaWNhdGlvbiBh
Ym91dCBwYWludCBldmVudHMKICAgICAgICAgdm9pZCBiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5n
Q29udGV4dCogY29udGV4dCk7CiAgICAgICAgIHZvaWQgZW5kUGFpbnQoKTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHQzRENHLmNw
cAkocmV2aXNpb24gNjM0NTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBo
aWNzQ29udGV4dDNEQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAjaW5j
bHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9D
R0ltYWdlLmg+CiAKKyNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKEltYWdlKiBpbWFn
ZSwKQEAgLTEwNCw2ICsxMDYsNDEgQEAgYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VE
YXRhKEltYQogICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCwgdHlwZSwgbmVlZGVkQWxwaGFP
cCwgb3V0cHV0VmVjdG9yLmRhdGEoKSk7CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBh
aW50VG9DYW52YXMoY29uc3QgdW5zaWduZWQgY2hhciogaW1hZ2VQaXhlbHMsIGludCBpbWFnZVdp
ZHRoLCBpbnQgaW1hZ2VIZWlnaHQsIGludCBjYW52YXNXaWR0aCwgaW50IGNhbnZhc0hlaWdodCwg
Q0dDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgaWYgKCFpbWFnZVBpeGVscyB8fCBpbWFnZVdp
ZHRoIDw9IDAgfHwgaW1hZ2VIZWlnaHQgPD0gMCB8fCBjYW52YXNXaWR0aCA8PSAwIHx8IGNhbnZh
c0hlaWdodCA8PSAwIHx8ICFjb250ZXh0KQorICAgICAgICByZXR1cm47CisgICAgaW50IHJvd0J5
dGVzID0gaW1hZ2VXaWR0aCAqIDQ7CisgICAgUmV0YWluUHRyPENHRGF0YVByb3ZpZGVyUmVmPiBk
YXRhUHJvdmlkZXIgPSBDR0RhdGFQcm92aWRlckNyZWF0ZVdpdGhEYXRhKDAsIGltYWdlUGl4ZWxz
LCByb3dCeXRlcyAqIGltYWdlSGVpZ2h0LCAwKTsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNl
UmVmPiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7CisgICAgUmV0
YWluUHRyPENHSW1hZ2VSZWY+IGNnSW1hZ2UgPSBDR0ltYWdlQ3JlYXRlKGltYWdlV2lkdGgsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlSGVp
Z2h0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93Qnl0
ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bG9yU3BhY2UuZ2V0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3QgfCBrQ0dCaXRtYXBCeXRl
T3JkZXIzMkhvc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRhdGFQcm92aWRlci5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmFsc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOworICAgIC8vIENT
UyBzdHlsaW5nIG1heSBjYXVzZSB0aGUgY2FudmFzJ3MgY29udGVudCB0byBiZSByZXNpemVkIG9u
CisgICAgLy8gdGhlIHBhZ2UuIEdvIGJhY2sgdG8gdGhlIENhbnZhcyB0byBmaWd1cmUgb3V0IHRo
ZSBjb3JyZWN0CisgICAgLy8gd2lkdGggYW5kIGhlaWdodCB0byBkcmF3LgorICAgIENHUmVjdCBy
ZWN0ID0gQ0dSZWN0TWFrZSgwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52
YXNXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzSGVpZ2h0KTsKKyAg
ICAvLyBXZSB3YW50IHRvIGNvbXBsZXRlbHkgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBmcmFtZSdz
CisgICAgLy8gcmVuZGVyaW5nIHJlc3VsdHMuCisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250
ZXh0KTsKKyAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoY29udGV4dCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAga0NHQmxlbmRNb2RlQ29weSk7CisgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xh
dGlvblF1YWxpdHkoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBrQ0dJbnRlcnBvbGF0aW9uTm9uZSk7CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgIHJlY3QsIGNnSW1hZ2UuZ2V0KCkpOworICAgIENHQ29u
dGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
IApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhp
Y3NDb250ZXh0M0RNYWMubW0JKHJldmlzaW9uIDYzNDUyKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5
LDEwICszOSwxMyBAQAogI2luY2x1ZGUgIldlYkdMQnVmZmVyLmgiCiAjaW5jbHVkZSAiRmxvYXQz
MkFycmF5LmgiCiAjaW5jbHVkZSAiV2ViR0xGcmFtZWJ1ZmZlci5oIgorI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkhUTUxDYW52YXNFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SW50MzJBcnJheS5oIgogI2luY2x1ZGUgIldlYkdMTGF5ZXIuaCIKICNpbmNsdWRlICJXZWJHTFBy
b2dyYW0uaCIKICNpbmNsdWRlICJXZWJHTFJlbmRlcmJ1ZmZlci5oIgorI2luY2x1ZGUgIldlYkdM
UmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIldlYkdMU2hhZGVyLmgiCiAjaW5jbHVkZSAi
V2ViR0xUZXh0dXJlLmgiCiAjaW5jbHVkZSAiVWludDhBcnJheS5oIgpAQCAtMjM3LDYgKzI0MCw1
NCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlCiAgICAgQ0dMU2V0
Q3VycmVudENvbnRleHQobV9jb250ZXh0T2JqKTsKIH0KIAordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQoreworICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52
YXMoKTsKKyAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwor
CisgICAgaW50IHJvd0J5dGVzID0gbV9jdXJyZW50V2lkdGggKiA0OworICAgIGludCB0b3RhbEJ5
dGVzID0gcm93Qnl0ZXMgKiBtX2N1cnJlbnRIZWlnaHQ7CisKKyAgICBPd25BcnJheVB0cjx1bnNp
Z25lZCBjaGFyPiBwaXhlbHMobmV3IHVuc2lnbmVkIGNoYXJbdG90YWxCeXRlc10pOworICAgIGlm
ICghcGl4ZWxzKQorICAgICAgICByZXR1cm47CisKKyAgICBDR0xTZXRDdXJyZW50Q29udGV4dCht
X2NvbnRleHRPYmopOworCisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTzsKKyAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9SRUFEX0ZS
QU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xCaW5kRnJhbWVi
dWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAgICAgICAgOjpnbEJs
aXRGcmFtZWJ1ZmZlckVYVCgwLCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCAw
LCAwLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LCBHTF9DT0xPUl9CVUZGRVJfQklU
LCBHTF9MSU5FQVIpOworICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVG
RkVSX0VYVCwgbV9mYm8pOworICAgICAgICBtdXN0UmVzdG9yZUZCTyA9IHRydWU7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgaWYgKG1fYm91bmRGQk8gIT0gbV9mYm8pIHsKKyAgICAgICAgICAgIG11
c3RSZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICAgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQo
R0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHTGlu
dCBwYWNrQWxpZ25tZW50ID0gNDsKKyAgICBib29sIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9
IGZhbHNlOworICAgIDo6Z2xHZXRJbnRlZ2VydihHTF9QQUNLX0FMSUdOTUVOVCwgJnBhY2tBbGln
bm1lbnQpOworICAgIGlmIChwYWNrQWxpZ25tZW50ID4gNCkgeworICAgICAgICA6OmdsUGl4ZWxT
dG9yZWkoR0xfUEFDS19BTElHTk1FTlQsIDQpOworICAgICAgICBtdXN0UmVzdG9yZVBhY2tBbGln
bm1lbnQgPSB0cnVlOworICAgIH0KKworICAgIDo6Z2xSZWFkUGl4ZWxzKDAsIDAsIG1fY3VycmVu
dFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIEdMX0JHUkEsIEdMX1VOU0lHTkVEX0lOVF84XzhfOF84
X1JFViwgcGl4ZWxzLmdldCgpKTsKKworICAgIGlmIChtdXN0UmVzdG9yZVBhY2tBbGlnbm1lbnQp
CisgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVu
dCk7CisKKyAgICBpZiAobXVzdFJlc3RvcmVGQk8pCisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZm
ZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2JvdW5kRkJPKTsKKworICAgIHBhaW50VG9DYW52
YXMocGl4ZWxzLmdldCgpLCBtX2N1cnJlbnRXaWR0aCwgbV9jdXJyZW50SGVpZ2h0LAorICAgICAg
ICAgICAgICAgICAgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhlaWdodCgpLCBpbWFnZUJ1ZmZl
ci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQogewogICAg
IFVOVVNFRF9QQVJBTShjb250ZXh0KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAkocmV2aXNpb24gNjM0NTIpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNEUXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01MjEsNiArNTIxLDE1IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
Om1ha2VDb250ZXh0Q3VycmUKIAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmVnaW5QYWludChX
ZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCiB7CisgICAgcGFpbnRSZW5kZXJpbmdSZXN1
bHRzVG9DYW52YXMoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQoKQor
eworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CiAgICAgbV9pbnRlcm5hbC0+
bV9nbFdpZGdldC0+bWFrZUN1cnJlbnQoKTsKICAgICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFz
ID0gY29udGV4dC0+Y2FudmFzKCk7CiAgICAgSW1hZ2VCdWZmZXIqIGltYWdlQnVmZmVyID0gY2Fu
dmFzLT5idWZmZXIoKTsKQEAgLTUyOCwxMCArNTM3LDYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6YmVnaW5QYWludChXZWJHTAogICAgIHBhaW50KHBhaW50ZXIsIFFSZWN0KFFQb2ludCgwLCAw
KSwgUVNpemUobV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCkpKTsKIH0KIAotdm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZW5kUGFpbnQoKQotewotfQotCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpwYWludChRUGFpbnRlciogcGFpbnRlciwgY29uc3QgUVJlY3QmIHJlY3QpIGNvbnN0CiB7
CiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDcsIDApCkluZGV4OiBXZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cJKHJldmlzaW9uIDYzNDUyKQorKysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTA3LTEzICBaaGVueWFvIE1vICA8em1v
QGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgV2ViR0wgcmVuZGVyaW5nIHJlc3VsdHMgbXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB0byBD
YW52YXMudG9EYXRhVVJMIGFuZCAyRCBkcmF3SW1hZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NzE5CisKKyAgICAgICAgKiBzcmMvR3JhcGhpY3ND
b250ZXh0M0QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOiBJbXBsZW1lbnQgcGFpbnRSZW5kZXJp
bmdSZXN1bHRzVG9DYW52YXMoKS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmJlZ2luUGFpbnQpOiBKdXN0IHVzZSBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcygpLgorCiAyMDEwLTA3LTE1ICBWaWN0b3IgV2FuZyAgPHZpY3RvcndAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogV2ViS2l0L2Nocm9t
aXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHJldmlzaW9uIDYzNDUyKQorKysgV2ViS2l0
L2Nocm9taXVtL3NyYy9HcmFwaGljc0NvbnRleHQzRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Miw2ICsxMTIsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlc2hhcGUoaW50IHdpZHRoLCBpbnQg
aGVpZ2h0KTsKIAorICAgIHZvaWQgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xS
ZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKICAgICB2b2lkIGJlZ2luUGFpbnQoV2ViR0xSZW5k
ZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKICAgICB2b2lkIGVuZFBhaW50KCk7CiAKQEAgLTM5OSw3
ICs0MDAsNyBAQCBXZWJHTExheWVyQ2hyb21pdW0qIEdyYXBoaWNzQ29udGV4dDNESW50CiB9CiAj
ZW5kaWYKIAotdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdpblBhaW50KFdlYkdM
UmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQogewogICAgIEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52
YXMoKTsKICAgICBJbWFnZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwpA
QCAtNDQ5LDQ0ICs0NTAsMjAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiZWdp
blBhaQogICAgICAgICBjYW52YXMuZHJhd0JpdG1hcFJlY3QobV9yZXNpemluZ0JpdG1hcCwgMCwg
ZHN0KTsKICAgICB9CiAjZWxpZiBQTEFURk9STShDRykKLSAgICBpZiAobV9yZW5kZXJPdXRwdXQp
IHsKLSAgICAgICAgaW50IHJvd0J5dGVzID0gbV9pbXBsLT53aWR0aCgpICogNDsKLSAgICAgICAg
Q0dEYXRhUHJvdmlkZXJSZWYgZGF0YVByb3ZpZGVyID0gQ0dEYXRhUHJvdmlkZXJDcmVhdGVXaXRo
RGF0YSgwLCBtX3JlbmRlck91dHB1dCwgcm93Qnl0ZXMgKiBtX2ltcGwtPmhlaWdodCgpLCAwKTsK
LSAgICAgICAgQ0dDb2xvclNwYWNlUmVmIGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VDcmVhdGVE
ZXZpY2VSR0IoKTsKLSAgICAgICAgQ0dJbWFnZVJlZiBjZ0ltYWdlID0gQ0dJbWFnZUNyZWF0ZSht
X2ltcGwtPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9pbXBsLT5oZWlnaHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMy
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0J5dGVzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3BhY2UsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUHJvdmlkZXIsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBrQ0dSZW5kZXJpbmdJbnRlbnREZWZhdWx0KTsKLSAgICAgICAgLy8g
Q1NTIHN0eWxpbmcgbWF5IGNhdXNlIHRoZSBjYW52YXMncyBjb250ZW50IHRvIGJlIHJlc2l6ZWQg
b24KLSAgICAgICAgLy8gdGhlIHBhZ2UuIEdvIGJhY2sgdG8gdGhlIENhbnZhcyB0byBmaWd1cmUg
b3V0IHRoZSBjb3JyZWN0Ci0gICAgICAgIC8vIHdpZHRoIGFuZCBoZWlnaHQgdG8gZHJhdy4KLSAg
ICAgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKDAsIDAsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5jYW52YXMoKS0+d2lkdGgoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmNhbnZhcygpLT5oZWlnaHQoKSk7Ci0gICAgICAg
IC8vIFdlIHdhbnQgdG8gY29tcGxldGVseSBvdmVyd3JpdGUgdGhlIHByZXZpb3VzIGZyYW1lJ3MK
LSAgICAgICAgLy8gcmVuZGVyaW5nIHJlc3VsdHMuCi0gICAgICAgIENHQ29udGV4dFNldEJsZW5k
TW9kZShpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGtDR0JsZW5kTW9kZUNvcHkpOwotICAgICAgICBDR0NvbnRl
eHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShpbWFnZUJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9y
bUNvbnRleHQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NH
SW50ZXJwb2xhdGlvbk5vbmUpOwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2UoaW1hZ2VCdWZm
ZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWN0LCBjZ0ltYWdlKTsKLSAgICAgICAgQ0dJbWFnZVJlbGVhc2UoY2dJbWFnZSk7Ci0g
ICAgICAgIENHQ29sb3JTcGFjZVJlbGVhc2UoY29sb3JTcGFjZSk7Ci0gICAgICAgIENHRGF0YVBy
b3ZpZGVyUmVsZWFzZShkYXRhUHJvdmlkZXIpOwotICAgIH0KKyAgICBpZiAobV9yZW5kZXJPdXRw
dXQpCisgICAgICAgIGNvbnRleHQtPmdyYXBoaWNzQ29udGV4dDNEKCktPnBhaW50VG9DYW52YXMo
bV9yZW5kZXJPdXRwdXQsIG1faW1wbC0+d2lkdGgoKSwgbV9pbXBsLT5oZWlnaHQoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMtPndp
ZHRoKCksIGNhbnZhcy0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250
ZXh0KCkpOwogI2Vsc2UKICNlcnJvciBNdXN0IHBvcnQgdG8geW91ciBwbGF0Zm9ybQogI2VuZGlm
CiB9CiAKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludChXZWJHTFJl
bmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgcGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9D
YW52YXMoY29udGV4dCk7Cit9CisKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZW5k
UGFpbnQoKQogewogfQpAQCAtMTMyNSw2ICsxMzAyLDcgQEAgREVMRUdBVEVfVE9fSU5URVJOQUxf
Nih2ZXJ0ZXhBdHRyaWJQb2ludAogCiBERUxFR0FURV9UT19JTlRFUk5BTF80KHZpZXdwb3J0LCBs
b25nLCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQogCitERUxFR0FURV9UT19J
TlRFUk5BTF8xKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzLCBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqKQogREVMRUdBVEVfVE9fSU5URVJOQUxfMShiZWdpblBhaW50LCBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqKQogREVMRUdBVEVfVE9fSU5URVJOQUwoZW5kUGFpbnQpCiAKSW5kZXg6IExheW91
dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDYzNDUyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDctMTMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFV
UkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10
ZXN0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvY2Fu
dmFzLXRlc3QuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4
ZWxzdG9yZWktZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJn
bC9nbC1waXhlbHN0b3JlaS5odG1sOiBBZGRlZC4KKwogMjAxMC0wNy0xNSAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVy
bnN0ZWluLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFzLXRlc3Qt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L2NhbnZhcy10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNiBAQAorVGhpcyB0ZXN0IGVuc3VyZXMgV2ViR0wgaW1wbGVtZW50YXRpb25zIGlu
dGVyYWN0IGNvcnJlY3RseSB3aXRoIHRoZSBjYW52YXMgdGFnLgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworQ2FudmFzLmdldENvbnRleHQKK1BBU1MgY29udGV4dCBleGlzdHMKKwor
Q2hlY2tpbmcgY2FudmFzIGFuZCBXZWJHTCBpbnRlcmFjdGlvbgorUEFTUyBjYW52YXMud2lkdGgg
aXMgMzAwCitQQVNTIGNhbnZhcy5oZWlnaHQgaXMgMTUwCitQQVNTIHBpeGVscyBhcmUgMCwwLDAs
MAorUEFTUyBnZXRWaWV3cG9ydCgpIGlzICIwLDAsMzAwLDE1MCIKKworY2hhbmdlIGRpc3BsYXkg
c2l6ZSBvZiBjYW52YXMgYW5kIHNlZSB0aGF0IHZpZXdwb3J0IGRvZXMgbm90IGNoYW5nZQorIApJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFzLXRlc3QuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC5odG1s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFzLXRl
c3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODUgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCisgICJodHRwOi8v
d3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGh0
dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04
Ij4KKzx0aXRsZT5XZWJHTCBDYW52YXMgQ29uZm9ybWFuY2UgVGVzdHM8L3RpdGxlPgorPGxpbmsg
cmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiLz4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGVza3RvcC1nbC1jb25zdGFudHMuanMiIHR5
cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMv
d2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImRlc2Ny
aXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPGNhbnZhcyBpZD0iY2Fu
dmFzIiBzdHlsZT0id2lkdGg6IDUwcHg7IGhlaWdodDogNTBweDsiPiA8L2NhbnZhcz4KKzxjYW52
YXMgaWQ9ImNhbnZhczJkIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiPiA8L2NhbnZhcz4KKzxzY3Jp
cHQ+CitkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGVuc3VyZXMgV2ViR0wgaW1wbGVtZW50YXRpb25z
IGludGVyYWN0IGNvcnJlY3RseSB3aXRoIHRoZSBjYW52YXMgdGFnLiIpOworCitkZWJ1ZygiIik7
CitkZWJ1ZygiQ2FudmFzLmdldENvbnRleHQiKTsKKwordmFyIGNhbnZhcyA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJjYW52YXMiKTsKK3ZhciBjYW52YXMyZCA9IGRvY3VtZW50LmdldEVsZW1l
bnRCeUlkKCJjYW52YXMyZCIpOwordmFyIGN0eDJkID0gY2FudmFzMmQuZ2V0Q29udGV4dCgiMmQi
KTsKK3ZhciBnbCA9IGNyZWF0ZTNEQ29udGV4dChjYW52YXMpOworaWYgKCFnbCkgeworICB0ZXN0
RmFpbGVkKCJjb250ZXh0IGRvZXMgbm90IGV4aXN0Iik7Cit9IGVsc2UgeworICB0ZXN0UGFzc2Vk
KCJjb250ZXh0IGV4aXN0cyIpOworCisgIGRlYnVnKCIiKTsKKyAgZGVidWcoIkNoZWNraW5nIGNh
bnZhcyBhbmQgV2ViR0wgaW50ZXJhY3Rpb24iKTsKKworICAvLyBDaGVjayB0aGF0IGEgY2FudmFz
IHdpdGggbm8gd2lkdGggb3IgaGVpZ2h0IGlzIDMwMHgxNTAgcGl4ZWxzCisgIHNob3VsZEJlKCdj
YW52YXMud2lkdGgnLCAnMzAwJyk7CisgIHNob3VsZEJlKCdjYW52YXMuaGVpZ2h0JywgJzE1MCcp
OworCisgIC8vIENoZWNrIGdldCBhIDQgdmFsdWUgZ2wgcGFyYW1ldGVyIGFzIGEgY3N2IHN0cmlu
Zy4KKyAgZnVuY3Rpb24gZ2V0VmFsdWU0dihuYW1lKSB7CisgICAgdmFyIHYgPSBnbC5nZXRQYXJh
bWV0ZXIobmFtZSk7CisgICAgdmFyIHJlc3VsdCA9ICcnICsKKyAgICAgICAgdlswXSArICcsJyAr
CisgICAgICAgIHZbMV0gKyAnLCcgKworICAgICAgICB2WzJdICsgJywnICsKKyAgICAgICAgdlsz
XTsKKyAgICByZXR1cm4gcmVzdWx0OworICB9CisKKyAgZnVuY3Rpb24gZ2V0Vmlld3BvcnQoKSB7
CisgIHJldHVybiBnZXRWYWx1ZTR2KGdsLlZJRVdQT1JUKTsKKyAgfQorCisgIGZ1bmN0aW9uIGdl
dENsZWFyQ29sb3IoKSB7CisgIHJldHVybiBnZXRWYWx1ZTR2KGdsLkNPTE9SX0NMRUFSX1ZBTFVF
KTsKKyAgfQorCisgIGZ1bmN0aW9uIGlzQWJvdXRFcXVhbChhLCBiKSB7CisgICAgcmV0dXJuIE1h
dGguYWJzKGEgLSBiKSA8IDAuMDE7CisgIH0KKworICBmdW5jdGlvbiBpc0Fib3V0RXF1YWxJbnQo
YSwgYikgeworICAgIHJldHVybiBNYXRoLmFicyhhIC0gYikgPCAzOworICB9CisKKyAgZnVuY3Rp
b24gY2hlY2tDYW52YXNDb250ZW50SXMocjNkLGczZCxiM2QsYTNkKSB7CisgICAgdmFyIHIyZDsK
KyAgICB2YXIgZzJkOworICAgIHZhciBiMmQ7CisgICAgdmFyIGEyZDsKKworICAgIGZ1bmN0aW9u
IGNoZWNrUGl4ZWwoeCwgeSwgcjNkLGczZCxiM2QsYTNkKSB7CisgICAgICB2YXIgb2Zmc2V0ID0g
KHkgKiA0MCArIHgpICogNDsKKyAgICAgIHIyZCA9IGltZ0RhdGEuZGF0YVtvZmZzZXRdOworICAg
ICAgZzJkID0gaW1nRGF0YS5kYXRhW29mZnNldCArIDFdOworICAgICAgYjJkID0gaW1nRGF0YS5k
YXRhW29mZnNldCArIDJdOworICAgICAgYTJkID0gaW1nRGF0YS5kYXRhW29mZnNldCArIDNdOwor
ICAgICAgLy9kZWJ1ZygnJyArIHggKyAnLCAnICsgeSArICIoIiArIG9mZnNldCArICIpID0gIiAr
IHIyZCArICIsICIgKyBnMmQgKyAiLCAiICsgYjJkICsgIiwgIiArIGEyZCk7CisgICAgICByZXR1
cm4gaXNBYm91dEVxdWFsSW50KHIyZCwgcjNkKSAmJgorICAgICAgICAgICAgIGlzQWJvdXRFcXVh
bEludChnMmQsIGczZCkgJiYKKyAgICAgICAgICAgICBpc0Fib3V0RXF1YWxJbnQoYjJkLCBiM2Qp
ICYmCisgICAgICAgICAgICAgaXNBYm91dEVxdWFsSW50KGEyZCwgYTNkKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBjaGVja1BpeGVscyhyM2QsZzNkLGIzZCxhM2QpIHsKKyAgICAgIHJldHVybiBj
aGVja1BpeGVsKDAsIDAsIHIzZCwgZzNkLCBiM2QsIGEzZCkgJiYKKyAgICAgICAgICAgICBjaGVj
a1BpeGVsKDAsIDM5LCByM2QsIGczZCwgYjNkLCBhM2QpICYmCisgICAgICAgICAgICAgY2hlY2tQ
aXhlbCgzOSwgMCwgcjNkLCBnM2QsIGIzZCwgYTNkKSAmJgorICAgICAgICAgICAgIGNoZWNrUGl4
ZWwoMzksIDM5LCByM2QsIGczZCwgYjNkLCBhM2QpICYmCisgICAgICAgICAgICAgY2hlY2tQaXhl
bCgwLCAwLCByM2QsIGczZCwgYjNkLCBhM2QpOworICAgIH07CisKKyAgICAvLyBTZXQgdG8ganVz
dCB0YWtlIHRoZSBjb2xvciBmcm9tIHRoZSAzZCBjYW52YXMKKyAgICBjdHgyZC5nbG9iYWxDb21w
b3NpdGVPcGVyYXRpb24gPSAnY29weSc7CisKKyAgICAvLyBmaWxsIDJkIGNhbnZhcyB3aXRoIG9y
YW5nZQorICAgIGN0eDJkLmZpbGxTdHlsZSA9ICJyZ2IoMjU1LDE5MiwxMjgpIjsKKyAgICBjdHgy
ZC5maWxsUmVjdCAoMCwgMCwgNDAsIDQwKTsKKworICAgIC8vIGdldCB0aGUgaW1hZ2UgZGF0YQor
ICAgIHZhciBpbWdEYXRhID0gY3R4MmQuZ2V0SW1hZ2VEYXRhKDAsIDAsIDQwLCA0MCk7CisKKyAg
ICAvLyBjaGVjayBpdCBnb3QgY2xlYXJlZC4KKyAgICBpZiAoIWNoZWNrUGl4ZWxzKDI1NSwgMTky
LCAxMjgsIDI1NSkpIHsKKyAgICAgIHRlc3RGYWlsZWQoInVuYWJsZSB0byBmaWxsIDJkIGNvbnRl
eHQuIik7CisgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gZHJhdyAzZCBjYW52YXMgb24g
dG9wLgorICAgIGN0eDJkLmRyYXdJbWFnZShjYW52YXMsIDAsMCwgNDAsIDQwKTsKKworICAgIC8v
IGdldCB0aGUgaW1hZ2UgZGF0YQorICAgIHZhciBpbWdEYXRhID0gY3R4MmQuZ2V0SW1hZ2VEYXRh
KDAsIDAsIDQwLCA0MCk7CisKKyAgICAvLyBDaGVjayBpdCdzIHRoZSBleHBlY3RlZCBjb2xvci4K
KyAgICBpZiAoIWNoZWNrUGl4ZWxzKHIzZCwgZzNkLCBiM2QsIGEzZCkpIHsKKyAgICAgdGVzdEZh
aWxlZCgicGl4ZWxzIGFyZSAiICsgcjJkICsgIiwiICsgZzJkICsgIiwiICsgYjJkICsgIiwiICsg
YTJkICsKKyAgICAgICAgICAgICAgICAiIGV4cGVjdGVkICIgKyByM2QgKyAiLCIgKyBnM2QgKyAi
LCIgKyBiM2QgKyAiLCIgKyBhM2QpOworICAgIH0gZWxzZSB7CisgICAgICB0ZXN0UGFzc2VkKCJw
aXhlbHMgYXJlICIgKyByM2QgKyAiLCIgKyBnM2QgKyAiLCIgKyBiM2QgKyAiLCIgKyBhM2QpOwor
ICAgIH0KKyAgfQorCisgIGNoZWNrQ2FudmFzQ29udGVudElzKDAsIDAsIDAsIDApOworICBzaG91
bGRCZSgnZ2V0Vmlld3BvcnQoKScsICciMCwwLDMwMCwxNTAiJyk7CisKKyAgLy8gQ2hhbmdlIHRo
ZSBkaXNwbGF5IHNpemUgb2YgdGhlIGNhbnZhcyBhbmQgY2hlY2sKKyAgLy8gdGhlIHZpZXdwb3J0
IHNpemUgZG9lcyBub3QgY2hhbmdlLgorICBkZWJ1ZygiIik7CisgIGRlYnVnKCJjaGFuZ2UgZGlz
cGxheSBzaXplIG9mIGNhbnZhcyBhbmQgc2VlIHRoYXQgdmlld3BvcnQgZG9lcyBub3QgY2hhbmdl
Iik7CisgIGNhbnZhcy5zdHlsZS53aWR0aCA9ICIxMDBweCI7CisgIGNhbnZhcy5zdHlsZS5oZWln
aHQgPSAiMjVweCI7CisgIHZhciBpbnRlcnZhbElkOworICBpbnRlcnZhbElkID0gd2luZG93LnNl
dEludGVydmFsKGZ1bmN0aW9uKCkgeworICAgIGlmIChjYW52YXMuY2xpZW50V2lkdGggPT0gMTAw
ICYmCisgICAgICAgIGNhbnZhcy5jbGllbnRIZWlnaHQgPT0gMjUpIHsKKyAgICAgIHdpbmRvdy5j
bGVhckludGVydmFsKGludGVydmFsSWQpOworICAgICAgc2hvdWxkQmUoJ2dldFZpZXdwb3J0KCkn
LCAnIjAsMCwzMDAsMTUwIicpOworICAgICAgc2hvdWxkQmUoJ2NhbnZhcy53aWR0aCcsICczMDAn
KTsKKyAgICAgIHNob3VsZEJlKCdjYW52YXMuaGVpZ2h0JywgJzE1MCcpOworCisgICAgICAvLyBD
aGFuZ2UgdGhlIGFjdHVhbCBzaXplIG9mIHRoZSBjYW52YXMKKyAgICAgIC8vIENoZWNrIHRoYXQg
dGhlIHZpZXdwb3J0IGRvZXMgbm90IGNoYW5nZS4KKyAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGNs
ZWFyIGNvbG9yIGRvZXMgbm90IGNoYW5nZS4KKyAgICAgIC8vIENoZWNrIHRoYXQgdGhlIGNvbG9y
IG1hc2sgZG9lcyBub3QgY2hhbmdlLgorICAgICAgZGVidWcoIiIpOworICAgICAgZGVidWcoImNo
YW5nZSB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNhbnZhcyBhbmQgc2VlIHRoYXQgdGhlIHZpZXdw
b3J0IGRvZXMgbm90IGNoYW5nZSIpOworICAgICAgZ2wuY2xlYXJDb2xvcigwLjI1LCAwLjUsIDAu
NzUsIDEpOworICAgICAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGdsLkRFUFRIX0JV
RkZFUl9CSVQpOworICAgICAgY2hlY2tDYW52YXNDb250ZW50SXMoNjQsIDEyOCwgMTkyLCAyNTUp
OworICAgICAgZ2wuY29sb3JNYXNrKDAsMCwwLDApOworICAgICAgY2FudmFzLndpZHRoID0gNDAw
OworICAgICAgY2FudmFzLmhlaWdodCA9IDEwOworCisgICAgICB2YXIgdiA9IGdsLmdldFBhcmFt
ZXRlcihnbC5DT0xPUl9DTEVBUl9WQUxVRSk7CisgICAgICBhc3NlcnRNc2coaXNBYm91dEVxdWFs
KHZbMF0sIDAuMjUpICYmCisgICAgICAgICAgICAgICAgaXNBYm91dEVxdWFsKHZbMV0sIDAuNSkg
JiYKKyAgICAgICAgICAgICAgICBpc0Fib3V0RXF1YWwodlsyXSwgMC43NSkgJiYKKyAgICAgICAg
ICAgICAgICBpc0Fib3V0RXF1YWwodlszXSwgMSksCisgICAgICAgICAgICAgICAgImdsLmNsZWFy
Q29sb3Igc2hvdWxkIG5vdCBjaGFuZ2UgYWZ0ZXIgY2FudmFzIHJlc2l6ZSIpOworICAgICAgdiA9
IGdsLmdldFBhcmFtZXRlcihnbC5DT0xPUl9XUklURU1BU0spOworICAgICAgYXNzZXJ0TXNnKGlz
QWJvdXRFcXVhbCh2WzBdLCAwKSAmJgorICAgICAgICAgICAgICAgIGlzQWJvdXRFcXVhbCh2WzFd
LCAwKSAmJgorICAgICAgICAgICAgICAgIGlzQWJvdXRFcXVhbCh2WzJdLCAwKSAmJgorICAgICAg
ICAgICAgICAgIGlzQWJvdXRFcXVhbCh2WzNdLCAwKSwKKyAgICAgICAgICAgICAgICAiZ2wuY29s
b3JNYXNrIHNob3VsZCBub3QgY2hhbmdlIGFmdGVyIGNhbnZhcyByZXNpemUiKTsKKyAgICAgIHNo
b3VsZEJlKCdnZXRWaWV3cG9ydCgpJywgJyIwLDAsMzAwLDE1MCInKTsKKyAgICAgIGNoZWNrQ2Fu
dmFzQ29udGVudElzKDAsIDAsIDAsIDApOworCisgICAgICBkZWJ1ZygiIik7CisgICAgICBzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworICAgICAgc2hvdWxkQmVUcnVlKCJzdWNjZXNzZnVsbHlQ
YXJzZWQiKTsKKyAgICAgIGRlYnVnKCc8YnIgLz48c3BhbiBjbGFzcz0icGFzcyI+VEVTVCBDT01Q
TEVURTwvc3Bhbj4nKTsKKyAgICAgIG5vdGlmeUZpbmlzaGVkVG9IYXJuZXNzKCk7CisgICAgfQor
ICAgfSwgMTAwMC8zMCk7Cit9CisKKworPC9zY3JpcHQ+Cis8c2NyaXB0PgorPC9zY3JpcHQ+CisK
KzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2ds
LXBpeGVsc3RvcmVpLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS1leHBlY3RlZC50
eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjEgQEAKKyAgICAKK1RoZXJlIHNob3VsZCBiZSA1
IHJlZCB0cmlhbmdsZXMgb24gNSBibGFjayBzcXVhcmVzIGFib3ZlCisKK1RoaXMgdGVzdCBjaGVj
a3MgdGhhdCBkcmF3SW1hZ2UgYW5kIHJlYWRQaXhlbHMgYXJlIG5vdCBlZmZlY3RlZCBieSBnbC5Q
aXhlbHN0b3JlaShnbC5QQUNLX0FMSUdOTUVOVCkgYW5kIHZpc2EgdmVyc2EKKworUEFTUyBkcmF3
aW5nIGlzIGNvcnJlY3QgaW4gM2QgY29udGV4dAorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4g
MmQgY29udGV4dAorUEFTUyBQQUNLX0FMSUdOTUVOVCBpcyAxCitQQVNTIGRyYXdpbmcgaXMgY29y
cmVjdCBpbiAzZCBjb250ZXh0CitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAyZCBjb250ZXh0
CitQQVNTIFBBQ0tfQUxJR05NRU5UIGlzIDIKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDNk
IGNvbnRleHQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDJkIGNvbnRleHQKK1BBU1MgUEFD
S19BTElHTk1FTlQgaXMgNAorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gM2QgY29udGV4dAor
UEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gMmQgY29udGV4dAorUEFTUyBQQUNLX0FMSUdOTUVO
VCBpcyA4CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWkuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0
b3JlaS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wv
Z2wtcGl4ZWxzdG9yZWkuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMjQgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4i
CisgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8aGVh
ZD4KKzx0aXRsZT5XZWJHTCBwaXhlbFN0b3JlaSBUZXN0PC90aXRsZT4KKzxsaW5rIHJlbD0ic3R5
bGVzaGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIi8+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+IDwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy9kZXNrdG9wLWdsLWNvbnN0YW50cy5qcyIgdHlwZT0idGV4dC9qYXZh
c2NyaXB0Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iZXhhbXBsZSIg
d2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxjYW52YXMgaWQ9IjJkMDAiIHdpZHRo
PSI1MCIgaGVpZ2h0PSI1MCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSIyZDAxIiB3aWR0aD0iNTAi
IGhlaWdodD0iNTAiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iMmQwMiIgd2lkdGg9IjUwIiBoZWln
aHQ9IjUwIj48L2NhbnZhcz4KKzxjYW52YXMgaWQ9IjJkMDMiIHdpZHRoPSI1MCIgaGVpZ2h0PSI1
MCI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQgaWQ9InZzaGFkZXIiIHR5cGU9Ingtc2hhZGVyL3gtdmVydGV4
Ij4KK2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsKK3ZvaWQgbWFpbigpIHsKKyAgZ2xfUG9zaXRp
b24gPSB2UG9zaXRpb247Cit9Cis8L3NjcmlwdD4KKworPHNjcmlwdCBpZD0iZnNoYWRlciIgdHlw
ZT0ieC1zaGFkZXIveC1mcmFnbWVudCI+Cit2b2lkIG1haW4oKSB7CisgIGdsX0ZyYWdDb2xvciA9
IHZlYzQoMS4wLDAuMCwwLjAsMS4wKTsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0PgorZnVuY3Rp
b24gZmFpbCh4LHksIG5hbWUsIGJ1Ziwgc2hvdWxkQmUpIHsKKyAgdmFyIGkgPSAoeSo1MCt4KSAq
IDQ7CisgIHZhciByZWFzb24gPSAicGl4ZWwgaW4gIituYW1lKyIgYXQgKCIreCsiLCIreSsiKSBp
cyAoIitidWZbaV0rIiwiK2J1ZltpKzFdKyIsIitidWZbaSsyXSsiLCIrYnVmW2krM10rIiksIHNo
b3VsZCBiZSAiK3Nob3VsZEJlOworICB0ZXN0RmFpbGVkKHJlYXNvbik7Cit9CisKK2Z1bmN0aW9u
IHBhc3MobmFtZSkgeworICB0ZXN0UGFzc2VkKCJkcmF3aW5nIGlzIGNvcnJlY3QgaW4gIiArIG5h
bWUpOworfQorCitmdW5jdGlvbiBpbml0KCkgeworICBkZWJ1ZygiVGhlcmUgc2hvdWxkIGJlIDUg
cmVkIHRyaWFuZ2xlcyBvbiA1IGJsYWNrIHNxdWFyZXMgYWJvdmUiKTsKKyAgZGVidWcoIiIpOwor
CisgIGRlYnVnKCJUaGlzIHRlc3QgY2hlY2tzIHRoYXQgZHJhd0ltYWdlIGFuZCByZWFkUGl4ZWxz
IGFyZSBub3QgZWZmZWN0ZWQgYnkgZ2wuUGl4ZWxzdG9yZWkoZ2wuUEFDS19BTElHTk1FTlQpIGFu
ZCB2aXNhIHZlcnNhIik7CisgIGRlYnVnKCIiKTsKKworICB2YXIgY2FudmFzM2QgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiZXhhbXBsZSIpOworICBnbCA9IGluaXRXZWJHTCgiZXhhbXBsZSIs
ICJ2c2hhZGVyIiwgImZzaGFkZXIiLCBbICJ2UG9zaXRpb24iXSwgWyAwLCAwLCAwLCAxIF0sIDEp
OworCisgIHZhciB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgZ2wuYmluZEJ1
ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZlcnRleE9iamVjdCk7CisgIGdsLmJ1ZmZlckRhdGEoZ2wu
QVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5KFsgMCwwLjUsMCwgLTAuNSwtMC41LDAsIDAu
NSwtMC41LDAgXSksIGdsLlNUQVRJQ19EUkFXKTsKKyAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJy
YXkoMCk7CisgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIoMCwgMywgZ2wuRkxPQVQsIGZhbHNlLCAw
LCAwKTsKKworICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVS
X0JJVCk7CisgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCAzKTsKKworCisgIGZ1bmN0
aW9uIGNoZWNrRGF0YShidWYsIG5hbWUpIHsKKyAgICAvLyBUZXN0IHNldmVyYWwgbG9jYXRpb25z
CisgICAgLy8gRmlyc3QgbGluZSBzaG91bGQgYmUgYWxsIGJsYWNrCisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCA1MDsgKytpKSB7CisgICAgICBpZiAoYnVmW2kqNF0gIT0gMCB8fCBidWZbaSo0KzFd
ICE9IDAgfHwgYnVmW2kqNCsyXSAhPSAwIHx8IGJ1ZltpKjQrM10gIT0gMjU1KSB7CisgICAgICAg
IGZhaWwoaSwgMCwgbmFtZSwgYnVmLCAiKDAsMCwwLDI1NSkiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgfQorICAgIH0KKworICAgIC8vIExpbmUgMjUgc2hvdWxkIGJlIHJlZCBmb3IgYXQgbGVh
c3QgNiByZWQgcGl4ZWxzIHN0YXJ0aW5nIDIyIHBpeGVscyBpbgorICAgIHZhciBvZmZzZXQgPSAo
MjUqNTArMjIpICogNDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7ICsraSkgeworICAgICAg
aWYgKGJ1ZltvZmZzZXQraSo0XSAhPSAyNTUgfHwgYnVmW29mZnNldCtpKjQrMV0gIT0gMCB8fCBi
dWZbb2Zmc2V0K2kqNCsyXSAhPSAwIHx8IGJ1ZltvZmZzZXQraSo0KzNdICE9IDI1NSkgeworICAg
ICAgICBmYWlsKDIyICsgaSwgMjUsIG5hbWUsIGJ1ZiwgIigyNTUsMCwwLDI1NSkiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKworICAgIC8vIExhc3QgbGluZSBzaG91bGQgYmUg
YWxsIGJsYWNrCisgICAgb2Zmc2V0ID0gKDQ5KjUwKSAqIDQ7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCA1MDsgKytpKSB7CisgICAgICBpZiAoYnVmW29mZnNldCtpKjRdICE9IDAgfHwgYnVmW29m
ZnNldCtpKjQrMV0gIT0gMCB8fCBidWZbb2Zmc2V0K2kqNCsyXSAhPSAwIHx8IGJ1ZltvZmZzZXQr
aSo0KzNdICE9IDI1NSkgeworICAgICAgICBmYWlsKGksIDQ5LCBuYW1lLCBidWYsICIoMCwwLDAs
MjU1KSIpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorCisgICAgcGFzcyhuYW1l
KTsKKyAgfQorCisgIGZ1bmN0aW9uIGNoZWNrQ29sb3JzKCkgeworICAgIHZhciBidWYgPSBuZXcg
VWludDhBcnJheSg1MCAqIDUwICogNCk7CisgICAgZ2wucmVhZFBpeGVscygwLCAwLCA1MCwgNTAs
IGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisgICAgY2hlY2tEYXRhKGJ1ZiwgIjNk
IGNvbnRleHQiKTsKKyAgICB2YXIgaW1nRGF0YSA9IGN0eDJkLmdldEltYWdlRGF0YSgwLCAwLCA1
MCwgNTApOworICAgIGNoZWNrRGF0YShpbWdEYXRhLmRhdGEsICIyZCBjb250ZXh0Iik7CisgIH0K
KworICB2YXIgdGFibGUgPSBbMSwgMiwgNCwgOF07CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCB0
YWJsZS5sZW5ndGg7ICsraWkpIHsKKyAgICBnbC5waXhlbFN0b3JlaShnbC5QQUNLX0FMSUdOTUVO
VCwgdGFibGVbaWldKTsKKyAgICBjdHgyZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCIyZDAi
ICsgaWkpLmdldENvbnRleHQoIjJkIik7CisgICAgY3R4MmQuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0
aW9uID0gJ2NvcHknOworICAgIGN0eDJkLmRyYXdJbWFnZShjYW52YXMzZCwgMCwgMCk7CisgICAg
Y2hlY2tDb2xvcnMoKTsKKyAgICBhc3NlcnRNc2coZ2wuZ2V0UGFyYW1ldGVyKGdsLlBBQ0tfQUxJ
R05NRU5UKSA9PSB0YWJsZVtpaV0sCisgICAgICAgICJQQUNLX0FMSUdOTUVOVCBpcyAiICsgdGFi
bGVbaWldKTsKKyAgfQorfQorCitpbml0KCk7CitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwor
PC9zY3JpcHQ+Cis8L2JvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+Cis8L3NjcmlwdD4KKworPC9ib2R5Pgor
PC9odG1sPgo=
</data>
<flag name="review"
          id="49781"
          type_id="1"
          status="-"
          setter="japhet"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61747</attachid>
            <date>2010-07-15 16:49:51 -0700</date>
            <delta_ts>2010-07-19 14:55:17 -0700</delta_ts>
            <desc>revised patch</desc>
            <filename>canvas.patch</filename>
            <type>text/plain</type>
            <size>32320</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzQ4NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzIgQEAKKzIwMTAtMDctMTMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCBy
ZW5kZXJpbmcgcmVzdWx0cyBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFV
UkwgYW5kIDJEIGRyYXdJbWFnZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzQ3MTkKKworICAgICAgICBUZXN0czogZmFzdC9jYW52YXMvd2ViZ2wvY2Fu
dmFzLXRlc3QuaHRtbAorICAgICAgICAgICAgICAgZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxz
dG9yZWkuaHRtbAorCisgICAgICAgICogaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6bWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFp
bGFibGUpOiBQYWludCB0aGUgV2ViR0wgcmVuZGVyaW5nIHJlc3VsdHMgdG8gY2FudmFzIGlmIGl0
J3MgM2QuCisgICAgICAgIChXZWJDb3JlOjpIVE1MQ2FudmFzRWxlbWVudDo6dG9EYXRhVVJMKTog
UGFpbnQgdGhlIFdlYkdMIHJlbmRlcmluZyByZXN1bHRzIHRvIGNhbnZhcyBpZiBpdCdzIDNkLgor
ICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZSk6IFBhaW50
IHRoZSBXZWJHTCByZW5kZXJpbmcgcmVzdWx0cyB0byBjYW52YXMgaWYgaXQncyAzZCBiZWZvcmUg
ZHJhd2luZy4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjptYXJrQ29udGV4dENo
YW5nZWQpOiBNYXJrIGl0IGFsd2F5cyBmb3IgY2FudmFzMmQuZHJhd0ltYWdlIHB1cnBvc2UuCisg
ICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHQ6OnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKTogUGFpbnQgdGhlIFdlYkdMIHJlbmRlcmluZyByZXN1bHRzIHRvIGNhbnZh
cyBpZiBpdCdzIGRpcnR5LgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5oOiBEZWNsYXJlIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaDogRGVjbGFyZSBwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpICYgcGFpbnRUb0NhbnZhcygpLgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50VG9DYW52YXMpOiBQYWludCB0aGUgcmVuZGVy
ZWQgaW1hZ2UgcGl4ZWxzIHRvIHRoZSBjYW52YXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKTogSW1wbGVtZW50IHBh
aW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR3JhcGhpY3NDb250ZXh0M0RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6YmVnaW5QYWludCk6IEp1c3QgY2FsbCBwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0NhbnZhcygpLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuZFBhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcyk6IEltcGxlbWVudCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygp
LgorCiAyMDEwLTA3LTE1ICBBbGV4IE5pY29sYW91ICA8YW5pY29sYW9AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxDYW52YXNFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTENhbnZh
c0VsZW1lbnQuY3BwCShyZXZpc2lvbiA2MzQ4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFz
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Nyw2ICsyOTcsMTYgQEAgYm9vbCBIVE1M
Q2FudmFzRWxlbWVudDo6aXMzRCgpIGNvbnN0CiB9CiAjZW5kaWYKIAordm9pZCBIVE1MQ2FudmFz
RWxlbWVudDo6bWFrZVJlbmRlcmluZ1Jlc3VsdHNBdmFpbGFibGUoKQoreworI2lmIEVOQUJMRSgz
RF9DQU5WQVMpCisgICAgaWYgKGlzM0QoKSkgeworICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQqIGNvbnRleHQzZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4o
cmVuZGVyaW5nQ29udGV4dCgpKTsKKyAgICAgICAgY29udGV4dDNkLT5wYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0NhbnZhcygpOworICAgIH0KKyNlbmRpZgorfQorCiB2b2lkIEhUTUxDYW52YXNFbGVt
ZW50OjpyZWNhbGNTdHlsZShTdHlsZUNoYW5nZSBjaGFuZ2UpCiB7CiAgICAgSFRNTEVsZW1lbnQ6
OnJlY2FsY1N0eWxlKGNoYW5nZSk7CkBAIC0zMjcsNiArMzM3LDggQEAgU3RyaW5nIEhUTUxDYW52
YXNFbGVtZW50Ojp0b0RhdGFVUkwoY29ucwogCiAgICAgU3RyaW5nIGxvd2VyY2FzZU1pbWVUeXBl
ID0gbWltZVR5cGUubG93ZXIoKTsKIAorICAgIG1ha2VSZW5kZXJpbmdSZXN1bHRzQXZhaWxhYmxl
KCk7CisKICAgICAvLyBGSVhNRTogTWFrZSBpc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNv
ZGluZyB0aHJlYWRzYWZlICh0byBhbGxvdyB0aGlzIG1ldGhvZCB0byBiZSB1c2VkIG9uIGEgd29y
a2VyIHRocmVhZCkuCiAgICAgaWYgKG1pbWVUeXBlLmlzTnVsbCgpIHx8ICFNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhsb3dlcmNhc2VNaW1lVHlw
ZSkpCiAgICAgICAgIHJldHVybiBidWZmZXIoKS0+dG9EYXRhVVJMKCJpbWFnZS9wbmciKTsKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCShyZXZpc2lvbiA2MzQ4NikKKysrIFdlYkNvcmUv
aHRtbC9IVE1MQ2FudmFzRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsNiBA
QAogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgogCi0jaWYg
RU5BQkxFKDNEX0NBTlZBUykgICAgCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLSNl
bmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENhbnZhc0NvbnRleHRBdHRyaWJ1
dGVzOwpAQCAtMTE0LDYgKzExMCw4IEBAIHB1YmxpYzoKICAgICBib29sIGlzM0QoKSBjb25zdDsK
ICNlbmRpZgogCisgICAgdm9pZCBtYWtlUmVuZGVyaW5nUmVzdWx0c0F2YWlsYWJsZSgpOworCiBw
cml2YXRlOgogICAgIEhUTUxDYW52YXNFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOwogCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuY3BwCShyZXZpc2lvbiA2MzQ4NikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE1Nyw2ICsx
MTU3LDggQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmRyYXdJbWFnZQogICAgIGlm
ICghc291cmNlQ2FudmFzLT5vcmlnaW5DbGVhbigpKQogICAgICAgICBjYW52YXMoKS0+c2V0T3Jp
Z2luVGFpbnRlZCgpOwogCisgICAgc291cmNlQ2FudmFzLT5tYWtlUmVuZGVyaW5nUmVzdWx0c0F2
YWlsYWJsZSgpOworCiAgICAgYy0+ZHJhd0ltYWdlKGJ1ZmZlci0+aW1hZ2UoKSwgRGV2aWNlQ29s
b3JTcGFjZSwgZGVzdFJlY3QsIHNvdXJjZVJlY3QsIHN0YXRlKCkubV9nbG9iYWxDb21wb3NpdGUp
OwogICAgIHdpbGxEcmF3KGRlc3RSZWN0KTsgLy8gVGhpcyBjYWxsIGNvbWVzIGFmdGVyIGRyYXdJ
bWFnZSwgc2luY2UgdGhlIGJ1ZmZlciB3ZSBkcmF3IGludG8gbWF5IGJlIG91ciBvd24sIGFuZCB3
ZSBuZWVkIHRvIG1ha2Ugc3VyZSBpdCBpcyBkaXJ0eS4KICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBBcmd1YWJseSB3aWxsRHJhdyBzaG91bGQgYmVjb21lIGRpZERyYXcgYW5kIG9j
Y3VyIGFmdGVyIGRyYXdpbmcgY2FsbHMgYW5kIG5vdCBiZWZvcmUgdGhlbSB0byBhdm9pZCBwcm9i
bGVtcyBsaWtlIHRoaXMuCkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA2MzQ4NikKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDE3ICsxNDEs
MjMgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6Om1hcmtDb250ZXh0QwogICAgIFJlbmRl
ckJveCogcmVuZGVyQm94ID0gY2FudmFzKCktPnJlbmRlckJveCgpOwogICAgIGlmIChyZW5kZXJC
b3ggJiYgcmVuZGVyQm94LT5oYXNMYXllcigpICYmIHJlbmRlckJveC0+bGF5ZXIoKS0+aGFzQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZygpKQogICAgICAgICByZW5kZXJCb3gtPmxheWVyKCktPnJlbmRl
cmVyQ29udGVudENoYW5nZWQoKTsKLSAgICBlbHNlIHsKICNlbmRpZgotICAgICAgICBpZiAoIW1f
bWFya2VkQ2FudmFzRGlydHkpIHsKLSAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgY2FudmFz
J3MgaW1hZ2UgYnVmZmVyIGlzIGFsbG9jYXRlZC4KLSAgICAgICAgICAgIGNhbnZhcygpLT5idWZm
ZXIoKTsKLSAgICAgICAgICAgIGNhbnZhcygpLT53aWxsRHJhdyhGbG9hdFJlY3QoMCwgMCwgY2Fu
dmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSkpOwotICAgICAgICAgICAgbV9tYXJr
ZWRDYW52YXNEaXJ0eSA9IHRydWU7Ci0gICAgICAgIH0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09N
UE9TSVRJTkcpCisgICAgaWYgKCFtX21hcmtlZENhbnZhc0RpcnR5KSB7CisgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGUgY2FudmFzJ3MgaW1hZ2UgYnVmZmVyIGlzIGFsbG9jYXRlZC4KKyAgICAgICAg
Y2FudmFzKCktPmJ1ZmZlcigpOworICAgICAgICBjYW52YXMoKS0+d2lsbERyYXcoRmxvYXRSZWN0
KDAsIDAsIGNhbnZhcygpLT53aWR0aCgpLCBjYW52YXMoKS0+aGVpZ2h0KCkpKTsKKyAgICAgICAg
bV9tYXJrZWRDYW52YXNEaXJ0eSA9IHRydWU7CiAgICAgfQotI2VuZGlmCit9CisKK2Jvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpCit7Cisg
ICAgaWYgKG1fbWFya2VkQ2FudmFzRGlydHkpIHsKKyAgICAgICAgbV9tYXJrZWRDYW52YXNEaXJ0
eSA9IGZhbHNlOworICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2Fu
dmFzKHRoaXMpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OwogfQogCiB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6YmVnaW5QYWludCgpCkluZGV4OiBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDYz
NDg2KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMzA2LDYgKzMwNiwxMCBAQCBjbGFzcyBXZWJLaXRDU1NNYXRyaXg7CiAg
ICAgCiAgICAgICAgIHZvaWQgcmVzaGFwZShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwogCisgICAg
ICAgIC8vIFJldHVybiB2YWx1ZSB0cnVlIGluZGljYXRlcyBjYW52YXMgaXMgdXBkYXRlZCBkdXJp
bmcgdGhlIGNhbGwsCisgICAgICAgIC8vIGZhbHNlIGluZGljYXRlcyBubyB1cGRhdGVzLgorICAg
ICAgICBib29sIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCk7CisKICAgICAgICAgLy8g
SGVscGVycyBmb3Igbm90aWZpY2F0aW9uIGFib3V0IHBhaW50IGV2ZW50cy4KICAgICAgICAgdm9p
ZCBiZWdpblBhaW50KCk7CiAgICAgICAgIHZvaWQgZW5kUGFpbnQoKTsKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmgJKHJldmlzaW9uIDYzNDg2
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OCw2ICs2OCwxMCBAQCB0eXBlZGVmIGludCBQbGF0Zm9ybTNET2JqZWN0
OwogY29uc3QgUGxhdGZvcm0zRE9iamVjdCBOdWxsUGxhdGZvcm0zRE9iamVjdCA9IDA7CiAjZW5k
aWYKIAorI2lmIFBMQVRGT1JNKENHKQorI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQu
aD4KKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgV2ViR0xBY3RpdmVJ
bmZvOwogICAgIGNsYXNzIEFycmF5QnVmZmVyOwpAQCAtNzEwLDcgKzcxNCwxNCBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgdmlld3BvcnQobG9uZyB4LCBsb25nIHksIHVuc2ln
bmVkIGxvbmcgd2lkdGgsIHVuc2lnbmVkIGxvbmcgaGVpZ2h0KTsKIAogICAgICAgICB2b2lkIHJl
c2hhcGUoaW50IHdpZHRoLCBpbnQgaGVpZ2h0KTsKLSAgICAgICAgCisKKyNpZiBQTEFURk9STShD
RykKKyAgICAgICAgdm9pZCBwYWludFRvQ2FudmFzKGNvbnN0IHVuc2lnbmVkIGNoYXIqIGltYWdl
UGl4ZWxzLCBpbnQgaW1hZ2VXaWR0aCwgaW50IGltYWdlSGVpZ2h0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGNhbnZhc1dpZHRoLCBpbnQgY2FudmFzSGVpZ2h0LCBDR0NvbnRleHRS
ZWYgY29udGV4dCk7CisjZW5kaWYKKworICAgICAgICB2b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0
c1RvQ2FudmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCk7CisKICAgICAgICAgLy8g
SGVscGVycyBmb3Igbm90aWZpY2F0aW9uIGFib3V0IHBhaW50IGV2ZW50cwogICAgICAgICB2b2lk
IGJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KTsKICAgICAgICAgdm9p
ZCBlbmRQYWludCgpOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGlj
c0NvbnRleHQzRENHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0dyYXBoaWNzQ29udGV4dDNEQ0cuY3BwCShyZXZpc2lvbiA2MzQ4NikKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0M0RDRy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDYgKzM2LDggQEAKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+
CiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHSW1hZ2UuaD4KIAorI2luY2x1ZGUgPHd0Zi9SZXRh
aW5QdHIuaD4KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLApAQCAtMTA0LDYgKzEwNiw0MSBAQCBib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hCiAgICAgICAgICAgICAgICAgICAgICAg
Zm9ybWF0LCB0eXBlLCBuZWVkZWRBbHBoYU9wLCBvdXRwdXRWZWN0b3IuZGF0YSgpKTsKIH0KIAor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRUb0NhbnZhcyhjb25zdCB1bnNpZ25lZCBjaGFy
KiBpbWFnZVBpeGVscywgaW50IGltYWdlV2lkdGgsIGludCBpbWFnZUhlaWdodCwgaW50IGNhbnZh
c1dpZHRoLCBpbnQgY2FudmFzSGVpZ2h0LCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3sKKyAgICBp
ZiAoIWltYWdlUGl4ZWxzIHx8IGltYWdlV2lkdGggPD0gMCB8fCBpbWFnZUhlaWdodCA8PSAwIHx8
IGNhbnZhc1dpZHRoIDw9IDAgfHwgY2FudmFzSGVpZ2h0IDw9IDAgfHwgIWNvbnRleHQpCisgICAg
ICAgIHJldHVybjsKKyAgICBpbnQgcm93Qnl0ZXMgPSBpbWFnZVdpZHRoICogNDsKKyAgICBSZXRh
aW5QdHI8Q0dEYXRhUHJvdmlkZXJSZWY+IGRhdGFQcm92aWRlciA9IENHRGF0YVByb3ZpZGVyQ3Jl
YXRlV2l0aERhdGEoMCwgaW1hZ2VQaXhlbHMsIHJvd0J5dGVzICogaW1hZ2VIZWlnaHQsIDApOwor
ICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IGNvbG9yU3BhY2UgPSBDR0NvbG9yU3BhY2VD
cmVhdGVEZXZpY2VSR0IoKTsKKyAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY2dJbWFnZSA9IENH
SW1hZ2VDcmVhdGUoaW1hZ2VXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW1hZ2VIZWlnaHQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByb3dCeXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTcGFjZS5nZXQoKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11bHRp
cGxpZWRGaXJzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMySG9zdCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVByb3ZpZGVyLmdldCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHUmVuZGVyaW5n
SW50ZW50RGVmYXVsdCk7CisgICAgLy8gQ1NTIHN0eWxpbmcgbWF5IGNhdXNlIHRoZSBjYW52YXMn
cyBjb250ZW50IHRvIGJlIHJlc2l6ZWQgb24KKyAgICAvLyB0aGUgcGFnZS4gR28gYmFjayB0byB0
aGUgQ2FudmFzIHRvIGZpZ3VyZSBvdXQgdGhlIGNvcnJlY3QKKyAgICAvLyB3aWR0aCBhbmQgaGVp
Z2h0IHRvIGRyYXcuCisgICAgQ0dSZWN0IHJlY3QgPSBDR1JlY3RNYWtlKDAsIDAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbnZhc1dpZHRoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjYW52YXNIZWlnaHQpOworICAgIC8vIFdlIHdhbnQgdG8gY29tcGxldGVseSBvdmVy
d3JpdGUgdGhlIHByZXZpb3VzIGZyYW1lJ3MKKyAgICAvLyByZW5kZXJpbmcgcmVzdWx0cy4KKyAg
ICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworICAgIENHQ29udGV4dFNldEJsZW5kTW9k
ZShjb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dCbGVuZE1vZGVDb3B5KTsK
KyAgICBDR0NvbnRleHRTZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShjb250ZXh0LAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ludGVycG9sYXRpb25Ob25lKTsKKyAgICBD
R0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgcmVjdCwg
Y2dJbWFnZS5nZXQoKSk7CisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKK30K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQkocmV2aXNpb24gNjM0
ODYpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1h
Yy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzksMTAgKzM5LDEzIEBACiAjaW5jbHVkZSAiV2ViR0xC
dWZmZXIuaCIKICNpbmNsdWRlICJGbG9hdDMyQXJyYXkuaCIKICNpbmNsdWRlICJXZWJHTEZyYW1l
YnVmZmVyLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSFRNTENh
bnZhc0VsZW1lbnQuaCIKICNpbmNsdWRlICJJbnQzMkFycmF5LmgiCiAjaW5jbHVkZSAiV2ViR0xM
YXllci5oIgogI2luY2x1ZGUgIldlYkdMUHJvZ3JhbS5oIgogI2luY2x1ZGUgIldlYkdMUmVuZGVy
YnVmZmVyLmgiCisjaW5jbHVkZSAiV2ViR0xSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAi
V2ViR0xTaGFkZXIuaCIKICNpbmNsdWRlICJXZWJHTFRleHR1cmUuaCIKICNpbmNsdWRlICJVaW50
OEFycmF5LmgiCkBAIC0yMzcsNiArMjQwLDU0IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1h
a2VDb250ZXh0Q3VycmUKICAgICBDR0xTZXRDdXJyZW50Q29udGV4dChtX2NvbnRleHRPYmopOwog
fQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyhXZWJHTFJlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgSFRNTENhbnZhc0VsZW1l
bnQqIGNhbnZhcyA9IGNvbnRleHQtPmNhbnZhcygpOworICAgIEltYWdlQnVmZmVyKiBpbWFnZUJ1
ZmZlciA9IGNhbnZhcy0+YnVmZmVyKCk7CisKKyAgICBpbnQgcm93Qnl0ZXMgPSBtX2N1cnJlbnRX
aWR0aCAqIDQ7CisgICAgaW50IHRvdGFsQnl0ZXMgPSByb3dCeXRlcyAqIG1fY3VycmVudEhlaWdo
dDsKKworICAgIE93bkFycmF5UHRyPHVuc2lnbmVkIGNoYXI+IHBpeGVscyhuZXcgdW5zaWduZWQg
Y2hhclt0b3RhbEJ5dGVzXSk7CisgICAgaWYgKCFwaXhlbHMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CisKKyAgICBib29sIG11c3RS
ZXN0b3JlRkJPOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAgICA6OmdsQmlu
ZEZyYW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJP
KTsKKyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9EUkFXX0ZSQU1FQlVGRkVSX0VY
VCwgbV9mYm8pOworICAgICAgICA6OmdsQmxpdEZyYW1lYnVmZmVyRVhUKDAsIDAsIG1fY3VycmVu
dFdpZHRoLCBtX2N1cnJlbnRIZWlnaHQsIDAsIDAsIG1fY3VycmVudFdpZHRoLCBtX2N1cnJlbnRI
ZWlnaHQsIEdMX0NPTE9SX0JVRkZFUl9CSVQsIEdMX0xJTkVBUik7CisgICAgICAgIDo6Z2xCaW5k
RnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisgICAgICAgIG11c3RS
ZXN0b3JlRkJPID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9ib3VuZEZCTyAh
PSBtX2ZibykgeworICAgICAgICAgICAgbXVzdFJlc3RvcmVGQk8gPSB0cnVlOworICAgICAgICAg
ICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIEdMaW50IHBhY2tBbGlnbm1lbnQgPSA0OworICAgIGJvb2wg
bXVzdFJlc3RvcmVQYWNrQWxpZ25tZW50ID0gZmFsc2U7CisgICAgOjpnbEdldEludGVnZXJ2KEdM
X1BBQ0tfQUxJR05NRU5ULCAmcGFja0FsaWdubWVudCk7CisgICAgaWYgKHBhY2tBbGlnbm1lbnQg
PiA0KSB7CisgICAgICAgIDo6Z2xQaXhlbFN0b3JlaShHTF9QQUNLX0FMSUdOTUVOVCwgNCk7Cisg
ICAgICAgIG11c3RSZXN0b3JlUGFja0FsaWdubWVudCA9IHRydWU7CisgICAgfQorCisgICAgOjpn
bFJlYWRQaXhlbHMoMCwgMCwgbV9jdXJyZW50V2lkdGgsIG1fY3VycmVudEhlaWdodCwgR0xfQkdS
QSwgR0xfVU5TSUdORURfSU5UXzhfOF84XzhfUkVWLCBwaXhlbHMuZ2V0KCkpOworCisgICAgaWYg
KG11c3RSZXN0b3JlUGFja0FsaWdubWVudCkKKyAgICAgICAgOjpnbFBpeGVsU3RvcmVpKEdMX1BB
Q0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKKworICAgIGlmIChtdXN0UmVzdG9yZUZCTykK
KyAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIG1fYm91
bmRGQk8pOworCisgICAgcGFpbnRUb0NhbnZhcyhwaXhlbHMuZ2V0KCksIG1fY3VycmVudFdpZHRo
LCBtX2N1cnJlbnRIZWlnaHQsCisgICAgICAgICAgICAgICAgICBjYW52YXMtPndpZHRoKCksIGNh
bnZhcy0+aGVpZ2h0KCksIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgp
KTsKK30KKwogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmVnaW5QYWludChXZWJHTFJlbmRlcmlu
Z0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKGNvbnRleHQpOwpJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9HcmFwaGljc0NvbnRleHQzRFF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0dyYXBoaWNzQ29udGV4dDNE
UXQuY3BwCShyZXZpc2lvbiA2MzQ4NikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
R3JhcGhpY3NDb250ZXh0M0RRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMSw2ICs1MjEsMTUg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkK
IHsKKyAgICBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjplbmRQYWludCgpCit7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCkKK3sKICAgICBtX2ludGVybmFsLT5tX2dsV2lkZ2V0LT5tYWtlQ3VycmVudCgpOwogICAg
IEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMgPSBjb250ZXh0LT5jYW52YXMoKTsKICAgICBJbWFn
ZUJ1ZmZlciogaW1hZ2VCdWZmZXIgPSBjYW52YXMtPmJ1ZmZlcigpOwpAQCAtNTI4LDEwICs1Mzcs
NiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiZWdpblBhaW50KFdlYkdMCiAgICAgcGFpbnQo
cGFpbnRlciwgUVJlY3QoUVBvaW50KDAsIDApLCBRU2l6ZShtX2N1cnJlbnRXaWR0aCwgbV9jdXJy
ZW50SGVpZ2h0KSkpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmRQYWludCgpCi17
Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50KFFQYWludGVyKiBwYWludGVyLCBj
b25zdCBRUmVjdCYgcmVjdCkgY29uc3QKIHsKICNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05f
Q0hFQ0soNCwgNywgMCkKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjM0ODYpCisrKyBXZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTAtMDctMTMgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJHTCByZW5kZXJpbmcgcmVzdWx0cyBt
dXN0IGJlIG1hZGUgYXZhaWxhYmxlIHRvIENhbnZhcy50b0RhdGFVUkwgYW5kIDJEIGRyYXdJbWFn
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQ3MTkK
KworICAgICAgICAqIHNyYy9HcmFwaGljc0NvbnRleHQzRC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZh
cyk6IEltcGxlbWVudCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcygpLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludCk6IEp1c3QgdXNl
IHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKCkuCisKIDIwMTAtMDctMTUgIFNoZXJpZmYg
Qm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQs
IHJvbGxpbmcgb3V0IHI2MzQ0Ni4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9zcmMvR3JhcGhpY3ND
b250ZXh0M0QuY3BwCShyZXZpc2lvbiA2MzQ4NikKKysrIFdlYktpdC9jaHJvbWl1bS9zcmMvR3Jh
cGhpY3NDb250ZXh0M0QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDcgQEAgcHVi
bGljOgogCiAgICAgdm9pZCByZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAKKyAgICB2
b2lkIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCog
Y29udGV4dCk7CiAgICAgdm9pZCBiZWdpblBhaW50KFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29u
dGV4dCk7CiAgICAgdm9pZCBlbmRQYWludCgpOwogCkBAIC0zOTksNyArNDAwLDcgQEAgV2ViR0xM
YXllckNocm9taXVtKiBHcmFwaGljc0NvbnRleHQzREludAogfQogI2VuZGlmCiAKLXZvaWQgR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWludChXZWJHTFJlbmRlcmluZ0NvbnRleHQq
IGNvbnRleHQpCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnBhaW50UmVuZGVyaW5n
UmVzdWx0c1RvQ2FudmFzKFdlYkdMUmVuZGVyaW5nQ29udGV4dCogY29udGV4dCkKIHsKICAgICBI
VE1MQ2FudmFzRWxlbWVudCogY2FudmFzID0gY29udGV4dC0+Y2FudmFzKCk7CiAgICAgSW1hZ2VC
dWZmZXIqIGltYWdlQnVmZmVyID0gY2FudmFzLT5idWZmZXIoKTsKQEAgLTQ0OSw0NCArNDUwLDIw
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmVnaW5QYWkKICAgICAgICAgY2Fu
dmFzLmRyYXdCaXRtYXBSZWN0KG1fcmVzaXppbmdCaXRtYXAsIDAsIGRzdCk7CiAgICAgfQogI2Vs
aWYgUExBVEZPUk0oQ0cpCi0gICAgaWYgKG1fcmVuZGVyT3V0cHV0KSB7Ci0gICAgICAgIGludCBy
b3dCeXRlcyA9IG1faW1wbC0+d2lkdGgoKSAqIDQ7Ci0gICAgICAgIENHRGF0YVByb3ZpZGVyUmVm
IGRhdGFQcm92aWRlciA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0aERhdGEoMCwgbV9yZW5kZXJP
dXRwdXQsIHJvd0J5dGVzICogbV9pbXBsLT5oZWlnaHQoKSwgMCk7Ci0gICAgICAgIENHQ29sb3JT
cGFjZVJlZiBjb2xvclNwYWNlID0gQ0dDb2xvclNwYWNlQ3JlYXRlRGV2aWNlUkdCKCk7Ci0gICAg
ICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IENHSW1hZ2VDcmVhdGUobV9pbXBsLT53aWR0aCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1faW1wbC0+aGVpZ2h0
KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dCeXRlcywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvclNwYWNlLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBsaWVkRmlyc3Qg
fCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YVByb3ZpZGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a0NHUmVuZGVyaW5nSW50ZW50RGVmYXVsdCk7Ci0gICAgICAgIC8vIENTUyBzdHlsaW5nIG1heSBj
YXVzZSB0aGUgY2FudmFzJ3MgY29udGVudCB0byBiZSByZXNpemVkIG9uCi0gICAgICAgIC8vIHRo
ZSBwYWdlLiBHbyBiYWNrIHRvIHRoZSBDYW52YXMgdG8gZmlndXJlIG91dCB0aGUgY29ycmVjdAot
ICAgICAgICAvLyB3aWR0aCBhbmQgaGVpZ2h0IHRvIGRyYXcuCi0gICAgICAgIENHUmVjdCByZWN0
ID0gQ0dSZWN0TWFrZSgwLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGV4dC0+Y2FudmFzKCktPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250ZXh0LT5jYW52YXMoKS0+aGVpZ2h0KCkpOwotICAgICAgICAvLyBXZSB3YW50IHRvIGNv
bXBsZXRlbHkgb3ZlcndyaXRlIHRoZSBwcmV2aW91cyBmcmFtZSdzCi0gICAgICAgIC8vIHJlbmRl
cmluZyByZXN1bHRzLgotICAgICAgICBDR0NvbnRleHRTZXRCbGVuZE1vZGUoaW1hZ2VCdWZmZXIt
PmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBrQ0dCbGVuZE1vZGVDb3B5KTsKLSAgICAgICAgQ0dDb250ZXh0U2V0SW50ZXJwb2xhdGlv
blF1YWxpdHkoaW1hZ2VCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR0ludGVycG9sYXRpb25Ob25l
KTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBs
YXRmb3JtQ29udGV4dCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdCwgY2dJbWFn
ZSk7Ci0gICAgICAgIENHSW1hZ2VSZWxlYXNlKGNnSW1hZ2UpOwotICAgICAgICBDR0NvbG9yU3Bh
Y2VSZWxlYXNlKGNvbG9yU3BhY2UpOwotICAgICAgICBDR0RhdGFQcm92aWRlclJlbGVhc2UoZGF0
YVByb3ZpZGVyKTsKLSAgICB9CisgICAgaWYgKG1fcmVuZGVyT3V0cHV0KQorICAgICAgICBjb250
ZXh0LT5ncmFwaGljc0NvbnRleHQzRCgpLT5wYWludFRvQ2FudmFzKG1fcmVuZGVyT3V0cHV0LCBt
X2ltcGwtPndpZHRoKCksIG1faW1wbC0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FudmFzLT53aWR0aCgpLCBjYW52YXMtPmhl
aWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGltYWdlQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpKTsKICNlbHNlCiAj
ZXJyb3IgTXVzdCBwb3J0IHRvIHlvdXIgcGxhdGZvcm0KICNlbmRpZgogfQogCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OmJlZ2luUGFpbnQoV2ViR0xSZW5kZXJpbmdDb250ZXh0KiBj
b250ZXh0KQoreworICAgIHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKGNvbnRleHQpOwor
fQorCiB2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmVuZFBhaW50KCkKIHsKIH0KQEAg
LTEzMjUsNiArMTMwMiw3IEBAIERFTEVHQVRFX1RPX0lOVEVSTkFMXzYodmVydGV4QXR0cmliUG9p
bnQKIAogREVMRUdBVEVfVE9fSU5URVJOQUxfNCh2aWV3cG9ydCwgbG9uZywgbG9uZywgdW5zaWdu
ZWQgbG9uZywgdW5zaWduZWQgbG9uZykKIAorREVMRUdBVEVfVE9fSU5URVJOQUxfMShwYWludFJl
bmRlcmluZ1Jlc3VsdHNUb0NhbnZhcywgV2ViR0xSZW5kZXJpbmdDb250ZXh0KikKIERFTEVHQVRF
X1RPX0lOVEVSTkFMXzEoYmVnaW5QYWludCwgV2ViR0xSZW5kZXJpbmdDb250ZXh0KikKIERFTEVH
QVRFX1RPX0lOVEVSTkFMKGVuZFBhaW50KQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA2MzQ4NikKKysr
IExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisy
MDEwLTA3LTEzICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViR0wgcmVuZGVyaW5nIHJlc3VsdHMg
bXVzdCBiZSBtYWRlIGF2YWlsYWJsZSB0byBDYW52YXMudG9EYXRhVVJMIGFuZCAyRCBkcmF3SW1h
Z2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0NzE5
CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2NhbnZhcy10ZXN0Lmh0bWw6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxzdG9yZWku
aHRtbDogQWRkZWQuCisKIDIwMTAtMDctMTUgIEFsZXggTmljb2xhb3UgIDxhbmljb2xhb0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9jYW52YXMtdGVzdC1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFzLXRlc3QtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY2Fu
dmFzLXRlc3QtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACitUaGlz
IHRlc3QgZW5zdXJlcyBXZWJHTCBpbXBsZW1lbnRhdGlvbnMgaW50ZXJhY3QgY29ycmVjdGx5IHdp
dGggdGhlIGNhbnZhcyB0YWcuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitDYW52
YXMuZ2V0Q29udGV4dAorUEFTUyBjb250ZXh0IGV4aXN0cworCitDaGVja2luZyBjYW52YXMgYW5k
IFdlYkdMIGludGVyYWN0aW9uCitQQVNTIGNhbnZhcy53aWR0aCBpcyAzMDAKK1BBU1MgY2FudmFz
LmhlaWdodCBpcyAxNTAKK1BBU1MgcGl4ZWxzIGFyZSAwLDAsMCwwCitQQVNTIGdldFZpZXdwb3J0
KCkgaXMgIjAsMCwzMDAsMTUwIgorCitjaGFuZ2UgZGlzcGxheSBzaXplIG9mIGNhbnZhcyBhbmQg
c2VlIHRoYXQgdmlld3BvcnQgZG9lcyBub3QgY2hhbmdlCitQQVNTIGdldFZpZXdwb3J0KCkgaXMg
IjAsMCwzMDAsMTUwIgorUEFTUyBjYW52YXMud2lkdGggaXMgMzAwCitQQVNTIGNhbnZhcy5oZWln
aHQgaXMgMTUwCisKK2NoYW5nZSB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIGNhbnZhcyBhbmQgc2Vl
IHRoYXQgdGhlIHZpZXdwb3J0IGRvZXMgbm90IGNoYW5nZQorUEFTUyBwaXhlbHMgYXJlIDY0LDEy
OCwxOTIsMjU1CitQQVNTIGdsLmNsZWFyQ29sb3Igc2hvdWxkIG5vdCBjaGFuZ2UgYWZ0ZXIgY2Fu
dmFzIHJlc2l6ZQorUEFTUyBnbC5jb2xvck1hc2sgc2hvdWxkIG5vdCBjaGFuZ2UgYWZ0ZXIgY2Fu
dmFzIHJlc2l6ZQorUEFTUyBnZXRWaWV3cG9ydCgpIGlzICIwLDAsMzAwLDE1MCIKK1BBU1MgcGl4
ZWxzIGFyZSAwLDAsMCwwCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorIApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvY2FudmFz
LXRlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9j
YW52YXMtdGVzdC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvY2FudmFzLXRlc3QuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTUgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8v
RU4iCisgICJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgorPGh0bWw+Cis8
aGVhZD4KKzxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1s
OyBjaGFyc2V0PXV0Zi04Ij4KKzx0aXRsZT5XZWJHTCBDYW52YXMgQ29uZm9ybWFuY2UgVGVzdHM8
L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZGVza3RvcC1nbC1j
b25zdGFudHMuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvd2ViZ2wtdGVzdC5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pgor
PGNhbnZhcyBpZD0iY2FudmFzIiBzdHlsZT0id2lkdGg6IDUwcHg7IGhlaWdodDogNTBweDsiPiA8
L2NhbnZhcz4KKzxjYW52YXMgaWQ9ImNhbnZhczJkIiB3aWR0aD0iNDAiIGhlaWdodD0iNDAiPiA8
L2NhbnZhcz4KKzxzY3JpcHQ+CitpZiAod2luZG93LmluaXROb25LaHJvbm9zRnJhbWV3b3JrKSB7
CisgIHdpbmRvdy5pbml0Tm9uS2hyb25vc0ZyYW1ld29yayh0cnVlKTsKK30KKworZGVzY3JpcHRp
b24oIlRoaXMgdGVzdCBlbnN1cmVzIFdlYkdMIGltcGxlbWVudGF0aW9ucyBpbnRlcmFjdCBjb3Jy
ZWN0bHkgd2l0aCB0aGUgY2FudmFzIHRhZy4iKTsKKworZGVidWcoIiIpOworZGVidWcoIkNhbnZh
cy5nZXRDb250ZXh0Iik7CisKK3ZhciBjYW52YXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzIik7Cit2YXIgY2FudmFzMmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFz
MmQiKTsKK3ZhciBjdHgyZCA9IGNhbnZhczJkLmdldENvbnRleHQoIjJkIik7Cit2YXIgZ2wgPSBj
cmVhdGUzRENvbnRleHQoY2FudmFzKTsKK2lmICghZ2wpIHsKKyAgdGVzdEZhaWxlZCgiY29udGV4
dCBkb2VzIG5vdCBleGlzdCIpOworfSBlbHNlIHsKKyAgdGVzdFBhc3NlZCgiY29udGV4dCBleGlz
dHMiKTsKKworICBkZWJ1ZygiIik7CisgIGRlYnVnKCJDaGVja2luZyBjYW52YXMgYW5kIFdlYkdM
IGludGVyYWN0aW9uIik7CisKKyAgLy8gQ2hlY2sgdGhhdCBhIGNhbnZhcyB3aXRoIG5vIHdpZHRo
IG9yIGhlaWdodCBpcyAzMDB4MTUwIHBpeGVscworICBzaG91bGRCZSgnY2FudmFzLndpZHRoJywg
JzMwMCcpOworICBzaG91bGRCZSgnY2FudmFzLmhlaWdodCcsICcxNTAnKTsKKworICAvLyBDaGVj
ayBnZXQgYSA0IHZhbHVlIGdsIHBhcmFtZXRlciBhcyBhIGNzdiBzdHJpbmcuCisgIGZ1bmN0aW9u
IGdldFZhbHVlNHYobmFtZSkgeworICAgIHZhciB2ID0gZ2wuZ2V0UGFyYW1ldGVyKG5hbWUpOwor
ICAgIHZhciByZXN1bHQgPSAnJyArCisgICAgICAgIHZbMF0gKyAnLCcgKworICAgICAgICB2WzFd
ICsgJywnICsKKyAgICAgICAgdlsyXSArICcsJyArCisgICAgICAgIHZbM107CisgICAgcmV0dXJu
IHJlc3VsdDsKKyAgfQorCisgIGZ1bmN0aW9uIGdldFZpZXdwb3J0KCkgeworICAgIHJldHVybiBn
ZXRWYWx1ZTR2KGdsLlZJRVdQT1JUKTsKKyAgfQorCisgIGZ1bmN0aW9uIGdldENsZWFyQ29sb3Io
KSB7CisgICAgcmV0dXJuIGdldFZhbHVlNHYoZ2wuQ09MT1JfQ0xFQVJfVkFMVUUpOworICB9CisK
KyAgZnVuY3Rpb24gaXNBYm91dEVxdWFsKGEsIGIpIHsKKyAgICByZXR1cm4gTWF0aC5hYnMoYSAt
IGIpIDwgMC4wMTsKKyAgfQorCisgIGZ1bmN0aW9uIGlzQWJvdXRFcXVhbEludChhLCBiKSB7Cisg
ICAgcmV0dXJuIE1hdGguYWJzKGEgLSBiKSA8IDM7CisgIH0KKworICBmdW5jdGlvbiBjaGVja0Nh
bnZhc0NvbnRlbnRJcyhyM2QsZzNkLGIzZCxhM2QpIHsKKyAgICB2YXIgcjJkOworICAgIHZhciBn
MmQ7CisgICAgdmFyIGIyZDsKKyAgICB2YXIgYTJkOworCisgICAgZnVuY3Rpb24gY2hlY2tQaXhl
bCh4LCB5LCByM2QsZzNkLGIzZCxhM2QpIHsKKyAgICAgIHZhciBvZmZzZXQgPSAoeSAqIDQwICsg
eCkgKiA0OworICAgICAgcjJkID0gaW1nRGF0YS5kYXRhW29mZnNldF07CisgICAgICBnMmQgPSBp
bWdEYXRhLmRhdGFbb2Zmc2V0ICsgMV07CisgICAgICBiMmQgPSBpbWdEYXRhLmRhdGFbb2Zmc2V0
ICsgMl07CisgICAgICBhMmQgPSBpbWdEYXRhLmRhdGFbb2Zmc2V0ICsgM107CisgICAgICAvL2Rl
YnVnKCcnICsgeCArICcsICcgKyB5ICsgIigiICsgb2Zmc2V0ICsgIikgPSAiICsgcjJkICsgIiwg
IiArIGcyZCArICIsICIgKyBiMmQgKyAiLCAiICsgYTJkKTsKKyAgICAgIHJldHVybiBpc0Fib3V0
RXF1YWxJbnQocjJkLCByM2QpICYmCisgICAgICAgICAgICAgaXNBYm91dEVxdWFsSW50KGcyZCwg
ZzNkKSAmJgorICAgICAgICAgICAgIGlzQWJvdXRFcXVhbEludChiMmQsIGIzZCkgJiYKKyAgICAg
ICAgICAgICBpc0Fib3V0RXF1YWxJbnQoYTJkLCBhM2QpOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGNoZWNrUGl4ZWxzKHIzZCxnM2QsYjNkLGEzZCkgeworICAgICAgcmV0dXJuIGNoZWNrUGl4ZWwo
MCwgMCwgcjNkLCBnM2QsIGIzZCwgYTNkKSAmJgorICAgICAgICAgICAgIGNoZWNrUGl4ZWwoMCwg
MzksIHIzZCwgZzNkLCBiM2QsIGEzZCkgJiYKKyAgICAgICAgICAgICBjaGVja1BpeGVsKDM5LCAw
LCByM2QsIGczZCwgYjNkLCBhM2QpICYmCisgICAgICAgICAgICAgY2hlY2tQaXhlbCgzOSwgMzks
IHIzZCwgZzNkLCBiM2QsIGEzZCkgJiYKKyAgICAgICAgICAgICBjaGVja1BpeGVsKDAsIDAsIHIz
ZCwgZzNkLCBiM2QsIGEzZCk7CisgICAgfTsKKworICAgIC8vIFNldCB0byBqdXN0IHRha2UgdGhl
IGNvbG9yIGZyb20gdGhlIDNkIGNhbnZhcworICAgIGN0eDJkLmdsb2JhbENvbXBvc2l0ZU9wZXJh
dGlvbiA9ICdjb3B5JzsKKworICAgIC8vIGZpbGwgMmQgY2FudmFzIHdpdGggb3JhbmdlCisgICAg
Y3R4MmQuZmlsbFN0eWxlID0gInJnYigyNTUsMTkyLDEyOCkiOworICAgIGN0eDJkLmZpbGxSZWN0
ICgwLCAwLCA0MCwgNDApOworCisgICAgLy8gZ2V0IHRoZSBpbWFnZSBkYXRhCisgICAgdmFyIGlt
Z0RhdGEgPSBjdHgyZC5nZXRJbWFnZURhdGEoMCwgMCwgNDAsIDQwKTsKKworICAgIC8vIGNoZWNr
IGl0IGdvdCBjbGVhcmVkLgorICAgIGlmICghY2hlY2tQaXhlbHMoMjU1LCAxOTIsIDEyOCwgMjU1
KSkgeworICAgICAgdGVzdEZhaWxlZCgidW5hYmxlIHRvIGZpbGwgMmQgY29udGV4dC4iKTsKKyAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBkcmF3IDNkIGNhbnZhcyBvbiB0b3AuCisgICAg
Y3R4MmQuZHJhd0ltYWdlKGNhbnZhcywgMCwwLCA0MCwgNDApOworCisgICAgLy8gZ2V0IHRoZSBp
bWFnZSBkYXRhCisgICAgdmFyIGltZ0RhdGEgPSBjdHgyZC5nZXRJbWFnZURhdGEoMCwgMCwgNDAs
IDQwKTsKKworICAgIC8vIENoZWNrIGl0J3MgdGhlIGV4cGVjdGVkIGNvbG9yLgorICAgIGlmICgh
Y2hlY2tQaXhlbHMocjNkLCBnM2QsIGIzZCwgYTNkKSkgeworICAgICB0ZXN0RmFpbGVkKCJwaXhl
bHMgYXJlICIgKyByMmQgKyAiLCIgKyBnMmQgKyAiLCIgKyBiMmQgKyAiLCIgKyBhMmQgKworICAg
ICAgICAgICAgICAgICIgZXhwZWN0ZWQgIiArIHIzZCArICIsIiArIGczZCArICIsIiArIGIzZCAr
ICIsIiArIGEzZCk7CisgICAgfSBlbHNlIHsKKyAgICAgIHRlc3RQYXNzZWQoInBpeGVscyBhcmUg
IiArIHIzZCArICIsIiArIGczZCArICIsIiArIGIzZCArICIsIiArIGEzZCk7CisgICAgfQorICB9
CisKKyAgY2hlY2tDYW52YXNDb250ZW50SXMoMCwgMCwgMCwgMCk7CisgIHNob3VsZEJlKCdnZXRW
aWV3cG9ydCgpJywgJyIwLDAsMzAwLDE1MCInKTsKKworICAvLyBDaGFuZ2UgdGhlIGRpc3BsYXkg
c2l6ZSBvZiB0aGUgY2FudmFzIGFuZCBjaGVjaworICAvLyB0aGUgdmlld3BvcnQgc2l6ZSBkb2Vz
IG5vdCBjaGFuZ2UuCisgIGRlYnVnKCIiKTsKKyAgZGVidWcoImNoYW5nZSBkaXNwbGF5IHNpemUg
b2YgY2FudmFzIGFuZCBzZWUgdGhhdCB2aWV3cG9ydCBkb2VzIG5vdCBjaGFuZ2UiKTsKKyAgY2Fu
dmFzLnN0eWxlLndpZHRoID0gIjEwMHB4IjsKKyAgY2FudmFzLnN0eWxlLmhlaWdodCA9ICIyNXB4
IjsKKyAgdmFyIGludGVydmFsSWQ7CisgIGludGVydmFsSWQgPSB3aW5kb3cuc2V0SW50ZXJ2YWwo
ZnVuY3Rpb24oKSB7CisgICAgaWYgKGNhbnZhcy5jbGllbnRXaWR0aCA9PSAxMDAgJiYKKyAgICAg
ICAgY2FudmFzLmNsaWVudEhlaWdodCA9PSAyNSkgeworICAgICAgd2luZG93LmNsZWFySW50ZXJ2
YWwoaW50ZXJ2YWxJZCk7CisgICAgICBzaG91bGRCZSgnZ2V0Vmlld3BvcnQoKScsICciMCwwLDMw
MCwxNTAiJyk7CisgICAgICBzaG91bGRCZSgnY2FudmFzLndpZHRoJywgJzMwMCcpOworICAgICAg
c2hvdWxkQmUoJ2NhbnZhcy5oZWlnaHQnLCAnMTUwJyk7CisKKyAgICAgIC8vIENoYW5nZSB0aGUg
YWN0dWFsIHNpemUgb2YgdGhlIGNhbnZhcworICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgdmlld3Bv
cnQgZG9lcyBub3QgY2hhbmdlLgorICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgY2xlYXIgY29sb3Ig
ZG9lcyBub3QgY2hhbmdlLgorICAgICAgLy8gQ2hlY2sgdGhhdCB0aGUgY29sb3IgbWFzayBkb2Vz
IG5vdCBjaGFuZ2UuCisgICAgICBkZWJ1ZygiIik7CisgICAgICBkZWJ1ZygiY2hhbmdlIHRoZSBh
Y3R1YWwgc2l6ZSBvZiB0aGUgY2FudmFzIGFuZCBzZWUgdGhhdCB0aGUgdmlld3BvcnQgZG9lcyBu
b3QgY2hhbmdlIik7CisgICAgICBnbC5jbGVhckNvbG9yKDAuMjUsIDAuNSwgMC43NSwgMSk7Cisg
ICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7
CisgICAgICBjaGVja0NhbnZhc0NvbnRlbnRJcyg2NCwgMTI4LCAxOTIsIDI1NSk7CisgICAgICBn
bC5jb2xvck1hc2soMCwwLDAsMCk7CisgICAgICBjYW52YXMud2lkdGggPSA0MDA7CisgICAgICBj
YW52YXMuaGVpZ2h0ID0gMTA7CisKKyAgICAgIHZhciB2ID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLkNP
TE9SX0NMRUFSX1ZBTFVFKTsKKyAgICAgIGFzc2VydE1zZyhpc0Fib3V0RXF1YWwodlswXSwgMC4y
NSkgJiYKKyAgICAgICAgICAgICAgICBpc0Fib3V0RXF1YWwodlsxXSwgMC41KSAmJgorICAgICAg
ICAgICAgICAgIGlzQWJvdXRFcXVhbCh2WzJdLCAwLjc1KSAmJgorICAgICAgICAgICAgICAgIGlz
QWJvdXRFcXVhbCh2WzNdLCAxKSwKKyAgICAgICAgICAgICAgICAiZ2wuY2xlYXJDb2xvciBzaG91
bGQgbm90IGNoYW5nZSBhZnRlciBjYW52YXMgcmVzaXplIik7CisgICAgICB2ID0gZ2wuZ2V0UGFy
YW1ldGVyKGdsLkNPTE9SX1dSSVRFTUFTSyk7CisgICAgICBhc3NlcnRNc2coaXNBYm91dEVxdWFs
KHZbMF0sIDApICYmCisgICAgICAgICAgICAgICAgaXNBYm91dEVxdWFsKHZbMV0sIDApICYmCisg
ICAgICAgICAgICAgICAgaXNBYm91dEVxdWFsKHZbMl0sIDApICYmCisgICAgICAgICAgICAgICAg
aXNBYm91dEVxdWFsKHZbM10sIDApLAorICAgICAgICAgICAgICAgICJnbC5jb2xvck1hc2sgc2hv
dWxkIG5vdCBjaGFuZ2UgYWZ0ZXIgY2FudmFzIHJlc2l6ZSIpOworICAgICAgc2hvdWxkQmUoJ2dl
dFZpZXdwb3J0KCknLCAnIjAsMCwzMDAsMTUwIicpOworICAgICAgY2hlY2tDYW52YXNDb250ZW50
SXMoMCwgMCwgMCwgMCk7CisKKyAgICAgIGRlYnVnKCIiKTsKKyAgICAgIHN1Y2Nlc3NmdWxseVBh
cnNlZCA9IHRydWU7CisgICAgICB2YXIgZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJzY3JpcHQiKTsKKyAgICAgIGVwaWxvZ3VlLm9ubG9hZCA9IGZpbmlzaDsKKyAgICAgIGVwaWxv
Z3VlLnNyYyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKKyAgICAgIGRv
Y3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZXBpbG9ndWUpOworICAgIH0KKyAgIH0sIDEwMDAvMzAp
OworfQorCitmdW5jdGlvbiBmaW5pc2goKSB7CisgIGlmICh3aW5kb3cubm9uS2hyb25vc0ZyYW1l
d29ya05vdGlmeURvbmUpIHsKKyAgICB3aW5kb3cubm9uS2hyb25vc0ZyYW1ld29ya05vdGlmeURv
bmUoKTsKKyAgfQorfQorCis8L3NjcmlwdD4KKzxzY3JpcHQ+Cis8L3NjcmlwdD4KKworPC9ib2R5
PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvZ2wtcGl4ZWxz
dG9yZWktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL2dsLXBpeGVsc3RvcmVpLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyMSBAQAorICAgIAorVGhlcmUgc2hvdWxkIGJlIDUgcmVkIHRy
aWFuZ2xlcyBvbiA1IGJsYWNrIHNxdWFyZXMgYWJvdmUKKworVGhpcyB0ZXN0IGNoZWNrcyB0aGF0
IGRyYXdJbWFnZSBhbmQgcmVhZFBpeGVscyBhcmUgbm90IGVmZmVjdGVkIGJ5IGdsLlBpeGVsc3Rv
cmVpKGdsLlBBQ0tfQUxJR05NRU5UKSBhbmQgdmlzYSB2ZXJzYQorCitQQVNTIGRyYXdpbmcgaXMg
Y29ycmVjdCBpbiAzZCBjb250ZXh0CitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAyZCBjb250
ZXh0CitQQVNTIFBBQ0tfQUxJR05NRU5UIGlzIDEKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGlu
IDNkIGNvbnRleHQKK1BBU1MgZHJhd2luZyBpcyBjb3JyZWN0IGluIDJkIGNvbnRleHQKK1BBU1Mg
UEFDS19BTElHTk1FTlQgaXMgMgorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gM2QgY29udGV4
dAorUEFTUyBkcmF3aW5nIGlzIGNvcnJlY3QgaW4gMmQgY29udGV4dAorUEFTUyBQQUNLX0FMSUdO
TUVOVCBpcyA0CitQQVNTIGRyYXdpbmcgaXMgY29ycmVjdCBpbiAzZCBjb250ZXh0CitQQVNTIGRy
YXdpbmcgaXMgY29ycmVjdCBpbiAyZCBjb250ZXh0CitQQVNTIFBBQ0tfQUxJR05NRU5UIGlzIDgK
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1waXhlbHN0b3JlaS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2dsLXBpeGVsc3RvcmVpLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9nbC1waXhl
bHN0b3JlaS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyNCBAQAorPCFET0NUWVBFIEhU
TUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiIKKyAgImh0
dHA6Ly93d3cudzMub3JnL1RSL2h0bWw0L2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxoZWFkPgorPHRp
dGxlPldlYkdMIHBpeGVsU3RvcmVpIFRlc3Q8L3RpdGxlPgorPGxpbmsgcmVsPSJzdHlsZXNoZWV0
IiBocmVmPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MiLz4KKzxzY3JpcHQg
c3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InJlc291cmNlcy93ZWJnbC10ZXN0LmpzIj4gPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
cmVzb3VyY2VzL2Rlc2t0b3AtZ2wtY29uc3RhbnRzLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0i
NTAiIGhlaWdodD0iNTAiPjwvY2FudmFzPgorPGNhbnZhcyBpZD0iMmQwMCIgd2lkdGg9IjUwIiBo
ZWlnaHQ9IjUwIj48L2NhbnZhcz4KKzxjYW52YXMgaWQ9IjJkMDEiIHdpZHRoPSI1MCIgaGVpZ2h0
PSI1MCI+PC9jYW52YXM+Cis8Y2FudmFzIGlkPSIyZDAyIiB3aWR0aD0iNTAiIGhlaWdodD0iNTAi
PjwvY2FudmFzPgorPGNhbnZhcyBpZD0iMmQwMyIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L2Nh
bnZhcz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwv
ZGl2PgorPHNjcmlwdCBpZD0idnNoYWRlciIgdHlwZT0ieC1zaGFkZXIveC12ZXJ0ZXgiPgorYXR0
cmlidXRlIHZlYzQgdlBvc2l0aW9uOwordm9pZCBtYWluKCkgeworICBnbF9Qb3NpdGlvbiA9IHZQ
b3NpdGlvbjsKK30KKzwvc2NyaXB0PgorCis8c2NyaXB0IGlkPSJmc2hhZGVyIiB0eXBlPSJ4LXNo
YWRlci94LWZyYWdtZW50Ij4KK3ZvaWQgbWFpbigpIHsKKyAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgx
LjAsMC4wLDAuMCwxLjApOworfQorPC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBmYWls
KHgseSwgbmFtZSwgYnVmLCBzaG91bGRCZSkgeworICB2YXIgaSA9ICh5KjUwK3gpICogNDsKKyAg
dmFyIHJlYXNvbiA9ICJwaXhlbCBpbiAiK25hbWUrIiBhdCAoIit4KyIsIit5KyIpIGlzICgiK2J1
ZltpXSsiLCIrYnVmW2krMV0rIiwiK2J1ZltpKzJdKyIsIitidWZbaSszXSsiKSwgc2hvdWxkIGJl
ICIrc2hvdWxkQmU7CisgIHRlc3RGYWlsZWQocmVhc29uKTsKK30KKworZnVuY3Rpb24gcGFzcyhu
YW1lKSB7CisgIHRlc3RQYXNzZWQoImRyYXdpbmcgaXMgY29ycmVjdCBpbiAiICsgbmFtZSk7Cit9
CisKK2Z1bmN0aW9uIGluaXQoKSB7CisgIGRlYnVnKCJUaGVyZSBzaG91bGQgYmUgNSByZWQgdHJp
YW5nbGVzIG9uIDUgYmxhY2sgc3F1YXJlcyBhYm92ZSIpOworICBkZWJ1ZygiIik7CisKKyAgZGVi
dWcoIlRoaXMgdGVzdCBjaGVja3MgdGhhdCBkcmF3SW1hZ2UgYW5kIHJlYWRQaXhlbHMgYXJlIG5v
dCBlZmZlY3RlZCBieSBnbC5QaXhlbHN0b3JlaShnbC5QQUNLX0FMSUdOTUVOVCkgYW5kIHZpc2Eg
dmVyc2EiKTsKKyAgZGVidWcoIiIpOworCisgIHZhciBjYW52YXMzZCA9IGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCJleGFtcGxlIik7CisgIGdsID0gaW5pdFdlYkdMKCJleGFtcGxlIiwgInZzaGFk
ZXIiLCAiZnNoYWRlciIsIFsgInZQb3NpdGlvbiJdLCBbIDAsIDAsIDAsIDEgXSwgMSk7CisKKyAg
dmFyIHZlcnRleE9iamVjdCA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICBnbC5iaW5kQnVmZmVyKGds
LkFSUkFZX0JVRkZFUiwgdmVydGV4T2JqZWN0KTsKKyAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9C
VUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWyAwLDAuNSwwLCAtMC41LC0wLjUsMCwgMC41LC0wLjUs
MCBdKSwgZ2wuU1RBVElDX0RSQVcpOworICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsK
KyAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigwLCAzLCBnbC5GTE9BVCwgZmFsc2UsIDAsIDApOwor
CisgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTsK
KyAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdMRVMsIDAsIDMpOworCisKKyAgZnVuY3Rpb24gY2hl
Y2tEYXRhKGJ1ZiwgbmFtZSkgeworICAgIC8vIFRlc3Qgc2V2ZXJhbCBsb2NhdGlvbnMKKyAgICAv
LyBGaXJzdCBsaW5lIHNob3VsZCBiZSBhbGwgYmxhY2sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDUwOyArK2kpIHsKKyAgICAgIGlmIChidWZbaSo0XSAhPSAwIHx8IGJ1ZltpKjQrMV0gIT0gMCB8
fCBidWZbaSo0KzJdICE9IDAgfHwgYnVmW2kqNCszXSAhPSAyNTUpIHsKKyAgICAgICAgZmFpbChp
LCAwLCBuYW1lLCBidWYsICIoMCwwLDAsMjU1KSIpOworICAgICAgICByZXR1cm47CisgICAgICB9
CisgICAgfQorCisgICAgLy8gTGluZSAyNSBzaG91bGQgYmUgcmVkIGZvciBhdCBsZWFzdCA2IHJl
ZCBwaXhlbHMgc3RhcnRpbmcgMjIgcGl4ZWxzIGluCisgICAgdmFyIG9mZnNldCA9ICgyNSo1MCsy
MikgKiA0OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNjsgKytpKSB7CisgICAgICBpZiAoYnVm
W29mZnNldCtpKjRdICE9IDI1NSB8fCBidWZbb2Zmc2V0K2kqNCsxXSAhPSAwIHx8IGJ1ZltvZmZz
ZXQraSo0KzJdICE9IDAgfHwgYnVmW29mZnNldCtpKjQrM10gIT0gMjU1KSB7CisgICAgICAgIGZh
aWwoMjIgKyBpLCAyNSwgbmFtZSwgYnVmLCAiKDI1NSwwLDAsMjU1KSIpOworICAgICAgICByZXR1
cm47CisgICAgICB9CisgICAgfQorCisgICAgLy8gTGFzdCBsaW5lIHNob3VsZCBiZSBhbGwgYmxh
Y2sKKyAgICBvZmZzZXQgPSAoNDkqNTApICogNDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUw
OyArK2kpIHsKKyAgICAgIGlmIChidWZbb2Zmc2V0K2kqNF0gIT0gMCB8fCBidWZbb2Zmc2V0K2kq
NCsxXSAhPSAwIHx8IGJ1ZltvZmZzZXQraSo0KzJdICE9IDAgfHwgYnVmW29mZnNldCtpKjQrM10g
IT0gMjU1KSB7CisgICAgICAgIGZhaWwoaSwgNDksIG5hbWUsIGJ1ZiwgIigwLDAsMCwyNTUpIik7
CisgICAgICAgIHJldHVybjsKKyAgICAgIH0KKyAgICB9CisKKyAgICBwYXNzKG5hbWUpOworICB9
CisKKyAgZnVuY3Rpb24gY2hlY2tDb2xvcnMoKSB7CisgICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFy
cmF5KDUwICogNTAgKiA0KTsKKyAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIDUwLCA1MCwgZ2wuUkdC
QSwgZ2wuVU5TSUdORURfQllURSwgYnVmKTsKKyAgICBjaGVja0RhdGEoYnVmLCAiM2QgY29udGV4
dCIpOworICAgIHZhciBpbWdEYXRhID0gY3R4MmQuZ2V0SW1hZ2VEYXRhKDAsIDAsIDUwLCA1MCk7
CisgICAgY2hlY2tEYXRhKGltZ0RhdGEuZGF0YSwgIjJkIGNvbnRleHQiKTsKKyAgfQorCisgIHZh
ciB0YWJsZSA9IFsxLCAyLCA0LCA4XTsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHRhYmxlLmxl
bmd0aDsgKytpaSkgeworICAgIGdsLnBpeGVsU3RvcmVpKGdsLlBBQ0tfQUxJR05NRU5ULCB0YWJs
ZVtpaV0pOworICAgIGN0eDJkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIjJkMCIgKyBpaSku
Z2V0Q29udGV4dCgiMmQiKTsKKyAgICBjdHgyZC5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb24gPSAn
Y29weSc7CisgICAgY3R4MmQuZHJhd0ltYWdlKGNhbnZhczNkLCAwLCAwKTsKKyAgICBjaGVja0Nv
bG9ycygpOworICAgIGFzc2VydE1zZyhnbC5nZXRQYXJhbWV0ZXIoZ2wuUEFDS19BTElHTk1FTlQp
ID09IHRhYmxlW2lpXSwKKyAgICAgICAgIlBBQ0tfQUxJR05NRU5UIGlzICIgKyB0YWJsZVtpaV0p
OworICB9Cit9CisKK2luaXQoKTsKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cis8L3Njcmlw
dD4KKzwvYm9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKworPHNjcmlwdD4KKzwvc2NyaXB0PgorCis8L2JvZHk+Cis8L2h0bWw+
Cg==
</data>
<flag name="review"
          id="49820"
          type_id="1"
          status="+"
          setter="japhet"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>61996</attachid>
            <date>2010-07-19 14:58:18 -0700</date>
            <delta_ts>2010-07-19 15:00:51 -0700</delta_ts>
            <desc>Patch fixing compiler warning</desc>
            <filename>warnings.patch</filename>
            <type>text/plain</type>
            <size>2799</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2MzY4OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMTAtMDctMTkgIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YkdMIHJlbmRlcmluZyByZXN1bHRzIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdG8gQ2FudmFzLnRv
RGF0YVVSTCBhbmQgMkQgZHJhd0ltYWdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zNDcxOQorCisgICAgICAgIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmcg
aW50cm9kdWNlZCBieSBvcmlnaW5hbCBwYXRjaC4gTm8gbmV3IHRlc3RzOworICAgICAgICBjb3Zl
cmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0dyYXBoaWNzQ29udGV4dDNETWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKToKKwogMjAxMC0wNy0xOSAgQ2hy
aXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gQWRsZXIuCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0Nv
bnRleHQzRE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQkocmV2aXNpb24gNjM2ODgpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5tbQkod29ya2luZyBjb3B5
KQpAQCAtMjU0LDcgKzI1NCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVy
aW5nUmUKIAogICAgIENHTFNldEN1cnJlbnRDb250ZXh0KG1fY29udGV4dE9iaik7CiAKLSAgICBi
b29sIG11c3RSZXN0b3JlRkJPOworICAgIGJvb2wgbXVzdFJlc3RvcmVGQk8gPSBmYWxzZTsKICAg
ICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKICAgICAgICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVY
VChHTF9SRUFEX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNhbXBsZUZCTyk7CiAgICAgICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1fZmJvKTsKSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNjM2ODgpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDctMTkgIEtlbm5ldGgg
UnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFdlYkdMIHJlbmRlcmluZyByZXN1bHRzIG11c3QgYmUgbWFkZSBh
dmFpbGFibGUgdG8gQ2FudmFzLnRvRGF0YVVSTCBhbmQgMkQgZHJhd0ltYWdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDcxOQorCisgICAgICAgIEZp
eGVkIGNvbXBpbGVyIHdhcm5pbmcgaW50cm9kdWNlZCBieSBvcmlnaW5hbCBwYXRjaC4KKworICAg
ICAgICAqIHNyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6cmVhZEJhY2tGcmFtZWJ1
ZmZlcik6CisKIDIwMTAtMDctMTkgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBLZW50IFRhbXVyYS4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9z
cmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcAkocmV2
aXNpb24gNjM2ODgpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNE
RGVmYXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTAsNyArNzEwLDcgQEAgYm9vbCBX
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpyZQogICAgIC8vIHZlcnRpY2FsIGZsaXAg
aXMgb25seSBhIHRlbXBvcmFyeSBzb2x1dGlvbiBhbnl3YXkgdW50aWwgQ2hyb21lCiAgICAgLy8g
aXMgZnVsbHkgR1BVIGNvbXBvc2l0ZWQsIGl0IHdhc24ndCB3b3J0aCB0aGUgY29tcGxleGl0eS4K
IAotICAgIGJvb2wgbXVzdFJlc3RvcmVGQk87CisgICAgYm9vbCBtdXN0UmVzdG9yZUZCTyA9IGZh
bHNlOwogICAgIGlmIChtX2F0dHJpYnV0ZXMuYW50aWFsaWFzKSB7CiAgICAgICAgIGdsQmluZEZy
YW1lYnVmZmVyRVhUKEdMX1JFQURfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsK
ICAgICAgICAgZ2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRFJBV19GUkFNRUJVRkZFUl9FWFQsIG1f
ZmJvKTsK
</data>
<flag name="review"
          id="50103"
          type_id="1"
          status="+"
          setter="japhet"
    />
    <flag name="commit-queue"
          id="50104"
          type_id="3"
          status="-"
          setter="kbr"
    />
          </attachment>
      

    </bug>

</bugzilla>