<?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>60254</bug_id>
          
          <creation_ts>2011-05-05 00:29:36 -0700</creation_ts>
          <short_desc>Remove platform layering violation: TextRun stores RenderObjects for SVG Fonts support</short_desc>
          <delta_ts>2011-05-24 10:14:58 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>60255</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nikolas Zimmermann">zimmermann</reporter>
          <assigned_to name="Nikolas Zimmermann">zimmermann</assigned_to>
          <cc>adamk</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>hyatt</cc>
    
    <cc>koivisto</cc>
    
    <cc>krit</cc>
    
    <cc>leviw</cc>
    
    <cc>mitz</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>398591</commentid>
    <comment_count>0</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-05 00:29:36 -0700</bug_when>
    <thetext>Remove platform layering violation: TextRun stores RenderObjects for SVG Fonts support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405587</commentid>
    <comment_count>1</comment_count>
      <attachid>93888</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-18 02:24:10 -0700</bug_when>
    <thetext>Created attachment 93888
Patch v1

An important piece of work toward my SVG Fonts rewrite patch (see master bug 59085).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405594</commentid>
    <comment_count>2</comment_count>
      <attachid>93888</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-18 02:40:02 -0700</bug_when>
    <thetext>Comment on attachment 93888
Patch v1

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

It seems that you really want TextRuns to be pointers so you can use virtual function dispatch.  Since they aren&apos;t, you&apos;re adding this &quot;extra data&quot; pointer.  I think &quot;extra data&quot; is not a very descriptive name for what you&apos;re doing.  Maybe this is some sort of observer for the text run?  It doesn&apos;t seem to be extra storage.

&gt; Source/WebCore/rendering/svg/SVGInlineTextBox.cpp:400
&gt; +    if (RenderTextRun::ExtraData* extraData = textRun.extraData())
&gt; +        extraData-&gt;setActivePaintingResource(0);

Why wouldn&apos;t this just be a setActivePaintingResource method on RenderTextRun?  Why do callers need to know of the existence of ExtraData?  The RenderTextRun object can make the call through the pointer internally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405595</commentid>
    <comment_count>3</comment_count>
      <attachid>93888</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-18 02:42:16 -0700</bug_when>
    <thetext>Comment on attachment 93888
Patch v1

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

&gt; Source/WebCore/platform/graphics/TextRun.h:107
&gt; +        virtual bool isRenderTextRun() const { return false; }

This feels very strange.  You shouldn&apos;t be asking this &quot;extra data&quot; member what type the thing holding onto it is.  This is all one big hack around not having virtual dispatch for these stack objects it seems.

Does the TextRun itself need to have these members?  Or can there be a SVGTextRun which has a TextRun instead of is-a TextRun?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405596</commentid>
    <comment_count>4</comment_count>
      <attachid>93888</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-18 02:44:03 -0700</bug_when>
    <thetext>Comment on attachment 93888
Patch v1

It seems all of the places which currently use TextRuns and grab at these SVG-specific members, don&apos;t really need to use TextRuns.  They could use some other class which has-a TextRun, instead of is-a TextRun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405616</commentid>
    <comment_count>5</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-18 03:30:26 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 93888 [details])
&gt; It seems all of the places which currently use TextRuns and grab at these SVG-specific members, don&apos;t really need to use TextRuns.  They could use some other class which has-a TextRun, instead of is-a TextRun.

There is just one place: SVGFonts.cpp, and it doesn&apos;t have access to anything but TextRuns.
After my SVGFonts rewrite, the SVG Fonts code is completly integrated within FontFastPath, where we only deal with TextRuns.

The ExtraData &quot;hack&quot; is exactly because of the fact, that I didn&apos;t want to make TextRuns refcounted, and add virtual functions. The idea is to optimize for non-SVGFonts usage patterns, so I am afraid of making text runs refcounted and add virtual functions just for the sake of SVG Fonts, hence the whole ExtraData concept.

I&apos;d like to hear more opinions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>405617</commentid>
    <comment_count>6</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-18 03:32:09 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 93888 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=93888&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/TextRun.h:107
&gt; &gt; +        virtual bool isRenderTextRun() const { return false; }
&gt; 
&gt; This feels very strange.  You shouldn&apos;t be asking this &quot;extra data&quot; member what type the thing holding onto it is.  This is all one big hack around not having virtual dispatch for these stack objects it seems.
&gt; 
&gt; Does the TextRun itself need to have these members?  Or can there be a SVGTextRun which has a TextRun instead of is-a TextRun?

To rephrase: I could add a new class FooTextRun, that holds a RenderObject* and a TextRun object, as you said. The problem is that code in platform/ can&apos;t use FooTextRun directly, as it depends on RenderObject, and we&apos;d have the same layering violation again.

I&apos;m not saying your approach isn&apos;t good, but it induces layering problems, that&apos;s why I decided to go the ExtraData way, minimizing the cost for platform fonts...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406288</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-05-19 01:58:58 -0700</bug_when>
    <thetext>I think the approach is good.

ExtraData might be better called RenderingContext or similar.

I don&apos;t think needs to be refcounted, OwnPtr should do just fine.

To really eliminate the layering violation the SVG calls in platform text drawing code should be replaced with virtual calls to RenderingContext:

drawTextUsingSVGFont() -&gt; run.renderingContext()-&gt;drawText() and similar.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406289</commentid>
    <comment_count>8</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-05-19 02:00:16 -0700</bug_when>
    <thetext>I&apos;d like to see the full patch that eliminates the layering violation fully to validate we are going to right direction. From my reading it shouldn&apos;t be that complex.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406292</commentid>
    <comment_count>9</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-19 02:07:07 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; I think the approach is good.
&gt; 
&gt; ExtraData might be better called RenderingContext or similar.
Ok, I tried to make it generic, but why not.

&gt; 
&gt; I don&apos;t think needs to be refcounted, OwnPtr should do just fine.
Nope, TextRuns can be copied, and OwnPtr&apos;s operator= is private and not defined, so we have to use refcounting, if we want to avoid allocating new ExtraData objects upon assigning TextRuns.

&gt; 
&gt; To really eliminate the layering violation the SVG calls in platform text drawing code should be replaced with virtual calls to RenderingContext:
&gt; 
&gt; drawTextUsingSVGFont() -&gt; run.renderingContext()-&gt;drawText() and similar.
As discussed on IRC, this will be part of the SVG Fonts rewrite, I don&apos;t want to invest time in the current SVGFont.cpp code to kill the violation completely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406299</commentid>
    <comment_count>10</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-05-19 02:26:31 -0700</bug_when>
    <thetext>(In reply to comment #9)

Actually I don&apos;t think you need RenderTextRun at all. It has almost no functionality. constructTextRun() can choose wether to construct ExtraData/SVGRenderingContext or not. The patch would get much smaller and easier to review.

&gt; As discussed on IRC, this will be part of the SVG Fonts rewrite, I don&apos;t want to invest time in the current SVGFont.cpp code to kill the violation completely.

The bug title indicates that this is about eliminating the violations. I don&apos;t see the point otherwise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406345</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-19 05:26:08 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #7)
&gt; &gt; I think the approach is good.
&gt; &gt; 
&gt; &gt; ExtraData might be better called RenderingContext or similar.
&gt; Ok, I tried to make it generic, but why not.
&gt; 
&gt; &gt; 
&gt; &gt; I don&apos;t think needs to be refcounted, OwnPtr should do just fine.
&gt; Nope, TextRuns can be copied, and OwnPtr&apos;s operator= is private and not defined, so we have to use refcounting, if we want to avoid allocating new ExtraData objects upon assigning TextRuns.

I take it TextRuns are copied?  Should they be?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>406995</commentid>
    <comment_count>12</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-20 04:32:31 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; 
&gt; Actually I don&apos;t think you need RenderTextRun at all. It has almost no functionality. constructTextRun() can choose wether to construct ExtraData/SVGRenderingContext or not. The patch would get much smaller and easier to review.
I tested this idea, and it works like a charme. I called it AbstractRenderingContext, a sub-class of TextRun, and a TextRunRenderingContext class in rendering, inheriting from TextRun::AbstractRenderingContext.
I sucessfully moved the drawTextUsingSVGFont() etc. functions in there, and implemented them in rendering/svg/SVGTextRunRenderingContext.cpp (moved from svg/SVGFont.cpp).

So Font now uses the AbstractRenderingContext, if present, to delegate drawing/measuring there. It doesn&apos;t rely anymore on Font::drawTextUsingSVGFOnt which was implemented in svg/SVGFont.cpp, which is a clear violation.

We still have a violation in SimpleFontData, which stores a SVGFontData object from svg/SVGFontData.cpp.
I could solve it exactly the same way as above.


&gt; 
&gt; &gt; As discussed on IRC, this will be part of the SVG Fonts rewrite, I don&apos;t want to invest time in the current SVGFont.cpp code to kill the violation completely.
&gt; 
&gt; The bug title indicates that this is about eliminating the violations. I don&apos;t see the point otherwise.
You&apos;re right, I&apos;ve patched the existing SVG Fonts code, so you can see the full scope of the patch.

Preparing a new patch soon..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407084</commentid>
    <comment_count>13</comment_count>
      <attachid>94218</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-20 07:29:08 -0700</bug_when>
    <thetext>Created attachment 94218
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407089</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-20 07:32:49 -0700</bug_when>
    <thetext>Attachment 94218 did not pass style-queue:

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

Source/WebCore/svg/SVGFontData.cpp:26:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 36 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>407094</commentid>
    <comment_count>15</comment_count>
      <attachid>94218</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-20 07:53:33 -0700</bug_when>
    <thetext>Comment on attachment 94218
Patch v2

Attachment 94218 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/8721306</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407096</commentid>
    <comment_count>16</comment_count>
      <attachid>94218</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-05-20 07:54:29 -0700</bug_when>
    <thetext>Comment on attachment 94218
Patch v2

Attachment 94218 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/8720320</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407105</commentid>
    <comment_count>17</comment_count>
      <attachid>94223</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-20 08:18:58 -0700</bug_when>
    <thetext>Created attachment 94223
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>407159</commentid>
    <comment_count>18</comment_count>
      <attachid>94218</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-05-20 09:24:58 -0700</bug_when>
    <thetext>Comment on attachment 94218
Patch v2

Attachment 94218 did not pass cr-mac-ews (chromium):
Output: http://queues.webkit.org/results/8721346</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408728</commentid>
    <comment_count>19</comment_count>
      <attachid>94223</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-05-24 01:59:14 -0700</bug_when>
    <thetext>Comment on attachment 94223
Patch v3

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

Looks good basically, I have some naming nits.

&gt; Source/WebCore/GNUmakefile.list.am:3086
&gt; +	Source/WebCore/rendering/svg/SVGTextRunRenderingContext.cpp \
&gt;  	Source/WebCore/rendering/svg/SVGTextMetrics.cpp \
&gt;  	Source/WebCore/rendering/svg/SVGTextMetrics.h \
&gt;  	Source/WebCore/rendering/svg/SVGTextQuery.cpp \
&gt;  	Source/WebCore/rendering/svg/SVGTextQuery.h \
&gt;  	Source/WebCore/rendering/TableLayout.h \
&gt; +	Source/WebCore/rendering/TextRunRenderingContext.h \

Why TextRunRenderingContext.h vs. SVGTextRunRenderingContext.cpp?

&gt; Source/WebCore/platform/graphics/TextRun.h:111
&gt; +    class AbstractRenderingContext : public RefCounted&lt;AbstractRenderingContext&gt; {

I would just leave out the word &quot;Abstract&quot; here.

&gt; Source/WebCore/platform/graphics/TextRun.h:114
&gt; +    public:
&gt; +        virtual ~AbstractRenderingContext() { }
&gt; +        virtual bool isWebCoreRenderingContext() const = 0;

All likely clients are in WebCore (as is this class) so name WebCoreRenderingContext doesn&apos;t really differentiate. Maybe just remove the whole function for now, you only have one concrete implementation so casting is always safe. 

To do this in really non-layer violating way for multiple implementations, you would need to have &quot;int type&quot; field, with enum values defined outside platform.

&gt; Source/WebCore/rendering/RenderCombineText.cpp:96
&gt; -    TextRun run = TextRun(String(text()));
&gt; +    TextRun run = RenderBlock::constructTextRun(this, originalFont(), String(text()), style());

I know it is now in this patch but having constructTextRun in RenderBlock seems random. Why isn&apos;t it a free standing function?

&gt; Source/WebCore/rendering/TextRunRenderingContext.h:32
&gt; +class TextRunRenderingContext : public TextRun::AbstractRenderingContext {
&gt; +public:

I think this should be called SVGTextRunRenderingContext since it has a very specific purpose.

&gt; Source/WebCore/rendering/svg/SVGInlineTextBox.cpp:389
&gt; +    TextRun::AbstractRenderingContext* abstractRenderingContext = textRun.renderingContext();
&gt; +    if (abstractRenderingContext &amp;&amp; abstractRenderingContext-&gt;isWebCoreRenderingContext())
&gt; +        static_cast&lt;TextRunRenderingContext*&gt;(abstractRenderingContext)-&gt;setActivePaintingResource(m_paintingResource);

As mentioned above isWebCoreRenderingContext() naming is weird and also unnecessary here.

&gt; Source/WebCore/rendering/svg/SVGTextRunRenderingContext.cpp:82
&gt; +template&lt;typename SVGTextRunData&gt;
&gt; +struct SVGTextRunWalker {
&gt; +    typedef bool (*SVGTextRunWalkerCallback)(const SVGGlyph&amp;, SVGTextRunData&amp;);
&gt; +    typedef void (*SVGTextRunWalkerMissingGlyphCallback)(const TextRun&amp;, SVGTextRunData&amp;);
&gt; +
&gt; +    SVGTextRunWalker(const SVGFontData* fontData, SVGFontElement* fontElement, SVGTextRunData&amp; data,
&gt; +                     SVGTextRunWalkerCallback callback, SVGTextRunWalkerMissingGlyphCallback missingGlyphCallback)

Instead of using function pointers you could make the callbacks template parameters for more inlining. Probably not for this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408749</commentid>
    <comment_count>20</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-24 03:01:18 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 94223 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94223&amp;action=review
&gt; 
&gt; Looks good basically, I have some naming nits.
Great.

&gt; 
&gt; &gt; Source/WebCore/GNUmakefile.list.am:3086
&gt; &gt; +	Source/WebCore/rendering/svg/SVGTextRunRenderingContext.cpp \
&gt; &gt;  	Source/WebCore/rendering/svg/SVGTextMetrics.cpp \
&gt; &gt;  	Source/WebCore/rendering/svg/SVGTextMetrics.h \
&gt; &gt;  	Source/WebCore/rendering/svg/SVGTextQuery.cpp \
&gt; &gt;  	Source/WebCore/rendering/svg/SVGTextQuery.h \
&gt; &gt;  	Source/WebCore/rendering/TableLayout.h \
&gt; &gt; +	Source/WebCore/rendering/TextRunRenderingContext.h \
&gt; 
&gt; Why TextRunRenderingContext.h vs. SVGTextRunRenderingContext.cpp?
Fixed.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/TextRun.h:111
&gt; &gt; +    class AbstractRenderingContext : public RefCounted&lt;AbstractRenderingContext&gt; {
&gt; 
&gt; I would just leave out the word &quot;Abstract&quot; here.
Fixed, same for AbstractFontData.

&gt; 
&gt; &gt; Source/WebCore/platform/graphics/TextRun.h:114
&gt; &gt; +    public:
&gt; &gt; +        virtual ~AbstractRenderingContext() { }
&gt; &gt; +        virtual bool isWebCoreRenderingContext() const = 0;
&gt; 
&gt; All likely clients are in WebCore (as is this class) so name WebCoreRenderingContext doesn&apos;t really differentiate. Maybe just remove the whole function for now, you only have one concrete implementation so casting is always safe. 
Ditto.

&gt; 
&gt; To do this in really non-layer violating way for multiple implementations, you would need to have &quot;int type&quot; field, with enum values defined outside platform.
Right, but as there&apos;s just one consumer at the moment, I&apos;ll leave it as-is.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderCombineText.cpp:96
&gt; &gt; -    TextRun run = TextRun(String(text()));
&gt; &gt; +    TextRun run = RenderBlock::constructTextRun(this, originalFont(), String(text()), style());
&gt; 
&gt; I know it is now in this patch but having constructTextRun in RenderBlock seems random. Why isn&apos;t it a free standing function?
A free standing function was disliked previously, so I added it to RenderBlock. Can we leave it as-is for now, and eventually move it, if we reach consensus?

&gt; 
&gt; &gt; Source/WebCore/rendering/TextRunRenderingContext.h:32
&gt; &gt; +class TextRunRenderingContext : public TextRun::AbstractRenderingContext {
&gt; &gt; +public:
&gt; 
&gt; I think this should be called SVGTextRunRenderingContext since it has a very specific purpose.
Fixed.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGInlineTextBox.cpp:389
&gt; &gt; +    TextRun::AbstractRenderingContext* abstractRenderingContext = textRun.renderingContext();
&gt; &gt; +    if (abstractRenderingContext &amp;&amp; abstractRenderingContext-&gt;isWebCoreRenderingContext())
&gt; &gt; +        static_cast&lt;TextRunRenderingContext*&gt;(abstractRenderingContext)-&gt;setActivePaintingResource(m_paintingResource);
&gt; 
&gt; As mentioned above isWebCoreRenderingContext() naming is weird and also unnecessary here.
Fixed.

&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGTextRunRenderingContext.cpp:82
&gt; &gt; +template&lt;typename SVGTextRunData&gt;
&gt; &gt; +struct SVGTextRunWalker {
&gt; &gt; +    typedef bool (*SVGTextRunWalkerCallback)(const SVGGlyph&amp;, SVGTextRunData&amp;);
&gt; &gt; +    typedef void (*SVGTextRunWalkerMissingGlyphCallback)(const TextRun&amp;, SVGTextRunData&amp;);
&gt; &gt; +
&gt; &gt; +    SVGTextRunWalker(const SVGFontData* fontData, SVGFontElement* fontElement, SVGTextRunData&amp; data,
&gt; &gt; +                     SVGTextRunWalkerCallback callback, SVGTextRunWalkerMissingGlyphCallback missingGlyphCallback)
&gt; 
&gt; Instead of using function pointers you could make the callbacks template parameters for more inlining. Probably not for this patch.
The whole code is gone, as soon as the SVG Fonts rewrite patch lands, no more use of callbacks or function pointers in the new code.

Preparing a new patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408802</commentid>
    <comment_count>21</comment_count>
      <attachid>94599</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-24 06:14:26 -0700</bug_when>
    <thetext>Created attachment 94599
Patch v4

Fixed Anttis comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408811</commentid>
    <comment_count>22</comment_count>
      <attachid>94599</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2011-05-24 06:45:26 -0700</bug_when>
    <thetext>Comment on attachment 94599
Patch v4

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

r=me

&gt; Source/WebCore/rendering/svg/SVGTextRunRenderingContext.h:38
&gt; +
&gt; +    RenderObject* context() const { return m_context; }

This could have some more specific name than &quot;context&quot;, especially since the class itself is called *Context.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408872</commentid>
    <comment_count>23</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-24 08:28:25 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 94599 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94599&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/WebCore/rendering/svg/SVGTextRunRenderingContext.h:38
&gt; &gt; +
&gt; &gt; +    RenderObject* context() const { return m_context; }
&gt; 
&gt; This could have some more specific name than &quot;context&quot;, especially since the class itself is called *Context.

Renamed to renderer(). Thank for the review, landed in r87152.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408908</commentid>
    <comment_count>24</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-24 09:11:27 -0700</bug_when>
    <thetext>Landed a win build fix in r87156.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408909</commentid>
    <comment_count>25</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2011-05-24 09:11:48 -0700</bug_when>
    <thetext>Landed follow-up build fix in r87158.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408959</commentid>
    <comment_count>26</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-05-24 10:14:58 -0700</bug_when>
    <thetext>This patch seems to have caused a regression on Chromium Webkit/Linux; see https://bugs.webkit.org/show_bug.cgi?id=61370</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93888</attachid>
            <date>2011-05-18 02:24:10 -0700</date>
            <delta_ts>2011-05-20 07:29:08 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>IntroduceRenderTextRun-v1.diff</filename>
            <type>text/plain</type>
            <size>79715</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NzQyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTE3IEBACisyMDExLTA1LTE4ICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBwbGF0Zm9ybSBsYXllcmluZyB2aW9s
YXRpb246IFRleHRSdW4gc3RvcmVzIFJlbmRlck9iamVjdHMgZm9yIFNWRyBGb250cyBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDI1NAor
CisgICAgICAgIFJlbW92ZSBhIGxvbmctc3RhbmRpbmcgbGF5ZXJpbmcgdmlvbGF0aW9uIGluIFRl
eHRSdW46IGl0IHN0b3JlcyBSZW5kZXJPYmplY3QvUmVuZGVyU1ZHUmVzb3VyY2UgcG9pbnRlcnMg
Zm9yIFNWRyBGb250cyBzdXBwb3J0LgorICAgICAgICBSZXBsYWNlIHRoZSB0d28gUmVuZGVyKiBw
b2ludGVycyB3aXRoIGEgc2luZ2xlIFJlZlB0cjxFeHRyYURhdGE+LiBFeHRyYURhdGEgaXMgYSBo
ZWxwZXIgY2xhc3MsIHRoYXQgY2FuIGJlIGRlcml2ZWQgZnJvbSBpbgorICAgICAgICBvcmRlciB0
byBhc3NvY2lhdGUgYWRkaXRpb25hbCBkYXRhIHdpdGggYSBUZXh0UnVuLiBUaGlzIGVmZmVjdGl2
ZWx5IHJlZHVjZXMgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBUZXh0UnVuLgorCisgICAgICAg
IEludHJvZHVjZSBSZW5kZXJUZXh0UnVuIGluaGVyaXRpbmcgZnJvbSBUZXh0UnVuIGFuZCBjb250
YWluaW5nIGEgUmVuZGVyVGV4dFJ1bjo6VGV4dERhdGEgY2xhc3Mgd2hpY2ggaW5oZXJpdHMgZnJv
bSBUZXh0UnVuOjpUZXh0RGF0YS4KKyAgICAgICAgUmVuZGVyVGV4dFJ1biBkb2Vzbid0IGFkZCBh
bnkgbWVtYmVycyBvciB2aXJ0dWFsIGZ1bmN0aW9ucywgaXQganVzdCBjb250YWlucyBhIGRpZmZl
cmVudCBjb25zdHJ1Y3RvciBhZGRpdGlvbmFsbHkgdGFraW5nIGEKKyAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBwb2ludGVyIGFuZCB0aGUgRm9udCBvYmplY3QgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZHJh
dy9tZWFzdXJlIHRoZSB0ZXh0IHJ1bi4KKworICAgICAgICBJZiB0aGUgcHJpbWFyeSBmb250IGlu
IHVzZSBpcyBhIFNWRyBGb250IHRoZW4gYWxsb2NhdGUgYSBSZW5kZXJUZXh0UnVuOjpUZXh0RGF0
YSBvYmplY3QgYW5kIHN0b3JlIGl0IGluIHRoZSBSZWZQdHI8RXh0cmFEYXRhPiBpbgorICAgICAg
ICBUZXh0UnVuLiBJZiB0aGUgcHJpbWFyeSBmb250IGlzIG5vdCBhIFNWRyBGb250LCBkb24ndCBl
dmVuIGFsbG9jYXRlIHRoZSBFeHRyYURhdGEgc3RydWN0dXJlLCBhcyB3ZSB3b24ndCBuZWVkIHRo
ZSBjb250ZXh0IGRhdGEuCisgICAgICAgIFNWRyBGb250cyBnbHlwaCBtYXRjaGluZyBvbmx5IHdv
cmtzIHdpdGhpbiBhIGNvbnRleHQsIHNvIHdlIG5lZWQgYWNjZXNzIHRvIHRoZSBSZW5kZXJPYmpl
Y3QgdGhhdCdzIGRyYXdpbmcgdGhlIHRleHQuCisKKyAgICAgICAgVHVybiBhbGwgVGV4dFJ1biBj
cmVhdGlvbnMgd2l0aGluIHJlbmRlcmluZy8gdG8gdXNlIFJlbmRlclRleHRSdW4uCisgICAgICAg
IFRoaXMgaXMgdGhlIG1haW4gcHJlcGFyYXRpb24gcGF0Y2ggZm9yIHRoZSBTVkcgRm9udHMgcmV3
cml0ZSwgdGhhdCB3aWxsIGFsbG93IHVzIHRvIHNoYXJlIHRoZSBzaW1wbGUgdGV4dCBjb2RlIHBh
dGggZm9yIFNWRyBGb250cyBhcyB3ZWxsLAorICAgICAgICBtYWtpbmcgYWxsIENTUyB0ZXh0IHBy
b3BlcnRpZXMgd29yayBmb3IgSFRNTCB0ZXh0IHVzaW5nIFNWRyBGb250cywgYW5kIGFsbG93cyBw
cm9wZXIgaW50ZWdyYXRpb24gd2l0aGluIHRoZSBHbHlwaFBhZ2UgY29uY2VwdC4gU29vbgorICAg
ICAgICB3ZSBjYW4gaW50ZXJtaXggV09GRi9TVkcgJiBuYXRpdmUgZm9udHMsIHdpdGhpbiBzZWdt
ZW50IGZvbnQgZGVjbGFyYXRpb25zLgorCisgICAgICAgIERvZXNuJ3QgYWZmZWN0IGFueSB0ZXN0
cyB5ZXQsIHJlZmFjdG9yaW5nIG9ubHkuCisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFt
OiBBZGQgUmVuZGVyVGV4dFJ1bi5oIHRvIGJ1aWxkLgorICAgICAgICAqIFdlYkNvcmUuZ3lwaTog
RGl0dG8uCisgICAgICAgICogV2ViQ29yZS5wcm86IERpdHRvLgorICAgICAgICAqIFdlYkNvcmUu
dmNwcm9qL1dlYkNvcmUudmNwcm9qOiBEaXR0by4KKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2o6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1Rl
eHRSdW4uaDogU2VlIHRleHQgYWJvdmUgZm9yIHRoZSBwdXJwb3NlIG9mIHRoZSBuZXcgRXh0cmFE
YXRhIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6VGV4dFJ1bik6CisgICAgICAg
IChXZWJDb3JlOjpUZXh0UnVuOjpFeHRyYURhdGE6On5FeHRyYURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFJ1bjo6RXh0cmFEYXRhOjppc1JlbmRlclRleHRSdW4pOgorICAgICAgICAoV2Vi
Q29yZTo6VGV4dFJ1bjo6ZXh0cmFEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OnNl
dEV4dHJhRGF0YSk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDogU3dpdGNo
IGFsbCB1c2VycyBvZiBUZXh0UnVuIHRvIFJlbmRlclRleHRSdW4gd2l0aGluIHJlbmRlcmluZy8u
CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxsaXBzaXNCb3g6OnNlbGVjdGlvblJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBz
aXNCb3g6OnBhaW50U2VsZWN0aW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9u
UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1l
bnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZz
ZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bik6
CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guaDogRGl0dG8uCisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpzdHJp
cFRyYWlsaW5nU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxh
eW91dC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6c2V0TG9naWNhbFdpZHRoRm9yVGV4
dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0V2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6
dHJ5SHlwaGVuYXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OkxpbmVCcmVh
a2VyOjpuZXh0TGluZUJyZWFrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjaGVj
a0xpbmVzRm9yVGV4dE92ZXJmbG93KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29tYmlu
ZVRleHQuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvbWJpbmVUZXh0Ojpj
b21iaW5lVGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9s
LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6
cGFpbnRPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6
OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRmxleGlibGVCb3guY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsZXhp
YmxlQm94OjphcHBseUxpbmVDbGFtcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6c2V0SW1hZ2VTaXpl
Rm9yQWx0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNl
ZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlz
dE1hcmtlcjo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyTGlzdE1hcmtlcjo6Z2V0UmVsYXRpdmVNYXJrZXJSZWN0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dDo6d2lkdGhGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dHJp
bW1lZFByZWZXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6d2lk
dGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OmdldEF2Z0NoYXJXaWR0aCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRSdW4uaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUZXh0UnVuOjpFeHRyYURhdGE6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0UnVuOjpFeHRyYURhdGE6OmlzUmVuZGVyVGV4dFJ1bik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0UnVuOjpFeHRyYURhdGE6OmNvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dFJ1bjo6RXh0cmFEYXRhOjphY3RpdmVQYWludGluZ1Jlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRSdW46OkV4dHJhRGF0YTo6c2V0QWN0aXZlUGFp
bnRpbmdSZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0UnVuOjpFeHRyYURh
dGE6OkV4dHJhRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0UnVuOjpSZW5kZXJU
ZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRSdW46OmV4dHJhRGF0YSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDogU3dpdGNoIGFsbCB1
c2VycyBvZiBUZXh0UnVuIHRvIFJlbmRlclRleHRSdW4gd2l0aGluIHJlbmRlcmluZy8uIAorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb25JbkZyYWdt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnByZXBhcmVHcmFwaGlj
c0NvbnRleHRGb3JUZXh0UGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4
dEJveDo6cmVzdG9yZUdyYXBoaWNzQ29udGV4dEFmdGVyVGV4dFBhaW50aW5nKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4pOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWRvd3MpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaDogRGl0dG8uCisgICAgICAgICogcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TWV0cmljcy5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Y29uc3Ry
dWN0VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TWV0cmljczo6bWVhc3VyZUNo
YXJhY3RlclJhbmdlKToKKyAgICAgICAgKiBzdmcvU1ZHRm9udC5jcHA6IERpdHRvLiBVc2UgbmV3
IG1ldGhvZHMgdG8gYWNjZXNzIFJlbmRlclRleHRSdW46OkV4dHJhRGF0YSBmcm9tIGEgcHVyZSBU
ZXh0UnVuLgorICAgICAgICAoV2ViQ29yZTo6Zmlyc3RQYXJlbnRSZW5kZXJlckZvck5vblRleHRO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0RnJvbVJ1bik6
CisgICAgICAgIChXZWJDb3JlOjphY3RpdmVQYWludGluZ1Jlc291cmNlRnJvbVJ1bik6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuV2Fsa2VyOjp3YWxrKToKKyAgICAgICAgKFdlYkNvcmU6
OmZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udCk6CisKIDIwMTEtMDUtMTYgIEplcmVteSBOb2JsZSAg
PGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDg2NzQyKQorKysg
U291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMjg4
MSw2ICsyODgxLDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0RnJhZ21lbnQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZy
YWdtZW50LmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0UnVuLmggXAog
CVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmggXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUaGVtZS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZS5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDg2NzQyKQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC01Mjg5LDYgKzUy
ODksNyBAQAogICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAnLAog
ICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaCcsCisgICAgICAgICAg
ICAncmVuZGVyaW5nL1JlbmRlclRleHRSdW4uaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1Jl
bmRlclRoZW1lLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1JlbmRlclRoZW1lLmgnLAog
ICAgICAgICAgICAgJ3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTGludXguY3BwJywKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA4Njc0MikKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yMTY2LDYgKzIxNjYsNyBAQCBIRUFERVJTICs9IFwK
ICAgICByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xNdWx0aUxpbmUuaCBcCiAgICAgcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oIFwKICAgICByZW5kZXJpbmcvUmVuZGVy
VGV4dEZyYWdtZW50LmggXAorICAgIHJlbmRlcmluZy9SZW5kZXJUZXh0UnVuLmggXAogICAgIHJl
bmRlcmluZy9SZW5kZXJUZXh0LmggXAogICAgIHJlbmRlcmluZy9SZW5kZXJUaGVtZS5oIFwKICAg
ICByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5oIFwKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCShyZXZpc2lvbiA4Njc0MikKKysrIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0zNzc1MCw2ICszNzc1MCwxMCBAQAogCQkJCT4KIAkJCTwvRmlsZT4KIAkJCTxGaWxlCisJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyVGV4dFJ1bi5oIgorCQkJCT4KKwkJCTwv
RmlsZT4KKwkJCTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcUmVuZGVyVGhl
bWUuY3BwIgogCQkJCT4KIAkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDg2
NzQyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNiArMTMxLDcgQEAKIAkJMDhBNDg0NzcwRTUyNzJDNTAw
QzNGRTc2IC8qIFNjcmlwdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDhBNDg0NzUwRTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlwdEVsZW1l
bnQuY3BwICovOyB9OwogCQkwOEE0ODQ3ODBFNTI3MkM1MDBDM0ZFNzYgLyogU2NyaXB0RWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhBNDg0
NzYwRTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlwdEVsZW1lbnQuaCAqLzsgfTsKIAkJMDhBNDhBNkUw
RTg2Q0Y2RDAwRTIyNUREIC8qIEpTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QTQ4QTZEMEU4NkNGNkQw
MEUyMjVERCAvKiBKU1NWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAgKi87IH07CisJCTA4QUVC
OTBDMTM4M0M2NDUwMEFCOEM3NCAvKiBSZW5kZXJUZXh0UnVuLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEFFQjkwQjEzODNDNjQ1MDBBQjhDNzQgLyog
UmVuZGVyVGV4dFJ1bi5oICovOyB9OwogCQkwOEIzNUIxMzEyN0I2QTdDMDA1MzE0REQgLyogU1ZH
QW5pbWF0ZWROdW1iZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDA4QjM1QjEyMTI3QjZBN0MwMDUzMTRERCAvKiBTVkdBbmltYXRlZE51bWJlci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA4QjM1QjE3
MTI3QjZBODgwMDUzMTRERCAvKiBTVkdBbmltYXRlZE51bWJlckxpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QjM1QjE2MTI3QjZBODgwMDUzMTRE
RCAvKiBTVkdBbmltYXRlZE51bWJlckxpc3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwOEM3MTM2RTEyODk1NkEzMDAxQjEwN0UgLyogU1ZHVHJh
bnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMDhDNzEzNkQxMjg5NTZBMzAwMUIxMDdFIC8qIFNWR1RyYW5zZm9y
bUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtNDA5MCwxMiArNDA5MSwxMiBAQAogCQlBRERGMUFENzEyNTdDRDlB
MDAwM0E3NTkgLyogUmVuZGVyU1ZHUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQURERjFBRDUxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRlclNWR1Bh
dGguaCAqLzsgfTsKIAkJQjE4Mjc0OTMxMzRDQTRDMTAwQjk4QzJEIC8qIENhbGxiYWNrRnVuY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjE4
Mjc0OTIxMzRDQTRDMTAwQjk4QzJEIC8qIENhbGxiYWNrRnVuY3Rpb24uY3BwICovOyB9OwogCQlC
MUQ1RUNCNTEzNEI1OERBMDA4N0M3OEYgLyogQ2FsbGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFENUVDQjQxMzRCNThEQTAwODdD
NzhGIC8qIENhbGxiYWNrRnVuY3Rpb24uaCAqLzsgfTsKKwkJQjFFNTQ1OTMxMzQ2MjlDMTAwOTJB
NTQ1IC8qIENhbGxiYWNrVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjFFNTQ1ODcxMzQ2MjlDMTAwOTJBNTQ1IC8qIENhbGxiYWNrVGFzay5oICov
OyB9OwogCQlCMUU1NDU5NDEzNDYyOUMxMDA5MkE1NDUgLyogTWVkaWFTdHJlYW1DbGllbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxRTU0NTg4MTM0
NjI5QzEwMDkyQTU0NSAvKiBNZWRpYVN0cmVhbUNsaWVudC5oICovOyB9OwogCQlCMUU1NDU5NTEz
NDYyOUMxMDA5MkE1NDUgLyogTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFFNTQ1ODkxMzQ2MjlDMTAw
OTJBNTQ1IC8qIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcCAqLzsgfTsKIAkJQjFFNTQ1
OTYxMzQ2MjlDMTAwOTJBNTQ1IC8qIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMUU1NDU4QTEzNDYyOUMx
MDA5MkE1NDUgLyogTWVkaWFTdHJlYW1GcmFtZUNvbnRyb2xsZXIuaCAqLzsgfTsKIAkJQjFFNTQ1
OTcxMzQ2MjlDMTAwOTJBNTQ1IC8qIE1lZGlhU3RyZWFtQ29udHJvbGxlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMUU1NDU4QjEzNDYyOUMxMDA5
MkE1NDUgLyogTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcCAqLzsgfTsKIAkJQjFFNTQ1OTgxMzQ2
MjlDMTAwOTJBNTQ1IC8qIE1lZGlhU3RyZWFtQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFFNTQ1OEMxMzQ2MjlDMTAwOTJBNTQ1IC8q
IE1lZGlhU3RyZWFtQ29udHJvbGxlci5oICovOyB9OwotCQlCMUU1NDU5MzEzNDYyOUMxMDA5MkE1
NDUgLyogQ2FsbGJhY2tUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCMUU1NDU4NzEzNDYyOUMxMDA5MkE1NDUgLyogQ2FsbGJhY2tUYXNrLmggKi87
IH07CiAJCUIxRTU0NTk5MTM0NjI5QzEwMDkyQTU0NSAvKiBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJv
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFFNTQ1
OEQxMzQ2MjlDMTAwOTJBNTQ1IC8qIE5hdmlnYXRvclVzZXJNZWRpYUVycm9yLmggKi87IH07CiAJ
CUIxRTU0NTlCMTM0NjI5QzEwMDkyQTU0NSAvKiBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxi
YWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMUU1
NDU4RjEzNDYyOUMxMDA5MkE1NDUgLyogTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjay5o
ICovOyB9OwogCQlCMUU1NDU5RDEzNDYyOUMxMDA5MkE1NDUgLyogTmF2aWdhdG9yVXNlck1lZGlh
U3VjY2Vzc0NhbGxiYWNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMUU1NDU5MTEzNDYyOUMxMDA5MkE1NDUgLyogTmF2aWdhdG9yVXNlck1lZGlhU3Vj
Y2Vzc0NhbGxiYWNrLmggKi87IH07CkBAIC02NTE4LDYgKzY1MTksNyBAQAogCQkwOEE0ODQ3NTBF
NTI3MkM1MDBDM0ZFNzYgLyogU2NyaXB0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBTY3JpcHRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDhBNDg0NzYwRTUyNzJDNTAwQzNGRTc2IC8qIFNjcmlwdEVsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0RWxlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwOEE0OEE2RDBFODZDRjZEMDBFMjI1REQgLyogSlNTVkdFbGVt
ZW50SW5zdGFuY2VDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gSlNTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwOEFFQjkwQjEzODNDNjQ1MDBBQjhDNzQgLyogUmVuZGVyVGV4dFJ1bi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUZXh0UnVuLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA4QjM1QjEyMTI3QjZBN0MwMDUzMTRERCAvKiBTVkdBbmltYXRl
ZE51bWJlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZE51
bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEIzNUIxNjEyN0I2QTg4MDA1
MzE0REQgLyogU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFNWR0FuaW1hdGVkTnVtYmVyTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwOEM3MTM2RDEyODk1NkEzMDAxQjEwN0UgLyogU1ZHVHJhbnNmb3JtTGlzdFByb3Bl
cnR5VGVhck9mZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdUcmFuc2Zv
cm1MaXN0UHJvcGVydHlUZWFyT2ZmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
MDM2MiwxMiArMTAzNjQsMTIgQEAKIAkJQURERjFBRDUxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRl
clNWR1BhdGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU1ZHUGF0
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMTgyNzQ5MjEzNENBNEMxMDBCOThD
MkQgLyogQ2FsbGJhY2tGdW5jdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDYWxsYmFja0Z1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjFENUVDQjQxMzRCNThEQTAwODdDNzhGIC8qIENhbGxiYWNrRnVuY3Rpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsbGJhY2tGdW5jdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCMUU1NDU4NzEzNDYyOUMxMDA5MkE1NDUgLyogQ2FsbGJhY2tU
YXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxiYWNrVGFzay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMUU1NDU4ODEzNDYyOUMxMDA5MkE1NDUgLyog
TWVkaWFTdHJlYW1DbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVk
aWFTdHJlYW1DbGllbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFFNTQ1ODkx
MzQ2MjlDMTAwOTJBNTQ1IC8qIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVy
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFFNTQ1OEExMzQ2MjlDMTAwOTJB
NTQ1IC8qIE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIxRTU0NThCMTM0NjI5QzEwMDkyQTU0NSAvKiBNZWRpYVN0cmVhbUNv
bnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFT
dHJlYW1Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFFNTQ1
OEMxMzQ2MjlDMTAwOTJBNTQ1IC8qIE1lZGlhU3RyZWFtQ29udHJvbGxlci5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYVN0cmVhbUNvbnRyb2xsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjFFNTQ1ODcxMzQ2MjlDMTAwOTJBNTQ1IC8qIENhbGxiYWNr
VGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsYmFja1Rhc2suaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFFNTQ1OEQxMzQ2MjlDMTAwOTJBNTQ1IC8q
IE5hdmlnYXRvclVzZXJNZWRpYUVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE5hdmlnYXRvclVzZXJNZWRpYUVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCUIxRTU0NThFMTM0NjI5QzEwMDkyQTU0NSAvKiBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvci5p
ZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yVXNlck1lZGlhRXJyb3IuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMUU1NDU4RjEzNDYyOUMxMDA5MkE1NDUgLyog
TmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xOTEyMSw2ICsxOTEyMyw3IEBACiAJCQkJMDgzREFFQTUwRjAx
QTdGQjAwMzQyNzU0IC8qIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oICovLAogCQkJCUJD
RUE0ODRFMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUZXh0RnJhZ21lbnQuY3BwICovLAogCQkJ
CUJDRUE0ODRGMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUZXh0RnJhZ21lbnQuaCAqLywKKwkJ
CQkwOEFFQjkwQjEzODNDNjQ1MDBBQjhDNzQgLyogUmVuZGVyVGV4dFJ1bi5oICovLAogCQkJCUJD
RUE0ODRBMDk3RDkzMDIwMDk0QzlFNCAvKiBSZW5kZXJUaGVtZS5jcHAgKi8sCiAJCQkJQkNFQTQ4
NEIwOTdEOTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lLmggKi8sCiAJCQkJQkNFQTQ4NDgwOTdE
OTMwMjAwOTRDOUU0IC8qIFJlbmRlclRoZW1lTWFjLmggKi8sCkBAIC0yMjgyNyw2ICsyMjgzMCw3
IEBACiAJCQkJRkQ1MzczNTcxMzdCNjUzQjAwMDA4RENFIC8qIER5bmFtaWNzQ29tcHJlc3Nvcktl
cm5lbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3IC8qIEFk
anVzdFZpZXdTaXplT3JOb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUIxRTU0NTkzMTM0NjI5QzEw
MDkyQTU0NSAvKiBDYWxsYmFja1Rhc2suaCBpbiBIZWFkZXJzICovLAorCQkJCTA4QUVCOTBDMTM4
M0M2NDUwMEFCOEM3NCAvKiBSZW5kZXJUZXh0UnVuLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJ
CQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHJldmlzaW9uIDg2NzQy
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCwxNCArMjQsMTIgQEAKICNpZm5kZWYgVGV4dFJ1bl9oCiAjZGVmaW5lIFRl
eHRSdW5faAogCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJUZXh0RGly
ZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBSZW5kZXJPYmpl
Y3Q7Ci1jbGFzcyBSZW5kZXJTVkdSZXNvdXJjZTsKLQogY2xhc3MgVGV4dFJ1biB7CiBwdWJsaWM6
CiAgICAgZW51bSBFeHBhbnNpb25CZWhhdmlvckZsYWdzIHsKQEAgLTU2LDEwICs1NCw2IEBAIHB1
YmxpYzoKICAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgICAgICwgbV9kaXJl
Y3Rpb25hbE92ZXJyaWRlKGRpcmVjdGlvbmFsT3ZlcnJpZGUpCiAgICAgICAgICwgbV9kaXNhYmxl
U3BhY2luZyhmYWxzZSkKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgICAgICAsIG1fcmVmZXJl
bmNpbmdSZW5kZXJPYmplY3QoMCkKLSAgICAgICAgLCBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2Uo
MCkKLSNlbmRpZgogICAgIHsKICAgICB9CiAKQEAgLTc2LDEwICs3MCw2IEBAIHB1YmxpYzoKICAg
ICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgICAgICwgbV9kaXJlY3Rpb25hbE92
ZXJyaWRlKGRpcmVjdGlvbmFsT3ZlcnJpZGUpCiAgICAgICAgICwgbV9kaXNhYmxlU3BhY2luZyhm
YWxzZSkKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgICAgICAsIG1fcmVmZXJlbmNpbmdSZW5k
ZXJPYmplY3QoMCkKLSAgICAgICAgLCBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2UoMCkKLSNlbmRp
ZgogICAgIHsKICAgICB9CiAKQEAgLTExMSwxMyArMTAxLDE2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgeyBtX2RpcmVjdGlvbiA9IGRp
cmVjdGlvbjsgfQogICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxPdmVycmlkZShib29sIG92ZXJyaWRl
KSB7IG1fZGlyZWN0aW9uYWxPdmVycmlkZSA9IG92ZXJyaWRlOyB9CiAKLSNpZiBFTkFCTEUoU1ZH
X0ZPTlRTKQotICAgIFJlbmRlck9iamVjdCogcmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlZmVyZW5jaW5nUmVuZGVyT2JqZWN0OyB9Ci0gICAgdm9pZCBzZXRSZWZl
cmVuY2luZ1JlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIG9iamVjdCkgeyBtX3JlZmVyZW5jaW5n
UmVuZGVyT2JqZWN0ID0gb2JqZWN0OyB9CisgICAgY2xhc3MgRXh0cmFEYXRhIDogcHVibGljIFJl
ZkNvdW50ZWQ8RXh0cmFEYXRhPiB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5FeHRy
YURhdGEoKSB7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyVGV4dFJ1bigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgfTsKKworICAgIEV4dHJhRGF0YSogZXh0cmFEYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9leHRyYURhdGEuZ2V0KCk7IH0KIAotICAgIFJlbmRlclNWR1Jlc291
cmNlKiBhY3RpdmVQYWludGluZ1Jlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVQYWlu
dGluZ1Jlc291cmNlOyB9Ci0gICAgdm9pZCBzZXRBY3RpdmVQYWludGluZ1Jlc291cmNlKFJlbmRl
clNWR1Jlc291cmNlKiBvYmplY3QpIHsgbV9hY3RpdmVQYWludGluZ1Jlc291cmNlID0gb2JqZWN0
OyB9Ci0jZW5kaWYKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHNldEV4dHJhRGF0YShQYXNzUmVmUHRy
PEV4dHJhRGF0YT4gZGF0YSkgeyBtX2V4dHJhRGF0YSA9IGRhdGE7IH0KIAogcHJpdmF0ZToKICAg
ICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXJzOwpAQCAtMTM2LDExICsxMjksNyBAQCBwcml2YXRl
OgogICAgIFRleHREaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAgICAgYm9vbCBtX2RpcmVjdGlvbmFs
T3ZlcnJpZGU7IC8vIFdhcyB0aGlzIGRpcmVjdGlvbiBzZXQgYnkgYW4gb3ZlcnJpZGUgY2hhcmFj
dGVyLgogICAgIGJvb2wgbV9kaXNhYmxlU3BhY2luZzsKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMp
Ci0gICAgUmVuZGVyT2JqZWN0KiBtX3JlZmVyZW5jaW5nUmVuZGVyT2JqZWN0OwotICAgIFJlbmRl
clNWR1Jlc291cmNlKiBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2U7Ci0jZW5kaWYKKyAgICBSZWZQ
dHI8RXh0cmFEYXRhPiBtX2V4dHJhRGF0YTsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkocmV2aXNpb24gODY3NDIpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsy
NSw4IEBACiAjaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5o
IgogI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dFJ1bi5oIgog
I2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtNDQsOCArNDQsOSBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWlu
dChQYWludEluZm8mIHBhaW50CiAgICAgICAgIHNldFNoYWRvdyA9IHRydWU7CiAgICAgfQogCisg
ICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7CiAgICAgaWYgKHNlbGVjdGlvblN0
YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7Ci0gICAgICAgIHBhaW50U2Vs
ZWN0aW9uKGNvbnRleHQsIHR4LCB0eSwgc3R5bGUsIHN0eWxlLT5mb250KCkpOworICAgICAgICBw
YWludFNlbGVjdGlvbihjb250ZXh0LCB0eCwgdHksIHN0eWxlLCBmb250KTsKIAogICAgICAgICAv
LyBTZWxlY3QgdGhlIGNvcnJlY3QgY29sb3IgZm9yIHBhaW50aW5nIHRoZSB0ZXh0LgogICAgICAg
ICBDb2xvciBmb3JlZ3JvdW5kID0gcGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0ID8gQ29sb3I6OmJs
YWNrIDogcmVuZGVyZXIoKS0+c2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CkBAIC01NCw3ICs1
NSw3IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICB9CiAK
ICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExUUj8gRml4IGJ5IHBhc3NpbmcgY29y
cmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KLSAgICBjb250ZXh0LT5kcmF3VGV4dChzdHlsZS0+
Zm9udCgpLCBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bkFsbG93VHJhaWxpbmdFeHBhbnNp
b24obV9zdHIsIHN0eWxlKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgc3R5bGUtPmZv
bnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKKyAgICBjb250ZXh0LT5kcmF3VGV4dChmb250LCBSZW5k
ZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bkFsbG93VHJhaWxpbmdFeHBhbnNpb24ocmVuZGVyZXIo
KSwgZm9udCwgbV9zdHIsIHN0eWxlKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgc3R5
bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKIAogICAgIC8vIFJlc3RvcmUgdGhlIHJlZ3Vs
YXIgZmlsbCBjb2xvci4KICAgICBpZiAodGV4dENvbG9yICE9IGNvbnRleHQtPmZpbGxDb2xvcigp
KQpAQCAtNzQsOSArNzUsOSBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBh
aW50CiBJbnRSZWN0IEVsbGlwc2lzQm94OjpzZWxlY3Rpb25SZWN0KGludCB0eCwgaW50IHR5KQog
ewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0eWxlKG1fZmlyc3RMaW5l
KTsKLSAgICBjb25zdCBGb250JiBmID0gc3R5bGUtPmZvbnQoKTsKKyAgICBjb25zdCBGb250JiBm
b250ID0gc3R5bGUtPmZvbnQoKTsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExU
Uj8gRml4IGJ5IHBhc3NpbmcgY29ycmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KLSAgICByZXR1
cm4gZW5jbG9zaW5nSW50UmVjdChmLnNlbGVjdGlvblJlY3RGb3JUZXh0KFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuQWxsb3dUcmFpbGluZ0V4cGFuc2lvbihtX3N0ciwgc3R5bGUpLCBJbnRQ
b2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyByb290KCktPnNlbGVjdGlvblRvcCgpKSwgcm9vdCgp
LT5zZWxlY3Rpb25IZWlnaHQoKSkpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGZvbnQu
c2VsZWN0aW9uUmVjdEZvclRleHQoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW5BbGxvd1Ry
YWlsaW5nRXhwYW5zaW9uKHJlbmRlcmVyKCksIGZvbnQsIG1fc3RyLCBzdHlsZSksIEludFBvaW50
KG1feCArIHR4LCBtX3kgKyB0eSArIHJvb3QoKS0+c2VsZWN0aW9uVG9wKCkpLCByb290KCktPnNl
bGVjdGlvbkhlaWdodCgpKSk7CiB9CiAKIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9u
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgaW50IHR4LCBpbnQgdHksIFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgRm9udCYgZm9udCkKQEAgLTk2LDcgKzk3LDcgQEAgdm9pZCBFbGxpcHNpc0Jv
eDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpYwogICAgIGludCBoID0gcm9vdCgpLT5zZWxlY3Rpb25I
ZWlnaHQoKTsKICAgICBjb250ZXh0LT5jbGlwKEludFJlY3QobV94ICsgdHgsIHkgKyB0eSwgbV9s
b2dpY2FsV2lkdGgsIGgpKTsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExUUj8g
Rml4IGJ5IHBhc3NpbmcgY29ycmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KLSAgICBjb250ZXh0
LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bkFsbG93VHJhaWxpbmdFeHBhbnNpb24obV9zdHIsIHN0eWxlKSwgSW50UG9pbnQobV94ICsgdHgs
IG1feSArIHR5ICsgeSksIGgsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgIGNvbnRleHQt
PmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVu
QWxsb3dUcmFpbGluZ0V4cGFuc2lvbihyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgc3R5bGUpLCBJ
bnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyB5KSwgaCwgYywgc3R5bGUtPmNvbG9yU3BhY2Uo
KSk7CiB9CiAKIGJvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1
ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IEludFBvaW50JiBwb2lu
dEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGludCBsaW5lQm90dG9t
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkocmV2
aXNpb24gODY3NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJSZW5kZXJDb21i
aW5lVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclJ1YnlSdW4uaCIKICNpbmNsdWRlICJSZW5kZXJS
dWJ5VGV4dC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRSdW4uaCIKICNpbmNsdWRlICJSZW5kZXJU
aGVtZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0UnVuLmgiCkBAIC0xODIs
MTUgKzE4MywxNSBAQCBJbnRSZWN0IElubGluZVRleHRCb3g6OnNlbGVjdGlvblJlY3QoaW50CiAg
ICAgaW50IHNlbFRvcCA9IHNlbGVjdGlvblRvcCgpOwogICAgIGludCBzZWxIZWlnaHQgPSBzZWxl
Y3Rpb25IZWlnaHQoKTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHRleHRPYmotPnN0
eWxlKG1fZmlyc3RMaW5lKTsKLSAgICBjb25zdCBGb250JiBmID0gc3R5bGVUb1VzZS0+Zm9udCgp
OworICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZVRvVXNlLT5mb250KCk7CiAKICAgICBCdWZm
ZXJGb3JBcHBlbmRpbmdIeXBoZW4gY2hhcmFjdGVyc1dpdGhIeXBoZW47CiAgICAgYm9vbCByZXNw
ZWN0SHlwaGVuID0gZVBvcyA9PSBtX2xlbiAmJiBoYXNIeXBoZW4oKTsKLSAgICBUZXh0UnVuIHRl
eHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlVG9Vc2UsIHJlc3BlY3RIeXBoZW4gPyAmY2hh
cmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKKyAgICBSZW5kZXJUZXh0UnVuIHRleHRSdW4gPSBjb25z
dHJ1Y3RUZXh0UnVuKHN0eWxlVG9Vc2UsIGZvbnQsIHJlc3BlY3RIeXBoZW4gPyAmY2hhcmFjdGVy
c1dpdGhIeXBoZW4gOiAwKTsKICAgICBpZiAocmVzcGVjdEh5cGhlbikKICAgICAgICAgZW5kUG9z
ID0gdGV4dFJ1bi5sZW5ndGgoKTsKIAotICAgIEludFJlY3QgciA9IGVuY2xvc2luZ0ludFJlY3Qo
Zi5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBGbG9hdFBvaW50KGxvZ2ljYWxMZWZ0KCks
IHNlbFRvcCksIHNlbEhlaWdodCwgc1BvcywgZVBvcykpOworICAgIEludFJlY3QgciA9IGVuY2xv
c2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBGbG9hdFBvaW50
KGxvZ2ljYWxMZWZ0KCksIHNlbFRvcCksIHNlbEhlaWdodCwgc1BvcywgZVBvcykpOwogCiAgICAg
aW50IGxvZ2ljYWxXaWR0aCA9IHIud2lkdGgoKTsKICAgICBpZiAoci54KCkgPiBsb2dpY2FsUmln
aHQoKSkKQEAgLTY0Myw3ICs2NDQsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50
SW5mbyYgcGFpCiAgICAgICAgIGNvbWJpbmVkVGV4dC0+Y2hhcmFjdGVyc1RvUmVuZGVyKG1fc3Rh
cnQsIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAKICAgICBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4g
Y2hhcmFjdGVyc1dpdGhIeXBoZW47Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4
dFJ1bihzdHlsZVRvVXNlLCBjaGFyYWN0ZXJzLCBsZW5ndGgsIGhhc0h5cGhlbigpID8gJmNoYXJh
Y3RlcnNXaXRoSHlwaGVuIDogMCk7CisgICAgUmVuZGVyVGV4dFJ1biB0ZXh0UnVuID0gY29uc3Ry
dWN0VGV4dFJ1bihzdHlsZVRvVXNlLCBmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIGhhc0h5cGhl
bigpID8gJmNoYXJhY3RlcnNXaXRoSHlwaGVuIDogMCk7CiAgICAgaWYgKGhhc0h5cGhlbigpKQog
ICAgICAgICBsZW5ndGggPSB0ZXh0UnVuLmxlbmd0aCgpOwogCkBAIC02ODAsNyArNjgxLDcgQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAgICAgICBpZiAoIWVt
cGhhc2lzTWFyay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHVwZGF0ZUdyYXBoaWNzQ29udGV4
dChjb250ZXh0LCBlbXBoYXNpc01hcmtDb2xvciwgdGV4dFN0cm9rZUNvbG9yLCB0ZXh0U3Ryb2tl
V2lkdGgsIHN0eWxlVG9Vc2UtPmNvbG9yU3BhY2UoKSk7CiAKLSAgICAgICAgICAgIHN0YXRpYyBU
ZXh0UnVuIG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1bigmb2JqZWN0UmVwbGFjZW1l
bnRDaGFyYWN0ZXIsIDEpOworICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChUZXh0UnVu
LCBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclRleHRSdW4sICgmb2JqZWN0UmVwbGFjZW1lbnRD
aGFyYWN0ZXIsIDEpKTsKICAgICAgICAgICAgIFRleHRSdW4mIGVtcGhhc2lzTWFya1RleHRSdW4g
PSBjb21iaW5lZFRleHQgPyBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclRleHRSdW4gOiB0ZXh0
UnVuOwogICAgICAgICAgICAgRmxvYXRQb2ludCBlbXBoYXNpc01hcmtUZXh0T3JpZ2luID0gY29t
YmluZWRUZXh0ID8gRmxvYXRQb2ludChib3hPcmlnaW4ueCgpICsgYm94UmVjdC53aWR0aCgpIC8g
MiwgYm94T3JpZ2luLnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkgOiB0ZXh0T3Jp
Z2luOwogICAgICAgICAgICAgaWYgKGNvbWJpbmVkVGV4dCkKQEAgLTcwNiw3ICs3MDcsNyBAQCB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgICAgIGlmICghZW1w
aGFzaXNNYXJrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0
KGNvbnRleHQsIHNlbGVjdGlvbkVtcGhhc2lzTWFya0NvbG9yLCB0ZXh0U3Ryb2tlQ29sb3IsIHRl
eHRTdHJva2VXaWR0aCwgc3R5bGVUb1VzZS0+Y29sb3JTcGFjZSgpKTsKIAotICAgICAgICAgICAg
c3RhdGljIFRleHRSdW4gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuKCZvYmplY3RS
ZXBsYWNlbWVudENoYXJhY3RlciwgMSk7CisgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KFRleHRSdW4sIG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biwgKCZvYmplY3RSZXBs
YWNlbWVudENoYXJhY3RlciwgMSkpOwogICAgICAgICAgICAgVGV4dFJ1biYgZW1waGFzaXNNYXJr
VGV4dFJ1biA9IGNvbWJpbmVkVGV4dCA/IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1
biA6IHRleHRSdW47CiAgICAgICAgICAgICBGbG9hdFBvaW50IGVtcGhhc2lzTWFya1RleHRPcmln
aW4gPSBjb21iaW5lZFRleHQgPyBGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBib3hSZWN0Lndp
ZHRoKCkgLyAyLCBib3hPcmlnaW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKSA6
IHRleHRPcmlnaW47CiAgICAgICAgICAgICBpZiAoY29tYmluZWRUZXh0KQpAQCAtODA4LDcgKzgw
OSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGgKIAogICAgIEJ1
ZmZlckZvckFwcGVuZGluZ0h5cGhlbiBjaGFyYWN0ZXJzV2l0aEh5cGhlbjsKICAgICBib29sIHJl
c3BlY3RIeXBoZW4gPSBlUG9zID09IGxlbmd0aCAmJiBoYXNIeXBoZW4oKTsKLSAgICBUZXh0UnVu
IHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBjaGFyYWN0ZXJzLCBsZW5ndGgsIHJl
c3BlY3RIeXBoZW4gPyAmY2hhcmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKKyAgICBSZW5kZXJUZXh0
UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmb250LCBjaGFyYWN0ZXJzLCBs
ZW5ndGgsIHJlc3BlY3RIeXBoZW4gPyAmY2hhcmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKICAgICBp
ZiAocmVzcGVjdEh5cGhlbikKICAgICAgICAgZVBvcyA9IHRleHRSdW4ubGVuZ3RoKCk7CiAKQEAg
LTg0Myw3ICs4NDQsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNr
CiAgICAgaW50IGRlbHRhWSA9IHJlbmRlcmVyKCktPnN0eWxlKCktPmlzRmxpcHBlZExpbmVzV3Jp
dGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSgpIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNh
bFRvcCgpIC0gc2VsZWN0aW9uVG9wKCk7CiAgICAgaW50IHNlbEhlaWdodCA9IHNlbGVjdGlvbkhl
aWdodCgpOwogICAgIEZsb2F0UG9pbnQgbG9jYWxPcmlnaW4oYm94T3JpZ2luLngoKSwgYm94T3Jp
Z2luLnkoKSAtIGRlbHRhWSk7Ci0gICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9u
dCwgY29uc3RydWN0VGV4dFJ1bihzdHlsZSksIGxvY2FsT3JpZ2luLCBzZWxIZWlnaHQsIGMsIHN0
eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOworICAgIGNvbnRleHQtPmRyYXdIaWdobGln
aHRGb3JUZXh0KGZvbnQsIGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQpLCBsb2NhbE9yaWdp
biwgc2VsSGVpZ2h0LCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBzUG9zLCBlUG9zKTsKIH0KIAog
I2lmIFBMQVRGT1JNKE1BQykKQEAgLTEwMDEsNyArMTAwMiw3IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRTcGVsbGluZ09yR3JhbW0KICAgICAgICAgaW50IGRlbHRhWSA9IHJlbmRlcmVyKCkt
PnN0eWxlKCktPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSgp
IC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wKCk7CiAgICAg
ICAgIGludCBzZWxIZWlnaHQgPSBzZWxlY3Rpb25IZWlnaHQoKTsKICAgICAgICAgRmxvYXRQb2lu
dCBzdGFydFBvaW50KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVkpOwotICAg
ICAgICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUpOworICAgICAgICBSZW5k
ZXJUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQpOwogCiAgICAgICAg
IC8vIEZJWE1FOiBDb252ZXJ0IHRoZSBkb2N1bWVudCBtYXJrZXJzIHRvIGZsb2F0IHJlY3RzLgog
ICAgICAgICBJbnRSZWN0IG1hcmtlclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0
aW9uUmVjdEZvclRleHQocnVuLCBzdGFydFBvaW50LCBzZWxIZWlnaHQsIHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uKSk7CkBAIC0xMDQ2LDcgKzEwNDcsNyBAQCB2b2lkIElubGluZVRleHRCb3g6
OnBhaW50VGV4dE1hdGNoTWFya2VyCiAKICAgICBpbnQgc1BvcyA9IG1heChtYXJrZXIuc3RhcnRP
ZmZzZXQgLSBtX3N0YXJ0LCAodW5zaWduZWQpMCk7CiAgICAgaW50IGVQb3MgPSBtaW4obWFya2Vy
LmVuZE9mZnNldCAtIG1fc3RhcnQsICh1bnNpZ25lZCltX2xlbik7ICAgIAotICAgIFRleHRSdW4g
cnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSk7CisgICAgUmVuZGVyVGV4dFJ1biBydW4gPSBj
b25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmb250KTsKIAogICAgIC8vIEFsd2F5cyBjb21wdXRlIGFu
ZCBzdG9yZSB0aGUgcmVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXJrZXIuIFRoZSBjb21wdXRl
ZCByZWN0IGlzIGluIGFic29sdXRlIGNvb3JkaW5hdGVzLgogICAgIEludFJlY3QgbWFya2VyUmVj
dCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIEludFBv
aW50KG1feCwgc2VsZWN0aW9uVG9wKCkpLCBzZWxIZWlnaHQsIHNQb3MsIGVQb3MpKTsKQEAgLTEw
NzMsNyArMTA3NCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWMK
ICAgICAKICAgICBpbnQgc1BvcyA9IG1heChtYXJrZXIuc3RhcnRPZmZzZXQgLSBtX3N0YXJ0LCAo
dW5zaWduZWQpMCk7CiAgICAgaW50IGVQb3MgPSBtaW4obWFya2VyLmVuZE9mZnNldCAtIG1fc3Rh
cnQsICh1bnNpZ25lZCltX2xlbik7ICAgIAotICAgIFRleHRSdW4gcnVuID0gY29uc3RydWN0VGV4
dFJ1bihzdHlsZSk7CisgICAgUmVuZGVyVGV4dFJ1biBydW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0
eWxlLCBmb250KTsKICAgICBJbnRQb2ludCBzdGFydFBvaW50ID0gSW50UG9pbnQobV94LCB5KTsK
ICAgICAKICAgICAvLyBDb21wdXRlIGFuZCBzdG9yZSB0aGUgcmVjdCBhc3NvY2lhdGVkIHdpdGgg
dGhpcyBtYXJrZXIuCkBAIC0xMjMyLDggKzEyMzMsOCBAQCBpbnQgSW5saW5lVGV4dEJveDo6b2Zm
c2V0Rm9yUG9zaXRpb24oZmxvCiAKICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5kZXJUZXh0
KHJlbmRlcmVyKCkpOwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKG1fZmly
c3RMaW5lKTsKLSAgICBjb25zdCBGb250KiBmID0gJnN0eWxlLT5mb250KCk7Ci0gICAgaW50IG9m
ZnNldCA9IGYtPm9mZnNldEZvclBvc2l0aW9uKGNvbnN0cnVjdFRleHRSdW4oc3R5bGUpLCBsaW5l
T2Zmc2V0IC0gbG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOworICAgIGNvbnN0
IEZvbnQmIGZvbnQgPSBzdHlsZS0+Zm9udCgpOworICAgIGludCBvZmZzZXQgPSBmb250Lm9mZnNl
dEZvclBvc2l0aW9uKGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQpLCBsaW5lT2Zmc2V0IC0g
bG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogICAgIGlmIChibG9ja0lzSW5P
cHBvc2l0ZURpcmVjdGlvbiAmJiAoIW9mZnNldCB8fCBvZmZzZXQgPT0gbV9sZW4pKQogICAgICAg
ICByZXR1cm4gIW9mZnNldCA/IG1fbGVuIDogMDsKICAgICByZXR1cm4gb2Zmc2V0OwpAQCAtMTI1
MCwxMSArMTI1MSwxMSBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChp
CiAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKTsKICAgICBS
ZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHRleHQtPnN0eWxlKG1fZmlyc3RMaW5lKTsKICAgICBB
U1NFUlQoc3R5bGVUb1VzZSk7Ci0gICAgY29uc3QgRm9udCYgZiA9IHN0eWxlVG9Vc2UtPmZvbnQo
KTsKKyAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGVUb1VzZS0+Zm9udCgpOwogICAgIGludCBm
cm9tID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQgOiAwOwog
ICAgIGludCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9mZnNldCAt
IG1fc3RhcnQ7CiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gYWRkIHJpZ2h0QmVhcmluZyBo
ZXJlPwotICAgIHJldHVybiBmLnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0cnVjdFRleHRSdW4o
c3R5bGVUb1VzZSksIEludFBvaW50KGxvZ2ljYWxMZWZ0KCksIDApLCAwLCBmcm9tLCB0bykubWF4
WCgpOworICAgIHJldHVybiBmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0cnVjdFRleHRS
dW4oc3R5bGVUb1VzZSwgZm9udCksIEludFBvaW50KGxvZ2ljYWxMZWZ0KCksIDApLCAwLCBmcm9t
LCB0bykubWF4WCgpOwogfQogCiBib29sIElubGluZVRleHRCb3g6OmNvbnRhaW5zQ2FyZXRPZmZz
ZXQoaW50IG9mZnNldCkgY29uc3QKQEAgLTEyODEsNyArMTI4Miw3IEBAIGJvb2wgSW5saW5lVGV4
dEJveDo6Y29udGFpbnNDYXJldE9mZnNldCgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotVGV4dFJ1
biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiBzdHlsZSwgQnVm
ZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiBjaGFyYWN0ZXJzV2l0aEh5cGhlbikgY29uc3QKK1JlbmRl
clRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSogc3R5
bGUsIGNvbnN0IEZvbnQmIGZvbnQsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogY2hhcmFjdGVy
c1dpdGhIeXBoZW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKIApAQCAtMTI4OSwxMCAr
MTI5MCwxMCBAQCBUZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oCiAgICAg
QVNTRVJUKHRleHRSZW5kZXJlcik7CiAgICAgQVNTRVJUKHRleHRSZW5kZXJlci0+Y2hhcmFjdGVy
cygpKTsKIAotICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCB0ZXh0UmVuZGVyZXIt
PmNoYXJhY3RlcnMoKSArIHN0YXJ0KCksIGxlbigpLCBjaGFyYWN0ZXJzV2l0aEh5cGhlbik7Cisg
ICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQsIHRleHRSZW5kZXJlci0+Y2hh
cmFjdGVycygpICsgc3RhcnQoKSwgbGVuKCksIGNoYXJhY3RlcnNXaXRoSHlwaGVuKTsKIH0KIAot
VGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIEJ1ZmZlckZvckFwcGVuZGlu
Z0h5cGhlbiogY2hhcmFjdGVyc1dpdGhIeXBoZW4pIGNvbnN0CitSZW5kZXJUZXh0UnVuIElubGlu
ZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250
JiBmb250LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgQnVmZmVyRm9yQXBw
ZW5kaW5nSHlwaGVuKiBjaGFyYWN0ZXJzV2l0aEh5cGhlbikgY29uc3QKIHsKICAgICBBU1NFUlQo
c3R5bGUpOwogCkBAIC0xMzAzLDcgKzEzMDQsNyBAQCBUZXh0UnVuIElubGluZVRleHRCb3g6OmNv
bnN0cnVjdFRleHRSdW4oCiAgICAgICAgIGFkanVzdENoYXJhY3RlcnNBbmRMZW5ndGhGb3JIeXBo
ZW4oKmNoYXJhY3RlcnNXaXRoSHlwaGVuLCBzdHlsZSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIAog
ICAgIC8vIEZJWE1FOiBSZW1vdmUgVGV4dFJ1bnMgYWxsLWluLW9uZS1jb25zdHJ1Y3RvciBhbmQg
dXNlIGV4cGxpY2l0IHNldHRlcnMgaGVyZS4KLSAgICByZXR1cm4gVGV4dFJ1bihjaGFyYWN0ZXJz
LCBsZW5ndGgsIHRleHRSZW5kZXJlci0+YWxsb3dUYWJzKCksIHRleHRQb3MoKSwgZXhwYW5zaW9u
KCksIGV4cGFuc2lvbkJlaGF2aW9yKCksIGRpcmVjdGlvbigpLCBtX2Rpck92ZXJyaWRlIHx8IHN0
eWxlLT52aXN1YWxseU9yZGVyZWQoKSk7CisgICAgcmV0dXJuIFJlbmRlclRleHRSdW4odGV4dFJl
bmRlcmVyLCBmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIHRleHRSZW5kZXJlci0+YWxsb3dUYWJz
KCksIHRleHRQb3MoKSwgZXhwYW5zaW9uKCksIGV4cGFuc2lvbkJlaGF2aW9yKCksIGRpcmVjdGlv
bigpLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSk7CiB9CiAKICNp
Zm5kZWYgTkRFQlVHCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94
LmgJKHJldmlzaW9uIDg2NzQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHN0cnVjdCBDb21wb3NpdGlvblVuZGVybGluZTsKIHN0cnVjdCBEb2N1bWVudE1hcmtl
cjsKK2NsYXNzIFJlbmRlclRleHRSdW47CiAKIGNvbnN0IHVuc2lnbmVkIHNob3J0IGNOb1RydW5j
YXRpb24gPSBVU0hSVF9NQVg7CiBjb25zdCB1bnNpZ25lZCBzaG9ydCBjRnVsbFRydW5jYXRpb24g
PSBVU0hSVF9NQVggLSAxOwpAQCAtOTksOCArMTAwLDggQEAgcHJpdmF0ZToKICAgICBpbnQgc2Vs
ZWN0aW9uQm90dG9tKCk7CiAgICAgaW50IHNlbGVjdGlvbkhlaWdodCgpOwogCi0gICAgVGV4dFJ1
biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVu
KiA9IDApIGNvbnN0OwotICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSos
IGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiA9IDAp
IGNvbnN0OworICAgIFJlbmRlclRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSos
IGNvbnN0IEZvbnQmLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4qID0gMCkgY29uc3Q7CisgICAg
UmVuZGVyVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYs
IGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiA9IDAp
IGNvbnN0OwogCiBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJp
ZXMoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNp
b24gODY3NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyUmVwbGljYS5o
IgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRGcmFn
bWVudC5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRSdW4uaCIKICNpbmNsdWRlICJSZW5kZXJUaGVt
ZS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpAQCAt
NDcwNyw3ICs0NzA4LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN0cmlwVHJhaWxpbmdTcGFjZShm
bAogICAgICAgICBSZW5kZXJUZXh0KiB0ID0gdG9SZW5kZXJUZXh0KHRyYWlsaW5nU3BhY2VDaGls
ZCk7CiAgICAgICAgIGNvbnN0IFVDaGFyIHNwYWNlID0gJyAnOwogICAgICAgICBjb25zdCBGb250
JiBmb250ID0gdC0+c3R5bGUoKS0+Zm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0
LWxpbmUuCi0gICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250LndpZHRoKFRleHRSdW4oJnNw
YWNlLCAxKSk7CisgICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250LndpZHRoKFJlbmRlclRl
eHRSdW4odCwgZm9udCwgJnNwYWNlLCAxKSk7CiAgICAgICAgIGlubGluZU1heCAtPSBzcGFjZVdp
ZHRoICsgZm9udC53b3JkU3BhY2luZygpOwogICAgICAgICBpZiAoaW5saW5lTWluID4gaW5saW5l
TWF4KQogICAgICAgICAgICAgaW5saW5lTWluID0gaW5saW5lTWF4OwpAQCAtNjMxNiw3ICs2MzE3
LDcgQEAgaW5saW5lIHZvaWQgUmVuZGVyQmxvY2s6OkZsb2F0aW5nT2JqZWN0cwogICAgICAgICBt
X3JpZ2h0T2JqZWN0c0NvdW50LS07CiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBp
bnQgbGVuZ3RoLCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW5GbGFncyBmbGFncykKK1JlbmRl
clRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5z
aW9uKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1bkZsYWdz
IGZsYWdzKQogewogICAgIEFTU0VSVChzdHlsZSk7CiAKQEAgLTYzMzAsMTIgKzYzMzEsMTIgQEAg
VGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bkFsbAogICAgIH0KIAogICAgIC8v
IEZJWE1FOiBSZW1vdmUgVGV4dFJ1bnMgYWxsLWluLW9uZS1jb25zdHJ1Y3RvciBhbmQgdXNlIGV4
cGxpY2l0IHNldHRlcnMgaGVyZS4KLSAgICByZXR1cm4gVGV4dFJ1bihjaGFyYWN0ZXJzLCBsZW5n
dGgsIGZhbHNlLCAwLCAwLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uLCB0ZXh0RGly
ZWN0aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRlKTsKKyAgICByZXR1cm4gUmVuZGVyVGV4dFJ1bihj
b250ZXh0LCBmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgsIGZhbHNlLCAwLCAwLCBUZXh0UnVuOjpB
bGxvd1RyYWlsaW5nRXhwYW5zaW9uLCB0ZXh0RGlyZWN0aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRl
KTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bkFsbG93VHJhaWxp
bmdFeHBhbnNpb24oY29uc3QgU3RyaW5nJiBzdHJpbmcsIFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4
dFJ1bkZsYWdzIGZsYWdzKQorUmVuZGVyVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bkFsbG93VHJhaWxpbmdFeHBhbnNpb24oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBG
b250JiBmb250LCBjb25zdCBTdHJpbmcmIHN0cmluZywgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0
UnVuRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWls
aW5nRXhwYW5zaW9uKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSwgc3R5bGUs
IGZsYWdzKTsKKyAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bkFsbG93VHJhaWxpbmdFeHBhbnNp
b24oY29udGV4dCwgZm9udCwgc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpLCBz
dHlsZSwgZmxhZ3MpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDg2NzQyKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDYgKzQxLDcgQEAg
Y2xhc3MgTGluZUxheW91dFN0YXRlOwogY2xhc3MgTGluZVdpZHRoOwogY2xhc3MgUmVuZGVySW5s
aW5lOwogY2xhc3MgUmVuZGVyVGV4dDsKK2NsYXNzIFJlbmRlclRleHRSdW47CiAKIHN0cnVjdCBC
aWRpUnVuOwogc3RydWN0IFBhaW50SW5mbzsKQEAgLTE2OSw4ICsxNzAsOCBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgc3RhdGljIHZvaWQgYXBwZW5kUnVuc0Zvck9iamVjdChCaWRpUnVuTGlzdDxCaWRp
UnVuPiYsIGludCBzdGFydCwgaW50IGVuZCwgUmVuZGVyT2JqZWN0KiwgSW5saW5lQmlkaVJlc29s
dmVyJik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuQWxsb3dUcmFpbGlu
Z0V4cGFuc2lvbihjb25zdCBTdHJpbmcmLCBSZW5kZXJTdHlsZSosIFRleHRSdW5GbGFncyA9IERl
ZmF1bHRUZXh0UnVuRmxhZ3MpOwotICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5B
bGxvd1RyYWlsaW5nRXhwYW5zaW9uKGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgUmVuZGVyU3R5
bGUqLCBUZXh0UnVuRmxhZ3MgPSBEZWZhdWx0VGV4dFJ1bkZsYWdzKTsKKyAgICBzdGF0aWMgUmVu
ZGVyVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuQWxsb3dUcmFpbGluZ0V4cGFuc2lvbihSZW5kZXJP
YmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBTdHJpbmcmLCBSZW5kZXJTdHlsZSos
IFRleHRSdW5GbGFncyA9IERlZmF1bHRUZXh0UnVuRmxhZ3MpOworICAgIHN0YXRpYyBSZW5kZXJU
ZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKFJlbmRlck9iamVj
dCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgUmVuZGVy
U3R5bGUqLCBUZXh0UnVuRmxhZ3MgPSBEZWZhdWx0VGV4dFJ1bkZsYWdzKTsKIAogICAgIENvbHVt
bkluZm8qIGNvbHVtbkluZm8oKSBjb25zdDsKICAgICBpbnQgY29sdW1uR2FwKCkgY29uc3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcAkocmV2aXNpb24gODY3NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2tMaW5lTGF5b3V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTAgKzMzLDEwIEBA
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgi
CiAjaW5jbHVkZSAiUmVuZGVyUnVieVJ1bi5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRSdW4uaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRl
ICJUZXh0QnJlYWtJdGVyYXRvci5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJU
cmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCIKICNpbmNsdWRlICJWZXJ0aWNhbFBvc2l0aW9u
Q2FjaGUuaCIKICNpbmNsdWRlICJicmVha19saW5lcy5oIgpAQCAtNDgyLDcgKzQ4Miw4IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JUZXgKICAgICBpbnQgaHlwaGVuV2lk
dGggPSAwOwogICAgIGlmIChzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4ocnVuLT5tX2JveCkt
Pmhhc0h5cGhlbigpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHlwaGVuU3RyaW5n
ID0gcmVuZGVyZXItPnN0eWxlKCktPmh5cGhlblN0cmluZygpOwotICAgICAgICBoeXBoZW5XaWR0
aCA9IHJlbmRlcmVyLT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+Zm9udCgpLndpZHRo
KFRleHRSdW4oaHlwaGVuU3RyaW5nLmNoYXJhY3RlcnMoKSwgaHlwaGVuU3RyaW5nLmxlbmd0aCgp
KSk7CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSByZW5kZXJlci0+c3R5bGUobGluZUluZm8u
aXNGaXJzdExpbmUoKSktPmZvbnQoKTsKKyAgICAgICAgaHlwaGVuV2lkdGggPSBmb250LndpZHRo
KFJlbmRlclRleHRSdW4ocmVuZGVyZXIsIGZvbnQsIGh5cGhlblN0cmluZy5jaGFyYWN0ZXJzKCks
IGh5cGhlblN0cmluZy5sZW5ndGgoKSkpOwogICAgIH0KICAgICBydW4tPm1fYm94LT5zZXRMb2dp
Y2FsV2lkdGgocmVuZGVyZXItPndpZHRoKHJ1bi0+bV9zdGFydCwgcnVuLT5tX3N0b3AgLSBydW4t
Pm1fc3RhcnQsIHhQb3MsIGxpbmVJbmZvLmlzRmlyc3RMaW5lKCksICZmYWxsYmFja0ZvbnRzLCAm
Z2x5cGhPdmVyZmxvdykgKyBoeXBoZW5XaWR0aCk7CiAgICAgaWYgKCFmYWxsYmFja0ZvbnRzLmlz
RW1wdHkoKSkgewpAQCAtMTU3Niw3ICsxNTc3LDcgQEAgc3RhdGljIGlubGluZSBmbG9hdCB0ZXh0
V2lkdGgoUmVuZGVyVGV4dAogewogICAgIGlmIChpc0ZpeGVkUGl0Y2ggfHwgKCFmcm9tICYmIGxl
biA9PSB0ZXh0LT50ZXh0TGVuZ3RoKCkpIHx8IHRleHQtPnN0eWxlKCktPmhhc1RleHRDb21iaW5l
KCkpCiAgICAgICAgIHJldHVybiB0ZXh0LT53aWR0aChmcm9tLCBsZW4sIGZvbnQsIHhQb3MpOwot
ICAgIHJldHVybiBmb250LndpZHRoKFRleHRSdW4odGV4dC0+Y2hhcmFjdGVycygpICsgZnJvbSwg
bGVuLCAhY29sbGFwc2VXaGl0ZVNwYWNlLCB4UG9zKSk7CisgICAgcmV0dXJuIGZvbnQud2lkdGgo
UmVuZGVyVGV4dFJ1bih0ZXh0LCBmb250LCB0ZXh0LT5jaGFyYWN0ZXJzKCkgKyBmcm9tLCBsZW4s
ICFjb2xsYXBzZVdoaXRlU3BhY2UsIHhQb3MpKTsKIH0KIAogc3RhdGljIHZvaWQgdHJ5SHlwaGVu
YXRpbmcoUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgQXRvbWljU3Ry
aW5nJiBsb2NhbGVJZGVudGlmaWVyLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgaW50IG1pbmlt
dW1TdWZmaXhMZW5ndGgsIGludCBsYXN0U3BhY2UsIGludCBwb3MsIGZsb2F0IHhQb3MsIGludCBh
dmFpbGFibGVXaWR0aCwgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNl
LCBpbnQgbGFzdFNwYWNlV29yZFNwYWNpbmcsIElubGluZUl0ZXJhdG9yJiBsaW5lQnJlYWssIGlu
dCBuZXh0QnJlYWthYmxlLCBib29sJiBoeXBoZW5hdGVkKQpAQCAtMTU5Miw3ICsxNTkzLDcgQEAg
c3RhdGljIHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCogdAogICAgICAgICByZXR1cm47
CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGh5cGhlblN0cmluZyA9IHRleHQtPnN0eWxlKCkt
Pmh5cGhlblN0cmluZygpOwotICAgIGludCBoeXBoZW5XaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1
bihoeXBoZW5TdHJpbmcuY2hhcmFjdGVycygpLCBoeXBoZW5TdHJpbmcubGVuZ3RoKCkpKTsKKyAg
ICBpbnQgaHlwaGVuV2lkdGggPSBmb250LndpZHRoKFJlbmRlclRleHRSdW4odGV4dCwgZm9udCwg
aHlwaGVuU3RyaW5nLmNoYXJhY3RlcnMoKSwgaHlwaGVuU3RyaW5nLmxlbmd0aCgpKSk7CiAKICAg
ICBmbG9hdCBtYXhQcmVmaXhXaWR0aCA9IGF2YWlsYWJsZVdpZHRoIC0geFBvcyAtIGh5cGhlbldp
ZHRoIC0gbGFzdFNwYWNlV29yZFNwYWNpbmc7CiAgICAgLy8gSWYgdGhlIG1heGltdW0gd2lkdGgg
YXZhaWxhYmxlIGZvciB0aGUgcHJlZml4IGJlZm9yZSB0aGUgaHlwaGVuIGlzIHNtYWxsLCB0aGVu
IGl0IGlzIHZlcnkgdW5saWtlbHkKQEAgLTE2MDAsNyArMTYwMSw3IEBAIHN0YXRpYyB2b2lkIHRy
eUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHQKICAgICBpZiAobWF4UHJlZml4V2lkdGggPD0gZm9u
dC5waXhlbFNpemUoKSAqIDUgLyA0KQogICAgICAgICByZXR1cm47CiAKLSAgICB1bnNpZ25lZCBw
cmVmaXhMZW5ndGggPSBmb250Lm9mZnNldEZvclBvc2l0aW9uKFRleHRSdW4odGV4dC0+Y2hhcmFj
dGVycygpICsgbGFzdFNwYWNlLCBwb3MgLSBsYXN0U3BhY2UsICFjb2xsYXBzZVdoaXRlU3BhY2Us
IHhQb3MgKyBsYXN0U3BhY2VXb3JkU3BhY2luZyksIG1heFByZWZpeFdpZHRoLCBmYWxzZSk7Cisg
ICAgdW5zaWduZWQgcHJlZml4TGVuZ3RoID0gZm9udC5vZmZzZXRGb3JQb3NpdGlvbihSZW5kZXJU
ZXh0UnVuKHRleHQsIGZvbnQsIHRleHQtPmNoYXJhY3RlcnMoKSArIGxhc3RTcGFjZSwgcG9zIC0g
bGFzdFNwYWNlLCAhY29sbGFwc2VXaGl0ZVNwYWNlLCB4UG9zICsgbGFzdFNwYWNlV29yZFNwYWNp
bmcpLCBtYXhQcmVmaXhXaWR0aCwgZmFsc2UpOwogICAgIGlmIChwcmVmaXhMZW5ndGggPCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obWluaW11bVByZWZpeExlbmd0aCkpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMjAzOCw3ICsyMDM5LDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxvY2s6OkxpbmVC
cmVha2VyOgogCiAgICAgICAgICAgICAvLyBOb24temVybyBvbmx5IHdoZW4ga2VybmluZyBpcyBl
bmFibGVkLCBpbiB3aGljaCBjYXNlIHdlIG1lYXN1cmUgd29yZHMgd2l0aCB0aGVpciB0cmFpbGlu
ZwogICAgICAgICAgICAgLy8gc3BhY2UsIHRoZW4gc3VidHJhY3QgaXRzIHdpZHRoLgotICAgICAg
ICAgICAgZmxvYXQgd29yZFRyYWlsaW5nU3BhY2VXaWR0aCA9IGYudHlwZXNldHRpbmdGZWF0dXJl
cygpICYgS2VybmluZyA/IGYud2lkdGgoVGV4dFJ1bigmc3BhY2UsIDEpKSArIHdvcmRTcGFjaW5n
IDogMDsKKyAgICAgICAgICAgIGZsb2F0IHdvcmRUcmFpbGluZ1NwYWNlV2lkdGggPSBmLnR5cGVz
ZXR0aW5nRmVhdHVyZXMoKSAmIEtlcm5pbmcgPyBmLndpZHRoKFJlbmRlclRleHRSdW4odCwgZiwg
JnNwYWNlLCAxKSkgKyB3b3JkU3BhY2luZyA6IDA7CiAKICAgICAgICAgICAgIGZsb2F0IHdyYXBX
ID0gd2lkdGgudW5jb21taXR0ZWRXaWR0aCgpICsgaW5saW5lTG9naWNhbFdpZHRoKGN1cnJlbnQu
bV9vYmosICFhcHBsaWVkU3RhcnRXaWR0aCwgdHJ1ZSk7CiAgICAgICAgICAgICBmbG9hdCBjaGFy
V2lkdGggPSAwOwpAQCAtMjA2Nyw3ICsyMDY4LDcgQEAgSW5saW5lSXRlcmF0b3IgUmVuZGVyQmxv
Y2s6OkxpbmVCcmVha2VyOgogCiAgICAgICAgICAgICAgICAgaWYgKGMgPT0gc29mdEh5cGhlbiAm
JiBhdXRvV3JhcCAmJiAhaHlwaGVuV2lkdGggJiYgc3R5bGUtPmh5cGhlbnMoKSAhPSBIeXBoZW5z
Tm9uZSkgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGh5cGhlblN0
cmluZyA9IHN0eWxlLT5oeXBoZW5TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAgaHlwaGVu
V2lkdGggPSBmLndpZHRoKFRleHRSdW4oaHlwaGVuU3RyaW5nLmNoYXJhY3RlcnMoKSwgaHlwaGVu
U3RyaW5nLmxlbmd0aCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGh5cGhlbldpZHRoID0gZi53
aWR0aChSZW5kZXJUZXh0UnVuKHQsIGYsIGh5cGhlblN0cmluZy5jaGFyYWN0ZXJzKCksIGh5cGhl
blN0cmluZy5sZW5ndGgoKSkpOwogICAgICAgICAgICAgICAgICAgICB3aWR0aC5hZGRVbmNvbW1p
dHRlZFdpZHRoKGh5cGhlbldpZHRoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTIzOTcsMTIg
KzIzOTgsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2hlY2tMaW5lc0ZvclRleHRPdmVyZgogewog
ICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggb2YgdGhlIGVsbGlwc2lzIHVzaW5nIHRoZSBjdXJy
ZW50IGZvbnQuCiAgICAgLy8gRklYTUU6IENTUzMgc2F5cyB0aGlzIGlzIGNvbmZpZ3VyYWJsZSwg
YWxzbyBuZWVkIHRvIHVzZSAweDAwMkUgKEZVTEwgU1RPUCkgaWYgaG9yaXpvbnRhbCBlbGxpcHNp
cyBpcyAibm90IHJlbmRlcmFibGUiCi0gICAgVGV4dFJ1biBlbGxpcHNpc1J1bigmaG9yaXpvbnRh
bEVsbGlwc2lzLCAxKTsKKyAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBlbGxpcHNpc1N0ciwgKCZob3Jp
em9udGFsRWxsaXBzaXMsIDEpKTsKICAgICBjb25zdCBGb250JiBmaXJzdExpbmVGb250ID0gZmly
c3RMaW5lU3R5bGUoKS0+Zm9udCgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5m
b250KCk7Ci0gICAgaW50IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVGb250Lndp
ZHRoKGVsbGlwc2lzUnVuKTsKLSAgICBpbnQgZWxsaXBzaXNXaWR0aCA9IChmb250ID09IGZpcnN0
TGluZUZvbnQpID8gZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA6IGZvbnQud2lkdGgoZWxsaXBzaXNS
dW4pOworICAgIGludCBmaXJzdExpbmVFbGxpcHNpc1dpZHRoID0gZmlyc3RMaW5lRm9udC53aWR0
aChSZW5kZXJUZXh0UnVuKHRoaXMsIGZpcnN0TGluZUZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMs
IDEpKTsKKyAgICBpbnQgZWxsaXBzaXNXaWR0aCA9IChmb250ID09IGZpcnN0TGluZUZvbnQpID8g
Zmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA6IGZvbnQud2lkdGgoUmVuZGVyVGV4dFJ1bih0aGlzLCBm
b250LCAmaG9yaXpvbnRhbEVsbGlwc2lzLCAxKSk7CiAKICAgICAvLyBGb3IgTFRSIHRleHQgdHJ1
bmNhdGlvbiwgd2Ugd2FudCB0byBnZXQgdGhlIHJpZ2h0IGVkZ2Ugb2Ygb3VyIHBhZGRpbmcgYm94
LCBhbmQgdGhlbiB3ZSB3YW50IHRvIHNlZQogICAgIC8vIGlmIHRoZSByaWdodCBlZGdlIG9mIGEg
bGluZSBib3ggZXhjZWVkcyB0aGF0LiAgRm9yIFJUTCwgd2UgdXNlIHRoZSBsZWZ0IGVkZ2Ugb2Yg
dGhlIHBhZGRpbmcgYm94IGFuZApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvbWJpbmVUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ29tYmluZVRleHQuY3BwCShyZXZpc2lvbiA4Njc0MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcg
KzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJDb21iaW5lVGV4
dC5oIgogCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRSdW4uaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgUmVuZGVyQ29t
YmluZVRleHQ6OmNvbWJpbmVUZXh0KCkKICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVGV4dFJ1biBydW4gPSBUZXh0UnVu
KFN0cmluZyh0ZXh0KCkpKTsKKyAgICBSZW5kZXJUZXh0UnVuIHJ1bih0aGlzLCBvcmlnaW5hbEZv
bnQoKSwgU3RyaW5nKHRleHQoKSkpOwogICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjcmlwdGlvbiA9
IG9yaWdpbmFsRm9udCgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGZsb2F0IGVtV2lkdGggPSBk
ZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIHRleHRDb21iaW5lTWFyZ2luOwogICAgIGJvb2wg
c2hvdWxkVXBkYXRlRm9udCA9IGZhbHNlOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCShyZXZpc2lvbiA4Njc0MikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDkgQEAKICNpbmNsdWRlICJQYWludEluZm8uaCIK
ICNpbmNsdWRlICJSZW5kZXJCdXR0b24uaCIKICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5j
bHVkZSAiUmVuZGVyVGV4dFJ1bi5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDxtYXRoLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0yMjEsNyArMjIxLDggQEAgdm9pZCBSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogCiAgICAgaWYgKHBhaW50SW5mby5waGFzZSA9
PSBQYWludFBoYXNlRm9yZWdyb3VuZCkgewogICAgICAgICBjb25zdCBTdHJpbmcmIGRpc3BsYXll
ZEZpbGVuYW1lID0gZmlsZVRleHRWYWx1ZSgpOwotICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBj
b25zdHJ1Y3RUZXh0UnVuQWxsb3dUcmFpbGluZ0V4cGFuc2lvbihkaXNwbGF5ZWRGaWxlbmFtZSwg
c3R5bGUoKSwgUmVzcGVjdERpcmVjdGlvbiB8IFJlc3BlY3REaXJlY3Rpb25PdmVycmlkZSk7Cisg
ICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CisgICAgICAgIFJlbmRl
clRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9u
KHRoaXMsIGZvbnQsIGRpc3BsYXllZEZpbGVuYW1lLCBzdHlsZSgpLCBSZXNwZWN0RGlyZWN0aW9u
IHwgUmVzcGVjdERpcmVjdGlvbk92ZXJyaWRlKTsKIAogICAgICAgICAvLyBEZXRlcm1pbmUgd2hl
cmUgdGhlIGZpbGVuYW1lIHNob3VsZCBiZSBwbGFjZWQKICAgICAgICAgaW50IGNvbnRlbnRMZWZ0
ID0gdHggKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwpAQCAtMjMxLDcgKzIzMiw3IEBA
IHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWMKICAgICAgICAgaWYgKHN0
eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIHRleHRYID0gY29u
dGVudExlZnQgKyBidXR0b25BbmRJY29uV2lkdGg7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHRleHRYID0gY29udGVudExlZnQgKyBjb250ZW50V2lkdGgoKSAtIGJ1dHRvbkFuZEljb25XaWR0
aCAtIHN0eWxlKCktPmZvbnQoKS53aWR0aCh0ZXh0UnVuKTsKKyAgICAgICAgICAgIHRleHRYID0g
Y29udGVudExlZnQgKyBjb250ZW50V2lkdGgoKSAtIGJ1dHRvbkFuZEljb25XaWR0aCAtIGZvbnQu
d2lkdGgodGV4dFJ1bik7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gbWF0Y2ggdGhlIGJ1dHRvbidz
IGJhc2VsaW5lCiAgICAgICAgIFJlbmRlckJ1dHRvbiogYnV0dG9uUmVuZGVyZXIgPSB0b1JlbmRl
ckJ1dHRvbihtX2J1dHRvbi0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGludCB0ZXh0WSA9IGJ1dHRv
blJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpLnkoKQpAQCAtMjQxLDcgKzI0Miw3
IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWMKICAgICAgICAgcGFp
bnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgIAog
ICAgICAgICAvLyBEcmF3IHRoZSBmaWxlbmFtZQotICAgICAgICBwYWludEluZm8uY29udGV4dC0+
ZHJhd0JpZGlUZXh0KHN0eWxlKCktPmZvbnQoKSwgdGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRl
eHRZKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4
dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobV9m
aWxlQ2hvb3Nlci0+aWNvbigpKSB7CiAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hlcmUgdGhl
IGljb24gc2hvdWxkIGJlIHBsYWNlZApAQCAtMjcxLDEzICsyNzIsMTQgQEAgdm9pZCBSZW5kZXJG
aWxlVXBsb2FkQ29udHJvbDo6Y29tcHV0ZVByZQogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRo
aXMtPnN0eWxlKCk7CiAgICAgQVNTRVJUKHN0eWxlKTsKIAorICAgIGNvbnN0IEZvbnQmIGZvbnQg
PSBzdHlsZS0+Zm9udCgpOwogICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5
bGUtPndpZHRoKCkudmFsdWUoKSA+IDApCiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdp
ZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBjb21wdXRlQ29udGVudEJveExvZ2lj
YWxXaWR0aChzdHlsZS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8g
RmlndXJlIG91dCBob3cgYmlnIHRoZSBmaWxlbmFtZSBzcGFjZSBuZWVkcyB0byBiZSBmb3IgYSBn
aXZlbiBudW1iZXIgb2YgY2hhcmFjdGVycwogICAgICAgICAvLyAodXNpbmcgIjAiIGFzIHRoZSBu
b21pbmFsIGNoYXJhY3RlcikuCiAgICAgICAgIGNvbnN0IFVDaGFyIGNoID0gJzAnOwotICAgICAg
ICBmbG9hdCBjaGFyV2lkdGggPSBzdHlsZS0+Zm9udCgpLndpZHRoKGNvbnN0cnVjdFRleHRSdW5B
bGxvd1RyYWlsaW5nRXhwYW5zaW9uKFN0cmluZygmY2gsIDEpLCBzdHlsZSkpOworICAgICAgICBm
bG9hdCBjaGFyV2lkdGggPSBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWlsaW5n
RXhwYW5zaW9uKHRoaXMsIGZvbnQsIFN0cmluZygmY2gsIDEpLCBzdHlsZSkpOwogICAgICAgICBt
X21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IChpbnQpY2VpbGYoY2hhcldpZHRoICogZGVmYXVs
dFdpZHRoTnVtQ2hhcnMpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiA4Njc0MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDggKzI2LDggQEAKICNpbmNsdWRlICJSZW5kZXJGbGV4aWJsZUJveC5oIgogCiAjaW5jbHVk
ZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0UnVuLmgiCiAjaW5jbHVkZSAi
UmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIApAQCAt
OTAyLDEwICs5MDIsMTAgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6YXBwbHlMaW5lQ2xhbXAo
RgogICAgICAgICBpbnQgdG90YWxXaWR0aDsKICAgICAgICAgSW5saW5lQm94KiBhbmNob3JCb3gg
PSBsYXN0TGluZS0+bGFzdENoaWxkKCk7CiAgICAgICAgIGlmIChhbmNob3JCb3ggJiYgYW5jaG9y
Qm94LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5pc0xpbmsoKSkKLSAgICAgICAgICAgIHRvdGFsV2lk
dGggPSBhbmNob3JCb3gtPmxvZ2ljYWxXaWR0aCgpICsgZm9udC53aWR0aChUZXh0UnVuKGVsbGlw
c2lzQW5kU3BhY2UsIDIpKTsKKyAgICAgICAgICAgIHRvdGFsV2lkdGggPSBhbmNob3JCb3gtPmxv
Z2ljYWxXaWR0aCgpICsgZm9udC53aWR0aChSZW5kZXJUZXh0UnVuKHRoaXMsIGZvbnQsIGVsbGlw
c2lzQW5kU3BhY2UsIDIpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBhbmNob3JCb3gg
PSAwOwotICAgICAgICAgICAgdG90YWxXaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bigmaG9yaXpv
bnRhbEVsbGlwc2lzLCAxKSk7CisgICAgICAgICAgICB0b3RhbFdpZHRoID0gZm9udC53aWR0aChS
ZW5kZXJUZXh0UnVuKHRoaXMsIGZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMsIDEpKTsKICAgICAg
ICAgfQogCiAgICAgICAgIC8vIFNlZSBpZiB0aGlzIHdpZHRoIGNhbiBiZSBhY2NvbW1vZGF0ZWQg
b24gdGhlIGxhc3QgdmlzaWJsZSBsaW5lCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDg2NzQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsOCArMzgsOCBAQAogI2lu
Y2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0u
aD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTEwNCw3ICsxMDQsNyBAQCBib29sIFJlbmRl
ckltYWdlOjpzZXRJbWFnZVNpemVGb3JBbHRUZXh0CiAgICAgLy8gd2UgaGF2ZSBhbiBhbHQgYW5k
IHRoZSB1c2VyIG1lYW50IGl0IChpdHMgbm90IGEgdGV4dCB3ZSBpbnZlbnRlZCkKICAgICBpZiAo
IW1fYWx0VGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxl
KCktPmZvbnQoKTsKLSAgICAgICAgSW50U2l6ZSB0ZXh0U2l6ZShtaW4oZm9udC53aWR0aChUZXh0
UnVuKG1fYWx0VGV4dCkpLCBtYXhBbHRUZXh0V2lkdGgpLCBtaW4oZm9udC5mb250TWV0cmljcygp
LmhlaWdodCgpLCBtYXhBbHRUZXh0SGVpZ2h0KSk7CisgICAgICAgIEludFNpemUgdGV4dFNpemUo
bWluKGZvbnQud2lkdGgoUmVuZGVyVGV4dFJ1bih0aGlzLCBmb250LCBtX2FsdFRleHQpKSwgbWF4
QWx0VGV4dFdpZHRoKSwgbWluKGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSwgbWF4QWx0VGV4
dEhlaWdodCkpOwogICAgICAgICBpbWFnZVNpemUgPSBpbWFnZVNpemUuZXhwYW5kZWRUbyh0ZXh0
U2l6ZSk7CiAgICAgfQogCkBAIC0yODYsNyArMjg2LDcgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFp
bnRSZXBsYWNlZChQYWludEluZgogCiAgICAgICAgICAgICAgICAgLy8gT25seSBkcmF3IHRoZSBh
bHQgdGV4dCBpZiBpdCdsbCBmaXQgd2l0aGluIHRoZSBjb250ZW50IGJveCwKICAgICAgICAgICAg
ICAgICAvLyBhbmQgb25seSBpZiBpdCBmaXRzIGFib3ZlIHRoZSBlcnJvciBpbWFnZS4KLSAgICAg
ICAgICAgICAgICBUZXh0UnVuIHRleHRSdW4odGV4dCk7CisgICAgICAgICAgICAgICAgUmVuZGVy
VGV4dFJ1biB0ZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQpOwogICAgICAgICAgICAgICAgIGludCB0
ZXh0V2lkdGggPSBmb250LndpZHRoKHRleHRSdW4pOwogICAgICAgICAgICAgICAgIGlmIChlcnJv
clBpY3R1cmVEcmF3bikgewogICAgICAgICAgICAgICAgICAgICBpZiAodXNhYmxlV2lkdGggPj0g
dGV4dFdpZHRoICYmIGZvbnRNZXRyaWNzLmhlaWdodCgpIDw9IGltYWdlWSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDg2NzQyKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01MCwxMyArNTAsMTMgQEAKICNpbmNsdWRlICJQYWludEluZm8uaCIKICNpbmNsdWRl
ICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclNjcm9sbGJhci5oIgorI2luY2x1ZGUg
IlJlbmRlclRleHRSdW4uaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXIuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJU
aGVtZS5oIgogI2luY2x1ZGUgIlNlbGVjdEVsZW1lbnQuaCIKICNpbmNsdWRlICJTcGF0aWFsTmF2
aWdhdGlvbi5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDxtYXRoLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC0xMjAsNyArMTIwLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94
Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAKICAgICAgICAgICAgIGlmICghdGV4dC5pc0VtcHR5KCkp
IHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExUUj8gQ2Fu
J3QgdGV4dCBkaXJlY3Rpb24gYWZmZWN0IHRoZSB3aWR0aD8KLSAgICAgICAgICAgICAgICBmbG9h
dCB0ZXh0V2lkdGggPSBpdGVtRm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuQWxsb3dUcmFpbGlu
Z0V4cGFuc2lvbih0ZXh0LCBzdHlsZSgpKSk7CisgICAgICAgICAgICAgICAgZmxvYXQgdGV4dFdp
ZHRoID0gaXRlbUZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bkFsbG93VHJhaWxpbmdFeHBhbnNp
b24odGhpcywgaXRlbUZvbnQsIHRleHQsIHN0eWxlKCkpKTsKICAgICAgICAgICAgICAgICB3aWR0
aCA9IG1heCh3aWR0aCwgdGV4dFdpZHRoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2
aXNpb24gODY3NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDggQEAKICNpbmNsdWRlICJHcmFwaGlj
c0NvbnRleHQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxp
c3RJdGVtLmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dFJ1bi5oIgogI2luY2x1ZGUgIlJlbmRlclZp
ZXcuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFj
dGVyTmFtZXMuaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTEyNTMsNyArMTI1Myw4IEBA
IHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBpZiAobV90ZXh0
LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVGV4dFJ1biB0ZXh0UnVuKG1fdGV4
dCk7CisgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKKyAgICBSZW5kZXJU
ZXh0UnVuIHRleHRSdW4odGhpcywgZm9udCwgbV90ZXh0KTsKIAogICAgIEdyYXBoaWNzQ29udGV4
dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCwgZmFsc2UpOwogICAgIGlmICghc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkgewpAQCAtMTI2OSw3ICsxMjcwLDcgQEAgdm9p
ZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgIEludFBvaW50IHRleHRP
cmlnaW4gPSBJbnRQb2ludChtYXJrZXIueCgpLCBtYXJrZXIueSgpICsgc3R5bGUoKS0+Zm9udE1l
dHJpY3MoKS5hc2NlbnQoKSk7CiAKICAgICBpZiAodHlwZSA9PSBBc3Rlcmlza3MgfHwgdHlwZSA9
PSBGb290bm90ZXMpCi0gICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KHN0eWxlKCktPmZvbnQoKSwg
dGV4dFJ1biwgdGV4dE9yaWdpbik7CisgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIHRl
eHRSdW4sIHRleHRPcmlnaW4pOwogICAgIGVsc2UgewogICAgICAgICAvLyBUZXh0IGlzIG5vdCBh
cmJpdHJhcnkuIFdlIGNhbiBqdWRnZSB3aGV0aGVyIGl0J3MgUlRMIGZyb20gdGhlIGZpcnN0IGNo
YXJhY3RlciwKICAgICAgICAgLy8gYW5kIHdlIG9ubHkgbmVlZCB0byBoYW5kbGUgdGhlIGRpcmVj
dGlvbiBSaWdodFRvTGVmdCBmb3Igbm93LgpAQCAtMTI4MCwyMiArMTI4MSwyMSBAQCB2b2lkIFJl
bmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgICAgICAgICByZXZlcnNlZFRl
eHQuZ3JvdyhsZW5ndGgpOwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7
ICsraSkKICAgICAgICAgICAgICAgICByZXZlcnNlZFRleHRbbGVuZ3RoIC0gaSAtIDFdID0gbV90
ZXh0W2ldOwotICAgICAgICAgICAgdGV4dFJ1biA9IFRleHRSdW4ocmV2ZXJzZWRUZXh0LmRhdGEo
KSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIHRleHRSdW4uc2V0VGV4dChyZXZlcnNlZFRleHQuZGF0
YSgpLCBsZW5ndGgpOwogICAgICAgICB9CiAKLSAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0
eWxlKCktPmZvbnQoKTsKICAgICAgICAgY29uc3QgVUNoYXIgc3VmZml4ID0gbGlzdE1hcmtlclN1
ZmZpeCh0eXBlLCBtX2xpc3RJdGVtLT52YWx1ZSgpKTsKICAgICAgICAgaWYgKHN0eWxlKCktPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSkgewogICAgICAgICAgICAgaW50IHdpZHRoID0gZm9udC53
aWR0aCh0ZXh0UnVuKTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KHN0eWxlKCktPmZv
bnQoKSwgdGV4dFJ1biwgdGV4dE9yaWdpbik7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGV4
dChmb250LCB0ZXh0UnVuLCB0ZXh0T3JpZ2luKTsKICAgICAgICAgICAgIFVDaGFyIHN1ZmZpeFNw
YWNlWzJdID0geyBzdWZmaXgsICcgJyB9OwotICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQo
c3R5bGUoKS0+Zm9udCgpLCBUZXh0UnVuKHN1ZmZpeFNwYWNlLCAyKSwgdGV4dE9yaWdpbiArIElu
dFNpemUod2lkdGgsIDApKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIFJl
bmRlclRleHRSdW4odGhpcywgZm9udCwgc3VmZml4U3BhY2UsIDIpLCB0ZXh0T3JpZ2luICsgSW50
U2l6ZSh3aWR0aCwgMCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgVUNoYXIgc3Bh
Y2VTdWZmaXhbMl0gPSB7ICcgJywgc3VmZml4IH07Ci0gICAgICAgICAgICBUZXh0UnVuIHNwYWNl
U3VmZml4UnVuKHNwYWNlU3VmZml4LCAyKTsKKyAgICAgICAgICAgIFJlbmRlclRleHRSdW4gc3Bh
Y2VTdWZmaXhSdW4odGhpcywgZm9udCwgc3BhY2VTdWZmaXgsIDIpOwogICAgICAgICAgICAgaW50
IHdpZHRoID0gZm9udC53aWR0aChzcGFjZVN1ZmZpeFJ1bik7Ci0gICAgICAgICAgICBjb250ZXh0
LT5kcmF3VGV4dChzdHlsZSgpLT5mb250KCksIHNwYWNlU3VmZml4UnVuLCB0ZXh0T3JpZ2luKTsK
LSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KHN0eWxlKCktPmZvbnQoKSwgdGV4dFJ1biwg
dGV4dE9yaWdpbiArIEludFNpemUod2lkdGgsIDApKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRy
YXdUZXh0KGZvbnQsIHNwYWNlU3VmZml4UnVuLCB0ZXh0T3JpZ2luKTsKKyAgICAgICAgICAgIGNv
bnRleHQtPmRyYXdUZXh0KGZvbnQsIHRleHRSdW4sIHRleHRPcmlnaW4gKyBJbnRTaXplKHdpZHRo
LCAwKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0xNDU1LDcgKzE0NTUsNyBAQCB2b2lkIFJl
bmRlckxpc3RNYXJrZXI6OmNvbXB1dGVQcmVmZXJyZWRMCiAgICAgICAgICAgICBlbHNlIHsKICAg
ICAgICAgICAgICAgICBpbnQgaXRlbVdpZHRoID0gZm9udC53aWR0aChtX3RleHQpOwogICAgICAg
ICAgICAgICAgIFVDaGFyIHN1ZmZpeFNwYWNlWzJdID0geyBsaXN0TWFya2VyU3VmZml4KHR5cGUs
IG1fbGlzdEl0ZW0tPnZhbHVlKCkpLCAnICcgfTsKLSAgICAgICAgICAgICAgICBpbnQgc3VmZml4
U3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihzdWZmaXhTcGFjZSwgMikpOworICAgICAg
ICAgICAgICAgIGludCBzdWZmaXhTcGFjZVdpZHRoID0gZm9udC53aWR0aChSZW5kZXJUZXh0UnVu
KHRoaXMsIGZvbnQsIHN1ZmZpeFNwYWNlLCAyKSk7CiAgICAgICAgICAgICAgICAgbG9naWNhbFdp
ZHRoID0gaXRlbVdpZHRoICsgc3VmZml4U3BhY2VXaWR0aDsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtMTY3OCw3ICsxNjc4LDcgQEAgSW50UmVjdCBSZW5kZXJMaXN0TWFy
a2VyOjpnZXRSZWxhdGl2ZU1hcgogICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxl
KCktPmZvbnQoKTsKICAgICAgICAgICAgIGludCBpdGVtV2lkdGggPSBmb250LndpZHRoKG1fdGV4
dCk7CiAgICAgICAgICAgICBVQ2hhciBzdWZmaXhTcGFjZVsyXSA9IHsgbGlzdE1hcmtlclN1ZmZp
eCh0eXBlLCBtX2xpc3RJdGVtLT52YWx1ZSgpKSwgJyAnIH07Ci0gICAgICAgICAgICBpbnQgc3Vm
Zml4U3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihzdWZmaXhTcGFjZSwgMikpOworICAg
ICAgICAgICAgaW50IHN1ZmZpeFNwYWNlV2lkdGggPSBmb250LndpZHRoKFJlbmRlclRleHRSdW4o
dGhpcywgZm9udCwgc3VmZml4U3BhY2UsIDIpKTsKICAgICAgICAgICAgIHJlbGF0aXZlUmVjdCA9
IEludFJlY3QoMCwgMCwgaXRlbVdpZHRoICsgc3VmZml4U3BhY2VXaWR0aCwgZm9udC5mb250TWV0
cmljcygpLmhlaWdodCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDg2NzQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsMTEgQEAKICNp
bmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlckNvbWJpbmVUZXh0LmgiCiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0UnVuLmgiCiAjaW5j
bHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0QnJl
YWtJdGVyYXRvci5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKLSNpbmNsdWRl
ICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiYnJl
YWtfbGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CkBAIC02MzEsNyArNjMx
LDcgQEAgQUxXQVlTX0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aEZybwogICAgICAgICBy
ZXR1cm4gdzsKICAgICB9CiAKLSAgICByZXR1cm4gZi53aWR0aChUZXh0UnVuKHRleHQoKS0+Y2hh
cmFjdGVycygpICsgc3RhcnQsIGxlbiwgYWxsb3dUYWJzKCksIHhQb3MpLCBmYWxsYmFja0ZvbnRz
LCBnbHlwaE92ZXJmbG93KTsKKyAgICByZXR1cm4gZi53aWR0aChSZW5kZXJUZXh0UnVuKGNvbnN0
X2Nhc3Q8UmVuZGVyVGV4dCo+KHRoaXMpLCBmLCB0ZXh0KCktPmNoYXJhY3RlcnMoKSArIHN0YXJ0
LCBsZW4sIGFsbG93VGFicygpLCB4UG9zKSwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7
CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMoZmxvYXQgbGVhZFdpZHRo
LApAQCAtNjc2LDEzICs2NzYsMTMgQEAgdm9pZCBSZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRo
cyhmbG9hdAogICAgIEFTU0VSVChtX3RleHQpOwogICAgIFN0cmluZ0ltcGwmIHRleHQgPSAqbV90
ZXh0LmltcGwoKTsKICAgICBpZiAodGV4dFswXSA9PSAnICcgfHwgKHRleHRbMF0gPT0gJ1xuJyAm
JiAhc3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpIHx8IHRleHRbMF0gPT0gJ1x0JykgewotICAg
ICAgICBjb25zdCBGb250JiBmID0gc3R5bGUoKS0+Zm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25v
cmVzIGZpcnN0LWxpbmUuCisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250
KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAgICAgaWYgKHN0cmlw
RnJvbnRTcGFjZXMpIHsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyIHNwYWNlID0gJyAnOwotICAg
ICAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGYud2lkdGgoVGV4dFJ1bigmc3BhY2UsIDEpKTsK
KyAgICAgICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250LndpZHRoKFJlbmRlclRleHRSdW4o
dGhpcywgZm9udCwgJnNwYWNlLCAxKSk7CiAgICAgICAgICAgICBtYXhXIC09IHNwYWNlV2lkdGg7
CiAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbWF4VyArPSBmLndvcmRTcGFjaW5nKCk7Cisg
ICAgICAgICAgICBtYXhXICs9IGZvbnQud29yZFNwYWNpbmcoKTsKICAgICB9CiAKICAgICBzdHJp
cEZyb250U3BhY2VzID0gY29sbGFwc2VXaGl0ZVNwYWNlICYmIG1faGFzRW5kV1M7CkBAIC05MTUs
NyArOTE1LDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbAogICAg
ICAgICAgICAgICAgICAgICBtX21heFdpZHRoID0gY3Vyck1heFdpZHRoOwogICAgICAgICAgICAg
ICAgIGN1cnJNYXhXaWR0aCA9IDA7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIGN1cnJNYXhXaWR0aCArPSBmLndpZHRoKFRleHRSdW4odHh0ICsgaSwgMSwgYWxsb3dUYWJz
KCksIGxlYWRXaWR0aCArIGN1cnJNYXhXaWR0aCkpOworICAgICAgICAgICAgICAgIGN1cnJNYXhX
aWR0aCArPSBmLndpZHRoKFJlbmRlclRleHRSdW4odGhpcywgZiwgdHh0ICsgaSwgMSwgYWxsb3dU
YWJzKCksIGxlYWRXaWR0aCArIGN1cnJNYXhXaWR0aCkpOwogICAgICAgICAgICAgICAgIGdseXBo
T3ZlcmZsb3cucmlnaHQgPSAwOwogICAgICAgICAgICAgICAgIG5lZWRzV29yZFNwYWNpbmcgPSBp
c1NwYWNlICYmICFwcmV2aW91c0NoYXJhY3RlcklzU3BhY2UgJiYgaSA9PSBsZW4gLSAxOwogICAg
ICAgICAgICAgfQpAQCAtMTI5MCw3ICsxMjkwLDcgQEAgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGgo
dW5zaWduZWQgZnJvbSwgdQogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHcgPSB3aWR0aEZy
b21DYWNoZShmLCBmcm9tLCBsZW4sIHhQb3MsIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cp
OwogICAgIH0gZWxzZQotICAgICAgICB3ID0gZi53aWR0aChUZXh0UnVuKHRleHQoKS0+Y2hhcmFj
dGVycygpICsgZnJvbSwgbGVuLCBhbGxvd1RhYnMoKSwgeFBvcyksIGZhbGxiYWNrRm9udHMsIGds
eXBoT3ZlcmZsb3cpOworICAgICAgICB3ID0gZi53aWR0aChSZW5kZXJUZXh0UnVuKGNvbnN0X2Nh
c3Q8UmVuZGVyVGV4dCo+KHRoaXMpLCBmLCB0ZXh0KCktPmNoYXJhY3RlcnMoKSArIGZyb20sIGxl
biwgYWxsb3dUYWJzKCksIHhQb3MpLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKIAog
ICAgIHJldHVybiB3OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiA4Njc0MikKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDExICsz
NiwxMSBAQAogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIK
ICNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dFJ1bi5oIgogI2lu
Y2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRl
eHRDb250cm9sSW5uZXJFbGVtZW50cy5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2lu
Y2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5o
PgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtNTQyLDcgKzU0Miw4IEBAIGZsb2F0IFJlbmRl
clRleHRDb250cm9sOjpnZXRBdmdDaGFyV2lkdGgKICAgICAgICAgcmV0dXJuIHJvdW5kZihzdHls
ZSgpLT5mb250KCkucHJpbWFyeUZvbnQoKS0+YXZnQ2hhcldpZHRoKCkpOwogCiAgICAgY29uc3Qg
VUNoYXIgY2ggPSAnMCc7Ci0gICAgcmV0dXJuIHN0eWxlKCktPmZvbnQoKS53aWR0aChjb25zdHJ1
Y3RUZXh0UnVuQWxsb3dUcmFpbGluZ0V4cGFuc2lvbihTdHJpbmcoJmNoLCAxKSwgc3R5bGUoKSkp
OworICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CisgICAgcmV0dXJuIGZv
bnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bkFsbG93VHJhaWxpbmdFeHBhbnNpb24odGhpcywgZm9u
dCwgU3RyaW5nKCZjaCwgMSksIHN0eWxlKCkpKTsKIH0KIAogZmxvYXQgUmVuZGVyVGV4dENvbnRy
b2w6OnNjYWxlRW1Ub1VuaXRzKGludCB4KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dFJ1bi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRSdW4uaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgUmVuZGVyVGV4dFJ1bl9oCisjZGVmaW5lIFJlbmRl
clRleHRSdW5faAorCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFJlbmRlclNWR1Jlc291cmNlOworCitjbGFz
cyBSZW5kZXJUZXh0UnVuIDogcHVibGljIFRleHRSdW4geworcHVibGljOgorICAgIGNsYXNzIEV4
dHJhRGF0YSA6IHB1YmxpYyBUZXh0UnVuOjpFeHRyYURhdGEgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8RXh0cmFEYXRhPiBjcmVhdGUoUmVuZGVyT2JqZWN0KiBjb250
ZXh0KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEV4dHJhRGF0
YShjb250ZXh0KSk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJU
ZXh0UnVuKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIFJlbmRlck9iamVjdCog
Y29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGV4dDsgfQorCisjaWYgRU5BQkxFKFNWR19G
T05UUykKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2Uo
KSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2U7IH0KKyAgICAgICAgdm9p
ZCBzZXRBY3RpdmVQYWludGluZ1Jlc291cmNlKFJlbmRlclNWR1Jlc291cmNlKiBvYmplY3QpIHsg
bV9hY3RpdmVQYWludGluZ1Jlc291cmNlID0gb2JqZWN0OyB9CisjZW5kaWYKKworICAgIHByaXZh
dGU6CisgICAgICAgIEV4dHJhRGF0YShSZW5kZXJPYmplY3QqIGNvbnRleHQpCisgICAgICAgICAg
ICA6IG1fY29udGV4dChjb250ZXh0KQorI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgICAgICAg
ICAsIG1fYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSgwKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIFJlbmRlck9iamVjdCogbV9jb250ZXh0OworCisjaWYgRU5BQkxFKFNW
R19GT05UUykKKyAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2UqIG1fYWN0aXZlUGFpbnRpbmdSZXNv
dXJjZTsKKyNlbmRpZgorICAgIH07CisKKyAgICBSZW5kZXJUZXh0UnVuKFJlbmRlck9iamVjdCog
Y29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGMsIGludCBsZW4sIGJvb2wg
YWxsb3dUYWJzID0gZmFsc2UsIGZsb2F0IHhwb3MgPSAwLCBmbG9hdCBleHBhbnNpb24gPSAwLCBF
eHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9IEFsbG93VHJhaWxpbmdFeHBhbnNp
b24gfCBGb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExU
UiwgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gZmFsc2UpCisgICAgICAgIDogVGV4dFJ1bihj
LCBsZW4sIGFsbG93VGFicywgeHBvcywgZXhwYW5zaW9uLCBleHBhbnNpb25CZWhhdmlvciwgZGly
ZWN0aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRlKQorICAgIHsKKyAgICAgICAgLy8gT25seSBzYXZl
IHRoZSBleHRyYSBkYXRhIGlmIFNWRyBGb250cyBhcmUgdXNlZCwgd2hpY2ggZGVwZW5kIG9uIHRo
ZW0uCisgICAgICAgIC8vIEZJWE1FOiBTVkcgRm9udHMgd29uJ3Qgd29yayBhcyBzZWdtZW50ZWQg
Zm9udHMgYXQgdGhlIG1vbWVudCwgaWYgdGhhdCdzIGZpeGVkLCB3ZSBuZWVkIHRvIGNoZWNrIGZv
ciB0aGVtIGFzIHdlbGwgYmVsb3cuCisgICAgICAgIGlmIChmb250LnByaW1hcnlGb250KCktPmlz
U1ZHRm9udCgpKQorICAgICAgICAgICAgc2V0RXh0cmFEYXRhKEV4dHJhRGF0YTo6Y3JlYXRlKGNv
bnRleHQpKTsKKyAgICB9CisKKyAgICBSZW5kZXJUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4
dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgU3RyaW5nJiBzLCBib29sIGFsbG93VGFicyA9IGZh
bHNlLCBmbG9hdCB4cG9zID0gMCwgZmxvYXQgZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZp
b3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgRm9yYmlkTGVh
ZGluZ0V4cGFuc2lvbiwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIsIGJvb2wgZGlyZWN0
aW9uYWxPdmVycmlkZSA9IGZhbHNlKQorICAgICAgICA6IFRleHRSdW4ocywgYWxsb3dUYWJzLCB4
cG9zLCBleHBhbnNpb24sIGV4cGFuc2lvbkJlaGF2aW9yLCBkaXJlY3Rpb24sIGRpcmVjdGlvbmFs
T3ZlcnJpZGUpCisgICAgeworICAgICAgICAvLyBPbmx5IHNhdmUgdGhlIGV4dHJhIGRhdGEgaWYg
U1ZHIEZvbnRzIGFyZSB1c2VkLCB3aGljaCBkZXBlbmQgb24gdGhlbS4KKyAgICAgICAgLy8gRklY
TUU6IFNWRyBGb250cyB3b24ndCB3b3JrIGFzIHNlZ21lbnRlZCBmb250cyBhdCB0aGUgbW9tZW50
LCBpZiB0aGF0J3MgZml4ZWQsIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoZW0gYXMgd2VsbCBiZWxv
dy4KKyAgICAgICAgaWYgKGZvbnQucHJpbWFyeUZvbnQoKS0+aXNTVkdGb250KCkpCisgICAgICAg
ICAgICBzZXRFeHRyYURhdGEoRXh0cmFEYXRhOjpjcmVhdGUoY29udGV4dCkpOworICAgIH0KKwor
ICAgIEV4dHJhRGF0YSogZXh0cmFEYXRhKCkgY29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8RXh0
cmFEYXRhKj4oVGV4dFJ1bjo6ZXh0cmFEYXRhKCkpOyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBSZW5kZXJUZXh0UnVuX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAkocmV2aXNpb24gODY3
NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw5ICszMCw5IEBACiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5s
aW5lVGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dFJ1bi5oIgog
I2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKICNpbmNsdWRlICJTVkdSb290SW5saW5l
Qm94LmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBA
IC02Niw3ICs2Niw3IEBAIGludCBTVkdJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbkkK
ICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0UmVuZGVyZXItPnN0eWxlKCk7CiAgICAgQVNT
RVJUKHN0eWxlKTsKIAotICAgIFRleHRSdW4gdGV4dFJ1bihjb25zdHJ1Y3RUZXh0UnVuKHN0eWxl
LCBmcmFnbWVudCkpOworICAgIFJlbmRlclRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRS
dW4oc3R5bGUsIGZyYWdtZW50KTsKIAogICAgIC8vIEV2ZW50dWFsbHkgaGFuZGxlIGxlbmd0aEFk
anVzdD0ic3BhY2luZ0FuZEdseXBocyIuCiAgICAgLy8gRklYTUU6IEhhbmRsZSB2ZXJ0aWNhbCB0
ZXh0LgpAQCAtMzc2LDI5ICszNzYsMzQgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZWxlYXNl
UGFpbnRpbmdSZQogICAgIG1fcGFpbnRpbmdSZXNvdXJjZSA9IDA7CiB9CiAKLWJvb2wgU1ZHSW5s
aW5lVGV4dEJveDo6cHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQYWludGluZyhHcmFwaGlj
c0NvbnRleHQqJiBjb250ZXh0LCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBUZXh0UnVuJiB0ZXh0UnVu
LCBSZW5kZXJTdHlsZSogc3R5bGUpCitib29sIFNWR0lubGluZVRleHRCb3g6OnByZXBhcmVHcmFw
aGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgZmxv
YXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVyVGV4dFJ1biYgdGV4dFJ1biwgUmVuZGVyU3R5bGUqIHN0
eWxlKQogewogICAgIGJvb2wgYWNxdWlyZWRSZXNvdXJjZSA9IGFjcXVpcmVQYWludGluZ1Jlc291
cmNlKGNvbnRleHQsIHNjYWxpbmdGYWN0b3IsIHBhcmVudCgpLT5yZW5kZXJlcigpLCBzdHlsZSk7
CisgICAgaWYgKCFhY3F1aXJlZFJlc291cmNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIC8vIFNWRyBGb250cyBuZWVkIGFjY2VzcyB0byB0aGUg
cGFpbnRpbmcgcmVzb3VyY2UgdXNlZCB0byBkcmF3IHRoZSBjdXJyZW50IHRleHQgY2h1bmsuCi0g
ICAgaWYgKGFjcXVpcmVkUmVzb3VyY2UpCi0gICAgICAgIHRleHRSdW4uc2V0QWN0aXZlUGFpbnRp
bmdSZXNvdXJjZShtX3BhaW50aW5nUmVzb3VyY2UpOworICAgIGlmIChSZW5kZXJUZXh0UnVuOjpF
eHRyYURhdGEqIGV4dHJhRGF0YSA9IHRleHRSdW4uZXh0cmFEYXRhKCkpCisgICAgICAgIGV4dHJh
RGF0YS0+c2V0QWN0aXZlUGFpbnRpbmdSZXNvdXJjZShtX3BhaW50aW5nUmVzb3VyY2UpOwogI2Vu
ZGlmCiAKLSAgICByZXR1cm4gYWNxdWlyZWRSZXNvdXJjZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0K
IAotdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZXN0b3JlR3JhcGhpY3NDb250ZXh0QWZ0ZXJUZXh0
UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgVGV4dFJ1biYgdGV4dFJ1bikKK3Zv
aWQgU1ZHSW5saW5lVGV4dEJveDo6cmVzdG9yZUdyYXBoaWNzQ29udGV4dEFmdGVyVGV4dFBhaW50
aW5nKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIFJlbmRlclRleHRSdW4mIHRleHRSdW4pCiB7
CiAgICAgcmVsZWFzZVBhaW50aW5nUmVzb3VyY2UoY29udGV4dCwgLyogcGF0aCAqLzApOwogCiAj
aWYgRU5BQkxFKFNWR19GT05UUykKLSAgICB0ZXh0UnVuLnNldEFjdGl2ZVBhaW50aW5nUmVzb3Vy
Y2UoMCk7CisgICAgaWYgKFJlbmRlclRleHRSdW46OkV4dHJhRGF0YSogZXh0cmFEYXRhID0gdGV4
dFJ1bi5leHRyYURhdGEoKSkKKyAgICAgICAgZXh0cmFEYXRhLT5zZXRBY3RpdmVQYWludGluZ1Jl
c291cmNlKDApOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGV4dFJ1bik7CiAjZW5kaWYKIH0K
IAotVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxl
KiBzdHlsZSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCkgY29uc3QKK1JlbmRlclRl
eHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSogc3R5
bGUsIGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQpIGNvbnN0CiB7CiAgICAgQVNTRVJU
KHN0eWxlKTsKICAgICBBU1NFUlQodGV4dFJlbmRlcmVyKCkpOwpAQCAtNDA2LDcgKzQxMSw5IEBA
IFRleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFIKICAgICBSZW5kZXJUZXh0
KiB0ZXh0ID0gdGV4dFJlbmRlcmVyKCk7CiAgICAgQVNTRVJUKHRleHQpOwogCi0gICAgVGV4dFJ1
biBydW4odGV4dC0+Y2hhcmFjdGVycygpICsgZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0CisgICAg
UmVuZGVyVGV4dFJ1biBydW4odGV4dAorICAgICAgICAgICAgICAgICwgc3R5bGUtPmZvbnQoKQor
ICAgICAgICAgICAgICAgICwgdGV4dC0+Y2hhcmFjdGVycygpICsgZnJhZ21lbnQuY2hhcmFjdGVy
T2Zmc2V0CiAgICAgICAgICAgICAgICAgLCBmcmFnbWVudC5sZW5ndGgKICAgICAgICAgICAgICAg
ICAsIGZhbHNlIC8qIGFsbG93VGFicyAqLwogICAgICAgICAgICAgICAgICwgMCAvKiB4UG9zLCBv
bmx5IHJlbGV2YW50IHdpdGggYWxsb3dUYWJzPXRydWUgKi8KQEAgLTQxNSwxMCArNDIyLDYgQEAg
VGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UgogICAgICAgICAgICAgICAg
ICwgZGlyZWN0aW9uKCkKICAgICAgICAgICAgICAgICAsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGUt
PnZpc3VhbGx5T3JkZXJlZCgpIC8qIGRpcmVjdGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0jaWYgRU5B
QkxFKFNWR19GT05UUykKLSAgICBydW4uc2V0UmVmZXJlbmNpbmdSZW5kZXJPYmplY3QodGV4dCk7
Ci0jZW5kaWYKLQogICAgIC8vIFdlIGhhbmRsZSBsZXR0ZXIgJiB3b3JkIHNwYWNpbmcgb3Vyc2Vs
dmVzLgogICAgIHJ1bi5kaXNhYmxlU3BhY2luZygpOwogICAgIHJldHVybiBydW47CkBAIC01ODcs
NyArNTkwLDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludERlY29yYXRpb25XaQogICAg
ICAgICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCAmcGF0aCk7CiB9CiAKLXZvaWQg
U1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IFNWR1Rl
eHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24p
Cit2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dFdpdGhTaGFkb3dzKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSZW5kZXJUZXh0UnVuJiB0ZXh0UnVu
LCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQgc3RhcnRQb3NpdGlvbiwgaW50
IGVuZFBvc2l0aW9uKQogewogICAgIFJlbmRlclNWR0lubGluZVRleHQqIHRleHRSZW5kZXJlciA9
IHRvUmVuZGVyU1ZHSW5saW5lVGV4dCh0aGlzLT50ZXh0UmVuZGVyZXIoKSk7CiAgICAgQVNTRVJU
KHRleHRSZW5kZXJlcik7CkBAIC02NTksNyArNjYyLDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94
OjpwYWludFRleHQoR3JhcGhpYwogICAgIH0KIAogICAgIC8vIEZhc3QgcGF0aCBpZiB0aGVyZSBp
cyBubyBzZWxlY3Rpb24sIGp1c3QgZHJhdyB0aGUgd2hvbGUgY2h1bmsgcGFydCB1c2luZyB0aGUg
cmVndWxhciBzdHlsZQotICAgIFRleHRSdW4gdGV4dFJ1bihjb25zdHJ1Y3RUZXh0UnVuKHN0eWxl
LCBmcmFnbWVudCkpOworICAgIFJlbmRlclRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRS
dW4oc3R5bGUsIGZyYWdtZW50KTsKICAgICBpZiAoIWhhc1NlbGVjdGlvbiB8fCBzdGFydFBvc2l0
aW9uID49IGVuZFBvc2l0aW9uKSB7CiAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRl
eHQsIHN0eWxlLCB0ZXh0UnVuLCBmcmFnbWVudCwgMCwgZnJhZ21lbnQubGVuZ3RoKTsKICAgICAg
ICAgcmV0dXJuOwpAQCAtNjczLDcgKzY3Niw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFp
bnRUZXh0KEdyYXBoaWMKICAgICBpZiAoc3R5bGUgIT0gc2VsZWN0aW9uU3R5bGUpCiAgICAgICAg
IFNWR1Jlc291cmNlc0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQocGFyZW50KCktPnJlbmRlcmVy
KCksIFN0eWxlRGlmZmVyZW5jZVJlcGFpbnQsIHNlbGVjdGlvblN0eWxlKTsKIAotICAgIFRleHRS
dW4gc2VsZWN0aW9uVGV4dFJ1bihjb25zdHJ1Y3RUZXh0UnVuKHNlbGVjdGlvblN0eWxlLCBmcmFn
bWVudCkpOworICAgIFJlbmRlclRleHRSdW4gc2VsZWN0aW9uVGV4dFJ1biA9IGNvbnN0cnVjdFRl
eHRSdW4oc2VsZWN0aW9uU3R5bGUsIGZyYWdtZW50KTsKICAgICBwYWludFRleHRXaXRoU2hhZG93
cyhjb250ZXh0LCBzZWxlY3Rpb25TdHlsZSwgdGV4dFJ1biwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRp
b24sIGVuZFBvc2l0aW9uKTsKIAogICAgIGlmIChzdHlsZSAhPSBzZWxlY3Rpb25TdHlsZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5o
CShyZXZpc2lvbiA4Njc0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5s
aW5lVGV4dEJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgUmVuZGVyVGV4dFJ1bjsKIGNsYXNzIFJlbmRlclNWR1Jlc291
cmNlOwogY2xhc3MgU1ZHUm9vdElubGluZUJveDsKIApAQCAtNjQsMTcgKzY1LDE3IEBAIHB1Ymxp
YzoKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdU
ZXh0RnJhZ21lbnQmLCBpbnQgZnJhZ21lbnRTdGFydFBvc2l0aW9uLCBpbnQgZnJhZ21lbnRFbmRQ
b3NpdGlvbiwgUmVuZGVyU3R5bGUqKTsKIAogcHJpdmF0ZToKLSAgICBUZXh0UnVuIGNvbnN0cnVj
dFRleHRSdW4oUmVuZGVyU3R5bGUqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKKyAg
ICBSZW5kZXJUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqLCBjb25zdCBTVkdU
ZXh0RnJhZ21lbnQmKSBjb25zdDsKIAogICAgIGJvb2wgYWNxdWlyZVBhaW50aW5nUmVzb3VyY2Uo
R3JhcGhpY3NDb250ZXh0KiYsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFJlbmRlck9iamVjdCosIFJl
bmRlclN0eWxlKik7CiAgICAgdm9pZCByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShHcmFwaGljc0Nv
bnRleHQqJiwgY29uc3QgUGF0aCopOwogCi0gICAgYm9vbCBwcmVwYXJlR3JhcGhpY3NDb250ZXh0
Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComLCBmbG9hdCBzY2FsaW5nRmFjdG9yLCBU
ZXh0UnVuJiwgUmVuZGVyU3R5bGUqKTsKLSAgICB2b2lkIHJlc3RvcmVHcmFwaGljc0NvbnRleHRB
ZnRlclRleHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJiwgVGV4dFJ1biYpOworICAgIGJvb2wg
cHJlcGFyZUdyYXBoaWNzQ29udGV4dEZvclRleHRQYWludGluZyhHcmFwaGljc0NvbnRleHQqJiwg
ZmxvYXQgc2NhbGluZ0ZhY3RvciwgUmVuZGVyVGV4dFJ1biYsIFJlbmRlclN0eWxlKik7CisgICAg
dm9pZCByZXN0b3JlR3JhcGhpY3NDb250ZXh0QWZ0ZXJUZXh0UGFpbnRpbmcoR3JhcGhpY3NDb250
ZXh0KiYsIFJlbmRlclRleHRSdW4mKTsKIAogICAgIHZvaWQgcGFpbnREZWNvcmF0aW9uKEdyYXBo
aWNzQ29udGV4dCosIEVUZXh0RGVjb3JhdGlvbiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50Jik7CiAg
ICAgdm9pZCBwYWludERlY29yYXRpb25XaXRoU3R5bGUoR3JhcGhpY3NDb250ZXh0KiwgRVRleHRE
ZWNvcmF0aW9uLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBSZW5kZXJPYmplY3QqIGRlY29yYXRp
b25SZW5kZXJlcik7Ci0gICAgdm9pZCBwYWludFRleHRXaXRoU2hhZG93cyhHcmFwaGljc0NvbnRl
eHQqLCBSZW5kZXJTdHlsZSosIFRleHRSdW4mLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQg
c3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKTsKKyAgICB2b2lkIHBhaW50VGV4dFdpdGhT
aGFkb3dzKEdyYXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwgUmVuZGVyVGV4dFJ1biYsIGNv
bnN0IFNWR1RleHRGcmFnbWVudCYsIGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24p
OwogICAgIHZvaWQgcGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCosIFJlbmRlclN0eWxlKiwgUmVu
ZGVyU3R5bGUqIHNlbGVjdGlvblN0eWxlLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBib29sIGhh
c1NlbGVjdGlvbiwgYm9vbCBwYWludFNlbGVjdGVkVGV4dE9ubHkpOwogCiBwcml2YXRlOgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJ
KHJldmlzaW9uIDg2NzQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TWV0cmljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJT
VkdUZXh0TWV0cmljcy5oIgogCiAjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgotI2lu
Y2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0UnVuLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtNzIsMTIgKzcyLDE0IEBAIFNWR1RleHRNZXRyaWNzIFNWR1RleHRN
ZXRyaWNzOjplbXB0eU1ldHIKICAgICByZXR1cm4gc19lbXB0eU1ldHJpY3M7CiB9CiAKLXN0YXRp
YyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgp
CitzdGF0aWMgUmVuZGVyVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclNWR0lubGluZVRl
eHQqIHRleHQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBwb3NpdGlvbiwgdW5z
aWduZWQgbGVuZ3RoKQogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKCk7
CiAgICAgQVNTRVJUKHN0eWxlKTsKIAotICAgIFRleHRSdW4gcnVuKGNoYXJhY3RlcnMgKyBwb3Np
dGlvbgorICAgIFJlbmRlclRleHRSdW4gcnVuKHRleHQKKyAgICAgICAgICAgICAgICAsIHN0eWxl
LT5mb250KCkKKyAgICAgICAgICAgICAgICAsIGNoYXJhY3RlcnMgKyBwb3NpdGlvbgogICAgICAg
ICAgICAgICAgICwgbGVuZ3RoCiAgICAgICAgICAgICAgICAgLCBmYWxzZSAvKiBhbGxvd1RhYnMg
Ki8KICAgICAgICAgICAgICAgICAsIDAgLyogeFBvcywgb25seSByZWxldmFudCB3aXRoIGFsbG93
VGFicz10cnVlICovCkBAIC04NiwxMCArODgsNiBAQCBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RU
ZXh0UnVuKFJlbmRlclNWCiAgICAgICAgICAgICAgICAgLCBzdHlsZS0+ZGlyZWN0aW9uKCkKICAg
ICAgICAgICAgICAgICAsIHN0eWxlLT51bmljb2RlQmlkaSgpID09IE92ZXJyaWRlIC8qIGRpcmVj
dGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBydW4uc2V0
UmVmZXJlbmNpbmdSZW5kZXJPYmplY3QodGV4dCk7Ci0jZW5kaWYKLQogICAgIC8vIFdlIGhhbmRs
ZSBsZXR0ZXIgJiB3b3JkIHNwYWNpbmcgb3Vyc2VsdmVzLgogICAgIHJ1bi5kaXNhYmxlU3BhY2lu
ZygpOwogICAgIHJldHVybiBydW47CkBAIC05OCw4ICs5Niw3IEBAIHN0YXRpYyBUZXh0UnVuIGNv
bnN0cnVjdFRleHRSdW4oUmVuZGVyU1YKIFNWR1RleHRNZXRyaWNzIFNWR1RleHRNZXRyaWNzOjpt
ZWFzdXJlQ2hhcmFjdGVyUmFuZ2UoUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCwgdW5zaWduZWQg
cG9zaXRpb24sIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBBU1NFUlQodGV4dCk7Ci0gICAgVGV4
dFJ1biBydW4oY29uc3RydWN0VGV4dFJ1bih0ZXh0LCB0ZXh0LT5jaGFyYWN0ZXJzKCksIHBvc2l0
aW9uLCBsZW5ndGgpKTsKLSAgICByZXR1cm4gU1ZHVGV4dE1ldHJpY3ModGV4dCwgcnVuLCBwb3Np
dGlvbiwgdGV4dC0+dGV4dExlbmd0aCgpKTsKKyAgICByZXR1cm4gU1ZHVGV4dE1ldHJpY3ModGV4
dCwgY29uc3RydWN0VGV4dFJ1bih0ZXh0LCB0ZXh0LT5jaGFyYWN0ZXJzKCksIHBvc2l0aW9uLCBs
ZW5ndGgpLCBwb3NpdGlvbiwgdGV4dC0+dGV4dExlbmd0aCgpKTsKIH0KIAogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250LmNwcAkocmV2aXNpb24gODY3NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJS
ZW5kZXJPYmplY3QuaCIKICNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVUZXh0LmgiCiAjaW5jbHVk
ZSAiUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dFJ1
bi5oIgogI2luY2x1ZGUgIlNWR0FsdEdseXBoRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZvbnRE
YXRhLmgiCiAjaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKQEAgLTM3LDcgKzM4LDYgQEAKICNp
bmNsdWRlICJTVkdNaXNzaW5nR2x5cGhFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNs
dWRlICJYTUxOYW1lcy5oIgogCiB1c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwpAQCAtNzEs
NiArNzEsMzEgQEAgc3RhdGljIGlubGluZSBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udAogICAg
IHJldHVybiBzdmdGb250RGF0YTsKIH0KIAorc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIGZp
cnN0UGFyZW50UmVuZGVyZXJGb3JOb25UZXh0Tm9kZShSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQor
eworICAgIEFTU0VSVChyZW5kZXJlcik7CisgICAgUmVuZGVyT2JqZWN0KiBuZXdSZW5kZXJlciA9
IHJlbmRlcmVyLT5pc1RleHQoKSA/IHJlbmRlcmVyLT5wYXJlbnQoKSA6IHJlbmRlcmVyOworICAg
IEFTU0VSVChuZXdSZW5kZXJlci0+bm9kZSgpKTsKKyAgICBBU1NFUlQobmV3UmVuZGVyZXItPm5v
ZGUoKS0+aXNFbGVtZW50Tm9kZSgpKTsKKyAgICByZXR1cm4gbmV3UmVuZGVyZXI7Cit9CisKK3N0
YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiByZWZlcmVuY2luZ1JlbmRlck9iamVjdEZyb21SdW4o
Y29uc3QgVGV4dFJ1biYgcnVuKQoreworICAgIFRleHRSdW46OkV4dHJhRGF0YSogZXh0cmFEYXRh
ID0gcnVuLmV4dHJhRGF0YSgpOworICAgIGlmICghZXh0cmFEYXRhIHx8ICFleHRyYURhdGEtPmlz
UmVuZGVyVGV4dFJ1bigpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UmVuZGVyVGV4dFJ1bjo6RXh0cmFEYXRhKj4oZXh0cmFEYXRhKS0+Y29udGV4dCgpOworfQor
CitzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQYWludGluZ1Jlc291cmNl
RnJvbVJ1bihjb25zdCBUZXh0UnVuJiBydW4pCit7CisgICAgVGV4dFJ1bjo6RXh0cmFEYXRhKiBl
eHRyYURhdGEgPSBydW4uZXh0cmFEYXRhKCk7CisgICAgaWYgKCFleHRyYURhdGEgfHwgIWV4dHJh
RGF0YS0+aXNSZW5kZXJUZXh0UnVuKCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxSZW5kZXJUZXh0UnVuOjpFeHRyYURhdGEqPihleHRyYURhdGEpLT5hY3RpdmVQ
YWludGluZ1Jlc291cmNlKCk7Cit9CisKIC8vIEhlbHBlciBjbGFzcyB0byB3YWxrIGEgdGV4dCBy
dW4uIExvb2t1cCBhIFNWR0dseXBoIGZvciBlYWNoIGNoYXJhY3RlcgogLy8gLSBhbHNvIHJlc3Bl
Y3RpbmcgcG9zc2libHkgZGVmaW5lZCBsaWdhdHVyZXMgLSBhbmQgaW52b2tlIGEgY2FsbGJhY2sg
Zm9yIGVhY2ggZm91bmQgZ2x5cGguCiB0ZW1wbGF0ZTx0eXBlbmFtZSBTVkdUZXh0UnVuRGF0YT4K
QEAgLTEwMCwxOSArMTI1LDE4IEBAIHN0cnVjdCBTVkdUZXh0UnVuV2Fsa2VyIHsKICAgICAgICAg
aW50IGNoYXJhY3Rlckxvb2t1cFJhbmdlOwogICAgICAgICBpbnQgZW5kT2ZTY2FuUmFuZ2UgPSB0
byArIG1fd2Fsa2VyRGF0YS5leHRyYUNoYXJzQXZhaWxhYmxlOwogCisgICAgICAgIFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0ID0gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RGcm9tUnVuKHJ1bik7
CisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyT2JqZWN0ID0gZmlyc3RQYXJlbnRS
ZW5kZXJlckZvck5vblRleHROb2RlKHJlbmRlck9iamVjdCk7CisKICAgICAgICAgYm9vbCBoYXZl
QWx0R2x5cGggPSBmYWxzZTsKICAgICAgICAgU1ZHR2x5cGggYWx0R2x5cGhJZGVudGlmaWVyOwot
ICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QgPSBydW4ucmVmZXJlbmNpbmdS
ZW5kZXJPYmplY3QoKSkgewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJl
ciA9IHJlbmRlck9iamVjdC0+cGFyZW50KCk7Ci0gICAgICAgICAgICBBU1NFUlQocGFyZW50UmVu
ZGVyZXIpOwotICAgICAgICAgICAgaWYgKHBhcmVudFJlbmRlcmVyLT5ub2RlKCkgJiYgcGFyZW50
UmVuZGVyZXItPm5vZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6YWx0R2x5cGhUYWcpKSB7Ci0g
ICAgICAgICAgICAgICAgU1ZHR2x5cGhFbGVtZW50KiBnbHlwaEVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTVkdBbHRHbHlwaEVsZW1lbnQqPihwYXJlbnRSZW5kZXJlci0+bm9kZSgpKS0+Z2x5cGhFbGVt
ZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGdseXBoRWxlbWVudCkgewotICAgICAgICAgICAg
ICAgICAgICBoYXZlQWx0R2x5cGggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBhbHRHbHlw
aElkZW50aWZpZXIgPSBnbHlwaEVsZW1lbnQtPmJ1aWxkR2x5cGhJZGVudGlmaWVyKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGFsdEdseXBoSWRlbnRpZmllci5pc1ZhbGlkID0gdHJ1ZTsKLSAgICAg
ICAgICAgICAgICAgICAgYWx0R2x5cGhJZGVudGlmaWVyLnVuaWNvZGVTdHJpbmdMZW5ndGggPSB0
byAtIGZyb207Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBOb2RlKiBub2RlID0gcGFyZW50
UmVuZGVyT2JqZWN0LT5ub2RlKCk7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKFNWR05h
bWVzOjphbHRHbHlwaFRhZykpIHsKKyAgICAgICAgICAgIGlmIChTVkdHbHlwaEVsZW1lbnQqIGds
eXBoRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0FsdEdseXBoRWxlbWVudCo+KG5vZGUpLT5nbHlw
aEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGhhdmVBbHRHbHlwaCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYWx0R2x5cGhJZGVudGlmaWVyID0gZ2x5cGhFbGVtZW50LT5idWlsZEdseXBo
SWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgIGFsdEdseXBoSWRlbnRpZmllci5pc1ZhbGlk
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhbHRHbHlwaElkZW50aWZpZXIudW5pY29kZVN0cmlu
Z0xlbmd0aCA9IHRvIC0gZnJvbTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0yNTMs
MTggKzI3NywxMSBAQCBzdGF0aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTCiAg
ICAgICAgIGRhdGEuc2NhbGUgPSBjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250LT5zaXplKCksIGZv
bnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBmKTsKICAgICAgICAgZGF0YS5sZW5ndGgg
PSAwLjBmOwogCi0gICAgICAgIFN0cmluZyBsYW5ndWFnZTsKLSAgICAgICAgYm9vbCBpc1ZlcnRp
Y2FsVGV4dCA9IGZhbHNlOyAvLyBIb2xkcyB0cnVlIGZvciBIVE1MIHRleHQKKyAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZW5kZXJPYmplY3QgPSByZWZlcmVuY2luZ1JlbmRlck9iamVjdEZyb21SdW4o
cnVuKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJPYmplY3QgPSBmaXJzdFBh
cmVudFJlbmRlcmVyRm9yTm9uVGV4dE5vZGUocmVuZGVyT2JqZWN0KTsgCiAKLSAgICAgICAgLy8g
VE9ETzogbGFuZ3VhZ2UgbWF0Y2hpbmcgJiBzdmcgZ2x5cGhzIHNob3VsZCBiZSBwb3NzaWJsZSBm
b3IgSFRNTCB0ZXh0LCB0b28uCi0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVj
dCA9IHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJP
YmplY3QqIHBhcmVudFJlbmRlcmVyID0gcmVuZGVyT2JqZWN0LT5wYXJlbnQoKTsKLSAgICAgICAg
ICAgIEFTU0VSVChwYXJlbnRSZW5kZXJlcik7Ci0gICAgICAgICAgICBpc1ZlcnRpY2FsVGV4dCA9
IGlzVmVydGljYWxXcml0aW5nTW9kZShwYXJlbnRSZW5kZXJlci0+c3R5bGUoKS0+c3ZnU3R5bGUo
KSk7Ci0KLSAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8
U1ZHRWxlbWVudCo+KHBhcmVudFJlbmRlcmVyLT5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGxh
bmd1YWdlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cik7Ci0gICAg
ICAgIH0KKyAgICAgICAgU3RyaW5nIGxhbmd1YWdlID0gdG9FbGVtZW50KHBhcmVudFJlbmRlck9i
amVjdC0+bm9kZSgpKS0+Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cik7CisgICAgICAg
IGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUocGFyZW50UmVuZGVy
T2JqZWN0LT5zdHlsZSgpLT5zdmdTdHlsZSgpKTsKIAogICAgICAgICBTVkdUZXh0UnVuV2Fsa2Vy
PFNWR1RleHRSdW5XYWxrZXJNZWFzdXJlZExlbmd0aERhdGE+IHJ1bldhbGtlcihmb250RGF0YSwg
Zm9udEVsZW1lbnQsIGRhdGEsIGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnRDYWxsYmFjaywgZmxvYXRX
aWR0aE1pc3NpbmdHbHlwaENhbGxiYWNrKTsKICAgICAgICAgcnVuV2Fsa2VyLndhbGsocnVuLCBp
c1ZlcnRpY2FsVGV4dCwgbGFuZ3VhZ2UsIGZyb20sIHRvKTsKQEAgLTMyNCwxMiArMzQxLDEzIEBA
IHZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3MKICAgICAgICAgRmxvYXRQ
b2ludCBjdXJyZW50UG9pbnQgPSBwb2ludDsKICAgICAgICAgZmxvYXQgc2NhbGUgPSBjb252ZXJ0
RW1Vbml0VG9QaXhlbChzaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBm
KTsKIAotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZSogYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSA9
IHJ1bi5hY3RpdmVQYWludGluZ1Jlc291cmNlKCk7Ci0KLSAgICAgICAgLy8gSWYgcmVuZGVyT2Jq
ZWN0IGlzIG5vdCBzZXQsIHdlJ3JlIGRlYWxpbmcgZm9yIEhUTUwgdGV4dCByZW5kZXJlZCB1c2lu
ZyBTVkcgRm9udHMuCi0gICAgICAgIGlmICghcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCkp
IHsKLSAgICAgICAgICAgIEFTU0VSVCghYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSk7Ci0KKyAgICAg
ICAgLy8gV2UgY2FuIG9ubHkgcGFpbnQgU1ZHRm9udHMgaWYgYSBjb250ZXh0IGlzIGF2YWlsYWJs
ZS4KKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QgPSByZWZlcmVuY2luZ1JlbmRl
ck9iamVjdEZyb21SdW4ocnVuKTsKKyAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJP
YmplY3QgPSBmaXJzdFBhcmVudFJlbmRlcmVyRm9yTm9uVGV4dE5vZGUocmVuZGVyT2JqZWN0KTsK
KworICAgICAgICAvLyBJZiBhY3RpdmVQYWludGluZ1Jlc291cmNlIGlzIG5vdCBzZXQsIHdlJ3Jl
IGRlYWxpbmcgZm9yIEhUTUwgdGV4dCByZW5kZXJlZCB1c2luZyBTVkcgRm9udHMuCisgICAgICAg
IFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQYWludGluZ1Jlc291cmNlID0gYWN0aXZlUGFpbnRp
bmdSZXNvdXJjZUZyb21SdW4ocnVuKTsKKyAgICAgICAgaWYgKCFhY3RpdmVQYWludGluZ1Jlc291
cmNlKSB7CiAgICAgICAgICAgICAvLyBUT0RPOiBXZSdyZSBvbmx5IHN1cHBvcnRpbmcgc2ltcGxl
IGZpbGxlZCBIVE1MIHRleHQgc28gZmFyLgogICAgICAgICAgICAgUmVuZGVyU1ZHUmVzb3VyY2VT
b2xpZENvbG9yKiBzb2xpZFBhaW50aW5nUmVzb3VyY2UgPSBSZW5kZXJTVkdSZXNvdXJjZTo6c2hh
cmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CiAgICAgICAgICAgICBzb2xpZFBhaW50aW5nUmVz
b3VyY2UtPnNldENvbG9yKGNvbnRleHQtPmZpbGxDb2xvcigpKTsKQEAgLTMzNywyOSArMzU1LDE2
IEBAIHZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3MKICAgICAgICAgICAg
IGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UgPSBzb2xpZFBhaW50aW5nUmVzb3VyY2U7CiAgICAgICAg
IH0KIAotICAgICAgICBBU1NFUlQoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSk7Ci0KICAgICAgICAg
aW50IGNoYXJzQ29uc3VtZWQ7CiAgICAgICAgIFN0cmluZyBnbHlwaE5hbWU7Ci0gICAgICAgIGJv
b2wgaXNWZXJ0aWNhbFRleHQgPSBmYWxzZTsKICAgICAgICAgZmxvYXQgeFN0YXJ0T2Zmc2V0ID0g
ZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgMCwgcnVuLnJ0bCgp
ID8gdG8gOiAwLCBydW4ucnRsKCkgPyBydW4ubGVuZ3RoKCkgOiBmcm9tLCBjaGFyc0NvbnN1bWVk
LCBnbHlwaE5hbWUpOwogICAgICAgICBGbG9hdFBvaW50IGdseXBoT3JpZ2luOwogCi0gICAgICAg
IFN0cmluZyBsYW5ndWFnZTsKLQotICAgICAgICAvLyBUT0RPOiBsYW5ndWFnZSBtYXRjaGluZyAm
IHN2ZyBnbHlwaHMgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciBIVE1MIHRleHQsIHRvby4KLSAgICAg
ICAgUmVuZGVyT2JqZWN0KiByZWZlcmVuY2luZ1JlbmRlck9iamVjdCA9IHJ1bi5yZWZlcmVuY2lu
Z1JlbmRlck9iamVjdCgpOwotICAgICAgICBSZW5kZXJPYmplY3QqIHJlZmVyZW5jaW5nUmVuZGVy
T2JqZWN0UGFyZW50ID0gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3QgPyByZWZlcmVuY2luZ1JlbmRl
ck9iamVjdC0+cGFyZW50KCkgOiAwOwotICAgICAgICBSZW5kZXJTdHlsZSogcmVmZXJlbmNpbmdS
ZW5kZXJPYmplY3RQYXJlbnRTdHlsZSA9IDA7Ci0gICAgICAgIGlmIChyZWZlcmVuY2luZ1JlbmRl
ck9iamVjdCkgewotICAgICAgICAgICAgQVNTRVJUKHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFy
ZW50KTsKLSAgICAgICAgICAgIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5bGUgPSBy
ZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudC0+c3R5bGUoKTsKLQotICAgICAgICAgICAgaXNW
ZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUocmVmZXJlbmNpbmdSZW5kZXJPYmpl
Y3RQYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKSk7ICAgIAotICAgICAgICAgICAgaWYgKFNWR0VsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocmVmZXJlbmNpbmdSZW5kZXJP
YmplY3RQYXJlbnQtPm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgbGFuZ3VhZ2UgPSBlbGVtZW50
LT5nZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKTsKLSAgICAgICAgfQorICAgICAgICBO
b2RlKiBub2RlID0gcGFyZW50UmVuZGVyT2JqZWN0LT5ub2RlKCk7CisgICAgICAgIFN0cmluZyBs
YW5ndWFnZSA9IHRvRWxlbWVudChub2RlKS0+Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0
cik7CiAKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFJlbmRlck9iamVjdFN0eWxlID0gcGFy
ZW50UmVuZGVyT2JqZWN0LT5zdHlsZSgpOworICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0g
aXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHBhcmVudFJlbmRlck9iamVjdFN0eWxlLT5zdmdTdHlsZSgp
KTsKICAgICAgICAgaWYgKCFpc1ZlcnRpY2FsVGV4dCkgewogICAgICAgICAgICAgZ2x5cGhPcmln
aW4uc2V0WChmb250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblgoKSAqIHNjYWxlKTsKICAgICAgICAg
ICAgIGdseXBoT3JpZ2luLnNldFkoZm9udERhdGEtPmhvcml6b250YWxPcmlnaW5ZKCkgKiBzY2Fs
ZSk7CkBAIC0zOTQsMTIgKzM5OSwxMiBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250
KEdyYXBoaWNzCiAgICAgICAgICAgICAgICAgICAgIFBhdGggZ2x5cGhQYXRoID0gaWRlbnRpZmll
ci5wYXRoRGF0YTsKICAgICAgICAgICAgICAgICAgICAgZ2x5cGhQYXRoLnRyYW5zZm9ybShnbHlw
aFBhdGhUcmFuc2Zvcm0pOwogCi0gICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVQYWludGlu
Z1Jlc291cmNlLT5hcHBseVJlc291cmNlKHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50LCBy
ZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudFN0eWxlLCBjb250ZXh0LCByZXNvdXJjZU1vZGUp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNpbmdSZW5kZXJPYmplY3Qp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0
UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQocmVmZXJlbmNpbmdSZW5kZXJPYmplY3Qp
OworICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlS
ZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIHBhcmVudFJlbmRlck9iamVjdFN0eWxlLCBjb250
ZXh0LCByZXNvdXJjZU1vZGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVuZGVy
T2JqZWN0ICYmIHJlbmRlck9iamVjdC0+aXNTVkdJbmxpbmVUZXh0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0UmVuZGVyZXIg
PSB0b1JlbmRlclNWR0lubGluZVRleHQocmVuZGVyT2JqZWN0KTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoY29udGV4dC0+c3Ryb2tlVGhp
Y2tuZXNzKCkgKiB0ZXh0UmVuZGVyZXItPnNjYWxpbmdGYWN0b3IoKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291
cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShyZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudCwgY29u
dGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQYXRoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHBhcmVudFJlbmRlck9i
amVjdCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQYXRoKTsKICAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAo=
</data>
<flag name="review"
          id="87114"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94218</attachid>
            <date>2011-05-20 07:29:08 -0700</date>
            <delta_ts>2011-05-20 09:24:58 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>AbstractionLayer-v2.diff</filename>
            <type>text/plain</type>
            <size>157274</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2OTUxKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTY1IEBACisyMDExLTA1LTIwICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBwbGF0Zm9ybSBsYXllcmluZyB2aW9s
YXRpb246IFRleHRSdW4gc3RvcmVzIFJlbmRlck9iamVjdHMgZm9yIFNWRyBGb250cyBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDI1NAor
CisgICAgICAgIEZpcnN0IHBhcnQ6CisgICAgICAgIFJlbW92ZSBhIGxvbmctc3RhbmRpbmcgbGF5
ZXJpbmcgdmlvbGF0aW9uIGluIFRleHRSdW46IGl0IHN0b3JlcyBSZW5kZXJPYmplY3QvUmVuZGVy
U1ZHUmVzb3VyY2UgcG9pbnRlcnMgZm9yIFNWRyBGb250cyBzdXBwb3J0LgorICAgICAgICBSZXBs
YWNlIHRoZSB0d28gUmVuZGVyKiBwb2ludGVycyB3aXRoIGEgc2luZ2xlIFJlZlB0cjxBYnN0cmFj
dFJlbmRlcmluZ0NvbnRleHQ+LiBBYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQgaXMgYSBoZWxwZXIg
Y2xhc3MsCisgICAgICAgIHRoYXQgY2FuIGJlIGRlcml2ZWQgZnJvbSBpbiBvcmRlciB0byBhc3Nv
Y2lhdGUgYWRkaXRpb25hbCBkYXRhIHdpdGggYSBUZXh0UnVuLiBUaGlzIGVmZmVjdGl2ZWx5IHJl
ZHVjZXMgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBUZXh0UnVuLgorCisgICAgICAgIEludHJv
ZHVjZSByZW5kZXJpbmcvVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCwgd2hpY2ggaW5oZXJpdHMg
ZnJvbSBUZXh0UnVuOjpBYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQgYW5kIGhvbGRzIGFkZGl0aW9u
YWwgZGF0YS4KKyAgICAgICAgSWYgdGhlIHByaW1hcnkgZm9udCBpbiB1c2UgaXMgYSBTVkcgRm9u
dCB0aGVuIGFsbG9jYXRlIGEgVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQgb2JqZWN0IGFuZCBzdG9y
ZSBpdCBpbiB0aGUgUmVmUHRyPEFic3RyYWN0UmVuZGVyaW5nQ29udGV4dD4KKyAgICAgICAgaW4g
VGV4dFJ1bi4gSWYgdGhlIHByaW1hcnkgZm9udCBpcyBub3QgYSBTVkcgRm9udCwgZG9uJ3QgZXZl
biBhbGxvY2F0ZSB0aGUgVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQgc3RydWN0dXJlLCBhcyB3ZSB3
b24ndCBuZWVkIHRoZSBjb250ZXh0IGRhdGEuCisgICAgICAgIFNWRyBGb250cyBnbHlwaCBtYXRj
aGluZyBvbmx5IHdvcmtzIHdpdGhpbiBhIGNvbnRleHQsIHNvIHdlIG5lZWQgYWNjZXNzIHRvIHRo
ZSBSZW5kZXJPYmplY3QgdGhhdCdzIGRyYXdpbmcgdGhlIHRleHQuCisKKyAgICAgICAgVGhpcyBp
cyB0aGUgbWFpbiBwcmVwYXJhdGlvbiBwYXRjaCBmb3IgdGhlIFNWRyBGb250cyByZXdyaXRlLCB0
aGF0IHdpbGwgYWxsb3cgdXMgdG8gc2hhcmUgdGhlIHNpbXBsZSB0ZXh0IGNvZGUgcGF0aCBmb3Ig
U1ZHIEZvbnRzIGFzIHdlbGwsCisgICAgICAgIG1ha2luZyBhbGwgQ1NTIHRleHQgcHJvcGVydGll
cyB3b3JrIGZvciBIVE1MIHRleHQgdXNpbmcgU1ZHIEZvbnRzLCBhbmQgYWxsb3dzIHByb3BlciBp
bnRlZ3JhdGlvbiB3aXRoaW4gdGhlIEdseXBoUGFnZSBjb25jZXB0LiBTb29uCisgICAgICAgIHdl
IGNhbiBpbnRlcm1peCBXT0ZGL1NWRyAmIG5hdGl2ZSBmb250cywgd2l0aGluIHNlZ21lbnQgZm9u
dCBkZWNsYXJhdGlvbnMuCisKKyAgICAgICAgU2Vjb25kIHBhcnQ6CisgICAgICAgIFJlbW92ZSBh
IGxvbmctc3RhbmRpbmcgbGF5ZXJpbmcgdmlvbGF0aW9uIGluIFNpbXBsZUZvbnREYXRhOiBpdCBz
dG9yZXMgU1ZHRm9udERhdGEgb2JqZWN0cywgdGhhdCBhcmUgbGl2aW5nIGluIHN2Zy8uCisgICAg
ICAgIFVzZSB0aGUgc2FtZSBjb25jZXB0IGFzIGFib3ZlLCBpbnRyb2R1Y2UgU2ltcGxlRm9udERh
dGE6OkFic3RyYWN0Rm9udERhdGEsIGFuZCBsZXQgU1ZHRm9udERhdGEgaW5oZXJpdCBmcm9tIEFi
c3RyYWN0Rm9udERhdGEgYW5kIGV4dGVudCBpdC4KKyAgICAgICAgSWYgU1ZHIEZvbnRzIGFyZSB1
c2VkLCBDU1NGb250RmFjZVNvdXJjZSB3aWxsIGNyZWF0ZSBhIFNWR0ZvbnREYXRhIG9iamVjdCBh
bmQgcGFzcyBpdCBhcyBQYXNzT3duUHRyPEFic3RyYWN0Rm9udERhdGE+IHRvIFNpbXBsZUZvbnRE
YXRhLgorCisgICAgICAgIEFsbCBsYXllcmluZyB2aW9sYXRpb25zIGFyZSBnb25lIG5vdywgU1ZH
IEZvbnRzIGFyZSBjbGVhbmx5IGludGVncmF0ZWQgbm93LgorICAgICAgICBEb2Vzbid0IGFmZmVj
dCBhbnkgdGVzdHMgeWV0LCByZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd1RleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
c2VsZWN0aW9uUmVjdEZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9y
UG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6On5TaW1wbGVGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpB
YnN0cmFjdEZvbnREYXRhOjp+QWJzdHJhY3RGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6Zm9udE1ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OnNldE1heENoYXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6c2V0QXZnQ2hhcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpz
ZXRTcGFjZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzZXRTcGFj
ZUdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzZXRaZXJvV2lkdGhT
cGFjZUdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpmb250RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6aXNTVkdGb250KToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzZXRNaXNzaW5nR2x5cGhEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVu
OjpUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OnNldEFsbG93VGFicyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpzZXRYUG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRSdW46OkFic3RyYWN0UmVuZGVyaW5nQ29udGV4dDo6fkFic3RyYWN0UmVuZGVyaW5nQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpyZW5kZXJpbmdDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRSdW46OnNldFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIHJl
bmRlcmluZy9FbGxpcHNpc0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnNlbGVjdGlvblJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKToKKyAgICAgICAg
KiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94OjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNr
Z3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdP
ckdyYW1tYXJNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRU
ZXh0TWF0Y2hNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y29tcHV0
ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0
Qm94OjpvZmZzZXRGb3JQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94
Ojpwb3NpdGlvbkZvck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpj
b25zdHJ1Y3RUZXh0UnVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpz
dHJpcFRyYWlsaW5nU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0V2lk
dGgpOgorICAgICAgICAoV2ViQ29yZTo6dHJ5SHlwaGVuYXRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0TGluZUJyZWFrKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpjaGVja0xpbmVzRm9yVGV4dE92ZXJmbG93KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxv
YWRDb250cm9sOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZs
ZXhpYmxlQm94OjphcHBseUxpbmVDbGFtcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpzZXRJbWFnZVNpemVGb3JB
bHRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtl
cjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtl
cjo6Z2V0UmVsYXRpdmVNYXJrZXJSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRocyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp3aWR0aCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sOjpnZXRBdmdDaGFyV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UnVuUmVuZGVy
aW5nQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5SZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQ6OmlzV2ViQ29yZVJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQ6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1blJl
bmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVBhaW50aW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OnNldEFjdGl2ZVBhaW50aW5nUmVzb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OlRleHRSdW5SZW5kZXJp
bmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRSdW5OZWVkc1JlbmRlcmluZ0NvbnRl
eHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbkluRnJhZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cHJlcGFyZUdyYXBoaWNzQ29udGV4dEZv
clRleHRQYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpyZXN0
b3JlR3JhcGhpY3NDb250ZXh0QWZ0ZXJUZXh0UGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExh
eW91dEVuZ2luZVNwYWNpbmc6OmNhbGN1bGF0ZVNWR0tlcm5pbmcpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0
VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TWV0cmljczo6bWVhc3VyZUNoYXJh
Y3RlclJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0LmNwcDogQ29waWVkIGZyb20gc3ZnL1NWR0ZvbnQuY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6c3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpcnN0UGFyZW50UmVuZGVyZXJGb3JOb25UZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpyZWZlcmVuY2luZ1JlbmRlck9iamVjdEZyb21SdW4pOgorICAgICAgICAoV2ViQ29yZTo6YWN0
aXZlUGFpbnRpbmdSZXNvdXJjZUZyb21SdW4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFJ1
bldhbGtlcjo6d2Fsayk6CisgICAgICAgIChXZWJDb3JlOjpmbG9hdFdpZHRoT2ZTdWJTdHJpbmdV
c2luZ1NWR0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6
OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRSdW5SZW5kZXJpbmdDb250ZXh0OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6b2Zmc2V0Rm9yUG9z
aXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KToKKyAgICAgICAgKiBzdmcvU1ZHRm9udC5jcHA6IFJl
bW92ZWQuCisgICAgICAgICogc3ZnL1NWR0ZvbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZvbnREYXRhOjppbml0aWFsaXplRm9udERhdGEpOgorICAgICAgICAqIHN2Zy9TVkdGb250
RGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGb250RGF0YTo6aXNTVkdGb250RGF0YSk6CisgICAgICAgICogc3ZnL1NW
R0dseXBoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaEVsZW1lbnQ6OlNW
R0dseXBoRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxk
R2VuZXJpY0dseXBoSWRlbnRpZmllcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdHbHlwaEVsZW1l
bnQ6OmJ1aWxkR2x5cGhJZGVudGlmaWVyKToKKyAgICAgICAgKiBzdmcvU1ZHSEtlcm5FbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0hLZXJuRWxlbWVudDo6U1ZHSEtlcm5FbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0hLZXJuRWxlbWVudDo6YnVpbGRIb3Jpem9udGFsS2Vy
bmluZ1BhaXIpOgorICAgICAgICAqIHN2Zy9TVkdWS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVktlcm5FbGVtZW50OjpTVkdWS2VybkVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVktlcm5FbGVtZW50OjpidWlsZFZlcnRpY2FsS2VybmluZ1BhaXIpOgorICAgICAg
ICAqIHN2Zy9TVkdWS2VybkVsZW1lbnQuaDoKKwogMjAxMS0wNS0yMCAgVG9uaXMgVGlpZ2kgIDx0
b25pc3RpaWdpQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFu
LgpJbmRleDogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDg2OTQyKQorKysgU291cmNlL1dl
YkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE2MTQsNiArMTYxNCw3IEBA
IElGIChFTkFCTEVfU1ZHKQogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdp
bmUuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5l
LmNwcAogICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNw
cAorICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAog
ICAgICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcAogICAgICAgICByZW5kZXJp
bmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAKICAgICAgICAgc3ZnL0NvbG9yRGlzdGFuY2UuY3BwCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHJldmlzaW9uIDg2OTQyKQorKysgU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQkod29ya2luZyBjb3B5KQpAQCAtMzA3Nywx
MSArMzA3NywxMyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmggXAorCVNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAgXAogCVNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9UYWJsZUxheW91dC5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1RyYWlsaW5nRmxvYXRz
Um9vdElubGluZUJveC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3Rh
dGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuaCBcCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvV2ViQ29yZS5neXBpCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAtNTMyNyw2ICs1MzI3LDcgQEAKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvU2hhZG93RWxlbWVudC5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmlu
Zy9TaGFkb3dFbGVtZW50LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9UYWJsZUxheW91dC5o
JywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCcsCiAg
ICAgICAgICAgICAncmVuZGVyaW5nL1RyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuY3BwJywKICAgICAgICAgICAgICdy
ZW5kZXJpbmcvVHJhbnNmb3JtU3RhdGUuaCcsCkBAIC01NDc2LDYgKzU0NzcsNyBAQAogICAgICAg
ICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmgnLAogICAg
ICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwJywK
ICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmgn
LAorICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQu
Y3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcCcsCiAg
ICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5oJywKICAgICAgICAgICAg
ICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5wcm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJl
dmlzaW9uIDg2OTQyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29w
eSkKQEAgLTIyNTEsNiArMjI1MSw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TWV0cmljcy5oIFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oIFwKKyAgICByZW5k
ZXJpbmcvVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCBcCiAgICAgcmVuZGVyaW5nL1RyYW5zZm9y
bVN0YXRlLmggXAogICAgIHN2Zy9hbmltYXRpb24vU01JTFRpbWVDb250YWluZXIuaCBcCiAgICAg
c3ZnL2FuaW1hdGlvbi9TTUlMVGltZS5oIFwKQEAgLTMyMDMsNiArMzIwNCw3IEBAIGNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgICAgICAgICAgICByZW5kZXJpbmcvc3ZnL1NW
R1RleHRMYXlvdXRFbmdpbmUuY3BwIFwKICAgICAgICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwIFwKICAgICAgICAgICAgICAgcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAgXAorICAgICAgICAgICAgICByZW5kZXJp
bmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcCBcCiAgICAgICAgICAgICAgIHJl
bmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwIFwKICAgICAgICAgICAgICAgcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0UXVlcnkuY3BwIFwKICAgICAgICAgICAgICAgc3ZnL1NWR0RvY3VtZW50RXh0
ZW5zaW9ucy5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29y
ZS52Y3Byb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2oJKHJldmlzaW9uIDg2OTQyKQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTM4ODAwLDYgKzM4ODAwLDEw
IEBACiAJCQkJPgogCQkJPC9GaWxlPgogCQkJPEZpbGUKKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJl
bmRlcmluZ1xUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oIgorCQkJCT4KKwkJCTwvRmlsZT4KKwkJ
CTxGaWxlCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcVHJhaWxpbmdGbG9hdHNSb290
SW5saW5lQm94LmgiCiAJCQkJPgogCQkJPC9GaWxlPgpAQCAtNDExODcsNiArNDExOTEsNTggQEAK
IAkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KIAkJCQk8L0ZpbGU+CiAJCQkJPEZpbGUKKwkJCQkJ
UmVsYXRpdmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmNwcCIKKwkJCQkJPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVn
fFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8
VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0Zp
bGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlJl
bGVhc2V8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJ
CQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJ
CTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFt
ZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRy
dWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wi
CisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3Vy
YXRpb24KKwkJCQkJCU5hbWU9IlJlbGVhc2VfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJRXhj
bHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9
IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgor
CQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IkRlYnVnX0FsbHxXaW4zMiIKKwkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJQcm9kdWN0aW9ufFdp
bjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9v
bAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVD
b25maWd1cmF0aW9uPgorCQkJCTwvRmlsZT4KKwkJCQk8RmlsZQogCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuaCIKIAkJCQkJPgog
CQkJCTwvRmlsZT4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDg2OTQyKQorKysgU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzMsNiAr
MTMzLDcgQEAKIAkJMDhBNDhBNkUwRTg2Q0Y2RDAwRTIyNUREIC8qIEpTU1ZHRWxlbWVudEluc3Rh
bmNlQ3VzdG9tLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA4QTQ4QTZEMEU4NkNGNkQwMEUyMjVERCAvKiBKU1NWR0VsZW1lbnRJbnN0YW5jZUN1c3Rv
bS5jcHAgKi87IH07CiAJCTA4QjM1QjEzMTI3QjZBN0MwMDUzMTRERCAvKiBTVkdBbmltYXRlZE51
bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhC
MzVCMTIxMjdCNkE3QzAwNTMxNEREIC8qIFNWR0FuaW1hdGVkTnVtYmVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDhCMzVCMTcxMjdCNkE4ODAw
NTMxNEREIC8qIFNWR0FuaW1hdGVkTnVtYmVyTGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhCMzVCMTYxMjdCNkE4ODAwNTMxNEREIC8qIFNWR0Fu
aW1hdGVkTnVtYmVyTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CisJCTA4QkY1QUUzMTM4NTc1NDEwMEVFQjQwNCAvKiBUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDhCRjVBRTIxMzg1NzU0MTAwRUVCNDA0IC8qIFRleHRSdW5SZW5kZXJpbmdDb250ZXh0LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDhDNzEzNkUx
Mjg5NTZBMzAwMUIxMDdFIC8qIFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4QzcxMzZEMTI4OTU2
QTMwMDFCMTA3RSAvKiBTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMDhDN0EyQzcxMERDNzQ2
MjAwMkQzNjhCIC8qIFNWR05hbWVzLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTY1ODFFOTA5RDE1MDhEMDAwRTYxRDcgLyog
U1ZHTmFtZXMuaCAqLzsgfTsKIAkJMDhDODU5QzAxMjc0NTc1NDAwQTU3MjhEIC8qIFNWR0FuaW1h
dGVkUmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MDhDODU5QkYxMjc0NTc1MzAwQTU3MjhEIC8qIFNWR0FuaW1hdGVkUmVjdC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00MzYxLDcgKzQzNjIsNiBA
QAogCQlCMjU1OTlBMzBEMDBEOEJBMDBCQjgyNUMgLyogU1ZHSW1hZ2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk5MEIwRDAwRDhCOTAwQkI4
MjVDIC8qIFNWR0ltYWdlLmNwcCAqLzsgfTsKIAkJQjI1NTk5QTQwRDAwRDhCQTAwQkI4MjVDIC8q
IFNWR0ltYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCMjU1OTkwQzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHSW1hZ2UuaCAqLzsgfTsKIAkJQjI1NTk5
QTUwRDAwRDhCQTAwQkI4MjVDIC8qIEVtcHR5Q2xpZW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI1NTk5MEQwRDAwRDhCOTAwQkI4MjVDIC8qIEVt
cHR5Q2xpZW50cy5oICovOyB9OwotCQlCMjYyQjgwNDBEMUYzMkQwMDAxNThGMDkgLyogU1ZHRm9u
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjYy
QjgwMzBEMUYzMkQwMDAxNThGMDkgLyogU1ZHRm9udC5jcHAgKi87IH07CiAJCUIyNjZDRDREMEMz
QUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjY2Q0Q0QjBDM0FFQzY1MDBFQjA4RDIgLyogSlNT
VkdFeGNlcHRpb24uY3BwICovOyB9OwogCQlCMjY2Q0Q0RTBDM0FFQzY1MDBFQjA4RDIgLyogSlNT
VkdFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEIyNjZDRDRDMEMzQUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5oICovOyB9Owog
CQlCMjc1MzU1ODBCMDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjc1MzUyQTBC
MDUzODE0MDAyQ0U2NEYgLyogVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi87IH07CkBAIC02
NTE5LDExICs2NTE5LDEzIEBACiAJCTA4QTQ4QTZEMEU4NkNGNkQwMEUyMjVERCAvKiBKU1NWR0Vs
ZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBKU1NWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA4QjM1QjEyMTI3QjZBN0MwMDUzMTRERCAvKiBTVkdBbmltYXRlZE51bWJlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZE51bWJlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEIzNUIxNjEyN0I2QTg4MDA1MzE0REQgLyog
U1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0FuaW1hdGVkTnVtYmVyTGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
OEJGNUFFMjEzODU3NTQxMDBFRUI0MDQgLyogVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhDNzEzNkQxMjg5NTZBMzAwMUIxMDdFIC8q
IFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gU1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwOEM4NTlCRjEyNzQ1NzUzMDBBNTcyOEQgLyogU1ZHQW5pbWF0
ZWRSZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkUmVj
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEM5MjUxNzBGQ0M3QzRBMDA0ODBE
RUMgLyogRmlsdGVyRWZmZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEZpbHRlckVmZmVjdC5jcHA7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlckVmZmVjdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4QzkyNTE4MEZDQzdDNEEwMDQ4MERFQyAvKiBG
aWx0ZXJFZmZlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRmlsdGVyRWZm
ZWN0Lmg7IHBhdGggPSBmaWx0ZXJzL0ZpbHRlckVmZmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwOENBM0Q0MzEyODk0QTM4MDBGRkYyNjAgLyogU1ZHU3RhdGljUHJvcGVydHlX
aXRoUGFyZW50VGVhck9mZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdT
dGF0aWNQcm9wZXJ0eVdpdGhQYXJlbnRUZWFyT2ZmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTA4RDI5NDQwMTM4NjY5RTQwMDk3Qzg5QiAvKiBTVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4RDQ2
Q0UyMTI3QUQ1RkMwMDg5Njk0QiAvKiBTVkdBbmltYXRlZEVudW1lcmF0aW9uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkRW51bWVyYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhFNEZFNDUwRTJCRDQxNDAwRjRDQUUwIC8qIEpTU1ZH
TGVuZ3RoQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
U1ZHTGVuZ3RoQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhFREUx
OUUxMkE1MEI4RTAwQjk1Nzk3IC8qIFNWR1JlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHUmVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTA3NzYs
NyArMTA3NzgsNiBAQAogCQlCMjU1OTkwQjBEMDBEOEI5MDBCQjgyNUMgLyogU1ZHSW1hZ2UuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR0ltYWdlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk5MEMwRDAwRDhCOTAwQkI4MjVDIC8qIFNW
R0ltYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdJbWFnZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTkwRDBEMDBEOEI5MDBCQjgyNUMgLyog
RW1wdHlDbGllbnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbXB0eUNs
aWVudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjI2MkI4MDMwRDFGMzJEMDAw
MTU4RjA5IC8qIFNWR0ZvbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFNWR0ZvbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjY2Q0Q0QjBD
M0FFQzY1MDBFQjA4RDIgLyogSlNTVkdFeGNlcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZHRXhjZXB0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjI2NkNENEMwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NWR0V4Y2VwdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjc1MzUyQTBCMDUzODE0MDAyQ0U2NEYgLyogVHJh
bnNmb3JtYXRpb25NYXRyaXhDRy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVHJhbnNmb3JtYXRpb25NYXRyaXhDRy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC0xMjc1Miw2ICsxMjc1Myw3IEBACiAJCQkJMDhGMEJGQzExMjU1QzUzQzAwMDc1MTg1
IC8qIFNWR1RleHRNZXRyaWNzLmggKi8sCiAJCQkJMDg1NEIwMTIxMjU1RTRFNjAwQjlDREQwIC8q
IFNWR1RleHRRdWVyeS5jcHAgKi8sCiAJCQkJMDg1NEIwMTMxMjU1RTRFNjAwQjlDREQwIC8qIFNW
R1RleHRRdWVyeS5oICovLAorCQkJCTA4RDI5NDQwMTM4NjY5RTQwMDk3Qzg5QiAvKiBTVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8sCiAJCQkpOwogCQkJcGF0aCA9IHN2ZzsKIAkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xNzI3Miw3ICsxNzI3NCw2IEBACiAJCQkJQjIyMjc4
N0IwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR0ZpdFRvVmlld0JveC5jcHAgKi8sCiAJCQkJQjIyMjc4
N0MwRDAwQkYyMDAwNzFCNzgyIC8qIFNWR0ZpdFRvVmlld0JveC5oICovLAogCQkJCUIyMjI3ODdE
MEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdGaXRUb1ZpZXdCb3guaWRsICovLAotCQkJCUIyNjJCODAz
MEQxRjMyRDAwMDE1OEYwOSAvKiBTVkdGb250LmNwcCAqLywKIAkJCQlCMjM3QzhBNTBEMzQ0RDEx
MDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuY3BwICovLAogCQkJCUIyMzdDOEE2MEQzNDREMTEwMDEz
RjcwNyAvKiBTVkdGb250RGF0YS5oICovLAogCQkJCUIyQTFGMkExMENFRjBBQkYwMDQ0MkY2QSAv
KiBTVkdGb250RWxlbWVudC5jcHAgKi8sCkBAIC0xOTEzOSw2ICsxOTE0MCw3IEBACiAJCQkJQTdG
MzM4QTExMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuY3BwICovLAogCQkJCUE3RjMz
OEEyMTFDMEVGQ0EwMEEzMjBBNyAvKiBTaGFkb3dFbGVtZW50LmggKi8sCiAJCQkJQThDRkYwNEMw
QTE1NEYwOTAwMEE0MjM0IC8qIFRhYmxlTGF5b3V0LmggKi8sCisJCQkJMDhCRjVBRTIxMzg1NzU0
MTAwRUVCNDA0IC8qIFRleHRSdW5SZW5kZXJpbmdDb250ZXh0LmggKi8sCiAJCQkJMzdGQzk2REEx
MTA0RUQ3MTAwM0UxRkFEIC8qIFRyYWlsaW5nRmxvYXRzUm9vdElubGluZUJveC5oICovLAogCQkJ
CTBGNTAwQUIwMEY1NERCMzEwMEVFRjkyOCAvKiBUcmFuc2Zvcm1TdGF0ZS5jcHAgKi8sCiAJCQkJ
MEY1MDBBQUUwRjU0REIxQjAwRUVGOTI4IC8qIFRyYW5zZm9ybVN0YXRlLmggKi8sCkBAIC0yMjY0
Myw2ICsyMjY0NSw3IEBACiAJCQkJOTMwRkM2OEExMDcyQjkyODAwNDUyOTNFIC8qIFRleHRSZW5k
ZXJpbmdNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0YxOThGNjA4MjQ1RTU5MDAxRTlBQkMg
LyogVGV4dFJlc291cmNlRGVjb2Rlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTgyNEI0NjUwRTJF
RjJFQTAwODFBN0I3IC8qIFRleHRSdW4uaCBpbiBIZWFkZXJzICovLAorCQkJCTA4QkY1QUUzMTM4
NTc1NDEwMEVFQjQwNCAvKiBUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjJDM0RBNEIwRDAwNkMxRDAwRUY2RjI2IC8qIFRleHRTdHJlYW0uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQ5ODc3MEYxMTI0MkM1MzUwMDIyMjZCQSAvKiBUZXh0dXJlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5N0JDODRBNTEyMzcwREM4MDAwQzYxNjEgLyogVGV4dFZpZXdTb3VyY2VQYXJz
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMjUyMzUsNyArMjUyMzgsNiBAQAogCQkJCUIyMjI3QTBC
MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGaWx0ZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUIyMjI3QTBFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFy
ZEF0dHJpYnV0ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBMTEwRDAwQkYyMjAwNzFC
NzgyIC8qIFNWR0ZpdFRvVmlld0JveC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjYyQjgwNDBE
MUYzMkQwMDAxNThGMDkgLyogU1ZHRm9udC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjM3QzhB
NzBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QjJBMUYyQUEwQ0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyMjI3QTE0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGb250RmFjZUVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VT
b3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNv
dXJjZS5jcHAJKHJldmlzaW9uIDg2OTQyKQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRG
YWNlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIFNpbXBsZUZv
bnREYXRhKiBDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8KICAgICAgICAgICAgICAgICAgICAgICAg
IG1fc3ZnRm9udEZhY2VFbGVtZW50ID0gZm9udEZhY2VFbGVtZW50OwogICAgICAgICAgICAgICAg
ICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgZm9udERhdGEgPSBhZG9wdFB0cihuZXcgU2lt
cGxlRm9udERhdGEoYWRvcHRQdHIobmV3IFNWR0ZvbnREYXRhKGZvbnRGYWNlRWxlbWVudCkpLCBm
b250RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhl
dGljSXRhbGljKSk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREYXRhID0gYWRvcHRQdHIobmV3
IFNpbXBsZUZvbnREYXRhKFNWR0ZvbnREYXRhOjpjcmVhdGUoZm9udEZhY2VFbGVtZW50KSwgZm9u
dERlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRp
Y0l0YWxpYykpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQogI2VuZGlm
CkBAIC0xNzAsNyArMTcwLDcgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpn
ZXRGbwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgICAgICAgICAvLyBJbi1Eb2N1bWVudCBT
VkcgRm9udHMKICAgICAgICAgICAgIGlmIChtX3N2Z0ZvbnRGYWNlRWxlbWVudCkKLSAgICAgICAg
ICAgICAgICBmb250RGF0YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShhZG9wdFB0cihu
ZXcgU1ZHRm9udERhdGEobV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCkpKSwgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykp
OworICAgICAgICAgICAgICAgIGZvbnREYXRhID0gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRh
KFNWR0ZvbnREYXRhOjpjcmVhdGUobV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCkpLCBmb250RGVz
Y3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRh
bGljKSk7CiAjZW5kaWYKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24gODY5NDIpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM2LDggKzEzNiw4IEBAIHZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb24K
ICAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKIAogI2lmIEVOQUJMRShT
VkdfRk9OVFMpCi0gICAgaWYgKHByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpKSB7Ci0gICAgICAg
IGRyYXdUZXh0VXNpbmdTVkdGb250KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKKyAg
ICBpZiAoVGV4dFJ1bjo6QWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0
ID0gcnVuLnJlbmRlcmluZ0NvbnRleHQoKSkgeworICAgICAgICByZW5kZXJpbmdDb250ZXh0LT5k
cmF3VGV4dFVzaW5nU1ZHRm9udCgqdGhpcywgY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8p
OwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCkBAIC0xNzgsOCArMTc4LDggQEAgdm9p
ZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbgogZmxvYXQgRm9udDo6d2lkdGgo
Y29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxi
YWNrRm9udHMsIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cpIGNvbnN0CiB7CiAjaWYgRU5B
QkxFKFNWR19GT05UUykKLSAgICBpZiAocHJpbWFyeUZvbnQoKS0+aXNTVkdGb250KCkpCi0gICAg
ICAgIHJldHVybiBmbG9hdFdpZHRoVXNpbmdTVkdGb250KHJ1bik7CisgICAgaWYgKFRleHRSdW46
OkFic3RyYWN0UmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJp
bmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybiByZW5kZXJpbmdDb250ZXh0LT5mbG9hdFdpZHRo
VXNpbmdTVkdGb250KCp0aGlzLCBydW4pOwogI2VuZGlmCiAKICAgICBDb2RlUGF0aCBjb2RlUGF0
aFRvVXNlID0gY29kZVBhdGgocnVuKTsKQEAgLTE5NSwxMSArMTk1LDExIEBAIGZsb2F0IEZvbnQ6
OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1biwgSGEKIAogZmxvYXQgRm9udDo6d2lkdGgoY29uc3Qg
VGV4dFJ1biYgcnVuLCBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZSwgaW50JiBjaGFyc0NvbnN1bWVk
LCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QKIHsKLSNpZiAhRU5BQkxFKFNWR19GT05UUykKLSAg
ICBVTlVTRURfUEFSQU0oZXh0cmFDaGFyc0F2YWlsYWJsZSk7CisjaWYgRU5BQkxFKFNWR19GT05U
UykKKyAgICBpZiAoVGV4dFJ1bjo6QWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdD
b250ZXh0ID0gcnVuLnJlbmRlcmluZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIHJlbmRlcmlu
Z0NvbnRleHQtPmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoKnRoaXMsIHJ1biwgZXh0cmFDaGFyc0F2
YWlsYWJsZSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKICNlbHNlCi0gICAgaWYgKHByaW1h
cnlGb250KCktPmlzU1ZHRm9udCgpKQotICAgICAgICByZXR1cm4gZmxvYXRXaWR0aFVzaW5nU1ZH
Rm9udChydW4sIGV4dHJhQ2hhcnNBdmFpbGFibGUsIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7
CisgICAgVU5VU0VEX1BBUkFNKGV4dHJhQ2hhcnNBdmFpbGFibGUpOwogI2VuZGlmCiAKICAgICBj
aGFyc0NvbnN1bWVkID0gcnVuLmxlbmd0aCgpOwpAQCAtMjE0LDEwICsyMTQsMTAgQEAgZmxvYXQg
Rm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBpbgogRmxvYXRSZWN0IEZvbnQ6OnNlbGVj
dGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogI2lmIEVOQUJMRShTVkdfRk9O
VFMpCi0gICAgaWYgKHByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpKQotICAgICAgICByZXR1cm4g
c2VsZWN0aW9uUmVjdEZvclRleHRVc2luZ1NWR0ZvbnQocnVuLCBwb2ludCwgaCwgZnJvbSwgdG8p
OworICAgIGlmIChUZXh0UnVuOjpBYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmluZ0Nv
bnRleHQgPSBydW4ucmVuZGVyaW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gcmVuZGVyaW5n
Q29udGV4dC0+c2VsZWN0aW9uUmVjdEZvclRleHRVc2luZ1NWR0ZvbnQoKnRoaXMsIHJ1biwgcG9p
bnQsIGgsIGZyb20sIHRvKTsKICNlbmRpZgotCisgCiAgICAgdG8gPSAodG8gPT0gLTEgPyBydW4u
bGVuZ3RoKCkgOiB0byk7CiAKICAgICBpZiAoY29kZVBhdGgocnVuKSAhPSBDb21wbGV4KQpAQCAt
MjI5LDggKzIyOSw4IEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dChjb24K
IGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgs
IGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNWR19GT05U
UykKLSAgICBpZiAocHJpbWFyeUZvbnQoKS0+aXNTVkdGb250KCkpCi0gICAgICAgIHJldHVybiBv
ZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQocnVuLCB4LCBpbmNsdWRlUGFydGlh
bEdseXBocyk7CisgICAgaWYgKFRleHRSdW46OkFic3RyYWN0UmVuZGVyaW5nQ29udGV4dCogcmVu
ZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBy
ZW5kZXJpbmdDb250ZXh0LT5vZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQoKnRo
aXMsIHJ1biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogI2VuZGlmCiAKICAgICBpZiAoY29k
ZVBhdGgocnVuKSAhPSBDb21wbGV4KQpAQCAtMjM5LDEzICsyMzksNiBAQCBpbnQgRm9udDo6b2Zm
c2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1CiAgICAgcmV0dXJuIG9mZnNldEZvclBvc2l0aW9u
Rm9yQ29tcGxleFRleHQocnVuLCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiB9CiAKLSNpZiBF
TkFCTEUoU1ZHX0ZPTlRTKQotYm9vbCBGb250Ojppc1NWR0ZvbnQoKSBjb25zdAoteyAKLSAgICBy
ZXR1cm4gcHJpbWFyeUZvbnQoKS0+aXNTVkdGb250KCk7IAotfQotI2VuZGlmCi0KIFN0cmluZyBG
b250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxl
bmd0aCkKIHsKICAgICBVQ2hhciogYnVmZmVyOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAgY2xh
c3MgRm9udFNlbGVjdG9yOwogY2xhc3MgR2x5cGhCdWZmZXI7CiBjbGFzcyBHbHlwaFBhZ2VUcmVl
Tm9kZTsKIGNsYXNzIEdyYXBoaWNzQ29udGV4dDsKLWNsYXNzIFNWR0ZvbnRFbGVtZW50OwogY2xh
c3MgVGV4dFJ1bjsKIAogc3RydWN0IEdseXBoRGF0YTsKQEAgLTE1NywxNCArMTU2LDYgQEAgcHVi
bGljOgogICAgIGVudW0gQ29kZVBhdGggeyBBdXRvLCBTaW1wbGUsIENvbXBsZXgsIFNpbXBsZVdp
dGhHbHlwaE92ZXJmbG93IH07CiAKIHByaXZhdGU6Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAg
ICB2b2lkIGRyYXdUZXh0VXNpbmdTVkdGb250KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRS
dW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0gICAgZmxv
YXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJikgY29uc3Q7Ci0gICAgZmxv
YXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiwgaW50IGV4dHJhQ2hhcnNB
dmFpbGFibGUsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0Owot
ICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBUZXh0
UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsK
LSAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IFRleHRS
dW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0j
ZW5kaWYKLQogICAgIGVudW0gRm9yVGV4dEVtcGhhc2lzT3JOb3QgeyBOb3RGb3JUZXh0RW1waGFz
aXMsIEZvclRleHRFbXBoYXNpcyB9OwogCiAgICAgLy8gUmV0dXJucyB0aGUgaW5pdGlhbCBpbi1z
dHJlYW0gYWR2YW5jZS4KQEAgLTIyMCwxMSArMjExLDYgQEAgcHVibGljOgogCiAgICAgc3RhdGlj
IFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwog
Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBib29sIGlzU1ZHRm9udCgpIGNvbnN0OwotICAg
IFNWR0ZvbnRFbGVtZW50KiBzdmdGb250KCkgY29uc3Q7Ci0jZW5kaWYKLQogICAgIGJvb2wgbmVl
ZHNUcmFuc2NvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fbmVlZHNUcmFuc2NvZGluZzsgfQogCiBw
cml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9u
dERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1NpbXBsZUZvbnREYXRhLmNwcAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDEzICszMyw2IEBACiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgog
Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSNpbmNsdWRlICJTVkdGb250RGF0YS5oIgotI2luY2x1
ZGUgIlNWR0ZvbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCi0j
aW5jbHVkZSAiU1ZHR2x5cGhFbGVtZW50LmgiCi0jZW5kaWYKLQogI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKQEAgLTYzLDY0ICs1Niwx
OCBAQCBTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEoY29uc3QgRm9uCiAgICAgcGxhdGZv
cm1DaGFyV2lkdGhJbml0KCk7CiB9CiAKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotU2ltcGxlRm9u
dERhdGE6OlNpbXBsZUZvbnREYXRhKFBhc3NPd25QdHI8U1ZHRm9udERhdGE+IHN2Z0ZvbnREYXRh
LCBpbnQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0YWxpYykKK1Np
bXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShQYXNzT3duUHRyPEFic3RyYWN0Rm9udERhdGE+
IGZvbnREYXRhLCBpbnQgc2l6ZSwgYm9vbCBzeW50aGV0aWNCb2xkLCBib29sIHN5bnRoZXRpY0l0
YWxpYykKICAgICA6IG1fcGxhdGZvcm1EYXRhKEZvbnRQbGF0Zm9ybURhdGEoc2l6ZSwgc3ludGhl
dGljQm9sZCwgc3ludGhldGljSXRhbGljKSkKKyAgICAsIG1fZm9udERhdGEoZm9udERhdGEpCiAg
ICAgLCBtX3RyZWF0QXNGaXhlZFBpdGNoKGZhbHNlKQotICAgICwgbV9zdmdGb250RGF0YShzdmdG
b250RGF0YSkKICAgICAsIG1faXNDdXN0b21Gb250KHRydWUpCiAgICAgLCBtX2lzTG9hZGluZyhm
YWxzZSkKICAgICAsIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjayhmYWxzZSkKICAgICAsIG1f
aXNCcm9rZW5JZGVvZ3JhcGhGYWxsYmFjayhmYWxzZSkKICAgICAsIG1faGFzVmVydGljYWxHbHlw
aHMoZmFsc2UpCiB7Ci0gICAgU1ZHRm9udEZhY2VFbGVtZW50KiBzdmdGb250RmFjZUVsZW1lbnQg
PSBtX3N2Z0ZvbnREYXRhLT5zdmdGb250RmFjZUVsZW1lbnQoKTsKLSAgICB1bnNpZ25lZCB1bml0
c1BlckVtID0gc3ZnRm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCk7Ci0KLSAgICBmbG9hdCBz
Y2FsZSA9IHNpemU7Ci0gICAgaWYgKHVuaXRzUGVyRW0pCi0gICAgICAgIHNjYWxlIC89IHVuaXRz
UGVyRW07Ci0KLSAgICBmbG9hdCB4SGVpZ2h0ID0gc3ZnRm9udEZhY2VFbGVtZW50LT54SGVpZ2h0
KCkgKiBzY2FsZTsKLSAgICBmbG9hdCBhc2NlbnQgPSBzdmdGb250RmFjZUVsZW1lbnQtPmFzY2Vu
dCgpICogc2NhbGU7Ci0gICAgZmxvYXQgZGVzY2VudCA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+ZGVz
Y2VudCgpICogc2NhbGU7Ci0gICAgZmxvYXQgbGluZUdhcCA9IDAuMWYgKiBzaXplOwotCi0gICAg
U1ZHRm9udEVsZW1lbnQqIGFzc29jaWF0ZWRGb250RWxlbWVudCA9IHN2Z0ZvbnRGYWNlRWxlbWVu
dC0+YXNzb2NpYXRlZEZvbnRFbGVtZW50KCk7Ci0gICAgaWYgKCF4SGVpZ2h0KSB7ICAgIAotICAg
ICAgICAvLyBGYWxsYmFjayBpZiB4X2hlaWdodEF0dHIgaXMgbm90IHNwZWNpZmllZCBmb3IgdGhl
IGZvbnQgZWxlbWVudC4KLSAgICAgICAgVmVjdG9yPFNWR0dseXBoPiBsZXR0ZXJYR2x5cGhzOwot
ICAgICAgICBhc3NvY2lhdGVkRm9udEVsZW1lbnQtPmdldEdseXBoSWRlbnRpZmllcnNGb3JTdHJp
bmcoU3RyaW5nKCJ4IiwgMSksIGxldHRlclhHbHlwaHMpOwotICAgICAgICB4SGVpZ2h0ID0gbGV0
dGVyWEdseXBocy5pc0VtcHR5KCkgPyAyICogYXNjZW50IC8gMyA6IGxldHRlclhHbHlwaHMuZmly
c3QoKS5ob3Jpem9udGFsQWR2YW5jZVggKiBzY2FsZTsKLSAgICB9Ci0KLSAgICBtX2ZvbnRNZXRy
aWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRBc2Nl
bnQoYXNjZW50KTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7Ci0gICAg
bV9mb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOwotICAgIG1fZm9udE1ldHJpY3Muc2V0
TGluZVNwYWNpbmcocm91bmRmKGFzY2VudCkgKyByb3VuZGYoZGVzY2VudCkgKyByb3VuZGYobGlu
ZUdhcCkpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKLQotICAgIFZl
Y3RvcjxTVkdHbHlwaD4gc3BhY2VHbHlwaHM7Ci0gICAgYXNzb2NpYXRlZEZvbnRFbGVtZW50LT5n
ZXRHbHlwaElkZW50aWZpZXJzRm9yU3RyaW5nKFN0cmluZygiICIsIDEpLCBzcGFjZUdseXBocyk7
Ci0gICAgbV9zcGFjZVdpZHRoID0gc3BhY2VHbHlwaHMuaXNFbXB0eSgpID8geEhlaWdodCA6IHNw
YWNlR2x5cGhzLmZpcnN0KCkuaG9yaXpvbnRhbEFkdmFuY2VYICogc2NhbGU7Ci0KLSAgICBWZWN0
b3I8U1ZHR2x5cGg+IG51bWVyYWxaZXJvR2x5cGhzOwotICAgIGFzc29jaWF0ZWRGb250RWxlbWVu
dC0+Z2V0R2x5cGhJZGVudGlmaWVyc0ZvclN0cmluZyhTdHJpbmcoIjAiLCAxKSwgbnVtZXJhbFpl
cm9HbHlwaHMpOwotICAgIG1fYXZnQ2hhcldpZHRoID0gbnVtZXJhbFplcm9HbHlwaHMuaXNFbXB0
eSgpID8gbV9zcGFjZVdpZHRoIDogbnVtZXJhbFplcm9HbHlwaHMuZmlyc3QoKS5ob3Jpem9udGFs
QWR2YW5jZVggKiBzY2FsZTsKLQotICAgIFZlY3RvcjxTVkdHbHlwaD4gbGV0dGVyV0dseXBoczsK
LSAgICBhc3NvY2lhdGVkRm9udEVsZW1lbnQtPmdldEdseXBoSWRlbnRpZmllcnNGb3JTdHJpbmco
U3RyaW5nKCJXIiwgMSksIGxldHRlcldHbHlwaHMpOwotICAgIG1fbWF4Q2hhcldpZHRoID0gbGV0
dGVyV0dseXBocy5pc0VtcHR5KCkgPyBhc2NlbnQgOiBsZXR0ZXJXR2x5cGhzLmZpcnN0KCkuaG9y
aXpvbnRhbEFkdmFuY2VYICogc2NhbGU7Ci0KLSAgICAvLyBGSVhNRTogaXMgdGhlcmUgYSB3YXkg
d2UgY2FuIGdldCB0aGUgc3BhY2UgZ2x5cGggZnJvbSB0aGUgU1ZHR2x5cGggYWJvdmU/Ci0gICAg
bV9zcGFjZUdseXBoID0gMDsKLSAgICBtX3plcm9XaWR0aFNwYWNlR2x5cGggPSAwOwotICAgIGRl
dGVybWluZVBpdGNoKCk7Ci0gICAgbV9taXNzaW5nR2x5cGhEYXRhLmZvbnREYXRhID0gdGhpczsK
LSAgICBtX21pc3NpbmdHbHlwaERhdGEuZ2x5cGggPSAwOworICAgIG1fZm9udERhdGEtPmluaXRp
YWxpemVGb250RGF0YSh0aGlzLCBzaXplKTsKIH0KLSNlbmRpZgogCiAjaWYgIShQTEFURk9STShR
VCkgJiYgIUhBVkUoUVJBV0ZPTlQpKQogLy8gRXN0aW1hdGVzIG9mIGF2Z0NoYXJXaWR0aCBhbmQg
bWF4Q2hhcldpZHRoIGZvciBwbGF0Zm9ybXMgdGhhdCBkb24ndCBzdXBwb3J0IGFjY2Vzc2luZyB0
aGVzZSB2YWx1ZXMgZnJvbSB0aGUgZm9udC4KQEAgLTE4Niw3ICsxMzMsNyBAQCB2b2lkIFNpbXBs
ZUZvbnREYXRhOjpwbGF0Zm9ybUdseXBoSW5pdCgpCiBTaW1wbGVGb250RGF0YTo6flNpbXBsZUZv
bnREYXRhKCkKIHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmICghbV9zdmdGb250RGF0
YSB8fCAhbV9zdmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVtZW50KCkpCisgICAgaWYgKCFtX2Zv
bnREYXRhIHx8ICFtX2ZvbnREYXRhLT5pc1NWR0ZvbnREYXRhKCkpCiAjZW5kaWYKICAgICAgICAg
cGxhdGZvcm1EZXN0cm95KCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC02NCwxNyArNjQsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250RGVz
Y3JpcHRpb247CiBjbGFzcyBTaGFyZWRCdWZmZXI7Ci1jbGFzcyBTVkdGb250RGF0YTsKIAogZW51
bSBGb250RGF0YVZhcmlhbnQgeyBBdXRvVmFyaWFudCwgTm9ybWFsVmFyaWFudCwgU21hbGxDYXBz
VmFyaWFudCwgRW1waGFzaXNNYXJrVmFyaWFudCB9OwogZW51bSBQaXRjaCB7IFVua25vd25QaXRj
aCwgRml4ZWRQaXRjaCwgVmFyaWFibGVQaXRjaCB9OwogCiBjbGFzcyBTaW1wbGVGb250RGF0YSA6
IHB1YmxpYyBGb250RGF0YSB7CiBwdWJsaWM6CisgICAgY2xhc3MgQWJzdHJhY3RGb250RGF0YSB7
CisgICAgICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAg
dmlydHVhbCB+QWJzdHJhY3RGb250RGF0YSgpIHsgfQorICAgICAgICB2aXJ0dWFsIGJvb2wgaXNT
VkdGb250RGF0YSgpIGNvbnN0ID0gMDsKKyAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIGluaXRp
YWxpemVGb250RGF0YShTaW1wbGVGb250RGF0YSosIGludCkgPSAwOworICAgIH07CisKKyAgICAv
LyBVc2VkIHRvIGNyZWF0ZSBwbGF0Zm9ybSBmb250cy4KICAgICBTaW1wbGVGb250RGF0YShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiwgYm9vbCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xv
YWRpbmcgPSBmYWxzZSwgYm9vbCBpc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOwot
I2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgU2ltcGxlRm9udERhdGEoUGFzc093blB0cjxTVkdG
b250RGF0YT4sIGludCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRh
bGljKTsKLSNlbmRpZgorCisgICAgLy8gVXNlZCB0byBjcmVhdGUgU1ZHIEZvbnRzLgorICAgIFNp
bXBsZUZvbnREYXRhKFBhc3NPd25QdHI8QWJzdHJhY3RGb250RGF0YT4sIGludCBzaXplLCBib29s
IHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKTsKKwogICAgIHZpcnR1YWwgflNp
bXBsZUZvbnREYXRhKCk7CiAKICAgICBjb25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURh
dGEoKSBjb25zdCB7IHJldHVybiBtX3BsYXRmb3JtRGF0YTsgfQpAQCAtMTA0LDkgKzExNCwxNCBA
QCBwdWJsaWM6CiAgICAgYm9vbCBoYXNWZXJ0aWNhbEdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzVmVydGljYWxHbHlwaHM7IH0KICAgICBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2so
KSBjb25zdCB7IHJldHVybiBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2s7IH0KIAorICAgIEZv
bnRNZXRyaWNzJiBmb250TWV0cmljcygpIHsgcmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KICAgICBj
b25zdCBGb250TWV0cmljcyYgZm9udE1ldHJpY3MoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRNZXRy
aWNzOyB9CisgICAgCiAgICAgZmxvYXQgbWF4Q2hhcldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9t
YXhDaGFyV2lkdGg7IH0KKyAgICB2b2lkIHNldE1heENoYXJXaWR0aChmbG9hdCBtYXhDaGFyV2lk
dGgpIHsgbV9tYXhDaGFyV2lkdGggPSBtYXhDaGFyV2lkdGg7IH0KKwogICAgIGZsb2F0IGF2Z0No
YXJXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXZnQ2hhcldpZHRoOyB9CisgICAgdm9pZCBzZXRB
dmdDaGFyV2lkdGgoZmxvYXQgYXZnQ2hhcldpZHRoKSB7IG1fYXZnQ2hhcldpZHRoID0gYXZnQ2hh
cldpZHRoOyB9CiAKICAgICBGbG9hdFJlY3QgYm91bmRzRm9yR2x5cGgoR2x5cGgpIGNvbnN0Owog
ICAgIGZsb2F0IHdpZHRoRm9yR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0OwpAQCAtMTE0LDEyICsx
MjksMTUgQEAgcHVibGljOgogICAgIGZsb2F0IHBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCkg
Y29uc3Q7CiAKICAgICBmbG9hdCBzcGFjZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZVdp
ZHRoOyB9CisgICAgdm9pZCBzZXRTcGFjZVdpZHRoKGZsb2F0IHNwYWNlV2lkdGgpIHsgbV9zcGFj
ZVdpZHRoID0gc3BhY2VXaWR0aDsgfQogCiAjaWYgVVNFKENHKSB8fCBVU0UoQ0FJUk8pIHx8IFBM
QVRGT1JNKFdYKSB8fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01FKQogICAgIGZsb2F0IHN5bnRoZXRp
Y0JvbGRPZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX3N5bnRoZXRpY0JvbGRPZmZzZXQ7IH0KICNl
bmRpZgogCiAgICAgR2x5cGggc3BhY2VHbHlwaCgpIGNvbnN0IHsgcmV0dXJuIG1fc3BhY2VHbHlw
aDsgfQorICAgIHZvaWQgc2V0U3BhY2VHbHlwaChHbHlwaCBzcGFjZUdseXBoKSB7IG1fc3BhY2VH
bHlwaCA9IHNwYWNlR2x5cGg7IH0KKyAgICB2b2lkIHNldFplcm9XaWR0aFNwYWNlR2x5cGgoR2x5
cGggc3BhY2VHbHlwaCkgeyBtX3plcm9XaWR0aFNwYWNlR2x5cGggPSBzcGFjZUdseXBoOyB9CiAg
ICAgYm9vbCBpc1plcm9XaWR0aFNwYWNlR2x5cGgoR2x5cGggZ2x5cGgpIGNvbnN0IHsgcmV0dXJu
IGdseXBoID09IG1femVyb1dpZHRoU3BhY2VHbHlwaCAmJiBnbHlwaDsgfQogCiAgICAgdmlydHVh
bCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMikgY29u
c3Q7CkBAIC0xMjgsMTggKzE0NiwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBkZXRlcm1pbmVQaXRj
aCgpOwogICAgIFBpdGNoIHBpdGNoKCkgY29uc3QgeyByZXR1cm4gbV90cmVhdEFzRml4ZWRQaXRj
aCA/IEZpeGVkUGl0Y2ggOiBWYXJpYWJsZVBpdGNoOyB9CiAKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQotICAgIFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRm9u
dERhdGEuZ2V0KCk7IH0KLSAgICBib29sIGlzU1ZHRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Zn
Rm9udERhdGE7IH0KLSNlbHNlCi0gICAgYm9vbCBpc1NWR0ZvbnQoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotI2VuZGlmCisgICAgQWJzdHJhY3RGb250RGF0YSogZm9udERhdGEoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnREYXRhLmdldCgpOyB9CisgICAgYm9vbCBpc1NWR0ZvbnQoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnREYXRhICYmIG1fZm9udERhdGEtPmlzU1ZHRm9udERhdGEoKTsgfQogCiAg
ICAgdmlydHVhbCBib29sIGlzQ3VzdG9tRm9udCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDdXN0b21G
b250OyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNM
b2FkaW5nOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2VnbWVudGVkKCkgY29uc3Q7CiAKICAgICBj
b25zdCBHbHlwaERhdGEmIG1pc3NpbmdHbHlwaERhdGEoKSBjb25zdCB7IHJldHVybiBtX21pc3Np
bmdHbHlwaERhdGE7IH0KKyAgICB2b2lkIHNldE1pc3NpbmdHbHlwaERhdGEoY29uc3QgR2x5cGhE
YXRhJiBnbHlwaERhdGEpIHsgbV9taXNzaW5nR2x5cGhEYXRhID0gZ2x5cGhEYXRhOyB9CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKQEAg
LTIwOCwxNiArMjIzLDEyIEBAIHByaXZhdGU6CiAgICAgZmxvYXQgbV9hdmdDaGFyV2lkdGg7CiAg
ICAgCiAgICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0YTsKKyAgICBPd25QdHI8QWJz
dHJhY3RGb250RGF0YT4gbV9mb250RGF0YTsKIAogICAgIG11dGFibGUgT3duUHRyPEdseXBoTWV0
cmljc01hcDxGbG9hdFJlY3Q+ID4gbV9nbHlwaFRvQm91bmRzTWFwOwogICAgIG11dGFibGUgR2x5
cGhNZXRyaWNzTWFwPGZsb2F0PiBtX2dseXBoVG9XaWR0aE1hcDsKIAogICAgIGJvb2wgbV90cmVh
dEFzRml4ZWRQaXRjaDsKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgT3duUHRyPFNWR0Zv
bnREYXRhPiBtX3N2Z0ZvbnREYXRhOwotI2VuZGlmCi0KICAgICBib29sIG1faXNDdXN0b21Gb250
OyAgLy8gV2hldGhlciBvciBub3Qgd2UgYXJlIGN1c3RvbSBmb250IGxvYWRlZCB2aWEgQGZvbnQt
ZmFjZQogICAgIGJvb2wgbV9pc0xvYWRpbmc7IC8vIFdoZXRoZXIgb3Igbm90IHRoaXMgY3VzdG9t
IGZvbnQgaXMgc3RpbGwgaW4gdGhlIGFjdCBvZiBsb2FkaW5nLgogICAgIApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gODY5NDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDE0ICsyNCwxMiBAQAogI2lmbmRlZiBUZXh0UnVuX2gKICNkZWZpbmUgVGV4dFJ1
bl9oCiAKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rp
b24uaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dU
RlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFJlbmRlck9iamVjdDsK
LWNsYXNzIFJlbmRlclNWR1Jlc291cmNlOwotCiBjbGFzcyBUZXh0UnVuIHsKIHB1YmxpYzoKICAg
ICBlbnVtIEV4cGFuc2lvbkJlaGF2aW9yRmxhZ3MgewpAQCAtNTYsMTAgKzU0LDYgQEAgcHVibGlj
OgogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICAgICAgLCBtX2RpcmVjdGlv
bmFsT3ZlcnJpZGUoZGlyZWN0aW9uYWxPdmVycmlkZSkKICAgICAgICAgLCBtX2Rpc2FibGVTcGFj
aW5nKGZhbHNlKQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAgICwgbV9yZWZlcmVuY2lu
Z1JlbmRlck9iamVjdCgwKQotICAgICAgICAsIG1fYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSgwKQot
I2VuZGlmCiAgICAgewogICAgIH0KIApAQCAtNzYsMTAgKzcwLDYgQEAgcHVibGljOgogICAgICAg
ICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICAgICAgLCBtX2RpcmVjdGlvbmFsT3ZlcnJp
ZGUoZGlyZWN0aW9uYWxPdmVycmlkZSkKICAgICAgICAgLCBtX2Rpc2FibGVTcGFjaW5nKGZhbHNl
KQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAgICwgbV9yZWZlcmVuY2luZ1JlbmRlck9i
amVjdCgwKQotICAgICAgICAsIG1fYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSgwKQotI2VuZGlmCiAg
ICAgewogICAgIH0KIApAQCAtOTcsNyArODcsOSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogICAgIGJv
b2wgYWxsb3dUYWJzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd1RhYnM7IH0KKyAgICB2b2lkIHNl
dEFsbG93VGFicyhib29sIGFsbG93VGFicykgeyBtX2FsbG93VGFicyA9IGFsbG93VGFiczsgfQog
ICAgIGZsb2F0IHhQb3MoKSBjb25zdCB7IHJldHVybiBtX3hwb3M7IH0KKyAgICB2b2lkIHNldFhQ
b3MoZmxvYXQgeFBvcykgeyBtX3hwb3MgPSB4UG9zOyB9CiAgICAgZmxvYXQgZXhwYW5zaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9leHBhbnNpb247IH0KICAgICBib29sIGFsbG93c0xlYWRpbmdFeHBh
bnNpb24oKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbkJlaGF2aW9yICYgQWxsb3dMZWFkaW5n
RXhwYW5zaW9uOyB9CiAgICAgYm9vbCBhbGxvd3NUcmFpbGluZ0V4cGFuc2lvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZXhwYW5zaW9uQmVoYXZpb3IgJiBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uOyB9CkBA
IC0xMTEsMTMgKzEwMywyMyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREaXJlY3Rpb24oVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24pIHsgbV9kaXJlY3Rpb24gPSBkaXJlY3Rpb247IH0KICAgICB2b2lk
IHNldERpcmVjdGlvbmFsT3ZlcnJpZGUoYm9vbCBvdmVycmlkZSkgeyBtX2RpcmVjdGlvbmFsT3Zl
cnJpZGUgPSBvdmVycmlkZTsgfQogCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBSZW5kZXJP
YmplY3QqIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9yZWZlcmVu
Y2luZ1JlbmRlck9iamVjdDsgfQotICAgIHZvaWQgc2V0UmVmZXJlbmNpbmdSZW5kZXJPYmplY3Qo
UmVuZGVyT2JqZWN0KiBvYmplY3QpIHsgbV9yZWZlcmVuY2luZ1JlbmRlck9iamVjdCA9IG9iamVj
dDsgfQorICAgIGNsYXNzIEFic3RyYWN0UmVuZGVyaW5nQ29udGV4dCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPEFic3RyYWN0UmVuZGVyaW5nQ29udGV4dD4geworICAgIHB1YmxpYzoKKyAgICAgICAgdmly
dHVhbCB+QWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0KCkgeyB9CisgICAgICAgIHZpcnR1YWwgYm9v
bCBpc1dlYkNvcmVSZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgPSAwOwogCi0gICAgUmVuZGVyU1ZH
UmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2
ZVBhaW50aW5nUmVzb3VyY2U7IH0KLSAgICB2b2lkIHNldEFjdGl2ZVBhaW50aW5nUmVzb3VyY2Uo
UmVuZGVyU1ZHUmVzb3VyY2UqIG9iamVjdCkgeyBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2UgPSBv
YmplY3Q7IH0KKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgICAgICAvLyBGSVhNRTogTm90ZSB0
aGF0IHRoZSBTVkcgRm9udCBpbnRlZ3JhdGlvbiBBUElzIHdpbGwgYmUgbW9yZSBhYnN0cmFjdCBh
bmQgc2ltcGxlciBvbmNlIHRoZSBTVkcgRm9udHMgcmV3cml0ZSBwYXRjaCBsYW5kcyAoNTkwODUp
LgorICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHRVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYs
IEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50
IGZyb20sIGludCB0bykgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lk
dGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mKSBjb25zdCA9IDA7Cisg
ICAgICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Jiwg
Y29uc3QgVGV4dFJ1biYsIGludCBleHRyYUNoYXJzQXZhaWxhYmxlLCBpbnQmIGNoYXJzQ29uc3Vt
ZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dCA9IDA7CisgICAgICAgIHZpcnR1YWwgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yVGV4dFVzaW5n
U1ZHRm9udChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29s
IGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdCA9IDA7CiAjZW5kaWYKKyAgICB9OworCisgICAg
QWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV9yZW5kZXJpbmdDb250ZXh0LmdldCgpOyB9CisgICAgdm9pZCBzZXRSZW5kZXJpbmdDb250
ZXh0KFBhc3NSZWZQdHI8QWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0PiBjb250ZXh0KSB7IG1fcmVu
ZGVyaW5nQ29udGV4dCA9IGNvbnRleHQ7IH0KIAogcHJpdmF0ZToKICAgICBjb25zdCBVQ2hhciog
bV9jaGFyYWN0ZXJzOwpAQCAtMTM2LDExICsxMzgsNyBAQCBwcml2YXRlOgogICAgIFRleHREaXJl
Y3Rpb24gbV9kaXJlY3Rpb247CiAgICAgYm9vbCBtX2RpcmVjdGlvbmFsT3ZlcnJpZGU7IC8vIFdh
cyB0aGlzIGRpcmVjdGlvbiBzZXQgYnkgYW4gb3ZlcnJpZGUgY2hhcmFjdGVyLgogICAgIGJvb2wg
bV9kaXNhYmxlU3BhY2luZzsKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgUmVuZGVyT2Jq
ZWN0KiBtX3JlZmVyZW5jaW5nUmVuZGVyT2JqZWN0OwotICAgIFJlbmRlclNWR1Jlc291cmNlKiBt
X2FjdGl2ZVBhaW50aW5nUmVzb3VyY2U7Ci0jZW5kaWYKKyAgICBSZWZQdHI8QWJzdHJhY3RSZW5k
ZXJpbmdDb250ZXh0PiBtX3JlbmRlcmluZ0NvbnRleHQ7CiB9OwogCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHJldmlzaW9uIDg2OTQyKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDQsOCArNDQsOSBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50CiAg
ICAgICAgIHNldFNoYWRvdyA9IHRydWU7CiAgICAgfQogCisgICAgY29uc3QgRm9udCYgZm9udCA9
IHN0eWxlLT5mb250KCk7CiAgICAgaWYgKHNlbGVjdGlvblN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25Ob25lKSB7Ci0gICAgICAgIHBhaW50U2VsZWN0aW9uKGNvbnRleHQsIHR4LCB0
eSwgc3R5bGUsIHN0eWxlLT5mb250KCkpOworICAgICAgICBwYWludFNlbGVjdGlvbihjb250ZXh0
LCB0eCwgdHksIHN0eWxlLCBmb250KTsKIAogICAgICAgICAvLyBTZWxlY3QgdGhlIGNvcnJlY3Qg
Y29sb3IgZm9yIHBhaW50aW5nIHRoZSB0ZXh0LgogICAgICAgICBDb2xvciBmb3JlZ3JvdW5kID0g
cGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0ID8gQ29sb3I6OmJsYWNrIDogcmVuZGVyZXIoKS0+c2Vs
ZWN0aW9uRm9yZWdyb3VuZENvbG9yKCk7CkBAIC01NCw3ICs1NSw3IEBAIHZvaWQgRWxsaXBzaXNC
b3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICB9CiAKICAgICAvLyBGSVhNRTogV2h5IGlz
IHRoaXMgYWx3YXlzIExUUj8gRml4IGJ5IHBhc3NpbmcgY29ycmVjdCB0ZXh0IHJ1biBmbGFncyBi
ZWxvdy4KLSAgICBjb250ZXh0LT5kcmF3VGV4dChzdHlsZS0+Zm9udCgpLCBSZW5kZXJCbG9jazo6
Y29uc3RydWN0VGV4dFJ1bkFsbG93VHJhaWxpbmdFeHBhbnNpb24obV9zdHIsIHN0eWxlKSwgSW50
UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgc3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
KTsKKyAgICBjb250ZXh0LT5kcmF3VGV4dChmb250LCBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bihyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgc3R5bGUsIFRleHRSdW46OkFsbG93VHJhaWxp
bmdFeHBhbnNpb24pLCBJbnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyBzdHlsZS0+Zm9udE1l
dHJpY3MoKS5hc2NlbnQoKSkpOwogCiAgICAgLy8gUmVzdG9yZSB0aGUgcmVndWxhciBmaWxsIGNv
bG9yLgogICAgIGlmICh0ZXh0Q29sb3IgIT0gY29udGV4dC0+ZmlsbENvbG9yKCkpCkBAIC03NCw5
ICs3NSw5IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKIEludFJl
Y3QgRWxsaXBzaXNCb3g6OnNlbGVjdGlvblJlY3QoaW50IHR4LCBpbnQgdHkpCiB7CiAgICAgUmVu
ZGVyU3R5bGUqIHN0eWxlID0gbV9yZW5kZXJlci0+c3R5bGUobV9maXJzdExpbmUpOwotICAgIGNv
bnN0IEZvbnQmIGYgPSBzdHlsZS0+Zm9udCgpOworICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHls
ZS0+Zm9udCgpOwogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBhbHdheXMgTFRSPyBGaXggYnkg
cGFzc2luZyBjb3JyZWN0IHRleHQgcnVuIGZsYWdzIGJlbG93LgotICAgIHJldHVybiBlbmNsb3Np
bmdJbnRSZWN0KGYuc2VsZWN0aW9uUmVjdEZvclRleHQoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRl
eHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKG1fc3RyLCBzdHlsZSksIEludFBvaW50KG1feCAr
IHR4LCBtX3kgKyB0eSArIHJvb3QoKS0+c2VsZWN0aW9uVG9wKCkpLCByb290KCktPnNlbGVjdGlv
bkhlaWdodCgpKSk7CisgICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25S
ZWN0Rm9yVGV4dChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlcigpLCBmb250
LCBtX3N0ciwgc3R5bGUsIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24pLCBJbnRQb2lu
dChtX3ggKyB0eCwgbV95ICsgdHkgKyByb290KCktPnNlbGVjdGlvblRvcCgpKSwgcm9vdCgpLT5z
ZWxlY3Rpb25IZWlnaHQoKSkpOwogfQogCiB2b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlv
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQpCkBAIC05Niw3ICs5Nyw3IEBAIHZvaWQgRWxsaXBzaXNC
b3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWMKICAgICBpbnQgaCA9IHJvb3QoKS0+c2VsZWN0aW9u
SGVpZ2h0KCk7CiAgICAgY29udGV4dC0+Y2xpcChJbnRSZWN0KG1feCArIHR4LCB5ICsgdHksIG1f
bG9naWNhbFdpZHRoLCBoKSk7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/
IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3MgYmVsb3cuCi0gICAgY29udGV4
dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKG1fc3RyLCBzdHlsZSksIEludFBvaW50KG1feCArIHR4
LCBtX3kgKyB0eSArIHkpLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKKyAgICBjb250ZXh0
LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bihyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgc3R5bGUsIFRleHRSdW46OkFsbG93VHJhaWxpbmdF
eHBhbnNpb24pLCBJbnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyB5KSwgaCwgYywgc3R5bGUt
PmNvbG9yU3BhY2UoKSk7CiB9CiAKIGJvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNvbnN0
IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0IElu
dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBpbnQgdHgsIGludCB0eSwgaW50IGxpbmVUb3AsIGlu
dCBsaW5lQm90dG9tKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmNwcAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5s
aW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJSdWJ5VGV4dC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAi
VGV4dC5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5oIgogI2luY2x1ZGUgImJyZWFrX2xpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fsd2F5
c0lubGluZS5oPgogCkBAIC0xODIsMTUgKzE4MiwxNSBAQCBJbnRSZWN0IElubGluZVRleHRCb3g6
OnNlbGVjdGlvblJlY3QoaW50CiAgICAgaW50IHNlbFRvcCA9IHNlbGVjdGlvblRvcCgpOwogICAg
IGludCBzZWxIZWlnaHQgPSBzZWxlY3Rpb25IZWlnaHQoKTsKICAgICBSZW5kZXJTdHlsZSogc3R5
bGVUb1VzZSA9IHRleHRPYmotPnN0eWxlKG1fZmlyc3RMaW5lKTsKLSAgICBjb25zdCBGb250JiBm
ID0gc3R5bGVUb1VzZS0+Zm9udCgpOworICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZVRvVXNl
LT5mb250KCk7CiAKICAgICBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4gY2hhcmFjdGVyc1dpdGhI
eXBoZW47CiAgICAgYm9vbCByZXNwZWN0SHlwaGVuID0gZVBvcyA9PSBtX2xlbiAmJiBoYXNIeXBo
ZW4oKTsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlVG9Vc2Us
IHJlc3BlY3RIeXBoZW4gPyAmY2hhcmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKKyAgICBUZXh0UnVu
IHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlVG9Vc2UsIGZvbnQsIHJlc3BlY3RIeXBo
ZW4gPyAmY2hhcmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKICAgICBpZiAocmVzcGVjdEh5cGhlbikK
ICAgICAgICAgZW5kUG9zID0gdGV4dFJ1bi5sZW5ndGgoKTsKIAotICAgIEludFJlY3QgciA9IGVu
Y2xvc2luZ0ludFJlY3QoZi5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBGbG9hdFBvaW50
KGxvZ2ljYWxMZWZ0KCksIHNlbFRvcCksIHNlbEhlaWdodCwgc1BvcywgZVBvcykpOworICAgIElu
dFJlY3QgciA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0
UnVuLCBGbG9hdFBvaW50KGxvZ2ljYWxMZWZ0KCksIHNlbFRvcCksIHNlbEhlaWdodCwgc1Bvcywg
ZVBvcykpOwogCiAgICAgaW50IGxvZ2ljYWxXaWR0aCA9IHIud2lkdGgoKTsKICAgICBpZiAoci54
KCkgPiBsb2dpY2FsUmlnaHQoKSkKQEAgLTY0Myw3ICs2NDMsNyBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgICAgIGNvbWJpbmVkVGV4dC0+Y2hhcmFjdGVy
c1RvUmVuZGVyKG1fc3RhcnQsIGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAKICAgICBCdWZmZXJGb3JB
cHBlbmRpbmdIeXBoZW4gY2hhcmFjdGVyc1dpdGhIeXBoZW47Ci0gICAgVGV4dFJ1biB0ZXh0UnVu
ID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZVRvVXNlLCBjaGFyYWN0ZXJzLCBsZW5ndGgsIGhhc0h5
cGhlbigpID8gJmNoYXJhY3RlcnNXaXRoSHlwaGVuIDogMCk7CisgICAgVGV4dFJ1biB0ZXh0UnVu
ID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZVRvVXNlLCBmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgs
IGhhc0h5cGhlbigpID8gJmNoYXJhY3RlcnNXaXRoSHlwaGVuIDogMCk7CiAgICAgaWYgKGhhc0h5
cGhlbigpKQogICAgICAgICBsZW5ndGggPSB0ZXh0UnVuLmxlbmd0aCgpOwogCkBAIC02ODAsNyAr
NjgwLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAgICAg
ICBpZiAoIWVtcGhhc2lzTWFyay5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIHVwZGF0ZUdyYXBo
aWNzQ29udGV4dChjb250ZXh0LCBlbXBoYXNpc01hcmtDb2xvciwgdGV4dFN0cm9rZUNvbG9yLCB0
ZXh0U3Ryb2tlV2lkdGgsIHN0eWxlVG9Vc2UtPmNvbG9yU3BhY2UoKSk7CiAKLSAgICAgICAgICAg
IHN0YXRpYyBUZXh0UnVuIG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1bigmb2JqZWN0
UmVwbGFjZW1lbnRDaGFyYWN0ZXIsIDEpOworICAgICAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NB
TChUZXh0UnVuLCBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclRleHRSdW4sICgmb2JqZWN0UmVw
bGFjZW1lbnRDaGFyYWN0ZXIsIDEpKTsKICAgICAgICAgICAgIFRleHRSdW4mIGVtcGhhc2lzTWFy
a1RleHRSdW4gPSBjb21iaW5lZFRleHQgPyBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclRleHRS
dW4gOiB0ZXh0UnVuOwogICAgICAgICAgICAgRmxvYXRQb2ludCBlbXBoYXNpc01hcmtUZXh0T3Jp
Z2luID0gY29tYmluZWRUZXh0ID8gRmxvYXRQb2ludChib3hPcmlnaW4ueCgpICsgYm94UmVjdC53
aWR0aCgpIC8gMiwgYm94T3JpZ2luLnkoKSArIGZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSkg
OiB0ZXh0T3JpZ2luOwogICAgICAgICAgICAgaWYgKGNvbWJpbmVkVGV4dCkKQEAgLTcwNiw3ICs3
MDYsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgICAg
IGlmICghZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgdXBkYXRlR3JhcGhp
Y3NDb250ZXh0KGNvbnRleHQsIHNlbGVjdGlvbkVtcGhhc2lzTWFya0NvbG9yLCB0ZXh0U3Ryb2tl
Q29sb3IsIHRleHRTdHJva2VXaWR0aCwgc3R5bGVUb1VzZS0+Y29sb3JTcGFjZSgpKTsKIAotICAg
ICAgICAgICAgc3RhdGljIFRleHRSdW4gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVu
KCZvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlciwgMSk7CisgICAgICAgICAgICBERUZJTkVfU1RB
VElDX0xPQ0FMKFRleHRSdW4sIG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biwgKCZv
YmplY3RSZXBsYWNlbWVudENoYXJhY3RlciwgMSkpOwogICAgICAgICAgICAgVGV4dFJ1biYgZW1w
aGFzaXNNYXJrVGV4dFJ1biA9IGNvbWJpbmVkVGV4dCA/IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFj
dGVyVGV4dFJ1biA6IHRleHRSdW47CiAgICAgICAgICAgICBGbG9hdFBvaW50IGVtcGhhc2lzTWFy
a1RleHRPcmlnaW4gPSBjb21iaW5lZFRleHQgPyBGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBi
b3hSZWN0LndpZHRoKCkgLyAyLCBib3hPcmlnaW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFz
Y2VudCgpKSA6IHRleHRPcmlnaW47CiAgICAgICAgICAgICBpZiAoY29tYmluZWRUZXh0KQpAQCAt
ODA4LDcgKzgwOCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGgK
IAogICAgIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiBjaGFyYWN0ZXJzV2l0aEh5cGhlbjsKICAg
ICBib29sIHJlc3BlY3RIeXBoZW4gPSBlUG9zID09IGxlbmd0aCAmJiBoYXNIeXBoZW4oKTsKLSAg
ICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBjaGFyYWN0ZXJzLCBs
ZW5ndGgsIHJlc3BlY3RIeXBoZW4gPyAmY2hhcmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKKyAgICBU
ZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmb250LCBjaGFyYWN0ZXJz
LCBsZW5ndGgsIHJlc3BlY3RIeXBoZW4gPyAmY2hhcmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKICAg
ICBpZiAocmVzcGVjdEh5cGhlbikKICAgICAgICAgZVBvcyA9IHRleHRSdW4ubGVuZ3RoKCk7CiAK
QEAgLTg0Myw3ICs4NDMsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25C
YWNrCiAgICAgaW50IGRlbHRhWSA9IHJlbmRlcmVyKCktPnN0eWxlKCktPmlzRmxpcHBlZExpbmVz
V3JpdGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRvbSgpIC0gbG9naWNhbEJvdHRvbSgpIDogbG9n
aWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wKCk7CiAgICAgaW50IHNlbEhlaWdodCA9IHNlbGVjdGlv
bkhlaWdodCgpOwogICAgIEZsb2F0UG9pbnQgbG9jYWxPcmlnaW4oYm94T3JpZ2luLngoKSwgYm94
T3JpZ2luLnkoKSAtIGRlbHRhWSk7Ci0gICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQo
Zm9udCwgY29uc3RydWN0VGV4dFJ1bihzdHlsZSksIGxvY2FsT3JpZ2luLCBzZWxIZWlnaHQsIGMs
IHN0eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOworICAgIGNvbnRleHQtPmRyYXdIaWdo
bGlnaHRGb3JUZXh0KGZvbnQsIGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQpLCBsb2NhbE9y
aWdpbiwgc2VsSGVpZ2h0LCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpLCBzUG9zLCBlUG9zKTsKIH0K
IAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTEwMDEsNyArMTAwMSw3IEBAIHZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnRTcGVsbGluZ09yR3JhbW0KICAgICAgICAgaW50IGRlbHRhWSA9IHJlbmRlcmVy
KCktPnN0eWxlKCktPmlzRmxpcHBlZExpbmVzV3JpdGluZ01vZGUoKSA/IHNlbGVjdGlvbkJvdHRv
bSgpIC0gbG9naWNhbEJvdHRvbSgpIDogbG9naWNhbFRvcCgpIC0gc2VsZWN0aW9uVG9wKCk7CiAg
ICAgICAgIGludCBzZWxIZWlnaHQgPSBzZWxlY3Rpb25IZWlnaHQoKTsKICAgICAgICAgRmxvYXRQ
b2ludCBzdGFydFBvaW50KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBkZWx0YVkpOwot
ICAgICAgICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUpOworICAgICAgICBU
ZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQpOwogCiAgICAgICAgIC8v
IEZJWE1FOiBDb252ZXJ0IHRoZSBkb2N1bWVudCBtYXJrZXJzIHRvIGZsb2F0IHJlY3RzLgogICAg
ICAgICBJbnRSZWN0IG1hcmtlclJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9u
UmVjdEZvclRleHQocnVuLCBzdGFydFBvaW50LCBzZWxIZWlnaHQsIHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uKSk7CkBAIC0xMDQ2LDcgKzEwNDYsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBh
aW50VGV4dE1hdGNoTWFya2VyCiAKICAgICBpbnQgc1BvcyA9IG1heChtYXJrZXIuc3RhcnRPZmZz
ZXQoKSAtIG1fc3RhcnQsICh1bnNpZ25lZCkwKTsKICAgICBpbnQgZVBvcyA9IG1pbihtYXJrZXIu
ZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0LCAodW5zaWduZWQpbV9sZW4pOwotICAgIFRleHRSdW4gcnVu
ID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSk7CisgICAgVGV4dFJ1biBydW4gPSBjb25zdHJ1Y3RU
ZXh0UnVuKHN0eWxlLCBmb250KTsKICAgICAvLyBBbHdheXMgY29tcHV0ZSBhbmQgc3RvcmUgdGhl
IHJlY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFya2VyLiBUaGUgY29tcHV0ZWQgcmVjdCBpcyBp
biBhYnNvbHV0ZSBjb29yZGluYXRlcy4KICAgICBJbnRSZWN0IG1hcmtlclJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQocnVuLCBJbnRQb2ludChtX3gsIHNl
bGVjdGlvblRvcCgpKSwgc2VsSGVpZ2h0LCBzUG9zLCBlUG9zKSk7CiAgICAgbWFya2VyUmVjdCA9
IHJlbmRlcmVyKCktPmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KG1hcmtlclJlY3QpKS5l
bmNsb3NpbmdCb3VuZGluZ0JveCgpOwpAQCAtMTA3Myw3ICsxMDczLDcgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhYwogCiAgICAgaW50IHNQb3MgPSBtYXgobWFya2Vy
LnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0LCAodW5zaWduZWQpMCk7CiAgICAgaW50IGVQb3MgPSBt
aW4obWFya2VyLmVuZE9mZnNldCgpIC0gbV9zdGFydCwgKHVuc2lnbmVkKW1fbGVuKTsKLSAgICBU
ZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUpOworICAgIFRleHRSdW4gcnVuID0g
Y29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCk7CiAgICAgSW50UG9pbnQgc3RhcnRQb2ludCA9
IEludFBvaW50KG1feCwgeSk7CiAgICAgCiAgICAgLy8gQ29tcHV0ZSBhbmQgc3RvcmUgdGhlIHJl
Y3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFya2VyLgpAQCAtMTIzMiw4ICsxMjMyLDggQEAgaW50
IElubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uKGZsbwogCiAgICAgUmVuZGVyVGV4dCog
dGV4dCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKTsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUg
PSB0ZXh0LT5zdHlsZShtX2ZpcnN0TGluZSk7Ci0gICAgY29uc3QgRm9udCogZiA9ICZzdHlsZS0+
Zm9udCgpOwotICAgIGludCBvZmZzZXQgPSBmLT5vZmZzZXRGb3JQb3NpdGlvbihjb25zdHJ1Y3RU
ZXh0UnVuKHN0eWxlKSwgbGluZU9mZnNldCAtIGxvZ2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKTsKKyAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKKyAgICBpbnQg
b2Zmc2V0ID0gZm9udC5vZmZzZXRGb3JQb3NpdGlvbihjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBm
b250KSwgbGluZU9mZnNldCAtIGxvZ2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsK
ICAgICBpZiAoYmxvY2tJc0luT3Bwb3NpdGVEaXJlY3Rpb24gJiYgKCFvZmZzZXQgfHwgb2Zmc2V0
ID09IG1fbGVuKSkKICAgICAgICAgcmV0dXJuICFvZmZzZXQgPyBtX2xlbiA6IDA7CiAgICAgcmV0
dXJuIG9mZnNldDsKQEAgLTEyNTAsMTEgKzEyNTAsMTEgQEAgZmxvYXQgSW5saW5lVGV4dEJveDo6
cG9zaXRpb25Gb3JPZmZzZXQoaQogICAgIFJlbmRlclRleHQqIHRleHQgPSB0b1JlbmRlclRleHQo
cmVuZGVyZXIoKSk7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlVG9Vc2UgPSB0ZXh0LT5zdHlsZSht
X2ZpcnN0TGluZSk7CiAgICAgQVNTRVJUKHN0eWxlVG9Vc2UpOwotICAgIGNvbnN0IEZvbnQmIGYg
PSBzdHlsZVRvVXNlLT5mb250KCk7CisgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlVG9Vc2Ut
PmZvbnQoKTsKICAgICBpbnQgZnJvbSA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBvZmZz
ZXQgLSBtX3N0YXJ0IDogMDsKICAgICBpbnQgdG8gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gbV9sZW4gOiBvZmZzZXQgLSBtX3N0YXJ0OwogICAgIC8vIEZJWE1FOiBEbyB3ZSBuZWVkIHRv
IGFkZCByaWdodEJlYXJpbmcgaGVyZT8KLSAgICByZXR1cm4gZi5zZWxlY3Rpb25SZWN0Rm9yVGV4
dChjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlVG9Vc2UpLCBJbnRQb2ludChsb2dpY2FsTGVmdCgpLCAw
KSwgMCwgZnJvbSwgdG8pLm1heFgoKTsKKyAgICByZXR1cm4gZm9udC5zZWxlY3Rpb25SZWN0Rm9y
VGV4dChjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlVG9Vc2UsIGZvbnQpLCBJbnRQb2ludChsb2dpY2Fs
TGVmdCgpLCAwKSwgMCwgZnJvbSwgdG8pLm1heFgoKTsKIH0KIAogYm9vbCBJbmxpbmVUZXh0Qm94
Ojpjb250YWluc0NhcmV0T2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CkBAIC0xMjgxLDcgKzEyODEs
NyBAQCBib29sIElubGluZVRleHRCb3g6OmNvbnRhaW5zQ2FyZXRPZmZzZXQoCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLVRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihSZW5k
ZXJTdHlsZSogc3R5bGUsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogY2hhcmFjdGVyc1dpdGhI
eXBoZW4pIGNvbnN0CitUZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oUmVu
ZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBo
ZW4qIGNoYXJhY3RlcnNXaXRoSHlwaGVuKSBjb25zdAogewogICAgIEFTU0VSVChzdHlsZSk7CiAK
QEAgLTEyODksMTAgKzEyODksMTAgQEAgVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RU
ZXh0UnVuKAogICAgIEFTU0VSVCh0ZXh0UmVuZGVyZXIpOwogICAgIEFTU0VSVCh0ZXh0UmVuZGVy
ZXItPmNoYXJhY3RlcnMoKSk7CiAKLSAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwg
dGV4dFJlbmRlcmVyLT5jaGFyYWN0ZXJzKCkgKyBzdGFydCgpLCBsZW4oKSwgY2hhcmFjdGVyc1dp
dGhIeXBoZW4pOworICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmb250LCB0ZXh0
UmVuZGVyZXItPmNoYXJhY3RlcnMoKSArIHN0YXJ0KCksIGxlbigpLCBjaGFyYWN0ZXJzV2l0aEh5
cGhlbik7CiB9CiAKLVRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihSZW5k
ZXJTdHlsZSogc3R5bGUsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBCdWZm
ZXJGb3JBcHBlbmRpbmdIeXBoZW4qIGNoYXJhY3RlcnNXaXRoSHlwaGVuKSBjb25zdAorVGV4dFJ1
biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIEJ1ZmZl
ckZvckFwcGVuZGluZ0h5cGhlbiogY2hhcmFjdGVyc1dpdGhIeXBoZW4pIGNvbnN0CiB7CiAgICAg
QVNTRVJUKHN0eWxlKTsKIApAQCAtMTMwMiw4ICsxMzAyLDExIEBAIFRleHRSdW4gSW5saW5lVGV4
dEJveDo6Y29uc3RydWN0VGV4dFJ1bigKICAgICBpZiAoY2hhcmFjdGVyc1dpdGhIeXBoZW4pCiAg
ICAgICAgIGFkanVzdENoYXJhY3RlcnNBbmRMZW5ndGhGb3JIeXBoZW4oKmNoYXJhY3RlcnNXaXRo
SHlwaGVuLCBzdHlsZSwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIAotICAgIC8vIEZJWE1FOiBSZW1v
dmUgVGV4dFJ1bnMgYWxsLWluLW9uZS1jb25zdHJ1Y3RvciBhbmQgdXNlIGV4cGxpY2l0IHNldHRl
cnMgaGVyZS4KLSAgICByZXR1cm4gVGV4dFJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIHRleHRSZW5k
ZXJlci0+YWxsb3dUYWJzKCksIHRleHRQb3MoKSwgZXhwYW5zaW9uKCksIGV4cGFuc2lvbkJlaGF2
aW9yKCksIGRpcmVjdGlvbigpLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVy
ZWQoKSk7CisgICAgVGV4dFJ1biBydW4oY2hhcmFjdGVycywgbGVuZ3RoLCB0ZXh0UmVuZGVyZXIt
PmFsbG93VGFicygpLCB0ZXh0UG9zKCksIGV4cGFuc2lvbigpLCBleHBhbnNpb25CZWhhdmlvcigp
LCBkaXJlY3Rpb24oKSwgbV9kaXJPdmVycmlkZSB8fCBzdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkp
OworICAgIGlmICh0ZXh0UnVuTmVlZHNSZW5kZXJpbmdDb250ZXh0KGZvbnQpKQorICAgICAgICBy
dW4uc2V0UmVuZGVyaW5nQ29udGV4dChUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKHRl
eHRSZW5kZXJlcikpOworCisgICAgcmV0dXJuIHJ1bjsKIH0KIAogI2lmbmRlZiBOREVCVUcKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAkocmV2aXNpb24gODY5
NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCSh3b3JraW5n
IGNvcHkpCkBAIC05OSw4ICs5OSw4IEBAIHByaXZhdGU6CiAgICAgaW50IHNlbGVjdGlvbkJvdHRv
bSgpOwogICAgIGludCBzZWxlY3Rpb25IZWlnaHQoKTsKIAotICAgIFRleHRSdW4gY29uc3RydWN0
VGV4dFJ1bihSZW5kZXJTdHlsZSosIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogPSAwKSBjb25z
dDsKLSAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqLCBjb25zdCBVQ2hh
ciosIGludCBsZW5ndGgsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogPSAwKSBjb25zdDsKKyAg
ICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqLCBjb25zdCBGb250JiwgQnVm
ZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiA9IDApIGNvbnN0OworICAgIFRleHRSdW4gY29uc3RydWN0
VGV4dFJ1bihSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciosIGludCBsZW5n
dGgsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogPSAwKSBjb25zdDsKIAogcHVibGljOgogICAg
IHZpcnR1YWwgSW50UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1cm4gSW50
UmVjdCh4KCksIHkoKSwgd2lkdGgoKSwgaGVpZ2h0KCkpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDg2OTQyKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNyAr
NTEsNyBAQAogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUg
IlRleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtU3RhdGUuaCIK
ICNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAKQEAgLTQ3MDcsNyArNDcwNyw3IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBzdHJpcFRyYWlsaW5nU3BhY2UoZmwKICAgICAgICAgUmVuZGVyVGV4
dCogdCA9IHRvUmVuZGVyVGV4dCh0cmFpbGluZ1NwYWNlQ2hpbGQpOwogICAgICAgICBjb25zdCBV
Q2hhciBzcGFjZSA9ICcgJzsKICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHQtPnN0eWxlKCkt
PmZvbnQoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgotICAgICAgICBmbG9h
dCBzcGFjZVdpZHRoID0gZm9udC53aWR0aChUZXh0UnVuKCZzcGFjZSwgMSkpOworICAgICAgICBm
bG9hdCBzcGFjZVdpZHRoID0gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bih0LCBmb250LCAmc3BhY2UsIDEsIHQtPnN0eWxlKCkpKTsKICAgICAgICAgaW5saW5lTWF4IC09
IHNwYWNlV2lkdGggKyBmb250LndvcmRTcGFjaW5nKCk7CiAgICAgICAgIGlmIChpbmxpbmVNaW4g
PiBpbmxpbmVNYXgpCiAgICAgICAgICAgICBpbmxpbmVNaW4gPSBpbmxpbmVNYXg7CkBAIC02MzE2
LDcgKzYzMTYsNyBAQCBpbmxpbmUgdm9pZCBSZW5kZXJCbG9jazo6RmxvYXRpbmdPYmplY3RzCiAg
ICAgICAgIG1fcmlnaHRPYmplY3RzQ291bnQtLTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6
Y29uc3RydWN0VGV4dFJ1bkFsbG93VHJhaWxpbmdFeHBhbnNpb24oY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgsIFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1bkZsYWdzIGZsYWdz
KQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNv
bnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVu
Z3RoLCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFu
c2lvbiwgVGV4dFJ1bkZsYWdzIGZsYWdzKQogewogICAgIEFTU0VSVChzdHlsZSk7CiAKQEAgLTYz
MjksMTMgKzYzMjksMTYgQEAgVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bkFs
bAogICAgICAgICAgICAgZGlyZWN0aW9uYWxPdmVycmlkZSB8PSBzdHlsZS0+dW5pY29kZUJpZGko
KSA9PSBPdmVycmlkZTsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogUmVtb3ZlIFRleHRSdW5zIGFs
bC1pbi1vbmUtY29uc3RydWN0b3IgYW5kIHVzZSBleHBsaWNpdCBzZXR0ZXJzIGhlcmUuCi0gICAg
cmV0dXJuIFRleHRSdW4oY2hhcmFjdGVycywgbGVuZ3RoLCBmYWxzZSwgMCwgMCwgVGV4dFJ1bjo6
QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgdGV4dERpcmVjdGlvbiwgZGlyZWN0aW9uYWxPdmVycmlk
ZSk7CisgICAgVGV4dFJ1biBydW4oY2hhcmFjdGVycywgbGVuZ3RoLCBmYWxzZSwgMCwgMCwgZXhw
YW5zaW9uLCB0ZXh0RGlyZWN0aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRlKTsKKyAgICBpZiAodGV4
dFJ1bk5lZWRzUmVuZGVyaW5nQ29udGV4dChmb250KSkKKyAgICAgICAgcnVuLnNldFJlbmRlcmlu
Z0NvbnRleHQoVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZShjb250ZXh0KSk7CisKKyAg
ICByZXR1cm4gcnVuOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVu
QWxsb3dUcmFpbGluZ0V4cGFuc2lvbihjb25zdCBTdHJpbmcmIHN0cmluZywgUmVuZGVyU3R5bGUq
IHN0eWxlLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVo
YXZpb3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7Ci0gICAgcmV0dXJuIGNvbnN0
cnVjdFRleHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0
cmluZy5sZW5ndGgoKSwgc3R5bGUsIGZsYWdzKTsKKyAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1
bihjb250ZXh0LCBmb250LCBzdHJpbmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCksIHN0
eWxlLCBleHBhbnNpb24sIGZsYWdzKTsKIH0KIAogI2lmbmRlZiBOREVCVUcKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw2
ICsyNyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJv
eExpc3QuaCIKICNpbmNsdWRlICJSb290SW5saW5lQm94LmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5o
IgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4K
IApAQCAtMTY5LDggKzE3MCwxMSBAQCBwdWJsaWM6CiAgICAgCiAgICAgc3RhdGljIHZvaWQgYXBw
ZW5kUnVuc0Zvck9iamVjdChCaWRpUnVuTGlzdDxCaWRpUnVuPiYsIGludCBzdGFydCwgaW50IGVu
ZCwgUmVuZGVyT2JqZWN0KiwgSW5saW5lQmlkaVJlc29sdmVyJik7CiAKLSAgICBzdGF0aWMgVGV4
dFJ1biBjb25zdHJ1Y3RUZXh0UnVuQWxsb3dUcmFpbGluZ0V4cGFuc2lvbihjb25zdCBTdHJpbmcm
LCBSZW5kZXJTdHlsZSosIFRleHRSdW5GbGFncyA9IERlZmF1bHRUZXh0UnVuRmxhZ3MpOwotICAg
IHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKGNv
bnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgUmVuZGVyU3R5bGUqLCBUZXh0UnVuRmxhZ3MgPSBEZWZh
dWx0VGV4dFJ1bkZsYWdzKTsKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJl
bmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFN0cmluZyYsIFJlbmRlclN0
eWxlKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRSdW46OkV4cGFu
c2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46
OkZvcmJpZExlYWRpbmdFeHBhbnNpb24sIFRleHRSdW5GbGFncyA9IERlZmF1bHRUZXh0UnVuRmxh
Z3MpOworCisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3Qq
IGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciosIGludCBsZW5ndGgsIFJlbmRlclN0
eWxlKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRleHRSdW46OkV4cGFu
c2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46
OkZvcmJpZExlYWRpbmdFeHBhbnNpb24sIFRleHRSdW5GbGFncyA9IERlZmF1bHRUZXh0UnVuRmxh
Z3MpOwogCiAgICAgQ29sdW1uSW5mbyogY29sdW1uSW5mbygpIGNvbnN0OwogICAgIGludCBjb2x1
bW5HYXAoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUgIlNldHRp
bmdzLmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJUZXh0UnVu
LmgiCiAjaW5jbHVkZSAiVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmgiCiAjaW5jbHVkZSAi
VmVydGljYWxQb3NpdGlvbkNhY2hlLmgiCiAjaW5jbHVkZSAiYnJlYWtfbGluZXMuaCIKQEAgLTQ4
Miw3ICs0ODEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yVGV4CiAg
ICAgaW50IGh5cGhlbldpZHRoID0gMDsKICAgICBpZiAoc3RhdGljX2Nhc3Q8SW5saW5lVGV4dEJv
eCo+KHJ1bi0+bV9ib3gpLT5oYXNIeXBoZW4oKSkgewogICAgICAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGh5cGhlblN0cmluZyA9IHJlbmRlcmVyLT5zdHlsZSgpLT5oeXBoZW5TdHJpbmcoKTsKLSAg
ICAgICAgaHlwaGVuV2lkdGggPSByZW5kZXJlci0+c3R5bGUobGluZUluZm8uaXNGaXJzdExpbmUo
KSktPmZvbnQoKS53aWR0aChUZXh0UnVuKGh5cGhlblN0cmluZy5jaGFyYWN0ZXJzKCksIGh5cGhl
blN0cmluZy5sZW5ndGgoKSkpOworICAgICAgICBjb25zdCBGb250JiBmb250ID0gcmVuZGVyZXIt
PnN0eWxlKGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkpLT5mb250KCk7CisgICAgICAgIGh5cGhlbldp
ZHRoID0gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5kZXJlciwg
Zm9udCwgaHlwaGVuU3RyaW5nLnN0cmluZygpLCByZW5kZXJlci0+c3R5bGUoKSkpOwogICAgIH0K
ICAgICBydW4tPm1fYm94LT5zZXRMb2dpY2FsV2lkdGgocmVuZGVyZXItPndpZHRoKHJ1bi0+bV9z
dGFydCwgcnVuLT5tX3N0b3AgLSBydW4tPm1fc3RhcnQsIHhQb3MsIGxpbmVJbmZvLmlzRmlyc3RM
aW5lKCksICZmYWxsYmFja0ZvbnRzLCAmZ2x5cGhPdmVyZmxvdykgKyBoeXBoZW5XaWR0aCk7CiAg
ICAgaWYgKCFmYWxsYmFja0ZvbnRzLmlzRW1wdHkoKSkgewpAQCAtMTU3Niw3ICsxNTc2LDEwIEBA
IHN0YXRpYyBpbmxpbmUgZmxvYXQgdGV4dFdpZHRoKFJlbmRlclRleHQKIHsKICAgICBpZiAoaXNG
aXhlZFBpdGNoIHx8ICghZnJvbSAmJiBsZW4gPT0gdGV4dC0+dGV4dExlbmd0aCgpKSB8fCB0ZXh0
LT5zdHlsZSgpLT5oYXNUZXh0Q29tYmluZSgpKQogICAgICAgICByZXR1cm4gdGV4dC0+d2lkdGgo
ZnJvbSwgbGVuLCBmb250LCB4UG9zKTsKLSAgICByZXR1cm4gZm9udC53aWR0aChUZXh0UnVuKHRl
eHQtPmNoYXJhY3RlcnMoKSArIGZyb20sIGxlbiwgIWNvbGxhcHNlV2hpdGVTcGFjZSwgeFBvcykp
OworICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGV4dCwg
Zm9udCwgdGV4dC0+Y2hhcmFjdGVycygpICsgZnJvbSwgbGVuLCB0ZXh0LT5zdHlsZSgpKTsKKyAg
ICBydW4uc2V0QWxsb3dUYWJzKCFjb2xsYXBzZVdoaXRlU3BhY2UpOworICAgIHJ1bi5zZXRYUG9z
KHhQb3MpOworICAgIHJldHVybiBmb250LndpZHRoKHJ1bik7CiB9CiAKIHN0YXRpYyB2b2lkIHRy
eUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IEF0
b21pY1N0cmluZyYgbG9jYWxlSWRlbnRpZmllciwgaW50IG1pbmltdW1QcmVmaXhMZW5ndGgsIGlu
dCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBpbnQgbGFzdFNwYWNlLCBpbnQgcG9zLCBmbG9hdCB4UG9z
LCBpbnQgYXZhaWxhYmxlV2lkdGgsIGJvb2wgaXNGaXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hp
dGVTcGFjZSwgaW50IGxhc3RTcGFjZVdvcmRTcGFjaW5nLCBJbmxpbmVJdGVyYXRvciYgbGluZUJy
ZWFrLCBpbnQgbmV4dEJyZWFrYWJsZSwgYm9vbCYgaHlwaGVuYXRlZCkKQEAgLTE1OTIsNyArMTU5
NSw3IEBAIHN0YXRpYyB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHQKICAgICAgICAg
cmV0dXJuOwogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBoeXBoZW5TdHJpbmcgPSB0ZXh0LT5z
dHlsZSgpLT5oeXBoZW5TdHJpbmcoKTsKLSAgICBpbnQgaHlwaGVuV2lkdGggPSBmb250LndpZHRo
KFRleHRSdW4oaHlwaGVuU3RyaW5nLmNoYXJhY3RlcnMoKSwgaHlwaGVuU3RyaW5nLmxlbmd0aCgp
KSk7CisgICAgaW50IGh5cGhlbldpZHRoID0gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bih0ZXh0LCBmb250LCBoeXBoZW5TdHJpbmcuc3RyaW5nKCksIHRleHQtPnN0eWxl
KCkpKTsKIAogICAgIGZsb2F0IG1heFByZWZpeFdpZHRoID0gYXZhaWxhYmxlV2lkdGggLSB4UG9z
IC0gaHlwaGVuV2lkdGggLSBsYXN0U3BhY2VXb3JkU3BhY2luZzsKICAgICAvLyBJZiB0aGUgbWF4
aW11bSB3aWR0aCBhdmFpbGFibGUgZm9yIHRoZSBwcmVmaXggYmVmb3JlIHRoZSBoeXBoZW4gaXMg
c21hbGwsIHRoZW4gaXQgaXMgdmVyeSB1bmxpa2VseQpAQCAtMTYwMCw3ICsxNjAzLDExIEBAIHN0
YXRpYyB2b2lkIHRyeUh5cGhlbmF0aW5nKFJlbmRlclRleHQqIHQKICAgICBpZiAobWF4UHJlZml4
V2lkdGggPD0gZm9udC5waXhlbFNpemUoKSAqIDUgLyA0KQogICAgICAgICByZXR1cm47CiAKLSAg
ICB1bnNpZ25lZCBwcmVmaXhMZW5ndGggPSBmb250Lm9mZnNldEZvclBvc2l0aW9uKFRleHRSdW4o
dGV4dC0+Y2hhcmFjdGVycygpICsgbGFzdFNwYWNlLCBwb3MgLSBsYXN0U3BhY2UsICFjb2xsYXBz
ZVdoaXRlU3BhY2UsIHhQb3MgKyBsYXN0U3BhY2VXb3JkU3BhY2luZyksIG1heFByZWZpeFdpZHRo
LCBmYWxzZSk7CisgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bih0ZXh0LCBmb250LCB0ZXh0LT5jaGFyYWN0ZXJzKCkgKyBsYXN0U3BhY2UsIHBvcyAtIGxhc3RT
cGFjZSwgdGV4dC0+c3R5bGUoKSk7CisgICAgcnVuLnNldEFsbG93VGFicyghY29sbGFwc2VXaGl0
ZVNwYWNlKTsKKyAgICBydW4uc2V0WFBvcyh4UG9zICsgbGFzdFNwYWNlV29yZFNwYWNpbmcpOwor
CisgICAgdW5zaWduZWQgcHJlZml4TGVuZ3RoID0gZm9udC5vZmZzZXRGb3JQb3NpdGlvbihydW4s
IG1heFByZWZpeFdpZHRoLCBmYWxzZSk7CiAgICAgaWYgKHByZWZpeExlbmd0aCA8IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtaW5pbXVtUHJlZml4TGVuZ3RoKSkKICAgICAgICAgcmV0dXJuOwogCkBA
IC0yMDM4LDcgKzIwNDUsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6TGluZUJyZWFr
ZXI6CiAKICAgICAgICAgICAgIC8vIE5vbi16ZXJvIG9ubHkgd2hlbiBrZXJuaW5nIGlzIGVuYWJs
ZWQsIGluIHdoaWNoIGNhc2Ugd2UgbWVhc3VyZSB3b3JkcyB3aXRoIHRoZWlyIHRyYWlsaW5nCiAg
ICAgICAgICAgICAvLyBzcGFjZSwgdGhlbiBzdWJ0cmFjdCBpdHMgd2lkdGguCi0gICAgICAgICAg
ICBmbG9hdCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gZi50eXBlc2V0dGluZ0ZlYXR1cmVzKCkg
JiBLZXJuaW5nID8gZi53aWR0aChUZXh0UnVuKCZzcGFjZSwgMSkpICsgd29yZFNwYWNpbmcgOiAw
OworICAgICAgICAgICAgZmxvYXQgd29yZFRyYWlsaW5nU3BhY2VXaWR0aCA9IGYudHlwZXNldHRp
bmdGZWF0dXJlcygpICYgS2VybmluZyA/IGYud2lkdGgoY29uc3RydWN0VGV4dFJ1bih0LCBmLCAm
c3BhY2UsIDEsIHN0eWxlKSkgKyB3b3JkU3BhY2luZyA6IDA7CiAKICAgICAgICAgICAgIGZsb2F0
IHdyYXBXID0gd2lkdGgudW5jb21taXR0ZWRXaWR0aCgpICsgaW5saW5lTG9naWNhbFdpZHRoKGN1
cnJlbnQubV9vYmosICFhcHBsaWVkU3RhcnRXaWR0aCwgdHJ1ZSk7CiAgICAgICAgICAgICBmbG9h
dCBjaGFyV2lkdGggPSAwOwpAQCAtMjA2Nyw3ICsyMDc0LDcgQEAgSW5saW5lSXRlcmF0b3IgUmVu
ZGVyQmxvY2s6OkxpbmVCcmVha2VyOgogCiAgICAgICAgICAgICAgICAgaWYgKGMgPT0gc29mdEh5
cGhlbiAmJiBhdXRvV3JhcCAmJiAhaHlwaGVuV2lkdGggJiYgc3R5bGUtPmh5cGhlbnMoKSAhPSBI
eXBoZW5zTm9uZSkgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGh5
cGhlblN0cmluZyA9IHN0eWxlLT5oeXBoZW5TdHJpbmcoKTsKLSAgICAgICAgICAgICAgICAgICAg
aHlwaGVuV2lkdGggPSBmLndpZHRoKFRleHRSdW4oaHlwaGVuU3RyaW5nLmNoYXJhY3RlcnMoKSwg
aHlwaGVuU3RyaW5nLmxlbmd0aCgpKSk7CisgICAgICAgICAgICAgICAgICAgIGh5cGhlbldpZHRo
ID0gZi53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHQsIGYsIGh5cGhlblN0cmluZy5zdHJpbmcoKSwg
Y3VycmVudC5tX29iai0+c3R5bGUoKSkpOwogICAgICAgICAgICAgICAgICAgICB3aWR0aC5hZGRV
bmNvbW1pdHRlZFdpZHRoKGh5cGhlbldpZHRoKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTIz
OTcsMTIgKzI0MDQsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2hlY2tMaW5lc0ZvclRleHRPdmVy
ZgogewogICAgIC8vIERldGVybWluZSB0aGUgd2lkdGggb2YgdGhlIGVsbGlwc2lzIHVzaW5nIHRo
ZSBjdXJyZW50IGZvbnQuCiAgICAgLy8gRklYTUU6IENTUzMgc2F5cyB0aGlzIGlzIGNvbmZpZ3Vy
YWJsZSwgYWxzbyBuZWVkIHRvIHVzZSAweDAwMkUgKEZVTEwgU1RPUCkgaWYgaG9yaXpvbnRhbCBl
bGxpcHNpcyBpcyAibm90IHJlbmRlcmFibGUiCi0gICAgVGV4dFJ1biBlbGxpcHNpc1J1bigmaG9y
aXpvbnRhbEVsbGlwc2lzLCAxKTsKKyAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9u
dCgpOwogICAgIERFRklORV9TVEFUSUNfTE9DQUwoQXRvbWljU3RyaW5nLCBlbGxpcHNpc1N0ciwg
KCZob3Jpem9udGFsRWxsaXBzaXMsIDEpKTsKICAgICBjb25zdCBGb250JiBmaXJzdExpbmVGb250
ID0gZmlyc3RMaW5lU3R5bGUoKS0+Zm9udCgpOwotICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHls
ZSgpLT5mb250KCk7Ci0gICAgaW50IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVG
b250LndpZHRoKGVsbGlwc2lzUnVuKTsKLSAgICBpbnQgZWxsaXBzaXNXaWR0aCA9IChmb250ID09
IGZpcnN0TGluZUZvbnQpID8gZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA6IGZvbnQud2lkdGgoZWxs
aXBzaXNSdW4pOworICAgIGludCBmaXJzdExpbmVFbGxpcHNpc1dpZHRoID0gZmlyc3RMaW5lRm9u
dC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZpcnN0TGluZUZvbnQsICZob3Jpem9udGFs
RWxsaXBzaXMsIDEsIGZpcnN0TGluZVN0eWxlKCkpKTsKKyAgICBpbnQgZWxsaXBzaXNXaWR0aCA9
IChmb250ID09IGZpcnN0TGluZUZvbnQpID8gZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA6IGZvbnQu
d2lkdGgoY29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCAmaG9yaXpvbnRhbEVsbGlwc2lzLCAx
LCBzdHlsZSgpKSk7CiAKICAgICAvLyBGb3IgTFRSIHRleHQgdHJ1bmNhdGlvbiwgd2Ugd2FudCB0
byBnZXQgdGhlIHJpZ2h0IGVkZ2Ugb2Ygb3VyIHBhZGRpbmcgYm94LCBhbmQgdGhlbiB3ZSB3YW50
IHRvIHNlZQogICAgIC8vIGlmIHRoZSByaWdodCBlZGdlIG9mIGEgbGluZSBib3ggZXhjZWVkcyB0
aGF0LiAgRm9yIFJUTCwgd2UgdXNlIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlIHBhZGRpbmcgYm94IGFu
ZApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQu
Y3BwCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b21iaW5lVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxLDcgKzIxLDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJDb21iaW5lVGV4dC5oIgogCi0jaW5jbHVkZSAi
VGV4dFJ1bi5oIgorI2luY2x1ZGUgIlJlbmRlckJsb2NrLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIApAQCAtOTMsNyArOTMsNyBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0Ojpjb21iaW5lVGV4
dCgpCiAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFRleHRSdW4gcnVuID0gVGV4dFJ1bihTdHJpbmcodGV4dCgpKSk7Cisg
ICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBvcmln
aW5hbEZvbnQoKSwgU3RyaW5nKHRleHQoKSksIHN0eWxlKCkpOwogICAgIEZvbnREZXNjcmlwdGlv
biBkZXNjcmlwdGlvbiA9IG9yaWdpbmFsRm9udCgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGZs
b2F0IGVtV2lkdGggPSBkZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIHRleHRDb21iaW5lTWFy
Z2luOwogICAgIGJvb2wgc2hvdWxkVXBkYXRlRm9udCA9IGZhbHNlOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCShy
ZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBs
b2FkQ29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsOCBAQCB2b2lkIFJl
bmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjCiAKICAgICBpZiAocGFpbnRJbmZvLnBo
YXNlID09IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB7CiAgICAgICAgIGNvbnN0IFN0cmluZyYgZGlz
cGxheWVkRmlsZW5hbWUgPSBmaWxlVGV4dFZhbHVlKCk7Ci0gICAgICAgIFRleHRSdW4gdGV4dFJ1
biA9IGNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKGRpc3BsYXllZEZpbGVu
YW1lLCBzdHlsZSgpLCBSZXNwZWN0RGlyZWN0aW9uIHwgUmVzcGVjdERpcmVjdGlvbk92ZXJyaWRl
KTsKKyAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKKyAgICAgICAg
VGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBkaXNwbGF5ZWRG
aWxlbmFtZSwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgUmVzcGVj
dERpcmVjdGlvbiB8IFJlc3BlY3REaXJlY3Rpb25PdmVycmlkZSk7CiAKICAgICAgICAgLy8gRGV0
ZXJtaW5lIHdoZXJlIHRoZSBmaWxlbmFtZSBzaG91bGQgYmUgcGxhY2VkCiAgICAgICAgIGludCBj
b250ZW50TGVmdCA9IHR4ICsgYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKQEAgLTIzMSw3
ICsyMzIsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjCiAgICAg
ICAgIGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCiAgICAgICAgICAgICB0
ZXh0WCA9IGNvbnRlbnRMZWZ0ICsgYnV0dG9uQW5kSWNvbldpZHRoOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICB0ZXh0WCA9IGNvbnRlbnRMZWZ0ICsgY29udGVudFdpZHRoKCkgLSBidXR0b25B
bmRJY29uV2lkdGggLSBzdHlsZSgpLT5mb250KCkud2lkdGgodGV4dFJ1bik7CisgICAgICAgICAg
ICB0ZXh0WCA9IGNvbnRlbnRMZWZ0ICsgY29udGVudFdpZHRoKCkgLSBidXR0b25BbmRJY29uV2lk
dGggLSBmb250LndpZHRoKHRleHRSdW4pOwogICAgICAgICAvLyBXZSB3YW50IHRvIG1hdGNoIHRo
ZSBidXR0b24ncyBiYXNlbGluZQogICAgICAgICBSZW5kZXJCdXR0b24qIGJ1dHRvblJlbmRlcmVy
ID0gdG9SZW5kZXJCdXR0b24obV9idXR0b24tPnJlbmRlcmVyKCkpOwogICAgICAgICBpbnQgdGV4
dFkgPSBidXR0b25SZW5kZXJlci0+YWJzb2x1dGVCb3VuZGluZ0JveFJlY3QoKS55KCkKQEAgLTI0
MSw3ICsyNDIsNyBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjCiAg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5zZXRGaWxsQ29sb3Ioc3R5bGUoKS0+dmlzaXRlZERl
cGVuZGVudENvbG9yKENTU1Byb3BlcnR5Q29sb3IpLCBzdHlsZSgpLT5jb2xvclNwYWNlKCkpOwog
ICAgICAgICAKICAgICAgICAgLy8gRHJhdyB0aGUgZmlsZW5hbWUKLSAgICAgICAgcGFpbnRJbmZv
LmNvbnRleHQtPmRyYXdCaWRpVGV4dChzdHlsZSgpLT5mb250KCksIHRleHRSdW4sIEludFBvaW50
KHRleHRYLCB0ZXh0WSkpOworICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0JpZGlUZXh0
KGZvbnQsIHRleHRSdW4sIEludFBvaW50KHRleHRYLCB0ZXh0WSkpOwogICAgICAgICAKICAgICAg
ICAgaWYgKG1fZmlsZUNob29zZXItPmljb24oKSkgewogICAgICAgICAgICAgLy8gRGV0ZXJtaW5l
IHdoZXJlIHRoZSBpY29uIHNob3VsZCBiZSBwbGFjZWQKQEAgLTI3MSwxMyArMjcyLDE0IEBAIHZv
aWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNvbXB1dGVQcmUKICAgICBSZW5kZXJTdHlsZSog
c3R5bGUgPSB0aGlzLT5zdHlsZSgpOwogICAgIEFTU0VSVChzdHlsZSk7CiAKKyAgICBjb25zdCBG
b250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKICAgICBpZiAoc3R5bGUtPndpZHRoKCkuaXNGaXhl
ZCgpICYmIHN0eWxlLT53aWR0aCgpLnZhbHVlKCkgPiAwKQogICAgICAgICBtX21pblByZWZlcnJl
ZExvZ2ljYWxXaWR0aCA9IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gY29tcHV0ZUNvbnRl
bnRCb3hMb2dpY2FsV2lkdGgoc3R5bGUtPndpZHRoKCkudmFsdWUoKSk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIC8vIEZpZ3VyZSBvdXQgaG93IGJpZyB0aGUgZmlsZW5hbWUgc3BhY2UgbmVlZHMgdG8g
YmUgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMKICAgICAgICAgLy8gKHVzaW5nICIw
IiBhcyB0aGUgbm9taW5hbCBjaGFyYWN0ZXIpLgogICAgICAgICBjb25zdCBVQ2hhciBjaCA9ICcw
JzsKLSAgICAgICAgZmxvYXQgY2hhcldpZHRoID0gc3R5bGUtPmZvbnQoKS53aWR0aChjb25zdHJ1
Y3RUZXh0UnVuQWxsb3dUcmFpbGluZ0V4cGFuc2lvbihTdHJpbmcoJmNoLCAxKSwgc3R5bGUpKTsK
KyAgICAgICAgZmxvYXQgY2hhcldpZHRoID0gZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHRo
aXMsIGZvbnQsIFN0cmluZygmY2gsIDEpLCBzdHlsZSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4
cGFuc2lvbikpOwogICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IChpbnQpY2Vp
bGYoY2hhcldpZHRoICogZGVmYXVsdFdpZHRoTnVtQ2hhcnMpOwogICAgIH0KIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCShyZXZpc2lv
biA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDYgQEAKIAogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKICNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFj
dGVyTmFtZXMuaD4KIApAQCAtOTAyLDEwICs5MDEsMTAgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJv
eDo6YXBwbHlMaW5lQ2xhbXAoRgogICAgICAgICBpbnQgdG90YWxXaWR0aDsKICAgICAgICAgSW5s
aW5lQm94KiBhbmNob3JCb3ggPSBsYXN0TGluZS0+bGFzdENoaWxkKCk7CiAgICAgICAgIGlmIChh
bmNob3JCb3ggJiYgYW5jaG9yQm94LT5yZW5kZXJlcigpLT5zdHlsZSgpLT5pc0xpbmsoKSkKLSAg
ICAgICAgICAgIHRvdGFsV2lkdGggPSBhbmNob3JCb3gtPmxvZ2ljYWxXaWR0aCgpICsgZm9udC53
aWR0aChUZXh0UnVuKGVsbGlwc2lzQW5kU3BhY2UsIDIpKTsKKyAgICAgICAgICAgIHRvdGFsV2lk
dGggPSBhbmNob3JCb3gtPmxvZ2ljYWxXaWR0aCgpICsgZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0
UnVuKHRoaXMsIGZvbnQsIGVsbGlwc2lzQW5kU3BhY2UsIDIsIHN0eWxlKCkpKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICBhbmNob3JCb3ggPSAwOwotICAgICAgICAgICAgdG90YWxXaWR0
aCA9IGZvbnQud2lkdGgoVGV4dFJ1bigmaG9yaXpvbnRhbEVsbGlwc2lzLCAxKSk7CisgICAgICAg
ICAgICB0b3RhbFdpZHRoID0gZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQs
ICZob3Jpem9udGFsRWxsaXBzaXMsIDEsIHN0eWxlKCkpKTsKICAgICAgICAgfQogCiAgICAgICAg
IC8vIFNlZSBpZiB0aGlzIHdpZHRoIGNhbiBiZSBhY2NvbW1vZGF0ZWQgb24gdGhlIGxhc3Qgdmlz
aWJsZSBsaW5lCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJ
KHJldmlzaW9uIDg2OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNiBAQAogI2luY2x1ZGUgIlBhZ2UuaCIK
ICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNs
dWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL1VudXNlZFBhcmFtLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CkBAIC0xMDQsNyArMTAzLDcgQEAgYm9vbCBSZW5kZXJJbWFnZTo6c2V0SW1h
Z2VTaXplRm9yQWx0VGV4dAogICAgIC8vIHdlIGhhdmUgYW4gYWx0IGFuZCB0aGUgdXNlciBtZWFu
dCBpdCAoaXRzIG5vdCBhIHRleHQgd2UgaW52ZW50ZWQpCiAgICAgaWYgKCFtX2FsdFRleHQuaXNF
bXB0eSgpKSB7CiAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0g
ICAgICAgIEludFNpemUgdGV4dFNpemUobWluKGZvbnQud2lkdGgoVGV4dFJ1bihtX2FsdFRleHQp
KSwgbWF4QWx0VGV4dFdpZHRoKSwgbWluKGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSwgbWF4
QWx0VGV4dEhlaWdodCkpOworICAgICAgICBJbnRTaXplIHRleHRTaXplKG1pbihmb250LndpZHRo
KFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIG1fYWx0VGV4dCwgc3R5
bGUoKSkpLCBtYXhBbHRUZXh0V2lkdGgpLCBtaW4oZm9udC5mb250TWV0cmljcygpLmhlaWdodCgp
LCBtYXhBbHRUZXh0SGVpZ2h0KSk7CiAgICAgICAgIGltYWdlU2l6ZSA9IGltYWdlU2l6ZS5leHBh
bmRlZFRvKHRleHRTaXplKTsKICAgICB9CiAKQEAgLTI4Niw3ICsyODUsNyBAQCB2b2lkIFJlbmRl
ckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAKICAgICAgICAgICAgICAgICAvLyBPbmx5
IGRyYXcgdGhlIGFsdCB0ZXh0IGlmIGl0J2xsIGZpdCB3aXRoaW4gdGhlIGNvbnRlbnQgYm94LAog
ICAgICAgICAgICAgICAgIC8vIGFuZCBvbmx5IGlmIGl0IGZpdHMgYWJvdmUgdGhlIGVycm9yIGlt
YWdlLgotICAgICAgICAgICAgICAgIFRleHRSdW4gdGV4dFJ1bih0ZXh0KTsKKyAgICAgICAgICAg
ICAgICBUZXh0UnVuIHRleHRSdW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlz
LCBmb250LCB0ZXh0LCBzdHlsZSgpKTsKICAgICAgICAgICAgICAgICBpbnQgdGV4dFdpZHRoID0g
Zm9udC53aWR0aCh0ZXh0UnVuKTsKICAgICAgICAgICAgICAgICBpZiAoZXJyb3JQaWN0dXJlRHJh
d24pIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHVzYWJsZVdpZHRoID49IHRleHRXaWR0aCAm
JiBmb250TWV0cmljcy5oZWlnaHQoKSA8PSBpbWFnZVkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYs
NyArNTYsNiBAQAogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lLmgiCiAjaW5jbHVkZSAiU2VsZWN0
RWxlbWVudC5oIgogI2luY2x1ZGUgIlNwYXRpYWxOYXZpZ2F0aW9uLmgiCi0jaW5jbHVkZSAiVGV4
dFJ1bi5oIgogI2luY2x1ZGUgPG1hdGguaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTEy
MCw3ICsxMTksNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKIAog
ICAgICAgICAgICAgaWYgKCF0ZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBXaHkgaXMgdGhpcyBhbHdheXMgTFRSPyBDYW4ndCB0ZXh0IGRpcmVjdGlvbiBhZmZlY3Qg
dGhlIHdpZHRoPwotICAgICAgICAgICAgICAgIGZsb2F0IHRleHRXaWR0aCA9IGl0ZW1Gb250Lndp
ZHRoKGNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKHRleHQsIHN0eWxlKCkp
KTsKKyAgICAgICAgICAgICAgICBmbG9hdCB0ZXh0V2lkdGggPSBpdGVtRm9udC53aWR0aChjb25z
dHJ1Y3RUZXh0UnVuKHRoaXMsIGl0ZW1Gb250LCB0ZXh0LCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxv
d1RyYWlsaW5nRXhwYW5zaW9uKSk7CiAgICAgICAgICAgICAgICAgd2lkdGggPSBtYXgod2lkdGgs
IHRleHRXaWR0aCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDg2OTQyKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNs
dWRlICJSZW5kZXJMaXN0SXRlbS5oIgogI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRl
ICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL3VuaWNvZGUvQ2hhcmFjdGVyTmFtZXMuaD4KIAog
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTEyNTMsNyArMTI1Miw4IEBAIHZvaWQgUmVuZGVyTGlz
dE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBpZiAobV90ZXh0LmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgVGV4dFJ1biB0ZXh0UnVuKG1fdGV4dCk7CisgICAgY29uc3Qg
Rm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBSZW5k
ZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBtX3RleHQsIHN0eWxlKCkpOwog
CiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKCpjb250ZXh0LCBmYWxz
ZSk7CiAgICAgaWYgKCFzdHlsZSgpLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CkBAIC0x
MjY5LDcgKzEyNjksNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBhaW50SW5mbyYg
CiAgICAgSW50UG9pbnQgdGV4dE9yaWdpbiA9IEludFBvaW50KG1hcmtlci54KCksIG1hcmtlci55
KCkgKyBzdHlsZSgpLT5mb250TWV0cmljcygpLmFzY2VudCgpKTsKIAogICAgIGlmICh0eXBlID09
IEFzdGVyaXNrcyB8fCB0eXBlID09IEZvb3Rub3RlcykKLSAgICAgICAgY29udGV4dC0+ZHJhd1Rl
eHQoc3R5bGUoKS0+Zm9udCgpLCB0ZXh0UnVuLCB0ZXh0T3JpZ2luKTsKKyAgICAgICAgY29udGV4
dC0+ZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgdGV4dE9yaWdpbik7CiAgICAgZWxzZSB7CiAgICAg
ICAgIC8vIFRleHQgaXMgbm90IGFyYml0cmFyeS4gV2UgY2FuIGp1ZGdlIHdoZXRoZXIgaXQncyBS
VEwgZnJvbSB0aGUgZmlyc3QgY2hhcmFjdGVyLAogICAgICAgICAvLyBhbmQgd2Ugb25seSBuZWVk
IHRvIGhhbmRsZSB0aGUgZGlyZWN0aW9uIFJpZ2h0VG9MZWZ0IGZvciBub3cuCkBAIC0xMjgwLDIy
ICsxMjgwLDIxIEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAg
ICAgICAgICAgIHJldmVyc2VkVGV4dC5ncm93KGxlbmd0aCk7CiAgICAgICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKQogICAgICAgICAgICAgICAgIHJldmVyc2VkVGV4dFts
ZW5ndGggLSBpIC0gMV0gPSBtX3RleHRbaV07Ci0gICAgICAgICAgICB0ZXh0UnVuID0gVGV4dFJ1
bihyZXZlcnNlZFRleHQuZGF0YSgpLCBsZW5ndGgpOworICAgICAgICAgICAgdGV4dFJ1bi5zZXRU
ZXh0KHJldmVyc2VkVGV4dC5kYXRhKCksIGxlbmd0aCk7CiAgICAgICAgIH0KIAotICAgICAgICBj
b25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwogICAgICAgICBjb25zdCBVQ2hhciBz
dWZmaXggPSBsaXN0TWFya2VyU3VmZml4KHR5cGUsIG1fbGlzdEl0ZW0tPnZhbHVlKCkpOwogICAg
ICAgICBpZiAoc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpKSB7CiAgICAgICAgICAg
ICBpbnQgd2lkdGggPSBmb250LndpZHRoKHRleHRSdW4pOwotICAgICAgICAgICAgY29udGV4dC0+
ZHJhd1RleHQoc3R5bGUoKS0+Zm9udCgpLCB0ZXh0UnVuLCB0ZXh0T3JpZ2luKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIHRleHRSdW4sIHRleHRPcmlnaW4pOwogICAgICAg
ICAgICAgVUNoYXIgc3VmZml4U3BhY2VbMl0gPSB7IHN1ZmZpeCwgJyAnIH07Ci0gICAgICAgICAg
ICBjb250ZXh0LT5kcmF3VGV4dChzdHlsZSgpLT5mb250KCksIFRleHRSdW4oc3VmZml4U3BhY2Us
IDIpLCB0ZXh0T3JpZ2luICsgSW50U2l6ZSh3aWR0aCwgMCkpOworICAgICAgICAgICAgY29udGV4
dC0+ZHJhd1RleHQoZm9udCwgUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9u
dCwgc3VmZml4U3BhY2UsIDIsIHN0eWxlKCkpLCB0ZXh0T3JpZ2luICsgSW50U2l6ZSh3aWR0aCwg
MCkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgVUNoYXIgc3BhY2VTdWZmaXhbMl0g
PSB7ICcgJywgc3VmZml4IH07Ci0gICAgICAgICAgICBUZXh0UnVuIHNwYWNlU3VmZml4UnVuKHNw
YWNlU3VmZml4LCAyKTsKKyAgICAgICAgICAgIFRleHRSdW4gc3BhY2VTdWZmaXhSdW4gPSBSZW5k
ZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBzcGFjZVN1ZmZpeCwgMiwgc3R5
bGUoKSk7CiAgICAgICAgICAgICBpbnQgd2lkdGggPSBmb250LndpZHRoKHNwYWNlU3VmZml4UnVu
KTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KHN0eWxlKCktPmZvbnQoKSwgc3BhY2VT
dWZmaXhSdW4sIHRleHRPcmlnaW4pOwotICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoc3R5
bGUoKS0+Zm9udCgpLCB0ZXh0UnVuLCB0ZXh0T3JpZ2luICsgSW50U2l6ZSh3aWR0aCwgMCkpOwor
ICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgc3BhY2VTdWZmaXhSdW4sIHRleHRP
cmlnaW4pOworICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgdGV4
dE9yaWdpbiArIEludFNpemUod2lkdGgsIDApKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTE0
NTUsNyArMTQ1NCw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6Y29tcHV0ZVByZWZlcnJlZEwK
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGludCBpdGVtV2lkdGggPSBmb250
LndpZHRoKG1fdGV4dCk7CiAgICAgICAgICAgICAgICAgVUNoYXIgc3VmZml4U3BhY2VbMl0gPSB7
IGxpc3RNYXJrZXJTdWZmaXgodHlwZSwgbV9saXN0SXRlbS0+dmFsdWUoKSksICcgJyB9OwotICAg
ICAgICAgICAgICAgIGludCBzdWZmaXhTcGFjZVdpZHRoID0gZm9udC53aWR0aChUZXh0UnVuKHN1
ZmZpeFNwYWNlLCAyKSk7CisgICAgICAgICAgICAgICAgaW50IHN1ZmZpeFNwYWNlV2lkdGggPSBm
b250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHN1ZmZp
eFNwYWNlLCAyLCBzdHlsZSgpKSk7CiAgICAgICAgICAgICAgICAgbG9naWNhbFdpZHRoID0gaXRl
bVdpZHRoICsgc3VmZml4U3BhY2VXaWR0aDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMTY3OCw3ICsxNjc3LDcgQEAgSW50UmVjdCBSZW5kZXJMaXN0TWFya2VyOjpnZXRS
ZWxhdGl2ZU1hcgogICAgICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQo
KTsKICAgICAgICAgICAgIGludCBpdGVtV2lkdGggPSBmb250LndpZHRoKG1fdGV4dCk7CiAgICAg
ICAgICAgICBVQ2hhciBzdWZmaXhTcGFjZVsyXSA9IHsgbGlzdE1hcmtlclN1ZmZpeCh0eXBlLCBt
X2xpc3RJdGVtLT52YWx1ZSgpKSwgJyAnIH07Ci0gICAgICAgICAgICBpbnQgc3VmZml4U3BhY2VX
aWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihzdWZmaXhTcGFjZSwgMikpOworICAgICAgICAgICAg
aW50IHN1ZmZpeFNwYWNlV2lkdGggPSBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKHRoaXMsIGZvbnQsIHN1ZmZpeFNwYWNlLCAyLCBzdHlsZSgpKSk7CiAgICAgICAgICAg
ICByZWxhdGl2ZVJlY3QgPSBJbnRSZWN0KDAsIDAsIGl0ZW1XaWR0aCArIHN1ZmZpeFNwYWNlV2lk
dGgsIGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NyArNDAsNiBAQAogI2luY2x1ZGUgIlRleHQuaCIKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRv
ci5oIgogI2luY2x1ZGUgIlRleHRSZXNvdXJjZURlY29kZXIuaCIKLSNpbmNsdWRlICJUZXh0UnVu
LmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiYnJlYWtfbGluZXMu
aCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CkBAIC02MzEsNyArNjMwLDEwIEBAIEFM
V0FZU19JTkxJTkUgZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhGcm8KICAgICAgICAgcmV0dXJuIHc7
CiAgICAgfQogCi0gICAgcmV0dXJuIGYud2lkdGgoVGV4dFJ1bih0ZXh0KCktPmNoYXJhY3RlcnMo
KSArIHN0YXJ0LCBsZW4sIGFsbG93VGFicygpLCB4UG9zKSwgZmFsbGJhY2tGb250cywgZ2x5cGhP
dmVyZmxvdyk7CisgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bihjb25zdF9jYXN0PFJlbmRlclRleHQqPih0aGlzKSwgZiwgdGV4dCgpLT5jaGFyYWN0ZXJzKCkg
KyBzdGFydCwgbGVuLCBzdHlsZSgpKTsKKyAgICBydW4uc2V0QWxsb3dUYWJzKGFsbG93VGFicygp
KTsKKyAgICBydW4uc2V0WFBvcyh4UG9zKTsKKyAgICByZXR1cm4gZi53aWR0aChydW4sIGZhbGxi
YWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwogfQogCiB2b2lkIFJlbmRlclRleHQ6OnRyaW1tZWRQ
cmVmV2lkdGhzKGZsb2F0IGxlYWRXaWR0aCwKQEAgLTY3NiwxMyArNjc4LDEzIEBAIHZvaWQgUmVu
ZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMoZmxvYXQKICAgICBBU1NFUlQobV90ZXh0KTsKICAg
ICBTdHJpbmdJbXBsJiB0ZXh0ID0gKm1fdGV4dC5pbXBsKCk7CiAgICAgaWYgKHRleHRbMF0gPT0g
JyAnIHx8ICh0ZXh0WzBdID09ICdcbicgJiYgIXN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKSB8
fCB0ZXh0WzBdID09ICdcdCcpIHsKLSAgICAgICAgY29uc3QgRm9udCYgZiA9IHN0eWxlKCktPmZv
bnQoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgorICAgICAgICBjb25zdCBG
b250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0
LWxpbmUuCiAgICAgICAgIGlmIChzdHJpcEZyb250U3BhY2VzKSB7CiAgICAgICAgICAgICBjb25z
dCBVQ2hhciBzcGFjZSA9ICcgJzsKLSAgICAgICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmLndp
ZHRoKFRleHRSdW4oJnNwYWNlLCAxKSk7CisgICAgICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0g
Zm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCAmc3Bh
Y2UsIDEsIHN0eWxlKCkpKTsKICAgICAgICAgICAgIG1heFcgLT0gc3BhY2VXaWR0aDsKICAgICAg
ICAgfSBlbHNlCi0gICAgICAgICAgICBtYXhXICs9IGYud29yZFNwYWNpbmcoKTsKKyAgICAgICAg
ICAgIG1heFcgKz0gZm9udC53b3JkU3BhY2luZygpOwogICAgIH0KIAogICAgIHN0cmlwRnJvbnRT
cGFjZXMgPSBjb2xsYXBzZVdoaXRlU3BhY2UgJiYgbV9oYXNFbmRXUzsKQEAgLTkxNSw3ICs5MTcs
MTEgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbAogICAgICAgICAg
ICAgICAgICAgICBtX21heFdpZHRoID0gY3Vyck1heFdpZHRoOwogICAgICAgICAgICAgICAgIGN1
cnJNYXhXaWR0aCA9IDA7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGN1
cnJNYXhXaWR0aCArPSBmLndpZHRoKFRleHRSdW4odHh0ICsgaSwgMSwgYWxsb3dUYWJzKCksIGxl
YWRXaWR0aCArIGN1cnJNYXhXaWR0aCkpOworICAgICAgICAgICAgICAgIFRleHRSdW4gcnVuID0g
UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZiwgdHh0ICsgaSwgMSwgc3R5bGUo
KSk7CisgICAgICAgICAgICAgICAgcnVuLnNldEFsbG93VGFicyhhbGxvd1RhYnMoKSk7CisgICAg
ICAgICAgICAgICAgcnVuLnNldFhQb3MobGVhZFdpZHRoICsgY3Vyck1heFdpZHRoKTsKKworICAg
ICAgICAgICAgICAgIGN1cnJNYXhXaWR0aCArPSBmLndpZHRoKHJ1bik7CiAgICAgICAgICAgICAg
ICAgZ2x5cGhPdmVyZmxvdy5yaWdodCA9IDA7CiAgICAgICAgICAgICAgICAgbmVlZHNXb3JkU3Bh
Y2luZyA9IGlzU3BhY2UgJiYgIXByZXZpb3VzQ2hhcmFjdGVySXNTcGFjZSAmJiBpID09IGxlbiAt
IDE7CiAgICAgICAgICAgICB9CkBAIC0xMjg5LDggKzEyOTUsMTIgQEAgZmxvYXQgUmVuZGVyVGV4
dDo6d2lkdGgodW5zaWduZWQgZnJvbSwgdQogICAgICAgICAgICAgICAgIHcgPSBtYXhMb2dpY2Fs
V2lkdGgoKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICB3ID0gd2lkdGhGcm9tQ2FjaGUo
ZiwgZnJvbSwgbGVuLCB4UG9zLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKLSAgICB9
IGVsc2UKLSAgICAgICAgdyA9IGYud2lkdGgoVGV4dFJ1bih0ZXh0KCktPmNoYXJhY3RlcnMoKSAr
IGZyb20sIGxlbiwgYWxsb3dUYWJzKCksIHhQb3MpLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJm
bG93KTsKKyAgICB9IGVsc2UgeworICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKGNvbnN0X2Nhc3Q8UmVuZGVyVGV4dCo+KHRoaXMpLCBmLCB0ZXh0KCkt
PmNoYXJhY3RlcnMoKSArIGZyb20sIGxlbiwgc3R5bGUoKSk7CisgICAgICAgIHJ1bi5zZXRBbGxv
d1RhYnMoYWxsb3dUYWJzKCkpOworICAgICAgICBydW4uc2V0WFBvcyh4UG9zKTsKKyAgICAgICAg
dyA9IGYud2lkdGgocnVuLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKKyAgICB9CiAK
ICAgICByZXR1cm4gdzsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw2IEBACiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRDb250cm9sSW5uZXJFbGVt
ZW50cy5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIK
ICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiB1c2luZyBuYW1lc3Bh
Y2Ugc3RkOwpAQCAtNTQyLDcgKzU0MSw4IEBAIGZsb2F0IFJlbmRlclRleHRDb250cm9sOjpnZXRB
dmdDaGFyV2lkdGgKICAgICAgICAgcmV0dXJuIHJvdW5kZihzdHlsZSgpLT5mb250KCkucHJpbWFy
eUZvbnQoKS0+YXZnQ2hhcldpZHRoKCkpOwogCiAgICAgY29uc3QgVUNoYXIgY2ggPSAnMCc7Ci0g
ICAgcmV0dXJuIHN0eWxlKCktPmZvbnQoKS53aWR0aChjb25zdHJ1Y3RUZXh0UnVuQWxsb3dUcmFp
bGluZ0V4cGFuc2lvbihTdHJpbmcoJmNoLCAxKSwgc3R5bGUoKSkpOworICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CisgICAgcmV0dXJuIGZvbnQud2lkdGgoY29uc3RydWN0
VGV4dFJ1bih0aGlzLCBmb250LCBTdHJpbmcoJmNoLCAxKSwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxs
b3dUcmFpbGluZ0V4cGFuc2lvbikpOwogfQogCiBmbG9hdCBSZW5kZXJUZXh0Q29udHJvbDo6c2Nh
bGVFbVRvVW5pdHMoaW50IHgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDExLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dF9oCisjZGVmaW5lIFRleHRSdW5SZW5kZXJpbmdDb250ZXh0X2gKKwor
I2luY2x1ZGUgIlRleHRSdW4uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZW5k
ZXJPYmplY3Q7CitjbGFzcyBSZW5kZXJTVkdSZXNvdXJjZTsKKworY2xhc3MgVGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQgOiBwdWJsaWMgVGV4dFJ1bjo6QWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxUZXh0UnVuUmVuZGVyaW5nQ29udGV4dD4g
Y3JlYXRlKFJlbmRlck9iamVjdCogY29udGV4dCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQoY29udGV4dCkpOworICAgIH0KKworICAg
IHZpcnR1YWwgYm9vbCBpc1dlYkNvcmVSZW5kZXJpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgUmVuZGVyT2JqZWN0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0OyB9CisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIFJlbmRlclNWR1Jlc291cmNl
KiBhY3RpdmVQYWludGluZ1Jlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVQYWludGlu
Z1Jlc291cmNlOyB9CisgICAgdm9pZCBzZXRBY3RpdmVQYWludGluZ1Jlc291cmNlKFJlbmRlclNW
R1Jlc291cmNlKiBvYmplY3QpIHsgbV9hY3RpdmVQYWludGluZ1Jlc291cmNlID0gb2JqZWN0OyB9
CisKKyAgICAvLyBUaGVzZSBhcmUgaW1wbGVtZW50ZWQgaW4gcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHRVc2luZ1NW
R0ZvbnQoY29uc3QgRm9udCYsIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdmlydHVhbCBmbG9h
dCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJikgY29u
c3Q7CisgICAgdmlydHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQm
LCBjb25zdCBUZXh0UnVuJiwgaW50IGV4dHJhQ2hhcnNBdmFpbGFibGUsIGludCYgY2hhcnNDb25z
dW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNl
bGVjdGlvblJlY3RGb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQoY29uc3Qg
Rm9udCYsIGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocykgY29uc3Q7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dChSZW5kZXJPYmplY3QqIGNvbnRleHQpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRl
eHQpCisjaWYgRU5BQkxFKFNWR19GT05UUykKKyAgICAgICAgLCBtX2FjdGl2ZVBhaW50aW5nUmVz
b3VyY2UoMCkKKyNlbmRpZgorICAgIHsKKyAgICB9CisKKyAgICBSZW5kZXJPYmplY3QqIG1fY29u
dGV4dDsKKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisgICAgUmVuZGVyU1ZHUmVzb3VyY2UqIG1f
YWN0aXZlUGFpbnRpbmdSZXNvdXJjZTsKKyNlbmRpZgorfTsKKworaW5saW5lIGJvb2wgdGV4dFJ1
bk5lZWRzUmVuZGVyaW5nQ29udGV4dChjb25zdCBGb250JiBmb250KQoreworICAgIC8vIE9ubHkg
c2F2ZSB0aGUgZXh0cmEgZGF0YSBpZiBTVkcgRm9udHMgYXJlIHVzZWQsIHdoaWNoIGRlcGVuZCBv
biB0aGVtLgorICAgIC8vIEZJWE1FOiBTVkcgRm9udHMgd29uJ3Qgd29yayBhcyBzZWdtZW50ZWQg
Zm9udHMgYXQgdGhlIG1vbWVudCwgaWYgdGhhdCdzIGZpeGVkLCB3ZSBuZWVkIHRvIGNoZWNrIGZv
ciB0aGVtIGFzIHdlbGwgYmVsb3cuCisgICAgQVNTRVJUKGZvbnQucHJpbWFyeUZvbnQoKSk7Cisg
ICAgcmV0dXJuIGZvbnQucHJpbWFyeUZvbnQoKS0+aXNTVkdGb250KCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFRleHRSdW5SZW5kZXJpbmdDb250ZXh0X2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5P
bmUuY3BwCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw1ICs3Miw2IEBACiAj
aW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZS5jcHAiCiAjaW5jbHVkZSAiU1ZHVGV4dExheW91
dEVuZ2luZUJhc2VsaW5lLmNwcCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2lu
Zy5jcHAiCisjaW5jbHVkZSAiU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwIgogI2luY2x1
ZGUgIlNWR1RleHRNZXRyaWNzLmNwcCIKICNpbmNsdWRlICJTVkdUZXh0UXVlcnkuY3BwIgpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3gu
Y3BwCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
SW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNs
dWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKICNpbmNsdWRlICJTVkdJbWFnZUJ1
ZmZlclRvb2xzLmgiCiAjaW5jbHVkZSAiU1ZHUm9vdElubGluZUJveC5oIgotI2luY2x1ZGUgIlRl
eHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oIgogCiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCkBAIC02Niw3ICs2Niw3IEBAIGludCBTVkdJbmxpbmVUZXh0Qm94Ojpv
ZmZzZXRGb3JQb3NpdGlvbkkKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSB0ZXh0UmVuZGVyZXIt
PnN0eWxlKCk7CiAgICAgQVNTRVJUKHN0eWxlKTsKIAotICAgIFRleHRSdW4gdGV4dFJ1bihjb25z
dHJ1Y3RUZXh0UnVuKHN0eWxlLCBmcmFnbWVudCkpOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNv
bnN0cnVjdFRleHRSdW4oc3R5bGUsIGZyYWdtZW50KTsKIAogICAgIC8vIEV2ZW50dWFsbHkgaGFu
ZGxlIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIuCiAgICAgLy8gRklYTUU6IEhhbmRs
ZSB2ZXJ0aWNhbCB0ZXh0LgpAQCAtMzc5LDE0ICszNzksMTcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0
Qm94OjpyZWxlYXNlUGFpbnRpbmdSZQogYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjpwcmVwYXJlR3Jh
cGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIGZs
b2F0IHNjYWxpbmdGYWN0b3IsIFRleHRSdW4mIHRleHRSdW4sIFJlbmRlclN0eWxlKiBzdHlsZSkK
IHsKICAgICBib29sIGFjcXVpcmVkUmVzb3VyY2UgPSBhY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShj
b250ZXh0LCBzY2FsaW5nRmFjdG9yLCBwYXJlbnQoKS0+cmVuZGVyZXIoKSwgc3R5bGUpOworICAg
IGlmICghYWNxdWlyZWRSZXNvdXJjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5B
QkxFKFNWR19GT05UUykKICAgICAvLyBTVkcgRm9udHMgbmVlZCBhY2Nlc3MgdG8gdGhlIHBhaW50
aW5nIHJlc291cmNlIHVzZWQgdG8gZHJhdyB0aGUgY3VycmVudCB0ZXh0IGNodW5rLgotICAgIGlm
IChhY3F1aXJlZFJlc291cmNlKQotICAgICAgICB0ZXh0UnVuLnNldEFjdGl2ZVBhaW50aW5nUmVz
b3VyY2UobV9wYWludGluZ1Jlc291cmNlKTsKKyAgICBUZXh0UnVuOjpBYnN0cmFjdFJlbmRlcmlu
Z0NvbnRleHQqIGFic3RyYWN0UmVuZGVyaW5nQ29udGV4dCA9IHRleHRSdW4ucmVuZGVyaW5nQ29u
dGV4dCgpOworICAgIGlmIChhYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQgJiYgYWJzdHJhY3RSZW5k
ZXJpbmdDb250ZXh0LT5pc1dlYkNvcmVSZW5kZXJpbmdDb250ZXh0KCkpCisgICAgICAgIHN0YXRp
Y19jYXN0PFRleHRSdW5SZW5kZXJpbmdDb250ZXh0Kj4oYWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0
KS0+c2V0QWN0aXZlUGFpbnRpbmdSZXNvdXJjZShtX3BhaW50aW5nUmVzb3VyY2UpOwogI2VuZGlm
CiAKLSAgICByZXR1cm4gYWNxdWlyZWRSZXNvdXJjZTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAog
dm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZXN0b3JlR3JhcGhpY3NDb250ZXh0QWZ0ZXJUZXh0UGFp
bnRpbmcoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgVGV4dFJ1biYgdGV4dFJ1bikKQEAgLTM5
NCw3ICszOTcsMTEgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZXN0b3JlR3JhcGhpY3NDbwog
ICAgIHJlbGVhc2VQYWludGluZ1Jlc291cmNlKGNvbnRleHQsIC8qIHBhdGggKi8wKTsKIAogI2lm
IEVOQUJMRShTVkdfRk9OVFMpCi0gICAgdGV4dFJ1bi5zZXRBY3RpdmVQYWludGluZ1Jlc291cmNl
KDApOworICAgIFRleHRSdW46OkFic3RyYWN0UmVuZGVyaW5nQ29udGV4dCogYWJzdHJhY3RSZW5k
ZXJpbmdDb250ZXh0ID0gdGV4dFJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7CisgICAgaWYgKGFic3Ry
YWN0UmVuZGVyaW5nQ29udGV4dCAmJiBhYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQtPmlzV2ViQ29y
ZVJlbmRlcmluZ0NvbnRleHQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQqPihhYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQpLT5zZXRBY3RpdmVQYWludGluZ1Jl
c291cmNlKDApOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odGV4dFJ1bik7CiAjZW5kaWYKIH0K
IApAQCAtNDE1LDkgKzQyMiw4IEBAIFRleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0
VGV4dFIKICAgICAgICAgICAgICAgICAsIGRpcmVjdGlvbigpCiAgICAgICAgICAgICAgICAgLCBt
X2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSAvKiBkaXJlY3Rpb25hbE92
ZXJyaWRlICovKTsKIAotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgcnVuLnNldFJlZmVyZW5j
aW5nUmVuZGVyT2JqZWN0KHRleHQpOwotI2VuZGlmCisgICAgaWYgKHRleHRSdW5OZWVkc1JlbmRl
cmluZ0NvbnRleHQoc3R5bGUtPmZvbnQoKSkpCisgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250
ZXh0KFRleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUodGV4dCkpOwogCiAgICAgLy8gV2Ug
aGFuZGxlIGxldHRlciAmIHdvcmQgc3BhY2luZyBvdXJzZWx2ZXMuCiAgICAgcnVuLmRpc2FibGVT
cGFjaW5nKCk7CkBAIC02NTksNyArNjY1LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWlu
dFRleHQoR3JhcGhpYwogICAgIH0KIAogICAgIC8vIEZhc3QgcGF0aCBpZiB0aGVyZSBpcyBubyBz
ZWxlY3Rpb24sIGp1c3QgZHJhdyB0aGUgd2hvbGUgY2h1bmsgcGFydCB1c2luZyB0aGUgcmVndWxh
ciBzdHlsZQotICAgIFRleHRSdW4gdGV4dFJ1bihjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmcmFn
bWVudCkpOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZy
YWdtZW50KTsKICAgICBpZiAoIWhhc1NlbGVjdGlvbiB8fCBzdGFydFBvc2l0aW9uID49IGVuZFBv
c2l0aW9uKSB7CiAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIHN0eWxlLCB0
ZXh0UnVuLCBmcmFnbWVudCwgMCwgZnJhZ21lbnQubGVuZ3RoKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtNjczLDcgKzY3OSw3IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBo
aWMKICAgICBpZiAoc3R5bGUgIT0gc2VsZWN0aW9uU3R5bGUpCiAgICAgICAgIFNWR1Jlc291cmNl
c0NhY2hlOjpjbGllbnRTdHlsZUNoYW5nZWQocGFyZW50KCktPnJlbmRlcmVyKCksIFN0eWxlRGlm
ZmVyZW5jZVJlcGFpbnQsIHNlbGVjdGlvblN0eWxlKTsKIAotICAgIFRleHRSdW4gc2VsZWN0aW9u
VGV4dFJ1bihjb25zdHJ1Y3RUZXh0UnVuKHNlbGVjdGlvblN0eWxlLCBmcmFnbWVudCkpOworICAg
IFRleHRSdW4gc2VsZWN0aW9uVGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc2VsZWN0aW9uU3R5
bGUsIGZyYWdtZW50KTsKICAgICBwYWludFRleHRXaXRoU2hhZG93cyhjb250ZXh0LCBzZWxlY3Rp
b25TdHlsZSwgdGV4dFJ1biwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsK
IAogICAgIGlmIChzdHlsZSAhPSBzZWxlY3Rpb25TdHlsZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNp
bmcuY3BwCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsy
Niw5IEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIKIAogI2lmIEVOQUJMRShTVkdfRk9O
VFMpCisjaW5jbHVkZSAiU1ZHRm9udERhdGEuaCIKICNpbmNsdWRlICJTVkdGb250RWxlbWVudC5o
IgorI2luY2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogI2VuZGlmCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKQEAgLTQwLDEzICs0MiwyNCBAQCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6
U1ZHVGV4dExheW91CiBmbG9hdCBTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZzo6Y2FsY3VsYXRl
U1ZHS2VybmluZyhib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBTVkdUZXh0TWV0cmljczo6R2x5
cGgmIGN1cnJlbnRHbHlwaCkKIHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGlmICghbV9m
b250LmlzU1ZHRm9udCgpKSB7CisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0g
bV9mb250LnByaW1hcnlGb250KCk7CisgICAgaWYgKCFmb250RGF0YS0+aXNTVkdGb250KCkpIHsK
ICAgICAgICAgbV9sYXN0R2x5cGguaXNWYWxpZCA9IGZhbHNlOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICBTVkdGb250RWxlbWVudCogc3ZnRm9udCA9IG1fZm9udC5zdmdGb250KCk7
Ci0gICAgQVNTRVJUKHN2Z0ZvbnQpOworICAgIEFTU0VSVChmb250RGF0YS0+aXNDdXN0b21Gb250
KCkpOworICAgIEFTU0VSVChmb250RGF0YS0+aXNTVkdGb250KCkpOworCisgICAgY29uc3QgU1ZH
Rm9udERhdGEqIHN2Z0ZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihm
b250RGF0YS0+Zm9udERhdGEoKSk7CisgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBzdmdGb250RmFj
ZSA9IHN2Z0ZvbnREYXRhLT5zdmdGb250RmFjZUVsZW1lbnQoKTsKKyAgICBBU1NFUlQoc3ZnRm9u
dEZhY2UpOworCisgICAgU1ZHRm9udEVsZW1lbnQqIHN2Z0ZvbnQgPSBzdmdGb250RmFjZS0+YXNz
b2NpYXRlZEZvbnRFbGVtZW50KCk7CisgICAgaWYgKCFzdmdGb250KSB7CisgICAgICAgIG1fbGFz
dEdseXBoLmlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAg
ZmxvYXQga2VybmluZyA9IDA7CiAgICAgaWYgKG1fbGFzdEdseXBoLmlzVmFsaWQpIHsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCShy
ZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1l
dHJpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSAiU1ZH
VGV4dE1ldHJpY3MuaCIKIAogI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKLSNpbmNs
dWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04Niw5ICs4Niw4IEBAIHN0YXRpYyBUZXh0UnVuIGNv
bnN0cnVjdFRleHRSdW4oUmVuZGVyU1YKICAgICAgICAgICAgICAgICAsIHN0eWxlLT5kaXJlY3Rp
b24oKQogICAgICAgICAgICAgICAgICwgc3R5bGUtPnVuaWNvZGVCaWRpKCkgPT0gT3ZlcnJpZGUg
LyogZGlyZWN0aW9uYWxPdmVycmlkZSAqLyk7CiAKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAg
IHJ1bi5zZXRSZWZlcmVuY2luZ1JlbmRlck9iamVjdCh0ZXh0KTsKLSNlbmRpZgorICAgIGlmICh0
ZXh0UnVuTmVlZHNSZW5kZXJpbmdDb250ZXh0KHN0eWxlLT5mb250KCkpKQorICAgICAgICBydW4u
c2V0UmVuZGVyaW5nQ29udGV4dChUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKHRleHQp
KTsKIAogICAgIC8vIFdlIGhhbmRsZSBsZXR0ZXIgJiB3b3JkIHNwYWNpbmcgb3Vyc2VsdmVzLgog
ICAgIHJ1bi5kaXNhYmxlU3BhY2luZygpOwpAQCAtOTgsOCArOTcsNyBAQCBzdGF0aWMgVGV4dFJ1
biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclNWCiBTVkdUZXh0TWV0cmljcyBTVkdUZXh0TWV0cmlj
czo6bWVhc3VyZUNoYXJhY3RlclJhbmdlKFJlbmRlclNWR0lubGluZVRleHQqIHRleHQsIHVuc2ln
bmVkIHBvc2l0aW9uLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgQVNTRVJUKHRleHQpOwotICAg
IFRleHRSdW4gcnVuKGNvbnN0cnVjdFRleHRSdW4odGV4dCwgdGV4dC0+Y2hhcmFjdGVycygpLCBw
b3NpdGlvbiwgbGVuZ3RoKSk7Ci0gICAgcmV0dXJuIFNWR1RleHRNZXRyaWNzKHRleHQsIHJ1biwg
cG9zaXRpb24sIHRleHQtPnRleHRMZW5ndGgoKSk7CisgICAgcmV0dXJuIFNWR1RleHRNZXRyaWNz
KHRleHQsIGNvbnN0cnVjdFRleHRSdW4odGV4dCwgdGV4dC0+Y2hhcmFjdGVycygpLCBwb3NpdGlv
biwgbGVuZ3RoKSwgcG9zaXRpb24sIHRleHQtPnRleHRMZW5ndGgoKSk7CiB9CiAKIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiA4NjgyMykJKGZyb20gU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnQuY3BwOjg2ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggTmlrb2xhcyBaaW1tZXJt
YW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1v
dGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIEVOQUJMRShTVkdfRk9OVFMpCisjaW5jbHVkZSAiRm9udC5oIgorCisjaW5jbHVk
ZSAiQ1NTRm9udFNlbGVjdG9yLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5j
bHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgor
I2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgorI2luY2x1ZGUgIlNWR0Fs
dEdseXBoRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0ZvbnREYXRhLmgiCisjaW5jbHVkZSAiU1ZH
Rm9udEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdHbHlwaEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdHbHlwaE1hcC5oIgorI2luY2x1ZGUg
IlNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUgIlhN
TE5hbWVzLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0RW1Vbml0VG9QaXhlbChmbG9h
dCBmb250U2l6ZSwgZmxvYXQgdW5pdHNQZXJFbSwgZmxvYXQgdmFsdWUpCit7CisgICAgaWYgKCF1
bml0c1BlckVtKQorICAgICAgICByZXR1cm4gMC4wZjsKKworICAgIHJldHVybiB2YWx1ZSAqIGZv
bnRTaXplIC8gdW5pdHNQZXJFbTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlzVmVydGljYWxX
cml0aW5nTW9kZShjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUpCit7CisgICAgcmV0dXJuIHN0
eWxlLT53cml0aW5nTW9kZSgpID09IFdNX1RCUkwgfHwgc3R5bGUtPndyaXRpbmdNb2RlKCkgPT0g
V01fVEI7IAorfQorCitzdGF0aWMgaW5saW5lIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250QW5k
Rm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRh
LCBTVkdGb250RmFjZUVsZW1lbnQqJiBmb250RmFjZSwgU1ZHRm9udEVsZW1lbnQqJiBmb250KQor
eworICAgIEFTU0VSVChmb250RGF0YS0+aXNDdXN0b21Gb250KCkpOworICAgIEFTU0VSVChmb250
RGF0YS0+aXNTVkdGb250KCkpOworCisgICAgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRh
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihmb250RGF0YS0+c3ZnRm9udERhdGEo
KSk7CisKKyAgICBmb250RmFjZSA9IHN2Z0ZvbnREYXRhLT5zdmdGb250RmFjZUVsZW1lbnQoKTsK
KyAgICBBU1NFUlQoZm9udEZhY2UpOworCisgICAgZm9udCA9IGZvbnRGYWNlLT5hc3NvY2lhdGVk
Rm9udEVsZW1lbnQoKTsKKyAgICByZXR1cm4gc3ZnRm9udERhdGE7Cit9CisKKy8vIEhlbHBlciBj
bGFzcyB0byB3YWxrIGEgdGV4dCBydW4uIExvb2t1cCBhIFNWR0dseXBoIGZvciBlYWNoIGNoYXJh
Y3RlcgorLy8gLSBhbHNvIHJlc3BlY3RpbmcgcG9zc2libHkgZGVmaW5lZCBsaWdhdHVyZXMgLSBh
bmQgaW52b2tlIGEgY2FsbGJhY2sgZm9yIGVhY2ggZm91bmQgZ2x5cGguCit0ZW1wbGF0ZTx0eXBl
bmFtZSBTVkdUZXh0UnVuRGF0YT4KK3N0cnVjdCBTVkdUZXh0UnVuV2Fsa2VyIHsKKyAgICB0eXBl
ZGVmIGJvb2wgKCpTVkdUZXh0UnVuV2Fsa2VyQ2FsbGJhY2spKGNvbnN0IFNWR0dseXBoJiwgU1ZH
VGV4dFJ1bkRhdGEmKTsKKyAgICB0eXBlZGVmIHZvaWQgKCpTVkdUZXh0UnVuV2Fsa2VyTWlzc2lu
Z0dseXBoQ2FsbGJhY2spKGNvbnN0IFRleHRSdW4mLCBTVkdUZXh0UnVuRGF0YSYpOworCisgICAg
U1ZHVGV4dFJ1bldhbGtlcihjb25zdCBTVkdGb250RGF0YSogZm9udERhdGEsIFNWR0ZvbnRFbGVt
ZW50KiBmb250RWxlbWVudCwgU1ZHVGV4dFJ1bkRhdGEmIGRhdGEsCisgICAgICAgICAgICAgICAg
ICAgICBTVkdUZXh0UnVuV2Fsa2VyQ2FsbGJhY2sgY2FsbGJhY2ssIFNWR1RleHRSdW5XYWxrZXJN
aXNzaW5nR2x5cGhDYWxsYmFjayBtaXNzaW5nR2x5cGhDYWxsYmFjaykKKyAgICAgICAgOiBtX2Zv
bnREYXRhKGZvbnREYXRhKQorICAgICAgICAsIG1fZm9udEVsZW1lbnQoZm9udEVsZW1lbnQpCisg
ICAgICAgICwgbV93YWxrZXJEYXRhKGRhdGEpCisgICAgICAgICwgbV93YWxrZXJDYWxsYmFjayhj
YWxsYmFjaykKKyAgICAgICAgLCBtX3dhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNrKG1pc3NpbmdH
bHlwaENhbGxiYWNrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHdhbGsoY29uc3QgVGV4dFJ1
biYgcnVuLCBib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBTdHJpbmcmIGxhbmd1YWdlLCBpbnQg
ZnJvbSwgaW50IHRvKQorICAgIHsKKyAgICAgICAgQVNTRVJUKDAgPD0gZnJvbSAmJiBmcm9tIDw9
IHRvICYmIHRvIC0gZnJvbSA8PSBydW4ubGVuZ3RoKCkpOworCisgICAgICAgIGNvbnN0IFN0cmlu
ZyB0ZXh0ID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5kYXRhKGZyb20pLCB0byAtIGZyb20p
OworICAgICAgICBWZWN0b3I8U1ZHR2x5cGg6OkFyYWJpY0Zvcm0+IGNoYXJzKGNoYXJhY3RlcnNX
aXRoQXJhYmljRm9ybSh0ZXh0LCBydW4ucnRsKCkpKTsKKworICAgICAgICBTVkdHbHlwaCBpZGVu
dGlmaWVyOworICAgICAgICBib29sIGZvdW5kR2x5cGggPSBmYWxzZTsKKyAgICAgICAgaW50IGNo
YXJhY3Rlckxvb2t1cFJhbmdlOworICAgICAgICBpbnQgZW5kT2ZTY2FuUmFuZ2UgPSB0byArIG1f
d2Fsa2VyRGF0YS5leHRyYUNoYXJzQXZhaWxhYmxlOworCisgICAgICAgIGJvb2wgaGF2ZUFsdEds
eXBoID0gZmFsc2U7CisgICAgICAgIFNWR0dseXBoIGFsdEdseXBoSWRlbnRpZmllcjsKKyAgICAg
ICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gcnVuLnJlZmVyZW5jaW5nUmVuZGVy
T2JqZWN0KCkpIHsKKyAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSBy
ZW5kZXJPYmplY3QtPnBhcmVudCgpOworICAgICAgICAgICAgQVNTRVJUKHBhcmVudFJlbmRlcmVy
KTsKKyAgICAgICAgICAgIGlmIChwYXJlbnRSZW5kZXJlci0+bm9kZSgpICYmIHBhcmVudFJlbmRl
cmVyLT5ub2RlKCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFsdEdseXBoVGFnKSkgeworICAgICAg
ICAgICAgICAgIFNWR0dseXBoRWxlbWVudCogZ2x5cGhFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
QWx0R2x5cGhFbGVtZW50Kj4ocGFyZW50UmVuZGVyZXItPm5vZGUoKSktPmdseXBoRWxlbWVudCgp
OworICAgICAgICAgICAgICAgIGlmIChnbHlwaEVsZW1lbnQpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaGF2ZUFsdEdseXBoID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYWx0R2x5cGhJZGVu
dGlmaWVyID0gZ2x5cGhFbGVtZW50LT5idWlsZEdseXBoSWRlbnRpZmllcigpOworICAgICAgICAg
ICAgICAgICAgICBhbHRHbHlwaElkZW50aWZpZXIuaXNWYWxpZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgICAgIGFsdEdseXBoSWRlbnRpZmllci51bmljb2RlU3RyaW5nTGVuZ3RoID0gdG8gLSBm
cm9tOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAoaW50IGkgPSBmcm9tOyBpIDwgdG87ICsraSkgeworICAgICAgICAgICAgLy8gSWYg
Y2hhcmFjdGVyTG9va3VwUmFuZ2UgaXMgPiAwLCB0aGVuIHRoZSBmb250IGRlZmluZWQgbGlnYXR1
cmVzIChsZW5ndGggb2YgdW5pY29kZSBwcm9wZXJ0eSB2YWx1ZSA+IDEpLgorICAgICAgICAgICAg
Ly8gV2UgaGF2ZSB0byBjaGVjayB3aGV0ZXIgdGhlIGN1cnJlbnQgY2hhcmFjdGVyICYgdGhlIG5l
eHQgY2hhcmFjdGVyIGRlZmluZSBhIGxpZ2F0dXJlLiBUaGlzIG5lZWRzIHRvIGJlCisgICAgICAg
ICAgICAvLyBleHRlbmRlZCB0byB0aGUgbi10aCBuZXh0IGNoYXJhY3RlciAod2hlcmUgbiBpcyAn
Y2hhcmFjdGVyTG9va3VwUmFuZ2UnKSwgdG8gY2hlY2sgZm9yIGFueSBwb3NzaWJsZSBsaWdhdHVy
ZS4KKyAgICAgICAgICAgIGNoYXJhY3Rlckxvb2t1cFJhbmdlID0gZW5kT2ZTY2FuUmFuZ2UgLSBp
OworCisgICAgICAgICAgICBTdHJpbmcgbG9va3VwU3RyaW5nID0gRm9udDo6bm9ybWFsaXplU3Bh
Y2VzKHJ1bi5kYXRhKGkpLCBjaGFyYWN0ZXJMb29rdXBSYW5nZSk7CisKKyAgICAgICAgICAgIFZl
Y3RvcjxTVkdHbHlwaD4gZ2x5cGhzOworICAgICAgICAgICAgaWYgKGhhdmVBbHRHbHlwaCkKKyAg
ICAgICAgICAgICAgICBnbHlwaHMuYXBwZW5kKGFsdEdseXBoSWRlbnRpZmllcik7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9mb250RWxlbWVudC0+Z2V0R2x5cGhJZGVudGlm
aWVyc0ZvclN0cmluZyhsb29rdXBTdHJpbmcsIGdseXBocyk7CisKKyAgICAgICAgICAgIFZlY3Rv
cjxTVkdHbHlwaD46Oml0ZXJhdG9yIGl0ID0gZ2x5cGhzLmJlZ2luKCk7CisgICAgICAgICAgICBW
ZWN0b3I8U1ZHR2x5cGg+OjppdGVyYXRvciBlbmQgPSBnbHlwaHMuZW5kKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgICAg
ICBpZGVudGlmaWVyID0gKml0OworICAgICAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlzVmFs
aWQgJiYgaXNDb21wYXRpYmxlR2x5cGgoaWRlbnRpZmllciwgaXNWZXJ0aWNhbFRleHQsIGxhbmd1
YWdlLCBjaGFycywgaSwgaSArIGlkZW50aWZpZXIudW5pY29kZVN0cmluZ0xlbmd0aCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGNoYXJhY3Rlckxvb2t1cFJhbmdlID4gMCk7CisgICAg
ICAgICAgICAgICAgICAgIGkgKz0gaWRlbnRpZmllci51bmljb2RlU3RyaW5nTGVuZ3RoIC0gMTsK
KyAgICAgICAgICAgICAgICAgICAgbV93YWxrZXJEYXRhLmNoYXJzQ29uc3VtZWQgKz0gaWRlbnRp
Zmllci51bmljb2RlU3RyaW5nTGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBtX3dhbGtlckRh
dGEuZ2x5cGhOYW1lID0gaWRlbnRpZmllci5nbHlwaE5hbWU7CisKKyAgICAgICAgICAgICAgICAg
ICAgZm91bmRHbHlwaCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIFNWR0dseXBoRWxlbWVu
dDo6aW5oZXJpdFVuc3BlY2lmaWVkQXR0cmlidXRlcyhpZGVudGlmaWVyLCBtX2ZvbnREYXRhKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpZiAoIWZvdW5kR2x5cGgpIHsKKyAgICAgICAgICAgICAgICAr
K21fd2Fsa2VyRGF0YS5jaGFyc0NvbnN1bWVkOworICAgICAgICAgICAgICAgIGlmIChTVkdNaXNz
aW5nR2x5cGhFbGVtZW50KiBlbGVtZW50ID0gbV9mb250RWxlbWVudC0+Zmlyc3RNaXNzaW5nR2x5
cGhFbGVtZW50KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gPG1pc3NpbmctZ2x5cGg+IGVs
ZW1lbnQgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0gU1ZHR2x5cGhF
bGVtZW50OjpidWlsZEdlbmVyaWNHbHlwaElkZW50aWZpZXIoZWxlbWVudCk7CisgICAgICAgICAg
ICAgICAgICAgIFNWR0dseXBoRWxlbWVudDo6aW5oZXJpdFVuc3BlY2lmaWVkQXR0cmlidXRlcyhp
ZGVudGlmaWVyLCBtX2ZvbnREYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllci5p
c1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAvLyBGYWxsYmFjayB0byBzeXN0ZW0gZm9udCBmYWxsYmFjaworICAgICAgICAgICAgICAg
ICAgICBUZXh0UnVuIHN1YlJ1bihydW4pOworICAgICAgICAgICAgICAgICAgICBzdWJSdW4uc2V0
VGV4dChzdWJSdW4uZGF0YShpKSwgMSk7CisKKyAgICAgICAgICAgICAgICAgICAgKCptX3dhbGtl
ck1pc3NpbmdHbHlwaENhbGxiYWNrKShzdWJSdW4sIG1fd2Fsa2VyRGF0YSk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCEoKm1fd2Fsa2VyQ2FsbGJhY2spKGlkZW50aWZpZXIsIG1fd2Fsa2Vy
RGF0YSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGZvdW5kR2x5cGgg
PSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBTVkdGb250
RGF0YSogbV9mb250RGF0YTsKKyAgICBTVkdGb250RWxlbWVudCogbV9mb250RWxlbWVudDsKKyAg
ICBTVkdUZXh0UnVuRGF0YSYgbV93YWxrZXJEYXRhOworICAgIFNWR1RleHRSdW5XYWxrZXJDYWxs
YmFjayBtX3dhbGtlckNhbGxiYWNrOworICAgIFNWR1RleHRSdW5XYWxrZXJNaXNzaW5nR2x5cGhD
YWxsYmFjayBtX3dhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNrOworfTsKKworLy8gQ2FsbGJhY2sg
JiBkYXRhIHN0cnVjdHVyZXMgdG8gY29tcHV0ZSB0aGUgd2lkdGggb2YgdGV4dCB1c2luZyBTVkcg
Rm9udHMKK3N0cnVjdCBTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhIHsKKyAgICBp
bnQgYXQ7CisgICAgaW50IGZyb207CisgICAgaW50IHRvOworICAgIGludCBleHRyYUNoYXJzQXZh
aWxhYmxlOworICAgIGludCBjaGFyc0NvbnN1bWVkOworICAgIFN0cmluZyBnbHlwaE5hbWU7CisK
KyAgICBmbG9hdCBzY2FsZTsKKyAgICBmbG9hdCBsZW5ndGg7CisgICAgY29uc3QgRm9udCogZm9u
dDsKK307CisKK3N0YXRpYyBib29sIGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnRDYWxsYmFjayhjb25z
dCBTVkdHbHlwaCYgaWRlbnRpZmllciwgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0
YSYgZGF0YSkKK3sKKyAgICBpZiAoZGF0YS5hdCA+PSBkYXRhLmZyb20gJiYgZGF0YS5hdCA8IGRh
dGEudG8pCisgICAgICAgIGRhdGEubGVuZ3RoICs9IGlkZW50aWZpZXIuaG9yaXpvbnRhbEFkdmFu
Y2VYICogZGF0YS5zY2FsZTsKKworICAgIGRhdGEuYXQrKzsKKyAgICByZXR1cm4gZGF0YS5hdCA8
IGRhdGEudG87Cit9CisKK3N0YXRpYyB2b2lkIGZsb2F0V2lkdGhNaXNzaW5nR2x5cGhDYWxsYmFj
ayhjb25zdCBUZXh0UnVuJiBydW4sIFNWR1RleHRSdW5XYWxrZXJNZWFzdXJlZExlbmd0aERhdGEm
IGRhdGEpCit7CisgICAgLy8gSGFuZGxlIHN5c3RlbSBmb250IGZhbGxiYWNrCisgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihkYXRhLmZvbnQtPmZvbnREZXNjcmlwdGlvbigpKTsK
KyAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KEZvbnRGYW1pbHkoKSk7CisgICAgRm9udCBm
b250KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7IC8vIHNwYWNpbmcgaGFuZGxlZCBieSBTVkcgdGV4
dCBjb2RlLgorICAgIGZvbnQudXBkYXRlKGRhdGEuZm9udC0+Zm9udFNlbGVjdG9yKCkpOworCisg
ICAgZGF0YS5sZW5ndGggKz0gZm9udC53aWR0aChydW4pOworfQorCisKK1NWR0ZvbnRFbGVtZW50
KiBGb250OjpzdmdGb250KCkgY29uc3QKK3sgCisgICAgaWYgKCFpc1NWR0ZvbnQoKSkKKyAgICAg
ICAgcmV0dXJuIDA7CisKKyAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAwOworICAg
IFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKKyAgICBpZiAoc3ZnRm9u
dEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKHByaW1hcnlGb250KCksIGZvbnRGYWNlRWxl
bWVudCwgZm9udEVsZW1lbnQpKQorICAgICAgICByZXR1cm4gZm9udEVsZW1lbnQ7CisgICAgCisg
ICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBmbG9hdCBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2lu
Z1NWR0ZvbnQoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZXh0cmFD
aGFyc0F2YWlsYWJsZSwgaW50IGZyb20sIGludCB0bywgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJp
bmcmIGdseXBoTmFtZSkKK3sKKyAgICBpbnQgbmV3RnJvbSA9IHRvID4gZnJvbSA/IGZyb20gOiB0
bzsKKyAgICBpbnQgbmV3VG8gPSB0byA+IGZyb20gPyB0byA6IGZyb207CisKKyAgICBmcm9tID0g
bmV3RnJvbTsKKyAgICB0byA9IG5ld1RvOworCisgICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVt
ZW50ID0gMDsKKyAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7CisK
KyAgICBpZiAoY29uc3QgU1ZHRm9udERhdGEqIGZvbnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNl
RWxlbWVudEZvckZvbnREYXRhKGZvbnQtPnByaW1hcnlGb250KCksIGZvbnRGYWNlRWxlbWVudCwg
Zm9udEVsZW1lbnQpKSB7CisgICAgICAgIGlmICghZm9udEVsZW1lbnQpCisgICAgICAgICAgICBy
ZXR1cm4gMC4wZjsKKworICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRh
IGRhdGE7CisKKyAgICAgICAgZGF0YS5mb250ID0gZm9udDsKKyAgICAgICAgZGF0YS5hdCA9IGZy
b207CisgICAgICAgIGRhdGEuZnJvbSA9IGZyb207CisgICAgICAgIGRhdGEudG8gPSB0bzsKKyAg
ICAgICAgZGF0YS5leHRyYUNoYXJzQXZhaWxhYmxlID0gZXh0cmFDaGFyc0F2YWlsYWJsZTsKKyAg
ICAgICAgZGF0YS5jaGFyc0NvbnN1bWVkID0gMDsKKyAgICAgICAgZGF0YS5zY2FsZSA9IGNvbnZl
cnRFbVVuaXRUb1BpeGVsKGZvbnQtPnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVt
KCksIDEuMGYpOworICAgICAgICBkYXRhLmxlbmd0aCA9IDAuMGY7CisKKyAgICAgICAgU3RyaW5n
IGxhbmd1YWdlOworICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gZmFsc2U7IC8vIEhvbGRz
IHRydWUgZm9yIEhUTUwgdGV4dAorCisgICAgICAgIC8vIFRPRE86IGxhbmd1YWdlIG1hdGNoaW5n
ICYgc3ZnIGdseXBocyBzaG91bGQgYmUgcG9zc2libGUgZm9yIEhUTUwgdGV4dCwgdG9vLgorICAg
ICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QgPSBydW4ucmVmZXJlbmNpbmdSZW5k
ZXJPYmplY3QoKSkgeworICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9
IHJlbmRlck9iamVjdC0+cGFyZW50KCk7CisgICAgICAgICAgICBBU1NFUlQocGFyZW50UmVuZGVy
ZXIpOworICAgICAgICAgICAgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUo
cGFyZW50UmVuZGVyZXItPnN0eWxlKCktPnN2Z1N0eWxlKCkpOworCisgICAgICAgICAgICBpZiAo
U1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihwYXJlbnRSZW5k
ZXJlci0+bm9kZSgpKSkKKyAgICAgICAgICAgICAgICBsYW5ndWFnZSA9IGVsZW1lbnQtPmdldEF0
dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOworICAgICAgICB9CisKKyAgICAgICAgU1ZHVGV4
dFJ1bldhbGtlcjxTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhPiBydW5XYWxrZXIo
Zm9udERhdGEsIGZvbnRFbGVtZW50LCBkYXRhLCBmbG9hdFdpZHRoVXNpbmdTVkdGb250Q2FsbGJh
Y2ssIGZsb2F0V2lkdGhNaXNzaW5nR2x5cGhDYWxsYmFjayk7CisgICAgICAgIHJ1bldhbGtlci53
YWxrKHJ1biwgaXNWZXJ0aWNhbFRleHQsIGxhbmd1YWdlLCBmcm9tLCB0byk7CisgICAgICAgIGNo
YXJzQ29uc3VtZWQgPSBkYXRhLmNoYXJzQ29uc3VtZWQ7CisgICAgICAgIGdseXBoTmFtZSA9IGRh
dGEuZ2x5cGhOYW1lOworICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGg7CisgICAgfQorCisgICAg
cmV0dXJuIDAuMGY7Cit9CisKK2Zsb2F0IEZvbnQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29u
c3QgVGV4dFJ1biYgcnVuKSBjb25zdAoreworICAgIGludCBjaGFyc0NvbnN1bWVkOworICAgIFN0
cmluZyBnbHlwaE5hbWU7CisgICAgcmV0dXJuIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZH
Rm9udCh0aGlzLCBydW4sIDAsIDAsIHJ1bi5sZW5ndGgoKSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhO
YW1lKTsKK30KKworZmxvYXQgRm9udDo6ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBUZXh0
UnVuJiBydW4sIGludCBleHRyYUNoYXJzQXZhaWxhYmxlLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0
cmluZyYgZ2x5cGhOYW1lKSBjb25zdAoreworICAgIHJldHVybiBmbG9hdFdpZHRoT2ZTdWJTdHJp
bmdVc2luZ1NWR0ZvbnQodGhpcywgcnVuLCBleHRyYUNoYXJzQXZhaWxhYmxlLCAwLCBydW4ubGVu
Z3RoKCksIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7Cit9CisKKy8vIENhbGxiYWNrICYgZGF0
YSBzdHJ1Y3R1cmVzIHRvIGRyYXcgdGV4dCB1c2luZyBTVkcgRm9udHMKK3N0cnVjdCBTVkdUZXh0
UnVuV2Fsa2VyRHJhd1RleHREYXRhIHsKKyAgICBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZTsKKyAg
ICBpbnQgY2hhcnNDb25zdW1lZDsKKyAgICBTdHJpbmcgZ2x5cGhOYW1lOworICAgIFZlY3RvcjxT
VkdHbHlwaD4gZ2x5cGhJZGVudGlmaWVyczsKKyAgICBWZWN0b3I8VUNoYXI+IGZhbGxiYWNrQ2hh
cmFjdGVyczsKK307CisKK3N0YXRpYyBib29sIGRyYXdUZXh0VXNpbmdTVkdGb250Q2FsbGJhY2so
Y29uc3QgU1ZHR2x5cGgmIGlkZW50aWZpZXIsIFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGEm
IGRhdGEpCit7CisgICAgZGF0YS5nbHlwaElkZW50aWZpZXJzLmFwcGVuZChpZGVudGlmaWVyKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZHJhd1RleHRNaXNzaW5nR2x5cGhD
YWxsYmFjayhjb25zdCBUZXh0UnVuJiBydW4sIFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGEm
IGRhdGEpCit7CisgICAgQVNTRVJUKHJ1bi5sZW5ndGgoKSA9PSAxKTsKKyAgICBkYXRhLmdseXBo
SWRlbnRpZmllcnMuYXBwZW5kKFNWR0dseXBoKCkpOworICAgIGRhdGEuZmFsbGJhY2tDaGFyYWN0
ZXJzLmFwcGVuZChydW5bMF0pOworfQorCit2b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9t
LCBpbnQgdG8pIGNvbnN0Cit7CisgICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50ID0gMDsK
KyAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7CisKKyAgICBpZiAo
Y29uc3QgU1ZHRm9udERhdGEqIGZvbnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZv
ckZvbnREYXRhKHByaW1hcnlGb250KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKSB7
CisgICAgICAgIGlmICghZm9udEVsZW1lbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSBkYXRhOworICAgICAgICBGbG9hdFBvaW50
IGN1cnJlbnRQb2ludCA9IHBvaW50OworICAgICAgICBmbG9hdCBzY2FsZSA9IGNvbnZlcnRFbVVu
aXRUb1BpeGVsKHNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCksIDEuMGYpOwor
CisgICAgICAgIFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQYWludGluZ1Jlc291cmNlID0gcnVu
LmFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoKTsKKworICAgICAgICAvLyBJZiByZW5kZXJPYmplY3Qg
aXMgbm90IHNldCwgd2UncmUgZGVhbGluZyBmb3IgSFRNTCB0ZXh0IHJlbmRlcmVkIHVzaW5nIFNW
RyBGb250cy4KKyAgICAgICAgaWYgKCFydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSkgewor
ICAgICAgICAgICAgQVNTRVJUKCFhY3RpdmVQYWludGluZ1Jlc291cmNlKTsKKworICAgICAgICAg
ICAgLy8gVE9ETzogV2UncmUgb25seSBzdXBwb3J0aW5nIHNpbXBsZSBmaWxsZWQgSFRNTCB0ZXh0
IHNvIGZhci4KKyAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogc29saWRQ
YWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdS
ZXNvdXJjZSgpOworICAgICAgICAgICAgc29saWRQYWludGluZ1Jlc291cmNlLT5zZXRDb2xvcihj
b250ZXh0LT5maWxsQ29sb3IoKSk7CisKKyAgICAgICAgICAgIGFjdGl2ZVBhaW50aW5nUmVzb3Vy
Y2UgPSBzb2xpZFBhaW50aW5nUmVzb3VyY2U7CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQo
YWN0aXZlUGFpbnRpbmdSZXNvdXJjZSk7CisKKyAgICAgICAgaW50IGNoYXJzQ29uc3VtZWQ7Cisg
ICAgICAgIFN0cmluZyBnbHlwaE5hbWU7CisgICAgICAgIGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBm
YWxzZTsKKyAgICAgICAgZmxvYXQgeFN0YXJ0T2Zmc2V0ID0gZmxvYXRXaWR0aE9mU3ViU3RyaW5n
VXNpbmdTVkdGb250KHRoaXMsIHJ1biwgMCwgcnVuLnJ0bCgpID8gdG8gOiAwLCBydW4ucnRsKCkg
PyBydW4ubGVuZ3RoKCkgOiBmcm9tLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOworICAgICAg
ICBGbG9hdFBvaW50IGdseXBoT3JpZ2luOworCisgICAgICAgIFN0cmluZyBsYW5ndWFnZTsKKwor
ICAgICAgICAvLyBUT0RPOiBsYW5ndWFnZSBtYXRjaGluZyAmIHN2ZyBnbHlwaHMgc2hvdWxkIGJl
IHBvc3NpYmxlIGZvciBIVE1MIHRleHQsIHRvby4KKyAgICAgICAgUmVuZGVyT2JqZWN0KiByZWZl
cmVuY2luZ1JlbmRlck9iamVjdCA9IHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpOworICAg
ICAgICBSZW5kZXJPYmplY3QqIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50ID0gcmVmZXJl
bmNpbmdSZW5kZXJPYmplY3QgPyByZWZlcmVuY2luZ1JlbmRlck9iamVjdC0+cGFyZW50KCkgOiAw
OworICAgICAgICBSZW5kZXJTdHlsZSogcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnRTdHls
ZSA9IDA7CisgICAgICAgIGlmIChyZWZlcmVuY2luZ1JlbmRlck9iamVjdCkgeworICAgICAgICAg
ICAgQVNTRVJUKHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50KTsKKyAgICAgICAgICAgIHJl
ZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5bGUgPSByZWZlcmVuY2luZ1JlbmRlck9iamVj
dFBhcmVudC0+c3R5bGUoKTsKKworICAgICAgICAgICAgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRp
Y2FsV3JpdGluZ01vZGUocmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnRTdHlsZS0+c3ZnU3R5
bGUoKSk7ICAgIAorICAgICAgICAgICAgaWYgKFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdFbGVtZW50Kj4ocmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnQtPm5vZGUoKSkp
CisgICAgICAgICAgICAgICAgbGFuZ3VhZ2UgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoWE1MTmFt
ZXM6OmxhbmdBdHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghaXNWZXJ0aWNhbFRleHQp
IHsKKyAgICAgICAgICAgIGdseXBoT3JpZ2luLnNldFgoZm9udERhdGEtPmhvcml6b250YWxPcmln
aW5YKCkgKiBzY2FsZSk7CisgICAgICAgICAgICBnbHlwaE9yaWdpbi5zZXRZKGZvbnREYXRhLT5o
b3Jpem9udGFsT3JpZ2luWSgpICogc2NhbGUpOworICAgICAgICB9CisKKyAgICAgICAgZGF0YS5l
eHRyYUNoYXJzQXZhaWxhYmxlID0gMDsKKyAgICAgICAgZGF0YS5jaGFyc0NvbnN1bWVkID0gMDsK
KworICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyPFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGE+
IHJ1bldhbGtlcihmb250RGF0YSwgZm9udEVsZW1lbnQsIGRhdGEsIGRyYXdUZXh0VXNpbmdTVkdG
b250Q2FsbGJhY2ssIGRyYXdUZXh0TWlzc2luZ0dseXBoQ2FsbGJhY2spOworICAgICAgICBydW5X
YWxrZXIud2FsayhydW4sIGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgZnJvbSwgdG8pOworCisg
ICAgICAgIFJlbmRlclNWR1Jlc291cmNlTW9kZSByZXNvdXJjZU1vZGUgPSBjb250ZXh0LT50ZXh0
RHJhd2luZ01vZGUoKSA9PSBUZXh0TW9kZVN0cm9rZSA/IEFwcGx5VG9TdHJva2VNb2RlIDogQXBw
bHlUb0ZpbGxNb2RlOworCisgICAgICAgIHVuc2lnbmVkIG51bUdseXBocyA9IGRhdGEuZ2x5cGhJ
ZGVudGlmaWVycy5zaXplKCk7CisgICAgICAgIHVuc2lnbmVkIGZhbGxiYWNrQ2hhcmFjdGVySW5k
ZXggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5cGhzOyArK2kp
IHsKKyAgICAgICAgICAgIGNvbnN0IFNWR0dseXBoJiBpZGVudGlmaWVyID0gZGF0YS5nbHlwaElk
ZW50aWZpZXJzW3J1bi5ydGwoKSA/IG51bUdseXBocyAtIGkgLSAxIDogaV07CisgICAgICAgICAg
ICBpZiAoaWRlbnRpZmllci5pc1ZhbGlkKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFN1
cHBvcnQgYXJiaXRhcnkgU1ZHIGNvbnRlbnQgYXMgZ2x5cGggKGN1cnJlbnRseSBsaW1pdGVkIHRv
IDxnbHlwaCBkPSIuLi4iPiBzaXR1YXRpb25zKS4KKyAgICAgICAgICAgICAgICBpZiAoIWlkZW50
aWZpZXIucGF0aERhdGEuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzVmVydGljYWxUZXh0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnbHlw
aE9yaWdpbi5zZXRYKGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5YICogc2NhbGUpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WShpZGVudGlmaWVyLnZlcnRpY2FsT3Jp
Z2luWSAqIHNjYWxlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgIEFmZmluZVRyYW5zZm9ybSBnbHlwaFBhdGhUcmFuc2Zvcm07CisgICAgICAgICAgICAgICAg
ICAgIGdseXBoUGF0aFRyYW5zZm9ybS50cmFuc2xhdGUoeFN0YXJ0T2Zmc2V0ICsgY3VycmVudFBv
aW50LngoKSArIGdseXBoT3JpZ2luLngoKSwgY3VycmVudFBvaW50LnkoKSArIGdseXBoT3JpZ2lu
LnkoKSk7CisgICAgICAgICAgICAgICAgICAgIGdseXBoUGF0aFRyYW5zZm9ybS5zY2FsZShzY2Fs
ZSwgLXNjYWxlKTsKKworICAgICAgICAgICAgICAgICAgICBQYXRoIGdseXBoUGF0aCA9IGlkZW50
aWZpZXIucGF0aERhdGE7CisgICAgICAgICAgICAgICAgICAgIGdseXBoUGF0aC50cmFuc2Zvcm0o
Z2x5cGhQYXRoVHJhbnNmb3JtKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlUGFp
bnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZShyZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVu
dCwgcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnRTdHlsZSwgY29udGV4dCwgcmVzb3VyY2VN
b2RlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jaW5nUmVuZGVyT2Jq
ZWN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCog
dGV4dFJlbmRlcmVyID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0KHJlZmVyZW5jaW5nUmVuZGVyT2Jq
ZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlj
a25lc3MoY29udGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCkgKiB0ZXh0UmVuZGVyZXItPnNjYWxpbmdG
YWN0b3IoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShyZWZlcmVuY2lu
Z1JlbmRlck9iamVjdFBhcmVudCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQYXRoKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBvaW50
Lm1vdmUoMC4wZiwgaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZICogc2NhbGUpOworICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBvaW50Lm1vdmUoaWRl
bnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVggKiBzY2FsZSwgMC4wZik7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBzeXN0ZW0gZm9udCBmYWxsYmFjawor
ICAgICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24obV9mb250RGVz
Y3JpcHRpb24pOworICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbHkoRm9u
dEZhbWlseSgpKTsKKyAgICAgICAgICAgICAgICBGb250IGZvbnQoZm9udERlc2NyaXB0aW9uLCAw
LCAwKTsgLy8gc3BhY2luZyBoYW5kbGVkIGJ5IFNWRyB0ZXh0IGNvZGUuCisgICAgICAgICAgICAg
ICAgZm9udC51cGRhdGUoZm9udFNlbGVjdG9yKCkpOworCisgICAgICAgICAgICAgICAgVGV4dFJ1
biBmYWxsYmFja0NoYXJhY3RlclJ1bihydW4pOworICAgICAgICAgICAgICAgIGZhbGxiYWNrQ2hh
cmFjdGVyUnVuLnNldFRleHQoJmRhdGEuZmFsbGJhY2tDaGFyYWN0ZXJzW3J1bi5ydGwoKSA/IGRh
dGEuZmFsbGJhY2tDaGFyYWN0ZXJzLnNpemUoKSAtIGZhbGxiYWNrQ2hhcmFjdGVySW5kZXggLSAx
IDogZmFsbGJhY2tDaGFyYWN0ZXJJbmRleF0sIDEpOworICAgICAgICAgICAgICAgIGZvbnQuZHJh
d1RleHQoY29udGV4dCwgZmFsbGJhY2tDaGFyYWN0ZXJSdW4sIGN1cnJlbnRQb2ludCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCisgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRQb2ludC5tb3ZlKDAuMGYsIGZvbnQud2lkdGgoZmFsbGJhY2tDaGFyYWN0ZXJSdW4pKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQb2ludC5t
b3ZlKGZvbnQud2lkdGgoZmFsbGJhY2tDaGFyYWN0ZXJSdW4pLCAwLjBmKTsKKworICAgICAgICAg
ICAgICAgIGZhbGxiYWNrQ2hhcmFjdGVySW5kZXgrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KK30KKworRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JUZXh0VXNpbmdT
VkdGb250KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBo
ZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit7CisgICAgaW50IGNoYXJzQ29uc3VtZWQ7
CisgICAgU3RyaW5nIGdseXBoTmFtZTsKKworICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgp
ICsgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgMCwgcnVuLnJ0
bCgpID8gdG8gOiAwLCBydW4ucnRsKCkgPyBydW4ubGVuZ3RoKCkgOiBmcm9tLCBjaGFyc0NvbnN1
bWVkLCBnbHlwaE5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgcG9pbnQueSgpLCBmbG9hdFdp
ZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQodGhpcywgcnVuLCAwLCBmcm9tLCB0bywgY2hhcnND
b25zdW1lZCwgZ2x5cGhOYW1lKSwgaGVpZ2h0KTsKK30KKworaW50IEZvbnQ6Om9mZnNldEZvclBv
c2l0aW9uRm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiwgZmxvYXQsIGJvb2wpIGNv
bnN0Cit7CisgICAgLy8gVE9ETzogRml4IHRleHQgc2VsZWN0aW9uIHdoZW4gSFRNTCB0ZXh0IGlz
IGRyYXduIHVzaW5nIGEgU1ZHIEZvbnQKKyAgICAvLyBXZSBuZWVkIHRvIGludGVncmF0ZSB0aGUg
U1ZHIHRleHQgc2VsZWN0aW9uIGNvZGUgaW4gdGhlIG9mZnNldEZvclBvc2l0aW9uKCkgZnJhbWV3
b3JrLgorICAgIC8vIFRoaXMgd2lsbCBhbHNvIGZpeCBhIG1ham9yIGlzc3VlLCB0aGF0IFNWRyBU
ZXh0IGNvZGUgY2FuJ3Qgc2VsZWN0IGFyYWJpYyBzdHJpbmdzIHByb3Blcmx5LgorICAgIHJldHVy
biAwOworfQorCit9CisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlz
aW9uIDg2ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDEwLTIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTM3LDcgKzM3LDcgQEAKICNpbmNsdWRlICJTVkdNaXNzaW5nR2x5cGhFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgot
I2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5o
IgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7
CkBAIC01OSwxMCArNTksMTEgQEAgc3RhdGljIGlubGluZSBib29sIGlzVmVydGljYWxXcml0aW5n
TW9kZQogCiBzdGF0aWMgaW5saW5lIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250QW5kRm9udEZh
Y2VFbGVtZW50Rm9yRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBTVkdG
b250RmFjZUVsZW1lbnQqJiBmb250RmFjZSwgU1ZHRm9udEVsZW1lbnQqJiBmb250KQogeworICAg
IEFTU0VSVChmb250RGF0YSk7CiAgICAgQVNTRVJUKGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7
CiAgICAgQVNTRVJUKGZvbnREYXRhLT5pc1NWR0ZvbnQoKSk7CiAKLSAgICBjb25zdCBTVkdGb250
RGF0YSogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnRE
YXRhLT5zdmdGb250RGF0YSgpKTsKKyAgICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEg
PSBzdGF0aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnREYXRhLT5mb250RGF0YSgpKTsK
IAogICAgIGZvbnRGYWNlID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwogICAg
IEFTU0VSVChmb250RmFjZSk7CkBAIC03MSw2ICs3MiwzMSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0
IFNWR0ZvbnREYXRhKiBzdmdGb250CiAgICAgcmV0dXJuIHN2Z0ZvbnREYXRhOwogfQogCitzdGF0
aWMgaW5saW5lIFJlbmRlck9iamVjdCogZmlyc3RQYXJlbnRSZW5kZXJlckZvck5vblRleHROb2Rl
KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgQVNTRVJUKHJlbmRlcmVyKTsKKyAgICBS
ZW5kZXJPYmplY3QqIG5ld1JlbmRlcmVyID0gcmVuZGVyZXItPmlzVGV4dCgpID8gcmVuZGVyZXIt
PnBhcmVudCgpIDogcmVuZGVyZXI7CisgICAgQVNTRVJUKG5ld1JlbmRlcmVyLT5ub2RlKCkpOwor
ICAgIEFTU0VSVChuZXdSZW5kZXJlci0+bm9kZSgpLT5pc0VsZW1lbnROb2RlKCkpOworICAgIHJl
dHVybiBuZXdSZW5kZXJlcjsKK30KKworc3RhdGljIGlubGluZSBSZW5kZXJPYmplY3QqIHJlZmVy
ZW5jaW5nUmVuZGVyT2JqZWN0RnJvbVJ1bihjb25zdCBUZXh0UnVuJiBydW4pCit7CisgICAgVGV4
dFJ1bjo6QWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0KiBhYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQg
PSBydW4ucmVuZGVyaW5nQ29udGV4dCgpOworICAgIGlmICghYWJzdHJhY3RSZW5kZXJpbmdDb250
ZXh0IHx8ICFhYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQtPmlzV2ViQ29yZVJlbmRlcmluZ0NvbnRl
eHQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHRSdW5S
ZW5kZXJpbmdDb250ZXh0Kj4oYWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0KS0+Y29udGV4dCgpOwor
fQorCitzdGF0aWMgaW5saW5lIFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQYWludGluZ1Jlc291
cmNlRnJvbVJ1bihjb25zdCBUZXh0UnVuJiBydW4pCit7CisgICAgVGV4dFJ1bjo6QWJzdHJhY3RS
ZW5kZXJpbmdDb250ZXh0KiBhYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQgPSBydW4ucmVuZGVyaW5n
Q29udGV4dCgpOworICAgIGlmICghYWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0IHx8ICFhYnN0cmFj
dFJlbmRlcmluZ0NvbnRleHQtPmlzV2ViQ29yZVJlbmRlcmluZ0NvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRleHRSdW5SZW5kZXJpbmdDb250ZXh0
Kj4oYWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0KS0+YWN0aXZlUGFpbnRpbmdSZXNvdXJjZSgpOwor
fQorCiAvLyBIZWxwZXIgY2xhc3MgdG8gd2FsayBhIHRleHQgcnVuLiBMb29rdXAgYSBTVkdHbHlw
aCBmb3IgZWFjaCBjaGFyYWN0ZXIKIC8vIC0gYWxzbyByZXNwZWN0aW5nIHBvc3NpYmx5IGRlZmlu
ZWQgbGlnYXR1cmVzIC0gYW5kIGludm9rZSBhIGNhbGxiYWNrIGZvciBlYWNoIGZvdW5kIGdseXBo
LgogdGVtcGxhdGU8dHlwZW5hbWUgU1ZHVGV4dFJ1bkRhdGE+CkBAIC0xMDAsMTkgKzEyNiwxOCBA
QCBzdHJ1Y3QgU1ZHVGV4dFJ1bldhbGtlciB7CiAgICAgICAgIGludCBjaGFyYWN0ZXJMb29rdXBS
YW5nZTsKICAgICAgICAgaW50IGVuZE9mU2NhblJhbmdlID0gdG8gKyBtX3dhbGtlckRhdGEuZXh0
cmFDaGFyc0F2YWlsYWJsZTsKIAorICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9
IHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0RnJvbVJ1bihydW4pOworICAgICAgICBSZW5kZXJPYmpl
Y3QqIHBhcmVudFJlbmRlck9iamVjdCA9IGZpcnN0UGFyZW50UmVuZGVyZXJGb3JOb25UZXh0Tm9k
ZShyZW5kZXJPYmplY3QpOworCiAgICAgICAgIGJvb2wgaGF2ZUFsdEdseXBoID0gZmFsc2U7CiAg
ICAgICAgIFNWR0dseXBoIGFsdEdseXBoSWRlbnRpZmllcjsKLSAgICAgICAgaWYgKFJlbmRlck9i
amVjdCogcmVuZGVyT2JqZWN0ID0gcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCkpIHsKLSAg
ICAgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSByZW5kZXJPYmplY3QtPnBh
cmVudCgpOwotICAgICAgICAgICAgQVNTRVJUKHBhcmVudFJlbmRlcmVyKTsKLSAgICAgICAgICAg
IGlmIChwYXJlbnRSZW5kZXJlci0+bm9kZSgpICYmIHBhcmVudFJlbmRlcmVyLT5ub2RlKCktPmhh
c1RhZ05hbWUoU1ZHTmFtZXM6OmFsdEdseXBoVGFnKSkgewotICAgICAgICAgICAgICAgIFNWR0ds
eXBoRWxlbWVudCogZ2x5cGhFbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZHQWx0R2x5cGhFbGVtZW50
Kj4ocGFyZW50UmVuZGVyZXItPm5vZGUoKSktPmdseXBoRWxlbWVudCgpOwotICAgICAgICAgICAg
ICAgIGlmIChnbHlwaEVsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaGF2ZUFsdEdseXBo
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYWx0R2x5cGhJZGVudGlmaWVyID0gZ2x5cGhF
bGVtZW50LT5idWlsZEdseXBoSWRlbnRpZmllcigpOwotICAgICAgICAgICAgICAgICAgICBhbHRH
bHlwaElkZW50aWZpZXIuaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGFsdEds
eXBoSWRlbnRpZmllci51bmljb2RlU3RyaW5nTGVuZ3RoID0gdG8gLSBmcm9tOwotICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgTm9kZSogbm9kZSA9IHBhcmVudFJlbmRlck9iamVjdC0+bm9kZSgp
OworICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShTVkdOYW1lczo6YWx0R2x5cGhUYWcpKSB7
CisgICAgICAgICAgICBpZiAoU1ZHR2x5cGhFbGVtZW50KiBnbHlwaEVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdBbHRHbHlwaEVsZW1lbnQqPihub2RlKS0+Z2x5cGhFbGVtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBoYXZlQWx0R2x5cGggPSB0cnVlOworICAgICAgICAgICAgICAgIGFsdEdseXBo
SWRlbnRpZmllciA9IGdseXBoRWxlbWVudC0+YnVpbGRHbHlwaElkZW50aWZpZXIoKTsKKyAgICAg
ICAgICAgICAgICBhbHRHbHlwaElkZW50aWZpZXIuaXNWYWxpZCA9IHRydWU7CisgICAgICAgICAg
ICAgICAgYWx0R2x5cGhJZGVudGlmaWVyLnVuaWNvZGVTdHJpbmdMZW5ndGggPSB0byAtIGZyb207
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtMTU3LDYgKzE4Miw3IEBAIHN0cnVjdCBT
VkdUZXh0UnVuV2Fsa2VyIHsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgICAgICAvLyBGYWxsYmFjayB0byBzeXN0ZW0gZm9udCBmYWxsYmFjawogICAgICAgICAgICAg
ICAgICAgICBUZXh0UnVuIHN1YlJ1bihydW4pOworICAgICAgICAgICAgICAgICAgICBzdWJSdW4u
c2V0UmVuZGVyaW5nQ29udGV4dCgwKTsKICAgICAgICAgICAgICAgICAgICAgc3ViUnVuLnNldFRl
eHQoc3ViUnVuLmRhdGEoaSksIDEpOwogCiAgICAgICAgICAgICAgICAgICAgICgqbV93YWxrZXJN
aXNzaW5nR2x5cGhDYWxsYmFjaykoc3ViUnVuLCBtX3dhbGtlckRhdGEpOwpAQCAtMjEwLDI0ICsy
MzYsMTIgQEAgc3RhdGljIHZvaWQgZmxvYXRXaWR0aE1pc3NpbmdHbHlwaENhbGxiYQogICAgIEZv
bnQgZm9udChmb250RGVzY3JpcHRpb24sIDAsIDApOyAvLyBzcGFjaW5nIGhhbmRsZWQgYnkgU1ZH
IHRleHQgY29kZS4KICAgICBmb250LnVwZGF0ZShkYXRhLmZvbnQtPmZvbnRTZWxlY3RvcigpKTsK
IAotICAgIGRhdGEubGVuZ3RoICs9IGZvbnQud2lkdGgocnVuKTsKLX0KLQotCi1TVkdGb250RWxl
bWVudCogRm9udDo6c3ZnRm9udCgpIGNvbnN0Ci17IAotICAgIGlmICghaXNTVkdGb250KCkpCi0g
ICAgICAgIHJldHVybiAwOwotCi0gICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50ID0gMDsK
LSAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7Ci0gICAgaWYgKHN2
Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShwcmltYXJ5Rm9udCgpLCBmb250RmFj
ZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZvbnRFbGVtZW50OwotICAg
IAotICAgIHJldHVybiAwOworICAgIFRleHRSdW4gZmFsbGJhY2tSdW4ocnVuKTsKKyAgICBmYWxs
YmFja1J1bi5zZXRSZW5kZXJpbmdDb250ZXh0KDApOworICAgIGRhdGEubGVuZ3RoICs9IGZvbnQu
d2lkdGgoZmFsbGJhY2tSdW4pOwogfQogCi1zdGF0aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3Ry
aW5nVXNpbmdTVkdGb250KGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgaW50
IGV4dHJhQ2hhcnNBdmFpbGFibGUsIGludCBmcm9tLCBpbnQgdG8sIGludCYgY2hhcnNDb25zdW1l
ZCwgU3RyaW5nJiBnbHlwaE5hbWUpCitzdGF0aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3RyaW5n
VXNpbmdTVkdGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGV4
dHJhQ2hhcnNBdmFpbGFibGUsIGludCBmcm9tLCBpbnQgdG8sIGludCYgY2hhcnNDb25zdW1lZCwg
U3RyaW5nJiBnbHlwaE5hbWUpCiB7CiAgICAgaW50IG5ld0Zyb20gPSB0byA+IGZyb20gPyBmcm9t
IDogdG87CiAgICAgaW50IG5ld1RvID0gdG8gPiBmcm9tID8gdG8gOiBmcm9tOwpAQCAtMjM4LDMz
ICsyNTIsMjYgQEAgc3RhdGljIGZsb2F0IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nUwogICAg
IFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7CiAgICAgU1ZHRm9udEZhY2VFbGVtZW50
KiBmb250RmFjZUVsZW1lbnQgPSAwOwogCi0gICAgaWYgKGNvbnN0IFNWR0ZvbnREYXRhKiBmb250
RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShmb250LT5wcmltYXJ5
Rm9udCgpLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkgeworICAgIGlmIChjb25zdCBT
VkdGb250RGF0YSogZm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERh
dGEoZm9udC5wcmltYXJ5Rm9udCgpLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkgewog
ICAgICAgICBpZiAoIWZvbnRFbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIDAuMGY7CiAKICAg
ICAgICAgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0YSBkYXRhOwogCi0gICAgICAg
IGRhdGEuZm9udCA9IGZvbnQ7CisgICAgICAgIGRhdGEuZm9udCA9ICZmb250OwogICAgICAgICBk
YXRhLmF0ID0gZnJvbTsKICAgICAgICAgZGF0YS5mcm9tID0gZnJvbTsKICAgICAgICAgZGF0YS50
byA9IHRvOwogICAgICAgICBkYXRhLmV4dHJhQ2hhcnNBdmFpbGFibGUgPSBleHRyYUNoYXJzQXZh
aWxhYmxlOwogICAgICAgICBkYXRhLmNoYXJzQ29uc3VtZWQgPSAwOwotICAgICAgICBkYXRhLnNj
YWxlID0gY29udmVydEVtVW5pdFRvUGl4ZWwoZm9udC0+c2l6ZSgpLCBmb250RmFjZUVsZW1lbnQt
PnVuaXRzUGVyRW0oKSwgMS4wZik7CisgICAgICAgIGRhdGEuc2NhbGUgPSBjb252ZXJ0RW1Vbml0
VG9QaXhlbChmb250LnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCksIDEuMGYp
OwogICAgICAgICBkYXRhLmxlbmd0aCA9IDAuMGY7CiAKLSAgICAgICAgU3RyaW5nIGxhbmd1YWdl
OwotICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gZmFsc2U7IC8vIEhvbGRzIHRydWUgZm9y
IEhUTUwgdGV4dAorICAgICAgICBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IHJlZmVyZW5j
aW5nUmVuZGVyT2JqZWN0RnJvbVJ1bihydW4pOworICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVu
dFJlbmRlck9iamVjdCA9IGZpcnN0UGFyZW50UmVuZGVyZXJGb3JOb25UZXh0Tm9kZShyZW5kZXJP
YmplY3QpOyAKIAotICAgICAgICAvLyBUT0RPOiBsYW5ndWFnZSBtYXRjaGluZyAmIHN2ZyBnbHlw
aHMgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciBIVE1MIHRleHQsIHRvby4KLSAgICAgICAgaWYgKFJl
bmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCkp
IHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSByZW5kZXJPYmpl
Y3QtPnBhcmVudCgpOwotICAgICAgICAgICAgQVNTRVJUKHBhcmVudFJlbmRlcmVyKTsKLSAgICAg
ICAgICAgIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHBhcmVudFJlbmRl
cmVyLT5zdHlsZSgpLT5zdmdTdHlsZSgpKTsKLQotICAgICAgICAgICAgaWYgKFNWR0VsZW1lbnQq
IGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGFyZW50UmVuZGVyZXItPm5vZGUo
KSkpCi0gICAgICAgICAgICAgICAgbGFuZ3VhZ2UgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoWE1M
TmFtZXM6OmxhbmdBdHRyKTsKLSAgICAgICAgfQorICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSB0
b0VsZW1lbnQocGFyZW50UmVuZGVyT2JqZWN0LT5ub2RlKCkpLT5nZXRBdHRyaWJ1dGUoWE1MTmFt
ZXM6OmxhbmdBdHRyKTsKKyAgICAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IGlzVmVydGljYWxX
cml0aW5nTW9kZShwYXJlbnRSZW5kZXJPYmplY3QtPnN0eWxlKCktPnN2Z1N0eWxlKCkpOwogCiAg
ICAgICAgIFNWR1RleHRSdW5XYWxrZXI8U1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0
YT4gcnVuV2Fsa2VyKGZvbnREYXRhLCBmb250RWxlbWVudCwgZGF0YSwgZmxvYXRXaWR0aFVzaW5n
U1ZHRm9udENhbGxiYWNrLCBmbG9hdFdpZHRoTWlzc2luZ0dseXBoQ2FsbGJhY2spOwogICAgICAg
ICBydW5XYWxrZXIud2FsayhydW4sIGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgZnJvbSwgdG8p
OwpAQCAtMjc2LDE2ICsyODMsMTYgQEAgc3RhdGljIGZsb2F0IGZsb2F0V2lkdGhPZlN1YlN0cmlu
Z1VzaW5nUwogICAgIHJldHVybiAwLjBmOwogfQogCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoVXNp
bmdTVkdGb250KGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKK2Zsb2F0IFRleHRSdW5SZW5kZXJp
bmdDb250ZXh0OjpmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0
IFRleHRSdW4mIHJ1bikgY29uc3QKIHsKICAgICBpbnQgY2hhcnNDb25zdW1lZDsKICAgICBTdHJp
bmcgZ2x5cGhOYW1lOwotICAgIHJldHVybiBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0Zv
bnQodGhpcywgcnVuLCAwLCAwLCBydW4ubGVuZ3RoKCksIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFt
ZSk7CisgICAgcmV0dXJuIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udChmb250LCBy
dW4sIDAsIDAsIHJ1bi5sZW5ndGgoKSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKIH0KIAot
ZmxvYXQgRm9udDo6ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiBydW4sIGlu
dCBleHRyYUNoYXJzQXZhaWxhYmxlLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhO
YW1lKSBjb25zdAorZmxvYXQgVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmZsb2F0V2lkdGhVc2lu
Z1NWR0ZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZXh0cmFD
aGFyc0F2YWlsYWJsZSwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29u
c3QKIHsKLSAgICByZXR1cm4gZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMs
IHJ1biwgZXh0cmFDaGFyc0F2YWlsYWJsZSwgMCwgcnVuLmxlbmd0aCgpLCBjaGFyc0NvbnN1bWVk
LCBnbHlwaE5hbWUpOworICAgIHJldHVybiBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0Zv
bnQoZm9udCwgcnVuLCBleHRyYUNoYXJzQXZhaWxhYmxlLCAwLCBydW4ubGVuZ3RoKCksIGNoYXJz
Q29uc3VtZWQsIGdseXBoTmFtZSk7CiB9CiAKIC8vIENhbGxiYWNrICYgZGF0YSBzdHJ1Y3R1cmVz
IHRvIGRyYXcgdGV4dCB1c2luZyBTVkcgRm9udHMKQEAgLTMxMCwyNiArMzE3LDI2IEBAIHN0YXRp
YyB2b2lkIGRyYXdUZXh0TWlzc2luZ0dseXBoQ2FsbGJhY2sKICAgICBkYXRhLmZhbGxiYWNrQ2hh
cmFjdGVycy5hcHBlbmQocnVuWzBdKTsKIH0KIAotdm9pZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZH
Rm9udChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1Rl
eHRVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYgZm9udCwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAogewogICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7CiAg
ICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwogCi0gICAgaWYgKGNv
bnN0IFNWR0ZvbnREYXRhKiBmb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JG
b250RGF0YShwcmltYXJ5Rm9udCgpLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkgewor
ICAgIGlmIChjb25zdCBTVkdGb250RGF0YSogZm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VF
bGVtZW50Rm9yRm9udERhdGEoZm9udC5wcmltYXJ5Rm9udCgpLCBmb250RmFjZUVsZW1lbnQsIGZv
bnRFbGVtZW50KSkgewogICAgICAgICBpZiAoIWZvbnRFbGVtZW50KQogICAgICAgICAgICAgcmV0
dXJuOwogCiAgICAgICAgIFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGEgZGF0YTsKICAgICAg
ICAgRmxvYXRQb2ludCBjdXJyZW50UG9pbnQgPSBwb2ludDsKLSAgICAgICAgZmxvYXQgc2NhbGUg
PSBjb252ZXJ0RW1Vbml0VG9QaXhlbChzaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJF
bSgpLCAxLjBmKTsKLQotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZSogYWN0aXZlUGFpbnRpbmdS
ZXNvdXJjZSA9IHJ1bi5hY3RpdmVQYWludGluZ1Jlc291cmNlKCk7Ci0KLSAgICAgICAgLy8gSWYg
cmVuZGVyT2JqZWN0IGlzIG5vdCBzZXQsIHdlJ3JlIGRlYWxpbmcgZm9yIEhUTUwgdGV4dCByZW5k
ZXJlZCB1c2luZyBTVkcgRm9udHMuCi0gICAgICAgIGlmICghcnVuLnJlZmVyZW5jaW5nUmVuZGVy
T2JqZWN0KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSk7
CisgICAgICAgIGZsb2F0IHNjYWxlID0gY29udmVydEVtVW5pdFRvUGl4ZWwoZm9udC5zaXplKCks
IGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBmKTsKIAorICAgICAgICAvLyBXZSBj
YW4gb25seSBwYWludCBTVkdGb250cyBpZiBhIGNvbnRleHQgaXMgYXZhaWxhYmxlLgorICAgICAg
ICBSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0RnJv
bVJ1bihydW4pOworICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlck9iamVjdCA9IGZp
cnN0UGFyZW50UmVuZGVyZXJGb3JOb25UZXh0Tm9kZShyZW5kZXJPYmplY3QpOworCisgICAgICAg
IC8vIElmIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UgaXMgbm90IHNldCwgd2UncmUgZGVhbGluZyBm
b3IgSFRNTCB0ZXh0IHJlbmRlcmVkIHVzaW5nIFNWRyBGb250cy4KKyAgICAgICAgUmVuZGVyU1ZH
UmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UgPSBhY3RpdmVQYWludGluZ1Jlc291cmNl
RnJvbVJ1bihydW4pOworICAgICAgICBpZiAoIWFjdGl2ZVBhaW50aW5nUmVzb3VyY2UpIHsKICAg
ICAgICAgICAgIC8vIFRPRE86IFdlJ3JlIG9ubHkgc3VwcG9ydGluZyBzaW1wbGUgZmlsbGVkIEhU
TUwgdGV4dCBzbyBmYXIuCiAgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iq
IHNvbGlkUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBh
aW50aW5nUmVzb3VyY2UoKTsKICAgICAgICAgICAgIHNvbGlkUGFpbnRpbmdSZXNvdXJjZS0+c2V0
Q29sb3IoY29udGV4dC0+ZmlsbENvbG9yKCkpOwpAQCAtMzM3LDI5ICszNDQsMTYgQEAgdm9pZCBG
b250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChHcmFwaGljcwogICAgICAgICAgICAgYWN0aXZlUGFp
bnRpbmdSZXNvdXJjZSA9IHNvbGlkUGFpbnRpbmdSZXNvdXJjZTsKICAgICAgICAgfQogCi0gICAg
ICAgIEFTU0VSVChhY3RpdmVQYWludGluZ1Jlc291cmNlKTsKLQogICAgICAgICBpbnQgY2hhcnND
b25zdW1lZDsKICAgICAgICAgU3RyaW5nIGdseXBoTmFtZTsKLSAgICAgICAgYm9vbCBpc1ZlcnRp
Y2FsVGV4dCA9IGZhbHNlOwotICAgICAgICBmbG9hdCB4U3RhcnRPZmZzZXQgPSBmbG9hdFdpZHRo
T2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQodGhpcywgcnVuLCAwLCBydW4ucnRsKCkgPyB0byA6IDAs
IHJ1bi5ydGwoKSA/IHJ1bi5sZW5ndGgoKSA6IGZyb20sIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFt
ZSk7CisgICAgICAgIGZsb2F0IHhTdGFydE9mZnNldCA9IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1Vz
aW5nU1ZHRm9udChmb250LCBydW4sIDAsIHJ1bi5ydGwoKSA/IHRvIDogMCwgcnVuLnJ0bCgpID8g
cnVuLmxlbmd0aCgpIDogZnJvbSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKICAgICAgICAg
RmxvYXRQb2ludCBnbHlwaE9yaWdpbjsKIAotICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7Ci0KLSAg
ICAgICAgLy8gVE9ETzogbGFuZ3VhZ2UgbWF0Y2hpbmcgJiBzdmcgZ2x5cGhzIHNob3VsZCBiZSBw
b3NzaWJsZSBmb3IgSFRNTCB0ZXh0LCB0b28uCi0gICAgICAgIFJlbmRlck9iamVjdCogcmVmZXJl
bmNpbmdSZW5kZXJPYmplY3QgPSBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKTsKLSAgICAg
ICAgUmVuZGVyT2JqZWN0KiByZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudCA9IHJlZmVyZW5j
aW5nUmVuZGVyT2JqZWN0ID8gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3QtPnBhcmVudCgpIDogMDsK
LSAgICAgICAgUmVuZGVyU3R5bGUqIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5bGUg
PSAwOwotICAgICAgICBpZiAocmVmZXJlbmNpbmdSZW5kZXJPYmplY3QpIHsKLSAgICAgICAgICAg
IEFTU0VSVChyZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudCk7Ci0gICAgICAgICAgICByZWZl
cmVuY2luZ1JlbmRlck9iamVjdFBhcmVudFN0eWxlID0gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQ
YXJlbnQtPnN0eWxlKCk7Ci0KLSAgICAgICAgICAgIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNh
bFdyaXRpbmdNb2RlKHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5bGUtPnN2Z1N0eWxl
KCkpOyAgICAKLSAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50LT5ub2RlKCkpKQot
ICAgICAgICAgICAgICAgIGxhbmd1YWdlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKFhNTE5hbWVz
OjpsYW5nQXR0cik7Ci0gICAgICAgIH0KKyAgICAgICAgTm9kZSogbm9kZSA9IHBhcmVudFJlbmRl
ck9iamVjdC0+bm9kZSgpOworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2UgPSB0b0VsZW1lbnQobm9k
ZSktPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOwogCisgICAgICAgIFJlbmRlclN0
eWxlKiBwYXJlbnRSZW5kZXJPYmplY3RTdHlsZSA9IHBhcmVudFJlbmRlck9iamVjdC0+c3R5bGUo
KTsKKyAgICAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShw
YXJlbnRSZW5kZXJPYmplY3RTdHlsZS0+c3ZnU3R5bGUoKSk7CiAgICAgICAgIGlmICghaXNWZXJ0
aWNhbFRleHQpIHsKICAgICAgICAgICAgIGdseXBoT3JpZ2luLnNldFgoZm9udERhdGEtPmhvcml6
b250YWxPcmlnaW5YKCkgKiBzY2FsZSk7CiAgICAgICAgICAgICBnbHlwaE9yaWdpbi5zZXRZKGZv
bnREYXRhLT5ob3Jpem9udGFsT3JpZ2luWSgpICogc2NhbGUpOwpAQCAtMzk0LDEyICszODgsMTIg
QEAgdm9pZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChHcmFwaGljcwogICAgICAgICAgICAg
ICAgICAgICBQYXRoIGdseXBoUGF0aCA9IGlkZW50aWZpZXIucGF0aERhdGE7CiAgICAgICAgICAg
ICAgICAgICAgIGdseXBoUGF0aC50cmFuc2Zvcm0oZ2x5cGhQYXRoVHJhbnNmb3JtKTsKIAotICAg
ICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJj
ZShyZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudCwgcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQ
YXJlbnRTdHlsZSwgY29udGV4dCwgcmVzb3VyY2VNb2RlKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJTVkdJ
bmxpbmVUZXh0KHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UocGFyZW50UmVuZGVyT2Jq
ZWN0LCBwYXJlbnRSZW5kZXJPYmplY3RTdHlsZSwgY29udGV4dCwgcmVzb3VyY2VNb2RlKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbmRlck9iamVjdCAmJiByZW5kZXJPYmplY3Qt
PmlzU1ZHSW5saW5lVGV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0
KHJlbmRlck9iamVjdCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0
U3Ryb2tlVGhpY2tuZXNzKGNvbnRleHQtPnN0cm9rZVRoaWNrbmVzcygpICogdGV4dFJlbmRlcmVy
LT5zY2FsaW5nRmFjdG9yKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2Uo
cmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnQsIGNvbnRleHQsIHJlc291cmNlTW9kZSwgJmds
eXBoUGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNl
LT5wb3N0QXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIGNvbnRleHQsIHJlc291cmNl
TW9kZSwgJmdseXBoUGF0aCk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAKQEAgLTQwOSwxMiArNDAzLDEzIEBAIHZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NWR0Zv
bnQoR3JhcGhpY3MKICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBvaW50Lm1vdmUoaWRlbnRp
Zmllci5ob3Jpem9udGFsQWR2YW5jZVggKiBzY2FsZSwgMC4wZik7CiAgICAgICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBzeXN0ZW0gZm9udCBmYWxsYmFjawotICAg
ICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24obV9mb250RGVzY3Jp
cHRpb24pOworICAgICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24o
Zm9udC5mb250RGVzY3JpcHRpb24oKSk7CiAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9u
LnNldEZhbWlseShGb250RmFtaWx5KCkpOwogICAgICAgICAgICAgICAgIEZvbnQgZm9udChmb250
RGVzY3JpcHRpb24sIDAsIDApOyAvLyBzcGFjaW5nIGhhbmRsZWQgYnkgU1ZHIHRleHQgY29kZS4K
LSAgICAgICAgICAgICAgICBmb250LnVwZGF0ZShmb250U2VsZWN0b3IoKSk7CisgICAgICAgICAg
ICAgICAgZm9udC51cGRhdGUoZm9udC5mb250U2VsZWN0b3IoKSk7CiAKICAgICAgICAgICAgICAg
ICBUZXh0UnVuIGZhbGxiYWNrQ2hhcmFjdGVyUnVuKHJ1bik7CisgICAgICAgICAgICAgICAgZmFs
bGJhY2tDaGFyYWN0ZXJSdW4uc2V0UmVuZGVyaW5nQ29udGV4dCgwKTsKICAgICAgICAgICAgICAg
ICBmYWxsYmFja0NoYXJhY3RlclJ1bi5zZXRUZXh0KCZkYXRhLmZhbGxiYWNrQ2hhcmFjdGVyc1ty
dW4ucnRsKCkgPyBkYXRhLmZhbGxiYWNrQ2hhcmFjdGVycy5zaXplKCkgLSBmYWxsYmFja0NoYXJh
Y3RlckluZGV4IC0gMSA6IGZhbGxiYWNrQ2hhcmFjdGVySW5kZXhdLCAxKTsKICAgICAgICAgICAg
ICAgICBmb250LmRyYXdUZXh0KGNvbnRleHQsIGZhbGxiYWNrQ2hhcmFjdGVyUnVuLCBjdXJyZW50
UG9pbnQpOwogCkBAIC00MjksMTYgKzQyNCwxNiBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdT
VkdGb250KEdyYXBoaWNzCiAgICAgfQogfQogCi1GbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVj
dEZvclRleHRVc2luZ1NWR0ZvbnQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK0Zsb2F0UmVjdCBU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6c2VsZWN0aW9uUmVjdEZvclRleHRVc2luZ1NWR0ZvbnQo
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBw
b2ludCwgaW50IGhlaWdodCwgaW50IGZyb20sIGludCB0bykgY29uc3QKIHsKICAgICBpbnQgY2hh
cnNDb25zdW1lZDsKICAgICBTdHJpbmcgZ2x5cGhOYW1lOwogCi0gICAgcmV0dXJuIEZsb2F0UmVj
dChwb2ludC54KCkgKyBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQodGhpcywgcnVu
LCAwLCBydW4ucnRsKCkgPyB0byA6IDAsIHJ1bi5ydGwoKSA/IHJ1bi5sZW5ndGgoKSA6IGZyb20s
IGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSksCi0gICAgICAgICAgICAgICAgICAgICBwb2ludC55
KCksIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIDAsIGZyb20s
IHRvLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpLCBoZWlnaHQpOworICAgIHJldHVybiBGbG9h
dFJlY3QocG9pbnQueCgpICsgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KGZvbnQs
IHJ1biwgMCwgcnVuLnJ0bCgpID8gdG8gOiAwLCBydW4ucnRsKCkgPyBydW4ubGVuZ3RoKCkgOiBm
cm9tLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpLAorICAgICAgICAgICAgICAgICAgICAgcG9p
bnQueSgpLCBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQoZm9udCwgcnVuLCAwLCBm
cm9tLCB0bywgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKSwgaGVpZ2h0KTsKIH0KIAotaW50IEZv
bnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiwg
ZmxvYXQsIGJvb2wpIGNvbnN0CitpbnQgVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6Om9mZnNldEZv
clBvc2l0aW9uRm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYs
IGZsb2F0LCBib29sKSBjb25zdAogewogICAgIC8vIFRPRE86IEZpeCB0ZXh0IHNlbGVjdGlvbiB3
aGVuIEhUTUwgdGV4dCBpcyBkcmF3biB1c2luZyBhIFNWRyBGb250CiAgICAgLy8gV2UgbmVlZCB0
byBpbnRlZ3JhdGUgdGhlIFNWRyB0ZXh0IHNlbGVjdGlvbiBjb2RlIGluIHRoZSBvZmZzZXRGb3JQ
b3NpdGlvbigpIGZyYW1ld29yay4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAJKHJldmlzaW9u
IDg2OTQyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQ1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IE5pa29s
YXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNl
YXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0KLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotI2luY2x1ZGUgIkZvbnQuaCIK
LQotI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0lubGlu
ZVRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKLSNpbmNs
dWRlICJTVkdBbHRHbHlwaEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGb250RGF0YS5oIgotI2lu
Y2x1ZGUgIlNWR0ZvbnRFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiU1ZHR2x5cGhFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHR2x5cGhNYXAuaCIK
LSNpbmNsdWRlICJTVkdNaXNzaW5nR2x5cGhFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMu
aCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNp
bmNsdWRlICJYTUxOYW1lcy5oIgotCi11c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydEVtVW5pdFRv
UGl4ZWwoZmxvYXQgZm9udFNpemUsIGZsb2F0IHVuaXRzUGVyRW0sIGZsb2F0IHZhbHVlKQotewot
ICAgIGlmICghdW5pdHNQZXJFbSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICByZXR1cm4g
dmFsdWUgKiBmb250U2l6ZSAvIHVuaXRzUGVyRW07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBp
c1ZlcnRpY2FsV3JpdGluZ01vZGUoY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAg
IHJldHVybiBzdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBXTV9UQlJMIHx8IHN0eWxlLT53cml0aW5n
TW9kZSgpID09IFdNX1RCOyAKLX0KLQotc3RhdGljIGlubGluZSBjb25zdCBTVkdGb250RGF0YSog
c3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRh
KiBmb250RGF0YSwgU1ZHRm9udEZhY2VFbGVtZW50KiYgZm9udEZhY2UsIFNWR0ZvbnRFbGVtZW50
KiYgZm9udCkKLXsKLSAgICBBU1NFUlQoZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsKLSAgICBB
U1NFUlQoZm9udERhdGEtPmlzU1ZHRm9udCgpKTsKLQotICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBz
dmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0ZvbnREYXRhKj4oZm9udERhdGEtPnN2
Z0ZvbnREYXRhKCkpOwotCi0gICAgZm9udEZhY2UgPSBzdmdGb250RGF0YS0+c3ZnRm9udEZhY2VF
bGVtZW50KCk7Ci0gICAgQVNTRVJUKGZvbnRGYWNlKTsKLQotICAgIGZvbnQgPSBmb250RmFjZS0+
YXNzb2NpYXRlZEZvbnRFbGVtZW50KCk7Ci0gICAgcmV0dXJuIHN2Z0ZvbnREYXRhOwotfQotCi0v
LyBIZWxwZXIgY2xhc3MgdG8gd2FsayBhIHRleHQgcnVuLiBMb29rdXAgYSBTVkdHbHlwaCBmb3Ig
ZWFjaCBjaGFyYWN0ZXIKLS8vIC0gYWxzbyByZXNwZWN0aW5nIHBvc3NpYmx5IGRlZmluZWQgbGln
YXR1cmVzIC0gYW5kIGludm9rZSBhIGNhbGxiYWNrIGZvciBlYWNoIGZvdW5kIGdseXBoLgotdGVt
cGxhdGU8dHlwZW5hbWUgU1ZHVGV4dFJ1bkRhdGE+Ci1zdHJ1Y3QgU1ZHVGV4dFJ1bldhbGtlciB7
Ci0gICAgdHlwZWRlZiBib29sICgqU1ZHVGV4dFJ1bldhbGtlckNhbGxiYWNrKShjb25zdCBTVkdH
bHlwaCYsIFNWR1RleHRSdW5EYXRhJik7Ci0gICAgdHlwZWRlZiB2b2lkICgqU1ZHVGV4dFJ1bldh
bGtlck1pc3NpbmdHbHlwaENhbGxiYWNrKShjb25zdCBUZXh0UnVuJiwgU1ZHVGV4dFJ1bkRhdGEm
KTsKLQotICAgIFNWR1RleHRSdW5XYWxrZXIoY29uc3QgU1ZHRm9udERhdGEqIGZvbnREYXRhLCBT
VkdGb250RWxlbWVudCogZm9udEVsZW1lbnQsIFNWR1RleHRSdW5EYXRhJiBkYXRhLAotICAgICAg
ICAgICAgICAgICAgICAgU1ZHVGV4dFJ1bldhbGtlckNhbGxiYWNrIGNhbGxiYWNrLCBTVkdUZXh0
UnVuV2Fsa2VyTWlzc2luZ0dseXBoQ2FsbGJhY2sgbWlzc2luZ0dseXBoQ2FsbGJhY2spCi0gICAg
ICAgIDogbV9mb250RGF0YShmb250RGF0YSkKLSAgICAgICAgLCBtX2ZvbnRFbGVtZW50KGZvbnRF
bGVtZW50KQotICAgICAgICAsIG1fd2Fsa2VyRGF0YShkYXRhKQotICAgICAgICAsIG1fd2Fsa2Vy
Q2FsbGJhY2soY2FsbGJhY2spCi0gICAgICAgICwgbV93YWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFj
ayhtaXNzaW5nR2x5cGhDYWxsYmFjaykKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCB3YWxrKGNv
bnN0IFRleHRSdW4mIHJ1biwgYm9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgU3RyaW5nJiBsYW5n
dWFnZSwgaW50IGZyb20sIGludCB0bykKLSAgICB7Ci0gICAgICAgIEFTU0VSVCgwIDw9IGZyb20g
JiYgZnJvbSA8PSB0byAmJiB0byAtIGZyb20gPD0gcnVuLmxlbmd0aCgpKTsKLQotICAgICAgICBj
b25zdCBTdHJpbmcgdGV4dCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uZGF0YShmcm9tKSwg
dG8gLSBmcm9tKTsKLSAgICAgICAgVmVjdG9yPFNWR0dseXBoOjpBcmFiaWNGb3JtPiBjaGFycyhj
aGFyYWN0ZXJzV2l0aEFyYWJpY0Zvcm0odGV4dCwgcnVuLnJ0bCgpKSk7Ci0KLSAgICAgICAgU1ZH
R2x5cGggaWRlbnRpZmllcjsKLSAgICAgICAgYm9vbCBmb3VuZEdseXBoID0gZmFsc2U7Ci0gICAg
ICAgIGludCBjaGFyYWN0ZXJMb29rdXBSYW5nZTsKLSAgICAgICAgaW50IGVuZE9mU2NhblJhbmdl
ID0gdG8gKyBtX3dhbGtlckRhdGEuZXh0cmFDaGFyc0F2YWlsYWJsZTsKLQotICAgICAgICBib29s
IGhhdmVBbHRHbHlwaCA9IGZhbHNlOwotICAgICAgICBTVkdHbHlwaCBhbHRHbHlwaElkZW50aWZp
ZXI7Ci0gICAgICAgIGlmIChSZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IHJ1bi5yZWZlcmVu
Y2luZ1JlbmRlck9iamVjdCgpKSB7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJl
bmRlcmVyID0gcmVuZGVyT2JqZWN0LT5wYXJlbnQoKTsKLSAgICAgICAgICAgIEFTU0VSVChwYXJl
bnRSZW5kZXJlcik7Ci0gICAgICAgICAgICBpZiAocGFyZW50UmVuZGVyZXItPm5vZGUoKSAmJiBw
YXJlbnRSZW5kZXJlci0+bm9kZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbHRHbHlwaFRhZykp
IHsKLSAgICAgICAgICAgICAgICBTVkdHbHlwaEVsZW1lbnQqIGdseXBoRWxlbWVudCA9IHN0YXRp
Y19jYXN0PFNWR0FsdEdseXBoRWxlbWVudCo+KHBhcmVudFJlbmRlcmVyLT5ub2RlKCkpLT5nbHlw
aEVsZW1lbnQoKTsKLSAgICAgICAgICAgICAgICBpZiAoZ2x5cGhFbGVtZW50KSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGhhdmVBbHRHbHlwaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGFs
dEdseXBoSWRlbnRpZmllciA9IGdseXBoRWxlbWVudC0+YnVpbGRHbHlwaElkZW50aWZpZXIoKTsK
LSAgICAgICAgICAgICAgICAgICAgYWx0R2x5cGhJZGVudGlmaWVyLmlzVmFsaWQgPSB0cnVlOwot
ICAgICAgICAgICAgICAgICAgICBhbHRHbHlwaElkZW50aWZpZXIudW5pY29kZVN0cmluZ0xlbmd0
aCA9IHRvIC0gZnJvbTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLQotICAgICAgICBmb3IgKGludCBpID0gZnJvbTsgaSA8IHRvOyArK2kpIHsKLSAgICAgICAg
ICAgIC8vIElmIGNoYXJhY3Rlckxvb2t1cFJhbmdlIGlzID4gMCwgdGhlbiB0aGUgZm9udCBkZWZp
bmVkIGxpZ2F0dXJlcyAobGVuZ3RoIG9mIHVuaWNvZGUgcHJvcGVydHkgdmFsdWUgPiAxKS4KLSAg
ICAgICAgICAgIC8vIFdlIGhhdmUgdG8gY2hlY2sgd2hldGVyIHRoZSBjdXJyZW50IGNoYXJhY3Rl
ciAmIHRoZSBuZXh0IGNoYXJhY3RlciBkZWZpbmUgYSBsaWdhdHVyZS4gVGhpcyBuZWVkcyB0byBi
ZQotICAgICAgICAgICAgLy8gZXh0ZW5kZWQgdG8gdGhlIG4tdGggbmV4dCBjaGFyYWN0ZXIgKHdo
ZXJlIG4gaXMgJ2NoYXJhY3Rlckxvb2t1cFJhbmdlJyksIHRvIGNoZWNrIGZvciBhbnkgcG9zc2li
bGUgbGlnYXR1cmUuCi0gICAgICAgICAgICBjaGFyYWN0ZXJMb29rdXBSYW5nZSA9IGVuZE9mU2Nh
blJhbmdlIC0gaTsKLQotICAgICAgICAgICAgU3RyaW5nIGxvb2t1cFN0cmluZyA9IEZvbnQ6Om5v
cm1hbGl6ZVNwYWNlcyhydW4uZGF0YShpKSwgY2hhcmFjdGVyTG9va3VwUmFuZ2UpOwotCi0gICAg
ICAgICAgICBWZWN0b3I8U1ZHR2x5cGg+IGdseXBoczsKLSAgICAgICAgICAgIGlmIChoYXZlQWx0
R2x5cGgpCi0gICAgICAgICAgICAgICAgZ2x5cGhzLmFwcGVuZChhbHRHbHlwaElkZW50aWZpZXIp
OwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1fZm9udEVsZW1lbnQtPmdldEds
eXBoSWRlbnRpZmllcnNGb3JTdHJpbmcobG9va3VwU3RyaW5nLCBnbHlwaHMpOwotCi0gICAgICAg
ICAgICBWZWN0b3I8U1ZHR2x5cGg+OjppdGVyYXRvciBpdCA9IGdseXBocy5iZWdpbigpOwotICAg
ICAgICAgICAgVmVjdG9yPFNWR0dseXBoPjo6aXRlcmF0b3IgZW5kID0gZ2x5cGhzLmVuZCgpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAg
ICAgICAgICAgICAgaWRlbnRpZmllciA9ICppdDsKLSAgICAgICAgICAgICAgICBpZiAoaWRlbnRp
Zmllci5pc1ZhbGlkICYmIGlzQ29tcGF0aWJsZUdseXBoKGlkZW50aWZpZXIsIGlzVmVydGljYWxU
ZXh0LCBsYW5ndWFnZSwgY2hhcnMsIGksIGkgKyBpZGVudGlmaWVyLnVuaWNvZGVTdHJpbmdMZW5n
dGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIEFTU0VSVChjaGFyYWN0ZXJMb29rdXBSYW5nZSA+
IDApOwotICAgICAgICAgICAgICAgICAgICBpICs9IGlkZW50aWZpZXIudW5pY29kZVN0cmluZ0xl
bmd0aCAtIDE7Ci0gICAgICAgICAgICAgICAgICAgIG1fd2Fsa2VyRGF0YS5jaGFyc0NvbnN1bWVk
ICs9IGlkZW50aWZpZXIudW5pY29kZVN0cmluZ0xlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAg
bV93YWxrZXJEYXRhLmdseXBoTmFtZSA9IGlkZW50aWZpZXIuZ2x5cGhOYW1lOwotCi0gICAgICAg
ICAgICAgICAgICAgIGZvdW5kR2x5cGggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBTVkdH
bHlwaEVsZW1lbnQ6OmluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoaWRlbnRpZmllciwgbV9m
b250RGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFmb3VuZEdseXBoKSB7Ci0gICAgICAg
ICAgICAgICAgKyttX3dhbGtlckRhdGEuY2hhcnNDb25zdW1lZDsKLSAgICAgICAgICAgICAgICBp
ZiAoU1ZHTWlzc2luZ0dseXBoRWxlbWVudCogZWxlbWVudCA9IG1fZm9udEVsZW1lbnQtPmZpcnN0
TWlzc2luZ0dseXBoRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIDxtaXNzaW5n
LWdseXBoPiBlbGVtZW50IHN1cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9
IFNWR0dseXBoRWxlbWVudDo6YnVpbGRHZW5lcmljR2x5cGhJZGVudGlmaWVyKGVsZW1lbnQpOwot
ICAgICAgICAgICAgICAgICAgICBTVkdHbHlwaEVsZW1lbnQ6OmluaGVyaXRVbnNwZWNpZmllZEF0
dHJpYnV0ZXMoaWRlbnRpZmllciwgbV9mb250RGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGlk
ZW50aWZpZXIuaXNWYWxpZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgdG8gc3lzdGVtIGZvbnQgZmFsbGJhY2sKLSAgICAg
ICAgICAgICAgICAgICAgVGV4dFJ1biBzdWJSdW4ocnVuKTsKLSAgICAgICAgICAgICAgICAgICAg
c3ViUnVuLnNldFRleHQoc3ViUnVuLmRhdGEoaSksIDEpOwotCi0gICAgICAgICAgICAgICAgICAg
ICgqbV93YWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjaykoc3ViUnVuLCBtX3dhbGtlckRhdGEpOwot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGlmICghKCptX3dhbGtlckNhbGxiYWNrKShpZGVudGlmaWVy
LCBtX3dhbGtlckRhdGEpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBm
b3VuZEdseXBoID0gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29u
c3QgU1ZHRm9udERhdGEqIG1fZm9udERhdGE7Ci0gICAgU1ZHRm9udEVsZW1lbnQqIG1fZm9udEVs
ZW1lbnQ7Ci0gICAgU1ZHVGV4dFJ1bkRhdGEmIG1fd2Fsa2VyRGF0YTsKLSAgICBTVkdUZXh0UnVu
V2Fsa2VyQ2FsbGJhY2sgbV93YWxrZXJDYWxsYmFjazsKLSAgICBTVkdUZXh0UnVuV2Fsa2VyTWlz
c2luZ0dseXBoQ2FsbGJhY2sgbV93YWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjazsKLX07Ci0KLS8v
IENhbGxiYWNrICYgZGF0YSBzdHJ1Y3R1cmVzIHRvIGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRleHQg
dXNpbmcgU1ZHIEZvbnRzCi1zdHJ1Y3QgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0
YSB7Ci0gICAgaW50IGF0OwotICAgIGludCBmcm9tOwotICAgIGludCB0bzsKLSAgICBpbnQgZXh0
cmFDaGFyc0F2YWlsYWJsZTsKLSAgICBpbnQgY2hhcnNDb25zdW1lZDsKLSAgICBTdHJpbmcgZ2x5
cGhOYW1lOwotCi0gICAgZmxvYXQgc2NhbGU7Ci0gICAgZmxvYXQgbGVuZ3RoOwotICAgIGNvbnN0
IEZvbnQqIGZvbnQ7Ci19OwotCi1zdGF0aWMgYm9vbCBmbG9hdFdpZHRoVXNpbmdTVkdGb250Q2Fs
bGJhY2soY29uc3QgU1ZHR2x5cGgmIGlkZW50aWZpZXIsIFNWR1RleHRSdW5XYWxrZXJNZWFzdXJl
ZExlbmd0aERhdGEmIGRhdGEpCi17Ci0gICAgaWYgKGRhdGEuYXQgPj0gZGF0YS5mcm9tICYmIGRh
dGEuYXQgPCBkYXRhLnRvKQotICAgICAgICBkYXRhLmxlbmd0aCArPSBpZGVudGlmaWVyLmhvcml6
b250YWxBZHZhbmNlWCAqIGRhdGEuc2NhbGU7Ci0KLSAgICBkYXRhLmF0Kys7Ci0gICAgcmV0dXJu
IGRhdGEuYXQgPCBkYXRhLnRvOwotfQotCi1zdGF0aWMgdm9pZCBmbG9hdFdpZHRoTWlzc2luZ0ds
eXBoQ2FsbGJhY2soY29uc3QgVGV4dFJ1biYgcnVuLCBTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRM
ZW5ndGhEYXRhJiBkYXRhKQotewotICAgIC8vIEhhbmRsZSBzeXN0ZW0gZm9udCBmYWxsYmFjawot
ICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24oZGF0YS5mb250LT5mb250RGVzY3Jp
cHRpb24oKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShGb250RmFtaWx5KCkpOwot
ICAgIEZvbnQgZm9udChmb250RGVzY3JpcHRpb24sIDAsIDApOyAvLyBzcGFjaW5nIGhhbmRsZWQg
YnkgU1ZHIHRleHQgY29kZS4KLSAgICBmb250LnVwZGF0ZShkYXRhLmZvbnQtPmZvbnRTZWxlY3Rv
cigpKTsKLQotICAgIGRhdGEubGVuZ3RoICs9IGZvbnQud2lkdGgocnVuKTsKLX0KLQotCi1TVkdG
b250RWxlbWVudCogRm9udDo6c3ZnRm9udCgpIGNvbnN0Ci17IAotICAgIGlmICghaXNTVkdGb250
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50
ID0gMDsKLSAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7Ci0gICAg
aWYgKHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShwcmltYXJ5Rm9udCgpLCBm
b250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZvbnRFbGVtZW50
OwotICAgIAotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3Vi
U3RyaW5nVXNpbmdTVkdGb250KGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
aW50IGV4dHJhQ2hhcnNBdmFpbGFibGUsIGludCBmcm9tLCBpbnQgdG8sIGludCYgY2hhcnNDb25z
dW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpCi17Ci0gICAgaW50IG5ld0Zyb20gPSB0byA+IGZyb20g
PyBmcm9tIDogdG87Ci0gICAgaW50IG5ld1RvID0gdG8gPiBmcm9tID8gdG8gOiBmcm9tOwotCi0g
ICAgZnJvbSA9IG5ld0Zyb207Ci0gICAgdG8gPSBuZXdUbzsKLQotICAgIFNWR0ZvbnRFbGVtZW50
KiBmb250RWxlbWVudCA9IDA7Ci0gICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1l
bnQgPSAwOwotCi0gICAgaWYgKGNvbnN0IFNWR0ZvbnREYXRhKiBmb250RGF0YSA9IHN2Z0ZvbnRB
bmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShmb250LT5wcmltYXJ5Rm9udCgpLCBmb250RmFj
ZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkgewotICAgICAgICBpZiAoIWZvbnRFbGVtZW50KQotICAg
ICAgICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICAgICAgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVk
TGVuZ3RoRGF0YSBkYXRhOwotCi0gICAgICAgIGRhdGEuZm9udCA9IGZvbnQ7Ci0gICAgICAgIGRh
dGEuYXQgPSBmcm9tOwotICAgICAgICBkYXRhLmZyb20gPSBmcm9tOwotICAgICAgICBkYXRhLnRv
ID0gdG87Ci0gICAgICAgIGRhdGEuZXh0cmFDaGFyc0F2YWlsYWJsZSA9IGV4dHJhQ2hhcnNBdmFp
bGFibGU7Ci0gICAgICAgIGRhdGEuY2hhcnNDb25zdW1lZCA9IDA7Ci0gICAgICAgIGRhdGEuc2Nh
bGUgPSBjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250LT5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+
dW5pdHNQZXJFbSgpLCAxLjBmKTsKLSAgICAgICAgZGF0YS5sZW5ndGggPSAwLjBmOwotCi0gICAg
ICAgIFN0cmluZyBsYW5ndWFnZTsKLSAgICAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IGZhbHNl
OyAvLyBIb2xkcyB0cnVlIGZvciBIVE1MIHRleHQKLQotICAgICAgICAvLyBUT0RPOiBsYW5ndWFn
ZSBtYXRjaGluZyAmIHN2ZyBnbHlwaHMgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciBIVE1MIHRleHQs
IHRvby4KLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gcnVuLnJlZmVy
ZW5jaW5nUmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50
UmVuZGVyZXIgPSByZW5kZXJPYmplY3QtPnBhcmVudCgpOwotICAgICAgICAgICAgQVNTRVJUKHBh
cmVudFJlbmRlcmVyKTsKLSAgICAgICAgICAgIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdy
aXRpbmdNb2RlKHBhcmVudFJlbmRlcmVyLT5zdHlsZSgpLT5zdmdTdHlsZSgpKTsKLQotICAgICAg
ICAgICAgaWYgKFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4o
cGFyZW50UmVuZGVyZXItPm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgbGFuZ3VhZ2UgPSBlbGVt
ZW50LT5nZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFNWR1RleHRSdW5XYWxrZXI8U1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0YT4g
cnVuV2Fsa2VyKGZvbnREYXRhLCBmb250RWxlbWVudCwgZGF0YSwgZmxvYXRXaWR0aFVzaW5nU1ZH
Rm9udENhbGxiYWNrLCBmbG9hdFdpZHRoTWlzc2luZ0dseXBoQ2FsbGJhY2spOwotICAgICAgICBy
dW5XYWxrZXIud2FsayhydW4sIGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgZnJvbSwgdG8pOwot
ICAgICAgICBjaGFyc0NvbnN1bWVkID0gZGF0YS5jaGFyc0NvbnN1bWVkOwotICAgICAgICBnbHlw
aE5hbWUgPSBkYXRhLmdseXBoTmFtZTsKLSAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoOwotICAg
IH0KLQotICAgIHJldHVybiAwLjBmOwotfQotCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoVXNpbmdT
VkdGb250KGNvbnN0IFRleHRSdW4mIHJ1bikgY29uc3QKLXsKLSAgICBpbnQgY2hhcnNDb25zdW1l
ZDsKLSAgICBTdHJpbmcgZ2x5cGhOYW1lOwotICAgIHJldHVybiBmbG9hdFdpZHRoT2ZTdWJTdHJp
bmdVc2luZ1NWR0ZvbnQodGhpcywgcnVuLCAwLCAwLCBydW4ubGVuZ3RoKCksIGNoYXJzQ29uc3Vt
ZWQsIGdseXBoTmFtZSk7Ci19Ci0KLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZSwgaW50JiBjaGFyc0Nv
bnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZmxvYXRXaWR0
aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgZXh0cmFDaGFyc0F2YWlsYWJsZSwg
MCwgcnVuLmxlbmd0aCgpLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOwotfQotCi0vLyBDYWxs
YmFjayAmIGRhdGEgc3RydWN0dXJlcyB0byBkcmF3IHRleHQgdXNpbmcgU1ZHIEZvbnRzCi1zdHJ1
Y3QgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSB7Ci0gICAgaW50IGV4dHJhQ2hhcnNBdmFp
bGFibGU7Ci0gICAgaW50IGNoYXJzQ29uc3VtZWQ7Ci0gICAgU3RyaW5nIGdseXBoTmFtZTsKLSAg
ICBWZWN0b3I8U1ZHR2x5cGg+IGdseXBoSWRlbnRpZmllcnM7Ci0gICAgVmVjdG9yPFVDaGFyPiBm
YWxsYmFja0NoYXJhY3RlcnM7Ci19OwotCi1zdGF0aWMgYm9vbCBkcmF3VGV4dFVzaW5nU1ZHRm9u
dENhbGxiYWNrKGNvbnN0IFNWR0dseXBoJiBpZGVudGlmaWVyLCBTVkdUZXh0UnVuV2Fsa2VyRHJh
d1RleHREYXRhJiBkYXRhKQotewotICAgIGRhdGEuZ2x5cGhJZGVudGlmaWVycy5hcHBlbmQoaWRl
bnRpZmllcik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdUZXh0TWlz
c2luZ0dseXBoQ2FsbGJhY2soY29uc3QgVGV4dFJ1biYgcnVuLCBTVkdUZXh0UnVuV2Fsa2VyRHJh
d1RleHREYXRhJiBkYXRhKQotewotICAgIEFTU0VSVChydW4ubGVuZ3RoKCkgPT0gMSk7Ci0gICAg
ZGF0YS5nbHlwaElkZW50aWZpZXJzLmFwcGVuZChTVkdHbHlwaCgpKTsKLSAgICBkYXRhLmZhbGxi
YWNrQ2hhcmFjdGVycy5hcHBlbmQocnVuWzBdKTsKLX0KLQotdm9pZCBGb250OjpkcmF3VGV4dFVz
aW5nU1ZHRm9udChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxl
bWVudCA9IDA7Ci0gICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwot
Ci0gICAgaWYgKGNvbnN0IFNWR0ZvbnREYXRhKiBmb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFj
ZUVsZW1lbnRGb3JGb250RGF0YShwcmltYXJ5Rm9udCgpLCBmb250RmFjZUVsZW1lbnQsIGZvbnRF
bGVtZW50KSkgewotICAgICAgICBpZiAoIWZvbnRFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERhdGEgZGF0YTsKLSAgICAgICAg
RmxvYXRQb2ludCBjdXJyZW50UG9pbnQgPSBwb2ludDsKLSAgICAgICAgZmxvYXQgc2NhbGUgPSBj
b252ZXJ0RW1Vbml0VG9QaXhlbChzaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgp
LCAxLjBmKTsKLQotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZSogYWN0aXZlUGFpbnRpbmdSZXNv
dXJjZSA9IHJ1bi5hY3RpdmVQYWludGluZ1Jlc291cmNlKCk7Ci0KLSAgICAgICAgLy8gSWYgcmVu
ZGVyT2JqZWN0IGlzIG5vdCBzZXQsIHdlJ3JlIGRlYWxpbmcgZm9yIEhUTUwgdGV4dCByZW5kZXJl
ZCB1c2luZyBTVkcgRm9udHMuCi0gICAgICAgIGlmICghcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2Jq
ZWN0KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSk7Ci0K
LSAgICAgICAgICAgIC8vIFRPRE86IFdlJ3JlIG9ubHkgc3VwcG9ydGluZyBzaW1wbGUgZmlsbGVk
IEhUTUwgdGV4dCBzbyBmYXIuCi0gICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29s
b3IqIHNvbGlkUGFpbnRpbmdSZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xp
ZFBhaW50aW5nUmVzb3VyY2UoKTsKLSAgICAgICAgICAgIHNvbGlkUGFpbnRpbmdSZXNvdXJjZS0+
c2V0Q29sb3IoY29udGV4dC0+ZmlsbENvbG9yKCkpOwotCi0gICAgICAgICAgICBhY3RpdmVQYWlu
dGluZ1Jlc291cmNlID0gc29saWRQYWludGluZ1Jlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAg
ICAgQVNTRVJUKGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UpOwotCi0gICAgICAgIGludCBjaGFyc0Nv
bnN1bWVkOwotICAgICAgICBTdHJpbmcgZ2x5cGhOYW1lOwotICAgICAgICBib29sIGlzVmVydGlj
YWxUZXh0ID0gZmFsc2U7Ci0gICAgICAgIGZsb2F0IHhTdGFydE9mZnNldCA9IGZsb2F0V2lkdGhP
ZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIDAsIHJ1bi5ydGwoKSA/IHRvIDogMCwg
cnVuLnJ0bCgpID8gcnVuLmxlbmd0aCgpIDogZnJvbSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1l
KTsKLSAgICAgICAgRmxvYXRQb2ludCBnbHlwaE9yaWdpbjsKLQotICAgICAgICBTdHJpbmcgbGFu
Z3VhZ2U7Ci0KLSAgICAgICAgLy8gVE9ETzogbGFuZ3VhZ2UgbWF0Y2hpbmcgJiBzdmcgZ2x5cGhz
IHNob3VsZCBiZSBwb3NzaWJsZSBmb3IgSFRNTCB0ZXh0LCB0b28uCi0gICAgICAgIFJlbmRlck9i
amVjdCogcmVmZXJlbmNpbmdSZW5kZXJPYmplY3QgPSBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmpl
Y3QoKTsKLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVu
dCA9IHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0ID8gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3QtPnBh
cmVudCgpIDogMDsKLSAgICAgICAgUmVuZGVyU3R5bGUqIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0
UGFyZW50U3R5bGUgPSAwOwotICAgICAgICBpZiAocmVmZXJlbmNpbmdSZW5kZXJPYmplY3QpIHsK
LSAgICAgICAgICAgIEFTU0VSVChyZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudCk7Ci0gICAg
ICAgICAgICByZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudFN0eWxlID0gcmVmZXJlbmNpbmdS
ZW5kZXJPYmplY3RQYXJlbnQtPnN0eWxlKCk7Ci0KLSAgICAgICAgICAgIGlzVmVydGljYWxUZXh0
ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5
bGUtPnN2Z1N0eWxlKCkpOyAgICAKLSAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50
LT5ub2RlKCkpKQotICAgICAgICAgICAgICAgIGxhbmd1YWdlID0gZWxlbWVudC0+Z2V0QXR0cmli
dXRlKFhNTE5hbWVzOjpsYW5nQXR0cik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlzVmVy
dGljYWxUZXh0KSB7Ci0gICAgICAgICAgICBnbHlwaE9yaWdpbi5zZXRYKGZvbnREYXRhLT5ob3Jp
em9udGFsT3JpZ2luWCgpICogc2NhbGUpOwotICAgICAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WShm
b250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblkoKSAqIHNjYWxlKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGRhdGEuZXh0cmFDaGFyc0F2YWlsYWJsZSA9IDA7Ci0gICAgICAgIGRhdGEuY2hhcnNDb25z
dW1lZCA9IDA7Ci0KLSAgICAgICAgU1ZHVGV4dFJ1bldhbGtlcjxTVkdUZXh0UnVuV2Fsa2VyRHJh
d1RleHREYXRhPiBydW5XYWxrZXIoZm9udERhdGEsIGZvbnRFbGVtZW50LCBkYXRhLCBkcmF3VGV4
dFVzaW5nU1ZHRm9udENhbGxiYWNrLCBkcmF3VGV4dE1pc3NpbmdHbHlwaENhbGxiYWNrKTsKLSAg
ICAgICAgcnVuV2Fsa2VyLndhbGsocnVuLCBpc1ZlcnRpY2FsVGV4dCwgbGFuZ3VhZ2UsIGZyb20s
IHRvKTsKLQotICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZU1vZGUgcmVzb3VyY2VNb2RlID0gY29u
dGV4dC0+dGV4dERyYXdpbmdNb2RlKCkgPT0gVGV4dE1vZGVTdHJva2UgPyBBcHBseVRvU3Ryb2tl
TW9kZSA6IEFwcGx5VG9GaWxsTW9kZTsKLQotICAgICAgICB1bnNpZ25lZCBudW1HbHlwaHMgPSBk
YXRhLmdseXBoSWRlbnRpZmllcnMuc2l6ZSgpOwotICAgICAgICB1bnNpZ25lZCBmYWxsYmFja0No
YXJhY3RlckluZGV4ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUds
eXBoczsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBTVkdHbHlwaCYgaWRlbnRpZmllciA9IGRh
dGEuZ2x5cGhJZGVudGlmaWVyc1tydW4ucnRsKCkgPyBudW1HbHlwaHMgLSBpIC0gMSA6IGldOwot
ICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNWYWxpZCkgewotICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBTdXBwb3J0IGFyYml0YXJ5IFNWRyBjb250ZW50IGFzIGdseXBoIChjdXJyZW50bHkg
bGltaXRlZCB0byA8Z2x5cGggZD0iLi4uIj4gc2l0dWF0aW9ucykuCi0gICAgICAgICAgICAgICAg
aWYgKCFpZGVudGlmaWVyLnBhdGhEYXRhLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwotCi0gICAg
ICAgICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgZ2x5cGhPcmlnaW4uc2V0WChpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCAqIHNjYWxl
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoT3JpZ2luLnNldFkoaWRlbnRpZmllci52
ZXJ0aWNhbE9yaWdpblkgKiBzY2FsZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAg
ICAgICAgICAgICAgICBBZmZpbmVUcmFuc2Zvcm0gZ2x5cGhQYXRoVHJhbnNmb3JtOwotICAgICAg
ICAgICAgICAgICAgICBnbHlwaFBhdGhUcmFuc2Zvcm0udHJhbnNsYXRlKHhTdGFydE9mZnNldCAr
IGN1cnJlbnRQb2ludC54KCkgKyBnbHlwaE9yaWdpbi54KCksIGN1cnJlbnRQb2ludC55KCkgKyBn
bHlwaE9yaWdpbi55KCkpOwotICAgICAgICAgICAgICAgICAgICBnbHlwaFBhdGhUcmFuc2Zvcm0u
c2NhbGUoc2NhbGUsIC1zY2FsZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgUGF0aCBnbHlwaFBh
dGggPSBpZGVudGlmaWVyLnBhdGhEYXRhOwotICAgICAgICAgICAgICAgICAgICBnbHlwaFBhdGgu
dHJhbnNmb3JtKGdseXBoUGF0aFRyYW5zZm9ybSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYg
KGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPmFwcGx5UmVzb3VyY2UocmVmZXJlbmNpbmdSZW5kZXJP
YmplY3RQYXJlbnQsIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5bGUsIGNvbnRleHQs
IHJlc291cmNlTW9kZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2lu
Z1JlbmRlck9iamVjdCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclNWR0lu
bGluZVRleHQqIHRleHRSZW5kZXJlciA9IHRvUmVuZGVyU1ZHSW5saW5lVGV4dChyZWZlcmVuY2lu
Z1JlbmRlck9iamVjdCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0
U3Ryb2tlVGhpY2tuZXNzKGNvbnRleHQtPnN0cm9rZVRoaWNrbmVzcygpICogdGV4dFJlbmRlcmVy
LT5zY2FsaW5nRmFjdG9yKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICAgICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2Uo
cmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnQsIGNvbnRleHQsIHJlc291cmNlTW9kZSwgJmds
eXBoUGF0aCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRQb2ludC5tb3ZlKDAuMGYsIGlkZW50aWZpZXIudmVydGljYWxBZHZhbmNlWSAqIHNjYWxl
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQb2lu
dC5tb3ZlKGlkZW50aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYICogc2NhbGUsIDAuMGYpOwotICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgc3lzdGVtIGZvbnQg
ZmFsbGJhY2sKLSAgICAgICAgICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9u
KG1fZm9udERlc2NyaXB0aW9uKTsKLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0
RmFtaWx5KEZvbnRGYW1pbHkoKSk7Ci0gICAgICAgICAgICAgICAgRm9udCBmb250KGZvbnREZXNj
cmlwdGlvbiwgMCwgMCk7IC8vIHNwYWNpbmcgaGFuZGxlZCBieSBTVkcgdGV4dCBjb2RlLgotICAg
ICAgICAgICAgICAgIGZvbnQudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKLQotICAgICAgICAgICAg
ICAgIFRleHRSdW4gZmFsbGJhY2tDaGFyYWN0ZXJSdW4ocnVuKTsKLSAgICAgICAgICAgICAgICBm
YWxsYmFja0NoYXJhY3RlclJ1bi5zZXRUZXh0KCZkYXRhLmZhbGxiYWNrQ2hhcmFjdGVyc1tydW4u
cnRsKCkgPyBkYXRhLmZhbGxiYWNrQ2hhcmFjdGVycy5zaXplKCkgLSBmYWxsYmFja0NoYXJhY3Rl
ckluZGV4IC0gMSA6IGZhbGxiYWNrQ2hhcmFjdGVySW5kZXhdLCAxKTsKLSAgICAgICAgICAgICAg
ICBmb250LmRyYXdUZXh0KGNvbnRleHQsIGZhbGxiYWNrQ2hhcmFjdGVyUnVuLCBjdXJyZW50UG9p
bnQpOwotCi0gICAgICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAg
ICAgICAgICBjdXJyZW50UG9pbnQubW92ZSgwLjBmLCBmb250LndpZHRoKGZhbGxiYWNrQ2hhcmFj
dGVyUnVuKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjdXJy
ZW50UG9pbnQubW92ZShmb250LndpZHRoKGZhbGxiYWNrQ2hhcmFjdGVyUnVuKSwgMC4wZik7Ci0K
LSAgICAgICAgICAgICAgICBmYWxsYmFja0NoYXJhY3RlckluZGV4Kys7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9y
VGV4dFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIGludCBjaGFy
c0NvbnN1bWVkOwotICAgIFN0cmluZyBnbHlwaE5hbWU7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0
KHBvaW50LngoKSArIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4s
IDAsIHJ1bi5ydGwoKSA/IHRvIDogMCwgcnVuLnJ0bCgpID8gcnVuLmxlbmd0aCgpIDogZnJvbSwg
Y2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgIHBvaW50Lnko
KSwgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgMCwgZnJvbSwg
dG8sIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSksIGhlaWdodCk7Ci19Ci0KLWludCBGb250Ojpv
ZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQoY29uc3QgVGV4dFJ1biYsIGZsb2F0
LCBib29sKSBjb25zdAotewotICAgIC8vIFRPRE86IEZpeCB0ZXh0IHNlbGVjdGlvbiB3aGVuIEhU
TUwgdGV4dCBpcyBkcmF3biB1c2luZyBhIFNWRyBGb250Ci0gICAgLy8gV2UgbmVlZCB0byBpbnRl
Z3JhdGUgdGhlIFNWRyB0ZXh0IHNlbGVjdGlvbiBjb2RlIGluIHRoZSBvZmZzZXRGb3JQb3NpdGlv
bigpIGZyYW1ld29yay4KLSAgICAvLyBUaGlzIHdpbGwgYWxzbyBmaXggYSBtYWpvciBpc3N1ZSwg
dGhhdCBTVkcgVGV4dCBjb2RlIGNhbid0IHNlbGVjdCBhcmFiaWMgc3RyaW5ncyBwcm9wZXJseS4K
LSAgICByZXR1cm4gMDsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnREYXRhLmNwcAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiw2ICsyMiw5IEBACiAjaWYgRU5BQkxFKFNW
R19GT05UUykKICNpbmNsdWRlICJTVkdGb250RGF0YS5oIgogCisjaW5jbHVkZSAiU1ZHR2x5cGgu
aCIKKyNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IFNWR0ZvbnREYXRhOjpTVkdGb250RGF0YShTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxl
bWVudCkKQEAgLTM2LDYgKzM5LDYxIEBAIFNWR0ZvbnREYXRhOjpTVkdGb250RGF0YShTVkdGb250
RmFjZUVsZW0KICAgICBBU1NFUlRfQVJHKGZvbnRGYWNlRWxlbWVudCwgZm9udEZhY2VFbGVtZW50
KTsKIH0KIAordm9pZCBTVkdGb250RGF0YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSwgaW50IHNpemUpCit7CisgICAgQVNTRVJUKGZvbnREYXRhKTsKKworICAg
IFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50ID0gdGhpcy0+c3ZnRm9udEZh
Y2VFbGVtZW50KCk7CisgICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IHN2Z0ZvbnRGYWNlRWxlbWVu
dC0+dW5pdHNQZXJFbSgpOworCisgICAgZmxvYXQgc2NhbGUgPSBzaXplOworICAgIGlmICh1bml0
c1BlckVtKQorICAgICAgICBzY2FsZSAvPSB1bml0c1BlckVtOworCisgICAgZmxvYXQgeEhlaWdo
dCA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+eEhlaWdodCgpICogc2NhbGU7CisgICAgZmxvYXQgYXNj
ZW50ID0gc3ZnRm9udEZhY2VFbGVtZW50LT5hc2NlbnQoKSAqIHNjYWxlOworICAgIGZsb2F0IGRl
c2NlbnQgPSBzdmdGb250RmFjZUVsZW1lbnQtPmRlc2NlbnQoKSAqIHNjYWxlOworICAgIGZsb2F0
IGxpbmVHYXAgPSAwLjFmICogc2l6ZTsKKworICAgIFNWR0ZvbnRFbGVtZW50KiBhc3NvY2lhdGVk
Rm9udEVsZW1lbnQgPSBzdmdGb250RmFjZUVsZW1lbnQtPmFzc29jaWF0ZWRGb250RWxlbWVudCgp
OworICAgIGlmICgheEhlaWdodCkgeworICAgICAgICAvLyBGYWxsYmFjayBpZiB4X2hlaWdodEF0
dHIgaXMgbm90IHNwZWNpZmllZCBmb3IgdGhlIGZvbnQgZWxlbWVudC4KKyAgICAgICAgVmVjdG9y
PFNWR0dseXBoPiBsZXR0ZXJYR2x5cGhzOworICAgICAgICBhc3NvY2lhdGVkRm9udEVsZW1lbnQt
PmdldEdseXBoSWRlbnRpZmllcnNGb3JTdHJpbmcoU3RyaW5nKCJ4IiwgMSksIGxldHRlclhHbHlw
aHMpOworICAgICAgICB4SGVpZ2h0ID0gbGV0dGVyWEdseXBocy5pc0VtcHR5KCkgPyAyICogYXNj
ZW50IC8gMyA6IGxldHRlclhHbHlwaHMuZmlyc3QoKS5ob3Jpem9udGFsQWR2YW5jZVggKiBzY2Fs
ZTsKKyAgICB9CisKKyAgICBGb250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBmb250RGF0YS0+Zm9u
dE1ldHJpY3MoKTsKKyAgICBmb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOwor
ICAgIGZvbnRNZXRyaWNzLnNldEFzY2VudChhc2NlbnQpOworICAgIGZvbnRNZXRyaWNzLnNldERl
c2NlbnQoZGVzY2VudCk7CisgICAgZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKKyAg
ICBmb250TWV0cmljcy5zZXRMaW5lU3BhY2luZyhyb3VuZGYoYXNjZW50KSArIHJvdW5kZihkZXNj
ZW50KSArIHJvdW5kZihsaW5lR2FwKSk7CisgICAgZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVp
Z2h0KTsKKworICAgIFZlY3RvcjxTVkdHbHlwaD4gc3BhY2VHbHlwaHM7CisgICAgYXNzb2NpYXRl
ZEZvbnRFbGVtZW50LT5nZXRHbHlwaElkZW50aWZpZXJzRm9yU3RyaW5nKFN0cmluZygiICIsIDEp
LCBzcGFjZUdseXBocyk7CisgICAgZm9udERhdGEtPnNldFNwYWNlV2lkdGgoc3BhY2VHbHlwaHMu
aXNFbXB0eSgpID8geEhlaWdodCA6IHNwYWNlR2x5cGhzLmZpcnN0KCkuaG9yaXpvbnRhbEFkdmFu
Y2VYICogc2NhbGUpOworCisgICAgVmVjdG9yPFNWR0dseXBoPiBudW1lcmFsWmVyb0dseXBoczsK
KyAgICBhc3NvY2lhdGVkRm9udEVsZW1lbnQtPmdldEdseXBoSWRlbnRpZmllcnNGb3JTdHJpbmco
U3RyaW5nKCIwIiwgMSksIG51bWVyYWxaZXJvR2x5cGhzKTsKKyAgICBmb250RGF0YS0+c2V0QXZn
Q2hhcldpZHRoKG51bWVyYWxaZXJvR2x5cGhzLmlzRW1wdHkoKSA/IGZvbnREYXRhLT5zcGFjZVdp
ZHRoKCkgOiBudW1lcmFsWmVyb0dseXBocy5maXJzdCgpLmhvcml6b250YWxBZHZhbmNlWCAqIHNj
YWxlKTsKKworICAgIFZlY3RvcjxTVkdHbHlwaD4gbGV0dGVyV0dseXBoczsKKyAgICBhc3NvY2lh
dGVkRm9udEVsZW1lbnQtPmdldEdseXBoSWRlbnRpZmllcnNGb3JTdHJpbmcoU3RyaW5nKCJXIiwg
MSksIGxldHRlcldHbHlwaHMpOworICAgIGZvbnREYXRhLT5zZXRNYXhDaGFyV2lkdGgobGV0dGVy
V0dseXBocy5pc0VtcHR5KCkgPyBhc2NlbnQgOiBsZXR0ZXJXR2x5cGhzLmZpcnN0KCkuaG9yaXpv
bnRhbEFkdmFuY2VYICogc2NhbGUpOworCisgICAgLy8gRklYTUU6IGlzIHRoZXJlIGEgd2F5IHdl
IGNhbiBnZXQgdGhlIHNwYWNlIGdseXBoIGZyb20gdGhlIFNWR0dseXBoIGFib3ZlPworICAgIGZv
bnREYXRhLT5zZXRTcGFjZUdseXBoKDApOworICAgIGZvbnREYXRhLT5zZXRaZXJvV2lkdGhTcGFj
ZUdseXBoKDApOworICAgIGZvbnREYXRhLT5kZXRlcm1pbmVQaXRjaCgpOworCisgICAgR2x5cGhE
YXRhIG1pc3NpbmdHbHlwaERhdGE7CisgICAgbWlzc2luZ0dseXBoRGF0YS5mb250RGF0YSA9IGZv
bnREYXRhOworICAgIG1pc3NpbmdHbHlwaERhdGEuZ2x5cGggPSAwOworICAgIGZvbnREYXRhLT5z
ZXRNaXNzaW5nR2x5cGhEYXRhKG1pc3NpbmdHbHlwaERhdGEpOworfQorCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgJKHJldmlz
aW9uIDg2OTQyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTIxLDE2ICsyMSwyMyBAQAogI2RlZmluZSBTVkdGb250RGF0YV9oCiAKICNpZiBF
TkFCTEUoU1ZHX0ZPTlRTKQorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAi
U1ZHRm9udEZhY2VFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU1ZH
Rm9udERhdGEgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNWR0ZvbnREYXRhKTsgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitjbGFzcyBTVkdGb250RGF0YSA6IHB1YmxpYyBTaW1wbGVGb250
RGF0YTo6QWJzdHJhY3RGb250RGF0YSB7CiBwdWJsaWM6Ci0gICAgU1ZHRm9udERhdGEoU1ZHRm9u
dEZhY2VFbGVtZW50Kik7CisgICAgc3RhdGljIFBhc3NPd25QdHI8U1ZHRm9udERhdGE+IGNyZWF0
ZShTVkdGb250RmFjZUVsZW1lbnQqIGVsZW1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gYWRv
cHRQdHIobmV3IFNWR0ZvbnREYXRhKGVsZW1lbnQpKTsKKyAgICB9CisKICAgICB2aXJ0dWFsIH5T
VkdGb250RGF0YSgpIHsgfQogCisgICAgdmlydHVhbCBib29sIGlzU1ZHRm9udERhdGEoKSBjb25z
dCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250RGF0YShT
aW1wbGVGb250RGF0YSosIGludCBzaXplKTsKKwogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3Zn
Rm9udEZhY2VFbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250RmFjZUVsZW1lbnQ7IH0K
IAogICAgIGZsb2F0IGhvcml6b250YWxPcmlnaW5YKCkgY29uc3QgeyByZXR1cm4gbV9ob3Jpem9u
dGFsT3JpZ2luWDsgfQpAQCAtNDIsNiArNDksOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgdmVydGlj
YWxBZHZhbmNlWSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxBZHZhbmNlWTsgfQogCiBwcml2
YXRlOgorICAgIFNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbWVudCopOworCiAgICAgLy8gVGhz
IFNWR0ZvbnRGYWNlRWxlbWVudCBpcyBrZXB0IGFsaXZlIC0tCiAgICAgLy8gMSkgaW4gdGhlIGV4
dGVybmFsIGZvbnQgY2FzZTogYnkgdGhlIENTU0ZvbnRGYWNlU291cmNlLCB3aGljaCBob2xkcyBh
IHJlZmVyZW5jZSB0byB0aGUgZXh0ZXJuYWwgU1ZHIGRvY3VtZW50CiAgICAgLy8gICAgY29udGFp
bmluZyB0aGUgZWxlbWVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdHbHlwaEVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNyArMzAsMTMgQEAKICNpbmNsdWRlICJTVkdG
b250RmFjZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR1Bh
dGhQYXJzZXJGYWN0b3J5LmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKLSNpbmNsdWRl
ICJYTUxOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBT
VkdOYW1lczsKLQogaW5saW5lIFNWR0dseXBoRWxlbWVudDo6U1ZHR2x5cGhFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKICAgICA6IFNWR1N0
eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJUKGhhc1RhZ05hbWUo
Z2x5cGhUYWcpKTsKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShTVkdOYW1lczo6Z2x5cGhUYWcpKTsK
IH0KIAogUGFzc1JlZlB0cjxTVkdHbHlwaEVsZW1lbnQ+IFNWR0dseXBoRWxlbWVudDo6Y3JlYXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1bWVudCkKQEAgLTE1
MCwyOCArMTQ2LDI4IEBAIHZvaWQgU1ZHR2x5cGhFbGVtZW50OjpmaWxsQXR0cmlidXRlVG9Qcm8K
IFNWR0dseXBoIFNWR0dseXBoRWxlbWVudDo6YnVpbGRHZW5lcmljR2x5cGhJZGVudGlmaWVyKGNv
bnN0IFNWR0VsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgU1ZHR2x5cGggaWRlbnRpZmllcjsKLSAg
ICBpZGVudGlmaWVyLnBhdGhEYXRhID0gcGFyc2VQYXRoRGF0YShlbGVtZW50LT5nZXRBdHRyaWJ1
dGUoZEF0dHIpKTsKKyAgICBpZGVudGlmaWVyLnBhdGhEYXRhID0gcGFyc2VQYXRoRGF0YShlbGVt
ZW50LT5nZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmRBdHRyKSk7CiAgCiAgICAgLy8gU3BlYzogVGhl
IGhvcml6b250YWwgYWR2YW5jZSBhZnRlciByZW5kZXJpbmcgdGhlIGdseXBoIGluIGhvcml6b250
YWwgb3JpZW50YXRpb24uCiAgICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVk
LCB0aGUgZWZmZWN0IGlzIGFzIGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBzZXQgdG8gdGhlCiAgICAg
Ly8gdmFsdWUgb2YgdGhlIGZvbnQncyBob3Jpei1hZHYteCBhdHRyaWJ1dGUuIEdseXBoIHdpZHRo
cyBhcmUgcmVxdWlyZWQgdG8gYmUgbm9uLW5lZ2F0aXZlLAogICAgIC8vIGV2ZW4gaWYgdGhlIGds
eXBoIGlzIHR5cGljYWxseSByZW5kZXJlZCByaWdodC10by1sZWZ0LCBhcyBpbiBIZWJyZXcgYW5k
IEFyYWJpYyBzY3JpcHRzLgotICAgIGlkZW50aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYID0gcGFy
c2VTVkdHbHlwaEF0dHJpYnV0ZShlbGVtZW50LCBob3Jpel9hZHZfeEF0dHIpOworICAgIGlkZW50
aWZpZXIuaG9yaXpvbnRhbEFkdmFuY2VYID0gcGFyc2VTVkdHbHlwaEF0dHJpYnV0ZShlbGVtZW50
LCBTVkdOYW1lczo6aG9yaXpfYWR2X3hBdHRyKTsKIAogICAgIC8vIFNwZWM6IFRoZSBYLWNvb3Jk
aW5hdGUgaW4gdGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIG9yaWdpbiBvZiB0aGUg
Z2x5cGggdG8gYmUKICAgICAvLyB1c2VkIHdoZW4gZHJhd2luZyB2ZXJ0aWNhbGx5IG9yaWVudGVk
IHRleHQuIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdAogICAg
IC8vIGlzIGFzIGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBzZXQgdG8gdGhlIHZhbHVlIG9mIHRoZSBm
b250J3MgdmVydC1vcmlnaW4teCBhdHRyaWJ1dGUuCi0gICAgaWRlbnRpZmllci52ZXJ0aWNhbE9y
aWdpblggPSBwYXJzZVNWR0dseXBoQXR0cmlidXRlKGVsZW1lbnQsIHZlcnRfb3JpZ2luX3hBdHRy
KTsKKyAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCA9IHBhcnNlU1ZHR2x5cGhBdHRyaWJ1
dGUoZWxlbWVudCwgU1ZHTmFtZXM6OnZlcnRfb3JpZ2luX3hBdHRyKTsKIAogICAgIC8vIFNwZWM6
IFRoZSBZLWNvb3JkaW5hdGUgaW4gdGhlIGZvbnQgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIG9y
aWdpbiBvZiBhIGdseXBoIHRvIGJlCiAgICAgLy8gdXNlZCB3aGVuIGRyYXdpbmcgdmVydGljYWxs
eSBvcmllbnRlZCB0ZXh0LiBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBl
ZmZlY3QKICAgICAvLyBpcyBhcyBpZiB0aGUgYXR0cmlidXRlIHdlcmUgc2V0IHRvIHRoZSB2YWx1
ZSBvZiB0aGUgZm9udCdzIHZlcnQtb3JpZ2luLXkgYXR0cmlidXRlLgotICAgIGlkZW50aWZpZXIu
dmVydGljYWxPcmlnaW5ZID0gcGFyc2VTVkdHbHlwaEF0dHJpYnV0ZShlbGVtZW50LCB2ZXJ0X29y
aWdpbl95QXR0cik7CisgICAgaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblkgPSBwYXJzZVNWR0ds
eXBoQXR0cmlidXRlKGVsZW1lbnQsIFNWR05hbWVzOjp2ZXJ0X29yaWdpbl95QXR0cik7CiAKICAg
ICAvLyBTcGVjOiBUaGUgdmVydGljYWwgYWR2YW5jZSBhZnRlciByZW5kZXJpbmcgYSBnbHlwaCBp
biB2ZXJ0aWNhbCBvcmllbnRhdGlvbi4KICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBz
cGVjaWZpZWQsIHRoZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0byB0
aGUKICAgICAvLyB2YWx1ZSBvZiB0aGUgZm9udCdzIHZlcnQtYWR2LXkgYXR0cmlidXRlLgotICAg
IGlkZW50aWZpZXIudmVydGljYWxBZHZhbmNlWSA9IHBhcnNlU1ZHR2x5cGhBdHRyaWJ1dGUoZWxl
bWVudCwgdmVydF9hZHZfeUF0dHIpOworICAgIGlkZW50aWZpZXIudmVydGljYWxBZHZhbmNlWSA9
IHBhcnNlU1ZHR2x5cGhBdHRyaWJ1dGUoZWxlbWVudCwgU1ZHTmFtZXM6OnZlcnRfYWR2X3lBdHRy
KTsKIAogICAgIHJldHVybiBpZGVudGlmaWVyOwogfQpAQCAtMTc5LDkgKzE3NSw5IEBAIFNWR0ds
eXBoIFNWR0dseXBoRWxlbWVudDo6YnVpbGRHZW5lcmljR2wKIFNWR0dseXBoIFNWR0dseXBoRWxl
bWVudDo6YnVpbGRHbHlwaElkZW50aWZpZXIoKSBjb25zdAogewogICAgIFNWR0dseXBoIGlkZW50
aWZpZXIoYnVpbGRHZW5lcmljR2x5cGhJZGVudGlmaWVyKHRoaXMpKTsKLSAgICBpZGVudGlmaWVy
LmdseXBoTmFtZSA9IGdldEF0dHJpYnV0ZShnbHlwaF9uYW1lQXR0cik7Ci0gICAgaWRlbnRpZmll
ci5vcmllbnRhdGlvbiA9IHBhcnNlT3JpZW50YXRpb24oZ2V0QXR0cmlidXRlKG9yaWVudGF0aW9u
QXR0cikpOwotICAgIGlkZW50aWZpZXIuYXJhYmljRm9ybSA9IHBhcnNlQXJhYmljRm9ybShnZXRB
dHRyaWJ1dGUoYXJhYmljX2Zvcm1BdHRyKSk7CisgICAgaWRlbnRpZmllci5nbHlwaE5hbWUgPSBn
ZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmdseXBoX25hbWVBdHRyKTsKKyAgICBpZGVudGlmaWVyLm9y
aWVudGF0aW9uID0gcGFyc2VPcmllbnRhdGlvbihnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6Om9yaWVu
dGF0aW9uQXR0cikpOworICAgIGlkZW50aWZpZXIuYXJhYmljRm9ybSA9IHBhcnNlQXJhYmljRm9y
bShnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmFyYWJpY19mb3JtQXR0cikpOwogCiAgICAgU3RyaW5n
IGxhbmd1YWdlID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpsYW5nQXR0cik7CiAgICAgaWYgKCFs
YW5ndWFnZS5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVtZW50
LmNwcAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSEtlcm5FbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsMjEgKzI0LDE2IEBACiAjaWYgRU5BQkxFKFNW
R19GT05UUykKICNpbmNsdWRlICJTVkdIS2VybkVsZW1lbnQuaCIKIAotI2luY2x1ZGUgIlNWR0Zv
bnREYXRhLmgiCiAjaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdGb250
RmFjZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCi0jaW5jbHVkZSAiWE1MTmFtZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci11c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7Ci0KIGlubGluZSBTVkdIS2VybkVsZW1lbnQ6OlNW
R0hLZXJuRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
dW1lbnQpCiAgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQogewotICAgIEFTU0VS
VChoYXNUYWdOYW1lKGhrZXJuVGFnKSk7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUoU1ZHTmFtZXM6
OmhrZXJuVGFnKSk7CiB9CiAKIFBhc3NSZWZQdHI8U1ZHSEtlcm5FbGVtZW50PiBTVkdIS2VybkVs
ZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
dW1lbnQpCkBAIC02OCwxMCArNjMsMTAgQEAgdm9pZCBTVkdIS2VybkVsZW1lbnQ6OnJlbW92ZWRG
cm9tRG9jdW1lbgogCiB2b2lkIFNWR0hLZXJuRWxlbWVudDo6YnVpbGRIb3Jpem9udGFsS2Vybmlu
Z1BhaXIoS2VybmluZ1BhaXJWZWN0b3ImIGtlcm5pbmdQYWlycykKIHsKLSAgICBTdHJpbmcgdTEg
PSBnZXRBdHRyaWJ1dGUodTFBdHRyKTsKLSAgICBTdHJpbmcgZzEgPSBnZXRBdHRyaWJ1dGUoZzFB
dHRyKTsKLSAgICBTdHJpbmcgdTIgPSBnZXRBdHRyaWJ1dGUodTJBdHRyKTsKLSAgICBTdHJpbmcg
ZzIgPSBnZXRBdHRyaWJ1dGUoZzJBdHRyKTsKKyAgICBTdHJpbmcgdTEgPSBnZXRBdHRyaWJ1dGUo
U1ZHTmFtZXM6OnUxQXR0cik7CisgICAgU3RyaW5nIGcxID0gZ2V0QXR0cmlidXRlKFNWR05hbWVz
OjpnMUF0dHIpOworICAgIFN0cmluZyB1MiA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6dTJBdHRy
KTsKKyAgICBTdHJpbmcgZzIgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmcyQXR0cik7CiAgICAg
aWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNFbXB0eSgpKSB8fCAodTIuaXNFbXB0eSgpICYmIGcy
LmlzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtODAsNyArNzUsNyBAQCB2b2lkIFNW
R0hLZXJuRWxlbWVudDo6YnVpbGRIb3Jpem9udGFsS2VyCiAgICAgICAgICYmIHBhcnNlR2x5cGhO
YW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQogICAgICAgICAmJiBwYXJzZUtlcm5pbmdV
bmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxLCBrZXJuaW5nUGFpci51
bmljb2RlTmFtZTEpCiAgICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcodTIsIGtl
cm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMikpIHsKLSAg
ICAgICAga2VybmluZ1BhaXIua2VybmluZyA9IGdldEF0dHJpYnV0ZShrQXR0cikuc3RyaW5nKCku
dG9GbG9hdCgpOworICAgICAgICBrZXJuaW5nUGFpci5rZXJuaW5nID0gZ2V0QXR0cmlidXRlKFNW
R05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgpOwogICAgICAgICBrZXJuaW5nUGFpcnMu
YXBwZW5kKGtlcm5pbmdQYWlyKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVktlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Vktlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHVktlcm5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsMjEgKzIyLDE2IEBACiAj
aWYgRU5BQkxFKFNWR19GT05UUykKICNpbmNsdWRlICJTVkdWS2VybkVsZW1lbnQuaCIKIAotI2lu
Y2x1ZGUgIlNWR0ZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKICNpbmNs
dWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAiWE1MTmFtZXMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7Ci0KIGlubGluZSBTVkdWS2Vy
bkVsZW1lbnQ6OlNWR1ZLZXJuRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBTVkdFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KQog
ewotICAgIEFTU0VSVChoYXNUYWdOYW1lKHZrZXJuVGFnKSk7CisgICAgQVNTRVJUKGhhc1RhZ05h
bWUoU1ZHTmFtZXM6OnZrZXJuVGFnKSk7CiB9CiAKIFBhc3NSZWZQdHI8U1ZHVktlcm5FbGVtZW50
PiBTVkdWS2VybkVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQpCkBAIC02NiwxMCArNjEsMTAgQEAgdm9pZCBTVkdWS2VybkVsZW1l
bnQ6OnJlbW92ZWRGcm9tRG9jdW1lbgogCiB2b2lkIFNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0
aWNhbEtlcm5pbmdQYWlyKEtlcm5pbmdQYWlyVmVjdG9yJiBrZXJuaW5nUGFpcnMpCiB7Ci0gICAg
U3RyaW5nIHUxID0gZ2V0QXR0cmlidXRlKHUxQXR0cik7Ci0gICAgU3RyaW5nIGcxID0gZ2V0QXR0
cmlidXRlKGcxQXR0cik7Ci0gICAgU3RyaW5nIHUyID0gZ2V0QXR0cmlidXRlKHUyQXR0cik7Ci0g
ICAgU3RyaW5nIGcyID0gZ2V0QXR0cmlidXRlKGcyQXR0cik7CisgICAgU3RyaW5nIHUxID0gZ2V0
QXR0cmlidXRlKFNWR05hbWVzOjp1MUF0dHIpOworICAgIFN0cmluZyBnMSA9IGdldEF0dHJpYnV0
ZShTVkdOYW1lczo6ZzFBdHRyKTsKKyAgICBTdHJpbmcgdTIgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFt
ZXM6OnUyQXR0cik7CisgICAgU3RyaW5nIGcyID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpnMkF0
dHIpOwogICAgIGlmICgodTEuaXNFbXB0eSgpICYmIGcxLmlzRW1wdHkoKSkgfHwgKHUyLmlzRW1w
dHkoKSAmJiBnMi5pc0VtcHR5KCkpKQogICAgICAgICByZXR1cm47CiAKQEAgLTc4LDcgKzczLDcg
QEAgdm9pZCBTVkdWS2VybkVsZW1lbnQ6OmJ1aWxkVmVydGljYWxLZXJuaQogICAgICAgICAmJiBw
YXJzZUdseXBoTmFtZShnMiwga2VybmluZ1BhaXIuZ2x5cGhOYW1lMikKICAgICAgICAgJiYgcGFy
c2VLZXJuaW5nVW5pY29kZVN0cmluZyh1MSwga2VybmluZ1BhaXIudW5pY29kZVJhbmdlMSwga2Vy
bmluZ1BhaXIudW5pY29kZU5hbWUxKQogICAgICAgICAmJiBwYXJzZUtlcm5pbmdVbmljb2RlU3Ry
aW5nKHUyLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UyLCBrZXJuaW5nUGFpci51bmljb2RlTmFt
ZTIpKSB7Ci0gICAgICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBnZXRBdHRyaWJ1dGUoa0F0dHIp
LnN0cmluZygpLnRvRmxvYXQoKTsKKyAgICAgICAga2VybmluZ1BhaXIua2VybmluZyA9IGdldEF0
dHJpYnV0ZShTVkdOYW1lczo6a0F0dHIpLnN0cmluZygpLnRvRmxvYXQoKTsKICAgICAgICAga2Vy
bmluZ1BhaXJzLmFwcGVuZChrZXJuaW5nUGFpcik7CiAgICAgfQogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdWS2VybkVsZW1lbnQuaAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVktlcm5FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDYgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTVkdGb250RGF0YTsKLQogY2xhc3MgU1ZH
Vktlcm5FbGVtZW50IDogcHVibGljIFNWR0VsZW1lbnQgewogcHVibGljOgogICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFNWR1ZLZXJuRWxlbWVudD4gY3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOwo=
</data>
<flag name="commit-queue"
          id="87495"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94223</attachid>
            <date>2011-05-20 08:18:58 -0700</date>
            <delta_ts>2011-05-24 06:14:26 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>AbstractionLayer-v3.diff</filename>
            <type>text/plain</type>
            <size>159097</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2OTU0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTY2IEBACisyMDExLTA1LTIwICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBwbGF0Zm9ybSBsYXllcmluZyB2aW9s
YXRpb246IFRleHRSdW4gc3RvcmVzIFJlbmRlck9iamVjdHMgZm9yIFNWRyBGb250cyBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDI1NAor
CisgICAgICAgIEZpcnN0IHBhcnQ6CisgICAgICAgIFJlbW92ZSBhIGxvbmctc3RhbmRpbmcgbGF5
ZXJpbmcgdmlvbGF0aW9uIGluIFRleHRSdW46IGl0IHN0b3JlcyBSZW5kZXJPYmplY3QvUmVuZGVy
U1ZHUmVzb3VyY2UgcG9pbnRlcnMgZm9yIFNWRyBGb250cyBzdXBwb3J0LgorICAgICAgICBSZXBs
YWNlIHRoZSB0d28gUmVuZGVyKiBwb2ludGVycyB3aXRoIGEgc2luZ2xlIFJlZlB0cjxBYnN0cmFj
dFJlbmRlcmluZ0NvbnRleHQ+LiBBYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQgaXMgYSBoZWxwZXIg
Y2xhc3MsCisgICAgICAgIHRoYXQgY2FuIGJlIGRlcml2ZWQgZnJvbSBpbiBvcmRlciB0byBhc3Nv
Y2lhdGUgYWRkaXRpb25hbCBkYXRhIHdpdGggYSBUZXh0UnVuLiBUaGlzIGVmZmVjdGl2ZWx5IHJl
ZHVjZXMgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBUZXh0UnVuLgorCisgICAgICAgIEludHJv
ZHVjZSByZW5kZXJpbmcvVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCwgd2hpY2ggaW5oZXJpdHMg
ZnJvbSBUZXh0UnVuOjpBYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQgYW5kIGhvbGRzIGFkZGl0aW9u
YWwgZGF0YS4KKyAgICAgICAgSWYgdGhlIHByaW1hcnkgZm9udCBpbiB1c2UgaXMgYSBTVkcgRm9u
dCB0aGVuIGFsbG9jYXRlIGEgVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQgb2JqZWN0IGFuZCBzdG9y
ZSBpdCBpbiB0aGUgUmVmUHRyPEFic3RyYWN0UmVuZGVyaW5nQ29udGV4dD4KKyAgICAgICAgaW4g
VGV4dFJ1bi4gSWYgdGhlIHByaW1hcnkgZm9udCBpcyBub3QgYSBTVkcgRm9udCwgZG9uJ3QgZXZl
biBhbGxvY2F0ZSB0aGUgVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQgc3RydWN0dXJlLCBhcyB3ZSB3
b24ndCBuZWVkIHRoZSBjb250ZXh0IGRhdGEuCisgICAgICAgIFNWRyBGb250cyBnbHlwaCBtYXRj
aGluZyBvbmx5IHdvcmtzIHdpdGhpbiBhIGNvbnRleHQsIHNvIHdlIG5lZWQgYWNjZXNzIHRvIHRo
ZSBSZW5kZXJPYmplY3QgdGhhdCdzIGRyYXdpbmcgdGhlIHRleHQuCisKKyAgICAgICAgVGhpcyBp
cyB0aGUgbWFpbiBwcmVwYXJhdGlvbiBwYXRjaCBmb3IgdGhlIFNWRyBGb250cyByZXdyaXRlLCB0
aGF0IHdpbGwgYWxsb3cgdXMgdG8gc2hhcmUgdGhlIHNpbXBsZSB0ZXh0IGNvZGUgcGF0aCBmb3Ig
U1ZHIEZvbnRzIGFzIHdlbGwsCisgICAgICAgIG1ha2luZyBhbGwgQ1NTIHRleHQgcHJvcGVydGll
cyB3b3JrIGZvciBIVE1MIHRleHQgdXNpbmcgU1ZHIEZvbnRzLCBhbmQgYWxsb3dzIHByb3BlciBp
bnRlZ3JhdGlvbiB3aXRoaW4gdGhlIEdseXBoUGFnZSBjb25jZXB0LiBTb29uCisgICAgICAgIHdl
IGNhbiBpbnRlcm1peCBXT0ZGL1NWRyAmIG5hdGl2ZSBmb250cywgd2l0aGluIHNlZ21lbnQgZm9u
dCBkZWNsYXJhdGlvbnMuCisKKyAgICAgICAgU2Vjb25kIHBhcnQ6CisgICAgICAgIFJlbW92ZSBh
IGxvbmctc3RhbmRpbmcgbGF5ZXJpbmcgdmlvbGF0aW9uIGluIFNpbXBsZUZvbnREYXRhOiBpdCBz
dG9yZXMgU1ZHRm9udERhdGEgb2JqZWN0cywgdGhhdCBhcmUgbGl2aW5nIGluIHN2Zy8uCisgICAg
ICAgIFVzZSB0aGUgc2FtZSBjb25jZXB0IGFzIGFib3ZlLCBpbnRyb2R1Y2UgU2ltcGxlRm9udERh
dGE6OkFic3RyYWN0Rm9udERhdGEsIGFuZCBsZXQgU1ZHRm9udERhdGEgaW5oZXJpdCBmcm9tIEFi
c3RyYWN0Rm9udERhdGEgYW5kIGV4dGVudCBpdC4KKyAgICAgICAgSWYgU1ZHIEZvbnRzIGFyZSB1
c2VkLCBDU1NGb250RmFjZVNvdXJjZSB3aWxsIGNyZWF0ZSBhIFNWR0ZvbnREYXRhIG9iamVjdCBh
bmQgcGFzcyBpdCBhcyBQYXNzT3duUHRyPEFic3RyYWN0Rm9udERhdGE+IHRvIFNpbXBsZUZvbnRE
YXRhLgorCisgICAgICAgIEFsbCBsYXllcmluZyB2aW9sYXRpb25zIGFyZSBnb25lIG5vdywgU1ZH
IEZvbnRzIGFyZSBjbGVhbmx5IGludGVncmF0ZWQgbm93LgorICAgICAgICBEb2Vzbid0IGFmZmVj
dCBhbnkgdGVzdHMgeWV0LCByZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd1RleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
c2VsZWN0aW9uUmVjdEZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9y
UG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6On5TaW1wbGVGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpB
YnN0cmFjdEZvbnREYXRhOjp+QWJzdHJhY3RGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVGb250RGF0YTo6Zm9udE1ldHJpY3MpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9u
dERhdGE6OnNldE1heENoYXJXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6c2V0QXZnQ2hhcldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpz
ZXRTcGFjZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzZXRTcGFj
ZUdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzZXRaZXJvV2lkdGhT
cGFjZUdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpmb250RGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6aXNTVkdGb250KToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzZXRNaXNzaW5nR2x5cGhEYXRhKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVu
OjpUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OnNldEFsbG93VGFicyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpzZXRYUG9zKToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRSdW46OkFic3RyYWN0UmVuZGVyaW5nQ29udGV4dDo6fkFic3RyYWN0UmVuZGVyaW5nQ29udGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpyZW5kZXJpbmdDb250ZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRSdW46OnNldFJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAqIHJl
bmRlcmluZy9FbGxpcHNpc0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGxpcHNpc0JveDo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnNlbGVjdGlvblJlY3QpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKToKKyAgICAgICAg
KiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94OjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6
OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNr
Z3JvdW5kKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50U3BlbGxpbmdP
ckdyYW1tYXJNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRU
ZXh0TWF0Y2hNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y29tcHV0
ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0
Qm94OjpvZmZzZXRGb3JQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94
Ojpwb3NpdGlvbkZvck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpj
b25zdHJ1Y3RUZXh0UnVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpz
dHJpcFRyYWlsaW5nU3BhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4pOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0TG9naWNhbFdpZHRoRm9yVGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0V2lk
dGgpOgorICAgICAgICAoV2ViQ29yZTo6dHJ5SHlwaGVuYXRpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQmxvY2s6OkxpbmVCcmVha2VyOjpuZXh0TGluZUJyZWFrKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpjaGVja0xpbmVzRm9yVGV4dE92ZXJmbG93KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9h
ZENvbnRyb2w6OnBhaW50T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpbGVVcGxv
YWRDb250cm9sOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZs
ZXhpYmxlQm94OjphcHBseUxpbmVDbGFtcCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklt
YWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpzZXRJbWFnZVNpemVGb3JB
bHRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxpc3RNYXJrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtl
cjo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtl
cjo6Z2V0UmVsYXRpdmVNYXJrZXJSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp3aWR0aEZyb21DYWNoZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRocyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp3aWR0aCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250
cm9sOjpnZXRBdmdDaGFyV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9UZXh0UnVuUmVuZGVy
aW5nQ29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW5SZW5kZXJpbmdD
b250ZXh0OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1blJlbmRlcmluZ0NvbnRl
eHQ6OmlzV2ViQ29yZVJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQ6OmNvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1blJl
bmRlcmluZ0NvbnRleHQ6OmFjdGl2ZVBhaW50aW5nUmVzb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OnNldEFjdGl2ZVBhaW50aW5nUmVzb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OlRleHRSdW5SZW5kZXJp
bmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnRleHRSdW5OZWVkc1JlbmRlcmluZ0NvbnRl
eHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwOgorICAg
ICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbkluRnJhZ21lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cHJlcGFyZUdyYXBoaWNzQ29udGV4dEZv
clRleHRQYWludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpyZXN0
b3JlR3JhcGhpY3NDb250ZXh0QWZ0ZXJUZXh0UGFpbnRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpT
VkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZH
VGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dExh
eW91dEVuZ2luZVNwYWNpbmc6OmNhbGN1bGF0ZVNWR0tlcm5pbmcpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29uc3RydWN0
VGV4dFJ1bik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TWV0cmljczo6bWVhc3VyZUNoYXJh
Y3RlclJhbmdlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0LmNwcDogQ29waWVkIGZyb20gc3ZnL1NWR0ZvbnQuY3BwLgorICAgICAgICAoV2ViQ29y
ZTo6c3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpcnN0UGFyZW50UmVuZGVyZXJGb3JOb25UZXh0Tm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpyZWZlcmVuY2luZ1JlbmRlck9iamVjdEZyb21SdW4pOgorICAgICAgICAoV2ViQ29yZTo6YWN0
aXZlUGFpbnRpbmdSZXNvdXJjZUZyb21SdW4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFJ1
bldhbGtlcjo6d2Fsayk6CisgICAgICAgIChXZWJDb3JlOjpmbG9hdFdpZHRoT2ZTdWJTdHJpbmdV
c2luZ1NWR0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6
OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlRl
eHRSdW5SZW5kZXJpbmdDb250ZXh0OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6b2Zmc2V0Rm9yUG9z
aXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KToKKyAgICAgICAgKiBzdmcvU1ZHQWxsSW5PbmUuY3Bw
OgorICAgICAgICAqIHN2Zy9TVkdGb250LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvU1ZH
Rm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OmluaXRpYWxpemVG
b250RGF0YSk6CisgICAgICAgICogc3ZnL1NWR0ZvbnREYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGb250RGF0YTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjpp
c1NWR0ZvbnREYXRhKToKKyAgICAgICAgKiBzdmcvU1ZHR2x5cGhFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0dseXBoRWxlbWVudDo6U1ZHR2x5cGhFbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0dseXBoRWxlbWVudDo6YnVpbGRHZW5lcmljR2x5cGhJZGVudGlmaWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0dseXBoRWxlbWVudDo6YnVpbGRHbHlwaElkZW50aWZpZXIp
OgorICAgICAgICAqIHN2Zy9TVkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHSEtlcm5FbGVtZW50OjpTVkdIS2VybkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
SEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5nUGFpcik6CisgICAgICAgICogc3Zn
L1NWR1ZLZXJuRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWS2VybkVsZW1lbnQ6
OlNWR1ZLZXJuRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdWS2VybkVsZW1lbnQ6OmJ1
aWxkVmVydGljYWxLZXJuaW5nUGFpcik6CisgICAgICAgICogc3ZnL1NWR1ZLZXJuRWxlbWVudC5o
OgorCiAyMDExLTA1LTIwICBUb25pcyBUaWlnaSAgPHRvbmlzdGlpZ2lAZ21haWwuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IFBhdmVsIEZlbGRtYW4uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9D
TWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMTYxNCw2ICsxNjE0LDcgQEAgSUYgKEVOQUJMRV9TVkcpCiAgICAgICAg
IHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2luZS5jcHAKICAgICAgICAgcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3BwCiAgICAgICAgIHJlbmRlcmluZy9z
dmcvU1ZHVGV4dExheW91dEVuZ2luZVNwYWNpbmcuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcv
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZH
VGV4dE1ldHJpY3MuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAog
ICAgICAgICBzdmcvQ29sb3JEaXN0YW5jZS5jcHAKQEAgLTE2NjgsNyArMTY2OSw2IEBAIElGIChF
TkFCTEVfU1ZHKQogICAgICAgICBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKICAgICAgICAgc3Zn
L1NWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKICAgICAgICAgc3ZnL1NW
R0ZpdFRvVmlld0JveC5jcHAKLSAgICAgICAgc3ZnL1NWR0ZvbnQuY3BwCiAgICAgICAgIHN2Zy9T
VkdGb250RGF0YS5jcHAKICAgICAgICAgc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAogICAgICAgICBz
dmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0
LmFtCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0JKHdvcmtpbmcgY29weSkKQEAgLTMwNzcsMTEgKzMwNzcsMTMgQEAgd2ViY29yZV9zb3VyY2Vz
ICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdpbmVC
YXNlbGluZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRF
bmdpbmVTcGFjaW5nLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TGF5b3V0RW5naW5lU3BhY2luZy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
U1ZHVGV4dE1ldHJpY3MuaCBcCiAJU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
UXVlcnkuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVGFibGVMYXlvdXQuaCBcCisJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmggXAogCVNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9UcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmggXApAQCAtMzM3OCw3ICszMzgwLDYgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRh
cmRBdHRyaWJ1dGVzLmggXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmggXAotCVNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdGb250LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmggXAogCVNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RWxlbWVudC5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5n
eXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24g
ODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAg
LTUzMjcsNiArNTMyNyw3IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL1NoYWRvd0VsZW1lbnQu
Y3BwJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvU2hhZG93RWxlbWVudC5oJywKICAgICAgICAg
ICAgICdyZW5kZXJpbmcvVGFibGVMYXlvdXQuaCcsCisgICAgICAgICAgICAncmVuZGVyaW5nL1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0LmgnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9UcmFpbGlu
Z0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1RyYW5zZm9y
bVN0YXRlLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL1RyYW5zZm9ybVN0YXRlLmgnLApA
QCAtNTQ3Niw2ICs1NDc3LDcgQEAKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRM
YXlvdXRFbmdpbmVCYXNlbGluZS5oJywKICAgICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oJywKKyAgICAgICAgICAgICdyZW5kZXJpbmcvc3Zn
L1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcCcsCiAgICAgICAgICAgICAncmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAnLAogICAgICAgICAgICAgJ3JlbmRlcmluZy9zdmcvU1ZH
VGV4dE1ldHJpY3MuaCcsCiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnku
Y3BwJywKQEAgLTU3MzEsNyArNTczMyw2IEBACiAgICAgICAgICAgICAnc3ZnL1NWR0ZpbHRlclBy
aW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5oJywKICAgICAgICAgICAgICdzdmcvU1ZHRml0VG9W
aWV3Qm94LmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR0ZpdFRvVmlld0JveC5oJywKLSAgICAg
ICAgICAgICdzdmcvU1ZHRm9udC5jcHAnLAogICAgICAgICAgICAgJ3N2Zy9TVkdGb250RGF0YS5j
cHAnLAogICAgICAgICAgICAgJ3N2Zy9TVkdGb250RGF0YS5oJywKICAgICAgICAgICAgICdzdmcv
U1ZHRm9udEVsZW1lbnQuY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiA4Njk0MikK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yMjUxLDYg
KzIyNTEsNyBAQCBIRUFERVJTICs9IFwKICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRF
bmdpbmVTcGFjaW5nLmggXAogICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuaCBcCiAg
ICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaCBcCisgICAgcmVuZGVyaW5nL1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0LmggXAogICAgIHJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0ZS5oIFwKICAg
ICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmggXAogICAgIHN2Zy9hbmltYXRpb24v
U01JTFRpbWUuaCBcCkBAIC0zMjAzLDYgKzMyMDQsNyBAQCBjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfU1ZHPTEpIHsKICAgICAgICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5n
aW5lLmNwcCBcCiAgICAgICAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91dEVuZ2lu
ZUJhc2VsaW5lLmNwcCBcCiAgICAgICAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEVuZ2luZVNwYWNpbmcuY3BwIFwKKyAgICAgICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAgXAogICAgICAgICAgICAgICByZW5kZXJpbmcvc3ZnL1NW
R1RleHRNZXRyaWNzLmNwcCBcCiAgICAgICAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1
ZXJ5LmNwcCBcCiAgICAgICAgICAgICAgIHN2Zy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwIFwK
QEAgLTMyNTgsNyArMzI2MCw2IEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkc9MSkgewog
ICAgICAgICAgICAgICBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAgXAogICAgICAgICAgICAgICBz
dmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCBcCiAgICAgICAgICAg
ICAgIHN2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwIFwKLSAgICAgICAgICAgICAgc3ZnL1NWR0ZvbnQu
Y3BwIFwKICAgICAgICAgICAgICAgc3ZnL1NWR0ZvbnREYXRhLmNwcCBcCiAgICAgICAgICAgICAg
IHN2Zy9TVkdGb250RWxlbWVudC5jcHAgXAogICAgICAgICAgICAgICBzdmcvU1ZHRm9udEZhY2VF
bGVtZW50LmNwcCBcCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJD
b3JlLnZjcHJvagkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtMzg4MDAsNiArMzg4MDAsMTAg
QEAKIAkJCQk+CiAJCQk8L0ZpbGU+CiAJCQk8RmlsZQorCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVu
ZGVyaW5nXFRleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgiCisJCQkJPgorCQkJPC9GaWxlPgorCQkJ
PEZpbGUKIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xUcmFpbGluZ0Zsb2F0c1Jvb3RJ
bmxpbmVCb3guaCIKIAkJCQk+CiAJCQk8L0ZpbGU+CkBAIC00MTE4Nyw2ICs0MTE5MSw1OCBAQAog
CQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgogCQkJCTwvRmlsZT4KIAkJCQk8RmlsZQorCQkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHJlbmRlcmluZ1xzdmdcU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQu
Y3BwIgorCQkJCQk+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWd8
V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxU
b29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmls
ZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUmVs
ZWFzZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJ
CQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1l
PSJEZWJ1Z19DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1
ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIK
KwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJh
dGlvbgorCQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQlFeGNs
dWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29sCisJCQkJCQkJTmFtZT0i
VkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJ
CQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iRGVidWdfQWxsfFdpbjMyIgorCQkJ
CQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQk+CisJCQkJCQk8VG9vbAorCQkJCQkJ
CU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkvPgorCQkJCQk8L0ZpbGVDb25maWd1cmF0
aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQkJCU5hbWU9IlByb2R1Y3Rpb258V2lu
MzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29s
CisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQkJPC9GaWxlPgorCQkJCTxGaWxlCiAJCQkJCVJlbGF0aXZlUGF0aD0i
Li5ccmVuZGVyaW5nXHN2Z1xTVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5oIgogCQkJCQk+CiAJ
CQkJPC9GaWxlPgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw2ICsx
MzMsNyBAQAogCQkwOEE0OEE2RTBFODZDRjZEMDBFMjI1REQgLyogSlNTVkdFbGVtZW50SW5zdGFu
Y2VDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDhBNDhBNkQwRTg2Q0Y2RDAwRTIyNUREIC8qIEpTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9t
LmNwcCAqLzsgfTsKIAkJMDhCMzVCMTMxMjdCNkE3QzAwNTMxNEREIC8qIFNWR0FuaW1hdGVkTnVt
YmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEIz
NUIxMjEyN0I2QTdDMDA1MzE0REQgLyogU1ZHQW5pbWF0ZWROdW1iZXIuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwOEIzNUIxNzEyN0I2QTg4MDA1
MzE0REQgLyogU1ZHQW5pbWF0ZWROdW1iZXJMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwOEIzNUIxNjEyN0I2QTg4MDA1MzE0REQgLyogU1ZHQW5p
bWF0ZWROdW1iZXJMaXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMDhCRjVBRTMxMzg1NzU0MTAwRUVCNDA0IC8qIFRleHRSdW5SZW5kZXJpbmdD
b250ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
OEJGNUFFMjEzODU3NTQxMDBFRUI0MDQgLyogVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwOEM3MTM2RTEy
ODk1NkEzMDAxQjEwN0UgLyogU1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDhDNzEzNkQxMjg5NTZB
MzAwMUIxMDdFIC8qIFNWR1RyYW5zZm9ybUxpc3RQcm9wZXJ0eVRlYXJPZmYuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwOEM3QTJDNzEwREM3NDYy
MDAyRDM2OEIgLyogU1ZHTmFtZXMuaCBpbiBDb3B5IEdlbmVyYXRlZCBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NjU4MUU5MDlEMTUwOEQwMDBFNjFENyAvKiBT
VkdOYW1lcy5oICovOyB9OwogCQkwOEM4NTlDMDEyNzQ1NzU0MDBBNTcyOEQgLyogU1ZHQW5pbWF0
ZWRSZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
OEM4NTlCRjEyNzQ1NzUzMDBBNTcyOEQgLyogU1ZHQW5pbWF0ZWRSZWN0LmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQzNjEsNyArNDM2Miw2IEBA
CiAJCUIyNTU5OUEzMEQwMEQ4QkEwMEJCODI1QyAvKiBTVkdJbWFnZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTkwQjBEMDBEOEI5MDBCQjgy
NUMgLyogU1ZHSW1hZ2UuY3BwICovOyB9OwogCQlCMjU1OTlBNDBEMDBEOEJBMDBCQjgyNUMgLyog
U1ZHSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEIyNTU5OTBDMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdJbWFnZS5oICovOyB9OwogCQlCMjU1OTlB
NTBEMDBEOEJBMDBCQjgyNUMgLyogRW1wdHlDbGllbnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMjU1OTkwRDBEMDBEOEI5MDBCQjgyNUMgLyogRW1w
dHlDbGllbnRzLmggKi87IH07Ci0JCUIyNjJCODA0MEQxRjMyRDAwMDE1OEYwOSAvKiBTVkdGb250
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNjJC
ODAzMEQxRjMyRDAwMDE1OEYwOSAvKiBTVkdGb250LmNwcCAqLzsgfTsKIAkJQjI2NkNENEQwQzNB
RUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNjZDRDRCMEMzQUVDNjUwMEVCMDhEMiAvKiBKU1NW
R0V4Y2VwdGlvbi5jcHAgKi87IH07CiAJCUIyNjZDRDRFMEMzQUVDNjUwMEVCMDhEMiAvKiBKU1NW
R0V4Y2VwdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQjI2NkNENEMwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmggKi87IH07CiAJ
CUIyNzUzNTU4MEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNzUzNTJBMEIw
NTM4MTQwMDJDRTY0RiAvKiBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAqLzsgfTsKQEAgLTY1
MTksMTEgKzY1MTksMTMgQEAKIAkJMDhBNDhBNkQwRTg2Q0Y2RDAwRTIyNUREIC8qIEpTU1ZHRWxl
bWVudEluc3RhbmNlQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTU1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMDhCMzVCMTIxMjdCNkE3QzAwNTMxNEREIC8qIFNWR0FuaW1hdGVkTnVtYmVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0FuaW1hdGVkTnVtYmVyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4QjM1QjE2MTI3QjZBODgwMDUzMTRERCAvKiBT
VkdBbmltYXRlZE51bWJlckxpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHQW5pbWF0ZWROdW1iZXJMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA4
QkY1QUUyMTM4NTc1NDEwMEVFQjQwNCAvKiBUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEM3MTM2RDEyODk1NkEzMDAxQjEwN0UgLyog
U1ZHVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTVkdUcmFuc2Zvcm1MaXN0UHJvcGVydHlUZWFyT2ZmLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA4Qzg1OUJGMTI3NDU3NTMwMEE1NzI4RCAvKiBTVkdBbmltYXRl
ZFJlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRSZWN0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4QzkyNTE3MEZDQzdDNEEwMDQ4MERF
QyAvKiBGaWx0ZXJFZmZlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRmlsdGVyRWZmZWN0LmNwcDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVyRWZmZWN0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhDOTI1MTgwRkNDN0M0QTAwNDgwREVDIC8qIEZp
bHRlckVmZmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGaWx0ZXJFZmZl
Y3QuaDsgcGF0aCA9IGZpbHRlcnMvRmlsdGVyRWZmZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTA4Q0EzRDQzMTI4OTRBMzgwMEZGRjI2MCAvKiBTVkdTdGF0aWNQcm9wZXJ0eVdp
dGhQYXJlbnRUZWFyT2ZmLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1N0
YXRpY1Byb3BlcnR5V2l0aFBhcmVudFRlYXJPZmYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMDhEMjk0NDAxMzg2NjlFNDAwOTdDODlCIC8qIFNWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhENDZD
RTIxMjdBRDVGQzAwODk2OTRCIC8qIFNWR0FuaW1hdGVkRW51bWVyYXRpb24uaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5pbWF0ZWRFbnVtZXJhdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwOEU0RkU0NTBFMkJENDE0MDBGNENBRTAgLyogSlNTVkdM
ZW5ndGhDdXN0b20uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNT
VkdMZW5ndGhDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEVERTE5
RTEyQTUwQjhFMDBCOTU3OTcgLyogU1ZHUmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTVkdSZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDc3Niw3
ICsxMDc3OCw2IEBACiAJCUIyNTU5OTBCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdJbWFnZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHSW1hZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjU1OTkwQzBEMDBEOEI5MDBCQjgyNUMgLyogU1ZH
SW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ltYWdlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNTU5OTBEMEQwMEQ4QjkwMEJCODI1QyAvKiBF
bXB0eUNsaWVudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVtcHR5Q2xp
ZW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlCMjYyQjgwMzBEMUYzMkQwMDAx
NThGMDkgLyogU1ZHRm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU1ZHRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNjZDRDRCMEMz
QUVDNjUwMEVCMDhEMiAvKiBKU1NWR0V4Y2VwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gSlNTVkdFeGNlcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlCMjY2Q0Q0QzBDM0FFQzY1MDBFQjA4RDIgLyogSlNTVkdFeGNlcHRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1ZHRXhjZXB0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNzUzNTJBMEIwNTM4MTQwMDJDRTY0RiAvKiBUcmFu
c2Zvcm1hdGlvbk1hdHJpeENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTEyNzUyLDYgKzEyNzUzLDcgQEAKIAkJCQkwOEYwQkZDMTEyNTVDNTNDMDAwNzUxODUg
LyogU1ZHVGV4dE1ldHJpY3MuaCAqLywKIAkJCQkwODU0QjAxMjEyNTVFNEU2MDBCOUNERDAgLyog
U1ZHVGV4dFF1ZXJ5LmNwcCAqLywKIAkJCQkwODU0QjAxMzEyNTVFNEU2MDBCOUNERDAgLyogU1ZH
VGV4dFF1ZXJ5LmggKi8sCisJCQkJMDhEMjk0NDAxMzg2NjlFNDAwOTdDODlCIC8qIFNWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0LmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gc3ZnOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTE3MjcyLDcgKzE3Mjc0LDYgQEAKIAkJCQlCMjIyNzg3
QjBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHRml0VG9WaWV3Qm94LmNwcCAqLywKIAkJCQlCMjIyNzg3
QzBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHRml0VG9WaWV3Qm94LmggKi8sCiAJCQkJQjIyMjc4N0Qw
RDAwQkYyMDAwNzFCNzgyIC8qIFNWR0ZpdFRvVmlld0JveC5pZGwgKi8sCi0JCQkJQjI2MkI4MDMw
RDFGMzJEMDAwMTU4RjA5IC8qIFNWR0ZvbnQuY3BwICovLAogCQkJCUIyMzdDOEE1MEQzNDREMTEw
MDEzRjcwNyAvKiBTVkdGb250RGF0YS5jcHAgKi8sCiAJCQkJQjIzN0M4QTYwRDM0NEQxMTAwMTNG
NzA3IC8qIFNWR0ZvbnREYXRhLmggKi8sCiAJCQkJQjJBMUYyQTEwQ0VGMEFCRjAwNDQyRjZBIC8q
IFNWR0ZvbnRFbGVtZW50LmNwcCAqLywKQEAgLTE5MTM5LDYgKzE5MTQwLDcgQEAKIAkJCQlBN0Yz
MzhBMTExQzBFRkNBMDBBMzIwQTcgLyogU2hhZG93RWxlbWVudC5jcHAgKi8sCiAJCQkJQTdGMzM4
QTIxMUMwRUZDQTAwQTMyMEE3IC8qIFNoYWRvd0VsZW1lbnQuaCAqLywKIAkJCQlBOENGRjA0QzBB
MTU0RjA5MDAwQTQyMzQgLyogVGFibGVMYXlvdXQuaCAqLywKKwkJCQkwOEJGNUFFMjEzODU3NTQx
MDBFRUI0MDQgLyogVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCAqLywKIAkJCQkzN0ZDOTZEQTEx
MDRFRDcxMDAzRTFGQUQgLyogVHJhaWxpbmdGbG9hdHNSb290SW5saW5lQm94LmggKi8sCiAJCQkJ
MEY1MDBBQjAwRjU0REIzMTAwRUVGOTI4IC8qIFRyYW5zZm9ybVN0YXRlLmNwcCAqLywKIAkJCQkw
RjUwMEFBRTBGNTREQjFCMDBFRUY5MjggLyogVHJhbnNmb3JtU3RhdGUuaCAqLywKQEAgLTIyNjQz
LDYgKzIyNjQ1LDcgQEAKIAkJCQk5MzBGQzY4QTEwNzJCOTI4MDA0NTI5M0UgLyogVGV4dFJlbmRl
cmluZ01vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzRjE5OEY2MDgyNDVFNTkwMDFFOUFCQyAv
KiBUZXh0UmVzb3VyY2VEZWNvZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODI0QjQ2NTBFMkVG
MkVBMDA4MUE3QjcgLyogVGV4dFJ1bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMDhCRjVBRTMxMzg1
NzU0MTAwRUVCNDA0IC8qIFRleHRSdW5SZW5kZXJpbmdDb250ZXh0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCMkMzREE0QjBEMDA2QzFEMDBFRjZGMjYgLyogVGV4dFN0cmVhbS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNDk4NzcwRjExMjQyQzUzNTAwMjIyNkJBIC8qIFRleHR1cmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3QkM4NEE1MTIzNzBEQzgwMDBDNjE2MSAvKiBUZXh0Vmlld1NvdXJjZVBhcnNl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC0yNTIzNSw3ICsyNTIzOCw2IEBACiAJCQkJQjIyMjdBMEIw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQjIyMjdBMEUwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZpbHRlclByaW1pdGl2ZVN0YW5kYXJk
QXR0cmlidXRlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0ExMTBEMDBCRjIyMDA3MUI3
ODIgLyogU1ZHRml0VG9WaWV3Qm94LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUIyNjJCODA0MEQx
RjMyRDAwMDE1OEYwOSAvKiBTVkdGb250LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMzdDOEE3
MEQzNDREMTEwMDEzRjcwNyAvKiBTVkdGb250RGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlC
MkExRjJBQTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQjIyMjdBMTQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR0ZvbnRGYWNlRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNv
dXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291
cmNlLmNwcAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZh
Y2VTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsNyArMTU0LDcgQEAgU2ltcGxlRm9u
dERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwogICAgICAgICAgICAgICAgICAgICAgICAg
bV9zdmdGb250RmFjZUVsZW1lbnQgPSBmb250RmFjZUVsZW1lbnQ7CiAgICAgICAgICAgICAgICAg
ICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBmb250RGF0YSA9IGFkb3B0UHRyKG5ldyBTaW1w
bGVGb250RGF0YShhZG9wdFB0cihuZXcgU1ZHRm9udERhdGEoZm9udEZhY2VFbGVtZW50KSksIGZv
bnREZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0
aWNJdGFsaWMpKTsKKyAgICAgICAgICAgICAgICAgICAgZm9udERhdGEgPSBhZG9wdFB0cihuZXcg
U2ltcGxlRm9udERhdGEoU1ZHRm9udERhdGE6OmNyZWF0ZShmb250RmFjZUVsZW1lbnQpLCBmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGlj
SXRhbGljKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlCiAjZW5kaWYK
QEAgLTE3MCw3ICsxNzAsNyBAQCBTaW1wbGVGb250RGF0YSogQ1NTRm9udEZhY2VTb3VyY2U6Omdl
dEZvCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICAgICAgICAgIC8vIEluLURvY3VtZW50IFNW
RyBGb250cwogICAgICAgICAgICAgaWYgKG1fc3ZnRm9udEZhY2VFbGVtZW50KQotICAgICAgICAg
ICAgICAgIGZvbnREYXRhID0gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKGFkb3B0UHRyKG5l
dyBTVkdGb250RGF0YShtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSkpLCBmb250RGVzY3JpcHRp
b24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSk7
CisgICAgICAgICAgICAgICAgZm9udERhdGEgPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERhdGEo
U1ZHRm9udERhdGE6OmNyZWF0ZShtX3N2Z0ZvbnRGYWNlRWxlbWVudC5nZXQoKSksIGZvbnREZXNj
cmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpLCBzeW50aGV0aWNCb2xkLCBzeW50aGV0aWNJdGFs
aWMpKTsKICNlbmRpZgogICAgICAgICB9CiAgICAgfSBlbHNlIHsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzYsOCArMTM2LDggQEAgdm9pZCBGb250OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbgog
ICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8pOwogCiAjaWYgRU5BQkxFKFNW
R19GT05UUykKLSAgICBpZiAocHJpbWFyeUZvbnQoKS0+aXNTVkdGb250KCkpIHsKLSAgICAgICAg
ZHJhd1RleHRVc2luZ1NWR0ZvbnQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOworICAg
IGlmIChUZXh0UnVuOjpBYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQg
PSBydW4ucmVuZGVyaW5nQ29udGV4dCgpKSB7CisgICAgICAgIHJlbmRlcmluZ0NvbnRleHQtPmRy
YXdUZXh0VXNpbmdTVkdGb250KCp0aGlzLCBjb250ZXh0LCBydW4sIHBvaW50LCBmcm9tLCB0byk7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYKQEAgLTE3OCw4ICsxNzgsOCBAQCB2b2lk
IEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29uCiBmbG9hdCBGb250Ojp3aWR0aChj
b25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJh
Y2tGb250cywgR2x5cGhPdmVyZmxvdyogZ2x5cGhPdmVyZmxvdykgY29uc3QKIHsKICNpZiBFTkFC
TEUoU1ZHX0ZPTlRTKQotICAgIGlmIChwcmltYXJ5Rm9udCgpLT5pc1NWR0ZvbnQoKSkKLSAgICAg
ICAgcmV0dXJuIGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQocnVuKTsKKyAgICBpZiAoVGV4dFJ1bjo6
QWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0ID0gcnVuLnJlbmRlcmlu
Z0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQtPmZsb2F0V2lkdGhV
c2luZ1NWR0ZvbnQoKnRoaXMsIHJ1bik7CiAjZW5kaWYKIAogICAgIENvZGVQYXRoIGNvZGVQYXRo
VG9Vc2UgPSBjb2RlUGF0aChydW4pOwpAQCAtMTk1LDExICsxOTUsMTEgQEAgZmxvYXQgRm9udDo6
d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBIYQogCiBmbG9hdCBGb250Ojp3aWR0aChjb25zdCBU
ZXh0UnVuJiBydW4sIGludCBleHRyYUNoYXJzQXZhaWxhYmxlLCBpbnQmIGNoYXJzQ29uc3VtZWQs
IFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAogewotI2lmICFFTkFCTEUoU1ZHX0ZPTlRTKQotICAg
IFVOVVNFRF9QQVJBTShleHRyYUNoYXJzQXZhaWxhYmxlKTsKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQorICAgIGlmIChUZXh0UnVuOjpBYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQqIHJlbmRlcmluZ0Nv
bnRleHQgPSBydW4ucmVuZGVyaW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gcmVuZGVyaW5n
Q29udGV4dC0+ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udCgqdGhpcywgcnVuLCBleHRyYUNoYXJzQXZh
aWxhYmxlLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOwogI2Vsc2UKLSAgICBpZiAocHJpbWFy
eUZvbnQoKS0+aXNTVkdGb250KCkpCi0gICAgICAgIHJldHVybiBmbG9hdFdpZHRoVXNpbmdTVkdG
b250KHJ1biwgZXh0cmFDaGFyc0F2YWlsYWJsZSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsK
KyAgICBVTlVTRURfUEFSQU0oZXh0cmFDaGFyc0F2YWlsYWJsZSk7CiAjZW5kaWYKIAogICAgIGNo
YXJzQ29uc3VtZWQgPSBydW4ubGVuZ3RoKCk7CkBAIC0yMTQsMTAgKzIxNCwxMCBAQCBmbG9hdCBG
b250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGluCiBGbG9hdFJlY3QgRm9udDo6c2VsZWN0
aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFNWR19GT05U
UykKLSAgICBpZiAocHJpbWFyeUZvbnQoKS0+aXNTVkdGb250KCkpCi0gICAgICAgIHJldHVybiBz
ZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udChydW4sIHBvaW50LCBoLCBmcm9tLCB0byk7
CisgICAgaWYgKFRleHRSdW46OkFic3RyYWN0UmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29u
dGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybiByZW5kZXJpbmdD
b250ZXh0LT5zZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udCgqdGhpcywgcnVuLCBwb2lu
dCwgaCwgZnJvbSwgdG8pOwogI2VuZGlmCi0KKyAKICAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5s
ZW5ndGgoKSA6IHRvKTsKIAogICAgIGlmIChjb2RlUGF0aChydW4pICE9IENvbXBsZXgpCkBAIC0y
MjksOCArMjI5LDggQEAgRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbgog
aW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwg
Ym9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3QKIHsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRT
KQotICAgIGlmIChwcmltYXJ5Rm9udCgpLT5pc1NWR0ZvbnQoKSkKLSAgICAgICAgcmV0dXJuIG9m
ZnNldEZvclBvc2l0aW9uRm9yVGV4dFVzaW5nU1ZHRm9udChydW4sIHgsIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKTsKKyAgICBpZiAoVGV4dFJ1bjo6QWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0KiByZW5k
ZXJpbmdDb250ZXh0ID0gcnVuLnJlbmRlcmluZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0dXJuIHJl
bmRlcmluZ0NvbnRleHQtPm9mZnNldEZvclBvc2l0aW9uRm9yVGV4dFVzaW5nU1ZHRm9udCgqdGhp
cywgcnVuLCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiAjZW5kaWYKIAogICAgIGlmIChjb2Rl
UGF0aChydW4pICE9IENvbXBsZXgpCkBAIC0yMzksMTMgKzIzOSw2IEBAIGludCBGb250OjpvZmZz
ZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnUKICAgICByZXR1cm4gb2Zmc2V0Rm9yUG9zaXRpb25G
b3JDb21wbGV4VGV4dChydW4sIHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotI2lmIEVO
QUJMRShTVkdfRk9OVFMpCi1ib29sIEZvbnQ6OmlzU1ZHRm9udCgpIGNvbnN0Ci17IAotICAgIHJl
dHVybiBwcmltYXJ5Rm9udCgpLT5pc1NWR0ZvbnQoKTsgCi19Ci0jZW5kaWYKLQogU3RyaW5nIEZv
bnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVu
Z3RoKQogewogICAgIFVDaGFyKiBidWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCBjbGFz
cyBGb250U2VsZWN0b3I7CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKIGNsYXNzIEdseXBoUGFnZVRyZWVO
b2RlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgU1ZHRm9udEVsZW1lbnQ7CiBjbGFz
cyBUZXh0UnVuOwogCiBzdHJ1Y3QgR2x5cGhEYXRhOwpAQCAtMTU3LDE0ICsxNTYsNiBAQCBwdWJs
aWM6CiAgICAgZW51bSBDb2RlUGF0aCB7IEF1dG8sIFNpbXBsZSwgQ29tcGxleCwgU2ltcGxlV2l0
aEdseXBoT3ZlcmZsb3cgfTsKIAogcHJpdmF0ZToKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAg
IHZvaWQgZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1
biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKLSAgICBmbG9h
dCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mKSBjb25zdDsKLSAgICBmbG9h
dCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mLCBpbnQgZXh0cmFDaGFyc0F2
YWlsYWJsZSwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3Q7Ci0g
ICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IFRleHRS
dW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Owot
ICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQoY29uc3QgVGV4dFJ1
biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKLSNl
bmRpZgotCiAgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBoYXNp
cywgRm9yVGV4dEVtcGhhc2lzIH07CiAKICAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGluLXN0
cmVhbSBhZHZhbmNlLgpAQCAtMjIwLDExICsyMTEsNiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMg
U3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbmd0aCk7CiAK
LSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3Q7Ci0gICAg
U1ZHRm9udEVsZW1lbnQqIHN2Z0ZvbnQoKSBjb25zdDsKLSNlbmRpZgotCiAgICAgYm9vbCBuZWVk
c1RyYW5zY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1RyYW5zY29kaW5nOyB9CiAKIHBy
aXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250
RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMs
MTMgKzMzLDYgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAK
LSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotI2luY2x1ZGUgIlNWR0ZvbnREYXRhLmgiCi0jaW5jbHVk
ZSAiU1ZHRm9udEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIKLSNp
bmNsdWRlICJTVkdHbHlwaEVsZW1lbnQuaCIKLSNlbmRpZgotCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApAQCAtNjMsNjQgKzU2LDE4
IEBAIFNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25zdCBGb24KICAgICBwbGF0Zm9y
bUNoYXJXaWR0aEluaXQoKTsKIH0KIAotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi1TaW1wbGVGb250
RGF0YTo6U2ltcGxlRm9udERhdGEoUGFzc093blB0cjxTVkdGb250RGF0YT4gc3ZnRm9udERhdGEs
IGludCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKQorU2lt
cGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKFBhc3NPd25QdHI8QWJzdHJhY3RGb250RGF0YT4g
Zm9udERhdGEsIGludCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRh
bGljKQogICAgIDogbV9wbGF0Zm9ybURhdGEoRm9udFBsYXRmb3JtRGF0YShzaXplLCBzeW50aGV0
aWNCb2xkLCBzeW50aGV0aWNJdGFsaWMpKQorICAgICwgbV9mb250RGF0YShmb250RGF0YSkKICAg
ICAsIG1fdHJlYXRBc0ZpeGVkUGl0Y2goZmFsc2UpCi0gICAgLCBtX3N2Z0ZvbnREYXRhKHN2Z0Zv
bnREYXRhKQogICAgICwgbV9pc0N1c3RvbUZvbnQodHJ1ZSkKICAgICAsIG1faXNMb2FkaW5nKGZh
bHNlKQogICAgICwgbV9pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKGZhbHNlKQogICAgICwgbV9p
c0Jyb2tlbklkZW9ncmFwaEZhbGxiYWNrKGZhbHNlKQogICAgICwgbV9oYXNWZXJ0aWNhbEdseXBo
cyhmYWxzZSkKIHsKLSAgICBTVkdGb250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlRWxlbWVudCA9
IG1fc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwotICAgIHVuc2lnbmVkIHVuaXRz
UGVyRW0gPSBzdmdGb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKTsKLQotICAgIGZsb2F0IHNj
YWxlID0gc2l6ZTsKLSAgICBpZiAodW5pdHNQZXJFbSkKLSAgICAgICAgc2NhbGUgLz0gdW5pdHNQ
ZXJFbTsKLQotICAgIGZsb2F0IHhIZWlnaHQgPSBzdmdGb250RmFjZUVsZW1lbnQtPnhIZWlnaHQo
KSAqIHNjYWxlOwotICAgIGZsb2F0IGFzY2VudCA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+YXNjZW50
KCkgKiBzY2FsZTsKLSAgICBmbG9hdCBkZXNjZW50ID0gc3ZnRm9udEZhY2VFbGVtZW50LT5kZXNj
ZW50KCkgKiBzY2FsZTsKLSAgICBmbG9hdCBsaW5lR2FwID0gMC4xZiAqIHNpemU7Ci0KLSAgICBT
VkdGb250RWxlbWVudCogYXNzb2NpYXRlZEZvbnRFbGVtZW50ID0gc3ZnRm9udEZhY2VFbGVtZW50
LT5hc3NvY2lhdGVkRm9udEVsZW1lbnQoKTsKLSAgICBpZiAoIXhIZWlnaHQpIHsgICAgCi0gICAg
ICAgIC8vIEZhbGxiYWNrIGlmIHhfaGVpZ2h0QXR0ciBpcyBub3Qgc3BlY2lmaWVkIGZvciB0aGUg
Zm9udCBlbGVtZW50LgotICAgICAgICBWZWN0b3I8U1ZHR2x5cGg+IGxldHRlclhHbHlwaHM7Ci0g
ICAgICAgIGFzc29jaWF0ZWRGb250RWxlbWVudC0+Z2V0R2x5cGhJZGVudGlmaWVyc0ZvclN0cmlu
ZyhTdHJpbmcoIngiLCAxKSwgbGV0dGVyWEdseXBocyk7Ci0gICAgICAgIHhIZWlnaHQgPSBsZXR0
ZXJYR2x5cGhzLmlzRW1wdHkoKSA/IDIgKiBhc2NlbnQgLyAzIDogbGV0dGVyWEdseXBocy5maXJz
dCgpLmhvcml6b250YWxBZHZhbmNlWCAqIHNjYWxlOwotICAgIH0KLQotICAgIG1fZm9udE1ldHJp
Y3Muc2V0VW5pdHNQZXJFbSh1bml0c1BlckVtKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldEFzY2Vu
dChhc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0RGVzY2VudChkZXNjZW50KTsKLSAgICBt
X2ZvbnRNZXRyaWNzLnNldExpbmVHYXAobGluZUdhcCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRM
aW5lU3BhY2luZyhyb3VuZGYoYXNjZW50KSArIHJvdW5kZihkZXNjZW50KSArIHJvdW5kZihsaW5l
R2FwKSk7Ci0gICAgbV9mb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWlnaHQpOwotCi0gICAgVmVj
dG9yPFNWR0dseXBoPiBzcGFjZUdseXBoczsKLSAgICBhc3NvY2lhdGVkRm9udEVsZW1lbnQtPmdl
dEdseXBoSWRlbnRpZmllcnNGb3JTdHJpbmcoU3RyaW5nKCIgIiwgMSksIHNwYWNlR2x5cGhzKTsK
LSAgICBtX3NwYWNlV2lkdGggPSBzcGFjZUdseXBocy5pc0VtcHR5KCkgPyB4SGVpZ2h0IDogc3Bh
Y2VHbHlwaHMuZmlyc3QoKS5ob3Jpem9udGFsQWR2YW5jZVggKiBzY2FsZTsKLQotICAgIFZlY3Rv
cjxTVkdHbHlwaD4gbnVtZXJhbFplcm9HbHlwaHM7Ci0gICAgYXNzb2NpYXRlZEZvbnRFbGVtZW50
LT5nZXRHbHlwaElkZW50aWZpZXJzRm9yU3RyaW5nKFN0cmluZygiMCIsIDEpLCBudW1lcmFsWmVy
b0dseXBocyk7Ci0gICAgbV9hdmdDaGFyV2lkdGggPSBudW1lcmFsWmVyb0dseXBocy5pc0VtcHR5
KCkgPyBtX3NwYWNlV2lkdGggOiBudW1lcmFsWmVyb0dseXBocy5maXJzdCgpLmhvcml6b250YWxB
ZHZhbmNlWCAqIHNjYWxlOwotCi0gICAgVmVjdG9yPFNWR0dseXBoPiBsZXR0ZXJXR2x5cGhzOwot
ICAgIGFzc29jaWF0ZWRGb250RWxlbWVudC0+Z2V0R2x5cGhJZGVudGlmaWVyc0ZvclN0cmluZyhT
dHJpbmcoIlciLCAxKSwgbGV0dGVyV0dseXBocyk7Ci0gICAgbV9tYXhDaGFyV2lkdGggPSBsZXR0
ZXJXR2x5cGhzLmlzRW1wdHkoKSA/IGFzY2VudCA6IGxldHRlcldHbHlwaHMuZmlyc3QoKS5ob3Jp
em9udGFsQWR2YW5jZVggKiBzY2FsZTsKLQotICAgIC8vIEZJWE1FOiBpcyB0aGVyZSBhIHdheSB3
ZSBjYW4gZ2V0IHRoZSBzcGFjZSBnbHlwaCBmcm9tIHRoZSBTVkdHbHlwaCBhYm92ZT8KLSAgICBt
X3NwYWNlR2x5cGggPSAwOwotICAgIG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IDA7Ci0gICAgZGV0
ZXJtaW5lUGl0Y2goKTsKLSAgICBtX21pc3NpbmdHbHlwaERhdGEuZm9udERhdGEgPSB0aGlzOwot
ICAgIG1fbWlzc2luZ0dseXBoRGF0YS5nbHlwaCA9IDA7CisgICAgbV9mb250RGF0YS0+aW5pdGlh
bGl6ZUZvbnREYXRhKHRoaXMsIHNpemUpOwogfQotI2VuZGlmCiAKICNpZiAhKFBMQVRGT1JNKFFU
KSAmJiAhSEFWRShRUkFXRk9OVCkpCiAvLyBFc3RpbWF0ZXMgb2YgYXZnQ2hhcldpZHRoIGFuZCBt
YXhDaGFyV2lkdGggZm9yIHBsYXRmb3JtcyB0aGF0IGRvbid0IHN1cHBvcnQgYWNjZXNzaW5nIHRo
ZXNlIHZhbHVlcyBmcm9tIHRoZSBmb250LgpAQCAtMTg2LDcgKzEzMyw3IEBAIHZvaWQgU2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtR2x5cGhJbml0KCkKIFNpbXBsZUZvbnREYXRhOjp+U2ltcGxlRm9u
dERhdGEoKQogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKCFtX3N2Z0ZvbnREYXRh
IHx8ICFtX3N2Z0ZvbnREYXRhLT5zdmdGb250RmFjZUVsZW1lbnQoKSkKKyAgICBpZiAoIW1fZm9u
dERhdGEgfHwgIW1fZm9udERhdGEtPmlzU1ZHRm9udERhdGEoKSkKICNlbmRpZgogICAgICAgICBw
bGF0Zm9ybURlc3Ryb3koKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTY0LDE3ICs2NCwyNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvbnREZXNj
cmlwdGlvbjsKIGNsYXNzIFNoYXJlZEJ1ZmZlcjsKLWNsYXNzIFNWR0ZvbnREYXRhOwogCiBlbnVt
IEZvbnREYXRhVmFyaWFudCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENhcHNW
YXJpYW50LCBFbXBoYXNpc01hcmtWYXJpYW50IH07CiBlbnVtIFBpdGNoIHsgVW5rbm93blBpdGNo
LCBGaXhlZFBpdGNoLCBWYXJpYWJsZVBpdGNoIH07CiAKIGNsYXNzIFNpbXBsZUZvbnREYXRhIDog
cHVibGljIEZvbnREYXRhIHsKIHB1YmxpYzoKKyAgICBjbGFzcyBBYnN0cmFjdEZvbnREYXRhIHsK
KyAgICAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgcHVibGljOgorICAgICAgICB2
aXJ0dWFsIH5BYnN0cmFjdEZvbnREYXRhKCkgeyB9CisgICAgICAgIHZpcnR1YWwgYm9vbCBpc1NW
R0ZvbnREYXRhKCkgY29uc3QgPSAwOworICAgIAorICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlh
bGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiwgaW50KSA9IDA7CisgICAgfTsKKworICAgIC8v
IFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgogICAgIFNpbXBsZUZvbnREYXRhKGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmLCBib29sIGlzQ3VzdG9tRm9udCA9IGZhbHNlLCBib29sIGlzTG9h
ZGluZyA9IGZhbHNlLCBib29sIGlzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2sgPSBmYWxzZSk7Ci0j
aWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBTaW1wbGVGb250RGF0YShQYXNzT3duUHRyPFNWR0Zv
bnREYXRhPiwgaW50IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFs
aWMpOwotI2VuZGlmCisKKyAgICAvLyBVc2VkIHRvIGNyZWF0ZSBTVkcgRm9udHMuCisgICAgU2lt
cGxlRm9udERhdGEoUGFzc093blB0cjxBYnN0cmFjdEZvbnREYXRhPiwgaW50IHNpemUsIGJvb2wg
c3ludGhldGljQm9sZCwgYm9vbCBzeW50aGV0aWNJdGFsaWMpOworCiAgICAgdmlydHVhbCB+U2lt
cGxlRm9udERhdGEoKTsKIAogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fcGxhdGZvcm1EYXRhOyB9CkBAIC0xMDQsOSArMTE0LDE0IEBA
IHB1YmxpYzoKICAgICBib29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNWZXJ0aWNhbEdseXBoczsgfQogICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygp
IGNvbnN0IHsgcmV0dXJuIG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQogCisgICAgRm9u
dE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgeyByZXR1cm4gbV9mb250TWV0cmljczsgfQogICAgIGNv
bnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udE1ldHJp
Y3M7IH0KKyAgICAKICAgICBmbG9hdCBtYXhDaGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21h
eENoYXJXaWR0aDsgfQorICAgIHZvaWQgc2V0TWF4Q2hhcldpZHRoKGZsb2F0IG1heENoYXJXaWR0
aCkgeyBtX21heENoYXJXaWR0aCA9IG1heENoYXJXaWR0aDsgfQorCiAgICAgZmxvYXQgYXZnQ2hh
cldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9hdmdDaGFyV2lkdGg7IH0KKyAgICB2b2lkIHNldEF2
Z0NoYXJXaWR0aChmbG9hdCBhdmdDaGFyV2lkdGgpIHsgbV9hdmdDaGFyV2lkdGggPSBhdmdDaGFy
V2lkdGg7IH0KIAogICAgIEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAg
ICAgZmxvYXQgd2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CkBAIC0xMTQsMTIgKzEy
OSwxNSBAQCBwdWJsaWM6CiAgICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBj
b25zdDsKIAogICAgIGZsb2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlV2lk
dGg7IH0KKyAgICB2b2lkIHNldFNwYWNlV2lkdGgoZmxvYXQgc3BhY2VXaWR0aCkgeyBtX3NwYWNl
V2lkdGggPSBzcGFjZVdpZHRoOyB9CiAKICNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykgfHwgUExB
VEZPUk0oV1gpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUUpCiAgICAgZmxvYXQgc3ludGhldGlj
Qm9sZE9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZE9mZnNldDsgfQogI2Vu
ZGlmCiAKICAgICBHbHlwaCBzcGFjZUdseXBoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZUdseXBo
OyB9CisgICAgdm9pZCBzZXRTcGFjZUdseXBoKEdseXBoIHNwYWNlR2x5cGgpIHsgbV9zcGFjZUds
eXBoID0gc3BhY2VHbHlwaDsgfQorICAgIHZvaWQgc2V0WmVyb1dpZHRoU3BhY2VHbHlwaChHbHlw
aCBzcGFjZUdseXBoKSB7IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNlR2x5cGg7IH0KICAg
ICBib29sIGlzWmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyByZXR1cm4g
Z2x5cGggPT0gbV96ZXJvV2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9CiAKICAgICB2aXJ0dWFs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25z
dDsKQEAgLTEyOCwxOCArMTQ2LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGVybWluZVBpdGNo
KCk7CiAgICAgUGl0Y2ggcGl0Y2goKSBjb25zdCB7IHJldHVybiBtX3RyZWF0QXNGaXhlZFBpdGNo
ID8gRml4ZWRQaXRjaCA6IFZhcmlhYmxlUGl0Y2g7IH0KIAotI2lmIEVOQUJMRShTVkdfRk9OVFMp
Ci0gICAgU1ZHRm9udERhdGEqIHN2Z0ZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250
RGF0YS5nZXQoKTsgfQotICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1cm4gbV9zdmdG
b250RGF0YTsgfQotI2Vsc2UKLSAgICBib29sIGlzU1ZHRm9udCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0jZW5kaWYKKyAgICBBYnN0cmFjdEZvbnREYXRhKiBmb250RGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udERhdGEuZ2V0KCk7IH0KKyAgICBib29sIGlzU1ZHRm9udCgpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udERhdGEgJiYgbV9mb250RGF0YS0+aXNTVkdGb250RGF0YSgpOyB9CiAKICAg
ICB2aXJ0dWFsIGJvb2wgaXNDdXN0b21Gb250KCkgY29uc3QgeyByZXR1cm4gbV9pc0N1c3RvbUZv
bnQ7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNMb2FkaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc0xv
YWRpbmc7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNTZWdtZW50ZWQoKSBjb25zdDsKIAogICAgIGNv
bnN0IEdseXBoRGF0YSYgbWlzc2luZ0dseXBoRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fbWlzc2lu
Z0dseXBoRGF0YTsgfQorICAgIHZvaWQgc2V0TWlzc2luZ0dseXBoRGF0YShjb25zdCBHbHlwaERh
dGEmIGdseXBoRGF0YSkgeyBtX21pc3NpbmdHbHlwaERhdGEgPSBnbHlwaERhdGE7IH0KIAogI2lm
bmRlZiBOREVCVUcKICAgICB2aXJ0dWFsIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwpAQCAt
MjA4LDE2ICsyMjMsMTIgQEAgcHJpdmF0ZToKICAgICBmbG9hdCBtX2F2Z0NoYXJXaWR0aDsKICAg
ICAKICAgICBGb250UGxhdGZvcm1EYXRhIG1fcGxhdGZvcm1EYXRhOworICAgIE93blB0cjxBYnN0
cmFjdEZvbnREYXRhPiBtX2ZvbnREYXRhOwogCiAgICAgbXV0YWJsZSBPd25QdHI8R2x5cGhNZXRy
aWNzTWFwPEZsb2F0UmVjdD4gPiBtX2dseXBoVG9Cb3VuZHNNYXA7CiAgICAgbXV0YWJsZSBHbHlw
aE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dpZHRoTWFwOwogCiAgICAgYm9vbCBtX3RyZWF0
QXNGaXhlZFBpdGNoOwotCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBPd25QdHI8U1ZHRm9u
dERhdGE+IG1fc3ZnRm9udERhdGE7Ci0jZW5kaWYKLQogICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7
ICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3VzdG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1m
YWNlCiAgICAgYm9vbCBtX2lzTG9hZGluZzsgLy8gV2hldGhlciBvciBub3QgdGhpcyBjdXN0b20g
Zm9udCBpcyBzdGlsbCBpbiB0aGUgYWN0IG9mIGxvYWRpbmcuCiAgICAgCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCShyZXZpc2lvbiA4Njk0MikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMjQsMTMgKzI0LDE2IEBACiAjaWZuZGVmIFRleHRSdW5faAogI2RlZmluZSBUZXh0UnVu
X2gKIAotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiVGV4dERpcmVjdGlv
bi5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgUmVuZGVyT2JqZWN0Owot
Y2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2U7CitjbGFzcyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRS
ZWN0OworY2xhc3MgRm9udDsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKIAogY2xhc3MgVGV4dFJ1
biB7CiBwdWJsaWM6CkBAIC01NiwxMCArNTksNiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kaXJl
Y3Rpb24oZGlyZWN0aW9uKQogICAgICAgICAsIG1fZGlyZWN0aW9uYWxPdmVycmlkZShkaXJlY3Rp
b25hbE92ZXJyaWRlKQogICAgICAgICAsIG1fZGlzYWJsZVNwYWNpbmcoZmFsc2UpCi0jaWYgRU5B
QkxFKFNWR19GT05UUykKLSAgICAgICAgLCBtX3JlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KDApCi0g
ICAgICAgICwgbV9hY3RpdmVQYWludGluZ1Jlc291cmNlKDApCi0jZW5kaWYKICAgICB7CiAgICAg
fQogCkBAIC03NiwxMCArNzUsNiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGly
ZWN0aW9uKQogICAgICAgICAsIG1fZGlyZWN0aW9uYWxPdmVycmlkZShkaXJlY3Rpb25hbE92ZXJy
aWRlKQogICAgICAgICAsIG1fZGlzYWJsZVNwYWNpbmcoZmFsc2UpCi0jaWYgRU5BQkxFKFNWR19G
T05UUykKLSAgICAgICAgLCBtX3JlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KDApCi0gICAgICAgICwg
bV9hY3RpdmVQYWludGluZ1Jlc291cmNlKDApCi0jZW5kaWYKICAgICB7CiAgICAgfQogCkBAIC05
Nyw3ICs5Miw5IEBAIHB1YmxpYzoKICNlbmRpZgogCiAgICAgYm9vbCBhbGxvd1RhYnMoKSBjb25z
dCB7IHJldHVybiBtX2FsbG93VGFiczsgfQorICAgIHZvaWQgc2V0QWxsb3dUYWJzKGJvb2wgYWxs
b3dUYWJzKSB7IG1fYWxsb3dUYWJzID0gYWxsb3dUYWJzOyB9CiAgICAgZmxvYXQgeFBvcygpIGNv
bnN0IHsgcmV0dXJuIG1feHBvczsgfQorICAgIHZvaWQgc2V0WFBvcyhmbG9hdCB4UG9zKSB7IG1f
eHBvcyA9IHhQb3M7IH0KICAgICBmbG9hdCBleHBhbnNpb24oKSBjb25zdCB7IHJldHVybiBtX2V4
cGFuc2lvbjsgfQogICAgIGJvb2wgYWxsb3dzTGVhZGluZ0V4cGFuc2lvbigpIGNvbnN0IHsgcmV0
dXJuIG1fZXhwYW5zaW9uQmVoYXZpb3IgJiBBbGxvd0xlYWRpbmdFeHBhbnNpb247IH0KICAgICBi
b29sIGFsbG93c1RyYWlsaW5nRXhwYW5zaW9uKCkgY29uc3QgeyByZXR1cm4gbV9leHBhbnNpb25C
ZWhhdmlvciAmIEFsbG93VHJhaWxpbmdFeHBhbnNpb247IH0KQEAgLTExMSwxMyArMTA4LDIzIEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldERpcmVjdGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikg
eyBtX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsgfQogICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxPdmVy
cmlkZShib29sIG92ZXJyaWRlKSB7IG1fZGlyZWN0aW9uYWxPdmVycmlkZSA9IG92ZXJyaWRlOyB9
CiAKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIFJlbmRlck9iamVjdCogcmVmZXJlbmNpbmdS
ZW5kZXJPYmplY3QoKSBjb25zdCB7IHJldHVybiBtX3JlZmVyZW5jaW5nUmVuZGVyT2JqZWN0OyB9
Ci0gICAgdm9pZCBzZXRSZWZlcmVuY2luZ1JlbmRlck9iamVjdChSZW5kZXJPYmplY3QqIG9iamVj
dCkgeyBtX3JlZmVyZW5jaW5nUmVuZGVyT2JqZWN0ID0gb2JqZWN0OyB9CisgICAgY2xhc3MgQWJz
dHJhY3RSZW5kZXJpbmdDb250ZXh0IDogcHVibGljIFJlZkNvdW50ZWQ8QWJzdHJhY3RSZW5kZXJp
bmdDb250ZXh0PiB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5BYnN0cmFjdFJlbmRl
cmluZ0NvbnRleHQoKSB7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzV2ViQ29yZVJlbmRlcmlu
Z0NvbnRleHQoKSBjb25zdCA9IDA7CiAKLSAgICBSZW5kZXJTVkdSZXNvdXJjZSogYWN0aXZlUGFp
bnRpbmdSZXNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlUGFpbnRpbmdSZXNvdXJjZTsg
fQotICAgIHZvaWQgc2V0QWN0aXZlUGFpbnRpbmdSZXNvdXJjZShSZW5kZXJTVkdSZXNvdXJjZSog
b2JqZWN0KSB7IG1fYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSA9IG9iamVjdDsgfQorI2lmIEVOQUJM
RShTVkdfRk9OVFMpCisgICAgICAgIC8vIEZJWE1FOiBOb3RlIHRoYXQgdGhlIFNWRyBGb250IGlu
dGVncmF0aW9uIEFQSXMgd2lsbCBiZSBtb3JlIGFic3RyYWN0IGFuZCBzaW1wbGVyIG9uY2UgdGhl
IFNWRyBGb250cyByZXdyaXRlIHBhdGNoIGxhbmRzICg1OTA4NSkuCisgICAgICAgIHZpcnR1YWwg
dm9pZCBkcmF3VGV4dFVzaW5nU1ZHRm9udChjb25zdCBGb250JiwgR3JhcGhpY3NDb250ZXh0Kiwg
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dCA9IDA7CisgICAgICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25z
dCBGb250JiwgY29uc3QgVGV4dFJ1biYpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBmbG9h
dCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgaW50
IGV4dHJhQ2hhcnNBdmFpbGFibGUsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5h
bWUpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZv
clRleHRVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9h
dFBvaW50JiwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0ID0gMDsKKyAgICAgICAgdmly
dHVhbCBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IEZvbnQm
LCBjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpIGNvbnN0ID0gMDsKICNlbmRpZgorICAgIH07CisKKyAgICBBYnN0cmFjdFJlbmRlcmluZ0Nv
bnRleHQqIHJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0NvbnRl
eHQuZ2V0KCk7IH0KKyAgICB2b2lkIHNldFJlbmRlcmluZ0NvbnRleHQoUGFzc1JlZlB0cjxBYnN0
cmFjdFJlbmRlcmluZ0NvbnRleHQ+IGNvbnRleHQpIHsgbV9yZW5kZXJpbmdDb250ZXh0ID0gY29u
dGV4dDsgfQogCiBwcml2YXRlOgogICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3RlcnM7CkBAIC0x
MzYsMTEgKzE0Myw3IEBAIHByaXZhdGU6CiAgICAgVGV4dERpcmVjdGlvbiBtX2RpcmVjdGlvbjsK
ICAgICBib29sIG1fZGlyZWN0aW9uYWxPdmVycmlkZTsgLy8gV2FzIHRoaXMgZGlyZWN0aW9uIHNl
dCBieSBhbiBvdmVycmlkZSBjaGFyYWN0ZXIuCiAgICAgYm9vbCBtX2Rpc2FibGVTcGFjaW5nOwot
Ci0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBSZW5kZXJPYmplY3QqIG1fcmVmZXJlbmNpbmdS
ZW5kZXJPYmplY3Q7Ci0gICAgUmVuZGVyU1ZHUmVzb3VyY2UqIG1fYWN0aXZlUGFpbnRpbmdSZXNv
dXJjZTsKLSNlbmRpZgorICAgIFJlZlB0cjxBYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQ+IG1fcmVu
ZGVyaW5nQ29udGV4dDsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9F
bGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0Vs
bGlwc2lzQm94LmNwcAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw4ICs0NCw5IEBAIHZvaWQg
RWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICAgICAgc2V0U2hhZG93ID0g
dHJ1ZTsKICAgICB9CiAKKyAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKICAg
ICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsK
LSAgICAgICAgcGFpbnRTZWxlY3Rpb24oY29udGV4dCwgdHgsIHR5LCBzdHlsZSwgc3R5bGUtPmZv
bnQoKSk7CisgICAgICAgIHBhaW50U2VsZWN0aW9uKGNvbnRleHQsIHR4LCB0eSwgc3R5bGUsIGZv
bnQpOwogCiAgICAgICAgIC8vIFNlbGVjdCB0aGUgY29ycmVjdCBjb2xvciBmb3IgcGFpbnRpbmcg
dGhlIHRleHQuCiAgICAgICAgIENvbG9yIGZvcmVncm91bmQgPSBwYWludEluZm8uZm9yY2VCbGFj
a1RleHQgPyBDb2xvcjo6YmxhY2sgOiByZW5kZXJlcigpLT5zZWxlY3Rpb25Gb3JlZ3JvdW5kQ29s
b3IoKTsKQEAgLTU0LDcgKzU1LDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWludAogICAgIH0KIAogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhpcyBhbHdheXMgTFRSPyBG
aXggYnkgcGFzc2luZyBjb3JyZWN0IHRleHQgcnVuIGZsYWdzIGJlbG93LgotICAgIGNvbnRleHQt
PmRyYXdUZXh0KHN0eWxlLT5mb250KCksIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuQWxs
b3dUcmFpbGluZ0V4cGFuc2lvbihtX3N0ciwgc3R5bGUpLCBJbnRQb2ludChtX3ggKyB0eCwgbV95
ICsgdHkgKyBzdHlsZS0+Zm9udE1ldHJpY3MoKS5hc2NlbnQoKSkpOworICAgIGNvbnRleHQtPmRy
YXdUZXh0KGZvbnQsIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyKCksIGZv
bnQsIG1fc3RyLCBzdHlsZSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiksIEludFBv
aW50KG1feCArIHR4LCBtX3kgKyB0eSArIHN0eWxlLT5mb250TWV0cmljcygpLmFzY2VudCgpKSk7
CiAKICAgICAvLyBSZXN0b3JlIHRoZSByZWd1bGFyIGZpbGwgY29sb3IuCiAgICAgaWYgKHRleHRD
b2xvciAhPSBjb250ZXh0LT5maWxsQ29sb3IoKSkKQEAgLTc0LDkgKzc1LDkgQEAgdm9pZCBFbGxp
cHNpc0JveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludAogSW50UmVjdCBFbGxpcHNpc0JveDo6c2Vs
ZWN0aW9uUmVjdChpbnQgdHgsIGludCB0eSkKIHsKICAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSBt
X3JlbmRlcmVyLT5zdHlsZShtX2ZpcnN0TGluZSk7Ci0gICAgY29uc3QgRm9udCYgZiA9IHN0eWxl
LT5mb250KCk7CisgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlLT5mb250KCk7CiAgICAgLy8g
RklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4
dCBydW4gZmxhZ3MgYmVsb3cuCi0gICAgcmV0dXJuIGVuY2xvc2luZ0ludFJlY3QoZi5zZWxlY3Rp
b25SZWN0Rm9yVGV4dChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bkFsbG93VHJhaWxpbmdF
eHBhbnNpb24obV9zdHIsIHN0eWxlKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgcm9v
dCgpLT5zZWxlY3Rpb25Ub3AoKSksIHJvb3QoKS0+c2VsZWN0aW9uSGVpZ2h0KCkpKTsKKyAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyKCksIGZvbnQsIG1fc3RyLCBzdHlsZSwgVGV4
dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiksIEludFBvaW50KG1feCArIHR4LCBtX3kgKyB0
eSArIHJvb3QoKS0+c2VsZWN0aW9uVG9wKCkpLCByb290KCktPnNlbGVjdGlvbkhlaWdodCgpKSk7
CiB9CiAKIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgaW50IHR4LCBpbnQgdHksIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYg
Zm9udCkKQEAgLTk2LDcgKzk3LDcgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24o
R3JhcGhpYwogICAgIGludCBoID0gcm9vdCgpLT5zZWxlY3Rpb25IZWlnaHQoKTsKICAgICBjb250
ZXh0LT5jbGlwKEludFJlY3QobV94ICsgdHgsIHkgKyB0eSwgbV9sb2dpY2FsV2lkdGgsIGgpKTsK
ICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExUUj8gRml4IGJ5IHBhc3NpbmcgY29y
cmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KLSAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9y
VGV4dChmb250LCBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bkFsbG93VHJhaWxpbmdFeHBh
bnNpb24obV9zdHIsIHN0eWxlKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgeSksIGgs
IGMsIHN0eWxlLT5jb2xvclNwYWNlKCkpOworICAgIGNvbnRleHQtPmRyYXdIaWdobGlnaHRGb3JU
ZXh0KGZvbnQsIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyKCksIGZvbnQs
IG1fc3RyLCBzdHlsZSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiksIEludFBvaW50
KG1feCArIHR4LCBtX3kgKyB0eSArIHkpLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsKIH0K
IAogYm9vbCBFbGxpcHNpc0JveDo6bm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJl
cXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250
YWluZXIsIGludCB0eCwgaW50IHR5LCBpbnQgbGluZVRvcCwgaW50IGxpbmVCb3R0b20pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA4
Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQAogI2luY2x1ZGUgIlJlbmRlclJ1YnlUZXh0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJUZXh0LmgiCi0jaW5jbHVkZSAi
VGV4dFJ1bi5oIgorI2luY2x1ZGUgIlRleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVk
ZSAiYnJlYWtfbGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAKQEAgLTE4
MiwxNSArMTgyLDE1IEBAIEludFJlY3QgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdChpbnQK
ICAgICBpbnQgc2VsVG9wID0gc2VsZWN0aW9uVG9wKCk7CiAgICAgaW50IHNlbEhlaWdodCA9IHNl
bGVjdGlvbkhlaWdodCgpOwogICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gdGV4dE9iai0+
c3R5bGUobV9maXJzdExpbmUpOwotICAgIGNvbnN0IEZvbnQmIGYgPSBzdHlsZVRvVXNlLT5mb250
KCk7CisgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlVG9Vc2UtPmZvbnQoKTsKIAogICAgIEJ1
ZmZlckZvckFwcGVuZGluZ0h5cGhlbiBjaGFyYWN0ZXJzV2l0aEh5cGhlbjsKICAgICBib29sIHJl
c3BlY3RIeXBoZW4gPSBlUG9zID09IG1fbGVuICYmIGhhc0h5cGhlbigpOwotICAgIFRleHRSdW4g
dGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGVUb1VzZSwgcmVzcGVjdEh5cGhlbiA/ICZj
aGFyYWN0ZXJzV2l0aEh5cGhlbiA6IDApOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVj
dFRleHRSdW4oc3R5bGVUb1VzZSwgZm9udCwgcmVzcGVjdEh5cGhlbiA/ICZjaGFyYWN0ZXJzV2l0
aEh5cGhlbiA6IDApOwogICAgIGlmIChyZXNwZWN0SHlwaGVuKQogICAgICAgICBlbmRQb3MgPSB0
ZXh0UnVuLmxlbmd0aCgpOwogCi0gICAgSW50UmVjdCByID0gZW5jbG9zaW5nSW50UmVjdChmLnNl
bGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIEZsb2F0UG9pbnQobG9naWNhbExlZnQoKSwgc2Vs
VG9wKSwgc2VsSGVpZ2h0LCBzUG9zLCBlUG9zKSk7CisgICAgSW50UmVjdCByID0gZW5jbG9zaW5n
SW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIEZsb2F0UG9pbnQobG9n
aWNhbExlZnQoKSwgc2VsVG9wKSwgc2VsSGVpZ2h0LCBzUG9zLCBlUG9zKSk7CiAKICAgICBpbnQg
bG9naWNhbFdpZHRoID0gci53aWR0aCgpOwogICAgIGlmIChyLngoKSA+IGxvZ2ljYWxSaWdodCgp
KQpAQCAtNjQzLDcgKzY0Myw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZv
JiBwYWkKICAgICAgICAgY29tYmluZWRUZXh0LT5jaGFyYWN0ZXJzVG9SZW5kZXIobV9zdGFydCwg
Y2hhcmFjdGVycywgbGVuZ3RoKTsKIAogICAgIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiBjaGFy
YWN0ZXJzV2l0aEh5cGhlbjsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVu
KHN0eWxlVG9Vc2UsIGNoYXJhY3RlcnMsIGxlbmd0aCwgaGFzSHlwaGVuKCkgPyAmY2hhcmFjdGVy
c1dpdGhIeXBoZW4gOiAwKTsKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVu
KHN0eWxlVG9Vc2UsIGZvbnQsIGNoYXJhY3RlcnMsIGxlbmd0aCwgaGFzSHlwaGVuKCkgPyAmY2hh
cmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKICAgICBpZiAoaGFzSHlwaGVuKCkpCiAgICAgICAgIGxl
bmd0aCA9IHRleHRSdW4ubGVuZ3RoKCk7CiAKQEAgLTY4MCw3ICs2ODAsNyBAQCB2b2lkIElubGlu
ZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgICAgIGlmICghZW1waGFzaXNNYXJr
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQs
IGVtcGhhc2lzTWFya0NvbG9yLCB0ZXh0U3Ryb2tlQ29sb3IsIHRleHRTdHJva2VXaWR0aCwgc3R5
bGVUb1VzZS0+Y29sb3JTcGFjZSgpKTsKIAotICAgICAgICAgICAgc3RhdGljIFRleHRSdW4gb2Jq
ZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuKCZvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rl
ciwgMSk7CisgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRleHRSdW4sIG9iamVjdFJl
cGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biwgKCZvYmplY3RSZXBsYWNlbWVudENoYXJhY3Rlciwg
MSkpOwogICAgICAgICAgICAgVGV4dFJ1biYgZW1waGFzaXNNYXJrVGV4dFJ1biA9IGNvbWJpbmVk
VGV4dCA/IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biA6IHRleHRSdW47CiAgICAg
ICAgICAgICBGbG9hdFBvaW50IGVtcGhhc2lzTWFya1RleHRPcmlnaW4gPSBjb21iaW5lZFRleHQg
PyBGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBib3hSZWN0LndpZHRoKCkgLyAyLCBib3hPcmln
aW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKSA6IHRleHRPcmlnaW47CiAgICAg
ICAgICAgICBpZiAoY29tYmluZWRUZXh0KQpAQCAtNzA2LDcgKzcwNiw3IEBAIHZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICAgICAgaWYgKCFlbXBoYXNpc01hcmsu
aXNFbXB0eSgpKSB7CiAgICAgICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29udGV4dCwg
c2VsZWN0aW9uRW1waGFzaXNNYXJrQ29sb3IsIHRleHRTdHJva2VDb2xvciwgdGV4dFN0cm9rZVdp
ZHRoLCBzdHlsZVRvVXNlLT5jb2xvclNwYWNlKCkpOwogCi0gICAgICAgICAgICBzdGF0aWMgVGV4
dFJ1biBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclRleHRSdW4oJm9iamVjdFJlcGxhY2VtZW50
Q2hhcmFjdGVyLCAxKTsKKyAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoVGV4dFJ1biwg
b2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuLCAoJm9iamVjdFJlcGxhY2VtZW50Q2hh
cmFjdGVyLCAxKSk7CiAgICAgICAgICAgICBUZXh0UnVuJiBlbXBoYXNpc01hcmtUZXh0UnVuID0g
Y29tYmluZWRUZXh0ID8gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuIDogdGV4dFJ1
bjsKICAgICAgICAgICAgIEZsb2F0UG9pbnQgZW1waGFzaXNNYXJrVGV4dE9yaWdpbiA9IGNvbWJp
bmVkVGV4dCA/IEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSArIGJveFJlY3Qud2lkdGgoKSAvIDIs
IGJveE9yaWdpbi55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpIDogdGV4dE9yaWdp
bjsKICAgICAgICAgICAgIGlmIChjb21iaW5lZFRleHQpCkBAIC04MDgsNyArODA4LDcgQEAgdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaAogCiAgICAgQnVmZmVyRm9yQXBw
ZW5kaW5nSHlwaGVuIGNoYXJhY3RlcnNXaXRoSHlwaGVuOwogICAgIGJvb2wgcmVzcGVjdEh5cGhl
biA9IGVQb3MgPT0gbGVuZ3RoICYmIGhhc0h5cGhlbigpOwotICAgIFRleHRSdW4gdGV4dFJ1biA9
IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGNoYXJhY3RlcnMsIGxlbmd0aCwgcmVzcGVjdEh5cGhl
biA/ICZjaGFyYWN0ZXJzV2l0aEh5cGhlbiA6IDApOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNv
bnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQsIGNoYXJhY3RlcnMsIGxlbmd0aCwgcmVzcGVjdEh5
cGhlbiA/ICZjaGFyYWN0ZXJzV2l0aEh5cGhlbiA6IDApOwogICAgIGlmIChyZXNwZWN0SHlwaGVu
KQogICAgICAgICBlUG9zID0gdGV4dFJ1bi5sZW5ndGgoKTsKIApAQCAtODQzLDcgKzg0Myw3IEBA
IHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2sKICAgICBpbnQgZGVsdGFZ
ID0gcmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2Vs
ZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rp
b25Ub3AoKTsKICAgICBpbnQgc2VsSGVpZ2h0ID0gc2VsZWN0aW9uSGVpZ2h0KCk7CiAgICAgRmxv
YXRQb2ludCBsb2NhbE9yaWdpbihib3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZ
KTsKLSAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBjb25zdHJ1Y3RUZXh0
UnVuKHN0eWxlKSwgbG9jYWxPcmlnaW4sIHNlbEhlaWdodCwgYywgc3R5bGUtPmNvbG9yU3BhY2Uo
KSwgc1BvcywgZVBvcyk7CisgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwg
Y29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCksIGxvY2FsT3JpZ2luLCBzZWxIZWlnaHQsIGMs
IHN0eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOwogfQogCiAjaWYgUExBVEZPUk0oTUFD
KQpAQCAtMTAwMSw3ICsxMDAxLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNwZWxsaW5n
T3JHcmFtbQogICAgICAgICBpbnQgZGVsdGFZID0gcmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlw
cGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9t
KCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AoKTsKICAgICAgICAgaW50IHNlbEhlaWdo
dCA9IHNlbGVjdGlvbkhlaWdodCgpOwogICAgICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQoYm94
T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSk7Ci0gICAgICAgIFRleHRSdW4gcnVu
ID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSk7CisgICAgICAgIFRleHRSdW4gcnVuID0gY29uc3Ry
dWN0VGV4dFJ1bihzdHlsZSwgZm9udCk7CiAKICAgICAgICAgLy8gRklYTUU6IENvbnZlcnQgdGhl
IGRvY3VtZW50IG1hcmtlcnMgdG8gZmxvYXQgcmVjdHMuCiAgICAgICAgIEludFJlY3QgbWFya2Vy
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIHN0
YXJ0UG9pbnQsIHNlbEhlaWdodCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKTsKQEAgLTEw
NDYsNyArMTA0Niw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIK
IAogICAgIGludCBzUG9zID0gbWF4KG1hcmtlci5zdGFydE9mZnNldCgpIC0gbV9zdGFydCwgKHVu
c2lnbmVkKTApOwogICAgIGludCBlUG9zID0gbWluKG1hcmtlci5lbmRPZmZzZXQoKSAtIG1fc3Rh
cnQsICh1bnNpZ25lZCltX2xlbik7Ci0gICAgVGV4dFJ1biBydW4gPSBjb25zdHJ1Y3RUZXh0UnVu
KHN0eWxlKTsKKyAgICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQp
OwogICAgIC8vIEFsd2F5cyBjb21wdXRlIGFuZCBzdG9yZSB0aGUgcmVjdCBhc3NvY2lhdGVkIHdp
dGggdGhpcyBtYXJrZXIuIFRoZSBjb21wdXRlZCByZWN0IGlzIGluIGFic29sdXRlIGNvb3JkaW5h
dGVzLgogICAgIEludFJlY3QgbWFya2VyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxl
Y3Rpb25SZWN0Rm9yVGV4dChydW4sIEludFBvaW50KG1feCwgc2VsZWN0aW9uVG9wKCkpLCBzZWxI
ZWlnaHQsIHNQb3MsIGVQb3MpKTsKICAgICBtYXJrZXJSZWN0ID0gcmVuZGVyZXIoKS0+bG9jYWxU
b0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFya2VyUmVjdCkpLmVuY2xvc2luZ0JvdW5kaW5nQm94
KCk7CkBAIC0xMDczLDcgKzEwNzMsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0
Rm9yUmVwbGFjCiAKICAgICBpbnQgc1BvcyA9IG1heChtYXJrZXIuc3RhcnRPZmZzZXQoKSAtIG1f
c3RhcnQsICh1bnNpZ25lZCkwKTsKICAgICBpbnQgZVBvcyA9IG1pbihtYXJrZXIuZW5kT2Zmc2V0
KCkgLSBtX3N0YXJ0LCAodW5zaWduZWQpbV9sZW4pOwotICAgIFRleHRSdW4gcnVuID0gY29uc3Ry
dWN0VGV4dFJ1bihzdHlsZSk7CisgICAgVGV4dFJ1biBydW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0
eWxlLCBmb250KTsKICAgICBJbnRQb2ludCBzdGFydFBvaW50ID0gSW50UG9pbnQobV94LCB5KTsK
ICAgICAKICAgICAvLyBDb21wdXRlIGFuZCBzdG9yZSB0aGUgcmVjdCBhc3NvY2lhdGVkIHdpdGgg
dGhpcyBtYXJrZXIuCkBAIC0xMjMyLDggKzEyMzIsOCBAQCBpbnQgSW5saW5lVGV4dEJveDo6b2Zm
c2V0Rm9yUG9zaXRpb24oZmxvCiAKICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5kZXJUZXh0
KHJlbmRlcmVyKCkpOwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxlKG1fZmly
c3RMaW5lKTsKLSAgICBjb25zdCBGb250KiBmID0gJnN0eWxlLT5mb250KCk7Ci0gICAgaW50IG9m
ZnNldCA9IGYtPm9mZnNldEZvclBvc2l0aW9uKGNvbnN0cnVjdFRleHRSdW4oc3R5bGUpLCBsaW5l
T2Zmc2V0IC0gbG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOworICAgIGNvbnN0
IEZvbnQmIGZvbnQgPSBzdHlsZS0+Zm9udCgpOworICAgIGludCBvZmZzZXQgPSBmb250Lm9mZnNl
dEZvclBvc2l0aW9uKGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQpLCBsaW5lT2Zmc2V0IC0g
bG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogICAgIGlmIChibG9ja0lzSW5P
cHBvc2l0ZURpcmVjdGlvbiAmJiAoIW9mZnNldCB8fCBvZmZzZXQgPT0gbV9sZW4pKQogICAgICAg
ICByZXR1cm4gIW9mZnNldCA/IG1fbGVuIDogMDsKICAgICByZXR1cm4gb2Zmc2V0OwpAQCAtMTI1
MCwxMSArMTI1MCwxMSBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChp
CiAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKTsKICAgICBS
ZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHRleHQtPnN0eWxlKG1fZmlyc3RMaW5lKTsKICAgICBB
U1NFUlQoc3R5bGVUb1VzZSk7Ci0gICAgY29uc3QgRm9udCYgZiA9IHN0eWxlVG9Vc2UtPmZvbnQo
KTsKKyAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGVUb1VzZS0+Zm9udCgpOwogICAgIGludCBm
cm9tID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQgOiAwOwog
ICAgIGludCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9mZnNldCAt
IG1fc3RhcnQ7CiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gYWRkIHJpZ2h0QmVhcmluZyBo
ZXJlPwotICAgIHJldHVybiBmLnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0cnVjdFRleHRSdW4o
c3R5bGVUb1VzZSksIEludFBvaW50KGxvZ2ljYWxMZWZ0KCksIDApLCAwLCBmcm9tLCB0bykubWF4
WCgpOworICAgIHJldHVybiBmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0cnVjdFRleHRS
dW4oc3R5bGVUb1VzZSwgZm9udCksIEludFBvaW50KGxvZ2ljYWxMZWZ0KCksIDApLCAwLCBmcm9t
LCB0bykubWF4WCgpOwogfQogCiBib29sIElubGluZVRleHRCb3g6OmNvbnRhaW5zQ2FyZXRPZmZz
ZXQoaW50IG9mZnNldCkgY29uc3QKQEAgLTEyODEsNyArMTI4MSw3IEBAIGJvb2wgSW5saW5lVGV4
dEJveDo6Y29udGFpbnNDYXJldE9mZnNldCgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotVGV4dFJ1
biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiBzdHlsZSwgQnVm
ZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiBjaGFyYWN0ZXJzV2l0aEh5cGhlbikgY29uc3QKK1RleHRS
dW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSogc3R5bGUsIGNv
bnN0IEZvbnQmIGZvbnQsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogY2hhcmFjdGVyc1dpdGhI
eXBoZW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKIApAQCAtMTI4OSwxMCArMTI4OSwx
MCBAQCBUZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oCiAgICAgQVNTRVJU
KHRleHRSZW5kZXJlcik7CiAgICAgQVNTRVJUKHRleHRSZW5kZXJlci0+Y2hhcmFjdGVycygpKTsK
IAotICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCB0ZXh0UmVuZGVyZXItPmNoYXJh
Y3RlcnMoKSArIHN0YXJ0KCksIGxlbigpLCBjaGFyYWN0ZXJzV2l0aEh5cGhlbik7CisgICAgcmV0
dXJuIGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQsIHRleHRSZW5kZXJlci0+Y2hhcmFjdGVy
cygpICsgc3RhcnQoKSwgbGVuKCksIGNoYXJhY3RlcnNXaXRoSHlwaGVuKTsKIH0KIAotVGV4dFJ1
biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhl
biogY2hhcmFjdGVyc1dpdGhIeXBoZW4pIGNvbnN0CitUZXh0UnVuIElubGluZVRleHRCb3g6OmNv
bnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVu
KiBjaGFyYWN0ZXJzV2l0aEh5cGhlbikgY29uc3QKIHsKICAgICBBU1NFUlQoc3R5bGUpOwogCkBA
IC0xMzAyLDggKzEzMDIsMTEgQEAgVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0
UnVuKAogICAgIGlmIChjaGFyYWN0ZXJzV2l0aEh5cGhlbikKICAgICAgICAgYWRqdXN0Q2hhcmFj
dGVyc0FuZExlbmd0aEZvckh5cGhlbigqY2hhcmFjdGVyc1dpdGhIeXBoZW4sIHN0eWxlLCBjaGFy
YWN0ZXJzLCBsZW5ndGgpOwogCi0gICAgLy8gRklYTUU6IFJlbW92ZSBUZXh0UnVucyBhbGwtaW4t
b25lLWNvbnN0cnVjdG9yIGFuZCB1c2UgZXhwbGljaXQgc2V0dGVycyBoZXJlLgotICAgIHJldHVy
biBUZXh0UnVuKGNoYXJhY3RlcnMsIGxlbmd0aCwgdGV4dFJlbmRlcmVyLT5hbGxvd1RhYnMoKSwg
dGV4dFBvcygpLCBleHBhbnNpb24oKSwgZXhwYW5zaW9uQmVoYXZpb3IoKSwgZGlyZWN0aW9uKCks
IG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKTsKKyAgICBUZXh0UnVu
IHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIHRleHRSZW5kZXJlci0+YWxsb3dUYWJzKCksIHRleHRQ
b3MoKSwgZXhwYW5zaW9uKCksIGV4cGFuc2lvbkJlaGF2aW9yKCksIGRpcmVjdGlvbigpLCBtX2Rp
ck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSk7CisgICAgaWYgKHRleHRSdW5O
ZWVkc1JlbmRlcmluZ0NvbnRleHQoZm9udCkpCisgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250
ZXh0KFRleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUodGV4dFJlbmRlcmVyKSk7CisKKyAg
ICByZXR1cm4gcnVuOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDggKzk5
LDggQEAgcHJpdmF0ZToKICAgICBpbnQgc2VsZWN0aW9uQm90dG9tKCk7CiAgICAgaW50IHNlbGVj
dGlvbkhlaWdodCgpOwogCi0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxl
KiwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiA9IDApIGNvbnN0OwotICAgIFRleHRSdW4gY29u
c3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSosIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgQnVm
ZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiA9IDApIGNvbnN0OworICAgIFRleHRSdW4gY29uc3RydWN0
VGV4dFJ1bihSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBo
ZW4qID0gMCkgY29uc3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxl
KiwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgQnVmZmVyRm9yQXBwZW5k
aW5nSHlwaGVuKiA9IDApIGNvbnN0OwogCiBwdWJsaWM6CiAgICAgdmlydHVhbCBJbnRSZWN0IGNh
bGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KHgoKSwgeSgpLCB3aWR0
aCgpLCBoZWlnaHQoKSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBACiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGlu
Z3MuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiVGV4dFJ1blJlbmRlcmluZ0Nv
bnRleHQuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KIApAQCAtNDcwNyw3ICs0NzA3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN0
cmlwVHJhaWxpbmdTcGFjZShmbAogICAgICAgICBSZW5kZXJUZXh0KiB0ID0gdG9SZW5kZXJUZXh0
KHRyYWlsaW5nU3BhY2VDaGlsZCk7CiAgICAgICAgIGNvbnN0IFVDaGFyIHNwYWNlID0gJyAnOwog
ICAgICAgICBjb25zdCBGb250JiBmb250ID0gdC0+c3R5bGUoKS0+Zm9udCgpOyAvLyBGSVhNRTog
VGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCi0gICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250
LndpZHRoKFRleHRSdW4oJnNwYWNlLCAxKSk7CisgICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBm
b250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHQsIGZvbnQsICZzcGFjZSwg
MSwgdC0+c3R5bGUoKSkpOwogICAgICAgICBpbmxpbmVNYXggLT0gc3BhY2VXaWR0aCArIGZvbnQu
d29yZFNwYWNpbmcoKTsKICAgICAgICAgaWYgKGlubGluZU1pbiA+IGlubGluZU1heCkKICAgICAg
ICAgICAgIGlubGluZU1pbiA9IGlubGluZU1heDsKQEAgLTYzMTYsNyArNjMxNiw3IEBAIGlubGlu
ZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHMKICAgICAgICAgbV9yaWdodE9iamVj
dHNDb3VudC0tOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuQWxs
b3dUcmFpbGluZ0V4cGFuc2lvbihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCitUZXh0UnVuIFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYg
Zm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIFJlbmRlclN0eWxlKiBz
dHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uLCBUZXh0UnVuRmxhZ3Mg
ZmxhZ3MpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKIApAQCAtNjMyOSwxMyArNjMyOSwxNiBAQCBU
ZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuQWxsCiAgICAgICAgICAgICBkaXJl
Y3Rpb25hbE92ZXJyaWRlIHw9IHN0eWxlLT51bmljb2RlQmlkaSgpID09IE92ZXJyaWRlOwogICAg
IH0KIAotICAgIC8vIEZJWE1FOiBSZW1vdmUgVGV4dFJ1bnMgYWxsLWluLW9uZS1jb25zdHJ1Y3Rv
ciBhbmQgdXNlIGV4cGxpY2l0IHNldHRlcnMgaGVyZS4KLSAgICByZXR1cm4gVGV4dFJ1bihjaGFy
YWN0ZXJzLCBsZW5ndGgsIGZhbHNlLCAwLCAwLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5z
aW9uLCB0ZXh0RGlyZWN0aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRlKTsKKyAgICBUZXh0UnVuIHJ1
bihjaGFyYWN0ZXJzLCBsZW5ndGgsIGZhbHNlLCAwLCAwLCBleHBhbnNpb24sIHRleHREaXJlY3Rp
b24sIGRpcmVjdGlvbmFsT3ZlcnJpZGUpOworICAgIGlmICh0ZXh0UnVuTmVlZHNSZW5kZXJpbmdD
b250ZXh0KGZvbnQpKQorICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4dChUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlKGNvbnRleHQpKTsKKworICAgIHJldHVybiBydW47CiB9CiAK
LVRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5z
aW9uKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW5GbGFn
cyBmbGFncykKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2Jq
ZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBTdHJpbmcmIHN0cmluZywgUmVu
ZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRl
eHRSdW5GbGFncyBmbGFncykKIHsKLSAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bkFsbG93VHJh
aWxpbmdFeHBhbnNpb24oc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5nLmxlbmd0aCgpLCBzdHls
ZSwgZmxhZ3MpOworICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKGNvbnRleHQsIGZvbnQsIHN0
cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSwgc3R5bGUsIGV4cGFuc2lvbiwgZmxh
Z3MpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgJKHJldmlzaW9uIDg2OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRl
ICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQm94TGlzdC5oIgogI2luY2x1ZGUg
IlJvb3RJbmxpbmVCb3guaCIKKyNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8d3RmL093
blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCkBAIC0xNjksOCArMTcwLDEx
IEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9pZCBhcHBlbmRSdW5zRm9yT2JqZWN0KEJp
ZGlSdW5MaXN0PEJpZGlSdW4+JiwgaW50IHN0YXJ0LCBpbnQgZW5kLCBSZW5kZXJPYmplY3QqLCBJ
bmxpbmVCaWRpUmVzb2x2ZXImKTsKIAotICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRS
dW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKGNvbnN0IFN0cmluZyYsIFJlbmRlclN0eWxlKiwgVGV4
dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRSdW5GbGFncyk7Ci0gICAgc3RhdGljIFRleHRSdW4gY29u
c3RydWN0VGV4dFJ1bkFsbG93VHJhaWxpbmdFeHBhbnNpb24oY29uc3QgVUNoYXIqLCBpbnQgbGVu
Z3RoLCBSZW5kZXJTdHlsZSosIFRleHRSdW5GbGFncyA9IERlZmF1bHRUZXh0UnVuRmxhZ3MpOwor
ICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0
LCBjb25zdCBGb250JiwgY29uc3QgU3RyaW5nJiwgUmVuZGVyU3R5bGUqLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0
UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFu
c2lvbiwgVGV4dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRSdW5GbGFncyk7CisKKyAgICBzdGF0aWMg
VGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9u
dCYsIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgUmVuZGVyU3R5bGUqLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0
UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFu
c2lvbiwgVGV4dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRSdW5GbGFncyk7CiAKICAgICBDb2x1bW5J
bmZvKiBjb2x1bW5JbmZvKCkgY29uc3Q7CiAgICAgaW50IGNvbHVtbkdhcCgpIGNvbnN0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91
dC5jcHAJKHJldmlzaW9uIDg2OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDYgQEAKICNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJU
ZXh0QnJlYWtJdGVyYXRvci5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJUcmFp
bGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCIKICNpbmNsdWRlICJWZXJ0aWNhbFBvc2l0aW9uQ2Fj
aGUuaCIKICNpbmNsdWRlICJicmVha19saW5lcy5oIgpAQCAtNDgyLDcgKzQ4MSw4IEBAIHN0YXRp
YyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JUZXgKICAgICBpbnQgaHlwaGVuV2lkdGgg
PSAwOwogICAgIGlmIChzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4ocnVuLT5tX2JveCktPmhh
c0h5cGhlbigpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHlwaGVuU3RyaW5nID0g
cmVuZGVyZXItPnN0eWxlKCktPmh5cGhlblN0cmluZygpOwotICAgICAgICBoeXBoZW5XaWR0aCA9
IHJlbmRlcmVyLT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+Zm9udCgpLndpZHRoKFRl
eHRSdW4oaHlwaGVuU3RyaW5nLmNoYXJhY3RlcnMoKSwgaHlwaGVuU3RyaW5nLmxlbmd0aCgpKSk7
CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSByZW5kZXJlci0+c3R5bGUobGluZUluZm8uaXNG
aXJzdExpbmUoKSktPmZvbnQoKTsKKyAgICAgICAgaHlwaGVuV2lkdGggPSBmb250LndpZHRoKFJl
bmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyLCBmb250LCBoeXBoZW5TdHJpbmcu
c3RyaW5nKCksIHJlbmRlcmVyLT5zdHlsZSgpKSk7CiAgICAgfQogICAgIHJ1bi0+bV9ib3gtPnNl
dExvZ2ljYWxXaWR0aChyZW5kZXJlci0+d2lkdGgocnVuLT5tX3N0YXJ0LCBydW4tPm1fc3RvcCAt
IHJ1bi0+bV9zdGFydCwgeFBvcywgbGluZUluZm8uaXNGaXJzdExpbmUoKSwgJmZhbGxiYWNrRm9u
dHMsICZnbHlwaE92ZXJmbG93KSArIGh5cGhlbldpZHRoKTsKICAgICBpZiAoIWZhbGxiYWNrRm9u
dHMuaXNFbXB0eSgpKSB7CkBAIC0xNTc2LDcgKzE1NzYsMTAgQEAgc3RhdGljIGlubGluZSBmbG9h
dCB0ZXh0V2lkdGgoUmVuZGVyVGV4dAogewogICAgIGlmIChpc0ZpeGVkUGl0Y2ggfHwgKCFmcm9t
ICYmIGxlbiA9PSB0ZXh0LT50ZXh0TGVuZ3RoKCkpIHx8IHRleHQtPnN0eWxlKCktPmhhc1RleHRD
b21iaW5lKCkpCiAgICAgICAgIHJldHVybiB0ZXh0LT53aWR0aChmcm9tLCBsZW4sIGZvbnQsIHhQ
b3MpOwotICAgIHJldHVybiBmb250LndpZHRoKFRleHRSdW4odGV4dC0+Y2hhcmFjdGVycygpICsg
ZnJvbSwgbGVuLCAhY29sbGFwc2VXaGl0ZVNwYWNlLCB4UG9zKSk7CisgICAgVGV4dFJ1biBydW4g
PSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250LCB0ZXh0LT5jaGFyYWN0
ZXJzKCkgKyBmcm9tLCBsZW4sIHRleHQtPnN0eWxlKCkpOworICAgIHJ1bi5zZXRBbGxvd1RhYnMo
IWNvbGxhcHNlV2hpdGVTcGFjZSk7CisgICAgcnVuLnNldFhQb3MoeFBvcyk7CisgICAgcmV0dXJu
IGZvbnQud2lkdGgocnVuKTsKIH0KIAogc3RhdGljIHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVy
VGV4dCogdGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbGVJ
ZGVudGlmaWVyLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgaW50IG1pbmltdW1TdWZmaXhMZW5n
dGgsIGludCBsYXN0U3BhY2UsIGludCBwb3MsIGZsb2F0IHhQb3MsIGludCBhdmFpbGFibGVXaWR0
aCwgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlLCBpbnQgbGFzdFNw
YWNlV29yZFNwYWNpbmcsIElubGluZUl0ZXJhdG9yJiBsaW5lQnJlYWssIGludCBuZXh0QnJlYWth
YmxlLCBib29sJiBoeXBoZW5hdGVkKQpAQCAtMTU5Miw3ICsxNTk1LDcgQEAgc3RhdGljIHZvaWQg
dHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCogdAogICAgICAgICByZXR1cm47CiAKICAgICBjb25z
dCBBdG9taWNTdHJpbmcmIGh5cGhlblN0cmluZyA9IHRleHQtPnN0eWxlKCktPmh5cGhlblN0cmlu
ZygpOwotICAgIGludCBoeXBoZW5XaWR0aCA9IGZvbnQud2lkdGgoVGV4dFJ1bihoeXBoZW5TdHJp
bmcuY2hhcmFjdGVycygpLCBoeXBoZW5TdHJpbmcubGVuZ3RoKCkpKTsKKyAgICBpbnQgaHlwaGVu
V2lkdGggPSBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRleHQsIGZv
bnQsIGh5cGhlblN0cmluZy5zdHJpbmcoKSwgdGV4dC0+c3R5bGUoKSkpOwogCiAgICAgZmxvYXQg
bWF4UHJlZml4V2lkdGggPSBhdmFpbGFibGVXaWR0aCAtIHhQb3MgLSBoeXBoZW5XaWR0aCAtIGxh
c3RTcGFjZVdvcmRTcGFjaW5nOwogICAgIC8vIElmIHRoZSBtYXhpbXVtIHdpZHRoIGF2YWlsYWJs
ZSBmb3IgdGhlIHByZWZpeCBiZWZvcmUgdGhlIGh5cGhlbiBpcyBzbWFsbCwgdGhlbiBpdCBpcyB2
ZXJ5IHVubGlrZWx5CkBAIC0xNjAwLDcgKzE2MDMsMTEgQEAgc3RhdGljIHZvaWQgdHJ5SHlwaGVu
YXRpbmcoUmVuZGVyVGV4dCogdAogICAgIGlmIChtYXhQcmVmaXhXaWR0aCA8PSBmb250LnBpeGVs
U2l6ZSgpICogNSAvIDQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVuc2lnbmVkIHByZWZpeExl
bmd0aCA9IGZvbnQub2Zmc2V0Rm9yUG9zaXRpb24oVGV4dFJ1bih0ZXh0LT5jaGFyYWN0ZXJzKCkg
KyBsYXN0U3BhY2UsIHBvcyAtIGxhc3RTcGFjZSwgIWNvbGxhcHNlV2hpdGVTcGFjZSwgeFBvcyAr
IGxhc3RTcGFjZVdvcmRTcGFjaW5nKSwgbWF4UHJlZml4V2lkdGgsIGZhbHNlKTsKKyAgICBUZXh0
UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQt
PmNoYXJhY3RlcnMoKSArIGxhc3RTcGFjZSwgcG9zIC0gbGFzdFNwYWNlLCB0ZXh0LT5zdHlsZSgp
KTsKKyAgICBydW4uc2V0QWxsb3dUYWJzKCFjb2xsYXBzZVdoaXRlU3BhY2UpOworICAgIHJ1bi5z
ZXRYUG9zKHhQb3MgKyBsYXN0U3BhY2VXb3JkU3BhY2luZyk7CisKKyAgICB1bnNpZ25lZCBwcmVm
aXhMZW5ndGggPSBmb250Lm9mZnNldEZvclBvc2l0aW9uKHJ1biwgbWF4UHJlZml4V2lkdGgsIGZh
bHNlKTsKICAgICBpZiAocHJlZml4TGVuZ3RoIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1pbmlt
dW1QcmVmaXhMZW5ndGgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIwMzgsNyArMjA0NSw3IEBA
IElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjoKIAogICAgICAgICAgICAg
Ly8gTm9uLXplcm8gb25seSB3aGVuIGtlcm5pbmcgaXMgZW5hYmxlZCwgaW4gd2hpY2ggY2FzZSB3
ZSBtZWFzdXJlIHdvcmRzIHdpdGggdGhlaXIgdHJhaWxpbmcKICAgICAgICAgICAgIC8vIHNwYWNl
LCB0aGVuIHN1YnRyYWN0IGl0cyB3aWR0aC4KLSAgICAgICAgICAgIGZsb2F0IHdvcmRUcmFpbGlu
Z1NwYWNlV2lkdGggPSBmLnR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmIEtlcm5pbmcgPyBmLndpZHRo
KFRleHRSdW4oJnNwYWNlLCAxKSkgKyB3b3JkU3BhY2luZyA6IDA7CisgICAgICAgICAgICBmbG9h
dCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gZi50eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiBLZXJu
aW5nID8gZi53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHQsIGYsICZzcGFjZSwgMSwgc3R5bGUpKSAr
IHdvcmRTcGFjaW5nIDogMDsKIAogICAgICAgICAgICAgZmxvYXQgd3JhcFcgPSB3aWR0aC51bmNv
bW1pdHRlZFdpZHRoKCkgKyBpbmxpbmVMb2dpY2FsV2lkdGgoY3VycmVudC5tX29iaiwgIWFwcGxp
ZWRTdGFydFdpZHRoLCB0cnVlKTsKICAgICAgICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9IDA7CkBA
IC0yMDY3LDcgKzIwNzQsNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJCbG9jazo6TGluZUJyZWFr
ZXI6CiAKICAgICAgICAgICAgICAgICBpZiAoYyA9PSBzb2Z0SHlwaGVuICYmIGF1dG9XcmFwICYm
ICFoeXBoZW5XaWR0aCAmJiBzdHlsZS0+aHlwaGVucygpICE9IEh5cGhlbnNOb25lKSB7CiAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHlwaGVuU3RyaW5nID0gc3R5bGUt
Pmh5cGhlblN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBoeXBoZW5XaWR0aCA9IGYud2lk
dGgoVGV4dFJ1bihoeXBoZW5TdHJpbmcuY2hhcmFjdGVycygpLCBoeXBoZW5TdHJpbmcubGVuZ3Ro
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaHlwaGVuV2lkdGggPSBmLndpZHRoKGNvbnN0cnVj
dFRleHRSdW4odCwgZiwgaHlwaGVuU3RyaW5nLnN0cmluZygpLCBjdXJyZW50Lm1fb2JqLT5zdHls
ZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoLmFkZFVuY29tbWl0dGVkV2lkdGgoaHlw
aGVuV2lkdGgpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjM5NywxMiArMjQwNCwxMSBAQCB2
b2lkIFJlbmRlckJsb2NrOjpjaGVja0xpbmVzRm9yVGV4dE92ZXJmCiB7CiAgICAgLy8gRGV0ZXJt
aW5lIHRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzaXMgdXNpbmcgdGhlIGN1cnJlbnQgZm9udC4KICAg
ICAvLyBGSVhNRTogQ1NTMyBzYXlzIHRoaXMgaXMgY29uZmlndXJhYmxlLCBhbHNvIG5lZWQgdG8g
dXNlIDB4MDAyRSAoRlVMTCBTVE9QKSBpZiBob3Jpem9udGFsIGVsbGlwc2lzIGlzICJub3QgcmVu
ZGVyYWJsZSIKLSAgICBUZXh0UnVuIGVsbGlwc2lzUnVuKCZob3Jpem9udGFsRWxsaXBzaXMsIDEp
OworICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CiAgICAgREVGSU5FX1NU
QVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGVsbGlwc2lzU3RyLCAoJmhvcml6b250YWxFbGxpcHNp
cywgMSkpOwogICAgIGNvbnN0IEZvbnQmIGZpcnN0TGluZUZvbnQgPSBmaXJzdExpbmVTdHlsZSgp
LT5mb250KCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKLSAgICBp
bnQgZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA9IGZpcnN0TGluZUZvbnQud2lkdGgoZWxsaXBzaXNS
dW4pOwotICAgIGludCBlbGxpcHNpc1dpZHRoID0gKGZvbnQgPT0gZmlyc3RMaW5lRm9udCkgPyBm
aXJzdExpbmVFbGxpcHNpc1dpZHRoIDogZm9udC53aWR0aChlbGxpcHNpc1J1bik7CisgICAgaW50
IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVGb250LndpZHRoKGNvbnN0cnVjdFRl
eHRSdW4odGhpcywgZmlyc3RMaW5lRm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwgZmlyc3RM
aW5lU3R5bGUoKSkpOworICAgIGludCBlbGxpcHNpc1dpZHRoID0gKGZvbnQgPT0gZmlyc3RMaW5l
Rm9udCkgPyBmaXJzdExpbmVFbGxpcHNpc1dpZHRoIDogZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0
UnVuKHRoaXMsIGZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMsIDEsIHN0eWxlKCkpKTsKIAogICAg
IC8vIEZvciBMVFIgdGV4dCB0cnVuY2F0aW9uLCB3ZSB3YW50IHRvIGdldCB0aGUgcmlnaHQgZWRn
ZSBvZiBvdXIgcGFkZGluZyBib3gsIGFuZCB0aGVuIHdlIHdhbnQgdG8gc2VlCiAgICAgLy8gaWYg
dGhlIHJpZ2h0IGVkZ2Ugb2YgYSBsaW5lIGJveCBleGNlZWRzIHRoYXQuICBGb3IgUlRMLCB3ZSB1
c2UgdGhlIGxlZnQgZWRnZSBvZiB0aGUgcGFkZGluZyBib3ggYW5kCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAJKHJldmlzaW9uIDg2OTQy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlJlbmRlckNvbWJpbmVUZXh0LmgiCiAKLSNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVk
ZSAiUmVuZGVyQmxvY2suaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC05Myw3ICs5Myw3
IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KCkKICAgICBpZiAoc3R5bGUo
KS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgVGV4
dFJ1biBydW4gPSBUZXh0UnVuKFN0cmluZyh0ZXh0KCkpKTsKKyAgICBUZXh0UnVuIHJ1biA9IFJl
bmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIG9yaWdpbmFsRm9udCgpLCBTdHJpbmco
dGV4dCgpKSwgc3R5bGUoKSk7CiAgICAgRm9udERlc2NyaXB0aW9uIGRlc2NyaXB0aW9uID0gb3Jp
Z2luYWxGb250KCkuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZmxvYXQgZW1XaWR0aCA9IGRlc2Ny
aXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogdGV4dENvbWJpbmVNYXJnaW47CiAgICAgYm9vbCBzaG91
bGRVcGRhdGVGb250ID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDg2OTQyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw4IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2w6OnBhaW50T2JqZWMKIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZv
cmVncm91bmQpIHsKICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5ZWRGaWxlbmFtZSA9IGZp
bGVUZXh0VmFsdWUoKTsKLSAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1
bkFsbG93VHJhaWxpbmdFeHBhbnNpb24oZGlzcGxheWVkRmlsZW5hbWUsIHN0eWxlKCksIFJlc3Bl
Y3REaXJlY3Rpb24gfCBSZXNwZWN0RGlyZWN0aW9uT3ZlcnJpZGUpOworICAgICAgICBjb25zdCBG
b250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOworICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBj
b25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIGRpc3BsYXllZEZpbGVuYW1lLCBzdHlsZSgpLCBU
ZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uLCBSZXNwZWN0RGlyZWN0aW9uIHwgUmVzcGVj
dERpcmVjdGlvbk92ZXJyaWRlKTsKIAogICAgICAgICAvLyBEZXRlcm1pbmUgd2hlcmUgdGhlIGZp
bGVuYW1lIHNob3VsZCBiZSBwbGFjZWQKICAgICAgICAgaW50IGNvbnRlbnRMZWZ0ID0gdHggKyBi
b3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwpAQCAtMjMxLDcgKzIzMiw3IEBAIHZvaWQgUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWMKICAgICAgICAgaWYgKHN0eWxlKCktPmlz
TGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIHRleHRYID0gY29udGVudExlZnQg
KyBidXR0b25BbmRJY29uV2lkdGg7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRleHRYID0g
Y29udGVudExlZnQgKyBjb250ZW50V2lkdGgoKSAtIGJ1dHRvbkFuZEljb25XaWR0aCAtIHN0eWxl
KCktPmZvbnQoKS53aWR0aCh0ZXh0UnVuKTsKKyAgICAgICAgICAgIHRleHRYID0gY29udGVudExl
ZnQgKyBjb250ZW50V2lkdGgoKSAtIGJ1dHRvbkFuZEljb25XaWR0aCAtIGZvbnQud2lkdGgodGV4
dFJ1bik7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gbWF0Y2ggdGhlIGJ1dHRvbidzIGJhc2VsaW5l
CiAgICAgICAgIFJlbmRlckJ1dHRvbiogYnV0dG9uUmVuZGVyZXIgPSB0b1JlbmRlckJ1dHRvbiht
X2J1dHRvbi0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGludCB0ZXh0WSA9IGJ1dHRvblJlbmRlcmVy
LT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpLnkoKQpAQCAtMjQxLDcgKzI0Miw3IEBAIHZvaWQg
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWMKICAgICAgICAgcGFpbnRJbmZvLmNv
bnRleHQtPnNldEZpbGxDb2xvcihzdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJv
cGVydHlDb2xvciksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAgICAgIAogICAgICAgICAv
LyBEcmF3IHRoZSBmaWxlbmFtZQotICAgICAgICBwYWludEluZm8uY29udGV4dC0+ZHJhd0JpZGlU
ZXh0KHN0eWxlKCktPmZvbnQoKSwgdGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7Cisg
ICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3QmlkaVRleHQoZm9udCwgdGV4dFJ1biwgSW50
UG9pbnQodGV4dFgsIHRleHRZKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobV9maWxlQ2hvb3Nl
ci0+aWNvbigpKSB7CiAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hlcmUgdGhlIGljb24gc2hv
dWxkIGJlIHBsYWNlZApAQCAtMjcxLDEzICsyNzIsMTQgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbDo6Y29tcHV0ZVByZQogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRoaXMtPnN0eWxl
KCk7CiAgICAgQVNTRVJUKHN0eWxlKTsKIAorICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZS0+
Zm9udCgpOwogICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUtPndpZHRo
KCkudmFsdWUoKSA+IDApCiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9t
YXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBjb21wdXRlQ29udGVudEJveExvZ2ljYWxXaWR0aChz
dHlsZS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gRmlndXJlIG91
dCBob3cgYmlnIHRoZSBmaWxlbmFtZSBzcGFjZSBuZWVkcyB0byBiZSBmb3IgYSBnaXZlbiBudW1i
ZXIgb2YgY2hhcmFjdGVycwogICAgICAgICAvLyAodXNpbmcgIjAiIGFzIHRoZSBub21pbmFsIGNo
YXJhY3RlcikuCiAgICAgICAgIGNvbnN0IFVDaGFyIGNoID0gJzAnOwotICAgICAgICBmbG9hdCBj
aGFyV2lkdGggPSBzdHlsZS0+Zm9udCgpLndpZHRoKGNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWls
aW5nRXhwYW5zaW9uKFN0cmluZygmY2gsIDEpLCBzdHlsZSkpOworICAgICAgICBmbG9hdCBjaGFy
V2lkdGggPSBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgU3RyaW5nKCZj
aCwgMSksIHN0eWxlLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSk7CiAgICAgICAg
IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gKGludCljZWlsZihjaGFyV2lkdGggKiBkZWZh
dWx0V2lkdGhOdW1DaGFycyk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDg2OTQyKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKICNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCkBAIC05
MDIsMTAgKzkwMSwxMCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjphcHBseUxpbmVDbGFtcChG
CiAgICAgICAgIGludCB0b3RhbFdpZHRoOwogICAgICAgICBJbmxpbmVCb3gqIGFuY2hvckJveCA9
IGxhc3RMaW5lLT5sYXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKGFuY2hvckJveCAmJiBhbmNob3JC
b3gtPnJlbmRlcmVyKCktPnN0eWxlKCktPmlzTGluaygpKQotICAgICAgICAgICAgdG90YWxXaWR0
aCA9IGFuY2hvckJveC0+bG9naWNhbFdpZHRoKCkgKyBmb250LndpZHRoKFRleHRSdW4oZWxsaXBz
aXNBbmRTcGFjZSwgMikpOworICAgICAgICAgICAgdG90YWxXaWR0aCA9IGFuY2hvckJveC0+bG9n
aWNhbFdpZHRoKCkgKyBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgZWxs
aXBzaXNBbmRTcGFjZSwgMiwgc3R5bGUoKSkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
IGFuY2hvckJveCA9IDA7Ci0gICAgICAgICAgICB0b3RhbFdpZHRoID0gZm9udC53aWR0aChUZXh0
UnVuKCZob3Jpem9udGFsRWxsaXBzaXMsIDEpKTsKKyAgICAgICAgICAgIHRvdGFsV2lkdGggPSBm
b250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgJmhvcml6b250YWxFbGxpcHNp
cywgMSwgc3R5bGUoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gU2VlIGlmIHRoaXMgd2lk
dGggY2FuIGJlIGFjY29tbW9kYXRlZCBvbiB0aGUgbGFzdCB2aXNpYmxlIGxpbmUKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gODY5NDIpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlJlbmRlckxh
eWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKICNp
bmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKQEAgLTEw
NCw3ICsxMDMsNyBAQCBib29sIFJlbmRlckltYWdlOjpzZXRJbWFnZVNpemVGb3JBbHRUZXh0CiAg
ICAgLy8gd2UgaGF2ZSBhbiBhbHQgYW5kIHRoZSB1c2VyIG1lYW50IGl0IChpdHMgbm90IGEgdGV4
dCB3ZSBpbnZlbnRlZCkKICAgICBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAg
Y29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKLSAgICAgICAgSW50U2l6ZSB0ZXh0
U2l6ZShtaW4oZm9udC53aWR0aChUZXh0UnVuKG1fYWx0VGV4dCkpLCBtYXhBbHRUZXh0V2lkdGgp
LCBtaW4oZm9udC5mb250TWV0cmljcygpLmhlaWdodCgpLCBtYXhBbHRUZXh0SGVpZ2h0KSk7Cisg
ICAgICAgIEludFNpemUgdGV4dFNpemUobWluKGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV9hbHRUZXh0LCBzdHlsZSgpKSksIG1heEFsdFRleHRX
aWR0aCksIG1pbihmb250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCksIG1heEFsdFRleHRIZWlnaHQp
KTsKICAgICAgICAgaW1hZ2VTaXplID0gaW1hZ2VTaXplLmV4cGFuZGVkVG8odGV4dFNpemUpOwog
ICAgIH0KIApAQCAtMjg2LDcgKzI4NSw3IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFj
ZWQoUGFpbnRJbmYKIAogICAgICAgICAgICAgICAgIC8vIE9ubHkgZHJhdyB0aGUgYWx0IHRleHQg
aWYgaXQnbGwgZml0IHdpdGhpbiB0aGUgY29udGVudCBib3gsCiAgICAgICAgICAgICAgICAgLy8g
YW5kIG9ubHkgaWYgaXQgZml0cyBhYm92ZSB0aGUgZXJyb3IgaW1hZ2UuCi0gICAgICAgICAgICAg
ICAgVGV4dFJ1biB0ZXh0UnVuKHRleHQpOworICAgICAgICAgICAgICAgIFRleHRSdW4gdGV4dFJ1
biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQsIHN0eWxl
KCkpOwogICAgICAgICAgICAgICAgIGludCB0ZXh0V2lkdGggPSBmb250LndpZHRoKHRleHRSdW4p
OwogICAgICAgICAgICAgICAgIGlmIChlcnJvclBpY3R1cmVEcmF3bikgewogICAgICAgICAgICAg
ICAgICAgICBpZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYmIGZvbnRNZXRyaWNzLmhlaWdo
dCgpIDw9IGltYWdlWSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5jcHAJKHJldmlzaW9uIDg2OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw2IEBACiAjaW5jbHVk
ZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRlICJTZWxlY3RFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSA8
bWF0aC5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMTIwLDcgKzExOSw3IEBAIHZvaWQg
UmVuZGVyTGlzdEJveDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogCiAgICAgICAgICAgICBpZiAoIXRl
eHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFs
d2F5cyBMVFI/IENhbid0IHRleHQgZGlyZWN0aW9uIGFmZmVjdCB0aGUgd2lkdGg/Ci0gICAgICAg
ICAgICAgICAgZmxvYXQgdGV4dFdpZHRoID0gaXRlbUZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1
bkFsbG93VHJhaWxpbmdFeHBhbnNpb24odGV4dCwgc3R5bGUoKSkpOworICAgICAgICAgICAgICAg
IGZsb2F0IHRleHRXaWR0aCA9IGl0ZW1Gb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywg
aXRlbUZvbnQsIHRleHQsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJhaWxpbmdFeHBhbnNpb24p
KTsKICAgICAgICAgICAgICAgICB3aWR0aCA9IG1heCh3aWR0aCwgdGV4dFdpZHRoKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVt
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNs
dWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwpAQCAtMTI1Myw3ICsxMjUyLDggQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWlu
dEluZm8mIAogICAgIGlmIChtX3RleHQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBUZXh0UnVuIHRleHRSdW4obV90ZXh0KTsKKyAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUo
KS0+Zm9udCgpOworICAgIFRleHRSdW4gdGV4dFJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKHRoaXMsIGZvbnQsIG1fdGV4dCwgc3R5bGUoKSk7CiAKICAgICBHcmFwaGljc0NvbnRl
eHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsKICAgICBpZiAoIXN0eWxl
KCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKQEAgLTEyNjksNyArMTI2OSw3IEBAIHZv
aWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICBJbnRQb2ludCB0ZXh0
T3JpZ2luID0gSW50UG9pbnQobWFya2VyLngoKSwgbWFya2VyLnkoKSArIHN0eWxlKCktPmZvbnRN
ZXRyaWNzKCkuYXNjZW50KCkpOwogCiAgICAgaWYgKHR5cGUgPT0gQXN0ZXJpc2tzIHx8IHR5cGUg
PT0gRm9vdG5vdGVzKQotICAgICAgICBjb250ZXh0LT5kcmF3VGV4dChzdHlsZSgpLT5mb250KCks
IHRleHRSdW4sIHRleHRPcmlnaW4pOworICAgICAgICBjb250ZXh0LT5kcmF3VGV4dChmb250LCB0
ZXh0UnVuLCB0ZXh0T3JpZ2luKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gVGV4dCBpcyBub3Qg
YXJiaXRyYXJ5LiBXZSBjYW4ganVkZ2Ugd2hldGhlciBpdCdzIFJUTCBmcm9tIHRoZSBmaXJzdCBj
aGFyYWN0ZXIsCiAgICAgICAgIC8vIGFuZCB3ZSBvbmx5IG5lZWQgdG8gaGFuZGxlIHRoZSBkaXJl
Y3Rpb24gUmlnaHRUb0xlZnQgZm9yIG5vdy4KQEAgLTEyODAsMjIgKzEyODAsMjEgQEAgdm9pZCBS
ZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgICAgICAgICAgcmV2ZXJzZWRU
ZXh0Lmdyb3cobGVuZ3RoKTsKICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpCiAgICAgICAgICAgICAgICAgcmV2ZXJzZWRUZXh0W2xlbmd0aCAtIGkgLSAxXSA9IG1f
dGV4dFtpXTsKLSAgICAgICAgICAgIHRleHRSdW4gPSBUZXh0UnVuKHJldmVyc2VkVGV4dC5kYXRh
KCksIGxlbmd0aCk7CisgICAgICAgICAgICB0ZXh0UnVuLnNldFRleHQocmV2ZXJzZWRUZXh0LmRh
dGEoKSwgbGVuZ3RoKTsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBz
dHlsZSgpLT5mb250KCk7CiAgICAgICAgIGNvbnN0IFVDaGFyIHN1ZmZpeCA9IGxpc3RNYXJrZXJT
dWZmaXgodHlwZSwgbV9saXN0SXRlbS0+dmFsdWUoKSk7CiAgICAgICAgIGlmIChzdHlsZSgpLT5p
c0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgICAgIGludCB3aWR0aCA9IGZvbnQu
d2lkdGgodGV4dFJ1bik7Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3VGV4dChzdHlsZSgpLT5m
b250KCksIHRleHRSdW4sIHRleHRPcmlnaW4pOworICAgICAgICAgICAgY29udGV4dC0+ZHJhd1Rl
eHQoZm9udCwgdGV4dFJ1biwgdGV4dE9yaWdpbik7CiAgICAgICAgICAgICBVQ2hhciBzdWZmaXhT
cGFjZVsyXSA9IHsgc3VmZml4LCAnICcgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0
KHN0eWxlKCktPmZvbnQoKSwgVGV4dFJ1bihzdWZmaXhTcGFjZSwgMiksIHRleHRPcmlnaW4gKyBJ
bnRTaXplKHdpZHRoLCAwKSk7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGV4dChmb250LCBS
ZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBzdWZmaXhTcGFjZSwgMiwg
c3R5bGUoKSksIHRleHRPcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAwKSk7CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBVQ2hhciBzcGFjZVN1ZmZpeFsyXSA9IHsgJyAnLCBzdWZmaXggfTsK
LSAgICAgICAgICAgIFRleHRSdW4gc3BhY2VTdWZmaXhSdW4oc3BhY2VTdWZmaXgsIDIpOworICAg
ICAgICAgICAgVGV4dFJ1biBzcGFjZVN1ZmZpeFJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKHRoaXMsIGZvbnQsIHNwYWNlU3VmZml4LCAyLCBzdHlsZSgpKTsKICAgICAgICAgICAg
IGludCB3aWR0aCA9IGZvbnQud2lkdGgoc3BhY2VTdWZmaXhSdW4pOwotICAgICAgICAgICAgY29u
dGV4dC0+ZHJhd1RleHQoc3R5bGUoKS0+Zm9udCgpLCBzcGFjZVN1ZmZpeFJ1biwgdGV4dE9yaWdp
bik7Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3VGV4dChzdHlsZSgpLT5mb250KCksIHRleHRS
dW4sIHRleHRPcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAwKSk7CisgICAgICAgICAgICBjb250ZXh0
LT5kcmF3VGV4dChmb250LCBzcGFjZVN1ZmZpeFJ1biwgdGV4dE9yaWdpbik7CisgICAgICAgICAg
ICBjb250ZXh0LT5kcmF3VGV4dChmb250LCB0ZXh0UnVuLCB0ZXh0T3JpZ2luICsgSW50U2l6ZSh3
aWR0aCwgMCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTQ1NSw3ICsxNDU0LDcgQEAgdm9p
ZCBSZW5kZXJMaXN0TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTAogICAgICAgICAgICAgZWxzZSB7
CiAgICAgICAgICAgICAgICAgaW50IGl0ZW1XaWR0aCA9IGZvbnQud2lkdGgobV90ZXh0KTsKICAg
ICAgICAgICAgICAgICBVQ2hhciBzdWZmaXhTcGFjZVsyXSA9IHsgbGlzdE1hcmtlclN1ZmZpeCh0
eXBlLCBtX2xpc3RJdGVtLT52YWx1ZSgpKSwgJyAnIH07Ci0gICAgICAgICAgICAgICAgaW50IHN1
ZmZpeFNwYWNlV2lkdGggPSBmb250LndpZHRoKFRleHRSdW4oc3VmZml4U3BhY2UsIDIpKTsKKyAg
ICAgICAgICAgICAgICBpbnQgc3VmZml4U3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgc3VmZml4U3BhY2UsIDIsIHN0eWxlKCkp
KTsKICAgICAgICAgICAgICAgICBsb2dpY2FsV2lkdGggPSBpdGVtV2lkdGggKyBzdWZmaXhTcGFj
ZVdpZHRoOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNjc4LDcgKzE2
NzcsNyBAQCBJbnRSZWN0IFJlbmRlckxpc3RNYXJrZXI6OmdldFJlbGF0aXZlTWFyCiAgICAgICAg
ICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwogICAgICAgICAgICAgaW50
IGl0ZW1XaWR0aCA9IGZvbnQud2lkdGgobV90ZXh0KTsKICAgICAgICAgICAgIFVDaGFyIHN1ZmZp
eFNwYWNlWzJdID0geyBsaXN0TWFya2VyU3VmZml4KHR5cGUsIG1fbGlzdEl0ZW0tPnZhbHVlKCkp
LCAnICcgfTsKLSAgICAgICAgICAgIGludCBzdWZmaXhTcGFjZVdpZHRoID0gZm9udC53aWR0aChU
ZXh0UnVuKHN1ZmZpeFNwYWNlLCAyKSk7CisgICAgICAgICAgICBpbnQgc3VmZml4U3BhY2VXaWR0
aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwg
c3VmZml4U3BhY2UsIDIsIHN0eWxlKCkpKTsKICAgICAgICAgICAgIHJlbGF0aXZlUmVjdCA9IElu
dFJlY3QoMCwgMCwgaXRlbVdpZHRoICsgc3VmZml4U3BhY2VXaWR0aCwgZm9udC5mb250TWV0cmlj
cygpLmhlaWdodCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAJKHJldmlzaW9uIDg2OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVk
ZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4
dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKICNpbmNsdWRlICJWaXNp
YmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJicmVha19saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9B
bHdheXNJbmxpbmUuaD4KQEAgLTYzMSw3ICs2MzAsMTAgQEAgQUxXQVlTX0lOTElORSBmbG9hdCBS
ZW5kZXJUZXh0Ojp3aWR0aEZybwogICAgICAgICByZXR1cm4gdzsKICAgICB9CiAKLSAgICByZXR1
cm4gZi53aWR0aChUZXh0UnVuKHRleHQoKS0+Y2hhcmFjdGVycygpICsgc3RhcnQsIGxlbiwgYWxs
b3dUYWJzKCksIHhQb3MpLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKKyAgICBUZXh0
UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0X2Nhc3Q8UmVuZGVy
VGV4dCo+KHRoaXMpLCBmLCB0ZXh0KCktPmNoYXJhY3RlcnMoKSArIHN0YXJ0LCBsZW4sIHN0eWxl
KCkpOworICAgIHJ1bi5zZXRBbGxvd1RhYnMoYWxsb3dUYWJzKCkpOworICAgIHJ1bi5zZXRYUG9z
KHhQb3MpOworICAgIHJldHVybiBmLndpZHRoKHJ1biwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVy
Zmxvdyk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMoZmxvYXQgbGVh
ZFdpZHRoLApAQCAtNjc2LDEzICs2NzgsMTMgQEAgdm9pZCBSZW5kZXJUZXh0Ojp0cmltbWVkUHJl
ZldpZHRocyhmbG9hdAogICAgIEFTU0VSVChtX3RleHQpOwogICAgIFN0cmluZ0ltcGwmIHRleHQg
PSAqbV90ZXh0LmltcGwoKTsKICAgICBpZiAodGV4dFswXSA9PSAnICcgfHwgKHRleHRbMF0gPT0g
J1xuJyAmJiAhc3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpIHx8IHRleHRbMF0gPT0gJ1x0Jykg
ewotICAgICAgICBjb25zdCBGb250JiBmID0gc3R5bGUoKS0+Zm9udCgpOyAvLyBGSVhNRTogVGhp
cyBpZ25vcmVzIGZpcnN0LWxpbmUuCisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgp
LT5mb250KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICAgICAgaWYg
KHN0cmlwRnJvbnRTcGFjZXMpIHsKICAgICAgICAgICAgIGNvbnN0IFVDaGFyIHNwYWNlID0gJyAn
OwotICAgICAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGYud2lkdGgoVGV4dFJ1bigmc3BhY2Us
IDEpKTsKKyAgICAgICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250LndpZHRoKFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsICZzcGFjZSwgMSwgc3R5bGUoKSkpOwog
ICAgICAgICAgICAgbWF4VyAtPSBzcGFjZVdpZHRoOwogICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgIG1heFcgKz0gZi53b3JkU3BhY2luZygpOworICAgICAgICAgICAgbWF4VyArPSBmb250Lndv
cmRTcGFjaW5nKCk7CiAgICAgfQogCiAgICAgc3RyaXBGcm9udFNwYWNlcyA9IGNvbGxhcHNlV2hp
dGVTcGFjZSAmJiBtX2hhc0VuZFdTOwpAQCAtOTE1LDcgKzkxNywxMSBAQCB2b2lkIFJlbmRlclRl
eHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAgICAgICAgICAgICAgICAgICAgIG1fbWF4V2lk
dGggPSBjdXJyTWF4V2lkdGg7CiAgICAgICAgICAgICAgICAgY3Vyck1heFdpZHRoID0gMDsKICAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3Vyck1heFdpZHRoICs9IGYud2lk
dGgoVGV4dFJ1bih0eHQgKyBpLCAxLCBhbGxvd1RhYnMoKSwgbGVhZFdpZHRoICsgY3Vyck1heFdp
ZHRoKSk7CisgICAgICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3Ry
dWN0VGV4dFJ1bih0aGlzLCBmLCB0eHQgKyBpLCAxLCBzdHlsZSgpKTsKKyAgICAgICAgICAgICAg
ICBydW4uc2V0QWxsb3dUYWJzKGFsbG93VGFicygpKTsKKyAgICAgICAgICAgICAgICBydW4uc2V0
WFBvcyhsZWFkV2lkdGggKyBjdXJyTWF4V2lkdGgpOworCisgICAgICAgICAgICAgICAgY3Vyck1h
eFdpZHRoICs9IGYud2lkdGgocnVuKTsKICAgICAgICAgICAgICAgICBnbHlwaE92ZXJmbG93LnJp
Z2h0ID0gMDsKICAgICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFjaW5nID0gaXNTcGFjZSAmJiAh
cHJldmlvdXNDaGFyYWN0ZXJJc1NwYWNlICYmIGkgPT0gbGVuIC0gMTsKICAgICAgICAgICAgIH0K
QEAgLTEyODksOCArMTI5NSwxMiBAQCBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCBm
cm9tLCB1CiAgICAgICAgICAgICAgICAgdyA9IG1heExvZ2ljYWxXaWR0aCgpOwogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIHcgPSB3aWR0aEZyb21DYWNoZShmLCBmcm9tLCBsZW4sIHhQb3Ms
IGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwotICAgIH0gZWxzZQotICAgICAgICB3ID0g
Zi53aWR0aChUZXh0UnVuKHRleHQoKS0+Y2hhcmFjdGVycygpICsgZnJvbSwgbGVuLCBhbGxvd1Rh
YnMoKSwgeFBvcyksIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOworICAgIH0gZWxzZSB7
CisgICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oY29u
c3RfY2FzdDxSZW5kZXJUZXh0Kj4odGhpcyksIGYsIHRleHQoKS0+Y2hhcmFjdGVycygpICsgZnJv
bSwgbGVuLCBzdHlsZSgpKTsKKyAgICAgICAgcnVuLnNldEFsbG93VGFicyhhbGxvd1RhYnMoKSk7
CisgICAgICAgIHJ1bi5zZXRYUG9zKHhQb3MpOworICAgICAgICB3ID0gZi53aWR0aChydW4sIGZh
bGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOworICAgIH0KIAogICAgIHJldHVybiB3OwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
CShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYgQEAKICNpbmNsdWRlICJU
ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmgiCiAjaW5jbHVkZSAi
VGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1ZGUgPHd0Zi91bmlj
b2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CkBAIC01NDIsNyAr
NTQxLDggQEAgZmxvYXQgUmVuZGVyVGV4dENvbnRyb2w6OmdldEF2Z0NoYXJXaWR0aAogICAgICAg
ICByZXR1cm4gcm91bmRmKHN0eWxlKCktPmZvbnQoKS5wcmltYXJ5Rm9udCgpLT5hdmdDaGFyV2lk
dGgoKSk7CiAKICAgICBjb25zdCBVQ2hhciBjaCA9ICcwJzsKLSAgICByZXR1cm4gc3R5bGUoKS0+
Zm9udCgpLndpZHRoKGNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKFN0cmlu
ZygmY2gsIDEpLCBzdHlsZSgpKSk7CisgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZv
bnQoKTsKKyAgICByZXR1cm4gZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQs
IFN0cmluZygmY2gsIDEpLCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9u
KSk7CiB9CiAKIGZsb2F0IFJlbmRlclRleHRDb250cm9sOjpzY2FsZUVtVG9Vbml0cyhpbnQgeCkg
Y29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTEuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFRleHRSdW5SZW5kZXJpbmdDb250ZXh0X2gK
KyNkZWZpbmUgVGV4dFJ1blJlbmRlcmluZ0NvbnRleHRfaAorCisjaW5jbHVkZSAiVGV4dFJ1bi5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlbmRlck9iamVjdDsKK2NsYXNzIFJl
bmRlclNWR1Jlc291cmNlOworCitjbGFzcyBUZXh0UnVuUmVuZGVyaW5nQ29udGV4dCA6IHB1Ymxp
YyBUZXh0UnVuOjpBYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQgeworcHVibGljOgorICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFRleHRSdW5SZW5kZXJpbmdDb250ZXh0PiBjcmVhdGUoUmVuZGVyT2JqZWN0
KiBjb250ZXh0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dChjb250ZXh0KSk7CisgICAgfQorCisgICAgdmlydHVhbCBib29sIGlzV2Vi
Q29yZVJlbmRlcmluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBSZW5k
ZXJPYmplY3QqIGNvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQ7IH0KKworI2lmIEVO
QUJMRShTVkdfRk9OVFMpCisgICAgUmVuZGVyU1ZHUmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5nUmVz
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2U7IH0KKyAgICB2
b2lkIHNldEFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2UqIG9iamVjdCkg
eyBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2UgPSBvYmplY3Q7IH0KKworICAgIC8vIFRoZXNlIGFy
ZSBpbXBsZW1lbnRlZCBpbiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmNwcAorICAgIHZpcnR1YWwgdm9pZCBkcmF3VGV4dFVzaW5nU1ZHRm9udChjb25zdCBGb250Jiwg
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NW
R0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mKSBjb25zdDsKKyAgICB2aXJ0dWFsIGZs
b2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBp
bnQgZXh0cmFDaGFyc0F2YWlsYWJsZSwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBo
TmFtZSkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdEZvclRleHRV
c2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50
JiwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIHZpcnR1YWwgaW50IG9mZnNl
dEZvclBvc2l0aW9uRm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1
biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdDsKKyNl
bmRpZgorCitwcml2YXRlOgorICAgIFRleHRSdW5SZW5kZXJpbmdDb250ZXh0KFJlbmRlck9iamVj
dCogY29udGV4dCkKKyAgICAgICAgOiBtX2NvbnRleHQoY29udGV4dCkKKyNpZiBFTkFCTEUoU1ZH
X0ZPTlRTKQorICAgICAgICAsIG1fYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSgwKQorI2VuZGlmCisg
ICAgeworICAgIH0KKworICAgIFJlbmRlck9iamVjdCogbV9jb250ZXh0OworCisjaWYgRU5BQkxF
KFNWR19GT05UUykKKyAgICBSZW5kZXJTVkdSZXNvdXJjZSogbV9hY3RpdmVQYWludGluZ1Jlc291
cmNlOworI2VuZGlmCit9OworCitpbmxpbmUgYm9vbCB0ZXh0UnVuTmVlZHNSZW5kZXJpbmdDb250
ZXh0KGNvbnN0IEZvbnQmIGZvbnQpCit7CisgICAgLy8gT25seSBzYXZlIHRoZSBleHRyYSBkYXRh
IGlmIFNWRyBGb250cyBhcmUgdXNlZCwgd2hpY2ggZGVwZW5kIG9uIHRoZW0uCisgICAgLy8gRklY
TUU6IFNWRyBGb250cyB3b24ndCB3b3JrIGFzIHNlZ21lbnRlZCBmb250cyBhdCB0aGUgbW9tZW50
LCBpZiB0aGF0J3MgZml4ZWQsIHdlIG5lZWQgdG8gY2hlY2sgZm9yIHRoZW0gYXMgd2VsbCBiZWxv
dy4KKyAgICBBU1NFUlQoZm9udC5wcmltYXJ5Rm9udCgpKTsKKyAgICByZXR1cm4gZm9udC5wcmlt
YXJ5Rm9udCgpLT5pc1NWR0ZvbnQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVGV4dFJ1blJlbmRlcmluZ0NvbnRleHRfaApJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5jcHAJKHJldmlzaW9uIDg2
OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdBbGxJbk9uZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcyLDUgKzcyLDYgQEAKICNpbmNsdWRlICJTVkdUZXh0TGF5
b3V0RW5naW5lLmNwcCIKICNpbmNsdWRlICJTVkdUZXh0TGF5b3V0RW5naW5lQmFzZWxpbmUuY3Bw
IgogI2luY2x1ZGUgIlNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nLmNwcCIKKyNpbmNsdWRlICJT
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAiCiAjaW5jbHVkZSAiU1ZHVGV4dE1ldHJpY3Mu
Y3BwIgogI2luY2x1ZGUgIlNWR1RleHRRdWVyeS5jcHAiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDg2OTQy
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291
cmNlU29saWRDb2xvci5oIgogI2luY2x1ZGUgIlNWR0ltYWdlQnVmZmVyVG9vbHMuaCIKICNpbmNs
dWRlICJTVkdSb290SW5saW5lQm94LmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgorI2luY2x1ZGUg
IlRleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAg
LTY2LDcgKzY2LDcgQEAgaW50IFNWR0lubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uSQog
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHRSZW5kZXJlci0+c3R5bGUoKTsKICAgICBBU1NF
UlQoc3R5bGUpOwogCi0gICAgVGV4dFJ1biB0ZXh0UnVuKGNvbnN0cnVjdFRleHRSdW4oc3R5bGUs
IGZyYWdtZW50KSk7CisgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHls
ZSwgZnJhZ21lbnQpOwogCiAgICAgLy8gRXZlbnR1YWxseSBoYW5kbGUgbGVuZ3RoQWRqdXN0PSJz
cGFjaW5nQW5kR2x5cGhzIi4KICAgICAvLyBGSVhNRTogSGFuZGxlIHZlcnRpY2FsIHRleHQuCkBA
IC0zNzksMTQgKzM3OSwxNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnJlbGVhc2VQYWludGlu
Z1JlCiBib29sIFNWR0lubGluZVRleHRCb3g6OnByZXBhcmVHcmFwaGljc0NvbnRleHRGb3JUZXh0
UGFpbnRpbmcoR3JhcGhpY3NDb250ZXh0KiYgY29udGV4dCwgZmxvYXQgc2NhbGluZ0ZhY3Rvciwg
VGV4dFJ1biYgdGV4dFJ1biwgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIGJvb2wgYWNxdWly
ZWRSZXNvdXJjZSA9IGFjcXVpcmVQYWludGluZ1Jlc291cmNlKGNvbnRleHQsIHNjYWxpbmdGYWN0
b3IsIHBhcmVudCgpLT5yZW5kZXJlcigpLCBzdHlsZSk7CisgICAgaWYgKCFhY3F1aXJlZFJlc291
cmNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAg
IC8vIFNWRyBGb250cyBuZWVkIGFjY2VzcyB0byB0aGUgcGFpbnRpbmcgcmVzb3VyY2UgdXNlZCB0
byBkcmF3IHRoZSBjdXJyZW50IHRleHQgY2h1bmsuCi0gICAgaWYgKGFjcXVpcmVkUmVzb3VyY2Up
Ci0gICAgICAgIHRleHRSdW4uc2V0QWN0aXZlUGFpbnRpbmdSZXNvdXJjZShtX3BhaW50aW5nUmVz
b3VyY2UpOworICAgIFRleHRSdW46OkFic3RyYWN0UmVuZGVyaW5nQ29udGV4dCogYWJzdHJhY3RS
ZW5kZXJpbmdDb250ZXh0ID0gdGV4dFJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7CisgICAgaWYgKGFi
c3RyYWN0UmVuZGVyaW5nQ29udGV4dCAmJiBhYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQtPmlzV2Vi
Q29yZVJlbmRlcmluZ0NvbnRleHQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQqPihhYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQpLT5zZXRBY3RpdmVQYWludGlu
Z1Jlc291cmNlKG1fcGFpbnRpbmdSZXNvdXJjZSk7CiAjZW5kaWYKIAotICAgIHJldHVybiBhY3F1
aXJlZFJlc291cmNlOworICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIFNWR0lubGluZVRleHRC
b3g6OnJlc3RvcmVHcmFwaGljc0NvbnRleHRBZnRlclRleHRQYWludGluZyhHcmFwaGljc0NvbnRl
eHQqJiBjb250ZXh0LCBUZXh0UnVuJiB0ZXh0UnVuKQpAQCAtMzk0LDcgKzM5NywxMSBAQCB2b2lk
IFNWR0lubGluZVRleHRCb3g6OnJlc3RvcmVHcmFwaGljc0NvCiAgICAgcmVsZWFzZVBhaW50aW5n
UmVzb3VyY2UoY29udGV4dCwgLyogcGF0aCAqLzApOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykK
LSAgICB0ZXh0UnVuLnNldEFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoMCk7CisgICAgVGV4dFJ1bjo6
QWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0KiBhYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQgPSB0ZXh0
UnVuLnJlbmRlcmluZ0NvbnRleHQoKTsKKyAgICBpZiAoYWJzdHJhY3RSZW5kZXJpbmdDb250ZXh0
ICYmIGFic3RyYWN0UmVuZGVyaW5nQ29udGV4dC0+aXNXZWJDb3JlUmVuZGVyaW5nQ29udGV4dCgp
KQorICAgICAgICBzdGF0aWNfY2FzdDxUZXh0UnVuUmVuZGVyaW5nQ29udGV4dCo+KGFic3RyYWN0
UmVuZGVyaW5nQ29udGV4dCktPnNldEFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoMCk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTSh0ZXh0UnVuKTsKICNlbmRpZgogfQogCkBAIC00MTUsOSArNDIyLDgg
QEAgVGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UgogICAgICAgICAgICAg
ICAgICwgZGlyZWN0aW9uKCkKICAgICAgICAgICAgICAgICAsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5
bGUtPnZpc3VhbGx5T3JkZXJlZCgpIC8qIGRpcmVjdGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0jaWYg
RU5BQkxFKFNWR19GT05UUykKLSAgICBydW4uc2V0UmVmZXJlbmNpbmdSZW5kZXJPYmplY3QodGV4
dCk7Ci0jZW5kaWYKKyAgICBpZiAodGV4dFJ1bk5lZWRzUmVuZGVyaW5nQ29udGV4dChzdHlsZS0+
Zm9udCgpKSkKKyAgICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRleHQoVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQ6OmNyZWF0ZSh0ZXh0KSk7CiAKICAgICAvLyBXZSBoYW5kbGUgbGV0dGVyICYgd29y
ZCBzcGFjaW5nIG91cnNlbHZlcy4KICAgICBydW4uZGlzYWJsZVNwYWNpbmcoKTsKQEAgLTY1OSw3
ICs2NjUsNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dChHcmFwaGljCiAgICAg
fQogCiAgICAgLy8gRmFzdCBwYXRoIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGlvbiwganVzdCBkcmF3
IHRoZSB3aG9sZSBjaHVuayBwYXJ0IHVzaW5nIHRoZSByZWd1bGFyIHN0eWxlCi0gICAgVGV4dFJ1
biB0ZXh0UnVuKGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZyYWdtZW50KSk7CisgICAgVGV4dFJ1
biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZnJhZ21lbnQpOwogICAgIGlmICgh
aGFzU2VsZWN0aW9uIHx8IHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pIHsKICAgICAgICAg
cGFpbnRUZXh0V2l0aFNoYWRvd3MoY29udGV4dCwgc3R5bGUsIHRleHRSdW4sIGZyYWdtZW50LCAw
LCBmcmFnbWVudC5sZW5ndGgpOwogICAgICAgICByZXR1cm47CkBAIC02NzMsNyArNjc5LDcgQEAg
dm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpYwogICAgIGlmIChzdHlsZSAh
PSBzZWxlY3Rpb25TdHlsZSkKICAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxl
Q2hhbmdlZChwYXJlbnQoKS0+cmVuZGVyZXIoKSwgU3R5bGVEaWZmZXJlbmNlUmVwYWludCwgc2Vs
ZWN0aW9uU3R5bGUpOwogCi0gICAgVGV4dFJ1biBzZWxlY3Rpb25UZXh0UnVuKGNvbnN0cnVjdFRl
eHRSdW4oc2VsZWN0aW9uU3R5bGUsIGZyYWdtZW50KSk7CisgICAgVGV4dFJ1biBzZWxlY3Rpb25U
ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihzZWxlY3Rpb25TdHlsZSwgZnJhZ21lbnQpOwogICAg
IHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIHNlbGVjdGlvblN0eWxlLCB0ZXh0UnVuLCBm
cmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogCiAgICAgaWYgKHN0eWxlICE9
IHNlbGVjdGlvblN0eWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAJKHJldmlzaW9uIDg2
OTQyKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5l
U3BhY2luZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRlICJT
VkdSZW5kZXJTdHlsZS5oIgogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJTVkdG
b250RGF0YS5oIgogI2luY2x1ZGUgIlNWR0ZvbnRFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRm9u
dEZhY2VFbGVtZW50LmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsMTMg
KzQyLDI0IEBAIFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nOjpTVkdUZXh0TGF5b3UKIGZsb2F0
IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nOjpjYWxjdWxhdGVTVkdLZXJuaW5nKGJvb2wgaXNW
ZXJ0aWNhbFRleHQsIGNvbnN0IFNWR1RleHRNZXRyaWNzOjpHbHlwaCYgY3VycmVudEdseXBoKQog
ewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKCFtX2ZvbnQuaXNTVkdGb250KCkpIHsK
KyAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBtX2ZvbnQucHJpbWFyeUZvbnQo
KTsKKyAgICBpZiAoIWZvbnREYXRhLT5pc1NWR0ZvbnQoKSkgewogICAgICAgICBtX2xhc3RHbHlw
aC5pc1ZhbGlkID0gZmFsc2U7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFNWR0Zv
bnRFbGVtZW50KiBzdmdGb250ID0gbV9mb250LnN2Z0ZvbnQoKTsKLSAgICBBU1NFUlQoc3ZnRm9u
dCk7CisgICAgQVNTRVJUKGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7CisgICAgQVNTRVJUKGZv
bnREYXRhLT5pc1NWR0ZvbnQoKSk7CisKKyAgICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERh
dGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnREYXRhLT5mb250RGF0YSgp
KTsKKyAgICBTVkdGb250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlID0gc3ZnRm9udERhdGEtPnN2
Z0ZvbnRGYWNlRWxlbWVudCgpOworICAgIEFTU0VSVChzdmdGb250RmFjZSk7CisKKyAgICBTVkdG
b250RWxlbWVudCogc3ZnRm9udCA9IHN2Z0ZvbnRGYWNlLT5hc3NvY2lhdGVkRm9udEVsZW1lbnQo
KTsKKyAgICBpZiAoIXN2Z0ZvbnQpIHsKKyAgICAgICAgbV9sYXN0R2x5cGguaXNWYWxpZCA9IGZh
bHNlOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKICAgICBmbG9hdCBrZXJuaW5nID0gMDsK
ICAgICBpZiAobV9sYXN0R2x5cGguaXNWYWxpZCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJKHJldmlzaW9uIDg2OTQyKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJTVkdUZXh0TWV0cmljcy5oIgogCiAj
aW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5lVGV4dC5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNp
bmNsdWRlICJUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKQEAgLTg2LDkgKzg2LDggQEAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5k
ZXJTVgogICAgICAgICAgICAgICAgICwgc3R5bGUtPmRpcmVjdGlvbigpCiAgICAgICAgICAgICAg
ICAgLCBzdHlsZS0+dW5pY29kZUJpZGkoKSA9PSBPdmVycmlkZSAvKiBkaXJlY3Rpb25hbE92ZXJy
aWRlICovKTsKIAotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgcnVuLnNldFJlZmVyZW5jaW5n
UmVuZGVyT2JqZWN0KHRleHQpOwotI2VuZGlmCisgICAgaWYgKHRleHRSdW5OZWVkc1JlbmRlcmlu
Z0NvbnRleHQoc3R5bGUtPmZvbnQoKSkpCisgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0
KFRleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUodGV4dCkpOwogCiAgICAgLy8gV2UgaGFu
ZGxlIGxldHRlciAmIHdvcmQgc3BhY2luZyBvdXJzZWx2ZXMuCiAgICAgcnVuLmRpc2FibGVTcGFj
aW5nKCk7CkBAIC05OCw4ICs5Nyw3IEBAIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4o
UmVuZGVyU1YKIFNWR1RleHRNZXRyaWNzIFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVy
UmFuZ2UoUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCwgdW5zaWduZWQgcG9zaXRpb24sIHVuc2ln
bmVkIGxlbmd0aCkKIHsKICAgICBBU1NFUlQodGV4dCk7Ci0gICAgVGV4dFJ1biBydW4oY29uc3Ry
dWN0VGV4dFJ1bih0ZXh0LCB0ZXh0LT5jaGFyYWN0ZXJzKCksIHBvc2l0aW9uLCBsZW5ndGgpKTsK
LSAgICByZXR1cm4gU1ZHVGV4dE1ldHJpY3ModGV4dCwgcnVuLCBwb3NpdGlvbiwgdGV4dC0+dGV4
dExlbmd0aCgpKTsKKyAgICByZXR1cm4gU1ZHVGV4dE1ldHJpY3ModGV4dCwgY29uc3RydWN0VGV4
dFJ1bih0ZXh0LCB0ZXh0LT5jaGFyYWN0ZXJzKCksIHBvc2l0aW9uLCBsZW5ndGgpLCBwb3NpdGlv
biwgdGV4dC0+dGV4dExlbmd0aCgpKTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5j
cHAJKHJldmlzaW9uIDg2ODIzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHA6
ODY4MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJp
bmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgUmVzZWFyY2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFNW
R19GT05UUykKKyNpbmNsdWRlICJGb250LmgiCisKKyNpbmNsdWRlICJDU1NGb250U2VsZWN0b3Iu
aCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3Qu
aCIKKyNpbmNsdWRlICJSZW5kZXJTVkdJbmxpbmVUZXh0LmgiCisjaW5jbHVkZSAiUmVuZGVyU1ZH
UmVzb3VyY2VTb2xpZENvbG9yLmgiCisjaW5jbHVkZSAiU1ZHQWx0R2x5cGhFbGVtZW50LmgiCisj
aW5jbHVkZSAiU1ZHRm9udERhdGEuaCIKKyNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgorI2lu
Y2x1ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgorI2luY2x1ZGUgIlNWR0dseXBoRWxlbWVudC5o
IgorI2luY2x1ZGUgIlNWR0dseXBoTWFwLmgiCisjaW5jbHVkZSAiU1ZHTWlzc2luZ0dseXBoRWxl
bWVudC5oIgorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEu
aCIKKyNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiWE1MTmFtZXMuaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdURjo6VW5pY29kZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMg
aW5saW5lIGZsb2F0IGNvbnZlcnRFbVVuaXRUb1BpeGVsKGZsb2F0IGZvbnRTaXplLCBmbG9hdCB1
bml0c1BlckVtLCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBpZiAoIXVuaXRzUGVyRW0pCisgICAgICAg
IHJldHVybiAwLjBmOworCisgICAgcmV0dXJuIHZhbHVlICogZm9udFNpemUgLyB1bml0c1BlckVt
OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKGNvbnN0IFNW
R1JlbmRlclN0eWxlKiBzdHlsZSkKK3sKKyAgICByZXR1cm4gc3R5bGUtPndyaXRpbmdNb2RlKCkg
PT0gV01fVEJSTCB8fCBzdHlsZS0+d3JpdGluZ01vZGUoKSA9PSBXTV9UQjsgCit9CisKK3N0YXRp
YyBpbmxpbmUgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JG
b250RGF0YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIFNWR0ZvbnRGYWNlRWxlbWVu
dComIGZvbnRGYWNlLCBTVkdGb250RWxlbWVudComIGZvbnQpCit7CisgICAgQVNTRVJUKGZvbnRE
YXRhLT5pc0N1c3RvbUZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnREYXRhLT5pc1NWR0ZvbnQoKSk7
CisKKyAgICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25z
dCBTVkdGb250RGF0YSo+KGZvbnREYXRhLT5zdmdGb250RGF0YSgpKTsKKworICAgIGZvbnRGYWNl
ID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgpOworICAgIEFTU0VSVChmb250RmFj
ZSk7CisKKyAgICBmb250ID0gZm9udEZhY2UtPmFzc29jaWF0ZWRGb250RWxlbWVudCgpOworICAg
IHJldHVybiBzdmdGb250RGF0YTsKK30KKworLy8gSGVscGVyIGNsYXNzIHRvIHdhbGsgYSB0ZXh0
IHJ1bi4gTG9va3VwIGEgU1ZHR2x5cGggZm9yIGVhY2ggY2hhcmFjdGVyCisvLyAtIGFsc28gcmVz
cGVjdGluZyBwb3NzaWJseSBkZWZpbmVkIGxpZ2F0dXJlcyAtIGFuZCBpbnZva2UgYSBjYWxsYmFj
ayBmb3IgZWFjaCBmb3VuZCBnbHlwaC4KK3RlbXBsYXRlPHR5cGVuYW1lIFNWR1RleHRSdW5EYXRh
Pgorc3RydWN0IFNWR1RleHRSdW5XYWxrZXIgeworICAgIHR5cGVkZWYgYm9vbCAoKlNWR1RleHRS
dW5XYWxrZXJDYWxsYmFjaykoY29uc3QgU1ZHR2x5cGgmLCBTVkdUZXh0UnVuRGF0YSYpOworICAg
IHR5cGVkZWYgdm9pZCAoKlNWR1RleHRSdW5XYWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjaykoY29u
c3QgVGV4dFJ1biYsIFNWR1RleHRSdW5EYXRhJik7CisKKyAgICBTVkdUZXh0UnVuV2Fsa2VyKGNv
bnN0IFNWR0ZvbnREYXRhKiBmb250RGF0YSwgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBT
VkdUZXh0UnVuRGF0YSYgZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgIFNWR1RleHRSdW5XYWxr
ZXJDYWxsYmFjayBjYWxsYmFjaywgU1ZHVGV4dFJ1bldhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNr
IG1pc3NpbmdHbHlwaENhbGxiYWNrKQorICAgICAgICA6IG1fZm9udERhdGEoZm9udERhdGEpCisg
ICAgICAgICwgbV9mb250RWxlbWVudChmb250RWxlbWVudCkKKyAgICAgICAgLCBtX3dhbGtlckRh
dGEoZGF0YSkKKyAgICAgICAgLCBtX3dhbGtlckNhbGxiYWNrKGNhbGxiYWNrKQorICAgICAgICAs
IG1fd2Fsa2VyTWlzc2luZ0dseXBoQ2FsbGJhY2sobWlzc2luZ0dseXBoQ2FsbGJhY2spCisgICAg
eworICAgIH0KKworICAgIHZvaWQgd2Fsayhjb25zdCBUZXh0UnVuJiBydW4sIGJvb2wgaXNWZXJ0
aWNhbFRleHQsIGNvbnN0IFN0cmluZyYgbGFuZ3VhZ2UsIGludCBmcm9tLCBpbnQgdG8pCisgICAg
eworICAgICAgICBBU1NFUlQoMCA8PSBmcm9tICYmIGZyb20gPD0gdG8gJiYgdG8gLSBmcm9tIDw9
IHJ1bi5sZW5ndGgoKSk7CisKKyAgICAgICAgY29uc3QgU3RyaW5nIHRleHQgPSBGb250Ojpub3Jt
YWxpemVTcGFjZXMocnVuLmRhdGEoZnJvbSksIHRvIC0gZnJvbSk7CisgICAgICAgIFZlY3RvcjxT
VkdHbHlwaDo6QXJhYmljRm9ybT4gY2hhcnMoY2hhcmFjdGVyc1dpdGhBcmFiaWNGb3JtKHRleHQs
IHJ1bi5ydGwoKSkpOworCisgICAgICAgIFNWR0dseXBoIGlkZW50aWZpZXI7CisgICAgICAgIGJv
b2wgZm91bmRHbHlwaCA9IGZhbHNlOworICAgICAgICBpbnQgY2hhcmFjdGVyTG9va3VwUmFuZ2U7
CisgICAgICAgIGludCBlbmRPZlNjYW5SYW5nZSA9IHRvICsgbV93YWxrZXJEYXRhLmV4dHJhQ2hh
cnNBdmFpbGFibGU7CisKKyAgICAgICAgYm9vbCBoYXZlQWx0R2x5cGggPSBmYWxzZTsKKyAgICAg
ICAgU1ZHR2x5cGggYWx0R2x5cGhJZGVudGlmaWVyOworICAgICAgICBpZiAoUmVuZGVyT2JqZWN0
KiByZW5kZXJPYmplY3QgPSBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSkgeworICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHJlbmRlck9iamVjdC0+cGFyZW50
KCk7CisgICAgICAgICAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOworICAgICAgICAgICAgaWYg
KHBhcmVudFJlbmRlcmVyLT5ub2RlKCkgJiYgcGFyZW50UmVuZGVyZXItPm5vZGUoKS0+aGFzVGFn
TmFtZShTVkdOYW1lczo6YWx0R2x5cGhUYWcpKSB7CisgICAgICAgICAgICAgICAgU1ZHR2x5cGhF
bGVtZW50KiBnbHlwaEVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdBbHRHbHlwaEVsZW1lbnQqPihw
YXJlbnRSZW5kZXJlci0+bm9kZSgpKS0+Z2x5cGhFbGVtZW50KCk7CisgICAgICAgICAgICAgICAg
aWYgKGdseXBoRWxlbWVudCkgeworICAgICAgICAgICAgICAgICAgICBoYXZlQWx0R2x5cGggPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICBhbHRHbHlwaElkZW50aWZpZXIgPSBnbHlwaEVsZW1l
bnQtPmJ1aWxkR2x5cGhJZGVudGlmaWVyKCk7CisgICAgICAgICAgICAgICAgICAgIGFsdEdseXBo
SWRlbnRpZmllci5pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYWx0R2x5cGhJ
ZGVudGlmaWVyLnVuaWNvZGVTdHJpbmdMZW5ndGggPSB0byAtIGZyb207CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZm9yIChpbnQgaSA9IGZy
b207IGkgPCB0bzsgKytpKSB7CisgICAgICAgICAgICAvLyBJZiBjaGFyYWN0ZXJMb29rdXBSYW5n
ZSBpcyA+IDAsIHRoZW4gdGhlIGZvbnQgZGVmaW5lZCBsaWdhdHVyZXMgKGxlbmd0aCBvZiB1bmlj
b2RlIHByb3BlcnR5IHZhbHVlID4gMSkuCisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGNoZWNr
IHdoZXRlciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgJiB0aGUgbmV4dCBjaGFyYWN0ZXIgZGVmaW5l
IGEgbGlnYXR1cmUuIFRoaXMgbmVlZHMgdG8gYmUKKyAgICAgICAgICAgIC8vIGV4dGVuZGVkIHRv
IHRoZSBuLXRoIG5leHQgY2hhcmFjdGVyICh3aGVyZSBuIGlzICdjaGFyYWN0ZXJMb29rdXBSYW5n
ZScpLCB0byBjaGVjayBmb3IgYW55IHBvc3NpYmxlIGxpZ2F0dXJlLgorICAgICAgICAgICAgY2hh
cmFjdGVyTG9va3VwUmFuZ2UgPSBlbmRPZlNjYW5SYW5nZSAtIGk7CisKKyAgICAgICAgICAgIFN0
cmluZyBsb29rdXBTdHJpbmcgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmRhdGEoaSksIGNo
YXJhY3Rlckxvb2t1cFJhbmdlKTsKKworICAgICAgICAgICAgVmVjdG9yPFNWR0dseXBoPiBnbHlw
aHM7CisgICAgICAgICAgICBpZiAoaGF2ZUFsdEdseXBoKQorICAgICAgICAgICAgICAgIGdseXBo
cy5hcHBlbmQoYWx0R2x5cGhJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX2ZvbnRFbGVtZW50LT5nZXRHbHlwaElkZW50aWZpZXJzRm9yU3RyaW5nKGxvb2t1
cFN0cmluZywgZ2x5cGhzKTsKKworICAgICAgICAgICAgVmVjdG9yPFNWR0dseXBoPjo6aXRlcmF0
b3IgaXQgPSBnbHlwaHMuYmVnaW4oKTsKKyAgICAgICAgICAgIFZlY3RvcjxTVkdHbHlwaD46Oml0
ZXJhdG9yIGVuZCA9IGdseXBocy5lbmQoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9y
ICg7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSAqaXQ7
CisgICAgICAgICAgICAgICAgaWYgKGlkZW50aWZpZXIuaXNWYWxpZCAmJiBpc0NvbXBhdGlibGVH
bHlwaChpZGVudGlmaWVyLCBpc1ZlcnRpY2FsVGV4dCwgbGFuZ3VhZ2UsIGNoYXJzLCBpLCBpICsg
aWRlbnRpZmllci51bmljb2RlU3RyaW5nTGVuZ3RoKSkgeworICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoY2hhcmFjdGVyTG9va3VwUmFuZ2UgPiAwKTsKKyAgICAgICAgICAgICAgICAgICAgaSAr
PSBpZGVudGlmaWVyLnVuaWNvZGVTdHJpbmdMZW5ndGggLSAxOworICAgICAgICAgICAgICAgICAg
ICBtX3dhbGtlckRhdGEuY2hhcnNDb25zdW1lZCArPSBpZGVudGlmaWVyLnVuaWNvZGVTdHJpbmdM
ZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIG1fd2Fsa2VyRGF0YS5nbHlwaE5hbWUgPSBpZGVu
dGlmaWVyLmdseXBoTmFtZTsKKworICAgICAgICAgICAgICAgICAgICBmb3VuZEdseXBoID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICAgICAgU1ZHR2x5cGhFbGVtZW50Ojppbmhlcml0VW5zcGVjaWZp
ZWRBdHRyaWJ1dGVzKGlkZW50aWZpZXIsIG1fZm9udERhdGEpOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmICghZm91bmRHbHlwaCkgeworICAgICAgICAgICAgICAgICsrbV93YWxrZXJEYXRhLmNoYXJz
Q29uc3VtZWQ7CisgICAgICAgICAgICAgICAgaWYgKFNWR01pc3NpbmdHbHlwaEVsZW1lbnQqIGVs
ZW1lbnQgPSBtX2ZvbnRFbGVtZW50LT5maXJzdE1pc3NpbmdHbHlwaEVsZW1lbnQoKSkgeworICAg
ICAgICAgICAgICAgICAgICAvLyA8bWlzc2luZy1nbHlwaD4gZWxlbWVudCBzdXBwb3J0CisgICAg
ICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxkR2VuZXJp
Y0dseXBoSWRlbnRpZmllcihlbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgU1ZHR2x5cGhF
bGVtZW50Ojppbmhlcml0VW5zcGVjaWZpZWRBdHRyaWJ1dGVzKGlkZW50aWZpZXIsIG1fZm9udERh
dGEpOworICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyLmlzVmFsaWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRv
IHN5c3RlbSBmb250IGZhbGxiYWNrCisgICAgICAgICAgICAgICAgICAgIFRleHRSdW4gc3ViUnVu
KHJ1bik7CisgICAgICAgICAgICAgICAgICAgIHN1YlJ1bi5zZXRUZXh0KHN1YlJ1bi5kYXRhKGkp
LCAxKTsKKworICAgICAgICAgICAgICAgICAgICAoKm1fd2Fsa2VyTWlzc2luZ0dseXBoQ2FsbGJh
Y2spKHN1YlJ1biwgbV93YWxrZXJEYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoISgq
bV93YWxrZXJDYWxsYmFjaykoaWRlbnRpZmllciwgbV93YWxrZXJEYXRhKSkKKyAgICAgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICAgICAgZm91bmRHbHlwaCA9IGZhbHNlOworICAgICAgICB9
CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBtX2ZvbnREYXRhOwor
ICAgIFNWR0ZvbnRFbGVtZW50KiBtX2ZvbnRFbGVtZW50OworICAgIFNWR1RleHRSdW5EYXRhJiBt
X3dhbGtlckRhdGE7CisgICAgU1ZHVGV4dFJ1bldhbGtlckNhbGxiYWNrIG1fd2Fsa2VyQ2FsbGJh
Y2s7CisgICAgU1ZHVGV4dFJ1bldhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNrIG1fd2Fsa2VyTWlz
c2luZ0dseXBoQ2FsbGJhY2s7Cit9OworCisvLyBDYWxsYmFjayAmIGRhdGEgc3RydWN0dXJlcyB0
byBjb21wdXRlIHRoZSB3aWR0aCBvZiB0ZXh0IHVzaW5nIFNWRyBGb250cworc3RydWN0IFNWR1Rl
eHRSdW5XYWxrZXJNZWFzdXJlZExlbmd0aERhdGEgeworICAgIGludCBhdDsKKyAgICBpbnQgZnJv
bTsKKyAgICBpbnQgdG87CisgICAgaW50IGV4dHJhQ2hhcnNBdmFpbGFibGU7CisgICAgaW50IGNo
YXJzQ29uc3VtZWQ7CisgICAgU3RyaW5nIGdseXBoTmFtZTsKKworICAgIGZsb2F0IHNjYWxlOwor
ICAgIGZsb2F0IGxlbmd0aDsKKyAgICBjb25zdCBGb250KiBmb250OworfTsKKworc3RhdGljIGJv
b2wgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udENhbGxiYWNrKGNvbnN0IFNWR0dseXBoJiBpZGVudGlm
aWVyLCBTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhJiBkYXRhKQoreworICAgIGlm
IChkYXRhLmF0ID49IGRhdGEuZnJvbSAmJiBkYXRhLmF0IDwgZGF0YS50bykKKyAgICAgICAgZGF0
YS5sZW5ndGggKz0gaWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVggKiBkYXRhLnNjYWxlOwor
CisgICAgZGF0YS5hdCsrOworICAgIHJldHVybiBkYXRhLmF0IDwgZGF0YS50bzsKK30KKworc3Rh
dGljIHZvaWQgZmxvYXRXaWR0aE1pc3NpbmdHbHlwaENhbGxiYWNrKGNvbnN0IFRleHRSdW4mIHJ1
biwgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0YSYgZGF0YSkKK3sKKyAgICAvLyBI
YW5kbGUgc3lzdGVtIGZvbnQgZmFsbGJhY2sKKyAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2Ny
aXB0aW9uKGRhdGEuZm9udC0+Zm9udERlc2NyaXB0aW9uKCkpOworICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRGYW1pbHkoRm9udEZhbWlseSgpKTsKKyAgICBGb250IGZvbnQoZm9udERlc2NyaXB0aW9u
LCAwLCAwKTsgLy8gc3BhY2luZyBoYW5kbGVkIGJ5IFNWRyB0ZXh0IGNvZGUuCisgICAgZm9udC51
cGRhdGUoZGF0YS5mb250LT5mb250U2VsZWN0b3IoKSk7CisKKyAgICBkYXRhLmxlbmd0aCArPSBm
b250LndpZHRoKHJ1bik7Cit9CisKKworU1ZHRm9udEVsZW1lbnQqIEZvbnQ6OnN2Z0ZvbnQoKSBj
b25zdAoreyAKKyAgICBpZiAoIWlzU1ZHRm9udCgpKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7CisgICAgU1ZHRm9udEZhY2VFbGVtZW50
KiBmb250RmFjZUVsZW1lbnQgPSAwOworICAgIGlmIChzdmdGb250QW5kRm9udEZhY2VFbGVtZW50
Rm9yRm9udERhdGEocHJpbWFyeUZvbnQoKSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCkp
CisgICAgICAgIHJldHVybiBmb250RWxlbWVudDsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKwor
c3RhdGljIGZsb2F0IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udChjb25zdCBGb250
KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGludCBleHRyYUNoYXJzQXZhaWxhYmxlLCBpbnQg
ZnJvbSwgaW50IHRvLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKQorewor
ICAgIGludCBuZXdGcm9tID0gdG8gPiBmcm9tID8gZnJvbSA6IHRvOworICAgIGludCBuZXdUbyA9
IHRvID4gZnJvbSA/IHRvIDogZnJvbTsKKworICAgIGZyb20gPSBuZXdGcm9tOworICAgIHRvID0g
bmV3VG87CisKKyAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAwOworICAgIFNWR0Zv
bnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKKworICAgIGlmIChjb25zdCBTVkdG
b250RGF0YSogZm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEo
Zm9udC0+cHJpbWFyeUZvbnQoKSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCkpIHsKKyAg
ICAgICAgaWYgKCFmb250RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybiAwLjBmOworCisgICAg
ICAgIFNWR1RleHRSdW5XYWxrZXJNZWFzdXJlZExlbmd0aERhdGEgZGF0YTsKKworICAgICAgICBk
YXRhLmZvbnQgPSBmb250OworICAgICAgICBkYXRhLmF0ID0gZnJvbTsKKyAgICAgICAgZGF0YS5m
cm9tID0gZnJvbTsKKyAgICAgICAgZGF0YS50byA9IHRvOworICAgICAgICBkYXRhLmV4dHJhQ2hh
cnNBdmFpbGFibGUgPSBleHRyYUNoYXJzQXZhaWxhYmxlOworICAgICAgICBkYXRhLmNoYXJzQ29u
c3VtZWQgPSAwOworICAgICAgICBkYXRhLnNjYWxlID0gY29udmVydEVtVW5pdFRvUGl4ZWwoZm9u
dC0+c2l6ZSgpLCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSwgMS4wZik7CisgICAgICAg
IGRhdGEubGVuZ3RoID0gMC4wZjsKKworICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7CisgICAgICAg
IGJvb2wgaXNWZXJ0aWNhbFRleHQgPSBmYWxzZTsgLy8gSG9sZHMgdHJ1ZSBmb3IgSFRNTCB0ZXh0
CisKKyAgICAgICAgLy8gVE9ETzogbGFuZ3VhZ2UgbWF0Y2hpbmcgJiBzdmcgZ2x5cGhzIHNob3Vs
ZCBiZSBwb3NzaWJsZSBmb3IgSFRNTCB0ZXh0LCB0b28uCisgICAgICAgIGlmIChSZW5kZXJPYmpl
Y3QqIHJlbmRlck9iamVjdCA9IHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpKSB7CisgICAg
ICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcmVuZGVyT2JqZWN0LT5wYXJl
bnQoKTsKKyAgICAgICAgICAgIEFTU0VSVChwYXJlbnRSZW5kZXJlcik7CisgICAgICAgICAgICBp
c1ZlcnRpY2FsVGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShwYXJlbnRSZW5kZXJlci0+c3R5
bGUoKS0+c3ZnU3R5bGUoKSk7CisKKyAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KHBhcmVudFJlbmRlcmVyLT5ub2RlKCkpKQorICAg
ICAgICAgICAgICAgIGxhbmd1YWdlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjps
YW5nQXR0cik7CisgICAgICAgIH0KKworICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyPFNWR1RleHRS
dW5XYWxrZXJNZWFzdXJlZExlbmd0aERhdGE+IHJ1bldhbGtlcihmb250RGF0YSwgZm9udEVsZW1l
bnQsIGRhdGEsIGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnRDYWxsYmFjaywgZmxvYXRXaWR0aE1pc3Np
bmdHbHlwaENhbGxiYWNrKTsKKyAgICAgICAgcnVuV2Fsa2VyLndhbGsocnVuLCBpc1ZlcnRpY2Fs
VGV4dCwgbGFuZ3VhZ2UsIGZyb20sIHRvKTsKKyAgICAgICAgY2hhcnNDb25zdW1lZCA9IGRhdGEu
Y2hhcnNDb25zdW1lZDsKKyAgICAgICAgZ2x5cGhOYW1lID0gZGF0YS5nbHlwaE5hbWU7CisgICAg
ICAgIHJldHVybiBkYXRhLmxlbmd0aDsKKyAgICB9CisKKyAgICByZXR1cm4gMC4wZjsKK30KKwor
ZmxvYXQgRm9udDo6ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiBydW4pIGNv
bnN0Cit7CisgICAgaW50IGNoYXJzQ29uc3VtZWQ7CisgICAgU3RyaW5nIGdseXBoTmFtZTsKKyAg
ICByZXR1cm4gZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgMCwg
MCwgcnVuLmxlbmd0aCgpLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOworfQorCitmbG9hdCBG
b250OjpmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGV4dHJh
Q2hhcnNBdmFpbGFibGUsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlz
LCBydW4sIGV4dHJhQ2hhcnNBdmFpbGFibGUsIDAsIHJ1bi5sZW5ndGgoKSwgY2hhcnNDb25zdW1l
ZCwgZ2x5cGhOYW1lKTsKK30KKworLy8gQ2FsbGJhY2sgJiBkYXRhIHN0cnVjdHVyZXMgdG8gZHJh
dyB0ZXh0IHVzaW5nIFNWRyBGb250cworc3RydWN0IFNWR1RleHRSdW5XYWxrZXJEcmF3VGV4dERh
dGEgeworICAgIGludCBleHRyYUNoYXJzQXZhaWxhYmxlOworICAgIGludCBjaGFyc0NvbnN1bWVk
OworICAgIFN0cmluZyBnbHlwaE5hbWU7CisgICAgVmVjdG9yPFNWR0dseXBoPiBnbHlwaElkZW50
aWZpZXJzOworICAgIFZlY3RvcjxVQ2hhcj4gZmFsbGJhY2tDaGFyYWN0ZXJzOworfTsKKworc3Rh
dGljIGJvb2wgZHJhd1RleHRVc2luZ1NWR0ZvbnRDYWxsYmFjayhjb25zdCBTVkdHbHlwaCYgaWRl
bnRpZmllciwgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSYgZGF0YSkKK3sKKyAgICBkYXRh
LmdseXBoSWRlbnRpZmllcnMuYXBwZW5kKGlkZW50aWZpZXIpOworICAgIHJldHVybiB0cnVlOwor
fQorCitzdGF0aWMgdm9pZCBkcmF3VGV4dE1pc3NpbmdHbHlwaENhbGxiYWNrKGNvbnN0IFRleHRS
dW4mIHJ1biwgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSYgZGF0YSkKK3sKKyAgICBBU1NF
UlQocnVuLmxlbmd0aCgpID09IDEpOworICAgIGRhdGEuZ2x5cGhJZGVudGlmaWVycy5hcHBlbmQo
U1ZHR2x5cGgoKSk7CisgICAgZGF0YS5mYWxsYmFja0NoYXJhY3RlcnMuYXBwZW5kKHJ1blswXSk7
Cit9CisKK3ZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3sK
KyAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAwOworICAgIFNWR0ZvbnRGYWNlRWxl
bWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKKworICAgIGlmIChjb25zdCBTVkdGb250RGF0YSog
Zm9udERhdGEgPSBzdmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEocHJpbWFyeUZv
bnQoKSwgZm9udEZhY2VFbGVtZW50LCBmb250RWxlbWVudCkpIHsKKyAgICAgICAgaWYgKCFmb250
RWxlbWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBTVkdUZXh0UnVuV2Fsa2Vy
RHJhd1RleHREYXRhIGRhdGE7CisgICAgICAgIEZsb2F0UG9pbnQgY3VycmVudFBvaW50ID0gcG9p
bnQ7CisgICAgICAgIGZsb2F0IHNjYWxlID0gY29udmVydEVtVW5pdFRvUGl4ZWwoc2l6ZSgpLCBm
b250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSwgMS4wZik7CisKKyAgICAgICAgUmVuZGVyU1ZH
UmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UgPSBydW4uYWN0aXZlUGFpbnRpbmdSZXNv
dXJjZSgpOworCisgICAgICAgIC8vIElmIHJlbmRlck9iamVjdCBpcyBub3Qgc2V0LCB3ZSdyZSBk
ZWFsaW5nIGZvciBIVE1MIHRleHQgcmVuZGVyZWQgdXNpbmcgU1ZHIEZvbnRzLgorICAgICAgICBp
ZiAoIXJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpKSB7CisgICAgICAgICAgICBBU1NFUlQo
IWFjdGl2ZVBhaW50aW5nUmVzb3VyY2UpOworCisgICAgICAgICAgICAvLyBUT0RPOiBXZSdyZSBv
bmx5IHN1cHBvcnRpbmcgc2ltcGxlIGZpbGxlZCBIVE1MIHRleHQgc28gZmFyLgorICAgICAgICAg
ICAgUmVuZGVyU1ZHUmVzb3VyY2VTb2xpZENvbG9yKiBzb2xpZFBhaW50aW5nUmVzb3VyY2UgPSBS
ZW5kZXJTVkdSZXNvdXJjZTo6c2hhcmVkU29saWRQYWludGluZ1Jlc291cmNlKCk7CisgICAgICAg
ICAgICBzb2xpZFBhaW50aW5nUmVzb3VyY2UtPnNldENvbG9yKGNvbnRleHQtPmZpbGxDb2xvcigp
KTsKKworICAgICAgICAgICAgYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSA9IHNvbGlkUGFpbnRpbmdS
ZXNvdXJjZTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVChhY3RpdmVQYWludGluZ1Jlc291
cmNlKTsKKworICAgICAgICBpbnQgY2hhcnNDb25zdW1lZDsKKyAgICAgICAgU3RyaW5nIGdseXBo
TmFtZTsKKyAgICAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IGZhbHNlOworICAgICAgICBmbG9h
dCB4U3RhcnRPZmZzZXQgPSBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQodGhpcywg
cnVuLCAwLCBydW4ucnRsKCkgPyB0byA6IDAsIHJ1bi5ydGwoKSA/IHJ1bi5sZW5ndGgoKSA6IGZy
b20sIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7CisgICAgICAgIEZsb2F0UG9pbnQgZ2x5cGhP
cmlnaW47CisKKyAgICAgICAgU3RyaW5nIGxhbmd1YWdlOworCisgICAgICAgIC8vIFRPRE86IGxh
bmd1YWdlIG1hdGNoaW5nICYgc3ZnIGdseXBocyBzaG91bGQgYmUgcG9zc2libGUgZm9yIEhUTUwg
dGV4dCwgdG9vLgorICAgICAgICBSZW5kZXJPYmplY3QqIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0
ID0gcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCk7CisgICAgICAgIFJlbmRlck9iamVjdCog
cmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnQgPSByZWZlcmVuY2luZ1JlbmRlck9iamVjdCA/
IHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0LT5wYXJlbnQoKSA6IDA7CisgICAgICAgIFJlbmRlclN0
eWxlKiByZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudFN0eWxlID0gMDsKKyAgICAgICAgaWYg
KHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KSB7CisgICAgICAgICAgICBBU1NFUlQocmVmZXJlbmNp
bmdSZW5kZXJPYmplY3RQYXJlbnQpOworICAgICAgICAgICAgcmVmZXJlbmNpbmdSZW5kZXJPYmpl
Y3RQYXJlbnRTdHlsZSA9IHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50LT5zdHlsZSgpOwor
CisgICAgICAgICAgICBpc1ZlcnRpY2FsVGV4dCA9IGlzVmVydGljYWxXcml0aW5nTW9kZShyZWZl
cmVuY2luZ1JlbmRlck9iamVjdFBhcmVudFN0eWxlLT5zdmdTdHlsZSgpKTsgICAgCisgICAgICAg
ICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihy
ZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudC0+bm9kZSgpKSkKKyAgICAgICAgICAgICAgICBs
YW5ndWFnZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFpc1ZlcnRpY2FsVGV4dCkgeworICAgICAgICAgICAgZ2x5
cGhPcmlnaW4uc2V0WChmb250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblgoKSAqIHNjYWxlKTsKKyAg
ICAgICAgICAgIGdseXBoT3JpZ2luLnNldFkoZm9udERhdGEtPmhvcml6b250YWxPcmlnaW5ZKCkg
KiBzY2FsZSk7CisgICAgICAgIH0KKworICAgICAgICBkYXRhLmV4dHJhQ2hhcnNBdmFpbGFibGUg
PSAwOworICAgICAgICBkYXRhLmNoYXJzQ29uc3VtZWQgPSAwOworCisgICAgICAgIFNWR1RleHRS
dW5XYWxrZXI8U1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YT4gcnVuV2Fsa2VyKGZvbnREYXRh
LCBmb250RWxlbWVudCwgZGF0YSwgZHJhd1RleHRVc2luZ1NWR0ZvbnRDYWxsYmFjaywgZHJhd1Rl
eHRNaXNzaW5nR2x5cGhDYWxsYmFjayk7CisgICAgICAgIHJ1bldhbGtlci53YWxrKHJ1biwgaXNW
ZXJ0aWNhbFRleHQsIGxhbmd1YWdlLCBmcm9tLCB0byk7CisKKyAgICAgICAgUmVuZGVyU1ZHUmVz
b3VyY2VNb2RlIHJlc291cmNlTW9kZSA9IGNvbnRleHQtPnRleHREcmF3aW5nTW9kZSgpID09IFRl
eHRNb2RlU3Ryb2tlID8gQXBwbHlUb1N0cm9rZU1vZGUgOiBBcHBseVRvRmlsbE1vZGU7CisKKyAg
ICAgICAgdW5zaWduZWQgbnVtR2x5cGhzID0gZGF0YS5nbHlwaElkZW50aWZpZXJzLnNpemUoKTsK
KyAgICAgICAgdW5zaWduZWQgZmFsbGJhY2tDaGFyYWN0ZXJJbmRleCA9IDA7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBudW1HbHlwaHM7ICsraSkgeworICAgICAgICAgICAgY29u
c3QgU1ZHR2x5cGgmIGlkZW50aWZpZXIgPSBkYXRhLmdseXBoSWRlbnRpZmllcnNbcnVuLnJ0bCgp
ID8gbnVtR2x5cGhzIC0gaSAtIDEgOiBpXTsKKyAgICAgICAgICAgIGlmIChpZGVudGlmaWVyLmlz
VmFsaWQpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBhcmJpdGFyeSBTVkcg
Y29udGVudCBhcyBnbHlwaCAoY3VycmVudGx5IGxpbWl0ZWQgdG8gPGdseXBoIGQ9Ii4uLiI+IHNp
dHVhdGlvbnMpLgorICAgICAgICAgICAgICAgIGlmICghaWRlbnRpZmllci5wYXRoRGF0YS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGVTYXZlciBz
dGF0ZVNhdmVyKCpjb250ZXh0KTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoaXNWZXJ0aWNh
bFRleHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdseXBoT3JpZ2luLnNldFgoaWRlbnRp
Zmllci52ZXJ0aWNhbE9yaWdpblggKiBzY2FsZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBn
bHlwaE9yaWdpbi5zZXRZKGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5ZICogc2NhbGUpOworICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgQWZmaW5lVHJhbnNmb3Jt
IGdseXBoUGF0aFRyYW5zZm9ybTsKKyAgICAgICAgICAgICAgICAgICAgZ2x5cGhQYXRoVHJhbnNm
b3JtLnRyYW5zbGF0ZSh4U3RhcnRPZmZzZXQgKyBjdXJyZW50UG9pbnQueCgpICsgZ2x5cGhPcmln
aW4ueCgpLCBjdXJyZW50UG9pbnQueSgpICsgZ2x5cGhPcmlnaW4ueSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgZ2x5cGhQYXRoVHJhbnNmb3JtLnNjYWxlKHNjYWxlLCAtc2NhbGUpOworCisgICAg
ICAgICAgICAgICAgICAgIFBhdGggZ2x5cGhQYXRoID0gaWRlbnRpZmllci5wYXRoRGF0YTsKKyAg
ICAgICAgICAgICAgICAgICAgZ2x5cGhQYXRoLnRyYW5zZm9ybShnbHlwaFBhdGhUcmFuc2Zvcm0p
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChhY3RpdmVQYWludGluZ1Jlc291cmNlLT5hcHBs
eVJlc291cmNlKHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50LCByZWZlcmVuY2luZ1JlbmRl
ck9iamVjdFBhcmVudFN0eWxlLCBjb250ZXh0LCByZXNvdXJjZU1vZGUpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAocmVmZXJlbmNpbmdSZW5kZXJPYmplY3QpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBSZW5kZXJTVkdJbmxpbmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1Jl
bmRlclNWR0lubGluZVRleHQocmVmZXJlbmNpbmdSZW5kZXJPYmplY3QpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZVRoaWNrbmVzcyhjb250ZXh0LT5zdHJv
a2VUaGlja25lc3MoKSAqIHRleHRSZW5kZXJlci0+c2NhbGluZ0ZhY3RvcigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVBhaW50aW5n
UmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNlKHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50
LCBjb250ZXh0LCByZXNvdXJjZU1vZGUsICZnbHlwaFBhdGgpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGlzVmVydGljYWxU
ZXh0KQorICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9pbnQubW92ZSgwLjBmLCBpZGVudGlm
aWVyLnZlcnRpY2FsQWR2YW5jZVkgKiBzY2FsZSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICBjdXJyZW50UG9pbnQubW92ZShpZGVudGlmaWVyLmhvcml6b250YWxB
ZHZhbmNlWCAqIHNjYWxlLCAwLjBmKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gSGFuZGxlIHN5c3RlbSBmb250IGZhbGxiYWNrCisgICAgICAgICAgICAgICAgRm9u
dERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihtX2ZvbnREZXNjcmlwdGlvbik7CisgICAgICAg
ICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlseShGb250RmFtaWx5KCkpOworICAgICAg
ICAgICAgICAgIEZvbnQgZm9udChmb250RGVzY3JpcHRpb24sIDAsIDApOyAvLyBzcGFjaW5nIGhh
bmRsZWQgYnkgU1ZHIHRleHQgY29kZS4KKyAgICAgICAgICAgICAgICBmb250LnVwZGF0ZShmb250
U2VsZWN0b3IoKSk7CisKKyAgICAgICAgICAgICAgICBUZXh0UnVuIGZhbGxiYWNrQ2hhcmFjdGVy
UnVuKHJ1bik7CisgICAgICAgICAgICAgICAgZmFsbGJhY2tDaGFyYWN0ZXJSdW4uc2V0VGV4dCgm
ZGF0YS5mYWxsYmFja0NoYXJhY3RlcnNbcnVuLnJ0bCgpID8gZGF0YS5mYWxsYmFja0NoYXJhY3Rl
cnMuc2l6ZSgpIC0gZmFsbGJhY2tDaGFyYWN0ZXJJbmRleCAtIDEgOiBmYWxsYmFja0NoYXJhY3Rl
ckluZGV4XSwgMSk7CisgICAgICAgICAgICAgICAgZm9udC5kcmF3VGV4dChjb250ZXh0LCBmYWxs
YmFja0NoYXJhY3RlclJ1biwgY3VycmVudFBvaW50KTsKKworICAgICAgICAgICAgICAgIGlmIChp
c1ZlcnRpY2FsVGV4dCkKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBvaW50Lm1vdmUoMC4w
ZiwgZm9udC53aWR0aChmYWxsYmFja0NoYXJhY3RlclJ1bikpOworICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFBvaW50Lm1vdmUoZm9udC53aWR0aChmYWxs
YmFja0NoYXJhY3RlclJ1biksIDAuMGYpOworCisgICAgICAgICAgICAgICAgZmFsbGJhY2tDaGFy
YWN0ZXJJbmRleCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCitGbG9h
dFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvclRleHRVc2luZ1NWR0ZvbnQoY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKK3sKKyAgICBpbnQgY2hhcnNDb25zdW1lZDsKKyAgICBTdHJpbmcgZ2x5cGhO
YW1lOworCisgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBmbG9hdFdpZHRoT2ZTdWJT
dHJpbmdVc2luZ1NWR0ZvbnQodGhpcywgcnVuLCAwLCBydW4ucnRsKCkgPyB0byA6IDAsIHJ1bi5y
dGwoKSA/IHJ1bi5sZW5ndGgoKSA6IGZyb20sIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSksCisg
ICAgICAgICAgICAgICAgICAgICBwb2ludC55KCksIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5n
U1ZHRm9udCh0aGlzLCBydW4sIDAsIGZyb20sIHRvLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUp
LCBoZWlnaHQpOworfQorCitpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdT
VkdGb250KGNvbnN0IFRleHRSdW4mLCBmbG9hdCwgYm9vbCkgY29uc3QKK3sKKyAgICAvLyBUT0RP
OiBGaXggdGV4dCBzZWxlY3Rpb24gd2hlbiBIVE1MIHRleHQgaXMgZHJhd24gdXNpbmcgYSBTVkcg
Rm9udAorICAgIC8vIFdlIG5lZWQgdG8gaW50ZWdyYXRlIHRoZSBTVkcgdGV4dCBzZWxlY3Rpb24g
Y29kZSBpbiB0aGUgb2Zmc2V0Rm9yUG9zaXRpb24oKSBmcmFtZXdvcmsuCisgICAgLy8gVGhpcyB3
aWxsIGFsc28gZml4IGEgbWFqb3IgaXNzdWUsIHRoYXQgU1ZHIFRleHQgY29kZSBjYW4ndCBzZWxl
Y3QgYXJhYmljIHN0cmluZ3MgcHJvcGVybHkuCisgICAgcmV0dXJuIDA7Cit9CisKK30KKworI2Vu
ZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJp
bmdDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gODY4MjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDggTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmln
aHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAtMjAx
MS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzcsNyArMzcs
NyBAQAogI2luY2x1ZGUgIlNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdO
YW1lcy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5o
IgorI2luY2x1ZGUgIlRleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiWE1MTmFt
ZXMuaCIKIAogdXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKQEAgLTU5LDEwICs1OSwxMSBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgaXNWZXJ0aWNhbFdyaXRpbmdNb2RlCiAKIHN0YXRpYyBpbmxp
bmUgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0
YShjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIFNWR0ZvbnRGYWNlRWxlbWVudComIGZv
bnRGYWNlLCBTVkdGb250RWxlbWVudComIGZvbnQpCiB7CisgICAgQVNTRVJUKGZvbnREYXRhKTsK
ICAgICBBU1NFUlQoZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsKICAgICBBU1NFUlQoZm9udERh
dGEtPmlzU1ZHRm9udCgpKTsKIAotICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9
IHN0YXRpY19jYXN0PGNvbnN0IFNWR0ZvbnREYXRhKj4oZm9udERhdGEtPnN2Z0ZvbnREYXRhKCkp
OworICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0
IFNWR0ZvbnREYXRhKj4oZm9udERhdGEtPmZvbnREYXRhKCkpOwogCiAgICAgZm9udEZhY2UgPSBz
dmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CiAgICAgQVNTRVJUKGZvbnRGYWNlKTsK
QEAgLTcxLDYgKzcyLDMxIEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0Zv
bnQKICAgICByZXR1cm4gc3ZnRm9udERhdGE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgUmVuZGVyT2Jq
ZWN0KiBmaXJzdFBhcmVudFJlbmRlcmVyRm9yTm9uVGV4dE5vZGUoUmVuZGVyT2JqZWN0KiByZW5k
ZXJlcikKK3sKKyAgICBBU1NFUlQocmVuZGVyZXIpOworICAgIFJlbmRlck9iamVjdCogbmV3UmVu
ZGVyZXIgPSByZW5kZXJlci0+aXNUZXh0KCkgPyByZW5kZXJlci0+cGFyZW50KCkgOiByZW5kZXJl
cjsKKyAgICBBU1NFUlQobmV3UmVuZGVyZXItPm5vZGUoKSk7CisgICAgQVNTRVJUKG5ld1JlbmRl
cmVyLT5ub2RlKCktPmlzRWxlbWVudE5vZGUoKSk7CisgICAgcmV0dXJuIG5ld1JlbmRlcmVyOwor
fQorCitzdGF0aWMgaW5saW5lIFJlbmRlck9iamVjdCogcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RG
cm9tUnVuKGNvbnN0IFRleHRSdW4mIHJ1bikKK3sKKyAgICBUZXh0UnVuOjpBYnN0cmFjdFJlbmRl
cmluZ0NvbnRleHQqIGFic3RyYWN0UmVuZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250
ZXh0KCk7CisgICAgaWYgKCFhYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQgfHwgIWFic3RyYWN0UmVu
ZGVyaW5nQ29udGV4dC0+aXNXZWJDb3JlUmVuZGVyaW5nQ29udGV4dCgpKQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQqPihh
YnN0cmFjdFJlbmRlcmluZ0NvbnRleHQpLT5jb250ZXh0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
UmVuZGVyU1ZHUmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2VGcm9tUnVuKGNvbnN0IFRl
eHRSdW4mIHJ1bikKK3sKKyAgICBUZXh0UnVuOjpBYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQqIGFi
c3RyYWN0UmVuZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7CisgICAgaWYg
KCFhYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQgfHwgIWFic3RyYWN0UmVuZGVyaW5nQ29udGV4dC0+
aXNXZWJDb3JlUmVuZGVyaW5nQ29udGV4dCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQqPihhYnN0cmFjdFJlbmRlcmlu
Z0NvbnRleHQpLT5hY3RpdmVQYWludGluZ1Jlc291cmNlKCk7Cit9CisKIC8vIEhlbHBlciBjbGFz
cyB0byB3YWxrIGEgdGV4dCBydW4uIExvb2t1cCBhIFNWR0dseXBoIGZvciBlYWNoIGNoYXJhY3Rl
cgogLy8gLSBhbHNvIHJlc3BlY3RpbmcgcG9zc2libHkgZGVmaW5lZCBsaWdhdHVyZXMgLSBhbmQg
aW52b2tlIGEgY2FsbGJhY2sgZm9yIGVhY2ggZm91bmQgZ2x5cGguCiB0ZW1wbGF0ZTx0eXBlbmFt
ZSBTVkdUZXh0UnVuRGF0YT4KQEAgLTEwMCwxOSArMTI2LDE4IEBAIHN0cnVjdCBTVkdUZXh0UnVu
V2Fsa2VyIHsKICAgICAgICAgaW50IGNoYXJhY3Rlckxvb2t1cFJhbmdlOwogICAgICAgICBpbnQg
ZW5kT2ZTY2FuUmFuZ2UgPSB0byArIG1fd2Fsa2VyRGF0YS5leHRyYUNoYXJzQXZhaWxhYmxlOwog
CisgICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gcmVmZXJlbmNpbmdSZW5kZXJP
YmplY3RGcm9tUnVuKHJ1bik7CisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyT2Jq
ZWN0ID0gZmlyc3RQYXJlbnRSZW5kZXJlckZvck5vblRleHROb2RlKHJlbmRlck9iamVjdCk7CisK
ICAgICAgICAgYm9vbCBoYXZlQWx0R2x5cGggPSBmYWxzZTsKICAgICAgICAgU1ZHR2x5cGggYWx0
R2x5cGhJZGVudGlmaWVyOwotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3Qg
PSBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSkgewotICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBwYXJlbnRSZW5kZXJlciA9IHJlbmRlck9iamVjdC0+cGFyZW50KCk7Ci0gICAgICAgICAg
ICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOwotICAgICAgICAgICAgaWYgKHBhcmVudFJlbmRlcmVy
LT5ub2RlKCkgJiYgcGFyZW50UmVuZGVyZXItPm5vZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6
YWx0R2x5cGhUYWcpKSB7Ci0gICAgICAgICAgICAgICAgU1ZHR2x5cGhFbGVtZW50KiBnbHlwaEVs
ZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdBbHRHbHlwaEVsZW1lbnQqPihwYXJlbnRSZW5kZXJlci0+
bm9kZSgpKS0+Z2x5cGhFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGdseXBoRWxlbWVu
dCkgewotICAgICAgICAgICAgICAgICAgICBoYXZlQWx0R2x5cGggPSB0cnVlOwotICAgICAgICAg
ICAgICAgICAgICBhbHRHbHlwaElkZW50aWZpZXIgPSBnbHlwaEVsZW1lbnQtPmJ1aWxkR2x5cGhJ
ZGVudGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFsdEdseXBoSWRlbnRpZmllci5pc1Zh
bGlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYWx0R2x5cGhJZGVudGlmaWVyLnVuaWNv
ZGVTdHJpbmdMZW5ndGggPSB0byAtIGZyb207Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBO
b2RlKiBub2RlID0gcGFyZW50UmVuZGVyT2JqZWN0LT5ub2RlKCk7CisgICAgICAgIGlmIChub2Rl
LT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbHRHbHlwaFRhZykpIHsKKyAgICAgICAgICAgIGlmIChT
VkdHbHlwaEVsZW1lbnQqIGdseXBoRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0FsdEdseXBoRWxl
bWVudCo+KG5vZGUpLT5nbHlwaEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGhhdmVBbHRH
bHlwaCA9IHRydWU7CisgICAgICAgICAgICAgICAgYWx0R2x5cGhJZGVudGlmaWVyID0gZ2x5cGhF
bGVtZW50LT5idWlsZEdseXBoSWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgIGFsdEdseXBo
SWRlbnRpZmllci5pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhbHRHbHlwaElkZW50
aWZpZXIudW5pY29kZVN0cmluZ0xlbmd0aCA9IHRvIC0gZnJvbTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogCkBAIC0xNTcsNiArMTgyLDcgQEAgc3RydWN0IFNWR1RleHRSdW5XYWxrZXIgewog
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNr
IHRvIHN5c3RlbSBmb250IGZhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgIFRleHRSdW4gc3Vi
UnVuKHJ1bik7CisgICAgICAgICAgICAgICAgICAgIHN1YlJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0
KDApOwogICAgICAgICAgICAgICAgICAgICBzdWJSdW4uc2V0VGV4dChzdWJSdW4uZGF0YShpKSwg
MSk7CiAKICAgICAgICAgICAgICAgICAgICAgKCptX3dhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNr
KShzdWJSdW4sIG1fd2Fsa2VyRGF0YSk7CkBAIC0yMTAsMjQgKzIzNiwxMiBAQCBzdGF0aWMgdm9p
ZCBmbG9hdFdpZHRoTWlzc2luZ0dseXBoQ2FsbGJhCiAgICAgRm9udCBmb250KGZvbnREZXNjcmlw
dGlvbiwgMCwgMCk7IC8vIHNwYWNpbmcgaGFuZGxlZCBieSBTVkcgdGV4dCBjb2RlLgogICAgIGZv
bnQudXBkYXRlKGRhdGEuZm9udC0+Zm9udFNlbGVjdG9yKCkpOwogCi0gICAgZGF0YS5sZW5ndGgg
Kz0gZm9udC53aWR0aChydW4pOwotfQotCi0KLVNWR0ZvbnRFbGVtZW50KiBGb250OjpzdmdGb250
KCkgY29uc3QKLXsgCi0gICAgaWYgKCFpc1NWR0ZvbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAwOwotICAgIFNWR0ZvbnRGYWNlRWxl
bWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKLSAgICBpZiAoc3ZnRm9udEFuZEZvbnRGYWNlRWxl
bWVudEZvckZvbnREYXRhKHByaW1hcnlGb250KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1l
bnQpKQotICAgICAgICByZXR1cm4gZm9udEVsZW1lbnQ7Ci0gICAgCi0gICAgcmV0dXJuIDA7Cisg
ICAgVGV4dFJ1biBmYWxsYmFja1J1bihydW4pOworICAgIGZhbGxiYWNrUnVuLnNldFJlbmRlcmlu
Z0NvbnRleHQoMCk7CisgICAgZGF0YS5sZW5ndGggKz0gZm9udC53aWR0aChmYWxsYmFja1J1bik7
CiB9CiAKLXN0YXRpYyBmbG9hdCBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQoY29u
c3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZXh0cmFDaGFyc0F2YWlsYWJs
ZSwgaW50IGZyb20sIGludCB0bywgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFt
ZSkKK3N0YXRpYyBmbG9hdCBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQoY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZSwg
aW50IGZyb20sIGludCB0bywgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkK
IHsKICAgICBpbnQgbmV3RnJvbSA9IHRvID4gZnJvbSA/IGZyb20gOiB0bzsKICAgICBpbnQgbmV3
VG8gPSB0byA+IGZyb20gPyB0byA6IGZyb207CkBAIC0yMzgsMzMgKzI1MiwyNiBAQCBzdGF0aWMg
ZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTCiAgICAgU1ZHRm9udEVsZW1lbnQqIGZv
bnRFbGVtZW50ID0gMDsKICAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9
IDA7CiAKLSAgICBpZiAoY29uc3QgU1ZHRm9udERhdGEqIGZvbnREYXRhID0gc3ZnRm9udEFuZEZv
bnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnQtPnByaW1hcnlGb250KCksIGZvbnRGYWNlRWxl
bWVudCwgZm9udEVsZW1lbnQpKSB7CisgICAgaWYgKGNvbnN0IFNWR0ZvbnREYXRhKiBmb250RGF0
YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShmb250LnByaW1hcnlGb250
KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKSB7CiAgICAgICAgIGlmICghZm9udEVs
ZW1lbnQpCiAgICAgICAgICAgICByZXR1cm4gMC4wZjsKIAogICAgICAgICBTVkdUZXh0UnVuV2Fs
a2VyTWVhc3VyZWRMZW5ndGhEYXRhIGRhdGE7CiAKLSAgICAgICAgZGF0YS5mb250ID0gZm9udDsK
KyAgICAgICAgZGF0YS5mb250ID0gJmZvbnQ7CiAgICAgICAgIGRhdGEuYXQgPSBmcm9tOwogICAg
ICAgICBkYXRhLmZyb20gPSBmcm9tOwogICAgICAgICBkYXRhLnRvID0gdG87CiAgICAgICAgIGRh
dGEuZXh0cmFDaGFyc0F2YWlsYWJsZSA9IGV4dHJhQ2hhcnNBdmFpbGFibGU7CiAgICAgICAgIGRh
dGEuY2hhcnNDb25zdW1lZCA9IDA7Ci0gICAgICAgIGRhdGEuc2NhbGUgPSBjb252ZXJ0RW1Vbml0
VG9QaXhlbChmb250LT5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBm
KTsKKyAgICAgICAgZGF0YS5zY2FsZSA9IGNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnQuc2l6ZSgp
LCBmb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSwgMS4wZik7CiAgICAgICAgIGRhdGEubGVu
Z3RoID0gMC4wZjsKIAotICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7Ci0gICAgICAgIGJvb2wgaXNW
ZXJ0aWNhbFRleHQgPSBmYWxzZTsgLy8gSG9sZHMgdHJ1ZSBmb3IgSFRNTCB0ZXh0CisgICAgICAg
IFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RGcm9t
UnVuKHJ1bik7CisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyT2JqZWN0ID0gZmly
c3RQYXJlbnRSZW5kZXJlckZvck5vblRleHROb2RlKHJlbmRlck9iamVjdCk7IAogCi0gICAgICAg
IC8vIFRPRE86IGxhbmd1YWdlIG1hdGNoaW5nICYgc3ZnIGdseXBocyBzaG91bGQgYmUgcG9zc2li
bGUgZm9yIEhUTUwgdGV4dCwgdG9vLgotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJP
YmplY3QgPSBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSkgewotICAgICAgICAgICAgUmVu
ZGVyT2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHJlbmRlck9iamVjdC0+cGFyZW50KCk7Ci0gICAg
ICAgICAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOwotICAgICAgICAgICAgaXNWZXJ0aWNhbFRl
eHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUocGFyZW50UmVuZGVyZXItPnN0eWxlKCktPnN2Z1N0
eWxlKCkpOwotCi0gICAgICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihwYXJlbnRSZW5kZXJlci0+bm9kZSgpKSkKLSAgICAgICAgICAgICAg
ICBsYW5ndWFnZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOwot
ICAgICAgICB9CisgICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IHRvRWxlbWVudChwYXJlbnRSZW5k
ZXJPYmplY3QtPm5vZGUoKSktPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOworICAg
ICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHBhcmVudFJl
bmRlck9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSk7CiAKICAgICAgICAgU1ZHVGV4dFJ1bldh
bGtlcjxTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhPiBydW5XYWxrZXIoZm9udERh
dGEsIGZvbnRFbGVtZW50LCBkYXRhLCBmbG9hdFdpZHRoVXNpbmdTVkdGb250Q2FsbGJhY2ssIGZs
b2F0V2lkdGhNaXNzaW5nR2x5cGhDYWxsYmFjayk7CiAgICAgICAgIHJ1bldhbGtlci53YWxrKHJ1
biwgaXNWZXJ0aWNhbFRleHQsIGxhbmd1YWdlLCBmcm9tLCB0byk7CkBAIC0yNzYsMTYgKzI4Mywx
NiBAQCBzdGF0aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTCiAgICAgcmV0dXJu
IDAuMGY7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgVGV4
dFJ1biYgcnVuKSBjb25zdAorZmxvYXQgVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmZsb2F0V2lk
dGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuKSBjb25z
dAogewogICAgIGludCBjaGFyc0NvbnN1bWVkOwogICAgIFN0cmluZyBnbHlwaE5hbWU7Ci0gICAg
cmV0dXJuIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIDAsIDAs
IHJ1bi5sZW5ndGgoKSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKKyAgICByZXR1cm4gZmxv
YXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KGZvbnQsIHJ1biwgMCwgMCwgcnVuLmxlbmd0
aCgpLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOwogfQogCi1mbG9hdCBGb250OjpmbG9hdFdp
ZHRoVXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGV4dHJhQ2hhcnNBdmFpbGFi
bGUsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CitmbG9hdCBU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250
JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGludCBleHRyYUNoYXJzQXZhaWxhYmxlLCBpbnQm
IGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAogewotICAgIHJldHVybiBm
bG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQodGhpcywgcnVuLCBleHRyYUNoYXJzQXZh
aWxhYmxlLCAwLCBydW4ubGVuZ3RoKCksIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7CisgICAg
cmV0dXJuIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udChmb250LCBydW4sIGV4dHJh
Q2hhcnNBdmFpbGFibGUsIDAsIHJ1bi5sZW5ndGgoKSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1l
KTsKIH0KIAogLy8gQ2FsbGJhY2sgJiBkYXRhIHN0cnVjdHVyZXMgdG8gZHJhdyB0ZXh0IHVzaW5n
IFNWRyBGb250cwpAQCAtMzEwLDI2ICszMTcsMjYgQEAgc3RhdGljIHZvaWQgZHJhd1RleHRNaXNz
aW5nR2x5cGhDYWxsYmFjawogICAgIGRhdGEuZmFsbGJhY2tDaGFyYWN0ZXJzLmFwcGVuZChydW5b
MF0pOwogfQogCi12b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
Cit2b2lkIFRleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChjb25z
dCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7CiAg
ICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50ID0gMDsKICAgICBTVkdGb250RmFjZUVsZW1l
bnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7CiAKLSAgICBpZiAoY29uc3QgU1ZHRm9udERhdGEqIGZv
bnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKHByaW1hcnlGb250
KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKSB7CisgICAgaWYgKGNvbnN0IFNWR0Zv
bnREYXRhKiBmb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShm
b250LnByaW1hcnlGb250KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKSB7CiAgICAg
ICAgIGlmICghZm9udEVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgU1ZH
VGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSBkYXRhOwogICAgICAgICBGbG9hdFBvaW50IGN1cnJl
bnRQb2ludCA9IHBvaW50OwotICAgICAgICBmbG9hdCBzY2FsZSA9IGNvbnZlcnRFbVVuaXRUb1Bp
eGVsKHNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCksIDEuMGYpOwotCi0gICAg
ICAgIFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQYWludGluZ1Jlc291cmNlID0gcnVuLmFjdGl2
ZVBhaW50aW5nUmVzb3VyY2UoKTsKLQotICAgICAgICAvLyBJZiByZW5kZXJPYmplY3QgaXMgbm90
IHNldCwgd2UncmUgZGVhbGluZyBmb3IgSFRNTCB0ZXh0IHJlbmRlcmVkIHVzaW5nIFNWRyBGb250
cy4KLSAgICAgICAgaWYgKCFydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSkgewotICAgICAg
ICAgICAgQVNTRVJUKCFhY3RpdmVQYWludGluZ1Jlc291cmNlKTsKKyAgICAgICAgZmxvYXQgc2Nh
bGUgPSBjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250LnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51
bml0c1BlckVtKCksIDEuMGYpOwogCisgICAgICAgIC8vIFdlIGNhbiBvbmx5IHBhaW50IFNWR0Zv
bnRzIGlmIGEgY29udGV4dCBpcyBhdmFpbGFibGUuCisgICAgICAgIFJlbmRlck9iamVjdCogcmVu
ZGVyT2JqZWN0ID0gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RGcm9tUnVuKHJ1bik7CisgICAgICAg
IFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyT2JqZWN0ID0gZmlyc3RQYXJlbnRSZW5kZXJlckZv
ck5vblRleHROb2RlKHJlbmRlck9iamVjdCk7CisKKyAgICAgICAgLy8gSWYgYWN0aXZlUGFpbnRp
bmdSZXNvdXJjZSBpcyBub3Qgc2V0LCB3ZSdyZSBkZWFsaW5nIGZvciBIVE1MIHRleHQgcmVuZGVy
ZWQgdXNpbmcgU1ZHIEZvbnRzLgorICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZSogYWN0aXZlUGFp
bnRpbmdSZXNvdXJjZSA9IGFjdGl2ZVBhaW50aW5nUmVzb3VyY2VGcm9tUnVuKHJ1bik7CisgICAg
ICAgIGlmICghYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSkgewogICAgICAgICAgICAgLy8gVE9ETzog
V2UncmUgb25seSBzdXBwb3J0aW5nIHNpbXBsZSBmaWxsZWQgSFRNTCB0ZXh0IHNvIGZhci4KICAg
ICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogc29saWRQYWludGluZ1Jlc291
cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJjZSgpOwog
ICAgICAgICAgICAgc29saWRQYWludGluZ1Jlc291cmNlLT5zZXRDb2xvcihjb250ZXh0LT5maWxs
Q29sb3IoKSk7CkBAIC0zMzcsMjkgKzM0NCwxNiBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdT
VkdGb250KEdyYXBoaWNzCiAgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlID0gc29s
aWRQYWludGluZ1Jlc291cmNlOwogICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKGFjdGl2ZVBh
aW50aW5nUmVzb3VyY2UpOwotCiAgICAgICAgIGludCBjaGFyc0NvbnN1bWVkOwogICAgICAgICBT
dHJpbmcgZ2x5cGhOYW1lOwotICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gZmFsc2U7Ci0g
ICAgICAgIGZsb2F0IHhTdGFydE9mZnNldCA9IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZH
Rm9udCh0aGlzLCBydW4sIDAsIHJ1bi5ydGwoKSA/IHRvIDogMCwgcnVuLnJ0bCgpID8gcnVuLmxl
bmd0aCgpIDogZnJvbSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKKyAgICAgICAgZmxvYXQg
eFN0YXJ0T2Zmc2V0ID0gZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KGZvbnQsIHJ1
biwgMCwgcnVuLnJ0bCgpID8gdG8gOiAwLCBydW4ucnRsKCkgPyBydW4ubGVuZ3RoKCkgOiBmcm9t
LCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOwogICAgICAgICBGbG9hdFBvaW50IGdseXBoT3Jp
Z2luOwogCi0gICAgICAgIFN0cmluZyBsYW5ndWFnZTsKLQotICAgICAgICAvLyBUT0RPOiBsYW5n
dWFnZSBtYXRjaGluZyAmIHN2ZyBnbHlwaHMgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciBIVE1MIHRl
eHQsIHRvby4KLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZWZlcmVuY2luZ1JlbmRlck9iamVjdCA9
IHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpOwotICAgICAgICBSZW5kZXJPYmplY3QqIHJl
ZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50ID0gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3QgPyBy
ZWZlcmVuY2luZ1JlbmRlck9iamVjdC0+cGFyZW50KCkgOiAwOwotICAgICAgICBSZW5kZXJTdHls
ZSogcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnRTdHlsZSA9IDA7Ci0gICAgICAgIGlmIChy
ZWZlcmVuY2luZ1JlbmRlck9iamVjdCkgewotICAgICAgICAgICAgQVNTRVJUKHJlZmVyZW5jaW5n
UmVuZGVyT2JqZWN0UGFyZW50KTsKLSAgICAgICAgICAgIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0
UGFyZW50U3R5bGUgPSByZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudC0+c3R5bGUoKTsKLQot
ICAgICAgICAgICAgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUocmVmZXJl
bmNpbmdSZW5kZXJPYmplY3RQYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKSk7ICAgIAotICAgICAgICAg
ICAgaWYgKFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocmVm
ZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnQtPm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgbGFu
Z3VhZ2UgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKTsKLSAgICAg
ICAgfQorICAgICAgICBOb2RlKiBub2RlID0gcGFyZW50UmVuZGVyT2JqZWN0LT5ub2RlKCk7Cisg
ICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IHRvRWxlbWVudChub2RlKS0+Z2V0QXR0cmlidXRlKFhN
TE5hbWVzOjpsYW5nQXR0cik7CiAKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFJlbmRlck9i
amVjdFN0eWxlID0gcGFyZW50UmVuZGVyT2JqZWN0LT5zdHlsZSgpOworICAgICAgICBib29sIGlz
VmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHBhcmVudFJlbmRlck9iamVjdFN0
eWxlLT5zdmdTdHlsZSgpKTsKICAgICAgICAgaWYgKCFpc1ZlcnRpY2FsVGV4dCkgewogICAgICAg
ICAgICAgZ2x5cGhPcmlnaW4uc2V0WChmb250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblgoKSAqIHNj
YWxlKTsKICAgICAgICAgICAgIGdseXBoT3JpZ2luLnNldFkoZm9udERhdGEtPmhvcml6b250YWxP
cmlnaW5ZKCkgKiBzY2FsZSk7CkBAIC0zOTQsMTIgKzM4OCwxMiBAQCB2b2lkIEZvbnQ6OmRyYXdU
ZXh0VXNpbmdTVkdGb250KEdyYXBoaWNzCiAgICAgICAgICAgICAgICAgICAgIFBhdGggZ2x5cGhQ
YXRoID0gaWRlbnRpZmllci5wYXRoRGF0YTsKICAgICAgICAgICAgICAgICAgICAgZ2x5cGhQYXRo
LnRyYW5zZm9ybShnbHlwaFBhdGhUcmFuc2Zvcm0pOwogCi0gICAgICAgICAgICAgICAgICAgIGlm
IChhY3RpdmVQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHJlZmVyZW5jaW5nUmVuZGVy
T2JqZWN0UGFyZW50LCByZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudFN0eWxlLCBjb250ZXh0
LCByZXNvdXJjZU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVmZXJlbmNp
bmdSZW5kZXJPYmplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJTVkdJ
bmxpbmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQocmVmZXJlbmNp
bmdSZW5kZXJPYmplY3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlUGFpbnRpbmdS
ZXNvdXJjZS0+YXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIHBhcmVudFJlbmRlck9i
amVjdFN0eWxlLCBjb250ZXh0LCByZXNvdXJjZU1vZGUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAocmVuZGVyT2JqZWN0ICYmIHJlbmRlck9iamVjdC0+aXNTVkdJbmxpbmVUZXh0KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTVkdJbmxpbmVUZXh0
KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQocmVuZGVyT2JqZWN0KTsKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25lc3MoY29u
dGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCkgKiB0ZXh0UmVuZGVyZXItPnNjYWxpbmdGYWN0b3IoKSk7
CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBhY3Rp
dmVQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShyZWZlcmVuY2luZ1JlbmRlck9i
amVjdFBhcmVudCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQYXRoKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJlc291cmNl
KHBhcmVudFJlbmRlck9iamVjdCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQYXRoKTsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIApAQCAtNDA5LDEyICs0
MDMsMTMgQEAgdm9pZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChHcmFwaGljcwogICAgICAg
ICAgICAgICAgICAgICBjdXJyZW50UG9pbnQubW92ZShpZGVudGlmaWVyLmhvcml6b250YWxBZHZh
bmNlWCAqIHNjYWxlLCAwLjBmKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgLy8gSGFuZGxlIHN5c3RlbSBmb250IGZhbGxiYWNrCi0gICAgICAgICAgICAgICAgRm9udERl
c2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihtX2ZvbnREZXNjcmlwdGlvbik7CisgICAgICAgICAg
ICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihmb250LmZvbnREZXNjcmlwdGlv
bigpKTsKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KEZvbnRGYW1p
bHkoKSk7CiAgICAgICAgICAgICAgICAgRm9udCBmb250KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7
IC8vIHNwYWNpbmcgaGFuZGxlZCBieSBTVkcgdGV4dCBjb2RlLgotICAgICAgICAgICAgICAgIGZv
bnQudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgICAgICBmb250LnVwZGF0ZShm
b250LmZvbnRTZWxlY3RvcigpKTsKIAogICAgICAgICAgICAgICAgIFRleHRSdW4gZmFsbGJhY2tD
aGFyYWN0ZXJSdW4ocnVuKTsKKyAgICAgICAgICAgICAgICBmYWxsYmFja0NoYXJhY3RlclJ1bi5z
ZXRSZW5kZXJpbmdDb250ZXh0KDApOwogICAgICAgICAgICAgICAgIGZhbGxiYWNrQ2hhcmFjdGVy
UnVuLnNldFRleHQoJmRhdGEuZmFsbGJhY2tDaGFyYWN0ZXJzW3J1bi5ydGwoKSA/IGRhdGEuZmFs
bGJhY2tDaGFyYWN0ZXJzLnNpemUoKSAtIGZhbGxiYWNrQ2hhcmFjdGVySW5kZXggLSAxIDogZmFs
bGJhY2tDaGFyYWN0ZXJJbmRleF0sIDEpOwogICAgICAgICAgICAgICAgIGZvbnQuZHJhd1RleHQo
Y29udGV4dCwgZmFsbGJhY2tDaGFyYWN0ZXJSdW4sIGN1cnJlbnRQb2ludCk7CiAKQEAgLTQyOSwx
NiArNDI0LDE2IEBAIHZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3MKICAg
ICB9CiB9CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9u
dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorRmxvYXRSZWN0IFRleHRSdW5SZW5kZXJpbmdDb250
ZXh0OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBGb250JiBmb250LCBj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIGludCBjaGFyc0NvbnN1bWVkOwogICAgIFN0
cmluZyBnbHlwaE5hbWU7CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIGZsb2F0
V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIDAsIHJ1bi5ydGwoKSA/IHRv
IDogMCwgcnVuLnJ0bCgpID8gcnVuLmxlbmd0aCgpIDogZnJvbSwgY2hhcnNDb25zdW1lZCwgZ2x5
cGhOYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgIHBvaW50LnkoKSwgZmxvYXRXaWR0aE9mU3Vi
U3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgMCwgZnJvbSwgdG8sIGNoYXJzQ29uc3VtZWQs
IGdseXBoTmFtZSksIGhlaWdodCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBm
bG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQoZm9udCwgcnVuLCAwLCBydW4ucnRsKCkg
PyB0byA6IDAsIHJ1bi5ydGwoKSA/IHJ1bi5sZW5ndGgoKSA6IGZyb20sIGNoYXJzQ29uc3VtZWQs
IGdseXBoTmFtZSksCisgICAgICAgICAgICAgICAgICAgICBwb2ludC55KCksIGZsb2F0V2lkdGhP
ZlN1YlN0cmluZ1VzaW5nU1ZHRm9udChmb250LCBydW4sIDAsIGZyb20sIHRvLCBjaGFyc0NvbnN1
bWVkLCBnbHlwaE5hbWUpLCBoZWlnaHQpOwogfQogCi1pbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRp
b25Gb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mLCBmbG9hdCwgYm9vbCkgY29uc3QK
K2ludCBUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNp
bmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgZmxvYXQsIGJvb2wpIGNvbnN0
CiB7CiAgICAgLy8gVE9ETzogRml4IHRleHQgc2VsZWN0aW9uIHdoZW4gSFRNTCB0ZXh0IGlzIGRy
YXduIHVzaW5nIGEgU1ZHIEZvbnQKICAgICAvLyBXZSBuZWVkIHRvIGludGVncmF0ZSB0aGUgU1ZH
IHRleHQgc2VsZWN0aW9uIGNvZGUgaW4gdGhlIG9mZnNldEZvclBvc2l0aW9uKCkgZnJhbWV3b3Jr
LgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0FsbEluT25lLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHQWxsSW5PbmUuY3BwCShyZXZpc2lvbiA4Njk0MikKKysr
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDcgKzc3LDYgQEAKICNpbmNsdWRlICJTVkdGaWx0ZXJFbGVtZW50LmNwcCIKICNpbmNsdWRlICJT
VkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0ZXMuY3BwIgogI2luY2x1ZGUgIlNWR0Zp
dFRvVmlld0JveC5jcHAiCi0jaW5jbHVkZSAiU1ZHRm9udC5jcHAiCiAjaW5jbHVkZSAiU1ZHRm9u
dERhdGEuY3BwIgogI2luY2x1ZGUgIlNWR0ZvbnRFbGVtZW50LmNwcCIKICNpbmNsdWRlICJTVkdG
b250RmFjZUVsZW1lbnQuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250LmNwcAkocmV2aXNpb24g
ODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNDUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIFJlc2Vh
cmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgotICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgotICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
LSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCi0gKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKLSAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotICovCi0KLSNpbmNsdWRl
ICJjb25maWcuaCIKLQotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0jaW5jbHVkZSAiRm9udC5oIgot
Ci0jaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0
LmgiCi0jaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCi0jaW5jbHVkZSAiUmVuZGVyU1ZHSW5saW5l
VGV4dC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvci5oIgotI2luY2x1
ZGUgIlNWR0FsdEdseXBoRWxlbWVudC5oIgotI2luY2x1ZGUgIlNWR0ZvbnREYXRhLmgiCi0jaW5j
bHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1lbnQuaCIK
LSNpbmNsdWRlICJTVkdHbHlwaEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdHbHlwaE1hcC5oIgot
I2luY2x1ZGUgIlNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5o
IgotI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgotI2lu
Y2x1ZGUgIlhNTE5hbWVzLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBXVEY6OlVuaWNvZGU7Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBmbG9hdCBjb252ZXJ0RW1Vbml0VG9Q
aXhlbChmbG9hdCBmb250U2l6ZSwgZmxvYXQgdW5pdHNQZXJFbSwgZmxvYXQgdmFsdWUpCi17Ci0g
ICAgaWYgKCF1bml0c1BlckVtKQotICAgICAgICByZXR1cm4gMC4wZjsKLQotICAgIHJldHVybiB2
YWx1ZSAqIGZvbnRTaXplIC8gdW5pdHNQZXJFbTsKLX0KLQotc3RhdGljIGlubGluZSBib29sIGlz
VmVydGljYWxXcml0aW5nTW9kZShjb25zdCBTVkdSZW5kZXJTdHlsZSogc3R5bGUpCi17Ci0gICAg
cmV0dXJuIHN0eWxlLT53cml0aW5nTW9kZSgpID09IFdNX1RCUkwgfHwgc3R5bGUtPndyaXRpbmdN
b2RlKCkgPT0gV01fVEI7IAotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IFNWR0ZvbnREYXRhKiBz
dmdGb250QW5kRm9udEZhY2VFbGVtZW50Rm9yRm9udERhdGEoY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhLCBTVkdGb250RmFjZUVsZW1lbnQqJiBmb250RmFjZSwgU1ZHRm9udEVsZW1lbnQq
JiBmb250KQotewotICAgIEFTU0VSVChmb250RGF0YS0+aXNDdXN0b21Gb250KCkpOwotICAgIEFT
U0VSVChmb250RGF0YS0+aXNTVkdGb250KCkpOwotCi0gICAgY29uc3QgU1ZHRm9udERhdGEqIHN2
Z0ZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU1ZHRm9udERhdGEqPihmb250RGF0YS0+c3Zn
Rm9udERhdGEoKSk7Ci0KLSAgICBmb250RmFjZSA9IHN2Z0ZvbnREYXRhLT5zdmdGb250RmFjZUVs
ZW1lbnQoKTsKLSAgICBBU1NFUlQoZm9udEZhY2UpOwotCi0gICAgZm9udCA9IGZvbnRGYWNlLT5h
c3NvY2lhdGVkRm9udEVsZW1lbnQoKTsKLSAgICByZXR1cm4gc3ZnRm9udERhdGE7Ci19Ci0KLS8v
IEhlbHBlciBjbGFzcyB0byB3YWxrIGEgdGV4dCBydW4uIExvb2t1cCBhIFNWR0dseXBoIGZvciBl
YWNoIGNoYXJhY3RlcgotLy8gLSBhbHNvIHJlc3BlY3RpbmcgcG9zc2libHkgZGVmaW5lZCBsaWdh
dHVyZXMgLSBhbmQgaW52b2tlIGEgY2FsbGJhY2sgZm9yIGVhY2ggZm91bmQgZ2x5cGguCi10ZW1w
bGF0ZTx0eXBlbmFtZSBTVkdUZXh0UnVuRGF0YT4KLXN0cnVjdCBTVkdUZXh0UnVuV2Fsa2VyIHsK
LSAgICB0eXBlZGVmIGJvb2wgKCpTVkdUZXh0UnVuV2Fsa2VyQ2FsbGJhY2spKGNvbnN0IFNWR0ds
eXBoJiwgU1ZHVGV4dFJ1bkRhdGEmKTsKLSAgICB0eXBlZGVmIHZvaWQgKCpTVkdUZXh0UnVuV2Fs
a2VyTWlzc2luZ0dseXBoQ2FsbGJhY2spKGNvbnN0IFRleHRSdW4mLCBTVkdUZXh0UnVuRGF0YSYp
OwotCi0gICAgU1ZHVGV4dFJ1bldhbGtlcihjb25zdCBTVkdGb250RGF0YSogZm9udERhdGEsIFNW
R0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwgU1ZHVGV4dFJ1bkRhdGEmIGRhdGEsCi0gICAgICAg
ICAgICAgICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyQ2FsbGJhY2sgY2FsbGJhY2ssIFNWR1RleHRS
dW5XYWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjayBtaXNzaW5nR2x5cGhDYWxsYmFjaykKLSAgICAg
ICAgOiBtX2ZvbnREYXRhKGZvbnREYXRhKQotICAgICAgICAsIG1fZm9udEVsZW1lbnQoZm9udEVs
ZW1lbnQpCi0gICAgICAgICwgbV93YWxrZXJEYXRhKGRhdGEpCi0gICAgICAgICwgbV93YWxrZXJD
YWxsYmFjayhjYWxsYmFjaykKLSAgICAgICAgLCBtX3dhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNr
KG1pc3NpbmdHbHlwaENhbGxiYWNrKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIHdhbGsoY29u
c3QgVGV4dFJ1biYgcnVuLCBib29sIGlzVmVydGljYWxUZXh0LCBjb25zdCBTdHJpbmcmIGxhbmd1
YWdlLCBpbnQgZnJvbSwgaW50IHRvKQotICAgIHsKLSAgICAgICAgQVNTRVJUKDAgPD0gZnJvbSAm
JiBmcm9tIDw9IHRvICYmIHRvIC0gZnJvbSA8PSBydW4ubGVuZ3RoKCkpOwotCi0gICAgICAgIGNv
bnN0IFN0cmluZyB0ZXh0ID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5kYXRhKGZyb20pLCB0
byAtIGZyb20pOwotICAgICAgICBWZWN0b3I8U1ZHR2x5cGg6OkFyYWJpY0Zvcm0+IGNoYXJzKGNo
YXJhY3RlcnNXaXRoQXJhYmljRm9ybSh0ZXh0LCBydW4ucnRsKCkpKTsKLQotICAgICAgICBTVkdH
bHlwaCBpZGVudGlmaWVyOwotICAgICAgICBib29sIGZvdW5kR2x5cGggPSBmYWxzZTsKLSAgICAg
ICAgaW50IGNoYXJhY3Rlckxvb2t1cFJhbmdlOwotICAgICAgICBpbnQgZW5kT2ZTY2FuUmFuZ2Ug
PSB0byArIG1fd2Fsa2VyRGF0YS5leHRyYUNoYXJzQXZhaWxhYmxlOwotCi0gICAgICAgIGJvb2wg
aGF2ZUFsdEdseXBoID0gZmFsc2U7Ci0gICAgICAgIFNWR0dseXBoIGFsdEdseXBoSWRlbnRpZmll
cjsKLSAgICAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gcnVuLnJlZmVyZW5j
aW5nUmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVu
ZGVyZXIgPSByZW5kZXJPYmplY3QtPnBhcmVudCgpOwotICAgICAgICAgICAgQVNTRVJUKHBhcmVu
dFJlbmRlcmVyKTsKLSAgICAgICAgICAgIGlmIChwYXJlbnRSZW5kZXJlci0+bm9kZSgpICYmIHBh
cmVudFJlbmRlcmVyLT5ub2RlKCktPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OmFsdEdseXBoVGFnKSkg
ewotICAgICAgICAgICAgICAgIFNWR0dseXBoRWxlbWVudCogZ2x5cGhFbGVtZW50ID0gc3RhdGlj
X2Nhc3Q8U1ZHQWx0R2x5cGhFbGVtZW50Kj4ocGFyZW50UmVuZGVyZXItPm5vZGUoKSktPmdseXBo
RWxlbWVudCgpOwotICAgICAgICAgICAgICAgIGlmIChnbHlwaEVsZW1lbnQpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaGF2ZUFsdEdseXBoID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYWx0
R2x5cGhJZGVudGlmaWVyID0gZ2x5cGhFbGVtZW50LT5idWlsZEdseXBoSWRlbnRpZmllcigpOwot
ICAgICAgICAgICAgICAgICAgICBhbHRHbHlwaElkZW50aWZpZXIuaXNWYWxpZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIGFsdEdseXBoSWRlbnRpZmllci51bmljb2RlU3RyaW5nTGVuZ3Ro
ID0gdG8gLSBmcm9tOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotCi0gICAgICAgIGZvciAoaW50IGkgPSBmcm9tOyBpIDwgdG87ICsraSkgewotICAgICAgICAg
ICAgLy8gSWYgY2hhcmFjdGVyTG9va3VwUmFuZ2UgaXMgPiAwLCB0aGVuIHRoZSBmb250IGRlZmlu
ZWQgbGlnYXR1cmVzIChsZW5ndGggb2YgdW5pY29kZSBwcm9wZXJ0eSB2YWx1ZSA+IDEpLgotICAg
ICAgICAgICAgLy8gV2UgaGF2ZSB0byBjaGVjayB3aGV0ZXIgdGhlIGN1cnJlbnQgY2hhcmFjdGVy
ICYgdGhlIG5leHQgY2hhcmFjdGVyIGRlZmluZSBhIGxpZ2F0dXJlLiBUaGlzIG5lZWRzIHRvIGJl
Ci0gICAgICAgICAgICAvLyBleHRlbmRlZCB0byB0aGUgbi10aCBuZXh0IGNoYXJhY3RlciAod2hl
cmUgbiBpcyAnY2hhcmFjdGVyTG9va3VwUmFuZ2UnKSwgdG8gY2hlY2sgZm9yIGFueSBwb3NzaWJs
ZSBsaWdhdHVyZS4KLSAgICAgICAgICAgIGNoYXJhY3Rlckxvb2t1cFJhbmdlID0gZW5kT2ZTY2Fu
UmFuZ2UgLSBpOwotCi0gICAgICAgICAgICBTdHJpbmcgbG9va3VwU3RyaW5nID0gRm9udDo6bm9y
bWFsaXplU3BhY2VzKHJ1bi5kYXRhKGkpLCBjaGFyYWN0ZXJMb29rdXBSYW5nZSk7Ci0KLSAgICAg
ICAgICAgIFZlY3RvcjxTVkdHbHlwaD4gZ2x5cGhzOwotICAgICAgICAgICAgaWYgKGhhdmVBbHRH
bHlwaCkKLSAgICAgICAgICAgICAgICBnbHlwaHMuYXBwZW5kKGFsdEdseXBoSWRlbnRpZmllcik7
Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9mb250RWxlbWVudC0+Z2V0R2x5
cGhJZGVudGlmaWVyc0ZvclN0cmluZyhsb29rdXBTdHJpbmcsIGdseXBocyk7Ci0KLSAgICAgICAg
ICAgIFZlY3RvcjxTVkdHbHlwaD46Oml0ZXJhdG9yIGl0ID0gZ2x5cGhzLmJlZ2luKCk7Ci0gICAg
ICAgICAgICBWZWN0b3I8U1ZHR2x5cGg+OjppdGVyYXRvciBlbmQgPSBnbHlwaHMuZW5kKCk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGZvciAoOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgICAgICBpZGVudGlmaWVyID0gKml0OwotICAgICAgICAgICAgICAgIGlmIChpZGVudGlm
aWVyLmlzVmFsaWQgJiYgaXNDb21wYXRpYmxlR2x5cGgoaWRlbnRpZmllciwgaXNWZXJ0aWNhbFRl
eHQsIGxhbmd1YWdlLCBjaGFycywgaSwgaSArIGlkZW50aWZpZXIudW5pY29kZVN0cmluZ0xlbmd0
aCkpIHsKLSAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGNoYXJhY3Rlckxvb2t1cFJhbmdlID4g
MCk7Ci0gICAgICAgICAgICAgICAgICAgIGkgKz0gaWRlbnRpZmllci51bmljb2RlU3RyaW5nTGVu
Z3RoIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgbV93YWxrZXJEYXRhLmNoYXJzQ29uc3VtZWQg
Kz0gaWRlbnRpZmllci51bmljb2RlU3RyaW5nTGVuZ3RoOwotICAgICAgICAgICAgICAgICAgICBt
X3dhbGtlckRhdGEuZ2x5cGhOYW1lID0gaWRlbnRpZmllci5nbHlwaE5hbWU7Ci0KLSAgICAgICAg
ICAgICAgICAgICAgZm91bmRHbHlwaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIFNWR0ds
eXBoRWxlbWVudDo6aW5oZXJpdFVuc3BlY2lmaWVkQXR0cmlidXRlcyhpZGVudGlmaWVyLCBtX2Zv
bnREYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWZvdW5kR2x5cGgpIHsKLSAgICAgICAg
ICAgICAgICArK21fd2Fsa2VyRGF0YS5jaGFyc0NvbnN1bWVkOwotICAgICAgICAgICAgICAgIGlm
IChTVkdNaXNzaW5nR2x5cGhFbGVtZW50KiBlbGVtZW50ID0gbV9mb250RWxlbWVudC0+Zmlyc3RN
aXNzaW5nR2x5cGhFbGVtZW50KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gPG1pc3Npbmct
Z2x5cGg+IGVsZW1lbnQgc3VwcG9ydAotICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyID0g
U1ZHR2x5cGhFbGVtZW50OjpidWlsZEdlbmVyaWNHbHlwaElkZW50aWZpZXIoZWxlbWVudCk7Ci0g
ICAgICAgICAgICAgICAgICAgIFNWR0dseXBoRWxlbWVudDo6aW5oZXJpdFVuc3BlY2lmaWVkQXR0
cmlidXRlcyhpZGVudGlmaWVyLCBtX2ZvbnREYXRhKTsKLSAgICAgICAgICAgICAgICAgICAgaWRl
bnRpZmllci5pc1ZhbGlkID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICAvLyBGYWxsYmFjayB0byBzeXN0ZW0gZm9udCBmYWxsYmFjawotICAgICAg
ICAgICAgICAgICAgICBUZXh0UnVuIHN1YlJ1bihydW4pOwotICAgICAgICAgICAgICAgICAgICBz
dWJSdW4uc2V0VGV4dChzdWJSdW4uZGF0YShpKSwgMSk7Ci0KLSAgICAgICAgICAgICAgICAgICAg
KCptX3dhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNrKShzdWJSdW4sIG1fd2Fsa2VyRGF0YSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKCEoKm1fd2Fsa2VyQ2FsbGJhY2spKGlkZW50aWZpZXIs
IG1fd2Fsa2VyRGF0YSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGZv
dW5kR2x5cGggPSBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotcHJpdmF0ZToKLSAgICBjb25z
dCBTVkdGb250RGF0YSogbV9mb250RGF0YTsKLSAgICBTVkdGb250RWxlbWVudCogbV9mb250RWxl
bWVudDsKLSAgICBTVkdUZXh0UnVuRGF0YSYgbV93YWxrZXJEYXRhOwotICAgIFNWR1RleHRSdW5X
YWxrZXJDYWxsYmFjayBtX3dhbGtlckNhbGxiYWNrOwotICAgIFNWR1RleHRSdW5XYWxrZXJNaXNz
aW5nR2x5cGhDYWxsYmFjayBtX3dhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNrOwotfTsKLQotLy8g
Q2FsbGJhY2sgJiBkYXRhIHN0cnVjdHVyZXMgdG8gY29tcHV0ZSB0aGUgd2lkdGggb2YgdGV4dCB1
c2luZyBTVkcgRm9udHMKLXN0cnVjdCBTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRh
IHsKLSAgICBpbnQgYXQ7Ci0gICAgaW50IGZyb207Ci0gICAgaW50IHRvOwotICAgIGludCBleHRy
YUNoYXJzQXZhaWxhYmxlOwotICAgIGludCBjaGFyc0NvbnN1bWVkOwotICAgIFN0cmluZyBnbHlw
aE5hbWU7Ci0KLSAgICBmbG9hdCBzY2FsZTsKLSAgICBmbG9hdCBsZW5ndGg7Ci0gICAgY29uc3Qg
Rm9udCogZm9udDsKLX07Ci0KLXN0YXRpYyBib29sIGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnRDYWxs
YmFjayhjb25zdCBTVkdHbHlwaCYgaWRlbnRpZmllciwgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVk
TGVuZ3RoRGF0YSYgZGF0YSkKLXsKLSAgICBpZiAoZGF0YS5hdCA+PSBkYXRhLmZyb20gJiYgZGF0
YS5hdCA8IGRhdGEudG8pCi0gICAgICAgIGRhdGEubGVuZ3RoICs9IGlkZW50aWZpZXIuaG9yaXpv
bnRhbEFkdmFuY2VYICogZGF0YS5zY2FsZTsKLQotICAgIGRhdGEuYXQrKzsKLSAgICByZXR1cm4g
ZGF0YS5hdCA8IGRhdGEudG87Ci19Ci0KLXN0YXRpYyB2b2lkIGZsb2F0V2lkdGhNaXNzaW5nR2x5
cGhDYWxsYmFjayhjb25zdCBUZXh0UnVuJiBydW4sIFNWR1RleHRSdW5XYWxrZXJNZWFzdXJlZExl
bmd0aERhdGEmIGRhdGEpCi17Ci0gICAgLy8gSGFuZGxlIHN5c3RlbSBmb250IGZhbGxiYWNrCi0g
ICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihkYXRhLmZvbnQtPmZvbnREZXNjcmlw
dGlvbigpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KEZvbnRGYW1pbHkoKSk7Ci0g
ICAgRm9udCBmb250KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7IC8vIHNwYWNpbmcgaGFuZGxlZCBi
eSBTVkcgdGV4dCBjb2RlLgotICAgIGZvbnQudXBkYXRlKGRhdGEuZm9udC0+Zm9udFNlbGVjdG9y
KCkpOwotCi0gICAgZGF0YS5sZW5ndGggKz0gZm9udC53aWR0aChydW4pOwotfQotCi0KLVNWR0Zv
bnRFbGVtZW50KiBGb250OjpzdmdGb250KCkgY29uc3QKLXsgCi0gICAgaWYgKCFpc1NWR0ZvbnQo
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQg
PSAwOwotICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKLSAgICBp
ZiAoc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKHByaW1hcnlGb250KCksIGZv
bnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKQotICAgICAgICByZXR1cm4gZm9udEVsZW1lbnQ7
Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBmbG9hdCBmbG9hdFdpZHRoT2ZTdWJT
dHJpbmdVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBp
bnQgZXh0cmFDaGFyc0F2YWlsYWJsZSwgaW50IGZyb20sIGludCB0bywgaW50JiBjaGFyc0NvbnN1
bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkKLXsKLSAgICBpbnQgbmV3RnJvbSA9IHRvID4gZnJvbSA/
IGZyb20gOiB0bzsKLSAgICBpbnQgbmV3VG8gPSB0byA+IGZyb20gPyB0byA6IGZyb207Ci0KLSAg
ICBmcm9tID0gbmV3RnJvbTsKLSAgICB0byA9IG5ld1RvOwotCi0gICAgU1ZHRm9udEVsZW1lbnQq
IGZvbnRFbGVtZW50ID0gMDsKLSAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVu
dCA9IDA7Ci0KLSAgICBpZiAoY29uc3QgU1ZHRm9udERhdGEqIGZvbnREYXRhID0gc3ZnRm9udEFu
ZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnQtPnByaW1hcnlGb250KCksIGZvbnRGYWNl
RWxlbWVudCwgZm9udEVsZW1lbnQpKSB7Ci0gICAgICAgIGlmICghZm9udEVsZW1lbnQpCi0gICAg
ICAgICAgICByZXR1cm4gMC4wZjsKLQotICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRM
ZW5ndGhEYXRhIGRhdGE7Ci0KLSAgICAgICAgZGF0YS5mb250ID0gZm9udDsKLSAgICAgICAgZGF0
YS5hdCA9IGZyb207Ci0gICAgICAgIGRhdGEuZnJvbSA9IGZyb207Ci0gICAgICAgIGRhdGEudG8g
PSB0bzsKLSAgICAgICAgZGF0YS5leHRyYUNoYXJzQXZhaWxhYmxlID0gZXh0cmFDaGFyc0F2YWls
YWJsZTsKLSAgICAgICAgZGF0YS5jaGFyc0NvbnN1bWVkID0gMDsKLSAgICAgICAgZGF0YS5zY2Fs
ZSA9IGNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnQtPnNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51
bml0c1BlckVtKCksIDEuMGYpOwotICAgICAgICBkYXRhLmxlbmd0aCA9IDAuMGY7Ci0KLSAgICAg
ICAgU3RyaW5nIGxhbmd1YWdlOwotICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gZmFsc2U7
IC8vIEhvbGRzIHRydWUgZm9yIEhUTUwgdGV4dAotCi0gICAgICAgIC8vIFRPRE86IGxhbmd1YWdl
IG1hdGNoaW5nICYgc3ZnIGdseXBocyBzaG91bGQgYmUgcG9zc2libGUgZm9yIEhUTUwgdGV4dCwg
dG9vLgotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QgPSBydW4ucmVmZXJl
bmNpbmdSZW5kZXJPYmplY3QoKSkgewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBwYXJlbnRS
ZW5kZXJlciA9IHJlbmRlck9iamVjdC0+cGFyZW50KCk7Ci0gICAgICAgICAgICBBU1NFUlQocGFy
ZW50UmVuZGVyZXIpOwotICAgICAgICAgICAgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3Jp
dGluZ01vZGUocGFyZW50UmVuZGVyZXItPnN0eWxlKCktPnN2Z1N0eWxlKCkpOwotCi0gICAgICAg
ICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0VsZW1lbnQqPihw
YXJlbnRSZW5kZXJlci0+bm9kZSgpKSkKLSAgICAgICAgICAgICAgICBsYW5ndWFnZSA9IGVsZW1l
bnQtPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgU1ZHVGV4dFJ1bldhbGtlcjxTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhPiBy
dW5XYWxrZXIoZm9udERhdGEsIGZvbnRFbGVtZW50LCBkYXRhLCBmbG9hdFdpZHRoVXNpbmdTVkdG
b250Q2FsbGJhY2ssIGZsb2F0V2lkdGhNaXNzaW5nR2x5cGhDYWxsYmFjayk7Ci0gICAgICAgIHJ1
bldhbGtlci53YWxrKHJ1biwgaXNWZXJ0aWNhbFRleHQsIGxhbmd1YWdlLCBmcm9tLCB0byk7Ci0g
ICAgICAgIGNoYXJzQ29uc3VtZWQgPSBkYXRhLmNoYXJzQ29uc3VtZWQ7Ci0gICAgICAgIGdseXBo
TmFtZSA9IGRhdGEuZ2x5cGhOYW1lOwotICAgICAgICByZXR1cm4gZGF0YS5sZW5ndGg7Ci0gICAg
fQotCi0gICAgcmV0dXJuIDAuMGY7Ci19Ci0KLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhVc2luZ1NW
R0ZvbnQoY29uc3QgVGV4dFJ1biYgcnVuKSBjb25zdAotewotICAgIGludCBjaGFyc0NvbnN1bWVk
OwotICAgIFN0cmluZyBnbHlwaE5hbWU7Ci0gICAgcmV0dXJuIGZsb2F0V2lkdGhPZlN1YlN0cmlu
Z1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIDAsIDAsIHJ1bi5sZW5ndGgoKSwgY2hhcnNDb25zdW1l
ZCwgZ2x5cGhOYW1lKTsKLX0KLQotZmxvYXQgRm9udDo6ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChj
b25zdCBUZXh0UnVuJiBydW4sIGludCBleHRyYUNoYXJzQXZhaWxhYmxlLCBpbnQmIGNoYXJzQ29u
c3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAotewotICAgIHJldHVybiBmbG9hdFdpZHRo
T2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQodGhpcywgcnVuLCBleHRyYUNoYXJzQXZhaWxhYmxlLCAw
LCBydW4ubGVuZ3RoKCksIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7Ci19Ci0KLS8vIENhbGxi
YWNrICYgZGF0YSBzdHJ1Y3R1cmVzIHRvIGRyYXcgdGV4dCB1c2luZyBTVkcgRm9udHMKLXN0cnVj
dCBTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhIHsKLSAgICBpbnQgZXh0cmFDaGFyc0F2YWls
YWJsZTsKLSAgICBpbnQgY2hhcnNDb25zdW1lZDsKLSAgICBTdHJpbmcgZ2x5cGhOYW1lOwotICAg
IFZlY3RvcjxTVkdHbHlwaD4gZ2x5cGhJZGVudGlmaWVyczsKLSAgICBWZWN0b3I8VUNoYXI+IGZh
bGxiYWNrQ2hhcmFjdGVyczsKLX07Ci0KLXN0YXRpYyBib29sIGRyYXdUZXh0VXNpbmdTVkdGb250
Q2FsbGJhY2soY29uc3QgU1ZHR2x5cGgmIGlkZW50aWZpZXIsIFNWR1RleHRSdW5XYWxrZXJEcmF3
VGV4dERhdGEmIGRhdGEpCi17Ci0gICAgZGF0YS5nbHlwaElkZW50aWZpZXJzLmFwcGVuZChpZGVu
dGlmaWVyKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgZHJhd1RleHRNaXNz
aW5nR2x5cGhDYWxsYmFjayhjb25zdCBUZXh0UnVuJiBydW4sIFNWR1RleHRSdW5XYWxrZXJEcmF3
VGV4dERhdGEmIGRhdGEpCi17Ci0gICAgQVNTRVJUKHJ1bi5sZW5ndGgoKSA9PSAxKTsKLSAgICBk
YXRhLmdseXBoSWRlbnRpZmllcnMuYXBwZW5kKFNWR0dseXBoKCkpOwotICAgIGRhdGEuZmFsbGJh
Y2tDaGFyYWN0ZXJzLmFwcGVuZChydW5bMF0pOwotfQotCi12b2lkIEZvbnQ6OmRyYXdUZXh0VXNp
bmdTVkdGb250KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVt
ZW50ID0gMDsKLSAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7Ci0K
LSAgICBpZiAoY29uc3QgU1ZHRm9udERhdGEqIGZvbnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNl
RWxlbWVudEZvckZvbnREYXRhKHByaW1hcnlGb250KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVs
ZW1lbnQpKSB7Ci0gICAgICAgIGlmICghZm9udEVsZW1lbnQpCi0gICAgICAgICAgICByZXR1cm47
Ci0KLSAgICAgICAgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSBkYXRhOwotICAgICAgICBG
bG9hdFBvaW50IGN1cnJlbnRQb2ludCA9IHBvaW50OwotICAgICAgICBmbG9hdCBzY2FsZSA9IGNv
bnZlcnRFbVVuaXRUb1BpeGVsKHNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCks
IDEuMGYpOwotCi0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQYWludGluZ1Jlc291
cmNlID0gcnVuLmFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoKTsKLQotICAgICAgICAvLyBJZiByZW5k
ZXJPYmplY3QgaXMgbm90IHNldCwgd2UncmUgZGVhbGluZyBmb3IgSFRNTCB0ZXh0IHJlbmRlcmVk
IHVzaW5nIFNWRyBGb250cy4KLSAgICAgICAgaWYgKCFydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmpl
Y3QoKSkgewotICAgICAgICAgICAgQVNTRVJUKCFhY3RpdmVQYWludGluZ1Jlc291cmNlKTsKLQot
ICAgICAgICAgICAgLy8gVE9ETzogV2UncmUgb25seSBzdXBwb3J0aW5nIHNpbXBsZSBmaWxsZWQg
SFRNTCB0ZXh0IHNvIGZhci4KLSAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xv
ciogc29saWRQYWludGluZ1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlk
UGFpbnRpbmdSZXNvdXJjZSgpOwotICAgICAgICAgICAgc29saWRQYWludGluZ1Jlc291cmNlLT5z
ZXRDb2xvcihjb250ZXh0LT5maWxsQ29sb3IoKSk7Ci0KLSAgICAgICAgICAgIGFjdGl2ZVBhaW50
aW5nUmVzb3VyY2UgPSBzb2xpZFBhaW50aW5nUmVzb3VyY2U7Ci0gICAgICAgIH0KLQotICAgICAg
ICBBU1NFUlQoYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSk7Ci0KLSAgICAgICAgaW50IGNoYXJzQ29u
c3VtZWQ7Ci0gICAgICAgIFN0cmluZyBnbHlwaE5hbWU7Ci0gICAgICAgIGJvb2wgaXNWZXJ0aWNh
bFRleHQgPSBmYWxzZTsKLSAgICAgICAgZmxvYXQgeFN0YXJ0T2Zmc2V0ID0gZmxvYXRXaWR0aE9m
U3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgMCwgcnVuLnJ0bCgpID8gdG8gOiAwLCBy
dW4ucnRsKCkgPyBydW4ubGVuZ3RoKCkgOiBmcm9tLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUp
OwotICAgICAgICBGbG9hdFBvaW50IGdseXBoT3JpZ2luOwotCi0gICAgICAgIFN0cmluZyBsYW5n
dWFnZTsKLQotICAgICAgICAvLyBUT0RPOiBsYW5ndWFnZSBtYXRjaGluZyAmIHN2ZyBnbHlwaHMg
c2hvdWxkIGJlIHBvc3NpYmxlIGZvciBIVE1MIHRleHQsIHRvby4KLSAgICAgICAgUmVuZGVyT2Jq
ZWN0KiByZWZlcmVuY2luZ1JlbmRlck9iamVjdCA9IHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVj
dCgpOwotICAgICAgICBSZW5kZXJPYmplY3QqIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50
ID0gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3QgPyByZWZlcmVuY2luZ1JlbmRlck9iamVjdC0+cGFy
ZW50KCkgOiAwOwotICAgICAgICBSZW5kZXJTdHlsZSogcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQ
YXJlbnRTdHlsZSA9IDA7Ci0gICAgICAgIGlmIChyZWZlcmVuY2luZ1JlbmRlck9iamVjdCkgewot
ICAgICAgICAgICAgQVNTRVJUKHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50KTsKLSAgICAg
ICAgICAgIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5bGUgPSByZWZlcmVuY2luZ1Jl
bmRlck9iamVjdFBhcmVudC0+c3R5bGUoKTsKLQotICAgICAgICAgICAgaXNWZXJ0aWNhbFRleHQg
PSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUocmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnRTdHls
ZS0+c3ZnU3R5bGUoKSk7ICAgIAotICAgICAgICAgICAgaWYgKFNWR0VsZW1lbnQqIGVsZW1lbnQg
PSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnQt
Pm5vZGUoKSkpCi0gICAgICAgICAgICAgICAgbGFuZ3VhZ2UgPSBlbGVtZW50LT5nZXRBdHRyaWJ1
dGUoWE1MTmFtZXM6OmxhbmdBdHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICghaXNWZXJ0
aWNhbFRleHQpIHsKLSAgICAgICAgICAgIGdseXBoT3JpZ2luLnNldFgoZm9udERhdGEtPmhvcml6
b250YWxPcmlnaW5YKCkgKiBzY2FsZSk7Ci0gICAgICAgICAgICBnbHlwaE9yaWdpbi5zZXRZKGZv
bnREYXRhLT5ob3Jpem9udGFsT3JpZ2luWSgpICogc2NhbGUpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgZGF0YS5leHRyYUNoYXJzQXZhaWxhYmxlID0gMDsKLSAgICAgICAgZGF0YS5jaGFyc0NvbnN1
bWVkID0gMDsKLQotICAgICAgICBTVkdUZXh0UnVuV2Fsa2VyPFNWR1RleHRSdW5XYWxrZXJEcmF3
VGV4dERhdGE+IHJ1bldhbGtlcihmb250RGF0YSwgZm9udEVsZW1lbnQsIGRhdGEsIGRyYXdUZXh0
VXNpbmdTVkdGb250Q2FsbGJhY2ssIGRyYXdUZXh0TWlzc2luZ0dseXBoQ2FsbGJhY2spOwotICAg
ICAgICBydW5XYWxrZXIud2FsayhydW4sIGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgZnJvbSwg
dG8pOwotCi0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlTW9kZSByZXNvdXJjZU1vZGUgPSBjb250
ZXh0LT50ZXh0RHJhd2luZ01vZGUoKSA9PSBUZXh0TW9kZVN0cm9rZSA/IEFwcGx5VG9TdHJva2VN
b2RlIDogQXBwbHlUb0ZpbGxNb2RlOwotCi0gICAgICAgIHVuc2lnbmVkIG51bUdseXBocyA9IGRh
dGEuZ2x5cGhJZGVudGlmaWVycy5zaXplKCk7Ci0gICAgICAgIHVuc2lnbmVkIGZhbGxiYWNrQ2hh
cmFjdGVySW5kZXggPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtR2x5
cGhzOyArK2kpIHsKLSAgICAgICAgICAgIGNvbnN0IFNWR0dseXBoJiBpZGVudGlmaWVyID0gZGF0
YS5nbHlwaElkZW50aWZpZXJzW3J1bi5ydGwoKSA/IG51bUdseXBocyAtIGkgLSAxIDogaV07Ci0g
ICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc1ZhbGlkKSB7Ci0gICAgICAgICAgICAgICAgLy8g
RklYTUU6IFN1cHBvcnQgYXJiaXRhcnkgU1ZHIGNvbnRlbnQgYXMgZ2x5cGggKGN1cnJlbnRseSBs
aW1pdGVkIHRvIDxnbHlwaCBkPSIuLi4iPiBzaXR1YXRpb25zKS4KLSAgICAgICAgICAgICAgICBp
ZiAoIWlkZW50aWZpZXIucGF0aERhdGEuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7Ci0KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKGlzVmVydGljYWxUZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBnbHlwaE9yaWdpbi5zZXRYKGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5YICogc2NhbGUp
OwotICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WShpZGVudGlmaWVyLnZl
cnRpY2FsT3JpZ2luWSAqIHNjYWxlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgICAgIEFmZmluZVRyYW5zZm9ybSBnbHlwaFBhdGhUcmFuc2Zvcm07Ci0gICAgICAg
ICAgICAgICAgICAgIGdseXBoUGF0aFRyYW5zZm9ybS50cmFuc2xhdGUoeFN0YXJ0T2Zmc2V0ICsg
Y3VycmVudFBvaW50LngoKSArIGdseXBoT3JpZ2luLngoKSwgY3VycmVudFBvaW50LnkoKSArIGds
eXBoT3JpZ2luLnkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGdseXBoUGF0aFRyYW5zZm9ybS5z
Y2FsZShzY2FsZSwgLXNjYWxlKTsKLQotICAgICAgICAgICAgICAgICAgICBQYXRoIGdseXBoUGF0
aCA9IGlkZW50aWZpZXIucGF0aERhdGE7Ci0gICAgICAgICAgICAgICAgICAgIGdseXBoUGF0aC50
cmFuc2Zvcm0oZ2x5cGhQYXRoVHJhbnNmb3JtKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
YWN0aXZlUGFpbnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZShyZWZlcmVuY2luZ1JlbmRlck9i
amVjdFBhcmVudCwgcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnRTdHlsZSwgY29udGV4dCwg
cmVzb3VyY2VNb2RlKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZmVyZW5jaW5n
UmVuZGVyT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyU1ZHSW5s
aW5lVGV4dCogdGV4dFJlbmRlcmVyID0gdG9SZW5kZXJTVkdJbmxpbmVUZXh0KHJlZmVyZW5jaW5n
UmVuZGVyT2JqZWN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRT
dHJva2VUaGlja25lc3MoY29udGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCkgKiB0ZXh0UmVuZGVyZXIt
PnNjYWxpbmdGYWN0b3IoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShy
ZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5
cGhQYXRoKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgICAgIGlmIChpc1ZlcnRpY2FsVGV4dCkKLSAgICAgICAgICAgICAgICAgICAgY3Vy
cmVudFBvaW50Lm1vdmUoMC4wZiwgaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZICogc2NhbGUp
OwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudFBvaW50
Lm1vdmUoaWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVggKiBzY2FsZSwgMC4wZik7Ci0gICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEhhbmRsZSBzeXN0ZW0gZm9udCBm
YWxsYmFjawotICAgICAgICAgICAgICAgIEZvbnREZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24o
bV9mb250RGVzY3JpcHRpb24pOwotICAgICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRG
YW1pbHkoRm9udEZhbWlseSgpKTsKLSAgICAgICAgICAgICAgICBGb250IGZvbnQoZm9udERlc2Ny
aXB0aW9uLCAwLCAwKTsgLy8gc3BhY2luZyBoYW5kbGVkIGJ5IFNWRyB0ZXh0IGNvZGUuCi0gICAg
ICAgICAgICAgICAgZm9udC51cGRhdGUoZm9udFNlbGVjdG9yKCkpOwotCi0gICAgICAgICAgICAg
ICAgVGV4dFJ1biBmYWxsYmFja0NoYXJhY3RlclJ1bihydW4pOwotICAgICAgICAgICAgICAgIGZh
bGxiYWNrQ2hhcmFjdGVyUnVuLnNldFRleHQoJmRhdGEuZmFsbGJhY2tDaGFyYWN0ZXJzW3J1bi5y
dGwoKSA/IGRhdGEuZmFsbGJhY2tDaGFyYWN0ZXJzLnNpemUoKSAtIGZhbGxiYWNrQ2hhcmFjdGVy
SW5kZXggLSAxIDogZmFsbGJhY2tDaGFyYWN0ZXJJbmRleF0sIDEpOwotICAgICAgICAgICAgICAg
IGZvbnQuZHJhd1RleHQoY29udGV4dCwgZmFsbGJhY2tDaGFyYWN0ZXJSdW4sIGN1cnJlbnRQb2lu
dCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnRQb2ludC5tb3ZlKDAuMGYsIGZvbnQud2lkdGgoZmFsbGJhY2tDaGFyYWN0
ZXJSdW4pKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGN1cnJl
bnRQb2ludC5tb3ZlKGZvbnQud2lkdGgoZmFsbGJhY2tDaGFyYWN0ZXJSdW4pLCAwLjBmKTsKLQot
ICAgICAgICAgICAgICAgIGZhbGxiYWNrQ2hhcmFjdGVySW5kZXgrKzsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgIH0KLX0KLQotRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JU
ZXh0VXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGludCBoZWlnaHQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Ci17Ci0gICAgaW50IGNoYXJz
Q29uc3VtZWQ7Ci0gICAgU3RyaW5nIGdseXBoTmFtZTsKLQotICAgIHJldHVybiBGbG9hdFJlY3Qo
cG9pbnQueCgpICsgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwg
MCwgcnVuLnJ0bCgpID8gdG8gOiAwLCBydW4ucnRsKCkgPyBydW4ubGVuZ3RoKCkgOiBmcm9tLCBj
aGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpLAotICAgICAgICAgICAgICAgICAgICAgcG9pbnQueSgp
LCBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQodGhpcywgcnVuLCAwLCBmcm9tLCB0
bywgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKSwgaGVpZ2h0KTsKLX0KLQotaW50IEZvbnQ6Om9m
ZnNldEZvclBvc2l0aW9uRm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBUZXh0UnVuJiwgZmxvYXQs
IGJvb2wpIGNvbnN0Ci17Ci0gICAgLy8gVE9ETzogRml4IHRleHQgc2VsZWN0aW9uIHdoZW4gSFRN
TCB0ZXh0IGlzIGRyYXduIHVzaW5nIGEgU1ZHIEZvbnQKLSAgICAvLyBXZSBuZWVkIHRvIGludGVn
cmF0ZSB0aGUgU1ZHIHRleHQgc2VsZWN0aW9uIGNvZGUgaW4gdGhlIG9mZnNldEZvclBvc2l0aW9u
KCkgZnJhbWV3b3JrLgotICAgIC8vIFRoaXMgd2lsbCBhbHNvIGZpeCBhIG1ham9yIGlzc3VlLCB0
aGF0IFNWRyBUZXh0IGNvZGUgY2FuJ3Qgc2VsZWN0IGFyYWJpYyBzdHJpbmdzIHByb3Blcmx5Lgot
ICAgIHJldHVybiAwOwotfQotCi19Ci0KLSNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dERhdGEuY3BwCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250
RGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDYgKzIyLDkgQEAKICNpZiBFTkFCTEUoU1ZH
X0ZPTlRTKQogI2luY2x1ZGUgIlNWR0ZvbnREYXRhLmgiCiAKKyNpbmNsdWRlICJTVkdGb250RWxl
bWVudC5oIgorI2luY2x1ZGUgIlNWR0dseXBoLmgiCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
U1ZHRm9udERhdGE6OlNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZhY2VFbGVt
ZW50KQpAQCAtMzYsNiArMzksNjEgQEAgU1ZHRm9udERhdGE6OlNWR0ZvbnREYXRhKFNWR0ZvbnRG
YWNlRWxlbQogICAgIEFTU0VSVF9BUkcoZm9udEZhY2VFbGVtZW50LCBmb250RmFjZUVsZW1lbnQp
OwogfQogCit2b2lkIFNWR0ZvbnREYXRhOjppbml0aWFsaXplRm9udERhdGEoU2ltcGxlRm9udERh
dGEqIGZvbnREYXRhLCBpbnQgc2l6ZSkKK3sKKyAgICBBU1NFUlQoZm9udERhdGEpOworCisgICAg
U1ZHRm9udEZhY2VFbGVtZW50KiBzdmdGb250RmFjZUVsZW1lbnQgPSB0aGlzLT5zdmdGb250RmFj
ZUVsZW1lbnQoKTsKKyAgICB1bnNpZ25lZCB1bml0c1BlckVtID0gc3ZnRm9udEZhY2VFbGVtZW50
LT51bml0c1BlckVtKCk7CisKKyAgICBmbG9hdCBzY2FsZSA9IHNpemU7CisgICAgaWYgKHVuaXRz
UGVyRW0pCisgICAgICAgIHNjYWxlIC89IHVuaXRzUGVyRW07CisKKyAgICBmbG9hdCB4SGVpZ2h0
ID0gc3ZnRm9udEZhY2VFbGVtZW50LT54SGVpZ2h0KCkgKiBzY2FsZTsKKyAgICBmbG9hdCBhc2Nl
bnQgPSBzdmdGb250RmFjZUVsZW1lbnQtPmFzY2VudCgpICogc2NhbGU7CisgICAgZmxvYXQgZGVz
Y2VudCA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+ZGVzY2VudCgpICogc2NhbGU7CisgICAgZmxvYXQg
bGluZUdhcCA9IDAuMWYgKiBzaXplOworCisgICAgU1ZHRm9udEVsZW1lbnQqIGFzc29jaWF0ZWRG
b250RWxlbWVudCA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+YXNzb2NpYXRlZEZvbnRFbGVtZW50KCk7
CisgICAgaWYgKCF4SGVpZ2h0KSB7CisgICAgICAgIC8vIEZhbGxiYWNrIGlmIHhfaGVpZ2h0QXR0
ciBpcyBub3Qgc3BlY2lmaWVkIGZvciB0aGUgZm9udCBlbGVtZW50LgorICAgICAgICBWZWN0b3I8
U1ZHR2x5cGg+IGxldHRlclhHbHlwaHM7CisgICAgICAgIGFzc29jaWF0ZWRGb250RWxlbWVudC0+
Z2V0R2x5cGhJZGVudGlmaWVyc0ZvclN0cmluZyhTdHJpbmcoIngiLCAxKSwgbGV0dGVyWEdseXBo
cyk7CisgICAgICAgIHhIZWlnaHQgPSBsZXR0ZXJYR2x5cGhzLmlzRW1wdHkoKSA/IDIgKiBhc2Nl
bnQgLyAzIDogbGV0dGVyWEdseXBocy5maXJzdCgpLmhvcml6b250YWxBZHZhbmNlWCAqIHNjYWxl
OworICAgIH0KKworICAgIEZvbnRNZXRyaWNzJiBmb250TWV0cmljcyA9IGZvbnREYXRhLT5mb250
TWV0cmljcygpOworICAgIGZvbnRNZXRyaWNzLnNldFVuaXRzUGVyRW0odW5pdHNQZXJFbSk7Cisg
ICAgZm9udE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7CisgICAgZm9udE1ldHJpY3Muc2V0RGVz
Y2VudChkZXNjZW50KTsKKyAgICBmb250TWV0cmljcy5zZXRMaW5lR2FwKGxpbmVHYXApOworICAg
IGZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKHJvdW5kZihhc2NlbnQpICsgcm91bmRmKGRlc2Nl
bnQpICsgcm91bmRmKGxpbmVHYXApKTsKKyAgICBmb250TWV0cmljcy5zZXRYSGVpZ2h0KHhIZWln
aHQpOworCisgICAgVmVjdG9yPFNWR0dseXBoPiBzcGFjZUdseXBoczsKKyAgICBhc3NvY2lhdGVk
Rm9udEVsZW1lbnQtPmdldEdseXBoSWRlbnRpZmllcnNGb3JTdHJpbmcoU3RyaW5nKCIgIiwgMSks
IHNwYWNlR2x5cGhzKTsKKyAgICBmb250RGF0YS0+c2V0U3BhY2VXaWR0aChzcGFjZUdseXBocy5p
c0VtcHR5KCkgPyB4SGVpZ2h0IDogc3BhY2VHbHlwaHMuZmlyc3QoKS5ob3Jpem9udGFsQWR2YW5j
ZVggKiBzY2FsZSk7CisKKyAgICBWZWN0b3I8U1ZHR2x5cGg+IG51bWVyYWxaZXJvR2x5cGhzOwor
ICAgIGFzc29jaWF0ZWRGb250RWxlbWVudC0+Z2V0R2x5cGhJZGVudGlmaWVyc0ZvclN0cmluZyhT
dHJpbmcoIjAiLCAxKSwgbnVtZXJhbFplcm9HbHlwaHMpOworICAgIGZvbnREYXRhLT5zZXRBdmdD
aGFyV2lkdGgobnVtZXJhbFplcm9HbHlwaHMuaXNFbXB0eSgpID8gZm9udERhdGEtPnNwYWNlV2lk
dGgoKSA6IG51bWVyYWxaZXJvR2x5cGhzLmZpcnN0KCkuaG9yaXpvbnRhbEFkdmFuY2VYICogc2Nh
bGUpOworCisgICAgVmVjdG9yPFNWR0dseXBoPiBsZXR0ZXJXR2x5cGhzOworICAgIGFzc29jaWF0
ZWRGb250RWxlbWVudC0+Z2V0R2x5cGhJZGVudGlmaWVyc0ZvclN0cmluZyhTdHJpbmcoIlciLCAx
KSwgbGV0dGVyV0dseXBocyk7CisgICAgZm9udERhdGEtPnNldE1heENoYXJXaWR0aChsZXR0ZXJX
R2x5cGhzLmlzRW1wdHkoKSA/IGFzY2VudCA6IGxldHRlcldHbHlwaHMuZmlyc3QoKS5ob3Jpem9u
dGFsQWR2YW5jZVggKiBzY2FsZSk7CisKKyAgICAvLyBGSVhNRTogaXMgdGhlcmUgYSB3YXkgd2Ug
Y2FuIGdldCB0aGUgc3BhY2UgZ2x5cGggZnJvbSB0aGUgU1ZHR2x5cGggYWJvdmU/CisgICAgZm9u
dERhdGEtPnNldFNwYWNlR2x5cGgoMCk7CisgICAgZm9udERhdGEtPnNldFplcm9XaWR0aFNwYWNl
R2x5cGgoMCk7CisgICAgZm9udERhdGEtPmRldGVybWluZVBpdGNoKCk7CisKKyAgICBHbHlwaERh
dGEgbWlzc2luZ0dseXBoRGF0YTsKKyAgICBtaXNzaW5nR2x5cGhEYXRhLmZvbnREYXRhID0gZm9u
dERhdGE7CisgICAgbWlzc2luZ0dseXBoRGF0YS5nbHlwaCA9IDA7CisgICAgZm9udERhdGEtPnNl
dE1pc3NpbmdHbHlwaERhdGEobWlzc2luZ0dseXBoRGF0YSk7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuaAkocmV2aXNp
b24gODY5NDIpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMjEsMTYgKzIxLDIzIEBACiAjZGVmaW5lIFNWR0ZvbnREYXRhX2gKIAogI2lmIEVO
QUJMRShTVkdfRk9OVFMpCisjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJT
VkdGb250RmFjZUVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTVkdG
b250RGF0YSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU1ZHRm9udERhdGEpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK2NsYXNzIFNWR0ZvbnREYXRhIDogcHVibGljIFNpbXBsZUZvbnRE
YXRhOjpBYnN0cmFjdEZvbnREYXRhIHsKIHB1YmxpYzoKLSAgICBTVkdGb250RGF0YShTVkdGb250
RmFjZUVsZW1lbnQqKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxTVkdGb250RGF0YT4gY3JlYXRl
KFNWR0ZvbnRGYWNlRWxlbWVudCogZWxlbWVudCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFB0cihuZXcgU1ZHRm9udERhdGEoZWxlbWVudCkpOworICAgIH0KKwogICAgIHZpcnR1YWwgflNW
R0ZvbnREYXRhKCkgeyB9CiAKKyAgICB2aXJ0dWFsIGJvb2wgaXNTVkdGb250RGF0YSgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnREYXRhKFNp
bXBsZUZvbnREYXRhKiwgaW50IHNpemUpOworCiAgICAgU1ZHRm9udEZhY2VFbGVtZW50KiBzdmdG
b250RmFjZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX3N2Z0ZvbnRGYWNlRWxlbWVudDsgfQog
CiAgICAgZmxvYXQgaG9yaXpvbnRhbE9yaWdpblgoKSBjb25zdCB7IHJldHVybiBtX2hvcml6b250
YWxPcmlnaW5YOyB9CkBAIC00Miw2ICs0OSw4IEBAIHB1YmxpYzoKICAgICBmbG9hdCB2ZXJ0aWNh
bEFkdmFuY2VZKCkgY29uc3QgeyByZXR1cm4gbV92ZXJ0aWNhbEFkdmFuY2VZOyB9CiAKIHByaXZh
dGU6CisgICAgU1ZHRm9udERhdGEoU1ZHRm9udEZhY2VFbGVtZW50Kik7CisKICAgICAvLyBUaHMg
U1ZHRm9udEZhY2VFbGVtZW50IGlzIGtlcHQgYWxpdmUgLS0KICAgICAvLyAxKSBpbiB0aGUgZXh0
ZXJuYWwgZm9udCBjYXNlOiBieSB0aGUgQ1NTRm9udEZhY2VTb3VyY2UsIHdoaWNoIGhvbGRzIGEg
cmVmZXJlbmNlIHRvIHRoZSBleHRlcm5hbCBTVkcgZG9jdW1lbnQKICAgICAvLyAgICBjb250YWlu
aW5nIHRoZSBlbGVtZW50OwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVudC5j
cHAJKHJldmlzaW9uIDg2OTQyKQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0dseXBoRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDE3ICszMCwxMyBAQAogI2luY2x1ZGUgIlNWR0Zv
bnRGYWNlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHUGF0
aFBhcnNlckZhY3RvcnkuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUg
IlhNTE5hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIFNW
R05hbWVzOwotCiBpbmxpbmUgU1ZHR2x5cGhFbGVtZW50OjpTVkdHbHlwaEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogU1ZHU3R5
bGVkRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoaGFzVGFnTmFtZShn
bHlwaFRhZykpOworICAgIEFTU0VSVChoYXNUYWdOYW1lKFNWR05hbWVzOjpnbHlwaFRhZykpOwog
fQogCiBQYXNzUmVmUHRyPFNWR0dseXBoRWxlbWVudD4gU1ZHR2x5cGhFbGVtZW50OjpjcmVhdGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAtMTUw
LDI4ICsxNDYsMjggQEAgdm9pZCBTVkdHbHlwaEVsZW1lbnQ6OmZpbGxBdHRyaWJ1dGVUb1Bybwog
U1ZHR2x5cGggU1ZHR2x5cGhFbGVtZW50OjpidWlsZEdlbmVyaWNHbHlwaElkZW50aWZpZXIoY29u
c3QgU1ZHRWxlbWVudCogZWxlbWVudCkKIHsKICAgICBTVkdHbHlwaCBpZGVudGlmaWVyOwotICAg
IGlkZW50aWZpZXIucGF0aERhdGEgPSBwYXJzZVBhdGhEYXRhKGVsZW1lbnQtPmdldEF0dHJpYnV0
ZShkQXR0cikpOworICAgIGlkZW50aWZpZXIucGF0aERhdGEgPSBwYXJzZVBhdGhEYXRhKGVsZW1l
bnQtPmdldEF0dHJpYnV0ZShTVkdOYW1lczo6ZEF0dHIpKTsKICAKICAgICAvLyBTcGVjOiBUaGUg
aG9yaXpvbnRhbCBhZHZhbmNlIGFmdGVyIHJlbmRlcmluZyB0aGUgZ2x5cGggaW4gaG9yaXpvbnRh
bCBvcmllbnRhdGlvbi4KICAgICAvLyBJZiB0aGUgYXR0cmlidXRlIGlzIG5vdCBzcGVjaWZpZWQs
IHRoZSBlZmZlY3QgaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0byB0aGUKICAgICAv
LyB2YWx1ZSBvZiB0aGUgZm9udCdzIGhvcml6LWFkdi14IGF0dHJpYnV0ZS4gR2x5cGggd2lkdGhz
IGFyZSByZXF1aXJlZCB0byBiZSBub24tbmVnYXRpdmUsCiAgICAgLy8gZXZlbiBpZiB0aGUgZ2x5
cGggaXMgdHlwaWNhbGx5IHJlbmRlcmVkIHJpZ2h0LXRvLWxlZnQsIGFzIGluIEhlYnJldyBhbmQg
QXJhYmljIHNjcmlwdHMuCi0gICAgaWRlbnRpZmllci5ob3Jpem9udGFsQWR2YW5jZVggPSBwYXJz
ZVNWR0dseXBoQXR0cmlidXRlKGVsZW1lbnQsIGhvcml6X2Fkdl94QXR0cik7CisgICAgaWRlbnRp
Zmllci5ob3Jpem9udGFsQWR2YW5jZVggPSBwYXJzZVNWR0dseXBoQXR0cmlidXRlKGVsZW1lbnQs
IFNWR05hbWVzOjpob3Jpel9hZHZfeEF0dHIpOwogCiAgICAgLy8gU3BlYzogVGhlIFgtY29vcmRp
bmF0ZSBpbiB0aGUgZm9udCBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgb3JpZ2luIG9mIHRoZSBn
bHlwaCB0byBiZQogICAgIC8vIHVzZWQgd2hlbiBkcmF3aW5nIHZlcnRpY2FsbHkgb3JpZW50ZWQg
dGV4dC4gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0CiAgICAg
Ly8gaXMgYXMgaWYgdGhlIGF0dHJpYnV0ZSB3ZXJlIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIGZv
bnQncyB2ZXJ0LW9yaWdpbi14IGF0dHJpYnV0ZS4KLSAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3Jp
Z2luWCA9IHBhcnNlU1ZHR2x5cGhBdHRyaWJ1dGUoZWxlbWVudCwgdmVydF9vcmlnaW5feEF0dHIp
OworICAgIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5YID0gcGFyc2VTVkdHbHlwaEF0dHJpYnV0
ZShlbGVtZW50LCBTVkdOYW1lczo6dmVydF9vcmlnaW5feEF0dHIpOwogCiAgICAgLy8gU3BlYzog
VGhlIFktY29vcmRpbmF0ZSBpbiB0aGUgZm9udCBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgb3Jp
Z2luIG9mIGEgZ2x5cGggdG8gYmUKICAgICAvLyB1c2VkIHdoZW4gZHJhd2luZyB2ZXJ0aWNhbGx5
IG9yaWVudGVkIHRleHQuIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVm
ZmVjdAogICAgIC8vIGlzIGFzIGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBzZXQgdG8gdGhlIHZhbHVl
IG9mIHRoZSBmb250J3MgdmVydC1vcmlnaW4teSBhdHRyaWJ1dGUuCi0gICAgaWRlbnRpZmllci52
ZXJ0aWNhbE9yaWdpblkgPSBwYXJzZVNWR0dseXBoQXR0cmlidXRlKGVsZW1lbnQsIHZlcnRfb3Jp
Z2luX3lBdHRyKTsKKyAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWSA9IHBhcnNlU1ZHR2x5
cGhBdHRyaWJ1dGUoZWxlbWVudCwgU1ZHTmFtZXM6OnZlcnRfb3JpZ2luX3lBdHRyKTsKIAogICAg
IC8vIFNwZWM6IFRoZSB2ZXJ0aWNhbCBhZHZhbmNlIGFmdGVyIHJlbmRlcmluZyBhIGdseXBoIGlu
IHZlcnRpY2FsIG9yaWVudGF0aW9uLgogICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNw
ZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiB0aGUgYXR0cmlidXRlIHdlcmUgc2V0IHRvIHRo
ZQogICAgIC8vIHZhbHVlIG9mIHRoZSBmb250J3MgdmVydC1hZHYteSBhdHRyaWJ1dGUuCi0gICAg
aWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZID0gcGFyc2VTVkdHbHlwaEF0dHJpYnV0ZShlbGVt
ZW50LCB2ZXJ0X2Fkdl95QXR0cik7CisgICAgaWRlbnRpZmllci52ZXJ0aWNhbEFkdmFuY2VZID0g
cGFyc2VTVkdHbHlwaEF0dHJpYnV0ZShlbGVtZW50LCBTVkdOYW1lczo6dmVydF9hZHZfeUF0dHIp
OwogCiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CkBAIC0xNzksOSArMTc1LDkgQEAgU1ZHR2x5
cGggU1ZHR2x5cGhFbGVtZW50OjpidWlsZEdlbmVyaWNHbAogU1ZHR2x5cGggU1ZHR2x5cGhFbGVt
ZW50OjpidWlsZEdseXBoSWRlbnRpZmllcigpIGNvbnN0CiB7CiAgICAgU1ZHR2x5cGggaWRlbnRp
ZmllcihidWlsZEdlbmVyaWNHbHlwaElkZW50aWZpZXIodGhpcykpOwotICAgIGlkZW50aWZpZXIu
Z2x5cGhOYW1lID0gZ2V0QXR0cmlidXRlKGdseXBoX25hbWVBdHRyKTsKLSAgICBpZGVudGlmaWVy
Lm9yaWVudGF0aW9uID0gcGFyc2VPcmllbnRhdGlvbihnZXRBdHRyaWJ1dGUob3JpZW50YXRpb25B
dHRyKSk7Ci0gICAgaWRlbnRpZmllci5hcmFiaWNGb3JtID0gcGFyc2VBcmFiaWNGb3JtKGdldEF0
dHJpYnV0ZShhcmFiaWNfZm9ybUF0dHIpKTsKKyAgICBpZGVudGlmaWVyLmdseXBoTmFtZSA9IGdl
dEF0dHJpYnV0ZShTVkdOYW1lczo6Z2x5cGhfbmFtZUF0dHIpOworICAgIGlkZW50aWZpZXIub3Jp
ZW50YXRpb24gPSBwYXJzZU9yaWVudGF0aW9uKGdldEF0dHJpYnV0ZShTVkdOYW1lczo6b3JpZW50
YXRpb25BdHRyKSk7CisgICAgaWRlbnRpZmllci5hcmFiaWNGb3JtID0gcGFyc2VBcmFiaWNGb3Jt
KGdldEF0dHJpYnV0ZShTVkdOYW1lczo6YXJhYmljX2Zvcm1BdHRyKSk7CiAKICAgICBTdHJpbmcg
bGFuZ3VhZ2UgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmxhbmdBdHRyKTsKICAgICBpZiAoIWxh
bmd1YWdlLmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdIS2VybkVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwyMSArMjQsMTYgQEAKICNpZiBFTkFCTEUoU1ZH
X0ZPTlRTKQogI2luY2x1ZGUgIlNWR0hLZXJuRWxlbWVudC5oIgogCi0jaW5jbHVkZSAiU1ZHRm9u
dERhdGEuaCIKICNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR0ZvbnRG
YWNlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVkZSAiU2ltcGxlRm9u
dERhdGEuaCIKLSNpbmNsdWRlICJYTUxOYW1lcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LXVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKLQogaW5saW5lIFNWR0hLZXJuRWxlbWVudDo6U1ZH
SEtlcm5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1
bWVudCkKICAgICA6IFNWR0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiB7Ci0gICAgQVNTRVJU
KGhhc1RhZ05hbWUoaGtlcm5UYWcpKTsKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShTVkdOYW1lczo6
aGtlcm5UYWcpKTsKIH0KIAogUGFzc1JlZlB0cjxTVkdIS2VybkVsZW1lbnQ+IFNWR0hLZXJuRWxl
bWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2N1
bWVudCkKQEAgLTY4LDEwICs2MywxMCBAQCB2b2lkIFNWR0hLZXJuRWxlbWVudDo6cmVtb3ZlZEZy
b21Eb2N1bWVuCiAKIHZvaWQgU1ZHSEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXJuaW5n
UGFpcihLZXJuaW5nUGFpclZlY3RvciYga2VybmluZ1BhaXJzKQogewotICAgIFN0cmluZyB1MSA9
IGdldEF0dHJpYnV0ZSh1MUF0dHIpOwotICAgIFN0cmluZyBnMSA9IGdldEF0dHJpYnV0ZShnMUF0
dHIpOwotICAgIFN0cmluZyB1MiA9IGdldEF0dHJpYnV0ZSh1MkF0dHIpOwotICAgIFN0cmluZyBn
MiA9IGdldEF0dHJpYnV0ZShnMkF0dHIpOworICAgIFN0cmluZyB1MSA9IGdldEF0dHJpYnV0ZShT
VkdOYW1lczo6dTFBdHRyKTsKKyAgICBTdHJpbmcgZzEgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6
OmcxQXR0cik7CisgICAgU3RyaW5nIHUyID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjp1MkF0dHIp
OworICAgIFN0cmluZyBnMiA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6ZzJBdHRyKTsKICAgICBp
ZiAoKHUxLmlzRW1wdHkoKSAmJiBnMS5pc0VtcHR5KCkpIHx8ICh1Mi5pc0VtcHR5KCkgJiYgZzIu
aXNFbXB0eSgpKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC04MCw3ICs3NSw3IEBAIHZvaWQgU1ZH
SEtlcm5FbGVtZW50OjpidWlsZEhvcml6b250YWxLZXIKICAgICAgICAgJiYgcGFyc2VHbHlwaE5h
bWUoZzIsIGtlcm5pbmdQYWlyLmdseXBoTmFtZTIpCiAgICAgICAgICYmIHBhcnNlS2VybmluZ1Vu
aWNvZGVTdHJpbmcodTEsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTEsIGtlcm5pbmdQYWlyLnVu
aWNvZGVOYW1lMSkKICAgICAgICAgJiYgcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1Miwga2Vy
bmluZ1BhaXIudW5pY29kZVJhbmdlMiwga2VybmluZ1BhaXIudW5pY29kZU5hbWUyKSkgewotICAg
ICAgICBrZXJuaW5nUGFpci5rZXJuaW5nID0gZ2V0QXR0cmlidXRlKGtBdHRyKS5zdHJpbmcoKS50
b0Zsb2F0KCk7CisgICAgICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBnZXRBdHRyaWJ1dGUoU1ZH
TmFtZXM6OmtBdHRyKS5zdHJpbmcoKS50b0Zsb2F0KCk7CiAgICAgICAgIGtlcm5pbmdQYWlycy5h
cHBlbmQoa2VybmluZ1BhaXIpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdWS2VybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdW
S2VybkVsZW1lbnQuY3BwCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdWS2VybkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMiwyMSArMjIsMTYgQEAKICNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQogI2luY2x1ZGUgIlNWR1ZLZXJuRWxlbWVudC5oIgogCi0jaW5j
bHVkZSAiU1ZHRm9udERhdGEuaCIKICNpbmNsdWRlICJTVkdGb250RWxlbWVudC5oIgogI2luY2x1
ZGUgIlNWR0ZvbnRGYWNlRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR05hbWVzLmgiCi0jaW5jbHVk
ZSAiU2ltcGxlRm9udERhdGEuaCIKLSNpbmNsdWRlICJYTUxOYW1lcy5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLXVzaW5nIG5hbWVzcGFjZSBTVkdOYW1lczsKLQogaW5saW5lIFNWR1ZLZXJu
RWxlbWVudDo6U1ZHVktlcm5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2N1bWVudCkKICAgICA6IFNWR0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiB7
Ci0gICAgQVNTRVJUKGhhc1RhZ05hbWUodmtlcm5UYWcpKTsKKyAgICBBU1NFUlQoaGFzVGFnTmFt
ZShTVkdOYW1lczo6dmtlcm5UYWcpKTsKIH0KIAogUGFzc1JlZlB0cjxTVkdWS2VybkVsZW1lbnQ+
IFNWR1ZLZXJuRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50KiBkb2N1bWVudCkKQEAgLTY2LDEwICs2MSwxMCBAQCB2b2lkIFNWR1ZLZXJuRWxlbWVu
dDo6cmVtb3ZlZEZyb21Eb2N1bWVuCiAKIHZvaWQgU1ZHVktlcm5FbGVtZW50OjpidWlsZFZlcnRp
Y2FsS2VybmluZ1BhaXIoS2VybmluZ1BhaXJWZWN0b3ImIGtlcm5pbmdQYWlycykKIHsKLSAgICBT
dHJpbmcgdTEgPSBnZXRBdHRyaWJ1dGUodTFBdHRyKTsKLSAgICBTdHJpbmcgZzEgPSBnZXRBdHRy
aWJ1dGUoZzFBdHRyKTsKLSAgICBTdHJpbmcgdTIgPSBnZXRBdHRyaWJ1dGUodTJBdHRyKTsKLSAg
ICBTdHJpbmcgZzIgPSBnZXRBdHRyaWJ1dGUoZzJBdHRyKTsKKyAgICBTdHJpbmcgdTEgPSBnZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OnUxQXR0cik7CisgICAgU3RyaW5nIGcxID0gZ2V0QXR0cmlidXRl
KFNWR05hbWVzOjpnMUF0dHIpOworICAgIFN0cmluZyB1MiA9IGdldEF0dHJpYnV0ZShTVkdOYW1l
czo6dTJBdHRyKTsKKyAgICBTdHJpbmcgZzIgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmcyQXR0
cik7CiAgICAgaWYgKCh1MS5pc0VtcHR5KCkgJiYgZzEuaXNFbXB0eSgpKSB8fCAodTIuaXNFbXB0
eSgpICYmIGcyLmlzRW1wdHkoKSkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNzgsNyArNzMsNyBA
QCB2b2lkIFNWR1ZLZXJuRWxlbWVudDo6YnVpbGRWZXJ0aWNhbEtlcm5pCiAgICAgICAgICYmIHBh
cnNlR2x5cGhOYW1lKGcyLCBrZXJuaW5nUGFpci5nbHlwaE5hbWUyKQogICAgICAgICAmJiBwYXJz
ZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUxLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UxLCBrZXJu
aW5nUGFpci51bmljb2RlTmFtZTEpCiAgICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJp
bmcodTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTIsIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1l
MikpIHsKLSAgICAgICAga2VybmluZ1BhaXIua2VybmluZyA9IGdldEF0dHJpYnV0ZShrQXR0ciku
c3RyaW5nKCkudG9GbG9hdCgpOworICAgICAgICBrZXJuaW5nUGFpci5rZXJuaW5nID0gZ2V0QXR0
cmlidXRlKFNWR05hbWVzOjprQXR0cikuc3RyaW5nKCkudG9GbG9hdCgpOwogICAgICAgICBrZXJu
aW5nUGFpcnMuYXBwZW5kKGtlcm5pbmdQYWlyKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1ZLZXJuRWxlbWVudC5oCShyZXZpc2lvbiA4Njk0MikKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdWS2VybkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsNiBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNzIFNWR0ZvbnREYXRhOwotCiBjbGFzcyBTVkdW
S2VybkVsZW1lbnQgOiBwdWJsaWMgU1ZHRWxlbWVudCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBh
c3NSZWZQdHI8U1ZHVktlcm5FbGVtZW50PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94599</attachid>
            <date>2011-05-24 06:14:26 -0700</date>
            <delta_ts>2011-05-24 06:45:26 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>AbstractionLayer-v4.diff</filename>
            <type>text/plain</type>
            <size>139806</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MTQ1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTY2IEBACisyMDExLTA1LTI0ICBOaWtvbGFz
IFppbW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBwbGF0Zm9ybSBsYXllcmluZyB2aW9s
YXRpb246IFRleHRSdW4gc3RvcmVzIFJlbmRlck9iamVjdHMgZm9yIFNWRyBGb250cyBzdXBwb3J0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MDI1NAor
CisgICAgICAgIEZpcnN0IHBhcnQ6CisgICAgICAgIFJlbW92ZSBhIGxvbmctc3RhbmRpbmcgbGF5
ZXJpbmcgdmlvbGF0aW9uIGluIFRleHRSdW46IGl0IHN0b3JlcyBSZW5kZXJPYmplY3QvUmVuZGVy
U1ZHUmVzb3VyY2UgcG9pbnRlcnMgZm9yIFNWRyBGb250cyBzdXBwb3J0LgorICAgICAgICBSZXBs
YWNlIHRoZSB0d28gUmVuZGVyKiBwb2ludGVycyB3aXRoIGEgc2luZ2xlIFJlZlB0cjxBYnN0cmFj
dFJlbmRlcmluZ0NvbnRleHQ+LiBBYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQgaXMgYSBoZWxwZXIg
Y2xhc3MsCisgICAgICAgIHRoYXQgY2FuIGJlIGRlcml2ZWQgZnJvbSBpbiBvcmRlciB0byBhc3Nv
Y2lhdGUgYWRkaXRpb25hbCBkYXRhIHdpdGggYSBUZXh0UnVuLiBUaGlzIGVmZmVjdGl2ZWx5IHJl
ZHVjZXMgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBvZiBUZXh0UnVuLgorCisgICAgICAgIEludHJv
ZHVjZSByZW5kZXJpbmcvVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCwgd2hpY2ggaW5oZXJpdHMg
ZnJvbSBUZXh0UnVuOjpBYnN0cmFjdFJlbmRlcmluZ0NvbnRleHQgYW5kIGhvbGRzIGFkZGl0aW9u
YWwgZGF0YS4KKyAgICAgICAgSWYgdGhlIHByaW1hcnkgZm9udCBpbiB1c2UgaXMgYSBTVkcgRm9u
dCB0aGVuIGFsbG9jYXRlIGEgVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQgb2JqZWN0IGFuZCBzdG9y
ZSBpdCBpbiB0aGUgUmVmUHRyPEFic3RyYWN0UmVuZGVyaW5nQ29udGV4dD4KKyAgICAgICAgaW4g
VGV4dFJ1bi4gSWYgdGhlIHByaW1hcnkgZm9udCBpcyBub3QgYSBTVkcgRm9udCwgZG9uJ3QgZXZl
biBhbGxvY2F0ZSB0aGUgVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQgc3RydWN0dXJlLCBhcyB3ZSB3
b24ndCBuZWVkIHRoZSBjb250ZXh0IGRhdGEuCisgICAgICAgIFNWRyBGb250cyBnbHlwaCBtYXRj
aGluZyBvbmx5IHdvcmtzIHdpdGhpbiBhIGNvbnRleHQsIHNvIHdlIG5lZWQgYWNjZXNzIHRvIHRo
ZSBSZW5kZXJPYmplY3QgdGhhdCdzIGRyYXdpbmcgdGhlIHRleHQuCisKKyAgICAgICAgVGhpcyBp
cyB0aGUgbWFpbiBwcmVwYXJhdGlvbiBwYXRjaCBmb3IgdGhlIFNWRyBGb250cyByZXdyaXRlLCB0
aGF0IHdpbGwgYWxsb3cgdXMgdG8gc2hhcmUgdGhlIHNpbXBsZSB0ZXh0IGNvZGUgcGF0aCBmb3Ig
U1ZHIEZvbnRzIGFzIHdlbGwsCisgICAgICAgIG1ha2luZyBhbGwgQ1NTIHRleHQgcHJvcGVydGll
cyB3b3JrIGZvciBIVE1MIHRleHQgdXNpbmcgU1ZHIEZvbnRzLCBhbmQgYWxsb3dzIHByb3BlciBp
bnRlZ3JhdGlvbiB3aXRoaW4gdGhlIEdseXBoUGFnZSBjb25jZXB0LiBTb29uCisgICAgICAgIHdl
IGNhbiBpbnRlcm1peCBXT0ZGL1NWRyAmIG5hdGl2ZSBmb250cywgd2l0aGluIHNlZ21lbnQgZm9u
dCBkZWNsYXJhdGlvbnMuCisKKyAgICAgICAgU2Vjb25kIHBhcnQ6CisgICAgICAgIFJlbW92ZSBh
IGxvbmctc3RhbmRpbmcgbGF5ZXJpbmcgdmlvbGF0aW9uIGluIFNpbXBsZUZvbnREYXRhOiBpdCBz
dG9yZXMgU1ZHRm9udERhdGEgb2JqZWN0cywgdGhhdCBhcmUgbGl2aW5nIGluIHN2Zy8uCisgICAg
ICAgIFVzZSB0aGUgc2FtZSBjb25jZXB0IGFzIGFib3ZlLCBpbnRyb2R1Y2UgU2ltcGxlRm9udERh
dGE6OkFic3RyYWN0Rm9udERhdGEsIGFuZCBsZXQgU1ZHRm9udERhdGEgaW5oZXJpdCBmcm9tIEFi
c3RyYWN0Rm9udERhdGEgYW5kIGV4dGVudCBpdC4KKyAgICAgICAgSWYgU1ZHIEZvbnRzIGFyZSB1
c2VkLCBDU1NGb250RmFjZVNvdXJjZSB3aWxsIGNyZWF0ZSBhIFNWR0ZvbnREYXRhIG9iamVjdCBh
bmQgcGFzcyBpdCBhcyBQYXNzT3duUHRyPEFic3RyYWN0Rm9udERhdGE+IHRvIFNpbXBsZUZvbnRE
YXRhLgorCisgICAgICAgIEFsbCBsYXllcmluZyB2aW9sYXRpb25zIGFyZSBnb25lIG5vdywgU1ZH
IEZvbnRzIGFyZSBjbGVhbmx5IGludGVncmF0ZWQgbm93LgorICAgICAgICBEb2Vzbid0IGFmZmVj
dCBhbnkgdGVzdHMgeWV0LCByZWZhY3RvcmluZyBvbmx5LgorCisgICAgICAgICogQ01ha2VMaXN0
cy50eHQ6CisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBXZWJDb3Jl
Lmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ov
V2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVNvdXJjZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpDU1NGb250RmFjZVNvdXJjZTo6Z2V0Rm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd1RleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6d2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
c2VsZWN0aW9uUmVjdEZvclRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9y
UG9zaXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6On5TaW1wbGVGb250RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpG
b250RGF0YTo6fkZvbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpm
b250TWV0cmljcyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6c2V0TWF4Q2hh
cldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpzZXRBdmdDaGFyV2lk
dGgpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNldFNwYWNlV2lkdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNldFNwYWNlR2x5cGgpOgorICAgICAg
ICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnNldFplcm9XaWR0aFNwYWNlR2x5cGgpOgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmZvbnREYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjppc1NWR0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
Rm9udERhdGE6OnNldE1pc3NpbmdHbHlwaERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1RleHRSdW4uaDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OlRleHRSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6c2V0QWxsb3dUYWJzKToKKyAgICAgICAgKFdlYkNvcmU6
OlRleHRSdW46OnNldFhQb3MpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6UmVuZGVyaW5n
Q29udGV4dDo6flJlbmRlcmluZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6
cmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpzZXRSZW5kZXJp
bmdDb250ZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RWxsaXBzaXNCb3g6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlw
c2lzQm94OjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94Ojpw
YWludFNlbGVjdGlvbik6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0
Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94OjpwYWludFNwZWxsaW5nT3JHcmFtbWFyTWFya2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKToKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZVRleHRCb3g6OmNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQpOgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bik6CisgICAgICAgICogcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6c3RyaXBUcmFpbGluZ1NwYWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2tMaW5lTGF5
b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldExvZ2ljYWxXaWR0aEZvclRleHRSdW4pOgor
ICAgICAgICAoV2ViQ29yZTo6dGV4dFdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OnRyeUh5cGhl
bmF0aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjo6bmV4
dExpbmVCcmVhayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2hlY2tMaW5lc0Zv
clRleHRPdmVyZmxvdyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvbWJpbmVUZXh0Ojpjb21iaW5lVGV4dCk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWludE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6YXBwbHlMaW5lQ2xhbXApOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJJbWFnZTo6c2V0SW1hZ2VTaXplRm9yQWx0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJJbWFnZTo6cGFpbnRSZXBsYWNlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6dXBkYXRlRnJvbUVsZW1l
bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RNYXJrZXI6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OmdldFJlbGF0aXZlTWFya2VyUmVjdCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dDo6d2lkdGhGcm9tQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dHJp
bW1lZFByZWZXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29tcHV0ZVBy
ZWZlcnJlZExvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6d2lk
dGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbDo6Z2V0QXZnQ2hhcldpZHRoKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0FsbEluT25lLmNwcDoKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5l
VGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb25JbkZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0lubGluZVRleHRCb3g6OnByZXBhcmVHcmFwaGljc0NvbnRleHRGb3JUZXh0UGFpbnRpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6cmVzdG9yZUdyYXBoaWNzQ29u
dGV4dEFmdGVyVGV4dFBhaW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRC
b3g6OmNvbnN0cnVjdFRleHRSdW4pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJv
eDo6cGFpbnRUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRMYXlvdXRFbmdp
bmVTcGFjaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRMYXlvdXRFbmdpbmVTcGFj
aW5nOjpjYWxjdWxhdGVTVkdLZXJuaW5nKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRNZXRyaWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnN0cnVjdFRleHRSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVGV4dE1ldHJpY3M6Om1lYXN1cmVDaGFyYWN0ZXJSYW5nZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHA6IENv
cGllZCBmcm9tIHN2Zy9TVkdGb250LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6OnN2Z0ZvbnRBbmRG
b250RmFjZUVsZW1lbnRGb3JGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpmaXJzdFBhcmVu
dFJlbmRlcmVyRm9yTm9uVGV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVmZXJlbmNpbmdS
ZW5kZXJPYmplY3RGcm9tUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OmFjdGl2ZVBhaW50aW5nUmVz
b3VyY2VGcm9tUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5XYWxrZXI6OndhbGsp
OgorICAgICAgICAoV2ViQ29yZTo6ZmxvYXRXaWR0aE1pc3NpbmdHbHlwaENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRXaWR0aFVzaW5n
U1ZHRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6
ZHJhd1RleHRVc2luZ1NWR0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQ6OnNlbGVjdGlvblJlY3RGb3JUZXh0VXNpbmdTVkdGb250KToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpvZmZzZXRGb3JQb3NpdGlvbkZv
clRleHRVc2luZ1NWR0ZvbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJl
bmRlcmluZ0NvbnRleHQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5SZW5k
ZXJpbmdDb250ZXh0Ojpjb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5SZW5k
ZXJpbmdDb250ZXh0OjphY3RpdmVQYWludGluZ1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpzZXRBY3RpdmVQYWludGluZ1Jlc291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpTVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0UnVuTmVlZHNSZW5kZXJp
bmdDb250ZXh0KToKKyAgICAgICAgKiBzdmcvU1ZHQWxsSW5PbmUuY3BwOgorICAgICAgICAqIHN2
Zy9TVkdGb250LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBzdmcvU1ZHRm9udERhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OmluaXRpYWxpemVGb250RGF0YSk6CisgICAg
ICAgICogc3ZnL1NWR0ZvbnREYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdGb250RGF0YTo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjppc1NWR0ZvbnREYXRhKToK
KyAgICAgICAgKiBzdmcvU1ZHR2x5cGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0dseXBoRWxlbWVudDo6U1ZHR2x5cGhFbGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ds
eXBoRWxlbWVudDo6YnVpbGRHZW5lcmljR2x5cGhJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0dseXBoRWxlbWVudDo6YnVpbGRHbHlwaElkZW50aWZpZXIpOgorICAgICAgICAqIHN2
Zy9TVkdIS2VybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSEtlcm5FbGVtZW50
OjpTVkdIS2VybkVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSEtlcm5FbGVtZW50Ojpi
dWlsZEhvcml6b250YWxLZXJuaW5nUGFpcik6CisgICAgICAgICogc3ZnL1NWR1ZLZXJuRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWS2VybkVsZW1lbnQ6OlNWR1ZLZXJuRWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdWS2VybkVsZW1lbnQ6OmJ1aWxkVmVydGljYWxLZXJu
aW5nUGFpcik6CisgICAgICAgICogc3ZnL1NWR1ZLZXJuRWxlbWVudC5oOgorCiAyMDExLTA1LTIz
ICBZdXJ5IFNlbWlraGF0c2t5ICA8eXVyeXNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gODcx
NDUpCisrKyBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAt
MTYxNyw2ICsxNjE3LDcgQEAgSUYgKEVOQUJMRV9TVkcpCiAgICAgICAgIHJlbmRlcmluZy9zdmcv
U1ZHVGV4dExheW91dEVuZ2luZS5jcHAKICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5
b3V0RW5naW5lQmFzZWxpbmUuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEVuZ2luZVNwYWNpbmcuY3BwCisgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQuY3BwCiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3Bw
CiAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcAogICAgICAgICBzdmcvQ29s
b3JEaXN0YW5jZS5jcHAKQEAgLTE2NzEsNyArMTY3Miw2IEBAIElGIChFTkFCTEVfU1ZHKQogICAg
ICAgICBzdmcvU1ZHRmlsdGVyRWxlbWVudC5jcHAKICAgICAgICAgc3ZnL1NWR0ZpbHRlclByaW1p
dGl2ZVN0YW5kYXJkQXR0cmlidXRlcy5jcHAKICAgICAgICAgc3ZnL1NWR0ZpdFRvVmlld0JveC5j
cHAKLSAgICAgICAgc3ZnL1NWR0ZvbnQuY3BwCiAgICAgICAgIHN2Zy9TVkdGb250RGF0YS5jcHAK
ICAgICAgICAgc3ZnL1NWR0ZvbnRFbGVtZW50LmNwcAogICAgICAgICBzdmcvU1ZHRm9udEZhY2VF
bGVtZW50LmNwcApJbmRleDogU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCShyZXZpc2lvbiA4
NzE0NSkKKysrIFNvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0JKHdvcmtpbmcgY29w
eSkKQEAgLTMwODMsNiArMzA4Myw4IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dFF1ZXJ5LmggXAorCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9UYWJsZUxheW91dC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvVHJhaWxpbmdG
bG9hdHNSb290SW5saW5lQm94LmggXAogCVNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9UcmFuc2Zv
cm1TdGF0ZS5jcHAgXApAQCAtMzM4MCw3ICszMzgyLDYgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwK
IAlTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
LmggXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRml0VG9WaWV3Qm94LmggXAotCVNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
b250LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcCBcCiAJU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmggXAogCVNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250
RWxlbWVudC5jcHAgXApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gODcxNDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTU0NzYsNiArNTQ3
Niw4IEBACiAgICAgICAgICAgICAncmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5oJywKICAg
ICAgICAgICAgICdyZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAnLAogICAgICAgICAgICAg
J3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgnLAorICAgICAgICAgICAgJ3JlbmRlcmluZy9z
dmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwJywKKyAgICAgICAgICAgICdyZW5kZXJp
bmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgnLAogICAgICAgICAgICAgJ3N0b3Jh
Z2UvQWJzdHJhY3REYXRhYmFzZS5jcHAnLAogICAgICAgICAgICAgJ3N0b3JhZ2UvQ2hhbmdlVmVy
c2lvbldyYXBwZXIuY3BwJywKICAgICAgICAgICAgICdzdG9yYWdlL0NoYW5nZVZlcnNpb25XcmFw
cGVyLmgnLApAQCAtNTcyNyw3ICs1NzI5LDYgQEAKICAgICAgICAgICAgICdzdmcvU1ZHRmlsdGVy
UHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVzLmgnLAogICAgICAgICAgICAgJ3N2Zy9TVkdGaXRU
b1ZpZXdCb3guY3BwJywKICAgICAgICAgICAgICdzdmcvU1ZHRml0VG9WaWV3Qm94LmgnLAotICAg
ICAgICAgICAgJ3N2Zy9TVkdGb250LmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR0ZvbnREYXRh
LmNwcCcsCiAgICAgICAgICAgICAnc3ZnL1NWR0ZvbnREYXRhLmgnLAogICAgICAgICAgICAgJ3N2
Zy9TVkdGb250RWxlbWVudC5jcHAnLApJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHJldmlzaW9uIDg3MTQ1
KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTIyNTIs
NiArMjI1Miw3IEBAIEhFQURFUlMgKz0gXAogICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dExheW91
dEVuZ2luZVNwYWNpbmcuaCBcCiAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5oIFwK
ICAgICByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oIFwKKyAgICByZW5kZXJpbmcvc3ZnL1NW
R1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmggXAogICAgIHJlbmRlcmluZy9UcmFuc2Zvcm1TdGF0
ZS5oIFwKICAgICBzdmcvYW5pbWF0aW9uL1NNSUxUaW1lQ29udGFpbmVyLmggXAogICAgIHN2Zy9h
bmltYXRpb24vU01JTFRpbWUuaCBcCkBAIC0zMjA0LDYgKzMyMDUsNyBAQCBjb250YWlucyhERUZJ
TkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAgICAgICAgcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TGF5b3V0RW5naW5lU3BhY2luZy5jcHAgXAogICAgICAgICAgICAgICByZW5kZXJpbmcvc3ZnL1NW
R1RleHRNZXRyaWNzLmNwcCBcCiAgICAgICAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1
ZXJ5LmNwcCBcCisgICAgICAgICAgICAgIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQuY3BwIFwKICAgICAgICAgICAgICAgc3ZnL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5j
cHAgXAogICAgICAgICAgICAgICBzdmcvU1ZHSW1hZ2VMb2FkZXIuY3BwIFwKICAgICAgICAgICAg
ICAgc3ZnL0NvbG9yRGlzdGFuY2UuY3BwIFwKQEAgLTMyNTcsNyArMzI1OSw2IEBAIGNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgICAgICAgICAgICBzdmcvU1ZHRmlsdGVyRWxl
bWVudC5jcHAgXAogICAgICAgICAgICAgICBzdmcvU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRB
dHRyaWJ1dGVzLmNwcCBcCiAgICAgICAgICAgICAgIHN2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwIFwK
LSAgICAgICAgICAgICAgc3ZnL1NWR0ZvbnQuY3BwIFwKICAgICAgICAgICAgICAgc3ZnL1NWR0Zv
bnREYXRhLmNwcCBcCiAgICAgICAgICAgICAgIHN2Zy9TVkdGb250RWxlbWVudC5jcHAgXAogICAg
ICAgICAgICAgICBzdmcvU1ZHRm9udEZhY2VFbGVtZW50LmNwcCBcCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24gODcxNDUpCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2luZyBj
b3B5KQpAQCAtNDE0MTQsNiArNDE0MTQsNjIgQEAKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxyZW5k
ZXJpbmdcc3ZnXFNWR1RleHRRdWVyeS5oIgogCQkJCQk+CiAJCQkJPC9GaWxlPgorCQkJCTxGaWxl
CisJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccmVuZGVyaW5nXHN2Z1xTVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dC5jcHAiCisJCQkJCT4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1l
PSJEZWJ1Z3xXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgor
CQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJ
CQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlO
YW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJ
CQk+CisJCQkJCQk8VG9vbAorCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkv
PgorCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJ
CQkJCU5hbWU9IkRlYnVnX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1
aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGls
ZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQkJPEZpbGVD
b25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJSZWxlYXNlX0NhaXJvX0NGTGl0ZXxXaW4zMiIKKwkJ
CQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJCQkJPFRvb2wKKwkJCQkJ
CQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJPC9GaWxlQ29uZmlndXJh
dGlvbj4KKwkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQlOYW1lPSJEZWJ1Z19BbGx8V2lu
MzIiCisJCQkJCQlFeGNsdWRlZEZyb21CdWlsZD0idHJ1ZSIKKwkJCQkJCT4KKwkJCQkJCTxUb29s
CisJCQkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJCS8+CisJCQkJCTwvRmlsZUNv
bmZpZ3VyYXRpb24+CisJCQkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCQkJTmFtZT0iUHJvZHVj
dGlvbnxXaW4zMiIKKwkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJPgorCQkJ
CQkJPFRvb2wKKwkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJLz4KKwkJCQkJ
PC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCQk8L0ZpbGU+CisJCQkJPEZpbGUKKwkJCQkJUmVsYXRp
dmVQYXRoPSIuLlxyZW5kZXJpbmdcc3ZnXFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgiCisJ
CQkJCT4KKwkJCQk8L0ZpbGU+CiAJCQk8L0ZpbHRlcj4KIAkJPC9GaWx0ZXI+CiAJCTxGaWx0ZXIK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDg3MTQ1KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05OCw2ICs5OCw3IEBACiAJCTA4
NUExNTkzMTI4OUE4REQwMDI3MTBFMyAvKiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0
eVRlYXJPZmYuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDA4NUExNTkyMTI4OUE4REQwMDI3MTBFMyAvKiBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9w
ZXJ0eVRlYXJPZmYuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwODVCOTJCQTBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NUI5MkI4MEVG
REU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIuY3BwICovOyB9OwogCQkwODVCOTJCQjBF
RkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVCOTJCOTBFRkRFNzNEMDBFNjEyM0MgLyogRm9y
bURhdGFCdWlsZGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKKwkJ
MDg1Q0QyNzUxMzhCQjhFMDAwOTA3RjJEIC8qIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVDRDI3NDEz
OEJCOEUwMDA5MDdGMkQgLyogU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaCAqLzsgfTsKIAkJ
MDg2NDFENDcxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA4NjQx
RDQ1MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNlU3R5bGVJbWFnZS5jcHAg
Ki87IH07CiAJCTA4NjQxRDQ4MTIxNDJGN0QwMDhERTlGNiAvKiBSZW5kZXJJbWFnZVJlc291cmNl
U3R5bGVJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDg2NDFENDYxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUlt
YWdlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
MDg2QkJEMEYxMzYwMzlDMjAwOEIxNUQ4IC8qIEdseXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODZCQkQwRTEzNjAzOUMyMDA4QjE1RDggLyogR2x5
cGguaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAt
NDM2OCw3ICs0MzY5LDYgQEAKIAkJQjI1NTk5QTMwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR0ltYWdl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5
OTBCMEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdJbWFnZS5jcHAgKi87IH07CiAJCUIyNTU5OUE0MEQw
MEQ4QkEwMEJCODI1QyAvKiBTVkdJbWFnZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQjI1NTk5MEMwRDAwRDhCOTAwQkI4MjVDIC8qIFNWR0ltYWdlLmgg
Ki87IH07CiAJCUIyNTU5OUE1MEQwMEQ4QkEwMEJCODI1QyAvKiBFbXB0eUNsaWVudHMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIyNTU5OTBEMEQwMEQ4
QjkwMEJCODI1QyAvKiBFbXB0eUNsaWVudHMuaCAqLzsgfTsKLQkJQjI2MkI4MDQwRDFGMzJEMDAw
MTU4RjA5IC8qIFNWR0ZvbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQjI2MkI4MDMwRDFGMzJEMDAwMTU4RjA5IC8qIFNWR0ZvbnQuY3BwICovOyB9
OwogCQlCMjY2Q0Q0RDBDM0FFQzY1MDBFQjA4RDIgLyogSlNTVkdFeGNlcHRpb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjI2NkNENEIwQzNBRUM2
NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmNwcCAqLzsgfTsKIAkJQjI2NkNENEUwQzNBRUM2
NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMjY2Q0Q0QzBDM0FFQzY1MDBFQjA4RDIgLyogSlNTVkdFeGNl
cHRpb24uaCAqLzsgfTsKIAkJQjI3NTM1NTgwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0
aW9uTWF0cml4Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjI3NTM1MkEwQjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cu
Y3BwICovOyB9OwpAQCAtNjQ4Niw2ICs2NDg2LDcgQEAKIAkJMDg1QTE1OTIxMjg5QThERDAwMjcx
MEUzIC8qIFNWR0FuaW1hdGVkVHJhbnNmb3JtTGlzdFByb3BlcnR5VGVhck9mZi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFRyYW5zZm9ybUxpc3RQcm9wZXJ0
eVRlYXJPZmYuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg1QjkyQjgwRUZERTcz
RDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBGb3JtRGF0YUJ1aWxkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwODVCOTJCOTBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZvcm1EYXRhQnVpbGRlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwODVDRDI3NDEzOEJCOEUwMDA5MDdGMkQgLyogU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMDg2NDFENDUxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUlt
YWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlckltYWdl
UmVzb3VyY2VTdHlsZUltYWdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDg2
NDFENDYxMjE0MkY3RDAwOERFOUY2IC8qIFJlbmRlckltYWdlUmVzb3VyY2VTdHlsZUltYWdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlckltYWdlUmVzb3VyY2VTdHls
ZUltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4NkJCRDBFMTM2MDM5QzIw
MDhCMTVEOCAvKiBHbHlwaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHbHlw
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNjUyNyw2ICs2NTI4LDcgQEAKIAkJ
MDhDOTI1MTcwRkNDN0M0QTAwNDgwREVDIC8qIEZpbHRlckVmZmVjdC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGaWx0ZXJFZmZlY3QuY3BwOyBwYXRoID0gZmlsdGVy
cy9GaWx0ZXJFZmZlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwOEM5MjUx
ODBGQ0M3QzRBMDA0ODBERUMgLyogRmlsdGVyRWZmZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZpbHRlckVmZmVjdC5oOyBwYXRoID0gZmlsdGVycy9GaWx0ZXJFZmZlY3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDhDQTNENDMxMjg5NEEzODAwRkZGMjYw
IC8qIFNWR1N0YXRpY1Byb3BlcnR5V2l0aFBhcmVudFRlYXJPZmYuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gU1ZHU3RhdGljUHJvcGVydHlXaXRoUGFyZW50VGVhck9mZi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwOEQyOTQ0MDEzODY2OUU0MDA5N0M4OUIgLyog
U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwOEQ0NkNFMjEyN0FENUZDMDA4OTY5NEIgLyogU1ZHQW5pbWF0ZWRF
bnVtZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRl
ZEVudW1lcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA4RTRGRTQ1MEUy
QkQ0MTQwMEY0Q0FFMCAvKiBKU1NWR0xlbmd0aEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0xlbmd0aEN1c3RvbS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTA4RURFMTlFMTJBNTBCOEUwMEI5NTc5NyAvKiBTVkdSZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1JlY3QuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNzg4LDcgKzEwNzkwLDYgQEAKIAkJQjI1NTk5MEIwRDAwRDhCOTAw
QkI4MjVDIC8qIFNWR0ltYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBTVkdJbWFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNTU5OTBD
MEQwMEQ4QjkwMEJCODI1QyAvKiBTVkdJbWFnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gU1ZHSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI1NTk5
MEQwRDAwRDhCOTAwQkI4MjVDIC8qIEVtcHR5Q2xpZW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRW1wdHlDbGllbnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCUIyNjJCODAzMEQxRjMyRDAwMDE1OEYwOSAvKiBTVkdGb250LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdGb250LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQjI2NkNENEIwQzNBRUM2NTAwRUIwOEQyIC8qIEpTU1ZHRXhjZXB0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1NWR0V4Y2VwdGlvbi5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIyNjZDRDRDMEMzQUVDNjUwMEVCMDhE
MiAvKiBKU1NWR0V4Y2VwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNTVkdFeGNlcHRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjI3NTM1MkEw
QjA1MzgxNDAwMkNFNjRGIC8qIFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRyYW5zZm9ybWF0aW9uTWF0cml4Q0cuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTI3NjAsNiArMTI3NjEsOCBAQAogCQkJCTA4
RjBCRkMxMTI1NUM1M0MwMDA3NTE4NSAvKiBTVkdUZXh0TWV0cmljcy5oICovLAogCQkJCTA4NTRC
MDEyMTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0UXVlcnkuY3BwICovLAogCQkJCTA4NTRCMDEz
MTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0UXVlcnkuaCAqLywKKwkJCQkwOEQyOTQ0MDEzODY2
OUU0MDA5N0M4OUIgLyogU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwICovLAorCQkJCTA4
NUNEMjc0MTM4QkI4RTAwMDkwN0YyRCAvKiBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oICov
LAogCQkJKTsKIAkJCXBhdGggPSBzdmc7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
MTcyODUsNyArMTcyODgsNiBAQAogCQkJCUIyMjI3ODdCMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdG
aXRUb1ZpZXdCb3guY3BwICovLAogCQkJCUIyMjI3ODdDMEQwMEJGMjAwMDcxQjc4MiAvKiBTVkdG
aXRUb1ZpZXdCb3guaCAqLywKIAkJCQlCMjIyNzg3RDBEMDBCRjIwMDA3MUI3ODIgLyogU1ZHRml0
VG9WaWV3Qm94LmlkbCAqLywKLQkJCQlCMjYyQjgwMzBEMUYzMkQwMDAxNThGMDkgLyogU1ZHRm9u
dC5jcHAgKi8sCiAJCQkJQjIzN0M4QTUwRDM0NEQxMTAwMTNGNzA3IC8qIFNWR0ZvbnREYXRhLmNw
cCAqLywKIAkJCQlCMjM3QzhBNjBEMzQ0RDExMDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuaCAqLywK
IAkJCQlCMkExRjJBMTBDRUYwQUJGMDA0NDJGNkEgLyogU1ZHRm9udEVsZW1lbnQuY3BwICovLApA
QCAtMjAxNTQsNyArMjAxNTYsNiBAQAogCQkJCTg1OEMzODFDMEFBOEUyOTYwMEIxODdBNCAvKiBE
T01DU1NWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODVCNDk4RjMwQURCMzM2QTAwOTI1Q0JC
IC8qIERPTUNTU1ZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1OEMzODNDMEFB
OEVEODIwMEIxODdBNCAvKiBET01DU1NWYWx1ZUxpc3QuaCBpbiBIZWFkZXJzICovLAotCQkJCUMw
RjJBNDQxMTM4NjlBQUIwMDY2QzUzNCAvKiBwcmVwcm9jZXNzb3IucG0gaW4gSGVhZGVycyAqLywK
IAkJCQk4NTkwOUQyQjBBQ0M3RDU1MDBERjAxRjEgLyogRE9NQ1NTVmFsdWVMaXN0SW50ZXJuYWwu
aCBpbiBIZWFkZXJzICovLAogCQkJCUUxMEI5Q0NDMEI3NDdBNDQwMDNFRDg5MCAvKiBET01DdXN0
b21YUGF0aE5TUmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg1QUNBQkIwMEE5Q0FGODAw
MDY3MUU5MCAvKiBET01Eb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjAzNSw2ICsyMjAz
Niw3IEBACiAJCQkJRkU4MEQ3Q0YwRTlDMUYyNTAwMEQ2Rjc1IC8qIFBvc2l0aW9uRXJyb3JDYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5MTlDMjQwQjdEMTg4NjAwQTU2OTk4IC8qIFBv
c2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFODBEN0QxMEU5QzFGMjUwMDBE
NkY3NSAvKiBQb3NpdGlvbk9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAorCQkJCUMwRjJBNDQxMTM4
NjlBQUIwMDY2QzUzNCAvKiBwcmVwcm9jZXNzb3IucG0gaW4gSGVhZGVycyAqLywKIAkJCQlCNzFG
RTZERjExMDkxQ0IzMDBEQUVGNzcgLyogUHJpbnRDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEVBN0VCQzBBMTk0NUQwMDBBOEVGNUYgLyogUHJvY2Vzc2luZ0luc3RydWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDQ2MTNFQzBDRDY4MUI1MDBGQURBNzUgLyogUHJvZ3Jlc3NFdmVu
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC0yMjYwMiw2ICsyMjYwNCw3IEBACiAJCQkJQjIyMjdBQ0Uw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RleHRQYXRoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQjIyMjdBRDEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTA4NTRCMDI1MTI1NUU0RTYwMEI5Q0REMCAvKiBTVkdUZXh0
UXVlcnkuaCBpbiBIZWFkZXJzICovLAorCQkJCTA4NUNEMjc1MTM4QkI4RTAwMDkwN0YyRCAvKiBT
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjIyMjdBRDQw
RDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RpdGxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QjIyMjdBRDcwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQjIyMjdBREEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR1RyYW5zZm9ybWFibGUuaCBpbiBI
ZWFkZXJzICovLApAQCAtMjUyNDksNyArMjUyNTIsNiBAQAogCQkJCUIyMjI3QTBCMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdGaWx0ZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3
QTBFMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGaWx0ZXJQcmltaXRpdmVTdGFuZGFyZEF0dHJpYnV0
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBMTEwRDAwQkYyMjAwNzFCNzgyIC8qIFNW
R0ZpdFRvVmlld0JveC5jcHAgaW4gU291cmNlcyAqLywKLQkJCQlCMjYyQjgwNDBEMUYzMkQwMDAx
NThGMDkgLyogU1ZHRm9udC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjM3QzhBNzBEMzQ0RDEx
MDAxM0Y3MDcgLyogU1ZHRm9udERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBMUYyQUEw
Q0VGMEFCRjAwNDQyRjZBIC8qIFNWR0ZvbnRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUIyMjI3QTE0MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdGb250RmFjZUVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VTb3VyY2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVNvdXJjZS5jcHAJ
KHJldmlzaW9uIDg3MTQ1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlU291cmNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU0LDcgKzE1NCw3IEBAIFNpbXBsZUZvbnREYXRhKiBD
U1NGb250RmFjZVNvdXJjZTo6Z2V0Rm8KICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3ZnRm9u
dEZhY2VFbGVtZW50ID0gZm9udEZhY2VFbGVtZW50OwogICAgICAgICAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgICAgICAgICAgZm9udERhdGEgPSBhZG9wdFB0cihuZXcgU2ltcGxlRm9udERh
dGEoYWRvcHRQdHIobmV3IFNWR0ZvbnREYXRhKGZvbnRGYWNlRWxlbWVudCkpLCBmb250RGVzY3Jp
cHRpb24uY29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGlj
KSk7CisgICAgICAgICAgICAgICAgICAgIGZvbnREYXRhID0gYWRvcHRQdHIobmV3IFNpbXBsZUZv
bnREYXRhKFNWR0ZvbnREYXRhOjpjcmVhdGUoZm9udEZhY2VFbGVtZW50KSwgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykp
OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZQogI2VuZGlmCkBAIC0xNzAs
NyArMTcwLDcgQEAgU2ltcGxlRm9udERhdGEqIENTU0ZvbnRGYWNlU291cmNlOjpnZXRGbwogI2lm
IEVOQUJMRShTVkdfRk9OVFMpCiAgICAgICAgICAgICAvLyBJbi1Eb2N1bWVudCBTVkcgRm9udHMK
ICAgICAgICAgICAgIGlmIChtX3N2Z0ZvbnRGYWNlRWxlbWVudCkKLSAgICAgICAgICAgICAgICBm
b250RGF0YSA9IGFkb3B0UHRyKG5ldyBTaW1wbGVGb250RGF0YShhZG9wdFB0cihuZXcgU1ZHRm9u
dERhdGEobV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCkpKSwgZm9udERlc2NyaXB0aW9uLmNvbXB1
dGVkUGl4ZWxTaXplKCksIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpOworICAgICAg
ICAgICAgICAgIGZvbnREYXRhID0gYWRvcHRQdHIobmV3IFNpbXBsZUZvbnREYXRhKFNWR0ZvbnRE
YXRhOjpjcmVhdGUobV9zdmdGb250RmFjZUVsZW1lbnQuZ2V0KCkpLCBmb250RGVzY3JpcHRpb24u
Y29tcHV0ZWRQaXhlbFNpemUoKSwgc3ludGhldGljQm9sZCwgc3ludGhldGljSXRhbGljKSk7CiAj
ZW5kaWYKICAgICAgICAgfQogICAgIH0gZWxzZSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24gODcxNDUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM2LDggKzEz
Niw4IEBAIHZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb24KICAgICB0byA9
ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRvKTsKIAogI2lmIEVOQUJMRShTVkdfRk9OVFMp
Ci0gICAgaWYgKHByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpKSB7Ci0gICAgICAgIGRyYXdUZXh0
VXNpbmdTVkdGb250KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKKyAgICBpZiAoVGV4
dFJ1bjo6UmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJpbmdD
b250ZXh0KCkpIHsKKyAgICAgICAgcmVuZGVyaW5nQ29udGV4dC0+ZHJhd1RleHRVc2luZ1NWR0Zv
bnQoKnRoaXMsIGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICNlbmRpZgpAQCAtMTc4LDggKzE3OCw4IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhh
c2lzTWFya3MoR3JhcGhpY3NDb24KIGZsb2F0IEZvbnQ6OndpZHRoKGNvbnN0IFRleHRSdW4mIHJ1
biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92
ZXJmbG93KiBnbHlwaE92ZXJmbG93KSBjb25zdAogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0g
ICAgaWYgKHByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpKQotICAgICAgICByZXR1cm4gZmxvYXRX
aWR0aFVzaW5nU1ZHRm9udChydW4pOworICAgIGlmIChUZXh0UnVuOjpSZW5kZXJpbmdDb250ZXh0
KiByZW5kZXJpbmdDb250ZXh0ID0gcnVuLnJlbmRlcmluZ0NvbnRleHQoKSkKKyAgICAgICAgcmV0
dXJuIHJlbmRlcmluZ0NvbnRleHQtPmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoKnRoaXMsIHJ1bik7
CiAjZW5kaWYKIAogICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwpA
QCAtMTk1LDExICsxOTUsMTEgQEAgZmxvYXQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVu
LCBIYQogCiBmbG9hdCBGb250Ojp3aWR0aChjb25zdCBUZXh0UnVuJiBydW4sIGludCBleHRyYUNo
YXJzQXZhaWxhYmxlLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25z
dAogewotI2lmICFFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIFVOVVNFRF9QQVJBTShleHRyYUNoYXJz
QXZhaWxhYmxlKTsKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIGlmIChUZXh0UnVuOjpSZW5k
ZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0ID0gcnVuLnJlbmRlcmluZ0NvbnRleHQoKSkK
KyAgICAgICAgcmV0dXJuIHJlbmRlcmluZ0NvbnRleHQtPmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQo
KnRoaXMsIHJ1biwgZXh0cmFDaGFyc0F2YWlsYWJsZSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1l
KTsKICNlbHNlCi0gICAgaWYgKHByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpKQotICAgICAgICBy
ZXR1cm4gZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChydW4sIGV4dHJhQ2hhcnNBdmFpbGFibGUsIGNo
YXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7CisgICAgVU5VU0VEX1BBUkFNKGV4dHJhQ2hhcnNBdmFp
bGFibGUpOwogI2VuZGlmCiAKICAgICBjaGFyc0NvbnN1bWVkID0gcnVuLmxlbmd0aCgpOwpAQCAt
MjE0LDEwICsyMTQsMTAgQEAgZmxvYXQgRm9udDo6d2lkdGgoY29uc3QgVGV4dFJ1biYgcnVuLCBp
bgogRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAogewogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKHByaW1hcnlGb250KCktPmlzU1ZH
Rm9udCgpKQotICAgICAgICByZXR1cm4gc2VsZWN0aW9uUmVjdEZvclRleHRVc2luZ1NWR0ZvbnQo
cnVuLCBwb2ludCwgaCwgZnJvbSwgdG8pOworICAgIGlmIChUZXh0UnVuOjpSZW5kZXJpbmdDb250
ZXh0KiByZW5kZXJpbmdDb250ZXh0ID0gcnVuLnJlbmRlcmluZ0NvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuIHJlbmRlcmluZ0NvbnRleHQtPnNlbGVjdGlvblJlY3RGb3JUZXh0VXNpbmdTVkdGb250
KCp0aGlzLCBydW4sIHBvaW50LCBoLCBmcm9tLCB0byk7CiAjZW5kaWYKLQorIAogICAgIHRvID0g
KHRvID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8pOwogCiAgICAgaWYgKGNvZGVQYXRoKHJ1bikg
IT0gQ29tcGxleCkKQEAgLTIyOSw4ICsyMjksOCBAQCBGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9u
UmVjdEZvclRleHQoY29uCiBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb24oY29uc3QgVGV4dFJ1
biYgcnVuLCBmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBjb25zdAogewogI2lm
IEVOQUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKHByaW1hcnlGb250KCktPmlzU1ZHRm9udCgpKQot
ICAgICAgICByZXR1cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KHJ1biwg
eCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOworICAgIGlmIChUZXh0UnVuOjpSZW5kZXJpbmdDb250
ZXh0KiByZW5kZXJpbmdDb250ZXh0ID0gcnVuLnJlbmRlcmluZ0NvbnRleHQoKSkKKyAgICAgICAg
cmV0dXJuIHJlbmRlcmluZ0NvbnRleHQtPm9mZnNldEZvclBvc2l0aW9uRm9yVGV4dFVzaW5nU1ZH
Rm9udCgqdGhpcywgcnVuLCB4LCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiAjZW5kaWYKIAogICAg
IGlmIChjb2RlUGF0aChydW4pICE9IENvbXBsZXgpCkBAIC0yMzksMTMgKzIzOSw2IEBAIGludCBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnUKICAgICByZXR1cm4gb2Zmc2V0Rm9y
UG9zaXRpb25Gb3JDb21wbGV4VGV4dChydW4sIHgsIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0K
IAotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi1ib29sIEZvbnQ6OmlzU1ZHRm9udCgpIGNvbnN0Ci17
IAotICAgIHJldHVybiBwcmltYXJ5Rm9udCgpLT5pc1NWR0ZvbnQoKTsgCi19Ci0jZW5kaWYKLQog
U3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5z
aWduZWQgbGVuZ3RoKQogewogICAgIFVDaGFyKiBidWZmZXI7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiA4NzE0NSkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAs
NiBAQCBjbGFzcyBGb250U2VsZWN0b3I7CiBjbGFzcyBHbHlwaEJ1ZmZlcjsKIGNsYXNzIEdseXBo
UGFnZVRyZWVOb2RlOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotY2xhc3MgU1ZHRm9udEVsZW1l
bnQ7CiBjbGFzcyBUZXh0UnVuOwogCiBzdHJ1Y3QgR2x5cGhEYXRhOwpAQCAtMTU3LDE0ICsxNTYs
NiBAQCBwdWJsaWM6CiAgICAgZW51bSBDb2RlUGF0aCB7IEF1dG8sIFNpbXBsZSwgQ29tcGxleCwg
U2ltcGxlV2l0aEdseXBoT3ZlcmZsb3cgfTsKIAogcHJpdmF0ZToKLSNpZiBFTkFCTEUoU1ZHX0ZP
TlRTKQotICAgIHZvaWQgZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhpY3NDb250ZXh0KiwgY29u
c3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsK
LSAgICBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mKSBjb25zdDsK
LSAgICBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mLCBpbnQgZXh0
cmFDaGFyc0F2YWlsYWJsZSwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkg
Y29uc3Q7Ci0gICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0VXNpbmdTVkdGb250KGNv
bnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGgsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0OwotICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQoY29u
c3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKSBj
b25zdDsKLSNlbmRpZgotCiAgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRl
eHRFbXBoYXNpcywgRm9yVGV4dEVtcGhhc2lzIH07CiAKICAgICAvLyBSZXR1cm5zIHRoZSBpbml0
aWFsIGluLXN0cmVhbSBhZHZhbmNlLgpAQCAtMjIwLDExICsyMTEsNiBAQCBwdWJsaWM6CiAKICAg
ICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxl
bmd0aCk7CiAKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIGJvb2wgaXNTVkdGb250KCkgY29u
c3Q7Ci0gICAgU1ZHRm9udEVsZW1lbnQqIHN2Z0ZvbnQoKSBjb25zdDsKLSNlbmRpZgotCiAgICAg
Ym9vbCBuZWVkc1RyYW5zY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1RyYW5zY29kaW5n
OyB9CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlRm9udERhdGEuY3BwCShyZXZpc2lvbiA4NzE0NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsMTMgKzMzLDYgQEAKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENh
Y2hlLmgiCiAKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotI2luY2x1ZGUgIlNWR0ZvbnREYXRhLmgi
Ci0jaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGb250RmFjZUVsZW1l
bnQuaCIKLSNpbmNsdWRlICJTVkdHbHlwaEVsZW1lbnQuaCIKLSNlbmRpZgotCiAjaW5jbHVkZSA8
d3RmL01hdGhFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIApAQCAtNjMs
NjQgKzU2LDE4IEBAIFNpbXBsZUZvbnREYXRhOjpTaW1wbGVGb250RGF0YShjb25zdCBGb24KICAg
ICBwbGF0Zm9ybUNoYXJXaWR0aEluaXQoKTsKIH0KIAotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi1T
aW1wbGVGb250RGF0YTo6U2ltcGxlRm9udERhdGEoUGFzc093blB0cjxTVkdGb250RGF0YT4gc3Zn
Rm9udERhdGEsIGludCBzaXplLCBib29sIHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRh
bGljKQorU2ltcGxlRm9udERhdGE6OlNpbXBsZUZvbnREYXRhKFBhc3NPd25QdHI8U2ltcGxlRm9u
dERhdGE6OkZvbnREYXRhPiBmb250RGF0YSwgaW50IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwg
Ym9vbCBzeW50aGV0aWNJdGFsaWMpCiAgICAgOiBtX3BsYXRmb3JtRGF0YShGb250UGxhdGZvcm1E
YXRhKHNpemUsIHN5bnRoZXRpY0JvbGQsIHN5bnRoZXRpY0l0YWxpYykpCisgICAgLCBtX2ZvbnRE
YXRhKGZvbnREYXRhKQogICAgICwgbV90cmVhdEFzRml4ZWRQaXRjaChmYWxzZSkKLSAgICAsIG1f
c3ZnRm9udERhdGEoc3ZnRm9udERhdGEpCiAgICAgLCBtX2lzQ3VzdG9tRm9udCh0cnVlKQogICAg
ICwgbV9pc0xvYWRpbmcoZmFsc2UpCiAgICAgLCBtX2lzVGV4dE9yaWVudGF0aW9uRmFsbGJhY2so
ZmFsc2UpCiAgICAgLCBtX2lzQnJva2VuSWRlb2dyYXBoRmFsbGJhY2soZmFsc2UpCiAgICAgLCBt
X2hhc1ZlcnRpY2FsR2x5cGhzKGZhbHNlKQogewotICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3Zn
Rm9udEZhY2VFbGVtZW50ID0gbV9zdmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7Ci0g
ICAgdW5zaWduZWQgdW5pdHNQZXJFbSA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgp
OwotCi0gICAgZmxvYXQgc2NhbGUgPSBzaXplOwotICAgIGlmICh1bml0c1BlckVtKQotICAgICAg
ICBzY2FsZSAvPSB1bml0c1BlckVtOwotCi0gICAgZmxvYXQgeEhlaWdodCA9IHN2Z0ZvbnRGYWNl
RWxlbWVudC0+eEhlaWdodCgpICogc2NhbGU7Ci0gICAgZmxvYXQgYXNjZW50ID0gc3ZnRm9udEZh
Y2VFbGVtZW50LT5hc2NlbnQoKSAqIHNjYWxlOwotICAgIGZsb2F0IGRlc2NlbnQgPSBzdmdGb250
RmFjZUVsZW1lbnQtPmRlc2NlbnQoKSAqIHNjYWxlOwotICAgIGZsb2F0IGxpbmVHYXAgPSAwLjFm
ICogc2l6ZTsKLQotICAgIFNWR0ZvbnRFbGVtZW50KiBhc3NvY2lhdGVkRm9udEVsZW1lbnQgPSBz
dmdGb250RmFjZUVsZW1lbnQtPmFzc29jaWF0ZWRGb250RWxlbWVudCgpOwotICAgIGlmICgheEhl
aWdodCkgeyAgICAKLSAgICAgICAgLy8gRmFsbGJhY2sgaWYgeF9oZWlnaHRBdHRyIGlzIG5vdCBz
cGVjaWZpZWQgZm9yIHRoZSBmb250IGVsZW1lbnQuCi0gICAgICAgIFZlY3RvcjxTVkdHbHlwaD4g
bGV0dGVyWEdseXBoczsKLSAgICAgICAgYXNzb2NpYXRlZEZvbnRFbGVtZW50LT5nZXRHbHlwaElk
ZW50aWZpZXJzRm9yU3RyaW5nKFN0cmluZygieCIsIDEpLCBsZXR0ZXJYR2x5cGhzKTsKLSAgICAg
ICAgeEhlaWdodCA9IGxldHRlclhHbHlwaHMuaXNFbXB0eSgpID8gMiAqIGFzY2VudCAvIDMgOiBs
ZXR0ZXJYR2x5cGhzLmZpcnN0KCkuaG9yaXpvbnRhbEFkdmFuY2VYICogc2NhbGU7Ci0gICAgfQot
Ci0gICAgbV9mb250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOwotICAgIG1fZm9u
dE1ldHJpY3Muc2V0QXNjZW50KGFzY2VudCk7Ci0gICAgbV9mb250TWV0cmljcy5zZXREZXNjZW50
KGRlc2NlbnQpOwotICAgIG1fZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKLSAgICBt
X2ZvbnRNZXRyaWNzLnNldExpbmVTcGFjaW5nKHJvdW5kZihhc2NlbnQpICsgcm91bmRmKGRlc2Nl
bnQpICsgcm91bmRmKGxpbmVHYXApKTsKLSAgICBtX2ZvbnRNZXRyaWNzLnNldFhIZWlnaHQoeEhl
aWdodCk7Ci0KLSAgICBWZWN0b3I8U1ZHR2x5cGg+IHNwYWNlR2x5cGhzOwotICAgIGFzc29jaWF0
ZWRGb250RWxlbWVudC0+Z2V0R2x5cGhJZGVudGlmaWVyc0ZvclN0cmluZyhTdHJpbmcoIiAiLCAx
KSwgc3BhY2VHbHlwaHMpOwotICAgIG1fc3BhY2VXaWR0aCA9IHNwYWNlR2x5cGhzLmlzRW1wdHko
KSA/IHhIZWlnaHQgOiBzcGFjZUdseXBocy5maXJzdCgpLmhvcml6b250YWxBZHZhbmNlWCAqIHNj
YWxlOwotCi0gICAgVmVjdG9yPFNWR0dseXBoPiBudW1lcmFsWmVyb0dseXBoczsKLSAgICBhc3Nv
Y2lhdGVkRm9udEVsZW1lbnQtPmdldEdseXBoSWRlbnRpZmllcnNGb3JTdHJpbmcoU3RyaW5nKCIw
IiwgMSksIG51bWVyYWxaZXJvR2x5cGhzKTsKLSAgICBtX2F2Z0NoYXJXaWR0aCA9IG51bWVyYWxa
ZXJvR2x5cGhzLmlzRW1wdHkoKSA/IG1fc3BhY2VXaWR0aCA6IG51bWVyYWxaZXJvR2x5cGhzLmZp
cnN0KCkuaG9yaXpvbnRhbEFkdmFuY2VYICogc2NhbGU7Ci0KLSAgICBWZWN0b3I8U1ZHR2x5cGg+
IGxldHRlcldHbHlwaHM7Ci0gICAgYXNzb2NpYXRlZEZvbnRFbGVtZW50LT5nZXRHbHlwaElkZW50
aWZpZXJzRm9yU3RyaW5nKFN0cmluZygiVyIsIDEpLCBsZXR0ZXJXR2x5cGhzKTsKLSAgICBtX21h
eENoYXJXaWR0aCA9IGxldHRlcldHbHlwaHMuaXNFbXB0eSgpID8gYXNjZW50IDogbGV0dGVyV0ds
eXBocy5maXJzdCgpLmhvcml6b250YWxBZHZhbmNlWCAqIHNjYWxlOwotCi0gICAgLy8gRklYTUU6
IGlzIHRoZXJlIGEgd2F5IHdlIGNhbiBnZXQgdGhlIHNwYWNlIGdseXBoIGZyb20gdGhlIFNWR0ds
eXBoIGFib3ZlPwotICAgIG1fc3BhY2VHbHlwaCA9IDA7Ci0gICAgbV96ZXJvV2lkdGhTcGFjZUds
eXBoID0gMDsKLSAgICBkZXRlcm1pbmVQaXRjaCgpOwotICAgIG1fbWlzc2luZ0dseXBoRGF0YS5m
b250RGF0YSA9IHRoaXM7Ci0gICAgbV9taXNzaW5nR2x5cGhEYXRhLmdseXBoID0gMDsKKyAgICBt
X2ZvbnREYXRhLT5pbml0aWFsaXplRm9udERhdGEodGhpcywgc2l6ZSk7CiB9Ci0jZW5kaWYKIAog
I2lmICEoUExBVEZPUk0oUVQpICYmICFIQVZFKFFSQVdGT05UKSkKIC8vIEVzdGltYXRlcyBvZiBh
dmdDaGFyV2lkdGggYW5kIG1heENoYXJXaWR0aCBmb3IgcGxhdGZvcm1zIHRoYXQgZG9uJ3Qgc3Vw
cG9ydCBhY2Nlc3NpbmcgdGhlc2UgdmFsdWVzIGZyb20gdGhlIGZvbnQuCkBAIC0xODYsNyArMTMz
LDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1HbHlwaEluaXQoKQogU2ltcGxlRm9u
dERhdGE6On5TaW1wbGVGb250RGF0YSgpCiB7CiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICBp
ZiAoIW1fc3ZnRm9udERhdGEgfHwgIW1fc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNlRWxlbWVudCgp
KQorICAgIGlmICghbV9mb250RGF0YSkKICNlbmRpZgogICAgICAgICBwbGF0Zm9ybURlc3Ryb3ko
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERh
dGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVGb250RGF0YS5oCShyZXZpc2lvbiA4NzE0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDE3ICs2NCwy
NiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKIGNsYXNz
IFNoYXJlZEJ1ZmZlcjsKLWNsYXNzIFNWR0ZvbnREYXRhOwogCiBlbnVtIEZvbnREYXRhVmFyaWFu
dCB7IEF1dG9WYXJpYW50LCBOb3JtYWxWYXJpYW50LCBTbWFsbENhcHNWYXJpYW50LCBFbXBoYXNp
c01hcmtWYXJpYW50IH07CiBlbnVtIFBpdGNoIHsgVW5rbm93blBpdGNoLCBGaXhlZFBpdGNoLCBW
YXJpYWJsZVBpdGNoIH07CiAKIGNsYXNzIFNpbXBsZUZvbnREYXRhIDogcHVibGljIEZvbnREYXRh
IHsKIHB1YmxpYzoKKyAgICBjbGFzcyBGb250RGF0YSB7CisgICAgICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworICAgIHB1YmxpYzoKKyAgICAgICAgdmlydHVhbCB+Rm9udERhdGEoKSB7IH0K
KyAgICAKKyAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250RGF0YShTaW1wbGVGb250
RGF0YSosIGludCkgPSAwOworICAgIH07CisKKyAgICAvLyBVc2VkIHRvIGNyZWF0ZSBwbGF0Zm9y
bSBmb250cy4KICAgICBTaW1wbGVGb250RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiwgYm9v
bCBpc0N1c3RvbUZvbnQgPSBmYWxzZSwgYm9vbCBpc0xvYWRpbmcgPSBmYWxzZSwgYm9vbCBpc1Rl
eHRPcmllbnRhdGlvbkZhbGxiYWNrID0gZmFsc2UpOwotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0g
ICAgU2ltcGxlRm9udERhdGEoUGFzc093blB0cjxTVkdGb250RGF0YT4sIGludCBzaXplLCBib29s
IHN5bnRoZXRpY0JvbGQsIGJvb2wgc3ludGhldGljSXRhbGljKTsKLSNlbmRpZgorCisgICAgLy8g
VXNlZCB0byBjcmVhdGUgU1ZHIEZvbnRzLgorICAgIFNpbXBsZUZvbnREYXRhKFBhc3NPd25QdHI8
U2ltcGxlRm9udERhdGE6OkZvbnREYXRhPiwgaW50IHNpemUsIGJvb2wgc3ludGhldGljQm9sZCwg
Ym9vbCBzeW50aGV0aWNJdGFsaWMpOworCiAgICAgdmlydHVhbCB+U2ltcGxlRm9udERhdGEoKTsK
IAogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fcGxhdGZvcm1EYXRhOyB9CkBAIC0xMDQsOSArMTEzLDE0IEBAIHB1YmxpYzoKICAgICBi
b29sIGhhc1ZlcnRpY2FsR2x5cGhzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNWZXJ0aWNhbEdseXBo
czsgfQogICAgIGJvb2wgaXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpIGNvbnN0IHsgcmV0dXJu
IG1faXNUZXh0T3JpZW50YXRpb25GYWxsYmFjazsgfQogCisgICAgRm9udE1ldHJpY3MmIGZvbnRN
ZXRyaWNzKCkgeyByZXR1cm4gbV9mb250TWV0cmljczsgfQogICAgIGNvbnN0IEZvbnRNZXRyaWNz
JiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udE1ldHJpY3M7IH0KKyAgICAKICAg
ICBmbG9hdCBtYXhDaGFyV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21heENoYXJXaWR0aDsgfQor
ICAgIHZvaWQgc2V0TWF4Q2hhcldpZHRoKGZsb2F0IG1heENoYXJXaWR0aCkgeyBtX21heENoYXJX
aWR0aCA9IG1heENoYXJXaWR0aDsgfQorCiAgICAgZmxvYXQgYXZnQ2hhcldpZHRoKCkgY29uc3Qg
eyByZXR1cm4gbV9hdmdDaGFyV2lkdGg7IH0KKyAgICB2b2lkIHNldEF2Z0NoYXJXaWR0aChmbG9h
dCBhdmdDaGFyV2lkdGgpIHsgbV9hdmdDaGFyV2lkdGggPSBhdmdDaGFyV2lkdGg7IH0KIAogICAg
IEZsb2F0UmVjdCBib3VuZHNGb3JHbHlwaChHbHlwaCkgY29uc3Q7CiAgICAgZmxvYXQgd2lkdGhG
b3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3Q7CkBAIC0xMTQsMTIgKzEyOCwxNSBAQCBwdWJsaWM6
CiAgICAgZmxvYXQgcGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoKSBjb25zdDsKIAogICAgIGZs
b2F0IHNwYWNlV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3NwYWNlV2lkdGg7IH0KKyAgICB2b2lk
IHNldFNwYWNlV2lkdGgoZmxvYXQgc3BhY2VXaWR0aCkgeyBtX3NwYWNlV2lkdGggPSBzcGFjZVdp
ZHRoOyB9CiAKICNpZiBVU0UoQ0cpIHx8IFVTRShDQUlSTykgfHwgUExBVEZPUk0oV1gpIHx8IFVT
RShTS0lBX09OX01BQ19DSFJPTUUpCiAgICAgZmxvYXQgc3ludGhldGljQm9sZE9mZnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3ludGhldGljQm9sZE9mZnNldDsgfQogI2VuZGlmCiAKICAgICBHbHlw
aCBzcGFjZUdseXBoKCkgY29uc3QgeyByZXR1cm4gbV9zcGFjZUdseXBoOyB9CisgICAgdm9pZCBz
ZXRTcGFjZUdseXBoKEdseXBoIHNwYWNlR2x5cGgpIHsgbV9zcGFjZUdseXBoID0gc3BhY2VHbHlw
aDsgfQorICAgIHZvaWQgc2V0WmVyb1dpZHRoU3BhY2VHbHlwaChHbHlwaCBzcGFjZUdseXBoKSB7
IG1femVyb1dpZHRoU3BhY2VHbHlwaCA9IHNwYWNlR2x5cGg7IH0KICAgICBib29sIGlzWmVyb1dp
ZHRoU3BhY2VHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QgeyByZXR1cm4gZ2x5cGggPT0gbV96ZXJv
V2lkdGhTcGFjZUdseXBoICYmIGdseXBoOyB9CiAKICAgICB2aXJ0dWFsIGNvbnN0IFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyKSBjb25zdDsKQEAgLTEyOCwxOCAr
MTQ1LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIGRldGVybWluZVBpdGNoKCk7CiAgICAgUGl0Y2gg
cGl0Y2goKSBjb25zdCB7IHJldHVybiBtX3RyZWF0QXNGaXhlZFBpdGNoID8gRml4ZWRQaXRjaCA6
IFZhcmlhYmxlUGl0Y2g7IH0KIAotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgU1ZHRm9udERh
dGEqIHN2Z0ZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250RGF0YS5nZXQoKTsgfQot
ICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1cm4gbV9zdmdGb250RGF0YTsgfQotI2Vs
c2UKLSAgICBib29sIGlzU1ZHRm9udCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0jZW5kaWYK
KyAgICBTaW1wbGVGb250RGF0YTo6Rm9udERhdGEqIGZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4g
bV9mb250RGF0YS5nZXQoKTsgfQorICAgIGJvb2wgaXNTVkdGb250KCkgY29uc3QgeyByZXR1cm4g
bV9mb250RGF0YTsgfQogCiAgICAgdmlydHVhbCBib29sIGlzQ3VzdG9tRm9udCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNDdXN0b21Gb250OyB9CiAgICAgdmlydHVhbCBib29sIGlzTG9hZGluZygpIGNv
bnN0IHsgcmV0dXJuIG1faXNMb2FkaW5nOyB9CiAgICAgdmlydHVhbCBib29sIGlzU2VnbWVudGVk
KCkgY29uc3Q7CiAKICAgICBjb25zdCBHbHlwaERhdGEmIG1pc3NpbmdHbHlwaERhdGEoKSBjb25z
dCB7IHJldHVybiBtX21pc3NpbmdHbHlwaERhdGE7IH0KKyAgICB2b2lkIHNldE1pc3NpbmdHbHlw
aERhdGEoY29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGEpIHsgbV9taXNzaW5nR2x5cGhEYXRhID0g
Z2x5cGhEYXRhOyB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgdmlydHVhbCBTdHJpbmcgZGVzY3Jp
cHRpb24oKSBjb25zdDsKQEAgLTIwOCwxNiArMjIyLDEyIEBAIHByaXZhdGU6CiAgICAgZmxvYXQg
bV9hdmdDaGFyV2lkdGg7CiAgICAgCiAgICAgRm9udFBsYXRmb3JtRGF0YSBtX3BsYXRmb3JtRGF0
YTsKKyAgICBPd25QdHI8U2ltcGxlRm9udERhdGE6OkZvbnREYXRhPiBtX2ZvbnREYXRhOwogCiAg
ICAgbXV0YWJsZSBPd25QdHI8R2x5cGhNZXRyaWNzTWFwPEZsb2F0UmVjdD4gPiBtX2dseXBoVG9C
b3VuZHNNYXA7CiAgICAgbXV0YWJsZSBHbHlwaE1ldHJpY3NNYXA8ZmxvYXQ+IG1fZ2x5cGhUb1dp
ZHRoTWFwOwogCiAgICAgYm9vbCBtX3RyZWF0QXNGaXhlZFBpdGNoOwotCi0jaWYgRU5BQkxFKFNW
R19GT05UUykKLSAgICBPd25QdHI8U1ZHRm9udERhdGE+IG1fc3ZnRm9udERhdGE7Ci0jZW5kaWYK
LQogICAgIGJvb2wgbV9pc0N1c3RvbUZvbnQ7ICAvLyBXaGV0aGVyIG9yIG5vdCB3ZSBhcmUgY3Vz
dG9tIGZvbnQgbG9hZGVkIHZpYSBAZm9udC1mYWNlCiAgICAgYm9vbCBtX2lzTG9hZGluZzsgLy8g
V2hldGhlciBvciBub3QgdGhpcyBjdXN0b20gZm9udCBpcyBzdGlsbCBpbiB0aGUgYWN0IG9mIGxv
YWRpbmcuCiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0
UnVuLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dFJ1bi5oCShyZXZpc2lvbiA4NzE0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1RleHRSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTMgKzI0LDE2IEBACiAjaWZuZGVm
IFRleHRSdW5faAogI2RlZmluZSBUZXh0UnVuX2gKIAotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCiAjaW5jbHVkZSAiVGV4dERpcmVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVk
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgUmVuZGVyT2JqZWN0OwotY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2U7CitjbGFz
cyBGbG9hdFBvaW50OworY2xhc3MgRmxvYXRSZWN0OworY2xhc3MgRm9udDsKK2NsYXNzIEdyYXBo
aWNzQ29udGV4dDsKIAogY2xhc3MgVGV4dFJ1biB7CiBwdWJsaWM6CkBAIC01NiwxMCArNTksNiBA
QCBwdWJsaWM6CiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgICAgICAsIG1f
ZGlyZWN0aW9uYWxPdmVycmlkZShkaXJlY3Rpb25hbE92ZXJyaWRlKQogICAgICAgICAsIG1fZGlz
YWJsZVNwYWNpbmcoZmFsc2UpCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICAgICAgLCBtX3Jl
ZmVyZW5jaW5nUmVuZGVyT2JqZWN0KDApCi0gICAgICAgICwgbV9hY3RpdmVQYWludGluZ1Jlc291
cmNlKDApCi0jZW5kaWYKICAgICB7CiAgICAgfQogCkBAIC03NiwxMCArNzUsNiBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgICAgICAsIG1fZGlyZWN0aW9u
YWxPdmVycmlkZShkaXJlY3Rpb25hbE92ZXJyaWRlKQogICAgICAgICAsIG1fZGlzYWJsZVNwYWNp
bmcoZmFsc2UpCi0jaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICAgICAgLCBtX3JlZmVyZW5jaW5n
UmVuZGVyT2JqZWN0KDApCi0gICAgICAgICwgbV9hY3RpdmVQYWludGluZ1Jlc291cmNlKDApCi0j
ZW5kaWYKICAgICB7CiAgICAgfQogCkBAIC05Nyw3ICs5Miw5IEBAIHB1YmxpYzoKICNlbmRpZgog
CiAgICAgYm9vbCBhbGxvd1RhYnMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93VGFiczsgfQorICAg
IHZvaWQgc2V0QWxsb3dUYWJzKGJvb2wgYWxsb3dUYWJzKSB7IG1fYWxsb3dUYWJzID0gYWxsb3dU
YWJzOyB9CiAgICAgZmxvYXQgeFBvcygpIGNvbnN0IHsgcmV0dXJuIG1feHBvczsgfQorICAgIHZv
aWQgc2V0WFBvcyhmbG9hdCB4UG9zKSB7IG1feHBvcyA9IHhQb3M7IH0KICAgICBmbG9hdCBleHBh
bnNpb24oKSBjb25zdCB7IHJldHVybiBtX2V4cGFuc2lvbjsgfQogICAgIGJvb2wgYWxsb3dzTGVh
ZGluZ0V4cGFuc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZXhwYW5zaW9uQmVoYXZpb3IgJiBBbGxv
d0xlYWRpbmdFeHBhbnNpb247IH0KICAgICBib29sIGFsbG93c1RyYWlsaW5nRXhwYW5zaW9uKCkg
Y29uc3QgeyByZXR1cm4gbV9leHBhbnNpb25CZWhhdmlvciAmIEFsbG93VHJhaWxpbmdFeHBhbnNp
b247IH0KQEAgLTExMSwxMyArMTA4LDIyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldERpcmVjdGlv
bihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikgeyBtX2RpcmVjdGlvbiA9IGRpcmVjdGlvbjsgfQog
ICAgIHZvaWQgc2V0RGlyZWN0aW9uYWxPdmVycmlkZShib29sIG92ZXJyaWRlKSB7IG1fZGlyZWN0
aW9uYWxPdmVycmlkZSA9IG92ZXJyaWRlOyB9CiAKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAg
IFJlbmRlck9iamVjdCogcmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSBjb25zdCB7IHJldHVybiBt
X3JlZmVyZW5jaW5nUmVuZGVyT2JqZWN0OyB9Ci0gICAgdm9pZCBzZXRSZWZlcmVuY2luZ1JlbmRl
ck9iamVjdChSZW5kZXJPYmplY3QqIG9iamVjdCkgeyBtX3JlZmVyZW5jaW5nUmVuZGVyT2JqZWN0
ID0gb2JqZWN0OyB9CisgICAgY2xhc3MgUmVuZGVyaW5nQ29udGV4dCA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFJlbmRlcmluZ0NvbnRleHQ+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHZpcnR1YWwgflJl
bmRlcmluZ0NvbnRleHQoKSB7IH0KIAotICAgIFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQYWlu
dGluZ1Jlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVQYWludGluZ1Jlc291cmNlOyB9
Ci0gICAgdm9pZCBzZXRBY3RpdmVQYWludGluZ1Jlc291cmNlKFJlbmRlclNWR1Jlc291cmNlKiBv
YmplY3QpIHsgbV9hY3RpdmVQYWludGluZ1Jlc291cmNlID0gb2JqZWN0OyB9CisjaWYgRU5BQkxF
KFNWR19GT05UUykKKyAgICAgICAgLy8gRklYTUU6IE5vdGUgdGhhdCB0aGUgU1ZHIEZvbnQgaW50
ZWdyYXRpb24gQVBJcyB3aWxsIGJlIG1vcmUgYWJzdHJhY3QgYW5kIHNpbXBsZXIgb25jZSB0aGUg
U1ZHIEZvbnRzIHJld3JpdGUgcGF0Y2ggbGFuZHMgKDU5MDg1KS4KKyAgICAgICAgdmlydHVhbCB2
b2lkIGRyYXdUZXh0VXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
ID0gMDsKKyAgICAgICAgdmlydHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0
IEZvbnQmLCBjb25zdCBUZXh0UnVuJikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGZsb2F0
IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBpbnQg
ZXh0cmFDaGFyc0F2YWlsYWJsZSwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFt
ZSkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0Rm9y
VGV4dFVzaW5nU1ZHRm9udChjb25zdCBGb250JiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QgPSAwOworICAgICAgICB2aXJ0
dWFsIGludCBvZmZzZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYs
IGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBo
cykgY29uc3QgPSAwOwogI2VuZGlmCisgICAgfTsKKworICAgIFJlbmRlcmluZ0NvbnRleHQqIHJl
bmRlcmluZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX3JlbmRlcmluZ0NvbnRleHQuZ2V0KCk7
IH0KKyAgICB2b2lkIHNldFJlbmRlcmluZ0NvbnRleHQoUGFzc1JlZlB0cjxSZW5kZXJpbmdDb250
ZXh0PiBjb250ZXh0KSB7IG1fcmVuZGVyaW5nQ29udGV4dCA9IGNvbnRleHQ7IH0KIAogcHJpdmF0
ZToKICAgICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXJzOwpAQCAtMTM2LDExICsxNDIsNyBAQCBw
cml2YXRlOgogICAgIFRleHREaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAgICAgYm9vbCBtX2RpcmVj
dGlvbmFsT3ZlcnJpZGU7IC8vIFdhcyB0aGlzIGRpcmVjdGlvbiBzZXQgYnkgYW4gb3ZlcnJpZGUg
Y2hhcmFjdGVyLgogICAgIGJvb2wgbV9kaXNhYmxlU3BhY2luZzsKLQotI2lmIEVOQUJMRShTVkdf
Rk9OVFMpCi0gICAgUmVuZGVyT2JqZWN0KiBtX3JlZmVyZW5jaW5nUmVuZGVyT2JqZWN0OwotICAg
IFJlbmRlclNWR1Jlc291cmNlKiBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2U7Ci0jZW5kaWYKKyAg
ICBSZWZQdHI8UmVuZGVyaW5nQ29udGV4dD4gbV9yZW5kZXJpbmdDb250ZXh0OwogfTsKIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiA4
NzE0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDggKzQ0LDkgQEAgdm9pZCBFbGxpcHNpc0JveDo6cGFpbnQoUGFpbnRJ
bmZvJiBwYWludAogICAgICAgICBzZXRTaGFkb3cgPSB0cnVlOwogICAgIH0KIAorICAgIGNvbnN0
IEZvbnQmIGZvbnQgPSBzdHlsZS0+Zm9udCgpOwogICAgIGlmIChzZWxlY3Rpb25TdGF0ZSgpICE9
IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uTm9uZSkgewotICAgICAgICBwYWludFNlbGVjdGlvbihj
b250ZXh0LCB0eCwgdHksIHN0eWxlLCBzdHlsZS0+Zm9udCgpKTsKKyAgICAgICAgcGFpbnRTZWxl
Y3Rpb24oY29udGV4dCwgdHgsIHR5LCBzdHlsZSwgZm9udCk7CiAKICAgICAgICAgLy8gU2VsZWN0
IHRoZSBjb3JyZWN0IGNvbG9yIGZvciBwYWludGluZyB0aGUgdGV4dC4KICAgICAgICAgQ29sb3Ig
Zm9yZWdyb3VuZCA9IHBhaW50SW5mby5mb3JjZUJsYWNrVGV4dCA/IENvbG9yOjpibGFjayA6IHJl
bmRlcmVyKCktPnNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwpAQCAtNTQsNyArNTUsNyBAQCB2
b2lkIEVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50CiAgICAgfQogCiAgICAgLy8g
RklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4
dCBydW4gZmxhZ3MgYmVsb3cuCi0gICAgY29udGV4dC0+ZHJhd1RleHQoc3R5bGUtPmZvbnQoKSwg
UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKG1fc3Ry
LCBzdHlsZSksIEludFBvaW50KG1feCArIHR4LCBtX3kgKyB0eSArIHN0eWxlLT5mb250TWV0cmlj
cygpLmFzY2VudCgpKSk7CisgICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgUmVuZGVyQmxvY2s6
OmNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0UnVu
OjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsg
c3R5bGUtPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKIAogICAgIC8vIFJlc3RvcmUgdGhlIHJl
Z3VsYXIgZmlsbCBjb2xvci4KICAgICBpZiAodGV4dENvbG9yICE9IGNvbnRleHQtPmZpbGxDb2xv
cigpKQpAQCAtNzQsOSArNzUsOSBAQCB2b2lkIEVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8m
IHBhaW50CiBJbnRSZWN0IEVsbGlwc2lzQm94OjpzZWxlY3Rpb25SZWN0KGludCB0eCwgaW50IHR5
KQogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IG1fcmVuZGVyZXItPnN0eWxlKG1fZmlyc3RM
aW5lKTsKLSAgICBjb25zdCBGb250JiBmID0gc3R5bGUtPmZvbnQoKTsKKyAgICBjb25zdCBGb250
JiBmb250ID0gc3R5bGUtPmZvbnQoKTsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlz
IExUUj8gRml4IGJ5IHBhc3NpbmcgY29ycmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KLSAgICBy
ZXR1cm4gZW5jbG9zaW5nSW50UmVjdChmLnNlbGVjdGlvblJlY3RGb3JUZXh0KFJlbmRlckJsb2Nr
Ojpjb25zdHJ1Y3RUZXh0UnVuQWxsb3dUcmFpbGluZ0V4cGFuc2lvbihtX3N0ciwgc3R5bGUpLCBJ
bnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyByb290KCktPnNlbGVjdGlvblRvcCgpKSwgcm9v
dCgpLT5zZWxlY3Rpb25IZWlnaHQoKSkpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRSZWN0KGZv
bnQuc2VsZWN0aW9uUmVjdEZvclRleHQoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4ocmVu
ZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5z
aW9uKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgcm9vdCgpLT5zZWxlY3Rpb25Ub3Ao
KSksIHJvb3QoKS0+c2VsZWN0aW9uSGVpZ2h0KCkpKTsKIH0KIAogdm9pZCBFbGxpcHNpc0JveDo6
cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgdHgsIGludCB0eSwg
UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250KQpAQCAtOTYsNyArOTcsNyBAQCB2
b2lkIEVsbGlwc2lzQm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljCiAgICAgaW50IGggPSByb290
KCktPnNlbGVjdGlvbkhlaWdodCgpOwogICAgIGNvbnRleHQtPmNsaXAoSW50UmVjdChtX3ggKyB0
eCwgeSArIHR5LCBtX2xvZ2ljYWxXaWR0aCwgaCkpOwogICAgIC8vIEZJWE1FOiBXaHkgaXMgdGhp
cyBhbHdheXMgTFRSPyBGaXggYnkgcGFzc2luZyBjb3JyZWN0IHRleHQgcnVuIGZsYWdzIGJlbG93
LgotICAgIGNvbnRleHQtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuQWxsb3dUcmFpbGluZ0V4cGFuc2lvbihtX3N0ciwgc3R5bGUpLCBJbnRQ
b2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyB5KSwgaCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSk7
CisgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgUmVuZGVyQmxvY2s6OmNv
bnN0cnVjdFRleHRSdW4ocmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0UnVuOjpB
bGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgeSks
IGgsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCkpOwogfQogCiBib29sIEVsbGlwc2lzQm94Ojpub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYgcmVxdWVzdCwgSGl0VGVzdFJlc3VsdCYgcmVz
dWx0LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIGlu
dCBsaW5lVG9wLCBpbnQgbGluZUJvdHRvbSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9JbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDg3MTQ1KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4
IEBACiAjaW5jbHVkZSAiUmVuZGVyUnVieVJ1bi5oIgogI2luY2x1ZGUgIlJlbmRlclJ1YnlUZXh0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKKyNpbmNsdWRlICJTVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIlRleHQuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCiAj
aW5jbHVkZSAiYnJlYWtfbGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CiAK
QEAgLTE4MiwxNSArMTgyLDE1IEBAIEludFJlY3QgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVj
dChpbnQKICAgICBpbnQgc2VsVG9wID0gc2VsZWN0aW9uVG9wKCk7CiAgICAgaW50IHNlbEhlaWdo
dCA9IHNlbGVjdGlvbkhlaWdodCgpOwogICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gdGV4
dE9iai0+c3R5bGUobV9maXJzdExpbmUpOwotICAgIGNvbnN0IEZvbnQmIGYgPSBzdHlsZVRvVXNl
LT5mb250KCk7CisgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlVG9Vc2UtPmZvbnQoKTsKIAog
ICAgIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiBjaGFyYWN0ZXJzV2l0aEh5cGhlbjsKICAgICBi
b29sIHJlc3BlY3RIeXBoZW4gPSBlUG9zID09IG1fbGVuICYmIGhhc0h5cGhlbigpOwotICAgIFRl
eHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGVUb1VzZSwgcmVzcGVjdEh5cGhl
biA/ICZjaGFyYWN0ZXJzV2l0aEh5cGhlbiA6IDApOworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNv
bnN0cnVjdFRleHRSdW4oc3R5bGVUb1VzZSwgZm9udCwgcmVzcGVjdEh5cGhlbiA/ICZjaGFyYWN0
ZXJzV2l0aEh5cGhlbiA6IDApOwogICAgIGlmIChyZXNwZWN0SHlwaGVuKQogICAgICAgICBlbmRQ
b3MgPSB0ZXh0UnVuLmxlbmd0aCgpOwogCi0gICAgSW50UmVjdCByID0gZW5jbG9zaW5nSW50UmVj
dChmLnNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIEZsb2F0UG9pbnQobG9naWNhbExlZnQo
KSwgc2VsVG9wKSwgc2VsSGVpZ2h0LCBzUG9zLCBlUG9zKSk7CisgICAgSW50UmVjdCByID0gZW5j
bG9zaW5nSW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIEZsb2F0UG9p
bnQobG9naWNhbExlZnQoKSwgc2VsVG9wKSwgc2VsSGVpZ2h0LCBzUG9zLCBlUG9zKSk7CiAKICAg
ICBpbnQgbG9naWNhbFdpZHRoID0gci53aWR0aCgpOwogICAgIGlmIChyLngoKSA+IGxvZ2ljYWxS
aWdodCgpKQpAQCAtNjQzLDcgKzY0Myw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFp
bnRJbmZvJiBwYWkKICAgICAgICAgY29tYmluZWRUZXh0LT5jaGFyYWN0ZXJzVG9SZW5kZXIobV9z
dGFydCwgY2hhcmFjdGVycywgbGVuZ3RoKTsKIAogICAgIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhl
biBjaGFyYWN0ZXJzV2l0aEh5cGhlbjsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RU
ZXh0UnVuKHN0eWxlVG9Vc2UsIGNoYXJhY3RlcnMsIGxlbmd0aCwgaGFzSHlwaGVuKCkgPyAmY2hh
cmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKKyAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RU
ZXh0UnVuKHN0eWxlVG9Vc2UsIGZvbnQsIGNoYXJhY3RlcnMsIGxlbmd0aCwgaGFzSHlwaGVuKCkg
PyAmY2hhcmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKICAgICBpZiAoaGFzSHlwaGVuKCkpCiAgICAg
ICAgIGxlbmd0aCA9IHRleHRSdW4ubGVuZ3RoKCk7CiAKQEAgLTY4MCw3ICs2ODAsNyBAQCB2b2lk
IElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAgICAgICAgIGlmICghZW1waGFz
aXNNYXJrLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNv
bnRleHQsIGVtcGhhc2lzTWFya0NvbG9yLCB0ZXh0U3Ryb2tlQ29sb3IsIHRleHRTdHJva2VXaWR0
aCwgc3R5bGVUb1VzZS0+Y29sb3JTcGFjZSgpKTsKIAotICAgICAgICAgICAgc3RhdGljIFRleHRS
dW4gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuKCZvYmplY3RSZXBsYWNlbWVudENo
YXJhY3RlciwgMSk7CisgICAgICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFRleHRSdW4sIG9i
amVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biwgKCZvYmplY3RSZXBsYWNlbWVudENoYXJh
Y3RlciwgMSkpOwogICAgICAgICAgICAgVGV4dFJ1biYgZW1waGFzaXNNYXJrVGV4dFJ1biA9IGNv
bWJpbmVkVGV4dCA/IG9iamVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyVGV4dFJ1biA6IHRleHRSdW47
CiAgICAgICAgICAgICBGbG9hdFBvaW50IGVtcGhhc2lzTWFya1RleHRPcmlnaW4gPSBjb21iaW5l
ZFRleHQgPyBGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBib3hSZWN0LndpZHRoKCkgLyAyLCBi
b3hPcmlnaW4ueSgpICsgZm9udC5mb250TWV0cmljcygpLmFzY2VudCgpKSA6IHRleHRPcmlnaW47
CiAgICAgICAgICAgICBpZiAoY29tYmluZWRUZXh0KQpAQCAtNzA2LDcgKzcwNiw3IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICAgICAgaWYgKCFlbXBoYXNp
c01hcmsuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICB1cGRhdGVHcmFwaGljc0NvbnRleHQoY29u
dGV4dCwgc2VsZWN0aW9uRW1waGFzaXNNYXJrQ29sb3IsIHRleHRTdHJva2VDb2xvciwgdGV4dFN0
cm9rZVdpZHRoLCBzdHlsZVRvVXNlLT5jb2xvclNwYWNlKCkpOwogCi0gICAgICAgICAgICBzdGF0
aWMgVGV4dFJ1biBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlclRleHRSdW4oJm9iamVjdFJlcGxh
Y2VtZW50Q2hhcmFjdGVyLCAxKTsKKyAgICAgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoVGV4
dFJ1biwgb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuLCAoJm9iamVjdFJlcGxhY2Vt
ZW50Q2hhcmFjdGVyLCAxKSk7CiAgICAgICAgICAgICBUZXh0UnVuJiBlbXBoYXNpc01hcmtUZXh0
UnVuID0gY29tYmluZWRUZXh0ID8gb2JqZWN0UmVwbGFjZW1lbnRDaGFyYWN0ZXJUZXh0UnVuIDog
dGV4dFJ1bjsKICAgICAgICAgICAgIEZsb2F0UG9pbnQgZW1waGFzaXNNYXJrVGV4dE9yaWdpbiA9
IGNvbWJpbmVkVGV4dCA/IEZsb2F0UG9pbnQoYm94T3JpZ2luLngoKSArIGJveFJlY3Qud2lkdGgo
KSAvIDIsIGJveE9yaWdpbi55KCkgKyBmb250LmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpIDogdGV4
dE9yaWdpbjsKICAgICAgICAgICAgIGlmIChjb21iaW5lZFRleHQpCkBAIC04MDgsNyArODA4LDcg
QEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaAogCiAgICAgQnVmZmVy
Rm9yQXBwZW5kaW5nSHlwaGVuIGNoYXJhY3RlcnNXaXRoSHlwaGVuOwogICAgIGJvb2wgcmVzcGVj
dEh5cGhlbiA9IGVQb3MgPT0gbGVuZ3RoICYmIGhhc0h5cGhlbigpOwotICAgIFRleHRSdW4gdGV4
dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGNoYXJhY3RlcnMsIGxlbmd0aCwgcmVzcGVj
dEh5cGhlbiA/ICZjaGFyYWN0ZXJzV2l0aEh5cGhlbiA6IDApOworICAgIFRleHRSdW4gdGV4dFJ1
biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQsIGNoYXJhY3RlcnMsIGxlbmd0aCwgcmVz
cGVjdEh5cGhlbiA/ICZjaGFyYWN0ZXJzV2l0aEh5cGhlbiA6IDApOwogICAgIGlmIChyZXNwZWN0
SHlwaGVuKQogICAgICAgICBlUG9zID0gdGV4dFJ1bi5sZW5ndGgoKTsKIApAQCAtODQzLDcgKzg0
Myw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2sKICAgICBpbnQg
ZGVsdGFZID0gcmVuZGVyZXIoKS0+c3R5bGUoKS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgp
ID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBz
ZWxlY3Rpb25Ub3AoKTsKICAgICBpbnQgc2VsSGVpZ2h0ID0gc2VsZWN0aW9uSGVpZ2h0KCk7CiAg
ICAgRmxvYXRQb2ludCBsb2NhbE9yaWdpbihib3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0g
ZGVsdGFZKTsKLSAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBjb25zdHJ1
Y3RUZXh0UnVuKHN0eWxlKSwgbG9jYWxPcmlnaW4sIHNlbEhlaWdodCwgYywgc3R5bGUtPmNvbG9y
U3BhY2UoKSwgc1BvcywgZVBvcyk7CisgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQo
Zm9udCwgY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCksIGxvY2FsT3JpZ2luLCBzZWxIZWln
aHQsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOwogfQogCiAjaWYgUExBVEZP
Uk0oTUFDKQpAQCAtMTAwMSw3ICsxMDAxLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNw
ZWxsaW5nT3JHcmFtbQogICAgICAgICBpbnQgZGVsdGFZID0gcmVuZGVyZXIoKS0+c3R5bGUoKS0+
aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dpY2Fs
Qm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AoKTsKICAgICAgICAgaW50IHNl
bEhlaWdodCA9IHNlbGVjdGlvbkhlaWdodCgpOwogICAgICAgICBGbG9hdFBvaW50IHN0YXJ0UG9p
bnQoYm94T3JpZ2luLngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSk7Ci0gICAgICAgIFRleHRS
dW4gcnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSk7CisgICAgICAgIFRleHRSdW4gcnVuID0g
Y29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCk7CiAKICAgICAgICAgLy8gRklYTUU6IENvbnZl
cnQgdGhlIGRvY3VtZW50IG1hcmtlcnMgdG8gZmxvYXQgcmVjdHMuCiAgICAgICAgIEludFJlY3Qg
bWFya2VyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9udC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChy
dW4sIHN0YXJ0UG9pbnQsIHNlbEhlaWdodCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKTsK
QEAgLTEwNDYsNyArMTA0Niw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hN
YXJrZXIKIAogICAgIGludCBzUG9zID0gbWF4KG1hcmtlci5zdGFydE9mZnNldCgpIC0gbV9zdGFy
dCwgKHVuc2lnbmVkKTApOwogICAgIGludCBlUG9zID0gbWluKG1hcmtlci5lbmRPZmZzZXQoKSAt
IG1fc3RhcnQsICh1bnNpZ25lZCltX2xlbik7Ci0gICAgVGV4dFJ1biBydW4gPSBjb25zdHJ1Y3RU
ZXh0UnVuKHN0eWxlKTsKKyAgICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUs
IGZvbnQpOwogICAgIC8vIEFsd2F5cyBjb21wdXRlIGFuZCBzdG9yZSB0aGUgcmVjdCBhc3NvY2lh
dGVkIHdpdGggdGhpcyBtYXJrZXIuIFRoZSBjb21wdXRlZCByZWN0IGlzIGluIGFic29sdXRlIGNv
b3JkaW5hdGVzLgogICAgIEludFJlY3QgbWFya2VyUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QoZm9u
dC5zZWxlY3Rpb25SZWN0Rm9yVGV4dChydW4sIEludFBvaW50KG1feCwgc2VsZWN0aW9uVG9wKCkp
LCBzZWxIZWlnaHQsIHNQb3MsIGVQb3MpKTsKICAgICBtYXJrZXJSZWN0ID0gcmVuZGVyZXIoKS0+
bG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QobWFya2VyUmVjdCkpLmVuY2xvc2luZ0JvdW5k
aW5nQm94KCk7CkBAIC0xMDczLDcgKzEwNzMsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OmNvbXB1
dGVSZWN0Rm9yUmVwbGFjCiAKICAgICBpbnQgc1BvcyA9IG1heChtYXJrZXIuc3RhcnRPZmZzZXQo
KSAtIG1fc3RhcnQsICh1bnNpZ25lZCkwKTsKICAgICBpbnQgZVBvcyA9IG1pbihtYXJrZXIuZW5k
T2Zmc2V0KCkgLSBtX3N0YXJ0LCAodW5zaWduZWQpbV9sZW4pOwotICAgIFRleHRSdW4gcnVuID0g
Y29uc3RydWN0VGV4dFJ1bihzdHlsZSk7CisgICAgVGV4dFJ1biBydW4gPSBjb25zdHJ1Y3RUZXh0
UnVuKHN0eWxlLCBmb250KTsKICAgICBJbnRQb2ludCBzdGFydFBvaW50ID0gSW50UG9pbnQobV94
LCB5KTsKICAgICAKICAgICAvLyBDb21wdXRlIGFuZCBzdG9yZSB0aGUgcmVjdCBhc3NvY2lhdGVk
IHdpdGggdGhpcyBtYXJrZXIuCkBAIC0xMjMyLDggKzEyMzIsOCBAQCBpbnQgSW5saW5lVGV4dEJv
eDo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvCiAKICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gdG9SZW5k
ZXJUZXh0KHJlbmRlcmVyKCkpOwogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHRleHQtPnN0eWxl
KG1fZmlyc3RMaW5lKTsKLSAgICBjb25zdCBGb250KiBmID0gJnN0eWxlLT5mb250KCk7Ci0gICAg
aW50IG9mZnNldCA9IGYtPm9mZnNldEZvclBvc2l0aW9uKGNvbnN0cnVjdFRleHRSdW4oc3R5bGUp
LCBsaW5lT2Zmc2V0IC0gbG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOworICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZS0+Zm9udCgpOworICAgIGludCBvZmZzZXQgPSBmb250
Lm9mZnNldEZvclBvc2l0aW9uKGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQpLCBsaW5lT2Zm
c2V0IC0gbG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogICAgIGlmIChibG9j
a0lzSW5PcHBvc2l0ZURpcmVjdGlvbiAmJiAoIW9mZnNldCB8fCBvZmZzZXQgPT0gbV9sZW4pKQog
ICAgICAgICByZXR1cm4gIW9mZnNldCA/IG1fbGVuIDogMDsKICAgICByZXR1cm4gb2Zmc2V0OwpA
QCAtMTI1MCwxMSArMTI1MCwxMSBAQCBmbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9m
ZnNldChpCiAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHRvUmVuZGVyVGV4dChyZW5kZXJlcigpKTsK
ICAgICBSZW5kZXJTdHlsZSogc3R5bGVUb1VzZSA9IHRleHQtPnN0eWxlKG1fZmlyc3RMaW5lKTsK
ICAgICBBU1NFUlQoc3R5bGVUb1VzZSk7Ci0gICAgY29uc3QgRm9udCYgZiA9IHN0eWxlVG9Vc2Ut
PmZvbnQoKTsKKyAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGVUb1VzZS0+Zm9udCgpOwogICAg
IGludCBmcm9tID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQg
OiAwOwogICAgIGludCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9m
ZnNldCAtIG1fc3RhcnQ7CiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gYWRkIHJpZ2h0QmVh
cmluZyBoZXJlPwotICAgIHJldHVybiBmLnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0cnVjdFRl
eHRSdW4oc3R5bGVUb1VzZSksIEludFBvaW50KGxvZ2ljYWxMZWZ0KCksIDApLCAwLCBmcm9tLCB0
bykubWF4WCgpOworICAgIHJldHVybiBmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0cnVj
dFRleHRSdW4oc3R5bGVUb1VzZSwgZm9udCksIEludFBvaW50KGxvZ2ljYWxMZWZ0KCksIDApLCAw
LCBmcm9tLCB0bykubWF4WCgpOwogfQogCiBib29sIElubGluZVRleHRCb3g6OmNvbnRhaW5zQ2Fy
ZXRPZmZzZXQoaW50IG9mZnNldCkgY29uc3QKQEAgLTEyODEsNyArMTI4MSw3IEBAIGJvb2wgSW5s
aW5lVGV4dEJveDo6Y29udGFpbnNDYXJldE9mZnNldCgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
VGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiBzdHls
ZSwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiBjaGFyYWN0ZXJzV2l0aEh5cGhlbikgY29uc3QK
K1RleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSogc3R5
bGUsIGNvbnN0IEZvbnQmIGZvbnQsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogY2hhcmFjdGVy
c1dpdGhIeXBoZW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKIApAQCAtMTI4OSwxMCAr
MTI4OSwxMCBAQCBUZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oCiAgICAg
QVNTRVJUKHRleHRSZW5kZXJlcik7CiAgICAgQVNTRVJUKHRleHRSZW5kZXJlci0+Y2hhcmFjdGVy
cygpKTsKIAotICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCB0ZXh0UmVuZGVyZXIt
PmNoYXJhY3RlcnMoKSArIHN0YXJ0KCksIGxlbigpLCBjaGFyYWN0ZXJzV2l0aEh5cGhlbik7Cisg
ICAgcmV0dXJuIGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQsIHRleHRSZW5kZXJlci0+Y2hh
cmFjdGVycygpICsgc3RhcnQoKSwgbGVuKCksIGNoYXJhY3RlcnNXaXRoSHlwaGVuKTsKIH0KIAot
VGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiBzdHls
ZSwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIEJ1ZmZlckZvckFwcGVuZGlu
Z0h5cGhlbiogY2hhcmFjdGVyc1dpdGhIeXBoZW4pIGNvbnN0CitUZXh0UnVuIElubGluZVRleHRC
b3g6OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250
LCBjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgQnVmZmVyRm9yQXBwZW5kaW5n
SHlwaGVuKiBjaGFyYWN0ZXJzV2l0aEh5cGhlbikgY29uc3QKIHsKICAgICBBU1NFUlQoc3R5bGUp
OwogCkBAIC0xMzAyLDggKzEzMDIsMTEgQEAgVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1
Y3RUZXh0UnVuKAogICAgIGlmIChjaGFyYWN0ZXJzV2l0aEh5cGhlbikKICAgICAgICAgYWRqdXN0
Q2hhcmFjdGVyc0FuZExlbmd0aEZvckh5cGhlbigqY2hhcmFjdGVyc1dpdGhIeXBoZW4sIHN0eWxl
LCBjaGFyYWN0ZXJzLCBsZW5ndGgpOwogCi0gICAgLy8gRklYTUU6IFJlbW92ZSBUZXh0UnVucyBh
bGwtaW4tb25lLWNvbnN0cnVjdG9yIGFuZCB1c2UgZXhwbGljaXQgc2V0dGVycyBoZXJlLgotICAg
IHJldHVybiBUZXh0UnVuKGNoYXJhY3RlcnMsIGxlbmd0aCwgdGV4dFJlbmRlcmVyLT5hbGxvd1Rh
YnMoKSwgdGV4dFBvcygpLCBleHBhbnNpb24oKSwgZXhwYW5zaW9uQmVoYXZpb3IoKSwgZGlyZWN0
aW9uKCksIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5T3JkZXJlZCgpKTsKKyAgICBU
ZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIHRleHRSZW5kZXJlci0+YWxsb3dUYWJzKCks
IHRleHRQb3MoKSwgZXhwYW5zaW9uKCksIGV4cGFuc2lvbkJlaGF2aW9yKCksIGRpcmVjdGlvbigp
LCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlLT52aXN1YWxseU9yZGVyZWQoKSk7CisgICAgaWYgKHRl
eHRSdW5OZWVkc1JlbmRlcmluZ0NvbnRleHQoZm9udCkpCisgICAgICAgIHJ1bi5zZXRSZW5kZXJp
bmdDb250ZXh0KFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUodGV4dFJlbmRlcmVy
KSk7CisKKyAgICByZXR1cm4gcnVuOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCShyZXZpc2lvbiA4NzE0NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAg
LTk5LDggKzk5LDggQEAgcHJpdmF0ZToKICAgICBpbnQgc2VsZWN0aW9uQm90dG9tKCk7CiAgICAg
aW50IHNlbGVjdGlvbkhlaWdodCgpOwogCi0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJl
bmRlclN0eWxlKiwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiA9IDApIGNvbnN0OwotICAgIFRl
eHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSosIGNvbnN0IFVDaGFyKiwgaW50IGxl
bmd0aCwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiA9IDApIGNvbnN0OworICAgIFRleHRSdW4g
Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBCdWZmZXJGb3JBcHBl
bmRpbmdIeXBoZW4qID0gMCkgY29uc3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJl
bmRlclN0eWxlKiwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgQnVmZmVy
Rm9yQXBwZW5kaW5nSHlwaGVuKiA9IDApIGNvbnN0OwogCiBwdWJsaWM6CiAgICAgdmlydHVhbCBJ
bnRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KHgoKSwg
eSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gODcxNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBACiAj
aW5jbHVkZSAiUmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVk
ZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCisjaW5jbHVkZSAiU1ZHVGV4dFJ1
blJlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJUcmFuc2Zvcm1TdGF0ZS5oIgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KIApAQCAtNDcwNyw3ICs0NzA3LDcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIHN0cmlwVHJhaWxpbmdTcGFjZShmbAogICAgICAgICBSZW5kZXJUZXh0KiB0ID0g
dG9SZW5kZXJUZXh0KHRyYWlsaW5nU3BhY2VDaGlsZCk7CiAgICAgICAgIGNvbnN0IFVDaGFyIHNw
YWNlID0gJyAnOwogICAgICAgICBjb25zdCBGb250JiBmb250ID0gdC0+c3R5bGUoKS0+Zm9udCgp
OyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCi0gICAgICAgIGZsb2F0IHNwYWNl
V2lkdGggPSBmb250LndpZHRoKFRleHRSdW4oJnNwYWNlLCAxKSk7CisgICAgICAgIGZsb2F0IHNw
YWNlV2lkdGggPSBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHQsIGZv
bnQsICZzcGFjZSwgMSwgdC0+c3R5bGUoKSkpOwogICAgICAgICBpbmxpbmVNYXggLT0gc3BhY2VX
aWR0aCArIGZvbnQud29yZFNwYWNpbmcoKTsKICAgICAgICAgaWYgKGlubGluZU1pbiA+IGlubGlu
ZU1heCkKICAgICAgICAgICAgIGlubGluZU1pbiA9IGlubGluZU1heDsKQEAgLTYzMTYsNyArNjMx
Niw3IEBAIGlubGluZSB2b2lkIFJlbmRlckJsb2NrOjpGbG9hdGluZ09iamVjdHMKICAgICAgICAg
bV9yaWdodE9iamVjdHNDb3VudC0tOwogfQogCi1UZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuQWxsb3dUcmFpbGluZ0V4cGFuc2lvbihjb25zdCBVQ2hhciogY2hhcmFjdGVycywg
aW50IGxlbmd0aCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuRmxhZ3MgZmxhZ3MpCitUZXh0
UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwg
Y29uc3QgRm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIFJl
bmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uLCBU
ZXh0UnVuRmxhZ3MgZmxhZ3MpCiB7CiAgICAgQVNTRVJUKHN0eWxlKTsKIApAQCAtNjMyOSwxMyAr
NjMyOSwxNiBAQCBUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuQWxsCiAgICAg
ICAgICAgICBkaXJlY3Rpb25hbE92ZXJyaWRlIHw9IHN0eWxlLT51bmljb2RlQmlkaSgpID09IE92
ZXJyaWRlOwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBSZW1vdmUgVGV4dFJ1bnMgYWxsLWluLW9u
ZS1jb25zdHJ1Y3RvciBhbmQgdXNlIGV4cGxpY2l0IHNldHRlcnMgaGVyZS4KLSAgICByZXR1cm4g
VGV4dFJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIGZhbHNlLCAwLCAwLCBUZXh0UnVuOjpBbGxvd1Ry
YWlsaW5nRXhwYW5zaW9uLCB0ZXh0RGlyZWN0aW9uLCBkaXJlY3Rpb25hbE92ZXJyaWRlKTsKKyAg
ICBUZXh0UnVuIHJ1bihjaGFyYWN0ZXJzLCBsZW5ndGgsIGZhbHNlLCAwLCAwLCBleHBhbnNpb24s
IHRleHREaXJlY3Rpb24sIGRpcmVjdGlvbmFsT3ZlcnJpZGUpOworICAgIGlmICh0ZXh0UnVuTmVl
ZHNSZW5kZXJpbmdDb250ZXh0KGZvbnQpKQorICAgICAgICBydW4uc2V0UmVuZGVyaW5nQ29udGV4
dChTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Y3JlYXRlKGNvbnRleHQpKTsKKworICAgIHJl
dHVybiBydW47CiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW5BbGxv
d1RyYWlsaW5nRXhwYW5zaW9uKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBSZW5kZXJTdHlsZSogc3R5
bGUsIFRleHRSdW5GbGFncyBmbGFncykKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRl
eHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBTdHJp
bmcmIHN0cmluZywgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlv
ciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKIHsKLSAgICByZXR1cm4gY29uc3RydWN0
VGV4dFJ1bkFsbG93VHJhaWxpbmdFeHBhbnNpb24oc3RyaW5nLmNoYXJhY3RlcnMoKSwgc3RyaW5n
Lmxlbmd0aCgpLCBzdHlsZSwgZmxhZ3MpOworICAgIHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKGNv
bnRleHQsIGZvbnQsIHN0cmluZy5jaGFyYWN0ZXJzKCksIHN0cmluZy5sZW5ndGgoKSwgc3R5bGUs
IGV4cGFuc2lvbiwgZmxhZ3MpOwogfQogCiAjaWZuZGVmIE5ERUJVRwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDg3MTQ1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDYgKzI3
LDcgQEAKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJSZW5kZXJMaW5lQm94TGlz
dC5oIgogI2luY2x1ZGUgIlJvb3RJbmxpbmVCb3guaCIKKyNpbmNsdWRlICJUZXh0UnVuLmgiCiAj
aW5jbHVkZSA8d3RmL093blB0ci5oPgogI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogCkBA
IC0xNjksOCArMTcwLDExIEBAIHB1YmxpYzoKICAgICAKICAgICBzdGF0aWMgdm9pZCBhcHBlbmRS
dW5zRm9yT2JqZWN0KEJpZGlSdW5MaXN0PEJpZGlSdW4+JiwgaW50IHN0YXJ0LCBpbnQgZW5kLCBS
ZW5kZXJPYmplY3QqLCBJbmxpbmVCaWRpUmVzb2x2ZXImKTsKIAotICAgIHN0YXRpYyBUZXh0UnVu
IGNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKGNvbnN0IFN0cmluZyYsIFJl
bmRlclN0eWxlKiwgVGV4dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRSdW5GbGFncyk7Ci0gICAgc3Rh
dGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkFsbG93VHJhaWxpbmdFeHBhbnNpb24oY29uc3Qg
VUNoYXIqLCBpbnQgbGVuZ3RoLCBSZW5kZXJTdHlsZSosIFRleHRSdW5GbGFncyA9IERlZmF1bHRU
ZXh0UnVuRmxhZ3MpOworICAgIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVuZGVy
T2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiwgY29uc3QgU3RyaW5nJiwgUmVuZGVyU3R5bGUq
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9u
QmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9y
YmlkTGVhZGluZ0V4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRSdW5GbGFncyk7
CisKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29u
dGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiwgaW50IGxlbmd0aCwgUmVuZGVyU3R5bGUq
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9u
QmVoYXZpb3IgPSBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9y
YmlkTGVhZGluZ0V4cGFuc2lvbiwgVGV4dFJ1bkZsYWdzID0gRGVmYXVsdFRleHRSdW5GbGFncyk7
CiAKICAgICBDb2x1bW5JbmZvKiBjb2x1bW5JbmZvKCkgY29uc3Q7CiAgICAgaW50IGNvbHVtbkdh
cCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrTGluZUxheW91dC5jcHAJKHJldmlzaW9uIDg3MTQ1KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2
LDcgKzM2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKICNpbmNsdWRlICJUZXh0QnJlYWtJdGVyYXRvci5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIK
ICNpbmNsdWRlICJUcmFpbGluZ0Zsb2F0c1Jvb3RJbmxpbmVCb3guaCIKICNpbmNsdWRlICJWZXJ0
aWNhbFBvc2l0aW9uQ2FjaGUuaCIKICNpbmNsdWRlICJicmVha19saW5lcy5oIgpAQCAtNDgyLDcg
KzQ4MSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMb2dpY2FsV2lkdGhGb3JUZXgKICAgICBp
bnQgaHlwaGVuV2lkdGggPSAwOwogICAgIGlmIChzdGF0aWNfY2FzdDxJbmxpbmVUZXh0Qm94Kj4o
cnVuLT5tX2JveCktPmhhc0h5cGhlbigpKSB7CiAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
aHlwaGVuU3RyaW5nID0gcmVuZGVyZXItPnN0eWxlKCktPmh5cGhlblN0cmluZygpOwotICAgICAg
ICBoeXBoZW5XaWR0aCA9IHJlbmRlcmVyLT5zdHlsZShsaW5lSW5mby5pc0ZpcnN0TGluZSgpKS0+
Zm9udCgpLndpZHRoKFRleHRSdW4oaHlwaGVuU3RyaW5nLmNoYXJhY3RlcnMoKSwgaHlwaGVuU3Ry
aW5nLmxlbmd0aCgpKSk7CisgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSByZW5kZXJlci0+c3R5
bGUobGluZUluZm8uaXNGaXJzdExpbmUoKSktPmZvbnQoKTsKKyAgICAgICAgaHlwaGVuV2lkdGgg
PSBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyLCBmb250
LCBoeXBoZW5TdHJpbmcuc3RyaW5nKCksIHJlbmRlcmVyLT5zdHlsZSgpKSk7CiAgICAgfQogICAg
IHJ1bi0+bV9ib3gtPnNldExvZ2ljYWxXaWR0aChyZW5kZXJlci0+d2lkdGgocnVuLT5tX3N0YXJ0
LCBydW4tPm1fc3RvcCAtIHJ1bi0+bV9zdGFydCwgeFBvcywgbGluZUluZm8uaXNGaXJzdExpbmUo
KSwgJmZhbGxiYWNrRm9udHMsICZnbHlwaE92ZXJmbG93KSArIGh5cGhlbldpZHRoKTsKICAgICBp
ZiAoIWZhbGxiYWNrRm9udHMuaXNFbXB0eSgpKSB7CkBAIC0xNTc2LDcgKzE1NzYsMTAgQEAgc3Rh
dGljIGlubGluZSBmbG9hdCB0ZXh0V2lkdGgoUmVuZGVyVGV4dAogewogICAgIGlmIChpc0ZpeGVk
UGl0Y2ggfHwgKCFmcm9tICYmIGxlbiA9PSB0ZXh0LT50ZXh0TGVuZ3RoKCkpIHx8IHRleHQtPnN0
eWxlKCktPmhhc1RleHRDb21iaW5lKCkpCiAgICAgICAgIHJldHVybiB0ZXh0LT53aWR0aChmcm9t
LCBsZW4sIGZvbnQsIHhQb3MpOwotICAgIHJldHVybiBmb250LndpZHRoKFRleHRSdW4odGV4dC0+
Y2hhcmFjdGVycygpICsgZnJvbSwgbGVuLCAhY29sbGFwc2VXaGl0ZVNwYWNlLCB4UG9zKSk7Cisg
ICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250
LCB0ZXh0LT5jaGFyYWN0ZXJzKCkgKyBmcm9tLCBsZW4sIHRleHQtPnN0eWxlKCkpOworICAgIHJ1
bi5zZXRBbGxvd1RhYnMoIWNvbGxhcHNlV2hpdGVTcGFjZSk7CisgICAgcnVuLnNldFhQb3MoeFBv
cyk7CisgICAgcmV0dXJuIGZvbnQud2lkdGgocnVuKTsKIH0KIAogc3RhdGljIHZvaWQgdHJ5SHlw
aGVuYXRpbmcoUmVuZGVyVGV4dCogdGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbGVJZGVudGlmaWVyLCBpbnQgbWluaW11bVByZWZpeExlbmd0aCwgaW50IG1p
bmltdW1TdWZmaXhMZW5ndGgsIGludCBsYXN0U3BhY2UsIGludCBwb3MsIGZsb2F0IHhQb3MsIGlu
dCBhdmFpbGFibGVXaWR0aCwgYm9vbCBpc0ZpeGVkUGl0Y2gsIGJvb2wgY29sbGFwc2VXaGl0ZVNw
YWNlLCBpbnQgbGFzdFNwYWNlV29yZFNwYWNpbmcsIElubGluZUl0ZXJhdG9yJiBsaW5lQnJlYWss
IGludCBuZXh0QnJlYWthYmxlLCBib29sJiBoeXBoZW5hdGVkKQpAQCAtMTU5Miw3ICsxNTk1LDcg
QEAgc3RhdGljIHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCogdAogICAgICAgICByZXR1
cm47CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGh5cGhlblN0cmluZyA9IHRleHQtPnN0eWxl
KCktPmh5cGhlblN0cmluZygpOwotICAgIGludCBoeXBoZW5XaWR0aCA9IGZvbnQud2lkdGgoVGV4
dFJ1bihoeXBoZW5TdHJpbmcuY2hhcmFjdGVycygpLCBoeXBoZW5TdHJpbmcubGVuZ3RoKCkpKTsK
KyAgICBpbnQgaHlwaGVuV2lkdGggPSBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKHRleHQsIGZvbnQsIGh5cGhlblN0cmluZy5zdHJpbmcoKSwgdGV4dC0+c3R5bGUoKSkp
OwogCiAgICAgZmxvYXQgbWF4UHJlZml4V2lkdGggPSBhdmFpbGFibGVXaWR0aCAtIHhQb3MgLSBo
eXBoZW5XaWR0aCAtIGxhc3RTcGFjZVdvcmRTcGFjaW5nOwogICAgIC8vIElmIHRoZSBtYXhpbXVt
IHdpZHRoIGF2YWlsYWJsZSBmb3IgdGhlIHByZWZpeCBiZWZvcmUgdGhlIGh5cGhlbiBpcyBzbWFs
bCwgdGhlbiBpdCBpcyB2ZXJ5IHVubGlrZWx5CkBAIC0xNjAwLDcgKzE2MDMsMTEgQEAgc3RhdGlj
IHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCogdAogICAgIGlmIChtYXhQcmVmaXhXaWR0
aCA8PSBmb250LnBpeGVsU2l6ZSgpICogNSAvIDQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHVu
c2lnbmVkIHByZWZpeExlbmd0aCA9IGZvbnQub2Zmc2V0Rm9yUG9zaXRpb24oVGV4dFJ1bih0ZXh0
LT5jaGFyYWN0ZXJzKCkgKyBsYXN0U3BhY2UsIHBvcyAtIGxhc3RTcGFjZSwgIWNvbGxhcHNlV2hp
dGVTcGFjZSwgeFBvcyArIGxhc3RTcGFjZVdvcmRTcGFjaW5nKSwgbWF4UHJlZml4V2lkdGgsIGZh
bHNlKTsKKyAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRl
eHQsIGZvbnQsIHRleHQtPmNoYXJhY3RlcnMoKSArIGxhc3RTcGFjZSwgcG9zIC0gbGFzdFNwYWNl
LCB0ZXh0LT5zdHlsZSgpKTsKKyAgICBydW4uc2V0QWxsb3dUYWJzKCFjb2xsYXBzZVdoaXRlU3Bh
Y2UpOworICAgIHJ1bi5zZXRYUG9zKHhQb3MgKyBsYXN0U3BhY2VXb3JkU3BhY2luZyk7CisKKyAg
ICB1bnNpZ25lZCBwcmVmaXhMZW5ndGggPSBmb250Lm9mZnNldEZvclBvc2l0aW9uKHJ1biwgbWF4
UHJlZml4V2lkdGgsIGZhbHNlKTsKICAgICBpZiAocHJlZml4TGVuZ3RoIDwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1pbmltdW1QcmVmaXhMZW5ndGgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTIw
NDMsNyArMjA1MCw3IEBAIElubGluZUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpMaW5lQnJlYWtlcjoK
IAogICAgICAgICAgICAgLy8gTm9uLXplcm8gb25seSB3aGVuIGtlcm5pbmcgaXMgZW5hYmxlZCwg
aW4gd2hpY2ggY2FzZSB3ZSBtZWFzdXJlIHdvcmRzIHdpdGggdGhlaXIgdHJhaWxpbmcKICAgICAg
ICAgICAgIC8vIHNwYWNlLCB0aGVuIHN1YnRyYWN0IGl0cyB3aWR0aC4KLSAgICAgICAgICAgIGZs
b2F0IHdvcmRUcmFpbGluZ1NwYWNlV2lkdGggPSBmLnR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmIEtl
cm5pbmcgPyBmLndpZHRoKFRleHRSdW4oJnNwYWNlLCAxKSkgKyB3b3JkU3BhY2luZyA6IDA7Cisg
ICAgICAgICAgICBmbG9hdCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gZi50eXBlc2V0dGluZ0Zl
YXR1cmVzKCkgJiBLZXJuaW5nID8gZi53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHQsIGYsICZzcGFj
ZSwgMSwgc3R5bGUpKSArIHdvcmRTcGFjaW5nIDogMDsKIAogICAgICAgICAgICAgZmxvYXQgd3Jh
cFcgPSB3aWR0aC51bmNvbW1pdHRlZFdpZHRoKCkgKyBpbmxpbmVMb2dpY2FsV2lkdGgoY3VycmVu
dC5tX29iaiwgIWFwcGxpZWRTdGFydFdpZHRoLCB0cnVlKTsKICAgICAgICAgICAgIGZsb2F0IGNo
YXJXaWR0aCA9IDA7CkBAIC0yMDcyLDcgKzIwNzksNyBAQCBJbmxpbmVJdGVyYXRvciBSZW5kZXJC
bG9jazo6TGluZUJyZWFrZXI6CiAKICAgICAgICAgICAgICAgICBpZiAoYyA9PSBzb2Z0SHlwaGVu
ICYmIGF1dG9XcmFwICYmICFoeXBoZW5XaWR0aCAmJiBzdHlsZS0+aHlwaGVucygpICE9IEh5cGhl
bnNOb25lKSB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHlwaGVu
U3RyaW5nID0gc3R5bGUtPmh5cGhlblN0cmluZygpOwotICAgICAgICAgICAgICAgICAgICBoeXBo
ZW5XaWR0aCA9IGYud2lkdGgoVGV4dFJ1bihoeXBoZW5TdHJpbmcuY2hhcmFjdGVycygpLCBoeXBo
ZW5TdHJpbmcubGVuZ3RoKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaHlwaGVuV2lkdGggPSBm
LndpZHRoKGNvbnN0cnVjdFRleHRSdW4odCwgZiwgaHlwaGVuU3RyaW5nLnN0cmluZygpLCBjdXJy
ZW50Lm1fb2JqLT5zdHlsZSgpKSk7CiAgICAgICAgICAgICAgICAgICAgIHdpZHRoLmFkZFVuY29t
bWl0dGVkV2lkdGgoaHlwaGVuV2lkdGgpOwogICAgICAgICAgICAgICAgIH0KIApAQCAtMjQwMywx
MiArMjQxMCwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjaGVja0xpbmVzRm9yVGV4dE92ZXJmCiB7
CiAgICAgLy8gRGV0ZXJtaW5lIHRoZSB3aWR0aCBvZiB0aGUgZWxsaXBzaXMgdXNpbmcgdGhlIGN1
cnJlbnQgZm9udC4KICAgICAvLyBGSVhNRTogQ1NTMyBzYXlzIHRoaXMgaXMgY29uZmlndXJhYmxl
LCBhbHNvIG5lZWQgdG8gdXNlIDB4MDAyRSAoRlVMTCBTVE9QKSBpZiBob3Jpem9udGFsIGVsbGlw
c2lzIGlzICJub3QgcmVuZGVyYWJsZSIKLSAgICBUZXh0UnVuIGVsbGlwc2lzUnVuKCZob3Jpem9u
dGFsRWxsaXBzaXMsIDEpOworICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7
CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChBdG9taWNTdHJpbmcsIGVsbGlwc2lzU3RyLCAoJmhv
cml6b250YWxFbGxpcHNpcywgMSkpOwogICAgIGNvbnN0IEZvbnQmIGZpcnN0TGluZUZvbnQgPSBm
aXJzdExpbmVTdHlsZSgpLT5mb250KCk7Ci0gICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkt
PmZvbnQoKTsKLSAgICBpbnQgZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA9IGZpcnN0TGluZUZvbnQu
d2lkdGgoZWxsaXBzaXNSdW4pOwotICAgIGludCBlbGxpcHNpc1dpZHRoID0gKGZvbnQgPT0gZmly
c3RMaW5lRm9udCkgPyBmaXJzdExpbmVFbGxpcHNpc1dpZHRoIDogZm9udC53aWR0aChlbGxpcHNp
c1J1bik7CisgICAgaW50IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggPSBmaXJzdExpbmVGb250Lndp
ZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZmlyc3RMaW5lRm9udCwgJmhvcml6b250YWxFbGxp
cHNpcywgMSwgZmlyc3RMaW5lU3R5bGUoKSkpOworICAgIGludCBlbGxpcHNpc1dpZHRoID0gKGZv
bnQgPT0gZmlyc3RMaW5lRm9udCkgPyBmaXJzdExpbmVFbGxpcHNpc1dpZHRoIDogZm9udC53aWR0
aChjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMsIDEsIHN0
eWxlKCkpKTsKIAogICAgIC8vIEZvciBMVFIgdGV4dCB0cnVuY2F0aW9uLCB3ZSB3YW50IHRvIGdl
dCB0aGUgcmlnaHQgZWRnZSBvZiBvdXIgcGFkZGluZyBib3gsIGFuZCB0aGVuIHdlIHdhbnQgdG8g
c2VlCiAgICAgLy8gaWYgdGhlIHJpZ2h0IGVkZ2Ugb2YgYSBsaW5lIGJveCBleGNlZWRzIHRoYXQu
ICBGb3IgUlRMLCB3ZSB1c2UgdGhlIGxlZnQgZWRnZSBvZiB0aGUgcGFkZGluZyBib3ggYW5kCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAJ
KHJldmlzaW9uIDg3MTQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJp
bmVUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEsNyArMjEsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlJlbmRlckNvbWJpbmVUZXh0LmgiCiAKLSNpbmNsdWRlICJUZXh0
UnVuLmgiCisjaW5jbHVkZSAiUmVuZGVyQmxvY2suaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC05Myw3ICs5Myw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KCkK
ICAgICBpZiAoc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgVGV4dFJ1biBydW4gPSBUZXh0UnVuKFN0cmluZyh0ZXh0KCkpKTsKKyAgICBU
ZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIG9yaWdpbmFs
Rm9udCgpLCBTdHJpbmcodGV4dCgpKSwgc3R5bGUoKSk7CiAgICAgRm9udERlc2NyaXB0aW9uIGRl
c2NyaXB0aW9uID0gb3JpZ2luYWxGb250KCkuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZmxvYXQg
ZW1XaWR0aCA9IGRlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogdGV4dENvbWJpbmVNYXJnaW47
CiAgICAgYm9vbCBzaG91bGRVcGRhdGVGb250ID0gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlz
aW9uIDg3MTQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDcgKzIyMSw4IEBAIHZvaWQgUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWMKIAogICAgIGlmIChwYWludEluZm8ucGhhc2Ug
PT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKICAgICAgICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5
ZWRGaWxlbmFtZSA9IGZpbGVUZXh0VmFsdWUoKTsKLSAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0g
Y29uc3RydWN0VGV4dFJ1bkFsbG93VHJhaWxpbmdFeHBhbnNpb24oZGlzcGxheWVkRmlsZW5hbWUs
IHN0eWxlKCksIFJlc3BlY3REaXJlY3Rpb24gfCBSZXNwZWN0RGlyZWN0aW9uT3ZlcnJpZGUpOwor
ICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOworICAgICAgICBUZXh0
UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIGRpc3BsYXllZEZpbGVu
YW1lLCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uLCBSZXNwZWN0RGly
ZWN0aW9uIHwgUmVzcGVjdERpcmVjdGlvbk92ZXJyaWRlKTsKIAogICAgICAgICAvLyBEZXRlcm1p
bmUgd2hlcmUgdGhlIGZpbGVuYW1lIHNob3VsZCBiZSBwbGFjZWQKICAgICAgICAgaW50IGNvbnRl
bnRMZWZ0ID0gdHggKyBib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpOwpAQCAtMjMxLDcgKzIz
Miw3IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWMKICAgICAgICAg
aWYgKHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKICAgICAgICAgICAgIHRleHRY
ID0gY29udGVudExlZnQgKyBidXR0b25BbmRJY29uV2lkdGg7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIHRleHRYID0gY29udGVudExlZnQgKyBjb250ZW50V2lkdGgoKSAtIGJ1dHRvbkFuZElj
b25XaWR0aCAtIHN0eWxlKCktPmZvbnQoKS53aWR0aCh0ZXh0UnVuKTsKKyAgICAgICAgICAgIHRl
eHRYID0gY29udGVudExlZnQgKyBjb250ZW50V2lkdGgoKSAtIGJ1dHRvbkFuZEljb25XaWR0aCAt
IGZvbnQud2lkdGgodGV4dFJ1bik7CiAgICAgICAgIC8vIFdlIHdhbnQgdG8gbWF0Y2ggdGhlIGJ1
dHRvbidzIGJhc2VsaW5lCiAgICAgICAgIFJlbmRlckJ1dHRvbiogYnV0dG9uUmVuZGVyZXIgPSB0
b1JlbmRlckJ1dHRvbihtX2J1dHRvbi0+cmVuZGVyZXIoKSk7CiAgICAgICAgIGludCB0ZXh0WSA9
IGJ1dHRvblJlbmRlcmVyLT5hYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpLnkoKQpAQCAtMjQxLDcg
KzI0Miw3IEBAIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OnBhaW50T2JqZWMKICAgICAg
ICAgcGFpbnRJbmZvLmNvbnRleHQtPnNldEZpbGxDb2xvcihzdHlsZSgpLT52aXNpdGVkRGVwZW5k
ZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvciksIHN0eWxlKCktPmNvbG9yU3BhY2UoKSk7CiAgICAg
ICAgIAogICAgICAgICAvLyBEcmF3IHRoZSBmaWxlbmFtZQotICAgICAgICBwYWludEluZm8uY29u
dGV4dC0+ZHJhd0JpZGlUZXh0KHN0eWxlKCktPmZvbnQoKSwgdGV4dFJ1biwgSW50UG9pbnQodGV4
dFgsIHRleHRZKSk7CisgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5kcmF3QmlkaVRleHQoZm9u
dCwgdGV4dFJ1biwgSW50UG9pbnQodGV4dFgsIHRleHRZKSk7CiAgICAgICAgIAogICAgICAgICBp
ZiAobV9maWxlQ2hvb3Nlci0+aWNvbigpKSB7CiAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgd2hl
cmUgdGhlIGljb24gc2hvdWxkIGJlIHBsYWNlZApAQCAtMjcxLDEzICsyNzIsMTQgQEAgdm9pZCBS
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y29tcHV0ZVByZQogICAgIFJlbmRlclN0eWxlKiBzdHls
ZSA9IHRoaXMtPnN0eWxlKCk7CiAgICAgQVNTRVJUKHN0eWxlKTsKIAorICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBzdHlsZS0+Zm9udCgpOwogICAgIGlmIChzdHlsZS0+d2lkdGgoKS5pc0ZpeGVkKCkg
JiYgc3R5bGUtPndpZHRoKCkudmFsdWUoKSA+IDApCiAgICAgICAgIG1fbWluUHJlZmVycmVkTG9n
aWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBjb21wdXRlQ29udGVudEJv
eExvZ2ljYWxXaWR0aChzdHlsZS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNlIHsKICAgICAg
ICAgLy8gRmlndXJlIG91dCBob3cgYmlnIHRoZSBmaWxlbmFtZSBzcGFjZSBuZWVkcyB0byBiZSBm
b3IgYSBnaXZlbiBudW1iZXIgb2YgY2hhcmFjdGVycwogICAgICAgICAvLyAodXNpbmcgIjAiIGFz
IHRoZSBub21pbmFsIGNoYXJhY3RlcikuCiAgICAgICAgIGNvbnN0IFVDaGFyIGNoID0gJzAnOwot
ICAgICAgICBmbG9hdCBjaGFyV2lkdGggPSBzdHlsZS0+Zm9udCgpLndpZHRoKGNvbnN0cnVjdFRl
eHRSdW5BbGxvd1RyYWlsaW5nRXhwYW5zaW9uKFN0cmluZygmY2gsIDEpLCBzdHlsZSkpOworICAg
ICAgICBmbG9hdCBjaGFyV2lkdGggPSBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywg
Zm9udCwgU3RyaW5nKCZjaCwgMSksIHN0eWxlLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5z
aW9uKSk7CiAgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gKGludCljZWlsZihj
aGFyV2lkdGggKiBkZWZhdWx0V2lkdGhOdW1DaGFycyk7CiAgICAgfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDg3
MTQ1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNiBAQAogCiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIu
aCIKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJO
YW1lcy5oPgogCkBAIC05MDIsMTAgKzkwMSwxMCBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94Ojph
cHBseUxpbmVDbGFtcChGCiAgICAgICAgIGludCB0b3RhbFdpZHRoOwogICAgICAgICBJbmxpbmVC
b3gqIGFuY2hvckJveCA9IGxhc3RMaW5lLT5sYXN0Q2hpbGQoKTsKICAgICAgICAgaWYgKGFuY2hv
ckJveCAmJiBhbmNob3JCb3gtPnJlbmRlcmVyKCktPnN0eWxlKCktPmlzTGluaygpKQotICAgICAg
ICAgICAgdG90YWxXaWR0aCA9IGFuY2hvckJveC0+bG9naWNhbFdpZHRoKCkgKyBmb250LndpZHRo
KFRleHRSdW4oZWxsaXBzaXNBbmRTcGFjZSwgMikpOworICAgICAgICAgICAgdG90YWxXaWR0aCA9
IGFuY2hvckJveC0+bG9naWNhbFdpZHRoKCkgKyBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4o
dGhpcywgZm9udCwgZWxsaXBzaXNBbmRTcGFjZSwgMiwgc3R5bGUoKSkpOwogICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgIGFuY2hvckJveCA9IDA7Ci0gICAgICAgICAgICB0b3RhbFdpZHRoID0g
Zm9udC53aWR0aChUZXh0UnVuKCZob3Jpem9udGFsRWxsaXBzaXMsIDEpKTsKKyAgICAgICAgICAg
IHRvdGFsV2lkdGggPSBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgJmhv
cml6b250YWxFbGxpcHNpcywgMSwgc3R5bGUoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8g
U2VlIGlmIHRoaXMgd2lkdGggY2FuIGJlIGFjY29tbW9kYXRlZCBvbiB0aGUgbGFzdCB2aXNpYmxl
IGxpbmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2
aXNpb24gODcxNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw2IEBACiAjaW5jbHVkZSAiUGFnZS5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxheWVyLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUg
IlRleHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KIAogdXNpbmcgbmFtZXNw
YWNlIHN0ZDsKQEAgLTEwNCw3ICsxMDMsNyBAQCBib29sIFJlbmRlckltYWdlOjpzZXRJbWFnZVNp
emVGb3JBbHRUZXh0CiAgICAgLy8gd2UgaGF2ZSBhbiBhbHQgYW5kIHRoZSB1c2VyIG1lYW50IGl0
IChpdHMgbm90IGEgdGV4dCB3ZSBpbnZlbnRlZCkKICAgICBpZiAoIW1fYWx0VGV4dC5pc0VtcHR5
KCkpIHsKICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKLSAgICAg
ICAgSW50U2l6ZSB0ZXh0U2l6ZShtaW4oZm9udC53aWR0aChUZXh0UnVuKG1fYWx0VGV4dCkpLCBt
YXhBbHRUZXh0V2lkdGgpLCBtaW4oZm9udC5mb250TWV0cmljcygpLmhlaWdodCgpLCBtYXhBbHRU
ZXh0SGVpZ2h0KSk7CisgICAgICAgIEludFNpemUgdGV4dFNpemUobWluKGZvbnQud2lkdGgoUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV9hbHRUZXh0LCBzdHlsZSgp
KSksIG1heEFsdFRleHRXaWR0aCksIG1pbihmb250LmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCksIG1h
eEFsdFRleHRIZWlnaHQpKTsKICAgICAgICAgaW1hZ2VTaXplID0gaW1hZ2VTaXplLmV4cGFuZGVk
VG8odGV4dFNpemUpOwogICAgIH0KIApAQCAtMjg2LDcgKzI4NSw3IEBAIHZvaWQgUmVuZGVySW1h
Z2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYKIAogICAgICAgICAgICAgICAgIC8vIE9ubHkgZHJh
dyB0aGUgYWx0IHRleHQgaWYgaXQnbGwgZml0IHdpdGhpbiB0aGUgY29udGVudCBib3gsCiAgICAg
ICAgICAgICAgICAgLy8gYW5kIG9ubHkgaWYgaXQgZml0cyBhYm92ZSB0aGUgZXJyb3IgaW1hZ2Uu
Ci0gICAgICAgICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuKHRleHQpOworICAgICAgICAgICAgICAg
IFRleHRSdW4gdGV4dFJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZv
bnQsIHRleHQsIHN0eWxlKCkpOwogICAgICAgICAgICAgICAgIGludCB0ZXh0V2lkdGggPSBmb250
LndpZHRoKHRleHRSdW4pOwogICAgICAgICAgICAgICAgIGlmIChlcnJvclBpY3R1cmVEcmF3bikg
ewogICAgICAgICAgICAgICAgICAgICBpZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYmIGZv
bnRNZXRyaWNzLmhlaWdodCgpIDw9IGltYWdlWSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHJldmlzaW9uIDg3MTQ1KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw2IEBACiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWUuaCIKICNpbmNsdWRlICJTZWxlY3RFbGVt
ZW50LmgiCiAjaW5jbHVkZSAiU3BhdGlhbE5hdmlnYXRpb24uaCIKLSNpbmNsdWRlICJUZXh0UnVu
LmgiCiAjaW5jbHVkZSA8bWF0aC5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMTIwLDcg
KzExOSw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogCiAgICAg
ICAgICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IENhbid0IHRleHQgZGlyZWN0aW9uIGFmZmVjdCB0aGUg
d2lkdGg/Ci0gICAgICAgICAgICAgICAgZmxvYXQgdGV4dFdpZHRoID0gaXRlbUZvbnQud2lkdGgo
Y29uc3RydWN0VGV4dFJ1bkFsbG93VHJhaWxpbmdFeHBhbnNpb24odGV4dCwgc3R5bGUoKSkpOwor
ICAgICAgICAgICAgICAgIGZsb2F0IHRleHRXaWR0aCA9IGl0ZW1Gb250LndpZHRoKGNvbnN0cnVj
dFRleHRSdW4odGhpcywgaXRlbUZvbnQsIHRleHQsIHN0eWxlKCksIFRleHRSdW46OkFsbG93VHJh
aWxpbmdFeHBhbnNpb24pKTsKICAgICAgICAgICAgICAgICB3aWR0aCA9IG1heCh3aWR0aCwgdGV4
dFdpZHRoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gODcxNDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogI2luY2x1ZGUg
IlJlbmRlckxpc3RJdGVtLmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlRl
eHRSdW4uaCIKICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCiB1c2lu
ZyBuYW1lc3BhY2Ugc3RkOwpAQCAtMTI1Myw3ICsxMjUyLDggQEAgdm9pZCBSZW5kZXJMaXN0TWFy
a2VyOjpwYWludChQYWludEluZm8mIAogICAgIGlmIChtX3RleHQuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBUZXh0UnVuIHRleHRSdW4obV90ZXh0KTsKKyAgICBjb25zdCBGb250
JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOworICAgIFRleHRSdW4gdGV4dFJ1biA9IFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIG1fdGV4dCwgc3R5bGUoKSk7CiAKICAg
ICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQsIGZhbHNlKTsK
ICAgICBpZiAoIXN0eWxlKCktPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpIHsKQEAgLTEyNjks
NyArMTI2OSw3IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAg
ICBJbnRQb2ludCB0ZXh0T3JpZ2luID0gSW50UG9pbnQobWFya2VyLngoKSwgbWFya2VyLnkoKSAr
IHN0eWxlKCktPmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpOwogCiAgICAgaWYgKHR5cGUgPT0gQXN0
ZXJpc2tzIHx8IHR5cGUgPT0gRm9vdG5vdGVzKQotICAgICAgICBjb250ZXh0LT5kcmF3VGV4dChz
dHlsZSgpLT5mb250KCksIHRleHRSdW4sIHRleHRPcmlnaW4pOworICAgICAgICBjb250ZXh0LT5k
cmF3VGV4dChmb250LCB0ZXh0UnVuLCB0ZXh0T3JpZ2luKTsKICAgICBlbHNlIHsKICAgICAgICAg
Ly8gVGV4dCBpcyBub3QgYXJiaXRyYXJ5LiBXZSBjYW4ganVkZ2Ugd2hldGhlciBpdCdzIFJUTCBm
cm9tIHRoZSBmaXJzdCBjaGFyYWN0ZXIsCiAgICAgICAgIC8vIGFuZCB3ZSBvbmx5IG5lZWQgdG8g
aGFuZGxlIHRoZSBkaXJlY3Rpb24gUmlnaHRUb0xlZnQgZm9yIG5vdy4KQEAgLTEyODAsMjIgKzEy
ODAsMjEgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpwYWludChQYWludEluZm8mIAogICAgICAg
ICAgICAgcmV2ZXJzZWRUZXh0Lmdyb3cobGVuZ3RoKTsKICAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgICAgICAgICAgcmV2ZXJzZWRUZXh0W2xlbmd0
aCAtIGkgLSAxXSA9IG1fdGV4dFtpXTsKLSAgICAgICAgICAgIHRleHRSdW4gPSBUZXh0UnVuKHJl
dmVyc2VkVGV4dC5kYXRhKCksIGxlbmd0aCk7CisgICAgICAgICAgICB0ZXh0UnVuLnNldFRleHQo
cmV2ZXJzZWRUZXh0LmRhdGEoKSwgbGVuZ3RoKTsKICAgICAgICAgfQogCi0gICAgICAgIGNvbnN0
IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CiAgICAgICAgIGNvbnN0IFVDaGFyIHN1ZmZp
eCA9IGxpc3RNYXJrZXJTdWZmaXgodHlwZSwgbV9saXN0SXRlbS0+dmFsdWUoKSk7CiAgICAgICAg
IGlmIChzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpIHsKICAgICAgICAgICAgIGlu
dCB3aWR0aCA9IGZvbnQud2lkdGgodGV4dFJ1bik7Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3
VGV4dChzdHlsZSgpLT5mb250KCksIHRleHRSdW4sIHRleHRPcmlnaW4pOworICAgICAgICAgICAg
Y29udGV4dC0+ZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgdGV4dE9yaWdpbik7CiAgICAgICAgICAg
ICBVQ2hhciBzdWZmaXhTcGFjZVsyXSA9IHsgc3VmZml4LCAnICcgfTsKLSAgICAgICAgICAgIGNv
bnRleHQtPmRyYXdUZXh0KHN0eWxlKCktPmZvbnQoKSwgVGV4dFJ1bihzdWZmaXhTcGFjZSwgMiks
IHRleHRPcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAwKSk7CisgICAgICAgICAgICBjb250ZXh0LT5k
cmF3VGV4dChmb250LCBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBz
dWZmaXhTcGFjZSwgMiwgc3R5bGUoKSksIHRleHRPcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAwKSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBVQ2hhciBzcGFjZVN1ZmZpeFsyXSA9IHsg
JyAnLCBzdWZmaXggfTsKLSAgICAgICAgICAgIFRleHRSdW4gc3BhY2VTdWZmaXhSdW4oc3BhY2VT
dWZmaXgsIDIpOworICAgICAgICAgICAgVGV4dFJ1biBzcGFjZVN1ZmZpeFJ1biA9IFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHNwYWNlU3VmZml4LCAyLCBzdHlsZSgp
KTsKICAgICAgICAgICAgIGludCB3aWR0aCA9IGZvbnQud2lkdGgoc3BhY2VTdWZmaXhSdW4pOwot
ICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoc3R5bGUoKS0+Zm9udCgpLCBzcGFjZVN1ZmZp
eFJ1biwgdGV4dE9yaWdpbik7Ci0gICAgICAgICAgICBjb250ZXh0LT5kcmF3VGV4dChzdHlsZSgp
LT5mb250KCksIHRleHRSdW4sIHRleHRPcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAwKSk7CisgICAg
ICAgICAgICBjb250ZXh0LT5kcmF3VGV4dChmb250LCBzcGFjZVN1ZmZpeFJ1biwgdGV4dE9yaWdp
bik7CisgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGV4dChmb250LCB0ZXh0UnVuLCB0ZXh0T3Jp
Z2luICsgSW50U2l6ZSh3aWR0aCwgMCkpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMTQ1NSw3
ICsxNDU0LDcgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpjb21wdXRlUHJlZmVycmVkTAogICAg
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaW50IGl0ZW1XaWR0aCA9IGZvbnQud2lk
dGgobV90ZXh0KTsKICAgICAgICAgICAgICAgICBVQ2hhciBzdWZmaXhTcGFjZVsyXSA9IHsgbGlz
dE1hcmtlclN1ZmZpeCh0eXBlLCBtX2xpc3RJdGVtLT52YWx1ZSgpKSwgJyAnIH07Ci0gICAgICAg
ICAgICAgICAgaW50IHN1ZmZpeFNwYWNlV2lkdGggPSBmb250LndpZHRoKFRleHRSdW4oc3VmZml4
U3BhY2UsIDIpKTsKKyAgICAgICAgICAgICAgICBpbnQgc3VmZml4U3BhY2VXaWR0aCA9IGZvbnQu
d2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgc3VmZml4U3Bh
Y2UsIDIsIHN0eWxlKCkpKTsKICAgICAgICAgICAgICAgICBsb2dpY2FsV2lkdGggPSBpdGVtV2lk
dGggKyBzdWZmaXhTcGFjZVdpZHRoOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CkBAIC0xNjc4LDcgKzE2NzcsNyBAQCBJbnRSZWN0IFJlbmRlckxpc3RNYXJrZXI6OmdldFJlbGF0
aXZlTWFyCiAgICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwog
ICAgICAgICAgICAgaW50IGl0ZW1XaWR0aCA9IGZvbnQud2lkdGgobV90ZXh0KTsKICAgICAgICAg
ICAgIFVDaGFyIHN1ZmZpeFNwYWNlWzJdID0geyBsaXN0TWFya2VyU3VmZml4KHR5cGUsIG1fbGlz
dEl0ZW0tPnZhbHVlKCkpLCAnICcgfTsKLSAgICAgICAgICAgIGludCBzdWZmaXhTcGFjZVdpZHRo
ID0gZm9udC53aWR0aChUZXh0UnVuKHN1ZmZpeFNwYWNlLCAyKSk7CisgICAgICAgICAgICBpbnQg
c3VmZml4U3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4odGhpcywgZm9udCwgc3VmZml4U3BhY2UsIDIsIHN0eWxlKCkpKTsKICAgICAgICAgICAgIHJl
bGF0aXZlUmVjdCA9IEludFJlY3QoMCwgMCwgaXRlbVdpZHRoICsgc3VmZml4U3BhY2VXaWR0aCwg
Zm9udC5mb250TWV0cmljcygpLmhlaWdodCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDg3MTQ1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0
MCw2IEBACiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgi
CiAjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rlci5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIK
ICNpbmNsdWRlICJWaXNpYmxlUG9zaXRpb24uaCIKICNpbmNsdWRlICJicmVha19saW5lcy5oIgog
I2luY2x1ZGUgPHd0Zi9BbHdheXNJbmxpbmUuaD4KQEAgLTYzMSw3ICs2MzAsMTAgQEAgQUxXQVlT
X0lOTElORSBmbG9hdCBSZW5kZXJUZXh0Ojp3aWR0aEZybwogICAgICAgICByZXR1cm4gdzsKICAg
ICB9CiAKLSAgICByZXR1cm4gZi53aWR0aChUZXh0UnVuKHRleHQoKS0+Y2hhcmFjdGVycygpICsg
c3RhcnQsIGxlbiwgYWxsb3dUYWJzKCksIHhQb3MpLCBmYWxsYmFja0ZvbnRzLCBnbHlwaE92ZXJm
bG93KTsKKyAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNv
bnN0X2Nhc3Q8UmVuZGVyVGV4dCo+KHRoaXMpLCBmLCB0ZXh0KCktPmNoYXJhY3RlcnMoKSArIHN0
YXJ0LCBsZW4sIHN0eWxlKCkpOworICAgIHJ1bi5zZXRBbGxvd1RhYnMoYWxsb3dUYWJzKCkpOwor
ICAgIHJ1bi5zZXRYUG9zKHhQb3MpOworICAgIHJldHVybiBmLndpZHRoKHJ1biwgZmFsbGJhY2tG
b250cywgZ2x5cGhPdmVyZmxvdyk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZFByZWZX
aWR0aHMoZmxvYXQgbGVhZFdpZHRoLApAQCAtNjc2LDEzICs2NzgsMTMgQEAgdm9pZCBSZW5kZXJU
ZXh0Ojp0cmltbWVkUHJlZldpZHRocyhmbG9hdAogICAgIEFTU0VSVChtX3RleHQpOwogICAgIFN0
cmluZ0ltcGwmIHRleHQgPSAqbV90ZXh0LmltcGwoKTsKICAgICBpZiAodGV4dFswXSA9PSAnICcg
fHwgKHRleHRbMF0gPT0gJ1xuJyAmJiAhc3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpIHx8IHRl
eHRbMF0gPT0gJ1x0JykgewotICAgICAgICBjb25zdCBGb250JiBmID0gc3R5bGUoKS0+Zm9udCgp
OyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCisgICAgICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBzdHlsZSgpLT5mb250KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGlu
ZS4KICAgICAgICAgaWYgKHN0cmlwRnJvbnRTcGFjZXMpIHsKICAgICAgICAgICAgIGNvbnN0IFVD
aGFyIHNwYWNlID0gJyAnOwotICAgICAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGYud2lkdGgo
VGV4dFJ1bigmc3BhY2UsIDEpKTsKKyAgICAgICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250
LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsICZzcGFjZSwg
MSwgc3R5bGUoKSkpOwogICAgICAgICAgICAgbWF4VyAtPSBzcGFjZVdpZHRoOwogICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIG1heFcgKz0gZi53b3JkU3BhY2luZygpOworICAgICAgICAgICAg
bWF4VyArPSBmb250LndvcmRTcGFjaW5nKCk7CiAgICAgfQogCiAgICAgc3RyaXBGcm9udFNwYWNl
cyA9IGNvbGxhcHNlV2hpdGVTcGFjZSAmJiBtX2hhc0VuZFdTOwpAQCAtOTE1LDcgKzkxNywxMSBA
QCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAgICAgICAgICAgICAg
ICAgICAgIG1fbWF4V2lkdGggPSBjdXJyTWF4V2lkdGg7CiAgICAgICAgICAgICAgICAgY3Vyck1h
eFdpZHRoID0gMDsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY3Vyck1h
eFdpZHRoICs9IGYud2lkdGgoVGV4dFJ1bih0eHQgKyBpLCAxLCBhbGxvd1RhYnMoKSwgbGVhZFdp
ZHRoICsgY3Vyck1heFdpZHRoKSk7CisgICAgICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5k
ZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmLCB0eHQgKyBpLCAxLCBzdHlsZSgpKTsK
KyAgICAgICAgICAgICAgICBydW4uc2V0QWxsb3dUYWJzKGFsbG93VGFicygpKTsKKyAgICAgICAg
ICAgICAgICBydW4uc2V0WFBvcyhsZWFkV2lkdGggKyBjdXJyTWF4V2lkdGgpOworCisgICAgICAg
ICAgICAgICAgY3Vyck1heFdpZHRoICs9IGYud2lkdGgocnVuKTsKICAgICAgICAgICAgICAgICBn
bHlwaE92ZXJmbG93LnJpZ2h0ID0gMDsKICAgICAgICAgICAgICAgICBuZWVkc1dvcmRTcGFjaW5n
ID0gaXNTcGFjZSAmJiAhcHJldmlvdXNDaGFyYWN0ZXJJc1NwYWNlICYmIGkgPT0gbGVuIC0gMTsK
ICAgICAgICAgICAgIH0KQEAgLTEyODksOCArMTI5NSwxMiBAQCBmbG9hdCBSZW5kZXJUZXh0Ojp3
aWR0aCh1bnNpZ25lZCBmcm9tLCB1CiAgICAgICAgICAgICAgICAgdyA9IG1heExvZ2ljYWxXaWR0
aCgpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHcgPSB3aWR0aEZyb21DYWNoZShmLCBm
cm9tLCBsZW4sIHhQb3MsIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOwotICAgIH0gZWxz
ZQotICAgICAgICB3ID0gZi53aWR0aChUZXh0UnVuKHRleHQoKS0+Y2hhcmFjdGVycygpICsgZnJv
bSwgbGVuLCBhbGxvd1RhYnMoKSwgeFBvcyksIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cp
OworICAgIH0gZWxzZSB7CisgICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4oY29uc3RfY2FzdDxSZW5kZXJUZXh0Kj4odGhpcyksIGYsIHRleHQoKS0+Y2hh
cmFjdGVycygpICsgZnJvbSwgbGVuLCBzdHlsZSgpKTsKKyAgICAgICAgcnVuLnNldEFsbG93VGFi
cyhhbGxvd1RhYnMoKSk7CisgICAgICAgIHJ1bi5zZXRYUG9zKHhQb3MpOworICAgICAgICB3ID0g
Zi53aWR0aChydW4sIGZhbGxiYWNrRm9udHMsIGdseXBoT3ZlcmZsb3cpOworICAgIH0KIAogICAg
IHJldHVybiB3OwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiA4NzE0NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcgKzQwLDYg
QEAKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dENvbnRyb2xJbm5lckVsZW1lbnRz
LmgiCiAjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiVGV4dFJ1bi5oIgogI2lu
Y2x1ZGUgPHd0Zi91bmljb2RlL0NoYXJhY3Rlck5hbWVzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CkBAIC01MzQsNyArNTMzLDggQEAgZmxvYXQgUmVuZGVyVGV4dENvbnRyb2w6OmdldEF2Z0No
YXJXaWR0aAogICAgICAgICByZXR1cm4gcm91bmRmKHN0eWxlKCktPmZvbnQoKS5wcmltYXJ5Rm9u
dCgpLT5hdmdDaGFyV2lkdGgoKSk7CiAKICAgICBjb25zdCBVQ2hhciBjaCA9ICcwJzsKLSAgICBy
ZXR1cm4gc3R5bGUoKS0+Zm9udCgpLndpZHRoKGNvbnN0cnVjdFRleHRSdW5BbGxvd1RyYWlsaW5n
RXhwYW5zaW9uKFN0cmluZygmY2gsIDEpLCBzdHlsZSgpKSk7CisgICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlKCktPmZvbnQoKTsKKyAgICByZXR1cm4gZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0
UnVuKHRoaXMsIGZvbnQsIFN0cmluZygmY2gsIDEpLCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1Ry
YWlsaW5nRXhwYW5zaW9uKSk7CiB9CiAKIGZsb2F0IFJlbmRlclRleHRDb250cm9sOjpzY2FsZUVt
VG9Vbml0cyhpbnQgeCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHQWxsSW5PbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCShyZXZpc2lvbiA4NzE0NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Miw1ICs3Miw2IEBACiAjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZS5jcHAi
CiAjaW5jbHVkZSAiU1ZHVGV4dExheW91dEVuZ2luZUJhc2VsaW5lLmNwcCIKICNpbmNsdWRlICJT
VkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAiCisjaW5jbHVkZSAiU1ZHVGV4dFJ1blJlbmRl
cmluZ0NvbnRleHQuY3BwIgogI2luY2x1ZGUgIlNWR1RleHRNZXRyaWNzLmNwcCIKICNpbmNsdWRl
ICJTVkdUZXh0UXVlcnkuY3BwIgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVUZXh0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiA4NzE0NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3Iu
aCIKICNpbmNsdWRlICJTVkdJbWFnZUJ1ZmZlclRvb2xzLmgiCiAjaW5jbHVkZSAiU1ZHUm9vdElu
bGluZUJveC5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJTVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dC5oIgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC02Niw3ICs2Niw3
IEBAIGludCBTVkdJbmxpbmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbkkKICAgICBSZW5kZXJT
dHlsZSogc3R5bGUgPSB0ZXh0UmVuZGVyZXItPnN0eWxlKCk7CiAgICAgQVNTRVJUKHN0eWxlKTsK
IAotICAgIFRleHRSdW4gdGV4dFJ1bihjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmcmFnbWVudCkp
OworICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZyYWdtZW50
KTsKIAogICAgIC8vIEV2ZW50dWFsbHkgaGFuZGxlIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEds
eXBocyIuCiAgICAgLy8gRklYTUU6IEhhbmRsZSB2ZXJ0aWNhbCB0ZXh0LgpAQCAtMzc5LDE0ICsz
NzksMTcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpyZWxlYXNlUGFpbnRpbmdSZQogYm9vbCBT
VkdJbmxpbmVUZXh0Qm94OjpwcmVwYXJlR3JhcGhpY3NDb250ZXh0Rm9yVGV4dFBhaW50aW5nKEdy
YXBoaWNzQ29udGV4dComIGNvbnRleHQsIGZsb2F0IHNjYWxpbmdGYWN0b3IsIFRleHRSdW4mIHRl
eHRSdW4sIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBib29sIGFjcXVpcmVkUmVzb3VyY2Ug
PSBhY3F1aXJlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCBzY2FsaW5nRmFjdG9yLCBwYXJlbnQo
KS0+cmVuZGVyZXIoKSwgc3R5bGUpOworICAgIGlmICghYWNxdWlyZWRSZXNvdXJjZSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOwogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKICAgICAvLyBTVkcgRm9u
dHMgbmVlZCBhY2Nlc3MgdG8gdGhlIHBhaW50aW5nIHJlc291cmNlIHVzZWQgdG8gZHJhdyB0aGUg
Y3VycmVudCB0ZXh0IGNodW5rLgotICAgIGlmIChhY3F1aXJlZFJlc291cmNlKQotICAgICAgICB0
ZXh0UnVuLnNldEFjdGl2ZVBhaW50aW5nUmVzb3VyY2UobV9wYWludGluZ1Jlc291cmNlKTsKKyAg
ICBUZXh0UnVuOjpSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0ID0gdGV4dFJ1bi5y
ZW5kZXJpbmdDb250ZXh0KCk7CisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQpCisgICAgICAgIHN0
YXRpY19jYXN0PFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0Kj4ocmVuZGVyaW5nQ29udGV4dCkt
PnNldEFjdGl2ZVBhaW50aW5nUmVzb3VyY2UobV9wYWludGluZ1Jlc291cmNlKTsKICNlbmRpZgog
Ci0gICAgcmV0dXJuIGFjcXVpcmVkUmVzb3VyY2U7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIHZv
aWQgU1ZHSW5saW5lVGV4dEJveDo6cmVzdG9yZUdyYXBoaWNzQ29udGV4dEFmdGVyVGV4dFBhaW50
aW5nKEdyYXBoaWNzQ29udGV4dComIGNvbnRleHQsIFRleHRSdW4mIHRleHRSdW4pCkBAIC0zOTQs
NyArMzk3LDExIEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cmVzdG9yZUdyYXBoaWNzQ28KICAg
ICByZWxlYXNlUGFpbnRpbmdSZXNvdXJjZShjb250ZXh0LCAvKiBwYXRoICovMCk7CiAKICNpZiBF
TkFCTEUoU1ZHX0ZPTlRTKQotICAgIHRleHRSdW4uc2V0QWN0aXZlUGFpbnRpbmdSZXNvdXJjZSgw
KTsKKyAgICBUZXh0UnVuOjpSZW5kZXJpbmdDb250ZXh0KiByZW5kZXJpbmdDb250ZXh0ID0gdGV4
dFJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7CisgICAgaWYgKHJlbmRlcmluZ0NvbnRleHQpCisgICAg
ICAgIHN0YXRpY19jYXN0PFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0Kj4ocmVuZGVyaW5nQ29u
dGV4dCktPnNldEFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoMCk7CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTSh0ZXh0UnVuKTsKICNlbmRpZgogfQogCkBAIC00MTUsOSArNDIyLDggQEAgVGV4dFJ1biBT
VkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UgogICAgICAgICAgICAgICAgICwgZGlyZWN0
aW9uKCkKICAgICAgICAgICAgICAgICAsIG1fZGlyT3ZlcnJpZGUgfHwgc3R5bGUtPnZpc3VhbGx5
T3JkZXJlZCgpIC8qIGRpcmVjdGlvbmFsT3ZlcnJpZGUgKi8pOwogCi0jaWYgRU5BQkxFKFNWR19G
T05UUykKLSAgICBydW4uc2V0UmVmZXJlbmNpbmdSZW5kZXJPYmplY3QodGV4dCk7Ci0jZW5kaWYK
KyAgICBpZiAodGV4dFJ1bk5lZWRzUmVuZGVyaW5nQ29udGV4dChzdHlsZS0+Zm9udCgpKSkKKyAg
ICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRleHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6
OmNyZWF0ZSh0ZXh0KSk7CiAKICAgICAvLyBXZSBoYW5kbGUgbGV0dGVyICYgd29yZCBzcGFjaW5n
IG91cnNlbHZlcy4KICAgICBydW4uZGlzYWJsZVNwYWNpbmcoKTsKQEAgLTY1OSw3ICs2NjUsNyBA
QCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dChHcmFwaGljCiAgICAgfQogCiAgICAg
Ly8gRmFzdCBwYXRoIGlmIHRoZXJlIGlzIG5vIHNlbGVjdGlvbiwganVzdCBkcmF3IHRoZSB3aG9s
ZSBjaHVuayBwYXJ0IHVzaW5nIHRoZSByZWd1bGFyIHN0eWxlCi0gICAgVGV4dFJ1biB0ZXh0UnVu
KGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZyYWdtZW50KSk7CisgICAgVGV4dFJ1biB0ZXh0UnVu
ID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZnJhZ21lbnQpOwogICAgIGlmICghaGFzU2VsZWN0
aW9uIHx8IHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pIHsKICAgICAgICAgcGFpbnRUZXh0
V2l0aFNoYWRvd3MoY29udGV4dCwgc3R5bGUsIHRleHRSdW4sIGZyYWdtZW50LCAwLCBmcmFnbWVu
dC5sZW5ndGgpOwogICAgICAgICByZXR1cm47CkBAIC02NzMsNyArNjc5LDcgQEAgdm9pZCBTVkdJ
bmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpYwogICAgIGlmIChzdHlsZSAhPSBzZWxlY3Rp
b25TdHlsZSkKICAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZChw
YXJlbnQoKS0+cmVuZGVyZXIoKSwgU3R5bGVEaWZmZXJlbmNlUmVwYWludCwgc2VsZWN0aW9uU3R5
bGUpOwogCi0gICAgVGV4dFJ1biBzZWxlY3Rpb25UZXh0UnVuKGNvbnN0cnVjdFRleHRSdW4oc2Vs
ZWN0aW9uU3R5bGUsIGZyYWdtZW50KSk7CisgICAgVGV4dFJ1biBzZWxlY3Rpb25UZXh0UnVuID0g
Y29uc3RydWN0VGV4dFJ1bihzZWxlY3Rpb25TdHlsZSwgZnJhZ21lbnQpOwogICAgIHBhaW50VGV4
dFdpdGhTaGFkb3dzKGNvbnRleHQsIHNlbGVjdGlvblN0eWxlLCB0ZXh0UnVuLCBmcmFnbWVudCwg
c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogCiAgICAgaWYgKHN0eWxlICE9IHNlbGVjdGlv
blN0eWxlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0
RW5naW5lU3BhY2luZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5jcHAJKHJldmlzaW9uIDg3MTQ1KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TGF5b3V0RW5naW5lU3BhY2luZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDcgKzI2LDkgQEAKICNpbmNsdWRlICJTVkdSZW5kZXJT
dHlsZS5oIgogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKKyNpbmNsdWRlICJTVkdGb250RGF0YS5o
IgogI2luY2x1ZGUgIlNWR0ZvbnRFbGVtZW50LmgiCisjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVt
ZW50LmgiCiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsMTMgKzQyLDI0IEBA
IFNWR1RleHRMYXlvdXRFbmdpbmVTcGFjaW5nOjpTVkdUZXh0TGF5b3UKIGZsb2F0IFNWR1RleHRM
YXlvdXRFbmdpbmVTcGFjaW5nOjpjYWxjdWxhdGVTVkdLZXJuaW5nKGJvb2wgaXNWZXJ0aWNhbFRl
eHQsIGNvbnN0IFNWR1RleHRNZXRyaWNzOjpHbHlwaCYgY3VycmVudEdseXBoKQogewogI2lmIEVO
QUJMRShTVkdfRk9OVFMpCi0gICAgaWYgKCFtX2ZvbnQuaXNTVkdGb250KCkpIHsKKyAgICBjb25z
dCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBtX2ZvbnQucHJpbWFyeUZvbnQoKTsKKyAgICBp
ZiAoIWZvbnREYXRhLT5pc1NWR0ZvbnQoKSkgewogICAgICAgICBtX2xhc3RHbHlwaC5pc1ZhbGlk
ID0gZmFsc2U7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFNWR0ZvbnRFbGVtZW50
KiBzdmdGb250ID0gbV9mb250LnN2Z0ZvbnQoKTsKLSAgICBBU1NFUlQoc3ZnRm9udCk7CisgICAg
QVNTRVJUKGZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7CisgICAgQVNTRVJUKGZvbnREYXRhLT5p
c1NWR0ZvbnQoKSk7CisKKyAgICBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udERhdGEgPSBzdGF0
aWNfY2FzdDxjb25zdCBTVkdGb250RGF0YSo+KGZvbnREYXRhLT5mb250RGF0YSgpKTsKKyAgICBT
VkdGb250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlID0gc3ZnRm9udERhdGEtPnN2Z0ZvbnRGYWNl
RWxlbWVudCgpOworICAgIEFTU0VSVChzdmdGb250RmFjZSk7CisKKyAgICBTVkdGb250RWxlbWVu
dCogc3ZnRm9udCA9IHN2Z0ZvbnRGYWNlLT5hc3NvY2lhdGVkRm9udEVsZW1lbnQoKTsKKyAgICBp
ZiAoIXN2Z0ZvbnQpIHsKKyAgICAgICAgbV9sYXN0R2x5cGguaXNWYWxpZCA9IGZhbHNlOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CiAKICAgICBmbG9hdCBrZXJuaW5nID0gMDsKICAgICBpZiAo
bV9sYXN0R2x5cGguaXNWYWxpZCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0TWV0cmljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJKHJldmlzaW9uIDg3MTQ1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJTVkdUZXh0TWV0cmljcy5oIgogCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHSW5saW5lVGV4dC5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKKyNpbmNsdWRlICJT
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTg2LDkgKzg2LDggQEAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJTVgog
ICAgICAgICAgICAgICAgICwgc3R5bGUtPmRpcmVjdGlvbigpCiAgICAgICAgICAgICAgICAgLCBz
dHlsZS0+dW5pY29kZUJpZGkoKSA9PSBPdmVycmlkZSAvKiBkaXJlY3Rpb25hbE92ZXJyaWRlICov
KTsKIAotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgcnVuLnNldFJlZmVyZW5jaW5nUmVuZGVy
T2JqZWN0KHRleHQpOwotI2VuZGlmCisgICAgaWYgKHRleHRSdW5OZWVkc1JlbmRlcmluZ0NvbnRl
eHQoc3R5bGUtPmZvbnQoKSkpCisgICAgICAgIHJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KFNWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0OjpjcmVhdGUodGV4dCkpOwogCiAgICAgLy8gV2UgaGFuZGxl
IGxldHRlciAmIHdvcmQgc3BhY2luZyBvdXJzZWx2ZXMuCiAgICAgcnVuLmRpc2FibGVTcGFjaW5n
KCk7CkBAIC05OCw4ICs5Nyw3IEBAIHN0YXRpYyBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oUmVu
ZGVyU1YKIFNWR1RleHRNZXRyaWNzIFNWR1RleHRNZXRyaWNzOjptZWFzdXJlQ2hhcmFjdGVyUmFu
Z2UoUmVuZGVyU1ZHSW5saW5lVGV4dCogdGV4dCwgdW5zaWduZWQgcG9zaXRpb24sIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBBU1NFUlQodGV4dCk7Ci0gICAgVGV4dFJ1biBydW4oY29uc3RydWN0
VGV4dFJ1bih0ZXh0LCB0ZXh0LT5jaGFyYWN0ZXJzKCksIHBvc2l0aW9uLCBsZW5ndGgpKTsKLSAg
ICByZXR1cm4gU1ZHVGV4dE1ldHJpY3ModGV4dCwgcnVuLCBwb3NpdGlvbiwgdGV4dC0+dGV4dExl
bmd0aCgpKTsKKyAgICByZXR1cm4gU1ZHVGV4dE1ldHJpY3ModGV4dCwgY29uc3RydWN0VGV4dFJ1
bih0ZXh0LCB0ZXh0LT5jaGFyYWN0ZXJzKCksIHBvc2l0aW9uLCBsZW5ndGgpLCBwb3NpdGlvbiwg
dGV4dC0+dGV4dExlbmd0aCgpKTsKIH0KIAogfQpJbmRleDogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDg2ODIzKQkoZnJvbSBzdmcvU1ZH
Rm9udC5jcHA6ODY4MjMpCisrKyByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlz
aW9uIDg2ODIzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBr
ZGUub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEw
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rp
b24gTGltaXRlZCAyMDEwLTIwMTEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTM2LDggKzM2LDggQEAKICNpbmNsdWRlICJTVkdHbHlwaE1hcC5oIgogI2luY2x1
ZGUgIlNWR01pc3NpbmdHbHlwaEVsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2lu
Y2x1ZGUgIlNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9u
dERhdGEuaCIKLSNpbmNsdWRlICJUZXh0UnVuLmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKIAog
dXNpbmcgbmFtZXNwYWNlIFdURjo6VW5pY29kZTsKQEAgLTU5LDEwICs1OSwxMSBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgaXNWZXJ0aWNhbFdyaXRpbmdNb2RlCiAKIHN0YXRpYyBpbmxpbmUgY29uc3Qg
U1ZHRm9udERhdGEqIHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGEsIFNWR0ZvbnRGYWNlRWxlbWVudComIGZvbnRGYWNlLCBT
VkdGb250RWxlbWVudComIGZvbnQpCiB7CisgICAgQVNTRVJUKGZvbnREYXRhKTsKICAgICBBU1NF
UlQoZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsKICAgICBBU1NFUlQoZm9udERhdGEtPmlzU1ZH
Rm9udCgpKTsKIAotICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN0YXRpY19j
YXN0PGNvbnN0IFNWR0ZvbnREYXRhKj4oZm9udERhdGEtPnN2Z0ZvbnREYXRhKCkpOworICAgIGNv
bnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNWR0ZvbnRE
YXRhKj4oZm9udERhdGEtPmZvbnREYXRhKCkpOwogCiAgICAgZm9udEZhY2UgPSBzdmdGb250RGF0
YS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CiAgICAgQVNTRVJUKGZvbnRGYWNlKTsKQEAgLTcxLDYg
KzcyLDI5IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgU1ZHRm9udERhdGEqIHN2Z0ZvbnQKICAgICBy
ZXR1cm4gc3ZnRm9udERhdGE7CiB9CiAKK3N0YXRpYyBpbmxpbmUgUmVuZGVyT2JqZWN0KiBmaXJz
dFBhcmVudFJlbmRlcmVyRm9yTm9uVGV4dE5vZGUoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3sK
KyAgICBBU1NFUlQocmVuZGVyZXIpOworICAgIFJlbmRlck9iamVjdCogbmV3UmVuZGVyZXIgPSBy
ZW5kZXJlci0+aXNUZXh0KCkgPyByZW5kZXJlci0+cGFyZW50KCkgOiByZW5kZXJlcjsKKyAgICBB
U1NFUlQobmV3UmVuZGVyZXItPm5vZGUoKSk7CisgICAgQVNTRVJUKG5ld1JlbmRlcmVyLT5ub2Rl
KCktPmlzRWxlbWVudE5vZGUoKSk7CisgICAgcmV0dXJuIG5ld1JlbmRlcmVyOworfQorCitzdGF0
aWMgaW5saW5lIFJlbmRlck9iamVjdCogcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RGcm9tUnVuKGNv
bnN0IFRleHRSdW4mIHJ1bikKK3sKKyAgICBpZiAoVGV4dFJ1bjo6UmVuZGVyaW5nQ29udGV4dCog
cmVuZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dCo+KHJlbmRlcmluZ0NvbnRl
eHQpLT5jb250ZXh0KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVuZGVy
U1ZHUmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2VGcm9tUnVuKGNvbnN0IFRleHRSdW4m
IHJ1bikKK3sKKyAgICBpZiAoVGV4dFJ1bjo6UmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29u
dGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dCo+KHJlbmRlcmluZ0NvbnRleHQpLT5hY3RpdmVQ
YWludGluZ1Jlc291cmNlKCk7CisgICAgcmV0dXJuIDA7Cit9CisKIC8vIEhlbHBlciBjbGFzcyB0
byB3YWxrIGEgdGV4dCBydW4uIExvb2t1cCBhIFNWR0dseXBoIGZvciBlYWNoIGNoYXJhY3Rlcgog
Ly8gLSBhbHNvIHJlc3BlY3RpbmcgcG9zc2libHkgZGVmaW5lZCBsaWdhdHVyZXMgLSBhbmQgaW52
b2tlIGEgY2FsbGJhY2sgZm9yIGVhY2ggZm91bmQgZ2x5cGguCiB0ZW1wbGF0ZTx0eXBlbmFtZSBT
VkdUZXh0UnVuRGF0YT4KQEAgLTEwMCwxOSArMTI0LDE4IEBAIHN0cnVjdCBTVkdUZXh0UnVuV2Fs
a2VyIHsKICAgICAgICAgaW50IGNoYXJhY3Rlckxvb2t1cFJhbmdlOwogICAgICAgICBpbnQgZW5k
T2ZTY2FuUmFuZ2UgPSB0byArIG1fd2Fsa2VyRGF0YS5leHRyYUNoYXJzQXZhaWxhYmxlOwogCisg
ICAgICAgIFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gcmVmZXJlbmNpbmdSZW5kZXJPYmpl
Y3RGcm9tUnVuKHJ1bik7CisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyT2JqZWN0
ID0gZmlyc3RQYXJlbnRSZW5kZXJlckZvck5vblRleHROb2RlKHJlbmRlck9iamVjdCk7CisKICAg
ICAgICAgYm9vbCBoYXZlQWx0R2x5cGggPSBmYWxzZTsKICAgICAgICAgU1ZHR2x5cGggYWx0R2x5
cGhJZGVudGlmaWVyOwotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmplY3QgPSBy
dW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSkgewotICAgICAgICAgICAgUmVuZGVyT2JqZWN0
KiBwYXJlbnRSZW5kZXJlciA9IHJlbmRlck9iamVjdC0+cGFyZW50KCk7Ci0gICAgICAgICAgICBB
U1NFUlQocGFyZW50UmVuZGVyZXIpOwotICAgICAgICAgICAgaWYgKHBhcmVudFJlbmRlcmVyLT5u
b2RlKCkgJiYgcGFyZW50UmVuZGVyZXItPm5vZGUoKS0+aGFzVGFnTmFtZShTVkdOYW1lczo6YWx0
R2x5cGhUYWcpKSB7Ci0gICAgICAgICAgICAgICAgU1ZHR2x5cGhFbGVtZW50KiBnbHlwaEVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxTVkdBbHRHbHlwaEVsZW1lbnQqPihwYXJlbnRSZW5kZXJlci0+bm9k
ZSgpKS0+Z2x5cGhFbGVtZW50KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGdseXBoRWxlbWVudCkg
ewotICAgICAgICAgICAgICAgICAgICBoYXZlQWx0R2x5cGggPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICBhbHRHbHlwaElkZW50aWZpZXIgPSBnbHlwaEVsZW1lbnQtPmJ1aWxkR2x5cGhJZGVu
dGlmaWVyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGFsdEdseXBoSWRlbnRpZmllci5pc1ZhbGlk
ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYWx0R2x5cGhJZGVudGlmaWVyLnVuaWNvZGVT
dHJpbmdMZW5ndGggPSB0byAtIGZyb207Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBOb2Rl
KiBub2RlID0gcGFyZW50UmVuZGVyT2JqZWN0LT5ub2RlKCk7CisgICAgICAgIGlmIChub2RlLT5o
YXNUYWdOYW1lKFNWR05hbWVzOjphbHRHbHlwaFRhZykpIHsKKyAgICAgICAgICAgIGlmIChTVkdH
bHlwaEVsZW1lbnQqIGdseXBoRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0FsdEdseXBoRWxlbWVu
dCo+KG5vZGUpLT5nbHlwaEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGhhdmVBbHRHbHlw
aCA9IHRydWU7CisgICAgICAgICAgICAgICAgYWx0R2x5cGhJZGVudGlmaWVyID0gZ2x5cGhFbGVt
ZW50LT5idWlsZEdseXBoSWRlbnRpZmllcigpOworICAgICAgICAgICAgICAgIGFsdEdseXBoSWRl
bnRpZmllci5pc1ZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBhbHRHbHlwaElkZW50aWZp
ZXIudW5pY29kZVN0cmluZ0xlbmd0aCA9IHRvIC0gZnJvbTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogCkBAIC0xNTcsNiArMTgwLDcgQEAgc3RydWN0IFNWR1RleHRSdW5XYWxrZXIgewogICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIEZhbGxiYWNrIHRv
IHN5c3RlbSBmb250IGZhbGxiYWNrCiAgICAgICAgICAgICAgICAgICAgIFRleHRSdW4gc3ViUnVu
KHJ1bik7CisgICAgICAgICAgICAgICAgICAgIHN1YlJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KDAp
OwogICAgICAgICAgICAgICAgICAgICBzdWJSdW4uc2V0VGV4dChzdWJSdW4uZGF0YShpKSwgMSk7
CiAKICAgICAgICAgICAgICAgICAgICAgKCptX3dhbGtlck1pc3NpbmdHbHlwaENhbGxiYWNrKShz
dWJSdW4sIG1fd2Fsa2VyRGF0YSk7CkBAIC0yMTAsMjQgKzIzNCwxMiBAQCBzdGF0aWMgdm9pZCBm
bG9hdFdpZHRoTWlzc2luZ0dseXBoQ2FsbGJhCiAgICAgRm9udCBmb250KGZvbnREZXNjcmlwdGlv
biwgMCwgMCk7IC8vIHNwYWNpbmcgaGFuZGxlZCBieSBTVkcgdGV4dCBjb2RlLgogICAgIGZvbnQu
dXBkYXRlKGRhdGEuZm9udC0+Zm9udFNlbGVjdG9yKCkpOwogCi0gICAgZGF0YS5sZW5ndGggKz0g
Zm9udC53aWR0aChydW4pOworICAgIFRleHRSdW4gZmFsbGJhY2tSdW4ocnVuKTsKKyAgICBmYWxs
YmFja1J1bi5zZXRSZW5kZXJpbmdDb250ZXh0KDApOworICAgIGRhdGEubGVuZ3RoICs9IGZvbnQu
d2lkdGgoZmFsbGJhY2tSdW4pOwogfQogCi0KLVNWR0ZvbnRFbGVtZW50KiBGb250OjpzdmdGb250
KCkgY29uc3QKLXsgCi0gICAgaWYgKCFpc1NWR0ZvbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0K
LSAgICBTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQgPSAwOwotICAgIFNWR0ZvbnRGYWNlRWxl
bWVudCogZm9udEZhY2VFbGVtZW50ID0gMDsKLSAgICBpZiAoc3ZnRm9udEFuZEZvbnRGYWNlRWxl
bWVudEZvckZvbnREYXRhKHByaW1hcnlGb250KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1l
bnQpKQotICAgICAgICByZXR1cm4gZm9udEVsZW1lbnQ7Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci19
Ci0KLXN0YXRpYyBmbG9hdCBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQoY29uc3Qg
Rm9udCogZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZSwg
aW50IGZyb20sIGludCB0bywgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkK
K3N0YXRpYyBmbG9hdCBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQoY29uc3QgRm9u
dCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZSwgaW50
IGZyb20sIGludCB0bywgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkKIHsK
ICAgICBpbnQgbmV3RnJvbSA9IHRvID4gZnJvbSA/IGZyb20gOiB0bzsKICAgICBpbnQgbmV3VG8g
PSB0byA+IGZyb20gPyB0byA6IGZyb207CkBAIC0yMzgsMzMgKzI1MCwyNiBAQCBzdGF0aWMgZmxv
YXQgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTCiAgICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRF
bGVtZW50ID0gMDsKICAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7
CiAKLSAgICBpZiAoY29uc3QgU1ZHRm9udERhdGEqIGZvbnREYXRhID0gc3ZnRm9udEFuZEZvbnRG
YWNlRWxlbWVudEZvckZvbnREYXRhKGZvbnQtPnByaW1hcnlGb250KCksIGZvbnRGYWNlRWxlbWVu
dCwgZm9udEVsZW1lbnQpKSB7CisgICAgaWYgKGNvbnN0IFNWR0ZvbnREYXRhKiBmb250RGF0YSA9
IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0YShmb250LnByaW1hcnlGb250KCks
IGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKSB7CiAgICAgICAgIGlmICghZm9udEVsZW1l
bnQpCiAgICAgICAgICAgICByZXR1cm4gMC4wZjsKIAogICAgICAgICBTVkdUZXh0UnVuV2Fsa2Vy
TWVhc3VyZWRMZW5ndGhEYXRhIGRhdGE7CiAKLSAgICAgICAgZGF0YS5mb250ID0gZm9udDsKKyAg
ICAgICAgZGF0YS5mb250ID0gJmZvbnQ7CiAgICAgICAgIGRhdGEuYXQgPSBmcm9tOwogICAgICAg
ICBkYXRhLmZyb20gPSBmcm9tOwogICAgICAgICBkYXRhLnRvID0gdG87CiAgICAgICAgIGRhdGEu
ZXh0cmFDaGFyc0F2YWlsYWJsZSA9IGV4dHJhQ2hhcnNBdmFpbGFibGU7CiAgICAgICAgIGRhdGEu
Y2hhcnNDb25zdW1lZCA9IDA7Ci0gICAgICAgIGRhdGEuc2NhbGUgPSBjb252ZXJ0RW1Vbml0VG9Q
aXhlbChmb250LT5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBmKTsK
KyAgICAgICAgZGF0YS5zY2FsZSA9IGNvbnZlcnRFbVVuaXRUb1BpeGVsKGZvbnQuc2l6ZSgpLCBm
b250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSwgMS4wZik7CiAgICAgICAgIGRhdGEubGVuZ3Ro
ID0gMC4wZjsKIAotICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7Ci0gICAgICAgIGJvb2wgaXNWZXJ0
aWNhbFRleHQgPSBmYWxzZTsgLy8gSG9sZHMgdHJ1ZSBmb3IgSFRNTCB0ZXh0CisgICAgICAgIFJl
bmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RGcm9tUnVu
KHJ1bik7CisgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyT2JqZWN0ID0gZmlyc3RQ
YXJlbnRSZW5kZXJlckZvck5vblRleHROb2RlKHJlbmRlck9iamVjdCk7IAogCi0gICAgICAgIC8v
IFRPRE86IGxhbmd1YWdlIG1hdGNoaW5nICYgc3ZnIGdseXBocyBzaG91bGQgYmUgcG9zc2libGUg
Zm9yIEhUTUwgdGV4dCwgdG9vLgotICAgICAgICBpZiAoUmVuZGVyT2JqZWN0KiByZW5kZXJPYmpl
Y3QgPSBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSkgewotICAgICAgICAgICAgUmVuZGVy
T2JqZWN0KiBwYXJlbnRSZW5kZXJlciA9IHJlbmRlck9iamVjdC0+cGFyZW50KCk7Ci0gICAgICAg
ICAgICBBU1NFUlQocGFyZW50UmVuZGVyZXIpOwotICAgICAgICAgICAgaXNWZXJ0aWNhbFRleHQg
PSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUocGFyZW50UmVuZGVyZXItPnN0eWxlKCktPnN2Z1N0eWxl
KCkpOwotCi0gICAgICAgICAgICBpZiAoU1ZHRWxlbWVudCogZWxlbWVudCA9IHN0YXRpY19jYXN0
PFNWR0VsZW1lbnQqPihwYXJlbnRSZW5kZXJlci0+bm9kZSgpKSkKLSAgICAgICAgICAgICAgICBs
YW5ndWFnZSA9IGVsZW1lbnQtPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOwotICAg
ICAgICB9CisgICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IHRvRWxlbWVudChwYXJlbnRSZW5kZXJP
YmplY3QtPm5vZGUoKSktPmdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpOworICAgICAg
ICBib29sIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHBhcmVudFJlbmRl
ck9iamVjdC0+c3R5bGUoKS0+c3ZnU3R5bGUoKSk7CiAKICAgICAgICAgU1ZHVGV4dFJ1bldhbGtl
cjxTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhPiBydW5XYWxrZXIoZm9udERhdGEs
IGZvbnRFbGVtZW50LCBkYXRhLCBmbG9hdFdpZHRoVXNpbmdTVkdGb250Q2FsbGJhY2ssIGZsb2F0
V2lkdGhNaXNzaW5nR2x5cGhDYWxsYmFjayk7CiAgICAgICAgIHJ1bldhbGtlci53YWxrKHJ1biwg
aXNWZXJ0aWNhbFRleHQsIGxhbmd1YWdlLCBmcm9tLCB0byk7CkBAIC0yNzYsMTYgKzI4MSwxNiBA
QCBzdGF0aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTCiAgICAgcmV0dXJuIDAu
MGY7CiB9CiAKLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgVGV4dFJ1
biYgcnVuKSBjb25zdAorZmxvYXQgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmZsb2F0V2lk
dGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYgZm9udCwgY29uc3QgVGV4dFJ1biYgcnVuKSBjb25z
dAogewogICAgIGludCBjaGFyc0NvbnN1bWVkOwogICAgIFN0cmluZyBnbHlwaE5hbWU7Ci0gICAg
cmV0dXJuIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIDAsIDAs
IHJ1bi5sZW5ndGgoKSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKKyAgICByZXR1cm4gZmxv
YXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KGZvbnQsIHJ1biwgMCwgMCwgcnVuLmxlbmd0
aCgpLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOwogfQogCi1mbG9hdCBGb250OjpmbG9hdFdp
ZHRoVXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGV4dHJhQ2hhcnNBdmFpbGFi
bGUsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0CitmbG9hdCBT
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBG
b250JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGludCBleHRyYUNoYXJzQXZhaWxhYmxlLCBp
bnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdAogewotICAgIHJldHVy
biBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQodGhpcywgcnVuLCBleHRyYUNoYXJz
QXZhaWxhYmxlLCAwLCBydW4ubGVuZ3RoKCksIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7Cisg
ICAgcmV0dXJuIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udChmb250LCBydW4sIGV4
dHJhQ2hhcnNBdmFpbGFibGUsIDAsIHJ1bi5sZW5ndGgoKSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhO
YW1lKTsKIH0KIAogLy8gQ2FsbGJhY2sgJiBkYXRhIHN0cnVjdHVyZXMgdG8gZHJhdyB0ZXh0IHVz
aW5nIFNWRyBGb250cwpAQCAtMzEwLDI2ICszMTUsMjYgQEAgc3RhdGljIHZvaWQgZHJhd1RleHRN
aXNzaW5nR2x5cGhDYWxsYmFjawogICAgIGRhdGEuZmFsbGJhY2tDaGFyYWN0ZXJzLmFwcGVuZChy
dW5bMF0pOwogfQogCi12b2lkIEZvbnQ6OmRyYXdUZXh0VXNpbmdTVkdGb250KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNv
bnN0Cit2b2lkIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3VGV4dFVzaW5nU1ZHRm9u
dChjb25zdCBGb250JiBmb250LCBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
CiB7CiAgICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50ID0gMDsKICAgICBTVkdGb250RmFj
ZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7CiAKLSAgICBpZiAoY29uc3QgU1ZHRm9udERh
dGEqIGZvbnREYXRhID0gc3ZnRm9udEFuZEZvbnRGYWNlRWxlbWVudEZvckZvbnREYXRhKHByaW1h
cnlGb250KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKSB7CisgICAgaWYgKGNvbnN0
IFNWR0ZvbnREYXRhKiBmb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250
RGF0YShmb250LnByaW1hcnlGb250KCksIGZvbnRGYWNlRWxlbWVudCwgZm9udEVsZW1lbnQpKSB7
CiAgICAgICAgIGlmICghZm9udEVsZW1lbnQpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAg
ICAgU1ZHVGV4dFJ1bldhbGtlckRyYXdUZXh0RGF0YSBkYXRhOwogICAgICAgICBGbG9hdFBvaW50
IGN1cnJlbnRQb2ludCA9IHBvaW50OwotICAgICAgICBmbG9hdCBzY2FsZSA9IGNvbnZlcnRFbVVu
aXRUb1BpeGVsKHNpemUoKSwgZm9udEZhY2VFbGVtZW50LT51bml0c1BlckVtKCksIDEuMGYpOwot
Ci0gICAgICAgIFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQYWludGluZ1Jlc291cmNlID0gcnVu
LmFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoKTsKLQotICAgICAgICAvLyBJZiByZW5kZXJPYmplY3Qg
aXMgbm90IHNldCwgd2UncmUgZGVhbGluZyBmb3IgSFRNTCB0ZXh0IHJlbmRlcmVkIHVzaW5nIFNW
RyBGb250cy4KLSAgICAgICAgaWYgKCFydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKSkgewot
ICAgICAgICAgICAgQVNTRVJUKCFhY3RpdmVQYWludGluZ1Jlc291cmNlKTsKKyAgICAgICAgZmxv
YXQgc2NhbGUgPSBjb252ZXJ0RW1Vbml0VG9QaXhlbChmb250LnNpemUoKSwgZm9udEZhY2VFbGVt
ZW50LT51bml0c1BlckVtKCksIDEuMGYpOwogCisgICAgICAgIC8vIFdlIGNhbiBvbmx5IHBhaW50
IFNWR0ZvbnRzIGlmIGEgY29udGV4dCBpcyBhdmFpbGFibGUuCisgICAgICAgIFJlbmRlck9iamVj
dCogcmVuZGVyT2JqZWN0ID0gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RGcm9tUnVuKHJ1bik7Cisg
ICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyT2JqZWN0ID0gZmlyc3RQYXJlbnRSZW5k
ZXJlckZvck5vblRleHROb2RlKHJlbmRlck9iamVjdCk7CisKKyAgICAgICAgLy8gSWYgYWN0aXZl
UGFpbnRpbmdSZXNvdXJjZSBpcyBub3Qgc2V0LCB3ZSdyZSBkZWFsaW5nIGZvciBIVE1MIHRleHQg
cmVuZGVyZWQgdXNpbmcgU1ZHIEZvbnRzLgorICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZSogYWN0
aXZlUGFpbnRpbmdSZXNvdXJjZSA9IGFjdGl2ZVBhaW50aW5nUmVzb3VyY2VGcm9tUnVuKHJ1bik7
CisgICAgICAgIGlmICghYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSkgewogICAgICAgICAgICAgLy8g
VE9ETzogV2UncmUgb25seSBzdXBwb3J0aW5nIHNpbXBsZSBmaWxsZWQgSFRNTCB0ZXh0IHNvIGZh
ci4KICAgICAgICAgICAgIFJlbmRlclNWR1Jlc291cmNlU29saWRDb2xvciogc29saWRQYWludGlu
Z1Jlc291cmNlID0gUmVuZGVyU1ZHUmVzb3VyY2U6OnNoYXJlZFNvbGlkUGFpbnRpbmdSZXNvdXJj
ZSgpOwogICAgICAgICAgICAgc29saWRQYWludGluZ1Jlc291cmNlLT5zZXRDb2xvcihjb250ZXh0
LT5maWxsQ29sb3IoKSk7CkBAIC0zMzcsMjkgKzM0MiwxNiBAQCB2b2lkIEZvbnQ6OmRyYXdUZXh0
VXNpbmdTVkdGb250KEdyYXBoaWNzCiAgICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNl
ID0gc29saWRQYWludGluZ1Jlc291cmNlOwogICAgICAgICB9CiAKLSAgICAgICAgQVNTRVJUKGFj
dGl2ZVBhaW50aW5nUmVzb3VyY2UpOwotCiAgICAgICAgIGludCBjaGFyc0NvbnN1bWVkOwogICAg
ICAgICBTdHJpbmcgZ2x5cGhOYW1lOwotICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gZmFs
c2U7Ci0gICAgICAgIGZsb2F0IHhTdGFydE9mZnNldCA9IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1Vz
aW5nU1ZHRm9udCh0aGlzLCBydW4sIDAsIHJ1bi5ydGwoKSA/IHRvIDogMCwgcnVuLnJ0bCgpID8g
cnVuLmxlbmd0aCgpIDogZnJvbSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKKyAgICAgICAg
ZmxvYXQgeFN0YXJ0T2Zmc2V0ID0gZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KGZv
bnQsIHJ1biwgMCwgcnVuLnJ0bCgpID8gdG8gOiAwLCBydW4ucnRsKCkgPyBydW4ubGVuZ3RoKCkg
OiBmcm9tLCBjaGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOwogICAgICAgICBGbG9hdFBvaW50IGds
eXBoT3JpZ2luOwogCi0gICAgICAgIFN0cmluZyBsYW5ndWFnZTsKLQotICAgICAgICAvLyBUT0RP
OiBsYW5ndWFnZSBtYXRjaGluZyAmIHN2ZyBnbHlwaHMgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciBI
VE1MIHRleHQsIHRvby4KLSAgICAgICAgUmVuZGVyT2JqZWN0KiByZWZlcmVuY2luZ1JlbmRlck9i
amVjdCA9IHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgpOwotICAgICAgICBSZW5kZXJPYmpl
Y3QqIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50ID0gcmVmZXJlbmNpbmdSZW5kZXJPYmpl
Y3QgPyByZWZlcmVuY2luZ1JlbmRlck9iamVjdC0+cGFyZW50KCkgOiAwOwotICAgICAgICBSZW5k
ZXJTdHlsZSogcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnRTdHlsZSA9IDA7Ci0gICAgICAg
IGlmIChyZWZlcmVuY2luZ1JlbmRlck9iamVjdCkgewotICAgICAgICAgICAgQVNTRVJUKHJlZmVy
ZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50KTsKLSAgICAgICAgICAgIHJlZmVyZW5jaW5nUmVuZGVy
T2JqZWN0UGFyZW50U3R5bGUgPSByZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudC0+c3R5bGUo
KTsKLQotICAgICAgICAgICAgaXNWZXJ0aWNhbFRleHQgPSBpc1ZlcnRpY2FsV3JpdGluZ01vZGUo
cmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnRTdHlsZS0+c3ZnU3R5bGUoKSk7ICAgIAotICAg
ICAgICAgICAgaWYgKFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50
Kj4ocmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnQtPm5vZGUoKSkpCi0gICAgICAgICAgICAg
ICAgbGFuZ3VhZ2UgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdBdHRyKTsK
LSAgICAgICAgfQorICAgICAgICBOb2RlKiBub2RlID0gcGFyZW50UmVuZGVyT2JqZWN0LT5ub2Rl
KCk7CisgICAgICAgIFN0cmluZyBsYW5ndWFnZSA9IHRvRWxlbWVudChub2RlKS0+Z2V0QXR0cmli
dXRlKFhNTE5hbWVzOjpsYW5nQXR0cik7CiAKKyAgICAgICAgUmVuZGVyU3R5bGUqIHBhcmVudFJl
bmRlck9iamVjdFN0eWxlID0gcGFyZW50UmVuZGVyT2JqZWN0LT5zdHlsZSgpOworICAgICAgICBi
b29sIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHBhcmVudFJlbmRlck9i
amVjdFN0eWxlLT5zdmdTdHlsZSgpKTsKICAgICAgICAgaWYgKCFpc1ZlcnRpY2FsVGV4dCkgewog
ICAgICAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WChmb250RGF0YS0+aG9yaXpvbnRhbE9yaWdpblgo
KSAqIHNjYWxlKTsKICAgICAgICAgICAgIGdseXBoT3JpZ2luLnNldFkoZm9udERhdGEtPmhvcml6
b250YWxPcmlnaW5ZKCkgKiBzY2FsZSk7CkBAIC0zOTQsMTIgKzM4NiwxMiBAQCB2b2lkIEZvbnQ6
OmRyYXdUZXh0VXNpbmdTVkdGb250KEdyYXBoaWNzCiAgICAgICAgICAgICAgICAgICAgIFBhdGgg
Z2x5cGhQYXRoID0gaWRlbnRpZmllci5wYXRoRGF0YTsKICAgICAgICAgICAgICAgICAgICAgZ2x5
cGhQYXRoLnRyYW5zZm9ybShnbHlwaFBhdGhUcmFuc2Zvcm0pOwogCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChhY3RpdmVQYWludGluZ1Jlc291cmNlLT5hcHBseVJlc291cmNlKHJlZmVyZW5jaW5n
UmVuZGVyT2JqZWN0UGFyZW50LCByZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudFN0eWxlLCBj
b250ZXh0LCByZXNvdXJjZU1vZGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVm
ZXJlbmNpbmdSZW5kZXJPYmplY3QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5k
ZXJTVkdJbmxpbmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQocmVm
ZXJlbmNpbmdSZW5kZXJPYmplY3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aXZlUGFp
bnRpbmdSZXNvdXJjZS0+YXBwbHlSZXNvdXJjZShwYXJlbnRSZW5kZXJPYmplY3QsIHBhcmVudFJl
bmRlck9iamVjdFN0eWxlLCBjb250ZXh0LCByZXNvdXJjZU1vZGUpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAocmVuZGVyT2JqZWN0ICYmIHJlbmRlck9iamVjdC0+aXNTVkdJbmxpbmVU
ZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBSZW5kZXJTVkdJbmxp
bmVUZXh0KiB0ZXh0UmVuZGVyZXIgPSB0b1JlbmRlclNWR0lubGluZVRleHQocmVuZGVyT2JqZWN0
KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VUaGlja25l
c3MoY29udGV4dC0+c3Ryb2tlVGhpY2tuZXNzKCkgKiB0ZXh0UmVuZGVyZXItPnNjYWxpbmdGYWN0
b3IoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBhY3RpdmVQYWludGluZ1Jlc291cmNlLT5wb3N0QXBwbHlSZXNvdXJjZShyZWZlcmVuY2luZ1Jl
bmRlck9iamVjdFBhcmVudCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQYXRoKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UtPnBvc3RBcHBseVJl
c291cmNlKHBhcmVudFJlbmRlck9iamVjdCwgY29udGV4dCwgcmVzb3VyY2VNb2RlLCAmZ2x5cGhQ
YXRoKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIApAQCAtNDA5
LDEyICs0MDEsMTMgQEAgdm9pZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChHcmFwaGljcwog
ICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9pbnQubW92ZShpZGVudGlmaWVyLmhvcml6b250
YWxBZHZhbmNlWCAqIHNjYWxlLCAwLjBmKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAgICAgLy8gSGFuZGxlIHN5c3RlbSBmb250IGZhbGxiYWNrCi0gICAgICAgICAgICAgICAg
Rm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihtX2ZvbnREZXNjcmlwdGlvbik7CisgICAg
ICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbihmb250LmZvbnREZXNj
cmlwdGlvbigpKTsKICAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KEZv
bnRGYW1pbHkoKSk7CiAgICAgICAgICAgICAgICAgRm9udCBmb250KGZvbnREZXNjcmlwdGlvbiwg
MCwgMCk7IC8vIHNwYWNpbmcgaGFuZGxlZCBieSBTVkcgdGV4dCBjb2RlLgotICAgICAgICAgICAg
ICAgIGZvbnQudXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKKyAgICAgICAgICAgICAgICBmb250LnVw
ZGF0ZShmb250LmZvbnRTZWxlY3RvcigpKTsKIAogICAgICAgICAgICAgICAgIFRleHRSdW4gZmFs
bGJhY2tDaGFyYWN0ZXJSdW4ocnVuKTsKKyAgICAgICAgICAgICAgICBmYWxsYmFja0NoYXJhY3Rl
clJ1bi5zZXRSZW5kZXJpbmdDb250ZXh0KDApOwogICAgICAgICAgICAgICAgIGZhbGxiYWNrQ2hh
cmFjdGVyUnVuLnNldFRleHQoJmRhdGEuZmFsbGJhY2tDaGFyYWN0ZXJzW3J1bi5ydGwoKSA/IGRh
dGEuZmFsbGJhY2tDaGFyYWN0ZXJzLnNpemUoKSAtIGZhbGxiYWNrQ2hhcmFjdGVySW5kZXggLSAx
IDogZmFsbGJhY2tDaGFyYWN0ZXJJbmRleF0sIDEpOwogICAgICAgICAgICAgICAgIGZvbnQuZHJh
d1RleHQoY29udGV4dCwgZmFsbGJhY2tDaGFyYWN0ZXJSdW4sIGN1cnJlbnRQb2ludCk7CiAKQEAg
LTQyOSwxNiArNDIyLDE2IEBAIHZvaWQgRm9udDo6ZHJhd1RleHRVc2luZ1NWR0ZvbnQoR3JhcGhp
Y3MKICAgICB9CiB9CiAKLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5n
U1ZHRm9udChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
aGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorRmxvYXRSZWN0IFNWR1RleHRSdW5SZW5k
ZXJpbmdDb250ZXh0OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udChjb25zdCBGb250
JiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQg
aGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewogICAgIGludCBjaGFyc0NvbnN1bWVk
OwogICAgIFN0cmluZyBnbHlwaE5hbWU7CiAKLSAgICByZXR1cm4gRmxvYXRSZWN0KHBvaW50Lngo
KSArIGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIDAsIHJ1bi5y
dGwoKSA/IHRvIDogMCwgcnVuLnJ0bCgpID8gcnVuLmxlbmd0aCgpIDogZnJvbSwgY2hhcnNDb25z
dW1lZCwgZ2x5cGhOYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgIHBvaW50LnkoKSwgZmxvYXRX
aWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgMCwgZnJvbSwgdG8sIGNoYXJz
Q29uc3VtZWQsIGdseXBoTmFtZSksIGhlaWdodCk7CisgICAgcmV0dXJuIEZsb2F0UmVjdChwb2lu
dC54KCkgKyBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQoZm9udCwgcnVuLCAwLCBy
dW4ucnRsKCkgPyB0byA6IDAsIHJ1bi5ydGwoKSA/IHJ1bi5sZW5ndGgoKSA6IGZyb20sIGNoYXJz
Q29uc3VtZWQsIGdseXBoTmFtZSksCisgICAgICAgICAgICAgICAgICAgICBwb2ludC55KCksIGZs
b2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udChmb250LCBydW4sIDAsIGZyb20sIHRvLCBj
aGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpLCBoZWlnaHQpOwogfQogCi1pbnQgRm9udDo6b2Zmc2V0
Rm9yUG9zaXRpb25Gb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IFRleHRSdW4mLCBmbG9hdCwgYm9v
bCkgY29uc3QKK2ludCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6b2Zmc2V0Rm9yUG9zaXRp
b25Gb3JUZXh0VXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgZmxvYXQs
IGJvb2wpIGNvbnN0CiB7CiAgICAgLy8gVE9ETzogRml4IHRleHQgc2VsZWN0aW9uIHdoZW4gSFRN
TCB0ZXh0IGlzIGRyYXduIHVzaW5nIGEgU1ZHIEZvbnQKICAgICAvLyBXZSBuZWVkIHRvIGludGVn
cmF0ZSB0aGUgU1ZHIHRleHQgc2VsZWN0aW9uIGNvZGUgaW4gdGhlIG9mZnNldEZvclBvc2l0aW9u
KCkgZnJhbWV3b3JrLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgUmVzZWFy
Y2ggSW4gTW90aW9uIExpbWl0ZWQgMjAxMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5k
ZWYgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHRfaAorI2RlZmluZSBTVkdUZXh0UnVuUmVuZGVy
aW5nQ29udGV4dF9oCisKKyNpbmNsdWRlICJUZXh0UnVuLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVuZGVyT2JqZWN0OworY2xhc3MgUmVuZGVyU1ZHUmVzb3VyY2U7CisKK2Ns
YXNzIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0IDogcHVibGljIFRleHRSdW46OlJlbmRlcmlu
Z0NvbnRleHQgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFNWR1RleHRSdW5SZW5k
ZXJpbmdDb250ZXh0PiBjcmVhdGUoUmVuZGVyT2JqZWN0KiBjb250ZXh0KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dChjb250ZXh0
KSk7CisgICAgfQorCisgICAgUmVuZGVyT2JqZWN0KiBjb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
bV9jb250ZXh0OyB9CisKKyNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQorICAgIFJlbmRlclNWR1Jlc291
cmNlKiBhY3RpdmVQYWludGluZ1Jlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVQYWlu
dGluZ1Jlc291cmNlOyB9CisgICAgdm9pZCBzZXRBY3RpdmVQYWludGluZ1Jlc291cmNlKFJlbmRl
clNWR1Jlc291cmNlKiBvYmplY3QpIHsgbV9hY3RpdmVQYWludGluZ1Jlc291cmNlID0gb2JqZWN0
OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd1RleHRVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYs
IEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50
IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdT
VkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJikgY29uc3Q7CisgICAgdmlydHVhbCBm
bG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwg
aW50IGV4dHJhQ2hhcnNBdmFpbGFibGUsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlw
aE5hbWUpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3RGb3JUZXh0
VXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2lu
dCYsIGludCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBvZmZz
ZXRGb3JQb3NpdGlvbkZvclRleHRVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRS
dW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Cisj
ZW5kaWYKKworcHJpdmF0ZToKKyAgICBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dChSZW5kZXJP
YmplY3QqIGNvbnRleHQpCisgICAgICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisjaWYgRU5BQkxF
KFNWR19GT05UUykKKyAgICAgICAgLCBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2UoMCkKKyNlbmRp
ZgorICAgIHsKKyAgICB9CisKKyAgICBSZW5kZXJPYmplY3QqIG1fY29udGV4dDsKKworI2lmIEVO
QUJMRShTVkdfRk9OVFMpCisgICAgUmVuZGVyU1ZHUmVzb3VyY2UqIG1fYWN0aXZlUGFpbnRpbmdS
ZXNvdXJjZTsKKyNlbmRpZgorfTsKKworaW5saW5lIGJvb2wgdGV4dFJ1bk5lZWRzUmVuZGVyaW5n
Q29udGV4dChjb25zdCBGb250JiBmb250KQoreworICAgIC8vIE9ubHkgc2F2ZSB0aGUgZXh0cmEg
ZGF0YSBpZiBTVkcgRm9udHMgYXJlIHVzZWQsIHdoaWNoIGRlcGVuZCBvbiB0aGVtLgorICAgIC8v
IEZJWE1FOiBTVkcgRm9udHMgd29uJ3Qgd29yayBhcyBzZWdtZW50ZWQgZm9udHMgYXQgdGhlIG1v
bWVudCwgaWYgdGhhdCdzIGZpeGVkLCB3ZSBuZWVkIHRvIGNoZWNrIGZvciB0aGVtIGFzIHdlbGwg
YmVsb3cuCisgICAgQVNTRVJUKGZvbnQucHJpbWFyeUZvbnQoKSk7CisgICAgcmV0dXJuIGZvbnQu
cHJpbWFyeUZvbnQoKS0+aXNTVkdGb250KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0X2gKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0FsbEluT25lLmNwcAkocmV2aXNpb24gODcxNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHQWxsSW5PbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3ICs3Nyw2IEBACiAjaW5j
bHVkZSAiU1ZHRmlsdGVyRWxlbWVudC5jcHAiCiAjaW5jbHVkZSAiU1ZHRmlsdGVyUHJpbWl0aXZl
U3RhbmRhcmRBdHRyaWJ1dGVzLmNwcCIKICNpbmNsdWRlICJTVkdGaXRUb1ZpZXdCb3guY3BwIgot
I2luY2x1ZGUgIlNWR0ZvbnQuY3BwIgogI2luY2x1ZGUgIlNWR0ZvbnREYXRhLmNwcCIKICNpbmNs
dWRlICJTVkdGb250RWxlbWVudC5jcHAiCiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmNw
cCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udC5jcHAJKHJldmlzaW9uIDg3MTQ1KQorKysgU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ1MSArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IE5pa29sYXMgWmltbWVybWFubiA8emlt
bWVybWFubkBrZGUub3JnPgotICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGlt
aXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0KLSNp
ZiBFTkFCTEUoU1ZHX0ZPTlRTKQotI2luY2x1ZGUgIkZvbnQuaCIKLQotI2luY2x1ZGUgIkNTU0Zv
bnRTZWxlY3Rvci5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIlJl
bmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclNWR0lubGluZVRleHQuaCIKLSNpbmNsdWRl
ICJSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IuaCIKLSNpbmNsdWRlICJTVkdBbHRHbHlwaEVs
ZW1lbnQuaCIKLSNpbmNsdWRlICJTVkdGb250RGF0YS5oIgotI2luY2x1ZGUgIlNWR0ZvbnRFbGVt
ZW50LmgiCi0jaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHR2x5
cGhFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHR2x5cGhNYXAuaCIKLSNpbmNsdWRlICJTVkdNaXNz
aW5nR2x5cGhFbGVtZW50LmgiCi0jaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTaW1w
bGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlRleHRSdW4uaCIKLSNpbmNsdWRlICJYTUxOYW1lcy5o
IgotCi11c2luZyBuYW1lc3BhY2UgV1RGOjpVbmljb2RlOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgY29udmVydEVtVW5pdFRvUGl4ZWwoZmxvYXQgZm9udFNp
emUsIGZsb2F0IHVuaXRzUGVyRW0sIGZsb2F0IHZhbHVlKQotewotICAgIGlmICghdW5pdHNQZXJF
bSkKLSAgICAgICAgcmV0dXJuIDAuMGY7Ci0KLSAgICByZXR1cm4gdmFsdWUgKiBmb250U2l6ZSAv
IHVuaXRzUGVyRW07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZlcnRpY2FsV3JpdGluZ01v
ZGUoY29uc3QgU1ZHUmVuZGVyU3R5bGUqIHN0eWxlKQotewotICAgIHJldHVybiBzdHlsZS0+d3Jp
dGluZ01vZGUoKSA9PSBXTV9UQlJMIHx8IHN0eWxlLT53cml0aW5nTW9kZSgpID09IFdNX1RCOyAK
LX0KLQotc3RhdGljIGlubGluZSBjb25zdCBTVkdGb250RGF0YSogc3ZnRm9udEFuZEZvbnRGYWNl
RWxlbWVudEZvckZvbnREYXRhKGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgU1ZHRm9u
dEZhY2VFbGVtZW50KiYgZm9udEZhY2UsIFNWR0ZvbnRFbGVtZW50KiYgZm9udCkKLXsKLSAgICBB
U1NFUlQoZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsKLSAgICBBU1NFUlQoZm9udERhdGEtPmlz
U1ZHRm9udCgpKTsKLQotICAgIGNvbnN0IFNWR0ZvbnREYXRhKiBzdmdGb250RGF0YSA9IHN0YXRp
Y19jYXN0PGNvbnN0IFNWR0ZvbnREYXRhKj4oZm9udERhdGEtPnN2Z0ZvbnREYXRhKCkpOwotCi0g
ICAgZm9udEZhY2UgPSBzdmdGb250RGF0YS0+c3ZnRm9udEZhY2VFbGVtZW50KCk7Ci0gICAgQVNT
RVJUKGZvbnRGYWNlKTsKLQotICAgIGZvbnQgPSBmb250RmFjZS0+YXNzb2NpYXRlZEZvbnRFbGVt
ZW50KCk7Ci0gICAgcmV0dXJuIHN2Z0ZvbnREYXRhOwotfQotCi0vLyBIZWxwZXIgY2xhc3MgdG8g
d2FsayBhIHRleHQgcnVuLiBMb29rdXAgYSBTVkdHbHlwaCBmb3IgZWFjaCBjaGFyYWN0ZXIKLS8v
IC0gYWxzbyByZXNwZWN0aW5nIHBvc3NpYmx5IGRlZmluZWQgbGlnYXR1cmVzIC0gYW5kIGludm9r
ZSBhIGNhbGxiYWNrIGZvciBlYWNoIGZvdW5kIGdseXBoLgotdGVtcGxhdGU8dHlwZW5hbWUgU1ZH
VGV4dFJ1bkRhdGE+Ci1zdHJ1Y3QgU1ZHVGV4dFJ1bldhbGtlciB7Ci0gICAgdHlwZWRlZiBib29s
ICgqU1ZHVGV4dFJ1bldhbGtlckNhbGxiYWNrKShjb25zdCBTVkdHbHlwaCYsIFNWR1RleHRSdW5E
YXRhJik7Ci0gICAgdHlwZWRlZiB2b2lkICgqU1ZHVGV4dFJ1bldhbGtlck1pc3NpbmdHbHlwaENh
bGxiYWNrKShjb25zdCBUZXh0UnVuJiwgU1ZHVGV4dFJ1bkRhdGEmKTsKLQotICAgIFNWR1RleHRS
dW5XYWxrZXIoY29uc3QgU1ZHRm9udERhdGEqIGZvbnREYXRhLCBTVkdGb250RWxlbWVudCogZm9u
dEVsZW1lbnQsIFNWR1RleHRSdW5EYXRhJiBkYXRhLAotICAgICAgICAgICAgICAgICAgICAgU1ZH
VGV4dFJ1bldhbGtlckNhbGxiYWNrIGNhbGxiYWNrLCBTVkdUZXh0UnVuV2Fsa2VyTWlzc2luZ0ds
eXBoQ2FsbGJhY2sgbWlzc2luZ0dseXBoQ2FsbGJhY2spCi0gICAgICAgIDogbV9mb250RGF0YShm
b250RGF0YSkKLSAgICAgICAgLCBtX2ZvbnRFbGVtZW50KGZvbnRFbGVtZW50KQotICAgICAgICAs
IG1fd2Fsa2VyRGF0YShkYXRhKQotICAgICAgICAsIG1fd2Fsa2VyQ2FsbGJhY2soY2FsbGJhY2sp
Ci0gICAgICAgICwgbV93YWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjayhtaXNzaW5nR2x5cGhDYWxs
YmFjaykKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCB3YWxrKGNvbnN0IFRleHRSdW4mIHJ1biwg
Ym9vbCBpc1ZlcnRpY2FsVGV4dCwgY29uc3QgU3RyaW5nJiBsYW5ndWFnZSwgaW50IGZyb20sIGlu
dCB0bykKLSAgICB7Ci0gICAgICAgIEFTU0VSVCgwIDw9IGZyb20gJiYgZnJvbSA8PSB0byAmJiB0
byAtIGZyb20gPD0gcnVuLmxlbmd0aCgpKTsKLQotICAgICAgICBjb25zdCBTdHJpbmcgdGV4dCA9
IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uZGF0YShmcm9tKSwgdG8gLSBmcm9tKTsKLSAgICAg
ICAgVmVjdG9yPFNWR0dseXBoOjpBcmFiaWNGb3JtPiBjaGFycyhjaGFyYWN0ZXJzV2l0aEFyYWJp
Y0Zvcm0odGV4dCwgcnVuLnJ0bCgpKSk7Ci0KLSAgICAgICAgU1ZHR2x5cGggaWRlbnRpZmllcjsK
LSAgICAgICAgYm9vbCBmb3VuZEdseXBoID0gZmFsc2U7Ci0gICAgICAgIGludCBjaGFyYWN0ZXJM
b29rdXBSYW5nZTsKLSAgICAgICAgaW50IGVuZE9mU2NhblJhbmdlID0gdG8gKyBtX3dhbGtlckRh
dGEuZXh0cmFDaGFyc0F2YWlsYWJsZTsKLQotICAgICAgICBib29sIGhhdmVBbHRHbHlwaCA9IGZh
bHNlOwotICAgICAgICBTVkdHbHlwaCBhbHRHbHlwaElkZW50aWZpZXI7Ci0gICAgICAgIGlmIChS
ZW5kZXJPYmplY3QqIHJlbmRlck9iamVjdCA9IHJ1bi5yZWZlcmVuY2luZ1JlbmRlck9iamVjdCgp
KSB7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIHBhcmVudFJlbmRlcmVyID0gcmVuZGVyT2Jq
ZWN0LT5wYXJlbnQoKTsKLSAgICAgICAgICAgIEFTU0VSVChwYXJlbnRSZW5kZXJlcik7Ci0gICAg
ICAgICAgICBpZiAocGFyZW50UmVuZGVyZXItPm5vZGUoKSAmJiBwYXJlbnRSZW5kZXJlci0+bm9k
ZSgpLT5oYXNUYWdOYW1lKFNWR05hbWVzOjphbHRHbHlwaFRhZykpIHsKLSAgICAgICAgICAgICAg
ICBTVkdHbHlwaEVsZW1lbnQqIGdseXBoRWxlbWVudCA9IHN0YXRpY19jYXN0PFNWR0FsdEdseXBo
RWxlbWVudCo+KHBhcmVudFJlbmRlcmVyLT5ub2RlKCkpLT5nbHlwaEVsZW1lbnQoKTsKLSAgICAg
ICAgICAgICAgICBpZiAoZ2x5cGhFbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGhhdmVB
bHRHbHlwaCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGFsdEdseXBoSWRlbnRpZmllciA9
IGdseXBoRWxlbWVudC0+YnVpbGRHbHlwaElkZW50aWZpZXIoKTsKLSAgICAgICAgICAgICAgICAg
ICAgYWx0R2x5cGhJZGVudGlmaWVyLmlzVmFsaWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAg
ICBhbHRHbHlwaElkZW50aWZpZXIudW5pY29kZVN0cmluZ0xlbmd0aCA9IHRvIC0gZnJvbTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBmb3Ig
KGludCBpID0gZnJvbTsgaSA8IHRvOyArK2kpIHsKLSAgICAgICAgICAgIC8vIElmIGNoYXJhY3Rl
ckxvb2t1cFJhbmdlIGlzID4gMCwgdGhlbiB0aGUgZm9udCBkZWZpbmVkIGxpZ2F0dXJlcyAobGVu
Z3RoIG9mIHVuaWNvZGUgcHJvcGVydHkgdmFsdWUgPiAxKS4KLSAgICAgICAgICAgIC8vIFdlIGhh
dmUgdG8gY2hlY2sgd2hldGVyIHRoZSBjdXJyZW50IGNoYXJhY3RlciAmIHRoZSBuZXh0IGNoYXJh
Y3RlciBkZWZpbmUgYSBsaWdhdHVyZS4gVGhpcyBuZWVkcyB0byBiZQotICAgICAgICAgICAgLy8g
ZXh0ZW5kZWQgdG8gdGhlIG4tdGggbmV4dCBjaGFyYWN0ZXIgKHdoZXJlIG4gaXMgJ2NoYXJhY3Rl
ckxvb2t1cFJhbmdlJyksIHRvIGNoZWNrIGZvciBhbnkgcG9zc2libGUgbGlnYXR1cmUuCi0gICAg
ICAgICAgICBjaGFyYWN0ZXJMb29rdXBSYW5nZSA9IGVuZE9mU2NhblJhbmdlIC0gaTsKLQotICAg
ICAgICAgICAgU3RyaW5nIGxvb2t1cFN0cmluZyA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4u
ZGF0YShpKSwgY2hhcmFjdGVyTG9va3VwUmFuZ2UpOwotCi0gICAgICAgICAgICBWZWN0b3I8U1ZH
R2x5cGg+IGdseXBoczsKLSAgICAgICAgICAgIGlmIChoYXZlQWx0R2x5cGgpCi0gICAgICAgICAg
ICAgICAgZ2x5cGhzLmFwcGVuZChhbHRHbHlwaElkZW50aWZpZXIpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIG1fZm9udEVsZW1lbnQtPmdldEdseXBoSWRlbnRpZmllcnNGb3JT
dHJpbmcobG9va3VwU3RyaW5nLCBnbHlwaHMpOwotCi0gICAgICAgICAgICBWZWN0b3I8U1ZHR2x5
cGg+OjppdGVyYXRvciBpdCA9IGdseXBocy5iZWdpbigpOwotICAgICAgICAgICAgVmVjdG9yPFNW
R0dseXBoPjo6aXRlcmF0b3IgZW5kID0gZ2x5cGhzLmVuZCgpOwotICAgICAgICAgICAgCi0gICAg
ICAgICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICAgICAgaWRlbnRp
ZmllciA9ICppdDsKLSAgICAgICAgICAgICAgICBpZiAoaWRlbnRpZmllci5pc1ZhbGlkICYmIGlz
Q29tcGF0aWJsZUdseXBoKGlkZW50aWZpZXIsIGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgY2hh
cnMsIGksIGkgKyBpZGVudGlmaWVyLnVuaWNvZGVTdHJpbmdMZW5ndGgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChjaGFyYWN0ZXJMb29rdXBSYW5nZSA+IDApOwotICAgICAgICAgICAg
ICAgICAgICBpICs9IGlkZW50aWZpZXIudW5pY29kZVN0cmluZ0xlbmd0aCAtIDE7Ci0gICAgICAg
ICAgICAgICAgICAgIG1fd2Fsa2VyRGF0YS5jaGFyc0NvbnN1bWVkICs9IGlkZW50aWZpZXIudW5p
Y29kZVN0cmluZ0xlbmd0aDsKLSAgICAgICAgICAgICAgICAgICAgbV93YWxrZXJEYXRhLmdseXBo
TmFtZSA9IGlkZW50aWZpZXIuZ2x5cGhOYW1lOwotCi0gICAgICAgICAgICAgICAgICAgIGZvdW5k
R2x5cGggPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBTVkdHbHlwaEVsZW1lbnQ6OmluaGVy
aXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoaWRlbnRpZmllciwgbV9mb250RGF0YSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKCFmb3VuZEdseXBoKSB7Ci0gICAgICAgICAgICAgICAgKyttX3dhbGtl
ckRhdGEuY2hhcnNDb25zdW1lZDsKLSAgICAgICAgICAgICAgICBpZiAoU1ZHTWlzc2luZ0dseXBo
RWxlbWVudCogZWxlbWVudCA9IG1fZm9udEVsZW1lbnQtPmZpcnN0TWlzc2luZ0dseXBoRWxlbWVu
dCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIDxtaXNzaW5nLWdseXBoPiBlbGVtZW50IHN1
cHBvcnQKLSAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllciA9IFNWR0dseXBoRWxlbWVudDo6
YnVpbGRHZW5lcmljR2x5cGhJZGVudGlmaWVyKGVsZW1lbnQpOwotICAgICAgICAgICAgICAgICAg
ICBTVkdHbHlwaEVsZW1lbnQ6OmluaGVyaXRVbnNwZWNpZmllZEF0dHJpYnV0ZXMoaWRlbnRpZmll
ciwgbV9mb250RGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXIuaXNWYWxpZCA9
IHRydWU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
RmFsbGJhY2sgdG8gc3lzdGVtIGZvbnQgZmFsbGJhY2sKLSAgICAgICAgICAgICAgICAgICAgVGV4
dFJ1biBzdWJSdW4ocnVuKTsKLSAgICAgICAgICAgICAgICAgICAgc3ViUnVuLnNldFRleHQoc3Vi
UnVuLmRhdGEoaSksIDEpOwotCi0gICAgICAgICAgICAgICAgICAgICgqbV93YWxrZXJNaXNzaW5n
R2x5cGhDYWxsYmFjaykoc3ViUnVuLCBtX3dhbGtlckRhdGEpOwotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmICghKCptX3dhbGtlckNhbGxiYWNrKShpZGVudGlmaWVyLCBtX3dhbGtlckRhdGEpKQot
ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBmb3VuZEdseXBoID0gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgU1ZHRm9udERhdGEqIG1f
Zm9udERhdGE7Ci0gICAgU1ZHRm9udEVsZW1lbnQqIG1fZm9udEVsZW1lbnQ7Ci0gICAgU1ZHVGV4
dFJ1bkRhdGEmIG1fd2Fsa2VyRGF0YTsKLSAgICBTVkdUZXh0UnVuV2Fsa2VyQ2FsbGJhY2sgbV93
YWxrZXJDYWxsYmFjazsKLSAgICBTVkdUZXh0UnVuV2Fsa2VyTWlzc2luZ0dseXBoQ2FsbGJhY2sg
bV93YWxrZXJNaXNzaW5nR2x5cGhDYWxsYmFjazsKLX07Ci0KLS8vIENhbGxiYWNrICYgZGF0YSBz
dHJ1Y3R1cmVzIHRvIGNvbXB1dGUgdGhlIHdpZHRoIG9mIHRleHQgdXNpbmcgU1ZHIEZvbnRzCi1z
dHJ1Y3QgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0YSB7Ci0gICAgaW50IGF0Owot
ICAgIGludCBmcm9tOwotICAgIGludCB0bzsKLSAgICBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZTsK
LSAgICBpbnQgY2hhcnNDb25zdW1lZDsKLSAgICBTdHJpbmcgZ2x5cGhOYW1lOwotCi0gICAgZmxv
YXQgc2NhbGU7Ci0gICAgZmxvYXQgbGVuZ3RoOwotICAgIGNvbnN0IEZvbnQqIGZvbnQ7Ci19Owot
Ci1zdGF0aWMgYm9vbCBmbG9hdFdpZHRoVXNpbmdTVkdGb250Q2FsbGJhY2soY29uc3QgU1ZHR2x5
cGgmIGlkZW50aWZpZXIsIFNWR1RleHRSdW5XYWxrZXJNZWFzdXJlZExlbmd0aERhdGEmIGRhdGEp
Ci17Ci0gICAgaWYgKGRhdGEuYXQgPj0gZGF0YS5mcm9tICYmIGRhdGEuYXQgPCBkYXRhLnRvKQot
ICAgICAgICBkYXRhLmxlbmd0aCArPSBpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCAqIGRh
dGEuc2NhbGU7Ci0KLSAgICBkYXRhLmF0Kys7Ci0gICAgcmV0dXJuIGRhdGEuYXQgPCBkYXRhLnRv
OwotfQotCi1zdGF0aWMgdm9pZCBmbG9hdFdpZHRoTWlzc2luZ0dseXBoQ2FsbGJhY2soY29uc3Qg
VGV4dFJ1biYgcnVuLCBTVkdUZXh0UnVuV2Fsa2VyTWVhc3VyZWRMZW5ndGhEYXRhJiBkYXRhKQot
ewotICAgIC8vIEhhbmRsZSBzeXN0ZW0gZm9udCBmYWxsYmFjawotICAgIEZvbnREZXNjcmlwdGlv
biBmb250RGVzY3JpcHRpb24oZGF0YS5mb250LT5mb250RGVzY3JpcHRpb24oKSk7Ci0gICAgZm9u
dERlc2NyaXB0aW9uLnNldEZhbWlseShGb250RmFtaWx5KCkpOwotICAgIEZvbnQgZm9udChmb250
RGVzY3JpcHRpb24sIDAsIDApOyAvLyBzcGFjaW5nIGhhbmRsZWQgYnkgU1ZHIHRleHQgY29kZS4K
LSAgICBmb250LnVwZGF0ZShkYXRhLmZvbnQtPmZvbnRTZWxlY3RvcigpKTsKLQotICAgIGRhdGEu
bGVuZ3RoICs9IGZvbnQud2lkdGgocnVuKTsKLX0KLQotCi1TVkdGb250RWxlbWVudCogRm9udDo6
c3ZnRm9udCgpIGNvbnN0Ci17IAotICAgIGlmICghaXNTVkdGb250KCkpCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50ID0gMDsKLSAgICBTVkdGb250
RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IDA7Ci0gICAgaWYgKHN2Z0ZvbnRBbmRGb250
RmFjZUVsZW1lbnRGb3JGb250RGF0YShwcmltYXJ5Rm9udCgpLCBmb250RmFjZUVsZW1lbnQsIGZv
bnRFbGVtZW50KSkKLSAgICAgICAgcmV0dXJuIGZvbnRFbGVtZW50OwotICAgIAotICAgIHJldHVy
biAwOwotfQotCi1zdGF0aWMgZmxvYXQgZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdTVkdGb250
KGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGV4dHJhQ2hhcnNBdmFp
bGFibGUsIGludCBmcm9tLCBpbnQgdG8sIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlw
aE5hbWUpCi17Ci0gICAgaW50IG5ld0Zyb20gPSB0byA+IGZyb20gPyBmcm9tIDogdG87Ci0gICAg
aW50IG5ld1RvID0gdG8gPiBmcm9tID8gdG8gOiBmcm9tOwotCi0gICAgZnJvbSA9IG5ld0Zyb207
Ci0gICAgdG8gPSBuZXdUbzsKLQotICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7
Ci0gICAgU1ZHRm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwotCi0gICAgaWYg
KGNvbnN0IFNWR0ZvbnREYXRhKiBmb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRG
b3JGb250RGF0YShmb250LT5wcmltYXJ5Rm9udCgpLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVt
ZW50KSkgewotICAgICAgICBpZiAoIWZvbnRFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIDAu
MGY7Ci0KLSAgICAgICAgU1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0YSBkYXRhOwot
Ci0gICAgICAgIGRhdGEuZm9udCA9IGZvbnQ7Ci0gICAgICAgIGRhdGEuYXQgPSBmcm9tOwotICAg
ICAgICBkYXRhLmZyb20gPSBmcm9tOwotICAgICAgICBkYXRhLnRvID0gdG87Ci0gICAgICAgIGRh
dGEuZXh0cmFDaGFyc0F2YWlsYWJsZSA9IGV4dHJhQ2hhcnNBdmFpbGFibGU7Ci0gICAgICAgIGRh
dGEuY2hhcnNDb25zdW1lZCA9IDA7Ci0gICAgICAgIGRhdGEuc2NhbGUgPSBjb252ZXJ0RW1Vbml0
VG9QaXhlbChmb250LT5zaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBm
KTsKLSAgICAgICAgZGF0YS5sZW5ndGggPSAwLjBmOwotCi0gICAgICAgIFN0cmluZyBsYW5ndWFn
ZTsKLSAgICAgICAgYm9vbCBpc1ZlcnRpY2FsVGV4dCA9IGZhbHNlOyAvLyBIb2xkcyB0cnVlIGZv
ciBIVE1MIHRleHQKLQotICAgICAgICAvLyBUT0RPOiBsYW5ndWFnZSBtYXRjaGluZyAmIHN2ZyBn
bHlwaHMgc2hvdWxkIGJlIHBvc3NpYmxlIGZvciBIVE1MIHRleHQsIHRvby4KLSAgICAgICAgaWYg
KFJlbmRlck9iamVjdCogcmVuZGVyT2JqZWN0ID0gcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0
KCkpIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcGFyZW50UmVuZGVyZXIgPSByZW5kZXJP
YmplY3QtPnBhcmVudCgpOwotICAgICAgICAgICAgQVNTRVJUKHBhcmVudFJlbmRlcmVyKTsKLSAg
ICAgICAgICAgIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRpbmdNb2RlKHBhcmVudFJl
bmRlcmVyLT5zdHlsZSgpLT5zdmdTdHlsZSgpKTsKLQotICAgICAgICAgICAgaWYgKFNWR0VsZW1l
bnQqIGVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdFbGVtZW50Kj4ocGFyZW50UmVuZGVyZXItPm5v
ZGUoKSkpCi0gICAgICAgICAgICAgICAgbGFuZ3VhZ2UgPSBlbGVtZW50LT5nZXRBdHRyaWJ1dGUo
WE1MTmFtZXM6OmxhbmdBdHRyKTsKLSAgICAgICAgfQotCi0gICAgICAgIFNWR1RleHRSdW5XYWxr
ZXI8U1ZHVGV4dFJ1bldhbGtlck1lYXN1cmVkTGVuZ3RoRGF0YT4gcnVuV2Fsa2VyKGZvbnREYXRh
LCBmb250RWxlbWVudCwgZGF0YSwgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udENhbGxiYWNrLCBmbG9h
dFdpZHRoTWlzc2luZ0dseXBoQ2FsbGJhY2spOwotICAgICAgICBydW5XYWxrZXIud2FsayhydW4s
IGlzVmVydGljYWxUZXh0LCBsYW5ndWFnZSwgZnJvbSwgdG8pOwotICAgICAgICBjaGFyc0NvbnN1
bWVkID0gZGF0YS5jaGFyc0NvbnN1bWVkOwotICAgICAgICBnbHlwaE5hbWUgPSBkYXRhLmdseXBo
TmFtZTsKLSAgICAgICAgcmV0dXJuIGRhdGEubGVuZ3RoOwotICAgIH0KLQotICAgIHJldHVybiAw
LjBmOwotfQotCi1mbG9hdCBGb250OjpmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IFRleHRS
dW4mIHJ1bikgY29uc3QKLXsKLSAgICBpbnQgY2hhcnNDb25zdW1lZDsKLSAgICBTdHJpbmcgZ2x5
cGhOYW1lOwotICAgIHJldHVybiBmbG9hdFdpZHRoT2ZTdWJTdHJpbmdVc2luZ1NWR0ZvbnQodGhp
cywgcnVuLCAwLCAwLCBydW4ubGVuZ3RoKCksIGNoYXJzQ29uc3VtZWQsIGdseXBoTmFtZSk7Ci19
Ci0KLWZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgVGV4dFJ1biYgcnVu
LCBpbnQgZXh0cmFDaGFyc0F2YWlsYWJsZSwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGds
eXBoTmFtZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZmxvYXRXaWR0aE9mU3ViU3RyaW5nVXNpbmdT
VkdGb250KHRoaXMsIHJ1biwgZXh0cmFDaGFyc0F2YWlsYWJsZSwgMCwgcnVuLmxlbmd0aCgpLCBj
aGFyc0NvbnN1bWVkLCBnbHlwaE5hbWUpOwotfQotCi0vLyBDYWxsYmFjayAmIGRhdGEgc3RydWN0
dXJlcyB0byBkcmF3IHRleHQgdXNpbmcgU1ZHIEZvbnRzCi1zdHJ1Y3QgU1ZHVGV4dFJ1bldhbGtl
ckRyYXdUZXh0RGF0YSB7Ci0gICAgaW50IGV4dHJhQ2hhcnNBdmFpbGFibGU7Ci0gICAgaW50IGNo
YXJzQ29uc3VtZWQ7Ci0gICAgU3RyaW5nIGdseXBoTmFtZTsKLSAgICBWZWN0b3I8U1ZHR2x5cGg+
IGdseXBoSWRlbnRpZmllcnM7Ci0gICAgVmVjdG9yPFVDaGFyPiBmYWxsYmFja0NoYXJhY3RlcnM7
Ci19OwotCi1zdGF0aWMgYm9vbCBkcmF3VGV4dFVzaW5nU1ZHRm9udENhbGxiYWNrKGNvbnN0IFNW
R0dseXBoJiBpZGVudGlmaWVyLCBTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhJiBkYXRhKQot
ewotICAgIGRhdGEuZ2x5cGhJZGVudGlmaWVycy5hcHBlbmQoaWRlbnRpZmllcik7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIGRyYXdUZXh0TWlzc2luZ0dseXBoQ2FsbGJhY2so
Y29uc3QgVGV4dFJ1biYgcnVuLCBTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhJiBkYXRhKQot
ewotICAgIEFTU0VSVChydW4ubGVuZ3RoKCkgPT0gMSk7Ci0gICAgZGF0YS5nbHlwaElkZW50aWZp
ZXJzLmFwcGVuZChTVkdHbHlwaCgpKTsKLSAgICBkYXRhLmZhbGxiYWNrQ2hhcmFjdGVycy5hcHBl
bmQocnVuWzBdKTsKLX0KLQotdm9pZCBGb250OjpkcmF3VGV4dFVzaW5nU1ZHRm9udChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdAotewotICAgIFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCA9IDA7Ci0gICAgU1ZH
Rm9udEZhY2VFbGVtZW50KiBmb250RmFjZUVsZW1lbnQgPSAwOwotCi0gICAgaWYgKGNvbnN0IFNW
R0ZvbnREYXRhKiBmb250RGF0YSA9IHN2Z0ZvbnRBbmRGb250RmFjZUVsZW1lbnRGb3JGb250RGF0
YShwcmltYXJ5Rm9udCgpLCBmb250RmFjZUVsZW1lbnQsIGZvbnRFbGVtZW50KSkgewotICAgICAg
ICBpZiAoIWZvbnRFbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIFNWR1Rl
eHRSdW5XYWxrZXJEcmF3VGV4dERhdGEgZGF0YTsKLSAgICAgICAgRmxvYXRQb2ludCBjdXJyZW50
UG9pbnQgPSBwb2ludDsKLSAgICAgICAgZmxvYXQgc2NhbGUgPSBjb252ZXJ0RW1Vbml0VG9QaXhl
bChzaXplKCksIGZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpLCAxLjBmKTsKLQotICAgICAg
ICBSZW5kZXJTVkdSZXNvdXJjZSogYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSA9IHJ1bi5hY3RpdmVQ
YWludGluZ1Jlc291cmNlKCk7Ci0KLSAgICAgICAgLy8gSWYgcmVuZGVyT2JqZWN0IGlzIG5vdCBz
ZXQsIHdlJ3JlIGRlYWxpbmcgZm9yIEhUTUwgdGV4dCByZW5kZXJlZCB1c2luZyBTVkcgRm9udHMu
Ci0gICAgICAgIGlmICghcnVuLnJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0KCkpIHsKLSAgICAgICAg
ICAgIEFTU0VSVCghYWN0aXZlUGFpbnRpbmdSZXNvdXJjZSk7Ci0KLSAgICAgICAgICAgIC8vIFRP
RE86IFdlJ3JlIG9ubHkgc3VwcG9ydGluZyBzaW1wbGUgZmlsbGVkIEhUTUwgdGV4dCBzbyBmYXIu
Ci0gICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZVNvbGlkQ29sb3IqIHNvbGlkUGFpbnRpbmdS
ZXNvdXJjZSA9IFJlbmRlclNWR1Jlc291cmNlOjpzaGFyZWRTb2xpZFBhaW50aW5nUmVzb3VyY2Uo
KTsKLSAgICAgICAgICAgIHNvbGlkUGFpbnRpbmdSZXNvdXJjZS0+c2V0Q29sb3IoY29udGV4dC0+
ZmlsbENvbG9yKCkpOwotCi0gICAgICAgICAgICBhY3RpdmVQYWludGluZ1Jlc291cmNlID0gc29s
aWRQYWludGluZ1Jlc291cmNlOwotICAgICAgICB9Ci0KLSAgICAgICAgQVNTRVJUKGFjdGl2ZVBh
aW50aW5nUmVzb3VyY2UpOwotCi0gICAgICAgIGludCBjaGFyc0NvbnN1bWVkOwotICAgICAgICBT
dHJpbmcgZ2x5cGhOYW1lOwotICAgICAgICBib29sIGlzVmVydGljYWxUZXh0ID0gZmFsc2U7Ci0g
ICAgICAgIGZsb2F0IHhTdGFydE9mZnNldCA9IGZsb2F0V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZH
Rm9udCh0aGlzLCBydW4sIDAsIHJ1bi5ydGwoKSA/IHRvIDogMCwgcnVuLnJ0bCgpID8gcnVuLmxl
bmd0aCgpIDogZnJvbSwgY2hhcnNDb25zdW1lZCwgZ2x5cGhOYW1lKTsKLSAgICAgICAgRmxvYXRQ
b2ludCBnbHlwaE9yaWdpbjsKLQotICAgICAgICBTdHJpbmcgbGFuZ3VhZ2U7Ci0KLSAgICAgICAg
Ly8gVE9ETzogbGFuZ3VhZ2UgbWF0Y2hpbmcgJiBzdmcgZ2x5cGhzIHNob3VsZCBiZSBwb3NzaWJs
ZSBmb3IgSFRNTCB0ZXh0LCB0b28uCi0gICAgICAgIFJlbmRlck9iamVjdCogcmVmZXJlbmNpbmdS
ZW5kZXJPYmplY3QgPSBydW4ucmVmZXJlbmNpbmdSZW5kZXJPYmplY3QoKTsKLSAgICAgICAgUmVu
ZGVyT2JqZWN0KiByZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudCA9IHJlZmVyZW5jaW5nUmVu
ZGVyT2JqZWN0ID8gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3QtPnBhcmVudCgpIDogMDsKLSAgICAg
ICAgUmVuZGVyU3R5bGUqIHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5bGUgPSAwOwot
ICAgICAgICBpZiAocmVmZXJlbmNpbmdSZW5kZXJPYmplY3QpIHsKLSAgICAgICAgICAgIEFTU0VS
VChyZWZlcmVuY2luZ1JlbmRlck9iamVjdFBhcmVudCk7Ci0gICAgICAgICAgICByZWZlcmVuY2lu
Z1JlbmRlck9iamVjdFBhcmVudFN0eWxlID0gcmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnQt
PnN0eWxlKCk7Ci0KLSAgICAgICAgICAgIGlzVmVydGljYWxUZXh0ID0gaXNWZXJ0aWNhbFdyaXRp
bmdNb2RlKHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5bGUtPnN2Z1N0eWxlKCkpOyAg
ICAKLSAgICAgICAgICAgIGlmIChTVkdFbGVtZW50KiBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8U1ZH
RWxlbWVudCo+KHJlZmVyZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50LT5ub2RlKCkpKQotICAgICAg
ICAgICAgICAgIGxhbmd1YWdlID0gZWxlbWVudC0+Z2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5n
QXR0cik7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoIWlzVmVydGljYWxUZXh0KSB7Ci0gICAg
ICAgICAgICBnbHlwaE9yaWdpbi5zZXRYKGZvbnREYXRhLT5ob3Jpem9udGFsT3JpZ2luWCgpICog
c2NhbGUpOwotICAgICAgICAgICAgZ2x5cGhPcmlnaW4uc2V0WShmb250RGF0YS0+aG9yaXpvbnRh
bE9yaWdpblkoKSAqIHNjYWxlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGRhdGEuZXh0cmFDaGFy
c0F2YWlsYWJsZSA9IDA7Ci0gICAgICAgIGRhdGEuY2hhcnNDb25zdW1lZCA9IDA7Ci0KLSAgICAg
ICAgU1ZHVGV4dFJ1bldhbGtlcjxTVkdUZXh0UnVuV2Fsa2VyRHJhd1RleHREYXRhPiBydW5XYWxr
ZXIoZm9udERhdGEsIGZvbnRFbGVtZW50LCBkYXRhLCBkcmF3VGV4dFVzaW5nU1ZHRm9udENhbGxi
YWNrLCBkcmF3VGV4dE1pc3NpbmdHbHlwaENhbGxiYWNrKTsKLSAgICAgICAgcnVuV2Fsa2VyLndh
bGsocnVuLCBpc1ZlcnRpY2FsVGV4dCwgbGFuZ3VhZ2UsIGZyb20sIHRvKTsKLQotICAgICAgICBS
ZW5kZXJTVkdSZXNvdXJjZU1vZGUgcmVzb3VyY2VNb2RlID0gY29udGV4dC0+dGV4dERyYXdpbmdN
b2RlKCkgPT0gVGV4dE1vZGVTdHJva2UgPyBBcHBseVRvU3Ryb2tlTW9kZSA6IEFwcGx5VG9GaWxs
TW9kZTsKLQotICAgICAgICB1bnNpZ25lZCBudW1HbHlwaHMgPSBkYXRhLmdseXBoSWRlbnRpZmll
cnMuc2l6ZSgpOwotICAgICAgICB1bnNpZ25lZCBmYWxsYmFja0NoYXJhY3RlckluZGV4ID0gMDsK
LSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsgKytpKSB7Ci0gICAg
ICAgICAgICBjb25zdCBTVkdHbHlwaCYgaWRlbnRpZmllciA9IGRhdGEuZ2x5cGhJZGVudGlmaWVy
c1tydW4ucnRsKCkgPyBudW1HbHlwaHMgLSBpIC0gMSA6IGldOwotICAgICAgICAgICAgaWYgKGlk
ZW50aWZpZXIuaXNWYWxpZCkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IGFy
Yml0YXJ5IFNWRyBjb250ZW50IGFzIGdseXBoIChjdXJyZW50bHkgbGltaXRlZCB0byA8Z2x5cGgg
ZD0iLi4uIj4gc2l0dWF0aW9ucykuCi0gICAgICAgICAgICAgICAgaWYgKCFpZGVudGlmaWVyLnBh
dGhEYXRhLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBHcmFwaGljc0NvbnRleHRT
dGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmNvbnRleHQpOwotCi0gICAgICAgICAgICAgICAgICAgIGlm
IChpc1ZlcnRpY2FsVGV4dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGhPcmlnaW4u
c2V0WChpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWCAqIHNjYWxlKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGdseXBoT3JpZ2luLnNldFkoaWRlbnRpZmllci52ZXJ0aWNhbE9yaWdpblkgKiBz
Y2FsZSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBBZmZp
bmVUcmFuc2Zvcm0gZ2x5cGhQYXRoVHJhbnNmb3JtOwotICAgICAgICAgICAgICAgICAgICBnbHlw
aFBhdGhUcmFuc2Zvcm0udHJhbnNsYXRlKHhTdGFydE9mZnNldCArIGN1cnJlbnRQb2ludC54KCkg
KyBnbHlwaE9yaWdpbi54KCksIGN1cnJlbnRQb2ludC55KCkgKyBnbHlwaE9yaWdpbi55KCkpOwot
ICAgICAgICAgICAgICAgICAgICBnbHlwaFBhdGhUcmFuc2Zvcm0uc2NhbGUoc2NhbGUsIC1zY2Fs
ZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgUGF0aCBnbHlwaFBhdGggPSBpZGVudGlmaWVyLnBh
dGhEYXRhOwotICAgICAgICAgICAgICAgICAgICBnbHlwaFBhdGgudHJhbnNmb3JtKGdseXBoUGF0
aFRyYW5zZm9ybSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGl2ZVBhaW50aW5nUmVz
b3VyY2UtPmFwcGx5UmVzb3VyY2UocmVmZXJlbmNpbmdSZW5kZXJPYmplY3RQYXJlbnQsIHJlZmVy
ZW5jaW5nUmVuZGVyT2JqZWN0UGFyZW50U3R5bGUsIGNvbnRleHQsIHJlc291cmNlTW9kZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZlcmVuY2luZ1JlbmRlck9iamVjdCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlclNWR0lubGluZVRleHQqIHRleHRSZW5k
ZXJlciA9IHRvUmVuZGVyU1ZHSW5saW5lVGV4dChyZWZlcmVuY2luZ1JlbmRlck9iamVjdCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U3Ryb2tlVGhpY2tuZXNzKGNv
bnRleHQtPnN0cm9rZVRoaWNrbmVzcygpICogdGV4dFJlbmRlcmVyLT5zY2FsaW5nRmFjdG9yKCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgYWN0
aXZlUGFpbnRpbmdSZXNvdXJjZS0+cG9zdEFwcGx5UmVzb3VyY2UocmVmZXJlbmNpbmdSZW5kZXJP
YmplY3RQYXJlbnQsIGNvbnRleHQsIHJlc291cmNlTW9kZSwgJmdseXBoUGF0aCk7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAo
aXNWZXJ0aWNhbFRleHQpCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQb2ludC5tb3ZlKDAu
MGYsIGlkZW50aWZpZXIudmVydGljYWxBZHZhbmNlWSAqIHNjYWxlKTsKLSAgICAgICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQb2ludC5tb3ZlKGlkZW50aWZpZXIu
aG9yaXpvbnRhbEFkdmFuY2VYICogc2NhbGUsIDAuMGYpOwotICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICAvLyBIYW5kbGUgc3lzdGVtIGZvbnQgZmFsbGJhY2sKLSAgICAgICAg
ICAgICAgICBGb250RGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uKG1fZm9udERlc2NyaXB0aW9u
KTsKLSAgICAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWx5KEZvbnRGYW1pbHko
KSk7Ci0gICAgICAgICAgICAgICAgRm9udCBmb250KGZvbnREZXNjcmlwdGlvbiwgMCwgMCk7IC8v
IHNwYWNpbmcgaGFuZGxlZCBieSBTVkcgdGV4dCBjb2RlLgotICAgICAgICAgICAgICAgIGZvbnQu
dXBkYXRlKGZvbnRTZWxlY3RvcigpKTsKLQotICAgICAgICAgICAgICAgIFRleHRSdW4gZmFsbGJh
Y2tDaGFyYWN0ZXJSdW4ocnVuKTsKLSAgICAgICAgICAgICAgICBmYWxsYmFja0NoYXJhY3RlclJ1
bi5zZXRUZXh0KCZkYXRhLmZhbGxiYWNrQ2hhcmFjdGVyc1tydW4ucnRsKCkgPyBkYXRhLmZhbGxi
YWNrQ2hhcmFjdGVycy5zaXplKCkgLSBmYWxsYmFja0NoYXJhY3RlckluZGV4IC0gMSA6IGZhbGxi
YWNrQ2hhcmFjdGVySW5kZXhdLCAxKTsKLSAgICAgICAgICAgICAgICBmb250LmRyYXdUZXh0KGNv
bnRleHQsIGZhbGxiYWNrQ2hhcmFjdGVyUnVuLCBjdXJyZW50UG9pbnQpOwotCi0gICAgICAgICAg
ICAgICAgaWYgKGlzVmVydGljYWxUZXh0KQotICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9p
bnQubW92ZSgwLjBmLCBmb250LndpZHRoKGZhbGxiYWNrQ2hhcmFjdGVyUnVuKSk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBjdXJyZW50UG9pbnQubW92ZShmb250
LndpZHRoKGZhbGxiYWNrQ2hhcmFjdGVyUnVuKSwgMC4wZik7Ci0KLSAgICAgICAgICAgICAgICBm
YWxsYmFja0NoYXJhY3RlckluZGV4Kys7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci19Ci0KLUZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yVGV4dFVzaW5nU1ZHRm9udChj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAotewotICAgIGludCBjaGFyc0NvbnN1bWVkOwotICAgIFN0
cmluZyBnbHlwaE5hbWU7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIGZsb2F0
V2lkdGhPZlN1YlN0cmluZ1VzaW5nU1ZHRm9udCh0aGlzLCBydW4sIDAsIHJ1bi5ydGwoKSA/IHRv
IDogMCwgcnVuLnJ0bCgpID8gcnVuLmxlbmd0aCgpIDogZnJvbSwgY2hhcnNDb25zdW1lZCwgZ2x5
cGhOYW1lKSwKLSAgICAgICAgICAgICAgICAgICAgIHBvaW50LnkoKSwgZmxvYXRXaWR0aE9mU3Vi
U3RyaW5nVXNpbmdTVkdGb250KHRoaXMsIHJ1biwgMCwgZnJvbSwgdG8sIGNoYXJzQ29uc3VtZWQs
IGdseXBoTmFtZSksIGhlaWdodCk7Ci19Ci0KLWludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZv
clRleHRVc2luZ1NWR0ZvbnQoY29uc3QgVGV4dFJ1biYsIGZsb2F0LCBib29sKSBjb25zdAotewot
ICAgIC8vIFRPRE86IEZpeCB0ZXh0IHNlbGVjdGlvbiB3aGVuIEhUTUwgdGV4dCBpcyBkcmF3biB1
c2luZyBhIFNWRyBGb250Ci0gICAgLy8gV2UgbmVlZCB0byBpbnRlZ3JhdGUgdGhlIFNWRyB0ZXh0
IHNlbGVjdGlvbiBjb2RlIGluIHRoZSBvZmZzZXRGb3JQb3NpdGlvbigpIGZyYW1ld29yay4KLSAg
ICAvLyBUaGlzIHdpbGwgYWxzbyBmaXggYSBtYWpvciBpc3N1ZSwgdGhhdCBTVkcgVGV4dCBjb2Rl
IGNhbid0IHNlbGVjdCBhcmFiaWMgc3RyaW5ncyBwcm9wZXJseS4KLSAgICByZXR1cm4gMDsKLX0K
LQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAkocmV2aXNp
b24gODcxNDUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMiw2ICsyMiw5IEBACiAjaWYgRU5BQkxFKFNWR19GT05UUykKICNpbmNsdWRl
ICJTVkdGb250RGF0YS5oIgogCisjaW5jbHVkZSAiU1ZHRm9udEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJTVkdHbHlwaC5oIgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR0ZvbnREYXRhOjpTVkdG
b250RGF0YShTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCkKQEAgLTM2LDYgKzM5
LDYxIEBAIFNWR0ZvbnREYXRhOjpTVkdGb250RGF0YShTVkdGb250RmFjZUVsZW0KICAgICBBU1NF
UlRfQVJHKGZvbnRGYWNlRWxlbWVudCwgZm9udEZhY2VFbGVtZW50KTsKIH0KIAordm9pZCBTVkdG
b250RGF0YTo6aW5pdGlhbGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgaW50
IHNpemUpCit7CisgICAgQVNTRVJUKGZvbnREYXRhKTsKKworICAgIFNWR0ZvbnRGYWNlRWxlbWVu
dCogc3ZnRm9udEZhY2VFbGVtZW50ID0gdGhpcy0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CisgICAg
dW5zaWduZWQgdW5pdHNQZXJFbSA9IHN2Z0ZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJFbSgpOwor
CisgICAgZmxvYXQgc2NhbGUgPSBzaXplOworICAgIGlmICh1bml0c1BlckVtKQorICAgICAgICBz
Y2FsZSAvPSB1bml0c1BlckVtOworCisgICAgZmxvYXQgeEhlaWdodCA9IHN2Z0ZvbnRGYWNlRWxl
bWVudC0+eEhlaWdodCgpICogc2NhbGU7CisgICAgZmxvYXQgYXNjZW50ID0gc3ZnRm9udEZhY2VF
bGVtZW50LT5hc2NlbnQoKSAqIHNjYWxlOworICAgIGZsb2F0IGRlc2NlbnQgPSBzdmdGb250RmFj
ZUVsZW1lbnQtPmRlc2NlbnQoKSAqIHNjYWxlOworICAgIGZsb2F0IGxpbmVHYXAgPSAwLjFmICog
c2l6ZTsKKworICAgIFNWR0ZvbnRFbGVtZW50KiBhc3NvY2lhdGVkRm9udEVsZW1lbnQgPSBzdmdG
b250RmFjZUVsZW1lbnQtPmFzc29jaWF0ZWRGb250RWxlbWVudCgpOworICAgIGlmICgheEhlaWdo
dCkgeworICAgICAgICAvLyBGYWxsYmFjayBpZiB4X2hlaWdodEF0dHIgaXMgbm90IHNwZWNpZmll
ZCBmb3IgdGhlIGZvbnQgZWxlbWVudC4KKyAgICAgICAgVmVjdG9yPFNWR0dseXBoPiBsZXR0ZXJY
R2x5cGhzOworICAgICAgICBhc3NvY2lhdGVkRm9udEVsZW1lbnQtPmdldEdseXBoSWRlbnRpZmll
cnNGb3JTdHJpbmcoU3RyaW5nKCJ4IiwgMSksIGxldHRlclhHbHlwaHMpOworICAgICAgICB4SGVp
Z2h0ID0gbGV0dGVyWEdseXBocy5pc0VtcHR5KCkgPyAyICogYXNjZW50IC8gMyA6IGxldHRlclhH
bHlwaHMuZmlyc3QoKS5ob3Jpem9udGFsQWR2YW5jZVggKiBzY2FsZTsKKyAgICB9CisKKyAgICBG
b250TWV0cmljcyYgZm9udE1ldHJpY3MgPSBmb250RGF0YS0+Zm9udE1ldHJpY3MoKTsKKyAgICBm
b250TWV0cmljcy5zZXRVbml0c1BlckVtKHVuaXRzUGVyRW0pOworICAgIGZvbnRNZXRyaWNzLnNl
dEFzY2VudChhc2NlbnQpOworICAgIGZvbnRNZXRyaWNzLnNldERlc2NlbnQoZGVzY2VudCk7Cisg
ICAgZm9udE1ldHJpY3Muc2V0TGluZUdhcChsaW5lR2FwKTsKKyAgICBmb250TWV0cmljcy5zZXRM
aW5lU3BhY2luZyhyb3VuZGYoYXNjZW50KSArIHJvdW5kZihkZXNjZW50KSArIHJvdW5kZihsaW5l
R2FwKSk7CisgICAgZm9udE1ldHJpY3Muc2V0WEhlaWdodCh4SGVpZ2h0KTsKKworICAgIFZlY3Rv
cjxTVkdHbHlwaD4gc3BhY2VHbHlwaHM7CisgICAgYXNzb2NpYXRlZEZvbnRFbGVtZW50LT5nZXRH
bHlwaElkZW50aWZpZXJzRm9yU3RyaW5nKFN0cmluZygiICIsIDEpLCBzcGFjZUdseXBocyk7Cisg
ICAgZm9udERhdGEtPnNldFNwYWNlV2lkdGgoc3BhY2VHbHlwaHMuaXNFbXB0eSgpID8geEhlaWdo
dCA6IHNwYWNlR2x5cGhzLmZpcnN0KCkuaG9yaXpvbnRhbEFkdmFuY2VYICogc2NhbGUpOworCisg
ICAgVmVjdG9yPFNWR0dseXBoPiBudW1lcmFsWmVyb0dseXBoczsKKyAgICBhc3NvY2lhdGVkRm9u
dEVsZW1lbnQtPmdldEdseXBoSWRlbnRpZmllcnNGb3JTdHJpbmcoU3RyaW5nKCIwIiwgMSksIG51
bWVyYWxaZXJvR2x5cGhzKTsKKyAgICBmb250RGF0YS0+c2V0QXZnQ2hhcldpZHRoKG51bWVyYWxa
ZXJvR2x5cGhzLmlzRW1wdHkoKSA/IGZvbnREYXRhLT5zcGFjZVdpZHRoKCkgOiBudW1lcmFsWmVy
b0dseXBocy5maXJzdCgpLmhvcml6b250YWxBZHZhbmNlWCAqIHNjYWxlKTsKKworICAgIFZlY3Rv
cjxTVkdHbHlwaD4gbGV0dGVyV0dseXBoczsKKyAgICBhc3NvY2lhdGVkRm9udEVsZW1lbnQtPmdl
dEdseXBoSWRlbnRpZmllcnNGb3JTdHJpbmcoU3RyaW5nKCJXIiwgMSksIGxldHRlcldHbHlwaHMp
OworICAgIGZvbnREYXRhLT5zZXRNYXhDaGFyV2lkdGgobGV0dGVyV0dseXBocy5pc0VtcHR5KCkg
PyBhc2NlbnQgOiBsZXR0ZXJXR2x5cGhzLmZpcnN0KCkuaG9yaXpvbnRhbEFkdmFuY2VYICogc2Nh
bGUpOworCisgICAgLy8gRklYTUU6IGlzIHRoZXJlIGEgd2F5IHdlIGNhbiBnZXQgdGhlIHNwYWNl
IGdseXBoIGZyb20gdGhlIFNWR0dseXBoIGFib3ZlPworICAgIGZvbnREYXRhLT5zZXRTcGFjZUds
eXBoKDApOworICAgIGZvbnREYXRhLT5zZXRaZXJvV2lkdGhTcGFjZUdseXBoKDApOworICAgIGZv
bnREYXRhLT5kZXRlcm1pbmVQaXRjaCgpOworCisgICAgR2x5cGhEYXRhIG1pc3NpbmdHbHlwaERh
dGE7CisgICAgbWlzc2luZ0dseXBoRGF0YS5mb250RGF0YSA9IGZvbnREYXRhOworICAgIG1pc3Np
bmdHbHlwaERhdGEuZ2x5cGggPSAwOworICAgIGZvbnREYXRhLT5zZXRNaXNzaW5nR2x5cGhEYXRh
KG1pc3NpbmdHbHlwaERhdGEpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRp
ZgpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgJKHJldmlzaW9uIDg3MTQ1KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxLDE2ICsy
MSwyMyBAQAogI2RlZmluZSBTVkdGb250RGF0YV9oCiAKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQor
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgU1ZHRm9udERhdGEgewotICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFNWR0ZvbnREYXRhKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitjbGFzcyBTVkdGb250RGF0YSA6IHB1YmxpYyBTaW1wbGVGb250RGF0YTo6Rm9udERhdGEgewog
cHVibGljOgotICAgIFNWR0ZvbnREYXRhKFNWR0ZvbnRGYWNlRWxlbWVudCopOworICAgIHN0YXRp
YyBQYXNzT3duUHRyPFNWR0ZvbnREYXRhPiBjcmVhdGUoU1ZHRm9udEZhY2VFbGVtZW50KiBlbGVt
ZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBTVkdGb250RGF0YShlbGVt
ZW50KSk7CisgICAgfQorCiAgICAgdmlydHVhbCB+U1ZHRm9udERhdGEoKSB7IH0KIAorICAgIHZp
cnR1YWwgYm9vbCBpc1NWR0ZvbnREYXRhKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZp
cnR1YWwgdm9pZCBpbml0aWFsaXplRm9udERhdGEoU2ltcGxlRm9udERhdGEqLCBpbnQgc2l6ZSk7
CisKICAgICBTVkdGb250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlRWxlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fc3ZnRm9udEZhY2VFbGVtZW50OyB9CiAKICAgICBmbG9hdCBob3Jpem9udGFsT3Jp
Z2luWCgpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbE9yaWdpblg7IH0KQEAgLTQyLDYgKzQ5
LDggQEAgcHVibGljOgogICAgIGZsb2F0IHZlcnRpY2FsQWR2YW5jZVkoKSBjb25zdCB7IHJldHVy
biBtX3ZlcnRpY2FsQWR2YW5jZVk7IH0KIAogcHJpdmF0ZToKKyAgICBTVkdGb250RGF0YShTVkdG
b250RmFjZUVsZW1lbnQqKTsKKwogICAgIC8vIFRocyBTVkdGb250RmFjZUVsZW1lbnQgaXMga2Vw
dCBhbGl2ZSAtLQogICAgIC8vIDEpIGluIHRoZSBleHRlcm5hbCBmb250IGNhc2U6IGJ5IHRoZSBD
U1NGb250RmFjZVNvdXJjZSwgd2hpY2ggaG9sZHMgYSByZWZlcmVuY2UgdG8gdGhlIGV4dGVybmFs
IFNWRyBkb2N1bWVudAogICAgIC8vICAgIGNvbnRhaW5pbmcgdGhlIGVsZW1lbnQ7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkocmV2aXNpb24gODcxNDUpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHR2x5cGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAsMTcgKzMwLDEzIEBACiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXRoUGFyc2VyRmFjdG9yeS5oIgotI2luY2x1
ZGUgIlNpbXBsZUZvbnREYXRhLmgiCi0jaW5jbHVkZSAiWE1MTmFtZXMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi11c2luZyBuYW1lc3BhY2UgU1ZHTmFtZXM7Ci0KIGlubGluZSBTVkdHbHlw
aEVsZW1lbnQ6OlNWR0dseXBoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jdW1lbnQpCiAgICAgOiBTVkdTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvY3Vt
ZW50KQogewotICAgIEFTU0VSVChoYXNUYWdOYW1lKGdseXBoVGFnKSk7CisgICAgQVNTRVJUKGhh
c1RhZ05hbWUoU1ZHTmFtZXM6OmdseXBoVGFnKSk7CiB9CiAKIFBhc3NSZWZQdHI8U1ZHR2x5cGhF
bGVtZW50PiBTVkdHbHlwaEVsZW1lbnQ6OmNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jdW1lbnQpCkBAIC0xNTAsMjggKzE0NiwyOCBAQCB2b2lkIFNWR0ds
eXBoRWxlbWVudDo6ZmlsbEF0dHJpYnV0ZVRvUHJvCiBTVkdHbHlwaCBTVkdHbHlwaEVsZW1lbnQ6
OmJ1aWxkR2VuZXJpY0dseXBoSWRlbnRpZmllcihjb25zdCBTVkdFbGVtZW50KiBlbGVtZW50KQog
ewogICAgIFNWR0dseXBoIGlkZW50aWZpZXI7Ci0gICAgaWRlbnRpZmllci5wYXRoRGF0YSA9IHBh
cnNlUGF0aERhdGEoZWxlbWVudC0+Z2V0QXR0cmlidXRlKGRBdHRyKSk7CisgICAgaWRlbnRpZmll
ci5wYXRoRGF0YSA9IHBhcnNlUGF0aERhdGEoZWxlbWVudC0+Z2V0QXR0cmlidXRlKFNWR05hbWVz
OjpkQXR0cikpOwogIAogICAgIC8vIFNwZWM6IFRoZSBob3Jpem9udGFsIGFkdmFuY2UgYWZ0ZXIg
cmVuZGVyaW5nIHRoZSBnbHlwaCBpbiBob3Jpem9udGFsIG9yaWVudGF0aW9uLgogICAgIC8vIElm
IHRoZSBhdHRyaWJ1dGUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGVmZmVjdCBpcyBhcyBpZiB0aGUg
YXR0cmlidXRlIHdlcmUgc2V0IHRvIHRoZQogICAgIC8vIHZhbHVlIG9mIHRoZSBmb250J3MgaG9y
aXotYWR2LXggYXR0cmlidXRlLiBHbHlwaCB3aWR0aHMgYXJlIHJlcXVpcmVkIHRvIGJlIG5vbi1u
ZWdhdGl2ZSwKICAgICAvLyBldmVuIGlmIHRoZSBnbHlwaCBpcyB0eXBpY2FsbHkgcmVuZGVyZWQg
cmlnaHQtdG8tbGVmdCwgYXMgaW4gSGVicmV3IGFuZCBBcmFiaWMgc2NyaXB0cy4KLSAgICBpZGVu
dGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCA9IHBhcnNlU1ZHR2x5cGhBdHRyaWJ1dGUoZWxlbWVu
dCwgaG9yaXpfYWR2X3hBdHRyKTsKKyAgICBpZGVudGlmaWVyLmhvcml6b250YWxBZHZhbmNlWCA9
IHBhcnNlU1ZHR2x5cGhBdHRyaWJ1dGUoZWxlbWVudCwgU1ZHTmFtZXM6Omhvcml6X2Fkdl94QXR0
cik7CiAKICAgICAvLyBTcGVjOiBUaGUgWC1jb29yZGluYXRlIGluIHRoZSBmb250IGNvb3JkaW5h
dGUgc3lzdGVtIG9mIHRoZSBvcmlnaW4gb2YgdGhlIGdseXBoIHRvIGJlCiAgICAgLy8gdXNlZCB3
aGVuIGRyYXdpbmcgdmVydGljYWxseSBvcmllbnRlZCB0ZXh0LiBJZiB0aGUgYXR0cmlidXRlIGlz
IG5vdCBzcGVjaWZpZWQsIHRoZSBlZmZlY3QKICAgICAvLyBpcyBhcyBpZiB0aGUgYXR0cmlidXRl
IHdlcmUgc2V0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgZm9udCdzIHZlcnQtb3JpZ2luLXggYXR0cmli
dXRlLgotICAgIGlkZW50aWZpZXIudmVydGljYWxPcmlnaW5YID0gcGFyc2VTVkdHbHlwaEF0dHJp
YnV0ZShlbGVtZW50LCB2ZXJ0X29yaWdpbl94QXR0cik7CisgICAgaWRlbnRpZmllci52ZXJ0aWNh
bE9yaWdpblggPSBwYXJzZVNWR0dseXBoQXR0cmlidXRlKGVsZW1lbnQsIFNWR05hbWVzOjp2ZXJ0
X29yaWdpbl94QXR0cik7CiAKICAgICAvLyBTcGVjOiBUaGUgWS1jb29yZGluYXRlIGluIHRoZSBm
b250IGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBvcmlnaW4gb2YgYSBnbHlwaCB0byBiZQogICAg
IC8vIHVzZWQgd2hlbiBkcmF3aW5nIHZlcnRpY2FsbHkgb3JpZW50ZWQgdGV4dC4gSWYgdGhlIGF0
dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0CiAgICAgLy8gaXMgYXMgaWYgdGhl
IGF0dHJpYnV0ZSB3ZXJlIHNldCB0byB0aGUgdmFsdWUgb2YgdGhlIGZvbnQncyB2ZXJ0LW9yaWdp
bi15IGF0dHJpYnV0ZS4KLSAgICBpZGVudGlmaWVyLnZlcnRpY2FsT3JpZ2luWSA9IHBhcnNlU1ZH
R2x5cGhBdHRyaWJ1dGUoZWxlbWVudCwgdmVydF9vcmlnaW5feUF0dHIpOworICAgIGlkZW50aWZp
ZXIudmVydGljYWxPcmlnaW5ZID0gcGFyc2VTVkdHbHlwaEF0dHJpYnV0ZShlbGVtZW50LCBTVkdO
YW1lczo6dmVydF9vcmlnaW5feUF0dHIpOwogCiAgICAgLy8gU3BlYzogVGhlIHZlcnRpY2FsIGFk
dmFuY2UgYWZ0ZXIgcmVuZGVyaW5nIGEgZ2x5cGggaW4gdmVydGljYWwgb3JpZW50YXRpb24uCiAg
ICAgLy8gSWYgdGhlIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZWZmZWN0IGlzIGFz
IGlmIHRoZSBhdHRyaWJ1dGUgd2VyZSBzZXQgdG8gdGhlCiAgICAgLy8gdmFsdWUgb2YgdGhlIGZv
bnQncyB2ZXJ0LWFkdi15IGF0dHJpYnV0ZS4KLSAgICBpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5j
ZVkgPSBwYXJzZVNWR0dseXBoQXR0cmlidXRlKGVsZW1lbnQsIHZlcnRfYWR2X3lBdHRyKTsKKyAg
ICBpZGVudGlmaWVyLnZlcnRpY2FsQWR2YW5jZVkgPSBwYXJzZVNWR0dseXBoQXR0cmlidXRlKGVs
ZW1lbnQsIFNWR05hbWVzOjp2ZXJ0X2Fkdl95QXR0cik7CiAKICAgICByZXR1cm4gaWRlbnRpZmll
cjsKIH0KQEAgLTE3OSw5ICsxNzUsOSBAQCBTVkdHbHlwaCBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxk
R2VuZXJpY0dsCiBTVkdHbHlwaCBTVkdHbHlwaEVsZW1lbnQ6OmJ1aWxkR2x5cGhJZGVudGlmaWVy
KCkgY29uc3QKIHsKICAgICBTVkdHbHlwaCBpZGVudGlmaWVyKGJ1aWxkR2VuZXJpY0dseXBoSWRl
bnRpZmllcih0aGlzKSk7Ci0gICAgaWRlbnRpZmllci5nbHlwaE5hbWUgPSBnZXRBdHRyaWJ1dGUo
Z2x5cGhfbmFtZUF0dHIpOwotICAgIGlkZW50aWZpZXIub3JpZW50YXRpb24gPSBwYXJzZU9yaWVu
dGF0aW9uKGdldEF0dHJpYnV0ZShvcmllbnRhdGlvbkF0dHIpKTsKLSAgICBpZGVudGlmaWVyLmFy
YWJpY0Zvcm0gPSBwYXJzZUFyYWJpY0Zvcm0oZ2V0QXR0cmlidXRlKGFyYWJpY19mb3JtQXR0cikp
OworICAgIGlkZW50aWZpZXIuZ2x5cGhOYW1lID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpnbHlw
aF9uYW1lQXR0cik7CisgICAgaWRlbnRpZmllci5vcmllbnRhdGlvbiA9IHBhcnNlT3JpZW50YXRp
b24oZ2V0QXR0cmlidXRlKFNWR05hbWVzOjpvcmllbnRhdGlvbkF0dHIpKTsKKyAgICBpZGVudGlm
aWVyLmFyYWJpY0Zvcm0gPSBwYXJzZUFyYWJpY0Zvcm0oZ2V0QXR0cmlidXRlKFNWR05hbWVzOjph
cmFiaWNfZm9ybUF0dHIpKTsKIAogICAgIFN0cmluZyBsYW5ndWFnZSA9IGdldEF0dHJpYnV0ZShT
VkdOYW1lczo6bGFuZ0F0dHIpOwogICAgIGlmICghbGFuZ3VhZ2UuaXNFbXB0eSgpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDg3MTQ1KQorKysg
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0hLZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTI0LDIxICsyNCwxNiBAQAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAjaW5jbHVkZSAiU1ZHSEtl
cm5FbGVtZW50LmgiCiAKLSNpbmNsdWRlICJTVkdGb250RGF0YS5oIgogI2luY2x1ZGUgIlNWR0Zv
bnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50LmgiCiAjaW5jbHVkZSAi
U1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2luY2x1ZGUgIlhNTE5h
bWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNwYWNlIFNWR05hbWVz
OwotCiBpbmxpbmUgU1ZHSEtlcm5FbGVtZW50OjpTVkdIS2VybkVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogU1ZHRWxlbWVudCh0
YWdOYW1lLCBkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoaGFzVGFnTmFtZShoa2VyblRhZykpOwor
ICAgIEFTU0VSVChoYXNUYWdOYW1lKFNWR05hbWVzOjpoa2VyblRhZykpOwogfQogCiBQYXNzUmVm
UHRyPFNWR0hLZXJuRWxlbWVudD4gU1ZHSEtlcm5FbGVtZW50OjpjcmVhdGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAtNjgsMTAgKzYzLDEwIEBA
IHZvaWQgU1ZHSEtlcm5FbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW4KIAogdm9pZCBTVkdIS2Vy
bkVsZW1lbnQ6OmJ1aWxkSG9yaXpvbnRhbEtlcm5pbmdQYWlyKEtlcm5pbmdQYWlyVmVjdG9yJiBr
ZXJuaW5nUGFpcnMpCiB7Ci0gICAgU3RyaW5nIHUxID0gZ2V0QXR0cmlidXRlKHUxQXR0cik7Ci0g
ICAgU3RyaW5nIGcxID0gZ2V0QXR0cmlidXRlKGcxQXR0cik7Ci0gICAgU3RyaW5nIHUyID0gZ2V0
QXR0cmlidXRlKHUyQXR0cik7Ci0gICAgU3RyaW5nIGcyID0gZ2V0QXR0cmlidXRlKGcyQXR0cik7
CisgICAgU3RyaW5nIHUxID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjp1MUF0dHIpOworICAgIFN0
cmluZyBnMSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6ZzFBdHRyKTsKKyAgICBTdHJpbmcgdTIg
PSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OnUyQXR0cik7CisgICAgU3RyaW5nIGcyID0gZ2V0QXR0
cmlidXRlKFNWR05hbWVzOjpnMkF0dHIpOwogICAgIGlmICgodTEuaXNFbXB0eSgpICYmIGcxLmlz
RW1wdHkoKSkgfHwgKHUyLmlzRW1wdHkoKSAmJiBnMi5pc0VtcHR5KCkpKQogICAgICAgICByZXR1
cm47CiAKQEAgLTgwLDcgKzc1LDcgQEAgdm9pZCBTVkdIS2VybkVsZW1lbnQ6OmJ1aWxkSG9yaXpv
bnRhbEtlcgogICAgICAgICAmJiBwYXJzZUdseXBoTmFtZShnMiwga2VybmluZ1BhaXIuZ2x5cGhO
YW1lMikKICAgICAgICAgJiYgcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1MSwga2VybmluZ1Bh
aXIudW5pY29kZVJhbmdlMSwga2VybmluZ1BhaXIudW5pY29kZU5hbWUxKQogICAgICAgICAmJiBw
YXJzZUtlcm5pbmdVbmljb2RlU3RyaW5nKHUyLCBrZXJuaW5nUGFpci51bmljb2RlUmFuZ2UyLCBr
ZXJuaW5nUGFpci51bmljb2RlTmFtZTIpKSB7Ci0gICAgICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcg
PSBnZXRBdHRyaWJ1dGUoa0F0dHIpLnN0cmluZygpLnRvRmxvYXQoKTsKKyAgICAgICAga2Vybmlu
Z1BhaXIua2VybmluZyA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6a0F0dHIpLnN0cmluZygpLnRv
RmxvYXQoKTsKICAgICAgICAga2VybmluZ1BhaXJzLmFwcGVuZChrZXJuaW5nUGFpcik7CiAgICAg
fQogfQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAJKHJldmlzaW9u
IDg3MTQ1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIyLDIxICsyMiwxNiBAQAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAjaW5j
bHVkZSAiU1ZHVktlcm5FbGVtZW50LmgiCiAKLSNpbmNsdWRlICJTVkdGb250RGF0YS5oIgogI2lu
Y2x1ZGUgIlNWR0ZvbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHRm9udEZhY2VFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKLSNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgotI2lu
Y2x1ZGUgIlhNTE5hbWVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdXNpbmcgbmFtZXNw
YWNlIFNWR05hbWVzOwotCiBpbmxpbmUgU1ZHVktlcm5FbGVtZW50OjpTVkdWS2VybkVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDog
U1ZHRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCkKIHsKLSAgICBBU1NFUlQoaGFzVGFnTmFtZSh2
a2VyblRhZykpOworICAgIEFTU0VSVChoYXNUYWdOYW1lKFNWR05hbWVzOjp2a2VyblRhZykpOwog
fQogCiBQYXNzUmVmUHRyPFNWR1ZLZXJuRWxlbWVudD4gU1ZHVktlcm5FbGVtZW50OjpjcmVhdGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQpAQCAtNjYs
MTAgKzYxLDEwIEBAIHZvaWQgU1ZHVktlcm5FbGVtZW50OjpyZW1vdmVkRnJvbURvY3VtZW4KIAog
dm9pZCBTVkdWS2VybkVsZW1lbnQ6OmJ1aWxkVmVydGljYWxLZXJuaW5nUGFpcihLZXJuaW5nUGFp
clZlY3RvciYga2VybmluZ1BhaXJzKQogewotICAgIFN0cmluZyB1MSA9IGdldEF0dHJpYnV0ZSh1
MUF0dHIpOwotICAgIFN0cmluZyBnMSA9IGdldEF0dHJpYnV0ZShnMUF0dHIpOwotICAgIFN0cmlu
ZyB1MiA9IGdldEF0dHJpYnV0ZSh1MkF0dHIpOwotICAgIFN0cmluZyBnMiA9IGdldEF0dHJpYnV0
ZShnMkF0dHIpOworICAgIFN0cmluZyB1MSA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6dTFBdHRy
KTsKKyAgICBTdHJpbmcgZzEgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmcxQXR0cik7CisgICAg
U3RyaW5nIHUyID0gZ2V0QXR0cmlidXRlKFNWR05hbWVzOjp1MkF0dHIpOworICAgIFN0cmluZyBn
MiA9IGdldEF0dHJpYnV0ZShTVkdOYW1lczo6ZzJBdHRyKTsKICAgICBpZiAoKHUxLmlzRW1wdHko
KSAmJiBnMS5pc0VtcHR5KCkpIHx8ICh1Mi5pc0VtcHR5KCkgJiYgZzIuaXNFbXB0eSgpKSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC03OCw3ICs3Myw3IEBAIHZvaWQgU1ZHVktlcm5FbGVtZW50Ojpi
dWlsZFZlcnRpY2FsS2VybmkKICAgICAgICAgJiYgcGFyc2VHbHlwaE5hbWUoZzIsIGtlcm5pbmdQ
YWlyLmdseXBoTmFtZTIpCiAgICAgICAgICYmIHBhcnNlS2VybmluZ1VuaWNvZGVTdHJpbmcodTEs
IGtlcm5pbmdQYWlyLnVuaWNvZGVSYW5nZTEsIGtlcm5pbmdQYWlyLnVuaWNvZGVOYW1lMSkKICAg
ICAgICAgJiYgcGFyc2VLZXJuaW5nVW5pY29kZVN0cmluZyh1Miwga2VybmluZ1BhaXIudW5pY29k
ZVJhbmdlMiwga2VybmluZ1BhaXIudW5pY29kZU5hbWUyKSkgewotICAgICAgICBrZXJuaW5nUGFp
ci5rZXJuaW5nID0gZ2V0QXR0cmlidXRlKGtBdHRyKS5zdHJpbmcoKS50b0Zsb2F0KCk7CisgICAg
ICAgIGtlcm5pbmdQYWlyLmtlcm5pbmcgPSBnZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmtBdHRyKS5z
dHJpbmcoKS50b0Zsb2F0KCk7CiAgICAgICAgIGtlcm5pbmdQYWlycy5hcHBlbmQoa2VybmluZ1Bh
aXIpOwogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdWS2VybkVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVktlcm5FbGVtZW50LmgJKHJl
dmlzaW9uIDg3MTQ1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1ZLZXJuRWxlbWVudC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
Y2xhc3MgU1ZHRm9udERhdGE7Ci0KIGNsYXNzIFNWR1ZLZXJuRWxlbWVudCA6IHB1YmxpYyBTVkdF
bGVtZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTVkdWS2VybkVsZW1lbnQ+
IGNyZWF0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
</data>
<flag name="review"
          id="87917"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>