<?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>62530</bug_id>
          
          <creation_ts>2011-06-12 23:13:58 -0700</creation_ts>
          <short_desc>[Chromium] Remove dependencies on harfbuzz from FontPlatformDataLinux and FontLinux</short_desc>
          <delta_ts>2011-06-28 23:10:37 -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>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenichi Ishibashi">bashi</reporter>
          <assigned_to name="Kenichi Ishibashi">bashi</assigned_to>
          <cc>evan</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>419441</commentid>
    <comment_count>0</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-06-12 23:13:58 -0700</bug_when>
    <thetext>The current FontPlatformDataLinux and FontLinux classes depends on the harfbuzz APIs.  It would be better to remove these dependencies since we are going to switch harfbuzz to harfbuzz-ng.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419449</commentid>
    <comment_count>1</comment_count>
      <attachid>96925</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-06-12 23:43:54 -0700</bug_when>
    <thetext>Created attachment 96925
Patch V0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420523</commentid>
    <comment_count>2</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-14 10:10:48 -0700</bug_when>
    <thetext>Evan would be an appropriate reviewer for this, but he is on vacation this week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427603</commentid>
    <comment_count>3</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-06-26 18:05:18 -0700</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427757</commentid>
    <comment_count>4</comment_count>
      <attachid>96925</attachid>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-06-27 01:09:53 -0700</bug_when>
    <thetext>Comment on attachment 96925
Patch V0

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

I&apos;m not an expert in this area. So let me try a review just for style nits.

&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:-105
&gt; -    const unsigned width() const { return m_pixelWidth; }

How about just to move this to private?
It makes change smaller - and having an accessor is not bad in any time.

&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:113
&gt; +    int offsetForPosition(int);

const?

&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:114
&gt; +    FloatRect selectionRect(const FloatPoint&amp;, int, int, int);

const?

&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:130
&gt; +    int glyphIndexForXPositionInScriptRun(int targetX);

const?

&gt; Source/WebCore/platform/graphics/chromium/FontLinux.cpp:247
&gt;                                            bool includePartialGlyphs) const

Ditto to selectionRectForComplexText.

&gt; Source/WebCore/platform/graphics/chromium/FontLinux.cpp:273
&gt;      controller.setWordSpacingAdjustment(wordSpacing());

If you can move these setter invocations into another consructor, you can call ComplexTextcontroller(....).selectionRect(...); 
What do you think?

&gt; Source/WebCore/platform/graphics/chromium/FontLinux.cpp:278
&gt;          controller.reset(controller.widthOfFullRun());

How about to extract this if (run.rtl()) block into some function like setRTL() ?

&gt; Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.cpp:-34
&gt; -#include &quot;HarfbuzzSkia.h&quot;

You can move this to .cpp if you move constructors and the destructor.

&gt; Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.h:36
&gt; +#include &quot;HarfbuzzSkia.h&quot;

Isn&apos;t a forward declaration enough?

&gt; Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.h:61
&gt; +HB_Font_* allocHarfbuzzFont();

I know you don&apos;t write this.
But it looks horrible idea to have asymmetric alloc/free function.
A possible idea is to subclass HB_ShaperItem as a, namely, HarfBuzzShaperItem. Then you can define its constructor and destructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427836</commentid>
    <comment_count>5</comment_count>
      <attachid>98696</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-06-27 03:58:16 -0700</bug_when>
    <thetext>Created attachment 98696
Patch V1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427837</commentid>
    <comment_count>6</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-06-27 04:03:42 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=96925&amp;action=review

Hi Morita-san,

Thank you for review! I&apos;ve addressed your comments. As mentioned below, I didn&apos;t address removing asymmetric alloc/free problem because I&apos;ll remove the function in the future.

Regards,

&gt;&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:-105
&gt;&gt; -    const unsigned width() const { return m_pixelWidth; }
&gt; 
&gt; How about just to move this to private?
&gt; It makes change smaller - and having an accessor is not bad in any time.

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:113
&gt;&gt; +    int offsetForPosition(int);
&gt; 
&gt; const?

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:114
&gt;&gt; +    FloatRect selectionRect(const FloatPoint&amp;, int, int, int);
&gt; 
&gt; const?

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:130
&gt;&gt; +    int glyphIndexForXPositionInScriptRun(int targetX);
&gt; 
&gt; const?

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/FontLinux.cpp:247
&gt;&gt;                                            bool includePartialGlyphs) const
&gt; 
&gt; Ditto to selectionRectForComplexText.

Ditto to selectionRectForComplexText.

&gt;&gt; Source/WebCore/platform/graphics/chromium/FontLinux.cpp:273
&gt;&gt;      controller.setWordSpacingAdjustment(wordSpacing());
&gt; 
&gt; If you can move these setter invocations into another consructor, you can call ComplexTextcontroller(....).selectionRect(...); 
&gt; What do you think?

These setters are always called after construction, so I&apos;ve moved these invocations into the constructor.  However, I didn&apos;t change the code like ComplexTextController(...).selectionRect(...) because we need to call setupRTL() if the run is rtl and I don&apos;t want to call it if it&apos;s not necessary.

&gt;&gt; Source/WebCore/platform/graphics/chromium/FontLinux.cpp:278
&gt;&gt;          controller.reset(controller.widthOfFullRun());
&gt; 
&gt; How about to extract this if (run.rtl()) block into some function like setRTL() ?

Added it as setupRTL().

&gt;&gt; Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.cpp:-34
&gt;&gt; -#include &quot;HarfbuzzSkia.h&quot;
&gt; 
&gt; You can move this to .cpp if you move constructors and the destructor.

I couldn&apos;t do this because it is needed in .h.

&gt;&gt; Source/WebCore/platform/graphics/chromium/FontPlatformDataLinux.h:36
&gt;&gt; +#include &quot;HarfbuzzSkia.h&quot;
&gt; 
&gt; Isn&apos;t a forward declaration enough?

I&apos;ve tried it, but RefPtr requires the definition of the type.

&gt;&gt; Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.h:61
&gt;&gt; +HB_Font_* allocHarfbuzzFont();
&gt; 
&gt; I know you don&apos;t write this.
&gt; But it looks horrible idea to have asymmetric alloc/free function.
&gt; A possible idea is to subclass HB_ShaperItem as a, namely, HarfBuzzShaperItem. Then you can define its constructor and destructor.

I definitely agree with you, but once we move to use new harfbuzz APIs, this won&apos;t be needed anymore and I&apos;ll remove this function so I&apos;d like to keep it for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428115</commentid>
    <comment_count>7</comment_count>
      <attachid>98696</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-27 11:19:04 -0700</bug_when>
    <thetext>Comment on attachment 98696
Patch V1

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

In general, looks fine.  Just some style nits.

&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:114
&gt; +    const int offsetForPosition(int);
&gt; +    const FloatRect selectionRect(const FloatPoint&amp;, int, int, int);

I think morrita meant to put const at the end of the function (e.g., int offsetForPosition(int) const).

Can you name the parameters in selectionRect()?  It&apos;s confusing when there are multiple ints passed in.

&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:118
&gt; +    const unsigned width() const { return m_pixelWidth; }

Remove the first const.

&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:133
&gt; +    const int glyphIndexForXPositionInScriptRun(int targetX);

const at the end.

&gt; Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.h:56
&gt; +    HarfbuzzFace(FontPlatformData*);

explicit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428458</commentid>
    <comment_count>8</comment_count>
      <attachid>98817</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-06-27 17:09:56 -0700</bug_when>
    <thetext>Created attachment 98817
Patch V2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428464</commentid>
    <comment_count>9</comment_count>
      <attachid>98819</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-06-27 17:18:46 -0700</bug_when>
    <thetext>Created attachment 98819
Patch V3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428471</commentid>
    <comment_count>10</comment_count>
      <attachid>98696</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-06-27 17:22:47 -0700</bug_when>
    <thetext>Comment on attachment 98696
Patch V1

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

Hi Tony,

Thank you for review!

&gt;&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:114
&gt;&gt; +    const FloatRect selectionRect(const FloatPoint&amp;, int, int, int);
&gt; 
&gt; I think morrita meant to put const at the end of the function (e.g., int offsetForPosition(int) const).
&gt; 
&gt; Can you name the parameters in selectionRect()?  It&apos;s confusing when there are multiple ints passed in.

Named the parameters in selectionRect().  I wanted to put const these functions, but they call nextScriptRun(), which certainly changes the state of the ComplexTextController so I couldn&apos;t make them const.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:118
&gt;&gt; +    const unsigned width() const { return m_pixelWidth; }
&gt; 
&gt; Remove the first const.

Done.

&gt;&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:133
&gt;&gt; +    const int glyphIndexForXPositionInScriptRun(int targetX);
&gt; 
&gt; const at the end.

Done. (Patch V2 didn&apos;t address this)

&gt;&gt; Source/WebCore/platform/graphics/chromium/HarfbuzzSkia.h:56
&gt;&gt; +    HarfbuzzFace(FontPlatformData*);
&gt; 
&gt; explicit

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>428946</commentid>
    <comment_count>11</comment_count>
      <attachid>98819</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-28 10:23:59 -0700</bug_when>
    <thetext>Comment on attachment 98819
Patch V3

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

&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:92
&gt; +    // setupForRTL sets up the controller to handle RTL text.

Nit: I would remove this comment because it doesn&apos;t tell us anything useful.

&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:114
&gt; +    const int offsetForPosition(int);
&gt; +    const FloatRect selectionRect(const FloatPoint&amp;, int height, int from , int to);

I would remove the const in front.  They don&apos;t really do anything.

&gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:133
&gt; +    const int glyphIndexForXPositionInScriptRun(int targetX) const;

This one too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429438</commentid>
    <comment_count>12</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-06-28 23:02:34 -0700</bug_when>
    <thetext>Committed r89988: &lt;http://trac.webkit.org/changeset/89988&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>429442</commentid>
    <comment_count>13</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2011-06-28 23:10:37 -0700</bug_when>
    <thetext>Hi Tony,

Thank you for r+. I&apos;ve addressed your comments and added initialization of m_padError field (I forgot to move it from constructor to setPadding()).

Regards,

(In reply to comment #11)
&gt; (From update of attachment 98819 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98819&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:92
&gt; &gt; +    // setupForRTL sets up the controller to handle RTL text.
&gt; 
&gt; Nit: I would remove this comment because it doesn&apos;t tell us anything useful.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:114
&gt; &gt; +    const int offsetForPosition(int);
&gt; &gt; +    const FloatRect selectionRect(const FloatPoint&amp;, int height, int from , int to);
&gt; 
&gt; I would remove the const in front.  They don&apos;t really do anything.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/chromium/ComplexTextControllerLinux.h:133
&gt; &gt; +    const int glyphIndexForXPositionInScriptRun(int targetX) const;
&gt; 
&gt; This one too.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96925</attachid>
            <date>2011-06-12 23:43:54 -0700</date>
            <delta_ts>2011-06-27 03:58:11 -0700</delta_ts>
            <desc>Patch V0</desc>
            <filename>bug-62530-20110613154352.patch</filename>
            <type>text/plain</type>
            <size>24827</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg2MjAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBmZmNjMzM5YTk5YTMyNWE0
NTlmZjU1ZGJhYmY4YzA4NmVhNTU0MDMzLi40NzE2Y2ZmMjkwODk1ZGJhZWU3MjRkN2FjNWI1ZTNm
OGJhM2NkNTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDYtMTIgIEtlbmlj
aGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGRlcGVuZGVuY2ll
cyBvbiBoYXJmYnV6eiBmcm9tIEZvbnRQbGF0Zm9ybURhdGFMaW51eCBhbmQgRm9udExpbnV4Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjUzMAorCisg
ICAgICAgIC0gTW92ZWQgY29kZXMgb2YgRm9udExpbnV4IHdoaWNoIGRlcGVuZCBvbiBoYXJmYnV6
eiBBUElzIHRvIENvbXBsZXhUZXh0Q29udHJvbGxlci4gIFJlbW92ZWQgU29tZSBtZXRob2RzIG9m
IENvbXBsZXhUZXh0Q29udHJvbGxlcih3aWR0aCgpLCBhZHZhbmNlcygpLCBhbmQgbG9nQ2x1c3Rl
cnMoKSkgc2luY2UgdGhlcmUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgLSBNb3ZlZCBS
ZWZDb3VudGVkSGFyZmJ1enpGYWNlIGZyb20gRm9udFBsYXRmb3JtRGF0YUxpbnV4IHRvIEhhcmZi
dXp6U2tpYSBhbmQgcmVuYW1lZCBpdCB0byBIYXJmYnV6ekZhY2UuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlIChUaGUgZXhpc3Rpbmcg
dGVzdHMgc2hvdWxkIGNvdmVyIHRoZSBjaGFuZ2VzKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6d2lkdGhPZkZ1bGxSdW4pOiBVc2UgbV9w
aXhlbFdpZHRoIGluc3RlYWQgb2YgcmVtb3ZlZCBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpD
b21wbGV4VGV4dENvbnRyb2xsZXI6OnNldHVwRm9udEZvclNjcmlwdFJ1bik6IEFkb3B0IHRoZSBj
aGFuZ2Ugb2YgSGFyZmJ1enpGYWNlIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRl
eHRDb250cm9sbGVyOjpzZXRHbHlwaFBvc2l0aW9ucyk6IFVzZSBtX2l0ZW0ubG9nX2NsdXN0ZXJz
IGluc3RlYWQgb2YgcmVtb3ZlZCBtZXRob2QuCisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4
dENvbnRyb2xsZXI6OmdseXBoSW5kZXhGb3JYUG9zaXRpb25JblNjcmlwdFJ1bik6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpvZmZzZXRGb3JQb3NpdGlv
bik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpzZWxl
Y3Rpb25SZWN0KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29tcGxleFRleHRDb250cm9sbGVyTGludXguaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Gb250TGludXguY3BwOiBSZW1vdmVkIHRydW5jYXRlRml4ZWRQb2ludFRvSW50
ZWdlcigpLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21w
bGV4VGV4dCk6IE1vdmVkIGhhcmZidXp6IGRlcGVuZGVudCBjb2RlIHRvIENvbXBsZXhUZXh0Q29u
dHJvbGxlci4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4
VGV4dCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQ
bGF0Zm9ybURhdGFMaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpoYXJmYnV6ekZhY2UpOiBXcmFwcGVkIHVwIEhCX0ZhY2VSZWMgaW4gSGFyZmJ1enpGYWNlIGNs
YXNzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURh
dGFMaW51eC5oOiBNb3ZlZCBSZWZDb3VudGVkSGFyZmJ1enpGYWNlIGNsYXNzIGFuZCByZW5hbWVk
IHRvIEhhcmZidXp6RmFjZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9I
YXJmYnV6elNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWxsb2NIYXJmYnV6ekZvbnQpOiBN
b3ZlZCBmcm9tIENvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcAorICAgICAgICAoV2ViQ29y
ZTo6SGFyZmJ1enpGYWNlOjpIYXJmYnV6ekZhY2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkhhcmZidXp6RmFjZTo6fkhhcmZidXp6RmFjZSk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5oOgorICAgICAgICAoV2ViQ29yZTo6SGFy
ZmJ1enpGYWNlOjpjcmVhdGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZidXp6RmFj
ZTo6ZmFjZSk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQ
YWdlVHJlZU5vZGVTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN1YnN0aXR1dGVXaXRoVmVy
dGljYWxHbHlwaHMpOiBBZG9wdCAgdGhlIGNoYW5nZSBvZiBIYXJmYnV6ekZhY2UgY2xhc3MuCisK
IDIwMTEtMDYtMTIgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBG
aXggZnVsbHNjcmVlbi9mdWxsLXNjcmVlbi1pZnJhbWUtbGVnYWN5Lmh0bWwuCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENv
bnRyb2xsZXJMaW51eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5jcHAKaW5kZXggYmMxNWI5NGQ2ZGNhNDg2
M2JkYjQ2Yzk1MDRiNDRjYjI5MzU2OGUwZC4uNTRmYTlkOWVmYmI2M2I2NzNlODkyMGNmNjJjMDA1
Nzk4YjhiNTUwMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4
LmNwcApAQCAtMzEsOSArMzEsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJD
b21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oIgogCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKIAorZXh0ZXJuICJDIiB7Cisj
aW5jbHVkZSAiaGFyZmJ1enotdW5pY29kZS5oIgorfQorCiAjaW5jbHVkZSA8dW5pY29kZS9ub3Jt
bHpyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTE4MSw3ICsxODYsNyBAQCBmbG9hdCBD
b21wbGV4VGV4dENvbnRyb2xsZXI6OndpZHRoT2ZGdWxsUnVuKCkKIHsKICAgICBmbG9hdCB3aWR0
aFN1bSA9IDA7CiAgICAgd2hpbGUgKG5leHRTY3JpcHRSdW4oKSkKLSAgICAgICAgd2lkdGhTdW0g
Kz0gd2lkdGgoKTsKKyAgICAgICAgd2lkdGhTdW0gKz0gbV9waXhlbFdpZHRoOwogCiAgICAgcmV0
dXJuIHdpZHRoU3VtOwogfQpAQCAtMjAyLDcgKzIwNyw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjpzZXR1cEZvbnRGb3JTY3JpcHRSdW4oKQogICAgIH0KICAgICBjb25zdCBGb250RGF0
YSogZm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihtX2l0ZW0uc3RyaW5n
W21faXRlbS5pdGVtLnBvc10sIGZhbHNlLCBmb250RGF0YVZhcmlhbnQpLmZvbnREYXRhOwogICAg
IGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnREYXRhLT5mb250RGF0
YUZvckNoYXJhY3RlcignICcpLT5wbGF0Zm9ybURhdGEoKTsKLSAgICBtX2l0ZW0uZmFjZSA9IHBs
YXRmb3JtRGF0YS5oYXJmYnV6ekZhY2UoKTsKKyAgICBtX2l0ZW0uZmFjZSA9IHBsYXRmb3JtRGF0
YS5oYXJmYnV6ekZhY2UoKS0+ZmFjZSgpOwogICAgIHZvaWQqIG9wYXF1ZVBsYXRmb3JtRGF0YSA9
IGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KCZwbGF0Zm9ybURhdGEpOwogICAgIG1faXRl
bS5mb250LT51c2VyRGF0YSA9IG9wYXF1ZVBsYXRmb3JtRGF0YTsKIApAQCAtMjE3LDE2ICsyMjIs
NiBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0dXBGb250Rm9yU2NyaXB0UnVuKCkK
ICAgICBtX2l0ZW0uZm9udC0+eV9zY2FsZSA9IHNjYWxlOwogfQogCi1IQl9Gb250UmVjKiBDb21w
bGV4VGV4dENvbnRyb2xsZXI6OmFsbG9jSGFyZmJ1enpGb250KCkKLXsKLSAgICBIQl9Gb250UmVj
KiBmb250ID0gcmVpbnRlcnByZXRfY2FzdDxIQl9Gb250UmVjKj4oZmFzdE1hbGxvYyhzaXplb2Yo
SEJfRm9udFJlYykpKTsKLSAgICBtZW1zZXQoZm9udCwgMCwgc2l6ZW9mKEhCX0ZvbnRSZWMpKTsK
LSAgICBmb250LT5rbGFzcyA9ICZoYXJmYnV6elNraWFDbGFzczsKLSAgICBmb250LT51c2VyRGF0
YSA9IDA7Ci0KLSAgICByZXR1cm4gZm9udDsKLX0KLQogdm9pZCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OmRlbGV0ZUdseXBoQXJyYXlzKCkKIHsKICAgICBkZWxldGVbXSBtX2l0ZW0uZ2x5cGhzOwpA
QCAtMjk3LDcgKzI5Miw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZXRHbHlwaFBv
c2l0aW9ucyhib29sIGlzUlRMKQogICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZ2x5cGhzIGlu
IGxvZ2ljYWwgb3JkZXIsIGZsaXBwaW5nIGZvciBSVEwgd2hlcmUgbmVjZXNzYXJ5LgogICAgIC8v
IEdseXBocyBhcmUgcG9zaXRpb25lZCBzdGFydGluZyBmcm9tIG1fb2Zmc2V0WDsgaW4gUlRMIG1v
ZGUgdGhleSBnbyBsZWZ0d2FyZHMgZnJvbSB0aGVyZS4KICAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1faXRlbS5udW1fZ2x5cGhzOyArK2kpIHsKLSAgICAgICAgd2hpbGUgKHN0YXRpY19jYXN0
PHVuc2lnbmVkPihsb2dDbHVzdGVyc0luZGV4KSA8IG1faXRlbS5pdGVtLmxlbmd0aCAmJiBsb2dD
bHVzdGVycygpW2xvZ0NsdXN0ZXJzSW5kZXhdIDwgaSkKKyAgICAgICAgd2hpbGUgKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsb2dDbHVzdGVyc0luZGV4KSA8IG1faXRlbS5pdGVtLmxlbmd0aCAmJiBt
X2l0ZW0ubG9nX2NsdXN0ZXJzW2xvZ0NsdXN0ZXJzSW5kZXhdIDwgaSkKICAgICAgICAgICAgIGxv
Z0NsdXN0ZXJzSW5kZXgrKzsKIAogICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBnbHlwaCBpcyBq
dXN0IGFmdGVyIGEgc3BhY2UsIGFkZCBpbiB0aGUgd29yZCBzcGFjaW5nLgpAQCAtMzk5LDQgKzM5
NCw5NiBAQCBjb25zdCBUZXh0UnVuJiBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmdldE5vcm1hbGl6
ZWRUZXh0UnVuKGNvbnN0IFRleHRSdW4mIG9yaWdpbgogICAgIHJldHVybiAqbm9ybWFsaXplZFJ1
bjsKIH0KIAoraW50IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2x5cGhJbmRleEZvclhQb3NpdGlv
bkluU2NyaXB0UnVuKGludCB0YXJnZXRYKQoreworICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUg
Z2x5cGhzIGluIGxvZ2ljYWwgb3JkZXIsIHNlZWluZyB3aGV0aGVyIHRhcmdldFggZmFsbHMgYmV0
d2VlbiB0aGUgcHJldmlvdXMKKyAgICAvLyBwb3NpdGlvbiBhbmQgaGFsZndheSB0aHJvdWdoIHRo
ZSBjdXJyZW50IGdseXBoLgorICAgIC8vIEZJWE1FOiB0aGlzIGNvZGUgcHJvYmFibHkgYmVsb25n
cyBpbiBDb21wbGV4VGV4dENvbnRyb2xsZXIuCisgICAgaW50IGxhc3RYID0gb2Zmc2V0WCgpIC0g
KHJ0bCgpID8gLW1fcGl4ZWxXaWR0aCA6IG1fcGl4ZWxXaWR0aCk7CisgICAgZm9yIChpbnQgZ2x5
cGhJbmRleCA9IDA7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihnbHlwaEluZGV4KSA8IGxlbmd0aCgp
OyArK2dseXBoSW5kZXgpIHsKKyAgICAgICAgaW50IGFkdmFuY2UgPSB0cnVuY2F0ZUZpeGVkUG9p
bnRUb0ludGVnZXIobV9pdGVtLmFkdmFuY2VzW2dseXBoSW5kZXhdKTsKKyAgICAgICAgaW50IG5l
eHRYID0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbnMoKVtnbHlwaEluZGV4XS54KCkpICsgYWR2
YW5jZSAvIDI7CisgICAgICAgIGlmIChzdGQ6Om1pbihuZXh0WCwgbGFzdFgpIDw9IHRhcmdldFgg
JiYgdGFyZ2V0WCA8PSBzdGQ6Om1heChuZXh0WCwgbGFzdFgpKQorICAgICAgICAgICAgcmV0dXJu
IGdseXBoSW5kZXg7CisgICAgICAgIGxhc3RYID0gbmV4dFg7CisgICAgfQorCisgICAgcmV0dXJu
IGxlbmd0aCgpIC0gMTsKK30KKworaW50IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6b2Zmc2V0Rm9y
UG9zaXRpb24oaW50IHRhcmdldFgpCit7CisgICAgdW5zaWduZWQgYmFzZVBvc2l0aW9uID0gMDsK
KworICAgIGludCB4ID0gb2Zmc2V0WCgpOworICAgIHdoaWxlIChuZXh0U2NyaXB0UnVuKCkpIHsK
KyAgICAgICAgaW50IG5leHRYID0gb2Zmc2V0WCgpOworCisgICAgICAgIGlmIChzdGQ6Om1pbih4
LCBuZXh0WCkgPD0gdGFyZ2V0WCAmJiB0YXJnZXRYIDw9IHN0ZDo6bWF4KHgsIG5leHRYKSkgewor
ICAgICAgICAgICAgLy8gVGhlIHggdmFsdWUgaW4gcXVlc3Rpb24gaXMgd2l0aGluIHRoaXMgc2Ny
aXB0IHJ1bi4KKyAgICAgICAgICAgIGNvbnN0IGludCBnbHlwaEluZGV4ID0gZ2x5cGhJbmRleEZv
clhQb3NpdGlvbkluU2NyaXB0UnVuKHRhcmdldFgpOworCisgICAgICAgICAgICAvLyBOb3cgdGhh
dCB3ZSBoYXZlIGEgZ2x5cGggaW5kZXgsIHdlIGhhdmUgdG8gdHVybiB0aGF0IGludG8gYQorICAg
ICAgICAgICAgLy8gY29kZS1wb2ludCBpbmRleC4gQmVjYXVzZSBvZiBsaWdhdHVyZXMsIHNldmVy
YWwgY29kZS1wb2ludHMgbWF5CisgICAgICAgICAgICAvLyBoYXZlIGdvbmUgaW50byBhIHNpbmds
ZSBnbHlwaC4gV2UgaXRlcmF0ZSBvdmVyIHRoZSBjbHVzdGVycyBsb2cKKyAgICAgICAgICAgIC8v
IGFuZCBmaW5kIHRoZSBmaXJzdCBjb2RlLXBvaW50IHdoaWNoIGNvbnRyaWJ1dGVkIHRvIHRoZSBn
bHlwaC4KKworICAgICAgICAgICAgLy8gU29tZSBzaGFwZXJzIChpLmUuIEtobWVyKSB3aWxsIHBy
b2R1Y2UgY2x1c3RlciBsb2dzIHdoaWNoIHJlcG9ydAorICAgICAgICAgICAgLy8gdGhhdCAvbm8v
IGNvZGUgcG9pbnRzIGNvbnRyaWJ1dGVkIHRvIGNlcnRhaW4gZ2x5cGhzLiBCZWNhdXNlIG9mCisg
ICAgICAgICAgICAvLyB0aGlzLCB3ZSB0YWtlIGFueSBjb2RlIHBvaW50IHdoaWNoIGNvbnRyaWJ1
dGVkIHRvIHRoZSBnbHlwaCBpbgorICAgICAgICAgICAgLy8gcXVlc3Rpb24sIG9yIGFueSBzdWJz
ZXF1ZW50IGdseXBoLiBJZiB3ZSBydW4gb2ZmIHRoZSBlbmQsIHRoZW4KKyAgICAgICAgICAgIC8v
IHdlIHRha2UgdGhlIGxhc3QgY29kZSBwb2ludC4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aiA9IDA7IGogPCBudW1Db2RlUG9pbnRzKCk7ICsraikgeworICAgICAgICAgICAgICAgIGlmICht
X2l0ZW0ubG9nX2NsdXN0ZXJzW2pdID49IGdseXBoSW5kZXgpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBiYXNlUG9zaXRpb24gKyBqOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBy
ZXR1cm4gYmFzZVBvc2l0aW9uICsgbnVtQ29kZVBvaW50cygpIC0gMTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJhc2VQb3NpdGlvbiArPSBudW1Db2RlUG9pbnRzKCk7CisgICAgfQorCisgICAgcmV0
dXJuIGJhc2VQb3NpdGlvbjsKK30KKworRmxvYXRSZWN0IENvbXBsZXhUZXh0Q29udHJvbGxlcjo6
c2VsZWN0aW9uUmVjdChjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGhlaWdodCwgaW50IGZy
b20sIGludCB0bykKK3sKKyAgICBpbnQgZnJvbVggPSAtMSwgdG9YID0gLTE7CisgICAgLy8gSXRl
cmF0ZSB0aHJvdWdoIHRoZSBzY3JpcHQgcnVucyBpbiBsb2dpY2FsIG9yZGVyLCBzZWFyY2hpbmcg
Zm9yIHRoZSBydW4gY292ZXJpbmcgdGhlIHBvc2l0aW9ucyBvZiBpbnRlcmVzdC4KKyAgICB3aGls
ZSAobmV4dFNjcmlwdFJ1bigpICYmIChmcm9tWCA9PSAtMSB8fCB0b1ggPT0gLTEpKSB7CisgICAg
ICAgIGlmIChmcm9tWCA9PSAtMSAmJiBmcm9tID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGZyb20pIDwgbnVtQ29kZVBvaW50cygpKSB7CisgICAgICAgICAgICAvLyB8ZnJvbXwgaXMgd2l0
aGluIHRoaXMgc2NyaXB0IHJ1bi4gU28gd2UgaW5kZXggdGhlIGNsdXN0ZXJzIGxvZyB0bworICAg
ICAgICAgICAgLy8gZmluZCB3aGljaCBnbHlwaCB0aGlzIGNvZGUtcG9pbnQgY29udHJpYnV0ZWQg
dG8gYW5kIGZpbmQgaXRzIHgKKyAgICAgICAgICAgIC8vIHBvc2l0aW9uLgorICAgICAgICAgICAg
aW50IGdseXBoID0gbV9pdGVtLmxvZ19jbHVzdGVyc1tmcm9tXTsKKyAgICAgICAgICAgIGZyb21Y
ID0gcG9zaXRpb25zKClbZ2x5cGhdLngoKTsKKyAgICAgICAgICAgIGlmIChydGwoKSkKKyAgICAg
ICAgICAgICAgICBmcm9tWCArPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLmFk
dmFuY2VzW2dseXBoXSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZnJvbSAtPSBudW1D
b2RlUG9pbnRzKCk7CisKKyAgICAgICAgaWYgKHRvWCA9PSAtMSAmJiB0byA+PSAwICYmIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPih0bykgPCBudW1Db2RlUG9pbnRzKCkpIHsKKyAgICAgICAgICAgIGlu
dCBnbHlwaCA9IG1faXRlbS5sb2dfY2x1c3RlcnNbdG9dOworICAgICAgICAgICAgdG9YID0gcG9z
aXRpb25zKClbZ2x5cGhdLngoKTsKKyAgICAgICAgICAgIGlmIChydGwoKSkKKyAgICAgICAgICAg
ICAgICB0b1ggKz0gdHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKG1faXRlbS5hZHZhbmNlc1tn
bHlwaF0pOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHRvIC09IG51bUNvZGVQb2ludHMo
KTsKKyAgICB9CisKKyAgICAvLyBUaGUgcG9zaXRpb24gaW4gcXVlc3Rpb24gbWlnaHQgYmUganVz
dCBhZnRlciB0aGUgdGV4dC4KKyAgICBpZiAoZnJvbVggPT0gLTEpCisgICAgICAgIGZyb21YID0g
b2Zmc2V0WCgpOworICAgIGlmICh0b1ggPT0gLTEpCisgICAgICAgIHRvWCA9IG9mZnNldFgoKTsK
KworICAgIEFTU0VSVChmcm9tWCAhPSAtMSAmJiB0b1ggIT0gLTEpOworCisgICAgaWYgKGZyb21Y
IDwgdG9YKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIGZyb21YLCBwb2lu
dC55KCksIHRvWCAtIGZyb21YLCBoZWlnaHQpOworCisgICAgcmV0dXJuIEZsb2F0UmVjdChwb2lu
dC54KCkgKyB0b1gsIHBvaW50LnkoKSwgZnJvbVggLSB0b1gsIGhlaWdodCk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51
eC5oCmluZGV4IGUyNjI5OTI2MzIzZDc1ZmE5M2IyZTVhMTRiY2I3MTZkMjMyYTk2MjkuLmNlNTM3
MTQyMmRkZjQ2YzZhY2RmZTFmYmZlMDNiM2NhMjQ4NzMxZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxp
bnV4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29t
cGxleFRleHRDb250cm9sbGVyTGludXguaApAQCAtMzYsNiArMzYsMTAgQEAKICNpbmNsdWRlICJT
a1NjYWxhci5oIgogI2luY2x1ZGUgIlRleHRSdW4uaCIKIAorZXh0ZXJuICJDIiB7CisjaW5jbHVk
ZSAiaGFyZmJ1enotc2hhcGVyLmgiCit9CisKICNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CiAj
aW5jbHVkZSA8d3RmL093bkFycmF5UHRyLmg+CiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgpAQCAt
OTgsMTkgKzEwMiw2IEBAIHB1YmxpYzoKICAgICAvLyBydW4uCiAgICAgY29uc3QgU2tQb2ludCog
cG9zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbnM7IH0KIAotICAgIC8vIEdldCB0
aGUgYWR2YW5jZXMgKHdpZHRocykgZm9yIGVhY2ggZ2x5cGguCi0gICAgY29uc3QgSEJfRml4ZWQq
IGFkdmFuY2VzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLmFkdmFuY2VzOyB9Ci0KLSAgICAvLyBS
ZXR1cm4gdGhlIHdpZHRoIChpbiBweCkgb2YgdGhlIGN1cnJlbnQgc2NyaXB0IHJ1bi4KLSAgICBj
b25zdCB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxXaWR0aDsgfQotCi0g
ICAgLy8gUmV0dXJuIHRoZSBjbHVzdGVyIGxvZyBmb3IgdGhlIGN1cnJlbnQgc2NyaXB0IHJ1bi4g
Rm9yIGV4YW1wbGU6Ci0gICAgLy8gICBzY3JpcHQgcnVuOiBmIGkgYSBuIGMgw6kgIChmaSBnZXRz
IGxpZ2F0dXJlZCkKLSAgICAvLyAgIGxvZyBjbHV0cnM6IDAgMCAxIDIgMyA0Ci0gICAgLy8gU28s
IGZvciBlYWNoIGlucHV0IGNvZGUgcG9pbnQsIHRoZSBsb2cgdGVsbHMgeW91IHdoaWNoIG91dHB1
dCBnbHlwaCB3YXMKLSAgICAvLyBnZW5lcmF0ZWQgZm9yIGl0LgotICAgIGNvbnN0IHVuc2lnbmVk
IHNob3J0KiBsb2dDbHVzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS5sb2dfY2x1c3RlcnM7
IH0KLQogICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGluIHRoZSBjdXJy
ZW50IHNjcmlwdCBydW4KICAgICBjb25zdCB1bnNpZ25lZCBudW1Db2RlUG9pbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9pdGVtLml0ZW0ubGVuZ3RoOyB9CiAKQEAgLTExOSw5ICsxMTAsMTEgQEAgcHVi
bGljOgogCiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udFBsYXRmb3JtRGF0YUZvclNj
cmlwdFJ1bigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KG1f
aXRlbS5mb250LT51c2VyRGF0YSk7IH0KIAorICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihpbnQp
OworICAgIEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQsIGlu
dCwgaW50KTsKKwogcHJpdmF0ZToKICAgICB2b2lkIHNldHVwRm9udEZvclNjcmlwdFJ1bigpOwot
ICAgIEhCX0ZvbnRSZWMqIGFsbG9jSGFyZmJ1enpGb250KCk7CiAgICAgdm9pZCBkZWxldGVHbHlw
aEFycmF5cygpOwogICAgIHZvaWQgY3JlYXRlR2x5cGhBcnJheXMoaW50KTsKICAgICB2b2lkIHJl
c2V0R2x5cGhBcnJheXMoKTsKQEAgLTEzNCw2ICsxMjcsOCBAQCBwcml2YXRlOgogICAgIC8vIFRo
aXMgbWF0Y2hlcyB0aGUgbG9naWMgaW4gUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyZWFrCiAg
ICAgc3RhdGljIGJvb2wgaXNDb2RlcG9pbnRTcGFjZShIQl9VQ2hhcjE2IGMpIHsgcmV0dXJuIGMg
PT0gJyAnIHx8IGMgPT0gJ1x0JzsgfQogCisgICAgaW50IGdseXBoSW5kZXhGb3JYUG9zaXRpb25J
blNjcmlwdFJ1bihpbnQgdGFyZ2V0WCk7CisKICAgICBjb25zdCBGb250KiBjb25zdCBtX2ZvbnQ7
CiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIG1fY3VycmVudEZvbnREYXRhOwogICAgIEhCX1No
YXBlckl0ZW0gbV9pdGVtOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udExpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRMaW51eC5jcHAKaW5kZXggY2RjNDljNDZkZTM5ZTNkZjBjZmM5
ZmUyMWI4NjFiNWZiZTA0ODIyZS4uNDM3ZTgzNDkwYzkxMDQ0NWQ0YTEyN2FiMDYxODcwNmEyZTg5
YTMxYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udExpbnV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250TGludXguY3BwCkBAIC0xNjYsMTQgKzE2Niw2IEBAIHZvaWQgRm9udDo6ZHJh
d0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwK
ICAgICB9CiB9CiAKLS8vIEhhcmZidXp6IHVzZXMgMjYuNiBmaXhlZCBwb2ludCB2YWx1ZXMgZm9y
IHBpeGVsIG9mZnNldHMuIEhvd2V2ZXIsIHdlIGRvbid0Ci0vLyBoYW5kbGUgc3VicGl4ZWwgcG9z
aXRpb25pbmcgc28gdGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHRydW5jYXRlIEhhcmZidXp6Ci0v
LyB2YWx1ZXMgdG8gYSBudW1iZXIgb2YgcGl4ZWxzLgotc3RhdGljIGludCB0cnVuY2F0ZUZpeGVk
UG9pbnRUb0ludGVnZXIoSEJfRml4ZWQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHZhbHVlID4+IDY7
Ci19Ci0KIHN0YXRpYyB2b2lkIHNldHVwRm9yVGV4dFBhaW50aW5nKFNrUGFpbnQqIHBhaW50LCBT
a0NvbG9yIGNvbG9yKQogewogICAgIHBhaW50LT5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a0ds
eXBoSURfVGV4dEVuY29kaW5nKTsKQEAgLTI1MCwyMyArMjQyLDYgQEAgZmxvYXQgRm9udDo6Zmxv
YXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb24KICAgICByZXR1cm4gY29udHJvbGxlci53aWR0aE9mRnVsbFJ1bigpOwogfQogCi1z
dGF0aWMgaW50IGdseXBoSW5kZXhGb3JYUG9zaXRpb25JblNjcmlwdFJ1bihjb25zdCBDb21wbGV4
VGV4dENvbnRyb2xsZXImIGNvbnRyb2xsZXIsIGludCB0YXJnZXRYKQotewotICAgIC8vIEl0ZXJh
dGUgdGhyb3VnaCB0aGUgZ2x5cGhzIGluIGxvZ2ljYWwgb3JkZXIsIHNlZWluZyB3aGV0aGVyIHRh
cmdldFggZmFsbHMgYmV0d2VlbiB0aGUgcHJldmlvdXMKLSAgICAvLyBwb3NpdGlvbiBhbmQgaGFs
ZndheSB0aHJvdWdoIHRoZSBjdXJyZW50IGdseXBoLgotICAgIC8vIEZJWE1FOiB0aGlzIGNvZGUg
cHJvYmFibHkgYmVsb25ncyBpbiBDb21wbGV4VGV4dENvbnRyb2xsZXIuCi0gICAgaW50IGxhc3RY
ID0gY29udHJvbGxlci5vZmZzZXRYKCkgLSAoY29udHJvbGxlci5ydGwoKSA/IC1jb250cm9sbGVy
LndpZHRoKCkgOiBjb250cm9sbGVyLndpZHRoKCkpOwotICAgIGZvciAoaW50IGdseXBoSW5kZXgg
PSAwOyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ2x5cGhJbmRleCkgPCBjb250cm9sbGVyLmxlbmd0
aCgpOyArK2dseXBoSW5kZXgpIHsKLSAgICAgICAgaW50IGFkdmFuY2UgPSB0cnVuY2F0ZUZpeGVk
UG9pbnRUb0ludGVnZXIoY29udHJvbGxlci5hZHZhbmNlcygpW2dseXBoSW5kZXhdKTsKLSAgICAg
ICAgaW50IG5leHRYID0gc3RhdGljX2Nhc3Q8aW50Pihjb250cm9sbGVyLnBvc2l0aW9ucygpW2ds
eXBoSW5kZXhdLngoKSkgKyBhZHZhbmNlIC8gMjsKLSAgICAgICAgaWYgKHN0ZDo6bWluKG5leHRY
LCBsYXN0WCkgPD0gdGFyZ2V0WCAmJiB0YXJnZXRYIDw9IHN0ZDo6bWF4KG5leHRYLCBsYXN0WCkp
Ci0gICAgICAgICAgICByZXR1cm4gZ2x5cGhJbmRleDsKLSAgICAgICAgbGFzdFggPSBuZXh0WDsK
LSAgICB9Ci0KLSAgICByZXR1cm4gY29udHJvbGxlci5sZW5ndGgoKSAtIDE7Ci19Ci0KIC8vIFJl
dHVybiB0aGUgY29kZSBwb2ludCBpbmRleCBmb3IgdGhlIGdpdmVuIHx4fCBvZmZzZXQgaW50byB0
aGUgdGV4dCBydW4uCiBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChj
b25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHhGbG9hdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0CkBAIC0y
ODYsNDAgKzI2MSw3IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LAogICAgICAgICBjb250cm9sbGVyLnJl
c2V0KGNvbnRyb2xsZXIud2lkdGhPZkZ1bGxSdW4oKSk7CiAgICAgICAgIGNvbnRyb2xsZXIuc2V0
UGFkZGluZyhydW4uZXhwYW5zaW9uKCkpOwogICAgIH0KLQotICAgIHVuc2lnbmVkIGJhc2VQb3Np
dGlvbiA9IDA7Ci0KLSAgICBpbnQgeCA9IGNvbnRyb2xsZXIub2Zmc2V0WCgpOwotICAgIHdoaWxl
IChjb250cm9sbGVyLm5leHRTY3JpcHRSdW4oKSkgewotICAgICAgICBpbnQgbmV4dFggPSBjb250
cm9sbGVyLm9mZnNldFgoKTsKLQotICAgICAgICBpZiAoc3RkOjptaW4oeCwgbmV4dFgpIDw9IHRh
cmdldFggJiYgdGFyZ2V0WCA8PSBzdGQ6Om1heCh4LCBuZXh0WCkpIHsKLSAgICAgICAgICAgIC8v
IFRoZSB4IHZhbHVlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiB0aGlzIHNjcmlwdCBydW4uCi0gICAg
ICAgICAgICBjb25zdCBpbnQgZ2x5cGhJbmRleCA9IGdseXBoSW5kZXhGb3JYUG9zaXRpb25JblNj
cmlwdFJ1bihjb250cm9sbGVyLCB0YXJnZXRYKTsKLQotICAgICAgICAgICAgLy8gTm93IHRoYXQg
d2UgaGF2ZSBhIGdseXBoIGluZGV4LCB3ZSBoYXZlIHRvIHR1cm4gdGhhdCBpbnRvIGEKLSAgICAg
ICAgICAgIC8vIGNvZGUtcG9pbnQgaW5kZXguIEJlY2F1c2Ugb2YgbGlnYXR1cmVzLCBzZXZlcmFs
IGNvZGUtcG9pbnRzIG1heQotICAgICAgICAgICAgLy8gaGF2ZSBnb25lIGludG8gYSBzaW5nbGUg
Z2x5cGguIFdlIGl0ZXJhdGUgb3ZlciB0aGUgY2x1c3RlcnMgbG9nCi0gICAgICAgICAgICAvLyBh
bmQgZmluZCB0aGUgZmlyc3QgY29kZS1wb2ludCB3aGljaCBjb250cmlidXRlZCB0byB0aGUgZ2x5
cGguCi0KLSAgICAgICAgICAgIC8vIFNvbWUgc2hhcGVycyAoaS5lLiBLaG1lcikgd2lsbCBwcm9k
dWNlIGNsdXN0ZXIgbG9ncyB3aGljaCByZXBvcnQKLSAgICAgICAgICAgIC8vIHRoYXQgL25vLyBj
b2RlIHBvaW50cyBjb250cmlidXRlZCB0byBjZXJ0YWluIGdseXBocy4gQmVjYXVzZSBvZgotICAg
ICAgICAgICAgLy8gdGhpcywgd2UgdGFrZSBhbnkgY29kZSBwb2ludCB3aGljaCBjb250cmlidXRl
ZCB0byB0aGUgZ2x5cGggaW4KLSAgICAgICAgICAgIC8vIHF1ZXN0aW9uLCBvciBhbnkgc3Vic2Vx
dWVudCBnbHlwaC4gSWYgd2UgcnVuIG9mZiB0aGUgZW5kLCB0aGVuCi0gICAgICAgICAgICAvLyB3
ZSB0YWtlIHRoZSBsYXN0IGNvZGUgcG9pbnQuCi0gICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBz
aG9ydCogbG9nID0gY29udHJvbGxlci5sb2dDbHVzdGVycygpOwotICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IGNvbnRyb2xsZXIubnVtQ29kZVBvaW50cygpOyArK2opIHsKLSAg
ICAgICAgICAgICAgICBpZiAobG9nW2pdID49IGdseXBoSW5kZXgpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBiYXNlUG9zaXRpb24gKyBqOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICByZXR1cm4gYmFzZVBvc2l0aW9uICsgY29udHJvbGxlci5udW1Db2RlUG9pbnRzKCkgLSAxOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYmFzZVBvc2l0aW9uICs9IGNvbnRyb2xsZXIubnVtQ29kZVBv
aW50cygpOwotICAgIH0KLQotICAgIHJldHVybiBiYXNlUG9zaXRpb247CisgICAgcmV0dXJuIGNv
bnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24odGFyZ2V0WCk7CiB9CiAKIC8vIFJldHVybiB0aGUg
cmVjdGFuZ2xlIGZvciBzZWxlY3RpbmcgdGhlIGdpdmVuIHJhbmdlIG9mIGNvZGUtcG9pbnRzIGlu
IHRoZSBUZXh0UnVuLgpAQCAtMzI3LDcgKzI2OSw2IEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rp
b25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50
IGhlaWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGZyb20sIGludCB0bykgY29uc3QKIHsKLSAgICBpbnQgZnJvbVggPSAtMSwgdG9YID0gLTE7CiAg
ICAgQ29tcGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIocnVuLCAwLCAwLCB0aGlzKTsKICAg
ICBjb250cm9sbGVyLnNldFdvcmRTcGFjaW5nQWRqdXN0bWVudCh3b3JkU3BhY2luZygpKTsKICAg
ICBjb250cm9sbGVyLnNldExldHRlclNwYWNpbmdBZGp1c3RtZW50KGxldHRlclNwYWNpbmcoKSk7
CkBAIC0zMzcsNDEgKzI3OCw3IEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29t
cGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAgICBjb250cm9sbGVyLnJlc2V0KGNv
bnRyb2xsZXIud2lkdGhPZkZ1bGxSdW4oKSk7CiAgICAgICAgIGNvbnRyb2xsZXIuc2V0UGFkZGlu
ZyhydW4uZXhwYW5zaW9uKCkpOwogICAgIH0KLQotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUg
c2NyaXB0IHJ1bnMgaW4gbG9naWNhbCBvcmRlciwgc2VhcmNoaW5nIGZvciB0aGUgcnVuIGNvdmVy
aW5nIHRoZSBwb3NpdGlvbnMgb2YgaW50ZXJlc3QuCi0gICAgd2hpbGUgKGNvbnRyb2xsZXIubmV4
dFNjcmlwdFJ1bigpICYmIChmcm9tWCA9PSAtMSB8fCB0b1ggPT0gLTEpKSB7Ci0gICAgICAgIGlm
IChmcm9tWCA9PSAtMSAmJiBmcm9tID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZyb20p
IDwgY29udHJvbGxlci5udW1Db2RlUG9pbnRzKCkpIHsKLSAgICAgICAgICAgIC8vIHxmcm9tfCBp
cyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLiBTbyB3ZSBpbmRleCB0aGUgY2x1c3RlcnMgbG9nIHRv
Ci0gICAgICAgICAgICAvLyBmaW5kIHdoaWNoIGdseXBoIHRoaXMgY29kZS1wb2ludCBjb250cmli
dXRlZCB0byBhbmQgZmluZCBpdHMgeAotICAgICAgICAgICAgLy8gcG9zaXRpb24uCi0gICAgICAg
ICAgICBpbnQgZ2x5cGggPSBjb250cm9sbGVyLmxvZ0NsdXN0ZXJzKClbZnJvbV07Ci0gICAgICAg
ICAgICBmcm9tWCA9IGNvbnRyb2xsZXIucG9zaXRpb25zKClbZ2x5cGhdLngoKTsKLSAgICAgICAg
ICAgIGlmIChjb250cm9sbGVyLnJ0bCgpKQotICAgICAgICAgICAgICAgIGZyb21YICs9IHRydW5j
YXRlRml4ZWRQb2ludFRvSW50ZWdlcihjb250cm9sbGVyLmFkdmFuY2VzKClbZ2x5cGhdKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBmcm9tIC09IGNvbnRyb2xsZXIubnVtQ29kZVBvaW50
cygpOwotCi0gICAgICAgIGlmICh0b1ggPT0gLTEgJiYgdG8gPj0gMCAmJiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4odG8pIDwgY29udHJvbGxlci5udW1Db2RlUG9pbnRzKCkpIHsKLSAgICAgICAgICAg
IGludCBnbHlwaCA9IGNvbnRyb2xsZXIubG9nQ2x1c3RlcnMoKVt0b107Ci0gICAgICAgICAgICB0
b1ggPSBjb250cm9sbGVyLnBvc2l0aW9ucygpW2dseXBoXS54KCk7Ci0gICAgICAgICAgICBpZiAo
Y29udHJvbGxlci5ydGwoKSkKLSAgICAgICAgICAgICAgICB0b1ggKz0gdHJ1bmNhdGVGaXhlZFBv
aW50VG9JbnRlZ2VyKGNvbnRyb2xsZXIuYWR2YW5jZXMoKVtnbHlwaF0pOwotICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgIHRvIC09IGNvbnRyb2xsZXIubnVtQ29kZVBvaW50cygpOwotICAgIH0K
LQotICAgIC8vIFRoZSBwb3NpdGlvbiBpbiBxdWVzdGlvbiBtaWdodCBiZSBqdXN0IGFmdGVyIHRo
ZSB0ZXh0LgotICAgIGlmIChmcm9tWCA9PSAtMSkKLSAgICAgICAgZnJvbVggPSBjb250cm9sbGVy
Lm9mZnNldFgoKTsKLSAgICBpZiAodG9YID09IC0xKQotICAgICAgICB0b1ggPSBjb250cm9sbGVy
Lm9mZnNldFgoKTsKLQotICAgIEFTU0VSVChmcm9tWCAhPSAtMSAmJiB0b1ggIT0gLTEpOwotCi0g
ICAgaWYgKGZyb21YIDwgdG9YKQotICAgICAgICByZXR1cm4gRmxvYXRSZWN0KHBvaW50LngoKSAr
IGZyb21YLCBwb2ludC55KCksIHRvWCAtIGZyb21YLCBoZWlnaHQpOwotCi0gICAgcmV0dXJuIEZs
b2F0UmVjdChwb2ludC54KCkgKyB0b1gsIHBvaW50LnkoKSwgZnJvbVggLSB0b1gsIGhlaWdodCk7
CisgICAgcmV0dXJuIGNvbnRyb2xsZXIuc2VsZWN0aW9uUmVjdChwb2ludCwgaGVpZ2h0LCBmcm9t
LCB0byk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZv
cm1EYXRhTGludXguY3BwCmluZGV4IDFmYjU5NTdiN2IxNGMyY2ViMTIxYWU3NGI0YmE3YWRjMDI4
OWI1NzQuLmIyYTNlY2M2Yzg5ODc2ZjNlYTc4ZDVmZDNmMWQyN2VjNDMwNjg4NjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9y
bURhdGFMaW51eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKIAotI2luY2x1ZGUg
IkhhcmZidXp6U2tpYS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtNjMsMTEg
KzYyLDYgQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRTdWJwaXhlbEdseXBocyhib29sIGlz
U3VicGl4ZWxHbHlwaHMpCiAgICAgaXNTa2lhU3VicGl4ZWxHbHlwaHMgPSBpc1N1YnBpeGVsR2x5
cGhzOwogfQogCi1Gb250UGxhdGZvcm1EYXRhOjpSZWZDb3VudGVkSGFyZmJ1enpGYWNlOjp+UmVm
Q291bnRlZEhhcmZidXp6RmFjZSgpCi17Ci0gICAgSEJfRnJlZUZhY2UobV9oYXJmYnV6ekZhY2Up
OwotfQotCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHNyYykKICAgICA6IG1fdHlwZWZhY2Uoc3JjLm1fdHlwZWZhY2UpCiAgICAgLCBt
X2ZhbWlseShzcmMubV9mYW1pbHkpCkBAIC0yMjksMTIgKzIyMywxMiBAQCBib29sIEZvbnRQbGF0
Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1I
Ql9GYWNlUmVjXyogRm9udFBsYXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkgY29uc3QKK0hhcmZi
dXp6RmFjZSogRm9udFBsYXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkgY29uc3QKIHsKICAgICBp
ZiAoIW1faGFyZmJ1enpGYWNlKQotICAgICAgICBtX2hhcmZidXp6RmFjZSA9IFJlZkNvdW50ZWRI
YXJmYnV6ekZhY2U6OmNyZWF0ZShIQl9OZXdGYWNlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0
YSo+KHRoaXMpLCBoYXJmYnV6elNraWFHZXRUYWJsZSkpOworICAgICAgICBtX2hhcmZidXp6RmFj
ZSA9IEhhcmZidXp6RmFjZTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRo
aXMpKTsKIAotICAgIHJldHVybiBtX2hhcmZidXp6RmFjZS0+ZmFjZSgpOworICAgIHJldHVybiBt
X2hhcmZidXp6RmFjZS5nZXQoKTsKIH0KIAogdm9pZCBGb250UGxhdGZvcm1EYXRhOjpxdWVyeVN5
c3RlbUZvclJlbmRlclN0eWxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmgKaW5k
ZXggNTQxYWE4NjY1YTZjMGZjOGJjMmUyMGQwYTg3OTY2ZWVjODAyNDA0My4uODZiOTQxY2FlNDA1
MTlhOTRhMWY4YTQwOTJlZGE0ZTZhNmQxM2Y4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0
YUxpbnV4LmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5o
IgogI2luY2x1ZGUgIkZvbnRSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIkhhcmZidXp6U2tpYS5o
IgogI2luY2x1ZGUgIlRleHRPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDMsOCArNDQsNiBAQAogY2xhc3MgU2tUeXBl
ZmFjZTsKIHR5cGVkZWYgdWludDMyX3QgU2tGb250SUQ7CiAKLXN0cnVjdCBIQl9GYWNlUmVjXzsK
LQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250RGVzY3JpcHRpb247CkBAIC0xMjgs
NyArMTI3LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogI2Vu
ZGlmCiAKLSAgICBIQl9GYWNlUmVjXyogaGFyZmJ1enpGYWNlKCkgY29uc3Q7CisgICAgSGFyZmJ1
enpGYWNlKiBoYXJmYnV6ekZhY2UoKSBjb25zdDsKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
ICAgICAvLyBHbG9iYWwgZm9udCBwcmVmZXJlbmNlcy4uLgpAQCAtMTM4LDI1ICsxMzcsNiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0U3VicGl4ZWxHbHlwaHMoYm9vbCBvbik7CiAKIHBy
aXZhdGU6Ci0gICAgY2xhc3MgUmVmQ291bnRlZEhhcmZidXp6RmFjZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFJlZkNvdW50ZWRIYXJmYnV6ekZhY2U+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFJlZkNvdW50ZWRIYXJmYnV6ekZhY2U+IGNyZWF0ZShIQl9GYWNlUmVjXyog
aGFyZmJ1enpGYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3
IFJlZkNvdW50ZWRIYXJmYnV6ekZhY2UoaGFyZmJ1enpGYWNlKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICB+UmVmQ291bnRlZEhhcmZidXp6RmFjZSgpOwotCi0gICAgICAgIEhCX0ZhY2VSZWNfKiBm
YWNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXJmYnV6ekZhY2U7IH0KLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIFJlZkNvdW50ZWRIYXJmYnV6ekZhY2UoSEJfRmFjZVJlY18qIGhhcmZidXp6RmFjZSkg
OiBtX2hhcmZidXp6RmFjZShoYXJmYnV6ekZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIEhCX0ZhY2VSZWNfKiBtX2hhcmZidXp6RmFjZTsKLSAgICB9OwotCiAgICAgdm9pZCBx
dWVyeVN5c3RlbUZvclJlbmRlclN0eWxlKCk7CiAKICAgICAvLyBGSVhNRTogQ291bGQgU2tBdXRv
VW5yZWYgYmUgdXNlZCBoZXJlPwpAQCAtMTY5LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAgRm9u
dE9yaWVudGF0aW9uIG1fb3JpZW50YXRpb247CiAgICAgVGV4dE9yaWVudGF0aW9uIG1fdGV4dE9y
aWVudGF0aW9uOwogICAgIEZvbnRSZW5kZXJTdHlsZSBtX3N0eWxlOwotICAgIG11dGFibGUgUmVm
UHRyPFJlZkNvdW50ZWRIYXJmYnV6ekZhY2U+IG1faGFyZmJ1enpGYWNlOworICAgIG11dGFibGUg
UmVmUHRyPEhhcmZidXp6RmFjZT4gbV9oYXJmYnV6ekZhY2U7CiAKICAgICBTa1R5cGVmYWNlKiBo
YXNoVGFibGVEZWxldGVkRm9udFZhbHVlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2Fz
dDxTa1R5cGVmYWNlKj4oLTEpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHAKaW5kZXggMjdhMzA5
Y2YxMDI4NTJjNWE0Zjg3Mzg3ODU2Y2NjMTc0MWU0NzZiZS4uYjk0ZWQxYTg5ZmI3Y2RlZjdhYmNl
MWI3ZmRmOTAyODk2MTZmNDUwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuY3BwCkBAIC0xOTcsNiArMTk3
LDE2IEBAIEhCX0ZvbnRDbGFzcyBoYXJmYnV6elNraWFDbGFzcyA9IHsKICAgICBnZXRGb250TWV0
cmljLAogfTsKIAorSEJfRm9udF8qIGFsbG9jSGFyZmJ1enpGb250KCkKK3sKKyAgICBIQl9Gb250
XyogZm9udCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SEJfRm9udF8qPihmYXN0TWFsbG9jKHNpemVvZihI
Ql9Gb250XykpKTsKKyAgICBtZW1zZXQoZm9udCwgMCwgc2l6ZW9mKEhCX0ZvbnRfKSk7CisgICAg
Zm9udC0+a2xhc3MgPSAmaGFyZmJ1enpTa2lhQ2xhc3M7CisgICAgZm9udC0+dXNlckRhdGEgPSAw
OworCisgICAgcmV0dXJuIGZvbnQ7Cit9CisKIEhCX0Vycm9yIGhhcmZidXp6U2tpYUdldFRhYmxl
KHZvaWQqIHZvaWRmYWNlLCBjb25zdCBIQl9UYWcgdGFnLCBIQl9CeXRlKiBidWZmZXIsIEhCX1VJ
bnQqIGxlbikKIHsKICAgICBGb250UGxhdGZvcm1EYXRhKiBmb250ID0gcmVpbnRlcnByZXRfY2Fz
dDxGb250UGxhdGZvcm1EYXRhKj4odm9pZGZhY2UpOwpAQCAtMjE2LDQgKzIyNiwxNCBAQCBIQl9F
cnJvciBoYXJmYnV6elNraWFHZXRUYWJsZSh2b2lkKiB2b2lkZmFjZSwgY29uc3QgSEJfVGFnIHRh
ZywgSEJfQnl0ZSogYnVmZmVyLAogICAgIHJldHVybiBIQl9FcnJfT2s7CiB9CiAKK0hhcmZidXp6
RmFjZTo6SGFyZmJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSkKK3sKKyAg
ICBtX2hhcmZidXp6RmFjZSA9IEhCX05ld0ZhY2UocGxhdGZvcm1EYXRhLCBoYXJmYnV6elNraWFH
ZXRUYWJsZSk7Cit9CisKK0hhcmZidXp6RmFjZTo6fkhhcmZidXp6RmFjZSgpCit7CisgICAgSEJf
RnJlZUZhY2UobV9oYXJmYnV6ekZhY2UpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFy
ZmJ1enpTa2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9I
YXJmYnV6elNraWEuaAppbmRleCBmN2UwNDk2MGVlYmFkOGNhODU1MzJjZWVmNTBiYjViZWU2YmVm
MWMxLi5hY2UyZDI2NjZkMTQ1YzI3MTdlNmYwMGFhNmY3YjM1NmJjYjczYzMzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6
elNraWEuaApAQCAtMzEsMTQgKzMxLDM1IEBACiAjaWZuZGVmIEhhcmZidXp6U2tpYV9oCiAjZGVm
aW5lIEhhcmZidXp6U2tpYV9oCiAKLWV4dGVybiAiQyIgewotI2luY2x1ZGUgImhhcmZidXp6LXNo
YXBlci5oIgotI2luY2x1ZGUgImhhcmZidXp6LXVuaWNvZGUuaCIKLX0KKyNpbmNsdWRlIDx3dGYv
UmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworc3RydWN0IEhCX0ZhY2VS
ZWNfOworc3RydWN0IEhCX0ZvbnRfOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgSEJfRXJy
b3IgaGFyZmJ1enpTa2lhR2V0VGFibGUodm9pZCogdm9pZGZhY2UsIGNvbnN0IEhCX1RhZywgSEJf
Qnl0ZSogYnVmZmVyLCBIQl9VSW50KiBsZW4pOwotICAgIGV4dGVybiBjb25zdCBIQl9Gb250Q2xh
c3MgaGFyZmJ1enpTa2lhQ2xhc3M7CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CisKK2NsYXNz
IEhhcmZidXp6RmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEhhcmZidXp6RmFjZT4geworcHVibGlj
OgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEhhcmZidXp6RmFjZT4gY3JlYXRlKEZvbnRQbGF0Zm9y
bURhdGEqIHBsYXRmb3JtRGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
SGFyZmJ1enpGYWNlKHBsYXRmb3JtRGF0YSkpOworICAgIH0KKworICAgIH5IYXJmYnV6ekZhY2Uo
KTsKKworICAgIEhCX0ZhY2VSZWNfKiBmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXJmYnV6ekZh
Y2U7IH0KKworcHJpdmF0ZToKKyAgICBIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSopOwor
CisgICAgSEJfRmFjZVJlY18qIG1faGFyZmJ1enpGYWNlOworfTsKKworSEJfRm9udF8qIGFsbG9j
SGFyZmJ1enpGb250KCk7CisKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBhZ2VU
cmVlTm9kZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
bHlwaFBhZ2VUcmVlTm9kZVNraWEuY3BwCmluZGV4IGYzNjJmYTNjMWJlZDY2YTcwYTlhMTE1NzA4
NzM0MzhmZWVjM2U3ZDQuLjQwNjFmNzRkYjE0NjUzNDVjMTA4OGFlNmFlZTBjY2E3MmY2OTAyYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQ
YWdlVHJlZU5vZGVTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0dseXBoUGFnZVRyZWVOb2RlU2tpYS5jcHAKQEAgLTM5LDExICszOSwxNSBAQAogI2lu
Y2x1ZGUgIlNrUGFpbnQuaCIKICNpbmNsdWRlICJTa1V0aWxzLmgiCiAKK2V4dGVybiAiQyIgewor
I2luY2x1ZGUgImhhcmZidXp6LXNoYXBlci5oIgorfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHN0YXRpYyBpbnQgc3Vic3RpdHV0ZVdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBTaW1wbGVGb250
RGF0YSogZm9udERhdGEsIHVpbnQxNl90KiBnbHlwaHMsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkK
IHsKLSAgICBIQl9GYWNlUmVjXyogaGJGYWNlID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhh
cmZidXp6RmFjZSgpOworICAgIEhCX0ZhY2VSZWNfKiBoYkZhY2UgPSBmb250RGF0YS0+cGxhdGZv
cm1EYXRhKCkuaGFyZmJ1enpGYWNlKCktPmZhY2UoKTsKICAgICBpZiAoIWhiRmFjZS0+Z3N1Yikg
ewogICAgICAgICAvLyBpZiB0aGVyZSBpcyBubyBHU1VCIHRhYmxlLCB0cmVhdCBpdCBhcyBub3Qg
Y292ZXJlZAogICAgICAgICByZXR1cm4gMFhmZmZmOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98696</attachid>
            <date>2011-06-27 03:58:16 -0700</date>
            <delta_ts>2011-06-27 17:22:47 -0700</delta_ts>
            <desc>Patch V1</desc>
            <filename>bug-62530-20110627195814.patch</filename>
            <type>text/plain</type>
            <size>30458</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk3NzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3YmZkZmVhYWU4ZWQ1NjM4
ZmFjZTU2NDIyMDhjMGM3YzQxMTA4ODNlLi5kZjViZDhhMTY3MDg1YmEyNTRjYTJhYTVjYjM5NDdi
Y2RiOGIxYzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDYtMjcgIEtlbmlj
aGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGRlcGVuZGVuY2ll
cyBvbiBoYXJmYnV6eiBmcm9tIEZvbnRQbGF0Zm9ybURhdGFMaW51eCBhbmQgRm9udExpbnV4Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjUzMAorCisg
ICAgICAgIC0gTW92ZWQgY29kZXMgb2YgRm9udExpbnV4IHdoaWNoIGRlcGVuZCBvbiBoYXJmYnV6
eiBBUElzIHRvIENvbXBsZXhUZXh0Q29udHJvbGxlci4gIFJlbW92ZWQgU29tZSBtZXRob2RzIG9m
IENvbXBsZXhUZXh0Q29udHJvbGxlcih3aWR0aCgpLCBhZHZhbmNlcygpLCBhbmQgbG9nQ2x1c3Rl
cnMoKSkgc2luY2UgdGhlcmUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4KKyAgICAgICAgLSBNb3ZlZCBS
ZWZDb3VudGVkSGFyZmJ1enpGYWNlIGZyb20gRm9udFBsYXRmb3JtRGF0YUxpbnV4IHRvIEhhcmZi
dXp6U2tpYSBhbmQgcmVuYW1lZCBpdCB0byBIYXJmYnV6ekZhY2UuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGJlY2F1c2UgdGhlcmUgaXMgbm8gYmVoYXZpb3IgY2hhbmdlIChUaGUgZXhpc3Rpbmcg
dGVzdHMgc2hvdWxkIGNvdmVyIHRoZSBjaGFuZ2VzKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVyKTog
QWRkZWQgYXJndW1lbnRzIHNvIGVsaW1pbmF0aW5nIHNldHRlciBpbnZvY2F0aW9ucy4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0dXBGb3JSVEwpOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0dXBGb250Rm9yU2Ny
aXB0UnVuKTogQWRvcHQgdGhlIGNoYW5nZSBvZiBIYXJmYnV6ekZhY2UgY2xhc3MuCisgICAgICAg
IChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldEdseXBoUG9zaXRpb25zKTogVXNl
IG1faXRlbS5sb2dfY2x1c3RlcnMgaW5zdGVhZCBvZiByZW1vdmVkIG1ldGhvZC4KKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2x5cGhJbmRleEZvclhQb3NpdGlvbklu
U2NyaXB0UnVuKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xs
ZXI6Om9mZnNldEZvclBvc2l0aW9uKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDb21wbGV4
VGV4dENvbnRyb2xsZXI6OnNlbGVjdGlvblJlY3QpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oOgorICAgICAg
ICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjp3aWR0aCk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udExpbnV4LmNwcDogUmVtb3ZlZCB0cnVuY2F0ZUZp
eGVkUG9pbnRUb0ludGVnZXIoKS4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4
VGV4dCk6IFJlbW92ZWQgc2V0dGVyIGludm9jYXRpb25zIG9mIENvbXBsZXhUZXh0Q29udHJvbGxl
ci4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dCk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4
VGV4dCk6IE1vdmVkIGhhcmZidXp6IGRlcGVuZGVudCBjb2RlIHRvIENvbXBsZXhUZXh0Q29udHJv
bGxlci4KKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0
Zm9ybURhdGFMaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpo
YXJmYnV6ekZhY2UpOiBXcmFwcGVkIHVwIEhCX0ZhY2VSZWMgaW4gSGFyZmJ1enpGYWNlIGNsYXNz
LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFM
aW51eC5oOiBNb3ZlZCBSZWZDb3VudGVkSGFyZmJ1enpGYWNlIGNsYXNzIGFuZCByZW5hbWVkIHRv
IEhhcmZidXp6RmFjZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJm
YnV6elNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWxsb2NIYXJmYnV6ekZvbnQpOiBNb3Zl
ZCBmcm9tIENvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OkhhcmZidXp6RmFjZTo6SGFyZmJ1enpGYWNlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpI
YXJmYnV6ekZhY2U6On5IYXJmYnV6ekZhY2UpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZi
dXp6RmFjZTo6Y3JlYXRlKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpIYXJmYnV6ekZhY2U6
OmZhY2UpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFn
ZVRyZWVOb2RlU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdWJzdGl0dXRlV2l0aFZlcnRp
Y2FsR2x5cGhzKTogQWRvcHQgIHRoZSBjaGFuZ2Ugb2YgSGFyZmJ1enpGYWNlIGNsYXNzLgorCiAy
MDExLTA2LTI2ICBZb3VuZyBIYW4gTGVlICA8am95YnJvQGNvbXBhbnkxMDAubmV0PgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0
Q29udHJvbGxlckxpbnV4LmNwcAppbmRleCBiYzE1Yjk0ZDZkY2E0ODYzYmRiNDZjOTUwNGI0NGNi
MjkzNTY4ZTBkLi41MjljMmI1OGY1OTE3ZmY2OTdhZTBkMTI1YmJjMmNhOTYyYTdkYjA2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4
VGV4dENvbnRyb2xsZXJMaW51eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwCkBAIC0zMSw5ICsz
MSwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJv
bGxlckxpbnV4LmgiCiAKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJoYXJmYnV6
ei11bmljb2RlLmgiCit9CisKICNpbmNsdWRlIDx1bmljb2RlL25vcm1senIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtNDYsMTQgKzUxLDkgQEAgc3RhdGljIGludCB0cnVuY2F0ZUZpeGVk
UG9pbnRUb0ludGVnZXIoSEJfRml4ZWQgdmFsdWUpCiAgICAgcmV0dXJuIHZhbHVlID4+IDY7CiB9
CiAKLUNvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IFRl
eHRSdW4mIHJ1biwgdW5zaWduZWQgc3RhcnRpbmdYLCB1bnNpZ25lZCBzdGFydGluZ1ksIGNvbnN0
IEZvbnQqIGZvbnQpCitDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxl
cihjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIHN0YXJ0aW5nWCwgdW5zaWduZWQgc3RhcnRp
bmdZLCB1bnNpZ25lZCB3b3JkU3BhY2luZywgdW5zaWduZWQgbGV0dGVyU3BhY2luZywgdW5zaWdu
ZWQgcGFkZGluZywgY29uc3QgRm9udCogZm9udCkKICAgICA6IG1fZm9udChmb250KQogICAgICwg
bV9ydW4oZ2V0Tm9ybWFsaXplZFRleHRSdW4ocnVuLCBtX25vcm1hbGl6ZWRSdW4sIG1fbm9ybWFs
aXplZEJ1ZmZlcikpCi0gICAgLCBtX3dvcmRTcGFjaW5nQWRqdXN0bWVudCgwKQotICAgICwgbV9w
YWRkaW5nKDApCi0gICAgLCBtX3BhZFBlcldvcmRCcmVhaygwKQotICAgICwgbV9wYWRFcnJvcigw
KQotICAgICwgbV9sZXR0ZXJTcGFjaW5nKDApCiB7CiAgICAgLy8gRG8gbm90IHVzZSB8cnVufCBp
bnNpZGUgdGhpcyBjb25zdHJ1Y3Rvci4gVXNlIHxtX3J1bnwgaW5zdGVhZC4KIApAQCAtNzYsNiAr
NzYsMTAgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29u
c3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBzdGFydGkKIAogICAgIHJlc2V0KHN0YXJ0aW5nWCk7
CiAgICAgbV9zdGFydGluZ1kgPSBzdGFydGluZ1k7CisKKyAgICBzZXRXb3JkU3BhY2luZ0FkanVz
dG1lbnQod29yZFNwYWNpbmcpOworICAgIHNldExldHRlclNwYWNpbmdBZGp1c3RtZW50KGxldHRl
clNwYWNpbmcpOworICAgIHNldFBhZGRpbmcocGFkZGluZyk7CiB9CiAKIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6fkNvbXBsZXhUZXh0Q29udHJvbGxlcigpCkBAIC0xNDMsNiArMTQ3LDE4IEBAIHZv
aWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpyZXNldCh1bnNpZ25lZCBvZmZzZXQpCiAgICAgbV9v
ZmZzZXRYID0gb2Zmc2V0OwogfQogCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0dXBG
b3JSVEwoKQoreworICAgIGludCBwYWRkaW5nID0gbV9wYWRkaW5nOworICAgIC8vIEZJWE1FOiB0
aGlzIGNhdXNlcyB1cyB0byBzaGFwZSB0aGUgdGV4dCB0d2ljZSAtLSBvbmNlIHRvIGNvbXB1dGUg
dGhlIHdpZHRoIGFuZCB0aGVuIGFnYWluCisgICAgLy8gYmVsb3cgd2hlbiBhY3R1YWxseSByZW5k
ZXJpbmcuIENoYW5nZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgdG8gbWF0Y2ggcGxhdGZvcm0vbWFj
IGFuZAorICAgIC8vIHBsYXRmb3JtL2Nocm9taXVtL3dpbiBieSBoYXZpbmcgaXQgc3RvcmUgdGhl
IHNoYXBlZCBydW5zLCBzbyB3ZSBjYW4gcmV1c2UgdGhlIHJlc3VsdHMuCisgICAgcmVzZXQobV9v
ZmZzZXRYICsgd2lkdGhPZkZ1bGxSdW4oKSk7CisgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHBh
ZGRpbmcgYWdhaW4gYmVjYXVzZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgbGF5b3V0IGNvbnN1bWVk
IHRoZSB2YWx1ZS4KKyAgICAvLyBGaXhpbmcgdGhlIGFib3ZlIHByb2JsZW0gd291bGQgaGVscCBo
ZXJlIHRvby4KKyAgICBzZXRQYWRkaW5nKHBhZGRpbmcpOworfQorCiAvLyBBZHZhbmNlIHRvIHRo
ZSBuZXh0IHNjcmlwdCBydW4sIHJldHVybmluZyBmYWxzZSB3aGVuIHRoZSBlbmQgb2YgdGhlCiAv
LyBUZXh0UnVuIGhhcyBiZWVuIHJlYWNoZWQuCiBib29sIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6
bmV4dFNjcmlwdFJ1bigpCkBAIC0yMDIsNyArMjE4LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRy
b2xsZXI6OnNldHVwRm9udEZvclNjcmlwdFJ1bigpCiAgICAgfQogICAgIGNvbnN0IEZvbnREYXRh
KiBmb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1faXRlbS5zdHJpbmdb
bV9pdGVtLml0ZW0ucG9zXSwgZmFsc2UsIGZvbnREYXRhVmFyaWFudCkuZm9udERhdGE7CiAgICAg
Y29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udERhdGEtPmZvbnREYXRh
Rm9yQ2hhcmFjdGVyKCcgJyktPnBsYXRmb3JtRGF0YSgpOwotICAgIG1faXRlbS5mYWNlID0gcGxh
dGZvcm1EYXRhLmhhcmZidXp6RmFjZSgpOworICAgIG1faXRlbS5mYWNlID0gcGxhdGZvcm1EYXRh
LmhhcmZidXp6RmFjZSgpLT5mYWNlKCk7CiAgICAgdm9pZCogb3BhcXVlUGxhdGZvcm1EYXRhID0g
Y29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4oJnBsYXRmb3JtRGF0YSk7CiAgICAgbV9pdGVt
LmZvbnQtPnVzZXJEYXRhID0gb3BhcXVlUGxhdGZvcm1EYXRhOwogCkBAIC0yMTcsMTYgKzIzMyw2
IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjpzZXR1cEZvbnRGb3JTY3JpcHRSdW4oKQog
ICAgIG1faXRlbS5mb250LT55X3NjYWxlID0gc2NhbGU7CiB9CiAKLUhCX0ZvbnRSZWMqIENvbXBs
ZXhUZXh0Q29udHJvbGxlcjo6YWxsb2NIYXJmYnV6ekZvbnQoKQotewotICAgIEhCX0ZvbnRSZWMq
IGZvbnQgPSByZWludGVycHJldF9jYXN0PEhCX0ZvbnRSZWMqPihmYXN0TWFsbG9jKHNpemVvZihI
Ql9Gb250UmVjKSkpOwotICAgIG1lbXNldChmb250LCAwLCBzaXplb2YoSEJfRm9udFJlYykpOwot
ICAgIGZvbnQtPmtsYXNzID0gJmhhcmZidXp6U2tpYUNsYXNzOwotICAgIGZvbnQtPnVzZXJEYXRh
ID0gMDsKLQotICAgIHJldHVybiBmb250OwotfQotCiB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6ZGVsZXRlR2x5cGhBcnJheXMoKQogewogICAgIGRlbGV0ZVtdIG1faXRlbS5nbHlwaHM7CkBA
IC0yOTcsNyArMzAzLDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldEdseXBoUG9z
aXRpb25zKGJvb2wgaXNSVEwpCiAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBnbHlwaHMgaW4g
bG9naWNhbCBvcmRlciwgZmxpcHBpbmcgZm9yIFJUTCB3aGVyZSBuZWNlc3NhcnkuCiAgICAgLy8g
R2x5cGhzIGFyZSBwb3NpdGlvbmVkIHN0YXJ0aW5nIGZyb20gbV9vZmZzZXRYOyBpbiBSVEwgbW9k
ZSB0aGV5IGdvIGxlZnR3YXJkcyBmcm9tIHRoZXJlLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9pdGVtLm51bV9nbHlwaHM7ICsraSkgewotICAgICAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGxvZ0NsdXN0ZXJzSW5kZXgpIDwgbV9pdGVtLml0ZW0ubGVuZ3RoICYmIGxvZ0Ns
dXN0ZXJzKClbbG9nQ2x1c3RlcnNJbmRleF0gPCBpKQorICAgICAgICB3aGlsZSAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGxvZ0NsdXN0ZXJzSW5kZXgpIDwgbV9pdGVtLml0ZW0ubGVuZ3RoICYmIG1f
aXRlbS5sb2dfY2x1c3RlcnNbbG9nQ2x1c3RlcnNJbmRleF0gPCBpKQogICAgICAgICAgICAgbG9n
Q2x1c3RlcnNJbmRleCsrOwogCiAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGdseXBoIGlzIGp1
c3QgYWZ0ZXIgYSBzcGFjZSwgYWRkIGluIHRoZSB3b3JkIHNwYWNpbmcuCkBAIC0zOTksNCArNDA1
LDk2IEBAIGNvbnN0IFRleHRSdW4mIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2V0Tm9ybWFsaXpl
ZFRleHRSdW4oY29uc3QgVGV4dFJ1biYgb3JpZ2luCiAgICAgcmV0dXJuICpub3JtYWxpemVkUnVu
OwogfQogCitjb25zdCBpbnQgQ29tcGxleFRleHRDb250cm9sbGVyOjpnbHlwaEluZGV4Rm9yWFBv
c2l0aW9uSW5TY3JpcHRSdW4oaW50IHRhcmdldFgpCit7CisgICAgLy8gSXRlcmF0ZSB0aHJvdWdo
IHRoZSBnbHlwaHMgaW4gbG9naWNhbCBvcmRlciwgc2VlaW5nIHdoZXRoZXIgdGFyZ2V0WCBmYWxs
cyBiZXR3ZWVuIHRoZSBwcmV2aW91cworICAgIC8vIHBvc2l0aW9uIGFuZCBoYWxmd2F5IHRocm91
Z2ggdGhlIGN1cnJlbnQgZ2x5cGguCisgICAgLy8gRklYTUU6IHRoaXMgY29kZSBwcm9iYWJseSBi
ZWxvbmdzIGluIENvbXBsZXhUZXh0Q29udHJvbGxlci4KKyAgICBpbnQgbGFzdFggPSBvZmZzZXRY
KCkgLSAocnRsKCkgPyAtbV9waXhlbFdpZHRoIDogbV9waXhlbFdpZHRoKTsKKyAgICBmb3IgKGlu
dCBnbHlwaEluZGV4ID0gMDsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdseXBoSW5kZXgpIDwgbGVu
Z3RoKCk7ICsrZ2x5cGhJbmRleCkgeworICAgICAgICBpbnQgYWR2YW5jZSA9IHRydW5jYXRlRml4
ZWRQb2ludFRvSW50ZWdlcihtX2l0ZW0uYWR2YW5jZXNbZ2x5cGhJbmRleF0pOworICAgICAgICBp
bnQgbmV4dFggPSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9ucygpW2dseXBoSW5kZXhdLngoKSkg
KyBhZHZhbmNlIC8gMjsKKyAgICAgICAgaWYgKHN0ZDo6bWluKG5leHRYLCBsYXN0WCkgPD0gdGFy
Z2V0WCAmJiB0YXJnZXRYIDw9IHN0ZDo6bWF4KG5leHRYLCBsYXN0WCkpCisgICAgICAgICAgICBy
ZXR1cm4gZ2x5cGhJbmRleDsKKyAgICAgICAgbGFzdFggPSBuZXh0WDsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbGVuZ3RoKCkgLSAxOworfQorCitjb25zdCBpbnQgQ29tcGxleFRleHRDb250cm9sbGVy
OjpvZmZzZXRGb3JQb3NpdGlvbihpbnQgdGFyZ2V0WCkKK3sKKyAgICB1bnNpZ25lZCBiYXNlUG9z
aXRpb24gPSAwOworCisgICAgaW50IHggPSBvZmZzZXRYKCk7CisgICAgd2hpbGUgKG5leHRTY3Jp
cHRSdW4oKSkgeworICAgICAgICBpbnQgbmV4dFggPSBvZmZzZXRYKCk7CisKKyAgICAgICAgaWYg
KHN0ZDo6bWluKHgsIG5leHRYKSA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0gc3RkOjptYXgoeCwg
bmV4dFgpKSB7CisgICAgICAgICAgICAvLyBUaGUgeCB2YWx1ZSBpbiBxdWVzdGlvbiBpcyB3aXRo
aW4gdGhpcyBzY3JpcHQgcnVuLgorICAgICAgICAgICAgY29uc3QgaW50IGdseXBoSW5kZXggPSBn
bHlwaEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRSdW4odGFyZ2V0WCk7CisKKyAgICAgICAgICAg
IC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBpbmRleCwgd2UgaGF2ZSB0byB0dXJuIHRoYXQg
aW50byBhCisgICAgICAgICAgICAvLyBjb2RlLXBvaW50IGluZGV4LiBCZWNhdXNlIG9mIGxpZ2F0
dXJlcywgc2V2ZXJhbCBjb2RlLXBvaW50cyBtYXkKKyAgICAgICAgICAgIC8vIGhhdmUgZ29uZSBp
bnRvIGEgc2luZ2xlIGdseXBoLiBXZSBpdGVyYXRlIG92ZXIgdGhlIGNsdXN0ZXJzIGxvZworICAg
ICAgICAgICAgLy8gYW5kIGZpbmQgdGhlIGZpcnN0IGNvZGUtcG9pbnQgd2hpY2ggY29udHJpYnV0
ZWQgdG8gdGhlIGdseXBoLgorCisgICAgICAgICAgICAvLyBTb21lIHNoYXBlcnMgKGkuZS4gS2ht
ZXIpIHdpbGwgcHJvZHVjZSBjbHVzdGVyIGxvZ3Mgd2hpY2ggcmVwb3J0CisgICAgICAgICAgICAv
LyB0aGF0IC9uby8gY29kZSBwb2ludHMgY29udHJpYnV0ZWQgdG8gY2VydGFpbiBnbHlwaHMuIEJl
Y2F1c2Ugb2YKKyAgICAgICAgICAgIC8vIHRoaXMsIHdlIHRha2UgYW55IGNvZGUgcG9pbnQgd2hp
Y2ggY29udHJpYnV0ZWQgdG8gdGhlIGdseXBoIGluCisgICAgICAgICAgICAvLyBxdWVzdGlvbiwg
b3IgYW55IHN1YnNlcXVlbnQgZ2x5cGguIElmIHdlIHJ1biBvZmYgdGhlIGVuZCwgdGhlbgorICAg
ICAgICAgICAgLy8gd2UgdGFrZSB0aGUgbGFzdCBjb2RlIHBvaW50LgorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gMDsgaiA8IG51bUNvZGVQb2ludHMoKTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1faXRlbS5sb2dfY2x1c3RlcnNbal0gPj0gZ2x5cGhJbmRleCkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGJhc2VQb3NpdGlvbiArIGo7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJldHVybiBiYXNlUG9zaXRpb24gKyBudW1Db2RlUG9pbnRzKCkgLSAxOworICAg
ICAgICB9CisKKyAgICAgICAgYmFzZVBvc2l0aW9uICs9IG51bUNvZGVQb2ludHMoKTsKKyAgICB9
CisKKyAgICByZXR1cm4gYmFzZVBvc2l0aW9uOworfQorCitjb25zdCBGbG9hdFJlY3QgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBp
bnQgaGVpZ2h0LCBpbnQgZnJvbSwgaW50IHRvKQoreworICAgIGludCBmcm9tWCA9IC0xLCB0b1gg
PSAtMTsKKyAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxvZ2ljYWwg
b3JkZXIsIHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25zIG9mIGlu
dGVyZXN0LgorICAgIHdoaWxlIChuZXh0U2NyaXB0UnVuKCkgJiYgKGZyb21YID09IC0xIHx8IHRv
WCA9PSAtMSkpIHsKKyAgICAgICAgaWYgKGZyb21YID09IC0xICYmIGZyb20gPj0gMCAmJiBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZnJvbSkgPCBudW1Db2RlUG9pbnRzKCkpIHsKKyAgICAgICAgICAg
IC8vIHxmcm9tfCBpcyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLiBTbyB3ZSBpbmRleCB0aGUgY2x1
c3RlcnMgbG9nIHRvCisgICAgICAgICAgICAvLyBmaW5kIHdoaWNoIGdseXBoIHRoaXMgY29kZS1w
b2ludCBjb250cmlidXRlZCB0byBhbmQgZmluZCBpdHMgeAorICAgICAgICAgICAgLy8gcG9zaXRp
b24uCisgICAgICAgICAgICBpbnQgZ2x5cGggPSBtX2l0ZW0ubG9nX2NsdXN0ZXJzW2Zyb21dOwor
ICAgICAgICAgICAgZnJvbVggPSBwb3NpdGlvbnMoKVtnbHlwaF0ueCgpOworICAgICAgICAgICAg
aWYgKHJ0bCgpKQorICAgICAgICAgICAgICAgIGZyb21YICs9IHRydW5jYXRlRml4ZWRQb2ludFRv
SW50ZWdlcihtX2l0ZW0uYWR2YW5jZXNbZ2x5cGhdKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBmcm9tIC09IG51bUNvZGVQb2ludHMoKTsKKworICAgICAgICBpZiAodG9YID09IC0xICYm
IHRvID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSA8IG51bUNvZGVQb2ludHMoKSkg
eworICAgICAgICAgICAgaW50IGdseXBoID0gbV9pdGVtLmxvZ19jbHVzdGVyc1t0b107CisgICAg
ICAgICAgICB0b1ggPSBwb3NpdGlvbnMoKVtnbHlwaF0ueCgpOworICAgICAgICAgICAgaWYgKHJ0
bCgpKQorICAgICAgICAgICAgICAgIHRvWCArPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIo
bV9pdGVtLmFkdmFuY2VzW2dseXBoXSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdG8g
LT0gbnVtQ29kZVBvaW50cygpOworICAgIH0KKworICAgIC8vIFRoZSBwb3NpdGlvbiBpbiBxdWVz
dGlvbiBtaWdodCBiZSBqdXN0IGFmdGVyIHRoZSB0ZXh0LgorICAgIGlmIChmcm9tWCA9PSAtMSkK
KyAgICAgICAgZnJvbVggPSBvZmZzZXRYKCk7CisgICAgaWYgKHRvWCA9PSAtMSkKKyAgICAgICAg
dG9YID0gb2Zmc2V0WCgpOworCisgICAgQVNTRVJUKGZyb21YICE9IC0xICYmIHRvWCAhPSAtMSk7
CisKKyAgICBpZiAoZnJvbVggPCB0b1gpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQu
eCgpICsgZnJvbVgsIHBvaW50LnkoKSwgdG9YIC0gZnJvbVgsIGhlaWdodCk7CisKKyAgICByZXR1
cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIHRvWCwgcG9pbnQueSgpLCBmcm9tWCAtIHRvWCwgaGVp
Z2h0KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGlu
dXguaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhU
ZXh0Q29udHJvbGxlckxpbnV4LmgKaW5kZXggZTI2Mjk5MjYzMjNkNzVmYTkzYjJlNWExNGJjYjcx
NmQyMzJhOTYyOS4uZjc4M2M0MzFlYTJiYzVhYmNlNzhjNGVjOGFiMWRiOTU4N2IyYmYxYiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxl
eFRleHRDb250cm9sbGVyTGludXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oCkBAIC0zNiw2ICszNiwx
MCBAQAogI2luY2x1ZGUgIlNrU2NhbGFyLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogCitleHRl
cm4gIkMiIHsKKyNpbmNsdWRlICJoYXJmYnV6ei1zaGFwZXIuaCIKK30KKwogI2luY2x1ZGUgPHVu
aWNvZGUvdWNoYXIuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CkBAIC02MSw3ICs2NSw3IEBAIGNsYXNzIFNpbXBsZUZvbnREYXRhOwogLy8g
Y2FuIGNhbGwgfHJlc2V0fCB0byBzdGFydCBvdmVyIGFnYWluLgogY2xhc3MgQ29tcGxleFRleHRD
b250cm9sbGVyIHsKIHB1YmxpYzoKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgVGV4
dFJ1biYsIHVuc2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgRm9udCopOworICAgIENvbXBsZXhUZXh0
Q29udHJvbGxlcihjb25zdCBUZXh0UnVuJiwgdW5zaWduZWQgc3RhcnRpbmdYLCB1bnNpZ25lZCBz
dGFydGluZ1ksIHVuc2lnbmVkIHdvcmRTcGFjaW5nLCB1bnNpZ25lZCBsZXR0ZXJTcGFjaW5nLCB1
bnNpZ25lZCBwYWRkaW5nLCBjb25zdCBGb250Kik7CiAgICAgfkNvbXBsZXhUZXh0Q29udHJvbGxl
cigpOwogCiAgICAgYm9vbCBpc1dvcmRCcmVhayh1bnNpZ25lZCk7CkBAIC04NSw4ICs4OSw4IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldExldHRlclNwYWNpbmdBZGp1c3RtZW50KGludCBsZXR0ZXJT
cGFjaW5nQWRqdXN0bWVudCkgeyBtX2xldHRlclNwYWNpbmcgPSBsZXR0ZXJTcGFjaW5nQWRqdXN0
bWVudDsgfQogICAgIGludCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJT
cGFjaW5nOyB9CiAKLSAgICAvLyBTZXQgdGhlIHggb2Zmc2V0IGZvciB0aGUgbmV4dCBzY3JpcHQg
cnVuLiBUaGlzIGFmZmVjdHMgdGhlIHZhbHVlcyBpbgotICAgIC8vIHx4UG9zaXRpb25zfAorICAg
IC8vIHNldHVwRm9yUlRMIHNldHMgdXAgdGhlIGNvbnRyb2xsZXIgdG8gaGFuZGxlIFJUTCB0ZXh0
LgorICAgIHZvaWQgc2V0dXBGb3JSVEwoKTsKICAgICBib29sIHJ0bCgpIGNvbnN0IHsgcmV0dXJu
IG1fcnVuLnJ0bCgpOyB9CiAgICAgY29uc3QgdWludDE2X3QqIGdseXBocygpIGNvbnN0IHsgcmV0
dXJuIG1fZ2x5cGhzMTY7IH0KIApAQCAtOTgsMTkgKzEwMiw2IEBAIHB1YmxpYzoKICAgICAvLyBy
dW4uCiAgICAgY29uc3QgU2tQb2ludCogcG9zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wb3Np
dGlvbnM7IH0KIAotICAgIC8vIEdldCB0aGUgYWR2YW5jZXMgKHdpZHRocykgZm9yIGVhY2ggZ2x5
cGguCi0gICAgY29uc3QgSEJfRml4ZWQqIGFkdmFuY2VzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVt
LmFkdmFuY2VzOyB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIHdpZHRoIChpbiBweCkgb2YgdGhlIGN1
cnJlbnQgc2NyaXB0IHJ1bi4KLSAgICBjb25zdCB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fcGl4ZWxXaWR0aDsgfQotCi0gICAgLy8gUmV0dXJuIHRoZSBjbHVzdGVyIGxvZyBmb3Ig
dGhlIGN1cnJlbnQgc2NyaXB0IHJ1bi4gRm9yIGV4YW1wbGU6Ci0gICAgLy8gICBzY3JpcHQgcnVu
OiBmIGkgYSBuIGMgw6kgIChmaSBnZXRzIGxpZ2F0dXJlZCkKLSAgICAvLyAgIGxvZyBjbHV0cnM6
IDAgMCAxIDIgMyA0Ci0gICAgLy8gU28sIGZvciBlYWNoIGlucHV0IGNvZGUgcG9pbnQsIHRoZSBs
b2cgdGVsbHMgeW91IHdoaWNoIG91dHB1dCBnbHlwaCB3YXMKLSAgICAvLyBnZW5lcmF0ZWQgZm9y
IGl0LgotICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBsb2dDbHVzdGVycygpIGNvbnN0IHsgcmV0
dXJuIG1faXRlbS5sb2dfY2x1c3RlcnM7IH0KLQogICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9m
IGNvZGUgcG9pbnRzIGluIHRoZSBjdXJyZW50IHNjcmlwdCBydW4KICAgICBjb25zdCB1bnNpZ25l
ZCBudW1Db2RlUG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLml0ZW0ubGVuZ3RoOyB9CiAK
QEAgLTExOSw5ICsxMTAsMTQgQEAgcHVibGljOgogCiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSogZm9udFBsYXRmb3JtRGF0YUZvclNjcmlwdFJ1bigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8Rm9udFBsYXRmb3JtRGF0YSo+KG1faXRlbS5mb250LT51c2VyRGF0YSk7IH0KIAorICAgIGNv
bnN0IGludCBvZmZzZXRGb3JQb3NpdGlvbihpbnQpOworICAgIGNvbnN0IEZsb2F0UmVjdCBzZWxl
Y3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQsIGludCwgaW50KTsKKwogcHJpdmF0ZToK
KyAgICAvLyBSZXR1cm4gdGhlIHdpZHRoIChpbiBweCkgb2YgdGhlIGN1cnJlbnQgc2NyaXB0IHJ1
bi4KKyAgICBjb25zdCB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxXaWR0
aDsgfQorCiAgICAgdm9pZCBzZXR1cEZvbnRGb3JTY3JpcHRSdW4oKTsKLSAgICBIQl9Gb250UmVj
KiBhbGxvY0hhcmZidXp6Rm9udCgpOwogICAgIHZvaWQgZGVsZXRlR2x5cGhBcnJheXMoKTsKICAg
ICB2b2lkIGNyZWF0ZUdseXBoQXJyYXlzKGludCk7CiAgICAgdm9pZCByZXNldEdseXBoQXJyYXlz
KCk7CkBAIC0xMzQsNiArMTMwLDggQEAgcHJpdmF0ZToKICAgICAvLyBUaGlzIG1hdGNoZXMgdGhl
IGxvZ2ljIGluIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcmVhawogICAgIHN0YXRpYyBib29s
IGlzQ29kZXBvaW50U3BhY2UoSEJfVUNoYXIxNiBjKSB7IHJldHVybiBjID09ICcgJyB8fCBjID09
ICdcdCc7IH0KIAorICAgIGNvbnN0IGludCBnbHlwaEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRS
dW4oaW50IHRhcmdldFgpOworCiAgICAgY29uc3QgRm9udCogY29uc3QgbV9mb250OwogICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBtX2N1cnJlbnRGb250RGF0YTsKICAgICBIQl9TaGFwZXJJdGVt
IG1faXRlbTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRMaW51eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250TGludXguY3BwCmluZGV4IDBjZmZlZDE0Y2E1ZDJhYzgzZTJhZjUxYjVjODM2
ODE5Y2U2NTNjYjMuLmU3NTgwODY4M2EwMjgzZTdiNDQ4YTQzMDQwOTVlZDNhNjE3OWIwZTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRM
aW51eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udExpbnV4LmNwcApAQCAtMTY1LDE0ICsxNjUsNiBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMo
R3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsCiAgICAgfQog
fQogCi0vLyBIYXJmYnV6eiB1c2VzIDI2LjYgZml4ZWQgcG9pbnQgdmFsdWVzIGZvciBwaXhlbCBv
ZmZzZXRzLiBIb3dldmVyLCB3ZSBkb24ndAotLy8gaGFuZGxlIHN1YnBpeGVsIHBvc2l0aW9uaW5n
IHNvIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byB0cnVuY2F0ZSBIYXJmYnV6egotLy8gdmFsdWVz
IHRvIGEgbnVtYmVyIG9mIHBpeGVscy4KLXN0YXRpYyBpbnQgdHJ1bmNhdGVGaXhlZFBvaW50VG9J
bnRlZ2VyKEhCX0ZpeGVkIHZhbHVlKQotewotICAgIHJldHVybiB2YWx1ZSA+PiA2OwotfQotCiBz
dGF0aWMgdm9pZCBzZXR1cEZvclRleHRQYWludGluZyhTa1BhaW50KiBwYWludCwgU2tDb2xvciBj
b2xvcikKIHsKICAgICBwYWludC0+c2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6OmtHbHlwaElEX1Rl
eHRFbmNvZGluZyk7CkBAIC0yMDUsMjAgKzE5NywxMCBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgICAgIHNl
dHVwRm9yVGV4dFBhaW50aW5nKCZzdHJva2VQYWludCwgZ2MtPnN0cm9rZUNvbG9yKCkucmdiKCkp
OwogICAgIH0KIAotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHJ1biwgcG9p
bnQueCgpLCBwb2ludC55KCksIHRoaXMpOwotICAgIGNvbnRyb2xsZXIuc2V0V29yZFNwYWNpbmdB
ZGp1c3RtZW50KHdvcmRTcGFjaW5nKCkpOwotICAgIGNvbnRyb2xsZXIuc2V0TGV0dGVyU3BhY2lu
Z0FkanVzdG1lbnQobGV0dGVyU3BhY2luZygpKTsKLSAgICBjb250cm9sbGVyLnNldFBhZGRpbmco
cnVuLmV4cGFuc2lvbigpKTsKLQotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgLy8gRklY
TUU6IHRoaXMgY2F1c2VzIHVzIHRvIHNoYXBlIHRoZSB0ZXh0IHR3aWNlIC0tIG9uY2UgdG8gY29t
cHV0ZSB0aGUgd2lkdGggYW5kIHRoZW4gYWdhaW4KLSAgICAgICAgLy8gYmVsb3cgd2hlbiBhY3R1
YWxseSByZW5kZXJpbmcuICBDaGFuZ2UgQ29tcGxleFRleHRDb250cm9sbGVyIHRvIG1hdGNoIHBs
YXRmb3JtL21hYyBhbmQKLSAgICAgICAgLy8gcGxhdGZvcm0vY2hyb21pdW0vd2luIGJ5IGhhdmlu
ZyBpdCBzdG9yZSB0aGUgc2hhcGVkIHJ1bnMsIHNvIHdlIGNhbiByZXVzZSB0aGUgcmVzdWx0cy4K
LSAgICAgICAgY29udHJvbGxlci5yZXNldChwb2ludC54KCkgKyBjb250cm9sbGVyLndpZHRoT2ZG
dWxsUnVuKCkpOwotICAgICAgICAvLyBXZSBuZWVkIHRvIHNldCB0aGUgcGFkZGluZyBhZ2FpbiBi
ZWNhdXNlIENvbXBsZXhUZXh0Q29udHJvbGxlciBsYXlvdXQgY29uc3VtZWQgdGhlIHZhbHVlLgot
ICAgICAgICAvLyBGaXhpbmcgdGhlIGFib3ZlIHByb2JsZW0gd291bGQgaGVscCBoZXJlIHRvby4K
LSAgICAgICAgY29udHJvbGxlci5zZXRQYWRkaW5nKHJ1bi5leHBhbnNpb24oKSk7Ci0gICAgfQor
ICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHJ1biwgcG9pbnQueCgpLCBwb2lu
dC55KCksIHdvcmRTcGFjaW5nKCksIGxldHRlclNwYWNpbmcoKSwgcnVuLmV4cGFuc2lvbigpLCB0
aGlzKTsKKworICAgIGlmIChydW4ucnRsKCkpCisgICAgICAgIGNvbnRyb2xsZXIuc2V0dXBGb3JS
VEwoKTsKIAogICAgIHdoaWxlIChjb250cm9sbGVyLm5leHRTY3JpcHRSdW4oKSkgewogICAgICAg
ICBpZiAoZmlsbCkgewpAQCAtMjQyLDMwICsyMjQsMTAgQEAgdm9pZCBGb250OjpkcmF3RW1waGFz
aXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29u
c3QKIAogZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4m
IHJ1biwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiAvKiBmYWxsYmFja0ZvbnRzICov
LCBHbHlwaE92ZXJmbG93KiAvKiBnbHlwaE92ZXJmbG93ICovKSBjb25zdAogewotICAgIENvbXBs
ZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHJ1biwgMCwgMCwgdGhpcyk7Ci0gICAgY29udHJv
bGxlci5zZXRXb3JkU3BhY2luZ0FkanVzdG1lbnQod29yZFNwYWNpbmcoKSk7Ci0gICAgY29udHJv
bGxlci5zZXRMZXR0ZXJTcGFjaW5nQWRqdXN0bWVudChsZXR0ZXJTcGFjaW5nKCkpOwotICAgIGNv
bnRyb2xsZXIuc2V0UGFkZGluZyhydW4uZXhwYW5zaW9uKCkpOworICAgIENvbXBsZXhUZXh0Q29u
dHJvbGxlciBjb250cm9sbGVyKHJ1biwgMCwgMCwgd29yZFNwYWNpbmcoKSwgbGV0dGVyU3BhY2lu
ZygpLCBydW4uZXhwYW5zaW9uKCksIHRoaXMpOwogICAgIHJldHVybiBjb250cm9sbGVyLndpZHRo
T2ZGdWxsUnVuKCk7CiB9CiAKLXN0YXRpYyBpbnQgZ2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2Ny
aXB0UnVuKGNvbnN0IENvbXBsZXhUZXh0Q29udHJvbGxlciYgY29udHJvbGxlciwgaW50IHRhcmdl
dFgpCi17Ci0gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBnbHlwaHMgaW4gbG9naWNhbCBvcmRl
ciwgc2VlaW5nIHdoZXRoZXIgdGFyZ2V0WCBmYWxscyBiZXR3ZWVuIHRoZSBwcmV2aW91cwotICAg
IC8vIHBvc2l0aW9uIGFuZCBoYWxmd2F5IHRocm91Z2ggdGhlIGN1cnJlbnQgZ2x5cGguCi0gICAg
Ly8gRklYTUU6IHRoaXMgY29kZSBwcm9iYWJseSBiZWxvbmdzIGluIENvbXBsZXhUZXh0Q29udHJv
bGxlci4KLSAgICBpbnQgbGFzdFggPSBjb250cm9sbGVyLm9mZnNldFgoKSAtIChjb250cm9sbGVy
LnJ0bCgpID8gLWNvbnRyb2xsZXIud2lkdGgoKSA6IGNvbnRyb2xsZXIud2lkdGgoKSk7Ci0gICAg
Zm9yIChpbnQgZ2x5cGhJbmRleCA9IDA7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihnbHlwaEluZGV4
KSA8IGNvbnRyb2xsZXIubGVuZ3RoKCk7ICsrZ2x5cGhJbmRleCkgewotICAgICAgICBpbnQgYWR2
YW5jZSA9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihjb250cm9sbGVyLmFkdmFuY2VzKClb
Z2x5cGhJbmRleF0pOwotICAgICAgICBpbnQgbmV4dFggPSBzdGF0aWNfY2FzdDxpbnQ+KGNvbnRy
b2xsZXIucG9zaXRpb25zKClbZ2x5cGhJbmRleF0ueCgpKSArIGFkdmFuY2UgLyAyOwotICAgICAg
ICBpZiAoc3RkOjptaW4obmV4dFgsIGxhc3RYKSA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0gc3Rk
OjptYXgobmV4dFgsIGxhc3RYKSkKLSAgICAgICAgICAgIHJldHVybiBnbHlwaEluZGV4OwotICAg
ICAgICBsYXN0WCA9IG5leHRYOwotICAgIH0KLQotICAgIHJldHVybiBjb250cm9sbGVyLmxlbmd0
aCgpIC0gMTsKLX0KLQogLy8gUmV0dXJuIHRoZSBjb2RlIHBvaW50IGluZGV4IGZvciB0aGUgZ2l2
ZW4gfHh8IG9mZnNldCBpbnRvIHRoZSB0ZXh0IHJ1bi4KIGludCBGb250OjpvZmZzZXRGb3JQb3Np
dGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlUGFydGlh
bEdseXBocykgY29uc3QKQEAgLTI3Niw0OSArMjM4LDEwIEBAIGludCBGb250OjpvZmZzZXRGb3JQ
b3NpdGlvbkZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeEZsb2F0LAog
CiAgICAgLy8gKE1hYyBjb2RlIGlnbm9yZXMgaW5jbHVkZVBhcnRpYWxHbHlwaHMsIGFuZCB0aGV5
IGRvbid0IGtub3cgd2hhdCBpdCdzCiAgICAgLy8gc3VwcG9zZWQgdG8gZG8sIHNvIHdlIGp1c3Qg
aWdub3JlIGl0IGFzIHdlbGwuKQotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVy
KHJ1biwgMCwgMCwgdGhpcyk7Ci0gICAgY29udHJvbGxlci5zZXRXb3JkU3BhY2luZ0FkanVzdG1l
bnQod29yZFNwYWNpbmcoKSk7Ci0gICAgY29udHJvbGxlci5zZXRMZXR0ZXJTcGFjaW5nQWRqdXN0
bWVudChsZXR0ZXJTcGFjaW5nKCkpOwotICAgIGNvbnRyb2xsZXIuc2V0UGFkZGluZyhydW4uZXhw
YW5zaW9uKCkpOwotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgLy8gU2VlIEZJWE1FIGlu
IGRyYXdDb21wbGV4VGV4dC4KLSAgICAgICAgY29udHJvbGxlci5yZXNldChjb250cm9sbGVyLndp
ZHRoT2ZGdWxsUnVuKCkpOwotICAgICAgICBjb250cm9sbGVyLnNldFBhZGRpbmcocnVuLmV4cGFu
c2lvbigpKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBiYXNlUG9zaXRpb24gPSAwOwotCi0gICAg
aW50IHggPSBjb250cm9sbGVyLm9mZnNldFgoKTsKLSAgICB3aGlsZSAoY29udHJvbGxlci5uZXh0
U2NyaXB0UnVuKCkpIHsKLSAgICAgICAgaW50IG5leHRYID0gY29udHJvbGxlci5vZmZzZXRYKCk7
Ci0KLSAgICAgICAgaWYgKHN0ZDo6bWluKHgsIG5leHRYKSA8PSB0YXJnZXRYICYmIHRhcmdldFgg
PD0gc3RkOjptYXgoeCwgbmV4dFgpKSB7Ci0gICAgICAgICAgICAvLyBUaGUgeCB2YWx1ZSBpbiBx
dWVzdGlvbiBpcyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLgotICAgICAgICAgICAgY29uc3QgaW50
IGdseXBoSW5kZXggPSBnbHlwaEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRSdW4oY29udHJvbGxl
ciwgdGFyZ2V0WCk7Ci0KLSAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYSBnbHlwaCBp
bmRleCwgd2UgaGF2ZSB0byB0dXJuIHRoYXQgaW50byBhCi0gICAgICAgICAgICAvLyBjb2RlLXBv
aW50IGluZGV4LiBCZWNhdXNlIG9mIGxpZ2F0dXJlcywgc2V2ZXJhbCBjb2RlLXBvaW50cyBtYXkK
LSAgICAgICAgICAgIC8vIGhhdmUgZ29uZSBpbnRvIGEgc2luZ2xlIGdseXBoLiBXZSBpdGVyYXRl
IG92ZXIgdGhlIGNsdXN0ZXJzIGxvZwotICAgICAgICAgICAgLy8gYW5kIGZpbmQgdGhlIGZpcnN0
IGNvZGUtcG9pbnQgd2hpY2ggY29udHJpYnV0ZWQgdG8gdGhlIGdseXBoLgotCi0gICAgICAgICAg
ICAvLyBTb21lIHNoYXBlcnMgKGkuZS4gS2htZXIpIHdpbGwgcHJvZHVjZSBjbHVzdGVyIGxvZ3Mg
d2hpY2ggcmVwb3J0Ci0gICAgICAgICAgICAvLyB0aGF0IC9uby8gY29kZSBwb2ludHMgY29udHJp
YnV0ZWQgdG8gY2VydGFpbiBnbHlwaHMuIEJlY2F1c2Ugb2YKLSAgICAgICAgICAgIC8vIHRoaXMs
IHdlIHRha2UgYW55IGNvZGUgcG9pbnQgd2hpY2ggY29udHJpYnV0ZWQgdG8gdGhlIGdseXBoIGlu
Ci0gICAgICAgICAgICAvLyBxdWVzdGlvbiwgb3IgYW55IHN1YnNlcXVlbnQgZ2x5cGguIElmIHdl
IHJ1biBvZmYgdGhlIGVuZCwgdGhlbgotICAgICAgICAgICAgLy8gd2UgdGFrZSB0aGUgbGFzdCBj
b2RlIHBvaW50LgotICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQqIGxvZyA9IGNvbnRy
b2xsZXIubG9nQ2x1c3RlcnMoKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGog
PCBjb250cm9sbGVyLm51bUNvZGVQb2ludHMoKTsgKytqKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGxvZ1tqXSA+PSBnbHlwaEluZGV4KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZVBv
c2l0aW9uICsgajsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJuIGJhc2VQb3Np
dGlvbiArIGNvbnRyb2xsZXIubnVtQ29kZVBvaW50cygpIC0gMTsKLSAgICAgICAgfQotCi0gICAg
ICAgIGJhc2VQb3NpdGlvbiArPSBjb250cm9sbGVyLm51bUNvZGVQb2ludHMoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gYmFzZVBvc2l0aW9uOworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250
cm9sbGVyKHJ1biwgMCwgMCwgd29yZFNwYWNpbmcoKSwgbGV0dGVyU3BhY2luZygpLCBydW4uZXhw
YW5zaW9uKCksIHRoaXMpOworICAgIGlmIChydW4ucnRsKCkpCisgICAgICAgIGNvbnRyb2xsZXIu
c2V0dXBGb3JSVEwoKTsKKyAgICByZXR1cm4gY29udHJvbGxlci5vZmZzZXRGb3JQb3NpdGlvbih0
YXJnZXRYKTsKIH0KIAogLy8gUmV0dXJuIHRoZSByZWN0YW5nbGUgZm9yIHNlbGVjdGluZyB0aGUg
Z2l2ZW4gcmFuZ2Ugb2YgY29kZS1wb2ludHMgaW4gdGhlIFRleHRSdW4uCkBAIC0zMjYsNTEgKzI0
OSwxMCBAQCBGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBoZWlnaHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CiB7Ci0g
ICAgaW50IGZyb21YID0gLTEsIHRvWCA9IC0xOwotICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBj
b250cm9sbGVyKHJ1biwgMCwgMCwgdGhpcyk7Ci0gICAgY29udHJvbGxlci5zZXRXb3JkU3BhY2lu
Z0FkanVzdG1lbnQod29yZFNwYWNpbmcoKSk7Ci0gICAgY29udHJvbGxlci5zZXRMZXR0ZXJTcGFj
aW5nQWRqdXN0bWVudChsZXR0ZXJTcGFjaW5nKCkpOwotICAgIGNvbnRyb2xsZXIuc2V0UGFkZGlu
ZyhydW4uZXhwYW5zaW9uKCkpOwotICAgIGlmIChydW4ucnRsKCkpIHsKLSAgICAgICAgLy8gU2Vl
IEZJWE1FIGluIGRyYXdDb21wbGV4VGV4dC4KLSAgICAgICAgY29udHJvbGxlci5yZXNldChjb250
cm9sbGVyLndpZHRoT2ZGdWxsUnVuKCkpOwotICAgICAgICBjb250cm9sbGVyLnNldFBhZGRpbmco
cnVuLmV4cGFuc2lvbigpKTsKLSAgICB9Ci0KLSAgICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNj
cmlwdCBydW5zIGluIGxvZ2ljYWwgb3JkZXIsIHNlYXJjaGluZyBmb3IgdGhlIHJ1biBjb3Zlcmlu
ZyB0aGUgcG9zaXRpb25zIG9mIGludGVyZXN0LgotICAgIHdoaWxlIChjb250cm9sbGVyLm5leHRT
Y3JpcHRSdW4oKSAmJiAoZnJvbVggPT0gLTEgfHwgdG9YID09IC0xKSkgewotICAgICAgICBpZiAo
ZnJvbVggPT0gLTEgJiYgZnJvbSA+PSAwICYmIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmcm9tKSA8
IGNvbnRyb2xsZXIubnVtQ29kZVBvaW50cygpKSB7Ci0gICAgICAgICAgICAvLyB8ZnJvbXwgaXMg
d2l0aGluIHRoaXMgc2NyaXB0IHJ1bi4gU28gd2UgaW5kZXggdGhlIGNsdXN0ZXJzIGxvZyB0bwot
ICAgICAgICAgICAgLy8gZmluZCB3aGljaCBnbHlwaCB0aGlzIGNvZGUtcG9pbnQgY29udHJpYnV0
ZWQgdG8gYW5kIGZpbmQgaXRzIHgKLSAgICAgICAgICAgIC8vIHBvc2l0aW9uLgotICAgICAgICAg
ICAgaW50IGdseXBoID0gY29udHJvbGxlci5sb2dDbHVzdGVycygpW2Zyb21dOwotICAgICAgICAg
ICAgZnJvbVggPSBjb250cm9sbGVyLnBvc2l0aW9ucygpW2dseXBoXS54KCk7Ci0gICAgICAgICAg
ICBpZiAoY29udHJvbGxlci5ydGwoKSkKLSAgICAgICAgICAgICAgICBmcm9tWCArPSB0cnVuY2F0
ZUZpeGVkUG9pbnRUb0ludGVnZXIoY29udHJvbGxlci5hZHZhbmNlcygpW2dseXBoXSk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgZnJvbSAtPSBjb250cm9sbGVyLm51bUNvZGVQb2ludHMo
KTsKLQotICAgICAgICBpZiAodG9YID09IC0xICYmIHRvID49IDAgJiYgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHRvKSA8IGNvbnRyb2xsZXIubnVtQ29kZVBvaW50cygpKSB7Ci0gICAgICAgICAgICBp
bnQgZ2x5cGggPSBjb250cm9sbGVyLmxvZ0NsdXN0ZXJzKClbdG9dOwotICAgICAgICAgICAgdG9Y
ID0gY29udHJvbGxlci5wb3NpdGlvbnMoKVtnbHlwaF0ueCgpOwotICAgICAgICAgICAgaWYgKGNv
bnRyb2xsZXIucnRsKCkpCi0gICAgICAgICAgICAgICAgdG9YICs9IHRydW5jYXRlRml4ZWRQb2lu
dFRvSW50ZWdlcihjb250cm9sbGVyLmFkdmFuY2VzKClbZ2x5cGhdKTsKLSAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICB0byAtPSBjb250cm9sbGVyLm51bUNvZGVQb2ludHMoKTsKLSAgICB9Ci0K
LSAgICAvLyBUaGUgcG9zaXRpb24gaW4gcXVlc3Rpb24gbWlnaHQgYmUganVzdCBhZnRlciB0aGUg
dGV4dC4KLSAgICBpZiAoZnJvbVggPT0gLTEpCi0gICAgICAgIGZyb21YID0gY29udHJvbGxlci5v
ZmZzZXRYKCk7Ci0gICAgaWYgKHRvWCA9PSAtMSkKLSAgICAgICAgdG9YID0gY29udHJvbGxlci5v
ZmZzZXRYKCk7Ci0KLSAgICBBU1NFUlQoZnJvbVggIT0gLTEgJiYgdG9YICE9IC0xKTsKLQotICAg
IGlmIChmcm9tWCA8IHRvWCkKLSAgICAgICAgcmV0dXJuIEZsb2F0UmVjdChwb2ludC54KCkgKyBm
cm9tWCwgcG9pbnQueSgpLCB0b1ggLSBmcm9tWCwgaGVpZ2h0KTsKLQotICAgIHJldHVybiBGbG9h
dFJlY3QocG9pbnQueCgpICsgdG9YLCBwb2ludC55KCksIGZyb21YIC0gdG9YLCBoZWlnaHQpOwor
ICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHJ1biwgMCwgMCwgd29yZFNwYWNp
bmcoKSwgbGV0dGVyU3BhY2luZygpLCBydW4uZXhwYW5zaW9uKCksIHRoaXMpOworICAgIGlmIChy
dW4ucnRsKCkpCisgICAgICAgIGNvbnRyb2xsZXIuc2V0dXBGb3JSVEwoKTsKKyAgICByZXR1cm4g
Y29udHJvbGxlci5zZWxlY3Rpb25SZWN0KHBvaW50LCBoZWlnaHQsIGZyb20sIHRvKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5j
cHAKaW5kZXggMWZiNTk1N2I3YjE0YzJjZWIxMjFhZTc0YjRiYTdhZGMwMjg5YjU3NC4uYjJhM2Vj
YzZjODk4NzZmM2VhNzhkNWZkM2YxZDI3ZWM0MzA2ODg2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxh
dGZvcm1EYXRhTGludXguY3BwCkBAIC0zMSw3ICszMSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogCi0jaW5jbHVkZSAiSGFyZmJ1enpTa2lh
LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUJyaWRn
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCkBAIC02MywxMSArNjIsNiBAQCB2b2lk
IEZvbnRQbGF0Zm9ybURhdGE6OnNldFN1YnBpeGVsR2x5cGhzKGJvb2wgaXNTdWJwaXhlbEdseXBo
cykKICAgICBpc1NraWFTdWJwaXhlbEdseXBocyA9IGlzU3VicGl4ZWxHbHlwaHM7CiB9CiAKLUZv
bnRQbGF0Zm9ybURhdGE6OlJlZkNvdW50ZWRIYXJmYnV6ekZhY2U6On5SZWZDb3VudGVkSGFyZmJ1
enpGYWNlKCkKLXsKLSAgICBIQl9GcmVlRmFjZShtX2hhcmZidXp6RmFjZSk7Ci19Ci0KIEZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc3Jj
KQogICAgIDogbV90eXBlZmFjZShzcmMubV90eXBlZmFjZSkKICAgICAsIG1fZmFtaWx5KHNyYy5t
X2ZhbWlseSkKQEAgLTIyOSwxMiArMjIzLDEyIEBAIGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNG
aXhlZFBpdGNoKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUhCX0ZhY2VSZWNfKiBG
b250UGxhdGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UoKSBjb25zdAorSGFyZmJ1enpGYWNlKiBGb250
UGxhdGZvcm1EYXRhOjpoYXJmYnV6ekZhY2UoKSBjb25zdAogewogICAgIGlmICghbV9oYXJmYnV6
ekZhY2UpCi0gICAgICAgIG1faGFyZmJ1enpGYWNlID0gUmVmQ291bnRlZEhhcmZidXp6RmFjZTo6
Y3JlYXRlKEhCX05ld0ZhY2UoY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4odGhpcyksIGhh
cmZidXp6U2tpYUdldFRhYmxlKSk7CisgICAgICAgIG1faGFyZmJ1enpGYWNlID0gSGFyZmJ1enpG
YWNlOjpjcmVhdGUoY29uc3RfY2FzdDxGb250UGxhdGZvcm1EYXRhKj4odGhpcykpOwogCi0gICAg
cmV0dXJuIG1faGFyZmJ1enpGYWNlLT5mYWNlKCk7CisgICAgcmV0dXJuIG1faGFyZmJ1enpGYWNl
LmdldCgpOwogfQogCiB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnF1ZXJ5U3lzdGVtRm9yUmVuZGVy
U3R5bGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguaAppbmRleCA1NDFhYTg2NjVh
NmMwZmM4YmMyZTIwZDBhODc5NjZlZWM4MDI0MDQzLi44NmI5NDFjYWU0MDUxOWE5NGExZjhhNDA5
MmVkYTRlNmE2ZDEzZjhiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguaApAQCAt
MzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiRm9udE9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSAi
Rm9udFJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiSGFyZmJ1enpTa2lhLmgiCiAjaW5jbHVkZSAi
VGV4dE9yaWVudGF0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CkBAIC00Myw4ICs0NCw2IEBACiBjbGFzcyBTa1R5cGVmYWNlOwogdHlwZWRl
ZiB1aW50MzJfdCBTa0ZvbnRJRDsKIAotc3RydWN0IEhCX0ZhY2VSZWNfOwotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEZvbnREZXNjcmlwdGlvbjsKQEAgLTEyOCw3ICsxMjcsNyBAQCBw
dWJsaWM6CiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAjZW5kaWYKIAotICAgIEhC
X0ZhY2VSZWNfKiBoYXJmYnV6ekZhY2UoKSBjb25zdDsKKyAgICBIYXJmYnV6ekZhY2UqIGhhcmZi
dXp6RmFjZSgpIGNvbnN0OwogCiAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIC8vIEdsb2Jh
bCBmb250IHByZWZlcmVuY2VzLi4uCkBAIC0xMzgsMjUgKzEzNyw2IEBAIHB1YmxpYzoKICAgICBz
dGF0aWMgdm9pZCBzZXRTdWJwaXhlbEdseXBocyhib29sIG9uKTsKIAogcHJpdmF0ZToKLSAgICBj
bGFzcyBSZWZDb3VudGVkSGFyZmJ1enpGYWNlIDogcHVibGljIFJlZkNvdW50ZWQ8UmVmQ291bnRl
ZEhhcmZidXp6RmFjZT4gewotICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8
UmVmQ291bnRlZEhhcmZidXp6RmFjZT4gY3JlYXRlKEhCX0ZhY2VSZWNfKiBoYXJmYnV6ekZhY2Up
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUmVmQ291bnRlZEhh
cmZidXp6RmFjZShoYXJmYnV6ekZhY2UpKTsKLSAgICAgICAgfQotCi0gICAgICAgIH5SZWZDb3Vu
dGVkSGFyZmJ1enpGYWNlKCk7Ci0KLSAgICAgICAgSEJfRmFjZVJlY18qIGZhY2UoKSBjb25zdCB7
IHJldHVybiBtX2hhcmZidXp6RmFjZTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgUmVmQ291
bnRlZEhhcmZidXp6RmFjZShIQl9GYWNlUmVjXyogaGFyZmJ1enpGYWNlKSA6IG1faGFyZmJ1enpG
YWNlKGhhcmZidXp6RmFjZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgSEJfRmFj
ZVJlY18qIG1faGFyZmJ1enpGYWNlOwotICAgIH07Ci0KICAgICB2b2lkIHF1ZXJ5U3lzdGVtRm9y
UmVuZGVyU3R5bGUoKTsKIAogICAgIC8vIEZJWE1FOiBDb3VsZCBTa0F1dG9VbnJlZiBiZSB1c2Vk
IGhlcmU/CkBAIC0xNjksNyArMTQ5LDcgQEAgcHJpdmF0ZToKICAgICBGb250T3JpZW50YXRpb24g
bV9vcmllbnRhdGlvbjsKICAgICBUZXh0T3JpZW50YXRpb24gbV90ZXh0T3JpZW50YXRpb247CiAg
ICAgRm9udFJlbmRlclN0eWxlIG1fc3R5bGU7Ci0gICAgbXV0YWJsZSBSZWZQdHI8UmVmQ291bnRl
ZEhhcmZidXp6RmFjZT4gbV9oYXJmYnV6ekZhY2U7CisgICAgbXV0YWJsZSBSZWZQdHI8SGFyZmJ1
enpGYWNlPiBtX2hhcmZidXp6RmFjZTsKIAogICAgIFNrVHlwZWZhY2UqIGhhc2hUYWJsZURlbGV0
ZWRGb250VmFsdWUoKSBjb25zdCB7IHJldHVybiByZWludGVycHJldF9jYXN0PFNrVHlwZWZhY2Uq
PigtMSk7IH0KIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9IYXJmYnV6elNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcAppbmRleCAyN2EzMDljZjEwMjg1MmM1YTRm
ODczODc4NTZjY2MxNzQxZTQ3NmJlLi5iOTRlZDFhODlmYjdjZGVmN2FiY2UxYjdmZGY5MDI4OTYx
NmY0NTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9IYXJmYnV6elNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHAKQEAgLTE5Nyw2ICsxOTcsMTYgQEAgSEJfRm9u
dENsYXNzIGhhcmZidXp6U2tpYUNsYXNzID0gewogICAgIGdldEZvbnRNZXRyaWMsCiB9OwogCitI
Ql9Gb250XyogYWxsb2NIYXJmYnV6ekZvbnQoKQoreworICAgIEhCX0ZvbnRfKiBmb250ID0gcmVp
bnRlcnByZXRfY2FzdDxIQl9Gb250Xyo+KGZhc3RNYWxsb2Moc2l6ZW9mKEhCX0ZvbnRfKSkpOwor
ICAgIG1lbXNldChmb250LCAwLCBzaXplb2YoSEJfRm9udF8pKTsKKyAgICBmb250LT5rbGFzcyA9
ICZoYXJmYnV6elNraWFDbGFzczsKKyAgICBmb250LT51c2VyRGF0YSA9IDA7CisKKyAgICByZXR1
cm4gZm9udDsKK30KKwogSEJfRXJyb3IgaGFyZmJ1enpTa2lhR2V0VGFibGUodm9pZCogdm9pZGZh
Y2UsIGNvbnN0IEhCX1RhZyB0YWcsIEhCX0J5dGUqIGJ1ZmZlciwgSEJfVUludCogbGVuKQogewog
ICAgIEZvbnRQbGF0Zm9ybURhdGEqIGZvbnQgPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9y
bURhdGEqPih2b2lkZmFjZSk7CkBAIC0yMTYsNCArMjI2LDE0IEBAIEhCX0Vycm9yIGhhcmZidXp6
U2tpYUdldFRhYmxlKHZvaWQqIHZvaWRmYWNlLCBjb25zdCBIQl9UYWcgdGFnLCBIQl9CeXRlKiBi
dWZmZXIsCiAgICAgcmV0dXJuIEhCX0Vycl9PazsKIH0KIAorSGFyZmJ1enpGYWNlOjpIYXJmYnV6
ekZhY2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhKQoreworICAgIG1faGFyZmJ1enpG
YWNlID0gSEJfTmV3RmFjZShwbGF0Zm9ybURhdGEsIGhhcmZidXp6U2tpYUdldFRhYmxlKTsKK30K
KworSGFyZmJ1enpGYWNlOjp+SGFyZmJ1enpGYWNlKCkKK3sKKyAgICBIQl9GcmVlRmFjZShtX2hh
cmZidXp6RmFjZSk7Cit9CisKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5o
CmluZGV4IGY3ZTA0OTYwZWViYWQ4Y2E4NTUzMmNlZWY1MGJiNWJlZTZiZWYxYzEuLmE1YjVkN2Yw
NTE5Nzg0MTVmMjczNjRiYmU3MDkyOTJiMGZjZmRhN2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5oCkBAIC0z
MSwxNCArMzEsMzcgQEAKICNpZm5kZWYgSGFyZmJ1enpTa2lhX2gKICNkZWZpbmUgSGFyZmJ1enpT
a2lhX2gKIAotZXh0ZXJuICJDIiB7Ci0jaW5jbHVkZSAiaGFyZmJ1enotc2hhcGVyLmgiCi0jaW5j
bHVkZSAiaGFyZmJ1enotdW5pY29kZS5oIgotfQorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCitzdHJ1Y3QgSEJfRmFjZVJlY187CitzdHJ1Y3Qg
SEJfRm9udF87CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBIQl9FcnJvciBoYXJmYnV6elNr
aWFHZXRUYWJsZSh2b2lkKiB2b2lkZmFjZSwgY29uc3QgSEJfVGFnLCBIQl9CeXRlKiBidWZmZXIs
IEhCX1VJbnQqIGxlbik7Ci0gICAgZXh0ZXJuIGNvbnN0IEhCX0ZvbnRDbGFzcyBoYXJmYnV6elNr
aWFDbGFzczsKKworY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKKworY2xhc3MgSGFyZmJ1enpGYWNl
IDogcHVibGljIFJlZkNvdW50ZWQ8SGFyZmJ1enpGYWNlPiB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8SGFyZmJ1enpGYWNlPiBjcmVhdGUoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZv
cm1EYXRhKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBIYXJmYnV6ekZhY2Uo
cGxhdGZvcm1EYXRhKSk7CisgICAgfQorCisgICAgfkhhcmZidXp6RmFjZSgpOworCisgICAgSEJf
RmFjZVJlY18qIGZhY2UoKSBjb25zdCB7IHJldHVybiBtX2hhcmZidXp6RmFjZTsgfQorCitwcml2
YXRlOgorICAgIEhhcmZidXp6RmFjZShGb250UGxhdGZvcm1EYXRhKik7CisKKyAgICBIQl9GYWNl
UmVjXyogbV9oYXJmYnV6ekZhY2U7Cit9OworCisvLyBGSVhNRTogUmVtb3ZlIHRoaXMgYXN5bW1l
dHJpYyBhbGxvYy9mcmVlIGZ1bmN0aW9uLgorLy8gV2UnbGwgcmVtb3ZlIHRoaXMgb25jZSB3ZSBt
b3ZlIHRvIHRoZSBuZXcgSGFyZmJ1enogQVBJLgorSEJfRm9udF8qIGFsbG9jSGFyZmJ1enpGb250
KCk7CisKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9HbHlwaFBhZ2VUcmVl
Tm9kZVNraWEuY3BwCmluZGV4IGYzNjJmYTNjMWJlZDY2YTcwYTlhMTE1NzA4NzM0MzhmZWVjM2U3
ZDQuLjQwNjFmNzRkYjE0NjUzNDVjMTA4OGFlNmFlZTBjY2E3MmY2OTAyYWEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVT
a2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBo
UGFnZVRyZWVOb2RlU2tpYS5jcHAKQEAgLTM5LDExICszOSwxNSBAQAogI2luY2x1ZGUgIlNrUGFp
bnQuaCIKICNpbmNsdWRlICJTa1V0aWxzLmgiCiAKK2V4dGVybiAiQyIgeworI2luY2x1ZGUgImhh
cmZidXp6LXNoYXBlci5oIgorfQorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBpbnQg
c3Vic3RpdHV0ZVdpdGhWZXJ0aWNhbEdseXBocyhjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERh
dGEsIHVpbnQxNl90KiBnbHlwaHMsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkKIHsKLSAgICBIQl9G
YWNlUmVjXyogaGJGYWNlID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmhhcmZidXp6RmFjZSgp
OworICAgIEhCX0ZhY2VSZWNfKiBoYkZhY2UgPSBmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGFy
ZmJ1enpGYWNlKCktPmZhY2UoKTsKICAgICBpZiAoIWhiRmFjZS0+Z3N1YikgewogICAgICAgICAv
LyBpZiB0aGVyZSBpcyBubyBHU1VCIHRhYmxlLCB0cmVhdCBpdCBhcyBub3QgY292ZXJlZAogICAg
ICAgICByZXR1cm4gMFhmZmZmOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98817</attachid>
            <date>2011-06-27 17:09:56 -0700</date>
            <delta_ts>2011-06-27 17:18:40 -0700</delta_ts>
            <desc>Patch V2</desc>
            <filename>bug-62530-20110628090955.patch</filename>
            <type>text/plain</type>
            <size>30462</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk4NzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNDMwOGMwNGMyZjY5Zjk3
NmRlY2Q1MzE3MWZkYjVmYjM5N2M2NzY1Li41NDc1NDRlZjhkMzg3YWE3MDg5ZGFkMzkzNTg3MGE5
YTc3MGUxNmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDYtMjcgIEtlbmlj
aGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGRlcGVuZGVuY2ll
cyBvbiBoYXJmYnV6eiBmcm9tIEZvbnRQbGF0Zm9ybURhdGFMaW51eCBhbmQgRm9udExpbnV4Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjUzMAorCisg
ICAgICAgIC0gTW92ZWQgY29kZXMgb2YgRm9udExpbnV4IHdoaWNoIGRlcGVuZCBvbiBoYXJmYnV6
eiBBUElzIHRvIENvbXBsZXhUZXh0Q29udHJvbGxlci4gIFJlbW92ZWQgU29tZSBtZXRob2RzIG9m
IENvbXBsZXhUZXh0Q29udHJvbGxlcihhZHZhbmNlcygpIGFuZCBsb2dDbHVzdGVycygpKSBzaW5j
ZSB0aGV5IGFyZSBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAtIE1vdmVkIFJlZkNvdW50ZWRI
YXJmYnV6ekZhY2UgZnJvbSBGb250UGxhdGZvcm1EYXRhTGludXggdG8gSGFyZmJ1enpTa2lhIGFu
ZCByZW5hbWVkIGl0IHRvIEhhcmZidXp6RmFjZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVj
YXVzZSB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UgKFRoZSBleGlzdGluZyB0ZXN0cyBzaG91
bGQgY292ZXIgdGhlIGNoYW5nZXMpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIpOiBBZGRlZCBhcmd1
bWVudHMgc28gZWxpbWluYXRpbmcgc2V0dGVyIGludm9jYXRpb25zLgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpzZXR1cEZvclJUTCk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpzZXR1cEZvbnRGb3JTY3JpcHRSdW4pOiBB
ZG9wdCB0aGUgY2hhbmdlIG9mIEhhcmZidXp6RmFjZSBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0R2x5cGhQb3NpdGlvbnMpOiBVc2UgbV9pdGVtLmxv
Z19jbHVzdGVycyBpbnN0ZWFkIG9mIHJlbW92ZWQgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6
Q29tcGxleFRleHRDb250cm9sbGVyOjpnbHlwaEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRSdW4p
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6b2Zmc2V0
Rm9yUG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJv
bGxlcjo6c2VsZWN0aW9uUmVjdCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OndpZHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwOiBSZW1vdmVkIHRydW5jYXRlRml4ZWRQb2ludFRv
SW50ZWdlcigpLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KTogUmVt
b3ZlZCBzZXR0ZXIgaW52b2NhdGlvbnMgb2YgQ29tcGxleFRleHRDb250cm9sbGVyLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KTogTW92
ZWQgaGFyZmJ1enogZGVwZW5kZW50IGNvZGUgdG8gQ29tcGxleFRleHRDb250cm9sbGVyLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KTogRGl0dG8u
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxp
bnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6RmFj
ZSk6IFdyYXBwZWQgdXAgSEJfRmFjZVJlYyBpbiBIYXJmYnV6ekZhY2UgY2xhc3MuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4Lmg6IE1v
dmVkIFJlZkNvdW50ZWRIYXJmYnV6ekZhY2UgY2xhc3MgYW5kIHJlbmFtZWQgdG8gSGFyZmJ1enpG
YWNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphbGxvY0hhcmZidXp6Rm9udCk6IE1vdmVkIGZyb20gQ29t
cGxleFRleHRDb250cm9sbGVyTGludXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6SGFyZmJ1enpG
YWNlOjpIYXJmYnV6ekZhY2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZidXp6RmFj
ZTo6fkhhcmZidXp6RmFjZSk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0hhcmZidXp6U2tpYS5oOgorICAgICAgICAoV2ViQ29yZTo6SGFyZmJ1enpGYWNlOjpj
cmVhdGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZidXp6RmFjZTo6ZmFjZSk6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVT
a2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN1YnN0aXR1dGVXaXRoVmVydGljYWxHbHlwaHMp
OiBBZG9wdCAgdGhlIGNoYW5nZSBvZiBIYXJmYnV6ekZhY2UgY2xhc3MuCisKIDIwMTEtMDYtMjcg
IEpvZSBXaWxkICA8am9zZXBoLndpbGRAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNpbW9uIEZyYXNlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4
LmNwcAppbmRleCBiYzE1Yjk0ZDZkY2E0ODYzYmRiNDZjOTUwNGI0NGNiMjkzNTY4ZTBkLi41Mjlj
MmI1OGY1OTE3ZmY2OTdhZTBkMTI1YmJjMmNhOTYyYTdkYjA2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJM
aW51eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwCkBAIC0zMSw5ICszMSwxNCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmgiCiAK
KyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiVGV4
dFJ1bi5oIgogCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJoYXJmYnV6ei11bmljb2RlLmgiCit9
CisKICNpbmNsdWRlIDx1bmljb2RlL25vcm1senIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDYsMTQgKzUxLDkgQEAgc3RhdGljIGludCB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIo
SEJfRml4ZWQgdmFsdWUpCiAgICAgcmV0dXJuIHZhbHVlID4+IDY7CiB9CiAKLUNvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IFRleHRSdW4mIHJ1biwgdW5z
aWduZWQgc3RhcnRpbmdYLCB1bnNpZ25lZCBzdGFydGluZ1ksIGNvbnN0IEZvbnQqIGZvbnQpCitD
b21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBUZXh0UnVu
JiBydW4sIHVuc2lnbmVkIHN0YXJ0aW5nWCwgdW5zaWduZWQgc3RhcnRpbmdZLCB1bnNpZ25lZCB3
b3JkU3BhY2luZywgdW5zaWduZWQgbGV0dGVyU3BhY2luZywgdW5zaWduZWQgcGFkZGluZywgY29u
c3QgRm9udCogZm9udCkKICAgICA6IG1fZm9udChmb250KQogICAgICwgbV9ydW4oZ2V0Tm9ybWFs
aXplZFRleHRSdW4ocnVuLCBtX25vcm1hbGl6ZWRSdW4sIG1fbm9ybWFsaXplZEJ1ZmZlcikpCi0g
ICAgLCBtX3dvcmRTcGFjaW5nQWRqdXN0bWVudCgwKQotICAgICwgbV9wYWRkaW5nKDApCi0gICAg
LCBtX3BhZFBlcldvcmRCcmVhaygwKQotICAgICwgbV9wYWRFcnJvcigwKQotICAgICwgbV9sZXR0
ZXJTcGFjaW5nKDApCiB7CiAgICAgLy8gRG8gbm90IHVzZSB8cnVufCBpbnNpZGUgdGhpcyBjb25z
dHJ1Y3Rvci4gVXNlIHxtX3J1bnwgaW5zdGVhZC4KIApAQCAtNzYsNiArNzYsMTAgQEAgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgVGV4dFJ1biYgcnVu
LCB1bnNpZ25lZCBzdGFydGkKIAogICAgIHJlc2V0KHN0YXJ0aW5nWCk7CiAgICAgbV9zdGFydGlu
Z1kgPSBzdGFydGluZ1k7CisKKyAgICBzZXRXb3JkU3BhY2luZ0FkanVzdG1lbnQod29yZFNwYWNp
bmcpOworICAgIHNldExldHRlclNwYWNpbmdBZGp1c3RtZW50KGxldHRlclNwYWNpbmcpOworICAg
IHNldFBhZGRpbmcocGFkZGluZyk7CiB9CiAKIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6fkNvbXBs
ZXhUZXh0Q29udHJvbGxlcigpCkBAIC0xNDMsNiArMTQ3LDE4IEBAIHZvaWQgQ29tcGxleFRleHRD
b250cm9sbGVyOjpyZXNldCh1bnNpZ25lZCBvZmZzZXQpCiAgICAgbV9vZmZzZXRYID0gb2Zmc2V0
OwogfQogCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0dXBGb3JSVEwoKQoreworICAg
IGludCBwYWRkaW5nID0gbV9wYWRkaW5nOworICAgIC8vIEZJWE1FOiB0aGlzIGNhdXNlcyB1cyB0
byBzaGFwZSB0aGUgdGV4dCB0d2ljZSAtLSBvbmNlIHRvIGNvbXB1dGUgdGhlIHdpZHRoIGFuZCB0
aGVuIGFnYWluCisgICAgLy8gYmVsb3cgd2hlbiBhY3R1YWxseSByZW5kZXJpbmcuIENoYW5nZSBD
b21wbGV4VGV4dENvbnRyb2xsZXIgdG8gbWF0Y2ggcGxhdGZvcm0vbWFjIGFuZAorICAgIC8vIHBs
YXRmb3JtL2Nocm9taXVtL3dpbiBieSBoYXZpbmcgaXQgc3RvcmUgdGhlIHNoYXBlZCBydW5zLCBz
byB3ZSBjYW4gcmV1c2UgdGhlIHJlc3VsdHMuCisgICAgcmVzZXQobV9vZmZzZXRYICsgd2lkdGhP
ZkZ1bGxSdW4oKSk7CisgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHBhZGRpbmcgYWdhaW4gYmVj
YXVzZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgbGF5b3V0IGNvbnN1bWVkIHRoZSB2YWx1ZS4KKyAg
ICAvLyBGaXhpbmcgdGhlIGFib3ZlIHByb2JsZW0gd291bGQgaGVscCBoZXJlIHRvby4KKyAgICBz
ZXRQYWRkaW5nKHBhZGRpbmcpOworfQorCiAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHNjcmlwdCBy
dW4sIHJldHVybmluZyBmYWxzZSB3aGVuIHRoZSBlbmQgb2YgdGhlCiAvLyBUZXh0UnVuIGhhcyBi
ZWVuIHJlYWNoZWQuCiBib29sIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6bmV4dFNjcmlwdFJ1bigp
CkBAIC0yMDIsNyArMjE4LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldHVwRm9u
dEZvclNjcmlwdFJ1bigpCiAgICAgfQogICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSA9IG1f
Zm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1faXRlbS5zdHJpbmdbbV9pdGVtLml0ZW0ucG9z
XSwgZmFsc2UsIGZvbnREYXRhVmFyaWFudCkuZm9udERhdGE7CiAgICAgY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udERhdGEtPmZvbnREYXRhRm9yQ2hhcmFjdGVyKCcg
JyktPnBsYXRmb3JtRGF0YSgpOwotICAgIG1faXRlbS5mYWNlID0gcGxhdGZvcm1EYXRhLmhhcmZi
dXp6RmFjZSgpOworICAgIG1faXRlbS5mYWNlID0gcGxhdGZvcm1EYXRhLmhhcmZidXp6RmFjZSgp
LT5mYWNlKCk7CiAgICAgdm9pZCogb3BhcXVlUGxhdGZvcm1EYXRhID0gY29uc3RfY2FzdDxGb250
UGxhdGZvcm1EYXRhKj4oJnBsYXRmb3JtRGF0YSk7CiAgICAgbV9pdGVtLmZvbnQtPnVzZXJEYXRh
ID0gb3BhcXVlUGxhdGZvcm1EYXRhOwogCkBAIC0yMTcsMTYgKzIzMyw2IEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpzZXR1cEZvbnRGb3JTY3JpcHRSdW4oKQogICAgIG1faXRlbS5mb250
LT55X3NjYWxlID0gc2NhbGU7CiB9CiAKLUhCX0ZvbnRSZWMqIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6YWxsb2NIYXJmYnV6ekZvbnQoKQotewotICAgIEhCX0ZvbnRSZWMqIGZvbnQgPSByZWludGVy
cHJldF9jYXN0PEhCX0ZvbnRSZWMqPihmYXN0TWFsbG9jKHNpemVvZihIQl9Gb250UmVjKSkpOwot
ICAgIG1lbXNldChmb250LCAwLCBzaXplb2YoSEJfRm9udFJlYykpOwotICAgIGZvbnQtPmtsYXNz
ID0gJmhhcmZidXp6U2tpYUNsYXNzOwotICAgIGZvbnQtPnVzZXJEYXRhID0gMDsKLQotICAgIHJl
dHVybiBmb250OwotfQotCiB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6ZGVsZXRlR2x5cGhB
cnJheXMoKQogewogICAgIGRlbGV0ZVtdIG1faXRlbS5nbHlwaHM7CkBAIC0yOTcsNyArMzAzLDcg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldEdseXBoUG9zaXRpb25zKGJvb2wgaXNS
VEwpCiAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBnbHlwaHMgaW4gbG9naWNhbCBvcmRlciwg
ZmxpcHBpbmcgZm9yIFJUTCB3aGVyZSBuZWNlc3NhcnkuCiAgICAgLy8gR2x5cGhzIGFyZSBwb3Np
dGlvbmVkIHN0YXJ0aW5nIGZyb20gbV9vZmZzZXRYOyBpbiBSVEwgbW9kZSB0aGV5IGdvIGxlZnR3
YXJkcyBmcm9tIHRoZXJlLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtLm51bV9n
bHlwaHM7ICsraSkgewotICAgICAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxvZ0Ns
dXN0ZXJzSW5kZXgpIDwgbV9pdGVtLml0ZW0ubGVuZ3RoICYmIGxvZ0NsdXN0ZXJzKClbbG9nQ2x1
c3RlcnNJbmRleF0gPCBpKQorICAgICAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxv
Z0NsdXN0ZXJzSW5kZXgpIDwgbV9pdGVtLml0ZW0ubGVuZ3RoICYmIG1faXRlbS5sb2dfY2x1c3Rl
cnNbbG9nQ2x1c3RlcnNJbmRleF0gPCBpKQogICAgICAgICAgICAgbG9nQ2x1c3RlcnNJbmRleCsr
OwogCiAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGdseXBoIGlzIGp1c3QgYWZ0ZXIgYSBzcGFj
ZSwgYWRkIGluIHRoZSB3b3JkIHNwYWNpbmcuCkBAIC0zOTksNCArNDA1LDk2IEBAIGNvbnN0IFRl
eHRSdW4mIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2V0Tm9ybWFsaXplZFRleHRSdW4oY29uc3Qg
VGV4dFJ1biYgb3JpZ2luCiAgICAgcmV0dXJuICpub3JtYWxpemVkUnVuOwogfQogCitjb25zdCBp
bnQgQ29tcGxleFRleHRDb250cm9sbGVyOjpnbHlwaEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRS
dW4oaW50IHRhcmdldFgpCit7CisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBnbHlwaHMgaW4g
bG9naWNhbCBvcmRlciwgc2VlaW5nIHdoZXRoZXIgdGFyZ2V0WCBmYWxscyBiZXR3ZWVuIHRoZSBw
cmV2aW91cworICAgIC8vIHBvc2l0aW9uIGFuZCBoYWxmd2F5IHRocm91Z2ggdGhlIGN1cnJlbnQg
Z2x5cGguCisgICAgLy8gRklYTUU6IHRoaXMgY29kZSBwcm9iYWJseSBiZWxvbmdzIGluIENvbXBs
ZXhUZXh0Q29udHJvbGxlci4KKyAgICBpbnQgbGFzdFggPSBvZmZzZXRYKCkgLSAocnRsKCkgPyAt
bV9waXhlbFdpZHRoIDogbV9waXhlbFdpZHRoKTsKKyAgICBmb3IgKGludCBnbHlwaEluZGV4ID0g
MDsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdseXBoSW5kZXgpIDwgbGVuZ3RoKCk7ICsrZ2x5cGhJ
bmRleCkgeworICAgICAgICBpbnQgYWR2YW5jZSA9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdl
cihtX2l0ZW0uYWR2YW5jZXNbZ2x5cGhJbmRleF0pOworICAgICAgICBpbnQgbmV4dFggPSBzdGF0
aWNfY2FzdDxpbnQ+KHBvc2l0aW9ucygpW2dseXBoSW5kZXhdLngoKSkgKyBhZHZhbmNlIC8gMjsK
KyAgICAgICAgaWYgKHN0ZDo6bWluKG5leHRYLCBsYXN0WCkgPD0gdGFyZ2V0WCAmJiB0YXJnZXRY
IDw9IHN0ZDo6bWF4KG5leHRYLCBsYXN0WCkpCisgICAgICAgICAgICByZXR1cm4gZ2x5cGhJbmRl
eDsKKyAgICAgICAgbGFzdFggPSBuZXh0WDsKKyAgICB9CisKKyAgICByZXR1cm4gbGVuZ3RoKCkg
LSAxOworfQorCitjb25zdCBpbnQgQ29tcGxleFRleHRDb250cm9sbGVyOjpvZmZzZXRGb3JQb3Np
dGlvbihpbnQgdGFyZ2V0WCkKK3sKKyAgICB1bnNpZ25lZCBiYXNlUG9zaXRpb24gPSAwOworCisg
ICAgaW50IHggPSBvZmZzZXRYKCk7CisgICAgd2hpbGUgKG5leHRTY3JpcHRSdW4oKSkgeworICAg
ICAgICBpbnQgbmV4dFggPSBvZmZzZXRYKCk7CisKKyAgICAgICAgaWYgKHN0ZDo6bWluKHgsIG5l
eHRYKSA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0gc3RkOjptYXgoeCwgbmV4dFgpKSB7CisgICAg
ICAgICAgICAvLyBUaGUgeCB2YWx1ZSBpbiBxdWVzdGlvbiBpcyB3aXRoaW4gdGhpcyBzY3JpcHQg
cnVuLgorICAgICAgICAgICAgY29uc3QgaW50IGdseXBoSW5kZXggPSBnbHlwaEluZGV4Rm9yWFBv
c2l0aW9uSW5TY3JpcHRSdW4odGFyZ2V0WCk7CisKKyAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdl
IGhhdmUgYSBnbHlwaCBpbmRleCwgd2UgaGF2ZSB0byB0dXJuIHRoYXQgaW50byBhCisgICAgICAg
ICAgICAvLyBjb2RlLXBvaW50IGluZGV4LiBCZWNhdXNlIG9mIGxpZ2F0dXJlcywgc2V2ZXJhbCBj
b2RlLXBvaW50cyBtYXkKKyAgICAgICAgICAgIC8vIGhhdmUgZ29uZSBpbnRvIGEgc2luZ2xlIGds
eXBoLiBXZSBpdGVyYXRlIG92ZXIgdGhlIGNsdXN0ZXJzIGxvZworICAgICAgICAgICAgLy8gYW5k
IGZpbmQgdGhlIGZpcnN0IGNvZGUtcG9pbnQgd2hpY2ggY29udHJpYnV0ZWQgdG8gdGhlIGdseXBo
LgorCisgICAgICAgICAgICAvLyBTb21lIHNoYXBlcnMgKGkuZS4gS2htZXIpIHdpbGwgcHJvZHVj
ZSBjbHVzdGVyIGxvZ3Mgd2hpY2ggcmVwb3J0CisgICAgICAgICAgICAvLyB0aGF0IC9uby8gY29k
ZSBwb2ludHMgY29udHJpYnV0ZWQgdG8gY2VydGFpbiBnbHlwaHMuIEJlY2F1c2Ugb2YKKyAgICAg
ICAgICAgIC8vIHRoaXMsIHdlIHRha2UgYW55IGNvZGUgcG9pbnQgd2hpY2ggY29udHJpYnV0ZWQg
dG8gdGhlIGdseXBoIGluCisgICAgICAgICAgICAvLyBxdWVzdGlvbiwgb3IgYW55IHN1YnNlcXVl
bnQgZ2x5cGguIElmIHdlIHJ1biBvZmYgdGhlIGVuZCwgdGhlbgorICAgICAgICAgICAgLy8gd2Ug
dGFrZSB0aGUgbGFzdCBjb2RlIHBvaW50LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IG51bUNvZGVQb2ludHMoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKG1faXRl
bS5sb2dfY2x1c3RlcnNbal0gPj0gZ2x5cGhJbmRleCkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGJhc2VQb3NpdGlvbiArIGo7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVy
biBiYXNlUG9zaXRpb24gKyBudW1Db2RlUG9pbnRzKCkgLSAxOworICAgICAgICB9CisKKyAgICAg
ICAgYmFzZVBvc2l0aW9uICs9IG51bUNvZGVQb2ludHMoKTsKKyAgICB9CisKKyAgICByZXR1cm4g
YmFzZVBvc2l0aW9uOworfQorCitjb25zdCBGbG9hdFJlY3QgQ29tcGxleFRleHRDb250cm9sbGVy
OjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LCBpbnQg
ZnJvbSwgaW50IHRvKQoreworICAgIGludCBmcm9tWCA9IC0xLCB0b1ggPSAtMTsKKyAgICAvLyBJ
dGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxvZ2ljYWwgb3JkZXIsIHNlYXJjaGlu
ZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25zIG9mIGludGVyZXN0LgorICAgIHdo
aWxlIChuZXh0U2NyaXB0UnVuKCkgJiYgKGZyb21YID09IC0xIHx8IHRvWCA9PSAtMSkpIHsKKyAg
ICAgICAgaWYgKGZyb21YID09IC0xICYmIGZyb20gPj0gMCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oZnJvbSkgPCBudW1Db2RlUG9pbnRzKCkpIHsKKyAgICAgICAgICAgIC8vIHxmcm9tfCBpcyB3
aXRoaW4gdGhpcyBzY3JpcHQgcnVuLiBTbyB3ZSBpbmRleCB0aGUgY2x1c3RlcnMgbG9nIHRvCisg
ICAgICAgICAgICAvLyBmaW5kIHdoaWNoIGdseXBoIHRoaXMgY29kZS1wb2ludCBjb250cmlidXRl
ZCB0byBhbmQgZmluZCBpdHMgeAorICAgICAgICAgICAgLy8gcG9zaXRpb24uCisgICAgICAgICAg
ICBpbnQgZ2x5cGggPSBtX2l0ZW0ubG9nX2NsdXN0ZXJzW2Zyb21dOworICAgICAgICAgICAgZnJv
bVggPSBwb3NpdGlvbnMoKVtnbHlwaF0ueCgpOworICAgICAgICAgICAgaWYgKHJ0bCgpKQorICAg
ICAgICAgICAgICAgIGZyb21YICs9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlcihtX2l0ZW0u
YWR2YW5jZXNbZ2x5cGhdKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmcm9tIC09IG51
bUNvZGVQb2ludHMoKTsKKworICAgICAgICBpZiAodG9YID09IC0xICYmIHRvID49IDAgJiYgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSA8IG51bUNvZGVQb2ludHMoKSkgeworICAgICAgICAgICAg
aW50IGdseXBoID0gbV9pdGVtLmxvZ19jbHVzdGVyc1t0b107CisgICAgICAgICAgICB0b1ggPSBw
b3NpdGlvbnMoKVtnbHlwaF0ueCgpOworICAgICAgICAgICAgaWYgKHJ0bCgpKQorICAgICAgICAg
ICAgICAgIHRvWCArPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLmFkdmFuY2Vz
W2dseXBoXSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdG8gLT0gbnVtQ29kZVBvaW50
cygpOworICAgIH0KKworICAgIC8vIFRoZSBwb3NpdGlvbiBpbiBxdWVzdGlvbiBtaWdodCBiZSBq
dXN0IGFmdGVyIHRoZSB0ZXh0LgorICAgIGlmIChmcm9tWCA9PSAtMSkKKyAgICAgICAgZnJvbVgg
PSBvZmZzZXRYKCk7CisgICAgaWYgKHRvWCA9PSAtMSkKKyAgICAgICAgdG9YID0gb2Zmc2V0WCgp
OworCisgICAgQVNTRVJUKGZyb21YICE9IC0xICYmIHRvWCAhPSAtMSk7CisKKyAgICBpZiAoZnJv
bVggPCB0b1gpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZnJvbVgsIHBv
aW50LnkoKSwgdG9YIC0gZnJvbVgsIGhlaWdodCk7CisKKyAgICByZXR1cm4gRmxvYXRSZWN0KHBv
aW50LngoKSArIHRvWCwgcG9pbnQueSgpLCBmcm9tWCAtIHRvWCwgaGVpZ2h0KTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxp
bnV4LmgKaW5kZXggZTI2Mjk5MjYzMjNkNzVmYTkzYjJlNWExNGJjYjcxNmQyMzJhOTYyOS4uYmQ3
MmVkYjI3NDBiOTEyOWE1MjU1OTBjOTZjYWE0YmI4MjNlZDc1MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVy
TGludXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
b21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oCkBAIC0zNiw2ICszNiwxMCBAQAogI2luY2x1ZGUg
IlNrU2NhbGFyLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogCitleHRlcm4gIkMiIHsKKyNpbmNs
dWRlICJoYXJmYnV6ei1zaGFwZXIuaCIKK30KKwogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4K
ICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CkBA
IC02MSw3ICs2NSw3IEBAIGNsYXNzIFNpbXBsZUZvbnREYXRhOwogLy8gY2FuIGNhbGwgfHJlc2V0
fCB0byBzdGFydCBvdmVyIGFnYWluLgogY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVyIHsKIHB1
YmxpYzoKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgVGV4dFJ1biYsIHVuc2lnbmVk
LCB1bnNpZ25lZCwgY29uc3QgRm9udCopOworICAgIENvbXBsZXhUZXh0Q29udHJvbGxlcihjb25z
dCBUZXh0UnVuJiwgdW5zaWduZWQgc3RhcnRpbmdYLCB1bnNpZ25lZCBzdGFydGluZ1ksIHVuc2ln
bmVkIHdvcmRTcGFjaW5nLCB1bnNpZ25lZCBsZXR0ZXJTcGFjaW5nLCB1bnNpZ25lZCBwYWRkaW5n
LCBjb25zdCBGb250Kik7CiAgICAgfkNvbXBsZXhUZXh0Q29udHJvbGxlcigpOwogCiAgICAgYm9v
bCBpc1dvcmRCcmVhayh1bnNpZ25lZCk7CkBAIC04NSw4ICs4OSw4IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldExldHRlclNwYWNpbmdBZGp1c3RtZW50KGludCBsZXR0ZXJTcGFjaW5nQWRqdXN0bWVu
dCkgeyBtX2xldHRlclNwYWNpbmcgPSBsZXR0ZXJTcGFjaW5nQWRqdXN0bWVudDsgfQogICAgIGlu
dCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9CiAKLSAg
ICAvLyBTZXQgdGhlIHggb2Zmc2V0IGZvciB0aGUgbmV4dCBzY3JpcHQgcnVuLiBUaGlzIGFmZmVj
dHMgdGhlIHZhbHVlcyBpbgotICAgIC8vIHx4UG9zaXRpb25zfAorICAgIC8vIHNldHVwRm9yUlRM
IHNldHMgdXAgdGhlIGNvbnRyb2xsZXIgdG8gaGFuZGxlIFJUTCB0ZXh0LgorICAgIHZvaWQgc2V0
dXBGb3JSVEwoKTsKICAgICBib29sIHJ0bCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuLnJ0bCgpOyB9
CiAgICAgY29uc3QgdWludDE2X3QqIGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzMTY7
IH0KIApAQCAtOTgsMTkgKzEwMiw2IEBAIHB1YmxpYzoKICAgICAvLyBydW4uCiAgICAgY29uc3Qg
U2tQb2ludCogcG9zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbnM7IH0KIAotICAg
IC8vIEdldCB0aGUgYWR2YW5jZXMgKHdpZHRocykgZm9yIGVhY2ggZ2x5cGguCi0gICAgY29uc3Qg
SEJfRml4ZWQqIGFkdmFuY2VzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLmFkdmFuY2VzOyB9Ci0K
LSAgICAvLyBSZXR1cm4gdGhlIHdpZHRoIChpbiBweCkgb2YgdGhlIGN1cnJlbnQgc2NyaXB0IHJ1
bi4KLSAgICBjb25zdCB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4ZWxXaWR0
aDsgfQotCi0gICAgLy8gUmV0dXJuIHRoZSBjbHVzdGVyIGxvZyBmb3IgdGhlIGN1cnJlbnQgc2Ny
aXB0IHJ1bi4gRm9yIGV4YW1wbGU6Ci0gICAgLy8gICBzY3JpcHQgcnVuOiBmIGkgYSBuIGMgw6kg
IChmaSBnZXRzIGxpZ2F0dXJlZCkKLSAgICAvLyAgIGxvZyBjbHV0cnM6IDAgMCAxIDIgMyA0Ci0g
ICAgLy8gU28sIGZvciBlYWNoIGlucHV0IGNvZGUgcG9pbnQsIHRoZSBsb2cgdGVsbHMgeW91IHdo
aWNoIG91dHB1dCBnbHlwaCB3YXMKLSAgICAvLyBnZW5lcmF0ZWQgZm9yIGl0LgotICAgIGNvbnN0
IHVuc2lnbmVkIHNob3J0KiBsb2dDbHVzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1faXRlbS5sb2df
Y2x1c3RlcnM7IH0KLQogICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIGlu
IHRoZSBjdXJyZW50IHNjcmlwdCBydW4KICAgICBjb25zdCB1bnNpZ25lZCBudW1Db2RlUG9pbnRz
KCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLml0ZW0ubGVuZ3RoOyB9CiAKQEAgLTExOSw5ICsxMTAs
MTQgQEAgcHVibGljOgogCiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udFBsYXRmb3Jt
RGF0YUZvclNjcmlwdFJ1bigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3Jt
RGF0YSo+KG1faXRlbS5mb250LT51c2VyRGF0YSk7IH0KIAorICAgIGNvbnN0IGludCBvZmZzZXRG
b3JQb3NpdGlvbihpbnQpOworICAgIGNvbnN0IEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0KGNvbnN0
IEZsb2F0UG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSAsIGludCB0byk7CisKIHByaXZhdGU6
CisgICAgLy8gUmV0dXJuIHRoZSB3aWR0aCAoaW4gcHgpIG9mIHRoZSBjdXJyZW50IHNjcmlwdCBy
dW4uCisgICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsV2lkdGg7IH0K
KwogICAgIHZvaWQgc2V0dXBGb250Rm9yU2NyaXB0UnVuKCk7Ci0gICAgSEJfRm9udFJlYyogYWxs
b2NIYXJmYnV6ekZvbnQoKTsKICAgICB2b2lkIGRlbGV0ZUdseXBoQXJyYXlzKCk7CiAgICAgdm9p
ZCBjcmVhdGVHbHlwaEFycmF5cyhpbnQpOwogICAgIHZvaWQgcmVzZXRHbHlwaEFycmF5cygpOwpA
QCAtMTM0LDYgKzEzMCw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBtYXRjaGVzIHRoZSBsb2dp
YyBpbiBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnJlYWsKICAgICBzdGF0aWMgYm9vbCBpc0Nv
ZGVwb2ludFNwYWNlKEhCX1VDaGFyMTYgYykgeyByZXR1cm4gYyA9PSAnICcgfHwgYyA9PSAnXHQn
OyB9CiAKKyAgICBjb25zdCBpbnQgZ2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0UnVuKGlu
dCB0YXJnZXRYKTsKKwogICAgIGNvbnN0IEZvbnQqIGNvbnN0IG1fZm9udDsKICAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogbV9jdXJyZW50Rm9udERhdGE7CiAgICAgSEJfU2hhcGVySXRlbSBtX2l0
ZW07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250TGludXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udExpbnV4LmNwcAppbmRleCAwY2ZmZWQxNGNhNWQyYWM4M2UyYWY1MWI1YzgzNjgxOWNl
NjUzY2IzLi5lNzU4MDg2ODNhMDI4M2U3YjQ0OGE0MzA0MDk1ZWQzYTYxNzliMGU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250TGludXgu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRM
aW51eC5jcHAKQEAgLTE2NSwxNCArMTY1LDYgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBo
aWNzQ29udGV4dCogZ2MsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAogICAgIH0KIH0KIAot
Ly8gSGFyZmJ1enogdXNlcyAyNi42IGZpeGVkIHBvaW50IHZhbHVlcyBmb3IgcGl4ZWwgb2Zmc2V0
cy4gSG93ZXZlciwgd2UgZG9uJ3QKLS8vIGhhbmRsZSBzdWJwaXhlbCBwb3NpdGlvbmluZyBzbyB0
aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdHJ1bmNhdGUgSGFyZmJ1enoKLS8vIHZhbHVlcyB0byBh
IG51bWJlciBvZiBwaXhlbHMuCi1zdGF0aWMgaW50IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdl
cihIQl9GaXhlZCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUgPj4gNjsKLX0KLQogc3RhdGlj
IHZvaWQgc2V0dXBGb3JUZXh0UGFpbnRpbmcoU2tQYWludCogcGFpbnQsIFNrQ29sb3IgY29sb3Ip
CiB7CiAgICAgcGFpbnQtPnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5j
b2RpbmcpOwpAQCAtMjA1LDIwICsxOTcsMTAgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQo
R3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgVGV4dFJ1biYgcnVuLAogICAgICAgICBzZXR1cEZv
clRleHRQYWludGluZygmc3Ryb2tlUGFpbnQsIGdjLT5zdHJva2VDb2xvcigpLnJnYigpKTsKICAg
ICB9CiAKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIHBvaW50Lngo
KSwgcG9pbnQueSgpLCB0aGlzKTsKLSAgICBjb250cm9sbGVyLnNldFdvcmRTcGFjaW5nQWRqdXN0
bWVudCh3b3JkU3BhY2luZygpKTsKLSAgICBjb250cm9sbGVyLnNldExldHRlclNwYWNpbmdBZGp1
c3RtZW50KGxldHRlclNwYWNpbmcoKSk7Ci0gICAgY29udHJvbGxlci5zZXRQYWRkaW5nKHJ1bi5l
eHBhbnNpb24oKSk7Ci0KLSAgICBpZiAocnVuLnJ0bCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiB0
aGlzIGNhdXNlcyB1cyB0byBzaGFwZSB0aGUgdGV4dCB0d2ljZSAtLSBvbmNlIHRvIGNvbXB1dGUg
dGhlIHdpZHRoIGFuZCB0aGVuIGFnYWluCi0gICAgICAgIC8vIGJlbG93IHdoZW4gYWN0dWFsbHkg
cmVuZGVyaW5nLiAgQ2hhbmdlIENvbXBsZXhUZXh0Q29udHJvbGxlciB0byBtYXRjaCBwbGF0Zm9y
bS9tYWMgYW5kCi0gICAgICAgIC8vIHBsYXRmb3JtL2Nocm9taXVtL3dpbiBieSBoYXZpbmcgaXQg
c3RvcmUgdGhlIHNoYXBlZCBydW5zLCBzbyB3ZSBjYW4gcmV1c2UgdGhlIHJlc3VsdHMuCi0gICAg
ICAgIGNvbnRyb2xsZXIucmVzZXQocG9pbnQueCgpICsgY29udHJvbGxlci53aWR0aE9mRnVsbFJ1
bigpKTsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHBhZGRpbmcgYWdhaW4gYmVjYXVz
ZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgbGF5b3V0IGNvbnN1bWVkIHRoZSB2YWx1ZS4KLSAgICAg
ICAgLy8gRml4aW5nIHRoZSBhYm92ZSBwcm9ibGVtIHdvdWxkIGhlbHAgaGVyZSB0b28uCi0gICAg
ICAgIGNvbnRyb2xsZXIuc2V0UGFkZGluZyhydW4uZXhwYW5zaW9uKCkpOwotICAgIH0KKyAgICBD
b21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIHBvaW50LngoKSwgcG9pbnQueSgp
LCB3b3JkU3BhY2luZygpLCBsZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBhbnNpb24oKSwgdGhpcyk7
CisKKyAgICBpZiAocnVuLnJ0bCgpKQorICAgICAgICBjb250cm9sbGVyLnNldHVwRm9yUlRMKCk7
CiAKICAgICB3aGlsZSAoY29udHJvbGxlci5uZXh0U2NyaXB0UnVuKCkpIHsKICAgICAgICAgaWYg
KGZpbGwpIHsKQEAgLTI0MiwzMCArMjI0LDEwIEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0CiAK
IGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogLyogZmFsbGJhY2tGb250cyAqLywgR2x5
cGhPdmVyZmxvdyogLyogZ2x5cGhPdmVyZmxvdyAqLykgY29uc3QKIHsKLSAgICBDb21wbGV4VGV4
dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIDAsIDAsIHRoaXMpOwotICAgIGNvbnRyb2xsZXIu
c2V0V29yZFNwYWNpbmdBZGp1c3RtZW50KHdvcmRTcGFjaW5nKCkpOwotICAgIGNvbnRyb2xsZXIu
c2V0TGV0dGVyU3BhY2luZ0FkanVzdG1lbnQobGV0dGVyU3BhY2luZygpKTsKLSAgICBjb250cm9s
bGVyLnNldFBhZGRpbmcocnVuLmV4cGFuc2lvbigpKTsKKyAgICBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgY29udHJvbGxlcihydW4sIDAsIDAsIHdvcmRTcGFjaW5nKCksIGxldHRlclNwYWNpbmcoKSwg
cnVuLmV4cGFuc2lvbigpLCB0aGlzKTsKICAgICByZXR1cm4gY29udHJvbGxlci53aWR0aE9mRnVs
bFJ1bigpOwogfQogCi1zdGF0aWMgaW50IGdseXBoSW5kZXhGb3JYUG9zaXRpb25JblNjcmlwdFJ1
bihjb25zdCBDb21wbGV4VGV4dENvbnRyb2xsZXImIGNvbnRyb2xsZXIsIGludCB0YXJnZXRYKQot
ewotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZ2x5cGhzIGluIGxvZ2ljYWwgb3JkZXIsIHNl
ZWluZyB3aGV0aGVyIHRhcmdldFggZmFsbHMgYmV0d2VlbiB0aGUgcHJldmlvdXMKLSAgICAvLyBw
b3NpdGlvbiBhbmQgaGFsZndheSB0aHJvdWdoIHRoZSBjdXJyZW50IGdseXBoLgotICAgIC8vIEZJ
WE1FOiB0aGlzIGNvZGUgcHJvYmFibHkgYmVsb25ncyBpbiBDb21wbGV4VGV4dENvbnRyb2xsZXIu
Ci0gICAgaW50IGxhc3RYID0gY29udHJvbGxlci5vZmZzZXRYKCkgLSAoY29udHJvbGxlci5ydGwo
KSA/IC1jb250cm9sbGVyLndpZHRoKCkgOiBjb250cm9sbGVyLndpZHRoKCkpOwotICAgIGZvciAo
aW50IGdseXBoSW5kZXggPSAwOyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ2x5cGhJbmRleCkgPCBj
b250cm9sbGVyLmxlbmd0aCgpOyArK2dseXBoSW5kZXgpIHsKLSAgICAgICAgaW50IGFkdmFuY2Ug
PSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIoY29udHJvbGxlci5hZHZhbmNlcygpW2dseXBo
SW5kZXhdKTsKLSAgICAgICAgaW50IG5leHRYID0gc3RhdGljX2Nhc3Q8aW50Pihjb250cm9sbGVy
LnBvc2l0aW9ucygpW2dseXBoSW5kZXhdLngoKSkgKyBhZHZhbmNlIC8gMjsKLSAgICAgICAgaWYg
KHN0ZDo6bWluKG5leHRYLCBsYXN0WCkgPD0gdGFyZ2V0WCAmJiB0YXJnZXRYIDw9IHN0ZDo6bWF4
KG5leHRYLCBsYXN0WCkpCi0gICAgICAgICAgICByZXR1cm4gZ2x5cGhJbmRleDsKLSAgICAgICAg
bGFzdFggPSBuZXh0WDsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29udHJvbGxlci5sZW5ndGgoKSAt
IDE7Ci19Ci0KIC8vIFJldHVybiB0aGUgY29kZSBwb2ludCBpbmRleCBmb3IgdGhlIGdpdmVuIHx4
fCBvZmZzZXQgaW50byB0aGUgdGV4dCBydW4uCiBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25G
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHhGbG9hdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpIGNvbnN0CkBAIC0yNzYsNDkgKzIzOCwxMCBAQCBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRp
b25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHhGbG9hdCwKIAogICAg
IC8vIChNYWMgY29kZSBpZ25vcmVzIGluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBhbmQgdGhleSBkb24n
dCBrbm93IHdoYXQgaXQncwogICAgIC8vIHN1cHBvc2VkIHRvIGRvLCBzbyB3ZSBqdXN0IGlnbm9y
ZSBpdCBhcyB3ZWxsLikKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4s
IDAsIDAsIHRoaXMpOwotICAgIGNvbnRyb2xsZXIuc2V0V29yZFNwYWNpbmdBZGp1c3RtZW50KHdv
cmRTcGFjaW5nKCkpOwotICAgIGNvbnRyb2xsZXIuc2V0TGV0dGVyU3BhY2luZ0FkanVzdG1lbnQo
bGV0dGVyU3BhY2luZygpKTsKLSAgICBjb250cm9sbGVyLnNldFBhZGRpbmcocnVuLmV4cGFuc2lv
bigpKTsKLSAgICBpZiAocnVuLnJ0bCgpKSB7Ci0gICAgICAgIC8vIFNlZSBGSVhNRSBpbiBkcmF3
Q29tcGxleFRleHQuCi0gICAgICAgIGNvbnRyb2xsZXIucmVzZXQoY29udHJvbGxlci53aWR0aE9m
RnVsbFJ1bigpKTsKLSAgICAgICAgY29udHJvbGxlci5zZXRQYWRkaW5nKHJ1bi5leHBhbnNpb24o
KSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgYmFzZVBvc2l0aW9uID0gMDsKLQotICAgIGludCB4
ID0gY29udHJvbGxlci5vZmZzZXRYKCk7Ci0gICAgd2hpbGUgKGNvbnRyb2xsZXIubmV4dFNjcmlw
dFJ1bigpKSB7Ci0gICAgICAgIGludCBuZXh0WCA9IGNvbnRyb2xsZXIub2Zmc2V0WCgpOwotCi0g
ICAgICAgIGlmIChzdGQ6Om1pbih4LCBuZXh0WCkgPD0gdGFyZ2V0WCAmJiB0YXJnZXRYIDw9IHN0
ZDo6bWF4KHgsIG5leHRYKSkgewotICAgICAgICAgICAgLy8gVGhlIHggdmFsdWUgaW4gcXVlc3Rp
b24gaXMgd2l0aGluIHRoaXMgc2NyaXB0IHJ1bi4KLSAgICAgICAgICAgIGNvbnN0IGludCBnbHlw
aEluZGV4ID0gZ2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0UnVuKGNvbnRyb2xsZXIsIHRh
cmdldFgpOwotCi0gICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEgZ2x5cGggaW5kZXgs
IHdlIGhhdmUgdG8gdHVybiB0aGF0IGludG8gYQotICAgICAgICAgICAgLy8gY29kZS1wb2ludCBp
bmRleC4gQmVjYXVzZSBvZiBsaWdhdHVyZXMsIHNldmVyYWwgY29kZS1wb2ludHMgbWF5Ci0gICAg
ICAgICAgICAvLyBoYXZlIGdvbmUgaW50byBhIHNpbmdsZSBnbHlwaC4gV2UgaXRlcmF0ZSBvdmVy
IHRoZSBjbHVzdGVycyBsb2cKLSAgICAgICAgICAgIC8vIGFuZCBmaW5kIHRoZSBmaXJzdCBjb2Rl
LXBvaW50IHdoaWNoIGNvbnRyaWJ1dGVkIHRvIHRoZSBnbHlwaC4KLQotICAgICAgICAgICAgLy8g
U29tZSBzaGFwZXJzIChpLmUuIEtobWVyKSB3aWxsIHByb2R1Y2UgY2x1c3RlciBsb2dzIHdoaWNo
IHJlcG9ydAotICAgICAgICAgICAgLy8gdGhhdCAvbm8vIGNvZGUgcG9pbnRzIGNvbnRyaWJ1dGVk
IHRvIGNlcnRhaW4gZ2x5cGhzLiBCZWNhdXNlIG9mCi0gICAgICAgICAgICAvLyB0aGlzLCB3ZSB0
YWtlIGFueSBjb2RlIHBvaW50IHdoaWNoIGNvbnRyaWJ1dGVkIHRvIHRoZSBnbHlwaCBpbgotICAg
ICAgICAgICAgLy8gcXVlc3Rpb24sIG9yIGFueSBzdWJzZXF1ZW50IGdseXBoLiBJZiB3ZSBydW4g
b2ZmIHRoZSBlbmQsIHRoZW4KLSAgICAgICAgICAgIC8vIHdlIHRha2UgdGhlIGxhc3QgY29kZSBw
b2ludC4KLSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBsb2cgPSBjb250cm9sbGVy
LmxvZ0NsdXN0ZXJzKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgY29u
dHJvbGxlci5udW1Db2RlUG9pbnRzKCk7ICsraikgewotICAgICAgICAgICAgICAgIGlmIChsb2db
al0gPj0gZ2x5cGhJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2VQb3NpdGlv
biArIGo7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBiYXNlUG9zaXRpb24g
KyBjb250cm9sbGVyLm51bUNvZGVQb2ludHMoKSAtIDE7Ci0gICAgICAgIH0KLQotICAgICAgICBi
YXNlUG9zaXRpb24gKz0gY29udHJvbGxlci5udW1Db2RlUG9pbnRzKCk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIGJhc2VQb3NpdGlvbjsKKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxl
cihydW4sIDAsIDAsIHdvcmRTcGFjaW5nKCksIGxldHRlclNwYWNpbmcoKSwgcnVuLmV4cGFuc2lv
bigpLCB0aGlzKTsKKyAgICBpZiAocnVuLnJ0bCgpKQorICAgICAgICBjb250cm9sbGVyLnNldHVw
Rm9yUlRMKCk7CisgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9zaXRpb24odGFyZ2V0
WCk7CiB9CiAKIC8vIFJldHVybiB0aGUgcmVjdGFuZ2xlIGZvciBzZWxlY3RpbmcgdGhlIGdpdmVu
IHJhbmdlIG9mIGNvZGUtcG9pbnRzIGluIHRoZSBUZXh0UnVuLgpAQCAtMzI2LDUxICsyNDksMTAg
QEAgRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewotICAgIGlu
dCBmcm9tWCA9IC0xLCB0b1ggPSAtMTsKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJv
bGxlcihydW4sIDAsIDAsIHRoaXMpOwotICAgIGNvbnRyb2xsZXIuc2V0V29yZFNwYWNpbmdBZGp1
c3RtZW50KHdvcmRTcGFjaW5nKCkpOwotICAgIGNvbnRyb2xsZXIuc2V0TGV0dGVyU3BhY2luZ0Fk
anVzdG1lbnQobGV0dGVyU3BhY2luZygpKTsKLSAgICBjb250cm9sbGVyLnNldFBhZGRpbmcocnVu
LmV4cGFuc2lvbigpKTsKLSAgICBpZiAocnVuLnJ0bCgpKSB7Ci0gICAgICAgIC8vIFNlZSBGSVhN
RSBpbiBkcmF3Q29tcGxleFRleHQuCi0gICAgICAgIGNvbnRyb2xsZXIucmVzZXQoY29udHJvbGxl
ci53aWR0aE9mRnVsbFJ1bigpKTsKLSAgICAgICAgY29udHJvbGxlci5zZXRQYWRkaW5nKHJ1bi5l
eHBhbnNpb24oKSk7Ci0gICAgfQotCi0gICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBzY3JpcHQg
cnVucyBpbiBsb2dpY2FsIG9yZGVyLCBzZWFyY2hpbmcgZm9yIHRoZSBydW4gY292ZXJpbmcgdGhl
IHBvc2l0aW9ucyBvZiBpbnRlcmVzdC4KLSAgICB3aGlsZSAoY29udHJvbGxlci5uZXh0U2NyaXB0
UnVuKCkgJiYgKGZyb21YID09IC0xIHx8IHRvWCA9PSAtMSkpIHsKLSAgICAgICAgaWYgKGZyb21Y
ID09IC0xICYmIGZyb20gPj0gMCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZnJvbSkgPCBjb250
cm9sbGVyLm51bUNvZGVQb2ludHMoKSkgewotICAgICAgICAgICAgLy8gfGZyb218IGlzIHdpdGhp
biB0aGlzIHNjcmlwdCBydW4uIFNvIHdlIGluZGV4IHRoZSBjbHVzdGVycyBsb2cgdG8KLSAgICAg
ICAgICAgIC8vIGZpbmQgd2hpY2ggZ2x5cGggdGhpcyBjb2RlLXBvaW50IGNvbnRyaWJ1dGVkIHRv
IGFuZCBmaW5kIGl0cyB4Ci0gICAgICAgICAgICAvLyBwb3NpdGlvbi4KLSAgICAgICAgICAgIGlu
dCBnbHlwaCA9IGNvbnRyb2xsZXIubG9nQ2x1c3RlcnMoKVtmcm9tXTsKLSAgICAgICAgICAgIGZy
b21YID0gY29udHJvbGxlci5wb3NpdGlvbnMoKVtnbHlwaF0ueCgpOwotICAgICAgICAgICAgaWYg
KGNvbnRyb2xsZXIucnRsKCkpCi0gICAgICAgICAgICAgICAgZnJvbVggKz0gdHJ1bmNhdGVGaXhl
ZFBvaW50VG9JbnRlZ2VyKGNvbnRyb2xsZXIuYWR2YW5jZXMoKVtnbHlwaF0pOwotICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgIGZyb20gLT0gY29udHJvbGxlci5udW1Db2RlUG9pbnRzKCk7Ci0K
LSAgICAgICAgaWYgKHRvWCA9PSAtMSAmJiB0byA+PSAwICYmIHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih0bykgPCBjb250cm9sbGVyLm51bUNvZGVQb2ludHMoKSkgewotICAgICAgICAgICAgaW50IGds
eXBoID0gY29udHJvbGxlci5sb2dDbHVzdGVycygpW3RvXTsKLSAgICAgICAgICAgIHRvWCA9IGNv
bnRyb2xsZXIucG9zaXRpb25zKClbZ2x5cGhdLngoKTsKLSAgICAgICAgICAgIGlmIChjb250cm9s
bGVyLnJ0bCgpKQotICAgICAgICAgICAgICAgIHRvWCArPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0lu
dGVnZXIoY29udHJvbGxlci5hZHZhbmNlcygpW2dseXBoXSk7Ci0gICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgdG8gLT0gY29udHJvbGxlci5udW1Db2RlUG9pbnRzKCk7Ci0gICAgfQotCi0gICAg
Ly8gVGhlIHBvc2l0aW9uIGluIHF1ZXN0aW9uIG1pZ2h0IGJlIGp1c3QgYWZ0ZXIgdGhlIHRleHQu
Ci0gICAgaWYgKGZyb21YID09IC0xKQotICAgICAgICBmcm9tWCA9IGNvbnRyb2xsZXIub2Zmc2V0
WCgpOwotICAgIGlmICh0b1ggPT0gLTEpCi0gICAgICAgIHRvWCA9IGNvbnRyb2xsZXIub2Zmc2V0
WCgpOwotCi0gICAgQVNTRVJUKGZyb21YICE9IC0xICYmIHRvWCAhPSAtMSk7Ci0KLSAgICBpZiAo
ZnJvbVggPCB0b1gpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZnJvbVgs
IHBvaW50LnkoKSwgdG9YIC0gZnJvbVgsIGhlaWdodCk7Ci0KLSAgICByZXR1cm4gRmxvYXRSZWN0
KHBvaW50LngoKSArIHRvWCwgcG9pbnQueSgpLCBmcm9tWCAtIHRvWCwgaGVpZ2h0KTsKKyAgICBD
b21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIDAsIDAsIHdvcmRTcGFjaW5nKCks
IGxldHRlclNwYWNpbmcoKSwgcnVuLmV4cGFuc2lvbigpLCB0aGlzKTsKKyAgICBpZiAocnVuLnJ0
bCgpKQorICAgICAgICBjb250cm9sbGVyLnNldHVwRm9yUlRMKCk7CisgICAgcmV0dXJuIGNvbnRy
b2xsZXIuc2VsZWN0aW9uUmVjdChwb2ludCwgaGVpZ2h0LCBmcm9tLCB0byk7CiB9CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCmlu
ZGV4IDFmYjU5NTdiN2IxNGMyY2ViMTIxYWU3NGI0YmE3YWRjMDI4OWI1NzQuLmIyYTNlY2M2Yzg5
ODc2ZjNlYTc4ZDVmZDNmMWQyN2VjNDMwNjg4NjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3Jt
RGF0YUxpbnV4LmNwcApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKIAotI2luY2x1ZGUgIkhhcmZidXp6U2tpYS5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtNjMsMTEgKzYyLDYgQEAgdm9pZCBGb250
UGxhdGZvcm1EYXRhOjpzZXRTdWJwaXhlbEdseXBocyhib29sIGlzU3VicGl4ZWxHbHlwaHMpCiAg
ICAgaXNTa2lhU3VicGl4ZWxHbHlwaHMgPSBpc1N1YnBpeGVsR2x5cGhzOwogfQogCi1Gb250UGxh
dGZvcm1EYXRhOjpSZWZDb3VudGVkSGFyZmJ1enpGYWNlOjp+UmVmQ291bnRlZEhhcmZidXp6RmFj
ZSgpCi17Ci0gICAgSEJfRnJlZUZhY2UobV9oYXJmYnV6ekZhY2UpOwotfQotCiBGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYykKICAg
ICA6IG1fdHlwZWZhY2Uoc3JjLm1fdHlwZWZhY2UpCiAgICAgLCBtX2ZhbWlseShzcmMubV9mYW1p
bHkpCkBAIC0yMjksMTIgKzIyMywxMiBAQCBib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQ
aXRjaCgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1IQl9GYWNlUmVjXyogRm9udFBs
YXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkgY29uc3QKK0hhcmZidXp6RmFjZSogRm9udFBsYXRm
b3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkgY29uc3QKIHsKICAgICBpZiAoIW1faGFyZmJ1enpGYWNl
KQotICAgICAgICBtX2hhcmZidXp6RmFjZSA9IFJlZkNvdW50ZWRIYXJmYnV6ekZhY2U6OmNyZWF0
ZShIQl9OZXdGYWNlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpLCBoYXJmYnV6
elNraWFHZXRUYWJsZSkpOworICAgICAgICBtX2hhcmZidXp6RmFjZSA9IEhhcmZidXp6RmFjZTo6
Y3JlYXRlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpKTsKIAotICAgIHJldHVy
biBtX2hhcmZidXp6RmFjZS0+ZmFjZSgpOworICAgIHJldHVybiBtX2hhcmZidXp6RmFjZS5nZXQo
KTsKIH0KIAogdm9pZCBGb250UGxhdGZvcm1EYXRhOjpxdWVyeVN5c3RlbUZvclJlbmRlclN0eWxl
KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmgKaW5kZXggNTQxYWE4NjY1YTZjMGZj
OGJjMmUyMGQwYTg3OTY2ZWVjODAyNDA0My4uODZiOTQxY2FlNDA1MTlhOTRhMWY4YTQwOTJlZGE0
ZTZhNmQxM2Y4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmgKQEAgLTMzLDYg
KzMzLDcgQEAKIAogI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRS
ZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIkhhcmZidXp6U2tpYS5oIgogI2luY2x1ZGUgIlRleHRP
cmllbnRhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgpAQCAtNDMsOCArNDQsNiBAQAogY2xhc3MgU2tUeXBlZmFjZTsKIHR5cGVkZWYgdWlu
dDMyX3QgU2tGb250SUQ7CiAKLXN0cnVjdCBIQl9GYWNlUmVjXzsKLQogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBGb250RGVzY3JpcHRpb247CkBAIC0xMjgsNyArMTI3LDcgQEAgcHVibGlj
OgogICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogI2VuZGlmCiAKLSAgICBIQl9GYWNl
UmVjXyogaGFyZmJ1enpGYWNlKCkgY29uc3Q7CisgICAgSGFyZmJ1enpGYWNlKiBoYXJmYnV6ekZh
Y2UoKSBjb25zdDsKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAvLyBHbG9iYWwgZm9u
dCBwcmVmZXJlbmNlcy4uLgpAQCAtMTM4LDI1ICsxMzcsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgc2V0U3VicGl4ZWxHbHlwaHMoYm9vbCBvbik7CiAKIHByaXZhdGU6Ci0gICAgY2xhc3Mg
UmVmQ291bnRlZEhhcmZidXp6RmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJlZkNvdW50ZWRIYXJm
YnV6ekZhY2U+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJlZkNv
dW50ZWRIYXJmYnV6ekZhY2U+IGNyZWF0ZShIQl9GYWNlUmVjXyogaGFyZmJ1enpGYWNlKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlZkNvdW50ZWRIYXJmYnV6
ekZhY2UoaGFyZmJ1enpGYWNlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB+UmVmQ291bnRlZEhh
cmZidXp6RmFjZSgpOwotCi0gICAgICAgIEhCX0ZhY2VSZWNfKiBmYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9oYXJmYnV6ekZhY2U7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFJlZkNvdW50ZWRI
YXJmYnV6ekZhY2UoSEJfRmFjZVJlY18qIGhhcmZidXp6RmFjZSkgOiBtX2hhcmZidXp6RmFjZSho
YXJmYnV6ekZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIEhCX0ZhY2VSZWNf
KiBtX2hhcmZidXp6RmFjZTsKLSAgICB9OwotCiAgICAgdm9pZCBxdWVyeVN5c3RlbUZvclJlbmRl
clN0eWxlKCk7CiAKICAgICAvLyBGSVhNRTogQ291bGQgU2tBdXRvVW5yZWYgYmUgdXNlZCBoZXJl
PwpAQCAtMTY5LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAgRm9udE9yaWVudGF0aW9uIG1fb3Jp
ZW50YXRpb247CiAgICAgVGV4dE9yaWVudGF0aW9uIG1fdGV4dE9yaWVudGF0aW9uOwogICAgIEZv
bnRSZW5kZXJTdHlsZSBtX3N0eWxlOwotICAgIG11dGFibGUgUmVmUHRyPFJlZkNvdW50ZWRIYXJm
YnV6ekZhY2U+IG1faGFyZmJ1enpGYWNlOworICAgIG11dGFibGUgUmVmUHRyPEhhcmZidXp6RmFj
ZT4gbV9oYXJmYnV6ekZhY2U7CiAKICAgICBTa1R5cGVmYWNlKiBoYXNoVGFibGVEZWxldGVkRm9u
dFZhbHVlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTa1R5cGVmYWNlKj4oLTEp
OyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSGFyZmJ1enpTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHAKaW5kZXggMjdhMzA5Y2YxMDI4NTJjNWE0Zjg3Mzg3
ODU2Y2NjMTc0MWU0NzZiZS4uYjk0ZWQxYTg5ZmI3Y2RlZjdhYmNlMWI3ZmRmOTAyODk2MTZmNDUw
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SGFyZmJ1enpTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9IYXJmYnV6elNraWEuY3BwCkBAIC0xOTcsNiArMTk3LDE2IEBAIEhCX0ZvbnRDbGFz
cyBoYXJmYnV6elNraWFDbGFzcyA9IHsKICAgICBnZXRGb250TWV0cmljLAogfTsKIAorSEJfRm9u
dF8qIGFsbG9jSGFyZmJ1enpGb250KCkKK3sKKyAgICBIQl9Gb250XyogZm9udCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8SEJfRm9udF8qPihmYXN0TWFsbG9jKHNpemVvZihIQl9Gb250XykpKTsKKyAgICBt
ZW1zZXQoZm9udCwgMCwgc2l6ZW9mKEhCX0ZvbnRfKSk7CisgICAgZm9udC0+a2xhc3MgPSAmaGFy
ZmJ1enpTa2lhQ2xhc3M7CisgICAgZm9udC0+dXNlckRhdGEgPSAwOworCisgICAgcmV0dXJuIGZv
bnQ7Cit9CisKIEhCX0Vycm9yIGhhcmZidXp6U2tpYUdldFRhYmxlKHZvaWQqIHZvaWRmYWNlLCBj
b25zdCBIQl9UYWcgdGFnLCBIQl9CeXRlKiBidWZmZXIsIEhCX1VJbnQqIGxlbikKIHsKICAgICBG
b250UGxhdGZvcm1EYXRhKiBmb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRh
Kj4odm9pZGZhY2UpOwpAQCAtMjE2LDQgKzIyNiwxNCBAQCBIQl9FcnJvciBoYXJmYnV6elNraWFH
ZXRUYWJsZSh2b2lkKiB2b2lkZmFjZSwgY29uc3QgSEJfVGFnIHRhZywgSEJfQnl0ZSogYnVmZmVy
LAogICAgIHJldHVybiBIQl9FcnJfT2s7CiB9CiAKK0hhcmZidXp6RmFjZTo6SGFyZmJ1enpGYWNl
KEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSkKK3sKKyAgICBtX2hhcmZidXp6RmFjZSA9
IEhCX05ld0ZhY2UocGxhdGZvcm1EYXRhLCBoYXJmYnV6elNraWFHZXRUYWJsZSk7Cit9CisKK0hh
cmZidXp6RmFjZTo6fkhhcmZidXp6RmFjZSgpCit7CisgICAgSEJfRnJlZUZhY2UobV9oYXJmYnV6
ekZhY2UpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuaAppbmRl
eCBmN2UwNDk2MGVlYmFkOGNhODU1MzJjZWVmNTBiYjViZWU2YmVmMWMxLi45M2RjNzE4MjQwODUx
NjdlMmU0ZjcxM2NiMTY2Nzk5OWMwMDRjYTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuaApAQCAtMzEsMTQg
KzMxLDM3IEBACiAjaWZuZGVmIEhhcmZidXp6U2tpYV9oCiAjZGVmaW5lIEhhcmZidXp6U2tpYV9o
CiAKLWV4dGVybiAiQyIgewotI2luY2x1ZGUgImhhcmZidXp6LXNoYXBlci5oIgotI2luY2x1ZGUg
ImhhcmZidXp6LXVuaWNvZGUuaCIKLX0KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworc3RydWN0IEhCX0ZhY2VSZWNfOworc3RydWN0IEhCX0Zv
bnRfOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgSEJfRXJyb3IgaGFyZmJ1enpTa2lhR2V0
VGFibGUodm9pZCogdm9pZGZhY2UsIGNvbnN0IEhCX1RhZywgSEJfQnl0ZSogYnVmZmVyLCBIQl9V
SW50KiBsZW4pOwotICAgIGV4dGVybiBjb25zdCBIQl9Gb250Q2xhc3MgaGFyZmJ1enpTa2lhQ2xh
c3M7CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CisKK2NsYXNzIEhhcmZidXp6RmFjZSA6IHB1
YmxpYyBSZWZDb3VudGVkPEhhcmZidXp6RmFjZT4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNz
UmVmUHRyPEhhcmZidXp6RmFjZT4gY3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0
YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFyZmJ1enpGYWNlKHBsYXRm
b3JtRGF0YSkpOworICAgIH0KKworICAgIH5IYXJmYnV6ekZhY2UoKTsKKworICAgIEhCX0ZhY2VS
ZWNfKiBmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXJmYnV6ekZhY2U7IH0KKworcHJpdmF0ZToK
KyAgICBleHBsaWNpdCBIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSopOworCisgICAgSEJf
RmFjZVJlY18qIG1faGFyZmJ1enpGYWNlOworfTsKKworLy8gRklYTUU6IFJlbW92ZSB0aGlzIGFz
eW1tZXRyaWMgYWxsb2MvZnJlZSBmdW5jdGlvbi4KKy8vIFdlJ2xsIHJlbW92ZSB0aGlzIG9uY2Ug
d2UgbW92ZSB0byB0aGUgbmV3IEhhcmZidXp6IEFQSS4KK0hCX0ZvbnRfKiBhbGxvY0hhcmZidXp6
Rm9udCgpOworCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVT
a2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdl
VHJlZU5vZGVTa2lhLmNwcAppbmRleCBmMzYyZmEzYzFiZWQ2NmE3MGE5YTExNTcwODczNDM4ZmVl
YzNlN2Q0Li40MDYxZjc0ZGIxNDY1MzQ1YzEwODhhZTZhZWUwY2NhNzJmNjkwMmFhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0dseXBoUGFnZVRyZWVO
b2RlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9H
bHlwaFBhZ2VUcmVlTm9kZVNraWEuY3BwCkBAIC0zOSwxMSArMzksMTUgQEAKICNpbmNsdWRlICJT
a1BhaW50LmgiCiAjaW5jbHVkZSAiU2tVdGlscy5oIgogCitleHRlcm4gIkMiIHsKKyNpbmNsdWRl
ICJoYXJmYnV6ei1zaGFwZXIuaCIKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMg
aW50IHN1YnN0aXR1dGVXaXRoVmVydGljYWxHbHlwaHMoY29uc3QgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhLCB1aW50MTZfdCogZ2x5cGhzLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgpCiB7Ci0gICAg
SEJfRmFjZVJlY18qIGhiRmFjZSA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oYXJmYnV6ekZh
Y2UoKTsKKyAgICBIQl9GYWNlUmVjXyogaGJGYWNlID0gZm9udERhdGEtPnBsYXRmb3JtRGF0YSgp
LmhhcmZidXp6RmFjZSgpLT5mYWNlKCk7CiAgICAgaWYgKCFoYkZhY2UtPmdzdWIpIHsKICAgICAg
ICAgLy8gaWYgdGhlcmUgaXMgbm8gR1NVQiB0YWJsZSwgdHJlYXQgaXQgYXMgbm90IGNvdmVyZWQK
ICAgICAgICAgcmV0dXJuIDBYZmZmZjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98819</attachid>
            <date>2011-06-27 17:18:46 -0700</date>
            <delta_ts>2011-06-28 10:23:58 -0700</delta_ts>
            <desc>Patch V3</desc>
            <filename>bug-62530-20110628091844.patch</filename>
            <type>text/plain</type>
            <size>30474</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk4NzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiNDMwOGMwNGMyZjY5Zjk3
NmRlY2Q1MzE3MWZkYjVmYjM5N2M2NzY1Li41NDc1NDRlZjhkMzg3YWE3MDg5ZGFkMzkzNTg3MGE5
YTc3MGUxNmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDYtMjcgIEtlbmlj
aGkgSXNoaWJhc2hpICA8YmFzaGlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtDaHJvbWl1bV0gUmVtb3ZlIGRlcGVuZGVuY2ll
cyBvbiBoYXJmYnV6eiBmcm9tIEZvbnRQbGF0Zm9ybURhdGFMaW51eCBhbmQgRm9udExpbnV4Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjUzMAorCisg
ICAgICAgIC0gTW92ZWQgY29kZXMgb2YgRm9udExpbnV4IHdoaWNoIGRlcGVuZCBvbiBoYXJmYnV6
eiBBUElzIHRvIENvbXBsZXhUZXh0Q29udHJvbGxlci4gIFJlbW92ZWQgU29tZSBtZXRob2RzIG9m
IENvbXBsZXhUZXh0Q29udHJvbGxlcihhZHZhbmNlcygpIGFuZCBsb2dDbHVzdGVycygpKSBzaW5j
ZSB0aGV5IGFyZSBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAtIE1vdmVkIFJlZkNvdW50ZWRI
YXJmYnV6ekZhY2UgZnJvbSBGb250UGxhdGZvcm1EYXRhTGludXggdG8gSGFyZmJ1enpTa2lhIGFu
ZCByZW5hbWVkIGl0IHRvIEhhcmZidXp6RmFjZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVj
YXVzZSB0aGVyZSBpcyBubyBiZWhhdmlvciBjaGFuZ2UgKFRoZSBleGlzdGluZyB0ZXN0cyBzaG91
bGQgY292ZXIgdGhlIGNoYW5nZXMpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q29tcGxleFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIpOiBBZGRlZCBhcmd1
bWVudHMgc28gZWxpbWluYXRpbmcgc2V0dGVyIGludm9jYXRpb25zLgorICAgICAgICAoV2ViQ29y
ZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpzZXR1cEZvclJUTCk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjpzZXR1cEZvbnRGb3JTY3JpcHRSdW4pOiBB
ZG9wdCB0aGUgY2hhbmdlIG9mIEhhcmZidXp6RmFjZSBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0R2x5cGhQb3NpdGlvbnMpOiBVc2UgbV9pdGVtLmxv
Z19jbHVzdGVycyBpbnN0ZWFkIG9mIHJlbW92ZWQgbWV0aG9kLgorICAgICAgICAoV2ViQ29yZTo6
Q29tcGxleFRleHRDb250cm9sbGVyOjpnbHlwaEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRSdW4p
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJvbGxlcjo6b2Zmc2V0
Rm9yUG9zaXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBsZXhUZXh0Q29udHJv
bGxlcjo6c2VsZWN0aW9uUmVjdCk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4Lmg6CisgICAgICAgIChXZWJDb3Jl
OjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OndpZHRoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwOiBSZW1vdmVkIHRydW5jYXRlRml4ZWRQb2ludFRv
SW50ZWdlcigpLgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KTogUmVt
b3ZlZCBzZXR0ZXIgaW52b2NhdGlvbnMgb2YgQ29tcGxleFRleHRDb250cm9sbGVyLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KTogTW92
ZWQgaGFyZmJ1enogZGVwZW5kZW50IGNvZGUgdG8gQ29tcGxleFRleHRDb250cm9sbGVyLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KTogRGl0dG8u
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxp
bnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6RmFj
ZSk6IFdyYXBwZWQgdXAgSEJfRmFjZVJlYyBpbiBIYXJmYnV6ekZhY2UgY2xhc3MuCisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4Lmg6IE1v
dmVkIFJlZkNvdW50ZWRIYXJmYnV6ekZhY2UgY2xhc3MgYW5kIHJlbmFtZWQgdG8gSGFyZmJ1enpG
YWNlLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphbGxvY0hhcmZidXp6Rm9udCk6IE1vdmVkIGZyb20gQ29t
cGxleFRleHRDb250cm9sbGVyTGludXguY3BwLgorICAgICAgICAoV2ViQ29yZTo6SGFyZmJ1enpG
YWNlOjpIYXJmYnV6ekZhY2UpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZidXp6RmFj
ZTo6fkhhcmZidXp6RmFjZSk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0hhcmZidXp6U2tpYS5oOgorICAgICAgICAoV2ViQ29yZTo6SGFyZmJ1enpGYWNlOjpj
cmVhdGUpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZidXp6RmFjZTo6ZmFjZSk6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQYWdlVHJlZU5vZGVT
a2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN1YnN0aXR1dGVXaXRoVmVydGljYWxHbHlwaHMp
OiBBZG9wdCAgdGhlIGNoYW5nZSBvZiBIYXJmYnV6ekZhY2UgY2xhc3MuCisKIDIwMTEtMDYtMjcg
IEpvZSBXaWxkICA8am9zZXBoLndpbGRAbm9raWEuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IFNpbW9uIEZyYXNlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4
LmNwcAppbmRleCBiYzE1Yjk0ZDZkY2E0ODYzYmRiNDZjOTUwNGI0NGNiMjkzNTY4ZTBkLi5kZTNh
MjViODFmZmVkMTc3ZTI0M2Q1YzU5ZGI1YzMwNTU4MTEzNzliIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJM
aW51eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Q29tcGxleFRleHRDb250cm9sbGVyTGludXguY3BwCkBAIC0zMSw5ICszMSwxNCBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNvbXBsZXhUZXh0Q29udHJvbGxlckxpbnV4LmgiCiAK
KyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiVGV4
dFJ1bi5oIgogCitleHRlcm4gIkMiIHsKKyNpbmNsdWRlICJoYXJmYnV6ei11bmljb2RlLmgiCit9
CisKICNpbmNsdWRlIDx1bmljb2RlL25vcm1senIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNDYsMTQgKzUxLDkgQEAgc3RhdGljIGludCB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIo
SEJfRml4ZWQgdmFsdWUpCiAgICAgcmV0dXJuIHZhbHVlID4+IDY7CiB9CiAKLUNvbXBsZXhUZXh0
Q29udHJvbGxlcjo6Q29tcGxleFRleHRDb250cm9sbGVyKGNvbnN0IFRleHRSdW4mIHJ1biwgdW5z
aWduZWQgc3RhcnRpbmdYLCB1bnNpZ25lZCBzdGFydGluZ1ksIGNvbnN0IEZvbnQqIGZvbnQpCitD
b21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcihjb25zdCBUZXh0UnVu
JiBydW4sIHVuc2lnbmVkIHN0YXJ0aW5nWCwgdW5zaWduZWQgc3RhcnRpbmdZLCB1bnNpZ25lZCB3
b3JkU3BhY2luZywgdW5zaWduZWQgbGV0dGVyU3BhY2luZywgdW5zaWduZWQgcGFkZGluZywgY29u
c3QgRm9udCogZm9udCkKICAgICA6IG1fZm9udChmb250KQogICAgICwgbV9ydW4oZ2V0Tm9ybWFs
aXplZFRleHRSdW4ocnVuLCBtX25vcm1hbGl6ZWRSdW4sIG1fbm9ybWFsaXplZEJ1ZmZlcikpCi0g
ICAgLCBtX3dvcmRTcGFjaW5nQWRqdXN0bWVudCgwKQotICAgICwgbV9wYWRkaW5nKDApCi0gICAg
LCBtX3BhZFBlcldvcmRCcmVhaygwKQotICAgICwgbV9wYWRFcnJvcigwKQotICAgICwgbV9sZXR0
ZXJTcGFjaW5nKDApCiB7CiAgICAgLy8gRG8gbm90IHVzZSB8cnVufCBpbnNpZGUgdGhpcyBjb25z
dHJ1Y3Rvci4gVXNlIHxtX3J1bnwgaW5zdGVhZC4KIApAQCAtNzYsNiArNzYsMTAgQEAgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgVGV4dFJ1biYgcnVu
LCB1bnNpZ25lZCBzdGFydGkKIAogICAgIHJlc2V0KHN0YXJ0aW5nWCk7CiAgICAgbV9zdGFydGlu
Z1kgPSBzdGFydGluZ1k7CisKKyAgICBzZXRXb3JkU3BhY2luZ0FkanVzdG1lbnQod29yZFNwYWNp
bmcpOworICAgIHNldExldHRlclNwYWNpbmdBZGp1c3RtZW50KGxldHRlclNwYWNpbmcpOworICAg
IHNldFBhZGRpbmcocGFkZGluZyk7CiB9CiAKIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6fkNvbXBs
ZXhUZXh0Q29udHJvbGxlcigpCkBAIC0xNDMsNiArMTQ3LDE4IEBAIHZvaWQgQ29tcGxleFRleHRD
b250cm9sbGVyOjpyZXNldCh1bnNpZ25lZCBvZmZzZXQpCiAgICAgbV9vZmZzZXRYID0gb2Zmc2V0
OwogfQogCit2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6c2V0dXBGb3JSVEwoKQoreworICAg
IGludCBwYWRkaW5nID0gbV9wYWRkaW5nOworICAgIC8vIEZJWE1FOiB0aGlzIGNhdXNlcyB1cyB0
byBzaGFwZSB0aGUgdGV4dCB0d2ljZSAtLSBvbmNlIHRvIGNvbXB1dGUgdGhlIHdpZHRoIGFuZCB0
aGVuIGFnYWluCisgICAgLy8gYmVsb3cgd2hlbiBhY3R1YWxseSByZW5kZXJpbmcuIENoYW5nZSBD
b21wbGV4VGV4dENvbnRyb2xsZXIgdG8gbWF0Y2ggcGxhdGZvcm0vbWFjIGFuZAorICAgIC8vIHBs
YXRmb3JtL2Nocm9taXVtL3dpbiBieSBoYXZpbmcgaXQgc3RvcmUgdGhlIHNoYXBlZCBydW5zLCBz
byB3ZSBjYW4gcmV1c2UgdGhlIHJlc3VsdHMuCisgICAgcmVzZXQobV9vZmZzZXRYICsgd2lkdGhP
ZkZ1bGxSdW4oKSk7CisgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHBhZGRpbmcgYWdhaW4gYmVj
YXVzZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgbGF5b3V0IGNvbnN1bWVkIHRoZSB2YWx1ZS4KKyAg
ICAvLyBGaXhpbmcgdGhlIGFib3ZlIHByb2JsZW0gd291bGQgaGVscCBoZXJlIHRvby4KKyAgICBz
ZXRQYWRkaW5nKHBhZGRpbmcpOworfQorCiAvLyBBZHZhbmNlIHRvIHRoZSBuZXh0IHNjcmlwdCBy
dW4sIHJldHVybmluZyBmYWxzZSB3aGVuIHRoZSBlbmQgb2YgdGhlCiAvLyBUZXh0UnVuIGhhcyBi
ZWVuIHJlYWNoZWQuCiBib29sIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6bmV4dFNjcmlwdFJ1bigp
CkBAIC0yMDIsNyArMjE4LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldHVwRm9u
dEZvclNjcmlwdFJ1bigpCiAgICAgfQogICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSA9IG1f
Zm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKG1faXRlbS5zdHJpbmdbbV9pdGVtLml0ZW0ucG9z
XSwgZmFsc2UsIGZvbnREYXRhVmFyaWFudCkuZm9udERhdGE7CiAgICAgY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udERhdGEtPmZvbnREYXRhRm9yQ2hhcmFjdGVyKCcg
JyktPnBsYXRmb3JtRGF0YSgpOwotICAgIG1faXRlbS5mYWNlID0gcGxhdGZvcm1EYXRhLmhhcmZi
dXp6RmFjZSgpOworICAgIG1faXRlbS5mYWNlID0gcGxhdGZvcm1EYXRhLmhhcmZidXp6RmFjZSgp
LT5mYWNlKCk7CiAgICAgdm9pZCogb3BhcXVlUGxhdGZvcm1EYXRhID0gY29uc3RfY2FzdDxGb250
UGxhdGZvcm1EYXRhKj4oJnBsYXRmb3JtRGF0YSk7CiAgICAgbV9pdGVtLmZvbnQtPnVzZXJEYXRh
ID0gb3BhcXVlUGxhdGZvcm1EYXRhOwogCkBAIC0yMTcsMTYgKzIzMyw2IEBAIHZvaWQgQ29tcGxl
eFRleHRDb250cm9sbGVyOjpzZXR1cEZvbnRGb3JTY3JpcHRSdW4oKQogICAgIG1faXRlbS5mb250
LT55X3NjYWxlID0gc2NhbGU7CiB9CiAKLUhCX0ZvbnRSZWMqIENvbXBsZXhUZXh0Q29udHJvbGxl
cjo6YWxsb2NIYXJmYnV6ekZvbnQoKQotewotICAgIEhCX0ZvbnRSZWMqIGZvbnQgPSByZWludGVy
cHJldF9jYXN0PEhCX0ZvbnRSZWMqPihmYXN0TWFsbG9jKHNpemVvZihIQl9Gb250UmVjKSkpOwot
ICAgIG1lbXNldChmb250LCAwLCBzaXplb2YoSEJfRm9udFJlYykpOwotICAgIGZvbnQtPmtsYXNz
ID0gJmhhcmZidXp6U2tpYUNsYXNzOwotICAgIGZvbnQtPnVzZXJEYXRhID0gMDsKLQotICAgIHJl
dHVybiBmb250OwotfQotCiB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6ZGVsZXRlR2x5cGhB
cnJheXMoKQogewogICAgIGRlbGV0ZVtdIG1faXRlbS5nbHlwaHM7CkBAIC0yOTcsNyArMzAzLDcg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OnNldEdseXBoUG9zaXRpb25zKGJvb2wgaXNS
VEwpCiAgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBnbHlwaHMgaW4gbG9naWNhbCBvcmRlciwg
ZmxpcHBpbmcgZm9yIFJUTCB3aGVyZSBuZWNlc3NhcnkuCiAgICAgLy8gR2x5cGhzIGFyZSBwb3Np
dGlvbmVkIHN0YXJ0aW5nIGZyb20gbV9vZmZzZXRYOyBpbiBSVEwgbW9kZSB0aGV5IGdvIGxlZnR3
YXJkcyBmcm9tIHRoZXJlLgogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9pdGVtLm51bV9n
bHlwaHM7ICsraSkgewotICAgICAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxvZ0Ns
dXN0ZXJzSW5kZXgpIDwgbV9pdGVtLml0ZW0ubGVuZ3RoICYmIGxvZ0NsdXN0ZXJzKClbbG9nQ2x1
c3RlcnNJbmRleF0gPCBpKQorICAgICAgICB3aGlsZSAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxv
Z0NsdXN0ZXJzSW5kZXgpIDwgbV9pdGVtLml0ZW0ubGVuZ3RoICYmIG1faXRlbS5sb2dfY2x1c3Rl
cnNbbG9nQ2x1c3RlcnNJbmRleF0gPCBpKQogICAgICAgICAgICAgbG9nQ2x1c3RlcnNJbmRleCsr
OwogCiAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGdseXBoIGlzIGp1c3QgYWZ0ZXIgYSBzcGFj
ZSwgYWRkIGluIHRoZSB3b3JkIHNwYWNpbmcuCkBAIC0zOTksNCArNDA1LDk2IEBAIGNvbnN0IFRl
eHRSdW4mIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Z2V0Tm9ybWFsaXplZFRleHRSdW4oY29uc3Qg
VGV4dFJ1biYgb3JpZ2luCiAgICAgcmV0dXJuICpub3JtYWxpemVkUnVuOwogfQogCitjb25zdCBp
bnQgQ29tcGxleFRleHRDb250cm9sbGVyOjpnbHlwaEluZGV4Rm9yWFBvc2l0aW9uSW5TY3JpcHRS
dW4oaW50IHRhcmdldFgpIGNvbnN0Cit7CisgICAgLy8gSXRlcmF0ZSB0aHJvdWdoIHRoZSBnbHlw
aHMgaW4gbG9naWNhbCBvcmRlciwgc2VlaW5nIHdoZXRoZXIgdGFyZ2V0WCBmYWxscyBiZXR3ZWVu
IHRoZSBwcmV2aW91cworICAgIC8vIHBvc2l0aW9uIGFuZCBoYWxmd2F5IHRocm91Z2ggdGhlIGN1
cnJlbnQgZ2x5cGguCisgICAgLy8gRklYTUU6IHRoaXMgY29kZSBwcm9iYWJseSBiZWxvbmdzIGlu
IENvbXBsZXhUZXh0Q29udHJvbGxlci4KKyAgICBpbnQgbGFzdFggPSBvZmZzZXRYKCkgLSAocnRs
KCkgPyAtbV9waXhlbFdpZHRoIDogbV9waXhlbFdpZHRoKTsKKyAgICBmb3IgKGludCBnbHlwaElu
ZGV4ID0gMDsgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdseXBoSW5kZXgpIDwgbGVuZ3RoKCk7ICsr
Z2x5cGhJbmRleCkgeworICAgICAgICBpbnQgYWR2YW5jZSA9IHRydW5jYXRlRml4ZWRQb2ludFRv
SW50ZWdlcihtX2l0ZW0uYWR2YW5jZXNbZ2x5cGhJbmRleF0pOworICAgICAgICBpbnQgbmV4dFgg
PSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9ucygpW2dseXBoSW5kZXhdLngoKSkgKyBhZHZhbmNl
IC8gMjsKKyAgICAgICAgaWYgKHN0ZDo6bWluKG5leHRYLCBsYXN0WCkgPD0gdGFyZ2V0WCAmJiB0
YXJnZXRYIDw9IHN0ZDo6bWF4KG5leHRYLCBsYXN0WCkpCisgICAgICAgICAgICByZXR1cm4gZ2x5
cGhJbmRleDsKKyAgICAgICAgbGFzdFggPSBuZXh0WDsKKyAgICB9CisKKyAgICByZXR1cm4gbGVu
Z3RoKCkgLSAxOworfQorCitjb25zdCBpbnQgQ29tcGxleFRleHRDb250cm9sbGVyOjpvZmZzZXRG
b3JQb3NpdGlvbihpbnQgdGFyZ2V0WCkKK3sKKyAgICB1bnNpZ25lZCBiYXNlUG9zaXRpb24gPSAw
OworCisgICAgaW50IHggPSBvZmZzZXRYKCk7CisgICAgd2hpbGUgKG5leHRTY3JpcHRSdW4oKSkg
eworICAgICAgICBpbnQgbmV4dFggPSBvZmZzZXRYKCk7CisKKyAgICAgICAgaWYgKHN0ZDo6bWlu
KHgsIG5leHRYKSA8PSB0YXJnZXRYICYmIHRhcmdldFggPD0gc3RkOjptYXgoeCwgbmV4dFgpKSB7
CisgICAgICAgICAgICAvLyBUaGUgeCB2YWx1ZSBpbiBxdWVzdGlvbiBpcyB3aXRoaW4gdGhpcyBz
Y3JpcHQgcnVuLgorICAgICAgICAgICAgY29uc3QgaW50IGdseXBoSW5kZXggPSBnbHlwaEluZGV4
Rm9yWFBvc2l0aW9uSW5TY3JpcHRSdW4odGFyZ2V0WCk7CisKKyAgICAgICAgICAgIC8vIE5vdyB0
aGF0IHdlIGhhdmUgYSBnbHlwaCBpbmRleCwgd2UgaGF2ZSB0byB0dXJuIHRoYXQgaW50byBhCisg
ICAgICAgICAgICAvLyBjb2RlLXBvaW50IGluZGV4LiBCZWNhdXNlIG9mIGxpZ2F0dXJlcywgc2V2
ZXJhbCBjb2RlLXBvaW50cyBtYXkKKyAgICAgICAgICAgIC8vIGhhdmUgZ29uZSBpbnRvIGEgc2lu
Z2xlIGdseXBoLiBXZSBpdGVyYXRlIG92ZXIgdGhlIGNsdXN0ZXJzIGxvZworICAgICAgICAgICAg
Ly8gYW5kIGZpbmQgdGhlIGZpcnN0IGNvZGUtcG9pbnQgd2hpY2ggY29udHJpYnV0ZWQgdG8gdGhl
IGdseXBoLgorCisgICAgICAgICAgICAvLyBTb21lIHNoYXBlcnMgKGkuZS4gS2htZXIpIHdpbGwg
cHJvZHVjZSBjbHVzdGVyIGxvZ3Mgd2hpY2ggcmVwb3J0CisgICAgICAgICAgICAvLyB0aGF0IC9u
by8gY29kZSBwb2ludHMgY29udHJpYnV0ZWQgdG8gY2VydGFpbiBnbHlwaHMuIEJlY2F1c2Ugb2YK
KyAgICAgICAgICAgIC8vIHRoaXMsIHdlIHRha2UgYW55IGNvZGUgcG9pbnQgd2hpY2ggY29udHJp
YnV0ZWQgdG8gdGhlIGdseXBoIGluCisgICAgICAgICAgICAvLyBxdWVzdGlvbiwgb3IgYW55IHN1
YnNlcXVlbnQgZ2x5cGguIElmIHdlIHJ1biBvZmYgdGhlIGVuZCwgdGhlbgorICAgICAgICAgICAg
Ly8gd2UgdGFrZSB0aGUgbGFzdCBjb2RlIHBvaW50LgorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IG51bUNvZGVQb2ludHMoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYg
KG1faXRlbS5sb2dfY2x1c3RlcnNbal0gPj0gZ2x5cGhJbmRleCkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGJhc2VQb3NpdGlvbiArIGo7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJldHVybiBiYXNlUG9zaXRpb24gKyBudW1Db2RlUG9pbnRzKCkgLSAxOworICAgICAgICB9CisK
KyAgICAgICAgYmFzZVBvc2l0aW9uICs9IG51bUNvZGVQb2ludHMoKTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gYmFzZVBvc2l0aW9uOworfQorCitjb25zdCBGbG9hdFJlY3QgQ29tcGxleFRleHRDb250
cm9sbGVyOjpzZWxlY3Rpb25SZWN0KGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0
LCBpbnQgZnJvbSwgaW50IHRvKQoreworICAgIGludCBmcm9tWCA9IC0xLCB0b1ggPSAtMTsKKyAg
ICAvLyBJdGVyYXRlIHRocm91Z2ggdGhlIHNjcmlwdCBydW5zIGluIGxvZ2ljYWwgb3JkZXIsIHNl
YXJjaGluZyBmb3IgdGhlIHJ1biBjb3ZlcmluZyB0aGUgcG9zaXRpb25zIG9mIGludGVyZXN0Lgor
ICAgIHdoaWxlIChuZXh0U2NyaXB0UnVuKCkgJiYgKGZyb21YID09IC0xIHx8IHRvWCA9PSAtMSkp
IHsKKyAgICAgICAgaWYgKGZyb21YID09IC0xICYmIGZyb20gPj0gMCAmJiBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oZnJvbSkgPCBudW1Db2RlUG9pbnRzKCkpIHsKKyAgICAgICAgICAgIC8vIHxmcm9t
fCBpcyB3aXRoaW4gdGhpcyBzY3JpcHQgcnVuLiBTbyB3ZSBpbmRleCB0aGUgY2x1c3RlcnMgbG9n
IHRvCisgICAgICAgICAgICAvLyBmaW5kIHdoaWNoIGdseXBoIHRoaXMgY29kZS1wb2ludCBjb250
cmlidXRlZCB0byBhbmQgZmluZCBpdHMgeAorICAgICAgICAgICAgLy8gcG9zaXRpb24uCisgICAg
ICAgICAgICBpbnQgZ2x5cGggPSBtX2l0ZW0ubG9nX2NsdXN0ZXJzW2Zyb21dOworICAgICAgICAg
ICAgZnJvbVggPSBwb3NpdGlvbnMoKVtnbHlwaF0ueCgpOworICAgICAgICAgICAgaWYgKHJ0bCgp
KQorICAgICAgICAgICAgICAgIGZyb21YICs9IHRydW5jYXRlRml4ZWRQb2ludFRvSW50ZWdlciht
X2l0ZW0uYWR2YW5jZXNbZ2x5cGhdKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBmcm9t
IC09IG51bUNvZGVQb2ludHMoKTsKKworICAgICAgICBpZiAodG9YID09IC0xICYmIHRvID49IDAg
JiYgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRvKSA8IG51bUNvZGVQb2ludHMoKSkgeworICAgICAg
ICAgICAgaW50IGdseXBoID0gbV9pdGVtLmxvZ19jbHVzdGVyc1t0b107CisgICAgICAgICAgICB0
b1ggPSBwb3NpdGlvbnMoKVtnbHlwaF0ueCgpOworICAgICAgICAgICAgaWYgKHJ0bCgpKQorICAg
ICAgICAgICAgICAgIHRvWCArPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIobV9pdGVtLmFk
dmFuY2VzW2dseXBoXSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgdG8gLT0gbnVtQ29k
ZVBvaW50cygpOworICAgIH0KKworICAgIC8vIFRoZSBwb3NpdGlvbiBpbiBxdWVzdGlvbiBtaWdo
dCBiZSBqdXN0IGFmdGVyIHRoZSB0ZXh0LgorICAgIGlmIChmcm9tWCA9PSAtMSkKKyAgICAgICAg
ZnJvbVggPSBvZmZzZXRYKCk7CisgICAgaWYgKHRvWCA9PSAtMSkKKyAgICAgICAgdG9YID0gb2Zm
c2V0WCgpOworCisgICAgQVNTRVJUKGZyb21YICE9IC0xICYmIHRvWCAhPSAtMSk7CisKKyAgICBp
ZiAoZnJvbVggPCB0b1gpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQueCgpICsgZnJv
bVgsIHBvaW50LnkoKSwgdG9YIC0gZnJvbVgsIGhlaWdodCk7CisKKyAgICByZXR1cm4gRmxvYXRS
ZWN0KHBvaW50LngoKSArIHRvWCwgcG9pbnQueSgpLCBmcm9tWCAtIHRvWCwgaGVpZ2h0KTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250cm9sbGVyTGludXguaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0NvbXBsZXhUZXh0Q29udHJv
bGxlckxpbnV4LmgKaW5kZXggZTI2Mjk5MjYzMjNkNzVmYTkzYjJlNWExNGJjYjcxNmQyMzJhOTYy
OS4uZjU5YTkyN2VjYjU2ZGNmMDg3OGZlYzY4ZTA0OTBkNDJjOWI0Mzc1YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ29tcGxleFRleHRDb250
cm9sbGVyTGludXguaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Db21wbGV4VGV4dENvbnRyb2xsZXJMaW51eC5oCkBAIC0zNiw2ICszNiwxMCBAQAogI2lu
Y2x1ZGUgIlNrU2NhbGFyLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgogCitleHRlcm4gIkMiIHsK
KyNpbmNsdWRlICJoYXJmYnV6ei1zaGFwZXIuaCIKK30KKwogI2luY2x1ZGUgPHVuaWNvZGUvdWNo
YXIuaD4KICNpbmNsdWRlIDx3dGYvT3duQXJyYXlQdHIuaD4KICNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CkBAIC02MSw3ICs2NSw3IEBAIGNsYXNzIFNpbXBsZUZvbnREYXRhOwogLy8gY2FuIGNhbGwg
fHJlc2V0fCB0byBzdGFydCBvdmVyIGFnYWluLgogY2xhc3MgQ29tcGxleFRleHRDb250cm9sbGVy
IHsKIHB1YmxpYzoKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIoY29uc3QgVGV4dFJ1biYsIHVu
c2lnbmVkLCB1bnNpZ25lZCwgY29uc3QgRm9udCopOworICAgIENvbXBsZXhUZXh0Q29udHJvbGxl
cihjb25zdCBUZXh0UnVuJiwgdW5zaWduZWQgc3RhcnRpbmdYLCB1bnNpZ25lZCBzdGFydGluZ1ks
IHVuc2lnbmVkIHdvcmRTcGFjaW5nLCB1bnNpZ25lZCBsZXR0ZXJTcGFjaW5nLCB1bnNpZ25lZCBw
YWRkaW5nLCBjb25zdCBGb250Kik7CiAgICAgfkNvbXBsZXhUZXh0Q29udHJvbGxlcigpOwogCiAg
ICAgYm9vbCBpc1dvcmRCcmVhayh1bnNpZ25lZCk7CkBAIC04NSw4ICs4OSw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldExldHRlclNwYWNpbmdBZGp1c3RtZW50KGludCBsZXR0ZXJTcGFjaW5nQWRq
dXN0bWVudCkgeyBtX2xldHRlclNwYWNpbmcgPSBsZXR0ZXJTcGFjaW5nQWRqdXN0bWVudDsgfQog
ICAgIGludCBsZXR0ZXJTcGFjaW5nKCkgY29uc3QgeyByZXR1cm4gbV9sZXR0ZXJTcGFjaW5nOyB9
CiAKLSAgICAvLyBTZXQgdGhlIHggb2Zmc2V0IGZvciB0aGUgbmV4dCBzY3JpcHQgcnVuLiBUaGlz
IGFmZmVjdHMgdGhlIHZhbHVlcyBpbgotICAgIC8vIHx4UG9zaXRpb25zfAorICAgIC8vIHNldHVw
Rm9yUlRMIHNldHMgdXAgdGhlIGNvbnRyb2xsZXIgdG8gaGFuZGxlIFJUTCB0ZXh0LgorICAgIHZv
aWQgc2V0dXBGb3JSVEwoKTsKICAgICBib29sIHJ0bCgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuLnJ0
bCgpOyB9CiAgICAgY29uc3QgdWludDE2X3QqIGdseXBocygpIGNvbnN0IHsgcmV0dXJuIG1fZ2x5
cGhzMTY7IH0KIApAQCAtOTgsMTkgKzEwMiw2IEBAIHB1YmxpYzoKICAgICAvLyBydW4uCiAgICAg
Y29uc3QgU2tQb2ludCogcG9zaXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGlvbnM7IH0K
IAotICAgIC8vIEdldCB0aGUgYWR2YW5jZXMgKHdpZHRocykgZm9yIGVhY2ggZ2x5cGguCi0gICAg
Y29uc3QgSEJfRml4ZWQqIGFkdmFuY2VzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLmFkdmFuY2Vz
OyB9Ci0KLSAgICAvLyBSZXR1cm4gdGhlIHdpZHRoIChpbiBweCkgb2YgdGhlIGN1cnJlbnQgc2Ny
aXB0IHJ1bi4KLSAgICBjb25zdCB1bnNpZ25lZCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGl4
ZWxXaWR0aDsgfQotCi0gICAgLy8gUmV0dXJuIHRoZSBjbHVzdGVyIGxvZyBmb3IgdGhlIGN1cnJl
bnQgc2NyaXB0IHJ1bi4gRm9yIGV4YW1wbGU6Ci0gICAgLy8gICBzY3JpcHQgcnVuOiBmIGkgYSBu
IGMgw6kgIChmaSBnZXRzIGxpZ2F0dXJlZCkKLSAgICAvLyAgIGxvZyBjbHV0cnM6IDAgMCAxIDIg
MyA0Ci0gICAgLy8gU28sIGZvciBlYWNoIGlucHV0IGNvZGUgcG9pbnQsIHRoZSBsb2cgdGVsbHMg
eW91IHdoaWNoIG91dHB1dCBnbHlwaCB3YXMKLSAgICAvLyBnZW5lcmF0ZWQgZm9yIGl0LgotICAg
IGNvbnN0IHVuc2lnbmVkIHNob3J0KiBsb2dDbHVzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1faXRl
bS5sb2dfY2x1c3RlcnM7IH0KLQogICAgIC8vIHJldHVybiB0aGUgbnVtYmVyIG9mIGNvZGUgcG9p
bnRzIGluIHRoZSBjdXJyZW50IHNjcmlwdCBydW4KICAgICBjb25zdCB1bnNpZ25lZCBudW1Db2Rl
UG9pbnRzKCkgY29uc3QgeyByZXR1cm4gbV9pdGVtLml0ZW0ubGVuZ3RoOyB9CiAKQEAgLTExOSw5
ICsxMTAsMTQgQEAgcHVibGljOgogCiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udFBs
YXRmb3JtRGF0YUZvclNjcmlwdFJ1bigpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBs
YXRmb3JtRGF0YSo+KG1faXRlbS5mb250LT51c2VyRGF0YSk7IH0KIAorICAgIGNvbnN0IGludCBv
ZmZzZXRGb3JQb3NpdGlvbihpbnQpOworICAgIGNvbnN0IEZsb2F0UmVjdCBzZWxlY3Rpb25SZWN0
KGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgaGVpZ2h0LCBpbnQgZnJvbSAsIGludCB0byk7CisKIHBy
aXZhdGU6CisgICAgLy8gUmV0dXJuIHRoZSB3aWR0aCAoaW4gcHgpIG9mIHRoZSBjdXJyZW50IHNj
cmlwdCBydW4uCisgICAgdW5zaWduZWQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3BpeGVsV2lk
dGg7IH0KKwogICAgIHZvaWQgc2V0dXBGb250Rm9yU2NyaXB0UnVuKCk7Ci0gICAgSEJfRm9udFJl
YyogYWxsb2NIYXJmYnV6ekZvbnQoKTsKICAgICB2b2lkIGRlbGV0ZUdseXBoQXJyYXlzKCk7CiAg
ICAgdm9pZCBjcmVhdGVHbHlwaEFycmF5cyhpbnQpOwogICAgIHZvaWQgcmVzZXRHbHlwaEFycmF5
cygpOwpAQCAtMTM0LDYgKzEzMCw4IEBAIHByaXZhdGU6CiAgICAgLy8gVGhpcyBtYXRjaGVzIHRo
ZSBsb2dpYyBpbiBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnJlYWsKICAgICBzdGF0aWMgYm9v
bCBpc0NvZGVwb2ludFNwYWNlKEhCX1VDaGFyMTYgYykgeyByZXR1cm4gYyA9PSAnICcgfHwgYyA9
PSAnXHQnOyB9CiAKKyAgICBjb25zdCBpbnQgZ2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0
UnVuKGludCB0YXJnZXRYKSBjb25zdDsKKwogICAgIGNvbnN0IEZvbnQqIGNvbnN0IG1fZm9udDsK
ICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbV9jdXJyZW50Rm9udERhdGE7CiAgICAgSEJfU2hh
cGVySXRlbSBtX2l0ZW07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250TGludXguY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udExpbnV4LmNwcAppbmRleCAwY2ZmZWQxNGNhNWQyYWM4M2UyYWY1
MWI1YzgzNjgxOWNlNjUzY2IzLi5lNzU4MDg2ODNhMDI4M2U3YjQ0OGE0MzA0MDk1ZWQzYTYxNzli
MGU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250TGludXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRMaW51eC5jcHAKQEAgLTE2NSwxNCArMTY1LDYgQEAgdm9pZCBGb250OjpkcmF3
R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LAog
ICAgIH0KIH0KIAotLy8gSGFyZmJ1enogdXNlcyAyNi42IGZpeGVkIHBvaW50IHZhbHVlcyBmb3Ig
cGl4ZWwgb2Zmc2V0cy4gSG93ZXZlciwgd2UgZG9uJ3QKLS8vIGhhbmRsZSBzdWJwaXhlbCBwb3Np
dGlvbmluZyBzbyB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gdHJ1bmNhdGUgSGFyZmJ1enoKLS8v
IHZhbHVlcyB0byBhIG51bWJlciBvZiBwaXhlbHMuCi1zdGF0aWMgaW50IHRydW5jYXRlRml4ZWRQ
b2ludFRvSW50ZWdlcihIQl9GaXhlZCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUgPj4gNjsK
LX0KLQogc3RhdGljIHZvaWQgc2V0dXBGb3JUZXh0UGFpbnRpbmcoU2tQYWludCogcGFpbnQsIFNr
Q29sb3IgY29sb3IpCiB7CiAgICAgcGFpbnQtPnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5
cGhJRF9UZXh0RW5jb2RpbmcpOwpAQCAtMjA1LDIwICsxOTcsMTAgQEAgdm9pZCBGb250OjpkcmF3
Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgVGV4dFJ1biYgcnVuLAogICAg
ICAgICBzZXR1cEZvclRleHRQYWludGluZygmc3Ryb2tlUGFpbnQsIGdjLT5zdHJva2VDb2xvcigp
LnJnYigpKTsKICAgICB9CiAKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihy
dW4sIHBvaW50LngoKSwgcG9pbnQueSgpLCB0aGlzKTsKLSAgICBjb250cm9sbGVyLnNldFdvcmRT
cGFjaW5nQWRqdXN0bWVudCh3b3JkU3BhY2luZygpKTsKLSAgICBjb250cm9sbGVyLnNldExldHRl
clNwYWNpbmdBZGp1c3RtZW50KGxldHRlclNwYWNpbmcoKSk7Ci0gICAgY29udHJvbGxlci5zZXRQ
YWRkaW5nKHJ1bi5leHBhbnNpb24oKSk7Ci0KLSAgICBpZiAocnVuLnJ0bCgpKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiB0aGlzIGNhdXNlcyB1cyB0byBzaGFwZSB0aGUgdGV4dCB0d2ljZSAtLSBvbmNl
IHRvIGNvbXB1dGUgdGhlIHdpZHRoIGFuZCB0aGVuIGFnYWluCi0gICAgICAgIC8vIGJlbG93IHdo
ZW4gYWN0dWFsbHkgcmVuZGVyaW5nLiAgQ2hhbmdlIENvbXBsZXhUZXh0Q29udHJvbGxlciB0byBt
YXRjaCBwbGF0Zm9ybS9tYWMgYW5kCi0gICAgICAgIC8vIHBsYXRmb3JtL2Nocm9taXVtL3dpbiBi
eSBoYXZpbmcgaXQgc3RvcmUgdGhlIHNoYXBlZCBydW5zLCBzbyB3ZSBjYW4gcmV1c2UgdGhlIHJl
c3VsdHMuCi0gICAgICAgIGNvbnRyb2xsZXIucmVzZXQocG9pbnQueCgpICsgY29udHJvbGxlci53
aWR0aE9mRnVsbFJ1bigpKTsKLSAgICAgICAgLy8gV2UgbmVlZCB0byBzZXQgdGhlIHBhZGRpbmcg
YWdhaW4gYmVjYXVzZSBDb21wbGV4VGV4dENvbnRyb2xsZXIgbGF5b3V0IGNvbnN1bWVkIHRoZSB2
YWx1ZS4KLSAgICAgICAgLy8gRml4aW5nIHRoZSBhYm92ZSBwcm9ibGVtIHdvdWxkIGhlbHAgaGVy
ZSB0b28uCi0gICAgICAgIGNvbnRyb2xsZXIuc2V0UGFkZGluZyhydW4uZXhwYW5zaW9uKCkpOwot
ICAgIH0KKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIHBvaW50Lngo
KSwgcG9pbnQueSgpLCB3b3JkU3BhY2luZygpLCBsZXR0ZXJTcGFjaW5nKCksIHJ1bi5leHBhbnNp
b24oKSwgdGhpcyk7CisKKyAgICBpZiAocnVuLnJ0bCgpKQorICAgICAgICBjb250cm9sbGVyLnNl
dHVwRm9yUlRMKCk7CiAKICAgICB3aGlsZSAoY29udHJvbGxlci5uZXh0U2NyaXB0UnVuKCkpIHsK
ICAgICAgICAgaWYgKGZpbGwpIHsKQEAgLTI0MiwzMCArMjI0LDEwIEBAIHZvaWQgRm9udDo6ZHJh
d0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQg
Ki8sIGNvbnN0CiAKIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBU
ZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogLyogZmFsbGJhY2tG
b250cyAqLywgR2x5cGhPdmVyZmxvdyogLyogZ2x5cGhPdmVyZmxvdyAqLykgY29uc3QKIHsKLSAg
ICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIDAsIDAsIHRoaXMpOwotICAg
IGNvbnRyb2xsZXIuc2V0V29yZFNwYWNpbmdBZGp1c3RtZW50KHdvcmRTcGFjaW5nKCkpOwotICAg
IGNvbnRyb2xsZXIuc2V0TGV0dGVyU3BhY2luZ0FkanVzdG1lbnQobGV0dGVyU3BhY2luZygpKTsK
LSAgICBjb250cm9sbGVyLnNldFBhZGRpbmcocnVuLmV4cGFuc2lvbigpKTsKKyAgICBDb21wbGV4
VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIDAsIDAsIHdvcmRTcGFjaW5nKCksIGxldHRl
clNwYWNpbmcoKSwgcnVuLmV4cGFuc2lvbigpLCB0aGlzKTsKICAgICByZXR1cm4gY29udHJvbGxl
ci53aWR0aE9mRnVsbFJ1bigpOwogfQogCi1zdGF0aWMgaW50IGdseXBoSW5kZXhGb3JYUG9zaXRp
b25JblNjcmlwdFJ1bihjb25zdCBDb21wbGV4VGV4dENvbnRyb2xsZXImIGNvbnRyb2xsZXIsIGlu
dCB0YXJnZXRYKQotewotICAgIC8vIEl0ZXJhdGUgdGhyb3VnaCB0aGUgZ2x5cGhzIGluIGxvZ2lj
YWwgb3JkZXIsIHNlZWluZyB3aGV0aGVyIHRhcmdldFggZmFsbHMgYmV0d2VlbiB0aGUgcHJldmlv
dXMKLSAgICAvLyBwb3NpdGlvbiBhbmQgaGFsZndheSB0aHJvdWdoIHRoZSBjdXJyZW50IGdseXBo
LgotICAgIC8vIEZJWE1FOiB0aGlzIGNvZGUgcHJvYmFibHkgYmVsb25ncyBpbiBDb21wbGV4VGV4
dENvbnRyb2xsZXIuCi0gICAgaW50IGxhc3RYID0gY29udHJvbGxlci5vZmZzZXRYKCkgLSAoY29u
dHJvbGxlci5ydGwoKSA/IC1jb250cm9sbGVyLndpZHRoKCkgOiBjb250cm9sbGVyLndpZHRoKCkp
OwotICAgIGZvciAoaW50IGdseXBoSW5kZXggPSAwOyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZ2x5
cGhJbmRleCkgPCBjb250cm9sbGVyLmxlbmd0aCgpOyArK2dseXBoSW5kZXgpIHsKLSAgICAgICAg
aW50IGFkdmFuY2UgPSB0cnVuY2F0ZUZpeGVkUG9pbnRUb0ludGVnZXIoY29udHJvbGxlci5hZHZh
bmNlcygpW2dseXBoSW5kZXhdKTsKLSAgICAgICAgaW50IG5leHRYID0gc3RhdGljX2Nhc3Q8aW50
Pihjb250cm9sbGVyLnBvc2l0aW9ucygpW2dseXBoSW5kZXhdLngoKSkgKyBhZHZhbmNlIC8gMjsK
LSAgICAgICAgaWYgKHN0ZDo6bWluKG5leHRYLCBsYXN0WCkgPD0gdGFyZ2V0WCAmJiB0YXJnZXRY
IDw9IHN0ZDo6bWF4KG5leHRYLCBsYXN0WCkpCi0gICAgICAgICAgICByZXR1cm4gZ2x5cGhJbmRl
eDsKLSAgICAgICAgbGFzdFggPSBuZXh0WDsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29udHJvbGxl
ci5sZW5ndGgoKSAtIDE7Ci19Ci0KIC8vIFJldHVybiB0aGUgY29kZSBwb2ludCBpbmRleCBmb3Ig
dGhlIGdpdmVuIHx4fCBvZmZzZXQgaW50byB0aGUgdGV4dCBydW4uCiBpbnQgRm9udDo6b2Zmc2V0
Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHhGbG9h
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVk
ZVBhcnRpYWxHbHlwaHMpIGNvbnN0CkBAIC0yNzYsNDkgKzIzOCwxMCBAQCBpbnQgRm9udDo6b2Zm
c2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHhG
bG9hdCwKIAogICAgIC8vIChNYWMgY29kZSBpZ25vcmVzIGluY2x1ZGVQYXJ0aWFsR2x5cGhzLCBh
bmQgdGhleSBkb24ndCBrbm93IHdoYXQgaXQncwogICAgIC8vIHN1cHBvc2VkIHRvIGRvLCBzbyB3
ZSBqdXN0IGlnbm9yZSBpdCBhcyB3ZWxsLikKLSAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29u
dHJvbGxlcihydW4sIDAsIDAsIHRoaXMpOwotICAgIGNvbnRyb2xsZXIuc2V0V29yZFNwYWNpbmdB
ZGp1c3RtZW50KHdvcmRTcGFjaW5nKCkpOwotICAgIGNvbnRyb2xsZXIuc2V0TGV0dGVyU3BhY2lu
Z0FkanVzdG1lbnQobGV0dGVyU3BhY2luZygpKTsKLSAgICBjb250cm9sbGVyLnNldFBhZGRpbmco
cnVuLmV4cGFuc2lvbigpKTsKLSAgICBpZiAocnVuLnJ0bCgpKSB7Ci0gICAgICAgIC8vIFNlZSBG
SVhNRSBpbiBkcmF3Q29tcGxleFRleHQuCi0gICAgICAgIGNvbnRyb2xsZXIucmVzZXQoY29udHJv
bGxlci53aWR0aE9mRnVsbFJ1bigpKTsKLSAgICAgICAgY29udHJvbGxlci5zZXRQYWRkaW5nKHJ1
bi5leHBhbnNpb24oKSk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgYmFzZVBvc2l0aW9uID0gMDsK
LQotICAgIGludCB4ID0gY29udHJvbGxlci5vZmZzZXRYKCk7Ci0gICAgd2hpbGUgKGNvbnRyb2xs
ZXIubmV4dFNjcmlwdFJ1bigpKSB7Ci0gICAgICAgIGludCBuZXh0WCA9IGNvbnRyb2xsZXIub2Zm
c2V0WCgpOwotCi0gICAgICAgIGlmIChzdGQ6Om1pbih4LCBuZXh0WCkgPD0gdGFyZ2V0WCAmJiB0
YXJnZXRYIDw9IHN0ZDo6bWF4KHgsIG5leHRYKSkgewotICAgICAgICAgICAgLy8gVGhlIHggdmFs
dWUgaW4gcXVlc3Rpb24gaXMgd2l0aGluIHRoaXMgc2NyaXB0IHJ1bi4KLSAgICAgICAgICAgIGNv
bnN0IGludCBnbHlwaEluZGV4ID0gZ2x5cGhJbmRleEZvclhQb3NpdGlvbkluU2NyaXB0UnVuKGNv
bnRyb2xsZXIsIHRhcmdldFgpOwotCi0gICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGEg
Z2x5cGggaW5kZXgsIHdlIGhhdmUgdG8gdHVybiB0aGF0IGludG8gYQotICAgICAgICAgICAgLy8g
Y29kZS1wb2ludCBpbmRleC4gQmVjYXVzZSBvZiBsaWdhdHVyZXMsIHNldmVyYWwgY29kZS1wb2lu
dHMgbWF5Ci0gICAgICAgICAgICAvLyBoYXZlIGdvbmUgaW50byBhIHNpbmdsZSBnbHlwaC4gV2Ug
aXRlcmF0ZSBvdmVyIHRoZSBjbHVzdGVycyBsb2cKLSAgICAgICAgICAgIC8vIGFuZCBmaW5kIHRo
ZSBmaXJzdCBjb2RlLXBvaW50IHdoaWNoIGNvbnRyaWJ1dGVkIHRvIHRoZSBnbHlwaC4KLQotICAg
ICAgICAgICAgLy8gU29tZSBzaGFwZXJzIChpLmUuIEtobWVyKSB3aWxsIHByb2R1Y2UgY2x1c3Rl
ciBsb2dzIHdoaWNoIHJlcG9ydAotICAgICAgICAgICAgLy8gdGhhdCAvbm8vIGNvZGUgcG9pbnRz
IGNvbnRyaWJ1dGVkIHRvIGNlcnRhaW4gZ2x5cGhzLiBCZWNhdXNlIG9mCi0gICAgICAgICAgICAv
LyB0aGlzLCB3ZSB0YWtlIGFueSBjb2RlIHBvaW50IHdoaWNoIGNvbnRyaWJ1dGVkIHRvIHRoZSBn
bHlwaCBpbgotICAgICAgICAgICAgLy8gcXVlc3Rpb24sIG9yIGFueSBzdWJzZXF1ZW50IGdseXBo
LiBJZiB3ZSBydW4gb2ZmIHRoZSBlbmQsIHRoZW4KLSAgICAgICAgICAgIC8vIHdlIHRha2UgdGhl
IGxhc3QgY29kZSBwb2ludC4KLSAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIHNob3J0KiBsb2cg
PSBjb250cm9sbGVyLmxvZ0NsdXN0ZXJzKCk7Ci0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgY29udHJvbGxlci5udW1Db2RlUG9pbnRzKCk7ICsraikgewotICAgICAgICAgICAg
ICAgIGlmIChsb2dbal0gPj0gZ2x5cGhJbmRleCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGJhc2VQb3NpdGlvbiArIGo7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBi
YXNlUG9zaXRpb24gKyBjb250cm9sbGVyLm51bUNvZGVQb2ludHMoKSAtIDE7Ci0gICAgICAgIH0K
LQotICAgICAgICBiYXNlUG9zaXRpb24gKz0gY29udHJvbGxlci5udW1Db2RlUG9pbnRzKCk7Ci0g
ICAgfQotCi0gICAgcmV0dXJuIGJhc2VQb3NpdGlvbjsKKyAgICBDb21wbGV4VGV4dENvbnRyb2xs
ZXIgY29udHJvbGxlcihydW4sIDAsIDAsIHdvcmRTcGFjaW5nKCksIGxldHRlclNwYWNpbmcoKSwg
cnVuLmV4cGFuc2lvbigpLCB0aGlzKTsKKyAgICBpZiAocnVuLnJ0bCgpKQorICAgICAgICBjb250
cm9sbGVyLnNldHVwRm9yUlRMKCk7CisgICAgcmV0dXJuIGNvbnRyb2xsZXIub2Zmc2V0Rm9yUG9z
aXRpb24odGFyZ2V0WCk7CiB9CiAKIC8vIFJldHVybiB0aGUgcmVjdGFuZ2xlIGZvciBzZWxlY3Rp
bmcgdGhlIGdpdmVuIHJhbmdlIG9mIGNvZGUtcG9pbnRzIGluIHRoZSBUZXh0UnVuLgpAQCAtMzI2
LDUxICsyNDksMTAgQEAgRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgaGVpZ2h0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAogewotICAgIGludCBmcm9tWCA9IC0xLCB0b1ggPSAtMTsKLSAgICBDb21wbGV4VGV4dENvbnRy
b2xsZXIgY29udHJvbGxlcihydW4sIDAsIDAsIHRoaXMpOwotICAgIGNvbnRyb2xsZXIuc2V0V29y
ZFNwYWNpbmdBZGp1c3RtZW50KHdvcmRTcGFjaW5nKCkpOwotICAgIGNvbnRyb2xsZXIuc2V0TGV0
dGVyU3BhY2luZ0FkanVzdG1lbnQobGV0dGVyU3BhY2luZygpKTsKLSAgICBjb250cm9sbGVyLnNl
dFBhZGRpbmcocnVuLmV4cGFuc2lvbigpKTsKLSAgICBpZiAocnVuLnJ0bCgpKSB7Ci0gICAgICAg
IC8vIFNlZSBGSVhNRSBpbiBkcmF3Q29tcGxleFRleHQuCi0gICAgICAgIGNvbnRyb2xsZXIucmVz
ZXQoY29udHJvbGxlci53aWR0aE9mRnVsbFJ1bigpKTsKLSAgICAgICAgY29udHJvbGxlci5zZXRQ
YWRkaW5nKHJ1bi5leHBhbnNpb24oKSk7Ci0gICAgfQotCi0gICAgLy8gSXRlcmF0ZSB0aHJvdWdo
IHRoZSBzY3JpcHQgcnVucyBpbiBsb2dpY2FsIG9yZGVyLCBzZWFyY2hpbmcgZm9yIHRoZSBydW4g
Y292ZXJpbmcgdGhlIHBvc2l0aW9ucyBvZiBpbnRlcmVzdC4KLSAgICB3aGlsZSAoY29udHJvbGxl
ci5uZXh0U2NyaXB0UnVuKCkgJiYgKGZyb21YID09IC0xIHx8IHRvWCA9PSAtMSkpIHsKLSAgICAg
ICAgaWYgKGZyb21YID09IC0xICYmIGZyb20gPj0gMCAmJiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
ZnJvbSkgPCBjb250cm9sbGVyLm51bUNvZGVQb2ludHMoKSkgewotICAgICAgICAgICAgLy8gfGZy
b218IGlzIHdpdGhpbiB0aGlzIHNjcmlwdCBydW4uIFNvIHdlIGluZGV4IHRoZSBjbHVzdGVycyBs
b2cgdG8KLSAgICAgICAgICAgIC8vIGZpbmQgd2hpY2ggZ2x5cGggdGhpcyBjb2RlLXBvaW50IGNv
bnRyaWJ1dGVkIHRvIGFuZCBmaW5kIGl0cyB4Ci0gICAgICAgICAgICAvLyBwb3NpdGlvbi4KLSAg
ICAgICAgICAgIGludCBnbHlwaCA9IGNvbnRyb2xsZXIubG9nQ2x1c3RlcnMoKVtmcm9tXTsKLSAg
ICAgICAgICAgIGZyb21YID0gY29udHJvbGxlci5wb3NpdGlvbnMoKVtnbHlwaF0ueCgpOwotICAg
ICAgICAgICAgaWYgKGNvbnRyb2xsZXIucnRsKCkpCi0gICAgICAgICAgICAgICAgZnJvbVggKz0g
dHJ1bmNhdGVGaXhlZFBvaW50VG9JbnRlZ2VyKGNvbnRyb2xsZXIuYWR2YW5jZXMoKVtnbHlwaF0p
OwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGZyb20gLT0gY29udHJvbGxlci5udW1Db2Rl
UG9pbnRzKCk7Ci0KLSAgICAgICAgaWYgKHRvWCA9PSAtMSAmJiB0byA+PSAwICYmIHN0YXRpY19j
YXN0PHVuc2lnbmVkPih0bykgPCBjb250cm9sbGVyLm51bUNvZGVQb2ludHMoKSkgewotICAgICAg
ICAgICAgaW50IGdseXBoID0gY29udHJvbGxlci5sb2dDbHVzdGVycygpW3RvXTsKLSAgICAgICAg
ICAgIHRvWCA9IGNvbnRyb2xsZXIucG9zaXRpb25zKClbZ2x5cGhdLngoKTsKLSAgICAgICAgICAg
IGlmIChjb250cm9sbGVyLnJ0bCgpKQotICAgICAgICAgICAgICAgIHRvWCArPSB0cnVuY2F0ZUZp
eGVkUG9pbnRUb0ludGVnZXIoY29udHJvbGxlci5hZHZhbmNlcygpW2dseXBoXSk7Ci0gICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgdG8gLT0gY29udHJvbGxlci5udW1Db2RlUG9pbnRzKCk7Ci0g
ICAgfQotCi0gICAgLy8gVGhlIHBvc2l0aW9uIGluIHF1ZXN0aW9uIG1pZ2h0IGJlIGp1c3QgYWZ0
ZXIgdGhlIHRleHQuCi0gICAgaWYgKGZyb21YID09IC0xKQotICAgICAgICBmcm9tWCA9IGNvbnRy
b2xsZXIub2Zmc2V0WCgpOwotICAgIGlmICh0b1ggPT0gLTEpCi0gICAgICAgIHRvWCA9IGNvbnRy
b2xsZXIub2Zmc2V0WCgpOwotCi0gICAgQVNTRVJUKGZyb21YICE9IC0xICYmIHRvWCAhPSAtMSk7
Ci0KLSAgICBpZiAoZnJvbVggPCB0b1gpCi0gICAgICAgIHJldHVybiBGbG9hdFJlY3QocG9pbnQu
eCgpICsgZnJvbVgsIHBvaW50LnkoKSwgdG9YIC0gZnJvbVgsIGhlaWdodCk7Ci0KLSAgICByZXR1
cm4gRmxvYXRSZWN0KHBvaW50LngoKSArIHRvWCwgcG9pbnQueSgpLCBmcm9tWCAtIHRvWCwgaGVp
Z2h0KTsKKyAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIgY29udHJvbGxlcihydW4sIDAsIDAsIHdv
cmRTcGFjaW5nKCksIGxldHRlclNwYWNpbmcoKSwgcnVuLmV4cGFuc2lvbigpLCB0aGlzKTsKKyAg
ICBpZiAocnVuLnJ0bCgpKQorICAgICAgICBjb250cm9sbGVyLnNldHVwRm9yUlRMKCk7CisgICAg
cmV0dXJuIGNvbnRyb2xsZXIuc2VsZWN0aW9uUmVjdChwb2ludCwgaGVpZ2h0LCBmcm9tLCB0byk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRh
TGludXguY3BwCmluZGV4IDFmYjU5NTdiN2IxNGMyY2ViMTIxYWU3NGI0YmE3YWRjMDI4OWI1NzQu
LmIyYTNlY2M2Yzg5ODc2ZjNlYTc4ZDVmZDNmMWQyN2VjNDMwNjg4NjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFM
aW51eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKIAotI2luY2x1ZGUgIkhhcmZi
dXp6U2tpYS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1CcmlkZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtNjMsMTEgKzYyLDYg
QEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRTdWJwaXhlbEdseXBocyhib29sIGlzU3VicGl4
ZWxHbHlwaHMpCiAgICAgaXNTa2lhU3VicGl4ZWxHbHlwaHMgPSBpc1N1YnBpeGVsR2x5cGhzOwog
fQogCi1Gb250UGxhdGZvcm1EYXRhOjpSZWZDb3VudGVkSGFyZmJ1enpGYWNlOjp+UmVmQ291bnRl
ZEhhcmZidXp6RmFjZSgpCi17Ci0gICAgSEJfRnJlZUZhY2UobV9oYXJmYnV6ekZhY2UpOwotfQot
CiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIHNyYykKICAgICA6IG1fdHlwZWZhY2Uoc3JjLm1fdHlwZWZhY2UpCiAgICAgLCBtX2ZhbWls
eShzcmMubV9mYW1pbHkpCkBAIC0yMjksMTIgKzIyMywxMiBAQCBib29sIEZvbnRQbGF0Zm9ybURh
dGE6OmlzRml4ZWRQaXRjaCgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1IQl9GYWNl
UmVjXyogRm9udFBsYXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkgY29uc3QKK0hhcmZidXp6RmFj
ZSogRm9udFBsYXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkgY29uc3QKIHsKICAgICBpZiAoIW1f
aGFyZmJ1enpGYWNlKQotICAgICAgICBtX2hhcmZidXp6RmFjZSA9IFJlZkNvdW50ZWRIYXJmYnV6
ekZhY2U6OmNyZWF0ZShIQl9OZXdGYWNlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRo
aXMpLCBoYXJmYnV6elNraWFHZXRUYWJsZSkpOworICAgICAgICBtX2hhcmZidXp6RmFjZSA9IEhh
cmZidXp6RmFjZTo6Y3JlYXRlKGNvbnN0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YSo+KHRoaXMpKTsK
IAotICAgIHJldHVybiBtX2hhcmZidXp6RmFjZS0+ZmFjZSgpOworICAgIHJldHVybiBtX2hhcmZi
dXp6RmFjZS5nZXQoKTsKIH0KIAogdm9pZCBGb250UGxhdGZvcm1EYXRhOjpxdWVyeVN5c3RlbUZv
clJlbmRlclN0eWxlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmgKaW5kZXggNTQx
YWE4NjY1YTZjMGZjOGJjMmUyMGQwYTg3OTY2ZWVjODAyNDA0My4uODZiOTQxY2FlNDA1MTlhOTRh
MWY4YTQwOTJlZGE0ZTZhNmQxM2Y4YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4
LmgKQEAgLTMzLDYgKzMzLDcgQEAKIAogI2luY2x1ZGUgIkZvbnRPcmllbnRhdGlvbi5oIgogI2lu
Y2x1ZGUgIkZvbnRSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIkhhcmZidXp6U2tpYS5oIgogI2lu
Y2x1ZGUgIlRleHRPcmllbnRhdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgpAQCAtNDMsOCArNDQsNiBAQAogY2xhc3MgU2tUeXBlZmFjZTsK
IHR5cGVkZWYgdWludDMyX3QgU2tGb250SUQ7CiAKLXN0cnVjdCBIQl9GYWNlUmVjXzsKLQogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGb250RGVzY3JpcHRpb247CkBAIC0xMjgsNyArMTI3
LDcgQEAgcHVibGljOgogICAgIFN0cmluZyBkZXNjcmlwdGlvbigpIGNvbnN0OwogI2VuZGlmCiAK
LSAgICBIQl9GYWNlUmVjXyogaGFyZmJ1enpGYWNlKCkgY29uc3Q7CisgICAgSGFyZmJ1enpGYWNl
KiBoYXJmYnV6ekZhY2UoKSBjb25zdDsKIAogICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAv
LyBHbG9iYWwgZm9udCBwcmVmZXJlbmNlcy4uLgpAQCAtMTM4LDI1ICsxMzcsNiBAQCBwdWJsaWM6
CiAgICAgc3RhdGljIHZvaWQgc2V0U3VicGl4ZWxHbHlwaHMoYm9vbCBvbik7CiAKIHByaXZhdGU6
Ci0gICAgY2xhc3MgUmVmQ291bnRlZEhhcmZidXp6RmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJl
ZkNvdW50ZWRIYXJmYnV6ekZhY2U+IHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFJlZkNvdW50ZWRIYXJmYnV6ekZhY2U+IGNyZWF0ZShIQl9GYWNlUmVjXyogaGFyZmJ1
enpGYWNlKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IFJlZkNv
dW50ZWRIYXJmYnV6ekZhY2UoaGFyZmJ1enpGYWNlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB+
UmVmQ291bnRlZEhhcmZidXp6RmFjZSgpOwotCi0gICAgICAgIEhCX0ZhY2VSZWNfKiBmYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9oYXJmYnV6ekZhY2U7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IFJlZkNvdW50ZWRIYXJmYnV6ekZhY2UoSEJfRmFjZVJlY18qIGhhcmZidXp6RmFjZSkgOiBtX2hh
cmZidXp6RmFjZShoYXJmYnV6ekZhY2UpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAg
IEhCX0ZhY2VSZWNfKiBtX2hhcmZidXp6RmFjZTsKLSAgICB9OwotCiAgICAgdm9pZCBxdWVyeVN5
c3RlbUZvclJlbmRlclN0eWxlKCk7CiAKICAgICAvLyBGSVhNRTogQ291bGQgU2tBdXRvVW5yZWYg
YmUgdXNlZCBoZXJlPwpAQCAtMTY5LDcgKzE0OSw3IEBAIHByaXZhdGU6CiAgICAgRm9udE9yaWVu
dGF0aW9uIG1fb3JpZW50YXRpb247CiAgICAgVGV4dE9yaWVudGF0aW9uIG1fdGV4dE9yaWVudGF0
aW9uOwogICAgIEZvbnRSZW5kZXJTdHlsZSBtX3N0eWxlOwotICAgIG11dGFibGUgUmVmUHRyPFJl
ZkNvdW50ZWRIYXJmYnV6ekZhY2U+IG1faGFyZmJ1enpGYWNlOworICAgIG11dGFibGUgUmVmUHRy
PEhhcmZidXp6RmFjZT4gbV9oYXJmYnV6ekZhY2U7CiAKICAgICBTa1R5cGVmYWNlKiBoYXNoVGFi
bGVEZWxldGVkRm9udFZhbHVlKCkgY29uc3QgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTa1R5
cGVmYWNlKj4oLTEpOyB9CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0hhcmZidXp6U2tpYS5jcHAKaW5kZXggMjdhMzA5Y2YxMDI4
NTJjNWE0Zjg3Mzg3ODU2Y2NjMTc0MWU0NzZiZS4uYjk0ZWQxYTg5ZmI3Y2RlZjdhYmNlMWI3ZmRm
OTAyODk2MTZmNDUwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vSGFyZmJ1enpTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuY3BwCkBAIC0xOTcsNiArMTk3LDE2IEBA
IEhCX0ZvbnRDbGFzcyBoYXJmYnV6elNraWFDbGFzcyA9IHsKICAgICBnZXRGb250TWV0cmljLAog
fTsKIAorSEJfRm9udF8qIGFsbG9jSGFyZmJ1enpGb250KCkKK3sKKyAgICBIQl9Gb250XyogZm9u
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8SEJfRm9udF8qPihmYXN0TWFsbG9jKHNpemVvZihIQl9Gb250
XykpKTsKKyAgICBtZW1zZXQoZm9udCwgMCwgc2l6ZW9mKEhCX0ZvbnRfKSk7CisgICAgZm9udC0+
a2xhc3MgPSAmaGFyZmJ1enpTa2lhQ2xhc3M7CisgICAgZm9udC0+dXNlckRhdGEgPSAwOworCisg
ICAgcmV0dXJuIGZvbnQ7Cit9CisKIEhCX0Vycm9yIGhhcmZidXp6U2tpYUdldFRhYmxlKHZvaWQq
IHZvaWRmYWNlLCBjb25zdCBIQl9UYWcgdGFnLCBIQl9CeXRlKiBidWZmZXIsIEhCX1VJbnQqIGxl
bikKIHsKICAgICBGb250UGxhdGZvcm1EYXRhKiBmb250ID0gcmVpbnRlcnByZXRfY2FzdDxGb250
UGxhdGZvcm1EYXRhKj4odm9pZGZhY2UpOwpAQCAtMjE2LDQgKzIyNiwxNCBAQCBIQl9FcnJvciBo
YXJmYnV6elNraWFHZXRUYWJsZSh2b2lkKiB2b2lkZmFjZSwgY29uc3QgSEJfVGFnIHRhZywgSEJf
Qnl0ZSogYnVmZmVyLAogICAgIHJldHVybiBIQl9FcnJfT2s7CiB9CiAKK0hhcmZidXp6RmFjZTo6
SGFyZmJ1enpGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSkKK3sKKyAgICBtX2hh
cmZidXp6RmFjZSA9IEhCX05ld0ZhY2UocGxhdGZvcm1EYXRhLCBoYXJmYnV6elNraWFHZXRUYWJs
ZSk7Cit9CisKK0hhcmZidXp6RmFjZTo6fkhhcmZidXp6RmFjZSgpCit7CisgICAgSEJfRnJlZUZh
Y2UobV9oYXJmYnV6ekZhY2UpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSGFyZmJ1enpT
a2lhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6
elNraWEuaAppbmRleCBmN2UwNDk2MGVlYmFkOGNhODU1MzJjZWVmNTBiYjViZWU2YmVmMWMxLi45
M2RjNzE4MjQwODUxNjdlMmU0ZjcxM2NiMTY2Nzk5OWMwMDRjYTdkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9IYXJmYnV6elNraWEu
aApAQCAtMzEsMTQgKzMxLDM3IEBACiAjaWZuZGVmIEhhcmZidXp6U2tpYV9oCiAjZGVmaW5lIEhh
cmZidXp6U2tpYV9oCiAKLWV4dGVybiAiQyIgewotI2luY2x1ZGUgImhhcmZidXp6LXNoYXBlci5o
IgotI2luY2x1ZGUgImhhcmZidXp6LXVuaWNvZGUuaCIKLX0KKyNpbmNsdWRlIDx3dGYvUmVmQ291
bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworc3RydWN0IEhCX0ZhY2VSZWNfOwor
c3RydWN0IEhCX0ZvbnRfOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgSEJfRXJyb3IgaGFy
ZmJ1enpTa2lhR2V0VGFibGUodm9pZCogdm9pZGZhY2UsIGNvbnN0IEhCX1RhZywgSEJfQnl0ZSog
YnVmZmVyLCBIQl9VSW50KiBsZW4pOwotICAgIGV4dGVybiBjb25zdCBIQl9Gb250Q2xhc3MgaGFy
ZmJ1enpTa2lhQ2xhc3M7CisKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGE7CisKK2NsYXNzIEhhcmZi
dXp6RmFjZSA6IHB1YmxpYyBSZWZDb3VudGVkPEhhcmZidXp6RmFjZT4geworcHVibGljOgorICAg
IHN0YXRpYyBQYXNzUmVmUHRyPEhhcmZidXp6RmFjZT4gY3JlYXRlKEZvbnRQbGF0Zm9ybURhdGEq
IHBsYXRmb3JtRGF0YSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgSGFyZmJ1
enpGYWNlKHBsYXRmb3JtRGF0YSkpOworICAgIH0KKworICAgIH5IYXJmYnV6ekZhY2UoKTsKKwor
ICAgIEhCX0ZhY2VSZWNfKiBmYWNlKCkgY29uc3QgeyByZXR1cm4gbV9oYXJmYnV6ekZhY2U7IH0K
KworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBIYXJmYnV6ekZhY2UoRm9udFBsYXRmb3JtRGF0YSop
OworCisgICAgSEJfRmFjZVJlY18qIG1faGFyZmJ1enpGYWNlOworfTsKKworLy8gRklYTUU6IFJl
bW92ZSB0aGlzIGFzeW1tZXRyaWMgYWxsb2MvZnJlZSBmdW5jdGlvbi4KKy8vIFdlJ2xsIHJlbW92
ZSB0aGlzIG9uY2Ugd2UgbW92ZSB0byB0aGUgbmV3IEhhcmZidXp6IEFQSS4KK0hCX0ZvbnRfKiBh
bGxvY0hhcmZidXp6Rm9udCgpOworCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvR2x5cGhQ
YWdlVHJlZU5vZGVTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvR2x5cGhQYWdlVHJlZU5vZGVTa2lhLmNwcAppbmRleCBmMzYyZmEzYzFiZWQ2NmE3MGE5YTEx
NTcwODczNDM4ZmVlYzNlN2Q0Li40MDYxZjc0ZGIxNDY1MzQ1YzEwODhhZTZhZWUwY2NhNzJmNjkw
MmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ds
eXBoUGFnZVRyZWVOb2RlU2tpYS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9HbHlwaFBhZ2VUcmVlTm9kZVNraWEuY3BwCkBAIC0zOSwxMSArMzksMTUgQEAK
ICNpbmNsdWRlICJTa1BhaW50LmgiCiAjaW5jbHVkZSAiU2tVdGlscy5oIgogCitleHRlcm4gIkMi
IHsKKyNpbmNsdWRlICJoYXJmYnV6ei1zaGFwZXIuaCIKK30KKwogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBzdGF0aWMgaW50IHN1YnN0aXR1dGVXaXRoVmVydGljYWxHbHlwaHMoY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhLCB1aW50MTZfdCogZ2x5cGhzLCB1bnNpZ25lZCBidWZmZXJMZW5n
dGgpCiB7Ci0gICAgSEJfRmFjZVJlY18qIGhiRmFjZSA9IGZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5oYXJmYnV6ekZhY2UoKTsKKyAgICBIQl9GYWNlUmVjXyogaGJGYWNlID0gZm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpLmhhcmZidXp6RmFjZSgpLT5mYWNlKCk7CiAgICAgaWYgKCFoYkZhY2UtPmdz
dWIpIHsKICAgICAgICAgLy8gaWYgdGhlcmUgaXMgbm8gR1NVQiB0YWJsZSwgdHJlYXQgaXQgYXMg
bm90IGNvdmVyZWQKICAgICAgICAgcmV0dXJuIDBYZmZmZjsK
</data>
<flag name="review"
          id="93139"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>