<?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>99829</bug_id>
          
          <creation_ts>2012-10-19 04:50:13 -0700</creation_ts>
          <short_desc>OpenCL version of SourceAlpha, SourceGraphics and FETurbulence filter effects</short_desc>
          <delta_ts>2012-11-26 21:05:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>70099</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Tamas Czene">tczene</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>arsenm2</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dino</cc>
    
    <cc>galpeter</cc>
    
    <cc>krit</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>loki</cc>
    
    <cc>szledan</cc>
    
    <cc>thorton</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>746218</commentid>
    <comment_count>0</comment_count>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-10-19 04:50:13 -0700</bug_when>
    <thetext>SourceAlpha, SourceGraphics and FETurbulence filter need to be implemented on OpenCL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746224</commentid>
    <comment_count>1</comment_count>
      <attachid>169600</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-10-19 05:04:23 -0700</bug_when>
    <thetext>Created attachment 169600
proposed patch

This patch contains the OpenCL implementation of SourceAlpha, SourceGraphic, FETurbulence and a simple OpenCL environment.
This is only included in Qt linux build.

After applying this patch, SVG/Turbulence tests can be sped up greatly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746225</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-19 05:06:39 -0700</bug_when>
    <thetext>Attachment 169600 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/filters/OpenCL/OpenCLHandle.h:33:  cl_mem is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746226</commentid>
    <comment_count>3</comment_count>
      <attachid>169601</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-10-19 05:07:15 -0700</bug_when>
    <thetext>Created attachment 169601
svg files

Here are some tests results:
Before applying:

Methanol Benchmark (version: 3%)

svg/turbulence.svg: 42.386 (10.832363160749017%)

svg/turbulence2.svg: 103.58 (4.411911339871702%)

After applying:

Methanol Benchmark (version: 3%)

svg/turbulence.svg: 15.48 (8.185547318582563%)

svg/turbulence2.svg: 27.668 (4.040529884401583%)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>746298</commentid>
    <comment_count>4</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2012-10-19 07:52:23 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Created an attachment (id=169601) [details]
&gt; svg files
&gt; 
&gt; Here are some tests results:
&gt; Before applying:
&gt; 
&gt; Methanol Benchmark (version: 3%)
&gt; 
&gt; svg/turbulence.svg: 42.386 (10.832363160749017%)
&gt; 
&gt; svg/turbulence2.svg: 103.58 (4.411911339871702%)
&gt; 
&gt; After applying:
&gt; 
&gt; Methanol Benchmark (version: 3%)
&gt; 
&gt; svg/turbulence.svg: 15.48 (8.185547318582563%)
&gt; 
&gt; svg/turbulence2.svg: 27.668 (4.040529884401583%)
Well, without more details these data don&apos;t make sense. What HW do you have? Did it run on GPU or CPU? What do the numbers mean? Time in seconds? What does 3% mean, what is the relation?

After all you need to discuss on the mailing list webkit-dev if there is an agreement to add it to WebKit. This is new functionality and must be maintained. It is less likely to get maintained when it just runs on one platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>747041</commentid>
    <comment_count>5</comment_count>
      <attachid>169600</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-10-20 20:43:08 -0700</bug_when>
    <thetext>Comment on attachment 169600
proposed patch

Makes lots of svg tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>749476</commentid>
    <comment_count>6</comment_count>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-10-24 01:54:03 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 169600 [details])
&gt; Makes lots of svg tests fail.

You are right, last time when i checked it all test was succesfull.

(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; Created an attachment (id=169601) [details] [details]
&gt; &gt; svg files
&gt; &gt; 
&gt; &gt; Here are some tests results:
&gt; &gt; Before applying:
&gt; &gt; 
&gt; &gt; Methanol Benchmark (version: 3%)
&gt; &gt; 
&gt; &gt; svg/turbulence.svg: 42.386 (10.832363160749017%)
&gt; &gt; 
&gt; &gt; svg/turbulence2.svg: 103.58 (4.411911339871702%)
&gt; &gt; 
&gt; &gt; After applying:
&gt; &gt; 
&gt; &gt; Methanol Benchmark (version: 3%)
&gt; &gt; 
&gt; &gt; svg/turbulence.svg: 15.48 (8.185547318582563%)
&gt; &gt; 
&gt; &gt; svg/turbulence2.svg: 27.668 (4.040529884401583%)
&gt; Well, without more details these data don&apos;t make sense. What HW do you have? Did it run on GPU or CPU? What do the numbers mean? Time in seconds? What does 3% mean, what is the relation?
&gt;

I will create a more detailed test on GPU and CPU.
 
&gt; After all you need to discuss on the mailing list webkit-dev if there is an agreement to add it to WebKit. This is new functionality and must be maintained. It is less likely to get maintained when it just runs on one platform.

I can build it only Qt, but it is easy to port to every platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772940</commentid>
    <comment_count>7</comment_count>
      <attachid>175437</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-11-21 07:15:50 -0800</bug_when>
    <thetext>Created attachment 175437
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772943</commentid>
    <comment_count>8</comment_count>
      <attachid>175439</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-11-21 07:18:58 -0800</bug_when>
    <thetext>Created attachment 175439
svg file

Benchmark results:

Qt Linux:
GPU: NVIDIA GeForce GT 440
CUDA Cores 96

CPU: Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz
4 Core

Software: 3-4 fps
OpenCL GPU: 15-17 fps

Mac
CPU:
Intel(R) Xeon(R) X5670 CPU @ 2.93GHz 
version: OpenCL 1.1
Compute Units: 24

ATI Radeon HD 5770
version: OpenCL 1.1
Compute Units: 10
400 Processing Units
Shader Clock:	650 MHz

Software: 16-18 fps
OpenCL CPU: 35-37 fps
OpenCL GPU: 47-50 fps</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>772959</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-21 07:39:45 -0800</bug_when>
    <thetext>Attachment 175437 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/gpu/opencl/OpenCLHandle.h:33:  cl_mem is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773002</commentid>
    <comment_count>10</comment_count>
      <attachid>175437</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-21 08:49:23 -0800</bug_when>
    <thetext>Comment on attachment 175437
proposed patch

Attachment 175437 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14908975

New failing tests:
inspector-protocol/debugger-terminate-dedicated-worker-while-paused.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773250</commentid>
    <comment_count>11</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-21 13:57:15 -0800</bug_when>
    <thetext>We are waiting for comments, thoughts, etc. about the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773844</commentid>
    <comment_count>12</comment_count>
    <who name="Peter Gal">galpeter</who>
    <bug_when>2012-11-22 05:04:59 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=175437&amp;action=review

&gt; Source/WebCore/Target.pri:4091
&gt; +    HEADERS += platform/graphics/gpu/opencl/OpenCLHandle.h
&gt; +    HEADERS += platform/graphics/gpu/opencl/FilterContextOpenCL.h
&gt; +    SOURCES += platform/graphics/gpu/opencl/FilterContextOpenCL.cpp
&gt; +    SOURCES += platform/graphics/gpu/opencl/OpenCLFESourceAlpha.cpp
&gt; +    SOURCES += platform/graphics/gpu/opencl/OpenCLFESourceGraphic.cpp
&gt; +    SOURCES += platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp

+= for all files looks a little overkill. You could use something like this (like in any other place):

HEADERS += .../OpenCLHandle.h \
           .../Filter...

and same for the SOURCES</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774260</commentid>
    <comment_count>13</comment_count>
      <attachid>175437</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-22 23:56:41 -0800</bug_when>
    <thetext>Comment on attachment 175437
proposed patch

Thanks for all comments, and thanks for the patch. r=me with a few comments:

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        This patch contains the OpenCL implementation of SourceAlpha, SourceGraphic, FETurbulence and a simple OpenCL environment.
&gt; +        This is only included in Qt linux build.

Please mention here the speedup. And a little more verbose about the patch.

&gt; Source/WebCore/platform/graphics/gpu/opencl/FilterContextOpenCL.cpp:38
&gt; +    static bool initFailed = false;

This name should int alreadyInitialized

&gt; Source/WebCore/platform/graphics/gpu/opencl/FilterContextOpenCL.cpp:52
&gt; +    size_t deviceBufferSize = -1;

Here deviceBufferSize is unsigned...

&gt; Source/WebCore/platform/graphics/gpu/opencl/FilterContextOpenCL.cpp:67
&gt; +    if (deviceBufferSize &lt;= 0)

And you compare it with &lt;= 0. I think you could simply set it to 0, and change this comparison to !deviceBufferSize.

&gt; Source/WebCore/platform/graphics/gpu/opencl/FilterContextOpenCL.cpp:70
&gt; +    devices = reinterpret_cast&lt;cl_device_id *&gt;(fastMalloc(deviceBufferSize));

cl_device_id* without space

&gt; Source/WebCore/platform/graphics/gpu/opencl/FilterContextOpenCL.cpp:120
&gt; +void FilterContextOpenCL::openCLTransformColorSpace(OpenCLHandle&amp; source, IntRect sourceSize, ColorSpace srcColorSpace, ColorSpace dstColorSpace)

This is just a note, but perhaps you could try sometimes the performance of doing the computation in the kernel without passing an array.

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLHandle.h:30
&gt; +    OpenCLHandle() : m_openclMemory(0) { }

openCLImage and m_openclMemory names are not consistent. Use openCL everywhere (there are some other identifiers where this renaming is needed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774291</commentid>
    <comment_count>14</comment_count>
      <attachid>175749</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-11-23 01:09:27 -0800</bug_when>
    <thetext>Created attachment 175749
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774294</commentid>
    <comment_count>15</comment_count>
      <attachid>175749</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-23 01:15:10 -0800</bug_when>
    <thetext>Comment on attachment 175749
proposed patch

Rejecting attachment 175749 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 1

ERROR: /mnt/git/webkit-commit-queue/Source/WebCore/ChangeLog neither lists a valid reviewer nor contains the string &quot;Unreviewed&quot; or &quot;Rubber stamp&quot; (case insensitive).

Full output: http://queues.webkit.org/results/14967646</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774295</commentid>
    <comment_count>16</comment_count>
    <who name="Matt Arsenault">arsenm2</who>
    <bug_when>2012-11-23 01:15:29 -0800</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=175437&amp;action=review

&gt; Source/WebCore/platform/graphics/gpu/opencl/FilterContextOpenCL.cpp:141
&gt; +

These look like they don&apos;t account for the possibility that the kernel will fail to build. If the build fails, you&apos;ll be setting arguments / trying to run a null kernel

&gt; Source/WebCore/platform/graphics/gpu/opencl/FilterContextOpenCL.h:32
&gt; +#include &quot;CL/cl.h&quot;

On OS X This is under &lt;OpenCL/cl.h&gt;

&gt; Source/WebCore/platform/graphics/gpu/opencl/FilterContextOpenCL.h:104
&gt; +            {
&gt; +                clFinish(m_context-&gt;m_commandQueue);
&gt; +                clEnqueueNDRangeKernel(m_context-&gt;m_commandQueue, m_kernel, 2, 0, m_globalSize, 0, 0, 0, 0);
&gt; +            }

These should really be checked. These are pretty likely to fail.

I also don&apos;t approve of using the default group size since that tends to not perform well (although choosing an appropriate size is unfortunately somewhat difficult)

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:58
&gt; +    return a + t * (b - a);

return mad(b - a, t, a);?

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:86
&gt; +

I suspect that a lot of your indexing calculations are candidates for mad24() if you know your sizes require &lt; 24 bits.

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:114
&gt; +    StitchData stitchData;
&gt; +    stitchData.width = 0;
&gt; +    stitchData.wrapX = 0;
&gt; +    stitchData.height = 0;
&gt; +    stitchData.wrapY = 0;

How about StitchData stitchData = { 0, 0, 0, 0 };?

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:126
&gt; +            if (baseFrequencyX / lowFrequency &lt; highFrequency / baseFrequencyX)
&gt; +                baseFrequencyX = lowFrequency;
&gt; +            else
&gt; +                baseFrequencyX = highFrequency;

For conditional assignments like this it would probably be better to use ternary operator or select() function.

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:135
&gt; +            if (baseFrequencyY / lowFrequency &lt; highFrequency / baseFrequencyY)
&gt; +                baseFrequencyY = lowFrequency;
&gt; +            else
&gt; +                baseFrequencyY = highFrequency;
&gt; +        }

Same.

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:161
&gt; +        if (type == 1) {
&gt; +            turbulenceFunctionResult.x += noise2D(redComponent, latticeSelector, stitchData, noiseVectorX, noiseVectorY, stitchTiles) / ratio;
&gt; +            turbulenceFunctionResult.y += noise2D(greenComponent, latticeSelector, stitchData, noiseVectorX, noiseVectorY, stitchTiles) / ratio;
&gt; +            turbulenceFunctionResult.z += noise2D(blueComponent, latticeSelector, stitchData, noiseVectorX, noiseVectorY, stitchTiles) / ratio;
&gt; +            turbulenceFunctionResult.w += noise2D(alphaComponent, latticeSelector, stitchData, noiseVectorX, noiseVectorY, stitchTiles) / ratio;
&gt; +        } else {
&gt; +            turbulenceFunctionResult.x += fabs(noise2D(redComponent, latticeSelector, stitchData, noiseVectorX, noiseVectorY, stitchTiles)) / ratio;
&gt; +            turbulenceFunctionResult.y += fabs(noise2D(greenComponent, latticeSelector, stitchData, noiseVectorX, noiseVectorY, stitchTiles)) / ratio;
&gt; +            turbulenceFunctionResult.z += fabs(noise2D(blueComponent, latticeSelector, stitchData, noiseVectorX, noiseVectorY, stitchTiles)) / ratio;
&gt; +            turbulenceFunctionResult.w += fabs(noise2D(alphaComponent, latticeSelector, stitchData, noiseVectorX, noiseVectorY, stitchTiles)) / ratio;
&gt; +        }

Move the common noise2D part ahead of the if, and then instead of the if do something like turbuenceFunctionResult += (type == 1) ? result : fabs(result)

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:169
&gt; +            stitchData.wrapX = 2 * stitchData.wrapX - s_perlinNoise;

How about stitchData.wrapX = mad(2, stitchData.wrapX, -s_perlineNoise)?

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:176
&gt; +        turbulenceFunctionResult = turbulenceFunctionResult * 0.5f + 0.5f;

mad(0.5f, turbulenceFunctionResult, 0.5f)?

&gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:223
&gt; +    kernel.run();

Where do you wait for the kernel to complete? The only clFinish/clWaitForEvents I see is before a clEnqueueNDRangeKernel</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774302</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-23 01:27:30 -0800</bug_when>
    <thetext>Attachment 175749 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/gpu/opencl/OpenCLHandle.h:33:  cl_mem is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774306</commentid>
    <comment_count>18</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-23 01:36:16 -0800</bug_when>
    <thetext>You have some good ideas.

&gt; These look like they don&apos;t account for the possibility that the kernel will &gt; fail to build. If the build fails, you&apos;ll be setting arguments / trying to &gt; run a null kernel

The source code of the kernel should be correct, so the only fail possibility here is the out-of-resource allocation, which could be handled by a CRASH() macro.

&gt; &gt; Source/WebCore/platform/graphics/gpu/opencl/FilterContextOpenCL.h:32
&gt; &gt; +#include &quot;CL/cl.h&quot;
&gt; 
&gt; On OS X This is under &lt;OpenCL/cl.h&gt;

Mac port comes later.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/gpu/opencl/FilterContextOpenCL.h:104
&gt; &gt; +            {
&gt; &gt; +                clFinish(m_context-&gt;m_commandQueue);
&gt; &gt; +                clEnqueueNDRangeKernel(m_context-&gt;m_commandQueue, m_kernel, 2, 0, m_globalSize, 0, 0, 0, 0);
&gt; &gt; +            }
&gt; 
&gt; These should really be checked. These are pretty likely to fail.

Why?

&gt; Where do you wait for the kernel to complete? The only clFinish/clWaitForEvents I see is before a clEnqueueNDRangeKernel

Opencl supports async execution, so we don&apos;t need to wait here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774377</commentid>
    <comment_count>19</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-23 03:35:22 -0800</bug_when>
    <thetext>&gt; &gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:114
&gt; &gt; +    StitchData stitchData;
&gt; &gt; +    stitchData.width = 0;
&gt; &gt; +    stitchData.wrapX = 0;
&gt; &gt; +    stitchData.height = 0;
&gt; &gt; +    stitchData.wrapY = 0;
&gt; 
&gt; How about StitchData stitchData = { 0, 0, 0, 0 };?

C++ preprocessor will complain abut it, since comma is also an argument separator for the preprocessor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774382</commentid>
    <comment_count>20</comment_count>
    <who name="Matt Arsenault">arsenm2</who>
    <bug_when>2012-11-23 03:41:50 -0800</bug_when>
    <thetext>(In reply to comment #18)
&gt; You have some good ideas.
&gt; 
&gt; &gt; These look like they don&apos;t account for the possibility that the kernel will &gt; fail to build. If the build fails, you&apos;ll be setting arguments / trying to &gt; run a null kernel
&gt; 
&gt; The source code of the kernel should be correct, so the only fail possibility here is the out-of-resource allocation, which could be handled by a CRASH() macro.
The kernel might be correct, but the compiler might not. My experience with OpenCL is taking one kernel that builds on one implementation won&apos;t work on another. I wouldn&apos;t put so much faith in the compiler.

&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/gpu/opencl/FilterContextOpenCL.h:104
&gt; &gt; &gt; +            {
&gt; &gt; &gt; +                clFinish(m_context-&gt;m_commandQueue);
&gt; &gt; &gt; +                clEnqueueNDRangeKernel(m_context-&gt;m_commandQueue, m_kernel, 2, 0, m_globalSize, 0, 0, 0, 0);
&gt; &gt; &gt; +            }
&gt; &gt; 
&gt; &gt; These should really be checked. These are pretty likely to fail.
&gt; 
&gt; Why?
Such is the way with OpenCL. On the Nvidia platform in particular most problems end up manifesting themselves as an error from clFinish.

&gt; 
&gt; &gt; Where do you wait for the kernel to complete? The only clFinish/clWaitForEvents I see is before a clEnqueueNDRangeKernel
&gt; 
&gt; Opencl supports async execution, so we don&apos;t need to wait here.

You do when you&apos;ll need the result (which I guess I&apos;m missing)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774383</commentid>
    <comment_count>21</comment_count>
    <who name="Matt Arsenault">arsenm2</who>
    <bug_when>2012-11-23 03:42:24 -0800</bug_when>
    <thetext>(In reply to comment #19)
&gt; &gt; &gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:114
&gt; &gt; &gt; +    StitchData stitchData;
&gt; &gt; &gt; +    stitchData.width = 0;
&gt; &gt; &gt; +    stitchData.wrapX = 0;
&gt; &gt; &gt; +    stitchData.height = 0;
&gt; &gt; &gt; +    stitchData.wrapY = 0;
&gt; &gt; 
&gt; &gt; How about StitchData stitchData = { 0, 0, 0, 0 };?
&gt; 
&gt; C++ preprocessor will complain abut it, since comma is also an argument separator for the preprocessor.

If your stringify macro is #define STRINGIFY(...) # __VA_ARGS__ it should work</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774392</commentid>
    <comment_count>22</comment_count>
    <who name="Matt Arsenault">arsenm2</who>
    <bug_when>2012-11-23 03:48:21 -0800</bug_when>
    <thetext>(In reply to comment #20)

&gt; &gt; Why?
&gt; 

Another reason is buffer allocation is usually delayed until first use. e.g. Create output buffer, bind to kernel, and then the memory resource allocation will fail on the enqueuendrange</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774400</commentid>
    <comment_count>23</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-23 03:58:10 -0800</bug_when>
    <thetext>&gt; The kernel might be correct, but the compiler might not. My experience with
&gt; OpenCL is taking one kernel that builds on one implementation won&apos;t work on
&gt; another. I wouldn&apos;t put so much faith in the compiler.

Any example for that? We does not use anything which is not specified in the standard. Btw this patch contains a feature, which should be tested before enabled, so in general the only thing which could happen here is the out-of-resource condition.

&gt; Such is the way with OpenCL. On the Nvidia platform in particular most problems end up manifesting themselves as an error from clFinish.

In general WK does not have a mechanism to detect out-of-resource conditions. It calls CRASH(), or just simply crashes.

&gt; &gt; &gt; Where do you wait for the kernel to complete? The only clFinish/clWaitForEvents I see is before a clEnqueueNDRangeKernel
&gt; &gt; 
&gt; &gt; Opencl supports async execution, so we don&apos;t need to wait here.
&gt; 
&gt; You do when you&apos;ll need the result (which I guess I&apos;m missing)

That is performed by clEnqueueReadImage() (and ideally only happens for the last image). The standard says: All commands that use this image object have finished execution before the read command begins execution. The general idea is that we just enque OpenCL commands, and let WK and OCL do their work, and when the result is needed we read it. Up to that point they can run parallelly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774402</commentid>
    <comment_count>24</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-23 03:59:26 -0800</bug_when>
    <thetext>&gt; &gt; &gt; Why?
&gt; &gt; 
&gt; 
&gt; Another reason is buffer allocation is usually delayed until first use. e.g. Create output buffer, bind to kernel, and then the memory resource allocation will fail on the enqueuendrange

Ok so this is another out-of-resource condition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774466</commentid>
    <comment_count>25</comment_count>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-11-23 05:10:25 -0800</bug_when>
    <thetext>(In reply to comment #16)
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=175437&amp;action=review
 
&gt; &gt; Source/WebCore/platform/graphics/gpu/opencl/OpenCLFETurbulence.cpp:169
&gt; &gt; +            stitchData.wrapX = 2 * stitchData.wrapX - s_perlinNoise;
&gt; 
&gt; How about stitchData.wrapX = mad(2, stitchData.wrapX, -s_perlineNoise)?

The suggested code didn&apos;t work, probably because stitchData.wrapX is type of int.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774556</commentid>
    <comment_count>26</comment_count>
      <attachid>175808</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-11-23 07:45:20 -0800</bug_when>
    <thetext>Created attachment 175808
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774559</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-23 07:47:39 -0800</bug_when>
    <thetext>Attachment 175808 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/gpu/opencl/OpenCLHandle.h:33:  cl_mem is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775342</commentid>
    <comment_count>28</comment_count>
      <attachid>175967</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-11-26 04:16:47 -0800</bug_when>
    <thetext>Created attachment 175967
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775345</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 04:22:06 -0800</bug_when>
    <thetext>Attachment 175967 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/gpu/opencl/OpenCLHandle.h:33:  cl_mem is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775437</commentid>
    <comment_count>30</comment_count>
      <attachid>175996</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-11-26 06:43:57 -0800</bug_when>
    <thetext>Created attachment 175996
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775454</commentid>
    <comment_count>31</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 07:08:59 -0800</bug_when>
    <thetext>Attachment 175996 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/gpu/opencl/OpenCLHandle.h:33:  cl_mem is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775490</commentid>
    <comment_count>32</comment_count>
      <attachid>176005</attachid>
    <who name="Tamas Czene">tczene</who>
    <bug_when>2012-11-26 08:14:47 -0800</bug_when>
    <thetext>Created attachment 176005
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775492</commentid>
    <comment_count>33</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 08:20:13 -0800</bug_when>
    <thetext>Attachment 176005 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/gpu/opencl/OpenCLHandle.h:33:  cl_mem is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 1 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775494</commentid>
    <comment_count>34</comment_count>
      <attachid>176005</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-26 08:20:51 -0800</bug_when>
    <thetext>Comment on attachment 176005
proposed patch

Thanks for all comments. I think this patch is ready now. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775542</commentid>
    <comment_count>35</comment_count>
      <attachid>176005</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 09:19:13 -0800</bug_when>
    <thetext>Comment on attachment 176005
proposed patch

Clearing flags on attachment: 176005

Committed r135733: &lt;http://trac.webkit.org/changeset/135733&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>775543</commentid>
    <comment_count>36</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-26 09:19:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776003</commentid>
    <comment_count>37</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-11-26 16:01:16 -0800</bug_when>
    <thetext>Would you add OPENCL flag to https://trac.webkit.org/wiki/FeatureFlags please?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776280</commentid>
    <comment_count>38</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2012-11-26 21:05:30 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; Would you add OPENCL flag to https://trac.webkit.org/wiki/FeatureFlags please?

Thank you for reminding me. I also noticed that some other flags are missing, I will update the text on tomorrow morning.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169600</attachid>
            <date>2012-10-19 05:04:23 -0700</date>
            <delta_ts>2012-11-21 07:15:50 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>opencl.patch</filename>
            <type>text/plain</type>
            <size>49635</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAwNWJlMmY0Li45NTJkMzIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzIg
QEAKKzIwMTItMTAtMTkgIEN6ZW5lIFRhbcOhcyAgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisK
KyAgICAgICAgT3BlbkNMIHZlcnNpb24gb2YgU291cmNlQWxwaGEsIFNvdXJjZUdyYXBoaWNzIGFu
ZCBGRVR1cmJ1bGVuY2UgZmlsdGVyIGVmZmVjdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5ODI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjb250YWlucyB0aGUgT3BlbkNMIGltcGxl
bWVudGF0aW9uIG9mIFNvdXJjZUFscGhhLCBTb3VyY2VHcmFwaGljLCBGRVR1cmJ1bGVuY2UgYW5k
IGEgc2ltcGxlIE9wZW5DTCBlbnZpcm9ubWVudC4KKyAgICAgICAgVGhpcyBpcyBvbmx5IGluY2x1
ZGVkIGluIFF0IGxpbnV4IGJ1aWxkLgorCisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAg
KiBXZWJDb3JlLnByaToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVy
YnVsZW5jZS5oOiBBZGRlZCBwbGF0Zm9ybUFwcGx5T3BlbkNMKCkgdmlydHVhbCBmdW5jdGlvbi4K
KyAgICAgICAgKEZFVHVyYnVsZW5jZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GaWx0ZXJFZmZlY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojph
cHBseSk6IEFkZGVkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5LgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnBsYXRmb3JtQXBwbHlPcGVuQ0wpOiBB
IGZ1bmN0aW9uIHRvIHVzZSBzb2Z0d2FyZSBjb21wdXRpbmcgaWYgYSBmaWx0ZXIgaXMgbm90IGlt
cGxlbWVudGVkIG9uIE9wZW5DTC4gSXQgd2lsbCBiZSBkZWxldGVkIGFmdGVyIGFsbCBvZiB0aGUg
ZmlsdGVycyBhcmUgaW1wbGVtZW50ZWQuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6
OmNsZWFyUmVzdWx0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6YXNJbWFnZUJ1
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9wZW5DTEltYWdlVG9JbWFn
ZUJ1ZmZlcik6IEdldHMgdGhlIHJlc3VsdCBvZiB0aGUgZmlsdGVyIGZyb20gdGhlIE9wZW5DTCBk
ZXZpY2UgYW5kIGNvbnZlcnRzIGl0IHRvIEltYWdlQnVmZmVyIHR5cGUuCisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJFZmZlY3Q6OmNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KTogQWxsb2NhdGVzIG1l
bW9yeSBvbiBPcGVuQ0wgZGV2aWNlIGFuZCBpZiBpdCBnZXRzIGFuIGltYWdlIGFzIGEgcGFyYW1l
dGVyLCBpdCB1cGxvYWRzIHRoZSBpbWFnZSB0byB0aGUgT3BlbkNMIGRldmljZS4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZSk6IAorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAg
IChGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvcGVuQ0xJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldE9wZW5DTEltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVzdWx0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9GaWx0ZXJDb250ZXh0T3BlbkNMLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRl
eHRPcGVuQ0w6OmNvbnRleHQpOiBDb25maWd1cmVzIHRoZSBPcGVuQ0wgZW52aXJvbm1lbnQuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpjcmVhdGVPcGVuQ0xJbWFnZSk6
IEFsbG9jYXRlcyBtZW1vcnkgb24gT3BlbkNMIGRldmljZS4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckNvbnRleHRPcGVuQ0w6Om9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2UpOiBPcGVuQ0wgaW1w
bGVtZW50YXRpb24gb2YgdHJhbnNmb3JtQ29sb3JTcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVQcm9ncmFtKTogCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvRmlsdGVyQ29udGV4dE9wZW5DTC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRmlsdGVyQ29udGV4dE9wZW5DTCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpkZXZpY2VDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbW1hbmRRdWV1ZSk6CisgICAgICAgIChS
dW5LZXJuZWwpOiBJbml0aWFsaXplcyBPcGVuQ0wgcHJvZ3JhbS4KKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckNvbnRleHRPcGVuQ0w6OlJ1bktlcm5lbDo6UnVuS2VybmVsKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6OlJ1bktlcm5lbDo6YWRkQXJndW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6UnVuS2VybmVsOjpydW4pOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6a2VybmVsQnlOYW1lKTogUmV0dXJu
cyB0aGUgcmVmZXJlbmNlIG9mIGEgZnVuY3Rpb24gaW4gdGhlIE9wZW5DTCBwcm9ncmFtLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFU291cmNlQWxw
aGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlPcGVuQ0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFU291cmNlR3JhcGhpYy5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9y
bUFwcGx5T3BlbkNMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5D
TC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGlsZUZFVHVyYnVsZW5jZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjphcHBseUZFVHVyYnVsZW5j
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlPcGVuQ0wp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEhhbmRs
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoT3BlbkNMSGFuZGxlKToK
KyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DTEhhbmRsZTo6T3BlbkNMSGFuZGxlKToKKyAgICAgICAg
KFdlYkNvcmU6Ok9wZW5DTEhhbmRsZTo6b3BlcmF0b3IgY2xfbWVtKToKKyAgICAgICAgKFdlYkNv
cmU6Ok9wZW5DTEhhbmRsZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DTEhh
bmRsZTo6b3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpP
cGVuQ0xIYW5kbGU6OmhhbmRsZUFkZHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkNMSGFu
ZGxlOjpjbGVhcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VB
bHBoYS5oOgorICAgICAgICAoU291cmNlQWxwaGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAoU291cmNlR3JhcGhpYyk6CisK
IDIwMTItMTAtMTcgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IE5NSSBwcm92aWRlIGRhdGEgZm9yIG1peGluZyB3aXRoIHRj
bWFsbG9jIGhlYXAgZHVtcHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
IGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCA3ZTcwNWU0Li44ZmNkNGMyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1Rh
cmdldC5wcmkKQEAgLTQwNTMsNiArNDA1MywxNyBAQCBjb250YWlucyhDT05GSUcsIG9wZW5nbC1z
aGltcykgewogICAgIERFRklORVMgKz0gUVRfT1BFTkdMX1NISU1TPTEKIH0KIAorY29udGFpbnMo
REVGSU5FUywgRU5BQkxFX09QRU5DTD0xKSB7CisgICAgSEVBREVSUyArPSBwbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xIYW5kbGUuaAorICAgIEhFQURFUlMgKz0gcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvRmlsdGVyQ29udGV4dE9wZW5DTC5oCisgICAgU09V
UkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9GaWx0ZXJDb250ZXh0T3Bl
bkNMLmNwcAorICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wv
T3BlbkNMRkVTb3VyY2VBbHBoYS5jcHAKKyAgICBTT1VSQ0VTICs9IHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFU291cmNlR3JhcGhpYy5jcHAKKyAgICBTT1VSQ0VTICs9
IHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFVHVyYnVsZW5jZS5jcHAK
KworICAgIERFRklORVMgKz0gT1BFTkNMPTEKK30KKwogdXNlPyhHUkFQSElDU19TVVJGQUNFKSB7
CiAgICAgbWFjIHsKICAgICAgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNl
cy9tYWMvR3JhcGhpY3NTdXJmYWNlTWFjLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQppbmRleCBiM2UzOWRkLi44
YjM3Mzg4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAtMjgxLDYgKzI4MSwxMCBAQCB1bml4fHdpbjMyLWcr
KyogewogICAgIFFNQUtFX1BLR0NPTkZJR19SRVFVSVJFUyA9IFF0Q29yZSBRdEd1aSBRdE5ldHdv
cmsgUXRXaWRnZXRzCiB9CiAKK2NvbnRhaW5zKERFRklORVMsIEVOQUJMRV9PUEVOQ0w9MSkgewor
ICAgIExJQlMgKz0gLWxPcGVuQ0wKK30KKwogIyBEaXNhYmxlIEMrKzB4IG1vZGUgaW4gV2ViQ29y
ZSBmb3IgdGhvc2Ugd2hvIGVuYWJsZWQgaXQgaW4gdGhlaXIgUXQncyBta3NwZWMKICotZysrKjpR
TUFLRV9DWFhGTEFHUyAtPSAtc3RkPWMrKzB4IC1zdGQ9Z251KysweAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApp
bmRleCA0N2M4YmVlLi44NGZmMTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKQEAgLTYxLDYgKzYxLDkgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdpb25Xb3JrZXIodm9pZCopOwogCiAgICAg
dmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wp
CisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZp
cnR1YWwgdm9pZCBkdW1wKCk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29s
dXRlUGFpbnRSZWN0KCkgeyBzZXRBYnNvbHV0ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1h
eEVmZmVjdFJlY3QoKSkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKaW5kZXggYTJiYjU0ZC4uNzk3OTY0
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
aWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29w
eXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJp
Z2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTEyMyw2ICsxMjQsMTAgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5
KCkKICAgICB9CiAgICAgCiAgICAgLy8gQWRkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0
aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4KKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIGlm
IChwbGF0Zm9ybUFwcGx5T3BlbkNMKCkpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgogI2lmIFVT
RShTS0lBKQogICAgIGlmIChwbGF0Zm9ybUFwcGx5U2tpYSgpKQogICAgICAgICByZXR1cm47CkBA
IC0xMzAsNiArMTM1LDI1IEBAIHZvaWQgRmlsdGVyRWZmZWN0OjphcHBseSgpCiAgICAgcGxhdGZv
cm1BcHBseVNvZnR3YXJlKCk7CiB9CiAKKy8vIEl0IHdpbGwgYmUgZGVsZXRlZCBhZnRlciBhbGwg
b2YgdGhlIGZpbHRlcnMgYXJlIGltcGxlbWVudGVkCisjaWYgRU5BQkxFKE9QRU5DTCkKK2Jvb2wg
RmlsdGVyRWZmZWN0OjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICB1bnNpZ25lZCBzaXpl
ID0gbnVtYmVyT2ZFZmZlY3RJbnB1dHMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
c2l6ZTsgKytpKSB7CisgICAgICAgIEZpbHRlckVmZmVjdCogaW4gPSBpbnB1dEVmZmVjdChpKTsK
KyAgICAgICAgaW4tPmFzSW1hZ2VCdWZmZXIoKTsKKyAgICB9CisgICAgcGxhdGZvcm1BcHBseVNv
ZnR3YXJlKCk7CisgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gYXNJbWFnZUJ1ZmZlcigp
OworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlSW1hZ2VEYXRhOworICAgIGlm
IChzb3VyY2VJbWFnZSkKKyAgICAgICAgc291cmNlSW1hZ2VEYXRhID0gc291cmNlSW1hZ2UtPmdl
dFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIHNvdXJjZUltYWdlLT5p
bnRlcm5hbFNpemUoKSkpOworICAgIGNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KHNvdXJjZUltYWdl
RGF0YS0+ZGF0YSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKyNlbmRpZgorCiB2b2lkIEZpbHRl
ckVmZmVjdDo6Zm9yY2VWYWxpZFByZU11bHRpcGxpZWRQaXhlbHMoKQogewogICAgIC8vIE11c3Qg
b3BlcmF0ZSBvbiBwcmUtbXVsdGlwbGllZCByZXN1bHRzOyBvdGhlciBmb3JtYXRzIGNhbm5vdCBo
YXZlIGludmFsaWQgcGl4ZWxzLgpAQCAtMTg3LDYgKzIxMSwxMCBAQCB2b2lkIEZpbHRlckVmZmVj
dDo6Y2xlYXJSZXN1bHQoKQogICAgICAgICBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0LmNsZWFy
KCk7CiAgICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQogICAgICAgICBtX3ByZW11
bHRpcGxpZWRJbWFnZVJlc3VsdC5jbGVhcigpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgaWYg
KG1fb3BlbkNMSW1hZ2VSZXN1bHQpCisgICAgICAgIG1fb3BlbkNMSW1hZ2VSZXN1bHQuY2xlYXIo
KTsKKyNlbmRpZgogfQogCiBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVy
KCkKQEAgLTE5NSw2ICsyMjMsMTAgQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6YXNJbWFn
ZUJ1ZmZlcigpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChtX2ltYWdlQnVmZmVyUmVzdWx0
KQogICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKKyNpZiBFTkFCTEUo
T1BFTkNMKQorICAgIGlmIChtX29wZW5DTEltYWdlUmVzdWx0KQorICAgICAgICByZXR1cm4gb3Bl
bkNMSW1hZ2VUb0ltYWdlQnVmZmVyKCk7CisjZW5kaWYKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
ID0gSW1hZ2VCdWZmZXI6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSwgMSwgbV9y
ZXN1bHRDb2xvclNwYWNlLCBtX2ZpbHRlci0+cmVuZGVyaW5nTW9kZSgpKTsKICAgICBJbnRSZWN0
IGRlc3RpbmF0aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7
CiAgICAgaWYgKG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQpAQCAtMjA0LDYgKzIzNiwyNyBA
QCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyKCkKICAgICByZXR1cm4g
bV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKIH0KIAorI2lmIEVOQUJMRShPUEVOQ0wpCitJbWFn
ZUJ1ZmZlciogRmlsdGVyRWZmZWN0OjpvcGVuQ0xJbWFnZVRvSW1hZ2VCdWZmZXIoKQoreworICAg
IEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250
ZXh0KCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworCisgICAgc2l6ZV90IG9yaWdpblszXSA9IHsw
LCAwLCAwfTsKKyAgICBzaXplX3QgcmVnaW9uWzNdID0ge21fYWJzb2x1dGVQYWludFJlY3Qud2lk
dGgoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSwgMX07CisKKyAgICBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5
OjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVj
dC5oZWlnaHQoKSAqIDQpOworCisgICAgY2xFbnF1ZXVlUmVhZEltYWdlKGNvbnRleHQtPmNvbW1h
bmRRdWV1ZSgpLCBtX29wZW5DTEltYWdlUmVzdWx0LCBDTF9UUlVFLCBvcmlnaW4sIHJlZ2lvbiwg
MCwgMCwgZGVzdGluYXRpb25QaXhlbEFycmF5LT5kYXRhKCksIDAsIDAsIDApOworCisgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCkpOworICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJz
b2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKKyAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRl
QXJyYXkoVW5tdWx0aXBsaWVkLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZ2V0KCksIGRlc3RpbmF0
aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisKKyAgICByZXR1
cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKK30KKyNlbmRpZgorCiBQYXNzUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OmFzVW5tdWx0aXBsaWVkSW1hZ2UoY29uc3Qg
SW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQoaXNGaWx0ZXJTaXplVmFsaWQocmVjdCkpOwpA
QCAtMzYzLDYgKzQxNiwyMiBAQCBVaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVh
dGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJ
bWFnZVJlc3VsdC5nZXQoKTsKIH0KIAorI2lmIEVOQUJMRShPUEVOQ0wpCitPcGVuQ0xIYW5kbGUg
RmlsdGVyRWZmZWN0OjpjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCh1bnNpZ25lZCBjaGFyKiBzb3Vy
Y2UpCit7CisgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CisgICAgY2xfaW1hZ2VfZm9ybWF0IGNs
SW1hZ2VGb3JtYXQ7CisgICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVsX29yZGVyID0gQ0xf
UkdCQTsKKyAgICBjbEltYWdlRm9ybWF0LmltYWdlX2NoYW5uZWxfZGF0YV90eXBlID0gQ0xfVU5P
Uk1fSU5UODsKKworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250
ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIG1fb3BlbkNM
SW1hZ2VSZXN1bHQgPSBjbENyZWF0ZUltYWdlMkQoY29udGV4dC0+ZGV2aWNlQ29udGV4dCgpLCBD
TF9NRU1fUkVBRF9XUklURSB8IChzb3VyY2UgPyBDTF9NRU1fQ09QWV9IT1NUX1BUUiA6IDApLAor
ICAgICAgICAmY2xJbWFnZUZvcm1hdCwgbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fi
c29sdXRlUGFpbnRSZWN0LmhlaWdodCgpLCAwLCBzb3VyY2UsIDApOworICAgIHJldHVybiBtX29w
ZW5DTEltYWdlUmVzdWx0OworfQorI2VuZGlmCisKIHZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zv
cm1SZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0Uo
Q0cpCkBAIC0zNzQsMTAgKzQ0MywyMSBAQCB2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVz
dWx0Q29sb3JTcGFjZShDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCiAKICAgICAvLyBGSVhNRTog
V2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29u
dmVyc2lvbiBieSBhZGRpbmcKICAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBm
b3IgdGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCi0gICAgaWYgKCFtX2ltYWdlQnVmZmVy
UmVzdWx0KSB7Ci0gICAgICAgIGFzSW1hZ2VCdWZmZXIoKTsKLSAgICAgICAgQVNTRVJUKG1faW1h
Z2VCdWZmZXJSZXN1bHQpOwotICAgIH0KKyAgICBkbyB7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAg
ICAgICAgaWYgKG9wZW5DTEltYWdlKCkpIHsKKyAgICAgICAgICAgIEZpbHRlckNvbnRleHRPcGVu
Q0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisgICAgICAgICAg
ICBjb250ZXh0LT5vcGVuQ0xUcmFuc2Zvcm1Db2xvclNwYWNlKG1fb3BlbkNMSW1hZ2VSZXN1bHQs
IGFic29sdXRlUGFpbnRSZWN0KCksIG1fcmVzdWx0Q29sb3JTcGFjZSwgZHN0Q29sb3JTcGFjZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmICghbV9p
bWFnZUJ1ZmZlclJlc3VsdCkgeworICAgICAgICAgICAgYXNJbWFnZUJ1ZmZlcigpOworICAgICAg
ICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQpOworICAgICAgICB9CisKKyAgICAgICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdC0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX3Jlc3VsdENvbG9yU3Bh
Y2UsIGRzdENvbG9yU3BhY2UpOworICAgIH0gd2hpbGUgKDApOwogCiAgICAgbV9pbWFnZUJ1ZmZl
clJlc3VsdC0+dHJhbnNmb3JtQ29sb3JTcGFjZShtX3Jlc3VsdENvbG9yU3BhY2UsIGRzdENvbG9y
U3BhY2UpOwogICAgIG1fcmVzdWx0Q29sb3JTcGFjZSA9IGRzdENvbG9yU3BhY2U7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZl
Y3QuaAppbmRleCAxNjIwYWJmLi4yYzFmZTIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKQEAgLTMzLDYgKzMz
LDEwIEBACiAjaW5jbHVkZSA8d3RmL1VpbnQ4Q2xhbXBlZEFycmF5Lmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCisjaWYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJPcGVuQ0wvRmlsdGVy
Q29udGV4dE9wZW5DTC5oIgorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBmbG9hdCBrTWF4RmlsdGVy
U2l6ZSA9IDUwMDAuMGY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTYyLDYgKzY2LDEyIEBA
IHB1YmxpYzoKICAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRJbWFnZShVaW50OENsYW1wZWRBcnJh
eSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIGNvcHlQcmVtdWx0aXBs
aWVkSW1hZ2UoVWludDhDbGFtcGVkQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7
CiAKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIE9wZW5DTEhhbmRsZSBvcGVuQ0xJbWFnZSgpIHsg
cmV0dXJuIG1fb3BlbkNMSW1hZ2VSZXN1bHQ7IH0KKyAgICB2b2lkIHNldE9wZW5DTEltYWdlKE9w
ZW5DTEhhbmRsZSBvcGVuQ0xJbWFnZSkgeyBtX29wZW5DTEltYWdlUmVzdWx0ID0gb3BlbkNMSW1h
Z2U7IH0KKyAgICBJbWFnZUJ1ZmZlciogb3BlbkNMSW1hZ2VUb0ltYWdlQnVmZmVyKCk7CisjZW5k
aWYKKwogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9p
bnB1dEVmZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBj
b25zdDsKICAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJu
IG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQpAQCAtNjksNyArNzksMTIgQEAgcHVibGljOgogICAg
IGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBUaGlzIGZ1
bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5h
Z21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdCB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0IHx8IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0OworICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAorI2lm
IEVOQUJMRShPUEVOQ0wpCisgICAgICAgICAgICB8fCBtX29wZW5DTEltYWdlUmVzdWx0CisjZW5k
aWYKKyAgICAgICAgICAgIHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQKKyAgICAgICAgICAg
IHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogICAgIH0KIAogICAgIEludFJlY3QgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JikgY29uc3Q7CkBAIC05Myw2ICsx
MDgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGNvcnJlY3RGaWx0ZXJSZXN1bHRJZk5l
ZWRlZCgpIHsgfQogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpID0g
MDsKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5T3Bl
bkNMKCk7CisjZW5kaWYKICNpZiBVU0UoU0tJQSkKICAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1B
cHBseVNraWEoKSB7IHJldHVybiBmYWxzZTsgfQogI2VuZGlmCkBAIC0xNDAsNiArMTU4LDkgQEAg
cHJvdGVjdGVkOgogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwog
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwog
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIE9wZW5DTEhhbmRsZSBjcmVhdGVPcGVuQ0xJbWFnZVJl
c3VsdCh1bnNpZ25lZCBjaGFyKiA9IDApOworI2VuZGlmCiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBp
ZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZh
bHVlcywgd2l0aAogICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9u
ZW50IGluIFswLCBhbHBoYV0uCkBAIC0xNTMsNiArMTc0LDkgQEAgcHJpdmF0ZToKICAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiAgICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKICAgICBG
aWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAg
ICBPcGVuQ0xIYW5kbGUgbV9vcGVuQ0xJbWFnZVJlc3VsdDsKKyNlbmRpZgogCiAgICAgYm9vbCBt
X2FscGhhSW1hZ2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvT3BlbkNML0ZpbHRlckNvbnRleHRPcGVuQ0wuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvRmlsdGVyQ29udGV4dE9wZW5DTC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM3ZGZiZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNM
L0ZpbHRlckNvbnRleHRPcGVuQ0wuY3BwCkBAIC0wLDAgKzEsMTg5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
VGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVS
U0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJT
SVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShPUEVOQ0wpCisj
aW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ZpbHRlckNvbnRleHRPcGVuQ0wqIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKQorewor
ICAgIHN0YXRpYyBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gMDsKKworICAgIGlmIChj
b250ZXh0KQorICAgICAgICByZXR1cm4gY29udGV4dDsKKworICAgIEZpbHRlckNvbnRleHRPcGVu
Q0wqIGxvY2FsQ29udGV4dCA9IG5ldyBGaWx0ZXJDb250ZXh0T3BlbkNMKCk7CisKKyAgICAvLyBJ
bml0aWFsaXppbmcgdGhlIGNvbnRleHQuCisgICAgY2xfaW50IGVycm9yTnVtYmVyOworICAgIGNs
X2RldmljZV9pZCAqIGRldmljZXM7CisgICAgY2xfcGxhdGZvcm1faWQgZmlyc3RQbGF0Zm9ybUlk
OworICAgIHNpemVfdCBkZXZpY2VCdWZmZXJTaXplID0gLTE7CisKKyAgICBlcnJvck51bWJlciA9
IGNsR2V0UGxhdGZvcm1JRHMoMSwgJmZpcnN0UGxhdGZvcm1JZCwgMCk7CisgICAgY2xfY29udGV4
dF9wcm9wZXJ0aWVzIGNvbnRleHRQcm9wZXJ0aWVzW10gPSB7IENMX0NPTlRFWFRfUExBVEZPUk0s
IChjbF9jb250ZXh0X3Byb3BlcnRpZXMpZmlyc3RQbGF0Zm9ybUlkLCAwfTsKKyAgICBsb2NhbENv
bnRleHQtPm1fZGV2aWNlQ29udGV4dCA9IGNsQ3JlYXRlQ29udGV4dEZyb21UeXBlKGNvbnRleHRQ
cm9wZXJ0aWVzLCBDTF9ERVZJQ0VfVFlQRV9HUFUsIDAsIDAsICZlcnJvck51bWJlcik7CisgICAg
aWYgKGVycm9yTnVtYmVyICE9IENMX1NVQ0NFU1MpIHsKKyAgICAgICAgbG9jYWxDb250ZXh0LT5t
X2RldmljZUNvbnRleHQgPSBjbENyZWF0ZUNvbnRleHRGcm9tVHlwZShjb250ZXh0UHJvcGVydGll
cywgQ0xfREVWSUNFX1RZUEVfQ1BVLCAwLCAwLCAmZXJyb3JOdW1iZXIpOworICAgICAgICBpZiAo
ZXJyb3JOdW1iZXIgIT0gQ0xfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0K
KworICAgIGVycm9yTnVtYmVyID0gY2xHZXRDb250ZXh0SW5mbyhsb2NhbENvbnRleHQtPm1fZGV2
aWNlQ29udGV4dCwgQ0xfQ09OVEVYVF9ERVZJQ0VTLCAwLCAwLCAmZGV2aWNlQnVmZmVyU2l6ZSk7
CisgICAgaWYgKGVycm9yTnVtYmVyICE9IENMX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgaWYgKGRldmljZUJ1ZmZlclNpemUgPD0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBkZXZpY2VzID0gcmVpbnRlcnByZXRfY2FzdDxjbF9kZXZpY2VfaWQgKj4oZmFzdE1hbGxvYyhk
ZXZpY2VCdWZmZXJTaXplKSk7CisgICAgZXJyb3JOdW1iZXIgPSBjbEdldENvbnRleHRJbmZvKGxv
Y2FsQ29udGV4dC0+bV9kZXZpY2VDb250ZXh0LCBDTF9DT05URVhUX0RFVklDRVMsIGRldmljZUJ1
ZmZlclNpemUsIGRldmljZXMsIDApOworICAgIGlmIChlcnJvck51bWJlciAhPSBDTF9TVUNDRVNT
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIGxvY2FsQ29udGV4dC0+bV9jb21tYW5kUXVldWUg
PSBjbENyZWF0ZUNvbW1hbmRRdWV1ZShsb2NhbENvbnRleHQtPm1fZGV2aWNlQ29udGV4dCwgZGV2
aWNlc1swXSwgMCwgMCk7CisgICAgaWYgKCFsb2NhbENvbnRleHQtPm1fY29tbWFuZFF1ZXVlKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIGxvY2FsQ29udGV4dC0+bV9kZXZpY2UgPSBkZXZpY2Vz
WzBdOworICAgIGZhc3RGcmVlKGRldmljZXMpOworCisgICAgY2xfYm9vbCBpbWFnZVN1cHBvcnQg
PSBDTF9GQUxTRTsKKyAgICBjbEdldERldmljZUluZm8obG9jYWxDb250ZXh0LT5tX2RldmljZSwg
Q0xfREVWSUNFX0lNQUdFX1NVUFBPUlQsIHNpemVvZihjbF9ib29sKSwgJmltYWdlU3VwcG9ydCwg
MCk7CisgICAgaWYgKGltYWdlU3VwcG9ydCAhPSBDTF9UUlVFKQorICAgICAgICByZXR1cm4gMDsK
KworICAgIGNvbnRleHQgPSBsb2NhbENvbnRleHQ7CisgICAgcmV0dXJuIGNvbnRleHQ7Cit9CisK
K09wZW5DTEhhbmRsZSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjcmVhdGVPcGVuQ0xJbWFnZShGbG9h
dFNpemUgcGFpbnRTaXplKQoreworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBG
aWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisKKyAgICBjbF9pbWFnZV9mb3JtYXQgY2xJ
bWFnZUZvcm1hdDsKKyAgICBjbEltYWdlRm9ybWF0LmltYWdlX2NoYW5uZWxfb3JkZXIgPSBDTF9S
R0JBOworICAgIGNsSW1hZ2VGb3JtYXQuaW1hZ2VfY2hhbm5lbF9kYXRhX3R5cGUgPSBDTF9VTk9S
TV9JTlQ4OworCisgICAgT3BlbkNMSGFuZGxlIGltYWdlID0gY2xDcmVhdGVJbWFnZTJEKGNvbnRl
eHQtPmRldmljZUNvbnRleHQoKSwgQ0xfTUVNX1JFQURfV1JJVEUsICZjbEltYWdlRm9ybWF0LCBw
YWludFNpemUud2lkdGgoKSwKKyAgICAgICAgcGFpbnRTaXplLmhlaWdodCgpLCAwLCAwLCAwKTsK
KyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiB0cmFuc2Zvcm1Db2xv
clNwYWNlS2VybmVsUHJvZ3JhbSA9CitQUk9HUkFNX1NUUigKK2NvbnN0IHNhbXBsZXJfdCBzYW1w
bGVyID0gQ0xLX05PUk1BTElaRURfQ09PUkRTX0ZBTFNFIHwgQ0xLX0FERFJFU1NfQ0xBTVBfVE9f
RURHRSB8IENMS19GSUxURVJfTkVBUkVTVDsKKworX19rZXJuZWwgdm9pZCB0cmFuc2Zvcm1Db2xv
clNwYWNlKF9fcmVhZF9vbmx5IGltYWdlMmRfdCBzb3VyY2UsIF9fd3JpdGVfb25seSBpbWFnZTJk
X3QgZGVzdGluYXRpb24sIF9fY29uc3RhbnQgZmxvYXQgKmNsTG9va1VwVGFibGUpCit7CisgICAg
aW50MiBzb3VyY2VDb29yZCA9IChpbnQyKSAoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9p
ZCgxKSk7CisgICAgZmxvYXQ0IHBpeGVsID0gcmVhZF9pbWFnZWYoc291cmNlLCBzYW1wbGVyLCBz
b3VyY2VDb29yZCk7CisKKyAgICBwaXhlbCA9IChmbG9hdDQpKGNsTG9va1VwVGFibGVbKGludCko
cm91bmQocGl4ZWwueCAqIDI1NSkpXSwgY2xMb29rVXBUYWJsZVsoaW50KShyb3VuZChwaXhlbC55
ICogMjU1KSldLAorICAgICAgICBjbExvb2tVcFRhYmxlWyhpbnQpKHJvdW5kKHBpeGVsLnogKiAy
NTUpKV0sIHBpeGVsLncpOworCisgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCBzb3VyY2VD
b29yZCwgcGl4ZWwpOworfQorKTsKKwordm9pZCBGaWx0ZXJDb250ZXh0T3BlbkNMOjpvcGVuQ0xU
cmFuc2Zvcm1Db2xvclNwYWNlKE9wZW5DTEhhbmRsZSYgc291cmNlLCBJbnRSZWN0IHNvdXJjZVNp
emUsIENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoT3BlbkNMSGFuZGxlLCBkZXZpY2VSZ2JMVVQsICgp
KTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE9wZW5DTEhhbmRsZSwgbGluZWFyUmdiTFVULCAo
KSk7CisKKyAgICBpZiAoc3JjQ29sb3JTcGFjZSA9PSBkc3RDb2xvclNwYWNlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoKHNyY0NvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZUxpbmVhclJHQiAm
JiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2VEZXZpY2VSR0IpCisgICAgfHwgKGRzdENvbG9y
U3BhY2UgIT0gQ29sb3JTcGFjZUxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3Bh
Y2VEZXZpY2VSR0IpKQorICAgICAgICByZXR1cm47CisKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNM
KiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworCisgICAgT3BlbkNM
SGFuZGxlIGRlc3RpbmF0aW9uID0gY29udGV4dC0+Y3JlYXRlT3BlbkNMSW1hZ2Uoc291cmNlU2l6
ZS5zaXplKCkpOworCisgICAgaWYgKCFtX3RyYW5zZm9ybUNvbG9yU3BhY2VQcm9ncmFtKSB7Cisg
ICAgICAgIG1fdHJhbnNmb3JtQ29sb3JTcGFjZVByb2dyYW0gPSBjb21waWxlUHJvZ3JhbSh0cmFu
c2Zvcm1Db2xvclNwYWNlS2VybmVsUHJvZ3JhbSk7CisgICAgICAgIG1fdHJhbnNmb3JtQ29sb3JT
cGFjZUtlcm5lbCA9IGtlcm5lbEJ5TmFtZShtX3RyYW5zZm9ybUNvbG9yU3BhY2VQcm9ncmFtLCAi
dHJhbnNmb3JtQ29sb3JTcGFjZSIpOworICAgIH0KKworICAgIFJ1bktlcm5lbCBrZXJuZWwoY29u
dGV4dCwgbV90cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsLCBzb3VyY2VTaXplLndpZHRoKCksIHNv
dXJjZVNpemUuaGVpZ2h0KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChzb3VyY2UpOworICAg
IGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlvbik7CisKKyAgICBpZiAoZHN0Q29sb3JTcGFj
ZSA9PSBDb2xvclNwYWNlTGluZWFyUkdCKSB7CisgICAgICAgIGlmICghbGluZWFyUmdiTFVUKSB7
CisgICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGxvb2tVcFRhYmxlOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQg
Y29sb3IgPSBpICAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IChjb2xvciA8PSAw
LjA0MDQ1ZiA/IGNvbG9yIC8gMTIuOTJmIDogcG93KChjb2xvciArIDAuMDU1ZikgLyAxLjA1NWYs
IDIuNGYpKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWF4KDAuMGYsIGNvbG9yKTsK
KyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWluKDEuMGYsIGNvbG9yKTsKKyAgICAgICAg
ICAgICAgICBsb29rVXBUYWJsZS5hcHBlbmQoKHJvdW5kKGNvbG9yICogMjU1KSkgLyAyNTUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZWFyUmdiTFVUID0ga2VybmVsLmFkZEFyZ3Vt
ZW50KGxvb2tVcFRhYmxlLmRhdGEoKSwgc2l6ZW9mKGZsb2F0KSAqIDI1Nik7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAga2VybmVsLmFkZEFyZ3VtZW50KGxpbmVhclJnYkxVVCk7CisgICAg
fSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2VEZXZpY2VSR0IpIHsKKyAgICAg
ICAgaWYgKCFkZXZpY2VSZ2JMVVQpIHsKKyAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gbG9va1Vw
VGFibGU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsK
KyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAg
ICAgY29sb3IgPSAocG93Zihjb2xvciwgMS4wZiAvIDIuNGYpICogMS4wNTVmKSAtIDAuMDU1ZjsK
KyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWF4KDAuMGYsIGNvbG9yKTsKKyAgICAgICAg
ICAgICAgICBjb2xvciA9IHN0ZDo6bWluKDEuMGYsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBs
b29rVXBUYWJsZS5hcHBlbmQoKHJvdW5kKGNvbG9yICogMjU1KSkgLyAyNTUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZGV2aWNlUmdiTFVUID0ga2VybmVsLmFkZEFyZ3VtZW50KGxvb2tV
cFRhYmxlLmRhdGEoKSwgc2l6ZW9mKGZsb2F0KSAqIDI1Nik7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAga2VybmVsLmFkZEFyZ3VtZW50KGRldmljZVJnYkxVVCk7CisgICAgfQorCisgICAg
a2VybmVsLnJ1bigpOworICAgIHNvdXJjZS5jbGVhcigpOworICAgIHNvdXJjZSA9IGRlc3RpbmF0
aW9uOworfQorCitjbF9wcm9ncmFtIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVQcm9ncmFt
KGNvbnN0IGNoYXIqIHNvdXJjZSkKK3sKKyAgICBjbF9wcm9ncmFtIHByb2dyYW07CisKKyAgICBG
aWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4
dCgpOworCisgICAgcHJvZ3JhbSA9IGNsQ3JlYXRlUHJvZ3JhbVdpdGhTb3VyY2UoY29udGV4dC0+
bV9kZXZpY2VDb250ZXh0LCAxLCAoY29uc3QgY2hhcioqKSAmc291cmNlLCAwLCAwKTsKKworICAg
IGNsQnVpbGRQcm9ncmFtKHByb2dyYW0sIDAsIDAsIDAsIDAsIDApOworCisgICAgcmV0dXJuIHBy
b2dyYW07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9GaWx0ZXJD
b250ZXh0T3BlbkNMLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L09wZW5DTC9GaWx0ZXJDb250ZXh0T3BlbkNMLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMzk1ZGZkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML0ZpbHRlckNvbnRleHRPcGVuQ0wuaApAQCAtMCww
ICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICogQ29weXJpZ2h0IChDKSAyMDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2Vk
Lmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEZpbHRlckNvbnRl
eHRPcGVuQ0xfaAorI2RlZmluZSBGaWx0ZXJDb250ZXh0T3BlbkNMX2gKKworI2lmIEVOQUJMRShP
UEVOQ0wpCisjaW5jbHVkZSAiQ0wvY2wuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUg
IkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5jbHVkZSAiRmxvYXRT
aXplLmgiCisjaW5jbHVkZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNs
dWRlICJPcGVuQ0xIYW5kbGUuaCIKKworI2RlZmluZSBQUk9HUkFNX1NUUihTcmMpICNTcmMKKyNk
ZWZpbmUgUFJPR1JBTShTcmMpIFBST0dSQU1fU1RSKFNyYykKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBGaWx0ZXJDb250ZXh0T3BlbkNMIHsKK3B1YmxpYzoKKyAgICAvLyBSZXR1cm5z
IDAgaWYgaW5pdGlhbGl6YXRpb24gZmFpbGVkLgorICAgIHN0YXRpYyBGaWx0ZXJDb250ZXh0T3Bl
bkNMKiBjb250ZXh0KCk7CisKKyAgICBjbF9jb250ZXh0IGRldmljZUNvbnRleHQoKSB7IHJldHVy
biBtX2RldmljZUNvbnRleHQ7IH0KKyAgICBjbF9jb21tYW5kX3F1ZXVlIGNvbW1hbmRRdWV1ZSgp
IHsgcmV0dXJuIG1fY29tbWFuZFF1ZXVlOyB9CisKKyAgICBPcGVuQ0xIYW5kbGUgY3JlYXRlT3Bl
bkNMSW1hZ2UoRmxvYXRTaXplKTsKKyAgICB2b2lkIG9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2Uo
T3BlbkNMSGFuZGxlJiwgSW50UmVjdCwgQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSk7CisKKyAgICBp
bmxpbmUgdm9pZCBhcHBseUZFVHVyYnVsZW5jZShPcGVuQ0xIYW5kbGUsIEludFNpemUsIHZvaWQq
LCBpbnQsIHZvaWQqLCBpbnQsIHZvaWQqLCBpbnQsIHZvaWQqLCBpbnQsIHZvaWQqLCBpbnQsCisg
ICAgICAgIHZvaWQqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwgZmxvYXQsIGZsb2F0LCBib29s
LCBpbnQsIGludCk7CisKK3ByaXZhdGU6CisKKyAgICBjbGFzcyBSdW5LZXJuZWwgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBSdW5LZXJuZWwoRmlsdGVyQ29udGV4dE9wZW5DTCogY29u
dGV4dCwgY2xfa2VybmVsIGtlcm5lbCwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0KQorICAg
ICAgICAgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAgICAgICAgLCBtX2tl
cm5lbChrZXJuZWwpCisgICAgICAgICAgICAgICAgLCBpbmRleCgwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1fZ2xvYmFsU2l6ZVswXSA9IHdpZHRoOworICAgICAgICAgICAgICAg
IG1fZ2xvYmFsU2l6ZVsxXSA9IGhlaWdodDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dm9pZCBhZGRBcmd1bWVudChPcGVuQ0xIYW5kbGUgaGFuZGxlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBpbmRleCsrLCBzaXplb2YoT3Bl
bkNMSGFuZGxlKSwgaGFuZGxlLmhhbmRsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHZvaWQgYWRkQXJndW1lbnQoY2xfaW50IHZhbHVlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBpbmRleCsrLCBzaXplb2Yo
Y2xfaW50KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJnZhbHVlKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZvaWQgYWRkQXJndW1lbnQoY2xfZmxvYXQgdmFsdWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgY2xTZXRLZXJuZWxBcmcobV9rZXJuZWwsIGluZGV4Kyss
IHNpemVvZihjbF9mbG9hdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZ2YWx1ZSkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KGNsX3NhbXBsZXIgaGFu
ZGxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1fa2Vy
bmVsLCBpbmRleCsrLCBzaXplb2YoY2xfc2FtcGxlciksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KCZoYW5kbGUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgT3BlbkNMSGFuZGxlIGFk
ZEFyZ3VtZW50KHZvaWQqIGJ1ZmZlciwgaW50IHNpemUpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgT3BlbkNMSGFuZGxlIGhhbmRsZShjbENyZWF0ZUJ1ZmZlcihtX2NvbnRleHQtPmRl
dmljZUNvbnRleHQoKSwgQ0xfTUVNX1JFQURfT05MWSwgc2l6ZSwgMCwgMCkpOworICAgICAgICAg
ICAgICAgIGNsRW5xdWV1ZVdyaXRlQnVmZmVyKG1fY29udGV4dC0+Y29tbWFuZFF1ZXVlKCksIGhh
bmRsZSwgQ0xfVFJVRSwgMCwgc2l6ZSwgYnVmZmVyLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICBjbFNldEtlcm5lbEFyZyhtX2tlcm5lbCwgaW5kZXgrKywgc2l6ZW9mKE9wZW5DTEhhbmRsZSks
IGhhbmRsZS5oYW5kbGVBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgcnVuKCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBjbEZpbmlzaChtX2NvbnRleHQtPm1fY29tbWFuZFF1ZXVlKTsKKyAg
ICAgICAgICAgICAgICBjbEVucXVldWVORFJhbmdlS2VybmVsKG1fY29udGV4dC0+bV9jb21tYW5k
UXVldWUsIG1fa2VybmVsLCAyLCAwLCBtX2dsb2JhbFNpemUsIDAsIDAsIDAsIDApOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBtX2NvbnRleHQ7Cisg
ICAgICAgICAgICBjbF9rZXJuZWwgbV9rZXJuZWw7CisgICAgICAgICAgICBzaXplX3QgbV9nbG9i
YWxTaXplWzJdOworICAgICAgICAgICAgaW50IGluZGV4OworICAgICAgICB9OworCisgICAgc3Rh
dGljIGNsX3Byb2dyYW0gY29tcGlsZVByb2dyYW0oY29uc3QgY2hhciopOworICAgIHN0YXRpYyBp
bmxpbmUgY2xfa2VybmVsIGtlcm5lbEJ5TmFtZShjbF9wcm9ncmFtIHByb2dyYW0sIGNvbnN0IGNo
YXIqIG5hbWUpIHsgcmV0dXJuIGNsQ3JlYXRlS2VybmVsKHByb2dyYW0sIG5hbWUsIDApOyB9CisK
KyAgICBpbmxpbmUgdm9pZCBjb21waWxlRkVUdXJidWxlbmNlKCk7CisKKyAgICBjbF9jb21tYW5k
X3F1ZXVlIG1fY29tbWFuZFF1ZXVlOworICAgIGNsX2RldmljZV9pZCBtX2RldmljZTsKKyAgICBj
bF9jb250ZXh0IG1fZGV2aWNlQ29udGV4dDsKKworICAgIGNsX3Byb2dyYW0gbV90cmFuc2Zvcm1D
b2xvclNwYWNlUHJvZ3JhbTsKKyAgICBjbF9rZXJuZWwgbV90cmFuc2Zvcm1Db2xvclNwYWNlS2Vy
bmVsOworCisgICAgY2xfcHJvZ3JhbSBtX3R1cmJ1bGVuY2VQcm9ncmFtOworICAgIGNsX2tlcm5l
bCBtX3R1cmJ1bGVuY2VLZXJuZWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoT1BFTkNMKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFU291cmNlQWxwaGEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3Bl
bkNMRkVTb3VyY2VBbHBoYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
ZjJiMTQ5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFU291cmNlQWxwaGEuY3BwCkBAIC0wLDAgKzEsNjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENv
cHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiU291cmNlQWxwaGEu
aCIKKworI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckNvbnRleHRPcGVuQ0wu
aCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jv
b2wgU291cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQoreworICAgIEZpbHRlckNvbnRl
eHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisKKyAg
ICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEZpbHRlciogZmls
dGVyID0gdGhpcy0+ZmlsdGVyKCk7CisgICAgaWYgKCFmaWx0ZXItPnNvdXJjZUltYWdlKCkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gZmls
dGVyLT5zb3VyY2VJbWFnZSgpOworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNl
SW1hZ2VEYXRhID0gc291cmNlSW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KEludFBvaW50KCksIHNvdXJjZUltYWdlLT5pbnRlcm5hbFNpemUoKSkpOworCisgICAgdW5zaWdu
ZWQgY2hhciogZHN0ID0gc291cmNlSW1hZ2VEYXRhLT5kYXRhKCk7CisgICAgdW5zaWduZWQgY2hh
ciogZW5kID0gZHN0ICsgc291cmNlSW1hZ2VEYXRhLT5sZW5ndGgoKTsKKyAgICB3aGlsZSAoZHN0
IDwgZW5kKSB7CisgICAgICAgIGRzdFswXSA9IDA7CisgICAgICAgIGRzdFsxXSA9IDA7CisgICAg
ICAgIGRzdFsyXSA9IDA7CisgICAgICAgIGRzdCArPSA0OworICAgIH0KKworICAgIGNyZWF0ZU9w
ZW5DTEltYWdlUmVzdWx0KHNvdXJjZUltYWdlRGF0YS0+ZGF0YSgpKTsKKworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklM
VEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvT3BlbkNML09wZW5DTEZFU291cmNlR3JhcGhpYy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRVNv
dXJjZUdyYXBoaWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyOWJl
NTIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL09wZW5DTC9PcGVuQ0xGRVNvdXJjZUdyYXBoaWMuY3BwCkBAIC0wLDAgKzEsNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHly
aWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5o
IgorCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9v
bCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICBGaWx0ZXJDb250
ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworCisg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBGaWx0ZXIqIGZp
bHRlciA9IHRoaXMtPmZpbHRlcigpOworICAgIGlmICghZmlsdGVyLT5zb3VyY2VJbWFnZSgpKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGZp
bHRlci0+c291cmNlSW1hZ2UoKTsKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJj
ZUltYWdlRGF0YSA9IHNvdXJjZUltYWdlLT5nZXRQcmVtdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJl
Y3QoSW50UG9pbnQoKSwgc291cmNlSW1hZ2UtPmludGVybmFsU2l6ZSgpKSk7CisKKyAgICBjcmVh
dGVPcGVuQ0xJbWFnZVJlc3VsdChzb3VyY2VJbWFnZURhdGEtPmRhdGEoKSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMRkVU
dXJidWxlbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjRmYzQ5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9PcGVuQ0wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcApAQCAtMCwwICsxLDI2NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0
IChDKSAyMDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEZJ
TFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmgiCisKKyNp
bmNsdWRlICJGRVR1cmJ1bGVuY2UuY3BwIgorI2luY2x1ZGUgIkZpbHRlckNvbnRleHRPcGVuQ0wu
aCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgY29uc3QgY2hhciogdHVyYnVsZW5jZUtlcm5lbFByb2dyYW0gPQorUFJPR1JBTV9TVFIoCitf
X2NvbnN0YW50IGludCBzX3Blcmxpbk5vaXNlID0gNDA5NjsKK19fY29uc3RhbnQgaW50IHNfYmxv
Y2tTaXplID0gMjU2OworX19jb25zdGFudCBpbnQgc19ibG9ja01hc2sgPSAyNTU7CisKK3R5cGVk
ZWYgc3RydWN0IHsKKyAgICBpbnQgbm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZTsKKyAgICBmbG9h
dCBub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZTsKK30gTm9pc2U7CisKK3R5cGVkZWYgc3RydWN0
IHsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IHdyYXBYOworICAgIGludCBoZWlnaHQ7CisgICAg
aW50IHdyYXBZOworfSBTdGl0Y2hEYXRhOworCitmbG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZs
b2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCit7CisgICAgcmV0dXJuIGEgKyB0ICogKGIgLSBhKTsK
K30KKworZmxvYXQgbm9pc2UyRChfX2NvbnN0YW50IGZsb2F0ICpjb21wb25lbnQsIF9fY29uc3Rh
bnQgaW50ICpsYXR0aWNlU2VsZWN0b3IsIFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgZmxvYXQgbm9p
c2VWZWN0b3JYLCBmbG9hdCBub2lzZVZlY3RvclksIGludCBzdGl0Y2hUaWxlcykKK3sKKyAgICBO
b2lzZSBub2lzZVg7CisgICAgbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPSAoaW50
KShub2lzZVZlY3RvclggKyBzX3Blcmxpbk5vaXNlKTsKKyAgICBub2lzZVgubm9pc2VQb3NpdGlv
bkZyYWN0aW9uVmFsdWUgPSAobm9pc2VWZWN0b3JYICsgc19wZXJsaW5Ob2lzZSkgLSBub2lzZVgu
bm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZTsKKyAgICBOb2lzZSBub2lzZVk7CisgICAgbm9pc2VZ
Lm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPSAoaW50KShub2lzZVZlY3RvclkgKyBzX3Blcmxp
bk5vaXNlKTsKKyAgICBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgPSAobm9pc2VW
ZWN0b3JZICsgc19wZXJsaW5Ob2lzZSkgLSBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1
ZTsKKworICAgIC8vIElmIHN0aXRjaGluZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGlu
Z2x5LgorICAgIGlmIChzdGl0Y2hUaWxlcykgeworICAgICAgICBpZiAobm9pc2VYLm5vaXNlUG9z
aXRpb25JbnRlZ2VyVmFsdWUgPj0gc3RpdGNoRGF0YS53cmFwWCkKKyAgICAgICAgICAgIG5vaXNl
WC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlIC09IHN0aXRjaERhdGEud2lkdGg7CisgICAgICAg
IGlmIChub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSA+PSBzdGl0Y2hEYXRhLndyYXBY
IC0gMSkKKyAgICAgICAgICAgIG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlIC09IHN0
aXRjaERhdGEud2lkdGggLSAxOworICAgICAgICBpZiAobm9pc2VZLm5vaXNlUG9zaXRpb25JbnRl
Z2VyVmFsdWUgPj0gc3RpdGNoRGF0YS53cmFwWSkKKyAgICAgICAgICAgIG5vaXNlWS5ub2lzZVBv
c2l0aW9uSW50ZWdlclZhbHVlIC09IHN0aXRjaERhdGEuaGVpZ2h0OworICAgICAgICBpZiAobm9p
c2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPj0gc3RpdGNoRGF0YS53cmFwWSAtIDEpCisg
ICAgICAgICAgICBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAtPSBzdGl0Y2hEYXRh
LmhlaWdodCAtIDE7CisgICAgfQorCisgICAgbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFs
dWUgJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUg
Jj0gc19ibG9ja01hc2s7CisgICAgaW50IGxhdHRpY2VJbmRleCA9IGxhdHRpY2VTZWxlY3Rvcltu
b2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZV07CisgICAgaW50IG5leHRMYXR0aWNlSW5k
ZXggPSBsYXR0aWNlU2VsZWN0b3JbKG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsg
MSkgJiBzX2Jsb2NrTWFza107CisKKyAgICBmbG9hdCBzeCA9IG5vaXNlWC5ub2lzZVBvc2l0aW9u
RnJhY3Rpb25WYWx1ZSAqIG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqICgzIC0g
MiAqIG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSk7CisgICAgZmxvYXQgc3kgPSBu
b2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBub2lzZVkubm9pc2VQb3NpdGlvbkZy
YWN0aW9uVmFsdWUgKiAoMyAtIDIgKiBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUp
OworCisgICAgLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53
My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCisgICAgaW50
IHRlbXAgPSBsYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRp
b25JbnRlZ2VyVmFsdWVdOworICAgIGZsb2F0IHUgPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0
aW9uVmFsdWUgKiBjb21wb25lbnRbdGVtcCAqIDJdICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFj
dGlvblZhbHVlICogY29tcG9uZW50W3RlbXAgKiAyICsgMV07CisgICAgdGVtcCA9IGxhdHRpY2VT
ZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFs
dWVdOworICAgIGZsb2F0IHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0g
MSkgKiBjb21wb25lbnRbdGVtcCAqIDJdICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZh
bHVlICogY29tcG9uZW50W3RlbXAgKiAyICsgMV07CisgICAgZmxvYXQgYSA9IGxpbmVhckludGVy
cG9sYXRpb24oc3gsIHUsIHYpOworICAgIHRlbXAgPSBsYXR0aWNlU2VsZWN0b3JbbGF0dGljZUlu
ZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxXTsKKyAgICB1ID0gbm9p
c2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogY29tcG9uZW50W3RlbXAgKiAyXSArIChu
b2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIGNvbXBvbmVudFt0ZW1wICog
MiArIDFdOworICAgIHRlbXAgPSBsYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5v
aXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsgMV07CisgICAgdiA9IChub2lzZVgubm9p
c2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIGNvbXBvbmVudFt0ZW1wICogMl0gKyAobm9p
c2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBjb21wb25lbnRbdGVtcCAqIDIg
KyAxXTsKKyAgICBmbG9hdCBiID0gbGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CisgICAg
cmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ksIGEsIGIpOworfQorCitfX2tlcm5lbCB2b2lk
IFR1cmJ1bGVuY2UoX193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwgX19jb25zdGFu
dCBmbG9hdCAqdHJhbnNmb3JtLCBfX2NvbnN0YW50IGZsb2F0ICpyZWRDb21wb25lbnQsCisgICAg
X19jb25zdGFudCBmbG9hdCAqZ3JlZW5Db21wb25lbnQsIF9fY29uc3RhbnQgZmxvYXQgKmJsdWVD
b21wb25lbnQsIF9fY29uc3RhbnQgZmxvYXQgKmFscGhhQ29tcG9uZW50LAorICAgIF9fY29uc3Rh
bnQgaW50ICpsYXR0aWNlU2VsZWN0b3IsIF9fcHJpdmF0ZSBpbnQgb2Zmc2V0WCwgX19wcml2YXRl
IGludCBvZmZzZXRZLCBfX3ByaXZhdGUgaW50IHRpbGVXaWR0aCwKKyAgICBfX3ByaXZhdGUgaW50
IHRpbGVIZWlnaHQsIF9fcHJpdmF0ZSBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgX19wcml2YXRlIGZs
b2F0IGJhc2VGcmVxdWVuY3lZLCBfX3ByaXZhdGUgaW50IHN0aXRjaFRpbGVzLAorICAgIF9fcHJp
dmF0ZSBpbnQgbnVtT2N0YXZlcywgX19wcml2YXRlIGludCB0eXBlLCBfX3ByaXZhdGUgaW50IGZp
bHRlcl9oZWlnaHQpCit7CisgICAgU3RpdGNoRGF0YSBzdGl0Y2hEYXRhOworICAgIHN0aXRjaERh
dGEud2lkdGggPSAwOworICAgIHN0aXRjaERhdGEud3JhcFggPSAwOworICAgIHN0aXRjaERhdGEu
aGVpZ2h0ID0gMDsKKyAgICBzdGl0Y2hEYXRhLndyYXBZID0gMDsKKyAgICAvLyBBZGp1c3QgdGhl
IGJhc2UgZnJlcXVlbmNpZXMgaWYgbmVjZXNzYXJ5IGZvciBzdGl0Y2hpbmcuCisgICAgaWYgKHN0
aXRjaFRpbGVzKSB7CisgICAgICAgIC8vIFdoZW4gc3RpdGNoaW5nIHRpbGVkIHR1cmJ1bGVuY2Us
IHRoZSBmcmVxdWVuY2llcyBtdXN0IGJlIGFkanVzdGVkCisgICAgICAgIC8vIHNvIHRoYXQgdGhl
IHRpbGUgYm9yZGVycyB3aWxsIGJlIGNvbnRpbnVvdXMuCisgICAgICAgIGlmIChiYXNlRnJlcXVl
bmN5WCkgeworICAgICAgICAgICAgZmxvYXQgbG93RnJlcXVlbmN5ID0gZmxvb3IodGlsZVdpZHRo
ICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOworICAgICAgICAgICAgZmxvYXQgaGlnaEZy
ZXF1ZW5jeSA9IGNlaWwodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpIC8gdGlsZVdpZHRoOwor
ICAgICAgICAgICAgLy8gQmFzZUZyZXF1ZW5jeSBzaG91bGQgYmUgbm9uLW5lZ2F0aXZlIGFjY29y
ZGluZyB0byB0aGUgc3RhbmRhcmQuCisgICAgICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVggLyBs
b3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpCisgICAgICAgICAg
ICAgICAgYmFzZUZyZXF1ZW5jeVggPSBsb3dGcmVxdWVuY3k7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSBoaWdoRnJlcXVlbmN5OworICAgICAgICB9
CisgICAgICAgIGlmIChiYXNlRnJlcXVlbmN5WSkgeworICAgICAgICAgICAgZmxvYXQgbG93RnJl
cXVlbmN5ID0gZmxvb3IodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7
CisgICAgICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbCh0aWxlSGVpZ2h0ICogYmFz
ZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgICAgIGlmIChiYXNlRnJlcXVlbmN5
WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkKKyAgICAg
ICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGxvd0ZyZXF1ZW5jeTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IGhpZ2hGcmVxdWVuY3k7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gU2V0IHVwIFR1cmJ1bGVuY2VJbml0aWFsIHN0aXRjaCB2YWx1ZXMu
CisgICAgICAgIHN0aXRjaERhdGEud2lkdGggPSByb3VuZCh0aWxlV2lkdGggKiBiYXNlRnJlcXVl
bmN5WCk7CisgICAgICAgIHN0aXRjaERhdGEud3JhcFggPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNo
RGF0YS53aWR0aDsKKyAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgPSByb3VuZCh0aWxlSGVpZ2h0
ICogYmFzZUZyZXF1ZW5jeVkpOworICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gc19wZXJsaW5O
b2lzZSArIHN0aXRjaERhdGEuaGVpZ2h0OworICAgIH0KKyAgICBmbG9hdDQgdHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0ID0gKGZsb2F0NCkoMCwgMCwgMCwgMCk7CisgICAgZmxvYXQgeCA9IChnZXRf
Z2xvYmFsX2lkKDApICsgb2Zmc2V0WCkgKiBiYXNlRnJlcXVlbmN5WDsKKyAgICBmbG9hdCB5ID0g
KGdldF9nbG9iYWxfaWQoMSkgKyBvZmZzZXRZKSAqIGJhc2VGcmVxdWVuY3lZOworCisgICAgZmxv
YXQgbm9pc2VWZWN0b3JYID0gdHJhbnNmb3JtWzBdICogeCArIHRyYW5zZm9ybVsyXSAqIHkgKyB0
cmFuc2Zvcm1bNF07CisgICAgZmxvYXQgbm9pc2VWZWN0b3JZID0gdHJhbnNmb3JtWzFdICogeCAr
IHRyYW5zZm9ybVszXSAqIHkgKyB0cmFuc2Zvcm1bNV07CisKKyAgICBmbG9hdCByYXRpbyA9IDE7
CisgICAgZm9yIChpbnQgb2N0YXZlID0gMDsgb2N0YXZlIDwgbnVtT2N0YXZlczsgKytvY3RhdmUp
IHsKKyAgICAgICAgaWYgKHR5cGUgPT0gMSkgeworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0
aW9uUmVzdWx0LnggKz0gbm9pc2UyRChyZWRDb21wb25lbnQsIGxhdHRpY2VTZWxlY3Rvciwgc3Rp
dGNoRGF0YSwgbm9pc2VWZWN0b3JYLCBub2lzZVZlY3RvclksIHN0aXRjaFRpbGVzKSAvIHJhdGlv
OworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0LnkgKz0gbm9pc2UyRChncmVl
bkNvbXBvbmVudCwgbGF0dGljZVNlbGVjdG9yLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvclgsIG5v
aXNlVmVjdG9yWSwgc3RpdGNoVGlsZXMpIC8gcmF0aW87CisgICAgICAgICAgICB0dXJidWxlbmNl
RnVuY3Rpb25SZXN1bHQueiArPSBub2lzZTJEKGJsdWVDb21wb25lbnQsIGxhdHRpY2VTZWxlY3Rv
ciwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3JYLCBub2lzZVZlY3RvclksIHN0aXRjaFRpbGVzKSAv
IHJhdGlvOworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0LncgKz0gbm9pc2Uy
RChhbHBoYUNvbXBvbmVudCwgbGF0dGljZVNlbGVjdG9yLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3Rv
clgsIG5vaXNlVmVjdG9yWSwgc3RpdGNoVGlsZXMpIC8gcmF0aW87CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQueCArPSBmYWJzKG5vaXNlMkQo
cmVkQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yWCwg
bm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykpIC8gcmF0aW87CisgICAgICAgICAgICB0dXJidWxl
bmNlRnVuY3Rpb25SZXN1bHQueSArPSBmYWJzKG5vaXNlMkQoZ3JlZW5Db21wb25lbnQsIGxhdHRp
Y2VTZWxlY3Rvciwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3JYLCBub2lzZVZlY3RvclksIHN0aXRj
aFRpbGVzKSkgLyByYXRpbzsKKyAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdC56
ICs9IGZhYnMobm9pc2UyRChibHVlQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERh
dGEsIG5vaXNlVmVjdG9yWCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykpIC8gcmF0aW87Cisg
ICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQudyArPSBmYWJzKG5vaXNlMkQoYWxw
aGFDb21wb25lbnQsIGxhdHRpY2VTZWxlY3Rvciwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3JYLCBu
b2lzZVZlY3RvclksIHN0aXRjaFRpbGVzKSkgLyByYXRpbzsKKyAgICAgICAgfQorICAgICAgICBu
b2lzZVZlY3RvclggKj0gMjsKKyAgICAgICAgbm9pc2VWZWN0b3JZICo9IDI7CisgICAgICAgIHJh
dGlvICo9IDI7CisgICAgICAgIGlmIChzdGl0Y2hUaWxlcykgeworICAgICAgICAgICAgLy8gVXBk
YXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGluTm9pc2VvaXNlIGJlZm9yZSB0
aGUgbXVsdGlwbGljYXRpb24gYW5kCisgICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJk
IHNpbXBsaWZpZXMgdG8gc3VidHJhY3RpbmcgaXQgb25jZS4KKyAgICAgICAgICAgIHN0aXRjaERh
dGEud2lkdGggKj0gMjsKKyAgICAgICAgICAgIHN0aXRjaERhdGEud3JhcFggPSAyICogc3RpdGNo
RGF0YS53cmFwWCAtIHNfcGVybGluTm9pc2U7CisgICAgICAgICAgICBzdGl0Y2hEYXRhLmhlaWdo
dCAqPSAyOworICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWSA9IDIgKiBzdGl0Y2hEYXRhLndy
YXBZIC0gc19wZXJsaW5Ob2lzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0eXBlID09
IDEpCisgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IHR1cmJ1bGVuY2VGdW5jdGlv
blJlc3VsdCAqIDAuNWYgKyAwLjVmOworICAgIC8vIENsYW1wIHJlc3VsdAorICAgIHR1cmJ1bGVu
Y2VGdW5jdGlvblJlc3VsdCA9IGNsYW1wKHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCwgMC4wZiwg
MS4wZik7CisKKyAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQyKShnZXRfZ2xvYmFs
X2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKSwgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0KTsKK30K
Kyk7CisKK2lubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVGRVR1cmJ1bGVu
Y2UoKQoreworICAgIGlmICghbV90dXJidWxlbmNlS2VybmVsKSB7CisgICAgICAgIG1fdHVyYnVs
ZW5jZVByb2dyYW0gPSBjb21waWxlUHJvZ3JhbSh0dXJidWxlbmNlS2VybmVsUHJvZ3JhbSk7Cisg
ICAgICAgIEFTU0VSVChtX3R1cmJ1bGVuY2VQcm9ncmFtKTsKKyAgICAgICAgbV90dXJidWxlbmNl
S2VybmVsID0ga2VybmVsQnlOYW1lKG1fdHVyYnVsZW5jZVByb2dyYW0sICJUdXJidWxlbmNlIik7
CisgICAgICAgIEFTU0VSVChtX3R1cmJ1bGVuY2VLZXJuZWwpOworICAgIH0KK30KKworaW5saW5l
IHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6YXBwbHlGRVR1cmJ1bGVuY2UoT3BlbkNMSGFuZGxl
IGRlc3RpbmF0aW9uLCBJbnRTaXplIGRlc3RpbmF0aW9uU2l6ZSwKKyAgICB2b2lkKiB0cmFuc2Zv
cm0sIGludCB0cmFuc2Zvcm1TaXplLCB2b2lkKiByZWRDb21wb25lbnQsIGludCByZWRDb21wb25l
bnRTaXplLCB2b2lkKiBncmVlbkNvbXBvbmVudCwKKyAgICBpbnQgZ3JlZW5Db21wb25lbnRTaXpl
LCB2b2lkKiBibHVlQ29tcG9uZW50LCBpbnQgYmx1ZUNvbXBvbmVudFNpemUsIHZvaWQqIGFscGhh
Q29tcG9uZW50LCBpbnQgYWxwaGFDb21wb25lbnRTaXplLAorICAgIHZvaWQqIGxhdHRpY2VTZWxl
Y3RvciwgaW50IGxhdHRpY2VTZWxlY3RvclNpemUsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSwg
aW50IHRpbGVXaWR0aCwgaW50IHRpbGVIZWlnaHQsCisgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVgs
IGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBib29sIHN0aXRjaFRpbGVzLCBpbnQgbnVtT2N0YXZlcywg
aW50IHR5cGUpCit7CisgICAgY29tcGlsZUZFVHVyYnVsZW5jZSgpOworCisgICAgUnVuS2VybmVs
IGtlcm5lbCh0aGlzLCBtX3R1cmJ1bGVuY2VLZXJuZWwsIGRlc3RpbmF0aW9uU2l6ZS53aWR0aCgp
LCBkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCkpOworCisgICAga2VybmVsLmFkZEFyZ3VtZW50KGRl
c3RpbmF0aW9uKTsKKyAgICBPcGVuQ0xIYW5kbGUgdHJhbnNmb3JtSGFuZGxlKGtlcm5lbC5hZGRB
cmd1bWVudCh0cmFuc2Zvcm0sIHRyYW5zZm9ybVNpemUpKTsKKyAgICBPcGVuQ0xIYW5kbGUgcmVk
Q29tcG9uZW50SGFuZGxlKGtlcm5lbC5hZGRBcmd1bWVudChyZWRDb21wb25lbnQsIHJlZENvbXBv
bmVudFNpemUpKTsKKyAgICBPcGVuQ0xIYW5kbGUgZ3JlZW5Db21wb25lbnRIYW5kbGUoa2VybmVs
LmFkZEFyZ3VtZW50KGdyZWVuQ29tcG9uZW50LCBncmVlbkNvbXBvbmVudFNpemUpKTsKKyAgICBP
cGVuQ0xIYW5kbGUgYmx1ZUNvbXBvbmVudEhhbmRsZShrZXJuZWwuYWRkQXJndW1lbnQoYmx1ZUNv
bXBvbmVudCwgYmx1ZUNvbXBvbmVudFNpemUpKTsKKyAgICBPcGVuQ0xIYW5kbGUgYWxwaGFDb21w
b25lbnRIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KGFscGhhQ29tcG9uZW50LCBhbHBoYUNvbXBv
bmVudFNpemUpKTsKKyAgICBPcGVuQ0xIYW5kbGUgbGF0dGljZVNlbGVjdG9ySGFuZGxlKGtlcm5l
bC5hZGRBcmd1bWVudChsYXR0aWNlU2VsZWN0b3IsIGxhdHRpY2VTZWxlY3RvclNpemUpKTsgICAg
CisgICAga2VybmVsLmFkZEFyZ3VtZW50KG9mZnNldFgpOworICAgIGtlcm5lbC5hZGRBcmd1bWVu
dChvZmZzZXRZKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQodGlsZVdpZHRoKTsKKyAgICBrZXJu
ZWwuYWRkQXJndW1lbnQodGlsZUhlaWdodCk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KGJhc2VG
cmVxdWVuY3lYKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoYmFzZUZyZXF1ZW5jeVkpOworICAg
IGtlcm5lbC5hZGRBcmd1bWVudChzdGl0Y2hUaWxlcyk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50
KG51bU9jdGF2ZXMpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudCh0eXBlKTsKKyAgICBrZXJuZWwu
YWRkQXJndW1lbnQoZGVzdGluYXRpb25TaXplLmhlaWdodCgpKTsKKworICAgIGtlcm5lbC5ydW4o
KTsKKworICAgIHRyYW5zZm9ybUhhbmRsZS5jbGVhcigpOworICAgIHJlZENvbXBvbmVudEhhbmRs
ZS5jbGVhcigpOworICAgIGdyZWVuQ29tcG9uZW50SGFuZGxlLmNsZWFyKCk7CisgICAgYmx1ZUNv
bXBvbmVudEhhbmRsZS5jbGVhcigpOworICAgIGFscGhhQ29tcG9uZW50SGFuZGxlLmNsZWFyKCk7
CisgICAgbGF0dGljZVNlbGVjdG9ySGFuZGxlLmNsZWFyKCk7Cit9CisKK2Jvb2wgRkVUdXJidWxl
bmNlOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBj
b250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworICAgIGlmICghY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9u
ID0gY3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQoKTsKKworICAgIFBhaW50aW5nRGF0YSBwYWludGlu
Z0RhdGEobV9zZWVkLCByb3VuZGVkSW50U2l6ZShmaWx0ZXJQcmltaXRpdmVTdWJyZWdpb24oKS5z
aXplKCkpKTsKKyAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKKworICAgIEFmZmluZVRyYW5z
Zm9ybSBpbnZlcnRlZFRyYW5zZm9ybSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U1ZHRmlsdGVyKj4oZmls
dGVyKCkpLT5hYnNvbHV0ZVRyYW5zZm9ybSgpLmludmVyc2UoKTsKKyAgICBmbG9hdCB0cmFuc2Zv
cm1Db21wb25lbnRzWzZdID0geyBpbnZlcnRlZFRyYW5zZm9ybS5hKCksIGludmVydGVkVHJhbnNm
b3JtLmIoKSwgaW52ZXJ0ZWRUcmFuc2Zvcm0uYygpLCBpbnZlcnRlZFRyYW5zZm9ybS5kKCksIGlu
dmVydGVkVHJhbnNmb3JtLmUoKSwgaW52ZXJ0ZWRUcmFuc2Zvcm0uZigpIH07CisKKyAgICBpbnQg
dHJhbnNmb3JtU2l6ZSA9IHNpemVvZihmbG9hdCkgKiA2OworICAgIGludCByZWRDb21wb25lbnRT
aXplID0gc2l6ZW9mKGZsb2F0KSAqICgyICogc19ibG9ja1NpemUgKyAyKSAqIDI7CisgICAgaW50
IGdyZWVuQ29tcG9uZW50U2l6ZSA9IHNpemVvZihmbG9hdCkgKiAoMiAqIHNfYmxvY2tTaXplICsg
MikgKiAyOworICAgIGludCBibHVlQ29tcG9uZW50U2l6ZSA9IHNpemVvZihmbG9hdCkgKiAoMiAq
IHNfYmxvY2tTaXplICsgMikgKiAyOworICAgIGludCBhbHBoYUNvbXBvbmVudFNpemUgPSBzaXpl
b2YoZmxvYXQpICogKDIgKiBzX2Jsb2NrU2l6ZSArIDIpICogMjsKKyAgICBpbnQgbGF0dGljZVNl
bGVjdG9yU2l6ZSA9IHNpemVvZihpbnQpICogKDIgKiBzX2Jsb2NrU2l6ZSArIDIpOworCisgICAg
Y29udGV4dC0+YXBwbHlGRVR1cmJ1bGVuY2UoZGVzdGluYXRpb24sIGFic29sdXRlUGFpbnRSZWN0
KCkuc2l6ZSgpLCB0cmFuc2Zvcm1Db21wb25lbnRzLCB0cmFuc2Zvcm1TaXplLAorICAgICAgICBw
YWludGluZ0RhdGEuZ3JhZGllbnQsIHJlZENvbXBvbmVudFNpemUsIHBhaW50aW5nRGF0YS5ncmFk
aWVudCArIDEsIGdyZWVuQ29tcG9uZW50U2l6ZSwKKyAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRp
ZW50ICsgMiwgYmx1ZUNvbXBvbmVudFNpemUsIHBhaW50aW5nRGF0YS5ncmFkaWVudCArIDMsIGFs
cGhhQ29tcG9uZW50U2l6ZSwKKyAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3Rvciwg
bGF0dGljZVNlbGVjdG9yU2l6ZSwgYWJzb2x1dGVQYWludFJlY3QoKS54KCksIGFic29sdXRlUGFp
bnRSZWN0KCkueSgpLCBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS53aWR0aCgpLAorICAgICAgICBw
YWludGluZ0RhdGEuZmlsdGVyU2l6ZS5oZWlnaHQoKSwgbV9iYXNlRnJlcXVlbmN5WCwgbV9iYXNl
RnJlcXVlbmN5WSwgbV9zdGl0Y2hUaWxlcywgbV9udW1PY3RhdmVzLCBtX3R5cGUpOworCisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wvT3BlbkNMSGFuZGxlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL09wZW5DTC9PcGVuQ0xIYW5kbGUu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDUzZGQzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9PcGVuQ0wv
T3BlbkNMSGFuZGxlLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpZiBFTkFCTEUoT1BFTkNMKQor
CisjaWZuZGVmIE9wZW5DTEhhbmRsZV9oCisjZGVmaW5lIE9wZW5DTEhhbmRsZV9oCisKKyNpbmNs
dWRlICJDTC9jbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE9wZW5DTEhhbmRs
ZSB7CitwdWJsaWM6CisgICAgT3BlbkNMSGFuZGxlKCkgOiBtX29wZW5jbE1lbW9yeSgwKSB7IH0K
KyAgICBPcGVuQ0xIYW5kbGUoY2xfbWVtIG9wZW5jbE1lbW9yeSkgOiBtX29wZW5jbE1lbW9yeShv
cGVuY2xNZW1vcnkpIHsgfQorCisgICAgb3BlcmF0b3IgY2xfbWVtKCkgeyByZXR1cm4gbV9vcGVu
Y2xNZW1vcnk7IH0KKworICAgIHZvaWQgb3BlcmF0b3I9KE9wZW5DTEhhbmRsZSBvcGVuY2xNZW1v
cnkpIHsgbV9vcGVuY2xNZW1vcnkgPSBvcGVuY2xNZW1vcnk7IH0KKworICAgIC8vIFRoaXMgY29u
dmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBu
b3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0eXBlZGVmIGNsX21lbSAoT3BlbkNMSGFu
ZGxlOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29s
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbmNsTWVtb3J5ID8gJk9wZW5DTEhhbmRsZTo6bV9v
cGVuY2xNZW1vcnkgOiAwOyB9CisKKyAgICB2b2lkKiBoYW5kbGVBZGRyZXNzKCkgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJm1fb3BlbmNsTWVtb3J5KTsgfQorCisgICAgdm9pZCBj
bGVhcigpCisgICAgeworICAgICAgICBpZiAobV9vcGVuY2xNZW1vcnkpCisgICAgICAgICAgICBj
bFJlbGVhc2VNZW1PYmplY3QobV9vcGVuY2xNZW1vcnkpOworICAgICAgICBtX29wZW5jbE1lbW9y
eSA9IDA7CisgICAgfQorCitwcml2YXRlOgorICAgIGNsX21lbSBtX29wZW5jbE1lbW9yeTsKK307
CisKK30KKworI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRl
eCA5NjkxNmU5Li5iMDIyMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0zMyw2ICszMyw5IEBAIHB1Ymxp
YzoKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKICAgICB2
aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkK
KyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlmCiAgICAgdmly
dHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBh
aW50UmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCBjN2U4MzNlLi4xODVlNTY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBo
aWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJj
ZUdyYXBoaWMuaApAQCAtMzQsNiArMzQsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEF0
b21pY1N0cmluZyYgZWZmZWN0TmFtZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRm
b3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsK
</data>
<flag name="review"
          id="182960"
          type_id="1"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>169601</attachid>
            <date>2012-10-19 05:07:15 -0700</date>
            <delta_ts>2012-11-21 07:18:58 -0800</delta_ts>
            <desc>svg files</desc>
            <filename>turbulence.tar</filename>
            <type>application/x-tar</type>
            <size>10240</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">dHVyYnVsZW5jZTIuc3ZnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDA2NjQAMDAwMTc1
MAAwMDAxNzUwADAwMDAwMDAwNjIzADEyMDM1NTA2MzQxADAxMzAyNQAgMAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGN6ZW5lAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAY3plbmUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8
c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4xIiB3aWR0
aD0iMTAwMCIgaGVpZ2h0PSIxMDAwIiBvbmxvYWQ9InRvcC5tZXRoYW5vbF9uZXh0KCkiPgogIDxk
ZWZzPgogICAgPGZpbHRlciBpZD0idGVzdCIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94
IiB4PSIwIiB5PSIwIiB3aWR0aD0iMSIgaGVpZ2h0PSIxIj4KICAgICAgPGZlVHVyYnVsZW5jZSB0
eXBlPSJ0dXJidWxlbmNlIiBiYXNlRnJlcXVlbmN5PSIwLjAxIiBudW1PY3RhdmVzPSIxIi8+CiAg
ICA8L2ZpbHRlcj4KICA8L2RlZnM+IAogICAgPHJlY3QgeD0iNTAiIHk9IjUwIiB3aWR0aD0iOTAw
IiBoZWlnaHQ9IjkwMCIgZmlsbD0iZ3JlZW4iIGZpbHRlcj0idXJsKCN0ZXN0KSIvPiAgIAo8L3N2
Zz4KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHR1
cmJ1bGVuY2Uuc3ZnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwNjY0ADAwMDE3NTAA
MDAwMTc1MAAwMDAwMDAwMDczNQAxMjAzNTUwNjMyNwAwMTI3NTMAIDAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABjemVuZQAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGN6ZW5lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPHN2
ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9
IjYwMCIgaGVpZ2h0PSI2MDAiIG9ubG9hZD0idG9wLm1ldGhhbm9sX25leHQoKSI+CiAgPGRlZnM+
CiAgICA8ZmlsdGVyIGlkPSJ0ZXN0IiBmaWx0ZXJVbml0cz0ib2JqZWN0Qm91bmRpbmdCb3giIHg9
IjAiIHk9IjAiIHdpZHRoPSIxIiBoZWlnaHQ9IjEiPgogICAgICA8ZmVUdXJidWxlbmNlIHR5cGU9
InR1cmJ1bGVuY2UiIGJhc2VGcmVxdWVuY3k9IjAuMSIgbnVtT2N0YXZlcz0iMSIvPgogICAgPC9m
aWx0ZXI+CiAgPC9kZWZzPiAKICAgIDxyZWN0IHg9IjAiIHk9IjAiIHdpZHRoPSI0MDAiIGhlaWdo
dD0iNDAwIiBmaWxsPSJyZWQiIGZpbHRlcj0idXJsKCN0ZXN0KSIvPgogICAgPHJlY3QgeD0iMjAw
IiB5PSIyMDAiIHdpZHRoPSI0MDAiIGhlaWdodD0iNDAwIiBmaWxsPSJyZWQiIGZpbHRlcj0idXJs
KCN0ZXN0KSIvPgo8L3N2Zz4KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175437</attachid>
            <date>2012-11-21 07:15:50 -0800</date>
            <delta_ts>2012-11-26 07:09:48 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>0002-ocl.patch</filename>
            <type>text/plain</type>
            <size>49239</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0Y2VmMjFhLi5kMDkyNGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzQg
QEAKKzIwMTItMTEtMjEgIFRhbWFzIEN6ZW5lICA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKwor
ICAgICAgICBPcGVuQ0wgdmVyc2lvbiBvZiBTb3VyY2VBbHBoYSwgU291cmNlR3JhcGhpY3MgYW5k
IEZFVHVyYnVsZW5jZSBmaWx0ZXIgZWZmZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk4MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGNvbnRhaW5zIHRoZSBPcGVuQ0wgaW1wbGVt
ZW50YXRpb24gb2YgU291cmNlQWxwaGEsIFNvdXJjZUdyYXBoaWMsIEZFVHVyYnVsZW5jZSBhbmQg
YSBzaW1wbGUgT3BlbkNMIGVudmlyb25tZW50LgorICAgICAgICBUaGlzIGlzIG9ubHkgaW5jbHVk
ZWQgaW4gUXQgbGludXggYnVpbGQuCisKKworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAg
ICogV2ViQ29yZS5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1
cmJ1bGVuY2UuaDogQWRkZWQgcGxhdGZvcm1BcHBseU9wZW5DTCgpIHZpcnR1YWwgZnVuY3Rpb24u
CisgICAgICAgIChGRVR1cmJ1bGVuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvRmlsdGVyRWZmZWN0LmNwcDogQWRkZWQgcGxhdGZvcm0gc3BlY2lmaWMgYXBwbHkuCisg
ICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwbGF0Zm9ybUFwcGx5T3BlbkNMKTog
QSBmdW5jdGlvbiB0byB1c2Ugc29mdHdhcmUgY29tcHV0aW5nIGlmIGEgZmlsdGVyIGlzIG5vdCBp
bXBsZW1lbnRlZCBvbiBPcGVuQ0wuIEl0IHdpbGwgYmUgZGVsZXRlZCBhZnRlciBhbGwgb2YgdGhl
IGZpbHRlcnMgYXJlIGltcGxlbWVudGVkLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0
OjpjbGVhclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VC
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvcGVuQ0xJbWFnZVRvSW1h
Z2VCdWZmZXIpOiBHZXRzIHRoZSByZXN1bHQgb2YgdGhlIGZpbHRlciBmcm9tIHRoZSBPcGVuQ0wg
ZGV2aWNlIGFuZCBjb252ZXJ0cyBpdCB0byBJbWFnZUJ1ZmZlciB0eXBlLgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCk6IEFsbG9jYXRlcyBt
ZW1vcnkgb24gT3BlbkNMIGRldmljZSBhbmQgaWYgaXQgZ2V0cyBhbiBpbWFnZSBhcyBhIHBhcmFt
ZXRlciwgaXQgdXBsb2FkcyB0aGUgaW1hZ2UgdG8gdGhlIE9wZW5DTCBkZXZpY2UuCisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg6CisgICAgICAg
IChGaWx0ZXJFZmZlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpvcGVuQ0xJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnNldE9wZW5DTEltYWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6aGFzUmVzdWx0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmg6CisgICAgICAgIChTb3VyY2VB
bHBoYSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGlj
Lmg6CisgICAgICAgIChTb3VyY2VHcmFwaGljKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCk6
IENvbmZpZ3VyZXMgdGhlIE9wZW5DTCBlbnZpcm9ubWVudC4KKyAgICAgICAgKFdlYkNvcmU6OkZp
bHRlckNvbnRleHRPcGVuQ0w6OmNyZWF0ZU9wZW5DTEltYWdlKTogQWxsb2NhdGVzIG1lbW9yeSBv
biBPcGVuQ0wgZGV2aWNlLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6
b3BlbkNMVHJhbnNmb3JtQ29sb3JTcGFjZSk6IE9wZW5DTCBpbXBsZW1lbnRhdGlvbiBvZiB0cmFu
c2Zvcm1Db2xvclNwYWNlLgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6
Y29tcGlsZVByb2dyYW0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wv
RmlsdGVyQ29udGV4dE9wZW5DTC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoRmlsdGVyQ29udGV4dE9wZW5DTCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0
T3BlbkNMOjpkZXZpY2VJZCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNM
OjpkZXZpY2VDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6
OmNvbW1hbmRRdWV1ZSk6CisgICAgICAgIChSdW5LZXJuZWwpOgorICAgICAgICAoV2ViQ29yZTo6
RmlsdGVyQ29udGV4dE9wZW5DTDo6UnVuS2VybmVsOjpSdW5LZXJuZWwpOgorICAgICAgICAoV2Vi
Q29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6UnVuS2VybmVsOjphZGRBcmd1bWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpSdW5LZXJuZWw6OnJ1bik6CisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjprZXJuZWxCeU5hbWUpOiBSZXR1cm5z
IHRoZSByZWZlcmVuY2Ugb2YgYSBmdW5jdGlvbiBpbiB0aGUgT3BlbkNMIHByb2dyYW0uCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUFs
cGhhOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvb3BlbmNsL09wZW5DTEZFU291cmNlR3JhcGhpYy5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5T3Bl
bkNMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFVHVy
YnVsZW5jZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlRkVUdXJidWxlbmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVUdXJidWxlbmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseU9wZW5DTCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xIYW5kbGUuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlKToKKyAgICAgICAgKE9wZW5DTEhhbmRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpPcGVuQ0xIYW5kbGU6Ok9wZW5DTEhhbmRsZSk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ0xI
YW5kbGU6Om9wZXJhdG9yIGNsX21lbSk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ0xIYW5kbGU6
Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ0xIYW5kbGU6Om9wZXJhdG9yIFVu
c3BlY2lmaWVkQm9vbFR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkNMSGFuZGxlOjpoYW5k
bGVBZGRyZXNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DTEhhbmRsZTo6Y2xlYXIpOgorCiAy
MDEyLTExLTIxICBGbG9yaW4gTWFsaXRhICA8Zm1hbGl0YUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgW1NraWFdIEVuY2Fwc3VsYXRlIGFjY2VzcyB0byBQbGF0Zm9ybUNvbnRleHRTa2lhJ3MgU2tD
YW52YXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCmluZGV4IGY2NjkxODAuLmVkZGU5M2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAt
NDA4MCw2ICs0MDgwLDE3IEBAIGNvbnRhaW5zKENPTkZJRywgb3BlbmdsLXNoaW1zKSB7CiAgICAg
REVGSU5FUyArPSBRVF9PUEVOR0xfU0hJTVM9MQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfT1BFTkNMPTEpIHsKKyAgICBERUZJTkVTICs9IE9QRU5DTD0xCisKKyAgICBIRUFERVJTICs9
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFuZGxlLmgKKyAgICBIRUFERVJT
ICs9IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5oCisg
ICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRP
cGVuQ0wuY3BwCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09w
ZW5DTEZFU291cmNlQWxwaGEuY3BwCisgICAgU09VUkNFUyArPSBwbGF0Zm9ybS9ncmFwaGljcy9n
cHUvb3BlbmNsL09wZW5DTEZFU291cmNlR3JhcGhpYy5jcHAKKyAgICBTT1VSQ0VTICs9IHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcAorfQorCiB1c2U/
KEdSQVBISUNTX1NVUkZBQ0UpIHsKICAgICBtYWMgewogICAgICAgICBTT1VSQ0VTICs9IHBsYXRm
b3JtL2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
cHJpCmluZGV4IDM1MDQ4NzAuLmFlYzA1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dl
YkNvcmUucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCkBAIC0yODMsNiArMjgz
LDEyIEBAIHVuaXh8d2luMzItZysrKiB7CiAgICAgUU1BS0VfUEtHQ09ORklHX1JFUVVJUkVTID0g
UXRDb3JlIFF0R3VpIFF0TmV0d29yayBRdFdpZGdldHMKIH0KIAorY29udGFpbnMoREVGSU5FUywg
RU5BQkxFX09QRU5DTD0xKSB7CisgICAgTElCUyArPSAtbE9wZW5DTAorCisgICAgSU5DTFVERVBB
VEggKz0gJCRTT1VSQ0VfRElSL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wKK30KKwogIyBE
aXNhYmxlIEMrKzB4IG1vZGUgaW4gV2ViQ29yZSBmb3IgdGhvc2Ugd2hvIGVuYWJsZWQgaXQgaW4g
dGhlaXIgUXQncyBta3NwZWMKICotZysrKjpRTUFLRV9DWFhGTEFHUyAtPSAtc3RkPWMrKzB4IC1z
dGQ9Z251KysweAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0N2M4YmVlLi44NGZmMTEyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5j
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJi
dWxlbmNlLmgKQEAgLTYxLDYgKzYxLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGZpbGxS
ZWdpb25Xb3JrZXIodm9pZCopOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBw
bHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAgICAgCiAgICAg
dmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgeyBzZXRBYnNvbHV0ZVBh
aW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAKaW5kZXggYTJiYjU0ZC4uYzA2OGM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMiw2
ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBl
bmd1aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8
a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEyMyw2ICsxMjQsMTAg
QEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKICAgICB9CiAgICAgCiAgICAgLy8gQWRkIHBs
YXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4K
KyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIGlmIChwbGF0Zm9ybUFwcGx5T3BlbkNMKCkpCisgICAg
ICAgIHJldHVybjsKKyNlbmRpZgogI2lmIFVTRShTS0lBKQogICAgIGlmIChwbGF0Zm9ybUFwcGx5
U2tpYSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzAsNiArMTM1LDMxIEBAIHZvaWQgRmlsdGVy
RWZmZWN0OjphcHBseSgpCiAgICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CiB9CiAKKyNpZiBF
TkFCTEUoT1BFTkNMKQorLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNoYW5nZWQgdG8gYWJzdHJh
Y3QgdmlydHVhbCB3aGVuIGFsbCBmaWx0ZXJzIGFyZSBsYW5kZWQuCitib29sIEZpbHRlckVmZmVj
dDo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgaWYgKCFGaWx0ZXJDb250ZXh0T3BlbkNM
Ojpjb250ZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIHNpemUg
PSBtX2lucHV0RWZmZWN0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNp
emU7ICsraSkgeworICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMuYXQo
aSkuZ2V0KCk7CisgICAgICAgIC8vIFNvZnR3YXJlIGNvZGUgcGF0aCBleHBlY3RzIHRoYXQgYXQg
bGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmlsZWRzIGlzIHZhbGlkLgorICAgICAgICBpZiAo
IWluLT5tX2ltYWdlQnVmZmVyUmVzdWx0ICYmICFpbi0+bV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCAmJiAhaW4tPm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQorICAgICAgICAgICAgaW4tPmFz
SW1hZ2VCdWZmZXIoKTsKKyAgICB9CisKKyAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyAg
ICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBhc0ltYWdlQnVmZmVyKCk7CisgICAgaWYgKHNv
dXJjZUltYWdlKSB7CisgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlSW1h
Z2VEYXRhID0gc291cmNlSW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KElu
dFBvaW50KCksIHNvdXJjZUltYWdlLT5pbnRlcm5hbFNpemUoKSkpOworICAgICAgICBjcmVhdGVP
cGVuQ0xJbWFnZVJlc3VsdChzb3VyY2VJbWFnZURhdGEtPmRhdGEoKSk7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorI2VuZGlmCisKIHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJl
TXVsdGlwbGllZFBpeGVscygpCiB7CiAgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBs
aWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCkBA
IC0xODcsNiArMjE3LDEwIEBAIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCiAgICAg
ICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuY2xlYXIoKTsKICAgICBpZiAobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmNs
ZWFyKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBpZiAobV9vcGVuQ0xJbWFnZVJlc3VsdCkK
KyAgICAgICAgbV9vcGVuQ0xJbWFnZVJlc3VsdC5jbGVhcigpOworI2VuZGlmCiB9CiAKIEltYWdl
QnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIoKQpAQCAtMTk1LDYgKzIyOSwxMCBA
QCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyKCkKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCiAgICAgICAgIHJldHVybiBtX2lt
YWdlQnVmZmVyUmVzdWx0LmdldCgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgaWYgKG1fb3Bl
bkNMSW1hZ2VSZXN1bHQpCisgICAgICAgIHJldHVybiBvcGVuQ0xJbWFnZVRvSW1hZ2VCdWZmZXIo
KTsKKyNlbmRpZgogICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCAxLCBtX3Jlc3VsdENvbG9yU3BhY2UsIG1fZmls
dGVyLT5yZW5kZXJpbmdNb2RlKCkpOwogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBv
aW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpCkBAIC0yMDQsNiArMjQyLDI3IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJF
ZmZlY3Q6OmFzSW1hZ2VCdWZmZXIoKQogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0Lmdl
dCgpOwogfQogCisjaWYgRU5BQkxFKE9QRU5DTCkKK0ltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6
Om9wZW5DTEltYWdlVG9JbWFnZUJ1ZmZlcigpCit7CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCog
Y29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAgICBBU1NFUlQoY29u
dGV4dCk7CisKKyAgICBzaXplX3Qgb3JpZ2luWzNdID0geyAwLCAwLCAwIH07CisgICAgc2l6ZV90
IHJlZ2lvblszXSA9IHsgbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRlUGFp
bnRSZWN0LmhlaWdodCgpLCAxIH07CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGRl
c3RpbmF0aW9uUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9hYnNvbHV0
ZVBhaW50UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQpOwor
CisgICAgY2xFbnF1ZXVlUmVhZEltYWdlKGNvbnRleHQtPmNvbW1hbmRRdWV1ZSgpLCBtX29wZW5D
TEltYWdlUmVzdWx0LCBDTF9UUlVFLCBvcmlnaW4sIHJlZ2lvbiwgMCwgMCwgZGVzdGluYXRpb25Q
aXhlbEFycmF5LT5kYXRhKCksIDAsIDAsIDApOworCisgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdCA9
IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOworICAgIElu
dFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6
ZSgpKTsKKyAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoVW5tdWx0aXBsaWVk
LCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZ2V0KCksIGRlc3RpbmF0aW9uUmVjdC5zaXplKCksIGRl
c3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJl
c3VsdC5nZXQoKTsKK30KKyNlbmRpZgorCiBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBG
aWx0ZXJFZmZlY3Q6OmFzVW5tdWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
ICAgICBBU1NFUlQoaXNGaWx0ZXJTaXplVmFsaWQocmVjdCkpOwpAQCAtMzYzLDYgKzQyMiwyMiBA
QCBVaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVkSW1h
Z2VSZXN1bHQoKQogICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQoKTsK
IH0KIAorI2lmIEVOQUJMRShPUEVOQ0wpCitPcGVuQ0xIYW5kbGUgRmlsdGVyRWZmZWN0OjpjcmVh
dGVPcGVuQ0xJbWFnZVJlc3VsdCh1aW50OF90KiBzb3VyY2UpCit7CisgICAgQVNTRVJUKCFoYXNS
ZXN1bHQoKSk7CisgICAgY2xfaW1hZ2VfZm9ybWF0IGNsSW1hZ2VGb3JtYXQ7CisgICAgY2xJbWFn
ZUZvcm1hdC5pbWFnZV9jaGFubmVsX29yZGVyID0gQ0xfUkdCQTsKKyAgICBjbEltYWdlRm9ybWF0
LmltYWdlX2NoYW5uZWxfZGF0YV90eXBlID0gQ0xfVU5PUk1fSU5UODsKKworICAgIEZpbHRlckNv
bnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7Cisg
ICAgQVNTRVJUKGNvbnRleHQpOworICAgIG1fb3BlbkNMSW1hZ2VSZXN1bHQgPSBjbENyZWF0ZUlt
YWdlMkQoY29udGV4dC0+ZGV2aWNlQ29udGV4dCgpLCBDTF9NRU1fUkVBRF9XUklURSB8IChzb3Vy
Y2UgPyBDTF9NRU1fQ09QWV9IT1NUX1BUUiA6IDApLAorICAgICAgICAmY2xJbWFnZUZvcm1hdCwg
bV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgp
LCAwLCBzb3VyY2UsIDApOworICAgIHJldHVybiBtX29wZW5DTEltYWdlUmVzdWx0OworfQorI2Vu
ZGlmCisKIHZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKENvbG9y
U3BhY2UgZHN0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cpCkBAIC0zNzQsMTIgKzQ0OSwyNyBA
QCB2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShDb2xvclNwYWNl
IGRzdENvbG9yU3BhY2UpCiAKICAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90ZW50
aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKICAgICAv
LyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlwbGll
ZCBhcnJheXMuCisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBpZiAob3BlbkNMSW1hZ2UoKSkgewor
ICAgICAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5D
TDo6Y29udGV4dCgpOworICAgICAgICBBU1NFUlQoY29udGV4dCk7CisgICAgICAgIGNvbnRleHQt
Pm9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2UobV9vcGVuQ0xJbWFnZVJlc3VsdCwgYWJzb2x1dGVQ
YWludFJlY3QoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBkc3RDb2xvclNwYWNlKTsKKyAgICAgICAg
aWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LmNsZWFyKCk7CisgICAgICAgIGdvdG8gc2tpcFNvZnR3YXJlQ29kZVBhdGg7CisgICAgfQorI2Vu
ZGlmCiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KSB7CiAgICAgICAgIGFzSW1hZ2VCdWZm
ZXIoKTsKICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQpOwogICAgIH0KIAogICAg
IG1faW1hZ2VCdWZmZXJSZXN1bHQtPnRyYW5zZm9ybUNvbG9yU3BhY2UobV9yZXN1bHRDb2xvclNw
YWNlLCBkc3RDb2xvclNwYWNlKTsKKworI2lmIEVOQUJMRShPUEVOQ0wpCitza2lwU29mdHdhcmVD
b2RlUGF0aDoKKyNlbmRpZgorCiAgICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZHN0Q29sb3JTcGFj
ZTsKIAogICAgIGlmIChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgKaW5k
ZXggMDY5ZWRlMy4uYjlmMjE5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0zMyw2ICszMywxMCBAQAog
I2luY2x1ZGUgPHd0Zi9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KIAorI2lmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5o
IgorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBmbG9hdCBrTWF4RmlsdGVyU2l6ZSA9IDUwMDAuMGY7
CiAKICNpZiBVU0UoU0tJQSkKQEAgLTcwLDYgKzc0LDEyIEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
cHlVbm11bHRpcGxpZWRJbWFnZShVaW50OENsYW1wZWRBcnJheSogZGVzdGluYXRpb24sIGNvbnN0
IEludFJlY3QmKTsKICAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkSW1hZ2UoVWludDhDbGFtcGVk
QXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7CiAKKyNpZiBFTkFCTEUoT1BFTkNM
KQorICAgIE9wZW5DTEhhbmRsZSBvcGVuQ0xJbWFnZSgpIHsgcmV0dXJuIG1fb3BlbkNMSW1hZ2VS
ZXN1bHQ7IH0KKyAgICB2b2lkIHNldE9wZW5DTEltYWdlKE9wZW5DTEhhbmRsZSBvcGVuQ0xJbWFn
ZSkgeyBtX29wZW5DTEltYWdlUmVzdWx0ID0gb3BlbkNMSW1hZ2U7IH0KKyAgICBJbWFnZUJ1ZmZl
ciogb3BlbkNMSW1hZ2VUb0ltYWdlQnVmZmVyKCk7CisjZW5kaWYKKwogICAgIEZpbHRlckVmZmVj
dFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAgICBG
aWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKICAgICB1bnNpZ25lZCBu
dW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzLnNpemUo
KTsgfQpAQCAtNzcsNyArODcsMTIgQEAgcHVibGljOgogICAgIGlubGluZSBib29sIGhhc1Jlc3Vs
dCgpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRmb3Jt
IHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUgYnkg
RmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdCB8fCBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0IHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OworICAg
ICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAorI2lmIEVOQUJMRShPUEVOQ0wpCisgICAg
ICAgICAgICB8fCBtX29wZW5DTEltYWdlUmVzdWx0CisjZW5kaWYKKyAgICAgICAgICAgIHx8IG1f
dW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQKKyAgICAgICAgICAgIHx8IG1fcHJlbXVsdGlwbGllZElt
YWdlUmVzdWx0OwogICAgIH0KIAogICAgIEludFJlY3QgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShjb25zdCBJbnRSZWN0JikgY29uc3Q7CkBAIC0xMDEsNiArMTE2LDkgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSB7IH0KIAogICAgIHZp
cnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7CisjaWYgRU5BQkxFKE9QRU5D
TCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlmCiAjaWYg
VVNFKFNLSUEpCiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlTa2lhKCkgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIFNrSW1hZ2VGaWx0ZXIqIGNyZWF0ZUltYWdlRmlsdGVyKFNr
aWFJbWFnZUZpbHRlckJ1aWxkZXIqKSB7IHJldHVybiAwOyB9CkBAIC0xNDksNiArMTY3LDkgQEAg
cHJvdGVjdGVkOgogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgpOwog
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgpOwog
ICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsK
KyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIE9wZW5DTEhhbmRsZSBjcmVhdGVPcGVuQ0xJbWFnZVJl
c3VsdCh1aW50OF90KiA9IDApOworI2VuZGlmCiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUg
ZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVlcywg
d2l0aAogICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50IGlu
IFswLCBhbHBoYV0uCkBAIC0xNjIsNiArMTgzLDkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8VWlu
dDhDbGFtcGVkQXJyYXk+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiAgICAgUmVmUHRyPFVp
bnQ4Q2xhbXBlZEFycmF5PiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKICAgICBGaWx0ZXJF
ZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBPcGVu
Q0xIYW5kbGUgbV9vcGVuQ0xJbWFnZVJlc3VsdDsKKyNlbmRpZgogCiAgICAgYm9vbCBtX2FscGhh
SW1hZ2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Zp
bHRlcnMvU291cmNlQWxwaGEuaAppbmRleCA5NjkxNmU5Li5iMDIyMGNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5o
CkBAIC0zMyw2ICszMyw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5n
JiBlZmZlY3ROYW1lKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9w
ZW5DTCgpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1YWwg
dm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRleCBj
N2U4MzNlLi4xODVlNTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMzQsNiArMzQsOSBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZWZmZWN0TmFtZSgpOwogCiAgICAg
dmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wp
CisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZp
cnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1dGVQ
YWludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNWVkZmUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRP
cGVuQ0wuY3BwCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRj
emVuZUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiRmlsdGVy
Q29udGV4dE9wZW5DTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpbHRlckNvbnRleHRP
cGVuQ0wqIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKQoreworICAgIHN0YXRpYyBGaWx0
ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gMDsKKyAgICBzdGF0aWMgYm9vbCBpbml0RmFpbGVk
ID0gZmFsc2U7CisKKyAgICBpZiAoY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGNvbnRleHQ7Cisg
ICAgaWYgKGluaXRGYWlsZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgaW5pdEZhaWxlZCA9
IHRydWU7CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogbG9jYWxDb250ZXh0ID0gbmV3IEZpbHRl
ckNvbnRleHRPcGVuQ0woKTsKKworICAgIC8vIEluaXRpYWxpemluZyB0aGUgY29udGV4dC4KKyAg
ICBjbF9pbnQgZXJyb3JOdW1iZXI7CisgICAgY2xfZGV2aWNlX2lkKiBkZXZpY2VzOworICAgIGNs
X3BsYXRmb3JtX2lkIGZpcnN0UGxhdGZvcm1JZDsKKyAgICBzaXplX3QgZGV2aWNlQnVmZmVyU2l6
ZSA9IC0xOworCisgICAgZXJyb3JOdW1iZXIgPSBjbEdldFBsYXRmb3JtSURzKDEsICZmaXJzdFBs
YXRmb3JtSWQsIDApOworICAgIGNsX2NvbnRleHRfcHJvcGVydGllcyBjb250ZXh0UHJvcGVydGll
c1tdID0geyBDTF9DT05URVhUX1BMQVRGT1JNLCAoY2xfY29udGV4dF9wcm9wZXJ0aWVzKWZpcnN0
UGxhdGZvcm1JZCwgMH07CisgICAgbG9jYWxDb250ZXh0LT5tX2RldmljZUNvbnRleHQgPSBjbENy
ZWF0ZUNvbnRleHRGcm9tVHlwZShjb250ZXh0UHJvcGVydGllcywgQ0xfREVWSUNFX1RZUEVfR1BV
LCAwLCAwLCAmZXJyb3JOdW1iZXIpOworICAgIGlmIChlcnJvck51bWJlciAhPSBDTF9TVUNDRVNT
KSB7CisgICAgICAgIGxvY2FsQ29udGV4dC0+bV9kZXZpY2VDb250ZXh0ID0gY2xDcmVhdGVDb250
ZXh0RnJvbVR5cGUoY29udGV4dFByb3BlcnRpZXMsIENMX0RFVklDRV9UWVBFX0NQVSwgMCwgMCwg
JmVycm9yTnVtYmVyKTsKKyAgICAgICAgaWYgKGVycm9yTnVtYmVyICE9IENMX1NVQ0NFU1MpCisg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBlcnJvck51bWJlciA9IGNsR2V0Q29u
dGV4dEluZm8obG9jYWxDb250ZXh0LT5tX2RldmljZUNvbnRleHQsIENMX0NPTlRFWFRfREVWSUNF
UywgMCwgMCwgJmRldmljZUJ1ZmZlclNpemUpOworICAgIGlmIChlcnJvck51bWJlciAhPSBDTF9T
VUNDRVNTKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChkZXZpY2VCdWZmZXJTaXplIDw9
IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgZGV2aWNlcyA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2xfZGV2aWNlX2lkICo+KGZhc3RNYWxsb2MoZGV2aWNlQnVmZmVyU2l6ZSkpOworICAgIGVycm9y
TnVtYmVyID0gY2xHZXRDb250ZXh0SW5mbyhsb2NhbENvbnRleHQtPm1fZGV2aWNlQ29udGV4dCwg
Q0xfQ09OVEVYVF9ERVZJQ0VTLCBkZXZpY2VCdWZmZXJTaXplLCBkZXZpY2VzLCAwKTsKKyAgICBp
ZiAoZXJyb3JOdW1iZXIgIT0gQ0xfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBs
b2NhbENvbnRleHQtPm1fY29tbWFuZFF1ZXVlID0gY2xDcmVhdGVDb21tYW5kUXVldWUobG9jYWxD
b250ZXh0LT5tX2RldmljZUNvbnRleHQsIGRldmljZXNbMF0sIDAsIDApOworICAgIGlmICghbG9j
YWxDb250ZXh0LT5tX2NvbW1hbmRRdWV1ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBsb2Nh
bENvbnRleHQtPm1fZGV2aWNlSWQgPSBkZXZpY2VzWzBdOworICAgIGZhc3RGcmVlKGRldmljZXMp
OworCisgICAgY2xfYm9vbCBpbWFnZVN1cHBvcnQgPSBDTF9GQUxTRTsKKyAgICBjbEdldERldmlj
ZUluZm8obG9jYWxDb250ZXh0LT5tX2RldmljZUlkLCBDTF9ERVZJQ0VfSU1BR0VfU1VQUE9SVCwg
c2l6ZW9mKGNsX2Jvb2wpLCAmaW1hZ2VTdXBwb3J0LCAwKTsKKyAgICBpZiAoaW1hZ2VTdXBwb3J0
ICE9IENMX1RSVUUpCisgICAgICAgIHJldHVybiAwOworCisgICAgY29udGV4dCA9IGxvY2FsQ29u
dGV4dDsKKyAgICByZXR1cm4gY29udGV4dDsKK30KKworT3BlbkNMSGFuZGxlIEZpbHRlckNvbnRl
eHRPcGVuQ0w6OmNyZWF0ZU9wZW5DTEltYWdlKEludFNpemUgcGFpbnRTaXplKQoreworICAgIEZp
bHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0
KCk7CisKKyAgICBjbF9pbWFnZV9mb3JtYXQgY2xJbWFnZUZvcm1hdDsKKyAgICBjbEltYWdlRm9y
bWF0LmltYWdlX2NoYW5uZWxfb3JkZXIgPSBDTF9SR0JBOworICAgIGNsSW1hZ2VGb3JtYXQuaW1h
Z2VfY2hhbm5lbF9kYXRhX3R5cGUgPSBDTF9VTk9STV9JTlQ4OworCisgICAgT3BlbkNMSGFuZGxl
IGltYWdlID0gY2xDcmVhdGVJbWFnZTJEKGNvbnRleHQtPmRldmljZUNvbnRleHQoKSwgQ0xfTUVN
X1JFQURfV1JJVEUsICZjbEltYWdlRm9ybWF0LAorICAgICAgICBwYWludFNpemUud2lkdGgoKSwg
cGFpbnRTaXplLmhlaWdodCgpLCAwLCAwLCAwKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK3N0
YXRpYyBjb25zdCBjaGFyKiB0cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsUHJvZ3JhbSA9CitQUk9H
UkFNX1NUUigKK2NvbnN0IHNhbXBsZXJfdCBzYW1wbGVyID0gQ0xLX05PUk1BTElaRURfQ09PUkRT
X0ZBTFNFIHwgQ0xLX0FERFJFU1NfQ0xBTVBfVE9fRURHRSB8IENMS19GSUxURVJfTkVBUkVTVDsK
KworX19rZXJuZWwgdm9pZCB0cmFuc2Zvcm1Db2xvclNwYWNlKF9fcmVhZF9vbmx5IGltYWdlMmRf
dCBzb3VyY2UsIF9fd3JpdGVfb25seSBpbWFnZTJkX3QgZGVzdGluYXRpb24sIF9fY29uc3RhbnQg
ZmxvYXQgKmNsTG9va1VwVGFibGUpCit7CisgICAgaW50MiBzb3VyY2VDb29yZCA9IChpbnQyKSAo
Z2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSk7CisgICAgZmxvYXQ0IHBpeGVsID0g
cmVhZF9pbWFnZWYoc291cmNlLCBzYW1wbGVyLCBzb3VyY2VDb29yZCk7CisKKyAgICBwaXhlbCA9
IChmbG9hdDQpKGNsTG9va1VwVGFibGVbKGludCkocm91bmQocGl4ZWwueCAqIDI1NSkpXSwgY2xM
b29rVXBUYWJsZVsoaW50KShyb3VuZChwaXhlbC55ICogMjU1KSldLAorICAgICAgICBjbExvb2tV
cFRhYmxlWyhpbnQpKHJvdW5kKHBpeGVsLnogKiAyNTUpKV0sIHBpeGVsLncpOworCisgICAgd3Jp
dGVfaW1hZ2VmKGRlc3RpbmF0aW9uLCBzb3VyY2VDb29yZCwgcGl4ZWwpOworfQorKTsKKwordm9p
ZCBGaWx0ZXJDb250ZXh0T3BlbkNMOjpvcGVuQ0xUcmFuc2Zvcm1Db2xvclNwYWNlKE9wZW5DTEhh
bmRsZSYgc291cmNlLCBJbnRSZWN0IHNvdXJjZVNpemUsIENvbG9yU3BhY2Ugc3JjQ29sb3JTcGFj
ZSwgQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwo
T3BlbkNMSGFuZGxlLCBkZXZpY2VSZ2JMVVQsICgpKTsKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KE9wZW5DTEhhbmRsZSwgbGluZWFyUmdiTFVULCAoKSk7CisKKyAgICBpZiAoc3JjQ29sb3JTcGFj
ZSA9PSBkc3RDb2xvclNwYWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoKHNyY0NvbG9y
U3BhY2UgIT0gQ29sb3JTcGFjZUxpbmVhclJHQiAmJiBzcmNDb2xvclNwYWNlICE9IENvbG9yU3Bh
Y2VEZXZpY2VSR0IpCisgICAgICAgIHx8IChkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2VMaW5l
YXJSR0IgJiYgZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlRGV2aWNlUkdCKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRl
eHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisKKyAgICBPcGVuQ0xI
YW5kbGUgZGVzdGluYXRpb24gPSBjb250ZXh0LT5jcmVhdGVPcGVuQ0xJbWFnZShzb3VyY2VTaXpl
LnNpemUoKSk7CisKKyAgICBpZiAoIW1fdHJhbnNmb3JtQ29sb3JTcGFjZVByb2dyYW0pIHsKKyAg
ICAgICAgbV90cmFuc2Zvcm1Db2xvclNwYWNlUHJvZ3JhbSA9IGNvbXBpbGVQcm9ncmFtKHRyYW5z
Zm9ybUNvbG9yU3BhY2VLZXJuZWxQcm9ncmFtKTsKKyAgICAgICAgbV90cmFuc2Zvcm1Db2xvclNw
YWNlS2VybmVsID0ga2VybmVsQnlOYW1lKG1fdHJhbnNmb3JtQ29sb3JTcGFjZVByb2dyYW0sICJ0
cmFuc2Zvcm1Db2xvclNwYWNlIik7CisgICAgfQorCisgICAgUnVuS2VybmVsIGtlcm5lbChjb250
ZXh0LCBtX3RyYW5zZm9ybUNvbG9yU3BhY2VLZXJuZWwsIHNvdXJjZVNpemUud2lkdGgoKSwgc291
cmNlU2l6ZS5oZWlnaHQoKSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHNvdXJjZSk7CisgICAg
a2VybmVsLmFkZEFyZ3VtZW50KGRlc3RpbmF0aW9uKTsKKworICAgIGlmIChkc3RDb2xvclNwYWNl
ID09IENvbG9yU3BhY2VMaW5lYXJSR0IpIHsKKyAgICAgICAgaWYgKCFsaW5lYXJSZ2JMVVQpIHsK
KyAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gbG9va1VwVGFibGU7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBj
b2xvciA9IGkgIC8gMjU1LjBmOworICAgICAgICAgICAgICAgIGNvbG9yID0gKGNvbG9yIDw9IDAu
MDQwNDVmID8gY29sb3IgLyAxMi45MmYgOiBwb3coKGNvbG9yICsgMC4wNTVmKSAvIDEuMDU1Ziwg
Mi40ZikpOworICAgICAgICAgICAgICAgIGNvbG9yID0gc3RkOjptYXgoMC4wZiwgY29sb3IpOwor
ICAgICAgICAgICAgICAgIGNvbG9yID0gc3RkOjptaW4oMS4wZiwgY29sb3IpOworICAgICAgICAg
ICAgICAgIGxvb2tVcFRhYmxlLmFwcGVuZCgocm91bmQoY29sb3IgKiAyNTUpKSAvIDI1NSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBsaW5lYXJSZ2JMVVQgPSBrZXJuZWwuYWRkQXJndW1l
bnQobG9va1VwVGFibGUuZGF0YSgpLCBzaXplb2YoZmxvYXQpICogMjU2KTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICBrZXJuZWwuYWRkQXJndW1lbnQobGluZWFyUmdiTFVUKTsKKyAgICB9
IGVsc2UgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZURldmljZVJHQikgeworICAgICAg
ICBpZiAoIWRldmljZVJnYkxVVCkgeworICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBsb29rVXBU
YWJsZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgewor
ICAgICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAvIDI1NS4wZjsKKyAgICAgICAgICAgICAg
ICBjb2xvciA9IChwb3dmKGNvbG9yLCAxLjBmIC8gMi40ZikgKiAxLjA1NWYpIC0gMC4wNTVmOwor
ICAgICAgICAgICAgICAgIGNvbG9yID0gc3RkOjptYXgoMC4wZiwgY29sb3IpOworICAgICAgICAg
ICAgICAgIGNvbG9yID0gc3RkOjptaW4oMS4wZiwgY29sb3IpOworICAgICAgICAgICAgICAgIGxv
b2tVcFRhYmxlLmFwcGVuZCgocm91bmQoY29sb3IgKiAyNTUpKSAvIDI1NSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBkZXZpY2VSZ2JMVVQgPSBrZXJuZWwuYWRkQXJndW1lbnQobG9va1Vw
VGFibGUuZGF0YSgpLCBzaXplb2YoZmxvYXQpICogMjU2KTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBrZXJuZWwuYWRkQXJndW1lbnQoZGV2aWNlUmdiTFVUKTsKKyAgICB9CisKKyAgICBr
ZXJuZWwucnVuKCk7CisgICAgc291cmNlLmNsZWFyKCk7CisgICAgc291cmNlID0gZGVzdGluYXRp
b247Cit9CisKK2NsX3Byb2dyYW0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGlsZVByb2dyYW0o
Y29uc3QgY2hhciogc291cmNlKQoreworICAgIGNsX3Byb2dyYW0gcHJvZ3JhbTsKKworICAgIEZp
bHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0
KCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworCisgICAgcHJvZ3JhbSA9IGNsQ3JlYXRlUHJvZ3Jh
bVdpdGhTb3VyY2UoY29udGV4dC0+bV9kZXZpY2VDb250ZXh0LCAxLCAoY29uc3QgY2hhcioqKSAm
c291cmNlLCAwLCAwKTsKKyAgICBjbEJ1aWxkUHJvZ3JhbShwcm9ncmFtLCAwLCAwLCAwLCAwLCAw
KTsKKyAgICByZXR1cm4gcHJvZ3JhbTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9v
cGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMGYzYjYwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5oCkBA
IC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1z
emVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRmlsdGVy
Q29udGV4dE9wZW5DTF9oCisjZGVmaW5lIEZpbHRlckNvbnRleHRPcGVuQ0xfaAorCisjaWYgRU5B
QkxFKE9QRU5DTCkKKyNpbmNsdWRlICJDTC9jbC5oIgorI2luY2x1ZGUgIkNvbG9yLmgiCisjaW5j
bHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRT
aXplLmgiCisjaW5jbHVkZSAiT3BlbkNMSGFuZGxlLmgiCisKKyNkZWZpbmUgUFJPR1JBTV9TVFIo
U3JjKSAjU3JjCisjZGVmaW5lIFBST0dSQU0oU3JjKSBQUk9HUkFNX1NUUihTcmMpCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRmlsdGVyQ29udGV4dE9wZW5DTCB7CitwdWJsaWM6Cisg
ICAgLy8gUmV0dXJucyAwIGlmIGluaXRpYWxpemF0aW9uIGZhaWxlZC4KKyAgICBzdGF0aWMgRmls
dGVyQ29udGV4dE9wZW5DTCogY29udGV4dCgpOworCisgICAgY2xfZGV2aWNlX2lkIGRldmljZUlk
KCkgeyByZXR1cm4gbV9kZXZpY2VJZDsgfQorICAgIGNsX2NvbnRleHQgZGV2aWNlQ29udGV4dCgp
IHsgcmV0dXJuIG1fZGV2aWNlQ29udGV4dDsgfQorICAgIGNsX2NvbW1hbmRfcXVldWUgY29tbWFu
ZFF1ZXVlKCkgeyByZXR1cm4gbV9jb21tYW5kUXVldWU7IH0KKworICAgIE9wZW5DTEhhbmRsZSBj
cmVhdGVPcGVuQ0xJbWFnZShJbnRTaXplKTsKKyAgICB2b2lkIG9wZW5DTFRyYW5zZm9ybUNvbG9y
U3BhY2UoT3BlbkNMSGFuZGxlJiwgSW50UmVjdCwgQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSk7CisK
KyAgICBpbmxpbmUgdm9pZCBhcHBseUZFVHVyYnVsZW5jZShPcGVuQ0xIYW5kbGUsIEludFNpemUs
IGludCwgdm9pZCosIHZvaWQqLCB2b2lkKiwgdm9pZCosIHZvaWQqLAorICAgICAgICB2b2lkKiwg
aW50LCBpbnQsIGludCwgaW50LCBmbG9hdCwgZmxvYXQsIGJvb2wsIGludCwgaW50KTsKKworcHJp
dmF0ZToKKworICAgIGNsYXNzIFJ1bktlcm5lbCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIFJ1bktlcm5lbChGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0LCBjbF9rZXJuZWwga2Vy
bmVsLCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQpCisgICAgICAgICAgICAgICAgOiBtX2Nv
bnRleHQoY29udGV4dCkKKyAgICAgICAgICAgICAgICAsIG1fa2VybmVsKGtlcm5lbCkKKyAgICAg
ICAgICAgICAgICAsIGluZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9n
bG9iYWxTaXplWzBdID0gd2lkdGg7CisgICAgICAgICAgICAgICAgbV9nbG9iYWxTaXplWzFdID0g
aGVpZ2h0OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KE9w
ZW5DTEhhbmRsZSBoYW5kbGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2xTZXRL
ZXJuZWxBcmcobV9rZXJuZWwsIGluZGV4KyssIHNpemVvZihPcGVuQ0xIYW5kbGUpLCBoYW5kbGUu
aGFuZGxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBhZGRB
cmd1bWVudChjbF9pbnQgdmFsdWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2xT
ZXRLZXJuZWxBcmcobV9rZXJuZWwsIGluZGV4KyssIHNpemVvZihjbF9pbnQpLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPigmdmFsdWUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9p
ZCBhZGRBcmd1bWVudChjbF9mbG9hdCB2YWx1ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBjbFNldEtlcm5lbEFyZyhtX2tlcm5lbCwgaW5kZXgrKywgc2l6ZW9mKGNsX2Zsb2F0KSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJnZhbHVlKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHZvaWQgYWRkQXJndW1lbnQoY2xfc2FtcGxlciBoYW5kbGUpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY2xTZXRLZXJuZWxBcmcobV9rZXJuZWwsIGluZGV4KyssIHNpemVv
ZihjbF9zYW1wbGVyKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJmhhbmRsZSkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBPcGVuQ0xIYW5kbGUgYWRkQXJndW1lbnQodm9pZCogYnVm
ZmVyLCBpbnQgc2l6ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBPcGVuQ0xIYW5k
bGUgaGFuZGxlKGNsQ3JlYXRlQnVmZmVyKG1fY29udGV4dC0+ZGV2aWNlQ29udGV4dCgpLCBDTF9N
RU1fUkVBRF9PTkxZLCBzaXplLCAwLCAwKSk7CisgICAgICAgICAgICAgICAgY2xFbnF1ZXVlV3Jp
dGVCdWZmZXIobV9jb250ZXh0LT5jb21tYW5kUXVldWUoKSwgaGFuZGxlLCBDTF9UUlVFLCAwLCBz
aXplLCBidWZmZXIsIDAsIDAsIDApOworICAgICAgICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1f
a2VybmVsLCBpbmRleCsrLCBzaXplb2YoT3BlbkNMSGFuZGxlKSwgaGFuZGxlLmhhbmRsZUFkZHJl
c3MoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgdm9pZCBydW4oKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNs
RmluaXNoKG1fY29udGV4dC0+bV9jb21tYW5kUXVldWUpOworICAgICAgICAgICAgICAgIGNsRW5x
dWV1ZU5EUmFuZ2VLZXJuZWwobV9jb250ZXh0LT5tX2NvbW1hbmRRdWV1ZSwgbV9rZXJuZWwsIDIs
IDAsIG1fZ2xvYmFsU2l6ZSwgMCwgMCwgMCwgMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIG1fY29udGV4dDsKKyAgICAgICAgICAgIGNsX2tlcm5l
bCBtX2tlcm5lbDsKKyAgICAgICAgICAgIHNpemVfdCBtX2dsb2JhbFNpemVbMl07CisgICAgICAg
ICAgICBpbnQgaW5kZXg7CisgICAgICAgIH07CisKKyAgICBzdGF0aWMgY2xfcHJvZ3JhbSBjb21w
aWxlUHJvZ3JhbShjb25zdCBjaGFyKik7CisgICAgc3RhdGljIGlubGluZSBjbF9rZXJuZWwga2Vy
bmVsQnlOYW1lKGNsX3Byb2dyYW0gcHJvZ3JhbSwgY29uc3QgY2hhciogbmFtZSkgeyByZXR1cm4g
Y2xDcmVhdGVLZXJuZWwocHJvZ3JhbSwgbmFtZSwgMCk7IH0KKworICAgIGlubGluZSB2b2lkIGNv
bXBpbGVGRVR1cmJ1bGVuY2UoKTsKKworICAgIGNsX2RldmljZV9pZCBtX2RldmljZUlkOworICAg
IGNsX2NvbnRleHQgbV9kZXZpY2VDb250ZXh0OworICAgIGNsX2NvbW1hbmRfcXVldWUgbV9jb21t
YW5kUXVldWU7CisKKyAgICBjbF9wcm9ncmFtIG1fdHJhbnNmb3JtQ29sb3JTcGFjZVByb2dyYW07
CisgICAgY2xfa2VybmVsIG1fdHJhbnNmb3JtQ29sb3JTcGFjZUtlcm5lbDsKKworICAgIGNsX3By
b2dyYW0gbV90dXJidWxlbmNlUHJvZ3JhbTsKKyAgICBjbF9rZXJuZWwgbV90dXJidWxlbmNlT3Bl
cmF0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KE9QRU5DTCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFU291cmNlQWxwaGEuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjkzZDA3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xG
RVNvdXJjZUFscGhhLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3pl
bmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBT
WkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNa
RUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUo
T1BFTkNMKQorI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisKKyNpbmNsdWRlICJGaWx0ZXIuaCIK
KyNpbmNsdWRlICJGaWx0ZXJDb250ZXh0T3BlbkNMLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNvdXJjZUFscGhhOjpwbGF0Zm9ybUFw
cGx5T3BlbkNMKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVy
Q29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworCisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyAgICBJbWFnZUJ1
ZmZlciogc291cmNlSW1hZ2UgPSBhc0ltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFzb3VyY2VJbWFn
ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBzb3VyY2VJbWFnZURhdGEgPSBzb3VyY2VJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRh
KEludFJlY3QoSW50UG9pbnQoKSwgc291cmNlSW1hZ2UtPmludGVybmFsU2l6ZSgpKSk7CisgICAg
Y3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQoc291cmNlSW1hZ2VEYXRhLT5kYXRhKCkpOworICAgIHJl
dHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3Vy
Y2VHcmFwaGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmU5ZWY3
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUdyYXBoaWMuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEZJ
TFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5oIgorCisj
aW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgorI2lu
Y2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTb3Vy
Y2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3Bl
bkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworCisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKTsKKyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBhc0ltYWdlQnVmZmVyKCk7
CisgICAgaWYgKCFzb3VyY2VJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VJbWFnZURhdGEgPSBzb3VyY2VJbWFnZS0+Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgc291cmNlSW1hZ2UtPmlu
dGVybmFsU2l6ZSgpKSk7CisgICAgY3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQoc291cmNlSW1hZ2VE
YXRhLT5kYXRhKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNM
RkVUdXJidWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9v
cGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mMjQ5NWEyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwCkBAIC0wLDAgKzEs
MjU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJGRVR1cmJ1bGVu
Y2UuaCIKKworI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5jcHAiCisjaW5jbHVkZSAiRmlsdGVyQ29u
dGV4dE9wZW5DTC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiB0dXJidWxlbmNlS2VybmVsUHJvZ3JhbSA9CitQUk9H
UkFNX1NUUigKK19fY29uc3RhbnQgaW50IHNfcGVybGluTm9pc2UgPSA0MDk2OworX19jb25zdGFu
dCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CitfX2NvbnN0YW50IGludCBzX2Jsb2NrTWFzayA9IDI1
NTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCBub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVl
OworICAgIGZsb2F0IG5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlOworfSBOb2lzZTsKKwordHlw
ZWRlZiBzdHJ1Y3QgeworICAgIGludCB3aWR0aDsKKyAgICBpbnQgd3JhcFg7CisgICAgaW50IGhl
aWdodDsKKyAgICBpbnQgd3JhcFk7Cit9IFN0aXRjaERhdGE7CisKK2Zsb2F0IGxpbmVhckludGVy
cG9sYXRpb24oZmxvYXQgdCwgZmxvYXQgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4gYSArIHQg
KiAoYiAtIGEpOworfQorCitmbG9hdCBub2lzZTJEKF9fY29uc3RhbnQgZmxvYXQgKmNvbXBvbmVu
dCwgX19jb25zdGFudCBpbnQgKmxhdHRpY2VTZWxlY3RvciwgU3RpdGNoRGF0YSBzdGl0Y2hEYXRh
LCBmbG9hdCBub2lzZVZlY3RvclgsIGZsb2F0IG5vaXNlVmVjdG9yWSwgaW50IHN0aXRjaFRpbGVz
KQoreworICAgIE5vaXNlIG5vaXNlWDsKKyAgICBub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJW
YWx1ZSA9IChpbnQpKG5vaXNlVmVjdG9yWCArIHNfcGVybGluTm9pc2UpOworICAgIG5vaXNlWC5u
b2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSA9IChub2lzZVZlY3RvclggKyBzX3Blcmxpbk5vaXNl
KSAtIG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlOworICAgIE5vaXNlIG5vaXNlWTsK
KyAgICBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSA9IChpbnQpKG5vaXNlVmVjdG9y
WSArIHNfcGVybGluTm9pc2UpOworICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1
ZSA9IChub2lzZVZlY3RvclkgKyBzX3Blcmxpbk5vaXNlKSAtIG5vaXNlWS5ub2lzZVBvc2l0aW9u
SW50ZWdlclZhbHVlOworCisgICAgLy8gSWYgc3RpdGNoaW5nLCBhZGp1c3QgbGF0dGljZSBwb2lu
dHMgYWNjb3JkaW5nbHkuCisgICAgaWYgKHN0aXRjaFRpbGVzKSB7CisgICAgICAgIGlmIChub2lz
ZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSA+PSBzdGl0Y2hEYXRhLndyYXBYKQorICAgICAg
ICAgICAgbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgLT0gc3RpdGNoRGF0YS53aWR0
aDsKKyAgICAgICAgaWYgKG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID49IHN0aXRj
aERhdGEud3JhcFggLSAxKQorICAgICAgICAgICAgbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2Vy
VmFsdWUgLT0gc3RpdGNoRGF0YS53aWR0aCAtIDE7CisgICAgICAgIGlmIChub2lzZVkubm9pc2VQ
b3NpdGlvbkludGVnZXJWYWx1ZSA+PSBzdGl0Y2hEYXRhLndyYXBZKQorICAgICAgICAgICAgbm9p
c2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgLT0gc3RpdGNoRGF0YS5oZWlnaHQ7CisgICAg
ICAgIGlmIChub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSA+PSBzdGl0Y2hEYXRhLndy
YXBZIC0gMSkKKyAgICAgICAgICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlIC09
IHN0aXRjaERhdGEuaGVpZ2h0IC0gMTsKKyAgICB9CisKKyAgICBub2lzZVgubm9pc2VQb3NpdGlv
bkludGVnZXJWYWx1ZSAmPSBzX2Jsb2NrTWFzazsKKyAgICBub2lzZVkubm9pc2VQb3NpdGlvbklu
dGVnZXJWYWx1ZSAmPSBzX2Jsb2NrTWFzazsKKyAgICBpbnQgbGF0dGljZUluZGV4ID0gbGF0dGlj
ZVNlbGVjdG9yW25vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKKyAgICBpbnQgbmV4
dExhdHRpY2VJbmRleCA9IGxhdHRpY2VTZWxlY3Rvclsobm9pc2VYLm5vaXNlUG9zaXRpb25JbnRl
Z2VyVmFsdWUgKyAxKSAmIHNfYmxvY2tNYXNrXTsKKworICAgIGZsb2F0IHN4ID0gbm9pc2VYLm5v
aXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZh
bHVlICogKDMgLSAyICogbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlKTsKKyAgICBm
bG9hdCBzeSA9IG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIG5vaXNlWS5ub2lz
ZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqICgzIC0gMiAqIG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJh
Y3Rpb25WYWx1ZSk7CisKKyAgICAvLyBUaGlzIGlzIHRha2VuIDE6MSBmcm9tIFNWRyBzcGVjOiBo
dHRwOi8vd3d3LnczLm9yZy9UUi9TVkcxMS9maWx0ZXJzLmh0bWwjZmVUdXJidWxlbmNlRWxlbWVu
dC4KKyAgICBpbnQgdGVtcCA9IGxhdHRpY2VTZWxlY3RvcltsYXR0aWNlSW5kZXggKyBub2lzZVku
bm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZV07CisgICAgZmxvYXQgdSA9IG5vaXNlWC5ub2lzZVBv
c2l0aW9uRnJhY3Rpb25WYWx1ZSAqIGNvbXBvbmVudFt0ZW1wICogMl0gKyBub2lzZVkubm9pc2VQ
b3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBjb21wb25lbnRbdGVtcCAqIDIgKyAxXTsKKyAgICB0ZW1w
ID0gbGF0dGljZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlv
bkludGVnZXJWYWx1ZV07CisgICAgZmxvYXQgdiA9IChub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0
aW9uVmFsdWUgLSAxKSAqIGNvbXBvbmVudFt0ZW1wICogMl0gKyBub2lzZVkubm9pc2VQb3NpdGlv
bkZyYWN0aW9uVmFsdWUgKiBjb21wb25lbnRbdGVtcCAqIDIgKyAxXTsKKyAgICBmbG9hdCBhID0g
bGluZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CisgICAgdGVtcCA9IGxhdHRpY2VTZWxlY3Rv
cltsYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDFdOwor
ICAgIHUgPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBjb21wb25lbnRbdGVt
cCAqIDJdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogY29tcG9u
ZW50W3RlbXAgKiAyICsgMV07CisgICAgdGVtcCA9IGxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGlj
ZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgKyAxXTsKKyAgICB2ID0g
KG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogY29tcG9uZW50W3RlbXAg
KiAyXSArIChub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIGNvbXBvbmVu
dFt0ZW1wICogMiArIDFdOworICAgIGZsb2F0IGIgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1
LCB2KTsKKyAgICByZXR1cm4gbGluZWFySW50ZXJwb2xhdGlvbihzeSwgYSwgYik7Cit9CisKK19f
a2VybmVsIHZvaWQgVHVyYnVsZW5jZShfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9u
LCBfX2NvbnN0YW50IGZsb2F0ICp0cmFuc2Zvcm0sIF9fY29uc3RhbnQgZmxvYXQgKnJlZENvbXBv
bmVudCwKKyAgICBfX2NvbnN0YW50IGZsb2F0ICpncmVlbkNvbXBvbmVudCwgX19jb25zdGFudCBm
bG9hdCAqYmx1ZUNvbXBvbmVudCwgX19jb25zdGFudCBmbG9hdCAqYWxwaGFDb21wb25lbnQsCisg
ICAgX19jb25zdGFudCBpbnQgKmxhdHRpY2VTZWxlY3RvciwgX19wcml2YXRlIGludCBvZmZzZXRY
LCBfX3ByaXZhdGUgaW50IG9mZnNldFksIF9fcHJpdmF0ZSBpbnQgdGlsZVdpZHRoLAorICAgIF9f
cHJpdmF0ZSBpbnQgdGlsZUhlaWdodCwgX19wcml2YXRlIGZsb2F0IGJhc2VGcmVxdWVuY3lYLCBf
X3ByaXZhdGUgZmxvYXQgYmFzZUZyZXF1ZW5jeVksIF9fcHJpdmF0ZSBpbnQgc3RpdGNoVGlsZXMs
CisgICAgX19wcml2YXRlIGludCBudW1PY3RhdmVzLCBfX3ByaXZhdGUgaW50IHR5cGUsIF9fcHJp
dmF0ZSBpbnQgZmlsdGVyX2hlaWdodCkKK3sKKyAgICBTdGl0Y2hEYXRhIHN0aXRjaERhdGE7Cisg
ICAgc3RpdGNoRGF0YS53aWR0aCA9IDA7CisgICAgc3RpdGNoRGF0YS53cmFwWCA9IDA7CisgICAg
c3RpdGNoRGF0YS5oZWlnaHQgPSAwOworICAgIHN0aXRjaERhdGEud3JhcFkgPSAwOworICAgIC8v
IEFkanVzdCB0aGUgYmFzZSBmcmVxdWVuY2llcyBpZiBuZWNlc3NhcnkgZm9yIHN0aXRjaGluZy4K
KyAgICBpZiAoc3RpdGNoVGlsZXMpIHsKKyAgICAgICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQg
dHVyYnVsZW5jZSwgdGhlIGZyZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQKKyAgICAgICAgLy8g
c28gdGhhdCB0aGUgdGlsZSBib3JkZXJzIHdpbGwgYmUgY29udGludW91cy4KKyAgICAgICAgaWYg
KGJhc2VGcmVxdWVuY3lYKSB7CisgICAgICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9v
cih0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7CisgICAgICAgICAgICBm
bG9hdCBoaWdoRnJlcXVlbmN5ID0gY2VpbCh0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0
aWxlV2lkdGg7CisgICAgICAgICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVn
YXRpdmUgYWNjb3JkaW5nIHRvIHRoZSBzdGFuZGFyZC4KKyAgICAgICAgICAgIGlmIChiYXNlRnJl
cXVlbmN5WCAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WCkK
KyAgICAgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGxvd0ZyZXF1ZW5jeTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WCA9IGhpZ2hGcmVxdWVuY3k7
CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lZKSB7CisgICAgICAgICAgICBm
bG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcih0aWxlSGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8g
dGlsZUhlaWdodDsKKyAgICAgICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsKHRpbGVI
ZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICAgICAgaWYgKGJh
c2VGcmVxdWVuY3lZIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVu
Y3lZKQorICAgICAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gbG93RnJlcXVlbmN5OworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lZID0gaGlnaEZyZXF1
ZW5jeTsKKyAgICAgICAgfQorICAgICAgICAvLyBTZXQgdXAgVHVyYnVsZW5jZUluaXRpYWwgc3Rp
dGNoIHZhbHVlcy4KKyAgICAgICAgc3RpdGNoRGF0YS53aWR0aCA9IHJvdW5kKHRpbGVXaWR0aCAq
IGJhc2VGcmVxdWVuY3lYKTsKKyAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9IHNfcGVybGluTm9p
c2UgKyBzdGl0Y2hEYXRhLndpZHRoOworICAgICAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IHJvdW5k
KHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSk7CisgICAgICAgIHN0aXRjaERhdGEud3JhcFkg
PSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7CisgICAgfQorICAgIGZsb2F0NCB0
dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSAoZmxvYXQ0KSgwLCAwLCAwLCAwKTsKKyAgICBmbG9h
dCB4ID0gKGdldF9nbG9iYWxfaWQoMCkgKyBvZmZzZXRYKSAqIGJhc2VGcmVxdWVuY3lYOworICAg
IGZsb2F0IHkgPSAoZ2V0X2dsb2JhbF9pZCgxKSArIG9mZnNldFkpICogYmFzZUZyZXF1ZW5jeVk7
CisKKyAgICBmbG9hdCBub2lzZVZlY3RvclggPSB0cmFuc2Zvcm1bMF0gKiB4ICsgdHJhbnNmb3Jt
WzJdICogeSArIHRyYW5zZm9ybVs0XTsKKyAgICBmbG9hdCBub2lzZVZlY3RvclkgPSB0cmFuc2Zv
cm1bMV0gKiB4ICsgdHJhbnNmb3JtWzNdICogeSArIHRyYW5zZm9ybVs1XTsKKworICAgIGZsb2F0
IHJhdGlvID0gMTsKKyAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3RhdmUgPCBudW1PY3RhdmVz
OyArK29jdGF2ZSkgeworICAgICAgICBpZiAodHlwZSA9PSAxKSB7CisgICAgICAgICAgICB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQueCArPSBub2lzZTJEKHJlZENvbXBvbmVudCwgbGF0dGljZVNl
bGVjdG9yLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvclgsIG5vaXNlVmVjdG9yWSwgc3RpdGNoVGls
ZXMpIC8gcmF0aW87CisgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQueSArPSBu
b2lzZTJEKGdyZWVuQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5vaXNl
VmVjdG9yWCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRpbzsKKyAgICAgICAgICAg
IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdC56ICs9IG5vaXNlMkQoYmx1ZUNvbXBvbmVudCwgbGF0
dGljZVNlbGVjdG9yLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvclgsIG5vaXNlVmVjdG9yWSwgc3Rp
dGNoVGlsZXMpIC8gcmF0aW87CisgICAgICAgICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQu
dyArPSBub2lzZTJEKGFscGhhQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEs
IG5vaXNlVmVjdG9yWCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRpbzsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdC54ICs9IGZh
YnMobm9pc2UyRChyZWRDb21wb25lbnQsIGxhdHRpY2VTZWxlY3Rvciwgc3RpdGNoRGF0YSwgbm9p
c2VWZWN0b3JYLCBub2lzZVZlY3RvclksIHN0aXRjaFRpbGVzKSkgLyByYXRpbzsKKyAgICAgICAg
ICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdC55ICs9IGZhYnMobm9pc2UyRChncmVlbkNvbXBv
bmVudCwgbGF0dGljZVNlbGVjdG9yLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvclgsIG5vaXNlVmVj
dG9yWSwgc3RpdGNoVGlsZXMpKSAvIHJhdGlvOworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0
aW9uUmVzdWx0LnogKz0gZmFicyhub2lzZTJEKGJsdWVDb21wb25lbnQsIGxhdHRpY2VTZWxlY3Rv
ciwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3JYLCBub2lzZVZlY3RvclksIHN0aXRjaFRpbGVzKSkg
LyByYXRpbzsKKyAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdC53ICs9IGZhYnMo
bm9pc2UyRChhbHBoYUNvbXBvbmVudCwgbGF0dGljZVNlbGVjdG9yLCBzdGl0Y2hEYXRhLCBub2lz
ZVZlY3RvclgsIG5vaXNlVmVjdG9yWSwgc3RpdGNoVGlsZXMpKSAvIHJhdGlvOworICAgICAgICB9
CisgICAgICAgIG5vaXNlVmVjdG9yWCAqPSAyOworICAgICAgICBub2lzZVZlY3RvclkgKj0gMjsK
KyAgICAgICAgcmF0aW8gKj0gMjsKKyAgICAgICAgaWYgKHN0aXRjaFRpbGVzKSB7CisgICAgICAg
ICAgICAvLyBVcGRhdGUgc3RpdGNoIHZhbHVlcy4gU3VidHJhY3Rpbmcgc19wZXJsaW5Ob2lzZW9p
c2UgYmVmb3JlIHRoZSBtdWx0aXBsaWNhdGlvbiBhbmQKKyAgICAgICAgICAgIC8vIGFkZGluZyBp
dCBhZnRlcndhcmQgc2ltcGxpZmllcyB0byBzdWJ0cmFjdGluZyBpdCBvbmNlLgorICAgICAgICAg
ICAgc3RpdGNoRGF0YS53aWR0aCAqPSAyOworICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWCA9
IDIgKiBzdGl0Y2hEYXRhLndyYXBYIC0gc19wZXJsaW5Ob2lzZTsKKyAgICAgICAgICAgIHN0aXRj
aERhdGEuaGVpZ2h0ICo9IDI7CisgICAgICAgICAgICBzdGl0Y2hEYXRhLndyYXBZID0gMiAqIHN0
aXRjaERhdGEud3JhcFkgLSBzX3Blcmxpbk5vaXNlOworICAgICAgICB9CisgICAgfQorCisgICAg
aWYgKHR5cGUgPT0gMSkKKyAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gdHVyYnVs
ZW5jZUZ1bmN0aW9uUmVzdWx0ICogMC41ZiArIDAuNWY7CisgICAgLy8gQ2xhbXAgcmVzdWx0Lgor
ICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IGNsYW1wKHR1cmJ1bGVuY2VGdW5jdGlvblJl
c3VsdCwgMC4wZiwgMS4wZik7CisKKyAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIChpbnQy
KShnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKSwgdHVyYnVsZW5jZUZ1bmN0aW9u
UmVzdWx0KTsKK30KKyk7CisKK2lubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBp
bGVGRVR1cmJ1bGVuY2UoKQoreworICAgIGlmICghbV90dXJidWxlbmNlT3BlcmF0aW9uKSB7Cisg
ICAgICAgIG1fdHVyYnVsZW5jZVByb2dyYW0gPSBjb21waWxlUHJvZ3JhbSh0dXJidWxlbmNlS2Vy
bmVsUHJvZ3JhbSk7CisgICAgICAgIEFTU0VSVChtX3R1cmJ1bGVuY2VQcm9ncmFtKTsKKyAgICAg
ICAgbV90dXJidWxlbmNlT3BlcmF0aW9uID0ga2VybmVsQnlOYW1lKG1fdHVyYnVsZW5jZVByb2dy
YW0sICJUdXJidWxlbmNlIik7CisgICAgICAgIEFTU0VSVChtX3R1cmJ1bGVuY2VPcGVyYXRpb24p
OworICAgIH0KK30KKworaW5saW5lIHZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6YXBwbHlGRVR1
cmJ1bGVuY2UoT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uLAorICAgIEludFNpemUgZGVzdGluYXRp
b25TaXplLCBpbnQgYmxvY2tTaXplLAorICAgIHZvaWQqIHRyYW5zZm9ybSwgdm9pZCogcmVkQ29t
cG9uZW50LCB2b2lkKiBncmVlbkNvbXBvbmVudCwKKyAgICB2b2lkKiBibHVlQ29tcG9uZW50LCB2
b2lkKiBhbHBoYUNvbXBvbmVudCwKKyAgICB2b2lkKiBsYXR0aWNlU2VsZWN0b3IsIGludCBvZmZz
ZXRYLCBpbnQgb2Zmc2V0WSwgaW50IHRpbGVXaWR0aCwgaW50IHRpbGVIZWlnaHQsCisgICAgZmxv
YXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBib29sIHN0aXRjaFRpbGVz
LCBpbnQgbnVtT2N0YXZlcywgaW50IHR5cGUpCit7CisgICAgY29tcGlsZUZFVHVyYnVsZW5jZSgp
OworCisgICAgUnVuS2VybmVsIGtlcm5lbCh0aGlzLCBtX3R1cmJ1bGVuY2VPcGVyYXRpb24sIGRl
c3RpbmF0aW9uU2l6ZS53aWR0aCgpLCBkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCkpOworCisgICAg
a2VybmVsLmFkZEFyZ3VtZW50KGRlc3RpbmF0aW9uKTsKKyAgICBPcGVuQ0xIYW5kbGUgdHJhbnNm
b3JtSGFuZGxlKGtlcm5lbC5hZGRBcmd1bWVudCh0cmFuc2Zvcm0sIHNpemVvZihmbG9hdCkgKiA2
KSk7CisgICAgT3BlbkNMSGFuZGxlIHJlZENvbXBvbmVudEhhbmRsZShrZXJuZWwuYWRkQXJndW1l
bnQocmVkQ29tcG9uZW50LCBzaXplb2YoZmxvYXQpICogKDIgKiBibG9ja1NpemUgKyAyKSAqIDIp
KTsKKyAgICBPcGVuQ0xIYW5kbGUgZ3JlZW5Db21wb25lbnRIYW5kbGUoa2VybmVsLmFkZEFyZ3Vt
ZW50KGdyZWVuQ29tcG9uZW50LCBzaXplb2YoZmxvYXQpICogKDIgKiBibG9ja1NpemUgKyAyKSAq
IDIpKTsKKyAgICBPcGVuQ0xIYW5kbGUgYmx1ZUNvbXBvbmVudEhhbmRsZShrZXJuZWwuYWRkQXJn
dW1lbnQoYmx1ZUNvbXBvbmVudCwgc2l6ZW9mKGZsb2F0KSAqICgyICogYmxvY2tTaXplICsgMikg
KiAyKSk7CisgICAgT3BlbkNMSGFuZGxlIGFscGhhQ29tcG9uZW50SGFuZGxlKGtlcm5lbC5hZGRB
cmd1bWVudChhbHBoYUNvbXBvbmVudCwgc2l6ZW9mKGZsb2F0KSAqICgyICogYmxvY2tTaXplICsg
MikgKiAyKSk7CisgICAgT3BlbkNMSGFuZGxlIGxhdHRpY2VTZWxlY3RvckhhbmRsZShrZXJuZWwu
YWRkQXJndW1lbnQobGF0dGljZVNlbGVjdG9yLCBzaXplb2YoaW50KSAqICgyICogYmxvY2tTaXpl
ICsgMikpKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQob2Zmc2V0WCk7CisgICAga2VybmVsLmFk
ZEFyZ3VtZW50KG9mZnNldFkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudCh0aWxlV2lkdGgpOwor
ICAgIGtlcm5lbC5hZGRBcmd1bWVudCh0aWxlSGVpZ2h0KTsKKyAgICBrZXJuZWwuYWRkQXJndW1l
bnQoYmFzZUZyZXF1ZW5jeVgpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChiYXNlRnJlcXVlbmN5
WSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHN0aXRjaFRpbGVzKTsKKyAgICBrZXJuZWwuYWRk
QXJndW1lbnQobnVtT2N0YXZlcyk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHR5cGUpOworICAg
IGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlvblNpemUuaGVpZ2h0KCkpOworCisgICAga2Vy
bmVsLnJ1bigpOworCisgICAgdHJhbnNmb3JtSGFuZGxlLmNsZWFyKCk7CisgICAgcmVkQ29tcG9u
ZW50SGFuZGxlLmNsZWFyKCk7CisgICAgZ3JlZW5Db21wb25lbnRIYW5kbGUuY2xlYXIoKTsKKyAg
ICBibHVlQ29tcG9uZW50SGFuZGxlLmNsZWFyKCk7CisgICAgYWxwaGFDb21wb25lbnRIYW5kbGUu
Y2xlYXIoKTsKKyAgICBsYXR0aWNlU2VsZWN0b3JIYW5kbGUuY2xlYXIoKTsKK30KKworYm9vbCBG
RVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQoreworICAgIEZpbHRlckNvbnRleHRP
cGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBPcGVuQ0xIYW5kbGUgZGVz
dGluYXRpb24gPSBjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCgpOworCisgICAgUGFpbnRpbmdEYXRh
IHBhaW50aW5nRGF0YShtX3NlZWQsIHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1YnJl
Z2lvbigpLnNpemUoKSkpOworICAgIGluaXRQYWludChwYWludGluZ0RhdGEpOworCisgICAgQWZm
aW5lVHJhbnNmb3JtIGludmVydGVkVHJhbnNmb3JtID0gcmVpbnRlcnByZXRfY2FzdDxTVkdGaWx0
ZXIqPihmaWx0ZXIoKSktPmFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJzZSgpOworICAgIGZsb2F0
IHRyYW5zZm9ybUNvbXBvbmVudHNbNl0gPSB7IGludmVydGVkVHJhbnNmb3JtLmEoKSwgaW52ZXJ0
ZWRUcmFuc2Zvcm0uYigpLCBpbnZlcnRlZFRyYW5zZm9ybS5jKCksIGludmVydGVkVHJhbnNmb3Jt
LmQoKSwgaW52ZXJ0ZWRUcmFuc2Zvcm0uZSgpLCBpbnZlcnRlZFRyYW5zZm9ybS5mKCkgfTsKKwor
ICAgIGNvbnRleHQtPmFwcGx5RkVUdXJidWxlbmNlKGRlc3RpbmF0aW9uLCBhYnNvbHV0ZVBhaW50
UmVjdCgpLnNpemUoKSwgc19ibG9ja1NpemUsIHRyYW5zZm9ybUNvbXBvbmVudHMsCisgICAgICAg
IHBhaW50aW5nRGF0YS5ncmFkaWVudCwgcGFpbnRpbmdEYXRhLmdyYWRpZW50ICsgMSwKKyAgICAg
ICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50ICsgMiwgcGFpbnRpbmdEYXRhLmdyYWRpZW50ICsgMywK
KyAgICAgICAgcGFpbnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvciwgYWJzb2x1dGVQYWludFJlY3Qo
KS54KCksIGFic29sdXRlUGFpbnRSZWN0KCkueSgpLCBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS53
aWR0aCgpLAorICAgICAgICBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS5oZWlnaHQoKSwgbV9iYXNl
RnJlcXVlbmN5WCwgbV9iYXNlRnJlcXVlbmN5WSwgbV9zdGl0Y2hUaWxlcywgbV9udW1PY3RhdmVz
LCBtX3R5cGUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xI
YW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3Bl
bkNMSGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ1M2RkMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9v
cGVuY2wvT3BlbkNMSGFuZGxlLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpZiBFTkFCTEUoT1BF
TkNMKQorCisjaWZuZGVmIE9wZW5DTEhhbmRsZV9oCisjZGVmaW5lIE9wZW5DTEhhbmRsZV9oCisK
KyNpbmNsdWRlICJDTC9jbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE9wZW5D
TEhhbmRsZSB7CitwdWJsaWM6CisgICAgT3BlbkNMSGFuZGxlKCkgOiBtX29wZW5jbE1lbW9yeSgw
KSB7IH0KKyAgICBPcGVuQ0xIYW5kbGUoY2xfbWVtIG9wZW5jbE1lbW9yeSkgOiBtX29wZW5jbE1l
bW9yeShvcGVuY2xNZW1vcnkpIHsgfQorCisgICAgb3BlcmF0b3IgY2xfbWVtKCkgeyByZXR1cm4g
bV9vcGVuY2xNZW1vcnk7IH0KKworICAgIHZvaWQgb3BlcmF0b3I9KE9wZW5DTEhhbmRsZSBvcGVu
Y2xNZW1vcnkpIHsgbV9vcGVuY2xNZW1vcnkgPSBvcGVuY2xNZW1vcnk7IH0KKworICAgIC8vIFRo
aXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29s
IGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0eXBlZGVmIGNsX21lbSAoT3Bl
bkNMSGFuZGxlOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZp
ZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbmNsTWVtb3J5ID8gJk9wZW5DTEhhbmRs
ZTo6bV9vcGVuY2xNZW1vcnkgOiAwOyB9CisKKyAgICB2b2lkKiBoYW5kbGVBZGRyZXNzKCkgeyBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJm1fb3BlbmNsTWVtb3J5KTsgfQorCisgICAg
dm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBpZiAobV9vcGVuY2xNZW1vcnkpCisgICAgICAg
ICAgICBjbFJlbGVhc2VNZW1PYmplY3QobV9vcGVuY2xNZW1vcnkpOworICAgICAgICBtX29wZW5j
bE1lbW9yeSA9IDA7CisgICAgfQorCitwcml2YXRlOgorICAgIGNsX21lbSBtX29wZW5jbE1lbW9y
eTsKK307CisKK30KKworI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>175439</attachid>
            <date>2012-11-21 07:18:58 -0800</date>
            <delta_ts>2012-11-21 07:18:58 -0800</delta_ts>
            <desc>svg file</desc>
            <filename>turbi.svg</filename>
            <type>image/svg+xml</type>
            <size>1459</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2ZXJzaW9uPSIxLjEiIGJhc2VQcm9maWxl
PSJiYXNpYyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5z
PSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CgoKPGRlZnM+CjxmaWx0ZXIgaWQ9IkdhdXNz
aWFuQmx1ciI+CiAgPCEtLTxmZUdhdXNzaWFuQmx1ciBpZD0iZ2F1c3MiIGluPSJTb3VyY2VHcmFw
aGljIiByZXN1bHQ9ImdhdXNzMCIgc3RkRGV2aWF0aW9uPSIxIi8+CiAgPGZlR2F1c3NpYW5CbHVy
IGluPSJnYXVzczAiIHJlc3VsdD0iZ2F1c3MxIiBzdGREZXZpYXRpb249IjEwIi8+CiAgPGZlR2F1
c3NpYW5CbHVyIGluPSJnYXVzczEiIHJlc3VsdD0iZ2F1c3MyIiBzdGREZXZpYXRpb249IjEwIi8+
CiAgPGZlR2F1c3NpYW5CbHVyIGluPSJnYXVzczIiIHJlc3VsdD0iZ2F1c3MzIiBzdGREZXZpYXRp
b249IjEwIi8+CiAgPGZlR2F1c3NpYW5CbHVyIGluPSJnYXVzczMiIHJlc3VsdD0iZ2F1c3M0IiBz
dGREZXZpYXRpb249IjEwIi8+CiAgPGZlR2F1c3NpYW5CbHVyIGluPSJnYXVzczQiIHJlc3VsdD0i
Z2F1c3M1IiBzdGREZXZpYXRpb249IjEwIi8+CiAgPGZlR2F1c3NpYW5CbHVyIGluPSJnYXVzczUi
IHN0ZERldmlhdGlvbj0iOCIvPi0tPgo8ZmVUdXJidWxlbmNlIGlkPSJnYXVzcyIgdHlwZT0idHVy
YnVsZW5jZSIgYmFzZUZyZXF1ZW5jeT0iMC4wMDIiIG51bU9jdGF2ZXM9IjAiLz4KPC9maWx0ZXI+
CjwvZGVmcz4KCjxnIGZpbHRlcj0idXJsKCNHYXVzc2lhbkJsdXIpIj4KIDxyZWN0IHdpZHRoPSIx
MDAwIiBoZWlnaHQ9IjEwMDAiIHg9IjAiIHk9IjAiLz4KPC9nPgoKCjx0ZXh0IGlkPSJ0eHQiIHg9
IjUwIiB5PSIxMDAiIHN0cm9rZT0iYmxhY2siPjAgZnBzPC90ZXh0PgoKCjxzY3JpcHQ+IAo8IVtD
REFUQVsKCgp2YXIgcm91bmQgPSBNYXRoLnJvdW5kOwoKdmFyIGdhdXNzRmlsdGVyID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoJ2dhdXNzJyk7CnZhciBmcHMgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgndHh0Jyk7Cgp2YXIgc3RhcnREYXRlID0gbmV3IERhdGUoKTsKdmFyIGZyYW1lQ291bnRl
ciA9IDA7CnZhciBhbmltYXRpb25Db3VudGVyID0gMTsKCmZ1bmN0aW9uIGFuaW0oKSB7CiAgICBh
bmltYXRpb25Db3VudGVyKz0wLjU7CiAgICBpZiAoYW5pbWF0aW9uQ291bnRlciA+IDEwKQogICAg
ICAgIGFuaW1hdGlvbkNvdW50ZXIgPSAwOwoKCiAgICBnYXVzc0ZpbHRlci5zZXRBdHRyaWJ1dGUo
Im51bU9jdGF2ZXMiLCBhbmltYXRpb25Db3VudGVyKTsKICAgIAoKICAgIGZyYW1lQ291bnRlcisr
OwogICAgZnBzLnRleHRDb250ZW50ID0gKHJvdW5kKGZyYW1lQ291bnRlciAqIDEwMDAwMCAvIChu
ZXcgRGF0ZSgpIC0gc3RhcnREYXRlKSkgLyAxMDApICsgIiBmcHMiOwp9CgpzZXRJbnRlcnZhbChh
bmltLDEpOwoKLy9dXT4KPC9zY3JpcHQ+CgoKPC9zdmc+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175749</attachid>
            <date>2012-11-23 01:09:27 -0800</date>
            <delta_ts>2012-11-23 07:45:20 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>0003-ocl.patch</filename>
            <type>text/plain</type>
            <size>49316</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyZWY3ZDM2Li5jZTdiNGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzQg
QEAKKzIwMTItMTEtMjMgIFRhbWFzIEN6ZW5lICA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKwor
ICAgICAgICBPcGVuQ0wgdmVyc2lvbiBvZiBTb3VyY2VBbHBoYSwgU291cmNlR3JhcGhpY3MgYW5k
IEZFVHVyYnVsZW5jZSBmaWx0ZXIgZWZmZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk4MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGNvbnRhaW5zIHRoZSBPcGVuQ0wgaW1wbGVt
ZW50YXRpb24gb2YgU291cmNlQWxwaGEsIFNvdXJjZUdyYXBoaWMsIEZFVHVyYnVsZW5jZSBhbmQg
YSBzaW1wbGUgT3BlbkNMIGVudmlyb25tZW50LgorICAgICAgICBUaGlzIGlzIG9ubHkgaW5jbHVk
ZWQgaW4gUXQgbGludXggYnVpbGQuCisgICAgICAgIH4zeCBzcGVlZC11cCAoZGVwZW5kaW5nIG9u
IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24pCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAg
ICAqIFdlYkNvcmUucHJpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmg6IEFkZGVkIHBsYXRmb3JtQXBwbHlPcGVuQ0woKSB2aXJ0dWFsIGZ1bmN0aW9u
LgorICAgICAgICAoRkVUdXJidWxlbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6IEFkZGVkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5Lgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cGxhdGZvcm1BcHBseU9wZW5DTCk6
IEEgZnVuY3Rpb24gdG8gdXNlIHNvZnR3YXJlIGNvbXB1dGluZyBpZiBhIGZpbHRlciBpcyBub3Qg
aW1wbGVtZW50ZWQgb24gT3BlbkNMLiBJdCB3aWxsIGJlIGRlbGV0ZWQgYWZ0ZXIgYWxsIG9mIHRo
ZSBmaWx0ZXJzIGFyZSBpbXBsZW1lbnRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojphc0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3BlbkNMSW1hZ2VUb0lt
YWdlQnVmZmVyKTogR2V0cyB0aGUgcmVzdWx0IG9mIHRoZSBmaWx0ZXIgZnJvbSB0aGUgT3BlbkNM
IGRldmljZSBhbmQgY29udmVydHMgaXQgdG8gSW1hZ2VCdWZmZXIgdHlwZS4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQpOiBBbGxvY2F0ZXMg
bWVtb3J5IG9uIE9wZW5DTCBkZXZpY2UgYW5kIGlmIGl0IGdldHMgYW4gaW1hZ2UgYXMgYSBwYXJh
bWV0ZXIsIGl0IHVwbG9hZHMgdGhlIGltYWdlIHRvIHRoZSBPcGVuQ0wgZGV2aWNlLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAg
ICAoRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3BlbkNM
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVuQ0xJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoU291cmNl
QWxwaGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5oOgorICAgICAgICAoU291cmNlR3JhcGhpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQp
OiBDb25maWd1cmVzIHRoZSBPcGVuQ0wgZW52aXJvbm1lbnQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJDb250ZXh0T3BlbkNMOjpjcmVhdGVPcGVuQ0xJbWFnZSk6IEFsbG9jYXRlcyBtZW1vcnkg
b24gT3BlbkNMIGRldmljZS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6
Om9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2UpOiBPcGVuQ0wgaW1wbGVtZW50YXRpb24gb2YgdHJh
bnNmb3JtQ29sb3JTcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6
OmNvbXBpbGVQcm9ncmFtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNs
L0ZpbHRlckNvbnRleHRPcGVuQ0wuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKEZpbHRlckNvbnRleHRPcGVuQ0wpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4
dE9wZW5DTDo6ZGV2aWNlSWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5D
TDo6ZGV2aWNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNM
Ojpjb21tYW5kUXVldWUpOgorICAgICAgICAoUnVuS2VybmVsKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckNvbnRleHRPcGVuQ0w6OlJ1bktlcm5lbDo6UnVuS2VybmVsKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6OlJ1bktlcm5lbDo6YWRkQXJndW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6UnVuS2VybmVsOjpydW4pOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6a2VybmVsQnlOYW1lKTogUmV0dXJu
cyB0aGUgcmVmZXJlbmNlIG9mIGEgZnVuY3Rpb24gaW4gdGhlIE9wZW5DTCBwcm9ncmFtLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VBbHBoYS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VB
bHBoYTo6cGxhdGZvcm1BcHBseU9wZW5DTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUdyYXBoaWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseU9w
ZW5DTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVR1
cmJ1bGVuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGlsZUZFVHVyYnVsZW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjphcHBseUZFVHVyYnVsZW5jZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlPcGVuQ0wpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFuZGxlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChPcGVuQ0xIYW5kbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6T3BlbkNMSGFuZGxlOjpPcGVuQ0xIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkNM
SGFuZGxlOjpvcGVyYXRvciBjbF9tZW0pOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkNMSGFuZGxl
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkNMSGFuZGxlOjpvcGVyYXRvciBV
bnNwZWNpZmllZEJvb2xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DTEhhbmRsZTo6aGFu
ZGxlQWRkcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ0xIYW5kbGU6OmNsZWFyKToKKwog
MjAxMi0xMS0yMyAgVGhpYWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVs
LmNvbT4KIAogICAgICAgICBFeHBvc2UgRE9NIGludGVyZmFjZSBmb3IgQ1NTIERldmljZSBBZGFw
dGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQppbmRleCAwYjdlYzQyLi5mYTEzN2E1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAg
LTQwODAsNiArNDA4MCwxOSBAQCBjb250YWlucyhDT05GSUcsIG9wZW5nbC1zaGltcykgewogICAg
IERFRklORVMgKz0gUVRfT1BFTkdMX1NISU1TPTEKIH0KIAorY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX09QRU5DTD0xKSB7CisgICAgREVGSU5FUyArPSBPUEVOQ0w9MQorCisgICAgSEVBREVSUyAr
PSBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFuZGxlLmgg
XAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVu
Q0wuaAorICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3Bl
bmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcCBcCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcAorfQorCiB1
c2U/KEdSQVBISUNTX1NVUkZBQ0UpIHsKICAgICBtYWMgewogICAgICAgICBTT1VSQ0VTICs9IHBs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJpCmluZGV4IGYwYTQwNDIuLjY3ZTEyYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCkBAIC0yOTQsNiAr
Mjk0LDEyIEBAIHVuaXh8d2luMzItZysrKiB7CiAgICAgUU1BS0VfUEtHQ09ORklHX1JFUVVJUkVT
ID0gUXRDb3JlIFF0R3VpIFF0TmV0d29yayBRdFdpZGdldHMKIH0KIAorY29udGFpbnMoREVGSU5F
UywgRU5BQkxFX09QRU5DTD0xKSB7CisgICAgTElCUyArPSAtbE9wZW5DTAorCisgICAgSU5DTFVE
RVBBVEggKz0gJCRTT1VSQ0VfRElSL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wKK30KKwog
IyBEaXNhYmxlIEMrKzB4IG1vZGUgaW4gV2ViQ29yZSBmb3IgdGhvc2Ugd2hvIGVuYWJsZWQgaXQg
aW4gdGhlaXIgUXQncyBta3NwZWMKICotZysrKjpRTUFLRV9DWFhGTEFHUyAtPSAtc3RkPWMrKzB4
IC1zdGQ9Z251KysweAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0N2M4YmVlLi44NGZmMTEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmgKQEAgLTYxLDYgKzYxLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGZp
bGxSZWdpb25Xb3JrZXIodm9pZCopOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3Jt
QXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAgICAgCiAg
ICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgeyBzZXRBYnNvbHV0
ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHAKaW5kZXggYTJiYjU0ZC4uYzA2OGM2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAt
Miw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3Nl
ZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEyMyw2ICsxMjQs
MTAgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKICAgICB9CiAgICAgCiAgICAgLy8gQWRk
IHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGll
ci4KKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIGlmIChwbGF0Zm9ybUFwcGx5T3BlbkNMKCkpCisg
ICAgICAgIHJldHVybjsKKyNlbmRpZgogI2lmIFVTRShTS0lBKQogICAgIGlmIChwbGF0Zm9ybUFw
cGx5U2tpYSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzAsNiArMTM1LDMxIEBAIHZvaWQgRmls
dGVyRWZmZWN0OjphcHBseSgpCiAgICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CiB9CiAKKyNp
ZiBFTkFCTEUoT1BFTkNMKQorLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNoYW5nZWQgdG8gYWJz
dHJhY3QgdmlydHVhbCB3aGVuIGFsbCBmaWx0ZXJzIGFyZSBsYW5kZWQuCitib29sIEZpbHRlckVm
ZmVjdDo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgaWYgKCFGaWx0ZXJDb250ZXh0T3Bl
bkNMOjpjb250ZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIHNp
emUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgeworICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMu
YXQoaSkuZ2V0KCk7CisgICAgICAgIC8vIFNvZnR3YXJlIGNvZGUgcGF0aCBleHBlY3RzIHRoYXQg
YXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmlsZWRzIGlzIHZhbGlkLgorICAgICAgICBp
ZiAoIWluLT5tX2ltYWdlQnVmZmVyUmVzdWx0ICYmICFpbi0+bV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCAmJiAhaW4tPm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQorICAgICAgICAgICAgaW4t
PmFzSW1hZ2VCdWZmZXIoKTsKKyAgICB9CisKKyAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsK
KyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBhc0ltYWdlQnVmZmVyKCk7CisgICAgaWYg
KHNvdXJjZUltYWdlKSB7CisgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNl
SW1hZ2VEYXRhID0gc291cmNlSW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KEludFBvaW50KCksIHNvdXJjZUltYWdlLT5pbnRlcm5hbFNpemUoKSkpOworICAgICAgICBjcmVh
dGVPcGVuQ0xJbWFnZVJlc3VsdChzb3VyY2VJbWFnZURhdGEtPmRhdGEoKSk7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscygpCiB7CiAgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0
aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMu
CkBAIC0xODcsNiArMjE3LDEwIEBAIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCiAg
ICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuY2xlYXIoKTsKICAgICBpZiAobV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LmNsZWFyKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBpZiAobV9vcGVuQ0xJbWFnZVJlc3Vs
dCkKKyAgICAgICAgbV9vcGVuQ0xJbWFnZVJlc3VsdC5jbGVhcigpOworI2VuZGlmCiB9CiAKIElt
YWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIoKQpAQCAtMTk1LDYgKzIyOSwx
MCBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyKCkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCiAgICAgICAgIHJldHVybiBt
X2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgaWYgKG1f
b3BlbkNMSW1hZ2VSZXN1bHQpCisgICAgICAgIHJldHVybiBvcGVuQ0xJbWFnZVRvSW1hZ2VCdWZm
ZXIoKTsKKyNlbmRpZgogICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCAxLCBtX3Jlc3VsdENvbG9yU3BhY2UsIG1f
ZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCkpOwogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCkBAIC0yMDQsNiArMjQyLDI3IEBAIEltYWdlQnVmZmVyKiBGaWx0
ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIoKQogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0
LmdldCgpOwogfQogCisjaWYgRU5BQkxFKE9QRU5DTCkKK0ltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6Om9wZW5DTEltYWdlVG9JbWFnZUJ1ZmZlcigpCit7CisgICAgRmlsdGVyQ29udGV4dE9wZW5D
TCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAgICBBU1NFUlQo
Y29udGV4dCk7CisKKyAgICBzaXplX3Qgb3JpZ2luWzNdID0geyAwLCAwLCAwIH07CisgICAgc2l6
ZV90IHJlZ2lvblszXSA9IHsgbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LmhlaWdodCgpLCAxIH07CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9hYnNv
bHV0ZVBhaW50UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQp
OworCisgICAgY2xFbnF1ZXVlUmVhZEltYWdlKGNvbnRleHQtPmNvbW1hbmRRdWV1ZSgpLCBtX29w
ZW5DTEltYWdlUmVzdWx0LCBDTF9UUlVFLCBvcmlnaW4sIHJlZ2lvbiwgMCwgMCwgZGVzdGluYXRp
b25QaXhlbEFycmF5LT5kYXRhKCksIDAsIDAsIDApOworCisgICAgbV9pbWFnZUJ1ZmZlclJlc3Vs
dCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVjdC5zaXplKCkpOworICAg
IEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Qu
c2l6ZSgpKTsKKyAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRCeXRlQXJyYXkoVW5tdWx0aXBs
aWVkLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZ2V0KCksIGRlc3RpbmF0aW9uUmVjdC5zaXplKCks
IGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisKKyAgICByZXR1cm4gbV9pbWFnZUJ1ZmZl
clJlc3VsdC5nZXQoKTsKK30KKyNlbmRpZgorCiBQYXNzUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBGaWx0ZXJFZmZlY3Q6OmFzVW5tdWx0aXBsaWVkSW1hZ2UoY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKICAgICBBU1NFUlQoaXNGaWx0ZXJTaXplVmFsaWQocmVjdCkpOwpAQCAtMzYzLDYgKzQyMiwy
MiBAQCBVaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0OjpjcmVhdGVQcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQoKQogICAgIHJldHVybiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdC5nZXQo
KTsKIH0KIAorI2lmIEVOQUJMRShPUEVOQ0wpCitPcGVuQ0xIYW5kbGUgRmlsdGVyRWZmZWN0Ojpj
cmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCh1aW50OF90KiBzb3VyY2UpCit7CisgICAgQVNTRVJUKCFo
YXNSZXN1bHQoKSk7CisgICAgY2xfaW1hZ2VfZm9ybWF0IGNsSW1hZ2VGb3JtYXQ7CisgICAgY2xJ
bWFnZUZvcm1hdC5pbWFnZV9jaGFubmVsX29yZGVyID0gQ0xfUkdCQTsKKyAgICBjbEltYWdlRm9y
bWF0LmltYWdlX2NoYW5uZWxfZGF0YV90eXBlID0gQ0xfVU5PUk1fSU5UODsKKworICAgIEZpbHRl
ckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7
CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIG1fb3BlbkNMSW1hZ2VSZXN1bHQgPSBjbENyZWF0
ZUltYWdlMkQoY29udGV4dC0+ZGV2aWNlQ29udGV4dCgpLCBDTF9NRU1fUkVBRF9XUklURSB8IChz
b3VyY2UgPyBDTF9NRU1fQ09QWV9IT1NUX1BUUiA6IDApLAorICAgICAgICAmY2xJbWFnZUZvcm1h
dCwgbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdo
dCgpLCAwLCBzb3VyY2UsIDApOworICAgIHJldHVybiBtX29wZW5DTEltYWdlUmVzdWx0OworfQor
I2VuZGlmCisKIHZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKENv
bG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cpCkBAIC0zNzQsMTIgKzQ0OSwy
NyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShDb2xvclNw
YWNlIGRzdENvbG9yU3BhY2UpCiAKICAgICAvLyBGSVhNRTogV2UgY2FuIGF2b2lkIHRoaXMgcG90
ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVyc2lvbiBieSBhZGRpbmcKICAg
ICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3IgdGhlIHtwcmUsdW59bXVsdGlw
bGllZCBhcnJheXMuCisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBpZiAob3BlbkNMSW1hZ2UoKSkg
eworICAgICAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9w
ZW5DTDo6Y29udGV4dCgpOworICAgICAgICBBU1NFUlQoY29udGV4dCk7CisgICAgICAgIGNvbnRl
eHQtPm9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2UobV9vcGVuQ0xJbWFnZVJlc3VsdCwgYWJzb2x1
dGVQYWludFJlY3QoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBkc3RDb2xvclNwYWNlKTsKKyAgICAg
ICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgICAgICBtX2ltYWdlQnVmZmVyUmVz
dWx0LmNsZWFyKCk7CisgICAgICAgIGdvdG8gc2tpcFNvZnR3YXJlQ29kZVBhdGg7CisgICAgfQor
I2VuZGlmCiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KSB7CiAgICAgICAgIGFzSW1hZ2VC
dWZmZXIoKTsKICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJSZXN1bHQpOwogICAgIH0KIAog
ICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnRyYW5zZm9ybUNvbG9yU3BhY2UobV9yZXN1bHRDb2xv
clNwYWNlLCBkc3RDb2xvclNwYWNlKTsKKworI2lmIEVOQUJMRShPUEVOQ0wpCitza2lwU29mdHdh
cmVDb2RlUGF0aDoKKyNlbmRpZgorCiAgICAgbV9yZXN1bHRDb2xvclNwYWNlID0gZHN0Q29sb3JT
cGFjZTsKIAogICAgIGlmIChtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmgK
aW5kZXggMDY5ZWRlMy4uYjlmMjE5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCkBAIC0zMyw2ICszMywxMCBA
QAogI2luY2x1ZGUgPHd0Zi9VaW50OENsYW1wZWRBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KIAorI2lmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5D
TC5oIgorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBmbG9hdCBrTWF4RmlsdGVyU2l6ZSA9IDUwMDAu
MGY7CiAKICNpZiBVU0UoU0tJQSkKQEAgLTcwLDYgKzc0LDEyIEBAIHB1YmxpYzoKICAgICB2b2lk
IGNvcHlVbm11bHRpcGxpZWRJbWFnZShVaW50OENsYW1wZWRBcnJheSogZGVzdGluYXRpb24sIGNv
bnN0IEludFJlY3QmKTsKICAgICB2b2lkIGNvcHlQcmVtdWx0aXBsaWVkSW1hZ2UoVWludDhDbGFt
cGVkQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7CiAKKyNpZiBFTkFCTEUoT1BF
TkNMKQorICAgIE9wZW5DTEhhbmRsZSBvcGVuQ0xJbWFnZSgpIHsgcmV0dXJuIG1fb3BlbkNMSW1h
Z2VSZXN1bHQ7IH0KKyAgICB2b2lkIHNldE9wZW5DTEltYWdlKE9wZW5DTEhhbmRsZSBvcGVuQ0xJ
bWFnZSkgeyBtX29wZW5DTEltYWdlUmVzdWx0ID0gb3BlbkNMSW1hZ2U7IH0KKyAgICBJbWFnZUJ1
ZmZlciogb3BlbkNMSW1hZ2VUb0ltYWdlQnVmZmVyKCk7CisjZW5kaWYKKwogICAgIEZpbHRlckVm
ZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9pbnB1dEVmZmVjdHM7IH0KICAg
ICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBjb25zdDsKICAgICB1bnNpZ25l
ZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzLnNp
emUoKTsgfQpAQCAtNzcsNyArODcsMTIgQEAgcHVibGljOgogICAgIGlubGluZSBib29sIGhhc1Jl
c3VsdCgpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBUaGlzIGZ1bmN0aW9uIG5lZWRzIHBsYXRm
b3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5hZ21lbnQgaXMgbm90IGRvbmUg
YnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdCB8fCBt
X3VubXVsdGlwbGllZEltYWdlUmVzdWx0IHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0Owor
ICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAorI2lmIEVOQUJMRShPUEVOQ0wpCisg
ICAgICAgICAgICB8fCBtX29wZW5DTEltYWdlUmVzdWx0CisjZW5kaWYKKyAgICAgICAgICAgIHx8
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQKKyAgICAgICAgICAgIHx8IG1fcHJlbXVsdGlwbGll
ZEltYWdlUmVzdWx0OwogICAgIH0KIAogICAgIEludFJlY3QgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJ
bWFnZShjb25zdCBJbnRSZWN0JikgY29uc3Q7CkBAIC0xMDEsNiArMTE2LDkgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZOZWVkZWQoKSB7IH0KIAogICAg
IHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9IDA7CisjaWYgRU5BQkxFKE9Q
RU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlmCiAj
aWYgVVNFKFNLSUEpCiAgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlTa2lhKCkgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFNrSW1hZ2VGaWx0ZXIqIGNyZWF0ZUltYWdlRmlsdGVy
KFNraWFJbWFnZUZpbHRlckJ1aWxkZXIqKSB7IHJldHVybiAwOyB9CkBAIC0xNDksNiArMTY3LDkg
QEAgcHJvdGVjdGVkOgogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJbWFnZUJ1ZmZlclJlc3VsdCgp
OwogICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVVbm11bHRpcGxpZWRJbWFnZVJlc3VsdCgp
OwogICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQo
KTsKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIE9wZW5DTEhhbmRsZSBjcmVhdGVPcGVuQ0xJbWFn
ZVJlc3VsdCh1aW50OF90KiA9IDApOworI2VuZGlmCiAKICAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0
aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBvbiB2YWxpZCBSR0JBIHZhbHVl
cywgd2l0aAogICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVhY2ggY29sb3IgY29tcG9uZW50
IGluIFswLCBhbHBoYV0uCkBAIC0xNjIsNiArMTgzLDkgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
VWludDhDbGFtcGVkQXJyYXk+IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiAgICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKICAgICBGaWx0
ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBP
cGVuQ0xIYW5kbGUgbV9vcGVuQ0xJbWFnZVJlc3VsdDsKKyNlbmRpZgogCiAgICAgYm9vbCBtX2Fs
cGhhSW1hZ2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRleCA5NjkxNmU5Li5iMDIyMGNlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBo
YS5oCkBAIC0zMyw2ICszMyw5IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29uc3QgQXRvbWljU3Ry
aW5nJiBlZmZlY3ROYW1lKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3
YXJlKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBs
eU9wZW5DTCgpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKIAogICAgIHZpcnR1
YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAppbmRl
eCBjN2U4MzNlLi4xODVlNTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApAQCAtMzQsNiArMzQsOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZWZmZWN0TmFtZSgpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVO
Q0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAg
IHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMTAzNjAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRl
eHRPcGVuQ0wuY3BwCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUg
PHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdF
RCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiRmls
dGVyQ29udGV4dE9wZW5DTC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZpbHRlckNvbnRl
eHRPcGVuQ0wqIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKQoreworICAgIHN0YXRpYyBG
aWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gMDsKKyAgICBzdGF0aWMgaW50IGFscmVhZHlJ
bml0aWFsaXplZCA9IGZhbHNlOworCisgICAgaWYgKGNvbnRleHQpCisgICAgICAgIHJldHVybiBj
b250ZXh0OworICAgIGlmIChhbHJlYWR5SW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgYWxyZWFkeUluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNM
KiBsb2NhbENvbnRleHQgPSBuZXcgRmlsdGVyQ29udGV4dE9wZW5DTCgpOworCisgICAgLy8gSW5p
dGlhbGl6aW5nIHRoZSBjb250ZXh0LgorICAgIGNsX2ludCBlcnJvck51bWJlcjsKKyAgICBjbF9k
ZXZpY2VfaWQqIGRldmljZXM7CisgICAgY2xfcGxhdGZvcm1faWQgZmlyc3RQbGF0Zm9ybUlkOwor
ICAgIHNpemVfdCBkZXZpY2VCdWZmZXJTaXplID0gMDsKKworICAgIGVycm9yTnVtYmVyID0gY2xH
ZXRQbGF0Zm9ybUlEcygxLCAmZmlyc3RQbGF0Zm9ybUlkLCAwKTsKKyAgICBjbF9jb250ZXh0X3By
b3BlcnRpZXMgY29udGV4dFByb3BlcnRpZXNbXSA9IHsgQ0xfQ09OVEVYVF9QTEFURk9STSwgKGNs
X2NvbnRleHRfcHJvcGVydGllcylmaXJzdFBsYXRmb3JtSWQsIDB9OworICAgIGxvY2FsQ29udGV4
dC0+bV9kZXZpY2VDb250ZXh0ID0gY2xDcmVhdGVDb250ZXh0RnJvbVR5cGUoY29udGV4dFByb3Bl
cnRpZXMsIENMX0RFVklDRV9UWVBFX0dQVSwgMCwgMCwgJmVycm9yTnVtYmVyKTsKKyAgICBpZiAo
ZXJyb3JOdW1iZXIgIT0gQ0xfU1VDQ0VTUykgeworICAgICAgICBsb2NhbENvbnRleHQtPm1fZGV2
aWNlQ29udGV4dCA9IGNsQ3JlYXRlQ29udGV4dEZyb21UeXBlKGNvbnRleHRQcm9wZXJ0aWVzLCBD
TF9ERVZJQ0VfVFlQRV9DUFUsIDAsIDAsICZlcnJvck51bWJlcik7CisgICAgICAgIGlmIChlcnJv
ck51bWJlciAhPSBDTF9TVUNDRVNTKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisg
ICAgZXJyb3JOdW1iZXIgPSBjbEdldENvbnRleHRJbmZvKGxvY2FsQ29udGV4dC0+bV9kZXZpY2VD
b250ZXh0LCBDTF9DT05URVhUX0RFVklDRVMsIDAsIDAsICZkZXZpY2VCdWZmZXJTaXplKTsKKyAg
ICBpZiAoZXJyb3JOdW1iZXIgIT0gQ0xfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBpZiAoIWRldmljZUJ1ZmZlclNpemUpCisgICAgICAgIHJldHVybiAwOworCisgICAgZGV2aWNl
cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2xfZGV2aWNlX2lkKj4oZmFzdE1hbGxvYyhkZXZpY2VCdWZm
ZXJTaXplKSk7CisgICAgZXJyb3JOdW1iZXIgPSBjbEdldENvbnRleHRJbmZvKGxvY2FsQ29udGV4
dC0+bV9kZXZpY2VDb250ZXh0LCBDTF9DT05URVhUX0RFVklDRVMsIGRldmljZUJ1ZmZlclNpemUs
IGRldmljZXMsIDApOworICAgIGlmIChlcnJvck51bWJlciAhPSBDTF9TVUNDRVNTKQorICAgICAg
ICByZXR1cm4gMDsKKworICAgIGxvY2FsQ29udGV4dC0+bV9jb21tYW5kUXVldWUgPSBjbENyZWF0
ZUNvbW1hbmRRdWV1ZShsb2NhbENvbnRleHQtPm1fZGV2aWNlQ29udGV4dCwgZGV2aWNlc1swXSwg
MCwgMCk7CisgICAgaWYgKCFsb2NhbENvbnRleHQtPm1fY29tbWFuZFF1ZXVlKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIGxvY2FsQ29udGV4dC0+bV9kZXZpY2VJZCA9IGRldmljZXNbMF07Cisg
ICAgZmFzdEZyZWUoZGV2aWNlcyk7CisKKyAgICBjbF9ib29sIGltYWdlU3VwcG9ydCA9IENMX0ZB
TFNFOworICAgIGNsR2V0RGV2aWNlSW5mbyhsb2NhbENvbnRleHQtPm1fZGV2aWNlSWQsIENMX0RF
VklDRV9JTUFHRV9TVVBQT1JULCBzaXplb2YoY2xfYm9vbCksICZpbWFnZVN1cHBvcnQsIDApOwor
ICAgIGlmIChpbWFnZVN1cHBvcnQgIT0gQ0xfVFJVRSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBjb250ZXh0ID0gbG9jYWxDb250ZXh0OworICAgIHJldHVybiBjb250ZXh0OworfQorCitPcGVu
Q0xIYW5kbGUgRmlsdGVyQ29udGV4dE9wZW5DTDo6Y3JlYXRlT3BlbkNMSW1hZ2UoSW50U2l6ZSBw
YWludFNpemUpCit7CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNv
bnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKworICAgIGNsX2ltYWdlX2Zvcm1hdCBjbEltYWdlRm9y
bWF0OworICAgIGNsSW1hZ2VGb3JtYXQuaW1hZ2VfY2hhbm5lbF9vcmRlciA9IENMX1JHQkE7Cisg
ICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVsX2RhdGFfdHlwZSA9IENMX1VOT1JNX0lOVDg7
CisKKyAgICBPcGVuQ0xIYW5kbGUgaW1hZ2UgPSBjbENyZWF0ZUltYWdlMkQoY29udGV4dC0+ZGV2
aWNlQ29udGV4dCgpLCBDTF9NRU1fUkVBRF9XUklURSwgJmNsSW1hZ2VGb3JtYXQsCisgICAgICAg
IHBhaW50U2l6ZS53aWR0aCgpLCBwYWludFNpemUuaGVpZ2h0KCksIDAsIDAsIDApOworICAgIHJl
dHVybiBpbWFnZTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIHRyYW5zZm9ybUNvbG9yU3BhY2VL
ZXJuZWxQcm9ncmFtID0KK1BST0dSQU1fU1RSKAorY29uc3Qgc2FtcGxlcl90IHNhbXBsZXIgPSBD
TEtfTk9STUFMSVpFRF9DT09SRFNfRkFMU0UgfCBDTEtfQUREUkVTU19DTEFNUF9UT19FREdFIHwg
Q0xLX0ZJTFRFUl9ORUFSRVNUOworCitfX2tlcm5lbCB2b2lkIHRyYW5zZm9ybUNvbG9yU3BhY2Uo
X19yZWFkX29ubHkgaW1hZ2UyZF90IHNvdXJjZSwgX193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0
aW5hdGlvbiwgX19jb25zdGFudCBmbG9hdCAqY2xMb29rVXBUYWJsZSkKK3sKKyAgICBpbnQyIHNv
dXJjZUNvb3JkID0gKGludDIpIChnZXRfZ2xvYmFsX2lkKDApLCBnZXRfZ2xvYmFsX2lkKDEpKTsK
KyAgICBmbG9hdDQgcGl4ZWwgPSByZWFkX2ltYWdlZihzb3VyY2UsIHNhbXBsZXIsIHNvdXJjZUNv
b3JkKTsKKworICAgIHBpeGVsID0gKGZsb2F0NCkoY2xMb29rVXBUYWJsZVsoaW50KShyb3VuZChw
aXhlbC54ICogMjU1KSldLCBjbExvb2tVcFRhYmxlWyhpbnQpKHJvdW5kKHBpeGVsLnkgKiAyNTUp
KV0sCisgICAgICAgIGNsTG9va1VwVGFibGVbKGludCkocm91bmQocGl4ZWwueiAqIDI1NSkpXSwg
cGl4ZWwudyk7CisKKyAgICB3cml0ZV9pbWFnZWYoZGVzdGluYXRpb24sIHNvdXJjZUNvb3JkLCBw
aXhlbCk7Cit9CispOworCit2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6Om9wZW5DTFRyYW5zZm9y
bUNvbG9yU3BhY2UoT3BlbkNMSGFuZGxlJiBzb3VyY2UsIEludFJlY3Qgc291cmNlU2l6ZSwgQ29s
b3JTcGFjZSBzcmNDb2xvclNwYWNlLCBDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCit7CisgICAg
REVGSU5FX1NUQVRJQ19MT0NBTChPcGVuQ0xIYW5kbGUsIGRldmljZVJnYkxVVCwgKCkpOworICAg
IERFRklORV9TVEFUSUNfTE9DQUwoT3BlbkNMSGFuZGxlLCBsaW5lYXJSZ2JMVVQsICgpKTsKKwor
ICAgIGlmIChzcmNDb2xvclNwYWNlID09IGRzdENvbG9yU3BhY2UpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmICgoc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlTGluZWFyUkdCICYmIHNyY0Nv
bG9yU3BhY2UgIT0gQ29sb3JTcGFjZURldmljZVJHQikKKyAgICAgICAgfHwgKGRzdENvbG9yU3Bh
Y2UgIT0gQ29sb3JTcGFjZUxpbmVhclJHQiAmJiBkc3RDb2xvclNwYWNlICE9IENvbG9yU3BhY2VE
ZXZpY2VSR0IpKQorICAgICAgICByZXR1cm47CisKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBj
b250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworICAgIEFTU0VSVChjb250
ZXh0KTsKKworICAgIE9wZW5DTEhhbmRsZSBkZXN0aW5hdGlvbiA9IGNvbnRleHQtPmNyZWF0ZU9w
ZW5DTEltYWdlKHNvdXJjZVNpemUuc2l6ZSgpKTsKKworICAgIGlmICghbV90cmFuc2Zvcm1Db2xv
clNwYWNlUHJvZ3JhbSkgeworICAgICAgICBtX3RyYW5zZm9ybUNvbG9yU3BhY2VQcm9ncmFtID0g
Y29tcGlsZVByb2dyYW0odHJhbnNmb3JtQ29sb3JTcGFjZUtlcm5lbFByb2dyYW0pOworICAgICAg
ICBtX3RyYW5zZm9ybUNvbG9yU3BhY2VLZXJuZWwgPSBrZXJuZWxCeU5hbWUobV90cmFuc2Zvcm1D
b2xvclNwYWNlUHJvZ3JhbSwgInRyYW5zZm9ybUNvbG9yU3BhY2UiKTsKKyAgICB9CisKKyAgICBS
dW5LZXJuZWwga2VybmVsKGNvbnRleHQsIG1fdHJhbnNmb3JtQ29sb3JTcGFjZUtlcm5lbCwgc291
cmNlU2l6ZS53aWR0aCgpLCBzb3VyY2VTaXplLmhlaWdodCgpKTsKKyAgICBrZXJuZWwuYWRkQXJn
dW1lbnQoc291cmNlKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoZGVzdGluYXRpb24pOworCisg
ICAgaWYgKGRzdENvbG9yU3BhY2UgPT0gQ29sb3JTcGFjZUxpbmVhclJHQikgeworICAgICAgICBp
ZiAoIWxpbmVhclJnYkxVVCkgeworICAgICAgICAgICAgVmVjdG9yPGZsb2F0PiBsb29rVXBUYWJs
ZTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAyNTY7IGkrKykgeworICAg
ICAgICAgICAgICAgIGZsb2F0IGNvbG9yID0gaSAgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAg
Y29sb3IgPSAoY29sb3IgPD0gMC4wNDA0NWYgPyBjb2xvciAvIDEyLjkyZiA6IHBvdygoY29sb3Ig
KyAwLjA1NWYpIC8gMS4wNTVmLCAyLjRmKSk7CisgICAgICAgICAgICAgICAgY29sb3IgPSBzdGQ6
Om1heCgwLjBmLCBjb2xvcik7CisgICAgICAgICAgICAgICAgY29sb3IgPSBzdGQ6Om1pbigxLjBm
LCBjb2xvcik7CisgICAgICAgICAgICAgICAgbG9va1VwVGFibGUuYXBwZW5kKChyb3VuZChjb2xv
ciAqIDI1NSkpIC8gMjU1KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxpbmVhclJnYkxV
VCA9IGtlcm5lbC5hZGRBcmd1bWVudChsb29rVXBUYWJsZS5kYXRhKCksIHNpemVvZihmbG9hdCkg
KiAyNTYpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGtlcm5lbC5hZGRBcmd1bWVudChs
aW5lYXJSZ2JMVVQpOworICAgIH0gZWxzZSBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNl
RGV2aWNlUkdCKSB7CisgICAgICAgIGlmICghZGV2aWNlUmdiTFVUKSB7CisgICAgICAgICAgICBW
ZWN0b3I8ZmxvYXQ+IGxvb2tVcFRhYmxlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBpIC8gMjU1
LjBmOworICAgICAgICAgICAgICAgIGNvbG9yID0gKHBvd2YoY29sb3IsIDEuMGYgLyAyLjRmKSAq
IDEuMDU1ZikgLSAwLjA1NWY7CisgICAgICAgICAgICAgICAgY29sb3IgPSBzdGQ6Om1heCgwLjBm
LCBjb2xvcik7CisgICAgICAgICAgICAgICAgY29sb3IgPSBzdGQ6Om1pbigxLjBmLCBjb2xvcik7
CisgICAgICAgICAgICAgICAgbG9va1VwVGFibGUuYXBwZW5kKChyb3VuZChjb2xvciAqIDI1NSkp
IC8gMjU1KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRldmljZVJnYkxVVCA9IGtlcm5l
bC5hZGRBcmd1bWVudChsb29rVXBUYWJsZS5kYXRhKCksIHNpemVvZihmbG9hdCkgKiAyNTYpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXZpY2VSZ2JM
VVQpOworICAgIH0KKworICAgIGtlcm5lbC5ydW4oKTsKKyAgICBzb3VyY2UuY2xlYXIoKTsKKyAg
ICBzb3VyY2UgPSBkZXN0aW5hdGlvbjsKK30KKworY2xfcHJvZ3JhbSBGaWx0ZXJDb250ZXh0T3Bl
bkNMOjpjb21waWxlUHJvZ3JhbShjb25zdCBjaGFyKiBzb3VyY2UpCit7CisgICAgY2xfcHJvZ3Jh
bSBwcm9ncmFtOworCisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNv
bnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisKKyAgICBwcm9n
cmFtID0gY2xDcmVhdGVQcm9ncmFtV2l0aFNvdXJjZShjb250ZXh0LT5tX2RldmljZUNvbnRleHQs
IDEsIChjb25zdCBjaGFyKiopICZzb3VyY2UsIDAsIDApOworICAgIGNsQnVpbGRQcm9ncmFtKHBy
b2dyYW0sIDAsIDAsIDAsIDAsIDApOworICAgIHJldHVybiBwcm9ncmFtOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjNiNjBiCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0
ZXJDb250ZXh0T3BlbkNMLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUYW1hcyBD
emVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9G
IFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0Yg
U1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmbmRlZiBGaWx0ZXJDb250ZXh0T3BlbkNMX2gKKyNkZWZpbmUgRmlsdGVyQ29udGV4
dE9wZW5DTF9oCisKKyNpZiBFTkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgIkNML2NsLmgiCisjaW5j
bHVkZSAiQ29sb3IuaCIKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5jbHVkZSAiSW50UmVj
dC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJPcGVuQ0xIYW5kbGUuaCIKKwor
I2RlZmluZSBQUk9HUkFNX1NUUihTcmMpICNTcmMKKyNkZWZpbmUgUFJPR1JBTShTcmMpIFBST0dS
QU1fU1RSKFNyYykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBGaWx0ZXJDb250ZXh0
T3BlbkNMIHsKK3B1YmxpYzoKKyAgICAvLyBSZXR1cm5zIDAgaWYgaW5pdGlhbGl6YXRpb24gZmFp
bGVkLgorICAgIHN0YXRpYyBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0KCk7CisKKyAgICBj
bF9kZXZpY2VfaWQgZGV2aWNlSWQoKSB7IHJldHVybiBtX2RldmljZUlkOyB9CisgICAgY2xfY29u
dGV4dCBkZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbV9kZXZpY2VDb250ZXh0OyB9CisgICAgY2xf
Y29tbWFuZF9xdWV1ZSBjb21tYW5kUXVldWUoKSB7IHJldHVybiBtX2NvbW1hbmRRdWV1ZTsgfQor
CisgICAgT3BlbkNMSGFuZGxlIGNyZWF0ZU9wZW5DTEltYWdlKEludFNpemUpOworICAgIHZvaWQg
b3BlbkNMVHJhbnNmb3JtQ29sb3JTcGFjZShPcGVuQ0xIYW5kbGUmLCBJbnRSZWN0LCBDb2xvclNw
YWNlLCBDb2xvclNwYWNlKTsKKworICAgIGlubGluZSB2b2lkIGFwcGx5RkVUdXJidWxlbmNlKE9w
ZW5DTEhhbmRsZSwgSW50U2l6ZSwgaW50LCB2b2lkKiwgdm9pZCosIHZvaWQqLCB2b2lkKiwgdm9p
ZCosCisgICAgICAgIHZvaWQqLCBpbnQsIGludCwgaW50LCBpbnQsIGZsb2F0LCBmbG9hdCwgYm9v
bCwgaW50LCBpbnQpOworCitwcml2YXRlOgorCisgICAgY2xhc3MgUnVuS2VybmVsIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgUnVuS2VybmVsKEZpbHRlckNvbnRleHRPcGVuQ0wqIGNv
bnRleHQsIGNsX2tlcm5lbCBrZXJuZWwsIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCkKKyAg
ICAgICAgICAgICAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAgICAgICAgICAgICAgICwgbV9r
ZXJuZWwoa2VybmVsKQorICAgICAgICAgICAgICAgICwgaW5kZXgoMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtX2dsb2JhbFNpemVbMF0gPSB3aWR0aDsKKyAgICAgICAgICAgICAg
ICBtX2dsb2JhbFNpemVbMV0gPSBoZWlnaHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHZvaWQgYWRkQXJndW1lbnQoT3BlbkNMSGFuZGxlIGhhbmRsZSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjbFNldEtlcm5lbEFyZyhtX2tlcm5lbCwgaW5kZXgrKywgc2l6ZW9mKE9w
ZW5DTEhhbmRsZSksIGhhbmRsZS5oYW5kbGVBZGRyZXNzKCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KGNsX2ludCB2YWx1ZSkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBjbFNldEtlcm5lbEFyZyhtX2tlcm5lbCwgaW5kZXgrKywgc2l6ZW9m
KGNsX2ludCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZ2YWx1ZSkpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KGNsX2Zsb2F0IHZhbHVlKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBpbmRleCsr
LCBzaXplb2YoY2xfZmxvYXQpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigmdmFsdWUpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBhZGRBcmd1bWVudChjbF9zYW1wbGVyIGhh
bmRsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjbFNldEtlcm5lbEFyZyhtX2tl
cm5lbCwgaW5kZXgrKywgc2l6ZW9mKGNsX3NhbXBsZXIpLCByZWludGVycHJldF9jYXN0PHZvaWQq
PigmaGFuZGxlKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIE9wZW5DTEhhbmRsZSBh
ZGRBcmd1bWVudCh2b2lkKiBidWZmZXIsIGludCBzaXplKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIE9wZW5DTEhhbmRsZSBoYW5kbGUoY2xDcmVhdGVCdWZmZXIobV9jb250ZXh0LT5k
ZXZpY2VDb250ZXh0KCksIENMX01FTV9SRUFEX09OTFksIHNpemUsIDAsIDApKTsKKyAgICAgICAg
ICAgICAgICBjbEVucXVldWVXcml0ZUJ1ZmZlcihtX2NvbnRleHQtPmNvbW1hbmRRdWV1ZSgpLCBo
YW5kbGUsIENMX1RSVUUsIDAsIHNpemUsIGJ1ZmZlciwgMCwgMCwgMCk7CisgICAgICAgICAgICAg
ICAgY2xTZXRLZXJuZWxBcmcobV9rZXJuZWwsIGluZGV4KyssIHNpemVvZihPcGVuQ0xIYW5kbGUp
LCBoYW5kbGUuaGFuZGxlQWRkcmVzcygpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gaGFuZGxl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIHJ1bigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgY2xGaW5pc2gobV9jb250ZXh0LT5tX2NvbW1hbmRRdWV1ZSk7Cisg
ICAgICAgICAgICAgICAgY2xFbnF1ZXVlTkRSYW5nZUtlcm5lbChtX2NvbnRleHQtPm1fY29tbWFu
ZFF1ZXVlLCBtX2tlcm5lbCwgMiwgMCwgbV9nbG9iYWxTaXplLCAwLCAwLCAwLCAwKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogbV9jb250ZXh0Owor
ICAgICAgICAgICAgY2xfa2VybmVsIG1fa2VybmVsOworICAgICAgICAgICAgc2l6ZV90IG1fZ2xv
YmFsU2l6ZVsyXTsKKyAgICAgICAgICAgIGludCBpbmRleDsKKyAgICAgICAgfTsKKworICAgIHN0
YXRpYyBjbF9wcm9ncmFtIGNvbXBpbGVQcm9ncmFtKGNvbnN0IGNoYXIqKTsKKyAgICBzdGF0aWMg
aW5saW5lIGNsX2tlcm5lbCBrZXJuZWxCeU5hbWUoY2xfcHJvZ3JhbSBwcm9ncmFtLCBjb25zdCBj
aGFyKiBuYW1lKSB7IHJldHVybiBjbENyZWF0ZUtlcm5lbChwcm9ncmFtLCBuYW1lLCAwKTsgfQor
CisgICAgaW5saW5lIHZvaWQgY29tcGlsZUZFVHVyYnVsZW5jZSgpOworCisgICAgY2xfZGV2aWNl
X2lkIG1fZGV2aWNlSWQ7CisgICAgY2xfY29udGV4dCBtX2RldmljZUNvbnRleHQ7CisgICAgY2xf
Y29tbWFuZF9xdWV1ZSBtX2NvbW1hbmRRdWV1ZTsKKworICAgIGNsX3Byb2dyYW0gbV90cmFuc2Zv
cm1Db2xvclNwYWNlUHJvZ3JhbTsKKyAgICBjbF9rZXJuZWwgbV90cmFuc2Zvcm1Db2xvclNwYWNl
S2VybmVsOworCisgICAgY2xfcHJvZ3JhbSBtX3R1cmJ1bGVuY2VQcm9ncmFtOworICAgIGNsX2tl
cm5lbCBtX3R1cmJ1bGVuY2VPcGVyYXRpb247Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoT1BFTkNMKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VBbHBo
YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5D
TEZFU291cmNlQWxwaGEuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFi
OTNkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvb3BlbmNsL09wZW5DTEZFU291cmNlQWxwaGEuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxF
KEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiU291cmNlQWxwaGEuaCIKKwor
I2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckNvbnRleHRPcGVuQ0wuaCIKKyNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Jvb2wgU291
cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQoreworICAgIEZpbHRlckNvbnRleHRPcGVu
Q0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisKKyAgICBpZiAo
IWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpOworICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFnZSA9IGFzSW1hZ2VCdWZmZXIoKTsK
KyAgICBpZiAoIXNvdXJjZUltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQ
dHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZUltYWdlRGF0YSA9IHNvdXJjZUltYWdlLT5nZXRV
bm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2ludCgpLCBzb3VyY2VJbWFnZS0+aW50
ZXJuYWxTaXplKCkpKTsKKyAgICBjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdChzb3VyY2VJbWFnZURh
dGEtPmRhdGEoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xG
RVNvdXJjZUdyYXBoaWMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUdyYXBoaWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLmIyZTllZjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFU291cmNlR3JhcGhpYy5jcHAKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6
ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3pl
Z2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJT
b3VyY2VHcmFwaGljLmgiCisKKyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJD
b250ZXh0T3BlbkNMLmgiCisjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitib29sIFNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQorewor
ICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpj
b250ZXh0KCk7CisKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworICAgIEltYWdlQnVmZmVyKiBzb3VyY2VJbWFn
ZSA9IGFzSW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoIXNvdXJjZUltYWdlKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IHNvdXJjZUltYWdlRGF0
YSA9IHNvdXJjZUltYWdlLT5nZXRVbm11bHRpcGxpZWRJbWFnZURhdGEoSW50UmVjdChJbnRQb2lu
dCgpLCBzb3VyY2VJbWFnZS0+aW50ZXJuYWxTaXplKCkpKTsKKyAgICBjcmVhdGVPcGVuQ0xJbWFn
ZVJlc3VsdChzb3VyY2VJbWFnZURhdGEtPmRhdGEoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBF
TkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNDk1YTIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFVHVyYnVs
ZW5jZS5jcHAKQEAgLTAsMCArMSwyNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5p
dmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6
ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQor
I2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5oIgorCisjaW5jbHVkZSAiRkVUdXJidWxlbmNlLmNwcCIK
KyNpbmNsdWRlICJGaWx0ZXJDb250ZXh0T3BlbkNMLmgiCisjaW5jbHVkZSAiU1ZHRmlsdGVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGNoYXIqIHR1cmJ1bGVuY2VL
ZXJuZWxQcm9ncmFtID0KK1BST0dSQU1fU1RSKAorX19jb25zdGFudCBpbnQgc19wZXJsaW5Ob2lz
ZSA9IDQwOTY7CitfX2NvbnN0YW50IGludCBzX2Jsb2NrU2l6ZSA9IDI1NjsKK19fY29uc3RhbnQg
aW50IHNfYmxvY2tNYXNrID0gMjU1OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50IG5vaXNl
UG9zaXRpb25JbnRlZ2VyVmFsdWU7CisgICAgZmxvYXQgbm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFs
dWU7Cit9IE5vaXNlOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50IHdpZHRoOworICAgIGlu
dCB3cmFwWDsKKyAgICBpbnQgaGVpZ2h0OworICAgIGludCB3cmFwWTsKK30gU3RpdGNoRGF0YTsK
KworZmxvYXQgbGluZWFySW50ZXJwb2xhdGlvbihmbG9hdCB0LCBmbG9hdCBhLCBmbG9hdCBiKQor
eworICAgIHJldHVybiBhICsgdCAqIChiIC0gYSk7Cit9CisKK2Zsb2F0IG5vaXNlMkQoX19jb25z
dGFudCBmbG9hdCAqY29tcG9uZW50LCBfX2NvbnN0YW50IGludCAqbGF0dGljZVNlbGVjdG9yLCBT
dGl0Y2hEYXRhIHN0aXRjaERhdGEsIGZsb2F0IG5vaXNlVmVjdG9yWCwgZmxvYXQgbm9pc2VWZWN0
b3JZLCBpbnQgc3RpdGNoVGlsZXMpCit7CisgICAgTm9pc2Ugbm9pc2VYOworICAgIG5vaXNlWC5u
b2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID0gKGludCkobm9pc2VWZWN0b3JYICsgc19wZXJsaW5O
b2lzZSk7CisgICAgbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlID0gKG5vaXNlVmVj
dG9yWCArIHNfcGVybGluTm9pc2UpIC0gbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7
CisgICAgTm9pc2Ugbm9pc2VZOworICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVl
ID0gKGludCkobm9pc2VWZWN0b3JZICsgc19wZXJsaW5Ob2lzZSk7CisgICAgbm9pc2VZLm5vaXNl
UG9zaXRpb25GcmFjdGlvblZhbHVlID0gKG5vaXNlVmVjdG9yWSArIHNfcGVybGluTm9pc2UpIC0g
bm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7CisKKyAgICAvLyBJZiBzdGl0Y2hpbmcs
IGFkanVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KKyAgICBpZiAoc3RpdGNoVGlsZXMp
IHsKKyAgICAgICAgaWYgKG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID49IHN0aXRj
aERhdGEud3JhcFgpCisgICAgICAgICAgICBub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1
ZSAtPSBzdGl0Y2hEYXRhLndpZHRoOworICAgICAgICBpZiAobm9pc2VYLm5vaXNlUG9zaXRpb25J
bnRlZ2VyVmFsdWUgPj0gc3RpdGNoRGF0YS53cmFwWCAtIDEpCisgICAgICAgICAgICBub2lzZVgu
bm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAtPSBzdGl0Y2hEYXRhLndpZHRoIC0gMTsKKyAgICAg
ICAgaWYgKG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID49IHN0aXRjaERhdGEud3Jh
cFkpCisgICAgICAgICAgICBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAtPSBzdGl0
Y2hEYXRhLmhlaWdodDsKKyAgICAgICAgaWYgKG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZh
bHVlID49IHN0aXRjaERhdGEud3JhcFkgLSAxKQorICAgICAgICAgICAgbm9pc2VZLm5vaXNlUG9z
aXRpb25JbnRlZ2VyVmFsdWUgLT0gc3RpdGNoRGF0YS5oZWlnaHQgLSAxOworICAgIH0KKworICAg
IG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOworICAgIG5v
aXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOworICAgIGludCBs
YXR0aWNlSW5kZXggPSBsYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2Vy
VmFsdWVdOworICAgIGludCBuZXh0TGF0dGljZUluZGV4ID0gbGF0dGljZVNlbGVjdG9yWyhub2lz
ZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDEpICYgc19ibG9ja01hc2tdOworCisgICAg
ZmxvYXQgc3ggPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBub2lzZVgubm9p
c2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiAoMyAtIDIgKiBub2lzZVgubm9pc2VQb3NpdGlvbkZy
YWN0aW9uVmFsdWUpOworICAgIGZsb2F0IHN5ID0gbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlv
blZhbHVlICogbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogKDMgLSAyICogbm9p
c2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlKTsKKworICAgIC8vIFRoaXMgaXMgdGFrZW4g
MToxIGZyb20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRt
bCNmZVR1cmJ1bGVuY2VFbGVtZW50LgorICAgIGludCB0ZW1wID0gbGF0dGljZVNlbGVjdG9yW2xh
dHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKKyAgICBmbG9h
dCB1ID0gbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogY29tcG9uZW50W3RlbXAg
KiAyXSArIG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIGNvbXBvbmVudFt0ZW1w
ICogMiArIDFdOworICAgIHRlbXAgPSBsYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCAr
IG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKKyAgICBmbG9hdCB2ID0gKG5vaXNl
WC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogY29tcG9uZW50W3RlbXAgKiAyXSAr
IG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIGNvbXBvbmVudFt0ZW1wICogMiAr
IDFdOworICAgIGZsb2F0IGEgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKKyAgICB0
ZW1wID0gbGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9u
SW50ZWdlclZhbHVlICsgMV07CisgICAgdSA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25W
YWx1ZSAqIGNvbXBvbmVudFt0ZW1wICogMl0gKyAobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlv
blZhbHVlIC0gMSkgKiBjb21wb25lbnRbdGVtcCAqIDIgKyAxXTsKKyAgICB0ZW1wID0gbGF0dGlj
ZVNlbGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJW
YWx1ZSArIDFdOworICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0g
MSkgKiBjb21wb25lbnRbdGVtcCAqIDJdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25W
YWx1ZSAtIDEpICogY29tcG9uZW50W3RlbXAgKiAyICsgMV07CisgICAgZmxvYXQgYiA9IGxpbmVh
ckludGVycG9sYXRpb24oc3gsIHUsIHYpOworICAgIHJldHVybiBsaW5lYXJJbnRlcnBvbGF0aW9u
KHN5LCBhLCBiKTsKK30KKworX19rZXJuZWwgdm9pZCBUdXJidWxlbmNlKF9fd3JpdGVfb25seSBp
bWFnZTJkX3QgZGVzdGluYXRpb24sIF9fY29uc3RhbnQgZmxvYXQgKnRyYW5zZm9ybSwgX19jb25z
dGFudCBmbG9hdCAqcmVkQ29tcG9uZW50LAorICAgIF9fY29uc3RhbnQgZmxvYXQgKmdyZWVuQ29t
cG9uZW50LCBfX2NvbnN0YW50IGZsb2F0ICpibHVlQ29tcG9uZW50LCBfX2NvbnN0YW50IGZsb2F0
ICphbHBoYUNvbXBvbmVudCwKKyAgICBfX2NvbnN0YW50IGludCAqbGF0dGljZVNlbGVjdG9yLCBf
X3ByaXZhdGUgaW50IG9mZnNldFgsIF9fcHJpdmF0ZSBpbnQgb2Zmc2V0WSwgX19wcml2YXRlIGlu
dCB0aWxlV2lkdGgsCisgICAgX19wcml2YXRlIGludCB0aWxlSGVpZ2h0LCBfX3ByaXZhdGUgZmxv
YXQgYmFzZUZyZXF1ZW5jeVgsIF9fcHJpdmF0ZSBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgX19wcml2
YXRlIGludCBzdGl0Y2hUaWxlcywKKyAgICBfX3ByaXZhdGUgaW50IG51bU9jdGF2ZXMsIF9fcHJp
dmF0ZSBpbnQgdHlwZSwgX19wcml2YXRlIGludCBmaWx0ZXJfaGVpZ2h0KQoreworICAgIFN0aXRj
aERhdGEgc3RpdGNoRGF0YTsKKyAgICBzdGl0Y2hEYXRhLndpZHRoID0gMDsKKyAgICBzdGl0Y2hE
YXRhLndyYXBYID0gMDsKKyAgICBzdGl0Y2hEYXRhLmhlaWdodCA9IDA7CisgICAgc3RpdGNoRGF0
YS53cmFwWSA9IDA7CisgICAgLy8gQWRqdXN0IHRoZSBiYXNlIGZyZXF1ZW5jaWVzIGlmIG5lY2Vz
c2FyeSBmb3Igc3RpdGNoaW5nLgorICAgIGlmIChzdGl0Y2hUaWxlcykgeworICAgICAgICAvLyBX
aGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNlLCB0aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBh
ZGp1c3RlZAorICAgICAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250
aW51b3VzLgorICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVgpIHsKKyAgICAgICAgICAgIGZsb2F0
IGxvd0ZyZXF1ZW5jeSA9IGZsb29yKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVX
aWR0aDsKKyAgICAgICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsKHRpbGVXaWR0aCAq
IGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgIC8vIEJhc2VGcmVxdWVu
Y3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5kYXJkLgorICAg
ICAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lYIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5j
eSAvIGJhc2VGcmVxdWVuY3lYKQorICAgICAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lYID0gbG93
RnJlcXVlbmN5OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGJhc2VGcmVxdWVu
Y3lYID0gaGlnaEZyZXF1ZW5jeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmFzZUZyZXF1ZW5j
eVkpIHsKKyAgICAgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yKHRpbGVIZWlnaHQg
KiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICAgICAgZmxvYXQgaGlnaEZy
ZXF1ZW5jeSA9IGNlaWwodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7
CisgICAgICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVkgLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJl
cXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVkpCisgICAgICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkg
PSBsb3dGcmVxdWVuY3k7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFzZUZy
ZXF1ZW5jeVkgPSBoaWdoRnJlcXVlbmN5OworICAgICAgICB9CisgICAgICAgIC8vIFNldCB1cCBU
dXJidWxlbmNlSW5pdGlhbCBzdGl0Y2ggdmFsdWVzLgorICAgICAgICBzdGl0Y2hEYXRhLndpZHRo
ID0gcm91bmQodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOworICAgICAgICBzdGl0Y2hEYXRh
LndyYXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7CisgICAgICAgIHN0aXRj
aERhdGEuaGVpZ2h0ID0gcm91bmQodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKKyAgICAg
ICAgc3RpdGNoRGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdodDsK
KyAgICB9CisgICAgZmxvYXQ0IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IChmbG9hdDQpKDAs
IDAsIDAsIDApOworICAgIGZsb2F0IHggPSAoZ2V0X2dsb2JhbF9pZCgwKSArIG9mZnNldFgpICog
YmFzZUZyZXF1ZW5jeVg7CisgICAgZmxvYXQgeSA9IChnZXRfZ2xvYmFsX2lkKDEpICsgb2Zmc2V0
WSkgKiBiYXNlRnJlcXVlbmN5WTsKKworICAgIGZsb2F0IG5vaXNlVmVjdG9yWCA9IHRyYW5zZm9y
bVswXSAqIHggKyB0cmFuc2Zvcm1bMl0gKiB5ICsgdHJhbnNmb3JtWzRdOworICAgIGZsb2F0IG5v
aXNlVmVjdG9yWSA9IHRyYW5zZm9ybVsxXSAqIHggKyB0cmFuc2Zvcm1bM10gKiB5ICsgdHJhbnNm
b3JtWzVdOworCisgICAgZmxvYXQgcmF0aW8gPSAxOworICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7
IG9jdGF2ZSA8IG51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGlmICh0eXBlID09IDEp
IHsKKyAgICAgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdC54ICs9IG5vaXNlMkQocmVk
Q29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yWCwgbm9p
c2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRpbzsKKyAgICAgICAgICAgIHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdC55ICs9IG5vaXNlMkQoZ3JlZW5Db21wb25lbnQsIGxhdHRpY2VTZWxlY3Rv
ciwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3JYLCBub2lzZVZlY3RvclksIHN0aXRjaFRpbGVzKSAv
IHJhdGlvOworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0LnogKz0gbm9pc2Uy
RChibHVlQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9y
WCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRpbzsKKyAgICAgICAgICAgIHR1cmJ1
bGVuY2VGdW5jdGlvblJlc3VsdC53ICs9IG5vaXNlMkQoYWxwaGFDb21wb25lbnQsIGxhdHRpY2VT
ZWxlY3Rvciwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3JYLCBub2lzZVZlY3RvclksIHN0aXRjaFRp
bGVzKSAvIHJhdGlvOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1
bmN0aW9uUmVzdWx0LnggKz0gZmFicyhub2lzZTJEKHJlZENvbXBvbmVudCwgbGF0dGljZVNlbGVj
dG9yLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvclgsIG5vaXNlVmVjdG9yWSwgc3RpdGNoVGlsZXMp
KSAvIHJhdGlvOworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0LnkgKz0gZmFi
cyhub2lzZTJEKGdyZWVuQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5v
aXNlVmVjdG9yWCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykpIC8gcmF0aW87CisgICAgICAg
ICAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQueiArPSBmYWJzKG5vaXNlMkQoYmx1ZUNvbXBv
bmVudCwgbGF0dGljZVNlbGVjdG9yLCBzdGl0Y2hEYXRhLCBub2lzZVZlY3RvclgsIG5vaXNlVmVj
dG9yWSwgc3RpdGNoVGlsZXMpKSAvIHJhdGlvOworICAgICAgICAgICAgdHVyYnVsZW5jZUZ1bmN0
aW9uUmVzdWx0LncgKz0gZmFicyhub2lzZTJEKGFscGhhQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0
b3IsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yWCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykp
IC8gcmF0aW87CisgICAgICAgIH0KKyAgICAgICAgbm9pc2VWZWN0b3JYICo9IDI7CisgICAgICAg
IG5vaXNlVmVjdG9yWSAqPSAyOworICAgICAgICByYXRpbyAqPSAyOworICAgICAgICBpZiAoc3Rp
dGNoVGlsZXMpIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVzLiBTdWJ0cmFj
dGluZyBzX3Blcmxpbk5vaXNlb2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAorICAg
ICAgICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0aW5n
IGl0IG9uY2UuCisgICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7CisgICAgICAgICAg
ICBzdGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5vaXNl
OworICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKKyAgICAgICAgICAgIHN0aXRj
aERhdGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSAxKQorICAgICAgICB0dXJidWxlbmNlRnVu
Y3Rpb25SZXN1bHQgPSB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKiAwLjVmICsgMC41ZjsKKyAg
ICAvLyBDbGFtcCByZXN1bHQuCisgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gY2xhbXAo
dHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0LCAwLjBmLCAxLjBmKTsKKworICAgIHdyaXRlX2ltYWdl
ZihkZXN0aW5hdGlvbiwgKGludDIpKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkp
LCB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQpOworfQorKTsKKworaW5saW5lIHZvaWQgRmlsdGVy
Q29udGV4dE9wZW5DTDo6Y29tcGlsZUZFVHVyYnVsZW5jZSgpCit7CisgICAgaWYgKCFtX3R1cmJ1
bGVuY2VPcGVyYXRpb24pIHsKKyAgICAgICAgbV90dXJidWxlbmNlUHJvZ3JhbSA9IGNvbXBpbGVQ
cm9ncmFtKHR1cmJ1bGVuY2VLZXJuZWxQcm9ncmFtKTsKKyAgICAgICAgQVNTRVJUKG1fdHVyYnVs
ZW5jZVByb2dyYW0pOworICAgICAgICBtX3R1cmJ1bGVuY2VPcGVyYXRpb24gPSBrZXJuZWxCeU5h
bWUobV90dXJidWxlbmNlUHJvZ3JhbSwgIlR1cmJ1bGVuY2UiKTsKKyAgICAgICAgQVNTRVJUKG1f
dHVyYnVsZW5jZU9wZXJhdGlvbik7CisgICAgfQorfQorCitpbmxpbmUgdm9pZCBGaWx0ZXJDb250
ZXh0T3BlbkNMOjphcHBseUZFVHVyYnVsZW5jZShPcGVuQ0xIYW5kbGUgZGVzdGluYXRpb24sCisg
ICAgSW50U2l6ZSBkZXN0aW5hdGlvblNpemUsIGludCBibG9ja1NpemUsCisgICAgdm9pZCogdHJh
bnNmb3JtLCB2b2lkKiByZWRDb21wb25lbnQsIHZvaWQqIGdyZWVuQ29tcG9uZW50LAorICAgIHZv
aWQqIGJsdWVDb21wb25lbnQsIHZvaWQqIGFscGhhQ29tcG9uZW50LAorICAgIHZvaWQqIGxhdHRp
Y2VTZWxlY3RvciwgaW50IG9mZnNldFgsIGludCBvZmZzZXRZLCBpbnQgdGlsZVdpZHRoLCBpbnQg
dGlsZUhlaWdodCwKKyAgICBmbG9hdCBiYXNlRnJlcXVlbmN5WCwgZmxvYXQgYmFzZUZyZXF1ZW5j
eVksIGJvb2wgc3RpdGNoVGlsZXMsIGludCBudW1PY3RhdmVzLCBpbnQgdHlwZSkKK3sKKyAgICBj
b21waWxlRkVUdXJidWxlbmNlKCk7CisKKyAgICBSdW5LZXJuZWwga2VybmVsKHRoaXMsIG1fdHVy
YnVsZW5jZU9wZXJhdGlvbiwgZGVzdGluYXRpb25TaXplLndpZHRoKCksIGRlc3RpbmF0aW9uU2l6
ZS5oZWlnaHQoKSk7CisKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoZGVzdGluYXRpb24pOworICAg
IE9wZW5DTEhhbmRsZSB0cmFuc2Zvcm1IYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KHRyYW5zZm9y
bSwgc2l6ZW9mKGZsb2F0KSAqIDYpKTsKKyAgICBPcGVuQ0xIYW5kbGUgcmVkQ29tcG9uZW50SGFu
ZGxlKGtlcm5lbC5hZGRBcmd1bWVudChyZWRDb21wb25lbnQsIHNpemVvZihmbG9hdCkgKiAoMiAq
IGJsb2NrU2l6ZSArIDIpICogMikpOworICAgIE9wZW5DTEhhbmRsZSBncmVlbkNvbXBvbmVudEhh
bmRsZShrZXJuZWwuYWRkQXJndW1lbnQoZ3JlZW5Db21wb25lbnQsIHNpemVvZihmbG9hdCkgKiAo
MiAqIGJsb2NrU2l6ZSArIDIpICogMikpOworICAgIE9wZW5DTEhhbmRsZSBibHVlQ29tcG9uZW50
SGFuZGxlKGtlcm5lbC5hZGRBcmd1bWVudChibHVlQ29tcG9uZW50LCBzaXplb2YoZmxvYXQpICog
KDIgKiBibG9ja1NpemUgKyAyKSAqIDIpKTsKKyAgICBPcGVuQ0xIYW5kbGUgYWxwaGFDb21wb25l
bnRIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KGFscGhhQ29tcG9uZW50LCBzaXplb2YoZmxvYXQp
ICogKDIgKiBibG9ja1NpemUgKyAyKSAqIDIpKTsKKyAgICBPcGVuQ0xIYW5kbGUgbGF0dGljZVNl
bGVjdG9ySGFuZGxlKGtlcm5lbC5hZGRBcmd1bWVudChsYXR0aWNlU2VsZWN0b3IsIHNpemVvZihp
bnQpICogKDIgKiBibG9ja1NpemUgKyAyKSkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChvZmZz
ZXRYKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQob2Zmc2V0WSk7CisgICAga2VybmVsLmFkZEFy
Z3VtZW50KHRpbGVXaWR0aCk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KHRpbGVIZWlnaHQpOwor
ICAgIGtlcm5lbC5hZGRBcmd1bWVudChiYXNlRnJlcXVlbmN5WCk7CisgICAga2VybmVsLmFkZEFy
Z3VtZW50KGJhc2VGcmVxdWVuY3lZKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoc3RpdGNoVGls
ZXMpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChudW1PY3RhdmVzKTsKKyAgICBrZXJuZWwuYWRk
QXJndW1lbnQodHlwZSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KGRlc3RpbmF0aW9uU2l6ZS5o
ZWlnaHQoKSk7CisKKyAgICBrZXJuZWwucnVuKCk7CisKKyAgICB0cmFuc2Zvcm1IYW5kbGUuY2xl
YXIoKTsKKyAgICByZWRDb21wb25lbnRIYW5kbGUuY2xlYXIoKTsKKyAgICBncmVlbkNvbXBvbmVu
dEhhbmRsZS5jbGVhcigpOworICAgIGJsdWVDb21wb25lbnRIYW5kbGUuY2xlYXIoKTsKKyAgICBh
bHBoYUNvbXBvbmVudEhhbmRsZS5jbGVhcigpOworICAgIGxhdHRpY2VTZWxlY3RvckhhbmRsZS5j
bGVhcigpOworfQorCitib29sIEZFVHVyYnVsZW5jZTo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7
CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6
OmNvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIE9wZW5DTEhhbmRsZSBkZXN0aW5hdGlvbiA9IGNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KCk7
CisKKyAgICBQYWludGluZ0RhdGEgcGFpbnRpbmdEYXRhKG1fc2VlZCwgcm91bmRlZEludFNpemUo
ZmlsdGVyUHJpbWl0aXZlU3VicmVnaW9uKCkuc2l6ZSgpKSk7CisgICAgaW5pdFBhaW50KHBhaW50
aW5nRGF0YSk7CisKKyAgICBBZmZpbmVUcmFuc2Zvcm0gaW52ZXJ0ZWRUcmFuc2Zvcm0gPSByZWlu
dGVycHJldF9jYXN0PFNWR0ZpbHRlcio+KGZpbHRlcigpKS0+YWJzb2x1dGVUcmFuc2Zvcm0oKS5p
bnZlcnNlKCk7CisgICAgZmxvYXQgdHJhbnNmb3JtQ29tcG9uZW50c1s2XSA9IHsgaW52ZXJ0ZWRU
cmFuc2Zvcm0uYSgpLCBpbnZlcnRlZFRyYW5zZm9ybS5iKCksIGludmVydGVkVHJhbnNmb3JtLmMo
KSwgaW52ZXJ0ZWRUcmFuc2Zvcm0uZCgpLCBpbnZlcnRlZFRyYW5zZm9ybS5lKCksIGludmVydGVk
VHJhbnNmb3JtLmYoKSB9OworCisgICAgY29udGV4dC0+YXBwbHlGRVR1cmJ1bGVuY2UoZGVzdGlu
YXRpb24sIGFic29sdXRlUGFpbnRSZWN0KCkuc2l6ZSgpLCBzX2Jsb2NrU2l6ZSwgdHJhbnNmb3Jt
Q29tcG9uZW50cywKKyAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50LCBwYWludGluZ0RhdGEu
Z3JhZGllbnQgKyAxLAorICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnQgKyAyLCBwYWludGlu
Z0RhdGEuZ3JhZGllbnQgKyAzLAorICAgICAgICBwYWludGluZ0RhdGEubGF0dGljZVNlbGVjdG9y
LCBhYnNvbHV0ZVBhaW50UmVjdCgpLngoKSwgYWJzb2x1dGVQYWludFJlY3QoKS55KCksIHBhaW50
aW5nRGF0YS5maWx0ZXJTaXplLndpZHRoKCksCisgICAgICAgIHBhaW50aW5nRGF0YS5maWx0ZXJT
aXplLmhlaWdodCgpLCBtX2Jhc2VGcmVxdWVuY3lYLCBtX2Jhc2VGcmVxdWVuY3lZLCBtX3N0aXRj
aFRpbGVzLCBtX251bU9jdGF2ZXMsIG1fdHlwZSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpICYmIEVO
QUJMRShPUEVOQ0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvb3BlbmNsL09wZW5DTEhhbmRsZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xIYW5kbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi45ZjU4NWRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xIYW5kbGUuaApAQCAtMCwwICsxLDU3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3pl
Z2VkLmh1PgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqLworI2lmIEVOQUJMRShPUEVOQ0wpCisKKyNpZm5kZWYgT3BlbkNMSGFuZGxlX2gKKyNkZWZp
bmUgT3BlbkNMSGFuZGxlX2gKKworI2luY2x1ZGUgIkNML2NsLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgT3BlbkNMSGFuZGxlIHsKK3B1YmxpYzoKKyAgICBPcGVuQ0xIYW5kbGUo
KSA6IG1fb3BlbkNMTWVtb3J5KDApIHsgfQorICAgIE9wZW5DTEhhbmRsZShjbF9tZW0gb3BlbkNM
TWVtb3J5KSA6IG1fb3BlbkNMTWVtb3J5KG9wZW5DTE1lbW9yeSkgeyB9CisKKyAgICBvcGVyYXRv
ciBjbF9tZW0oKSB7IHJldHVybiBtX29wZW5DTE1lbW9yeTsgfQorCisgICAgdm9pZCBvcGVyYXRv
cj0oT3BlbkNMSGFuZGxlIG9wZW5DTE1lbW9yeSkgeyBtX29wZW5DTE1lbW9yeSA9IG9wZW5DTE1l
bW9yeTsgfQorCisgICAgLy8gVGhpcyBjb252ZXJzaW9uIG9wZXJhdG9yIGFsbG93cyBpbXBsaWNp
dCBjb252ZXJzaW9uIHRvIGJvb2wgYnV0IG5vdCB0byBvdGhlciBpbnRlZ2VyIHR5cGVzLgorICAg
IHR5cGVkZWYgY2xfbWVtIChPcGVuQ0xIYW5kbGU6OipVbnNwZWNpZmllZEJvb2xUeXBlKTsKKyAg
ICBvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVuQ0xN
ZW1vcnkgPyAmT3BlbkNMSGFuZGxlOjptX29wZW5DTE1lbW9yeSA6IDA7IH0KKworICAgIHZvaWQq
IGhhbmRsZUFkZHJlc3MoKSB7IHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQqPigmbV9vcGVu
Q0xNZW1vcnkpOyB9CisKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAgIGlmIChtX29w
ZW5DTE1lbW9yeSkKKyAgICAgICAgICAgIGNsUmVsZWFzZU1lbU9iamVjdChtX29wZW5DTE1lbW9y
eSk7CisgICAgICAgIG1fb3BlbkNMTWVtb3J5ID0gMDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Y2xfbWVtIG1fb3BlbkNMTWVtb3J5OworfTsKKworfQorCisjZW5kaWYKKyNlbmRpZiAvLyBFTkFC
TEUoT1BFTkNMKQo=
</data>
<flag name="commit-queue"
          id="191297"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175808</attachid>
            <date>2012-11-23 07:45:20 -0800</date>
            <delta_ts>2012-11-26 04:16:47 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>0004-ocl.patch</filename>
            <type>text/plain</type>
            <size>48918</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAyZWY3ZDM2Li5jZTdiNGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzQg
QEAKKzIwMTItMTEtMjMgIFRhbWFzIEN6ZW5lICA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKwor
ICAgICAgICBPcGVuQ0wgdmVyc2lvbiBvZiBTb3VyY2VBbHBoYSwgU291cmNlR3JhcGhpY3MgYW5k
IEZFVHVyYnVsZW5jZSBmaWx0ZXIgZWZmZWN0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk4MjkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGNvbnRhaW5zIHRoZSBPcGVuQ0wgaW1wbGVt
ZW50YXRpb24gb2YgU291cmNlQWxwaGEsIFNvdXJjZUdyYXBoaWMsIEZFVHVyYnVsZW5jZSBhbmQg
YSBzaW1wbGUgT3BlbkNMIGVudmlyb25tZW50LgorICAgICAgICBUaGlzIGlzIG9ubHkgaW5jbHVk
ZWQgaW4gUXQgbGludXggYnVpbGQuCisgICAgICAgIH4zeCBzcGVlZC11cCAoZGVwZW5kaW5nIG9u
IGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24pCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAgICAg
ICAqIFdlYkNvcmUucHJpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmg6IEFkZGVkIHBsYXRmb3JtQXBwbHlPcGVuQ0woKSB2aXJ0dWFsIGZ1bmN0aW9u
LgorICAgICAgICAoRkVUdXJidWxlbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6IEFkZGVkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5Lgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJDb3Jl
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cGxhdGZvcm1BcHBseU9wZW5DTCk6
IEEgZnVuY3Rpb24gdG8gdXNlIHNvZnR3YXJlIGNvbXB1dGluZyBpZiBhIGZpbHRlciBpcyBub3Qg
aW1wbGVtZW50ZWQgb24gT3BlbkNMLiBJdCB3aWxsIGJlIGRlbGV0ZWQgYWZ0ZXIgYWxsIG9mIHRo
ZSBmaWx0ZXJzIGFyZSBpbXBsZW1lbnRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVj
dDo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojphc0ltYWdl
QnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3BlbkNMSW1hZ2VUb0lt
YWdlQnVmZmVyKTogR2V0cyB0aGUgcmVzdWx0IG9mIHRoZSBmaWx0ZXIgZnJvbSB0aGUgT3BlbkNM
IGRldmljZSBhbmQgY29udmVydHMgaXQgdG8gSW1hZ2VCdWZmZXIgdHlwZS4KKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQpOiBBbGxvY2F0ZXMg
bWVtb3J5IG9uIE9wZW5DTCBkZXZpY2UgYW5kIGlmIGl0IGdldHMgYW4gaW1hZ2UgYXMgYSBwYXJh
bWV0ZXIsIGl0IHVwbG9hZHMgdGhlIGltYWdlIHRvIHRoZSBPcGVuQ0wgZGV2aWNlLgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oOgorICAgICAg
ICAoRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3BlbkNM
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpzZXRPcGVuQ0xJbWFnZSk6
CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3VsdCk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgorICAgICAgICAoU291cmNl
QWxwaGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhp
Yy5oOgorICAgICAgICAoU291cmNlR3JhcGhpYyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQp
OiBDb25maWd1cmVzIHRoZSBPcGVuQ0wgZW52aXJvbm1lbnQuCisgICAgICAgIChXZWJDb3JlOjpG
aWx0ZXJDb250ZXh0T3BlbkNMOjpjcmVhdGVPcGVuQ0xJbWFnZSk6IEFsbG9jYXRlcyBtZW1vcnkg
b24gT3BlbkNMIGRldmljZS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6
Om9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2UpOiBPcGVuQ0wgaW1wbGVtZW50YXRpb24gb2YgdHJh
bnNmb3JtQ29sb3JTcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6
OmNvbXBpbGVQcm9ncmFtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNs
L0ZpbHRlckNvbnRleHRPcGVuQ0wuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAg
ICAgKEZpbHRlckNvbnRleHRPcGVuQ0wpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4
dE9wZW5DTDo6ZGV2aWNlSWQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5D
TDo6ZGV2aWNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNM
Ojpjb21tYW5kUXVldWUpOgorICAgICAgICAoUnVuS2VybmVsKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbHRlckNvbnRleHRPcGVuQ0w6OlJ1bktlcm5lbDo6UnVuS2VybmVsKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6OlJ1bktlcm5lbDo6YWRkQXJndW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6UnVuS2VybmVsOjpydW4pOgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6a2VybmVsQnlOYW1lKTogUmV0dXJu
cyB0aGUgcmVmZXJlbmNlIG9mIGEgZnVuY3Rpb24gaW4gdGhlIE9wZW5DTCBwcm9ncmFtLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VBbHBoYS5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VB
bHBoYTo6cGxhdGZvcm1BcHBseU9wZW5DTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUdyYXBoaWMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseU9w
ZW5DTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVR1
cmJ1bGVuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGlsZUZFVHVyYnVsZW5jZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjphcHBseUZFVHVyYnVsZW5jZSk6CisgICAgICAg
IChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlPcGVuQ0wpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFuZGxlLmg6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgIChPcGVuQ0xIYW5kbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6T3BlbkNMSGFuZGxlOjpPcGVuQ0xIYW5kbGUpOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkNM
SGFuZGxlOjpvcGVyYXRvciBjbF9tZW0pOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkNMSGFuZGxl
OjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkNMSGFuZGxlOjpvcGVyYXRvciBV
bnNwZWNpZmllZEJvb2xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DTEhhbmRsZTo6aGFu
ZGxlQWRkcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ0xIYW5kbGU6OmNsZWFyKToKKwog
MjAxMi0xMS0yMyAgVGhpYWdvIE1hcmNvcyBQLiBTYW50b3MgIDx0aGlhZ28uc2FudG9zQGludGVs
LmNvbT4KIAogICAgICAgICBFeHBvc2UgRE9NIGludGVyZmFjZSBmb3IgQ1NTIERldmljZSBBZGFw
dGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dl
YkNvcmUvVGFyZ2V0LnByaQppbmRleCAwYjdlYzQyLi5mYTEzN2E1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAg
LTQwODAsNiArNDA4MCwxOSBAQCBjb250YWlucyhDT05GSUcsIG9wZW5nbC1zaGltcykgewogICAg
IERFRklORVMgKz0gUVRfT1BFTkdMX1NISU1TPTEKIH0KIAorY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX09QRU5DTD0xKSB7CisgICAgREVGSU5FUyArPSBPUEVOQ0w9MQorCisgICAgSEVBREVSUyAr
PSBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFuZGxlLmgg
XAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVu
Q0wuaAorICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3Bl
bmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcCBcCisgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcAorfQorCiB1
c2U/KEdSQVBISUNTX1NVUkZBQ0UpIHsKICAgICBtYWMgewogICAgICAgICBTT1VSQ0VTICs9IHBs
YXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJpCmluZGV4IGYwYTQwNDIuLjY3ZTEyYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCkBAIC0yOTQsNiAr
Mjk0LDEyIEBAIHVuaXh8d2luMzItZysrKiB7CiAgICAgUU1BS0VfUEtHQ09ORklHX1JFUVVJUkVT
ID0gUXRDb3JlIFF0R3VpIFF0TmV0d29yayBRdFdpZGdldHMKIH0KIAorY29udGFpbnMoREVGSU5F
UywgRU5BQkxFX09QRU5DTD0xKSB7CisgICAgTElCUyArPSAtbE9wZW5DTAorCisgICAgSU5DTFVE
RVBBVEggKz0gJCRTT1VSQ0VfRElSL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wKK30KKwog
IyBEaXNhYmxlIEMrKzB4IG1vZGUgaW4gV2ViQ29yZSBmb3IgdGhvc2Ugd2hvIGVuYWJsZWQgaXQg
aW4gdGhlaXIgUXQncyBta3NwZWMKICotZysrKjpRTUFLRV9DWFhGTEFHUyAtPSAtc3RkPWMrKzB4
IC1zdGQ9Z251KysweAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0N2M4YmVlLi44NGZmMTEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVU
dXJidWxlbmNlLmgKQEAgLTYxLDYgKzYxLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGZp
bGxSZWdpb25Xb3JrZXIodm9pZCopOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlT
b2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3Jt
QXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAgICAgCiAg
ICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgeyBzZXRBYnNvbHV0
ZVBhaW50UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5jcHAKaW5kZXggYTJiYjU0ZC4uMGEwZjgyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAt
Miw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3Nl
ZHBlbmd1aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6
ZSA8a3JpdEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24g
TGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEyMyw2ICsxMjQs
MTAgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKICAgICB9CiAgICAgCiAgICAgLy8gQWRk
IHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGll
ci4KKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIGlmIChwbGF0Zm9ybUFwcGx5T3BlbkNMKCkpCisg
ICAgICAgIHJldHVybjsKKyNlbmRpZgogI2lmIFVTRShTS0lBKQogICAgIGlmIChwbGF0Zm9ybUFw
cGx5U2tpYSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzAsNiArMTM1LDMxIEBAIHZvaWQgRmls
dGVyRWZmZWN0OjphcHBseSgpCiAgICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CiB9CiAKKyNp
ZiBFTkFCTEUoT1BFTkNMKQorLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNoYW5nZWQgdG8gYWJz
dHJhY3QgdmlydHVhbCB3aGVuIGFsbCBmaWx0ZXJzIGFyZSBsYW5kZWQuCitib29sIEZpbHRlckVm
ZmVjdDo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgaWYgKCFGaWx0ZXJDb250ZXh0T3Bl
bkNMOjpjb250ZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIHNp
emUgPSBtX2lucHV0RWZmZWN0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNpemU7ICsraSkgeworICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMu
YXQoaSkuZ2V0KCk7CisgICAgICAgIC8vIFNvZnR3YXJlIGNvZGUgcGF0aCBleHBlY3RzIHRoYXQg
YXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmlsZWRzIGlzIHZhbGlkLgorICAgICAgICBp
ZiAoIWluLT5tX2ltYWdlQnVmZmVyUmVzdWx0ICYmICFpbi0+bV91bm11bHRpcGxpZWRJbWFnZVJl
c3VsdCAmJiAhaW4tPm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQorICAgICAgICAgICAgaW4t
PmFzSW1hZ2VCdWZmZXIoKTsKKyAgICB9CisKKyAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsK
KyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBhc0ltYWdlQnVmZmVyKCk7CisgICAgaWYg
KHNvdXJjZUltYWdlKSB7CisgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNl
SW1hZ2VEYXRhID0gc291cmNlSW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0
KEludFBvaW50KCksIHNvdXJjZUltYWdlLT5pbnRlcm5hbFNpemUoKSkpOworICAgICAgICBjcmVh
dGVPcGVuQ0xJbWFnZVJlc3VsdChzb3VyY2VJbWFnZURhdGEtPmRhdGEoKSk7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorI2VuZGlmCisKIHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlk
UHJlTXVsdGlwbGllZFBpeGVscygpCiB7CiAgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0
aXBsaWVkIHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMu
CkBAIC0xODcsNiArMjE3LDEwIEBAIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCiAg
ICAgICAgIG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuY2xlYXIoKTsKICAgICBpZiAobV9wcmVt
dWx0aXBsaWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0
LmNsZWFyKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBpZiAobV9vcGVuQ0xJbWFnZVJlc3Vs
dCkKKyAgICAgICAgbV9vcGVuQ0xJbWFnZVJlc3VsdC5jbGVhcigpOworI2VuZGlmCiB9CiAKIElt
YWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIoKQpAQCAtMTk1LDYgKzIyOSwx
MCBAQCBJbWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyKCkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCiAgICAgICAgIHJldHVybiBt
X2ltYWdlQnVmZmVyUmVzdWx0LmdldCgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgaWYgKG1f
b3BlbkNMSW1hZ2VSZXN1bHQpCisgICAgICAgIHJldHVybiBvcGVuQ0xJbWFnZVRvSW1hZ2VCdWZm
ZXIoKTsKKyNlbmRpZgogICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3Jl
YXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCAxLCBtX3Jlc3VsdENvbG9yU3BhY2UsIG1f
ZmlsdGVyLT5yZW5kZXJpbmdNb2RlKCkpOwogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KElu
dFBvaW50KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCkBAIC0yMDQsNiArMjQyLDI4IEBAIEltYWdlQnVmZmVyKiBGaWx0
ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIoKQogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0
LmdldCgpOwogfQogCisjaWYgRU5BQkxFKE9QRU5DTCkKK0ltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6Om9wZW5DTEltYWdlVG9JbWFnZUJ1ZmZlcigpCit7CisgICAgRmlsdGVyQ29udGV4dE9wZW5D
TCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAgICBBU1NFUlQo
Y29udGV4dCk7CisKKyAgICBzaXplX3Qgb3JpZ2luWzNdID0geyAwLCAwLCAwIH07CisgICAgc2l6
ZV90IHJlZ2lvblszXSA9IHsgbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRl
UGFpbnRSZWN0LmhlaWdodCgpLCAxIH07CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+
IGRlc3RpbmF0aW9uUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9hYnNv
bHV0ZVBhaW50UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQp
OworCisgICAgY2xGaW5pc2goY29udGV4dC0+Y29tbWFuZFF1ZXVlKCkpOworICAgIGNsRW5xdWV1
ZVJlYWRJbWFnZShjb250ZXh0LT5jb21tYW5kUXVldWUoKSwgbV9vcGVuQ0xJbWFnZVJlc3VsdCwg
Q0xfVFJVRSwgb3JpZ2luLCByZWdpb24sIDAsIDAsIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS0+ZGF0
YSgpLCAwLCAwLCAwKTsKKworICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6
Y3JlYXRlKG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKKyAgICBJbnRSZWN0IGRlc3RpbmF0
aW9uUmVjdChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CisgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KFVubXVsdGlwbGllZCwgZGVzdGluYXRpb25Q
aXhlbEFycmF5LmdldCgpLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3Qs
IEludFBvaW50KCkpOworCisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Cit9
CisjZW5kaWYKKwogUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojph
c1VubXVsdGlwbGllZEltYWdlKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKGlz
RmlsdGVyU2l6ZVZhbGlkKHJlY3QpKTsKQEAgLTM2Myw2ICs0MjMsMjIgQEAgVWludDhDbGFtcGVk
QXJyYXkqIEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKICAg
ICByZXR1cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CiB9CiAKKyNpZiBFTkFC
TEUoT1BFTkNMKQorT3BlbkNMSGFuZGxlIEZpbHRlckVmZmVjdDo6Y3JlYXRlT3BlbkNMSW1hZ2VS
ZXN1bHQodWludDhfdCogc291cmNlKQoreworICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOworICAg
IGNsX2ltYWdlX2Zvcm1hdCBjbEltYWdlRm9ybWF0OworICAgIGNsSW1hZ2VGb3JtYXQuaW1hZ2Vf
Y2hhbm5lbF9vcmRlciA9IENMX1JHQkE7CisgICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVs
X2RhdGFfdHlwZSA9IENMX1VOT1JNX0lOVDg7CisKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBj
b250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworICAgIEFTU0VSVChjb250
ZXh0KTsKKyAgICBtX29wZW5DTEltYWdlUmVzdWx0ID0gY2xDcmVhdGVJbWFnZTJEKGNvbnRleHQt
PmRldmljZUNvbnRleHQoKSwgQ0xfTUVNX1JFQURfV1JJVEUgfCAoc291cmNlID8gQ0xfTUVNX0NP
UFlfSE9TVF9QVFIgOiAwKSwKKyAgICAgICAgJmNsSW1hZ2VGb3JtYXQsIG1fYWJzb2x1dGVQYWlu
dFJlY3Qud2lkdGgoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSwgMCwgc291cmNlLCAw
KTsKKyAgICByZXR1cm4gbV9vcGVuQ0xJbWFnZVJlc3VsdDsKK30KKyNlbmRpZgorCiB2b2lkIEZp
bHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShDb2xvclNwYWNlIGRzdENvbG9y
U3BhY2UpCiB7CiAjaWYgVVNFKENHKQpAQCAtMzc0LDEyICs0NTAsMjcgQEAgdm9pZCBGaWx0ZXJF
ZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNl
KQogCiAgICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNz
YXJ5IEltYWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCiAgICAgLy8gY29sb3Igc3BhY2Ug
dHJhbnNmb3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgorI2lm
IEVOQUJMRShPUEVOQ0wpCisgICAgaWYgKG9wZW5DTEltYWdlKCkpIHsKKyAgICAgICAgRmlsdGVy
Q29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsK
KyAgICAgICAgQVNTRVJUKGNvbnRleHQpOworICAgICAgICBjb250ZXh0LT5vcGVuQ0xUcmFuc2Zv
cm1Db2xvclNwYWNlKG1fb3BlbkNMSW1hZ2VSZXN1bHQsIGFic29sdXRlUGFpbnRSZWN0KCksIG1f
cmVzdWx0Q29sb3JTcGFjZSwgZHN0Q29sb3JTcGFjZSk7CisgICAgICAgIGlmIChtX2ltYWdlQnVm
ZmVyUmVzdWx0KQorICAgICAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC5jbGVhcigpOworICAg
ICAgICBnb3RvIHNraXBTb2Z0d2FyZUNvZGVQYXRoOworICAgIH0KKyNlbmRpZgogICAgIGlmICgh
bV9pbWFnZUJ1ZmZlclJlc3VsdCkgewogICAgICAgICBhc0ltYWdlQnVmZmVyKCk7CiAgICAgICAg
IEFTU0VSVChtX2ltYWdlQnVmZmVyUmVzdWx0KTsKICAgICB9CiAKICAgICBtX2ltYWdlQnVmZmVy
UmVzdWx0LT50cmFuc2Zvcm1Db2xvclNwYWNlKG1fcmVzdWx0Q29sb3JTcGFjZSwgZHN0Q29sb3JT
cGFjZSk7CisKKyNpZiBFTkFCTEUoT1BFTkNMKQorc2tpcFNvZnR3YXJlQ29kZVBhdGg6CisjZW5k
aWYKKwogICAgIG1fcmVzdWx0Q29sb3JTcGFjZSA9IGRzdENvbG9yU3BhY2U7CiAKICAgICBpZiAo
bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDA2OWVkZTMuLmI5
ZjIxOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GaWx0ZXJFZmZlY3QuaApAQCAtMzMsNiArMzMsMTAgQEAKICNpbmNsdWRlIDx3dGYv
VWludDhDbGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBFTkFC
TEUoT1BFTkNMKQorI2luY2x1ZGUgIkZpbHRlckNvbnRleHRPcGVuQ0wuaCIKKyNlbmRpZgorCiBz
dGF0aWMgY29uc3QgZmxvYXQga01heEZpbHRlclNpemUgPSA1MDAwLjBmOwogCiAjaWYgVVNFKFNL
SUEpCkBAIC03MCw2ICs3NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVk
SW1hZ2UoVWludDhDbGFtcGVkQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7CiAg
ICAgdm9pZCBjb3B5UHJlbXVsdGlwbGllZEltYWdlKFVpbnQ4Q2xhbXBlZEFycmF5KiBkZXN0aW5h
dGlvbiwgY29uc3QgSW50UmVjdCYpOwogCisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBPcGVuQ0xI
YW5kbGUgb3BlbkNMSW1hZ2UoKSB7IHJldHVybiBtX29wZW5DTEltYWdlUmVzdWx0OyB9CisgICAg
dm9pZCBzZXRPcGVuQ0xJbWFnZShPcGVuQ0xIYW5kbGUgb3BlbkNMSW1hZ2UpIHsgbV9vcGVuQ0xJ
bWFnZVJlc3VsdCA9IG9wZW5DTEltYWdlOyB9CisgICAgSW1hZ2VCdWZmZXIqIG9wZW5DTEltYWdl
VG9JbWFnZUJ1ZmZlcigpOworI2VuZGlmCisKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0
RWZmZWN0cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9CiAgICAgRmlsdGVyRWZmZWN0KiBp
bnB1dEVmZmVjdCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJ
bnB1dHMoKSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7IH0KQEAgLTc3LDcg
Kzg3LDEyIEBAIHB1YmxpYzoKICAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdAogICAg
IHsKICAgICAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVj
a3MsIGlmIHRoZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBkb25lIGJ5IEZpbHRlckVmZmVjdC4K
LSAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQgfHwgbV91bm11bHRpcGxpZWRJbWFn
ZVJlc3VsdCB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICAgICAgcmV0dXJuIG1f
aW1hZ2VCdWZmZXJSZXN1bHQKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgICAgICAgICAgfHwgbV9v
cGVuQ0xJbWFnZVJlc3VsdAorI2VuZGlmCisgICAgICAgICAgICB8fCBtX3VubXVsdGlwbGllZElt
YWdlUmVzdWx0CisgICAgICAgICAgICB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKICAg
ICB9CiAKICAgICBJbnRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVj
dCYpIGNvbnN0OwpAQCAtMTAxLDYgKzExNiw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
Y29ycmVjdEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxh
dGZvcm1BcHBseVNvZnR3YXJlKCkgPSAwOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVh
bCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogI2lmIFVTRShTS0lBKQogICAg
IHZpcnR1YWwgYm9vbCBwbGF0Zm9ybUFwcGx5U2tpYSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBTa0ltYWdlRmlsdGVyKiBjcmVhdGVJbWFnZUZpbHRlcihTa2lhSW1hZ2VGaWx0ZXJC
dWlsZGVyKikgeyByZXR1cm4gMDsgfQpAQCAtMTQ5LDYgKzE2Nyw5IEBAIHByb3RlY3RlZDoKICAg
ICBJbWFnZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBVaW50OENsYW1w
ZWRBcnJheSogY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBVaW50OENsYW1w
ZWRBcnJheSogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisjaWYgRU5BQkxFKE9Q
RU5DTCkKKyAgICBPcGVuQ0xIYW5kbGUgY3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQodWludDhfdCog
PSAwKTsKKyNlbmRpZgogCiAgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3aWxsIG9u
bHkgb3BlcmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKICAgICAvLyBh
bHBoYSBpbiBbMCwyNTVdIGFuZCBlYWNoIGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxwaGFdLgpA
QCAtMTYyLDYgKzE4Myw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5
PiBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0OwogICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJh
eT4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1f
aW5wdXRFZmZlY3RzOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgT3BlbkNMSGFuZGxlIG1fb3Bl
bkNMSW1hZ2VSZXN1bHQ7CisjZW5kaWYKIAogICAgIGJvb2wgbV9hbHBoYUltYWdlOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFs
cGhhLmgKaW5kZXggOTY5MTZlOS4uYjAyMjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAtMzMsNiArMzMs
OSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZWZmZWN0TmFtZSgp
OwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJM
RShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRp
ZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5l
QWJzb2x1dGVQYWludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggYzdlODMzZS4uMTg1ZTU2
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9Tb3VyY2VHcmFwaGljLmgKQEAgLTM0LDYgKzM0LDkgQEAgcHVibGljOgogICAgIHN0YXRp
YyBjb25zdCBBdG9taWNTdHJpbmcmIGVmZmVjdE5hbWUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIHZpcnR1YWwg
Ym9vbCBwbGF0Zm9ybUFwcGx5T3BlbkNMKCk7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZHVt
cCgpOwogCiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0Zp
bHRlckNvbnRleHRPcGVuQ0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi45OWIwMDYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmNwcApAQCAt
MCwwICsxLDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6
ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3pl
Z2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBFTkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgIkZpbHRlckNvbnRleHRPcGVuQ0wu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworRmlsdGVyQ29udGV4dE9wZW5DTCogRmlsdGVyQ29u
dGV4dE9wZW5DTDo6bV9jb250ZXh0ID0gMDsKK2ludCBGaWx0ZXJDb250ZXh0T3BlbkNMOjptX2Fs
cmVhZHlJbml0aWFsaXplZCA9IDA7CitGaWx0ZXJDb250ZXh0T3BlbkNMKiBGaWx0ZXJDb250ZXh0
T3BlbkNMOjpjb250ZXh0KCkKK3sKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAgICByZXR1cm4g
bV9jb250ZXh0OworICAgIGlmIChtX2FscmVhZHlJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBtX2FscmVhZHlJbml0aWFsaXplZCA9IHRydWU7CisgICAgRmlsdGVyQ29udGV4
dE9wZW5DTCogbG9jYWxDb250ZXh0ID0gbmV3IEZpbHRlckNvbnRleHRPcGVuQ0woKTsKKworICAg
IC8vIEluaXRpYWxpemluZyB0aGUgY29udGV4dC4KKyAgICBjbF9pbnQgZXJyb3JOdW1iZXI7Cisg
ICAgY2xfZGV2aWNlX2lkKiBkZXZpY2VzOworICAgIGNsX3BsYXRmb3JtX2lkIGZpcnN0UGxhdGZv
cm1JZDsKKyAgICBzaXplX3QgZGV2aWNlQnVmZmVyU2l6ZSA9IDA7CisKKyAgICBlcnJvck51bWJl
ciA9IGNsR2V0UGxhdGZvcm1JRHMoMSwgJmZpcnN0UGxhdGZvcm1JZCwgMCk7CisgICAgY2xfY29u
dGV4dF9wcm9wZXJ0aWVzIGNvbnRleHRQcm9wZXJ0aWVzW10gPSB7IENMX0NPTlRFWFRfUExBVEZP
Uk0sIChjbF9jb250ZXh0X3Byb3BlcnRpZXMpZmlyc3RQbGF0Zm9ybUlkLCAwfTsKKyAgICBsb2Nh
bENvbnRleHQtPm1fZGV2aWNlQ29udGV4dCA9IGNsQ3JlYXRlQ29udGV4dEZyb21UeXBlKGNvbnRl
eHRQcm9wZXJ0aWVzLCBDTF9ERVZJQ0VfVFlQRV9HUFUsIDAsIDAsICZlcnJvck51bWJlcik7Cisg
ICAgaWYgKGVycm9yTnVtYmVyICE9IENMX1NVQ0NFU1MpIHsKKyAgICAgICAgbG9jYWxDb250ZXh0
LT5tX2RldmljZUNvbnRleHQgPSBjbENyZWF0ZUNvbnRleHRGcm9tVHlwZShjb250ZXh0UHJvcGVy
dGllcywgQ0xfREVWSUNFX1RZUEVfQ1BVLCAwLCAwLCAmZXJyb3JOdW1iZXIpOworICAgICAgICBp
ZiAoZXJyb3JOdW1iZXIgIT0gQ0xfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiAwOworICAg
IH0KKworICAgIGVycm9yTnVtYmVyID0gY2xHZXRDb250ZXh0SW5mbyhsb2NhbENvbnRleHQtPm1f
ZGV2aWNlQ29udGV4dCwgQ0xfQ09OVEVYVF9ERVZJQ0VTLCAwLCAwLCAmZGV2aWNlQnVmZmVyU2l6
ZSk7CisgICAgaWYgKGVycm9yTnVtYmVyICE9IENMX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiAw
OworCisgICAgaWYgKCFkZXZpY2VCdWZmZXJTaXplKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IGRldmljZXMgPSByZWludGVycHJldF9jYXN0PGNsX2RldmljZV9pZCo+KGZhc3RNYWxsb2MoZGV2
aWNlQnVmZmVyU2l6ZSkpOworICAgIGVycm9yTnVtYmVyID0gY2xHZXRDb250ZXh0SW5mbyhsb2Nh
bENvbnRleHQtPm1fZGV2aWNlQ29udGV4dCwgQ0xfQ09OVEVYVF9ERVZJQ0VTLCBkZXZpY2VCdWZm
ZXJTaXplLCBkZXZpY2VzLCAwKTsKKyAgICBpZiAoZXJyb3JOdW1iZXIgIT0gQ0xfU1VDQ0VTUykK
KyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBsb2NhbENvbnRleHQtPm1fY29tbWFuZFF1ZXVlID0g
Y2xDcmVhdGVDb21tYW5kUXVldWUobG9jYWxDb250ZXh0LT5tX2RldmljZUNvbnRleHQsIGRldmlj
ZXNbMF0sIDAsIDApOworICAgIGlmICghbG9jYWxDb250ZXh0LT5tX2NvbW1hbmRRdWV1ZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKKyAgICBsb2NhbENvbnRleHQtPm1fZGV2aWNlSWQgPSBkZXZpY2Vz
WzBdOworICAgIGZhc3RGcmVlKGRldmljZXMpOworCisgICAgY2xfYm9vbCBpbWFnZVN1cHBvcnQg
PSBDTF9GQUxTRTsKKyAgICBjbEdldERldmljZUluZm8obG9jYWxDb250ZXh0LT5tX2RldmljZUlk
LCBDTF9ERVZJQ0VfSU1BR0VfU1VQUE9SVCwgc2l6ZW9mKGNsX2Jvb2wpLCAmaW1hZ2VTdXBwb3J0
LCAwKTsKKyAgICBpZiAoaW1hZ2VTdXBwb3J0ICE9IENMX1RSVUUpCisgICAgICAgIHJldHVybiAw
OworCisgICAgbV9jb250ZXh0ID0gbG9jYWxDb250ZXh0OworICAgIHJldHVybiBtX2NvbnRleHQ7
Cit9CisKK09wZW5DTEhhbmRsZSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjcmVhdGVPcGVuQ0xJbWFn
ZShJbnRTaXplIHBhaW50U2l6ZSkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0
ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworCisgICAgY2xfaW1hZ2VfZm9ybWF0
IGNsSW1hZ2VGb3JtYXQ7CisgICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVsX29yZGVyID0g
Q0xfUkdCQTsKKyAgICBjbEltYWdlRm9ybWF0LmltYWdlX2NoYW5uZWxfZGF0YV90eXBlID0gQ0xf
VU5PUk1fSU5UODsKKworICAgIE9wZW5DTEhhbmRsZSBpbWFnZSA9IGNsQ3JlYXRlSW1hZ2UyRChj
b250ZXh0LT5kZXZpY2VDb250ZXh0KCksIENMX01FTV9SRUFEX1dSSVRFLCAmY2xJbWFnZUZvcm1h
dCwKKyAgICAgICAgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgMCwgMCwg
MCk7CisgICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgY29uc3QgY2hhciogdHJhbnNmb3Jt
Q29sb3JTcGFjZUtlcm5lbFByb2dyYW0gPQorUFJPR1JBTV9TVFIoCitjb25zdCBzYW1wbGVyX3Qg
c2FtcGxlciA9IENMS19OT1JNQUxJWkVEX0NPT1JEU19GQUxTRSB8IENMS19BRERSRVNTX0NMQU1Q
X1RPX0VER0UgfCBDTEtfRklMVEVSX05FQVJFU1Q7CisKK19fa2VybmVsIHZvaWQgdHJhbnNmb3Jt
Q29sb3JTcGFjZShfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlLCBfX3dyaXRlX29ubHkgaW1h
Z2UyZF90IGRlc3RpbmF0aW9uLCBfX2NvbnN0YW50IGZsb2F0ICpjbExvb2tVcFRhYmxlKQorewor
ICAgIGludDIgc291cmNlQ29vcmQgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9i
YWxfaWQoMSkpOworICAgIGZsb2F0NCBwaXhlbCA9IHJlYWRfaW1hZ2VmKHNvdXJjZSwgc2FtcGxl
ciwgc291cmNlQ29vcmQpOworCisgICAgcGl4ZWwgPSAoZmxvYXQ0KShjbExvb2tVcFRhYmxlWyhp
bnQpKHJvdW5kKHBpeGVsLnggKiAyNTUpKV0sIGNsTG9va1VwVGFibGVbKGludCkocm91bmQocGl4
ZWwueSAqIDI1NSkpXSwKKyAgICAgICAgY2xMb29rVXBUYWJsZVsoaW50KShyb3VuZChwaXhlbC56
ICogMjU1KSldLCBwaXhlbC53KTsKKworICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgc291
cmNlQ29vcmQsIHBpeGVsKTsKK30KKyk7CisKK3ZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6b3Bl
bkNMVHJhbnNmb3JtQ29sb3JTcGFjZShPcGVuQ0xIYW5kbGUmIHNvdXJjZSwgSW50UmVjdCBzb3Vy
Y2VTaXplLCBDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFj
ZSkKK3sKKyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE9wZW5DTEhhbmRsZSwgZGV2aWNlUmdiTFVU
LCAoKSk7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChPcGVuQ0xIYW5kbGUsIGxpbmVhclJnYkxV
VCwgKCkpOworCisgICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2VMaW5lYXJS
R0IgJiYgc3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlRGV2aWNlUkdCKQorICAgICAgICB8fCAo
ZHN0Q29sb3JTcGFjZSAhPSBDb2xvclNwYWNlTGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0g
Q29sb3JTcGFjZURldmljZVJHQikpCisgICAgICAgIHJldHVybjsKKworICAgIEZpbHRlckNvbnRl
eHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisgICAg
QVNTRVJUKGNvbnRleHQpOworCisgICAgT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uID0gY29udGV4
dC0+Y3JlYXRlT3BlbkNMSW1hZ2Uoc291cmNlU2l6ZS5zaXplKCkpOworCisgICAgaWYgKCFtX3Ry
YW5zZm9ybUNvbG9yU3BhY2VQcm9ncmFtKSB7CisgICAgICAgIG1fdHJhbnNmb3JtQ29sb3JTcGFj
ZVByb2dyYW0gPSBjb21waWxlUHJvZ3JhbSh0cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsUHJvZ3Jh
bSk7CisgICAgICAgIEFTU0VSVChtX3RyYW5zZm9ybUNvbG9yU3BhY2VQcm9ncmFtKTsKKyAgICAg
ICAgbV90cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsID0ga2VybmVsQnlOYW1lKG1fdHJhbnNmb3Jt
Q29sb3JTcGFjZVByb2dyYW0sICJ0cmFuc2Zvcm1Db2xvclNwYWNlIik7CisgICAgICAgIEFTU0VS
VChtX3RyYW5zZm9ybUNvbG9yU3BhY2VLZXJuZWwpOworICAgIH0KKworICAgIFJ1bktlcm5lbCBr
ZXJuZWwoY29udGV4dCwgbV90cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsLCBzb3VyY2VTaXplLndp
ZHRoKCksIHNvdXJjZVNpemUuaGVpZ2h0KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChzb3Vy
Y2UpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlvbik7CisKKyAgICBpZiAoZHN0
Q29sb3JTcGFjZSA9PSBDb2xvclNwYWNlTGluZWFyUkdCKSB7CisgICAgICAgIGlmICghbGluZWFy
UmdiTFVUKSB7CisgICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGxvb2tVcFRhYmxlOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgZmxvYXQgY29sb3IgPSBpICAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IChj
b2xvciA8PSAwLjA0MDQ1ZiA/IGNvbG9yIC8gMTIuOTJmIDogcG93KChjb2xvciArIDAuMDU1Zikg
LyAxLjA1NWYsIDIuNGYpKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWF4KDAuMGYs
IGNvbG9yKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWluKDEuMGYsIGNvbG9yKTsK
KyAgICAgICAgICAgICAgICBsb29rVXBUYWJsZS5hcHBlbmQoKHJvdW5kKGNvbG9yICogMjU1KSkg
LyAyNTUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZWFyUmdiTFVUID0ga2VybmVs
LmFkZEFyZ3VtZW50KGxvb2tVcFRhYmxlLmRhdGEoKSwgc2l6ZW9mKGZsb2F0KSAqIDI1Nik7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAga2VybmVsLmFkZEFyZ3VtZW50KGxpbmVhclJnYkxV
VCk7CisgICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2VEZXZpY2VSR0Ip
IHsKKyAgICAgICAgaWYgKCFkZXZpY2VSZ2JMVVQpIHsKKyAgICAgICAgICAgIFZlY3RvcjxmbG9h
dD4gbG9va1VwVGFibGU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2
OyBpKyspIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAg
ICAgICAgICAgICAgY29sb3IgPSAocG93Zihjb2xvciwgMS4wZiAvIDIuNGYpICogMS4wNTVmKSAt
IDAuMDU1ZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWF4KDAuMGYsIGNvbG9yKTsK
KyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWluKDEuMGYsIGNvbG9yKTsKKyAgICAgICAg
ICAgICAgICBsb29rVXBUYWJsZS5hcHBlbmQoKHJvdW5kKGNvbG9yICogMjU1KSkgLyAyNTUpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZGV2aWNlUmdiTFVUID0ga2VybmVsLmFkZEFyZ3Vt
ZW50KGxvb2tVcFRhYmxlLmRhdGEoKSwgc2l6ZW9mKGZsb2F0KSAqIDI1Nik7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAga2VybmVsLmFkZEFyZ3VtZW50KGRldmljZVJnYkxVVCk7CisgICAg
fQorCisgICAga2VybmVsLnJ1bigpOworICAgIHNvdXJjZS5jbGVhcigpOworICAgIHNvdXJjZSA9
IGRlc3RpbmF0aW9uOworfQorCitjbF9wcm9ncmFtIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBp
bGVQcm9ncmFtKGNvbnN0IGNoYXIqIHNvdXJjZSkKK3sKKyAgICBjbF9wcm9ncmFtIHByb2dyYW07
CisgICAgY2xfaW50IGVycm9yTnVtYmVyOworCisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29u
dGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAgICBBU1NFUlQoY29udGV4
dCk7CisKKyAgICBwcm9ncmFtID0gY2xDcmVhdGVQcm9ncmFtV2l0aFNvdXJjZShjb250ZXh0LT5t
X2RldmljZUNvbnRleHQsIDEsIChjb25zdCBjaGFyKiopICZzb3VyY2UsIDAsIDApOworICAgIGVy
cm9yTnVtYmVyID0gY2xCdWlsZFByb2dyYW0ocHJvZ3JhbSwgMCwgMCwgMCwgMCwgMCk7CisgICAg
aWYgKGVycm9yTnVtYmVyICE9IENMX1NVQ0NFU1MpIHsKKyAgICAgICAgY29udGV4dCA9IDA7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcHJvZ3JhbTsKK30KK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMmM2NzgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRl
ckNvbnRleHRPcGVuQ0wuaApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEyIFRhbWFzIEN6
ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0Yg
U1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBT
WkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIEZpbHRlckNvbnRleHRPcGVuQ0xfaAorI2RlZmluZSBGaWx0ZXJDb250ZXh0
T3BlbkNMX2gKKworI2lmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiQ0wvY2wuaCIKKyNpbmNs
dWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk9wZW5DTEhhbmRsZS5oIgorCisj
ZGVmaW5lIFBST0dSQU1fU1RSKC4uLikgICNfX1ZBX0FSR1NfXworI2RlZmluZSBQUk9HUkFNKC4u
LikgUFJPR1JBTV9TVFIoX19WQV9BUkdTX18pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgRmlsdGVyQ29udGV4dE9wZW5DTCB7CitwdWJsaWM6CisgICAgLy8gUmV0dXJucyAwIGlmIGlu
aXRpYWxpemF0aW9uIGZhaWxlZC4KKyAgICBzdGF0aWMgRmlsdGVyQ29udGV4dE9wZW5DTCogY29u
dGV4dCgpOworCisgICAgY2xfZGV2aWNlX2lkIGRldmljZUlkKCkgeyByZXR1cm4gbV9kZXZpY2VJ
ZDsgfQorICAgIGNsX2NvbnRleHQgZGV2aWNlQ29udGV4dCgpIHsgcmV0dXJuIG1fZGV2aWNlQ29u
dGV4dDsgfQorICAgIGNsX2NvbW1hbmRfcXVldWUgY29tbWFuZFF1ZXVlKCkgeyByZXR1cm4gbV9j
b21tYW5kUXVldWU7IH0KKworICAgIE9wZW5DTEhhbmRsZSBjcmVhdGVPcGVuQ0xJbWFnZShJbnRT
aXplKTsKKyAgICB2b2lkIG9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2UoT3BlbkNMSGFuZGxlJiwg
SW50UmVjdCwgQ29sb3JTcGFjZSwgQ29sb3JTcGFjZSk7CisKKyAgICBpbmxpbmUgYm9vbCBhcHBs
eUZFVHVyYnVsZW5jZShPcGVuQ0xIYW5kbGUsIEludFNpemUsIGludCwgdm9pZCosIHZvaWQqLCB2
b2lkKiwgdm9pZCosIHZvaWQqLAorICAgICAgICB2b2lkKiwgaW50LCBpbnQsIGludCwgaW50LCBm
bG9hdCwgZmxvYXQsIGJvb2wsIGludCwgaW50KTsKKworcHJpdmF0ZToKKworICAgIGNsYXNzIFJ1
bktlcm5lbCB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIFJ1bktlcm5lbChGaWx0ZXJD
b250ZXh0T3BlbkNMKiBjb250ZXh0LCBjbF9rZXJuZWwga2VybmVsLCBzaXplX3Qgd2lkdGgsIHNp
emVfdCBoZWlnaHQpCisgICAgICAgICAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyAgICAg
ICAgICAgICAgICAsIG1fa2VybmVsKGtlcm5lbCkKKyAgICAgICAgICAgICAgICAsIGluZGV4KDAp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9nbG9iYWxTaXplWzBdID0gd2lkdGg7
CisgICAgICAgICAgICAgICAgbV9nbG9iYWxTaXplWzFdID0gaGVpZ2h0OworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KE9wZW5DTEhhbmRsZSBoYW5kbGUpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2xTZXRLZXJuZWxBcmcobV9rZXJuZWwsIGlu
ZGV4KyssIHNpemVvZihPcGVuQ0xIYW5kbGUpLCBoYW5kbGUuaGFuZGxlQWRkcmVzcygpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBhZGRBcmd1bWVudChjbF9pbnQgdmFsdWUp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2xTZXRLZXJuZWxBcmcobV9rZXJuZWws
IGluZGV4KyssIHNpemVvZihjbF9pbnQpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigmdmFsdWUp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBhZGRBcmd1bWVudChjbF9mbG9h
dCB2YWx1ZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjbFNldEtlcm5lbEFyZyht
X2tlcm5lbCwgaW5kZXgrKywgc2l6ZW9mKGNsX2Zsb2F0KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oJnZhbHVlKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgYWRkQXJndW1l
bnQoY2xfc2FtcGxlciBoYW5kbGUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2xT
ZXRLZXJuZWxBcmcobV9rZXJuZWwsIGluZGV4KyssIHNpemVvZihjbF9zYW1wbGVyKSwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4oJmhhbmRsZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBPcGVuQ0xIYW5kbGUgYWRkQXJndW1lbnQodm9pZCogYnVmZmVyLCBpbnQgc2l6ZSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBPcGVuQ0xIYW5kbGUgaGFuZGxlKGNsQ3JlYXRlQnVm
ZmVyKG1fY29udGV4dC0+ZGV2aWNlQ29udGV4dCgpLCBDTF9NRU1fUkVBRF9PTkxZLCBzaXplLCAw
LCAwKSk7CisgICAgICAgICAgICAgICAgY2xFbnF1ZXVlV3JpdGVCdWZmZXIobV9jb250ZXh0LT5j
b21tYW5kUXVldWUoKSwgaGFuZGxlLCBDTF9UUlVFLCAwLCBzaXplLCBidWZmZXIsIDAsIDAsIDAp
OworICAgICAgICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBpbmRleCsrLCBzaXpl
b2YoT3BlbkNMSGFuZGxlKSwgaGFuZGxlLmhhbmRsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGhhbmRsZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9pZCBydW4o
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNsRmluaXNoKG1fY29udGV4dC0+bV9j
b21tYW5kUXVldWUpOworICAgICAgICAgICAgICAgIGNsRW5xdWV1ZU5EUmFuZ2VLZXJuZWwobV9j
b250ZXh0LT5tX2NvbW1hbmRRdWV1ZSwgbV9rZXJuZWwsIDIsIDAsIG1fZ2xvYmFsU2l6ZSwgMCwg
MCwgMCwgMCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEZpbHRlckNvbnRleHRPcGVu
Q0wqIG1fY29udGV4dDsKKyAgICAgICAgICAgIGNsX2tlcm5lbCBtX2tlcm5lbDsKKyAgICAgICAg
ICAgIHNpemVfdCBtX2dsb2JhbFNpemVbMl07CisgICAgICAgICAgICBpbnQgaW5kZXg7CisgICAg
ICAgIH07CisKKyAgICBzdGF0aWMgY2xfcHJvZ3JhbSBjb21waWxlUHJvZ3JhbShjb25zdCBjaGFy
Kik7CisgICAgc3RhdGljIGlubGluZSBjbF9rZXJuZWwga2VybmVsQnlOYW1lKGNsX3Byb2dyYW0g
cHJvZ3JhbSwgY29uc3QgY2hhciogbmFtZSkgeyByZXR1cm4gY2xDcmVhdGVLZXJuZWwocHJvZ3Jh
bSwgbmFtZSwgMCk7IH0KKworICAgIGlubGluZSBib29sIGNvbXBpbGVGRVR1cmJ1bGVuY2UoKTsK
KworICAgIHN0YXRpYyBGaWx0ZXJDb250ZXh0T3BlbkNMKiBtX2NvbnRleHQ7CisgICAgc3RhdGlj
IGludCBtX2FscmVhZHlJbml0aWFsaXplZDsKKworICAgIGNsX2RldmljZV9pZCBtX2RldmljZUlk
OworICAgIGNsX2NvbnRleHQgbV9kZXZpY2VDb250ZXh0OworICAgIGNsX2NvbW1hbmRfcXVldWUg
bV9jb21tYW5kUXVldWU7CisKKyAgICBjbF9wcm9ncmFtIG1fdHJhbnNmb3JtQ29sb3JTcGFjZVBy
b2dyYW07CisgICAgY2xfa2VybmVsIG1fdHJhbnNmb3JtQ29sb3JTcGFjZUtlcm5lbDsKKworICAg
IGNsX3Byb2dyYW0gbV90dXJidWxlbmNlUHJvZ3JhbTsKKyAgICBjbF9rZXJuZWwgbV90dXJidWxl
bmNlT3BlcmF0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKE9QRU5DTCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFU291cmNlQWxwaGEuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhh
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjkzZDA3Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9P
cGVuQ0xGRVNvdXJjZUFscGhhLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFt
YXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lU
WSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZ
IE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShGSUxURVJTKSAmJiBF
TkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisKKyNpbmNsdWRlICJGaWx0
ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJDb250ZXh0T3BlbkNMLmgiCisjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNvdXJjZUFscGhhOjpwbGF0
Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0g
RmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworCisgICAgaWYgKCFjb250ZXh0KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyAgICBJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBhc0ltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFzb3Vy
Y2VJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBl
ZEFycmF5PiBzb3VyY2VJbWFnZURhdGEgPSBzb3VyY2VJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1h
Z2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgc291cmNlSW1hZ2UtPmludGVybmFsU2l6ZSgpKSk7
CisgICAgY3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQoc291cmNlSW1hZ2VEYXRhLT5kYXRhKCkpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGlj
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNM
RkVTb3VyY2VHcmFwaGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5i
MmU5ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUdyYXBoaWMuY3BwCkBAIC0wLDAgKzEsNTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIENvcHly
aWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiU291cmNlR3JhcGhpYy5o
IgorCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5o
IgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9v
bCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICBGaWx0ZXJDb250
ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworCisg
ICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwbGF0Zm9ybUFw
cGx5U29mdHdhcmUoKTsKKyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBhc0ltYWdlQnVm
ZmVyKCk7CisgICAgaWYgKCFzb3VyY2VJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VJbWFnZURhdGEgPSBzb3VyY2VJbWFn
ZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgc291cmNlSW1h
Z2UtPmludGVybmFsU2l6ZSgpKSk7CisgICAgY3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQoc291cmNl
SW1hZ2VEYXRhLT5kYXRhKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wv
T3BlbkNMRkVUdXJidWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi44NWI2MzI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwCkBAIC0w
LDAgKzEsMjUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3pl
Z2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVn
ZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJGRVR1
cmJ1bGVuY2UuaCIKKworI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5jcHAiCisjaW5jbHVkZSAiRmls
dGVyQ29udGV4dE9wZW5DTC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiB0dXJidWxlbmNlS2VybmVsUHJvZ3JhbSA9
CitQUk9HUkFNX1NUUigKK19fY29uc3RhbnQgaW50IHNfcGVybGluTm9pc2UgPSA0MDk2OworX19j
b25zdGFudCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CitfX2NvbnN0YW50IGludCBzX2Jsb2NrTWFz
ayA9IDI1NTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCBub2lzZVBvc2l0aW9uSW50ZWdl
clZhbHVlOworICAgIGZsb2F0IG5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlOworfSBOb2lzZTsK
KwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCB3aWR0aDsKKyAgICBpbnQgd3JhcFg7CisgICAg
aW50IGhlaWdodDsKKyAgICBpbnQgd3JhcFk7Cit9IFN0aXRjaERhdGE7CisKK2Zsb2F0IGxpbmVh
ckludGVycG9sYXRpb24oZmxvYXQgdCwgZmxvYXQgYSwgZmxvYXQgYikKK3sKKyAgICByZXR1cm4g
bWFkKGIgLSBhLCB0LCBhKTsKK30KKworZmxvYXQgbm9pc2UyRChfX2NvbnN0YW50IGZsb2F0ICpj
b21wb25lbnQsIF9fY29uc3RhbnQgaW50ICpsYXR0aWNlU2VsZWN0b3IsIFN0aXRjaERhdGEgc3Rp
dGNoRGF0YSwgZmxvYXQgbm9pc2VWZWN0b3JYLCBmbG9hdCBub2lzZVZlY3RvclksIGludCBzdGl0
Y2hUaWxlcykKK3sKKyAgICBOb2lzZSBub2lzZVg7CisgICAgbm9pc2VYLm5vaXNlUG9zaXRpb25J
bnRlZ2VyVmFsdWUgPSAoaW50KShub2lzZVZlY3RvclggKyBzX3Blcmxpbk5vaXNlKTsKKyAgICBu
b2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgPSAobm9pc2VWZWN0b3JYICsgc19wZXJs
aW5Ob2lzZSkgLSBub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZTsKKyAgICBOb2lzZSBu
b2lzZVk7CisgICAgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPSAoaW50KShub2lz
ZVZlY3RvclkgKyBzX3Blcmxpbk5vaXNlKTsKKyAgICBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0
aW9uVmFsdWUgPSAobm9pc2VWZWN0b3JZICsgc19wZXJsaW5Ob2lzZSkgLSBub2lzZVkubm9pc2VQ
b3NpdGlvbkludGVnZXJWYWx1ZTsKKworICAgIC8vIElmIHN0aXRjaGluZywgYWRqdXN0IGxhdHRp
Y2UgcG9pbnRzIGFjY29yZGluZ2x5LgorICAgIGlmIChzdGl0Y2hUaWxlcykgeworICAgICAgICBp
ZiAobm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPj0gc3RpdGNoRGF0YS53cmFwWCkK
KyAgICAgICAgICAgIG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlIC09IHN0aXRjaERh
dGEud2lkdGg7CisgICAgICAgIGlmIChub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSA+
PSBzdGl0Y2hEYXRhLndyYXBYIC0gMSkKKyAgICAgICAgICAgIG5vaXNlWC5ub2lzZVBvc2l0aW9u
SW50ZWdlclZhbHVlIC09IHN0aXRjaERhdGEud2lkdGggLSAxOworICAgICAgICBpZiAobm9pc2VZ
Lm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPj0gc3RpdGNoRGF0YS53cmFwWSkKKyAgICAgICAg
ICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlIC09IHN0aXRjaERhdGEuaGVpZ2h0
OworICAgICAgICBpZiAobm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPj0gc3RpdGNo
RGF0YS53cmFwWSAtIDEpCisgICAgICAgICAgICBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJW
YWx1ZSAtPSBzdGl0Y2hEYXRhLmhlaWdodCAtIDE7CisgICAgfQorCisgICAgbm9pc2VYLm5vaXNl
UG9zaXRpb25JbnRlZ2VyVmFsdWUgJj0gc19ibG9ja01hc2s7CisgICAgbm9pc2VZLm5vaXNlUG9z
aXRpb25JbnRlZ2VyVmFsdWUgJj0gc19ibG9ja01hc2s7CisgICAgaW50IGxhdHRpY2VJbmRleCA9
IGxhdHRpY2VTZWxlY3Rvcltub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZV07CisgICAg
aW50IG5leHRMYXR0aWNlSW5kZXggPSBsYXR0aWNlU2VsZWN0b3JbKG5vaXNlWC5ub2lzZVBvc2l0
aW9uSW50ZWdlclZhbHVlICsgMSkgJiBzX2Jsb2NrTWFza107CisKKyAgICBmbG9hdCBzeCA9IG5v
aXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJh
Y3Rpb25WYWx1ZSAqICgzIC0gMiAqIG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSk7
CisgICAgZmxvYXQgc3kgPSBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBub2lz
ZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiAoMyAtIDIgKiBub2lzZVkubm9pc2VQb3Np
dGlvbkZyYWN0aW9uVmFsdWUpOworCisgICAgLy8gVGhpcyBpcyB0YWtlbiAxOjEgZnJvbSBTVkcg
c3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1sI2ZlVHVyYnVsZW5j
ZUVsZW1lbnQuCisgICAgaW50IHRlbXAgPSBsYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsg
bm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOworICAgIGZsb2F0IHUgPSBub2lzZVgu
bm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBjb21wb25lbnRbdGVtcCAqIDJdICsgbm9pc2VZ
Lm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogY29tcG9uZW50W3RlbXAgKiAyICsgMV07Cisg
ICAgdGVtcCA9IGxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNl
UG9zaXRpb25JbnRlZ2VyVmFsdWVdOworICAgIGZsb2F0IHYgPSAobm9pc2VYLm5vaXNlUG9zaXRp
b25GcmFjdGlvblZhbHVlIC0gMSkgKiBjb21wb25lbnRbdGVtcCAqIDJdICsgbm9pc2VZLm5vaXNl
UG9zaXRpb25GcmFjdGlvblZhbHVlICogY29tcG9uZW50W3RlbXAgKiAyICsgMV07CisgICAgZmxv
YXQgYSA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOworICAgIHRlbXAgPSBsYXR0aWNl
U2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUg
KyAxXTsKKyAgICB1ID0gbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogY29tcG9u
ZW50W3RlbXAgKiAyXSArIChub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAq
IGNvbXBvbmVudFt0ZW1wICogMiArIDFdOworICAgIHRlbXAgPSBsYXR0aWNlU2VsZWN0b3JbbmV4
dExhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsgMV07Cisg
ICAgdiA9IChub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAxKSAqIGNvbXBvbmVu
dFt0ZW1wICogMl0gKyAobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBj
b21wb25lbnRbdGVtcCAqIDIgKyAxXTsKKyAgICBmbG9hdCBiID0gbGluZWFySW50ZXJwb2xhdGlv
bihzeCwgdSwgdik7CisgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24oc3ksIGEsIGIpOwor
fQorCitfX2tlcm5lbCB2b2lkIFR1cmJ1bGVuY2UoX193cml0ZV9vbmx5IGltYWdlMmRfdCBkZXN0
aW5hdGlvbiwgX19jb25zdGFudCBmbG9hdCAqdHJhbnNmb3JtLCBfX2NvbnN0YW50IGZsb2F0ICpy
ZWRDb21wb25lbnQsCisgICAgX19jb25zdGFudCBmbG9hdCAqZ3JlZW5Db21wb25lbnQsIF9fY29u
c3RhbnQgZmxvYXQgKmJsdWVDb21wb25lbnQsIF9fY29uc3RhbnQgZmxvYXQgKmFscGhhQ29tcG9u
ZW50LAorICAgIF9fY29uc3RhbnQgaW50ICpsYXR0aWNlU2VsZWN0b3IsIF9fcHJpdmF0ZSBpbnQg
b2Zmc2V0WCwgX19wcml2YXRlIGludCBvZmZzZXRZLCBfX3ByaXZhdGUgaW50IHRpbGVXaWR0aCwK
KyAgICBfX3ByaXZhdGUgaW50IHRpbGVIZWlnaHQsIF9fcHJpdmF0ZSBmbG9hdCBiYXNlRnJlcXVl
bmN5WCwgX19wcml2YXRlIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBfX3ByaXZhdGUgaW50IHN0aXRj
aFRpbGVzLAorICAgIF9fcHJpdmF0ZSBpbnQgbnVtT2N0YXZlcywgX19wcml2YXRlIGludCB0eXBl
LCBfX3ByaXZhdGUgaW50IGZpbHRlcl9oZWlnaHQpCit7CisgICAgU3RpdGNoRGF0YSBzdGl0Y2hE
YXRhID0geyAwLCAwLCAwLCAwIH07CisgICAgLy8gQWRqdXN0IHRoZSBiYXNlIGZyZXF1ZW5jaWVz
IGlmIG5lY2Vzc2FyeSBmb3Igc3RpdGNoaW5nLgorICAgIGlmIChzdGl0Y2hUaWxlcykgeworICAg
ICAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNlLCB0aGUgZnJlcXVlbmNpZXMg
bXVzdCBiZSBhZGp1c3RlZAorICAgICAgICAvLyBzbyB0aGF0IHRoZSB0aWxlIGJvcmRlcnMgd2ls
bCBiZSBjb250aW51b3VzLgorICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVgpIHsKKyAgICAgICAg
ICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lY
KSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVuY3kgPSBjZWlsKHRp
bGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgIC8vIEJh
c2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcgdG8gdGhlIHN0YW5k
YXJkLgorICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSAoYmFzZUZyZXF1ZW5jeVggLyBsb3dG
cmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpID8gbG93RnJlcXVlbmN5
IDogaGlnaEZyZXF1ZW5jeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVkp
IHsKKyAgICAgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yKHRpbGVIZWlnaHQgKiBi
YXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICAgICAgZmxvYXQgaGlnaEZyZXF1
ZW5jeSA9IGNlaWwodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRpbGVIZWlnaHQ7Cisg
ICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IChiYXNlRnJlcXVlbmN5WSAvIGxvd0ZyZXF1ZW5j
eSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkgPyBsb3dGcmVxdWVuY3kgOiBoaWdo
RnJlcXVlbmN5OworICAgICAgICB9CisgICAgICAgIC8vIFNldCB1cCBUdXJidWxlbmNlSW5pdGlh
bCBzdGl0Y2ggdmFsdWVzLgorICAgICAgICBzdGl0Y2hEYXRhLndpZHRoID0gcm91bmQodGlsZVdp
ZHRoICogYmFzZUZyZXF1ZW5jeVgpOworICAgICAgICBzdGl0Y2hEYXRhLndyYXBYID0gc19wZXJs
aW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7CisgICAgICAgIHN0aXRjaERhdGEuaGVpZ2h0ID0g
cm91bmQodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKKyAgICAgICAgc3RpdGNoRGF0YS53
cmFwWSA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdodDsKKyAgICB9CisgICAgZmxv
YXQ0IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IChmbG9hdDQpKDAsIDAsIDAsIDApOworICAg
IGZsb2F0IHggPSAoZ2V0X2dsb2JhbF9pZCgwKSArIG9mZnNldFgpICogYmFzZUZyZXF1ZW5jeVg7
CisgICAgZmxvYXQgeSA9IChnZXRfZ2xvYmFsX2lkKDEpICsgb2Zmc2V0WSkgKiBiYXNlRnJlcXVl
bmN5WTsKKworICAgIGZsb2F0IG5vaXNlVmVjdG9yWCA9IHRyYW5zZm9ybVswXSAqIHggKyB0cmFu
c2Zvcm1bMl0gKiB5ICsgdHJhbnNmb3JtWzRdOworICAgIGZsb2F0IG5vaXNlVmVjdG9yWSA9IHRy
YW5zZm9ybVsxXSAqIHggKyB0cmFuc2Zvcm1bM10gKiB5ICsgdHJhbnNmb3JtWzVdOworCisgICAg
ZmxvYXQgcmF0aW8gPSAxOworICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9jdGF2ZSA8IG51bU9j
dGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGZsb2F0NCBub2lzZTJEUmVzdWx0ID0gKGZsb2F0
NCkoIG5vaXNlMkQocmVkQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5v
aXNlVmVjdG9yWCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRpbywKKyAgICBub2lz
ZTJEKGdyZWVuQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5vaXNlVmVj
dG9yWCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRpbywKKyAgICBub2lzZTJEKGJs
dWVDb21wb25lbnQsIGxhdHRpY2VTZWxlY3Rvciwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3JYLCBu
b2lzZVZlY3RvclksIHN0aXRjaFRpbGVzKSAvIHJhdGlvLAorICAgIG5vaXNlMkQoYWxwaGFDb21w
b25lbnQsIGxhdHRpY2VTZWxlY3Rvciwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0b3JYLCBub2lzZVZl
Y3RvclksIHN0aXRjaFRpbGVzKSAvIHJhdGlvKTsKKworICAgICAgICB0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgKz0gKHR5cGUgPT0gMSkgPyBub2lzZTJEUmVzdWx0IDogZmFicyhub2lzZTJEUmVz
dWx0KTsKKworICAgICAgICBub2lzZVZlY3RvclggKj0gMjsKKyAgICAgICAgbm9pc2VWZWN0b3JZ
ICo9IDI7CisgICAgICAgIHJhdGlvICo9IDI7CisgICAgICAgIGlmIChzdGl0Y2hUaWxlcykgewor
ICAgICAgICAgICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0aW5nIHNfcGVybGlu
Tm9pc2VvaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5kCisgICAgICAgICAgICAvLyBh
ZGRpbmcgaXQgYWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3VidHJhY3RpbmcgaXQgb25jZS4KKyAg
ICAgICAgICAgIHN0aXRjaERhdGEud2lkdGggKj0gMjsKKyAgICAgICAgICAgIHN0aXRjaERhdGEu
d3JhcFggPSAyICogc3RpdGNoRGF0YS53cmFwWCAtIHNfcGVybGluTm9pc2U7CisgICAgICAgICAg
ICBzdGl0Y2hEYXRhLmhlaWdodCAqPSAyOworICAgICAgICAgICAgc3RpdGNoRGF0YS53cmFwWSA9
IDIgKiBzdGl0Y2hEYXRhLndyYXBZIC0gc19wZXJsaW5Ob2lzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICh0eXBlID09IDEpCisgICAgICAgIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9
IG1hZCgwLjVmLCB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQsIDAuNWYpOworICAgIC8vIENsYW1w
IHJlc3VsdC4KKyAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSBjbGFtcCh0dXJidWxlbmNl
RnVuY3Rpb25SZXN1bHQsIDAuMGYsIDEuMGYpOworCisgICAgd3JpdGVfaW1hZ2VmKGRlc3RpbmF0
aW9uLCAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgxKSksIHR1cmJ1bGVu
Y2VGdW5jdGlvblJlc3VsdCk7Cit9CispOworCitpbmxpbmUgYm9vbCBGaWx0ZXJDb250ZXh0T3Bl
bkNMOjpjb21waWxlRkVUdXJidWxlbmNlKCkKK3sKKyAgICBpZiAoIW1fdHVyYnVsZW5jZU9wZXJh
dGlvbikgeworICAgICAgICBtX3R1cmJ1bGVuY2VQcm9ncmFtID0gY29tcGlsZVByb2dyYW0odHVy
YnVsZW5jZUtlcm5lbFByb2dyYW0pOworICAgICAgICBpZiAoIW1fdHVyYnVsZW5jZVByb2dyYW0p
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIG1fdHVyYnVsZW5jZU9wZXJhdGlv
biA9IGtlcm5lbEJ5TmFtZShtX3R1cmJ1bGVuY2VQcm9ncmFtLCAiVHVyYnVsZW5jZSIpOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworaW5saW5lIGJvb2wgRmlsdGVyQ29udGV4dE9wZW5D
TDo6YXBwbHlGRVR1cmJ1bGVuY2UoT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uLAorICAgIEludFNp
emUgZGVzdGluYXRpb25TaXplLCBpbnQgYmxvY2tTaXplLAorICAgIHZvaWQqIHRyYW5zZm9ybSwg
dm9pZCogcmVkQ29tcG9uZW50LCB2b2lkKiBncmVlbkNvbXBvbmVudCwKKyAgICB2b2lkKiBibHVl
Q29tcG9uZW50LCB2b2lkKiBhbHBoYUNvbXBvbmVudCwKKyAgICB2b2lkKiBsYXR0aWNlU2VsZWN0
b3IsIGludCBvZmZzZXRYLCBpbnQgb2Zmc2V0WSwgaW50IHRpbGVXaWR0aCwgaW50IHRpbGVIZWln
aHQsCisgICAgZmxvYXQgYmFzZUZyZXF1ZW5jeVgsIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBib29s
IHN0aXRjaFRpbGVzLCBpbnQgbnVtT2N0YXZlcywgaW50IHR5cGUpCit7CisgICAgaWYgKCFjb21w
aWxlRkVUdXJidWxlbmNlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJ1bktlcm5l
bCBrZXJuZWwodGhpcywgbV90dXJidWxlbmNlT3BlcmF0aW9uLCBkZXN0aW5hdGlvblNpemUud2lk
dGgoKSwgZGVzdGluYXRpb25TaXplLmhlaWdodCgpKTsKKworICAgIGtlcm5lbC5hZGRBcmd1bWVu
dChkZXN0aW5hdGlvbik7CisgICAgT3BlbkNMSGFuZGxlIHRyYW5zZm9ybUhhbmRsZShrZXJuZWwu
YWRkQXJndW1lbnQodHJhbnNmb3JtLCBzaXplb2YoZmxvYXQpICogNikpOworICAgIE9wZW5DTEhh
bmRsZSByZWRDb21wb25lbnRIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KHJlZENvbXBvbmVudCwg
c2l6ZW9mKGZsb2F0KSAqICgyICogYmxvY2tTaXplICsgMikgKiAyKSk7CisgICAgT3BlbkNMSGFu
ZGxlIGdyZWVuQ29tcG9uZW50SGFuZGxlKGtlcm5lbC5hZGRBcmd1bWVudChncmVlbkNvbXBvbmVu
dCwgc2l6ZW9mKGZsb2F0KSAqICgyICogYmxvY2tTaXplICsgMikgKiAyKSk7CisgICAgT3BlbkNM
SGFuZGxlIGJsdWVDb21wb25lbnRIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KGJsdWVDb21wb25l
bnQsIHNpemVvZihmbG9hdCkgKiAoMiAqIGJsb2NrU2l6ZSArIDIpICogMikpOworICAgIE9wZW5D
TEhhbmRsZSBhbHBoYUNvbXBvbmVudEhhbmRsZShrZXJuZWwuYWRkQXJndW1lbnQoYWxwaGFDb21w
b25lbnQsIHNpemVvZihmbG9hdCkgKiAoMiAqIGJsb2NrU2l6ZSArIDIpICogMikpOworICAgIE9w
ZW5DTEhhbmRsZSBsYXR0aWNlU2VsZWN0b3JIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KGxhdHRp
Y2VTZWxlY3Rvciwgc2l6ZW9mKGludCkgKiAoMiAqIGJsb2NrU2l6ZSArIDIpKSk7CisgICAga2Vy
bmVsLmFkZEFyZ3VtZW50KG9mZnNldFgpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChvZmZzZXRZ
KTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQodGlsZVdpZHRoKTsKKyAgICBrZXJuZWwuYWRkQXJn
dW1lbnQodGlsZUhlaWdodCk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KGJhc2VGcmVxdWVuY3lY
KTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoYmFzZUZyZXF1ZW5jeVkpOworICAgIGtlcm5lbC5h
ZGRBcmd1bWVudChzdGl0Y2hUaWxlcyk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KG51bU9jdGF2
ZXMpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudCh0eXBlKTsKKyAgICBrZXJuZWwuYWRkQXJndW1l
bnQoZGVzdGluYXRpb25TaXplLmhlaWdodCgpKTsKKworICAgIGtlcm5lbC5ydW4oKTsKKworICAg
IHRyYW5zZm9ybUhhbmRsZS5jbGVhcigpOworICAgIHJlZENvbXBvbmVudEhhbmRsZS5jbGVhcigp
OworICAgIGdyZWVuQ29tcG9uZW50SGFuZGxlLmNsZWFyKCk7CisgICAgYmx1ZUNvbXBvbmVudEhh
bmRsZS5jbGVhcigpOworICAgIGFscGhhQ29tcG9uZW50SGFuZGxlLmNsZWFyKCk7CisgICAgbGF0
dGljZVNlbGVjdG9ySGFuZGxlLmNsZWFyKCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlPcGVuQ0woKQoreworICAgIEZpbHRlckNvbnRl
eHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisgICAg
aWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBPcGVuQ0xIYW5kbGUg
ZGVzdGluYXRpb24gPSBjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCgpOworCisgICAgUGFpbnRpbmdE
YXRhIHBhaW50aW5nRGF0YShtX3NlZWQsIHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbigpLnNpemUoKSkpOworICAgIGluaXRQYWludChwYWludGluZ0RhdGEpOworCisgICAg
QWZmaW5lVHJhbnNmb3JtIGludmVydGVkVHJhbnNmb3JtID0gcmVpbnRlcnByZXRfY2FzdDxTVkdG
aWx0ZXIqPihmaWx0ZXIoKSktPmFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJzZSgpOworICAgIGZs
b2F0IHRyYW5zZm9ybUNvbXBvbmVudHNbNl0gPSB7IGludmVydGVkVHJhbnNmb3JtLmEoKSwgaW52
ZXJ0ZWRUcmFuc2Zvcm0uYigpLCBpbnZlcnRlZFRyYW5zZm9ybS5jKCksIGludmVydGVkVHJhbnNm
b3JtLmQoKSwgaW52ZXJ0ZWRUcmFuc2Zvcm0uZSgpLCBpbnZlcnRlZFRyYW5zZm9ybS5mKCkgfTsK
KworICAgIGludCByZXN1bHQgPSBjb250ZXh0LT5hcHBseUZFVHVyYnVsZW5jZShkZXN0aW5hdGlv
biwgYWJzb2x1dGVQYWludFJlY3QoKS5zaXplKCksIHNfYmxvY2tTaXplLCB0cmFuc2Zvcm1Db21w
b25lbnRzLAorICAgICAgICBwYWludGluZ0RhdGEuZ3JhZGllbnQsIHBhaW50aW5nRGF0YS5ncmFk
aWVudCArIDEsCisgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudCArIDIsIHBhaW50aW5nRGF0
YS5ncmFkaWVudCArIDMsCisgICAgICAgIHBhaW50aW5nRGF0YS5sYXR0aWNlU2VsZWN0b3IsIGFi
c29sdXRlUGFpbnRSZWN0KCkueCgpLCBhYnNvbHV0ZVBhaW50UmVjdCgpLnkoKSwgcGFpbnRpbmdE
YXRhLmZpbHRlclNpemUud2lkdGgoKSwKKyAgICAgICAgcGFpbnRpbmdEYXRhLmZpbHRlclNpemUu
aGVpZ2h0KCksIG1fYmFzZUZyZXF1ZW5jeVgsIG1fYmFzZUZyZXF1ZW5jeVksIG1fc3RpdGNoVGls
ZXMsIG1fbnVtT2N0YXZlcywgbV90eXBlKTsKKworICAgIGlmIChyZXN1bHQpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgY2xlYXJSZXN1bHQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBF
TkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L29wZW5jbC9PcGVuQ0xIYW5kbGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uOWY1ODVkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFuZGxlLmgKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6
ZWdlZC5odT4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKi8KKyNpZiBFTkFCTEUoT1BFTkNMKQorCisjaWZuZGVmIE9wZW5DTEhhbmRsZV9oCisjZGVm
aW5lIE9wZW5DTEhhbmRsZV9oCisKKyNpbmNsdWRlICJDTC9jbC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIE9wZW5DTEhhbmRsZSB7CitwdWJsaWM6CisgICAgT3BlbkNMSGFuZGxl
KCkgOiBtX29wZW5DTE1lbW9yeSgwKSB7IH0KKyAgICBPcGVuQ0xIYW5kbGUoY2xfbWVtIG9wZW5D
TE1lbW9yeSkgOiBtX29wZW5DTE1lbW9yeShvcGVuQ0xNZW1vcnkpIHsgfQorCisgICAgb3BlcmF0
b3IgY2xfbWVtKCkgeyByZXR1cm4gbV9vcGVuQ0xNZW1vcnk7IH0KKworICAgIHZvaWQgb3BlcmF0
b3I9KE9wZW5DTEhhbmRsZSBvcGVuQ0xNZW1vcnkpIHsgbV9vcGVuQ0xNZW1vcnkgPSBvcGVuQ0xN
ZW1vcnk7IH0KKworICAgIC8vIFRoaXMgY29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGlj
aXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAg
ICB0eXBlZGVmIGNsX21lbSAoT3BlbkNMSGFuZGxlOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7Cisg
ICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkNM
TWVtb3J5ID8gJk9wZW5DTEhhbmRsZTo6bV9vcGVuQ0xNZW1vcnkgOiAwOyB9CisKKyAgICB2b2lk
KiBoYW5kbGVBZGRyZXNzKCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJm1fb3Bl
bkNMTWVtb3J5KTsgfQorCisgICAgdm9pZCBjbGVhcigpCisgICAgeworICAgICAgICBpZiAobV9v
cGVuQ0xNZW1vcnkpCisgICAgICAgICAgICBjbFJlbGVhc2VNZW1PYmplY3QobV9vcGVuQ0xNZW1v
cnkpOworICAgICAgICBtX29wZW5DTE1lbW9yeSA9IDA7CisgICAgfQorCitwcml2YXRlOgorICAg
IGNsX21lbSBtX29wZW5DTE1lbW9yeTsKK307CisKK30KKworI2VuZGlmCisjZW5kaWYgLy8gRU5B
QkxFKE9QRU5DTCkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175967</attachid>
            <date>2012-11-26 04:16:47 -0800</date>
            <delta_ts>2012-11-26 06:43:57 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>0005-ocl.patch</filename>
            <type>text/plain</type>
            <size>49288</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZDFmMTU4Li45NGY0ZTFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzQg
QEAKKzIwMTItMTEtMjYgIFRhbWFzIEN6ZW5lICA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKwor
ICAgICAgICBPcGVuQ0wgdmVyc2lvbiBvZiBTb3VyY2VBbHBoYSwgU291cmNlR3JhcGhpY3MgYW5k
IEZFVHVyYnVsZW5jZSBmaWx0ZXIgZWZmZWN0cyAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5ODI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjb250YWlucyB0aGUgT3BlbkNMIGltcGxl
bWVudGF0aW9uIG9mIFNvdXJjZUFscGhhLCBTb3VyY2VHcmFwaGljLCBGRVR1cmJ1bGVuY2UgYW5k
IGEgc2ltcGxlIE9wZW5DTCBlbnZpcm9ubWVudC4gCisgICAgICAgIFRoaXMgaXMgb25seSBpbmNs
dWRlZCBpbiBRdCBsaW51eCBidWlsZC4gCisgICAgICAgIH4zeCBzcGVlZC11cCAoZGVwZW5kaW5n
IG9uIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24pCisKKyAgICAgICAgKiBUYXJnZXQucHJpOgorICAg
ICAgICAqIFdlYkNvcmUucHJpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVUdXJidWxlbmNlLmg6IEFkZGVkIHBsYXRmb3JtQXBwbHlPcGVuQ0woKSB2aXJ0dWFsIGZ1bmN0
aW9uLgorICAgICAgICAoRkVUdXJidWxlbmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA6IEFkZGVkIHBsYXRmb3JtIHNwZWNpZmljIGFwcGx5
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjphcHBseSk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6cGxhdGZvcm1BcHBseU9wZW5D
TCk6IEEgZnVuY3Rpb24gdG8gdXNlIHNvZnR3YXJlIGNvbXB1dGluZyBpZiBhIGZpbHRlciBpcyBu
b3QgaW1wbGVtZW50ZWQgb24gT3BlbkNMLiBJdCB3aWxsIGJlIGRlbGV0ZWQgYWZ0ZXIgYWxsIG9m
IHRoZSBmaWx0ZXJzIGFyZSBpbXBsZW1lbnRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVm
ZmVjdDo6Y2xlYXJSZXN1bHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojphc0lt
YWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6b3BlbkNMSW1hZ2VU
b0ltYWdlQnVmZmVyKTogR2V0cyB0aGUgcmVzdWx0IG9mIHRoZSBmaWx0ZXIgZnJvbSB0aGUgT3Bl
bkNMIGRldmljZSBhbmQgY29udmVydHMgaXQgdG8gSW1hZ2VCdWZmZXIgdHlwZS4KKyAgICAgICAg
KFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6Y3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQpOiBBbGxvY2F0
ZXMgbWVtb3J5IG9uIE9wZW5DTCBkZXZpY2UgYW5kIGlmIGl0IGdldHMgYW4gaW1hZ2UgYXMgYSBw
YXJhbWV0ZXIsIGl0IHVwbG9hZHMgdGhlIGltYWdlIHRvIHRoZSBPcGVuQ0wgZGV2aWNlLgorICAg
ICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1SZXN1bHRDb2xvclNwYWNlKTog
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaDoKKyAg
ICAgICAgKEZpbHRlckVmZmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Om9w
ZW5DTEltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckVmZmVjdDo6c2V0T3BlbkNMSW1h
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpoYXNSZXN1bHQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaDoKKyAgICAgICAgKFNv
dXJjZUFscGhhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdy
YXBoaWMuaDoKKyAgICAgICAgKFNvdXJjZUdyYXBoaWMpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250
ZXh0KTogQ29uZmlndXJlcyB0aGUgT3BlbkNMIGVudmlyb25tZW50LgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6Y3JlYXRlT3BlbkNMSW1hZ2UpOiBBbGxvY2F0ZXMgbWVt
b3J5IG9uIE9wZW5DTCBkZXZpY2UuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3Bl
bkNMOjpvcGVuQ0xUcmFuc2Zvcm1Db2xvclNwYWNlKTogT3BlbkNMIGltcGxlbWVudGF0aW9uIG9m
IHRyYW5zZm9ybUNvbG9yU3BhY2UuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3Bl
bkNMOjpjb21waWxlUHJvZ3JhbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29w
ZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChGaWx0ZXJDb250ZXh0T3BlbkNMKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNv
bnRleHRPcGVuQ0w6OmRldmljZUlkKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRP
cGVuQ0w6OmRldmljZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9w
ZW5DTDo6Y29tbWFuZFF1ZXVlKToKKyAgICAgICAgKFJ1bktlcm5lbCk6CisgICAgICAgIChXZWJD
b3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpSdW5LZXJuZWw6OlJ1bktlcm5lbCk6CisgICAgICAg
IChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpSdW5LZXJuZWw6OmFkZEFyZ3VtZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6OlJ1bktlcm5lbDo6cnVuKToK
KyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6Omtlcm5lbEJ5TmFtZSk6IFJl
dHVybnMgdGhlIHJlZmVyZW5jZSBvZiBhIGZ1bmN0aW9uIGluIHRoZSBPcGVuQ0wgcHJvZ3JhbS4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFU291cmNlQWxw
aGEuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U291
cmNlQWxwaGE6OnBsYXRmb3JtQXBwbHlPcGVuQ0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUdyYXBoaWM6OnBsYXRmb3JtQXBw
bHlPcGVuQ0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNM
RkVUdXJidWxlbmNlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVGRVR1cmJ1bGVuY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6YXBwbHlGRVR1cmJ1bGVuY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEhhbmRsZS5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoT3BlbkNMSGFuZGxlKToKKyAgICAgICAgKFdl
YkNvcmU6Ok9wZW5DTEhhbmRsZTo6T3BlbkNMSGFuZGxlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9w
ZW5DTEhhbmRsZTo6b3BlcmF0b3IgY2xfbWVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DTEhh
bmRsZTo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5DTEhhbmRsZTo6b3BlcmF0
b3IgVW5zcGVjaWZpZWRCb29sVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ0xIYW5kbGU6
OmhhbmRsZUFkZHJlc3MpOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkNMSGFuZGxlOjpjbGVhcik6
CisKIDIwMTItMTEtMjYgIEhhamltZSBNb3JyaXRhICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAg
ICAgICAgIFtTaGFkb3cgRE9NXSBJbXBsZW1lbnQgRWxlbWVudDo6Y3JlYXRlU2hhZG93Um9vdCgp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUv
VGFyZ2V0LnByaQppbmRleCBjOTcwZjVlLi5iYjcwYWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQwODEs
NiArNDA4MSwxOSBAQCBjb250YWlucyhDT05GSUcsIG9wZW5nbC1zaGltcykgewogICAgIERFRklO
RVMgKz0gUVRfT1BFTkdMX1NISU1TPTEKIH0KIAorY29udGFpbnMoREVGSU5FUywgRU5BQkxFX09Q
RU5DTD0xKSB7CisgICAgREVGSU5FUyArPSBPUEVOQ0w9MQorCisgICAgSEVBREVSUyArPSBcCisg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFuZGxlLmggXAorICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuaAor
ICAgIFNPVVJDRVMgKz0gXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0Zp
bHRlckNvbnRleHRPcGVuQ0wuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29w
ZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNwcCBcCisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcCBcCisgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcAorfQorCiB1c2U/KEdS
QVBISUNTX1NVUkZBQ0UpIHsKICAgICBtYWMgewogICAgICAgICBTT1VSQ0VTICs9IHBsYXRmb3Jt
L2dyYXBoaWNzL3N1cmZhY2VzL21hYy9HcmFwaGljc1N1cmZhY2VNYWMuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJp
CmluZGV4IGYwYTQwNDIuLjY3ZTEyYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJpCkBAIC0yOTQsNiArMjk0LDEy
IEBAIHVuaXh8d2luMzItZysrKiB7CiAgICAgUU1BS0VfUEtHQ09ORklHX1JFUVVJUkVTID0gUXRD
b3JlIFF0R3VpIFF0TmV0d29yayBRdFdpZGdldHMKIH0KIAorY29udGFpbnMoREVGSU5FUywgRU5B
QkxFX09QRU5DTD0xKSB7CisgICAgTElCUyArPSAtbE9wZW5DTAorCisgICAgSU5DTFVERVBBVEgg
Kz0gJCRTT1VSQ0VfRElSL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wKK30KKwogIyBEaXNh
YmxlIEMrKzB4IG1vZGUgaW4gV2ViQ29yZSBmb3IgdGhvc2Ugd2hvIGVuYWJsZWQgaXQgaW4gdGhl
aXIgUXQncyBta3NwZWMKICotZysrKjpRTUFLRV9DWFhGTEFHUyAtPSAtc3RkPWMrKzB4IC1zdGQ9
Z251KysweAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZFVHVyYnVsZW5jZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9GRVR1cmJ1bGVuY2UuaAppbmRleCA0N2M4YmVlLi44NGZmMTEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVsZW5jZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmgKQEAgLTYxLDYgKzYxLDkgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGZpbGxSZWdp
b25Xb3JrZXIodm9pZCopOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2Fy
ZSgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlP
cGVuQ0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAgICAgCiAgICAgdmly
dHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCkgeyBzZXRBYnNvbHV0ZVBhaW50
UmVjdChlbmNsb3NpbmdJbnRSZWN0KG1heEVmZmVjdFJlY3QoKSkpOyB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5j
cHAKaW5kZXggYTJiYjU0ZC4uMGEwZjgyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcApAQCAtMiw2ICsy
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbGV4IE1hdGhld3MgPHBvc3Nlc3NlZHBlbmd1
aW5ib2JAZ21haWwuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA5IERpcmsgU2NodWx6ZSA8a3Jp
dEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRl
ZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTEyMyw2ICsxMjQsMTAgQEAg
dm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKICAgICB9CiAgICAgCiAgICAgLy8gQWRkIHBsYXRm
b3JtIHNwZWNpZmljIGFwcGx5IGZ1bmN0aW9ucyBoZXJlIGFuZCByZXR1cm4gZWFybGllci4KKyNp
ZiBFTkFCTEUoT1BFTkNMKQorICAgIGlmIChwbGF0Zm9ybUFwcGx5T3BlbkNMKCkpCisgICAgICAg
IHJldHVybjsKKyNlbmRpZgogI2lmIFVTRShTS0lBKQogICAgIGlmIChwbGF0Zm9ybUFwcGx5U2tp
YSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzAsNiArMTM1LDMxIEBAIHZvaWQgRmlsdGVyRWZm
ZWN0OjphcHBseSgpCiAgICAgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CiB9CiAKKyNpZiBFTkFC
TEUoT1BFTkNMKQorLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNoYW5nZWQgdG8gYWJzdHJhY3Qg
dmlydHVhbCB3aGVuIGFsbCBmaWx0ZXJzIGFyZSBsYW5kZWQuCitib29sIEZpbHRlckVmZmVjdDo6
cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgaWYgKCFGaWx0ZXJDb250ZXh0T3BlbkNMOjpj
b250ZXh0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIHNpemUgPSBt
X2lucHV0RWZmZWN0cy5zaXplKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7
ICsraSkgeworICAgICAgICBGaWx0ZXJFZmZlY3QqIGluID0gbV9pbnB1dEVmZmVjdHMuYXQoaSku
Z2V0KCk7CisgICAgICAgIC8vIFNvZnR3YXJlIGNvZGUgcGF0aCBleHBlY3RzIHRoYXQgYXQgbGVh
c3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgZmlsZWRzIGlzIHZhbGlkLgorICAgICAgICBpZiAoIWlu
LT5tX2ltYWdlQnVmZmVyUmVzdWx0ICYmICFpbi0+bV91bm11bHRpcGxpZWRJbWFnZVJlc3VsdCAm
JiAhaW4tPm1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KQorICAgICAgICAgICAgaW4tPmFzSW1h
Z2VCdWZmZXIoKTsKKyAgICB9CisKKyAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyAgICBJ
bWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBhc0ltYWdlQnVmZmVyKCk7CisgICAgaWYgKHNvdXJj
ZUltYWdlKSB7CisgICAgICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlSW1hZ2VE
YXRhID0gc291cmNlSW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBv
aW50KCksIHNvdXJjZUltYWdlLT5pbnRlcm5hbFNpemUoKSkpOworICAgICAgICBjcmVhdGVPcGVu
Q0xJbWFnZVJlc3VsdChzb3VyY2VJbWFnZURhdGEtPmRhdGEoKSk7CisgICAgfQorICAgIHJldHVy
biB0cnVlOworfQorI2VuZGlmCisKIHZvaWQgRmlsdGVyRWZmZWN0Ojpmb3JjZVZhbGlkUHJlTXVs
dGlwbGllZFBpeGVscygpCiB7CiAgICAgLy8gTXVzdCBvcGVyYXRlIG9uIHByZS1tdWx0aXBsaWVk
IHJlc3VsdHM7IG90aGVyIGZvcm1hdHMgY2Fubm90IGhhdmUgaW52YWxpZCBwaXhlbHMuCkBAIC0x
ODcsNiArMjE3LDEwIEBAIHZvaWQgRmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCgpCiAgICAgICAg
IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQuY2xlYXIoKTsKICAgICBpZiAobV9wcmVtdWx0aXBs
aWVkSW1hZ2VSZXN1bHQpCiAgICAgICAgIG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0LmNsZWFy
KCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBpZiAobV9vcGVuQ0xJbWFnZVJlc3VsdCkKKyAg
ICAgICAgbV9vcGVuQ0xJbWFnZVJlc3VsdC5jbGVhcigpOworI2VuZGlmCiB9CiAKIEltYWdlQnVm
ZmVyKiBGaWx0ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIoKQpAQCAtMTk1LDYgKzIyOSwxMCBAQCBJ
bWFnZUJ1ZmZlciogRmlsdGVyRWZmZWN0Ojphc0ltYWdlQnVmZmVyKCkKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCiAgICAgICAgIHJldHVybiBtX2ltYWdl
QnVmZmVyUmVzdWx0LmdldCgpOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgaWYgKG1fb3BlbkNM
SW1hZ2VSZXN1bHQpCisgICAgICAgIHJldHVybiBvcGVuQ0xJbWFnZVRvSW1hZ2VCdWZmZXIoKTsK
KyNlbmRpZgogICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRlKG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpLCAxLCBtX3Jlc3VsdENvbG9yU3BhY2UsIG1fZmlsdGVy
LT5yZW5kZXJpbmdNb2RlKCkpOwogICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50
KCksIG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKICAgICBpZiAobV9wcmVtdWx0aXBsaWVk
SW1hZ2VSZXN1bHQpCkBAIC0yMDQsNiArMjQyLDI4IEBAIEltYWdlQnVmZmVyKiBGaWx0ZXJFZmZl
Y3Q6OmFzSW1hZ2VCdWZmZXIoKQogICAgIHJldHVybiBtX2ltYWdlQnVmZmVyUmVzdWx0LmdldCgp
OwogfQogCisjaWYgRU5BQkxFKE9QRU5DTCkKK0ltYWdlQnVmZmVyKiBGaWx0ZXJFZmZlY3Q6Om9w
ZW5DTEltYWdlVG9JbWFnZUJ1ZmZlcigpCit7CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29u
dGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAgICBBU1NFUlQoY29udGV4
dCk7CisKKyAgICBzaXplX3Qgb3JpZ2luWzNdID0geyAwLCAwLCAwIH07CisgICAgc2l6ZV90IHJl
Z2lvblszXSA9IHsgbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29sdXRlUGFpbnRS
ZWN0LmhlaWdodCgpLCAxIH07CisKKyAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IGRlc3Rp
bmF0aW9uUGl4ZWxBcnJheSA9IFVpbnQ4Q2xhbXBlZEFycmF5OjpjcmVhdGUobV9hYnNvbHV0ZVBh
aW50UmVjdC53aWR0aCgpICogbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSAqIDQpOworCisg
ICAgY2xGaW5pc2goY29udGV4dC0+Y29tbWFuZFF1ZXVlKCkpOworICAgIGNsRW5xdWV1ZVJlYWRJ
bWFnZShjb250ZXh0LT5jb21tYW5kUXVldWUoKSwgbV9vcGVuQ0xJbWFnZVJlc3VsdCwgQ0xfVFJV
RSwgb3JpZ2luLCByZWdpb24sIDAsIDAsIGRlc3RpbmF0aW9uUGl4ZWxBcnJheS0+ZGF0YSgpLCAw
LCAwLCAwKTsKKworICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQgPSBJbWFnZUJ1ZmZlcjo6Y3JlYXRl
KG1fYWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKKyAgICBJbnRSZWN0IGRlc3RpbmF0aW9uUmVj
dChJbnRQb2ludCgpLCBtX2Fic29sdXRlUGFpbnRSZWN0LnNpemUoKSk7CisgICAgbV9pbWFnZUJ1
ZmZlclJlc3VsdC0+cHV0Qnl0ZUFycmF5KFVubXVsdGlwbGllZCwgZGVzdGluYXRpb25QaXhlbEFy
cmF5LmdldCgpLCBkZXN0aW5hdGlvblJlY3Quc2l6ZSgpLCBkZXN0aW5hdGlvblJlY3QsIEludFBv
aW50KCkpOworCisgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7Cit9CisjZW5k
aWYKKwogUGFzc1JlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gRmlsdGVyRWZmZWN0Ojphc1VubXVs
dGlwbGllZEltYWdlKGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKGlzRmlsdGVy
U2l6ZVZhbGlkKHJlY3QpKTsKQEAgLTM2Myw2ICs0MjMsMjIgQEAgVWludDhDbGFtcGVkQXJyYXkq
IEZpbHRlckVmZmVjdDo6Y3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCkKICAgICByZXR1
cm4gbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuZ2V0KCk7CiB9CiAKKyNpZiBFTkFCTEUoT1BF
TkNMKQorT3BlbkNMSGFuZGxlIEZpbHRlckVmZmVjdDo6Y3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQo
dWludDhfdCogc291cmNlKQoreworICAgIEFTU0VSVCghaGFzUmVzdWx0KCkpOworICAgIGNsX2lt
YWdlX2Zvcm1hdCBjbEltYWdlRm9ybWF0OworICAgIGNsSW1hZ2VGb3JtYXQuaW1hZ2VfY2hhbm5l
bF9vcmRlciA9IENMX1JHQkE7CisgICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVsX2RhdGFf
dHlwZSA9IENMX1VOT1JNX0lOVDg7CisKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0
ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworICAgIEFTU0VSVChjb250ZXh0KTsK
KyAgICBtX29wZW5DTEltYWdlUmVzdWx0ID0gY2xDcmVhdGVJbWFnZTJEKGNvbnRleHQtPmRldmlj
ZUNvbnRleHQoKSwgQ0xfTUVNX1JFQURfV1JJVEUgfCAoc291cmNlID8gQ0xfTUVNX0NPUFlfSE9T
VF9QVFIgOiAwKSwKKyAgICAgICAgJmNsSW1hZ2VGb3JtYXQsIG1fYWJzb2x1dGVQYWludFJlY3Qu
d2lkdGgoKSwgbV9hYnNvbHV0ZVBhaW50UmVjdC5oZWlnaHQoKSwgMCwgc291cmNlLCAwKTsKKyAg
ICByZXR1cm4gbV9vcGVuQ0xJbWFnZVJlc3VsdDsKK30KKyNlbmRpZgorCiB2b2lkIEZpbHRlckVm
ZmVjdDo6dHJhbnNmb3JtUmVzdWx0Q29sb3JTcGFjZShDb2xvclNwYWNlIGRzdENvbG9yU3BhY2Up
CiB7CiAjaWYgVVNFKENHKQpAQCAtMzc0LDEyICs0NTAsMjcgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6
OnRyYW5zZm9ybVJlc3VsdENvbG9yU3BhY2UoQ29sb3JTcGFjZSBkc3RDb2xvclNwYWNlKQogCiAg
ICAgLy8gRklYTUU6IFdlIGNhbiBhdm9pZCB0aGlzIHBvdGVudGlhbGx5IHVubmVjZXNzYXJ5IElt
YWdlQnVmZmVyIGNvbnZlcnNpb24gYnkgYWRkaW5nCiAgICAgLy8gY29sb3Igc3BhY2UgdHJhbnNm
b3JtIHN1cHBvcnQgZm9yIHRoZSB7cHJlLHVufW11bHRpcGxpZWQgYXJyYXlzLgorI2lmIEVOQUJM
RShPUEVOQ0wpCisgICAgaWYgKG9wZW5DTEltYWdlKCkpIHsKKyAgICAgICAgRmlsdGVyQ29udGV4
dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAgICAg
ICAgQVNTRVJUKGNvbnRleHQpOworICAgICAgICBjb250ZXh0LT5vcGVuQ0xUcmFuc2Zvcm1Db2xv
clNwYWNlKG1fb3BlbkNMSW1hZ2VSZXN1bHQsIGFic29sdXRlUGFpbnRSZWN0KCksIG1fcmVzdWx0
Q29sb3JTcGFjZSwgZHN0Q29sb3JTcGFjZSk7CisgICAgICAgIGlmIChtX2ltYWdlQnVmZmVyUmVz
dWx0KQorICAgICAgICAgICAgbV9pbWFnZUJ1ZmZlclJlc3VsdC5jbGVhcigpOworICAgICAgICBn
b3RvIHNraXBTb2Z0d2FyZUNvZGVQYXRoOworICAgIH0KKyNlbmRpZgogICAgIGlmICghbV9pbWFn
ZUJ1ZmZlclJlc3VsdCkgewogICAgICAgICBhc0ltYWdlQnVmZmVyKCk7CiAgICAgICAgIEFTU0VS
VChtX2ltYWdlQnVmZmVyUmVzdWx0KTsKICAgICB9CiAKICAgICBtX2ltYWdlQnVmZmVyUmVzdWx0
LT50cmFuc2Zvcm1Db2xvclNwYWNlKG1fcmVzdWx0Q29sb3JTcGFjZSwgZHN0Q29sb3JTcGFjZSk7
CisKKyNpZiBFTkFCTEUoT1BFTkNMKQorc2tpcFNvZnR3YXJlQ29kZVBhdGg6CisjZW5kaWYKKwog
ICAgIG1fcmVzdWx0Q29sb3JTcGFjZSA9IGRzdENvbG9yU3BhY2U7CiAKICAgICBpZiAobV91bm11
bHRpcGxpZWRJbWFnZVJlc3VsdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5oCmluZGV4IDA2OWVkZTMuLmI5ZjIxOTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmls
dGVyRWZmZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuaApAQCAtMzMsNiArMzMsMTAgQEAKICNpbmNsdWRlIDx3dGYvVWludDhD
bGFtcGVkQXJyYXkuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKKyNpZiBFTkFCTEUoT1BF
TkNMKQorI2luY2x1ZGUgIkZpbHRlckNvbnRleHRPcGVuQ0wuaCIKKyNlbmRpZgorCiBzdGF0aWMg
Y29uc3QgZmxvYXQga01heEZpbHRlclNpemUgPSA1MDAwLjBmOwogCiAjaWYgVVNFKFNLSUEpCkBA
IC03MCw2ICs3NCwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb3B5VW5tdWx0aXBsaWVkSW1hZ2Uo
VWludDhDbGFtcGVkQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7CiAgICAgdm9p
ZCBjb3B5UHJlbXVsdGlwbGllZEltYWdlKFVpbnQ4Q2xhbXBlZEFycmF5KiBkZXN0aW5hdGlvbiwg
Y29uc3QgSW50UmVjdCYpOwogCisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBPcGVuQ0xIYW5kbGUg
b3BlbkNMSW1hZ2UoKSB7IHJldHVybiBtX29wZW5DTEltYWdlUmVzdWx0OyB9CisgICAgdm9pZCBz
ZXRPcGVuQ0xJbWFnZShPcGVuQ0xIYW5kbGUgb3BlbkNMSW1hZ2UpIHsgbV9vcGVuQ0xJbWFnZVJl
c3VsdCA9IG9wZW5DTEltYWdlOyB9CisgICAgSW1hZ2VCdWZmZXIqIG9wZW5DTEltYWdlVG9JbWFn
ZUJ1ZmZlcigpOworI2VuZGlmCisKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3ImIGlucHV0RWZmZWN0
cygpIHsgcmV0dXJuIG1faW5wdXRFZmZlY3RzOyB9CiAgICAgRmlsdGVyRWZmZWN0KiBpbnB1dEVm
ZmVjdCh1bnNpZ25lZCkgY29uc3Q7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZFZmZlY3RJbnB1dHMo
KSBjb25zdCB7IHJldHVybiBtX2lucHV0RWZmZWN0cy5zaXplKCk7IH0KQEAgLTc3LDcgKzg3LDEy
IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgYm9vbCBoYXNSZXN1bHQoKSBjb25zdAogICAgIHsKICAg
ICAgICAgLy8gVGhpcyBmdW5jdGlvbiBuZWVkcyBwbGF0Zm9ybSBzcGVjaWZpYyBjaGVja3MsIGlm
IHRoZSBtZW1vcnkgbWFuYWdtZW50IGlzIG5vdCBkb25lIGJ5IEZpbHRlckVmZmVjdC4KLSAgICAg
ICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQgfHwgbV91bm11bHRpcGxpZWRJbWFnZVJlc3Vs
dCB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKKyAgICAgICAgcmV0dXJuIG1faW1hZ2VC
dWZmZXJSZXN1bHQKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgICAgICAgICAgfHwgbV9vcGVuQ0xJ
bWFnZVJlc3VsdAorI2VuZGlmCisgICAgICAgICAgICB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0CisgICAgICAgICAgICB8fCBtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdDsKICAgICB9CiAK
ICAgICBJbnRSZWN0IGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoY29uc3QgSW50UmVjdCYpIGNv
bnN0OwpAQCAtMTAxLDYgKzExNiw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY29ycmVj
dEZpbHRlclJlc3VsdElmTmVlZGVkKCkgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1B
cHBseVNvZnR3YXJlKCkgPSAwOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29s
IHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogI2lmIFVTRShTS0lBKQogICAgIHZpcnR1
YWwgYm9vbCBwbGF0Zm9ybUFwcGx5U2tpYSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCBTa0ltYWdlRmlsdGVyKiBjcmVhdGVJbWFnZUZpbHRlcihTa2lhSW1hZ2VGaWx0ZXJCdWlsZGVy
KikgeyByZXR1cm4gMDsgfQpAQCAtMTQ5LDYgKzE2Nyw5IEBAIHByb3RlY3RlZDoKICAgICBJbWFn
ZUJ1ZmZlciogY3JlYXRlSW1hZ2VCdWZmZXJSZXN1bHQoKTsKICAgICBVaW50OENsYW1wZWRBcnJh
eSogY3JlYXRlVW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKTsKICAgICBVaW50OENsYW1wZWRBcnJh
eSogY3JlYXRlUHJlbXVsdGlwbGllZEltYWdlUmVzdWx0KCk7CisjaWYgRU5BQkxFKE9QRU5DTCkK
KyAgICBPcGVuQ0xIYW5kbGUgY3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQodWludDhfdCogPSAwKTsK
KyNlbmRpZgogCiAgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGZpbHRlciB3aWxsIG9ubHkgb3Bl
cmF0ZSBjb3JyZWN0bHkgb24gdmFsaWQgUkdCQSB2YWx1ZXMsIHdpdGgKICAgICAvLyBhbHBoYSBp
biBbMCwyNTVdIGFuZCBlYWNoIGNvbG9yIGNvbXBvbmVudCBpbiBbMCwgYWxwaGFdLgpAQCAtMTYy
LDYgKzE4Myw5IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3Vu
bXVsdGlwbGllZEltYWdlUmVzdWx0OwogICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gbV9w
cmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQ7CiAgICAgRmlsdGVyRWZmZWN0VmVjdG9yIG1faW5wdXRF
ZmZlY3RzOworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgT3BlbkNMSGFuZGxlIG1fb3BlbkNMSW1h
Z2VSZXN1bHQ7CisjZW5kaWYKIAogICAgIGJvb2wgbV9hbHBoYUltYWdlOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUFscGhhLmgK
aW5kZXggOTY5MTZlOS4uYjAyMjBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaApAQCAtMzMsNiArMzMsOSBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZWZmZWN0TmFtZSgpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworI2lmIEVOQUJMRShPUEVO
Q0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVuQ0woKTsKKyNlbmRpZgogICAg
IHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJtaW5lQWJzb2x1
dGVQYWludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvU291cmNlR3JhcGhpYy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9Tb3VyY2VHcmFwaGljLmgKaW5kZXggYzdlODMzZS4uMTg1ZTU2NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VH
cmFwaGljLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9T
b3VyY2VHcmFwaGljLmgKQEAgLTM0LDYgKzM0LDkgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25z
dCBBdG9taWNTdHJpbmcmIGVmZmVjdE5hbWUoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9y
bUFwcGx5U29mdHdhcmUoKTsKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIHZpcnR1YWwgYm9vbCBw
bGF0Zm9ybUFwcGx5T3BlbkNMKCk7CisjZW5kaWYKICAgICB2aXJ0dWFsIHZvaWQgZHVtcCgpOwog
CiAgICAgdmlydHVhbCB2b2lkIGRldGVybWluZUFic29sdXRlUGFpbnRSZWN0KCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNv
bnRleHRPcGVuQ0wuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29w
ZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi45OWIwMDYyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmNwcApAQCAtMCwwICsx
LDE5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1
PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgIkZpbHRlckNvbnRleHRPcGVuQ0wuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworRmlsdGVyQ29udGV4dE9wZW5DTCogRmlsdGVyQ29udGV4dE9w
ZW5DTDo6bV9jb250ZXh0ID0gMDsKK2ludCBGaWx0ZXJDb250ZXh0T3BlbkNMOjptX2FscmVhZHlJ
bml0aWFsaXplZCA9IDA7CitGaWx0ZXJDb250ZXh0T3BlbkNMKiBGaWx0ZXJDb250ZXh0T3BlbkNM
Ojpjb250ZXh0KCkKK3sKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbV9jb250
ZXh0OworICAgIGlmIChtX2FscmVhZHlJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBtX2FscmVhZHlJbml0aWFsaXplZCA9IHRydWU7CisgICAgRmlsdGVyQ29udGV4dE9wZW5D
TCogbG9jYWxDb250ZXh0ID0gbmV3IEZpbHRlckNvbnRleHRPcGVuQ0woKTsKKworICAgIC8vIElu
aXRpYWxpemluZyB0aGUgY29udGV4dC4KKyAgICBjbF9pbnQgZXJyb3JOdW1iZXI7CisgICAgY2xf
ZGV2aWNlX2lkKiBkZXZpY2VzOworICAgIGNsX3BsYXRmb3JtX2lkIGZpcnN0UGxhdGZvcm1JZDsK
KyAgICBzaXplX3QgZGV2aWNlQnVmZmVyU2l6ZSA9IDA7CisKKyAgICBlcnJvck51bWJlciA9IGNs
R2V0UGxhdGZvcm1JRHMoMSwgJmZpcnN0UGxhdGZvcm1JZCwgMCk7CisgICAgY2xfY29udGV4dF9w
cm9wZXJ0aWVzIGNvbnRleHRQcm9wZXJ0aWVzW10gPSB7IENMX0NPTlRFWFRfUExBVEZPUk0sIChj
bF9jb250ZXh0X3Byb3BlcnRpZXMpZmlyc3RQbGF0Zm9ybUlkLCAwfTsKKyAgICBsb2NhbENvbnRl
eHQtPm1fZGV2aWNlQ29udGV4dCA9IGNsQ3JlYXRlQ29udGV4dEZyb21UeXBlKGNvbnRleHRQcm9w
ZXJ0aWVzLCBDTF9ERVZJQ0VfVFlQRV9HUFUsIDAsIDAsICZlcnJvck51bWJlcik7CisgICAgaWYg
KGVycm9yTnVtYmVyICE9IENMX1NVQ0NFU1MpIHsKKyAgICAgICAgbG9jYWxDb250ZXh0LT5tX2Rl
dmljZUNvbnRleHQgPSBjbENyZWF0ZUNvbnRleHRGcm9tVHlwZShjb250ZXh0UHJvcGVydGllcywg
Q0xfREVWSUNFX1RZUEVfQ1BVLCAwLCAwLCAmZXJyb3JOdW1iZXIpOworICAgICAgICBpZiAoZXJy
b3JOdW1iZXIgIT0gQ0xfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIGVycm9yTnVtYmVyID0gY2xHZXRDb250ZXh0SW5mbyhsb2NhbENvbnRleHQtPm1fZGV2aWNl
Q29udGV4dCwgQ0xfQ09OVEVYVF9ERVZJQ0VTLCAwLCAwLCAmZGV2aWNlQnVmZmVyU2l6ZSk7Cisg
ICAgaWYgKGVycm9yTnVtYmVyICE9IENMX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgaWYgKCFkZXZpY2VCdWZmZXJTaXplKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGRldmlj
ZXMgPSByZWludGVycHJldF9jYXN0PGNsX2RldmljZV9pZCo+KGZhc3RNYWxsb2MoZGV2aWNlQnVm
ZmVyU2l6ZSkpOworICAgIGVycm9yTnVtYmVyID0gY2xHZXRDb250ZXh0SW5mbyhsb2NhbENvbnRl
eHQtPm1fZGV2aWNlQ29udGV4dCwgQ0xfQ09OVEVYVF9ERVZJQ0VTLCBkZXZpY2VCdWZmZXJTaXpl
LCBkZXZpY2VzLCAwKTsKKyAgICBpZiAoZXJyb3JOdW1iZXIgIT0gQ0xfU1VDQ0VTUykKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBsb2NhbENvbnRleHQtPm1fY29tbWFuZFF1ZXVlID0gY2xDcmVh
dGVDb21tYW5kUXVldWUobG9jYWxDb250ZXh0LT5tX2RldmljZUNvbnRleHQsIGRldmljZXNbMF0s
IDAsIDApOworICAgIGlmICghbG9jYWxDb250ZXh0LT5tX2NvbW1hbmRRdWV1ZSkKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBsb2NhbENvbnRleHQtPm1fZGV2aWNlSWQgPSBkZXZpY2VzWzBdOwor
ICAgIGZhc3RGcmVlKGRldmljZXMpOworCisgICAgY2xfYm9vbCBpbWFnZVN1cHBvcnQgPSBDTF9G
QUxTRTsKKyAgICBjbEdldERldmljZUluZm8obG9jYWxDb250ZXh0LT5tX2RldmljZUlkLCBDTF9E
RVZJQ0VfSU1BR0VfU1VQUE9SVCwgc2l6ZW9mKGNsX2Jvb2wpLCAmaW1hZ2VTdXBwb3J0LCAwKTsK
KyAgICBpZiAoaW1hZ2VTdXBwb3J0ICE9IENMX1RSVUUpCisgICAgICAgIHJldHVybiAwOworCisg
ICAgbV9jb250ZXh0ID0gbG9jYWxDb250ZXh0OworICAgIHJldHVybiBtX2NvbnRleHQ7Cit9CisK
K09wZW5DTEhhbmRsZSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjcmVhdGVPcGVuQ0xJbWFnZShJbnRT
aXplIHBhaW50U2l6ZSkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmls
dGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworCisgICAgY2xfaW1hZ2VfZm9ybWF0IGNsSW1h
Z2VGb3JtYXQ7CisgICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVsX29yZGVyID0gQ0xfUkdC
QTsKKyAgICBjbEltYWdlRm9ybWF0LmltYWdlX2NoYW5uZWxfZGF0YV90eXBlID0gQ0xfVU5PUk1f
SU5UODsKKworICAgIE9wZW5DTEhhbmRsZSBpbWFnZSA9IGNsQ3JlYXRlSW1hZ2UyRChjb250ZXh0
LT5kZXZpY2VDb250ZXh0KCksIENMX01FTV9SRUFEX1dSSVRFLCAmY2xJbWFnZUZvcm1hdCwKKyAg
ICAgICAgcGFpbnRTaXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgMCwgMCwgMCk7Cisg
ICAgcmV0dXJuIGltYWdlOworfQorCitzdGF0aWMgY29uc3QgY2hhciogdHJhbnNmb3JtQ29sb3JT
cGFjZUtlcm5lbFByb2dyYW0gPQorUFJPR1JBTV9TVFIoCitjb25zdCBzYW1wbGVyX3Qgc2FtcGxl
ciA9IENMS19OT1JNQUxJWkVEX0NPT1JEU19GQUxTRSB8IENMS19BRERSRVNTX0NMQU1QX1RPX0VE
R0UgfCBDTEtfRklMVEVSX05FQVJFU1Q7CisKK19fa2VybmVsIHZvaWQgdHJhbnNmb3JtQ29sb3JT
cGFjZShfX3JlYWRfb25seSBpbWFnZTJkX3Qgc291cmNlLCBfX3dyaXRlX29ubHkgaW1hZ2UyZF90
IGRlc3RpbmF0aW9uLCBfX2NvbnN0YW50IGZsb2F0ICpjbExvb2tVcFRhYmxlKQoreworICAgIGlu
dDIgc291cmNlQ29vcmQgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQo
MSkpOworICAgIGZsb2F0NCBwaXhlbCA9IHJlYWRfaW1hZ2VmKHNvdXJjZSwgc2FtcGxlciwgc291
cmNlQ29vcmQpOworCisgICAgcGl4ZWwgPSAoZmxvYXQ0KShjbExvb2tVcFRhYmxlWyhpbnQpKHJv
dW5kKHBpeGVsLnggKiAyNTUpKV0sIGNsTG9va1VwVGFibGVbKGludCkocm91bmQocGl4ZWwueSAq
IDI1NSkpXSwKKyAgICAgICAgY2xMb29rVXBUYWJsZVsoaW50KShyb3VuZChwaXhlbC56ICogMjU1
KSldLCBwaXhlbC53KTsKKworICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgc291cmNlQ29v
cmQsIHBpeGVsKTsKK30KKyk7CisKK3ZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6b3BlbkNMVHJh
bnNmb3JtQ29sb3JTcGFjZShPcGVuQ0xIYW5kbGUmIHNvdXJjZSwgSW50UmVjdCBzb3VyY2VTaXpl
LCBDb2xvclNwYWNlIHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKK3sK
KyAgICBERUZJTkVfU1RBVElDX0xPQ0FMKE9wZW5DTEhhbmRsZSwgZGV2aWNlUmdiTFVULCAoKSk7
CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChPcGVuQ0xIYW5kbGUsIGxpbmVhclJnYkxVVCwgKCkp
OworCisgICAgaWYgKHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2VMaW5lYXJSR0IgJiYg
c3JjQ29sb3JTcGFjZSAhPSBDb2xvclNwYWNlRGV2aWNlUkdCKQorICAgICAgICB8fCAoZHN0Q29s
b3JTcGFjZSAhPSBDb2xvclNwYWNlTGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JT
cGFjZURldmljZVJHQikpCisgICAgICAgIHJldHVybjsKKworICAgIEZpbHRlckNvbnRleHRPcGVu
Q0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisgICAgQVNTRVJU
KGNvbnRleHQpOworCisgICAgT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uID0gY29udGV4dC0+Y3Jl
YXRlT3BlbkNMSW1hZ2Uoc291cmNlU2l6ZS5zaXplKCkpOworCisgICAgaWYgKCFtX3RyYW5zZm9y
bUNvbG9yU3BhY2VQcm9ncmFtKSB7CisgICAgICAgIG1fdHJhbnNmb3JtQ29sb3JTcGFjZVByb2dy
YW0gPSBjb21waWxlUHJvZ3JhbSh0cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsUHJvZ3JhbSk7Cisg
ICAgICAgIEFTU0VSVChtX3RyYW5zZm9ybUNvbG9yU3BhY2VQcm9ncmFtKTsKKyAgICAgICAgbV90
cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsID0ga2VybmVsQnlOYW1lKG1fdHJhbnNmb3JtQ29sb3JT
cGFjZVByb2dyYW0sICJ0cmFuc2Zvcm1Db2xvclNwYWNlIik7CisgICAgICAgIEFTU0VSVChtX3Ry
YW5zZm9ybUNvbG9yU3BhY2VLZXJuZWwpOworICAgIH0KKworICAgIFJ1bktlcm5lbCBrZXJuZWwo
Y29udGV4dCwgbV90cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsLCBzb3VyY2VTaXplLndpZHRoKCks
IHNvdXJjZVNpemUuaGVpZ2h0KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChzb3VyY2UpOwor
ICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlvbik7CisKKyAgICBpZiAoZHN0Q29sb3JT
cGFjZSA9PSBDb2xvclNwYWNlTGluZWFyUkdCKSB7CisgICAgICAgIGlmICghbGluZWFyUmdiTFVU
KSB7CisgICAgICAgICAgICBWZWN0b3I8ZmxvYXQ+IGxvb2tVcFRhYmxlOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxv
YXQgY29sb3IgPSBpICAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IChjb2xvciA8
PSAwLjA0MDQ1ZiA/IGNvbG9yIC8gMTIuOTJmIDogcG93KChjb2xvciArIDAuMDU1ZikgLyAxLjA1
NWYsIDIuNGYpKTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWF4KDAuMGYsIGNvbG9y
KTsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWluKDEuMGYsIGNvbG9yKTsKKyAgICAg
ICAgICAgICAgICBsb29rVXBUYWJsZS5hcHBlbmQoKHJvdW5kKGNvbG9yICogMjU1KSkgLyAyNTUp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGluZWFyUmdiTFVUID0ga2VybmVsLmFkZEFy
Z3VtZW50KGxvb2tVcFRhYmxlLmRhdGEoKSwgc2l6ZW9mKGZsb2F0KSAqIDI1Nik7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAga2VybmVsLmFkZEFyZ3VtZW50KGxpbmVhclJnYkxVVCk7Cisg
ICAgfSBlbHNlIGlmIChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2VEZXZpY2VSR0IpIHsKKyAg
ICAgICAgaWYgKCFkZXZpY2VSZ2JMVVQpIHsKKyAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gbG9v
a1VwVGFibGU7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKysp
IHsKKyAgICAgICAgICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAg
ICAgICAgY29sb3IgPSAocG93Zihjb2xvciwgMS4wZiAvIDIuNGYpICogMS4wNTVmKSAtIDAuMDU1
ZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWF4KDAuMGYsIGNvbG9yKTsKKyAgICAg
ICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWluKDEuMGYsIGNvbG9yKTsKKyAgICAgICAgICAgICAg
ICBsb29rVXBUYWJsZS5hcHBlbmQoKHJvdW5kKGNvbG9yICogMjU1KSkgLyAyNTUpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZGV2aWNlUmdiTFVUID0ga2VybmVsLmFkZEFyZ3VtZW50KGxv
b2tVcFRhYmxlLmRhdGEoKSwgc2l6ZW9mKGZsb2F0KSAqIDI1Nik7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAga2VybmVsLmFkZEFyZ3VtZW50KGRldmljZVJnYkxVVCk7CisgICAgfQorCisg
ICAga2VybmVsLnJ1bigpOworICAgIHNvdXJjZS5jbGVhcigpOworICAgIHNvdXJjZSA9IGRlc3Rp
bmF0aW9uOworfQorCitjbF9wcm9ncmFtIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVQcm9n
cmFtKGNvbnN0IGNoYXIqIHNvdXJjZSkKK3sKKyAgICBjbF9wcm9ncmFtIHByb2dyYW07CisgICAg
Y2xfaW50IGVycm9yTnVtYmVyOworCisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9
IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisK
KyAgICBwcm9ncmFtID0gY2xDcmVhdGVQcm9ncmFtV2l0aFNvdXJjZShjb250ZXh0LT5tX2Rldmlj
ZUNvbnRleHQsIDEsIChjb25zdCBjaGFyKiopICZzb3VyY2UsIDAsIDApOworICAgIGVycm9yTnVt
YmVyID0gY2xCdWlsZFByb2dyYW0ocHJvZ3JhbSwgMCwgMCwgMCwgMCwgMCk7CisgICAgaWYgKGVy
cm9yTnVtYmVyICE9IENMX1NVQ0NFU1MpIHsKKyAgICAgICAgY29udGV4dCA9IDA7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gcHJvZ3JhbTsKK30KK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzN2U4ZDAKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRl
eHRPcGVuQ0wuaApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBV
bml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEyIFRhbWFzIEN6ZW5lIDx0
Y3plbmVAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VE
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEZpbHRlckNvbnRleHRPcGVuQ0xfaAorI2RlZmluZSBGaWx0ZXJDb250ZXh0T3BlbkNM
X2gKKworI2lmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiQ0wvY2wuaCIKKyNpbmNsdWRlICJD
b2xvci5oIgorI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisj
aW5jbHVkZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIk9wZW5DTEhhbmRsZS5oIgorCisjZGVmaW5l
IFBST0dSQU1fU1RSKC4uLikgICNfX1ZBX0FSR1NfXworI2RlZmluZSBQUk9HUkFNKC4uLikgUFJP
R1JBTV9TVFIoX19WQV9BUkdTX18pCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBPcGVu
Q0xDb21waWxlU3RhdHVzIHsKKyAgICBvcGVuY2xOb3RDb21waWxlZFlldCwKKyAgICBvcGVuY2xD
b21waWxlRmFpbGVkLAorICAgIG9wZW5jbENvbXBpbGVTdWNjZXNmdWwKK307CisKK2NsYXNzIEZp
bHRlckNvbnRleHRPcGVuQ0wgeworcHVibGljOgorICAgIC8vIFJldHVybnMgMCBpZiBpbml0aWFs
aXphdGlvbiBmYWlsZWQuCisgICAgc3RhdGljIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQo
KTsKKworICAgIGNsX2RldmljZV9pZCBkZXZpY2VJZCgpIHsgcmV0dXJuIG1fZGV2aWNlSWQ7IH0K
KyAgICBjbF9jb250ZXh0IGRldmljZUNvbnRleHQoKSB7IHJldHVybiBtX2RldmljZUNvbnRleHQ7
IH0KKyAgICBjbF9jb21tYW5kX3F1ZXVlIGNvbW1hbmRRdWV1ZSgpIHsgcmV0dXJuIG1fY29tbWFu
ZFF1ZXVlOyB9CisKKyAgICBPcGVuQ0xIYW5kbGUgY3JlYXRlT3BlbkNMSW1hZ2UoSW50U2l6ZSk7
CisgICAgdm9pZCBvcGVuQ0xUcmFuc2Zvcm1Db2xvclNwYWNlKE9wZW5DTEhhbmRsZSYsIEludFJl
Y3QsIENvbG9yU3BhY2UsIENvbG9yU3BhY2UpOworCisgICAgaW5saW5lIE9wZW5DTENvbXBpbGVT
dGF0dXMgY29tcGlsZUZFVHVyYnVsZW5jZSgpOworCisgICAgaW5saW5lIHZvaWQgYXBwbHlGRVR1
cmJ1bGVuY2UoT3BlbkNMSGFuZGxlLCBJbnRTaXplLCBpbnQsIHZvaWQqLCB2b2lkKiwgdm9pZCos
IHZvaWQqLCB2b2lkKiwKKyAgICAgICAgdm9pZCosIGludCwgaW50LCBpbnQsIGludCwgZmxvYXQs
IGZsb2F0LCBib29sLCBpbnQsIGludCk7CisKK3ByaXZhdGU6CisKKyAgICBjbGFzcyBSdW5LZXJu
ZWwgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBSdW5LZXJuZWwoRmlsdGVyQ29udGV4
dE9wZW5DTCogY29udGV4dCwgY2xfa2VybmVsIGtlcm5lbCwgc2l6ZV90IHdpZHRoLCBzaXplX3Qg
aGVpZ2h0KQorICAgICAgICAgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAg
ICAgICAgLCBtX2tlcm5lbChrZXJuZWwpCisgICAgICAgICAgICAgICAgLCBpbmRleCgwKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fZ2xvYmFsU2l6ZVswXSA9IHdpZHRoOworICAg
ICAgICAgICAgICAgIG1fZ2xvYmFsU2l6ZVsxXSA9IGhlaWdodDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgdm9pZCBhZGRBcmd1bWVudChPcGVuQ0xIYW5kbGUgaGFuZGxlKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBpbmRleCsr
LCBzaXplb2YoT3BlbkNMSGFuZGxlKSwgaGFuZGxlLmhhbmRsZUFkZHJlc3MoKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgYWRkQXJndW1lbnQoY2xfaW50IHZhbHVlKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBpbmRl
eCsrLCBzaXplb2YoY2xfaW50KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJnZhbHVlKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgYWRkQXJndW1lbnQoY2xfZmxvYXQgdmFs
dWUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2xTZXRLZXJuZWxBcmcobV9rZXJu
ZWwsIGluZGV4KyssIHNpemVvZihjbF9mbG9hdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZ2
YWx1ZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KGNs
X3NhbXBsZXIgaGFuZGxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNsU2V0S2Vy
bmVsQXJnKG1fa2VybmVsLCBpbmRleCsrLCBzaXplb2YoY2xfc2FtcGxlciksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KCZoYW5kbGUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgT3Bl
bkNMSGFuZGxlIGFkZEFyZ3VtZW50KHZvaWQqIGJ1ZmZlciwgaW50IHNpemUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgT3BlbkNMSGFuZGxlIGhhbmRsZShjbENyZWF0ZUJ1ZmZlciht
X2NvbnRleHQtPmRldmljZUNvbnRleHQoKSwgQ0xfTUVNX1JFQURfT05MWSwgc2l6ZSwgMCwgMCkp
OworICAgICAgICAgICAgICAgIGNsRW5xdWV1ZVdyaXRlQnVmZmVyKG1fY29udGV4dC0+Y29tbWFu
ZFF1ZXVlKCksIGhhbmRsZSwgQ0xfVFJVRSwgMCwgc2l6ZSwgYnVmZmVyLCAwLCAwLCAwKTsKKyAg
ICAgICAgICAgICAgICBjbFNldEtlcm5lbEFyZyhtX2tlcm5lbCwgaW5kZXgrKywgc2l6ZW9mKE9w
ZW5DTEhhbmRsZSksIGhhbmRsZS5oYW5kbGVBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgIHJl
dHVybiBoYW5kbGU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgcnVuKCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjbEZpbmlzaChtX2NvbnRleHQtPm1fY29tbWFu
ZFF1ZXVlKTsKKyAgICAgICAgICAgICAgICBjbEVucXVldWVORFJhbmdlS2VybmVsKG1fY29udGV4
dC0+bV9jb21tYW5kUXVldWUsIG1fa2VybmVsLCAyLCAwLCBtX2dsb2JhbFNpemUsIDAsIDAsIDAs
IDApOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBt
X2NvbnRleHQ7CisgICAgICAgICAgICBjbF9rZXJuZWwgbV9rZXJuZWw7CisgICAgICAgICAgICBz
aXplX3QgbV9nbG9iYWxTaXplWzJdOworICAgICAgICAgICAgaW50IGluZGV4OworICAgICAgICB9
OworCisgICAgc3RhdGljIGNsX3Byb2dyYW0gY29tcGlsZVByb2dyYW0oY29uc3QgY2hhciopOwor
ICAgIHN0YXRpYyBpbmxpbmUgY2xfa2VybmVsIGtlcm5lbEJ5TmFtZShjbF9wcm9ncmFtIHByb2dy
YW0sIGNvbnN0IGNoYXIqIG5hbWUpIHsgcmV0dXJuIGNsQ3JlYXRlS2VybmVsKHByb2dyYW0sIG5h
bWUsIDApOyB9CisKKyAgICBzdGF0aWMgRmlsdGVyQ29udGV4dE9wZW5DTCogbV9jb250ZXh0Owor
ICAgIHN0YXRpYyBpbnQgbV9hbHJlYWR5SW5pdGlhbGl6ZWQ7CisKKyAgICBjbF9kZXZpY2VfaWQg
bV9kZXZpY2VJZDsKKyAgICBjbF9jb250ZXh0IG1fZGV2aWNlQ29udGV4dDsKKyAgICBjbF9jb21t
YW5kX3F1ZXVlIG1fY29tbWFuZFF1ZXVlOworCisgICAgY2xfcHJvZ3JhbSBtX3RyYW5zZm9ybUNv
bG9yU3BhY2VQcm9ncmFtOworICAgIGNsX2tlcm5lbCBtX3RyYW5zZm9ybUNvbG9yU3BhY2VLZXJu
ZWw7CisKKyAgICBjbF9wcm9ncmFtIG1fdHVyYnVsZW5jZVByb2dyYW07CisgICAgY2xfa2VybmVs
IG1fdHVyYnVsZW5jZU9wZXJhdGlvbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShPUEVOQ0wpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVT
b3VyY2VBbHBoYS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI5M2Qw
NwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VBbHBoYS5jcHAKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChD
KSAyMDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVAaW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRklM
VEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJTb3VyY2VBbHBoYS5oIgorCisjaW5j
bHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgorI2luY2x1
ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBTb3VyY2VB
bHBoYTo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCog
Y29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKTsKKworICAgIGlmICghY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcGxhdGZvcm1BcHBseVNvZnR3YXJl
KCk7CisgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0gYXNJbWFnZUJ1ZmZlcigpOworICAg
IGlmICghc291cmNlSW1hZ2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxV
aW50OENsYW1wZWRBcnJheT4gc291cmNlSW1hZ2VEYXRhID0gc291cmNlSW1hZ2UtPmdldFVubXVs
dGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCksIHNvdXJjZUltYWdlLT5pbnRlcm5h
bFNpemUoKSkpOworICAgIGNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KHNvdXJjZUltYWdlRGF0YS0+
ZGF0YSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFU291
cmNlR3JhcGhpYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3Bl
bmNsL09wZW5DTEZFU291cmNlR3JhcGhpYy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uYjJlOWVmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcApAQCAtMCww
ICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2Vk
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQu
aHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgIlNvdXJj
ZUdyYXBoaWMuaCIKKworI2luY2x1ZGUgIkZpbHRlci5oIgorI2luY2x1ZGUgIkZpbHRlckNvbnRl
eHRPcGVuQ0wuaCIKKyNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Jvb2wgU291cmNlR3JhcGhpYzo6cGxhdGZvcm1BcHBseU9wZW5DTCgpCit7CisgICAg
RmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRl
eHQoKTsKKworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisgICAgSW1hZ2VCdWZmZXIqIHNvdXJjZUltYWdlID0g
YXNJbWFnZUJ1ZmZlcigpOworICAgIGlmICghc291cmNlSW1hZ2UpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gc291cmNlSW1hZ2VEYXRhID0g
c291cmNlSW1hZ2UtPmdldFVubXVsdGlwbGllZEltYWdlRGF0YShJbnRSZWN0KEludFBvaW50KCks
IHNvdXJjZUltYWdlLT5pbnRlcm5hbFNpemUoKSkpOworICAgIGNyZWF0ZU9wZW5DTEltYWdlUmVz
dWx0KHNvdXJjZUltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJM
RShPUEVOQ0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvb3BlbmNsL09wZW5DTEZFVHVyYnVsZW5jZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFVHVyYnVsZW5jZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg5ZjBmZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNl
LmNwcApAQCAtMCwwICsxLDI1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJz
aXR5IG9mIFN6ZWdlZAorICogQ29weXJpZ2h0IChDKSAyMDEyIFRhbWFzIEN6ZW5lIDx0Y3plbmVA
aW5mLnUtc3plZ2VkLmh1PgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCisjaW5j
bHVkZSAiRkVUdXJidWxlbmNlLmgiCisKKyNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuY3BwIgorI2lu
Y2x1ZGUgIkZpbHRlckNvbnRleHRPcGVuQ0wuaCIKKyNpbmNsdWRlICJTVkdGaWx0ZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgY29uc3QgY2hhciogdHVyYnVsZW5jZUtlcm5l
bFByb2dyYW0gPQorUFJPR1JBTV9TVFIoCitfX2NvbnN0YW50IGludCBzX3Blcmxpbk5vaXNlID0g
NDA5NjsKK19fY29uc3RhbnQgaW50IHNfYmxvY2tTaXplID0gMjU2OworX19jb25zdGFudCBpbnQg
c19ibG9ja01hc2sgPSAyNTU7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgbm9pc2VQb3Np
dGlvbkludGVnZXJWYWx1ZTsKKyAgICBmbG9hdCBub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZTsK
K30gTm9pc2U7CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgd2lkdGg7CisgICAgaW50IHdy
YXBYOworICAgIGludCBoZWlnaHQ7CisgICAgaW50IHdyYXBZOworfSBTdGl0Y2hEYXRhOworCitm
bG9hdCBsaW5lYXJJbnRlcnBvbGF0aW9uKGZsb2F0IHQsIGZsb2F0IGEsIGZsb2F0IGIpCit7Cisg
ICAgcmV0dXJuIG1hZChiIC0gYSwgdCwgYSk7Cit9CisKK2Zsb2F0IG5vaXNlMkQoX19jb25zdGFu
dCBmbG9hdCAqY29tcG9uZW50LCBfX2NvbnN0YW50IGludCAqbGF0dGljZVNlbGVjdG9yLCBTdGl0
Y2hEYXRhIHN0aXRjaERhdGEsIGZsb2F0IG5vaXNlVmVjdG9yWCwgZmxvYXQgbm9pc2VWZWN0b3JZ
LCBpbnQgc3RpdGNoVGlsZXMpCit7CisgICAgTm9pc2Ugbm9pc2VYOworICAgIG5vaXNlWC5ub2lz
ZVBvc2l0aW9uSW50ZWdlclZhbHVlID0gKGludCkobm9pc2VWZWN0b3JYICsgc19wZXJsaW5Ob2lz
ZSk7CisgICAgbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlID0gKG5vaXNlVmVjdG9y
WCArIHNfcGVybGluTm9pc2UpIC0gbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7Cisg
ICAgTm9pc2Ugbm9pc2VZOworICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID0g
KGludCkobm9pc2VWZWN0b3JZICsgc19wZXJsaW5Ob2lzZSk7CisgICAgbm9pc2VZLm5vaXNlUG9z
aXRpb25GcmFjdGlvblZhbHVlID0gKG5vaXNlVmVjdG9yWSArIHNfcGVybGluTm9pc2UpIC0gbm9p
c2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWU7CisKKyAgICAvLyBJZiBzdGl0Y2hpbmcsIGFk
anVzdCBsYXR0aWNlIHBvaW50cyBhY2NvcmRpbmdseS4KKyAgICBpZiAoc3RpdGNoVGlsZXMpIHsK
KyAgICAgICAgaWYgKG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID49IHN0aXRjaERh
dGEud3JhcFgpCisgICAgICAgICAgICBub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAt
PSBzdGl0Y2hEYXRhLndpZHRoOworICAgICAgICBpZiAobm9pc2VYLm5vaXNlUG9zaXRpb25JbnRl
Z2VyVmFsdWUgPj0gc3RpdGNoRGF0YS53cmFwWCAtIDEpCisgICAgICAgICAgICBub2lzZVgubm9p
c2VQb3NpdGlvbkludGVnZXJWYWx1ZSAtPSBzdGl0Y2hEYXRhLndpZHRoIC0gMTsKKyAgICAgICAg
aWYgKG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlID49IHN0aXRjaERhdGEud3JhcFkp
CisgICAgICAgICAgICBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSAtPSBzdGl0Y2hE
YXRhLmhlaWdodDsKKyAgICAgICAgaWYgKG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVl
ID49IHN0aXRjaERhdGEud3JhcFkgLSAxKQorICAgICAgICAgICAgbm9pc2VZLm5vaXNlUG9zaXRp
b25JbnRlZ2VyVmFsdWUgLT0gc3RpdGNoRGF0YS5oZWlnaHQgLSAxOworICAgIH0KKworICAgIG5v
aXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOworICAgIG5vaXNl
WS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICY9IHNfYmxvY2tNYXNrOworICAgIGludCBsYXR0
aWNlSW5kZXggPSBsYXR0aWNlU2VsZWN0b3Jbbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFs
dWVdOworICAgIGludCBuZXh0TGF0dGljZUluZGV4ID0gbGF0dGljZVNlbGVjdG9yWyhub2lzZVgu
bm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZSArIDEpICYgc19ibG9ja01hc2tdOworCisgICAgZmxv
YXQgc3ggPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBub2lzZVgubm9pc2VQ
b3NpdGlvbkZyYWN0aW9uVmFsdWUgKiAoMyAtIDIgKiBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0
aW9uVmFsdWUpOworICAgIGZsb2F0IHN5ID0gbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZh
bHVlICogbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogKDMgLSAyICogbm9pc2VZ
Lm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlKTsKKworICAgIC8vIFRoaXMgaXMgdGFrZW4gMTox
IGZyb20gU1ZHIHNwZWM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRzExL2ZpbHRlcnMuaHRtbCNm
ZVR1cmJ1bGVuY2VFbGVtZW50LgorICAgIGludCB0ZW1wID0gbGF0dGljZVNlbGVjdG9yW2xhdHRp
Y2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKKyAgICBmbG9hdCB1
ID0gbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogY29tcG9uZW50W3RlbXAgKiAy
XSArIG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIGNvbXBvbmVudFt0ZW1wICog
MiArIDFdOworICAgIHRlbXAgPSBsYXR0aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5v
aXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlXTsKKyAgICBmbG9hdCB2ID0gKG5vaXNlWC5u
b2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAtIDEpICogY29tcG9uZW50W3RlbXAgKiAyXSArIG5v
aXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIGNvbXBvbmVudFt0ZW1wICogMiArIDFd
OworICAgIGZsb2F0IGEgPSBsaW5lYXJJbnRlcnBvbGF0aW9uKHN4LCB1LCB2KTsKKyAgICB0ZW1w
ID0gbGF0dGljZVNlbGVjdG9yW2xhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50
ZWdlclZhbHVlICsgMV07CisgICAgdSA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1
ZSAqIGNvbXBvbmVudFt0ZW1wICogMl0gKyAobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZh
bHVlIC0gMSkgKiBjb21wb25lbnRbdGVtcCAqIDIgKyAxXTsKKyAgICB0ZW1wID0gbGF0dGljZVNl
bGVjdG9yW25leHRMYXR0aWNlSW5kZXggKyBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1
ZSArIDFdOworICAgIHYgPSAobm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkg
KiBjb21wb25lbnRbdGVtcCAqIDJdICsgKG5vaXNlWS5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1
ZSAtIDEpICogY29tcG9uZW50W3RlbXAgKiAyICsgMV07CisgICAgZmxvYXQgYiA9IGxpbmVhcklu
dGVycG9sYXRpb24oc3gsIHUsIHYpOworICAgIHJldHVybiBsaW5lYXJJbnRlcnBvbGF0aW9uKHN5
LCBhLCBiKTsKK30KKworX19rZXJuZWwgdm9pZCBUdXJidWxlbmNlKF9fd3JpdGVfb25seSBpbWFn
ZTJkX3QgZGVzdGluYXRpb24sIF9fY29uc3RhbnQgZmxvYXQgKnRyYW5zZm9ybSwgX19jb25zdGFu
dCBmbG9hdCAqcmVkQ29tcG9uZW50LAorICAgIF9fY29uc3RhbnQgZmxvYXQgKmdyZWVuQ29tcG9u
ZW50LCBfX2NvbnN0YW50IGZsb2F0ICpibHVlQ29tcG9uZW50LCBfX2NvbnN0YW50IGZsb2F0ICph
bHBoYUNvbXBvbmVudCwKKyAgICBfX2NvbnN0YW50IGludCAqbGF0dGljZVNlbGVjdG9yLCBfX3By
aXZhdGUgaW50IG9mZnNldFgsIF9fcHJpdmF0ZSBpbnQgb2Zmc2V0WSwgX19wcml2YXRlIGludCB0
aWxlV2lkdGgsCisgICAgX19wcml2YXRlIGludCB0aWxlSGVpZ2h0LCBfX3ByaXZhdGUgZmxvYXQg
YmFzZUZyZXF1ZW5jeVgsIF9fcHJpdmF0ZSBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgX19wcml2YXRl
IGludCBzdGl0Y2hUaWxlcywKKyAgICBfX3ByaXZhdGUgaW50IG51bU9jdGF2ZXMsIF9fcHJpdmF0
ZSBpbnQgdHlwZSwgX19wcml2YXRlIGludCBmaWx0ZXJfaGVpZ2h0KQoreworICAgIFN0aXRjaERh
dGEgc3RpdGNoRGF0YSA9IHsgMCwgMCwgMCwgMCB9OworICAgIC8vIEFkanVzdCB0aGUgYmFzZSBm
cmVxdWVuY2llcyBpZiBuZWNlc3NhcnkgZm9yIHN0aXRjaGluZy4KKyAgICBpZiAoc3RpdGNoVGls
ZXMpIHsKKyAgICAgICAgLy8gV2hlbiBzdGl0Y2hpbmcgdGlsZWQgdHVyYnVsZW5jZSwgdGhlIGZy
ZXF1ZW5jaWVzIG11c3QgYmUgYWRqdXN0ZWQKKyAgICAgICAgLy8gc28gdGhhdCB0aGUgdGlsZSBi
b3JkZXJzIHdpbGwgYmUgY29udGludW91cy4KKyAgICAgICAgaWYgKGJhc2VGcmVxdWVuY3lYKSB7
CisgICAgICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcih0aWxlV2lkdGggKiBiYXNl
RnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7CisgICAgICAgICAgICBmbG9hdCBoaWdoRnJlcXVlbmN5
ID0gY2VpbCh0aWxlV2lkdGggKiBiYXNlRnJlcXVlbmN5WCkgLyB0aWxlV2lkdGg7CisgICAgICAg
ICAgICAvLyBCYXNlRnJlcXVlbmN5IHNob3VsZCBiZSBub24tbmVnYXRpdmUgYWNjb3JkaW5nIHRv
IHRoZSBzdGFuZGFyZC4KKyAgICAgICAgICAgIGJhc2VGcmVxdWVuY3lYID0gKGJhc2VGcmVxdWVu
Y3lYIC8gbG93RnJlcXVlbmN5IDwgaGlnaEZyZXF1ZW5jeSAvIGJhc2VGcmVxdWVuY3lYKSA/IGxv
d0ZyZXF1ZW5jeSA6IGhpZ2hGcmVxdWVuY3k7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGJhc2VG
cmVxdWVuY3lZKSB7CisgICAgICAgICAgICBmbG9hdCBsb3dGcmVxdWVuY3kgPSBmbG9vcih0aWxl
SGVpZ2h0ICogYmFzZUZyZXF1ZW5jeVkpIC8gdGlsZUhlaWdodDsKKyAgICAgICAgICAgIGZsb2F0
IGhpZ2hGcmVxdWVuY3kgPSBjZWlsKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxl
SGVpZ2h0OworICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVkgPSAoYmFzZUZyZXF1ZW5jeVkgLyBs
b3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVkpID8gbG93RnJlcXVl
bmN5IDogaGlnaEZyZXF1ZW5jeTsKKyAgICAgICAgfQorICAgICAgICAvLyBTZXQgdXAgVHVyYnVs
ZW5jZUluaXRpYWwgc3RpdGNoIHZhbHVlcy4KKyAgICAgICAgc3RpdGNoRGF0YS53aWR0aCA9IHJv
dW5kKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKTsKKyAgICAgICAgc3RpdGNoRGF0YS53cmFw
WCA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLndpZHRoOworICAgICAgICBzdGl0Y2hEYXRh
LmhlaWdodCA9IHJvdW5kKHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSk7CisgICAgICAgIHN0
aXRjaERhdGEud3JhcFkgPSBzX3Blcmxpbk5vaXNlICsgc3RpdGNoRGF0YS5oZWlnaHQ7CisgICAg
fQorICAgIGZsb2F0NCB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSAoZmxvYXQ0KSgwLCAwLCAw
LCAwKTsKKyAgICBmbG9hdCB4ID0gKGdldF9nbG9iYWxfaWQoMCkgKyBvZmZzZXRYKSAqIGJhc2VG
cmVxdWVuY3lYOworICAgIGZsb2F0IHkgPSAoZ2V0X2dsb2JhbF9pZCgxKSArIG9mZnNldFkpICog
YmFzZUZyZXF1ZW5jeVk7CisKKyAgICBmbG9hdCBub2lzZVZlY3RvclggPSB0cmFuc2Zvcm1bMF0g
KiB4ICsgdHJhbnNmb3JtWzJdICogeSArIHRyYW5zZm9ybVs0XTsKKyAgICBmbG9hdCBub2lzZVZl
Y3RvclkgPSB0cmFuc2Zvcm1bMV0gKiB4ICsgdHJhbnNmb3JtWzNdICogeSArIHRyYW5zZm9ybVs1
XTsKKworICAgIGZsb2F0IHJhdGlvID0gMTsKKyAgICBmb3IgKGludCBvY3RhdmUgPSAwOyBvY3Rh
dmUgPCBudW1PY3RhdmVzOyArK29jdGF2ZSkgeworICAgICAgICBmbG9hdDQgbm9pc2UyRFJlc3Vs
dCA9IChmbG9hdDQpKCBub2lzZTJEKHJlZENvbXBvbmVudCwgbGF0dGljZVNlbGVjdG9yLCBzdGl0
Y2hEYXRhLCBub2lzZVZlY3RvclgsIG5vaXNlVmVjdG9yWSwgc3RpdGNoVGlsZXMpIC8gcmF0aW8s
CisgICAgbm9pc2UyRChncmVlbkNvbXBvbmVudCwgbGF0dGljZVNlbGVjdG9yLCBzdGl0Y2hEYXRh
LCBub2lzZVZlY3RvclgsIG5vaXNlVmVjdG9yWSwgc3RpdGNoVGlsZXMpIC8gcmF0aW8sCisgICAg
bm9pc2UyRChibHVlQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5vaXNl
VmVjdG9yWCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRpbywKKyAgICBub2lzZTJE
KGFscGhhQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERhdGEsIG5vaXNlVmVjdG9y
WCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRpbyk7CisKKyAgICAgICAgdHVyYnVs
ZW5jZUZ1bmN0aW9uUmVzdWx0ICs9ICh0eXBlID09IDEpID8gbm9pc2UyRFJlc3VsdCA6IGZhYnMo
bm9pc2UyRFJlc3VsdCk7CisKKyAgICAgICAgbm9pc2VWZWN0b3JYICo9IDI7CisgICAgICAgIG5v
aXNlVmVjdG9yWSAqPSAyOworICAgICAgICByYXRpbyAqPSAyOworICAgICAgICBpZiAoc3RpdGNo
VGlsZXMpIHsKKyAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGl0Y2ggdmFsdWVzLiBTdWJ0cmFjdGlu
ZyBzX3Blcmxpbk5vaXNlb2lzZSBiZWZvcmUgdGhlIG11bHRpcGxpY2F0aW9uIGFuZAorICAgICAg
ICAgICAgLy8gYWRkaW5nIGl0IGFmdGVyd2FyZCBzaW1wbGlmaWVzIHRvIHN1YnRyYWN0aW5nIGl0
IG9uY2UuCisgICAgICAgICAgICBzdGl0Y2hEYXRhLndpZHRoICo9IDI7CisgICAgICAgICAgICBz
dGl0Y2hEYXRhLndyYXBYID0gMiAqIHN0aXRjaERhdGEud3JhcFggLSBzX3Blcmxpbk5vaXNlOwor
ICAgICAgICAgICAgc3RpdGNoRGF0YS5oZWlnaHQgKj0gMjsKKyAgICAgICAgICAgIHN0aXRjaERh
dGEud3JhcFkgPSAyICogc3RpdGNoRGF0YS53cmFwWSAtIHNfcGVybGluTm9pc2U7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSAxKQorICAgICAgICB0dXJidWxlbmNlRnVuY3Rp
b25SZXN1bHQgPSBtYWQoMC41ZiwgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0LCAwLjVmKTsKKyAg
ICAvLyBDbGFtcCByZXN1bHQuCisgICAgdHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0ID0gY2xhbXAo
dHVyYnVsZW5jZUZ1bmN0aW9uUmVzdWx0LCAwLjBmLCAxLjBmKTsKKworICAgIHdyaXRlX2ltYWdl
ZihkZXN0aW5hdGlvbiwgKGludDIpKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkp
LCB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQpOworfQorKTsKKworaW5saW5lIE9wZW5DTENvbXBp
bGVTdGF0dXMgRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGlsZUZFVHVyYnVsZW5jZSgpCit7Cisg
ICAgaWYgKCFtX3R1cmJ1bGVuY2VPcGVyYXRpb24pIHsKKyAgICAgICAgbV90dXJidWxlbmNlUHJv
Z3JhbSA9IGNvbXBpbGVQcm9ncmFtKHR1cmJ1bGVuY2VLZXJuZWxQcm9ncmFtKTsKKyAgICAgICAg
aWYgKCFtX3R1cmJ1bGVuY2VQcm9ncmFtKQorICAgICAgICAgICAgcmV0dXJuIG9wZW5jbENvbXBp
bGVGYWlsZWQ7CisgICAgICAgIG1fdHVyYnVsZW5jZU9wZXJhdGlvbiA9IGtlcm5lbEJ5TmFtZSht
X3R1cmJ1bGVuY2VQcm9ncmFtLCAiVHVyYnVsZW5jZSIpOworICAgIH0KKyAgICBBU1NFUlQoIW1f
dHVyYnVsZW5jZU9wZXJhdGlvbik7CisgICAgcmV0dXJuIG9wZW5jbENvbXBpbGVTdWNjZXNmdWw7
Cit9CisKK2lubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVUdXJidWxlbmNl
KE9wZW5DTEhhbmRsZSBkZXN0aW5hdGlvbiwKKyAgICBJbnRTaXplIGRlc3RpbmF0aW9uU2l6ZSwg
aW50IGJsb2NrU2l6ZSwKKyAgICB2b2lkKiB0cmFuc2Zvcm0sIHZvaWQqIHJlZENvbXBvbmVudCwg
dm9pZCogZ3JlZW5Db21wb25lbnQsCisgICAgdm9pZCogYmx1ZUNvbXBvbmVudCwgdm9pZCogYWxw
aGFDb21wb25lbnQsCisgICAgdm9pZCogbGF0dGljZVNlbGVjdG9yLCBpbnQgb2Zmc2V0WCwgaW50
IG9mZnNldFksIGludCB0aWxlV2lkdGgsIGludCB0aWxlSGVpZ2h0LAorICAgIGZsb2F0IGJhc2VG
cmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgYm9vbCBzdGl0Y2hUaWxlcywgaW50IG51
bU9jdGF2ZXMsIGludCB0eXBlKQoreworICAgIFJ1bktlcm5lbCBrZXJuZWwodGhpcywgbV90dXJi
dWxlbmNlT3BlcmF0aW9uLCBkZXN0aW5hdGlvblNpemUud2lkdGgoKSwgZGVzdGluYXRpb25TaXpl
LmhlaWdodCgpKTsKKworICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlvbik7CisgICAg
T3BlbkNMSGFuZGxlIHRyYW5zZm9ybUhhbmRsZShrZXJuZWwuYWRkQXJndW1lbnQodHJhbnNmb3Jt
LCBzaXplb2YoZmxvYXQpICogNikpOworICAgIE9wZW5DTEhhbmRsZSByZWRDb21wb25lbnRIYW5k
bGUoa2VybmVsLmFkZEFyZ3VtZW50KHJlZENvbXBvbmVudCwgc2l6ZW9mKGZsb2F0KSAqICgyICog
YmxvY2tTaXplICsgMikgKiAyKSk7CisgICAgT3BlbkNMSGFuZGxlIGdyZWVuQ29tcG9uZW50SGFu
ZGxlKGtlcm5lbC5hZGRBcmd1bWVudChncmVlbkNvbXBvbmVudCwgc2l6ZW9mKGZsb2F0KSAqICgy
ICogYmxvY2tTaXplICsgMikgKiAyKSk7CisgICAgT3BlbkNMSGFuZGxlIGJsdWVDb21wb25lbnRI
YW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KGJsdWVDb21wb25lbnQsIHNpemVvZihmbG9hdCkgKiAo
MiAqIGJsb2NrU2l6ZSArIDIpICogMikpOworICAgIE9wZW5DTEhhbmRsZSBhbHBoYUNvbXBvbmVu
dEhhbmRsZShrZXJuZWwuYWRkQXJndW1lbnQoYWxwaGFDb21wb25lbnQsIHNpemVvZihmbG9hdCkg
KiAoMiAqIGJsb2NrU2l6ZSArIDIpICogMikpOworICAgIE9wZW5DTEhhbmRsZSBsYXR0aWNlU2Vs
ZWN0b3JIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KGxhdHRpY2VTZWxlY3Rvciwgc2l6ZW9mKGlu
dCkgKiAoMiAqIGJsb2NrU2l6ZSArIDIpKSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KG9mZnNl
dFgpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChvZmZzZXRZKTsKKyAgICBrZXJuZWwuYWRkQXJn
dW1lbnQodGlsZVdpZHRoKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQodGlsZUhlaWdodCk7Cisg
ICAga2VybmVsLmFkZEFyZ3VtZW50KGJhc2VGcmVxdWVuY3lYKTsKKyAgICBrZXJuZWwuYWRkQXJn
dW1lbnQoYmFzZUZyZXF1ZW5jeVkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChzdGl0Y2hUaWxl
cyk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KG51bU9jdGF2ZXMpOworICAgIGtlcm5lbC5hZGRB
cmd1bWVudCh0eXBlKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoZGVzdGluYXRpb25TaXplLmhl
aWdodCgpKTsKKworICAgIGtlcm5lbC5ydW4oKTsKKworICAgIHRyYW5zZm9ybUhhbmRsZS5jbGVh
cigpOworICAgIHJlZENvbXBvbmVudEhhbmRsZS5jbGVhcigpOworICAgIGdyZWVuQ29tcG9uZW50
SGFuZGxlLmNsZWFyKCk7CisgICAgYmx1ZUNvbXBvbmVudEhhbmRsZS5jbGVhcigpOworICAgIGFs
cGhhQ29tcG9uZW50SGFuZGxlLmNsZWFyKCk7CisgICAgbGF0dGljZVNlbGVjdG9ySGFuZGxlLmNs
ZWFyKCk7Cit9CisKK2Jvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sK
KyAgICBzdGF0aWMgT3BlbkNMQ29tcGlsZVN0YXR1cyBjb21waWxlU3RhdHVzID0gb3BlbmNsTm90
Q29tcGlsZWRZZXQ7CisKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVy
Q29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgaWYgKGNvbXBpbGVTdGF0dXMgIT0gb3BlbmNsQ29tcGlsZVN1Y2Nl
c2Z1bCkgeworICAgICAgICBpZiAoY29tcGlsZVN0YXR1cyA9PSBvcGVuY2xOb3RDb21waWxlZFll
dCkKKyAgICAgICAgICAgIGNvbXBpbGVTdGF0dXMgPSBjb250ZXh0LT5jb21waWxlRkVUdXJidWxl
bmNlKCk7CisgICAgICAgIGlmIChjb21waWxlU3RhdHVzID09IG9wZW5jbENvbXBpbGVGYWlsZWQp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgT3BlbkNMSGFuZGxlIGRl
c3RpbmF0aW9uID0gY3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQoKTsKKworICAgIFBhaW50aW5nRGF0
YSBwYWludGluZ0RhdGEobV9zZWVkLCByb3VuZGVkSW50U2l6ZShmaWx0ZXJQcmltaXRpdmVTdWJy
ZWdpb24oKS5zaXplKCkpKTsKKyAgICBpbml0UGFpbnQocGFpbnRpbmdEYXRhKTsKKworICAgIEFm
ZmluZVRyYW5zZm9ybSBpbnZlcnRlZFRyYW5zZm9ybSA9IHJlaW50ZXJwcmV0X2Nhc3Q8U1ZHRmls
dGVyKj4oZmlsdGVyKCkpLT5hYnNvbHV0ZVRyYW5zZm9ybSgpLmludmVyc2UoKTsKKyAgICBmbG9h
dCB0cmFuc2Zvcm1Db21wb25lbnRzWzZdID0geyBpbnZlcnRlZFRyYW5zZm9ybS5hKCksIGludmVy
dGVkVHJhbnNmb3JtLmIoKSwgaW52ZXJ0ZWRUcmFuc2Zvcm0uYygpLCBpbnZlcnRlZFRyYW5zZm9y
bS5kKCksIGludmVydGVkVHJhbnNmb3JtLmUoKSwgaW52ZXJ0ZWRUcmFuc2Zvcm0uZigpIH07CisK
KyAgICBjb250ZXh0LT5hcHBseUZFVHVyYnVsZW5jZShkZXN0aW5hdGlvbiwgYWJzb2x1dGVQYWlu
dFJlY3QoKS5zaXplKCksIHNfYmxvY2tTaXplLCB0cmFuc2Zvcm1Db21wb25lbnRzLCBwYWludGlu
Z0RhdGEuZ3JhZGllbnQsCisgICAgICAgIHBhaW50aW5nRGF0YS5ncmFkaWVudCArIDEsIHBhaW50
aW5nRGF0YS5ncmFkaWVudCArIDIsIHBhaW50aW5nRGF0YS5ncmFkaWVudCArIDMsIHBhaW50aW5n
RGF0YS5sYXR0aWNlU2VsZWN0b3IsCisgICAgICAgIGFic29sdXRlUGFpbnRSZWN0KCkueCgpLCBh
YnNvbHV0ZVBhaW50UmVjdCgpLnkoKSwgcGFpbnRpbmdEYXRhLmZpbHRlclNpemUud2lkdGgoKSwg
cGFpbnRpbmdEYXRhLmZpbHRlclNpemUuaGVpZ2h0KCksCisgICAgICAgIG1fYmFzZUZyZXF1ZW5j
eVgsIG1fYmFzZUZyZXF1ZW5jeVksIG1fc3RpdGNoVGlsZXMsIG1fbnVtT2N0YXZlcywgbV90eXBl
KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFuZGxlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEhhbmRs
ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmNTg1ZGMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09w
ZW5DTEhhbmRsZS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIg
VGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisjaWYgRU5BQkxFKE9QRU5DTCkKKwor
I2lmbmRlZiBPcGVuQ0xIYW5kbGVfaAorI2RlZmluZSBPcGVuQ0xIYW5kbGVfaAorCisjaW5jbHVk
ZSAiQ0wvY2wuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBPcGVuQ0xIYW5kbGUg
eworcHVibGljOgorICAgIE9wZW5DTEhhbmRsZSgpIDogbV9vcGVuQ0xNZW1vcnkoMCkgeyB9Cisg
ICAgT3BlbkNMSGFuZGxlKGNsX21lbSBvcGVuQ0xNZW1vcnkpIDogbV9vcGVuQ0xNZW1vcnkob3Bl
bkNMTWVtb3J5KSB7IH0KKworICAgIG9wZXJhdG9yIGNsX21lbSgpIHsgcmV0dXJuIG1fb3BlbkNM
TWVtb3J5OyB9CisKKyAgICB2b2lkIG9wZXJhdG9yPShPcGVuQ0xIYW5kbGUgb3BlbkNMTWVtb3J5
KSB7IG1fb3BlbkNMTWVtb3J5ID0gb3BlbkNMTWVtb3J5OyB9CisKKyAgICAvLyBUaGlzIGNvbnZl
cnNpb24gb3BlcmF0b3IgYWxsb3dzIGltcGxpY2l0IGNvbnZlcnNpb24gdG8gYm9vbCBidXQgbm90
IHRvIG90aGVyIGludGVnZXIgdHlwZXMuCisgICAgdHlwZWRlZiBjbF9tZW0gKE9wZW5DTEhhbmRs
ZTo6KlVuc3BlY2lmaWVkQm9vbFR5cGUpOworICAgIG9wZXJhdG9yIFVuc3BlY2lmaWVkQm9vbFR5
cGUoKSBjb25zdCB7IHJldHVybiBtX29wZW5DTE1lbW9yeSA/ICZPcGVuQ0xIYW5kbGU6Om1fb3Bl
bkNMTWVtb3J5IDogMDsgfQorCisgICAgdm9pZCogaGFuZGxlQWRkcmVzcygpIHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZtX29wZW5DTE1lbW9yeSk7IH0KKworICAgIHZvaWQgY2xl
YXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fb3BlbkNMTWVtb3J5KQorICAgICAgICAgICAgY2xS
ZWxlYXNlTWVtT2JqZWN0KG1fb3BlbkNMTWVtb3J5KTsKKyAgICAgICAgbV9vcGVuQ0xNZW1vcnkg
PSAwOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjbF9tZW0gbV9vcGVuQ0xNZW1vcnk7Cit9Owor
Cit9CisKKyNlbmRpZgorI2VuZGlmIC8vIEVOQUJMRShPUEVOQ0wpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>175996</attachid>
            <date>2012-11-26 06:43:57 -0800</date>
            <delta_ts>2012-11-26 08:14:47 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>0006-ocl.patch</filename>
            <type>text/plain</type>
            <size>49293</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZDFmMTU4Li44ODg2ZGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzQg
QEAKKzIwMTItMTEtMjYgIFRhbWFzIEN6ZW5lICA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKwor
ICAgICAgICBPcGVuQ0wgdmVyc2lvbiBvZiBTb3VyY2VBbHBoYSwgU291cmNlR3JhcGhpY3MgYW5k
IEZFVHVyYnVsZW5jZSBmaWx0ZXIgZWZmZWN0cyAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5ODI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjb250YWlucyB0aGUgT3BlbkNMIGltcGxl
bWVudGF0aW9uIG9mIFNvdXJjZUFscGhhLCBTb3VyY2VHcmFwaGljLCBGRVR1cmJ1bGVuY2UgYW5k
IGEgc2ltcGxlIE9wZW5DTCBlbnZpcm9ubWVudC4gCisgICAgICAgIEF0IHRoZSBtb21lbnQgb25s
eSB0aGUgUXQgYnVpbGQgc3lzdGVtIGlzIHN1cHBvcnRlZCAKKyAgICAgICAgfjN4IHNwZWVkLXVw
IChkZXBlbmRpbmcgb24gaGFyZHdhcmUgY29uZmlndXJhdGlvbikKKworICAgICAgICAqIFRhcmdl
dC5wcmk6CisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaDogQWRkZWQgcGxhdGZvcm1BcHBseU9wZW5DTCgpIHZp
cnR1YWwgZnVuY3Rpb24uCisgICAgICAgIChGRVR1cmJ1bGVuY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDogQWRkZWQgcGxhdGZvcm0gc3Bl
Y2lmaWMgYXBwbHkuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwbGF0Zm9y
bUFwcGx5T3BlbkNMKTogQSBmdW5jdGlvbiB0byB1c2Ugc29mdHdhcmUgY29tcHV0aW5nIGlmIGEg
ZmlsdGVyIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBPcGVuQ0wuIEl0IHdpbGwgYmUgZGVsZXRlZCBh
ZnRlciBhbGwgb2YgdGhlIGZpbHRlcnMgYXJlIGltcGxlbWVudGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmFzSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpv
cGVuQ0xJbWFnZVRvSW1hZ2VCdWZmZXIpOiBHZXRzIHRoZSByZXN1bHQgb2YgdGhlIGZpbHRlciBm
cm9tIHRoZSBPcGVuQ0wgZGV2aWNlIGFuZCBjb252ZXJ0cyBpdCB0byBJbWFnZUJ1ZmZlciB0eXBl
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVPcGVuQ0xJbWFnZVJlc3Vs
dCk6IEFsbG9jYXRlcyBtZW1vcnkgb24gT3BlbkNMIGRldmljZSBhbmQgaWYgaXQgZ2V0cyBhbiBp
bWFnZSBhcyBhIHBhcmFtZXRlciwgaXQgdXBsb2FkcyB0aGUgaW1hZ2UgdG8gdGhlIE9wZW5DTCBk
ZXZpY2UuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UpOiAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oOgorICAgICAgICAoRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6b3BlbkNMSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpz
ZXRPcGVuQ0xJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3Vs
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgor
ICAgICAgICAoU291cmNlQWxwaGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAoU291cmNlR3JhcGhpYyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRP
cGVuQ0w6OmNvbnRleHQpOiBDb25maWd1cmVzIHRoZSBPcGVuQ0wgZW52aXJvbm1lbnQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpjcmVhdGVPcGVuQ0xJbWFnZSk6IEFs
bG9jYXRlcyBtZW1vcnkgb24gT3BlbkNMIGRldmljZS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckNvbnRleHRPcGVuQ0w6Om9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2UpOiBPcGVuQ0wgaW1wbGVt
ZW50YXRpb24gb2YgdHJhbnNmb3JtQ29sb3JTcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVQcm9ncmFtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEZpbHRlckNvbnRleHRPcGVuQ0wpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6ZGV2aWNlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyQ29udGV4dE9wZW5DTDo6ZGV2aWNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJDb250ZXh0T3BlbkNMOjpjb21tYW5kUXVldWUpOgorICAgICAgICAoUnVuS2VybmVsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6OlJ1bktlcm5lbDo6UnVuS2VybmVs
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6OlJ1bktlcm5lbDo6YWRk
QXJndW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6UnVuS2Vy
bmVsOjpydW4pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6a2VybmVs
QnlOYW1lKTogUmV0dXJucyB0aGUgcmVmZXJlbmNlIG9mIGEgZnVuY3Rpb24gaW4gdGhlIE9wZW5D
TCBwcm9ncmFtLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNM
RkVTb3VyY2VBbHBoYS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseU9wZW5DTCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUdyYXBoaWMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6
cGxhdGZvcm1BcHBseU9wZW5DTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29w
ZW5jbC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGlsZUZFVHVyYnVsZW5j
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjphcHBseUZFVHVyYnVs
ZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlPcGVu
Q0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFuZGxl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChPcGVuQ0xIYW5kbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6T3BlbkNMSGFuZGxlOjpPcGVuQ0xIYW5kbGUpOgorICAgICAgICAo
V2ViQ29yZTo6T3BlbkNMSGFuZGxlOjpvcGVyYXRvciBjbF9tZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6T3BlbkNMSGFuZGxlOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkNMSGFu
ZGxlOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9w
ZW5DTEhhbmRsZTo6aGFuZGxlQWRkcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ0xIYW5k
bGU6OmNsZWFyKToKKwogMjAxMi0xMS0yNiAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgW1NoYWRvdyBET01dIEltcGxlbWVudCBFbGVtZW50OjpjcmVhdGVT
aGFkb3dSb290KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGM5NzBmNWUuLmRlOWUzZTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQpAQCAtNDA4MSw2ICs0MDgxLDE3IEBAIGNvbnRhaW5zKENPTkZJRywgb3BlbmdsLXNoaW1zKSB7
CiAgICAgREVGSU5FUyArPSBRVF9PUEVOR0xfU0hJTVM9MQogfQogCitjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfT1BFTkNMPTEpIHsKKyAgICBIRUFERVJTICs9IFwKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xIYW5kbGUuaCBcCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5oCisgICAgU09VUkNFUyArPSBc
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5D
TC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFU291
cmNlQWxwaGEuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVu
Q0xGRVNvdXJjZUdyYXBoaWMuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29w
ZW5jbC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwCit9CisKIHVzZT8oR1JBUEhJQ1NfU1VSRkFDRSkg
ewogICAgIG1hYyB7CiAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKaW5kZXggZjBhNDA0Mi4u
NjdlMTJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKQEAgLTI5NCw2ICsyOTQsMTIgQEAgdW5peHx3aW4zMi1n
KysqIHsKICAgICBRTUFLRV9QS0dDT05GSUdfUkVRVUlSRVMgPSBRdENvcmUgUXRHdWkgUXROZXR3
b3JrIFF0V2lkZ2V0cwogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfT1BFTkNMPTEpIHsK
KyAgICBMSUJTICs9IC1sT3BlbkNMCisKKyAgICBJTkNMVURFUEFUSCArPSAkJFNPVVJDRV9ESVIv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbAorfQorCiAjIERpc2FibGUgQysrMHggbW9kZSBp
biBXZWJDb3JlIGZvciB0aG9zZSB3aG8gZW5hYmxlZCBpdCBpbiB0aGVpciBRdCdzIG1rc3BlYwog
Ki1nKysqOlFNQUtFX0NYWEZMQUdTIC09IC1zdGQ9YysrMHggLXN0ZD1nbnUrKzB4CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5oCmluZGV4IDQ3YzhiZWUuLjg0ZmYxMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNjEsNiAr
NjEsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lkKik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYgRU5BQkxF
KE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlm
CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCBhMmJiNTRk
Li4wYTBmODIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQK
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTIzLDYgKzEyNCwxMCBAQCB2b2lkIEZpbHRlckVmZmVj
dDo6YXBwbHkoKQogICAgIH0KICAgICAKICAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgYXBw
bHkgZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVyLgorI2lmIEVOQUJMRShPUEVOQ0wp
CisgICAgaWYgKHBsYXRmb3JtQXBwbHlPcGVuQ0woKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlm
CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKHBsYXRmb3JtQXBwbHlTa2lhKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTEzMCw2ICsxMzUsMzEgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKICAg
ICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKIH0KIAorI2lmIEVOQUJMRShPUEVOQ0wpCisvLyBU
aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2hhbmdlZCB0byBhYnN0cmFjdCB2aXJ0dWFsIHdoZW4gYWxs
IGZpbHRlcnMgYXJlIGxhbmRlZC4KK2Jvb2wgRmlsdGVyRWZmZWN0OjpwbGF0Zm9ybUFwcGx5T3Bl
bkNMKCkKK3sKKyAgICBpZiAoIUZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgc2l6ZSA9IG1faW5wdXRFZmZlY3RzLnNp
emUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAg
IEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQoKTsKKyAgICAgICAg
Ly8gU29mdHdhcmUgY29kZSBwYXRoIGV4cGVjdHMgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIGZv
bGxvd2luZyBmaWxlZHMgaXMgdmFsaWQuCisgICAgICAgIGlmICghaW4tPm1faW1hZ2VCdWZmZXJS
ZXN1bHQgJiYgIWluLT5tX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICYmICFpbi0+bV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCisgICAgICAgICAgICBpbi0+YXNJbWFnZUJ1ZmZlcigpOworICAg
IH0KKworICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworICAgIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSA9IGFzSW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoc291cmNlSW1hZ2UpIHsKKyAgICAg
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VJbWFnZURhdGEgPSBzb3VyY2VJbWFn
ZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgc291cmNlSW1h
Z2UtPmludGVybmFsU2l6ZSgpKSk7CisgICAgICAgIGNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KHNv
dXJjZUltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5k
aWYKKwogdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkK
IHsKICAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIg
Zm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KQEAgLTE4Nyw2ICsyMTcsMTAgQEAg
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KCkKICAgICAgICAgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC5jbGVhcigpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
ICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuY2xlYXIoKTsKKyNpZiBFTkFCTEUo
T1BFTkNMKQorICAgIGlmIChtX29wZW5DTEltYWdlUmVzdWx0KQorICAgICAgICBtX29wZW5DTElt
YWdlUmVzdWx0LmNsZWFyKCk7CisjZW5kaWYKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVj
dDo6YXNJbWFnZUJ1ZmZlcigpCkBAIC0xOTUsNiArMjI5LDEwIEBAIEltYWdlQnVmZmVyKiBGaWx0
ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIoKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAobV9p
bWFnZUJ1ZmZlclJlc3VsdCkKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0
KCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBpZiAobV9vcGVuQ0xJbWFnZVJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIG9wZW5DTEltYWdlVG9JbWFnZUJ1ZmZlcigpOworI2VuZGlmCiAgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCksIDEsIG1fcmVzdWx0Q29sb3JTcGFjZSwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUo
KSk7CiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKQEAg
LTIwNCw2ICsyNDIsMjggQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6YXNJbWFnZUJ1ZmZl
cigpCiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKKyNpZiBFTkFC
TEUoT1BFTkNMKQorSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6b3BlbkNMSW1hZ2VUb0ltYWdl
QnVmZmVyKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29u
dGV4dE9wZW5DTDo6Y29udGV4dCgpOworICAgIEFTU0VSVChjb250ZXh0KTsKKworICAgIHNpemVf
dCBvcmlnaW5bM10gPSB7IDAsIDAsIDAgfTsKKyAgICBzaXplX3QgcmVnaW9uWzNdID0geyBtX2Fi
c29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCksIDEg
fTsKKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZGVzdGluYXRpb25QaXhlbEFycmF5
ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkg
KiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpICogNCk7CisKKyAgICBjbEZpbmlzaChjb250
ZXh0LT5jb21tYW5kUXVldWUoKSk7CisgICAgY2xFbnF1ZXVlUmVhZEltYWdlKGNvbnRleHQtPmNv
bW1hbmRRdWV1ZSgpLCBtX29wZW5DTEltYWdlUmVzdWx0LCBDTF9UUlVFLCBvcmlnaW4sIHJlZ2lv
biwgMCwgMCwgZGVzdGluYXRpb25QaXhlbEFycmF5LT5kYXRhKCksIDAsIDAsIDApOworCisgICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOworICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKKyAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRC
eXRlQXJyYXkoVW5tdWx0aXBsaWVkLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZ2V0KCksIGRlc3Rp
bmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisKKyAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKK30KKyNlbmRpZgorCiBQYXNzUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OmFzVW5tdWx0aXBsaWVkSW1hZ2UoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQoaXNGaWx0ZXJTaXplVmFsaWQocmVjdCkp
OwpAQCAtMzYzLDYgKzQyMywyMiBAQCBVaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0Ojpj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogICAgIHJldHVybiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIAorI2lmIEVOQUJMRShPUEVOQ0wpCitPcGVuQ0xIYW5k
bGUgRmlsdGVyRWZmZWN0OjpjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCh1aW50OF90KiBzb3VyY2Up
Cit7CisgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CisgICAgY2xfaW1hZ2VfZm9ybWF0IGNsSW1h
Z2VGb3JtYXQ7CisgICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVsX29yZGVyID0gQ0xfUkdC
QTsKKyAgICBjbEltYWdlRm9ybWF0LmltYWdlX2NoYW5uZWxfZGF0YV90eXBlID0gQ0xfVU5PUk1f
SU5UODsKKworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0
T3BlbkNMOjpjb250ZXh0KCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIG1fb3BlbkNMSW1h
Z2VSZXN1bHQgPSBjbENyZWF0ZUltYWdlMkQoY29udGV4dC0+ZGV2aWNlQ29udGV4dCgpLCBDTF9N
RU1fUkVBRF9XUklURSB8IChzb3VyY2UgPyBDTF9NRU1fQ09QWV9IT1NUX1BUUiA6IDApLAorICAg
ICAgICAmY2xJbWFnZUZvcm1hdCwgbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29s
dXRlUGFpbnRSZWN0LmhlaWdodCgpLCAwLCBzb3VyY2UsIDApOworICAgIHJldHVybiBtX29wZW5D
TEltYWdlUmVzdWx0OworfQorI2VuZGlmCisKIHZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1S
ZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cp
CkBAIC0zNzQsMTIgKzQ1MCwyNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0
Q29sb3JTcGFjZShDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCiAKICAgICAvLyBGSVhNRTogV2Ug
Y2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVy
c2lvbiBieSBhZGRpbmcKICAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3Ig
dGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBp
ZiAob3BlbkNMSW1hZ2UoKSkgeworICAgICAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0
ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworICAgICAgICBBU1NFUlQoY29udGV4
dCk7CisgICAgICAgIGNvbnRleHQtPm9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2UobV9vcGVuQ0xJ
bWFnZVJlc3VsdCwgYWJzb2x1dGVQYWludFJlY3QoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBkc3RD
b2xvclNwYWNlKTsKKyAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgICAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0LmNsZWFyKCk7CisgICAgICAgIGdvdG8gc2tpcFNvZnR3YXJl
Q29kZVBhdGg7CisgICAgfQorI2VuZGlmCiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KSB7
CiAgICAgICAgIGFzSW1hZ2VCdWZmZXIoKTsKICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJS
ZXN1bHQpOwogICAgIH0KIAogICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnRyYW5zZm9ybUNvbG9y
U3BhY2UobV9yZXN1bHRDb2xvclNwYWNlLCBkc3RDb2xvclNwYWNlKTsKKworI2lmIEVOQUJMRShP
UEVOQ0wpCitza2lwU29mdHdhcmVDb2RlUGF0aDoKKyNlbmRpZgorCiAgICAgbV9yZXN1bHRDb2xv
clNwYWNlID0gZHN0Q29sb3JTcGFjZTsKIAogICAgIGlmIChtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggMDY5ZWRlMy4uYjlmMjE5MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
CkBAIC0zMyw2ICszMywxMCBAQAogI2luY2x1ZGUgPHd0Zi9VaW50OENsYW1wZWRBcnJheS5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAi
RmlsdGVyQ29udGV4dE9wZW5DTC5oIgorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBmbG9hdCBrTWF4
RmlsdGVyU2l6ZSA9IDUwMDAuMGY7CiAKICNpZiBVU0UoU0tJQSkKQEAgLTcwLDYgKzc0LDEyIEBA
IHB1YmxpYzoKICAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRJbWFnZShVaW50OENsYW1wZWRBcnJh
eSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIGNvcHlQcmVtdWx0aXBs
aWVkSW1hZ2UoVWludDhDbGFtcGVkQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7
CiAKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIE9wZW5DTEhhbmRsZSBvcGVuQ0xJbWFnZSgpIHsg
cmV0dXJuIG1fb3BlbkNMSW1hZ2VSZXN1bHQ7IH0KKyAgICB2b2lkIHNldE9wZW5DTEltYWdlKE9w
ZW5DTEhhbmRsZSBvcGVuQ0xJbWFnZSkgeyBtX29wZW5DTEltYWdlUmVzdWx0ID0gb3BlbkNMSW1h
Z2U7IH0KKyAgICBJbWFnZUJ1ZmZlciogb3BlbkNMSW1hZ2VUb0ltYWdlQnVmZmVyKCk7CisjZW5k
aWYKKwogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9p
bnB1dEVmZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBj
b25zdDsKICAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJu
IG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQpAQCAtNzcsNyArODcsMTIgQEAgcHVibGljOgogICAg
IGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBUaGlzIGZ1
bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5h
Z21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdCB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0IHx8IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0OworICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAorI2lm
IEVOQUJMRShPUEVOQ0wpCisgICAgICAgICAgICB8fCBtX29wZW5DTEltYWdlUmVzdWx0CisjZW5k
aWYKKyAgICAgICAgICAgIHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQKKyAgICAgICAgICAg
IHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogICAgIH0KIAogICAgIEludFJlY3QgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JikgY29uc3Q7CkBAIC0xMDEsNiAr
MTE2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZO
ZWVkZWQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9
IDA7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9w
ZW5DTCgpOworI2VuZGlmCiAjaWYgVVNFKFNLSUEpCiAgICAgdmlydHVhbCBib29sIHBsYXRmb3Jt
QXBwbHlTa2lhKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFNrSW1hZ2VGaWx0ZXIq
IGNyZWF0ZUltYWdlRmlsdGVyKFNraWFJbWFnZUZpbHRlckJ1aWxkZXIqKSB7IHJldHVybiAwOyB9
CkBAIC0xNDksNiArMTY3LDkgQEAgcHJvdGVjdGVkOgogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIE9wZW5DTEhhbmRs
ZSBjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCh1aW50OF90KiA9IDApOworI2VuZGlmCiAKICAgICAv
LyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBv
biB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAogICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVh
Y2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCkBAIC0xNjIsNiArMTgzLDkgQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7CiAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdDsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CisjaWYgRU5B
QkxFKE9QRU5DTCkKKyAgICBPcGVuQ0xIYW5kbGUgbV9vcGVuQ0xJbWFnZVJlc3VsdDsKKyNlbmRp
ZgogCiAgICAgYm9vbCBtX2FscGhhSW1hZ2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRleCA5NjkxNmU5Li5i
MDIyMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0zMyw2ICszMyw5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3QgQXRvbWljU3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFs
IGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1
bXAoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuaAppbmRleCBjN2U4MzNlLi4xODVlNTY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApA
QCAtMzQsNiArMzQsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYg
ZWZmZWN0TmFtZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
OworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVu
Q0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRl
eHRPcGVuQ0wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkY2FmZTcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
b3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuY3BwCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBV
TklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShPUEVO
Q0wpCisjaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0ZpbHRlckNvbnRleHRPcGVuQ0wqIEZpbHRlckNvbnRleHRPcGVuQ0w6Om1fY29udGV4
dCA9IDA7CitpbnQgRmlsdGVyQ29udGV4dE9wZW5DTDo6bV9hbHJlYWR5SW5pdGlhbGl6ZWQgPSAw
OworCitGaWx0ZXJDb250ZXh0T3BlbkNMKiBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCkK
K3sKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbV9jb250ZXh0OworICAgIGlm
IChtX2FscmVhZHlJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2FscmVh
ZHlJbml0aWFsaXplZCA9IHRydWU7CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogbG9jYWxDb250
ZXh0ID0gbmV3IEZpbHRlckNvbnRleHRPcGVuQ0woKTsKKworICAgIC8vIEluaXRpYWxpemluZyB0
aGUgY29udGV4dC4KKyAgICBjbF9pbnQgZXJyb3JOdW1iZXI7CisgICAgY2xfZGV2aWNlX2lkKiBk
ZXZpY2VzOworICAgIGNsX3BsYXRmb3JtX2lkIGZpcnN0UGxhdGZvcm1JZDsKKyAgICBzaXplX3Qg
ZGV2aWNlQnVmZmVyU2l6ZSA9IDA7CisKKyAgICBlcnJvck51bWJlciA9IGNsR2V0UGxhdGZvcm1J
RHMoMSwgJmZpcnN0UGxhdGZvcm1JZCwgMCk7CisgICAgY2xfY29udGV4dF9wcm9wZXJ0aWVzIGNv
bnRleHRQcm9wZXJ0aWVzW10gPSB7IENMX0NPTlRFWFRfUExBVEZPUk0sIChjbF9jb250ZXh0X3By
b3BlcnRpZXMpZmlyc3RQbGF0Zm9ybUlkLCAwfTsKKyAgICBsb2NhbENvbnRleHQtPm1fZGV2aWNl
Q29udGV4dCA9IGNsQ3JlYXRlQ29udGV4dEZyb21UeXBlKGNvbnRleHRQcm9wZXJ0aWVzLCBDTF9E
RVZJQ0VfVFlQRV9HUFUsIDAsIDAsICZlcnJvck51bWJlcik7CisgICAgaWYgKGVycm9yTnVtYmVy
ICE9IENMX1NVQ0NFU1MpIHsKKyAgICAgICAgbG9jYWxDb250ZXh0LT5tX2RldmljZUNvbnRleHQg
PSBjbENyZWF0ZUNvbnRleHRGcm9tVHlwZShjb250ZXh0UHJvcGVydGllcywgQ0xfREVWSUNFX1RZ
UEVfQ1BVLCAwLCAwLCAmZXJyb3JOdW1iZXIpOworICAgICAgICBpZiAoZXJyb3JOdW1iZXIgIT0g
Q0xfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGVycm9yTnVt
YmVyID0gY2xHZXRDb250ZXh0SW5mbyhsb2NhbENvbnRleHQtPm1fZGV2aWNlQ29udGV4dCwgQ0xf
Q09OVEVYVF9ERVZJQ0VTLCAwLCAwLCAmZGV2aWNlQnVmZmVyU2l6ZSk7CisgICAgaWYgKGVycm9y
TnVtYmVyICE9IENMX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFkZXZp
Y2VCdWZmZXJTaXplKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGRldmljZXMgPSByZWludGVy
cHJldF9jYXN0PGNsX2RldmljZV9pZCo+KGZhc3RNYWxsb2MoZGV2aWNlQnVmZmVyU2l6ZSkpOwor
ICAgIGVycm9yTnVtYmVyID0gY2xHZXRDb250ZXh0SW5mbyhsb2NhbENvbnRleHQtPm1fZGV2aWNl
Q29udGV4dCwgQ0xfQ09OVEVYVF9ERVZJQ0VTLCBkZXZpY2VCdWZmZXJTaXplLCBkZXZpY2VzLCAw
KTsKKyAgICBpZiAoZXJyb3JOdW1iZXIgIT0gQ0xfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBsb2NhbENvbnRleHQtPm1fY29tbWFuZFF1ZXVlID0gY2xDcmVhdGVDb21tYW5kUXVl
dWUobG9jYWxDb250ZXh0LT5tX2RldmljZUNvbnRleHQsIGRldmljZXNbMF0sIDAsIDApOworICAg
IGlmICghbG9jYWxDb250ZXh0LT5tX2NvbW1hbmRRdWV1ZSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBsb2NhbENvbnRleHQtPm1fZGV2aWNlSWQgPSBkZXZpY2VzWzBdOworICAgIGZhc3RGcmVl
KGRldmljZXMpOworCisgICAgY2xfYm9vbCBpbWFnZVN1cHBvcnQgPSBDTF9GQUxTRTsKKyAgICBj
bEdldERldmljZUluZm8obG9jYWxDb250ZXh0LT5tX2RldmljZUlkLCBDTF9ERVZJQ0VfSU1BR0Vf
U1VQUE9SVCwgc2l6ZW9mKGNsX2Jvb2wpLCAmaW1hZ2VTdXBwb3J0LCAwKTsKKyAgICBpZiAoaW1h
Z2VTdXBwb3J0ICE9IENMX1RSVUUpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9jb250ZXh0
ID0gbG9jYWxDb250ZXh0OworICAgIHJldHVybiBtX2NvbnRleHQ7Cit9CisKK09wZW5DTEhhbmRs
ZSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjcmVhdGVPcGVuQ0xJbWFnZShJbnRTaXplIHBhaW50U2l6
ZSkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9w
ZW5DTDo6Y29udGV4dCgpOworCisgICAgY2xfaW1hZ2VfZm9ybWF0IGNsSW1hZ2VGb3JtYXQ7Cisg
ICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVsX29yZGVyID0gQ0xfUkdCQTsKKyAgICBjbElt
YWdlRm9ybWF0LmltYWdlX2NoYW5uZWxfZGF0YV90eXBlID0gQ0xfVU5PUk1fSU5UODsKKworICAg
IE9wZW5DTEhhbmRsZSBpbWFnZSA9IGNsQ3JlYXRlSW1hZ2UyRChjb250ZXh0LT5kZXZpY2VDb250
ZXh0KCksIENMX01FTV9SRUFEX1dSSVRFLCAmY2xJbWFnZUZvcm1hdCwKKyAgICAgICAgcGFpbnRT
aXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgMCwgMCwgMCk7CisgICAgcmV0dXJuIGlt
YWdlOworfQorCitzdGF0aWMgY29uc3QgY2hhciogdHJhbnNmb3JtQ29sb3JTcGFjZUtlcm5lbFBy
b2dyYW0gPQorUFJPR1JBTV9TVFIoCitjb25zdCBzYW1wbGVyX3Qgc2FtcGxlciA9IENMS19OT1JN
QUxJWkVEX0NPT1JEU19GQUxTRSB8IENMS19BRERSRVNTX0NMQU1QX1RPX0VER0UgfCBDTEtfRklM
VEVSX05FQVJFU1Q7CisKK19fa2VybmVsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShfX3JlYWRf
b25seSBpbWFnZTJkX3Qgc291cmNlLCBfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9u
LCBfX2NvbnN0YW50IGZsb2F0ICpjbExvb2tVcFRhYmxlKQoreworICAgIGludDIgc291cmNlQ29v
cmQgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpOworICAgIGZs
b2F0NCBwaXhlbCA9IHJlYWRfaW1hZ2VmKHNvdXJjZSwgc2FtcGxlciwgc291cmNlQ29vcmQpOwor
CisgICAgcGl4ZWwgPSAoZmxvYXQ0KShjbExvb2tVcFRhYmxlWyhpbnQpKHJvdW5kKHBpeGVsLngg
KiAyNTUpKV0sIGNsTG9va1VwVGFibGVbKGludCkocm91bmQocGl4ZWwueSAqIDI1NSkpXSwKKyAg
ICAgICAgY2xMb29rVXBUYWJsZVsoaW50KShyb3VuZChwaXhlbC56ICogMjU1KSldLCBwaXhlbC53
KTsKKworICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgc291cmNlQ29vcmQsIHBpeGVsKTsK
K30KKyk7CisKK3ZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6b3BlbkNMVHJhbnNmb3JtQ29sb3JT
cGFjZShPcGVuQ0xIYW5kbGUmIHNvdXJjZSwgSW50UmVjdCBzb3VyY2VTaXplLCBDb2xvclNwYWNl
IHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKE9wZW5DTEhhbmRsZSwgZGV2aWNlUmdiTFVULCAoKSk7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChPcGVuQ0xIYW5kbGUsIGxpbmVhclJnYkxVVCwgKCkpOworCisgICAgaWYg
KHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2VMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFj
ZSAhPSBDb2xvclNwYWNlRGV2aWNlUkdCKQorICAgICAgICB8fCAoZHN0Q29sb3JTcGFjZSAhPSBD
b2xvclNwYWNlTGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZURldmljZVJH
QikpCisgICAgICAgIHJldHVybjsKKworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQg
PSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisgICAgQVNTRVJUKGNvbnRleHQpOwor
CisgICAgT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uID0gY29udGV4dC0+Y3JlYXRlT3BlbkNMSW1h
Z2Uoc291cmNlU2l6ZS5zaXplKCkpOworCisgICAgaWYgKCFtX3RyYW5zZm9ybUNvbG9yU3BhY2VQ
cm9ncmFtKSB7CisgICAgICAgIG1fdHJhbnNmb3JtQ29sb3JTcGFjZVByb2dyYW0gPSBjb21waWxl
UHJvZ3JhbSh0cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsUHJvZ3JhbSk7CisgICAgICAgIEFTU0VS
VChtX3RyYW5zZm9ybUNvbG9yU3BhY2VQcm9ncmFtKTsKKyAgICAgICAgbV90cmFuc2Zvcm1Db2xv
clNwYWNlS2VybmVsID0ga2VybmVsQnlOYW1lKG1fdHJhbnNmb3JtQ29sb3JTcGFjZVByb2dyYW0s
ICJ0cmFuc2Zvcm1Db2xvclNwYWNlIik7CisgICAgICAgIEFTU0VSVChtX3RyYW5zZm9ybUNvbG9y
U3BhY2VLZXJuZWwpOworICAgIH0KKworICAgIFJ1bktlcm5lbCBrZXJuZWwoY29udGV4dCwgbV90
cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsLCBzb3VyY2VTaXplLndpZHRoKCksIHNvdXJjZVNpemUu
aGVpZ2h0KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChzb3VyY2UpOworICAgIGtlcm5lbC5h
ZGRBcmd1bWVudChkZXN0aW5hdGlvbik7CisKKyAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xv
clNwYWNlTGluZWFyUkdCKSB7CisgICAgICAgIGlmICghbGluZWFyUmdiTFVUKSB7CisgICAgICAg
ICAgICBWZWN0b3I8ZmxvYXQ+IGxvb2tVcFRhYmxlOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBp
ICAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IChjb2xvciA8PSAwLjA0MDQ1ZiA/
IGNvbG9yIC8gMTIuOTJmIDogcG93KChjb2xvciArIDAuMDU1ZikgLyAxLjA1NWYsIDIuNGYpKTsK
KyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWF4KDAuMGYsIGNvbG9yKTsKKyAgICAgICAg
ICAgICAgICBjb2xvciA9IHN0ZDo6bWluKDEuMGYsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBs
b29rVXBUYWJsZS5hcHBlbmQoKHJvdW5kKGNvbG9yICogMjU1KSkgLyAyNTUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbGluZWFyUmdiTFVUID0ga2VybmVsLmFkZEFyZ3VtZW50KGxvb2tV
cFRhYmxlLmRhdGEoKSwgc2l6ZW9mKGZsb2F0KSAqIDI1Nik7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAga2VybmVsLmFkZEFyZ3VtZW50KGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlm
IChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2VEZXZpY2VSR0IpIHsKKyAgICAgICAgaWYgKCFk
ZXZpY2VSZ2JMVVQpIHsKKyAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gbG9va1VwVGFibGU7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3Ig
PSAocG93Zihjb2xvciwgMS4wZiAvIDIuNGYpICogMS4wNTVmKSAtIDAuMDU1ZjsKKyAgICAgICAg
ICAgICAgICBjb2xvciA9IHN0ZDo6bWF4KDAuMGYsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBj
b2xvciA9IHN0ZDo6bWluKDEuMGYsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBsb29rVXBUYWJs
ZS5hcHBlbmQoKHJvdW5kKGNvbG9yICogMjU1KSkgLyAyNTUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZGV2aWNlUmdiTFVUID0ga2VybmVsLmFkZEFyZ3VtZW50KGxvb2tVcFRhYmxlLmRh
dGEoKSwgc2l6ZW9mKGZsb2F0KSAqIDI1Nik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
a2VybmVsLmFkZEFyZ3VtZW50KGRldmljZVJnYkxVVCk7CisgICAgfQorCisgICAga2VybmVsLnJ1
bigpOworICAgIHNvdXJjZS5jbGVhcigpOworICAgIHNvdXJjZSA9IGRlc3RpbmF0aW9uOworfQor
CitjbF9wcm9ncmFtIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVQcm9ncmFtKGNvbnN0IGNo
YXIqIHNvdXJjZSkKK3sKKyAgICBjbF9wcm9ncmFtIHByb2dyYW07CisgICAgY2xfaW50IGVycm9y
TnVtYmVyOworCisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRl
eHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisKKyAgICBwcm9ncmFt
ID0gY2xDcmVhdGVQcm9ncmFtV2l0aFNvdXJjZShjb250ZXh0LT5tX2RldmljZUNvbnRleHQsIDEs
IChjb25zdCBjaGFyKiopICZzb3VyY2UsIDAsIDApOworICAgIGVycm9yTnVtYmVyID0gY2xCdWls
ZFByb2dyYW0ocHJvZ3JhbSwgMCwgMCwgMCwgMCwgMCk7CisgICAgaWYgKGVycm9yTnVtYmVyKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBwcm9ncmFtOworfQorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg2ZDNmOAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29u
dGV4dE9wZW5DTC5oCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUg
PHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdF
RCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRmlsdGVyQ29udGV4dE9wZW5DTF9oCisjZGVmaW5lIEZpbHRlckNvbnRleHRPcGVu
Q0xfaAorCisjaWYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJDTC9jbC5oIgorI2luY2x1ZGUg
IkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIK
KyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiT3BlbkNMSGFuZGxlLmgiCisKKyNkZWZp
bmUgUFJPR1JBTV9TVFIoLi4uKSAgI19fVkFfQVJHU19fCisjZGVmaW5lIFBST0dSQU0oLi4uKSBQ
Uk9HUkFNX1NUUihfX1ZBX0FSR1NfXykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIE9w
ZW5DTENvbXBpbGVTdGF0dXMgeworICAgIG9wZW5jbE5vdENvbXBpbGVkWWV0LAorICAgIG9wZW5j
bENvbXBpbGVGYWlsZWQsCisgICAgb3BlbmNsQ29tcGlsZVN1Y2Nlc3NmdWwKK307CisKK2NsYXNz
IEZpbHRlckNvbnRleHRPcGVuQ0wgeworcHVibGljOgorICAgIC8vIFJldHVybnMgMCBpZiBpbml0
aWFsaXphdGlvbiBmYWlsZWQuCisgICAgc3RhdGljIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRl
eHQoKTsKKworICAgIGNsX2RldmljZV9pZCBkZXZpY2VJZCgpIHsgcmV0dXJuIG1fZGV2aWNlSWQ7
IH0KKyAgICBjbF9jb250ZXh0IGRldmljZUNvbnRleHQoKSB7IHJldHVybiBtX2RldmljZUNvbnRl
eHQ7IH0KKyAgICBjbF9jb21tYW5kX3F1ZXVlIGNvbW1hbmRRdWV1ZSgpIHsgcmV0dXJuIG1fY29t
bWFuZFF1ZXVlOyB9CisKKyAgICBPcGVuQ0xIYW5kbGUgY3JlYXRlT3BlbkNMSW1hZ2UoSW50U2l6
ZSk7CisgICAgdm9pZCBvcGVuQ0xUcmFuc2Zvcm1Db2xvclNwYWNlKE9wZW5DTEhhbmRsZSYsIElu
dFJlY3QsIENvbG9yU3BhY2UsIENvbG9yU3BhY2UpOworCisgICAgaW5saW5lIGJvb2wgY29tcGls
ZUZFVHVyYnVsZW5jZSgpOworCisgICAgaW5saW5lIHZvaWQgYXBwbHlGRVR1cmJ1bGVuY2UoT3Bl
bkNMSGFuZGxlLCBJbnRTaXplLCBpbnQsIHZvaWQqLCB2b2lkKiwgdm9pZCosIHZvaWQqLCB2b2lk
KiwKKyAgICAgICAgdm9pZCosIGludCwgaW50LCBpbnQsIGludCwgZmxvYXQsIGZsb2F0LCBib29s
LCBpbnQsIGludCk7CisKK3ByaXZhdGU6CisKKyAgICBjbGFzcyBSdW5LZXJuZWwgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBSdW5LZXJuZWwoRmlsdGVyQ29udGV4dE9wZW5DTCogY29u
dGV4dCwgY2xfa2VybmVsIGtlcm5lbCwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0KQorICAg
ICAgICAgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAgICAgICAgLCBtX2tl
cm5lbChrZXJuZWwpCisgICAgICAgICAgICAgICAgLCBpbmRleCgwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1fZ2xvYmFsU2l6ZVswXSA9IHdpZHRoOworICAgICAgICAgICAgICAg
IG1fZ2xvYmFsU2l6ZVsxXSA9IGhlaWdodDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
dm9pZCBhZGRBcmd1bWVudChPcGVuQ0xIYW5kbGUgaGFuZGxlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBpbmRleCsrLCBzaXplb2YoT3Bl
bkNMSGFuZGxlKSwgaGFuZGxlLmhhbmRsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHZvaWQgYWRkQXJndW1lbnQoY2xfaW50IHZhbHVlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBpbmRleCsrLCBzaXplb2Yo
Y2xfaW50KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJnZhbHVlKSk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZvaWQgYWRkQXJndW1lbnQoY2xfZmxvYXQgdmFsdWUpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgY2xTZXRLZXJuZWxBcmcobV9rZXJuZWwsIGluZGV4Kyss
IHNpemVvZihjbF9mbG9hdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZ2YWx1ZSkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KGNsX3NhbXBsZXIgaGFu
ZGxlKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1fa2Vy
bmVsLCBpbmRleCsrLCBzaXplb2YoY2xfc2FtcGxlciksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KCZoYW5kbGUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgT3BlbkNMSGFuZGxlIGFk
ZEFyZ3VtZW50KHZvaWQqIGJ1ZmZlciwgaW50IHNpemUpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgT3BlbkNMSGFuZGxlIGhhbmRsZShjbENyZWF0ZUJ1ZmZlcihtX2NvbnRleHQtPmRl
dmljZUNvbnRleHQoKSwgQ0xfTUVNX1JFQURfT05MWSwgc2l6ZSwgMCwgMCkpOworICAgICAgICAg
ICAgICAgIGNsRW5xdWV1ZVdyaXRlQnVmZmVyKG1fY29udGV4dC0+Y29tbWFuZFF1ZXVlKCksIGhh
bmRsZSwgQ0xfVFJVRSwgMCwgc2l6ZSwgYnVmZmVyLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAg
ICBjbFNldEtlcm5lbEFyZyhtX2tlcm5lbCwgaW5kZXgrKywgc2l6ZW9mKE9wZW5DTEhhbmRsZSks
IGhhbmRsZS5oYW5kbGVBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgcnVuKCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBjbEZpbmlzaChtX2NvbnRleHQtPm1fY29tbWFuZFF1ZXVlKTsKKyAg
ICAgICAgICAgICAgICBjbEVucXVldWVORFJhbmdlS2VybmVsKG1fY29udGV4dC0+bV9jb21tYW5k
UXVldWUsIG1fa2VybmVsLCAyLCAwLCBtX2dsb2JhbFNpemUsIDAsIDAsIDAsIDApOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBtX2NvbnRleHQ7Cisg
ICAgICAgICAgICBjbF9rZXJuZWwgbV9rZXJuZWw7CisgICAgICAgICAgICBzaXplX3QgbV9nbG9i
YWxTaXplWzJdOworICAgICAgICAgICAgaW50IGluZGV4OworICAgICAgICB9OworCisgICAgZW51
bSBPcGVuQ0xDb21waWxlU3RhdHVzIHsKKyAgICAgICAgb3BlbmNsTm90Q29tcGlsZWRZZXQsCisg
ICAgICAgIG9wZW5jbENvbXBpbGVGYWlsZWQsCisgICAgICAgIG9wZW5jbENvbXBpbGVTdWNjZXNz
ZnVsCisgICAgfTsKKworICAgIHN0YXRpYyBjbF9wcm9ncmFtIGNvbXBpbGVQcm9ncmFtKGNvbnN0
IGNoYXIqKTsKKyAgICBzdGF0aWMgaW5saW5lIGNsX2tlcm5lbCBrZXJuZWxCeU5hbWUoY2xfcHJv
Z3JhbSBwcm9ncmFtLCBjb25zdCBjaGFyKiBuYW1lKSB7IHJldHVybiBjbENyZWF0ZUtlcm5lbChw
cm9ncmFtLCBuYW1lLCAwKTsgfQorCisgICAgc3RhdGljIEZpbHRlckNvbnRleHRPcGVuQ0wqIG1f
Y29udGV4dDsKKyAgICBzdGF0aWMgaW50IG1fYWxyZWFkeUluaXRpYWxpemVkOworCisgICAgY2xf
ZGV2aWNlX2lkIG1fZGV2aWNlSWQ7CisgICAgY2xfY29udGV4dCBtX2RldmljZUNvbnRleHQ7Cisg
ICAgY2xfY29tbWFuZF9xdWV1ZSBtX2NvbW1hbmRRdWV1ZTsKKworICAgIGNsX3Byb2dyYW0gbV90
cmFuc2Zvcm1Db2xvclNwYWNlUHJvZ3JhbTsKKyAgICBjbF9rZXJuZWwgbV90cmFuc2Zvcm1Db2xv
clNwYWNlS2VybmVsOworCisgICAgT3BlbkNMQ29tcGlsZVN0YXR1cyBtX3R1cmJ1bGVuY2VDb21w
aWxlU3RhdHVzOworICAgIGNsX3Byb2dyYW0gbV90dXJidWxlbmNlUHJvZ3JhbTsKKyAgICBjbF9r
ZXJuZWwgbV90dXJidWxlbmNlT3BlcmF0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFU291cmNlQWxw
aGEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVu
Q0xGRVNvdXJjZUFscGhhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5h
YjkzZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNwcApAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJM
RShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisK
KyNpbmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJDb250ZXh0T3BlbkNMLmgiCisj
aW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNv
dXJjZUFscGhhOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3Bl
bkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworCisgICAgaWYg
KCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwbGF0Zm9ybUFwcGx5U29m
dHdhcmUoKTsKKyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBhc0ltYWdlQnVmZmVyKCk7
CisgICAgaWYgKCFzb3VyY2VJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVm
UHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VJbWFnZURhdGEgPSBzb3VyY2VJbWFnZS0+Z2V0
VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgc291cmNlSW1hZ2UtPmlu
dGVybmFsU2l6ZSgpKSk7CisgICAgY3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQoc291cmNlSW1hZ2VE
YXRhLT5kYXRhKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNM
RkVTb3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dw
dS9vcGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi5iMmU5ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUdyYXBoaWMuY3BwCkBA
IC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBT
emVnZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6
ZWdlZC5odT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaWYgRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAi
U291cmNlR3JhcGhpYy5oIgorCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVy
Q29udGV4dE9wZW5DTC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworYm9vbCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sK
KyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6
Y29udGV4dCgpOworCisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1h
Z2UgPSBhc0ltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFzb3VyY2VJbWFnZSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VJbWFnZURh
dGEgPSBzb3VyY2VJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9p
bnQoKSwgc291cmNlSW1hZ2UtPmludGVybmFsU2l6ZSgpKSk7CisgICAgY3JlYXRlT3BlbkNMSW1h
Z2VSZXN1bHQoc291cmNlSW1hZ2VEYXRhLT5kYXRhKCkpOworICAgIHJldHVybiB0cnVlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYg
RU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWJjNjA3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVR1cmJ1
bGVuY2UuY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVu
aXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRj
emVuZUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQg
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5j
bHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkK
KyNpbmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKKworI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5jcHAi
CisjaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiB0dXJidWxlbmNl
S2VybmVsUHJvZ3JhbSA9CitQUk9HUkFNX1NUUigKK19fY29uc3RhbnQgaW50IHNfcGVybGluTm9p
c2UgPSA0MDk2OworX19jb25zdGFudCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CitfX2NvbnN0YW50
IGludCBzX2Jsb2NrTWFzayA9IDI1NTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCBub2lz
ZVBvc2l0aW9uSW50ZWdlclZhbHVlOworICAgIGZsb2F0IG5vaXNlUG9zaXRpb25GcmFjdGlvblZh
bHVlOworfSBOb2lzZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCB3aWR0aDsKKyAgICBp
bnQgd3JhcFg7CisgICAgaW50IGhlaWdodDsKKyAgICBpbnQgd3JhcFk7Cit9IFN0aXRjaERhdGE7
CisKK2Zsb2F0IGxpbmVhckludGVycG9sYXRpb24oZmxvYXQgdCwgZmxvYXQgYSwgZmxvYXQgYikK
K3sKKyAgICByZXR1cm4gbWFkKGIgLSBhLCB0LCBhKTsKK30KKworZmxvYXQgbm9pc2UyRChfX2Nv
bnN0YW50IGZsb2F0ICpjb21wb25lbnQsIF9fY29uc3RhbnQgaW50ICpsYXR0aWNlU2VsZWN0b3Is
IFN0aXRjaERhdGEgc3RpdGNoRGF0YSwgZmxvYXQgbm9pc2VWZWN0b3JYLCBmbG9hdCBub2lzZVZl
Y3RvclksIGludCBzdGl0Y2hUaWxlcykKK3sKKyAgICBOb2lzZSBub2lzZVg7CisgICAgbm9pc2VY
Lm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPSAoaW50KShub2lzZVZlY3RvclggKyBzX3Blcmxp
bk5vaXNlKTsKKyAgICBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgPSAobm9pc2VW
ZWN0b3JYICsgc19wZXJsaW5Ob2lzZSkgLSBub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1
ZTsKKyAgICBOb2lzZSBub2lzZVk7CisgICAgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFs
dWUgPSAoaW50KShub2lzZVZlY3RvclkgKyBzX3Blcmxpbk5vaXNlKTsKKyAgICBub2lzZVkubm9p
c2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgPSAobm9pc2VWZWN0b3JZICsgc19wZXJsaW5Ob2lzZSkg
LSBub2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZTsKKworICAgIC8vIElmIHN0aXRjaGlu
ZywgYWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgorICAgIGlmIChzdGl0Y2hUaWxl
cykgeworICAgICAgICBpZiAobm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPj0gc3Rp
dGNoRGF0YS53cmFwWCkKKyAgICAgICAgICAgIG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZh
bHVlIC09IHN0aXRjaERhdGEud2lkdGg7CisgICAgICAgIGlmIChub2lzZVgubm9pc2VQb3NpdGlv
bkludGVnZXJWYWx1ZSA+PSBzdGl0Y2hEYXRhLndyYXBYIC0gMSkKKyAgICAgICAgICAgIG5vaXNl
WC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlIC09IHN0aXRjaERhdGEud2lkdGggLSAxOworICAg
ICAgICBpZiAobm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPj0gc3RpdGNoRGF0YS53
cmFwWSkKKyAgICAgICAgICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlIC09IHN0
aXRjaERhdGEuaGVpZ2h0OworICAgICAgICBpZiAobm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2Vy
VmFsdWUgPj0gc3RpdGNoRGF0YS53cmFwWSAtIDEpCisgICAgICAgICAgICBub2lzZVkubm9pc2VQ
b3NpdGlvbkludGVnZXJWYWx1ZSAtPSBzdGl0Y2hEYXRhLmhlaWdodCAtIDE7CisgICAgfQorCisg
ICAgbm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgJj0gc19ibG9ja01hc2s7CisgICAg
bm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgJj0gc19ibG9ja01hc2s7CisgICAgaW50
IGxhdHRpY2VJbmRleCA9IGxhdHRpY2VTZWxlY3Rvcltub2lzZVgubm9pc2VQb3NpdGlvbkludGVn
ZXJWYWx1ZV07CisgICAgaW50IG5leHRMYXR0aWNlSW5kZXggPSBsYXR0aWNlU2VsZWN0b3JbKG5v
aXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsgMSkgJiBzX2Jsb2NrTWFza107CisKKyAg
ICBmbG9hdCBzeCA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIG5vaXNlWC5u
b2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqICgzIC0gMiAqIG5vaXNlWC5ub2lzZVBvc2l0aW9u
RnJhY3Rpb25WYWx1ZSk7CisgICAgZmxvYXQgc3kgPSBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0
aW9uVmFsdWUgKiBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiAoMyAtIDIgKiBu
b2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUpOworCisgICAgLy8gVGhpcyBpcyB0YWtl
biAxOjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5o
dG1sI2ZlVHVyYnVsZW5jZUVsZW1lbnQuCisgICAgaW50IHRlbXAgPSBsYXR0aWNlU2VsZWN0b3Jb
bGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOworICAgIGZs
b2F0IHUgPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBjb21wb25lbnRbdGVt
cCAqIDJdICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogY29tcG9uZW50W3Rl
bXAgKiAyICsgMV07CisgICAgdGVtcCA9IGxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4
ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOworICAgIGZsb2F0IHYgPSAobm9p
c2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBjb21wb25lbnRbdGVtcCAqIDJd
ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogY29tcG9uZW50W3RlbXAgKiAy
ICsgMV07CisgICAgZmxvYXQgYSA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOworICAg
IHRlbXAgPSBsYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRp
b25JbnRlZ2VyVmFsdWUgKyAxXTsKKyAgICB1ID0gbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlv
blZhbHVlICogY29tcG9uZW50W3RlbXAgKiAyXSArIChub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0
aW9uVmFsdWUgLSAxKSAqIGNvbXBvbmVudFt0ZW1wICogMiArIDFdOworICAgIHRlbXAgPSBsYXR0
aWNlU2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdl
clZhbHVlICsgMV07CisgICAgdiA9IChub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUg
LSAxKSAqIGNvbXBvbmVudFt0ZW1wICogMl0gKyAobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlv
blZhbHVlIC0gMSkgKiBjb21wb25lbnRbdGVtcCAqIDIgKyAxXTsKKyAgICBmbG9hdCBiID0gbGlu
ZWFySW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CisgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRp
b24oc3ksIGEsIGIpOworfQorCitfX2tlcm5lbCB2b2lkIFR1cmJ1bGVuY2UoX193cml0ZV9vbmx5
IGltYWdlMmRfdCBkZXN0aW5hdGlvbiwgX19jb25zdGFudCBmbG9hdCAqdHJhbnNmb3JtLCBfX2Nv
bnN0YW50IGZsb2F0ICpyZWRDb21wb25lbnQsCisgICAgX19jb25zdGFudCBmbG9hdCAqZ3JlZW5D
b21wb25lbnQsIF9fY29uc3RhbnQgZmxvYXQgKmJsdWVDb21wb25lbnQsIF9fY29uc3RhbnQgZmxv
YXQgKmFscGhhQ29tcG9uZW50LAorICAgIF9fY29uc3RhbnQgaW50ICpsYXR0aWNlU2VsZWN0b3Is
IF9fcHJpdmF0ZSBpbnQgb2Zmc2V0WCwgX19wcml2YXRlIGludCBvZmZzZXRZLCBfX3ByaXZhdGUg
aW50IHRpbGVXaWR0aCwKKyAgICBfX3ByaXZhdGUgaW50IHRpbGVIZWlnaHQsIF9fcHJpdmF0ZSBm
bG9hdCBiYXNlRnJlcXVlbmN5WCwgX19wcml2YXRlIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBfX3By
aXZhdGUgaW50IHN0aXRjaFRpbGVzLAorICAgIF9fcHJpdmF0ZSBpbnQgbnVtT2N0YXZlcywgX19w
cml2YXRlIGludCB0eXBlLCBfX3ByaXZhdGUgaW50IGZpbHRlcl9oZWlnaHQpCit7CisgICAgU3Rp
dGNoRGF0YSBzdGl0Y2hEYXRhID0geyAwLCAwLCAwLCAwIH07CisgICAgLy8gQWRqdXN0IHRoZSBi
YXNlIGZyZXF1ZW5jaWVzIGlmIG5lY2Vzc2FyeSBmb3Igc3RpdGNoaW5nLgorICAgIGlmIChzdGl0
Y2hUaWxlcykgeworICAgICAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNlLCB0
aGUgZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAorICAgICAgICAvLyBzbyB0aGF0IHRoZSB0
aWxlIGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgorICAgICAgICBpZiAoYmFzZUZyZXF1ZW5j
eVgpIHsKKyAgICAgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yKHRpbGVXaWR0aCAq
IGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgIGZsb2F0IGhpZ2hGcmVx
dWVuY3kgPSBjZWlsKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKKyAg
ICAgICAgICAgIC8vIEJhc2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRp
bmcgdG8gdGhlIHN0YW5kYXJkLgorICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSAoYmFzZUZy
ZXF1ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgp
ID8gbG93RnJlcXVlbmN5IDogaGlnaEZyZXF1ZW5jeTsKKyAgICAgICAgfQorICAgICAgICBpZiAo
YmFzZUZyZXF1ZW5jeVkpIHsKKyAgICAgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29y
KHRpbGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICAgICAg
ZmxvYXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWwodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAv
IHRpbGVIZWlnaHQ7CisgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IChiYXNlRnJlcXVlbmN5
WSAvIGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkgPyBsb3dG
cmVxdWVuY3kgOiBoaWdoRnJlcXVlbmN5OworICAgICAgICB9CisgICAgICAgIC8vIFNldCB1cCBU
dXJidWxlbmNlSW5pdGlhbCBzdGl0Y2ggdmFsdWVzLgorICAgICAgICBzdGl0Y2hEYXRhLndpZHRo
ID0gcm91bmQodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOworICAgICAgICBzdGl0Y2hEYXRh
LndyYXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7CisgICAgICAgIHN0aXRj
aERhdGEuaGVpZ2h0ID0gcm91bmQodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKKyAgICAg
ICAgc3RpdGNoRGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdodDsK
KyAgICB9CisgICAgZmxvYXQ0IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IChmbG9hdDQpKDAs
IDAsIDAsIDApOworICAgIGZsb2F0IHggPSAoZ2V0X2dsb2JhbF9pZCgwKSArIG9mZnNldFgpICog
YmFzZUZyZXF1ZW5jeVg7CisgICAgZmxvYXQgeSA9IChnZXRfZ2xvYmFsX2lkKDEpICsgb2Zmc2V0
WSkgKiBiYXNlRnJlcXVlbmN5WTsKKworICAgIGZsb2F0IG5vaXNlVmVjdG9yWCA9IHRyYW5zZm9y
bVswXSAqIHggKyB0cmFuc2Zvcm1bMl0gKiB5ICsgdHJhbnNmb3JtWzRdOworICAgIGZsb2F0IG5v
aXNlVmVjdG9yWSA9IHRyYW5zZm9ybVsxXSAqIHggKyB0cmFuc2Zvcm1bM10gKiB5ICsgdHJhbnNm
b3JtWzVdOworCisgICAgZmxvYXQgcmF0aW8gPSAxOworICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7
IG9jdGF2ZSA8IG51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGZsb2F0NCBub2lzZTJE
UmVzdWx0ID0gKGZsb2F0NCkoIG5vaXNlMkQocmVkQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3Is
IHN0aXRjaERhdGEsIG5vaXNlVmVjdG9yWCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyBy
YXRpbywKKyAgICBub2lzZTJEKGdyZWVuQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRj
aERhdGEsIG5vaXNlVmVjdG9yWCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRpbywK
KyAgICBub2lzZTJEKGJsdWVDb21wb25lbnQsIGxhdHRpY2VTZWxlY3Rvciwgc3RpdGNoRGF0YSwg
bm9pc2VWZWN0b3JYLCBub2lzZVZlY3RvclksIHN0aXRjaFRpbGVzKSAvIHJhdGlvLAorICAgIG5v
aXNlMkQoYWxwaGFDb21wb25lbnQsIGxhdHRpY2VTZWxlY3Rvciwgc3RpdGNoRGF0YSwgbm9pc2VW
ZWN0b3JYLCBub2lzZVZlY3RvclksIHN0aXRjaFRpbGVzKSAvIHJhdGlvKTsKKworICAgICAgICB0
dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gKHR5cGUgPT0gMSkgPyBub2lzZTJEUmVzdWx0IDog
ZmFicyhub2lzZTJEUmVzdWx0KTsKKworICAgICAgICBub2lzZVZlY3RvclggKj0gMjsKKyAgICAg
ICAgbm9pc2VWZWN0b3JZICo9IDI7CisgICAgICAgIHJhdGlvICo9IDI7CisgICAgICAgIGlmIChz
dGl0Y2hUaWxlcykgeworICAgICAgICAgICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRy
YWN0aW5nIHNfcGVybGluTm9pc2VvaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5kCisg
ICAgICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3VidHJhY3Rp
bmcgaXQgb25jZS4KKyAgICAgICAgICAgIHN0aXRjaERhdGEud2lkdGggKj0gMjsKKyAgICAgICAg
ICAgIHN0aXRjaERhdGEud3JhcFggPSAyICogc3RpdGNoRGF0YS53cmFwWCAtIHNfcGVybGluTm9p
c2U7CisgICAgICAgICAgICBzdGl0Y2hEYXRhLmhlaWdodCAqPSAyOworICAgICAgICAgICAgc3Rp
dGNoRGF0YS53cmFwWSA9IDIgKiBzdGl0Y2hEYXRhLndyYXBZIC0gc19wZXJsaW5Ob2lzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICh0eXBlID09IDEpCisgICAgICAgIHR1cmJ1bGVuY2VG
dW5jdGlvblJlc3VsdCA9IG1hZCgwLjVmLCB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQsIDAuNWYp
OworICAgIC8vIENsYW1wIHJlc3VsdC4KKyAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSBj
bGFtcCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQsIDAuMGYsIDEuMGYpOworCisgICAgd3JpdGVf
aW1hZ2VmKGRlc3RpbmF0aW9uLCAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9p
ZCgxKSksIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7Cit9CispOworCitpbmxpbmUgYm9vbCBG
aWx0ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlRkVUdXJidWxlbmNlKCkKK3sKKyAgICBpZiAobV90
dXJidWxlbmNlQ29tcGlsZVN0YXR1cyAhPSBvcGVuY2xOb3RDb21waWxlZFlldCkKKyAgICAgICAg
cmV0dXJuIG1fdHVyYnVsZW5jZUNvbXBpbGVTdGF0dXMgPT0gb3BlbmNsQ29tcGlsZVN1Y2Nlc3Nm
dWw7CisKKyAgICBtX3R1cmJ1bGVuY2VDb21waWxlU3RhdHVzID0gb3BlbmNsQ29tcGlsZUZhaWxl
ZDsKKyAgICBtX3R1cmJ1bGVuY2VQcm9ncmFtID0gY29tcGlsZVByb2dyYW0odHVyYnVsZW5jZUtl
cm5lbFByb2dyYW0pOworICAgIGlmICghbV90dXJidWxlbmNlUHJvZ3JhbSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIG1fdHVyYnVsZW5jZU9wZXJhdGlvbiA9IGtlcm5lbEJ5TmFtZShtX3R1
cmJ1bGVuY2VQcm9ncmFtLCAiVHVyYnVsZW5jZSIpOworICAgIGlmICghbV90dXJidWxlbmNlT3Bl
cmF0aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3R1cmJ1bGVuY2VDb21waWxl
U3RhdHVzID0gb3BlbmNsQ29tcGlsZVN1Y2Nlc3NmdWw7CisgICAgcmV0dXJuIG9wZW5jbENvbXBp
bGVGYWlsZWQ7Cit9CisKK2lubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVU
dXJidWxlbmNlKE9wZW5DTEhhbmRsZSBkZXN0aW5hdGlvbiwKKyAgICBJbnRTaXplIGRlc3RpbmF0
aW9uU2l6ZSwgaW50IGJsb2NrU2l6ZSwKKyAgICB2b2lkKiB0cmFuc2Zvcm0sIHZvaWQqIHJlZENv
bXBvbmVudCwgdm9pZCogZ3JlZW5Db21wb25lbnQsCisgICAgdm9pZCogYmx1ZUNvbXBvbmVudCwg
dm9pZCogYWxwaGFDb21wb25lbnQsCisgICAgdm9pZCogbGF0dGljZVNlbGVjdG9yLCBpbnQgb2Zm
c2V0WCwgaW50IG9mZnNldFksIGludCB0aWxlV2lkdGgsIGludCB0aWxlSGVpZ2h0LAorICAgIGZs
b2F0IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgYm9vbCBzdGl0Y2hUaWxl
cywgaW50IG51bU9jdGF2ZXMsIGludCB0eXBlKQoreworICAgIFJ1bktlcm5lbCBrZXJuZWwodGhp
cywgbV90dXJidWxlbmNlT3BlcmF0aW9uLCBkZXN0aW5hdGlvblNpemUud2lkdGgoKSwgZGVzdGlu
YXRpb25TaXplLmhlaWdodCgpKTsKKworICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlv
bik7CisgICAgT3BlbkNMSGFuZGxlIHRyYW5zZm9ybUhhbmRsZShrZXJuZWwuYWRkQXJndW1lbnQo
dHJhbnNmb3JtLCBzaXplb2YoZmxvYXQpICogNikpOworICAgIE9wZW5DTEhhbmRsZSByZWRDb21w
b25lbnRIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KHJlZENvbXBvbmVudCwgc2l6ZW9mKGZsb2F0
KSAqICgyICogYmxvY2tTaXplICsgMikgKiAyKSk7CisgICAgT3BlbkNMSGFuZGxlIGdyZWVuQ29t
cG9uZW50SGFuZGxlKGtlcm5lbC5hZGRBcmd1bWVudChncmVlbkNvbXBvbmVudCwgc2l6ZW9mKGZs
b2F0KSAqICgyICogYmxvY2tTaXplICsgMikgKiAyKSk7CisgICAgT3BlbkNMSGFuZGxlIGJsdWVD
b21wb25lbnRIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KGJsdWVDb21wb25lbnQsIHNpemVvZihm
bG9hdCkgKiAoMiAqIGJsb2NrU2l6ZSArIDIpICogMikpOworICAgIE9wZW5DTEhhbmRsZSBhbHBo
YUNvbXBvbmVudEhhbmRsZShrZXJuZWwuYWRkQXJndW1lbnQoYWxwaGFDb21wb25lbnQsIHNpemVv
ZihmbG9hdCkgKiAoMiAqIGJsb2NrU2l6ZSArIDIpICogMikpOworICAgIE9wZW5DTEhhbmRsZSBs
YXR0aWNlU2VsZWN0b3JIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KGxhdHRpY2VTZWxlY3Rvciwg
c2l6ZW9mKGludCkgKiAoMiAqIGJsb2NrU2l6ZSArIDIpKSk7CisgICAga2VybmVsLmFkZEFyZ3Vt
ZW50KG9mZnNldFgpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChvZmZzZXRZKTsKKyAgICBrZXJu
ZWwuYWRkQXJndW1lbnQodGlsZVdpZHRoKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQodGlsZUhl
aWdodCk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KGJhc2VGcmVxdWVuY3lYKTsKKyAgICBrZXJu
ZWwuYWRkQXJndW1lbnQoYmFzZUZyZXF1ZW5jeVkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChz
dGl0Y2hUaWxlcyk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KG51bU9jdGF2ZXMpOworICAgIGtl
cm5lbC5hZGRBcmd1bWVudCh0eXBlKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoZGVzdGluYXRp
b25TaXplLmhlaWdodCgpKTsKKworICAgIGtlcm5lbC5ydW4oKTsKKworICAgIHRyYW5zZm9ybUhh
bmRsZS5jbGVhcigpOworICAgIHJlZENvbXBvbmVudEhhbmRsZS5jbGVhcigpOworICAgIGdyZWVu
Q29tcG9uZW50SGFuZGxlLmNsZWFyKCk7CisgICAgYmx1ZUNvbXBvbmVudEhhbmRsZS5jbGVhcigp
OworICAgIGFscGhhQ29tcG9uZW50SGFuZGxlLmNsZWFyKCk7CisgICAgbGF0dGljZVNlbGVjdG9y
SGFuZGxlLmNsZWFyKCk7Cit9CisKK2Jvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5T3Bl
bkNMKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4
dE9wZW5DTDo6Y29udGV4dCgpOworICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+Y29tcGls
ZUZFVHVyYnVsZW5jZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBPcGVuQ0xIYW5k
bGUgZGVzdGluYXRpb24gPSBjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCgpOworCisgICAgUGFpbnRp
bmdEYXRhIHBhaW50aW5nRGF0YShtX3NlZWQsIHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2
ZVN1YnJlZ2lvbigpLnNpemUoKSkpOworICAgIGluaXRQYWludChwYWludGluZ0RhdGEpOworCisg
ICAgQWZmaW5lVHJhbnNmb3JtIGludmVydGVkVHJhbnNmb3JtID0gcmVpbnRlcnByZXRfY2FzdDxT
VkdGaWx0ZXIqPihmaWx0ZXIoKSktPmFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJzZSgpOworICAg
IGZsb2F0IHRyYW5zZm9ybUNvbXBvbmVudHNbNl0gPSB7IGludmVydGVkVHJhbnNmb3JtLmEoKSwg
aW52ZXJ0ZWRUcmFuc2Zvcm0uYigpLCBpbnZlcnRlZFRyYW5zZm9ybS5jKCksIGludmVydGVkVHJh
bnNmb3JtLmQoKSwgaW52ZXJ0ZWRUcmFuc2Zvcm0uZSgpLCBpbnZlcnRlZFRyYW5zZm9ybS5mKCkg
fTsKKworICAgIGNvbnRleHQtPmFwcGx5RkVUdXJidWxlbmNlKGRlc3RpbmF0aW9uLCBhYnNvbHV0
ZVBhaW50UmVjdCgpLnNpemUoKSwgc19ibG9ja1NpemUsIHRyYW5zZm9ybUNvbXBvbmVudHMsIHBh
aW50aW5nRGF0YS5ncmFkaWVudCwKKyAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50ICsgMSwg
cGFpbnRpbmdEYXRhLmdyYWRpZW50ICsgMiwgcGFpbnRpbmdEYXRhLmdyYWRpZW50ICsgMywgcGFp
bnRpbmdEYXRhLmxhdHRpY2VTZWxlY3RvciwKKyAgICAgICAgYWJzb2x1dGVQYWludFJlY3QoKS54
KCksIGFic29sdXRlUGFpbnRSZWN0KCkueSgpLCBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS53aWR0
aCgpLCBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgbV9iYXNlRnJl
cXVlbmN5WCwgbV9iYXNlRnJlcXVlbmN5WSwgbV9zdGl0Y2hUaWxlcywgbV9udW1PY3RhdmVzLCBt
X3R5cGUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xIYW5k
bGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNM
SGFuZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1ODVkYwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVu
Y2wvT3BlbkNMSGFuZGxlLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpZiBFTkFCTEUoT1BFTkNM
KQorCisjaWZuZGVmIE9wZW5DTEhhbmRsZV9oCisjZGVmaW5lIE9wZW5DTEhhbmRsZV9oCisKKyNp
bmNsdWRlICJDTC9jbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE9wZW5DTEhh
bmRsZSB7CitwdWJsaWM6CisgICAgT3BlbkNMSGFuZGxlKCkgOiBtX29wZW5DTE1lbW9yeSgwKSB7
IH0KKyAgICBPcGVuQ0xIYW5kbGUoY2xfbWVtIG9wZW5DTE1lbW9yeSkgOiBtX29wZW5DTE1lbW9y
eShvcGVuQ0xNZW1vcnkpIHsgfQorCisgICAgb3BlcmF0b3IgY2xfbWVtKCkgeyByZXR1cm4gbV9v
cGVuQ0xNZW1vcnk7IH0KKworICAgIHZvaWQgb3BlcmF0b3I9KE9wZW5DTEhhbmRsZSBvcGVuQ0xN
ZW1vcnkpIHsgbV9vcGVuQ0xNZW1vcnkgPSBvcGVuQ0xNZW1vcnk7IH0KKworICAgIC8vIFRoaXMg
Y29udmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1
dCBub3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0eXBlZGVmIGNsX21lbSAoT3BlbkNM
SGFuZGxlOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRC
b29sVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkNMTWVtb3J5ID8gJk9wZW5DTEhhbmRsZTo6
bV9vcGVuQ0xNZW1vcnkgOiAwOyB9CisKKyAgICB2b2lkKiBoYW5kbGVBZGRyZXNzKCkgeyByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJm1fb3BlbkNMTWVtb3J5KTsgfQorCisgICAgdm9p
ZCBjbGVhcigpCisgICAgeworICAgICAgICBpZiAobV9vcGVuQ0xNZW1vcnkpCisgICAgICAgICAg
ICBjbFJlbGVhc2VNZW1PYmplY3QobV9vcGVuQ0xNZW1vcnkpOworICAgICAgICBtX29wZW5DTE1l
bW9yeSA9IDA7CisgICAgfQorCitwcml2YXRlOgorICAgIGNsX21lbSBtX29wZW5DTE1lbW9yeTsK
K307CisKK30KKworI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>176005</attachid>
            <date>2012-11-26 08:14:47 -0800</date>
            <delta_ts>2012-11-26 09:19:13 -0800</delta_ts>
            <desc>proposed patch</desc>
            <filename>0006-ocl.patch</filename>
            <type>text/plain</type>
            <size>49518</size>
            <attacher name="Tamas Czene">tczene</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZDFmMTU4Li44ODg2ZGFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzQg
QEAKKzIwMTItMTEtMjYgIFRhbWFzIEN6ZW5lICA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKwor
ICAgICAgICBPcGVuQ0wgdmVyc2lvbiBvZiBTb3VyY2VBbHBoYSwgU291cmNlR3JhcGhpY3MgYW5k
IEZFVHVyYnVsZW5jZSBmaWx0ZXIgZWZmZWN0cyAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5ODI5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBjb250YWlucyB0aGUgT3BlbkNMIGltcGxl
bWVudGF0aW9uIG9mIFNvdXJjZUFscGhhLCBTb3VyY2VHcmFwaGljLCBGRVR1cmJ1bGVuY2UgYW5k
IGEgc2ltcGxlIE9wZW5DTCBlbnZpcm9ubWVudC4gCisgICAgICAgIEF0IHRoZSBtb21lbnQgb25s
eSB0aGUgUXQgYnVpbGQgc3lzdGVtIGlzIHN1cHBvcnRlZCAKKyAgICAgICAgfjN4IHNwZWVkLXVw
IChkZXBlbmRpbmcgb24gaGFyZHdhcmUgY29uZmlndXJhdGlvbikKKworICAgICAgICAqIFRhcmdl
dC5wcmk6CisgICAgICAgICogV2ViQ29yZS5wcmk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaDogQWRkZWQgcGxhdGZvcm1BcHBseU9wZW5DTCgpIHZp
cnR1YWwgZnVuY3Rpb24uCisgICAgICAgIChGRVR1cmJ1bGVuY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDogQWRkZWQgcGxhdGZvcm0gc3Bl
Y2lmaWMgYXBwbHkuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OmFwcGx5KToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpwbGF0Zm9y
bUFwcGx5T3BlbkNMKTogQSBmdW5jdGlvbiB0byB1c2Ugc29mdHdhcmUgY29tcHV0aW5nIGlmIGEg
ZmlsdGVyIGlzIG5vdCBpbXBsZW1lbnRlZCBvbiBPcGVuQ0wuIEl0IHdpbGwgYmUgZGVsZXRlZCBh
ZnRlciBhbGwgb2YgdGhlIGZpbHRlcnMgYXJlIGltcGxlbWVudGVkLgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyRWZmZWN0OjpjbGVhclJlc3VsdCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJF
ZmZlY3Q6OmFzSW1hZ2VCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpv
cGVuQ0xJbWFnZVRvSW1hZ2VCdWZmZXIpOiBHZXRzIHRoZSByZXN1bHQgb2YgdGhlIGZpbHRlciBm
cm9tIHRoZSBPcGVuQ0wgZGV2aWNlIGFuZCBjb252ZXJ0cyBpdCB0byBJbWFnZUJ1ZmZlciB0eXBl
LgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0OjpjcmVhdGVPcGVuQ0xJbWFnZVJlc3Vs
dCk6IEFsbG9jYXRlcyBtZW1vcnkgb24gT3BlbkNMIGRldmljZSBhbmQgaWYgaXQgZ2V0cyBhbiBp
bWFnZSBhcyBhIHBhcmFtZXRlciwgaXQgdXBsb2FkcyB0aGUgaW1hZ2UgdG8gdGhlIE9wZW5DTCBk
ZXZpY2UuCisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6OnRyYW5zZm9ybVJlc3VsdENv
bG9yU3BhY2UpOiAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVm
ZmVjdC5oOgorICAgICAgICAoRmlsdGVyRWZmZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckVmZmVjdDo6b3BlbkNMSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyRWZmZWN0Ojpz
ZXRPcGVuQ0xJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJFZmZlY3Q6Omhhc1Jlc3Vs
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3VyY2VBbHBoYS5oOgor
ICAgICAgICAoU291cmNlQWxwaGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvU291cmNlR3JhcGhpYy5oOgorICAgICAgICAoU291cmNlR3JhcGhpYyk6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRP
cGVuQ0w6OmNvbnRleHQpOiBDb25maWd1cmVzIHRoZSBPcGVuQ0wgZW52aXJvbm1lbnQuCisgICAg
ICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjpjcmVhdGVPcGVuQ0xJbWFnZSk6IEFs
bG9jYXRlcyBtZW1vcnkgb24gT3BlbkNMIGRldmljZS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckNvbnRleHRPcGVuQ0w6Om9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2UpOiBPcGVuQ0wgaW1wbGVt
ZW50YXRpb24gb2YgdHJhbnNmb3JtQ29sb3JTcGFjZS4KKyAgICAgICAgKFdlYkNvcmU6OkZpbHRl
ckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVQcm9ncmFtKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKEZpbHRlckNvbnRleHRPcGVuQ0wpOgorICAgICAgICAoV2ViQ29y
ZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6ZGV2aWNlSWQpOgorICAgICAgICAoV2ViQ29yZTo6Rmls
dGVyQ29udGV4dE9wZW5DTDo6ZGV2aWNlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0
ZXJDb250ZXh0T3BlbkNMOjpjb21tYW5kUXVldWUpOgorICAgICAgICAoUnVuS2VybmVsKToKKyAg
ICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6OlJ1bktlcm5lbDo6UnVuS2VybmVs
KToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlckNvbnRleHRPcGVuQ0w6OlJ1bktlcm5lbDo6YWRk
QXJndW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6UnVuS2Vy
bmVsOjpydW4pOgorICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6a2VybmVs
QnlOYW1lKTogUmV0dXJucyB0aGUgcmVmZXJlbmNlIG9mIGEgZnVuY3Rpb24gaW4gdGhlIE9wZW5D
TCBwcm9ncmFtLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNM
RkVTb3VyY2VBbHBoYS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTb3VyY2VBbHBoYTo6cGxhdGZvcm1BcHBseU9wZW5DTCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUdyYXBoaWMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlR3JhcGhpYzo6
cGxhdGZvcm1BcHBseU9wZW5DTCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29w
ZW5jbC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAoV2ViQ29yZTo6RmlsdGVyQ29udGV4dE9wZW5DTDo6Y29tcGlsZUZFVHVyYnVsZW5j
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJDb250ZXh0T3BlbkNMOjphcHBseUZFVHVyYnVs
ZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpGRVR1cmJ1bGVuY2U6OnBsYXRmb3JtQXBwbHlPcGVu
Q0wpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFuZGxl
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChPcGVuQ0xIYW5kbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6T3BlbkNMSGFuZGxlOjpPcGVuQ0xIYW5kbGUpOgorICAgICAgICAo
V2ViQ29yZTo6T3BlbkNMSGFuZGxlOjpvcGVyYXRvciBjbF9tZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6T3BlbkNMSGFuZGxlOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6T3BlbkNMSGFu
ZGxlOjpvcGVyYXRvciBVbnNwZWNpZmllZEJvb2xUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok9w
ZW5DTEhhbmRsZTo6aGFuZGxlQWRkcmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpPcGVuQ0xIYW5k
bGU6OmNsZWFyKToKKwogMjAxMi0xMS0yNiAgSGFqaW1lIE1vcnJpdGEgIDxtb3JyaXRhQGdvb2ds
ZS5jb20+CiAKICAgICAgICAgW1NoYWRvdyBET01dIEltcGxlbWVudCBFbGVtZW50OjpjcmVhdGVT
aGFkb3dSb290KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkgYi9Tb3Vy
Y2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGM5NzBmNWUuLmRlOWUzZTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnBy
aQpAQCAtNDA4MSw2ICs0MDgxLDE3IEBAIGNvbnRhaW5zKENPTkZJRywgb3BlbmdsLXNoaW1zKSB7
CiAgICAgREVGSU5FUyArPSBRVF9PUEVOR0xfU0hJTVM9MQogfQogCitjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfT1BFTkNMPTEpIHsKKyAgICBIRUFERVJTICs9IFwKKyAgICAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xIYW5kbGUuaCBcCisgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5oCisgICAgU09VUkNFUyArPSBc
CisgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5D
TC5jcHAgXAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFU291
cmNlQWxwaGEuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVu
Q0xGRVNvdXJjZUdyYXBoaWMuY3BwIFwKKyAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29w
ZW5jbC9PcGVuQ0xGRVR1cmJ1bGVuY2UuY3BwCit9CisKIHVzZT8oR1JBUEhJQ1NfU1VSRkFDRSkg
ewogICAgIG1hYyB7CiAgICAgICAgIFNPVVJDRVMgKz0gcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFj
ZXMvbWFjL0dyYXBoaWNzU3VyZmFjZU1hYy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUucHJpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKaW5kZXggZjBhNDA0Mi4u
NjdlMTJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkKQEAgLTI5NCw2ICsyOTQsMTIgQEAgdW5peHx3aW4zMi1n
KysqIHsKICAgICBRTUFLRV9QS0dDT05GSUdfUkVRVUlSRVMgPSBRdENvcmUgUXRHdWkgUXROZXR3
b3JrIFF0V2lkZ2V0cwogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfT1BFTkNMPTEpIHsK
KyAgICBMSUJTICs9IC1sT3BlbkNMCisKKyAgICBJTkNMVURFUEFUSCArPSAkJFNPVVJDRV9ESVIv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbAorfQorCiAjIERpc2FibGUgQysrMHggbW9kZSBp
biBXZWJDb3JlIGZvciB0aG9zZSB3aG8gZW5hYmxlZCBpdCBpbiB0aGVpciBRdCdzIG1rc3BlYwog
Ki1nKysqOlFNQUtFX0NYWEZMQUdTIC09IC1zdGQ9YysrMHggLXN0ZD1nbnUrKzB4CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxl
bmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFVHVyYnVs
ZW5jZS5oCmluZGV4IDQ3YzhiZWUuLjg0ZmYxMTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVUdXJidWxlbmNlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRVR1cmJ1bGVuY2UuaApAQCAtNjEsNiAr
NjEsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZmlsbFJlZ2lvbldvcmtlcih2b2lkKik7
CiAKICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYgRU5BQkxF
KE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlm
CiAgICAgdmlydHVhbCB2b2lkIGR1bXAoKTsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgZGV0ZXJt
aW5lQWJzb2x1dGVQYWludFJlY3QoKSB7IHNldEFic29sdXRlUGFpbnRSZWN0KGVuY2xvc2luZ0lu
dFJlY3QobWF4RWZmZWN0UmVjdCgpKSk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcAppbmRleCBhMmJiNTRk
Li4wYTBmODIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
aWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA4IEFsZXggTWF0aGV3cyA8cG9zc2Vzc2VkcGVuZ3VpbmJvYkBnbWFpbC5jb20+
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDkgRGlyayBTY2h1bHplIDxrcml0QHdlYmtpdC5vcmc+CiAg
KiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQK
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTIzLDYgKzEyNCwxMCBAQCB2b2lkIEZpbHRlckVmZmVj
dDo6YXBwbHkoKQogICAgIH0KICAgICAKICAgICAvLyBBZGQgcGxhdGZvcm0gc3BlY2lmaWMgYXBw
bHkgZnVuY3Rpb25zIGhlcmUgYW5kIHJldHVybiBlYXJsaWVyLgorI2lmIEVOQUJMRShPUEVOQ0wp
CisgICAgaWYgKHBsYXRmb3JtQXBwbHlPcGVuQ0woKSkKKyAgICAgICAgcmV0dXJuOworI2VuZGlm
CiAjaWYgVVNFKFNLSUEpCiAgICAgaWYgKHBsYXRmb3JtQXBwbHlTa2lhKCkpCiAgICAgICAgIHJl
dHVybjsKQEAgLTEzMCw2ICsxMzUsMzEgQEAgdm9pZCBGaWx0ZXJFZmZlY3Q6OmFwcGx5KCkKICAg
ICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKIH0KIAorI2lmIEVOQUJMRShPUEVOQ0wpCisvLyBU
aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2hhbmdlZCB0byBhYnN0cmFjdCB2aXJ0dWFsIHdoZW4gYWxs
IGZpbHRlcnMgYXJlIGxhbmRlZC4KK2Jvb2wgRmlsdGVyRWZmZWN0OjpwbGF0Zm9ybUFwcGx5T3Bl
bkNMKCkKK3sKKyAgICBpZiAoIUZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbnRleHQoKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgdW5zaWduZWQgc2l6ZSA9IG1faW5wdXRFZmZlY3RzLnNp
emUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAg
IEZpbHRlckVmZmVjdCogaW4gPSBtX2lucHV0RWZmZWN0cy5hdChpKS5nZXQoKTsKKyAgICAgICAg
Ly8gU29mdHdhcmUgY29kZSBwYXRoIGV4cGVjdHMgdGhhdCBhdCBsZWFzdCBvbmUgb2YgdGhlIGZv
bGxvd2luZyBmaWxlZHMgaXMgdmFsaWQuCisgICAgICAgIGlmICghaW4tPm1faW1hZ2VCdWZmZXJS
ZXN1bHQgJiYgIWluLT5tX3VubXVsdGlwbGllZEltYWdlUmVzdWx0ICYmICFpbi0+bV9wcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQpCisgICAgICAgICAgICBpbi0+YXNJbWFnZUJ1ZmZlcigpOworICAg
IH0KKworICAgIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgpOworICAgIEltYWdlQnVmZmVyKiBzb3Vy
Y2VJbWFnZSA9IGFzSW1hZ2VCdWZmZXIoKTsKKyAgICBpZiAoc291cmNlSW1hZ2UpIHsKKyAgICAg
ICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VJbWFnZURhdGEgPSBzb3VyY2VJbWFn
ZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgc291cmNlSW1h
Z2UtPmludGVybmFsU2l6ZSgpKSk7CisgICAgICAgIGNyZWF0ZU9wZW5DTEltYWdlUmVzdWx0KHNv
dXJjZUltYWdlRGF0YS0+ZGF0YSgpKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisjZW5k
aWYKKwogdm9pZCBGaWx0ZXJFZmZlY3Q6OmZvcmNlVmFsaWRQcmVNdWx0aXBsaWVkUGl4ZWxzKCkK
IHsKICAgICAvLyBNdXN0IG9wZXJhdGUgb24gcHJlLW11bHRpcGxpZWQgcmVzdWx0czsgb3RoZXIg
Zm9ybWF0cyBjYW5ub3QgaGF2ZSBpbnZhbGlkIHBpeGVscy4KQEAgLTE4Nyw2ICsyMTcsMTAgQEAg
dm9pZCBGaWx0ZXJFZmZlY3Q6OmNsZWFyUmVzdWx0KCkKICAgICAgICAgbV91bm11bHRpcGxpZWRJ
bWFnZVJlc3VsdC5jbGVhcigpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkK
ICAgICAgICAgbV9wcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQuY2xlYXIoKTsKKyNpZiBFTkFCTEUo
T1BFTkNMKQorICAgIGlmIChtX29wZW5DTEltYWdlUmVzdWx0KQorICAgICAgICBtX29wZW5DTElt
YWdlUmVzdWx0LmNsZWFyKCk7CisjZW5kaWYKIH0KIAogSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVj
dDo6YXNJbWFnZUJ1ZmZlcigpCkBAIC0xOTUsNiArMjI5LDEwIEBAIEltYWdlQnVmZmVyKiBGaWx0
ZXJFZmZlY3Q6OmFzSW1hZ2VCdWZmZXIoKQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAobV9p
bWFnZUJ1ZmZlclJlc3VsdCkKICAgICAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0
KCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBpZiAobV9vcGVuQ0xJbWFnZVJlc3VsdCkKKyAg
ICAgICAgcmV0dXJuIG9wZW5DTEltYWdlVG9JbWFnZUJ1ZmZlcigpOworI2VuZGlmCiAgICAgbV9p
bWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50UmVj
dC5zaXplKCksIDEsIG1fcmVzdWx0Q29sb3JTcGFjZSwgbV9maWx0ZXItPnJlbmRlcmluZ01vZGUo
KSk7CiAgICAgSW50UmVjdCBkZXN0aW5hdGlvblJlY3QoSW50UG9pbnQoKSwgbV9hYnNvbHV0ZVBh
aW50UmVjdC5zaXplKCkpOwogICAgIGlmIChtX3ByZW11bHRpcGxpZWRJbWFnZVJlc3VsdCkKQEAg
LTIwNCw2ICsyNDIsMjggQEAgSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6YXNJbWFnZUJ1ZmZl
cigpCiAgICAgcmV0dXJuIG1faW1hZ2VCdWZmZXJSZXN1bHQuZ2V0KCk7CiB9CiAKKyNpZiBFTkFC
TEUoT1BFTkNMKQorSW1hZ2VCdWZmZXIqIEZpbHRlckVmZmVjdDo6b3BlbkNMSW1hZ2VUb0ltYWdl
QnVmZmVyKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29u
dGV4dE9wZW5DTDo6Y29udGV4dCgpOworICAgIEFTU0VSVChjb250ZXh0KTsKKworICAgIHNpemVf
dCBvcmlnaW5bM10gPSB7IDAsIDAsIDAgfTsKKyAgICBzaXplX3QgcmVnaW9uWzNdID0geyBtX2Fi
c29sdXRlUGFpbnRSZWN0LndpZHRoKCksIG1fYWJzb2x1dGVQYWludFJlY3QuaGVpZ2h0KCksIDEg
fTsKKworICAgIFJlZlB0cjxVaW50OENsYW1wZWRBcnJheT4gZGVzdGluYXRpb25QaXhlbEFycmF5
ID0gVWludDhDbGFtcGVkQXJyYXk6OmNyZWF0ZShtX2Fic29sdXRlUGFpbnRSZWN0LndpZHRoKCkg
KiBtX2Fic29sdXRlUGFpbnRSZWN0LmhlaWdodCgpICogNCk7CisKKyAgICBjbEZpbmlzaChjb250
ZXh0LT5jb21tYW5kUXVldWUoKSk7CisgICAgY2xFbnF1ZXVlUmVhZEltYWdlKGNvbnRleHQtPmNv
bW1hbmRRdWV1ZSgpLCBtX29wZW5DTEltYWdlUmVzdWx0LCBDTF9UUlVFLCBvcmlnaW4sIHJlZ2lv
biwgMCwgMCwgZGVzdGluYXRpb25QaXhlbEFycmF5LT5kYXRhKCksIDAsIDAsIDApOworCisgICAg
bV9pbWFnZUJ1ZmZlclJlc3VsdCA9IEltYWdlQnVmZmVyOjpjcmVhdGUobV9hYnNvbHV0ZVBhaW50
UmVjdC5zaXplKCkpOworICAgIEludFJlY3QgZGVzdGluYXRpb25SZWN0KEludFBvaW50KCksIG1f
YWJzb2x1dGVQYWludFJlY3Quc2l6ZSgpKTsKKyAgICBtX2ltYWdlQnVmZmVyUmVzdWx0LT5wdXRC
eXRlQXJyYXkoVW5tdWx0aXBsaWVkLCBkZXN0aW5hdGlvblBpeGVsQXJyYXkuZ2V0KCksIGRlc3Rp
bmF0aW9uUmVjdC5zaXplKCksIGRlc3RpbmF0aW9uUmVjdCwgSW50UG9pbnQoKSk7CisKKyAgICBy
ZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdC5nZXQoKTsKK30KKyNlbmRpZgorCiBQYXNzUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBGaWx0ZXJFZmZlY3Q6OmFzVW5tdWx0aXBsaWVkSW1hZ2UoY29u
c3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBBU1NFUlQoaXNGaWx0ZXJTaXplVmFsaWQocmVjdCkp
OwpAQCAtMzYzLDYgKzQyMywyMiBAQCBVaW50OENsYW1wZWRBcnJheSogRmlsdGVyRWZmZWN0Ojpj
cmVhdGVQcmVtdWx0aXBsaWVkSW1hZ2VSZXN1bHQoKQogICAgIHJldHVybiBtX3ByZW11bHRpcGxp
ZWRJbWFnZVJlc3VsdC5nZXQoKTsKIH0KIAorI2lmIEVOQUJMRShPUEVOQ0wpCitPcGVuQ0xIYW5k
bGUgRmlsdGVyRWZmZWN0OjpjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCh1aW50OF90KiBzb3VyY2Up
Cit7CisgICAgQVNTRVJUKCFoYXNSZXN1bHQoKSk7CisgICAgY2xfaW1hZ2VfZm9ybWF0IGNsSW1h
Z2VGb3JtYXQ7CisgICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVsX29yZGVyID0gQ0xfUkdC
QTsKKyAgICBjbEltYWdlRm9ybWF0LmltYWdlX2NoYW5uZWxfZGF0YV90eXBlID0gQ0xfVU5PUk1f
SU5UODsKKworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQgPSBGaWx0ZXJDb250ZXh0
T3BlbkNMOjpjb250ZXh0KCk7CisgICAgQVNTRVJUKGNvbnRleHQpOworICAgIG1fb3BlbkNMSW1h
Z2VSZXN1bHQgPSBjbENyZWF0ZUltYWdlMkQoY29udGV4dC0+ZGV2aWNlQ29udGV4dCgpLCBDTF9N
RU1fUkVBRF9XUklURSB8IChzb3VyY2UgPyBDTF9NRU1fQ09QWV9IT1NUX1BUUiA6IDApLAorICAg
ICAgICAmY2xJbWFnZUZvcm1hdCwgbV9hYnNvbHV0ZVBhaW50UmVjdC53aWR0aCgpLCBtX2Fic29s
dXRlUGFpbnRSZWN0LmhlaWdodCgpLCAwLCBzb3VyY2UsIDApOworICAgIHJldHVybiBtX29wZW5D
TEltYWdlUmVzdWx0OworfQorI2VuZGlmCisKIHZvaWQgRmlsdGVyRWZmZWN0Ojp0cmFuc2Zvcm1S
ZXN1bHRDb2xvclNwYWNlKENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKIHsKICNpZiBVU0UoQ0cp
CkBAIC0zNzQsMTIgKzQ1MCwyNyBAQCB2b2lkIEZpbHRlckVmZmVjdDo6dHJhbnNmb3JtUmVzdWx0
Q29sb3JTcGFjZShDb2xvclNwYWNlIGRzdENvbG9yU3BhY2UpCiAKICAgICAvLyBGSVhNRTogV2Ug
Y2FuIGF2b2lkIHRoaXMgcG90ZW50aWFsbHkgdW5uZWNlc3NhcnkgSW1hZ2VCdWZmZXIgY29udmVy
c2lvbiBieSBhZGRpbmcKICAgICAvLyBjb2xvciBzcGFjZSB0cmFuc2Zvcm0gc3VwcG9ydCBmb3Ig
dGhlIHtwcmUsdW59bXVsdGlwbGllZCBhcnJheXMuCisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICBp
ZiAob3BlbkNMSW1hZ2UoKSkgeworICAgICAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0
ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworICAgICAgICBBU1NFUlQoY29udGV4
dCk7CisgICAgICAgIGNvbnRleHQtPm9wZW5DTFRyYW5zZm9ybUNvbG9yU3BhY2UobV9vcGVuQ0xJ
bWFnZVJlc3VsdCwgYWJzb2x1dGVQYWludFJlY3QoKSwgbV9yZXN1bHRDb2xvclNwYWNlLCBkc3RD
b2xvclNwYWNlKTsKKyAgICAgICAgaWYgKG1faW1hZ2VCdWZmZXJSZXN1bHQpCisgICAgICAgICAg
ICBtX2ltYWdlQnVmZmVyUmVzdWx0LmNsZWFyKCk7CisgICAgICAgIGdvdG8gc2tpcFNvZnR3YXJl
Q29kZVBhdGg7CisgICAgfQorI2VuZGlmCiAgICAgaWYgKCFtX2ltYWdlQnVmZmVyUmVzdWx0KSB7
CiAgICAgICAgIGFzSW1hZ2VCdWZmZXIoKTsKICAgICAgICAgQVNTRVJUKG1faW1hZ2VCdWZmZXJS
ZXN1bHQpOwogICAgIH0KIAogICAgIG1faW1hZ2VCdWZmZXJSZXN1bHQtPnRyYW5zZm9ybUNvbG9y
U3BhY2UobV9yZXN1bHRDb2xvclNwYWNlLCBkc3RDb2xvclNwYWNlKTsKKworI2lmIEVOQUJMRShP
UEVOQ0wpCitza2lwU29mdHdhcmVDb2RlUGF0aDoKKyNlbmRpZgorCiAgICAgbV9yZXN1bHRDb2xv
clNwYWNlID0gZHN0Q29sb3JTcGFjZTsKIAogICAgIGlmIChtX3VubXVsdGlwbGllZEltYWdlUmVz
dWx0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRmlsdGVyRWZmZWN0LmgKaW5kZXggMDY5ZWRlMy4uYjlmMjE5MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GaWx0ZXJFZmZlY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZpbHRlckVmZmVjdC5o
CkBAIC0zMyw2ICszMywxMCBAQAogI2luY2x1ZGUgPHd0Zi9VaW50OENsYW1wZWRBcnJheS5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAorI2lmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAi
RmlsdGVyQ29udGV4dE9wZW5DTC5oIgorI2VuZGlmCisKIHN0YXRpYyBjb25zdCBmbG9hdCBrTWF4
RmlsdGVyU2l6ZSA9IDUwMDAuMGY7CiAKICNpZiBVU0UoU0tJQSkKQEAgLTcwLDYgKzc0LDEyIEBA
IHB1YmxpYzoKICAgICB2b2lkIGNvcHlVbm11bHRpcGxpZWRJbWFnZShVaW50OENsYW1wZWRBcnJh
eSogZGVzdGluYXRpb24sIGNvbnN0IEludFJlY3QmKTsKICAgICB2b2lkIGNvcHlQcmVtdWx0aXBs
aWVkSW1hZ2UoVWludDhDbGFtcGVkQXJyYXkqIGRlc3RpbmF0aW9uLCBjb25zdCBJbnRSZWN0Jik7
CiAKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIE9wZW5DTEhhbmRsZSBvcGVuQ0xJbWFnZSgpIHsg
cmV0dXJuIG1fb3BlbkNMSW1hZ2VSZXN1bHQ7IH0KKyAgICB2b2lkIHNldE9wZW5DTEltYWdlKE9w
ZW5DTEhhbmRsZSBvcGVuQ0xJbWFnZSkgeyBtX29wZW5DTEltYWdlUmVzdWx0ID0gb3BlbkNMSW1h
Z2U7IH0KKyAgICBJbWFnZUJ1ZmZlciogb3BlbkNMSW1hZ2VUb0ltYWdlQnVmZmVyKCk7CisjZW5k
aWYKKwogICAgIEZpbHRlckVmZmVjdFZlY3RvciYgaW5wdXRFZmZlY3RzKCkgeyByZXR1cm4gbV9p
bnB1dEVmZmVjdHM7IH0KICAgICBGaWx0ZXJFZmZlY3QqIGlucHV0RWZmZWN0KHVuc2lnbmVkKSBj
b25zdDsKICAgICB1bnNpZ25lZCBudW1iZXJPZkVmZmVjdElucHV0cygpIGNvbnN0IHsgcmV0dXJu
IG1faW5wdXRFZmZlY3RzLnNpemUoKTsgfQpAQCAtNzcsNyArODcsMTIgQEAgcHVibGljOgogICAg
IGlubGluZSBib29sIGhhc1Jlc3VsdCgpIGNvbnN0CiAgICAgewogICAgICAgICAvLyBUaGlzIGZ1
bmN0aW9uIG5lZWRzIHBsYXRmb3JtIHNwZWNpZmljIGNoZWNrcywgaWYgdGhlIG1lbW9yeSBtYW5h
Z21lbnQgaXMgbm90IGRvbmUgYnkgRmlsdGVyRWZmZWN0LgotICAgICAgICByZXR1cm4gbV9pbWFn
ZUJ1ZmZlclJlc3VsdCB8fCBtX3VubXVsdGlwbGllZEltYWdlUmVzdWx0IHx8IG1fcHJlbXVsdGlw
bGllZEltYWdlUmVzdWx0OworICAgICAgICByZXR1cm4gbV9pbWFnZUJ1ZmZlclJlc3VsdAorI2lm
IEVOQUJMRShPUEVOQ0wpCisgICAgICAgICAgICB8fCBtX29wZW5DTEltYWdlUmVzdWx0CisjZW5k
aWYKKyAgICAgICAgICAgIHx8IG1fdW5tdWx0aXBsaWVkSW1hZ2VSZXN1bHQKKyAgICAgICAgICAg
IHx8IG1fcHJlbXVsdGlwbGllZEltYWdlUmVzdWx0OwogICAgIH0KIAogICAgIEludFJlY3QgZHJh
d2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShjb25zdCBJbnRSZWN0JikgY29uc3Q7CkBAIC0xMDEsNiAr
MTE2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjb3JyZWN0RmlsdGVyUmVzdWx0SWZO
ZWVkZWQoKSB7IH0KIAogICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKSA9
IDA7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFsIGJvb2wgcGxhdGZvcm1BcHBseU9w
ZW5DTCgpOworI2VuZGlmCiAjaWYgVVNFKFNLSUEpCiAgICAgdmlydHVhbCBib29sIHBsYXRmb3Jt
QXBwbHlTa2lhKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIFNrSW1hZ2VGaWx0ZXIq
IGNyZWF0ZUltYWdlRmlsdGVyKFNraWFJbWFnZUZpbHRlckJ1aWxkZXIqKSB7IHJldHVybiAwOyB9
CkBAIC0xNDksNiArMTY3LDkgQEAgcHJvdGVjdGVkOgogICAgIEltYWdlQnVmZmVyKiBjcmVhdGVJ
bWFnZUJ1ZmZlclJlc3VsdCgpOwogICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVVbm11bHRp
cGxpZWRJbWFnZVJlc3VsdCgpOwogICAgIFVpbnQ4Q2xhbXBlZEFycmF5KiBjcmVhdGVQcmVtdWx0
aXBsaWVkSW1hZ2VSZXN1bHQoKTsKKyNpZiBFTkFCTEUoT1BFTkNMKQorICAgIE9wZW5DTEhhbmRs
ZSBjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCh1aW50OF90KiA9IDApOworI2VuZGlmCiAKICAgICAv
LyBSZXR1cm4gdHJ1ZSBpZiB0aGUgZmlsdGVyIHdpbGwgb25seSBvcGVyYXRlIGNvcnJlY3RseSBv
biB2YWxpZCBSR0JBIHZhbHVlcywgd2l0aAogICAgIC8vIGFscGhhIGluIFswLDI1NV0gYW5kIGVh
Y2ggY29sb3IgY29tcG9uZW50IGluIFswLCBhbHBoYV0uCkBAIC0xNjIsNiArMTgzLDkgQEAgcHJp
dmF0ZToKICAgICBSZWZQdHI8VWludDhDbGFtcGVkQXJyYXk+IG1fdW5tdWx0aXBsaWVkSW1hZ2VS
ZXN1bHQ7CiAgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBtX3ByZW11bHRpcGxpZWRJbWFn
ZVJlc3VsdDsKICAgICBGaWx0ZXJFZmZlY3RWZWN0b3IgbV9pbnB1dEVmZmVjdHM7CisjaWYgRU5B
QkxFKE9QRU5DTCkKKyAgICBPcGVuQ0xIYW5kbGUgbV9vcGVuQ0xJbWFnZVJlc3VsdDsKKyNlbmRp
ZgogCiAgICAgYm9vbCBtX2FscGhhSW1hZ2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvU291cmNlQWxwaGEuaAppbmRleCA5NjkxNmU5Li5i
MDIyMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0
ZXJzL1NvdXJjZUFscGhhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZmlsdGVycy9Tb3VyY2VBbHBoYS5oCkBAIC0zMyw2ICszMyw5IEBAIHB1YmxpYzoKICAgICBzdGF0
aWMgY29uc3QgQXRvbWljU3RyaW5nJiBlZmZlY3ROYW1lKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
cGxhdGZvcm1BcHBseVNvZnR3YXJlKCk7CisjaWYgRU5BQkxFKE9QRU5DTCkKKyAgICB2aXJ0dWFs
IGJvb2wgcGxhdGZvcm1BcHBseU9wZW5DTCgpOworI2VuZGlmCiAgICAgdmlydHVhbCB2b2lkIGR1
bXAoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZXRlcm1pbmVBYnNvbHV0ZVBhaW50UmVjdCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9Tb3Vy
Y2VHcmFwaGljLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1Nv
dXJjZUdyYXBoaWMuaAppbmRleCBjN2U4MzNlLi4xODVlNTY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL1NvdXJjZUdyYXBoaWMuaApA
QCAtMzQsNiArMzQsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYg
ZWZmZWN0TmFtZSgpOwogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQXBwbHlTb2Z0d2FyZSgp
OworI2lmIEVOQUJMRShPUEVOQ0wpCisgICAgdmlydHVhbCBib29sIHBsYXRmb3JtQXBwbHlPcGVu
Q0woKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgdm9pZCBkdW1wKCk7CiAKICAgICB2aXJ0dWFsIHZv
aWQgZGV0ZXJtaW5lQWJzb2x1dGVQYWludFJlY3QoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL0ZpbHRlckNvbnRl
eHRPcGVuQ0wuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkY2FmZTcK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
b3BlbmNsL0ZpbHRlckNvbnRleHRPcGVuQ0wuY3BwCkBAIC0wLDAgKzEsMTk4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBV
TklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShPUEVO
Q0wpCisjaW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0ZpbHRlckNvbnRleHRPcGVuQ0wqIEZpbHRlckNvbnRleHRPcGVuQ0w6Om1fY29udGV4
dCA9IDA7CitpbnQgRmlsdGVyQ29udGV4dE9wZW5DTDo6bV9hbHJlYWR5SW5pdGlhbGl6ZWQgPSAw
OworCitGaWx0ZXJDb250ZXh0T3BlbkNMKiBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCkK
K3sKKyAgICBpZiAobV9jb250ZXh0KQorICAgICAgICByZXR1cm4gbV9jb250ZXh0OworICAgIGlm
IChtX2FscmVhZHlJbml0aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBtX2FscmVh
ZHlJbml0aWFsaXplZCA9IHRydWU7CisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogbG9jYWxDb250
ZXh0ID0gbmV3IEZpbHRlckNvbnRleHRPcGVuQ0woKTsKKworICAgIC8vIEluaXRpYWxpemluZyB0
aGUgY29udGV4dC4KKyAgICBjbF9pbnQgZXJyb3JOdW1iZXI7CisgICAgY2xfZGV2aWNlX2lkKiBk
ZXZpY2VzOworICAgIGNsX3BsYXRmb3JtX2lkIGZpcnN0UGxhdGZvcm1JZDsKKyAgICBzaXplX3Qg
ZGV2aWNlQnVmZmVyU2l6ZSA9IDA7CisKKyAgICBlcnJvck51bWJlciA9IGNsR2V0UGxhdGZvcm1J
RHMoMSwgJmZpcnN0UGxhdGZvcm1JZCwgMCk7CisgICAgY2xfY29udGV4dF9wcm9wZXJ0aWVzIGNv
bnRleHRQcm9wZXJ0aWVzW10gPSB7IENMX0NPTlRFWFRfUExBVEZPUk0sIChjbF9jb250ZXh0X3By
b3BlcnRpZXMpZmlyc3RQbGF0Zm9ybUlkLCAwfTsKKyAgICBsb2NhbENvbnRleHQtPm1fZGV2aWNl
Q29udGV4dCA9IGNsQ3JlYXRlQ29udGV4dEZyb21UeXBlKGNvbnRleHRQcm9wZXJ0aWVzLCBDTF9E
RVZJQ0VfVFlQRV9HUFUsIDAsIDAsICZlcnJvck51bWJlcik7CisgICAgaWYgKGVycm9yTnVtYmVy
ICE9IENMX1NVQ0NFU1MpIHsKKyAgICAgICAgbG9jYWxDb250ZXh0LT5tX2RldmljZUNvbnRleHQg
PSBjbENyZWF0ZUNvbnRleHRGcm9tVHlwZShjb250ZXh0UHJvcGVydGllcywgQ0xfREVWSUNFX1RZ
UEVfQ1BVLCAwLCAwLCAmZXJyb3JOdW1iZXIpOworICAgICAgICBpZiAoZXJyb3JOdW1iZXIgIT0g
Q0xfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGVycm9yTnVt
YmVyID0gY2xHZXRDb250ZXh0SW5mbyhsb2NhbENvbnRleHQtPm1fZGV2aWNlQ29udGV4dCwgQ0xf
Q09OVEVYVF9ERVZJQ0VTLCAwLCAwLCAmZGV2aWNlQnVmZmVyU2l6ZSk7CisgICAgaWYgKGVycm9y
TnVtYmVyICE9IENMX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFkZXZp
Y2VCdWZmZXJTaXplKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGRldmljZXMgPSByZWludGVy
cHJldF9jYXN0PGNsX2RldmljZV9pZCo+KGZhc3RNYWxsb2MoZGV2aWNlQnVmZmVyU2l6ZSkpOwor
ICAgIGVycm9yTnVtYmVyID0gY2xHZXRDb250ZXh0SW5mbyhsb2NhbENvbnRleHQtPm1fZGV2aWNl
Q29udGV4dCwgQ0xfQ09OVEVYVF9ERVZJQ0VTLCBkZXZpY2VCdWZmZXJTaXplLCBkZXZpY2VzLCAw
KTsKKyAgICBpZiAoZXJyb3JOdW1iZXIgIT0gQ0xfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICBsb2NhbENvbnRleHQtPm1fY29tbWFuZFF1ZXVlID0gY2xDcmVhdGVDb21tYW5kUXVl
dWUobG9jYWxDb250ZXh0LT5tX2RldmljZUNvbnRleHQsIGRldmljZXNbMF0sIDAsIDApOworICAg
IGlmICghbG9jYWxDb250ZXh0LT5tX2NvbW1hbmRRdWV1ZSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBsb2NhbENvbnRleHQtPm1fZGV2aWNlSWQgPSBkZXZpY2VzWzBdOworICAgIGZhc3RGcmVl
KGRldmljZXMpOworCisgICAgY2xfYm9vbCBpbWFnZVN1cHBvcnQgPSBDTF9GQUxTRTsKKyAgICBj
bEdldERldmljZUluZm8obG9jYWxDb250ZXh0LT5tX2RldmljZUlkLCBDTF9ERVZJQ0VfSU1BR0Vf
U1VQUE9SVCwgc2l6ZW9mKGNsX2Jvb2wpLCAmaW1hZ2VTdXBwb3J0LCAwKTsKKyAgICBpZiAoaW1h
Z2VTdXBwb3J0ICE9IENMX1RSVUUpCisgICAgICAgIHJldHVybiAwOworCisgICAgbV9jb250ZXh0
ID0gbG9jYWxDb250ZXh0OworICAgIHJldHVybiBtX2NvbnRleHQ7Cit9CisKK09wZW5DTEhhbmRs
ZSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjcmVhdGVPcGVuQ0xJbWFnZShJbnRTaXplIHBhaW50U2l6
ZSkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9w
ZW5DTDo6Y29udGV4dCgpOworCisgICAgY2xfaW1hZ2VfZm9ybWF0IGNsSW1hZ2VGb3JtYXQ7Cisg
ICAgY2xJbWFnZUZvcm1hdC5pbWFnZV9jaGFubmVsX29yZGVyID0gQ0xfUkdCQTsKKyAgICBjbElt
YWdlRm9ybWF0LmltYWdlX2NoYW5uZWxfZGF0YV90eXBlID0gQ0xfVU5PUk1fSU5UODsKKworICAg
IE9wZW5DTEhhbmRsZSBpbWFnZSA9IGNsQ3JlYXRlSW1hZ2UyRChjb250ZXh0LT5kZXZpY2VDb250
ZXh0KCksIENMX01FTV9SRUFEX1dSSVRFLCAmY2xJbWFnZUZvcm1hdCwKKyAgICAgICAgcGFpbnRT
aXplLndpZHRoKCksIHBhaW50U2l6ZS5oZWlnaHQoKSwgMCwgMCwgMCk7CisgICAgcmV0dXJuIGlt
YWdlOworfQorCitzdGF0aWMgY29uc3QgY2hhciogdHJhbnNmb3JtQ29sb3JTcGFjZUtlcm5lbFBy
b2dyYW0gPQorUFJPR1JBTV9TVFIoCitjb25zdCBzYW1wbGVyX3Qgc2FtcGxlciA9IENMS19OT1JN
QUxJWkVEX0NPT1JEU19GQUxTRSB8IENMS19BRERSRVNTX0NMQU1QX1RPX0VER0UgfCBDTEtfRklM
VEVSX05FQVJFU1Q7CisKK19fa2VybmVsIHZvaWQgdHJhbnNmb3JtQ29sb3JTcGFjZShfX3JlYWRf
b25seSBpbWFnZTJkX3Qgc291cmNlLCBfX3dyaXRlX29ubHkgaW1hZ2UyZF90IGRlc3RpbmF0aW9u
LCBfX2NvbnN0YW50IGZsb2F0ICpjbExvb2tVcFRhYmxlKQoreworICAgIGludDIgc291cmNlQ29v
cmQgPSAoaW50MikgKGdldF9nbG9iYWxfaWQoMCksIGdldF9nbG9iYWxfaWQoMSkpOworICAgIGZs
b2F0NCBwaXhlbCA9IHJlYWRfaW1hZ2VmKHNvdXJjZSwgc2FtcGxlciwgc291cmNlQ29vcmQpOwor
CisgICAgcGl4ZWwgPSAoZmxvYXQ0KShjbExvb2tVcFRhYmxlWyhpbnQpKHJvdW5kKHBpeGVsLngg
KiAyNTUpKV0sIGNsTG9va1VwVGFibGVbKGludCkocm91bmQocGl4ZWwueSAqIDI1NSkpXSwKKyAg
ICAgICAgY2xMb29rVXBUYWJsZVsoaW50KShyb3VuZChwaXhlbC56ICogMjU1KSldLCBwaXhlbC53
KTsKKworICAgIHdyaXRlX2ltYWdlZihkZXN0aW5hdGlvbiwgc291cmNlQ29vcmQsIHBpeGVsKTsK
K30KKyk7CisKK3ZvaWQgRmlsdGVyQ29udGV4dE9wZW5DTDo6b3BlbkNMVHJhbnNmb3JtQ29sb3JT
cGFjZShPcGVuQ0xIYW5kbGUmIHNvdXJjZSwgSW50UmVjdCBzb3VyY2VTaXplLCBDb2xvclNwYWNl
IHNyY0NvbG9yU3BhY2UsIENvbG9yU3BhY2UgZHN0Q29sb3JTcGFjZSkKK3sKKyAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKE9wZW5DTEhhbmRsZSwgZGV2aWNlUmdiTFVULCAoKSk7CisgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChPcGVuQ0xIYW5kbGUsIGxpbmVhclJnYkxVVCwgKCkpOworCisgICAgaWYg
KHNyY0NvbG9yU3BhY2UgPT0gZHN0Q29sb3JTcGFjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKChzcmNDb2xvclNwYWNlICE9IENvbG9yU3BhY2VMaW5lYXJSR0IgJiYgc3JjQ29sb3JTcGFj
ZSAhPSBDb2xvclNwYWNlRGV2aWNlUkdCKQorICAgICAgICB8fCAoZHN0Q29sb3JTcGFjZSAhPSBD
b2xvclNwYWNlTGluZWFyUkdCICYmIGRzdENvbG9yU3BhY2UgIT0gQ29sb3JTcGFjZURldmljZVJH
QikpCisgICAgICAgIHJldHVybjsKKworICAgIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQg
PSBGaWx0ZXJDb250ZXh0T3BlbkNMOjpjb250ZXh0KCk7CisgICAgQVNTRVJUKGNvbnRleHQpOwor
CisgICAgT3BlbkNMSGFuZGxlIGRlc3RpbmF0aW9uID0gY29udGV4dC0+Y3JlYXRlT3BlbkNMSW1h
Z2Uoc291cmNlU2l6ZS5zaXplKCkpOworCisgICAgaWYgKCFtX3RyYW5zZm9ybUNvbG9yU3BhY2VQ
cm9ncmFtKSB7CisgICAgICAgIG1fdHJhbnNmb3JtQ29sb3JTcGFjZVByb2dyYW0gPSBjb21waWxl
UHJvZ3JhbSh0cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsUHJvZ3JhbSk7CisgICAgICAgIEFTU0VS
VChtX3RyYW5zZm9ybUNvbG9yU3BhY2VQcm9ncmFtKTsKKyAgICAgICAgbV90cmFuc2Zvcm1Db2xv
clNwYWNlS2VybmVsID0ga2VybmVsQnlOYW1lKG1fdHJhbnNmb3JtQ29sb3JTcGFjZVByb2dyYW0s
ICJ0cmFuc2Zvcm1Db2xvclNwYWNlIik7CisgICAgICAgIEFTU0VSVChtX3RyYW5zZm9ybUNvbG9y
U3BhY2VLZXJuZWwpOworICAgIH0KKworICAgIFJ1bktlcm5lbCBrZXJuZWwoY29udGV4dCwgbV90
cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsLCBzb3VyY2VTaXplLndpZHRoKCksIHNvdXJjZVNpemUu
aGVpZ2h0KCkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChzb3VyY2UpOworICAgIGtlcm5lbC5h
ZGRBcmd1bWVudChkZXN0aW5hdGlvbik7CisKKyAgICBpZiAoZHN0Q29sb3JTcGFjZSA9PSBDb2xv
clNwYWNlTGluZWFyUkdCKSB7CisgICAgICAgIGlmICghbGluZWFyUmdiTFVUKSB7CisgICAgICAg
ICAgICBWZWN0b3I8ZmxvYXQ+IGxvb2tVcFRhYmxlOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgY29sb3IgPSBp
ICAvIDI1NS4wZjsKKyAgICAgICAgICAgICAgICBjb2xvciA9IChjb2xvciA8PSAwLjA0MDQ1ZiA/
IGNvbG9yIC8gMTIuOTJmIDogcG93KChjb2xvciArIDAuMDU1ZikgLyAxLjA1NWYsIDIuNGYpKTsK
KyAgICAgICAgICAgICAgICBjb2xvciA9IHN0ZDo6bWF4KDAuMGYsIGNvbG9yKTsKKyAgICAgICAg
ICAgICAgICBjb2xvciA9IHN0ZDo6bWluKDEuMGYsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBs
b29rVXBUYWJsZS5hcHBlbmQoKHJvdW5kKGNvbG9yICogMjU1KSkgLyAyNTUpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbGluZWFyUmdiTFVUID0ga2VybmVsLmFkZEFyZ3VtZW50KGxvb2tV
cFRhYmxlLmRhdGEoKSwgc2l6ZW9mKGZsb2F0KSAqIDI1Nik7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAga2VybmVsLmFkZEFyZ3VtZW50KGxpbmVhclJnYkxVVCk7CisgICAgfSBlbHNlIGlm
IChkc3RDb2xvclNwYWNlID09IENvbG9yU3BhY2VEZXZpY2VSR0IpIHsKKyAgICAgICAgaWYgKCFk
ZXZpY2VSZ2JMVVQpIHsKKyAgICAgICAgICAgIFZlY3RvcjxmbG9hdD4gbG9va1VwVGFibGU7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKyAgICAgICAg
ICAgICAgICBmbG9hdCBjb2xvciA9IGkgLyAyNTUuMGY7CisgICAgICAgICAgICAgICAgY29sb3Ig
PSAocG93Zihjb2xvciwgMS4wZiAvIDIuNGYpICogMS4wNTVmKSAtIDAuMDU1ZjsKKyAgICAgICAg
ICAgICAgICBjb2xvciA9IHN0ZDo6bWF4KDAuMGYsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBj
b2xvciA9IHN0ZDo6bWluKDEuMGYsIGNvbG9yKTsKKyAgICAgICAgICAgICAgICBsb29rVXBUYWJs
ZS5hcHBlbmQoKHJvdW5kKGNvbG9yICogMjU1KSkgLyAyNTUpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgZGV2aWNlUmdiTFVUID0ga2VybmVsLmFkZEFyZ3VtZW50KGxvb2tVcFRhYmxlLmRh
dGEoKSwgc2l6ZW9mKGZsb2F0KSAqIDI1Nik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
a2VybmVsLmFkZEFyZ3VtZW50KGRldmljZVJnYkxVVCk7CisgICAgfQorCisgICAga2VybmVsLnJ1
bigpOworICAgIHNvdXJjZS5jbGVhcigpOworICAgIHNvdXJjZSA9IGRlc3RpbmF0aW9uOworfQor
CitjbF9wcm9ncmFtIEZpbHRlckNvbnRleHRPcGVuQ0w6OmNvbXBpbGVQcm9ncmFtKGNvbnN0IGNo
YXIqIHNvdXJjZSkKK3sKKyAgICBjbF9wcm9ncmFtIHByb2dyYW07CisgICAgY2xfaW50IGVycm9y
TnVtYmVyOworCisgICAgRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4dCA9IEZpbHRlckNvbnRl
eHRPcGVuQ0w6OmNvbnRleHQoKTsKKyAgICBBU1NFUlQoY29udGV4dCk7CisKKyAgICBwcm9ncmFt
ID0gY2xDcmVhdGVQcm9ncmFtV2l0aFNvdXJjZShjb250ZXh0LT5tX2RldmljZUNvbnRleHQsIDEs
IChjb25zdCBjaGFyKiopICZzb3VyY2UsIDAsIDApOworICAgIGVycm9yTnVtYmVyID0gY2xCdWls
ZFByb2dyYW0ocHJvZ3JhbSwgMCwgMCwgMCwgMCwgMCk7CisgICAgaWYgKGVycm9yTnVtYmVyKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBwcm9ncmFtOworfQorfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29udGV4dE9wZW5DTC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9GaWx0ZXJDb250ZXh0T3BlbkNMLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmYmYzYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvRmlsdGVyQ29u
dGV4dE9wZW5DTC5oCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUg
PHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdF
RCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgRmlsdGVyQ29udGV4dE9wZW5DTF9oCisjZGVmaW5lIEZpbHRlckNvbnRleHRPcGVu
Q0xfaAorCisjaWYgRU5BQkxFKE9QRU5DTCkKKyNpbmNsdWRlICJDTC9jbC5oIgorI2luY2x1ZGUg
IkNvbG9yLmgiCisjaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgorI2luY2x1ZGUgIkludFJlY3QuaCIK
KyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiT3BlbkNMSGFuZGxlLmgiCisKKyNkZWZp
bmUgUFJPR1JBTV9TVFIoLi4uKSAgI19fVkFfQVJHU19fCisjZGVmaW5lIFBST0dSQU0oLi4uKSBQ
Uk9HUkFNX1NUUihfX1ZBX0FSR1NfXykKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBG
aWx0ZXJDb250ZXh0T3BlbkNMIHsKK3B1YmxpYzoKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKCkK
KyAgICAgICAgOiBtX2RldmljZUlkKDApCisgICAgICAgICwgbV9kZXZpY2VDb250ZXh0KDApCisg
ICAgICAgICwgbV9jb21tYW5kUXVldWUoMCkKKyAgICAgICAgLCBtX3RyYW5zZm9ybUNvbG9yU3Bh
Y2VQcm9ncmFtKDApCisgICAgICAgICwgbV90cmFuc2Zvcm1Db2xvclNwYWNlS2VybmVsKDApCisg
ICAgICAgICwgbV90dXJidWxlbmNlQ29tcGlsZVN0YXR1cyhvcGVuY2xOb3RDb21waWxlZFlldCkK
KyAgICAgICAgLCBtX3R1cmJ1bGVuY2VQcm9ncmFtKDApCisgICAgICAgICwgbV90dXJidWxlbmNl
T3BlcmF0aW9uKDApCisgICAgeworICAgIH0KKworICAgIC8vIFJldHVybnMgMCBpZiBpbml0aWFs
aXphdGlvbiBmYWlsZWQuCisgICAgc3RhdGljIEZpbHRlckNvbnRleHRPcGVuQ0wqIGNvbnRleHQo
KTsKKworICAgIGNsX2RldmljZV9pZCBkZXZpY2VJZCgpIHsgcmV0dXJuIG1fZGV2aWNlSWQ7IH0K
KyAgICBjbF9jb250ZXh0IGRldmljZUNvbnRleHQoKSB7IHJldHVybiBtX2RldmljZUNvbnRleHQ7
IH0KKyAgICBjbF9jb21tYW5kX3F1ZXVlIGNvbW1hbmRRdWV1ZSgpIHsgcmV0dXJuIG1fY29tbWFu
ZFF1ZXVlOyB9CisKKyAgICBPcGVuQ0xIYW5kbGUgY3JlYXRlT3BlbkNMSW1hZ2UoSW50U2l6ZSk7
CisgICAgdm9pZCBvcGVuQ0xUcmFuc2Zvcm1Db2xvclNwYWNlKE9wZW5DTEhhbmRsZSYsIEludFJl
Y3QsIENvbG9yU3BhY2UsIENvbG9yU3BhY2UpOworCisgICAgaW5saW5lIGJvb2wgY29tcGlsZUZF
VHVyYnVsZW5jZSgpOworCisgICAgaW5saW5lIHZvaWQgYXBwbHlGRVR1cmJ1bGVuY2UoT3BlbkNM
SGFuZGxlLCBJbnRTaXplLCBpbnQsIHZvaWQqLCB2b2lkKiwgdm9pZCosIHZvaWQqLCB2b2lkKiwK
KyAgICAgICAgdm9pZCosIGludCwgaW50LCBpbnQsIGludCwgZmxvYXQsIGZsb2F0LCBib29sLCBp
bnQsIGludCk7CisKK3ByaXZhdGU6CisKKyAgICBjbGFzcyBSdW5LZXJuZWwgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBSdW5LZXJuZWwoRmlsdGVyQ29udGV4dE9wZW5DTCogY29udGV4
dCwgY2xfa2VybmVsIGtlcm5lbCwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0KQorICAgICAg
ICAgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgICAgICAgICAgICAgLCBtX2tlcm5l
bChrZXJuZWwpCisgICAgICAgICAgICAgICAgLCBpbmRleCgwKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1fZ2xvYmFsU2l6ZVswXSA9IHdpZHRoOworICAgICAgICAgICAgICAgIG1f
Z2xvYmFsU2l6ZVsxXSA9IGhlaWdodDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdm9p
ZCBhZGRBcmd1bWVudChPcGVuQ0xIYW5kbGUgaGFuZGxlKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBpbmRleCsrLCBzaXplb2YoT3BlbkNM
SGFuZGxlKSwgaGFuZGxlLmhhbmRsZUFkZHJlc3MoKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHZvaWQgYWRkQXJndW1lbnQoY2xfaW50IHZhbHVlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1fa2VybmVsLCBpbmRleCsrLCBzaXplb2YoY2xf
aW50KSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJnZhbHVlKSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHZvaWQgYWRkQXJndW1lbnQoY2xfZmxvYXQgdmFsdWUpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgY2xTZXRLZXJuZWxBcmcobV9rZXJuZWwsIGluZGV4KyssIHNp
emVvZihjbF9mbG9hdCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZ2YWx1ZSkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGFkZEFyZ3VtZW50KGNsX3NhbXBsZXIgaGFuZGxl
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNsU2V0S2VybmVsQXJnKG1fa2VybmVs
LCBpbmRleCsrLCBzaXplb2YoY2xfc2FtcGxlciksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KCZo
YW5kbGUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgT3BlbkNMSGFuZGxlIGFkZEFy
Z3VtZW50KHZvaWQqIGJ1ZmZlciwgaW50IHNpemUpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgT3BlbkNMSGFuZGxlIGhhbmRsZShjbENyZWF0ZUJ1ZmZlcihtX2NvbnRleHQtPmRldmlj
ZUNvbnRleHQoKSwgQ0xfTUVNX1JFQURfT05MWSwgc2l6ZSwgMCwgMCkpOworICAgICAgICAgICAg
ICAgIGNsRW5xdWV1ZVdyaXRlQnVmZmVyKG1fY29udGV4dC0+Y29tbWFuZFF1ZXVlKCksIGhhbmRs
ZSwgQ0xfVFJVRSwgMCwgc2l6ZSwgYnVmZmVyLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICBj
bFNldEtlcm5lbEFyZyhtX2tlcm5lbCwgaW5kZXgrKywgc2l6ZW9mKE9wZW5DTEhhbmRsZSksIGhh
bmRsZS5oYW5kbGVBZGRyZXNzKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBoYW5kbGU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgcnVuKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjbEZpbmlzaChtX2NvbnRleHQtPm1fY29tbWFuZFF1ZXVlKTsKKyAgICAg
ICAgICAgICAgICBjbEVucXVldWVORFJhbmdlS2VybmVsKG1fY29udGV4dC0+bV9jb21tYW5kUXVl
dWUsIG1fa2VybmVsLCAyLCAwLCBtX2dsb2JhbFNpemUsIDAsIDAsIDAsIDApOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBtX2NvbnRleHQ7CisgICAg
ICAgICAgICBjbF9rZXJuZWwgbV9rZXJuZWw7CisgICAgICAgICAgICBzaXplX3QgbV9nbG9iYWxT
aXplWzJdOworICAgICAgICAgICAgaW50IGluZGV4OworICAgICAgICB9OworCisgICAgZW51bSBP
cGVuQ0xDb21waWxlU3RhdHVzIHsKKyAgICAgICAgb3BlbmNsTm90Q29tcGlsZWRZZXQsCisgICAg
ICAgIG9wZW5jbENvbXBpbGVGYWlsZWQsCisgICAgICAgIG9wZW5jbENvbXBpbGVTdWNjZXNzZnVs
CisgICAgfTsKKworICAgIHN0YXRpYyBjbF9wcm9ncmFtIGNvbXBpbGVQcm9ncmFtKGNvbnN0IGNo
YXIqKTsKKyAgICBzdGF0aWMgaW5saW5lIGNsX2tlcm5lbCBrZXJuZWxCeU5hbWUoY2xfcHJvZ3Jh
bSBwcm9ncmFtLCBjb25zdCBjaGFyKiBuYW1lKSB7IHJldHVybiBjbENyZWF0ZUtlcm5lbChwcm9n
cmFtLCBuYW1lLCAwKTsgfQorCisgICAgc3RhdGljIEZpbHRlckNvbnRleHRPcGVuQ0wqIG1fY29u
dGV4dDsKKyAgICBzdGF0aWMgaW50IG1fYWxyZWFkeUluaXRpYWxpemVkOworCisgICAgY2xfZGV2
aWNlX2lkIG1fZGV2aWNlSWQ7CisgICAgY2xfY29udGV4dCBtX2RldmljZUNvbnRleHQ7CisgICAg
Y2xfY29tbWFuZF9xdWV1ZSBtX2NvbW1hbmRRdWV1ZTsKKworICAgIGNsX3Byb2dyYW0gbV90cmFu
c2Zvcm1Db2xvclNwYWNlUHJvZ3JhbTsKKyAgICBjbF9rZXJuZWwgbV90cmFuc2Zvcm1Db2xvclNw
YWNlS2VybmVsOworCisgICAgT3BlbkNMQ29tcGlsZVN0YXR1cyBtX3R1cmJ1bGVuY2VDb21waWxl
U3RhdHVzOworICAgIGNsX3Byb2dyYW0gbV90dXJidWxlbmNlUHJvZ3JhbTsKKyAgICBjbF9rZXJu
ZWwgbV90dXJidWxlbmNlT3BlcmF0aW9uOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvb3BlbmNsL09wZW5DTEZFU291cmNlQWxwaGEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xG
RVNvdXJjZUFscGhhLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjkz
ZDA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUFscGhhLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVuZUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShG
SUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQorI2luY2x1ZGUgIlNvdXJjZUFscGhhLmgiCisKKyNp
bmNsdWRlICJGaWx0ZXIuaCIKKyNpbmNsdWRlICJGaWx0ZXJDb250ZXh0T3BlbkNMLmgiCisjaW5j
bHVkZSAiSW1hZ2VCdWZmZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitib29sIFNvdXJj
ZUFscGhhOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNM
KiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29udGV4dCgpOworCisgICAgaWYgKCFj
b250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwbGF0Zm9ybUFwcGx5U29mdHdh
cmUoKTsKKyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2UgPSBhc0ltYWdlQnVmZmVyKCk7Cisg
ICAgaWYgKCFzb3VyY2VJbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRy
PFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VJbWFnZURhdGEgPSBzb3VyY2VJbWFnZS0+Z2V0VW5t
dWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQoKSwgc291cmNlSW1hZ2UtPmludGVy
bmFsU2l6ZSgpKSk7CisgICAgY3JlYXRlT3BlbkNMSW1hZ2VSZXN1bHQoc291cmNlSW1hZ2VEYXRh
LT5kYXRhKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVT
b3VyY2VHcmFwaGljLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9v
cGVuY2wvT3BlbkNMRkVTb3VyY2VHcmFwaGljLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi5iMmU5ZWY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVNvdXJjZUdyYXBoaWMuY3BwCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVn
ZWQKKyAqIENvcHlyaWdodCAoQykgMjAxMiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdl
ZC5odT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBVTklWRVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFVOSVZFUlNJVFkgT0YgU1pFR0VEIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKEZJTFRFUlMpICYmIEVOQUJMRShPUEVOQ0wpCisjaW5jbHVkZSAiU291
cmNlR3JhcGhpYy5oIgorCisjaW5jbHVkZSAiRmlsdGVyLmgiCisjaW5jbHVkZSAiRmlsdGVyQ29u
dGV4dE9wZW5DTC5oIgorI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworYm9vbCBTb3VyY2VHcmFwaGljOjpwbGF0Zm9ybUFwcGx5T3BlbkNMKCkKK3sKKyAg
ICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9wZW5DTDo6Y29u
dGV4dCgpOworCisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBwbGF0Zm9ybUFwcGx5U29mdHdhcmUoKTsKKyAgICBJbWFnZUJ1ZmZlciogc291cmNlSW1hZ2Ug
PSBhc0ltYWdlQnVmZmVyKCk7CisgICAgaWYgKCFzb3VyY2VJbWFnZSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgUmVmUHRyPFVpbnQ4Q2xhbXBlZEFycmF5PiBzb3VyY2VJbWFnZURhdGEg
PSBzb3VyY2VJbWFnZS0+Z2V0VW5tdWx0aXBsaWVkSW1hZ2VEYXRhKEludFJlY3QoSW50UG9pbnQo
KSwgc291cmNlSW1hZ2UtPmludGVybmFsU2l6ZSgpKSk7CisgICAgY3JlYXRlT3BlbkNMSW1hZ2VS
ZXN1bHQoc291cmNlSW1hZ2VEYXRhLT5kYXRhKCkpOworICAgIHJldHVybiB0cnVlOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoRklMVEVSUykgJiYgRU5B
QkxFKE9QRU5DTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMRkVUdXJidWxlbmNlLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWJjNjA3Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xGRVR1cmJ1bGVu
Y2UuY3BwCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZl
cnNpdHkgb2YgU3plZ2VkCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVGFtYXMgQ3plbmUgPHRjemVu
ZUBpbmYudS1zemVnZWQuaHU+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoRklMVEVSUykgJiYgRU5BQkxFKE9QRU5DTCkKKyNp
bmNsdWRlICJGRVR1cmJ1bGVuY2UuaCIKKworI2luY2x1ZGUgIkZFVHVyYnVsZW5jZS5jcHAiCisj
aW5jbHVkZSAiRmlsdGVyQ29udGV4dE9wZW5DTC5oIgorI2luY2x1ZGUgIlNWR0ZpbHRlci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdCBjaGFyKiB0dXJidWxlbmNlS2Vy
bmVsUHJvZ3JhbSA9CitQUk9HUkFNX1NUUigKK19fY29uc3RhbnQgaW50IHNfcGVybGluTm9pc2Ug
PSA0MDk2OworX19jb25zdGFudCBpbnQgc19ibG9ja1NpemUgPSAyNTY7CitfX2NvbnN0YW50IGlu
dCBzX2Jsb2NrTWFzayA9IDI1NTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCBub2lzZVBv
c2l0aW9uSW50ZWdlclZhbHVlOworICAgIGZsb2F0IG5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVl
OworfSBOb2lzZTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCB3aWR0aDsKKyAgICBpbnQg
d3JhcFg7CisgICAgaW50IGhlaWdodDsKKyAgICBpbnQgd3JhcFk7Cit9IFN0aXRjaERhdGE7CisK
K2Zsb2F0IGxpbmVhckludGVycG9sYXRpb24oZmxvYXQgdCwgZmxvYXQgYSwgZmxvYXQgYikKK3sK
KyAgICByZXR1cm4gbWFkKGIgLSBhLCB0LCBhKTsKK30KKworZmxvYXQgbm9pc2UyRChfX2NvbnN0
YW50IGZsb2F0ICpjb21wb25lbnQsIF9fY29uc3RhbnQgaW50ICpsYXR0aWNlU2VsZWN0b3IsIFN0
aXRjaERhdGEgc3RpdGNoRGF0YSwgZmxvYXQgbm9pc2VWZWN0b3JYLCBmbG9hdCBub2lzZVZlY3Rv
clksIGludCBzdGl0Y2hUaWxlcykKK3sKKyAgICBOb2lzZSBub2lzZVg7CisgICAgbm9pc2VYLm5v
aXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPSAoaW50KShub2lzZVZlY3RvclggKyBzX3Blcmxpbk5v
aXNlKTsKKyAgICBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgPSAobm9pc2VWZWN0
b3JYICsgc19wZXJsaW5Ob2lzZSkgLSBub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZTsK
KyAgICBOb2lzZSBub2lzZVk7CisgICAgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUg
PSAoaW50KShub2lzZVZlY3RvclkgKyBzX3Blcmxpbk5vaXNlKTsKKyAgICBub2lzZVkubm9pc2VQ
b3NpdGlvbkZyYWN0aW9uVmFsdWUgPSAobm9pc2VWZWN0b3JZICsgc19wZXJsaW5Ob2lzZSkgLSBu
b2lzZVkubm9pc2VQb3NpdGlvbkludGVnZXJWYWx1ZTsKKworICAgIC8vIElmIHN0aXRjaGluZywg
YWRqdXN0IGxhdHRpY2UgcG9pbnRzIGFjY29yZGluZ2x5LgorICAgIGlmIChzdGl0Y2hUaWxlcykg
eworICAgICAgICBpZiAobm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPj0gc3RpdGNo
RGF0YS53cmFwWCkKKyAgICAgICAgICAgIG5vaXNlWC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVl
IC09IHN0aXRjaERhdGEud2lkdGg7CisgICAgICAgIGlmIChub2lzZVgubm9pc2VQb3NpdGlvbklu
dGVnZXJWYWx1ZSA+PSBzdGl0Y2hEYXRhLndyYXBYIC0gMSkKKyAgICAgICAgICAgIG5vaXNlWC5u
b2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlIC09IHN0aXRjaERhdGEud2lkdGggLSAxOworICAgICAg
ICBpZiAobm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgPj0gc3RpdGNoRGF0YS53cmFw
WSkKKyAgICAgICAgICAgIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlIC09IHN0aXRj
aERhdGEuaGVpZ2h0OworICAgICAgICBpZiAobm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFs
dWUgPj0gc3RpdGNoRGF0YS53cmFwWSAtIDEpCisgICAgICAgICAgICBub2lzZVkubm9pc2VQb3Np
dGlvbkludGVnZXJWYWx1ZSAtPSBzdGl0Y2hEYXRhLmhlaWdodCAtIDE7CisgICAgfQorCisgICAg
bm9pc2VYLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgJj0gc19ibG9ja01hc2s7CisgICAgbm9p
c2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWUgJj0gc19ibG9ja01hc2s7CisgICAgaW50IGxh
dHRpY2VJbmRleCA9IGxhdHRpY2VTZWxlY3Rvcltub2lzZVgubm9pc2VQb3NpdGlvbkludGVnZXJW
YWx1ZV07CisgICAgaW50IG5leHRMYXR0aWNlSW5kZXggPSBsYXR0aWNlU2VsZWN0b3JbKG5vaXNl
WC5ub2lzZVBvc2l0aW9uSW50ZWdlclZhbHVlICsgMSkgJiBzX2Jsb2NrTWFza107CisKKyAgICBm
bG9hdCBzeCA9IG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqIG5vaXNlWC5ub2lz
ZVBvc2l0aW9uRnJhY3Rpb25WYWx1ZSAqICgzIC0gMiAqIG5vaXNlWC5ub2lzZVBvc2l0aW9uRnJh
Y3Rpb25WYWx1ZSk7CisgICAgZmxvYXQgc3kgPSBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9u
VmFsdWUgKiBub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiAoMyAtIDIgKiBub2lz
ZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUpOworCisgICAgLy8gVGhpcyBpcyB0YWtlbiAx
OjEgZnJvbSBTVkcgc3BlYzogaHR0cDovL3d3dy53My5vcmcvVFIvU1ZHMTEvZmlsdGVycy5odG1s
I2ZlVHVyYnVsZW5jZUVsZW1lbnQuCisgICAgaW50IHRlbXAgPSBsYXR0aWNlU2VsZWN0b3JbbGF0
dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOworICAgIGZsb2F0
IHUgPSBub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgKiBjb21wb25lbnRbdGVtcCAq
IDJdICsgbm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogY29tcG9uZW50W3RlbXAg
KiAyICsgMV07CisgICAgdGVtcCA9IGxhdHRpY2VTZWxlY3RvcltuZXh0TGF0dGljZUluZGV4ICsg
bm9pc2VZLm5vaXNlUG9zaXRpb25JbnRlZ2VyVmFsdWVdOworICAgIGZsb2F0IHYgPSAobm9pc2VY
Lm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlIC0gMSkgKiBjb21wb25lbnRbdGVtcCAqIDJdICsg
bm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZhbHVlICogY29tcG9uZW50W3RlbXAgKiAyICsg
MV07CisgICAgZmxvYXQgYSA9IGxpbmVhckludGVycG9sYXRpb24oc3gsIHUsIHYpOworICAgIHRl
bXAgPSBsYXR0aWNlU2VsZWN0b3JbbGF0dGljZUluZGV4ICsgbm9pc2VZLm5vaXNlUG9zaXRpb25J
bnRlZ2VyVmFsdWUgKyAxXTsKKyAgICB1ID0gbm9pc2VYLm5vaXNlUG9zaXRpb25GcmFjdGlvblZh
bHVlICogY29tcG9uZW50W3RlbXAgKiAyXSArIChub2lzZVkubm9pc2VQb3NpdGlvbkZyYWN0aW9u
VmFsdWUgLSAxKSAqIGNvbXBvbmVudFt0ZW1wICogMiArIDFdOworICAgIHRlbXAgPSBsYXR0aWNl
U2VsZWN0b3JbbmV4dExhdHRpY2VJbmRleCArIG5vaXNlWS5ub2lzZVBvc2l0aW9uSW50ZWdlclZh
bHVlICsgMV07CisgICAgdiA9IChub2lzZVgubm9pc2VQb3NpdGlvbkZyYWN0aW9uVmFsdWUgLSAx
KSAqIGNvbXBvbmVudFt0ZW1wICogMl0gKyAobm9pc2VZLm5vaXNlUG9zaXRpb25GcmFjdGlvblZh
bHVlIC0gMSkgKiBjb21wb25lbnRbdGVtcCAqIDIgKyAxXTsKKyAgICBmbG9hdCBiID0gbGluZWFy
SW50ZXJwb2xhdGlvbihzeCwgdSwgdik7CisgICAgcmV0dXJuIGxpbmVhckludGVycG9sYXRpb24o
c3ksIGEsIGIpOworfQorCitfX2tlcm5lbCB2b2lkIFR1cmJ1bGVuY2UoX193cml0ZV9vbmx5IGlt
YWdlMmRfdCBkZXN0aW5hdGlvbiwgX19jb25zdGFudCBmbG9hdCAqdHJhbnNmb3JtLCBfX2NvbnN0
YW50IGZsb2F0ICpyZWRDb21wb25lbnQsCisgICAgX19jb25zdGFudCBmbG9hdCAqZ3JlZW5Db21w
b25lbnQsIF9fY29uc3RhbnQgZmxvYXQgKmJsdWVDb21wb25lbnQsIF9fY29uc3RhbnQgZmxvYXQg
KmFscGhhQ29tcG9uZW50LAorICAgIF9fY29uc3RhbnQgaW50ICpsYXR0aWNlU2VsZWN0b3IsIF9f
cHJpdmF0ZSBpbnQgb2Zmc2V0WCwgX19wcml2YXRlIGludCBvZmZzZXRZLCBfX3ByaXZhdGUgaW50
IHRpbGVXaWR0aCwKKyAgICBfX3ByaXZhdGUgaW50IHRpbGVIZWlnaHQsIF9fcHJpdmF0ZSBmbG9h
dCBiYXNlRnJlcXVlbmN5WCwgX19wcml2YXRlIGZsb2F0IGJhc2VGcmVxdWVuY3lZLCBfX3ByaXZh
dGUgaW50IHN0aXRjaFRpbGVzLAorICAgIF9fcHJpdmF0ZSBpbnQgbnVtT2N0YXZlcywgX19wcml2
YXRlIGludCB0eXBlLCBfX3ByaXZhdGUgaW50IGZpbHRlcl9oZWlnaHQpCit7CisgICAgU3RpdGNo
RGF0YSBzdGl0Y2hEYXRhID0geyAwLCAwLCAwLCAwIH07CisgICAgLy8gQWRqdXN0IHRoZSBiYXNl
IGZyZXF1ZW5jaWVzIGlmIG5lY2Vzc2FyeSBmb3Igc3RpdGNoaW5nLgorICAgIGlmIChzdGl0Y2hU
aWxlcykgeworICAgICAgICAvLyBXaGVuIHN0aXRjaGluZyB0aWxlZCB0dXJidWxlbmNlLCB0aGUg
ZnJlcXVlbmNpZXMgbXVzdCBiZSBhZGp1c3RlZAorICAgICAgICAvLyBzbyB0aGF0IHRoZSB0aWxl
IGJvcmRlcnMgd2lsbCBiZSBjb250aW51b3VzLgorICAgICAgICBpZiAoYmFzZUZyZXF1ZW5jeVgp
IHsKKyAgICAgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yKHRpbGVXaWR0aCAqIGJh
c2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKKyAgICAgICAgICAgIGZsb2F0IGhpZ2hGcmVxdWVu
Y3kgPSBjZWlsKHRpbGVXaWR0aCAqIGJhc2VGcmVxdWVuY3lYKSAvIHRpbGVXaWR0aDsKKyAgICAg
ICAgICAgIC8vIEJhc2VGcmVxdWVuY3kgc2hvdWxkIGJlIG5vbi1uZWdhdGl2ZSBhY2NvcmRpbmcg
dG8gdGhlIHN0YW5kYXJkLgorICAgICAgICAgICAgYmFzZUZyZXF1ZW5jeVggPSAoYmFzZUZyZXF1
ZW5jeVggLyBsb3dGcmVxdWVuY3kgPCBoaWdoRnJlcXVlbmN5IC8gYmFzZUZyZXF1ZW5jeVgpID8g
bG93RnJlcXVlbmN5IDogaGlnaEZyZXF1ZW5jeTsKKyAgICAgICAgfQorICAgICAgICBpZiAoYmFz
ZUZyZXF1ZW5jeVkpIHsKKyAgICAgICAgICAgIGZsb2F0IGxvd0ZyZXF1ZW5jeSA9IGZsb29yKHRp
bGVIZWlnaHQgKiBiYXNlRnJlcXVlbmN5WSkgLyB0aWxlSGVpZ2h0OworICAgICAgICAgICAgZmxv
YXQgaGlnaEZyZXF1ZW5jeSA9IGNlaWwodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKSAvIHRp
bGVIZWlnaHQ7CisgICAgICAgICAgICBiYXNlRnJlcXVlbmN5WSA9IChiYXNlRnJlcXVlbmN5WSAv
IGxvd0ZyZXF1ZW5jeSA8IGhpZ2hGcmVxdWVuY3kgLyBiYXNlRnJlcXVlbmN5WSkgPyBsb3dGcmVx
dWVuY3kgOiBoaWdoRnJlcXVlbmN5OworICAgICAgICB9CisgICAgICAgIC8vIFNldCB1cCBUdXJi
dWxlbmNlSW5pdGlhbCBzdGl0Y2ggdmFsdWVzLgorICAgICAgICBzdGl0Y2hEYXRhLndpZHRoID0g
cm91bmQodGlsZVdpZHRoICogYmFzZUZyZXF1ZW5jeVgpOworICAgICAgICBzdGl0Y2hEYXRhLndy
YXBYID0gc19wZXJsaW5Ob2lzZSArIHN0aXRjaERhdGEud2lkdGg7CisgICAgICAgIHN0aXRjaERh
dGEuaGVpZ2h0ID0gcm91bmQodGlsZUhlaWdodCAqIGJhc2VGcmVxdWVuY3lZKTsKKyAgICAgICAg
c3RpdGNoRGF0YS53cmFwWSA9IHNfcGVybGluTm9pc2UgKyBzdGl0Y2hEYXRhLmhlaWdodDsKKyAg
ICB9CisgICAgZmxvYXQ0IHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCA9IChmbG9hdDQpKDAsIDAs
IDAsIDApOworICAgIGZsb2F0IHggPSAoZ2V0X2dsb2JhbF9pZCgwKSArIG9mZnNldFgpICogYmFz
ZUZyZXF1ZW5jeVg7CisgICAgZmxvYXQgeSA9IChnZXRfZ2xvYmFsX2lkKDEpICsgb2Zmc2V0WSkg
KiBiYXNlRnJlcXVlbmN5WTsKKworICAgIGZsb2F0IG5vaXNlVmVjdG9yWCA9IHRyYW5zZm9ybVsw
XSAqIHggKyB0cmFuc2Zvcm1bMl0gKiB5ICsgdHJhbnNmb3JtWzRdOworICAgIGZsb2F0IG5vaXNl
VmVjdG9yWSA9IHRyYW5zZm9ybVsxXSAqIHggKyB0cmFuc2Zvcm1bM10gKiB5ICsgdHJhbnNmb3Jt
WzVdOworCisgICAgZmxvYXQgcmF0aW8gPSAxOworICAgIGZvciAoaW50IG9jdGF2ZSA9IDA7IG9j
dGF2ZSA8IG51bU9jdGF2ZXM7ICsrb2N0YXZlKSB7CisgICAgICAgIGZsb2F0NCBub2lzZTJEUmVz
dWx0ID0gKGZsb2F0NCkoIG5vaXNlMkQocmVkQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0
aXRjaERhdGEsIG5vaXNlVmVjdG9yWCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRp
bywKKyAgICBub2lzZTJEKGdyZWVuQ29tcG9uZW50LCBsYXR0aWNlU2VsZWN0b3IsIHN0aXRjaERh
dGEsIG5vaXNlVmVjdG9yWCwgbm9pc2VWZWN0b3JZLCBzdGl0Y2hUaWxlcykgLyByYXRpbywKKyAg
ICBub2lzZTJEKGJsdWVDb21wb25lbnQsIGxhdHRpY2VTZWxlY3Rvciwgc3RpdGNoRGF0YSwgbm9p
c2VWZWN0b3JYLCBub2lzZVZlY3RvclksIHN0aXRjaFRpbGVzKSAvIHJhdGlvLAorICAgIG5vaXNl
MkQoYWxwaGFDb21wb25lbnQsIGxhdHRpY2VTZWxlY3Rvciwgc3RpdGNoRGF0YSwgbm9pc2VWZWN0
b3JYLCBub2lzZVZlY3RvclksIHN0aXRjaFRpbGVzKSAvIHJhdGlvKTsKKworICAgICAgICB0dXJi
dWxlbmNlRnVuY3Rpb25SZXN1bHQgKz0gKHR5cGUgPT0gMSkgPyBub2lzZTJEUmVzdWx0IDogZmFi
cyhub2lzZTJEUmVzdWx0KTsKKworICAgICAgICBub2lzZVZlY3RvclggKj0gMjsKKyAgICAgICAg
bm9pc2VWZWN0b3JZICo9IDI7CisgICAgICAgIHJhdGlvICo9IDI7CisgICAgICAgIGlmIChzdGl0
Y2hUaWxlcykgeworICAgICAgICAgICAgLy8gVXBkYXRlIHN0aXRjaCB2YWx1ZXMuIFN1YnRyYWN0
aW5nIHNfcGVybGluTm9pc2VvaXNlIGJlZm9yZSB0aGUgbXVsdGlwbGljYXRpb24gYW5kCisgICAg
ICAgICAgICAvLyBhZGRpbmcgaXQgYWZ0ZXJ3YXJkIHNpbXBsaWZpZXMgdG8gc3VidHJhY3Rpbmcg
aXQgb25jZS4KKyAgICAgICAgICAgIHN0aXRjaERhdGEud2lkdGggKj0gMjsKKyAgICAgICAgICAg
IHN0aXRjaERhdGEud3JhcFggPSAyICogc3RpdGNoRGF0YS53cmFwWCAtIHNfcGVybGluTm9pc2U7
CisgICAgICAgICAgICBzdGl0Y2hEYXRhLmhlaWdodCAqPSAyOworICAgICAgICAgICAgc3RpdGNo
RGF0YS53cmFwWSA9IDIgKiBzdGl0Y2hEYXRhLndyYXBZIC0gc19wZXJsaW5Ob2lzZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICh0eXBlID09IDEpCisgICAgICAgIHR1cmJ1bGVuY2VGdW5j
dGlvblJlc3VsdCA9IG1hZCgwLjVmLCB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQsIDAuNWYpOwor
ICAgIC8vIENsYW1wIHJlc3VsdC4KKyAgICB0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQgPSBjbGFt
cCh0dXJidWxlbmNlRnVuY3Rpb25SZXN1bHQsIDAuMGYsIDEuMGYpOworCisgICAgd3JpdGVfaW1h
Z2VmKGRlc3RpbmF0aW9uLCAoaW50MikoZ2V0X2dsb2JhbF9pZCgwKSwgZ2V0X2dsb2JhbF9pZCgx
KSksIHR1cmJ1bGVuY2VGdW5jdGlvblJlc3VsdCk7Cit9CispOworCitpbmxpbmUgYm9vbCBGaWx0
ZXJDb250ZXh0T3BlbkNMOjpjb21waWxlRkVUdXJidWxlbmNlKCkKK3sKKyAgICBpZiAobV90dXJi
dWxlbmNlQ29tcGlsZVN0YXR1cyAhPSBvcGVuY2xOb3RDb21waWxlZFlldCkKKyAgICAgICAgcmV0
dXJuIG1fdHVyYnVsZW5jZUNvbXBpbGVTdGF0dXMgPT0gb3BlbmNsQ29tcGlsZVN1Y2Nlc3NmdWw7
CisKKyAgICBtX3R1cmJ1bGVuY2VDb21waWxlU3RhdHVzID0gb3BlbmNsQ29tcGlsZUZhaWxlZDsK
KyAgICBtX3R1cmJ1bGVuY2VQcm9ncmFtID0gY29tcGlsZVByb2dyYW0odHVyYnVsZW5jZUtlcm5l
bFByb2dyYW0pOworICAgIGlmICghbV90dXJidWxlbmNlUHJvZ3JhbSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIG1fdHVyYnVsZW5jZU9wZXJhdGlvbiA9IGtlcm5lbEJ5TmFtZShtX3R1cmJ1
bGVuY2VQcm9ncmFtLCAiVHVyYnVsZW5jZSIpOworICAgIGlmICghbV90dXJidWxlbmNlT3BlcmF0
aW9uKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3R1cmJ1bGVuY2VDb21waWxlU3Rh
dHVzID0gb3BlbmNsQ29tcGlsZVN1Y2Nlc3NmdWw7CisgICAgcmV0dXJuIG9wZW5jbENvbXBpbGVG
YWlsZWQ7Cit9CisKK2lubGluZSB2b2lkIEZpbHRlckNvbnRleHRPcGVuQ0w6OmFwcGx5RkVUdXJi
dWxlbmNlKE9wZW5DTEhhbmRsZSBkZXN0aW5hdGlvbiwKKyAgICBJbnRTaXplIGRlc3RpbmF0aW9u
U2l6ZSwgaW50IGJsb2NrU2l6ZSwKKyAgICB2b2lkKiB0cmFuc2Zvcm0sIHZvaWQqIHJlZENvbXBv
bmVudCwgdm9pZCogZ3JlZW5Db21wb25lbnQsCisgICAgdm9pZCogYmx1ZUNvbXBvbmVudCwgdm9p
ZCogYWxwaGFDb21wb25lbnQsCisgICAgdm9pZCogbGF0dGljZVNlbGVjdG9yLCBpbnQgb2Zmc2V0
WCwgaW50IG9mZnNldFksIGludCB0aWxlV2lkdGgsIGludCB0aWxlSGVpZ2h0LAorICAgIGZsb2F0
IGJhc2VGcmVxdWVuY3lYLCBmbG9hdCBiYXNlRnJlcXVlbmN5WSwgYm9vbCBzdGl0Y2hUaWxlcywg
aW50IG51bU9jdGF2ZXMsIGludCB0eXBlKQoreworICAgIFJ1bktlcm5lbCBrZXJuZWwodGhpcywg
bV90dXJidWxlbmNlT3BlcmF0aW9uLCBkZXN0aW5hdGlvblNpemUud2lkdGgoKSwgZGVzdGluYXRp
b25TaXplLmhlaWdodCgpKTsKKworICAgIGtlcm5lbC5hZGRBcmd1bWVudChkZXN0aW5hdGlvbik7
CisgICAgT3BlbkNMSGFuZGxlIHRyYW5zZm9ybUhhbmRsZShrZXJuZWwuYWRkQXJndW1lbnQodHJh
bnNmb3JtLCBzaXplb2YoZmxvYXQpICogNikpOworICAgIE9wZW5DTEhhbmRsZSByZWRDb21wb25l
bnRIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KHJlZENvbXBvbmVudCwgc2l6ZW9mKGZsb2F0KSAq
ICgyICogYmxvY2tTaXplICsgMikgKiAyKSk7CisgICAgT3BlbkNMSGFuZGxlIGdyZWVuQ29tcG9u
ZW50SGFuZGxlKGtlcm5lbC5hZGRBcmd1bWVudChncmVlbkNvbXBvbmVudCwgc2l6ZW9mKGZsb2F0
KSAqICgyICogYmxvY2tTaXplICsgMikgKiAyKSk7CisgICAgT3BlbkNMSGFuZGxlIGJsdWVDb21w
b25lbnRIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KGJsdWVDb21wb25lbnQsIHNpemVvZihmbG9h
dCkgKiAoMiAqIGJsb2NrU2l6ZSArIDIpICogMikpOworICAgIE9wZW5DTEhhbmRsZSBhbHBoYUNv
bXBvbmVudEhhbmRsZShrZXJuZWwuYWRkQXJndW1lbnQoYWxwaGFDb21wb25lbnQsIHNpemVvZihm
bG9hdCkgKiAoMiAqIGJsb2NrU2l6ZSArIDIpICogMikpOworICAgIE9wZW5DTEhhbmRsZSBsYXR0
aWNlU2VsZWN0b3JIYW5kbGUoa2VybmVsLmFkZEFyZ3VtZW50KGxhdHRpY2VTZWxlY3Rvciwgc2l6
ZW9mKGludCkgKiAoMiAqIGJsb2NrU2l6ZSArIDIpKSk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50
KG9mZnNldFgpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChvZmZzZXRZKTsKKyAgICBrZXJuZWwu
YWRkQXJndW1lbnQodGlsZVdpZHRoKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQodGlsZUhlaWdo
dCk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KGJhc2VGcmVxdWVuY3lYKTsKKyAgICBrZXJuZWwu
YWRkQXJndW1lbnQoYmFzZUZyZXF1ZW5jeVkpOworICAgIGtlcm5lbC5hZGRBcmd1bWVudChzdGl0
Y2hUaWxlcyk7CisgICAga2VybmVsLmFkZEFyZ3VtZW50KG51bU9jdGF2ZXMpOworICAgIGtlcm5l
bC5hZGRBcmd1bWVudCh0eXBlKTsKKyAgICBrZXJuZWwuYWRkQXJndW1lbnQoZGVzdGluYXRpb25T
aXplLmhlaWdodCgpKTsKKworICAgIGtlcm5lbC5ydW4oKTsKKworICAgIHRyYW5zZm9ybUhhbmRs
ZS5jbGVhcigpOworICAgIHJlZENvbXBvbmVudEhhbmRsZS5jbGVhcigpOworICAgIGdyZWVuQ29t
cG9uZW50SGFuZGxlLmNsZWFyKCk7CisgICAgYmx1ZUNvbXBvbmVudEhhbmRsZS5jbGVhcigpOwor
ICAgIGFscGhhQ29tcG9uZW50SGFuZGxlLmNsZWFyKCk7CisgICAgbGF0dGljZVNlbGVjdG9ySGFu
ZGxlLmNsZWFyKCk7Cit9CisKK2Jvb2wgRkVUdXJidWxlbmNlOjpwbGF0Zm9ybUFwcGx5T3BlbkNM
KCkKK3sKKyAgICBGaWx0ZXJDb250ZXh0T3BlbkNMKiBjb250ZXh0ID0gRmlsdGVyQ29udGV4dE9w
ZW5DTDo6Y29udGV4dCgpOworICAgIGlmICghY29udGV4dCB8fCAhY29udGV4dC0+Y29tcGlsZUZF
VHVyYnVsZW5jZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBPcGVuQ0xIYW5kbGUg
ZGVzdGluYXRpb24gPSBjcmVhdGVPcGVuQ0xJbWFnZVJlc3VsdCgpOworCisgICAgUGFpbnRpbmdE
YXRhIHBhaW50aW5nRGF0YShtX3NlZWQsIHJvdW5kZWRJbnRTaXplKGZpbHRlclByaW1pdGl2ZVN1
YnJlZ2lvbigpLnNpemUoKSkpOworICAgIGluaXRQYWludChwYWludGluZ0RhdGEpOworCisgICAg
QWZmaW5lVHJhbnNmb3JtIGludmVydGVkVHJhbnNmb3JtID0gcmVpbnRlcnByZXRfY2FzdDxTVkdG
aWx0ZXIqPihmaWx0ZXIoKSktPmFic29sdXRlVHJhbnNmb3JtKCkuaW52ZXJzZSgpOworICAgIGZs
b2F0IHRyYW5zZm9ybUNvbXBvbmVudHNbNl0gPSB7IGludmVydGVkVHJhbnNmb3JtLmEoKSwgaW52
ZXJ0ZWRUcmFuc2Zvcm0uYigpLCBpbnZlcnRlZFRyYW5zZm9ybS5jKCksIGludmVydGVkVHJhbnNm
b3JtLmQoKSwgaW52ZXJ0ZWRUcmFuc2Zvcm0uZSgpLCBpbnZlcnRlZFRyYW5zZm9ybS5mKCkgfTsK
KworICAgIGNvbnRleHQtPmFwcGx5RkVUdXJidWxlbmNlKGRlc3RpbmF0aW9uLCBhYnNvbHV0ZVBh
aW50UmVjdCgpLnNpemUoKSwgc19ibG9ja1NpemUsIHRyYW5zZm9ybUNvbXBvbmVudHMsIHBhaW50
aW5nRGF0YS5ncmFkaWVudCwKKyAgICAgICAgcGFpbnRpbmdEYXRhLmdyYWRpZW50ICsgMSwgcGFp
bnRpbmdEYXRhLmdyYWRpZW50ICsgMiwgcGFpbnRpbmdEYXRhLmdyYWRpZW50ICsgMywgcGFpbnRp
bmdEYXRhLmxhdHRpY2VTZWxlY3RvciwKKyAgICAgICAgYWJzb2x1dGVQYWludFJlY3QoKS54KCks
IGFic29sdXRlUGFpbnRSZWN0KCkueSgpLCBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS53aWR0aCgp
LCBwYWludGluZ0RhdGEuZmlsdGVyU2l6ZS5oZWlnaHQoKSwKKyAgICAgICAgbV9iYXNlRnJlcXVl
bmN5WCwgbV9iYXNlRnJlcXVlbmN5WSwgbV9zdGl0Y2hUaWxlcywgbV9udW1PY3RhdmVzLCBtX3R5
cGUpOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShGSUxURVJTKSAmJiBFTkFCTEUoT1BFTkNMKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L29wZW5jbC9PcGVuQ0xIYW5kbGUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wvT3BlbkNMSGFu
ZGxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY1ODVkYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9vcGVuY2wv
T3BlbkNMSGFuZGxlLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MiBUYW1hcyBDemVuZSA8dGN6ZW5lQGluZi51LXN6ZWdlZC5odT4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKi8KKyNpZiBFTkFCTEUoT1BFTkNMKQor
CisjaWZuZGVmIE9wZW5DTEhhbmRsZV9oCisjZGVmaW5lIE9wZW5DTEhhbmRsZV9oCisKKyNpbmNs
dWRlICJDTC9jbC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIE9wZW5DTEhhbmRs
ZSB7CitwdWJsaWM6CisgICAgT3BlbkNMSGFuZGxlKCkgOiBtX29wZW5DTE1lbW9yeSgwKSB7IH0K
KyAgICBPcGVuQ0xIYW5kbGUoY2xfbWVtIG9wZW5DTE1lbW9yeSkgOiBtX29wZW5DTE1lbW9yeShv
cGVuQ0xNZW1vcnkpIHsgfQorCisgICAgb3BlcmF0b3IgY2xfbWVtKCkgeyByZXR1cm4gbV9vcGVu
Q0xNZW1vcnk7IH0KKworICAgIHZvaWQgb3BlcmF0b3I9KE9wZW5DTEhhbmRsZSBvcGVuQ0xNZW1v
cnkpIHsgbV9vcGVuQ0xNZW1vcnkgPSBvcGVuQ0xNZW1vcnk7IH0KKworICAgIC8vIFRoaXMgY29u
dmVyc2lvbiBvcGVyYXRvciBhbGxvd3MgaW1wbGljaXQgY29udmVyc2lvbiB0byBib29sIGJ1dCBu
b3QgdG8gb3RoZXIgaW50ZWdlciB0eXBlcy4KKyAgICB0eXBlZGVmIGNsX21lbSAoT3BlbkNMSGFu
ZGxlOjoqVW5zcGVjaWZpZWRCb29sVHlwZSk7CisgICAgb3BlcmF0b3IgVW5zcGVjaWZpZWRCb29s
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlbkNMTWVtb3J5ID8gJk9wZW5DTEhhbmRsZTo6bV9v
cGVuQ0xNZW1vcnkgOiAwOyB9CisKKyAgICB2b2lkKiBoYW5kbGVBZGRyZXNzKCkgeyByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oJm1fb3BlbkNMTWVtb3J5KTsgfQorCisgICAgdm9pZCBj
bGVhcigpCisgICAgeworICAgICAgICBpZiAobV9vcGVuQ0xNZW1vcnkpCisgICAgICAgICAgICBj
bFJlbGVhc2VNZW1PYmplY3QobV9vcGVuQ0xNZW1vcnkpOworICAgICAgICBtX29wZW5DTE1lbW9y
eSA9IDA7CisgICAgfQorCitwcml2YXRlOgorICAgIGNsX21lbSBtX29wZW5DTE1lbW9yeTsKK307
CisKK30KKworI2VuZGlmCisjZW5kaWYgLy8gRU5BQkxFKE9QRU5DTCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>