<?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>91940</bug_id>
          
          <creation_ts>2012-07-22 07:18:41 -0700</creation_ts>
          <short_desc>[GTK] Add GraphicsLayerActor</short_desc>
          <delta_ts>2012-12-23 17:19:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>73767</blocked>
    
    <blocked>105699</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joone Hur">joone</reporter>
          <assigned_to name="Joone Hur">joone</assigned_to>
          <cc>abarth</cc>
    
    <cc>alex</cc>
    
    <cc>dpranke</cc>
    
    <cc>gustavo</cc>
    
    <cc>levin</cc>
    
    <cc>mrobinson</cc>
    
    <cc>ojan</cc>
    
    <cc>rodrigo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>675304</commentid>
    <comment_count>0</comment_count>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-07-22 07:18:41 -0700</bug_when>
    <thetext>GraphicsLayerActor is a ClutterActor, which is owned by GraphicsLayer.
It will be used to render composited layers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675722</commentid>
    <comment_count>1</comment_count>
      <attachid>153803</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-07-23 08:20:06 -0700</bug_when>
    <thetext>Created attachment 153803
Proposed Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675723</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-23 08:22:39 -0700</bug_when>
    <thetext>Attachment 153803 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.h:70:  parent_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.h:80:  graphics_layer_actor_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:85:  graphics_layer_actor_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:120:  graphics_layer_actor_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675747</commentid>
    <comment_count>3</comment_count>
      <attachid>153808</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-07-23 09:04:07 -0700</bug_when>
    <thetext>Created attachment 153808
Proposed Patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>675751</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-07-23 09:08:11 -0700</bug_when>
    <thetext>Attachment 153808 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.h:71:  parent_class is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.h:81:  graphics_layer_actor_get_type is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:86:  graphics_layer_actor_class_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:121:  graphics_layer_actor_init is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming/underscores] [4]
Total errors found: 4 in 4 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>688160</commentid>
    <comment_count>5</comment_count>
      <attachid>156700</attachid>
    <who name="Rodrigo Moya">rodrigo</who>
    <bug_when>2012-08-06 08:42:41 -0700</bug_when>
    <thetext>Created attachment 156700
Patch that adds GraphicsLayerActor and uses it in GraphicsLayerClutter

Joone,

I have been recently assigned to work on thus, and just learnt about this bug, so here&apos;s the patch for adding GraphicsLayerActor that I have prepared. I just had a review from Gustavo, so there are a couple things I need to fix, but I thought it&apos;d be better to let you know about it ASAP, so that we can coordinate this work.

This patch has GraphicsLayerActor with the animation bits removed, the basic stuff in GraphicsLayerClutter to use the GraphicsLayerActor instead of ClutterRectangle, and PlatformClutterLayerClient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>727628</commentid>
    <comment_count>6</comment_count>
      <attachid>165610</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-09-25 07:23:28 -0700</bug_when>
    <thetext>Created attachment 165610
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733637</commentid>
    <comment_count>7</comment_count>
      <attachid>165610</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-10-03 06:33:19 -0700</bug_when>
    <thetext>Comment on attachment 165610
Patch

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

Quick pass on the code, bunch of nits.

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:41
&gt; +    // Guard against changing size while allocating.

Think this comment is not necessary.

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:54
&gt; +    gfloat anchorX;
&gt; +    gfloat anchorY;
&gt; +    gfloat anchorZ;

We usually try to use regular types where a glib-specific type is not required.

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:90
&gt; +    GParamSpec* pspec;

Should be declared along with the first time a GParamSpec is created, bellow.

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:136
&gt; +    priv-&gt;scrollX = 0.0;
&gt; +    priv-&gt;scrollY = 0.0;
&gt; +
&gt; +    priv-&gt;translateX = 0.0;
&gt; +    priv-&gt;translateY = 0.0;
&gt; +
&gt; +    priv-&gt;matrix = 0;

Think we don&apos;t need to zero members.

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:261
&gt; +    gfloat translateX = priv-&gt;scrollX + priv-&gt;translateX;
&gt; +    gfloat translateY = priv-&gt;scrollY + priv-&gt;translateY;

Ditto about the types.

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:307
&gt; +static void graphicsLayerActorPick(ClutterActor* actor, const ClutterColor* pick)

What I did recently on webkit-clutter, though I believe not in GraphicsLayerActor was to just call the paint function for picking, since what we want is really to have them be the same.

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:473
&gt; +    if (!priv-&gt;surface)
&gt; +        g_message(&quot;surface is null&quot;);

Remove this, turn into an ASSERT or LOG?

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.h:78
&gt; +
&gt; +    /* padding for future expansion */
&gt; +    void (*_padding_0)(void);
&gt; +    void (*_padding_1)(void);
&gt; +    void (*_padding_2)(void);
&gt; +    void (*_padding_3)(void);
&gt; +    void (*_padding_4)(void);

Padding is not really needed given we&apos;re using GrahicsLayerActor as a private object, it can change ABI for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736339</commentid>
    <comment_count>8</comment_count>
      <attachid>165610</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-10-07 00:33:37 -0700</bug_when>
    <thetext>Comment on attachment 165610
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:41
&gt;&gt; +    // Guard against changing size while allocating.
&gt; 
&gt; Think this comment is not necessary.

Done.

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:54
&gt;&gt; +    gfloat anchorZ;
&gt; 
&gt; We usually try to use regular types where a glib-specific type is not required.

Done.

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:90
&gt;&gt; +    GParamSpec* pspec;
&gt; 
&gt; Should be declared along with the first time a GParamSpec is created, bellow.

Done.

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:136
&gt;&gt; +    priv-&gt;matrix = 0;
&gt; 
&gt; Think we don&apos;t need to zero members.

Done.

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:261
&gt;&gt; +    gfloat translateY = priv-&gt;scrollY + priv-&gt;translateY;
&gt; 
&gt; Ditto about the types.

Done.

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:307
&gt;&gt; +static void graphicsLayerActorPick(ClutterActor* actor, const ClutterColor* pick)
&gt; 
&gt; What I did recently on webkit-clutter, though I believe not in GraphicsLayerActor was to just call the paint function for picking, since what we want is really to have them be the same.

I think we don&apos;t need to handle the pick signal in GraphicsLayerActor so I will remove this callback function.

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:473
&gt;&gt; +        g_message(&quot;surface is null&quot;);
&gt; 
&gt; Remove this, turn into an ASSERT or LOG?

ASSERT would be good.

&gt;&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.h:78
&gt;&gt; +    void (*_padding_4)(void);
&gt; 
&gt; Padding is not really needed given we&apos;re using GrahicsLayerActor as a private object, it can change ABI for now.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736340</commentid>
    <comment_count>9</comment_count>
      <attachid>167473</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-10-07 00:39:24 -0700</bug_when>
    <thetext>Created attachment 167473
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>736341</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-07 00:42:44 -0700</bug_when>
    <thetext>Attachment 167473 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:100:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:101:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:102:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:109:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:110:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:111:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:177:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:224:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:226:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:227:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:229:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:230:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:231:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:232:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:233:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:235:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:291:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:292:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:363:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:364:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:365:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:366:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 22 in 7 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788373</commentid>
    <comment_count>11</comment_count>
      <attachid>178788</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-12-11 06:03:20 -0800</bug_when>
    <thetext>Created attachment 178788
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788391</commentid>
    <comment_count>12</comment_count>
      <attachid>178788</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-12-11 06:27:37 -0800</bug_when>
    <thetext>Comment on attachment 178788
Patch

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

LGTM

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:203
&gt; +        // FIXME: some pages make us create very big layers, which
&gt; +        // exceeds cairo&apos;s limits, check for that here.
&gt; +        if (textureBox.x2 &gt; MAX_IMAGE_SIZE) {
&gt; +            g_warning(&quot;Layer %s has a width that exceeds cairo&apos;s limits: %.2f&quot;, clutter_actor_get_name(self), textureBox.x2);
&gt; +            textureBox.x2 = MAX_IMAGE_SIZE;
&gt; +        }
&gt; +
&gt; +        if (textureBox.y2 &gt; MAX_IMAGE_SIZE) {
&gt; +            g_warning(&quot;Layer %s has a height that exceeds cairo&apos;s limits: %.2f&quot;, clutter_actor_get_name(self), textureBox.y2);
&gt; +            textureBox.y2 = MAX_IMAGE_SIZE;
&gt; +        }

This workaround was added by me, but I believe this was only being the case because of a bug that was fixed afterwards, since I never saw this warning again. I&apos;d suggest removing it and we can readd this workaround if needed (though I believe it won&apos;t be).

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:349
&gt; +    priv-&gt;texture = clutter_cairo_texture_new(width &gt; 0 ? width : 1, height &gt; 0 ? height : 1);

We should port this to use the new Clutter content/canvas API.

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:357
&gt; +static void graphicsLayerActorDrawLayerContents(ClutterActor* actor, GraphicsContext&amp; context)

This is called drawLayerContents in WebKit Clutter, since it&apos;s not an exported function I don&apos;t see a reason to have the prefix, better keep it named the same as in the original, so it&apos;s easier to move forward.

&gt; Source/WebCore/platform/graphics/clutter/GraphicsLayerActor.cpp:409
&gt; +/* 
&gt; + * public API
&gt; + */

It&apos;s not really public in the usual sense, so I&apos;d remove this comment. Also, there are some exported symbols, such as New, that are not bellow this comment, so it&apos;s misleading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788453</commentid>
    <comment_count>13</comment_count>
      <attachid>178806</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-12-11 07:57:32 -0800</bug_when>
    <thetext>Created attachment 178806
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788454</commentid>
    <comment_count>14</comment_count>
      <attachid>178806</attachid>
    <who name="Joone Hur">joone</who>
    <bug_when>2012-12-11 08:01:22 -0800</bug_when>
    <thetext>Comment on attachment 178806
Patch

I got r+ with the previous patch from kov</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788464</commentid>
    <comment_count>15</comment_count>
      <attachid>178806</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-11 08:21:11 -0800</bug_when>
    <thetext>Comment on attachment 178806
Patch

Clearing flags on attachment: 178806

Committed r137319: &lt;http://trac.webkit.org/changeset/137319&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>788465</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-12-11 08:21:16 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153803</attachid>
            <date>2012-07-23 08:20:06 -0700</date>
            <delta_ts>2012-07-23 09:04:07 -0700</delta_ts>
            <desc>Proposed Patch</desc>
            <filename>GraphicsLayerActor.patch</filename>
            <type>text/plain</type>
            <size>31654</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiMTRmNjAwLi5iZWJmOWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEg
QEAKKzIwMTItMDctMjIgIEpvb25lIEh1ciAgPGpvb25lLmh1ckBpbnRlbC5jb20+CisKKyAgICAg
ICAgW0dUS10gQWRkIEdyYXBoaWNzTGF5ZXJBY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBDbHV0dGVyIGlzIG9uZSBvZiBBY2NlbGVyYXRpb24gQmFj
a2VuZCBvZiBXZWJLaXRHdGsrLiBXaGVuIGVuYWJsaW5nIHRoZSBDbHV0dGVyIGJhY2tlbmQsCisg
ICAgICAgIEdyYXBoaWNzTGF5ZXJBY3RvciByZXByZXNlbnRzIGEgY29tcG9zaXRpbmcgbGF5ZXIs
IHdoaWNoIGlzIGEgbmV3IENsdXR0ZXJBY3Rvci4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRo
aXMgd2lsbCBiZSBjb3ZlcmVkIGJ5IHBpeGVsIHRlc3RzIGZvciBRdCBhbmQgR1RLKyBhY2NlbGVy
YXRlZAorICAgICAgICBjb21wb3NpdGluZyBhbmQgM0QgdHJhbnNmb3Jtcy4KKworICAgICAgICAq
IEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRl
ci9HcmFwaGljc0xheWVyQWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9HcmFwaGljc0xheWVy
QWN0b3JQcml2YXRlKToKKyAgICAgICAgKGdyYXBoaWNzX2xheWVyX2FjdG9yX2NsYXNzX2luaXQp
OiBHT2JqZWN0IGNvbmZpZ3VyYXRpb24gb2YgYSBuZXcgQ2x1dHRlciBBY3Rvci4KKyAgICAgICAg
KGdyYXBoaWNzX2xheWVyX2FjdG9yX2luaXQpOiBJbml0aWFsaXphdGlvbiBvZiB0aGUgcHJpdmF0
ZSBkYXRhIG9mIHRoaXMgYWN0b3IuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXRQcm9w
ZXJ0eSk6IEdPYmplY3QgcHJvcGVydHkgc2V0dGVyLgorICAgICAgICAoZ3JhcGhpY3NMYXllckFj
dG9yR2V0UHJvcGVydHkpOiBHT2JqZWN0IHByb3BlcnR5IGdldHRlci4KKyAgICAgICAgKGdyYXBo
aWNzTGF5ZXJBY3RvckRpc3Bvc2UpOiBDYWxsZWQgdG8gZHJvcCBhbGwgcmVmZXJlbmNlcyB0byBv
dGhlciBvYmplY3RzLgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yQWxsb2NhdGUpOiAgQ2Fs
bGVkIHRvIHNldCB0aGUgY29vcmRpbmF0ZXMgb2YgYW4gYWN0b3IuCisgICAgICAgIChncmFwaGlj
c0xheWVyQWN0b3JBcHBseVRyYW5zZm9ybSk6IEFwcGx5aW5nIHRoZSB0cmFuc2Zvcm1hdGlvbiB0
byBhbiBhY3RvciBiZWZvcmUgcGFpbnRpbmcgaXQuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0
b3JQYWludCk6IENhbGxlZCB0byBwYWludCB0aGUgYWN0b3IuCisgICAgICAgIChncmFwaGljc0xh
eWVyQWN0b3JQaWNrKTogQ2FsbGVkIHRvIGRyYXcgYW4gb3V0bGluZSBvZiB0aGUgYWN0b3Igd2l0
aCB0aGUgZ2l2ZW4gY29sb3IuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JEcmF3KTogQ2Fs
bGVkIGVhY2ggdGltZSBhIENsdXR0ZXJDYWlyb1RleHR1cmUgaGFzIGJlZW4gaW52YWxpZGF0ZWQu
CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JBZGRlZCk6IENhbGxlZCBlYWNoIHRpbWUgYW4g
YWN0b3IgaGFzIGJlZW4gYWRkZWQgdG8gY29udGFpbmVyLgorICAgICAgICAoZ3JhcGhpY3NMYXll
ckFjdG9yUmVtb3ZlZCk6IENhbGxlZCBlYWNoIHRpbWUgYW4gYWN0b3IgaXMgcmVtb3ZlZCBmcm9t
IGNvbnRhaW5lci4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3Rvck5ldyk6IENyZWF0ZSBhIHNw
ZWNpZmljIGxheWVyIHR5cGUgb2YgR3JhcGhpY3NMYXllckFjdG9yIG9iamVjdC4KKyAgICAgICAg
KGdyYXBoaWNzTGF5ZXJBY3Rvck5ld1dpdGhDbGllbnQpOiBDcmVhdGUgYSBzcGVjaWZpYyBsYXll
ciB0eXBlIG9mIEdyYXBoaWNzTGF5ZXJBY3RvciBvYmplY3Qgd2l0aCAKKyAgICAgICAgaXRzIFBs
YXRmb3JtQ2x1dHRlckNsaWVudExheWVyLgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yU2V0
Q2xpZW50KTogQWRkZWQgc2V0dGVyIHRvIHNldCB0aGUgUGxhdGZvcm1DbHV0dGVyQ2xpZW50TGF5
ZXIuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRDbGllbnQpOiBBZGRlZCBnZXR0ZXIg
dG8gZ2V0IHRoZSBQbGF0Zm9ybUNsdXR0ZXJDbGllbnRMYXllci4KKyAgICAgICAgKGdyYXBoaWNz
TGF5ZXJBY3RvclJlbW92ZUFsbCk6IFJlbW92ZSBhbGwgY2hpbGQgYWN0b3JzLgorICAgICAgICAo
Z3JhcGhpY3NMYXllclVwZGF0ZVRleHR1cmUpOiBDcmVhdGUgYSBDbHV0dGVyQ2Fpcm9UZXh0dXJl
LgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yR2V0U3VyZmFjZSk6IEFkZGVkIHNldHRlciB0
byBzZXQgYSBjYWlyb19zdXJmYWNlX3QuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXRT
dXJmYWNlKTogQWRkZWQgZ2V0dGVyIHRvIGdldCB0aGUgY2Fpcm9fc3VyZmFjZV90LgorICAgICAg
ICAoZ3JhcGhpY3NMYXllckFjdG9ySW52YWxpZGF0ZVJlY3RhbmdsZSk6CisgICAgICAgIChncmFw
aGljc0xheWVyQWN0b3JTZXRUcmFuc2Zvcm0pOiBTZXQgYSBDb2dsTWF0cml4IHRvIGFwcGx5IG1h
dHJpeCB0cmFuc2Zvcm0uCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXRBbmNob3JQb2lu
dCk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRBbmNob3JQb2ludCk6CisgICAgICAg
IChncmFwaGljc0xheWVyQWN0b3JTZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChncmFwaGlj
c0xheWVyQWN0b3JHZXRuQ2hpbGRyZW4pOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yUmVw
bGFjZVN1YmxheWVyKToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3Rvckluc2VydFN1YmxheWVy
KToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1YmxheWVycyk6CisgICAgICAgIChn
cmFwaGljc0xheWVyQWN0b3JHZXRMYXllclR5cGUpOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFj
dG9yU2V0TGF5ZXJUeXBlKToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zbGF0
ZVgpOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWCk6CisgICAgICAg
IChncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xhdGVZKToKKyAgICAgICAgKGdyYXBoaWNzTGF5
ZXJBY3RvckdldFRyYW5zbGF0ZVkpOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yU2V0RHJh
d3NDb250ZW50KTogQWRkZWQgc2V0dGVyIHRvIHBhaW50IGNvbnRlbnQgaW5zaWRlIGEgbGF5ZXIu
CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXREcmF3c0NvbnRlbnQpOiBBZGRlZCBnZXR0
ZXIgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgZHJhd3NDb250ZW50LiAKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oOiBBZGRlZC4KKyAgICAg
ICAgKF9HcmFwaGljc0xheWVyQWN0b3IpOgorICAgICAgICAoX0dyYXBoaWNzTGF5ZXJBY3RvckNs
YXNzKToKKwogMjAxMi0wNy0yMiAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgW1Y4XSBDb2RlR2VuZXJhdG9yVjgucG0gc2hvdWxkIHN1cHBvcnQgc3RhdGlj
IGF0dHJpYnV0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDNlYjk0MzkuLmE2
MGUxMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysr
IGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjE3MCw2ICs2MTcwLDgg
QEAgaWYgVVNFX0NMVVRURVIKIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2x1dHRlci9HUmVmUHRyQ2x1dHRlci5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NsdXR0ZXIvR1JlZlB0ckNsdXR0ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwIFwKKwlTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0
dGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFw
aGljc0xheWVyQ2x1dHRlci5oCiBlbmRpZiAgIyBFTkQgVVNFX0NMVVRURVIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFj
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhp
Y3NMYXllckFjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yzhi
M2YwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwCkBAIC0wLDAgKzEsNjU5IEBACisvKgorICog
Q29weXJpZ2h0IDIwMTEgQ29sbGFib3JhIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAor
ICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKKyAqIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDUxIEZyYW5r
bGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBY3Rvci5oIgorCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsdXR0ZXIuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4
dENhaXJvLmgiCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKKyNpbmNsdWRlIDxnbGliL2dwcmlu
dGYuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0dfREVGSU5FX1RZUEUoR3JhcGhp
Y3NMYXllckFjdG9yLCBncmFwaGljc19sYXllcl9hY3RvciwgQ0xVVFRFUl9UWVBFX1JFQ1RBTkdM
RSkKKworI2RlZmluZSBHUkFQSElDU19MQVlFUl9BQ1RPUl9HRVRfUFJJVkFURShvYmopIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIEdSQVBISUNTX0xBWUVSX1RZUEVfQUNUT1Is
IEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUpKQorCitzdHJ1Y3QgX0dyYXBoaWNzTGF5ZXJBY3Rv
clByaXZhdGUgeworICAgIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUgbGF5ZXJUeXBl
OworICAgIC8vIEd1YXJkIGFnYWluc3QgY2hhbmdpbmcgc2l6ZSB3aGlsZSBhbGxvY2F0aW5nLgor
ICAgIGdib29sZWFuIGFsbG9jYXRpbmc7CisKKyAgICBDbHV0dGVyQWN0b3IqIHRleHR1cmU7Cisg
ICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZTsKKyAgICBDb2dsTWF0cml4KiBtYXRy
aXg7CisKKyAgICBQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCogbGF5ZXJDbGllbnQ7CisKKyAg
ICBnYm9vbGVhbiBkcmF3c0NvbnRlbnQ7CisKKyAgICBnZmxvYXQgYW5jaG9yWDsKKyAgICBnZmxv
YXQgYW5jaG9yWTsKKyAgICBnZmxvYXQgYW5jaG9yWjsKKworICAgIGdmbG9hdCBzY3JvbGxYOwor
ICAgIGdmbG9hdCBzY3JvbGxZOworCisgICAgZmxvYXQgdHJhbnNsYXRlWDsKKyAgICBmbG9hdCB0
cmFuc2xhdGVZOworfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9UUkFOU0xB
VEVfWCwKKyAgICBQUk9QX1RSQU5TTEFURV9ZLAorCisgICAgUFJPUF9MQVNUCit9OworCitzdGF0
aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JBbGxvY2F0ZShDbHV0dGVyQWN0b3IqLCBjb25zdCBD
bHV0dGVyQWN0b3JCb3gqLCBDbHV0dGVyQWxsb2NhdGlvbkZsYWdzKTsKK3N0YXRpYyB2b2lkIGdy
YXBoaWNzTGF5ZXJBY3RvckFwcGx5VHJhbnNmb3JtKENsdXR0ZXJBY3RvciosIENvZ2xNYXRyaXgq
KTsKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckRpc3Bvc2UoR09iamVjdCopOworc3Rh
dGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yR2V0UHJvcGVydHkoR09iamVjdCosIGd1aW50IHBy
b3BJRCwgR1ZhbHVlKiwgR1BhcmFtU3BlYyopOworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFj
dG9yU2V0UHJvcGVydHkoR09iamVjdCosIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiwgR1Bh
cmFtU3BlYyopOworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yUGFpbnQoQ2x1dHRlckFj
dG9yKik7CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JQaWNrKENsdXR0ZXJBY3Rvcios
IGNvbnN0IENsdXR0ZXJDb2xvciopOworCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JB
ZGRlZChDbHV0dGVyQ29udGFpbmVyKiwgQ2x1dHRlckFjdG9yKiwgZ3BvaW50ZXIgZGF0YSk7Citz
dGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JSZW1vdmVkKENsdXR0ZXJDb250YWluZXIqLCBD
bHV0dGVyQWN0b3IqLCBncG9pbnRlciBkYXRhKTsKK3N0YXRpYyBnYm9vbGVhbiBncmFwaGljc0xh
eWVyQWN0b3JEcmF3KENsdXR0ZXJDYWlyb1RleHR1cmUqLCBjYWlyb190KiwgR3JhcGhpY3NMYXll
ckFjdG9yKik7CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JVcGRhdGVUZXh0dXJlKEdy
YXBoaWNzTGF5ZXJBY3RvciopOworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yRHJhd0xh
eWVyQ29udGVudHMoQ2x1dHRlckFjdG9yKiwgR3JhcGhpY3NDb250ZXh0Jik7CisKK3N0YXRpYyB2
b2lkIGdyYXBoaWNzX2xheWVyX2FjdG9yX2NsYXNzX2luaXQoR3JhcGhpY3NMYXllckFjdG9yQ2xh
c3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9D
TEFTUyhrbGFzcyk7CisgICAgQ2x1dHRlckFjdG9yQ2xhc3MqIGFjdG9yQ2xhc3MgPSBDTFVUVEVS
X0FDVE9SX0NMQVNTKGtsYXNzKTsKKyAgICBHUGFyYW1TcGVjKiBwc3BlYzsKKworICAgIG9iamVj
dENsYXNzLT5nZXRfcHJvcGVydHkgPSBncmFwaGljc0xheWVyQWN0b3JHZXRQcm9wZXJ0eTsKKyAg
ICBvYmplY3RDbGFzcy0+c2V0X3Byb3BlcnR5ID0gZ3JhcGhpY3NMYXllckFjdG9yU2V0UHJvcGVy
dHk7CisgICAgb2JqZWN0Q2xhc3MtPmRpc3Bvc2UgPSBncmFwaGljc0xheWVyQWN0b3JEaXNwb3Nl
OworICAgIGFjdG9yQ2xhc3MtPmFwcGx5X3RyYW5zZm9ybSA9IGdyYXBoaWNzTGF5ZXJBY3RvckFw
cGx5VHJhbnNmb3JtOworICAgIGFjdG9yQ2xhc3MtPmFsbG9jYXRlID0gZ3JhcGhpY3NMYXllckFj
dG9yQWxsb2NhdGU7CisgICAgYWN0b3JDbGFzcy0+cGFpbnQgPSBncmFwaGljc0xheWVyQWN0b3JQ
YWludDsKKyAgICBhY3RvckNsYXNzLT5waWNrID0gZ3JhcGhpY3NMYXllckFjdG9yUGljazsKKwor
ICAgIGdfdHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKEdyYXBoaWNzTGF5ZXJB
Y3RvclByaXZhdGUpKTsKKworICAgIHBzcGVjID0gZ19wYXJhbV9zcGVjX2Zsb2F0KCJ0cmFuc2xh
dGUteCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYW5zbGF0ZSBYIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJhbnNsYXRpb24gdmFsdWUgZm9yIHRoZSBY
IGF4aXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtR19NQVhGTE9BVCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQUk9QX1RSQU5TTEFURV9Y
LCBwc3BlYyk7CisKKyAgICBwc3BlYyA9IGdfcGFyYW1fc3BlY19mbG9hdCgidHJhbnNsYXRlLXki
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcmFuc2xhdGUgWSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlRyYW5zbGF0aW9uIHZhbHVlIGZvciB0aGUgWSBheWlz
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtR19NQVhGTE9BVCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFz
c19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQUk9QX1RSQU5TTEFURV9ZLCBwc3BlYyk7
Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzX2xheWVyX2FjdG9yX2luaXQoR3JhcGhpY3NMYXll
ckFjdG9yKiBzZWxmKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBz
ZWxmLT5wcml2ID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1JfR0VUX1BSSVZBVEUoc2VsZik7CisKKyAg
ICBjbHV0dGVyX2FjdG9yX3NldF9yZWFjdGl2ZShDTFVUVEVSX0FDVE9SKHNlbGYpLCBGQUxTRSk7
CisKKyAgICAvLyBEZWZhdWx0IHVzZWQgYnkgR3JhcGhpY3NMYXllci4KKyAgICBncmFwaGljc0xh
eWVyQWN0b3JTZXRBbmNob3JQb2ludChzZWxmLCAwLjUsIDAuNSwgMC4wKTsKKworICAgIHByaXYt
PnNjcm9sbFggPSAwLjA7CisgICAgcHJpdi0+c2Nyb2xsWSA9IDAuMDsKKworICAgIHByaXYtPnRy
YW5zbGF0ZVggPSAwLjA7CisgICAgcHJpdi0+dHJhbnNsYXRlWSA9IDAuMDsKKworICAgIHByaXYt
Pm1hdHJpeCA9IDA7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHNlbGYsICJhY3Rvci1hZGRlZCIs
IEdfQ0FMTEJBQ0soZ3JhcGhpY3NMYXllckFjdG9yQWRkZWQpLCAwKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KHNlbGYsICJhY3Rvci1yZW1vdmVkIiwgR19DQUxMQkFDSyhncmFwaGljc0xheWVyQWN0
b3JSZW1vdmVkKSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFBy
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBjb25zdCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0g
R1JBUEhJQ1NfTEFZRVJfQUNUT1Iob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElEKSB7Cisg
ICAgY2FzZSBQUk9QX1RSQU5TTEFURV9YOgorICAgICAgICBncmFwaGljc0xheWVyQWN0b3JTZXRU
cmFuc2xhdGVYKGxheWVyLCBnX3ZhbHVlX2dldF9mbG9hdCh2YWx1ZSkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFBST1BfVFJBTlNMQVRFX1k6CisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3Rv
clNldFRyYW5zbGF0ZVkobGF5ZXIsIGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9Q
RVJUWV9JRChvYmplY3QsIHByb3BJRCwgcHNwZWMpOworICAgIH0KK30KKworc3RhdGljIHZvaWQg
Z3JhcGhpY3NMYXllckFjdG9yR2V0UHJvcGVydHkoR09iamVjdCogb2JqZWN0LCBndWludCBwcm9w
SUQsIEdWYWx1ZSogdmFsdWUsIEdQYXJhbVNwZWMqIHBzcGVjKQoreworICAgIEdyYXBoaWNzTGF5
ZXJBY3RvciogbGF5ZXIgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihvYmplY3QpOworCisgICAgc3dp
dGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfVFJBTlNMQVRFX1g6CisgICAgICAgIGdfdmFs
dWVfc2V0X2Zsb2F0KHZhbHVlLCBncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVYKGxheWVy
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UUkFOU0xBVEVfWToKKyAgICAgICAg
Z192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIGdyYXBoaWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVko
bGF5ZXIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1Rf
V0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBwc3BlYyk7CisgICAgfQor
fQorCisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckRpc3Bvc2UoR09iamVjdCogb2Jq
ZWN0KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIgPSBHUkFQSElDU19MQVlFUl9B
Q1RPUihvYmplY3QpOworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXll
ci0+cHJpdjsKKworICAgIGlmIChwcml2LT50ZXh0dXJlKSB7CisgICAgICAgIGNsdXR0ZXJfYWN0
b3JfZGVzdHJveShwcml2LT50ZXh0dXJlKTsKKyAgICAgICAgcHJpdi0+dGV4dHVyZSA9IDA7Cisg
ICAgfQorCisgICAgcHJpdi0+c3VyZmFjZS5jbGVhcigpOworCisgICAgaWYgKHByaXYtPm1hdHJp
eCkKKyAgICAgICBjb2dsX21hdHJpeF9mcmVlKHByaXYtPm1hdHJpeCk7CisKKyAgICBHX09CSkVD
VF9DTEFTUyhncmFwaGljc19sYXllcl9hY3Rvcl9wYXJlbnRfY2xhc3MpLT5kaXNwb3NlKG9iamVj
dCk7Cit9CisKKy8vIENvcGllZCBmcm9tIGNhaXJvLgorI2RlZmluZSBNQVhfSU1BR0VfU0laRSAz
Mjc2NworCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JBbGxvY2F0ZShDbHV0dGVyQWN0
b3IqIHNlbGYsIGNvbnN0IENsdXR0ZXJBY3RvckJveCogYm94LCBDbHV0dGVyQWxsb2NhdGlvbkZs
YWdzIGZsYWdzKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIgPSBHUkFQSElDU19M
QVlFUl9BQ1RPUihzZWxmKTsKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0g
bGF5ZXItPnByaXY7CisKKyAgICBwcml2LT5hbGxvY2F0aW5nID0gVFJVRTsKKworICAgIENMVVRU
RVJfQUNUT1JfQ0xBU1MoZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfcGFyZW50X2NsYXNzKS0+YWxsb2Nh
dGUoc2VsZiwgYm94LCBmbGFncyk7CisKKyAgICBpZiAocHJpdi0+dGV4dHVyZSkgeworICAgICAg
ICAvLyBUaGUgdGV4dHVyZSBvY2N1cGllcyB0aGUgd2hvbGUgYXJlYSwgYnV0IGlzIHBvc2l0aW9u
ZWQgYXQgMCwwCisgICAgICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBsYXllciBhY3Rvci4KKyAgICAg
ICAgQ2x1dHRlckFjdG9yQm94IHRleHR1cmVCb3ggPSB7IDAuMCwgMC4wLCBib3gtPngyIC0gYm94
LT54MSwgYm94LT55MiAtIGJveC0+eTEgfTsKKworICAgICAgICAvLyBwcm90ZWN0IGFnYWluc3Qg
MHgwCisgICAgICAgIGlmICghdGV4dHVyZUJveC54MikKKyAgICAgICAgICAgIHRleHR1cmVCb3gu
eDIgPSAxOworCisgICAgICAgIGlmICghdGV4dHVyZUJveC55MikKKyAgICAgICAgICAgIHRleHR1
cmVCb3gueTIgPSAxOworCisgICAgICAgIC8vIEZJWE1FOiBzb21lIHBhZ2VzIG1ha2UgdXMgY3Jl
YXRlIHZlcnkgYmlnIGxheWVycywgd2hpY2gKKyAgICAgICAgLy8gZXhjZWVkcyBjYWlybydzIGxp
bWl0cywgY2hlY2sgZm9yIHRoYXQgaGVyZS4KKyAgICAgICAgaWYgKHRleHR1cmVCb3gueDIgPiBN
QVhfSU1BR0VfU0laRSkgeworICAgICAgICAgICAgZ193YXJuaW5nKCJMYXllciAlcyBoYXMgYSB3
aWR0aCB0aGF0IGV4Y2VlZHMgY2Fpcm8ncyBsaW1pdHM6ICUuMmYiLCBjbHV0dGVyX2FjdG9yX2dl
dF9uYW1lKHNlbGYpLCB0ZXh0dXJlQm94LngyKTsKKyAgICAgICAgICAgIHRleHR1cmVCb3gueDIg
PSBNQVhfSU1BR0VfU0laRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZXh0dXJlQm94Lnky
ID4gTUFYX0lNQUdFX1NJWkUpIHsKKyAgICAgICAgICAgIGdfd2FybmluZygiTGF5ZXIgJXMgaGFz
IGEgaGVpZ2h0IHRoYXQgZXhjZWVkcyBjYWlybydzIGxpbWl0czogJS4yZiIsIGNsdXR0ZXJfYWN0
b3JfZ2V0X25hbWUoc2VsZiksIHRleHR1cmVCb3gueTIpOworICAgICAgICAgICAgdGV4dHVyZUJv
eC55MiA9IE1BWF9JTUFHRV9TSVpFOworICAgICAgICB9CisKKyAgICAgICAgY2x1dHRlcl9hY3Rv
cl9hbGxvY2F0ZShwcml2LT50ZXh0dXJlLCAmdGV4dHVyZUJveCwgZmxhZ3MpOworICAgIH0KKwor
ICAgIC8vIEZJWE1FOiBtYXliZSB3ZSBjYW4gY2FjaGUgY2hpbGRyZW4gYWxsb2NhdGlvbiBhbmQg
bm90IGNhbGwKKyAgICAvLyBhbGxvY2F0ZSBvbiB0aGVtIHRoaXMgb2Z0ZW4/CisgICAgZm9yIChH
TGlzdCogbGlzdCA9IGxheWVyLT5jaGlsZHJlbjsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsK
KyAgICAgICAgIENsdXR0ZXJBY3RvciogY2hpbGQgPSBDTFVUVEVSX0FDVE9SKGxpc3QtPmRhdGEp
OworCisgICAgICAgICBmbG9hdCBjaGlsZFdpZHRoID0gY2x1dHRlcl9hY3Rvcl9nZXRfd2lkdGgo
Y2hpbGQpOworICAgICAgICAgZmxvYXQgY2hpbGRIZWlnaHQgPSBjbHV0dGVyX2FjdG9yX2dldF9o
ZWlnaHQoY2hpbGQpOworCisgICAgICAgICBDbHV0dGVyQWN0b3JCb3ggY2hpbGRCb3g7CisgICAg
ICAgICBjaGlsZEJveC54MSA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3goY2hpbGQpOworICAgICAgICAg
Y2hpbGRCb3gueTEgPSBjbHV0dGVyX2FjdG9yX2dldF95KGNoaWxkKTsKKyAgICAgICAgIGNoaWxk
Qm94LngyID0gY2hpbGRCb3gueDEgKyBjaGlsZFdpZHRoOworICAgICAgICAgY2hpbGRCb3gueTIg
PSBjaGlsZEJveC55MSArIGNoaWxkSGVpZ2h0OworCisgICAgICAgICBjbHV0dGVyX2FjdG9yX2Fs
bG9jYXRlKGNoaWxkLCAmY2hpbGRCb3gsIGZsYWdzKTsKKyAgICB9CisKKyAgICBwcml2LT5hbGxv
Y2F0aW5nID0gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckFwcGx5
VHJhbnNmb3JtKENsdXR0ZXJBY3RvciogYWN0b3IsIENvZ2xNYXRyaXgqIG1hdHJpeCkKK3sKKyAg
ICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1Io
YWN0b3IpLT5wcml2OworCisgICAgLy8gQXBwbHkgdHJhbnNsYXRpb24gYW5kIHNjcm9sbGluZyBh
cyBhIHNpbmdsZSB0cmFuc2xhdGlvbi4gVGhlc2UKKyAgICAvLyBuZWVkIHRvIGNvbWUgYmVmb3Jl
IGFueXRoaW5nIGVsc2UsIG90aGVyd2lzZSB0aGV5J2xsIGJlCisgICAgLy8gYWZmZWN0ZWQgYnkg
b3RoZXIgb3BlcmF0aW9ucyBzdWNoIGFzIHNjYWxpbmcsIHdoaWNoIGlzIG5vdCB3aGF0CisgICAg
Ly8gd2Ugd2FudC4KKyAgICBmbG9hdCB0cmFuc2xhdGVYID0gcHJpdi0+c2Nyb2xsWCArIHByaXYt
PnRyYW5zbGF0ZVg7CisgICAgZmxvYXQgdHJhbnNsYXRlWSA9IHByaXYtPnNjcm9sbFkgKyBwcml2
LT50cmFuc2xhdGVZOworCisgICAgaWYgKHRyYW5zbGF0ZVggfHwgdHJhbnNsYXRlWSkKKyAgICAg
ICAgY29nbF9tYXRyaXhfdHJhbnNsYXRlKG1hdHJpeCwgdHJhbnNsYXRlWCwgdHJhbnNsYXRlWSwg
MCk7CisKKyAgICBDTFVUVEVSX0FDVE9SX0NMQVNTKGdyYXBoaWNzX2xheWVyX2FjdG9yX3BhcmVu
dF9jbGFzcyktPmFwcGx5X3RyYW5zZm9ybShhY3RvciwgbWF0cml4KTsKKworICAgIGdmbG9hdCB3
aWR0aCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3dpZHRoKGFjdG9yKTsKKyAgICBnZmxvYXQgaGVpZ2h0
ID0gY2x1dHRlcl9hY3Rvcl9nZXRfaGVpZ2h0KGFjdG9yKTsKKyAgICBpZiAod2lkdGggPD0gMS4w
IHx8IGhlaWdodCA8PSAxLjApCisgICAgICAgIHJldHVybjsKKworICAgIGdmbG9hdCBwaXZvdFgs
IHBpdm90WTsKKyAgICBwaXZvdFggPSB3aWR0aCAqIHByaXYtPmFuY2hvclg7CisgICAgcGl2b3RZ
ID0gaGVpZ2h0ICogcHJpdi0+YW5jaG9yWTsKKworICAgIGlmIChwcml2LT5tYXRyaXgpIHsKKyAg
ICAgICAgQ29nbE1hdHJpeCogbG9jYWxNYXRyaXg7CisgICAgICAgIC8vIENTUzMgdHJhbmZvcm0t
c3R5bGUgY2FuIGJlIGNoYW5nZWQgb24gdGhlIGZseSwgCisgICAgICAgIC8vIHNvIHdlIGhhdmUg
dG8gY29weSBwcml2LT5tYXRyaXggaW4gb3JkZXIgdG8gcmVjb3ZlciB6LWF4aXMuIAorICAgICAg
ICBsb2NhbE1hdHJpeCA9IGNvZ2xfbWF0cml4X2NvcHkocHJpdi0+bWF0cml4KTsKKworICAgICAg
ICBjb2dsX21hdHJpeF90cmFuc2xhdGUobWF0cml4LCBwaXZvdFgsIHBpdm90WSwgcHJpdi0+YW5j
aG9yWik7CisgICAgICAgIGNvZ2xfbWF0cml4X211bHRpcGx5KG1hdHJpeCwgbWF0cml4LCBsb2Nh
bE1hdHJpeCk7CisgICAgICAgIGNvZ2xfbWF0cml4X3RyYW5zbGF0ZShtYXRyaXgsIC1waXZvdFgs
IC1waXZvdFksIC1wcml2LT5hbmNob3JaKTsKKyAgICAgICAgY29nbF9tYXRyaXhfZnJlZShsb2Nh
bE1hdHJpeCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JQYWlu
dChDbHV0dGVyQWN0b3IqIGFjdG9yKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogZ3JhcGhp
Y3NMYXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9yKTsKKyAgICBHcmFwaGljc0xheWVy
QWN0b3JQcml2YXRlKiBwcml2ID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1IoYWN0b3IpLT5wcml2Owor
CisgICAgLy8gUGFpbnQgdGhlIHRleHR1cmUgaW4gY2FzZSB3ZSBoYXZlIGEgYm9yZGVyLiBUaGlz
IHdpbGwgYmUgdGhlIGNhc2Ugd2hlbiBkZWJ1Z2dpbmcgYm9yZGVycworICAgIC8vIGFyZSB0dXJu
ZWQgb24gdGhhdCB3ZSB3YW50IHRvIHNlZS4KKyAgICBpZiAocHJpdi0+dGV4dHVyZSkKKyAgICAg
ICAgY2x1dHRlcl9hY3Rvcl9wYWludChwcml2LT50ZXh0dXJlKTsKKworICAgIEdMaXN0KiBsaXN0
OworICAgIGZvciAobGlzdCA9IGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuOyBsaXN0OyBsaXN0ID0g
bGlzdC0+bmV4dCkgeworICAgICAgICAgQ2x1dHRlckFjdG9yKiBjaGlsZCA9IENMVVRURVJfQUNU
T1IobGlzdC0+ZGF0YSk7CisgICAgICAgICBjbHV0dGVyX2FjdG9yX3BhaW50KGNoaWxkKTsKKyAg
ICB9Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclBpY2soQ2x1dHRlckFjdG9y
KiBhY3RvciwgY29uc3QgQ2x1dHRlckNvbG9yKiBwaWNrKQoreworICAgIEdyYXBoaWNzTGF5ZXJB
Y3RvciogZ3JhcGhpY3NMYXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9yKTsKKyAgICBH
cmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gZ3JhcGhpY3NMYXllci0+cHJpdjsKKwor
ICAgIENMVVRURVJfQUNUT1JfQ0xBU1MoZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfcGFyZW50X2NsYXNz
KS0+cGljayhhY3RvciwgcGljayk7CisKKyAgICBpZiAocHJpdi0+dGV4dHVyZSkKKyAgICAgICAg
Y2x1dHRlcl9hY3Rvcl9wYWludChwcml2LT50ZXh0dXJlKTsKKworICAgIEdMaXN0KiBsaXN0Owor
ICAgIGZvciAobGlzdCA9IGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuOyBsaXN0OyBsaXN0ID0gbGlz
dC0+bmV4dCkgeworICAgICAgICAgQ2x1dHRlckFjdG9yKiBjaGlsZCA9IENMVVRURVJfQUNUT1Io
bGlzdC0+ZGF0YSk7CisgICAgICAgICBjbHV0dGVyX2FjdG9yX3BhaW50KGNoaWxkKTsKKyAgICB9
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBncmFwaGljc0xheWVyQWN0b3JEcmF3KENsdXR0ZXJDYWly
b1RleHR1cmUqIHRleHR1cmUsIGNhaXJvX3QqIGNyLCBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVy
KQoreworICAgIENsdXR0ZXJBY3RvciogYWN0b3IgPSBDTFVUVEVSX0FDVE9SKGxheWVyKTsKKyAg
ICBnZmxvYXQgd2lkdGggPSBjbHV0dGVyX2FjdG9yX2dldF93aWR0aChhY3Rvcik7CisgICAgZ2Zs
b2F0IGhlaWdodCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X2hlaWdodChhY3Rvcik7CisKKyAgICBpZiAo
IXdpZHRoIHx8ICFoZWlnaHQpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIEdyYXBoaWNz
TGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKyAgICBHcmFwaGljc0NvbnRl
eHQgY29udGV4dChjcik7CisKKyAgICBjbHV0dGVyX2NhaXJvX3RleHR1cmVfY2xlYXIodGV4dHVy
ZSk7CisKKyAgICBpZiAocHJpdi0+c3VyZmFjZSkgeworICAgICAgICBpbnQgc3VyZmFjZVdpZHRo
ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgocHJpdi0+c3VyZmFjZS5nZXQoKSk7Cisg
ICAgICAgIGludCBzdXJmYWNlSGVpZ2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KHByaXYtPnN1cmZhY2UuZ2V0KCkpOworCisgICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAuMCwg
MC4wLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3VyZmFjZVdpZHRoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHN1cmZhY2VIZWlnaHQpKTsKKyAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KDAuMCwgMC4wLCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1
cmZhY2VUb0NvbnRleHQocHJpdi0+c3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsICZj
b250ZXh0KTsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+bGF5ZXJUeXBlID09IEdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjpMYXllclR5cGVXZWJMYXllcikKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9y
RHJhd0xheWVyQ29udGVudHMoYWN0b3IsIGNvbnRleHQpOworCisgICAgcmV0dXJuIFRSVUU7Cit9
CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckFkZGVkKENsdXR0ZXJDb250YWluZXIq
IGNvbnRhaW5lciwgQ2x1dHRlckFjdG9yKiBhY3RvciwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBH
cmFwaGljc0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXIgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihj
b250YWluZXIpOworICAgIGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuID0gZ19saXN0X2FwcGVuZChn
cmFwaGljc0xheWVyLT5jaGlsZHJlbiwgYWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBncmFwaGlj
c0xheWVyQWN0b3JSZW1vdmVkKENsdXR0ZXJDb250YWluZXIqIGNvbnRhaW5lciwgQ2x1dHRlckFj
dG9yKiBhY3RvciwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGdy
YXBoaWNzTGF5ZXIgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihjb250YWluZXIpOworICAgIGdyYXBo
aWNzTGF5ZXItPmNoaWxkcmVuID0gZ19saXN0X3JlbW92ZShncmFwaGljc0xheWVyLT5jaGlsZHJl
biwgYWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JVcGRhdGVUZXh0
dXJlKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9y
UHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIEFTU0VSVChwcml2LT5sYXllclR5cGUg
IT0gR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZVZpZGVvTGF5ZXIpOworCisgICAgLy8g
Tm90aGluZyBuZWVkcyBhIHRleHR1cmUsIHJlbW92ZSB0aGUgb25lIHdlIGhhdmUsIGlmIGFueS4K
KyAgICBpZiAoIXByaXYtPmRyYXdzQ29udGVudCAmJiAhcHJpdi0+c3VyZmFjZSkgeworICAgICAg
ICBpZiAoIXByaXYtPnRleHR1cmUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZ19z
aWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9mdW5jKHByaXYtPnRleHR1cmUsIHJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCo+KGdyYXBoaWNzTGF5ZXJBY3RvckRyYXcpLCBsYXllcik7CisgICAgICAg
IGNsdXR0ZXJfYWN0b3JfdW5wYXJlbnQocHJpdi0+dGV4dHVyZSk7CisgICAgICAgIHByaXYtPnRl
eHR1cmUgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgbmVlZCBhIHRl
eHR1cmUsIGJ1dCBhbHJlYWR5IGhhdmUgb25lIQorICAgIGlmIChwcml2LT50ZXh0dXJlKQorICAg
ICAgICByZXR1cm47CisKKyAgICAvLyBXZSBuZWVkIGEgdGV4dHVyZSwgc28gY3JlYXRlIGl0Lgor
ICAgIENsdXR0ZXJBY3RvciogYWN0b3IgPSBDTFVUVEVSX0FDVE9SKGxheWVyKTsKKyAgICBpbnQg
d2lkdGggPSBjZWlsZihjbHV0dGVyX2FjdG9yX2dldF93aWR0aChhY3RvcikpOworICAgIGludCBo
ZWlnaHQgPSBjZWlsZihjbHV0dGVyX2FjdG9yX2dldF9oZWlnaHQoYWN0b3IpKTsKKworICAgIHBy
aXYtPnRleHR1cmUgPSBDTFVUVEVSX0FDVE9SKGdfb2JqZWN0X25ldyhDTFVUVEVSX1RZUEVfQ0FJ
Uk9fVEVYVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImF1dG8tcmVzaXplIiwgVFJVRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInN1cmZhY2UtaGVpZ2h0Iiwgd2lkdGggPiAwID8gd2lkdGggOiAxLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic3VyZmFjZS13
aWR0aCIsIGhlaWdodCA+IDAgPyBoZWlnaHQgOiAxLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwKSk7CisKKyAgICBjbHV0dGVyX2FjdG9yX3NldF9wYXJl
bnQocHJpdi0+dGV4dHVyZSwgYWN0b3IpOworCisgICAgZ19zaWduYWxfY29ubmVjdChwcml2LT50
ZXh0dXJlLCAiZHJhdyIsIEdfQ0FMTEJBQ0soZ3JhcGhpY3NMYXllckFjdG9yRHJhdyksIGxheWVy
KTsKK30KKworLy8gRHJhdyBjb250ZW50IGludG8gdGhlIGxheWVyLgorc3RhdGljIHZvaWQgZ3Jh
cGhpY3NMYXllckFjdG9yRHJhd0xheWVyQ29udGVudHMoQ2x1dHRlckFjdG9yKiBhY3RvciwgR3Jh
cGhpY3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUq
IHByaXYgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihhY3RvciktPnByaXY7CisKKyAgICBpZiAoIXBy
aXYtPmRyYXdzQ29udGVudCB8fCAhcHJpdi0+bGF5ZXJDbGllbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIGdmbG9hdCB3aWR0aCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3dpZHRoKGFjdG9yKTsKKyAg
ICBnZmxvYXQgaGVpZ2h0ID0gY2x1dHRlcl9hY3Rvcl9nZXRfaGVpZ2h0KGFjdG9yKTsKKyAgICBJ
bnRSZWN0IGNsaXAoMCwgMCwgd2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBBcHBseSB0aGUgcGFp
bnRlZCBjb250ZW50IHRvIHRoZSBsYXllci4KKyAgICBwcml2LT5sYXllckNsaWVudC0+cGxhdGZv
cm1DbHV0dGVyTGF5ZXJQYWludENvbnRlbnRzKGNvbnRleHQsIGNsaXApOworfQorCisKK0dyYXBo
aWNzTGF5ZXJBY3RvciogZ3JhcGhpY3NMYXllckFjdG9yTmV3KEdyYXBoaWNzTGF5ZXJDbHV0dGVy
OjpMYXllclR5cGUgdHlwZSkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0gR1JB
UEhJQ1NfTEFZRVJfQUNUT1IoZ19vYmplY3RfbmV3KEdSQVBISUNTX0xBWUVSX1RZUEVfQUNUT1Is
IDApKTsKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7
CisKKyAgICBwcml2LT5sYXllclR5cGUgPSB0eXBlOworCisgICAgLy8gRm9yIHZpZGVvIGxheWVy
cyB3ZSBkb24ndCB3YW50IHRoZSBjYWlybyB0ZXh0dXJlLCBidXQgYSByZWd1bGFyIG9uZS4KKyAg
ICBpZiAocHJpdi0+bGF5ZXJUeXBlID09IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGVW
aWRlb0xheWVyKSB7CisgICAgICAgIHByaXYtPnRleHR1cmUgPSBjbHV0dGVyX3RleHR1cmVfbmV3
KCk7CisgICAgICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3BhcmVudChwcml2LT50ZXh0dXJlLCBDTFVU
VEVSX0FDVE9SKGxheWVyKSk7CisgICAgfQorCisgICAgcmV0dXJuIGxheWVyOworfQorCitHcmFw
aGljc0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXJBY3Rvck5ld1dpdGhDbGllbnQoR3JhcGhpY3NM
YXllckNsdXR0ZXI6OkxheWVyVHlwZSB0eXBlLCBQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCog
bGF5ZXJDbGllbnQpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciA9IGdyYXBoaWNz
TGF5ZXJBY3Rvck5ldyh0eXBlKTsKKyAgICBncmFwaGljc0xheWVyQWN0b3JTZXRDbGllbnQobGF5
ZXIsIGxheWVyQ2xpZW50KTsKKworICAgIHJldHVybiBsYXllcjsKK30KKwordm9pZCBncmFwaGlj
c0xheWVyQWN0b3JTZXRDbGllbnQoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgUGxhdGZvcm1D
bHV0dGVyTGF5ZXJDbGllbnQqIGNsaWVudCkKK3sKKyAgICBsYXllci0+cHJpdi0+bGF5ZXJDbGll
bnQgPSBjbGllbnQ7Cit9CisKK1BsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50KiBncmFwaGljc0xh
eWVyQWN0b3JHZXRDbGllbnQoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICByZXR1
cm4gbGF5ZXItPnByaXYtPmxheWVyQ2xpZW50OworfQorCisvKiAKKyAqIHB1YmxpYyBBUEkKKyAq
Lwordm9pZCBncmFwaGljc0xheWVyQWN0b3JSZW1vdmVBbGwoR3JhcGhpY3NMYXllckFjdG9yKiBs
YXllcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWlsKEdSQVBISUNTX0xBWUVSX0lTX0FDVE9SKGxh
eWVyKSk7CisKKyAgICBHTGlzdCogY2hpbGRyZW4gPSBjbHV0dGVyX2FjdG9yX2dldF9jaGlsZHJl
bihDTFVUVEVSX0FDVE9SKGxheWVyKSk7CisgICAgZm9yICg7IGNoaWxkcmVuOyBjaGlsZHJlbiA9
IGNoaWxkcmVuLT5uZXh0KSB7CisgICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byByZW1vdmUgc3Vi
bGF5ZXJzLCBub3Qgb3VyIG93biBjb21wb3NpdGUgYWN0b3JzLgorICAgICAgICBpZiAoY2hpbGRy
ZW4tPmRhdGEgPT0gbGF5ZXItPnByaXYtPnRleHR1cmUpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICBjbHV0dGVyX2FjdG9yX3JlbW92ZV9jaGlsZChDTFVUVEVSX0FDVE9SKGxheWVy
KSwgQ0xVVFRFUl9BQ1RPUihjaGlsZHJlbi0+ZGF0YSkpOworICAgIH0KK30KKworY2Fpcm9fc3Vy
ZmFjZV90KiBncmFwaGljc0xheWVyQWN0b3JHZXRTdXJmYWNlKEdyYXBoaWNzTGF5ZXJBY3Rvciog
bGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5w
cml2OworICAgIGlmICghcHJpdi0+c3VyZmFjZSkKKyAgICAgICAgZ19tZXNzYWdlKCJzdXJmYWNl
IGlzIG51bGwiKTsKKworICAgIHJldHVybiBwcml2LT5zdXJmYWNlLmdldCgpOworfQorCit2b2lk
IGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1cmZhY2UoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwg
Y2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZh
dGUqIHByaXYgPSBsYXllci0+cHJpdjsKKyAgICBwcml2LT5zdXJmYWNlID0gc3VyZmFjZTsKKyAg
ICBncmFwaGljc0xheWVyQWN0b3JVcGRhdGVUZXh0dXJlKGxheWVyKTsKK30KKwordm9pZCBncmFw
aGljc0xheWVyQWN0b3JJbnZhbGlkYXRlUmVjdGFuZ2xlKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5
ZXIsIGNvbnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3Rv
clByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKworICAgIGlmICghcHJpdi0+dGV4dHVyZSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgY2Fpcm9fcmVjdGFuZ2xlX2ludF90IHJlY3QoZW5jbG9z
aW5nSW50UmVjdChkaXJ0eVJlY3QpKTsKKyAgICBjbHV0dGVyX2NhaXJvX3RleHR1cmVfaW52YWxp
ZGF0ZV9yZWN0YW5nbGUoQ0xVVFRFUl9DQUlST19URVhUVVJFKHByaXYtPnRleHR1cmUpLCAmcmVj
dCk7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNmb3JtKEdyYXBoaWNzTGF5
ZXJBY3RvciogbGF5ZXIsIGNvbnN0IENvZ2xNYXRyaXgqIG1hdHJpeCkgCit7CisgICAgR3JhcGhp
Y3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisKKyAgICBpZiAocHJp
di0+bWF0cml4KSB7CisgICAgICAgIGNvZ2xfbWF0cml4X2ZyZWUocHJpdi0+bWF0cml4KTsKKyAg
ICAgICAgcHJpdi0+bWF0cml4ID0gMDsKKyAgICAgICAgY2x1dHRlcl9hY3Rvcl9xdWV1ZV9yZWRy
YXcoQ0xVVFRFUl9BQ1RPUihsYXllcikpOworICAgIH0KKworICAgIENvZ2xNYXRyaXggaWRlbnRp
dHk7CisgICAgY29nbF9tYXRyaXhfaW5pdF9pZGVudGl0eSgmaWRlbnRpdHkpOworICAgIGlmIChj
b2dsX21hdHJpeF9lcXVhbCgoQ29nbE1hdHJpeCopJmlkZW50aXR5LCAoQ29nbE1hdHJpeCopbWF0
cml4KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHByaXYtPm1hdHJpeCkKKyAgICAgICAg
Y29nbF9tYXRyaXhfZnJlZShwcml2LT5tYXRyaXgpOworCisgICAgcHJpdi0+bWF0cml4ID0gY29n
bF9tYXRyaXhfY29weShtYXRyaXgpOworICAgIGNsdXR0ZXJfYWN0b3JfcXVldWVfcmVkcmF3KENM
VVRURVJfQUNUT1IobGF5ZXIpKTsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRBbmNo
b3JQb2ludChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBnZmxvYXQgeCwgZ2Zsb2F0IHksIGdm
bG9hdCB6KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+
cHJpdjsKKworICAgIHByaXYtPmFuY2hvclggPSB4OworICAgIHByaXYtPmFuY2hvclkgPSB5Owor
ICAgIHByaXYtPmFuY2hvclogPSB6OworCisgICAgQ2x1dHRlckFjdG9yKiBhY3RvciA9IENMVVRU
RVJfQUNUT1IobGF5ZXIpOworCisgICAgZmxvYXQgd2lkdGgsIGhlaWdodDsKKyAgICBjbHV0dGVy
X2FjdG9yX2dldF9zaXplKGFjdG9yLCAmd2lkdGgsICZoZWlnaHQpOworICAgIGNsdXR0ZXJfYWN0
b3Jfc2V0X2FuY2hvcl9wb2ludChhY3Rvciwgd2lkdGggKiBwcml2LT5hbmNob3JYLCBoZWlnaHQg
KiBwcml2LT5hbmNob3JZKTsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JHZXRBbmNob3JQ
b2ludChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBnZmxvYXQqIHgsIGdmbG9hdCogeSwgZ2Zs
b2F0KiB6KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+
cHJpdjsKKyAgICBpZiAoeCkKKyAgICAgICAgKnggPSBwcml2LT5hbmNob3JYOworCisgICAgaWYg
KHkpCisgICAgICAgICp5ID0gcHJpdi0+YW5jaG9yWTsKKworICAgIGlmICh6KQorICAgICAgICAq
eiA9IHByaXYtPmFuY2hvclo7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0U2Nyb2xs
UG9zaXRpb24oR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgZ2Zsb2F0IHgsIGdmbG9hdCB5KQor
eworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKwor
ICAgIGlmICh4ID4gMCB8fCB5ID4gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+c2Ny
b2xsWCA9IHg7CisgICAgcHJpdi0+c2Nyb2xsWSA9IHk7CisKKyAgICBjbHV0dGVyX2FjdG9yX3F1
ZXVlX3JlZHJhdyhDTFVUVEVSX0FDVE9SKGxheWVyKSk7Cit9CisKK2dpbnQgZ3JhcGhpY3NMYXll
ckFjdG9yR2V0bkNoaWxkcmVuKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgQVNT
RVJUKEdSQVBISUNTX0xBWUVSX0lTX0FDVE9SKGxheWVyKSk7CisKKyAgICByZXR1cm4gZ19saXN0
X2xlbmd0aChsYXllci0+Y2hpbGRyZW4pOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclJl
cGxhY2VTdWJsYXllcihHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBDbHV0dGVyQWN0b3IqIG9s
ZENoaWxkTGF5ZXIsIENsdXR0ZXJBY3RvciogbmV3Q2hpbGRMYXllcikKK3sKKyAgICBBU1NFUlQo
R1JBUEhJQ1NfTEFZRVJfSVNfQUNUT1IobGF5ZXIpKTsKKyAgICBBU1NFUlQoQ0xVVFRFUl9JU19B
Q1RPUihvbGRDaGlsZExheWVyKSk7CisgICAgQVNTRVJUKENMVVRURVJfSVNfQUNUT1IobmV3Q2hp
bGRMYXllcikpOworCisgICAgY2x1dHRlcl9hY3Rvcl9yZW1vdmVfY2hpbGQoQ0xVVFRFUl9BQ1RP
UihsYXllciksIG9sZENoaWxkTGF5ZXIpOworICAgIGNsdXR0ZXJfYWN0b3JfYWRkX2NoaWxkKENM
VVRURVJfQUNUT1IobGF5ZXIpLCBuZXdDaGlsZExheWVyKTsKK30KKwordm9pZCBncmFwaGljc0xh
eWVyQWN0b3JJbnNlcnRTdWJsYXllcihHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBDbHV0dGVy
QWN0b3IqIGNoaWxkTGF5ZXIsIGdpbnQgaW5kZXgpCit7CisgICAgQVNTRVJUKEdSQVBISUNTX0xB
WUVSX0lTX0FDVE9SKGxheWVyKSk7CisgICAgQVNTRVJUKENMVVRURVJfSVNfQUNUT1IoY2hpbGRM
YXllcikpOworCisgICAgZ19vYmplY3RfcmVmKGNoaWxkTGF5ZXIpOworCisgICAgbGF5ZXItPmNo
aWxkcmVuID0gZ19saXN0X2luc2VydChsYXllci0+Y2hpbGRyZW4sIGNoaWxkTGF5ZXIsIGluZGV4
KTsKKyAgICBBU1NFUlQoIWNsdXR0ZXJfYWN0b3JfZ2V0X3BhcmVudChjaGlsZExheWVyKSk7Cisg
ICAgY2x1dHRlcl9hY3Rvcl9zZXRfcGFyZW50KGNoaWxkTGF5ZXIsIENMVVRURVJfQUNUT1IobGF5
ZXIpKTsKKyAgICBjbHV0dGVyX2FjdG9yX3F1ZXVlX3JlbGF5b3V0KENMVVRURVJfQUNUT1IobGF5
ZXIpKTsKKworICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkTGF5ZXIpOworfQorCit2b2lkIGdyYXBo
aWNzTGF5ZXJBY3RvclNldFN1YmxheWVycyhHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBHcmFw
aGljc0xheWVyQWN0b3JMaXN0JiBzdWJMYXllcnMpCit7CisgICAgaWYgKCFzdWJMYXllcnMuc2l6
ZSgpKSB7CisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92ZUFsbChsYXllcik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YkxheWVy
cy5zaXplKCk7ICsraSkgeworICAgICAgICBDbHV0dGVyQWN0b3IqIGxheWVyQWN0b3IgPSBDTFVU
VEVSX0FDVE9SKHN1YkxheWVyc1tpXS5nZXQoKSk7CisgICAgICAgIGNsdXR0ZXJfY29udGFpbmVy
X2FkZF9hY3RvcihDTFVUVEVSX0NPTlRBSU5FUihsYXllciksIGxheWVyQWN0b3IpOworICAgIH0K
K30KKworR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSBncmFwaGljc0xheWVyQWN0b3JH
ZXRMYXllclR5cGUoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xh
eWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgcmV0dXJuIHByaXYtPmxh
eWVyVHlwZTsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRMYXllclR5cGUoR3JhcGhp
Y3NMYXllckFjdG9yKiBsYXllciwgR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSBsYXll
clR5cGUpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5w
cml2OworICAgIHByaXYtPmxheWVyVHlwZSA9IGxheWVyVHlwZTsKK30KKwordm9pZCBncmFwaGlj
c0xheWVyQWN0b3JTZXRUcmFuc2xhdGVYKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGZsb2F0
IHZhbHVlKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+
cHJpdjsKKyAgICBwcml2LT50cmFuc2xhdGVYID0gdmFsdWU7CisgICAgY2x1dHRlcl9hY3Rvcl9x
dWV1ZV9yZWRyYXcoQ0xVVFRFUl9BQ1RPUihsYXllcikpOworfQorCitmbG9hdCBncmFwaGljc0xh
eWVyQWN0b3JHZXRUcmFuc2xhdGVYKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAg
R3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIHJldHVy
biBwcml2LT50cmFuc2xhdGVYOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5z
bGF0ZVkoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgZmxvYXQgdmFsdWUpCit7CisgICAgR3Jh
cGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIHByaXYtPnRy
YW5zbGF0ZVkgPSB2YWx1ZTsKKyAgICBjbHV0dGVyX2FjdG9yX3F1ZXVlX3JlZHJhdyhDTFVUVEVS
X0FDVE9SKGxheWVyKSk7Cit9CisKK2Zsb2F0IGdyYXBoaWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0
ZVkoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQ
cml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgcmV0dXJuIHByaXYtPnRyYW5zbGF0ZVk7
Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5
ZXJBY3RvciogbGF5ZXIsIGdib29sZWFuIGRyYXdzQ29udGVudCkKK3sKKyAgICBHcmFwaGljc0xh
eWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisKKyAgICBpZiAoZHJhd3NDb250
ZW50ID09IHByaXYtPmRyYXdzQ29udGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+
ZHJhd3NDb250ZW50ID0gZHJhd3NDb250ZW50OworCisgICAgZ3JhcGhpY3NMYXllckFjdG9yVXBk
YXRlVGV4dHVyZShsYXllcik7Cit9CisKK2dib29sZWFuIGdyYXBoaWNzTGF5ZXJBY3RvckdldERy
YXdzQ29udGVudChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQoreworICAgIHJldHVybiBsYXll
ci0+cHJpdi0+ZHJhd3NDb250ZW50OworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOTQ2MGQzNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmgKQEAgLTAsMCAr
MSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMCBDb2xsYWJvcmEgTGltaXRlZAorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMi4xLCBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHBy
b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBX
SVRIT1VUIEFOWQorICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAor
ICogSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x
MzAxIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBHcmFwaGljc0xheWVyQWN0b3JfaCAKKyNkZWZp
bmUgR3JhcGhpY3NMYXllckFjdG9yX2ggCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2x1dHRlci5oIgorI2luY2x1ZGUgPGNsdXR0
ZXIvY2x1dHRlci5oPgorI2luY2x1ZGUgPGNvZ2wvY29nbC5oPgorI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHUkFQSElDU19MQVlFUl9UWVBFX0FD
VE9SIGdyYXBoaWNzX2xheWVyX2FjdG9yX2dldF90eXBlKCkKKworI2RlZmluZSBHUkFQSElDU19M
QVlFUl9BQ1RPUihvYmopIFwKKyAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFwKKyAgICBHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SLCBHcmFwaGljc0xheWVyQWN0b3IpKQor
CisjZGVmaW5lIEdSQVBISUNTX0xBWUVSX0FDVE9SX0NMQVNTKGtsYXNzKSBcCisgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIFwKKyAgICBHUkFQSElDU19MQVlFUl9UWVBFX0FD
VE9SLCBHcmFwaGljc0xheWVyQWN0b3JDbGFzcykpCisKKyNkZWZpbmUgR1JBUEhJQ1NfTEFZRVJf
SVNfQUNUT1Iob2JqKSBcCisgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBc
CisgICAgR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUikpCisKKyNkZWZpbmUgR1JBUEhJQ1NfTEFZ
RVJfSVNfQUNUT1JfQ0xBU1Moa2xhc3MpIFwKKyAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgXAorICAgIEdSQVBISUNTX0xBWUVSX1RZUEVfQUNUT1IpKQorCisjZGVmaW5lIEdS
QVBISUNTX0xBWUVSX0FDVE9SX0dFVF9DTEFTUyhvYmopIFwKKyAgICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgXAorICAgIEdSQVBISUNTX0xBWUVSX1RZUEVfQUNUT1IsIEdyYXBo
aWNzTGF5ZXJBY3RvckNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dyYXBoaWNzTGF5ZXJBY3Rv
ciBHcmFwaGljc0xheWVyQWN0b3I7Cit0eXBlZGVmIHN0cnVjdCBfR3JhcGhpY3NMYXllckFjdG9y
Q2xhc3MgR3JhcGhpY3NMYXllckFjdG9yQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfR3JhcGhpY3NM
YXllckFjdG9yUHJpdmF0ZSBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlOworCisvKioKKyAqIEdy
YXBoaWNzTGF5ZXJBY3RvcjoKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBzdHJ1Y3R1cmUg
YXJlIHByaXZhdGUgYW5kIHNob3VsZCBvbmx5IGJlIGFjY2Vzc2VkCisgKiB0aHJvdWdoIHRoZSBw
dWJsaWMgQVBJLgorICovCitzdHJ1Y3QgX0dyYXBoaWNzTGF5ZXJBY3RvciB7CisgICAgQ2x1dHRl
clJlY3RhbmdsZSBwYXJlbnQ7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSAqcHJpdjsK
KyAgICBHTGlzdCAqY2hpbGRyZW47Cit9OworCitzdHJ1Y3QgX0dyYXBoaWNzTGF5ZXJBY3RvckNs
YXNzIHsKKyAgICBDbHV0dGVyUmVjdGFuZ2xlQ2xhc3MgcGFyZW50X2NsYXNzOworCisgICAgLyog
cGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAgIHZvaWQgKCpfcGFkZGluZ18wKSh2
b2lkKTsKKyAgICB2b2lkICgqX3BhZGRpbmdfMSkodm9pZCk7CisgICAgdm9pZCAoKl9wYWRkaW5n
XzIpKHZvaWQpOworICAgIHZvaWQgKCpfcGFkZGluZ18zKSh2b2lkKTsKKyAgICB2b2lkICgqX3Bh
ZGRpbmdfNCkodm9pZCk7Cit9OworCitHVHlwZSBncmFwaGljc19sYXllcl9hY3Rvcl9nZXRfdHlw
ZSh2b2lkKSBHX0dOVUNfQ09OU1Q7CisKK0dyYXBoaWNzTGF5ZXJBY3RvciogZ3JhcGhpY3NMYXll
ckFjdG9yTmV3KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUpOworR3Jh
cGhpY3NMYXllckFjdG9yKiBncmFwaGljc0xheWVyQWN0b3JOZXdXaXRoQ2xpZW50KFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUsIFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRl
ckxheWVyQ2xpZW50Kik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldENsaWVudChHcmFwaGlj
c0xheWVyQWN0b3IqLCBXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCopOworV2Vi
Q29yZTo6UGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqIGdyYXBoaWNzTGF5ZXJBY3RvckdldENs
aWVudChHcmFwaGljc0xheWVyQWN0b3IqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yUmVtb3Zl
QWxsKEdyYXBoaWNzTGF5ZXJBY3RvciopOworY2Fpcm9fc3VyZmFjZV90KiBncmFwaGljc0xheWVy
QWN0b3JHZXRTdXJmYWNlKEdyYXBoaWNzTGF5ZXJBY3RvciopOwordm9pZCBncmFwaGljc0xheWVy
QWN0b3JTZXRTdXJmYWNlKEdyYXBoaWNzTGF5ZXJBY3RvciosIGNhaXJvX3N1cmZhY2VfdCopOwor
dm9pZCBncmFwaGljc0xheWVyQWN0b3JJbnZhbGlkYXRlUmVjdGFuZ2xlKEdyYXBoaWNzTGF5ZXJB
Y3RvciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwordm9pZCBncmFwaGljc0xheWVyQWN0
b3JTZXRUcmFuc2Zvcm0oR3JhcGhpY3NMYXllckFjdG9yKiwgY29uc3QgQ29nbE1hdHJpeCopOwor
dm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRBbmNob3JQb2ludChHcmFwaGljc0xheWVyQWN0b3Iq
LCBnZmxvYXQsIGdmbG9hdCwgZ2Zsb2F0KTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yR2V0QW5j
aG9yUG9pbnQoR3JhcGhpY3NMYXllckFjdG9yKiwgZ2Zsb2F0KiwgZ2Zsb2F0KiwgZ2Zsb2F0Kik7
Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFNjcm9sbFBvc2l0aW9uKEdyYXBoaWNzTGF5ZXJB
Y3RvciosIGdmbG9hdCwgZ2Zsb2F0KTsgCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5z
bGF0ZVgoR3JhcGhpY3NMYXllckFjdG9yKiwgZmxvYXQpOworZmxvYXQgZ3JhcGhpY3NMYXllckFj
dG9yR2V0VHJhbnNsYXRlWChHcmFwaGljc0xheWVyQWN0b3IqKTsKK3ZvaWQgZ3JhcGhpY3NMYXll
ckFjdG9yU2V0VHJhbnNsYXRlWShHcmFwaGljc0xheWVyQWN0b3IqLCBmbG9hdCk7CitmbG9hdCBn
cmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVZKEdyYXBoaWNzTGF5ZXJBY3RvciopOworZ2lu
dCBncmFwaGljc0xheWVyQWN0b3JHZXRuQ2hpbGRyZW4oR3JhcGhpY3NMYXllckFjdG9yKik7CitX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlIGdyYXBoaWNzTGF5ZXJBY3Rv
ckdldExheWVyVHlwZShHcmFwaGljc0xheWVyQWN0b3IqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFj
dG9yU2V0TGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXJBY3RvciosIFdlYkNvcmU6OkdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjpMYXllclR5cGUpOwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRTdWJsYXll
cnMoR3JhcGhpY3NMYXllckFjdG9yKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckFjdG9yTGlzdCYp
OworZ2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yR2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5
ZXJBY3RvciopOwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXREcmF3c0NvbnRlbnQoR3JhcGhp
Y3NMYXllckFjdG9yKiwgZ2Jvb2xlYW4gZHJhd3NDb250ZW50KTsKKworR19FTkRfREVDTFMKKwor
I2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2VuZGlmIC8qIEdyYXBo
aWNzTGF5ZXJBY3Rvcl9oICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>153808</attachid>
            <date>2012-07-23 09:04:07 -0700</date>
            <delta_ts>2012-09-25 07:23:14 -0700</delta_ts>
            <desc>Proposed Patch2</desc>
            <filename>GraphicsLayerActor.patch</filename>
            <type>text/plain</type>
            <size>31846</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiMTRmNjAwLi5mZDcyN2M5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNjEg
QEAKKzIwMTItMDctMjMgIEpvb25lIEh1ciAgPGpvb25lLmh1ckBpbnRlbC5jb20+LCBHdXN0YXZv
IE5vcm9uaGEgU2lsdmEgIDxndXN0YXZvLm5vcm9uaGFAY29sbGFib3JhLmNvbT4KKworICAgICAg
ICBbR1RLXSBBZGQgR3JhcGhpY3NMYXllckFjdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTk0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIENsdXR0ZXIgaXMgb25lIG9mIEFjY2VsZXJhdGlvbiBCYWNr
ZW5kIG9mIFdlYktpdEd0aysuIFdoZW4gZW5hYmxpbmcgdGhlIENsdXR0ZXIgYmFja2VuZCwKKyAg
ICAgICAgR3JhcGhpY3NMYXllckFjdG9yIHJlcHJlc2VudHMgYSBjb21wb3NpdGluZyBsYXllciwg
d2hpY2ggaXMgYSBuZXcgQ2x1dHRlckFjdG9yLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhp
cyB3aWxsIGJlIGNvdmVyZWQgYnkgcGl4ZWwgdGVzdHMgZm9yIFF0IGFuZCBHVEsrIGFjY2VsZXJh
dGVkCisgICAgICAgIGNvbXBvc2l0aW5nIGFuZCAzRCB0cmFuc2Zvcm1zLgorCisgICAgICAgICog
R05VbWFrZWZpbGUubGlzdC5hbToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVy
L0dyYXBoaWNzTGF5ZXJBY3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoX0dyYXBoaWNzTGF5ZXJB
Y3RvclByaXZhdGUpOgorICAgICAgICAoZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfY2xhc3NfaW5pdCk6
IEdPYmplY3QgY29uZmlndXJhdGlvbiBvZiBhIG5ldyBDbHV0dGVyIEFjdG9yLgorICAgICAgICAo
Z3JhcGhpY3NfbGF5ZXJfYWN0b3JfaW5pdCk6IEluaXRpYWxpemF0aW9uIG9mIHRoZSBwcml2YXRl
IGRhdGEgb2YgdGhpcyBhY3Rvci4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclNldFByb3Bl
cnR5KTogR09iamVjdCBwcm9wZXJ0eSBzZXR0ZXIuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0
b3JHZXRQcm9wZXJ0eSk6IEdPYmplY3QgcHJvcGVydHkgZ2V0dGVyLgorICAgICAgICAoZ3JhcGhp
Y3NMYXllckFjdG9yRGlzcG9zZSk6IENhbGxlZCB0byBkcm9wIGFsbCByZWZlcmVuY2VzIHRvIG90
aGVyIG9iamVjdHMuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JBbGxvY2F0ZSk6ICBDYWxs
ZWQgdG8gc2V0IHRoZSBjb29yZGluYXRlcyBvZiBhbiBhY3Rvci4KKyAgICAgICAgKGdyYXBoaWNz
TGF5ZXJBY3RvckFwcGx5VHJhbnNmb3JtKTogQXBwbHlpbmcgdGhlIHRyYW5zZm9ybWF0aW9uIHRv
IGFuIGFjdG9yIGJlZm9yZSBwYWludGluZyBpdC4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3Rv
clBhaW50KTogQ2FsbGVkIHRvIHBhaW50IHRoZSBhY3Rvci4KKyAgICAgICAgKGdyYXBoaWNzTGF5
ZXJBY3RvclBpY2spOiBDYWxsZWQgdG8gZHJhdyBhbiBvdXRsaW5lIG9mIHRoZSBhY3RvciB3aXRo
IHRoZSBnaXZlbiBjb2xvci4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvckRyYXcpOiBDYWxs
ZWQgZWFjaCB0aW1lIGEgQ2x1dHRlckNhaXJvVGV4dHVyZSBoYXMgYmVlbiBpbnZhbGlkYXRlZC4K
KyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvckFkZGVkKTogQ2FsbGVkIGVhY2ggdGltZSBhbiBh
Y3RvciBoYXMgYmVlbiBhZGRlZCB0byBjb250YWluZXIuCisgICAgICAgIChncmFwaGljc0xheWVy
QWN0b3JSZW1vdmVkKTogQ2FsbGVkIGVhY2ggdGltZSBhbiBhY3RvciBpcyByZW1vdmVkIGZyb20g
Y29udGFpbmVyLgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yTmV3KTogQ3JlYXRlIGEgc3Bl
Y2lmaWMgbGF5ZXIgdHlwZSBvZiBHcmFwaGljc0xheWVyQWN0b3Igb2JqZWN0LgorICAgICAgICAo
Z3JhcGhpY3NMYXllckFjdG9yTmV3V2l0aENsaWVudCk6IENyZWF0ZSBhIHNwZWNpZmljIGxheWVy
IHR5cGUgb2YgR3JhcGhpY3NMYXllckFjdG9yIG9iamVjdCB3aXRoIAorICAgICAgICBpdHMgUGxh
dGZvcm1DbHV0dGVyQ2xpZW50TGF5ZXIuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXRD
bGllbnQpOiBBZGRlZCBzZXR0ZXIgdG8gc2V0IHRoZSBQbGF0Zm9ybUNsdXR0ZXJDbGllbnRMYXll
ci4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvckdldENsaWVudCk6IEFkZGVkIGdldHRlciB0
byBnZXQgdGhlIFBsYXRmb3JtQ2x1dHRlckNsaWVudExheWVyLgorICAgICAgICAoZ3JhcGhpY3NM
YXllckFjdG9yUmVtb3ZlQWxsKTogUmVtb3ZlIGFsbCBjaGlsZCBhY3RvcnMuCisgICAgICAgIChn
cmFwaGljc0xheWVyVXBkYXRlVGV4dHVyZSk6IENyZWF0ZSBhIENsdXR0ZXJDYWlyb1RleHR1cmUu
CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRTdXJmYWNlKTogQWRkZWQgc2V0dGVyIHRv
IHNldCBhIGNhaXJvX3N1cmZhY2VfdC4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1
cmZhY2UpOiBBZGRlZCBnZXR0ZXIgdG8gZ2V0IHRoZSBjYWlyb19zdXJmYWNlX3QuCisgICAgICAg
IChncmFwaGljc0xheWVyQWN0b3JJbnZhbGlkYXRlUmVjdGFuZ2xlKToKKyAgICAgICAgKGdyYXBo
aWNzTGF5ZXJBY3RvclNldFRyYW5zZm9ybSk6IFNldCBhIENvZ2xNYXRyaXggdG8gYXBwbHkgbWF0
cml4IHRyYW5zZm9ybS4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclNldEFuY2hvclBvaW50
KToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvckdldEFuY2hvclBvaW50KToKKyAgICAgICAg
KGdyYXBoaWNzTGF5ZXJBY3RvclNldFNjcm9sbFBvc2l0aW9uKToKKyAgICAgICAgKGdyYXBoaWNz
TGF5ZXJBY3RvckdldG5DaGlsZHJlbik6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JSZXBs
YWNlU3VibGF5ZXIpOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9ySW5zZXJ0U3VibGF5ZXIp
OgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yU2V0U3VibGF5ZXJzKToKKyAgICAgICAgKGdy
YXBoaWNzTGF5ZXJBY3RvckdldExheWVyVHlwZSk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0
b3JTZXRMYXllclR5cGUpOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRl
WCk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVYKToKKyAgICAgICAg
KGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zbGF0ZVkpOgorICAgICAgICAoZ3JhcGhpY3NMYXll
ckFjdG9yR2V0VHJhbnNsYXRlWSk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXREcmF3
c0NvbnRlbnQpOiBBZGRlZCBzZXR0ZXIgdG8gcGFpbnQgY29udGVudCBpbnNpZGUgYSBsYXllci4K
KyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvckdldERyYXdzQ29udGVudCk6IEFkZGVkIGdldHRl
ciB0byBnZXQgdGhlIHZhbHVlIG9mIHRoZSBkcmF3c0NvbnRlbnQuIAorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmg6IEFkZGVkLgorICAgICAg
ICAoX0dyYXBoaWNzTGF5ZXJBY3Rvcik6CisgICAgICAgIChfR3JhcGhpY3NMYXllckFjdG9yQ2xh
c3MpOgorCiAyMDEyLTA3LTIyICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBbVjhdIENvZGVHZW5lcmF0b3JWOC5wbSBzaG91bGQgc3VwcG9ydCBzdGF0aWMg
YXR0cmlidXRlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggM2ViOTQzOS4uYTYw
ZTExNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC02MTcwLDYgKzYxNzAsOCBA
QCBpZiBVU0VfQ0xVVFRFUgogd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jbHV0dGVyL0dSZWZQdHJDbHV0dGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2x1dHRlci9HUmVmUHRyQ2x1dHRlci5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0
ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBo
aWNzTGF5ZXJDbHV0dGVyLmgKIGVuZGlmICAjIEVORCBVU0VfQ0xVVFRFUgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0
b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGlj
c0xheWVyQWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYzkx
YjgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
bHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5jcHAKQEAgLTAsMCArMSw2NjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgMjAxMSwyMDEyIENvbGxhYm9yYSBMaW1pdGVkCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt
b2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLjEsIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQg
QU5ZCisgKiBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMu
LCA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQWN0b3IuaCIKKworI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbHV0dGVyLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjaW5jbHVkZSA8
Z2xpYi9ncHJpbnRmLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitHX0RFRklORV9U
WVBFKEdyYXBoaWNzTGF5ZXJBY3RvciwgZ3JhcGhpY3NfbGF5ZXJfYWN0b3IsIENMVVRURVJfVFlQ
RV9SRUNUQU5HTEUpCisKKyNkZWZpbmUgR1JBUEhJQ1NfTEFZRVJfQUNUT1JfR0VUX1BSSVZBVEUo
b2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBHUkFQSElDU19MQVlFUl9U
WVBFX0FDVE9SLCBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKSkKKworc3RydWN0IF9HcmFwaGlj
c0xheWVyQWN0b3JQcml2YXRlIHsKKyAgICBHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBl
IGxheWVyVHlwZTsKKyAgICAvLyBHdWFyZCBhZ2FpbnN0IGNoYW5naW5nIHNpemUgd2hpbGUgYWxs
b2NhdGluZy4KKyAgICBnYm9vbGVhbiBhbGxvY2F0aW5nOworCisgICAgQ2x1dHRlckFjdG9yKiB0
ZXh0dXJlOworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2U7CisgICAgQ29nbE1h
dHJpeCogbWF0cml4OworCisgICAgUGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqIGxheWVyQ2xp
ZW50OworCisgICAgZ2Jvb2xlYW4gZHJhd3NDb250ZW50OworCisgICAgZ2Zsb2F0IGFuY2hvclg7
CisgICAgZ2Zsb2F0IGFuY2hvclk7CisgICAgZ2Zsb2F0IGFuY2hvclo7CisKKyAgICBnZmxvYXQg
c2Nyb2xsWDsKKyAgICBnZmxvYXQgc2Nyb2xsWTsKKworICAgIGZsb2F0IHRyYW5zbGF0ZVg7Cisg
ICAgZmxvYXQgdHJhbnNsYXRlWTsKK307CisKK2VudW0geworICAgIFBST1BfMCwKKworICAgIFBS
T1BfVFJBTlNMQVRFX1gsCisgICAgUFJPUF9UUkFOU0xBVEVfWSwKKworICAgIFBST1BfTEFTVAor
fTsKKworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yQWxsb2NhdGUoQ2x1dHRlckFjdG9y
KiwgY29uc3QgQ2x1dHRlckFjdG9yQm94KiwgQ2x1dHRlckFsbG9jYXRpb25GbGFncyk7CitzdGF0
aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JBcHBseVRyYW5zZm9ybShDbHV0dGVyQWN0b3IqLCBD
b2dsTWF0cml4Kik7CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JEaXNwb3NlKEdPYmpl
Y3QqKTsKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckdldFByb3BlcnR5KEdPYmplY3Qq
LCBndWludCBwcm9wSUQsIEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKK3N0YXRpYyB2b2lkIGdyYXBo
aWNzTGF5ZXJBY3RvclNldFByb3BlcnR5KEdPYmplY3QqLCBndWludCBwcm9wSUQsIGNvbnN0IEdW
YWx1ZSosIEdQYXJhbVNwZWMqKTsKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclBhaW50
KENsdXR0ZXJBY3RvciopOworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yUGljayhDbHV0
dGVyQWN0b3IqLCBjb25zdCBDbHV0dGVyQ29sb3IqKTsKKworc3RhdGljIHZvaWQgZ3JhcGhpY3NM
YXllckFjdG9yQWRkZWQoQ2x1dHRlckNvbnRhaW5lciosIENsdXR0ZXJBY3RvciosIGdwb2ludGVy
IGRhdGEpOworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlZChDbHV0dGVyQ29u
dGFpbmVyKiwgQ2x1dHRlckFjdG9yKiwgZ3BvaW50ZXIgZGF0YSk7CitzdGF0aWMgZ2Jvb2xlYW4g
Z3JhcGhpY3NMYXllckFjdG9yRHJhdyhDbHV0dGVyQ2Fpcm9UZXh0dXJlKiwgY2Fpcm9fdCosIEdy
YXBoaWNzTGF5ZXJBY3RvciopOworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yVXBkYXRl
VGV4dHVyZShHcmFwaGljc0xheWVyQWN0b3IqKTsKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJB
Y3RvckRyYXdMYXllckNvbnRlbnRzKENsdXR0ZXJBY3RvciosIEdyYXBoaWNzQ29udGV4dCYpOwor
CitzdGF0aWMgdm9pZCBncmFwaGljc19sYXllcl9hY3Rvcl9jbGFzc19pbml0KEdyYXBoaWNzTGF5
ZXJBY3RvckNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0g
R19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIENsdXR0ZXJBY3RvckNsYXNzKiBhY3RvckNsYXNz
ID0gQ0xVVFRFUl9BQ1RPUl9DTEFTUyhrbGFzcyk7CisgICAgR1BhcmFtU3BlYyogcHNwZWM7CisK
KyAgICBvYmplY3RDbGFzcy0+Z2V0X3Byb3BlcnR5ID0gZ3JhcGhpY3NMYXllckFjdG9yR2V0UHJv
cGVydHk7CisgICAgb2JqZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdyYXBoaWNzTGF5ZXJBY3Rv
clNldFByb3BlcnR5OworICAgIG9iamVjdENsYXNzLT5kaXNwb3NlID0gZ3JhcGhpY3NMYXllckFj
dG9yRGlzcG9zZTsKKyAgICBhY3RvckNsYXNzLT5hcHBseV90cmFuc2Zvcm0gPSBncmFwaGljc0xh
eWVyQWN0b3JBcHBseVRyYW5zZm9ybTsKKyAgICBhY3RvckNsYXNzLT5hbGxvY2F0ZSA9IGdyYXBo
aWNzTGF5ZXJBY3RvckFsbG9jYXRlOworICAgIGFjdG9yQ2xhc3MtPnBhaW50ID0gZ3JhcGhpY3NM
YXllckFjdG9yUGFpbnQ7CisgICAgYWN0b3JDbGFzcy0+cGljayA9IGdyYXBoaWNzTGF5ZXJBY3Rv
clBpY2s7CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihHcmFw
aGljc0xheWVyQWN0b3JQcml2YXRlKSk7CisKKyAgICBwc3BlYyA9IGdfcGFyYW1fc3BlY19mbG9h
dCgidHJhbnNsYXRlLXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcmFuc2xh
dGUgWCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYW5zbGF0aW9uIHZhbHVl
IGZvciB0aGUgWCBheGlzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUdfTUFY
RkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRFKSk7
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9U
UkFOU0xBVEVfWCwgcHNwZWMpOworCisgICAgcHNwZWMgPSBnX3BhcmFtX3NwZWNfZmxvYXQoInRy
YW5zbGF0ZS15IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJhbnNsYXRlIFki
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcmFuc2xhdGlvbiB2YWx1ZSBmb3Ig
dGhlIFkgYXlpcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUdfTUFYRkxPQVQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRFKSk7CisgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9UUkFOU0xBVEVf
WSwgcHNwZWMpOworfQorCitzdGF0aWMgdm9pZCBncmFwaGljc19sYXllcl9hY3Rvcl9pbml0KEdy
YXBoaWNzTGF5ZXJBY3Rvciogc2VsZikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRl
KiBwcml2ID0gc2VsZi0+cHJpdiA9IEdSQVBISUNTX0xBWUVSX0FDVE9SX0dFVF9QUklWQVRFKHNl
bGYpOworCisgICAgY2x1dHRlcl9hY3Rvcl9zZXRfcmVhY3RpdmUoQ0xVVFRFUl9BQ1RPUihzZWxm
KSwgRkFMU0UpOworCisgICAgLy8gRGVmYXVsdCB1c2VkIGJ5IEdyYXBoaWNzTGF5ZXIuCisgICAg
Z3JhcGhpY3NMYXllckFjdG9yU2V0QW5jaG9yUG9pbnQoc2VsZiwgMC41LCAwLjUsIDAuMCk7CisK
KyAgICBwcml2LT5zY3JvbGxYID0gMC4wOworICAgIHByaXYtPnNjcm9sbFkgPSAwLjA7CisKKyAg
ICBwcml2LT50cmFuc2xhdGVYID0gMC4wOworICAgIHByaXYtPnRyYW5zbGF0ZVkgPSAwLjA7CisK
KyAgICBwcml2LT5tYXRyaXggPSAwOworCisgICAgZ19zaWduYWxfY29ubmVjdChzZWxmLCAiYWN0
b3ItYWRkZWQiLCBHX0NBTExCQUNLKGdyYXBoaWNzTGF5ZXJBY3RvckFkZGVkKSwgMCk7CisgICAg
Z19zaWduYWxfY29ubmVjdChzZWxmLCAiYWN0b3ItcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soZ3JhcGhp
Y3NMYXllckFjdG9yUmVtb3ZlZCksIDApOworfQorCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVy
QWN0b3JTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1Zh
bHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9y
KiBsYXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHBy
b3BJRCkgeworICAgIGNhc2UgUFJPUF9UUkFOU0xBVEVfWDoKKyAgICAgICAgZ3JhcGhpY3NMYXll
ckFjdG9yU2V0VHJhbnNsYXRlWChsYXllciwgZ192YWx1ZV9nZXRfZmxvYXQodmFsdWUpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RSQU5TTEFURV9ZOgorICAgICAgICBncmFwaGlj
c0xheWVyQWN0b3JTZXRUcmFuc2xhdGVZKGxheWVyLCBnX3ZhbHVlX2dldF9mbG9hdCh2YWx1ZSkp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lO
VkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBzcGVjKTsKKyAgICB9Cit9CisKK3N0
YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwg
Z3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBH
cmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1Iob2JqZWN0KTsK
KworICAgIHN3aXRjaCAocHJvcElEKSB7CisgICAgY2FzZSBQUk9QX1RSQU5TTEFURV9YOgorICAg
ICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNs
YXRlWChsYXllcikpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfVFJBTlNMQVRFX1k6
CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBncmFwaGljc0xheWVyQWN0b3JHZXRU
cmFuc2xhdGVZKGxheWVyKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcHNwZWMp
OworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JEaXNwb3NlKEdP
YmplY3QqIG9iamVjdCkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0gR1JBUEhJ
Q1NfTEFZRVJfQUNUT1Iob2JqZWN0KTsKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBw
cml2ID0gbGF5ZXItPnByaXY7CisKKyAgICBpZiAocHJpdi0+dGV4dHVyZSkgeworICAgICAgICBj
bHV0dGVyX2FjdG9yX2Rlc3Ryb3kocHJpdi0+dGV4dHVyZSk7CisgICAgICAgIHByaXYtPnRleHR1
cmUgPSAwOworICAgIH0KKworICAgIHByaXYtPnN1cmZhY2UuY2xlYXIoKTsKKworICAgIGlmIChw
cml2LT5tYXRyaXgpCisgICAgICAgY29nbF9tYXRyaXhfZnJlZShwcml2LT5tYXRyaXgpOworCisg
ICAgR19PQkpFQ1RfQ0xBU1MoZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfcGFyZW50X2NsYXNzKS0+ZGlz
cG9zZShvYmplY3QpOworfQorCisvLyBDb3BpZWQgZnJvbSBjYWlyby4KKyNkZWZpbmUgTUFYX0lN
QUdFX1NJWkUgMzI3NjcKKworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yQWxsb2NhdGUo
Q2x1dHRlckFjdG9yKiBzZWxmLCBjb25zdCBDbHV0dGVyQWN0b3JCb3gqIGJveCwgQ2x1dHRlckFs
bG9jYXRpb25GbGFncyBmbGFncykKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0g
R1JBUEhJQ1NfTEFZRVJfQUNUT1Ioc2VsZik7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0
ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgcHJpdi0+YWxsb2NhdGluZyA9IFRSVUU7CisK
KyAgICBDTFVUVEVSX0FDVE9SX0NMQVNTKGdyYXBoaWNzX2xheWVyX2FjdG9yX3BhcmVudF9jbGFz
cyktPmFsbG9jYXRlKHNlbGYsIGJveCwgZmxhZ3MpOworCisgICAgaWYgKHByaXYtPnRleHR1cmUp
IHsKKyAgICAgICAgLy8gVGhlIHRleHR1cmUgb2NjdXBpZXMgdGhlIHdob2xlIGFyZWEsIGJ1dCBp
cyBwb3NpdGlvbmVkIGF0IDAsMAorICAgICAgICAvLyByZWxhdGl2ZSB0byB0aGUgbGF5ZXIgYWN0
b3IuCisgICAgICAgIENsdXR0ZXJBY3RvckJveCB0ZXh0dXJlQm94ID0geyAwLjAsIDAuMCwgYm94
LT54MiAtIGJveC0+eDEsIGJveC0+eTIgLSBib3gtPnkxIH07CisKKyAgICAgICAgLy8gcHJvdGVj
dCBhZ2FpbnN0IDB4MAorICAgICAgICBpZiAoIXRleHR1cmVCb3gueDIpCisgICAgICAgICAgICB0
ZXh0dXJlQm94LngyID0gMTsKKworICAgICAgICBpZiAoIXRleHR1cmVCb3gueTIpCisgICAgICAg
ICAgICB0ZXh0dXJlQm94LnkyID0gMTsKKworICAgICAgICAvLyBGSVhNRTogc29tZSBwYWdlcyBt
YWtlIHVzIGNyZWF0ZSB2ZXJ5IGJpZyBsYXllcnMsIHdoaWNoCisgICAgICAgIC8vIGV4Y2VlZHMg
Y2Fpcm8ncyBsaW1pdHMsIGNoZWNrIGZvciB0aGF0IGhlcmUuCisgICAgICAgIGlmICh0ZXh0dXJl
Qm94LngyID4gTUFYX0lNQUdFX1NJWkUpIHsKKyAgICAgICAgICAgIGdfd2FybmluZygiTGF5ZXIg
JXMgaGFzIGEgd2lkdGggdGhhdCBleGNlZWRzIGNhaXJvJ3MgbGltaXRzOiAlLjJmIiwgY2x1dHRl
cl9hY3Rvcl9nZXRfbmFtZShzZWxmKSwgdGV4dHVyZUJveC54Mik7CisgICAgICAgICAgICB0ZXh0
dXJlQm94LngyID0gTUFYX0lNQUdFX1NJWkU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGV4
dHVyZUJveC55MiA+IE1BWF9JTUFHRV9TSVpFKSB7CisgICAgICAgICAgICBnX3dhcm5pbmcoIkxh
eWVyICVzIGhhcyBhIGhlaWdodCB0aGF0IGV4Y2VlZHMgY2Fpcm8ncyBsaW1pdHM6ICUuMmYiLCBj
bHV0dGVyX2FjdG9yX2dldF9uYW1lKHNlbGYpLCB0ZXh0dXJlQm94LnkyKTsKKyAgICAgICAgICAg
IHRleHR1cmVCb3gueTIgPSBNQVhfSU1BR0VfU0laRTsKKyAgICAgICAgfQorCisgICAgICAgIGNs
dXR0ZXJfYWN0b3JfYWxsb2NhdGUocHJpdi0+dGV4dHVyZSwgJnRleHR1cmVCb3gsIGZsYWdzKTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogbWF5YmUgd2UgY2FuIGNhY2hlIGNoaWxkcmVuIGFsbG9j
YXRpb24gYW5kIG5vdCBjYWxsCisgICAgLy8gYWxsb2NhdGUgb24gdGhlbSB0aGlzIG9mdGVuPwor
ICAgIGZvciAoR0xpc3QqIGxpc3QgPSBsYXllci0+Y2hpbGRyZW47IGxpc3Q7IGxpc3QgPSBsaXN0
LT5uZXh0KSB7CisgICAgICAgICBDbHV0dGVyQWN0b3IqIGNoaWxkID0gQ0xVVFRFUl9BQ1RPUihs
aXN0LT5kYXRhKTsKKworICAgICAgICAgZmxvYXQgY2hpbGRXaWR0aCA9IGNsdXR0ZXJfYWN0b3Jf
Z2V0X3dpZHRoKGNoaWxkKTsKKyAgICAgICAgIGZsb2F0IGNoaWxkSGVpZ2h0ID0gY2x1dHRlcl9h
Y3Rvcl9nZXRfaGVpZ2h0KGNoaWxkKTsKKworICAgICAgICAgQ2x1dHRlckFjdG9yQm94IGNoaWxk
Qm94OworICAgICAgICAgY2hpbGRCb3gueDEgPSBjbHV0dGVyX2FjdG9yX2dldF94KGNoaWxkKTsK
KyAgICAgICAgIGNoaWxkQm94LnkxID0gY2x1dHRlcl9hY3Rvcl9nZXRfeShjaGlsZCk7CisgICAg
ICAgICBjaGlsZEJveC54MiA9IGNoaWxkQm94LngxICsgY2hpbGRXaWR0aDsKKyAgICAgICAgIGNo
aWxkQm94LnkyID0gY2hpbGRCb3gueTEgKyBjaGlsZEhlaWdodDsKKworICAgICAgICAgY2x1dHRl
cl9hY3Rvcl9hbGxvY2F0ZShjaGlsZCwgJmNoaWxkQm94LCBmbGFncyk7CisgICAgfQorCisgICAg
cHJpdi0+YWxsb2NhdGluZyA9IEZBTFNFOworfQorCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVy
QWN0b3JBcHBseVRyYW5zZm9ybShDbHV0dGVyQWN0b3IqIGFjdG9yLCBDb2dsTWF0cml4KiBtYXRy
aXgpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IEdSQVBISUNTX0xB
WUVSX0FDVE9SKGFjdG9yKS0+cHJpdjsKKworICAgIC8vIEFwcGx5IHRyYW5zbGF0aW9uIGFuZCBz
Y3JvbGxpbmcgYXMgYSBzaW5nbGUgdHJhbnNsYXRpb24uIFRoZXNlCisgICAgLy8gbmVlZCB0byBj
b21lIGJlZm9yZSBhbnl0aGluZyBlbHNlLCBvdGhlcndpc2UgdGhleSdsbCBiZQorICAgIC8vIGFm
ZmVjdGVkIGJ5IG90aGVyIG9wZXJhdGlvbnMgc3VjaCBhcyBzY2FsaW5nLCB3aGljaCBpcyBub3Qg
d2hhdAorICAgIC8vIHdlIHdhbnQuCisgICAgZmxvYXQgdHJhbnNsYXRlWCA9IHByaXYtPnNjcm9s
bFggKyBwcml2LT50cmFuc2xhdGVYOworICAgIGZsb2F0IHRyYW5zbGF0ZVkgPSBwcml2LT5zY3Jv
bGxZICsgcHJpdi0+dHJhbnNsYXRlWTsKKworICAgIGlmICh0cmFuc2xhdGVYIHx8IHRyYW5zbGF0
ZVkpCisgICAgICAgIGNvZ2xfbWF0cml4X3RyYW5zbGF0ZShtYXRyaXgsIHRyYW5zbGF0ZVgsIHRy
YW5zbGF0ZVksIDApOworCisgICAgQ0xVVFRFUl9BQ1RPUl9DTEFTUyhncmFwaGljc19sYXllcl9h
Y3Rvcl9wYXJlbnRfY2xhc3MpLT5hcHBseV90cmFuc2Zvcm0oYWN0b3IsIG1hdHJpeCk7CisKKyAg
ICBnZmxvYXQgd2lkdGggPSBjbHV0dGVyX2FjdG9yX2dldF93aWR0aChhY3Rvcik7CisgICAgZ2Zs
b2F0IGhlaWdodCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X2hlaWdodChhY3Rvcik7CisgICAgaWYgKHdp
ZHRoIDw9IDEuMCB8fCBoZWlnaHQgPD0gMS4wKQorICAgICAgICByZXR1cm47CisKKyAgICBnZmxv
YXQgcGl2b3RYLCBwaXZvdFk7CisgICAgcGl2b3RYID0gd2lkdGggKiBwcml2LT5hbmNob3JYOwor
ICAgIHBpdm90WSA9IGhlaWdodCAqIHByaXYtPmFuY2hvclk7CisKKyAgICBpZiAocHJpdi0+bWF0
cml4KSB7CisgICAgICAgIENvZ2xNYXRyaXgqIGxvY2FsTWF0cml4OworICAgICAgICAvLyBDU1Mz
IHRyYW5mb3JtLXN0eWxlIGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSBmbHksIAorICAgICAgICAvLyBz
byB3ZSBoYXZlIHRvIGNvcHkgcHJpdi0+bWF0cml4IGluIG9yZGVyIHRvIHJlY292ZXIgei1heGlz
LiAKKyAgICAgICAgbG9jYWxNYXRyaXggPSBjb2dsX21hdHJpeF9jb3B5KHByaXYtPm1hdHJpeCk7
CisKKyAgICAgICAgY29nbF9tYXRyaXhfdHJhbnNsYXRlKG1hdHJpeCwgcGl2b3RYLCBwaXZvdFks
IHByaXYtPmFuY2hvclopOworICAgICAgICBjb2dsX21hdHJpeF9tdWx0aXBseShtYXRyaXgsIG1h
dHJpeCwgbG9jYWxNYXRyaXgpOworICAgICAgICBjb2dsX21hdHJpeF90cmFuc2xhdGUobWF0cml4
LCAtcGl2b3RYLCAtcGl2b3RZLCAtcHJpdi0+YW5jaG9yWik7CisgICAgICAgIGNvZ2xfbWF0cml4
X2ZyZWUobG9jYWxNYXRyaXgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXll
ckFjdG9yUGFpbnQoQ2x1dHRlckFjdG9yKiBhY3RvcikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0
b3IqIGdyYXBoaWNzTGF5ZXIgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihhY3Rvcik7CisgICAgR3Jh
cGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9y
KS0+cHJpdjsKKworICAgIC8vIFBhaW50IHRoZSB0ZXh0dXJlIGluIGNhc2Ugd2UgaGF2ZSBhIGJv
cmRlci4gVGhpcyB3aWxsIGJlIHRoZSBjYXNlIHdoZW4gZGVidWdnaW5nIGJvcmRlcnMKKyAgICAv
LyBhcmUgdHVybmVkIG9uIHRoYXQgd2Ugd2FudCB0byBzZWUuCisgICAgaWYgKHByaXYtPnRleHR1
cmUpCisgICAgICAgIGNsdXR0ZXJfYWN0b3JfcGFpbnQocHJpdi0+dGV4dHVyZSk7CisKKyAgICBH
TGlzdCogbGlzdDsKKyAgICBmb3IgKGxpc3QgPSBncmFwaGljc0xheWVyLT5jaGlsZHJlbjsgbGlz
dDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKKyAgICAgICAgIENsdXR0ZXJBY3RvciogY2hpbGQgPSBD
TFVUVEVSX0FDVE9SKGxpc3QtPmRhdGEpOworICAgICAgICAgY2x1dHRlcl9hY3Rvcl9wYWludChj
aGlsZCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JQaWNrKENs
dXR0ZXJBY3RvciogYWN0b3IsIGNvbnN0IENsdXR0ZXJDb2xvciogcGljaykKK3sKKyAgICBHcmFw
aGljc0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXIgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihhY3Rv
cik7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGdyYXBoaWNzTGF5ZXIt
PnByaXY7CisKKyAgICBDTFVUVEVSX0FDVE9SX0NMQVNTKGdyYXBoaWNzX2xheWVyX2FjdG9yX3Bh
cmVudF9jbGFzcyktPnBpY2soYWN0b3IsIHBpY2spOworCisgICAgaWYgKHByaXYtPnRleHR1cmUp
CisgICAgICAgIGNsdXR0ZXJfYWN0b3JfcGFpbnQocHJpdi0+dGV4dHVyZSk7CisKKyAgICBHTGlz
dCogbGlzdDsKKyAgICBmb3IgKGxpc3QgPSBncmFwaGljc0xheWVyLT5jaGlsZHJlbjsgbGlzdDsg
bGlzdCA9IGxpc3QtPm5leHQpIHsKKyAgICAgICAgIENsdXR0ZXJBY3RvciogY2hpbGQgPSBDTFVU
VEVSX0FDVE9SKGxpc3QtPmRhdGEpOworICAgICAgICAgY2x1dHRlcl9hY3Rvcl9wYWludChjaGls
ZCk7CisgICAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yRHJhdyhD
bHV0dGVyQ2Fpcm9UZXh0dXJlKiB0ZXh0dXJlLCBjYWlyb190KiBjciwgR3JhcGhpY3NMYXllckFj
dG9yKiBsYXllcikKK3sKKyAgICBDbHV0dGVyQWN0b3IqIGFjdG9yID0gQ0xVVFRFUl9BQ1RPUihs
YXllcik7CisgICAgZ2Zsb2F0IHdpZHRoID0gY2x1dHRlcl9hY3Rvcl9nZXRfd2lkdGgoYWN0b3Ip
OworICAgIGdmbG9hdCBoZWlnaHQgPSBjbHV0dGVyX2FjdG9yX2dldF9oZWlnaHQoYWN0b3IpOwor
CisgICAgaWYgKCF3aWR0aCB8fCAhaGVpZ2h0KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAg
ICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgR3Jh
cGhpY3NDb250ZXh0IGNvbnRleHQoY3IpOworCisgICAgY2x1dHRlcl9jYWlyb190ZXh0dXJlX2Ns
ZWFyKHRleHR1cmUpOworCisgICAgaWYgKHByaXYtPnN1cmZhY2UpIHsKKyAgICAgICAgaW50IHN1
cmZhY2VXaWR0aCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHByaXYtPnN1cmZhY2Uu
Z2V0KCkpOworICAgICAgICBpbnQgc3VyZmFjZUhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChwcml2LT5zdXJmYWNlLmdldCgpKTsKKworICAgICAgICBGbG9hdFJlY3Qgc3Jj
UmVjdCgwLjAsIDAuMCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN1cmZhY2VXaWR0aCksIHN0YXRpY19j
YXN0PGZsb2F0PihzdXJmYWNlSGVpZ2h0KSk7CisgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdCgw
LjAsIDAuMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0
KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KHByaXYtPnN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBz
cmNSZWN0LCAmY29udGV4dCk7CisgICAgfQorCisgICAgaWYgKHByaXYtPmxheWVyVHlwZSA9PSBH
cmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlV2ViTGF5ZXIpCisgICAgICAgIGdyYXBoaWNz
TGF5ZXJBY3RvckRyYXdMYXllckNvbnRlbnRzKGFjdG9yLCBjb250ZXh0KTsKKworICAgIHJldHVy
biBUUlVFOworfQorCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JBZGRlZChDbHV0dGVy
Q29udGFpbmVyKiBjb250YWluZXIsIENsdXR0ZXJBY3RvciogYWN0b3IsIGdwb2ludGVyIGRhdGEp
Cit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBncmFwaGljc0xheWVyID0gR1JBUEhJQ1NfTEFZ
RVJfQUNUT1IoY29udGFpbmVyKTsKKyAgICBncmFwaGljc0xheWVyLT5jaGlsZHJlbiA9IGdfbGlz
dF9hcHBlbmQoZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4sIGFjdG9yKTsKK30KKworc3RhdGljIHZv
aWQgZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlZChDbHV0dGVyQ29udGFpbmVyKiBjb250YWluZXIs
IENsdXR0ZXJBY3RvciogYWN0b3IsIGdwb2ludGVyIGRhdGEpCit7CisgICAgR3JhcGhpY3NMYXll
ckFjdG9yKiBncmFwaGljc0xheWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1IoY29udGFpbmVyKTsK
KyAgICBncmFwaGljc0xheWVyLT5jaGlsZHJlbiA9IGdfbGlzdF9yZW1vdmUoZ3JhcGhpY3NMYXll
ci0+Y2hpbGRyZW4sIGFjdG9yKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9y
VXBkYXRlVGV4dHVyZShHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQoreworICAgIEdyYXBoaWNz
TGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKyAgICBBU1NFUlQocHJpdi0+
bGF5ZXJUeXBlICE9IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGVWaWRlb0xheWVyKTsK
KworICAgIC8vIE5vdGhpbmcgbmVlZHMgYSB0ZXh0dXJlLCByZW1vdmUgdGhlIG9uZSB3ZSBoYXZl
LCBpZiBhbnkuCisgICAgaWYgKCFwcml2LT5kcmF3c0NvbnRlbnQgJiYgIXByaXYtPnN1cmZhY2Up
IHsKKyAgICAgICAgaWYgKCFwcml2LT50ZXh0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhwcml2LT50ZXh0dXJl
LCByZWludGVycHJldF9jYXN0PHZvaWQqPihncmFwaGljc0xheWVyQWN0b3JEcmF3KSwgbGF5ZXIp
OworICAgICAgICBjbHV0dGVyX2FjdG9yX3VucGFyZW50KHByaXYtPnRleHR1cmUpOworICAgICAg
ICBwcml2LT50ZXh0dXJlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdl
IG5lZWQgYSB0ZXh0dXJlLCBidXQgYWxyZWFkeSBoYXZlIG9uZSEKKyAgICBpZiAocHJpdi0+dGV4
dHVyZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gV2UgbmVlZCBhIHRleHR1cmUsIHNvIGNy
ZWF0ZSBpdC4KKyAgICBDbHV0dGVyQWN0b3IqIGFjdG9yID0gQ0xVVFRFUl9BQ1RPUihsYXllcik7
CisgICAgaW50IHdpZHRoID0gY2VpbGYoY2x1dHRlcl9hY3Rvcl9nZXRfd2lkdGgoYWN0b3IpKTsK
KyAgICBpbnQgaGVpZ2h0ID0gY2VpbGYoY2x1dHRlcl9hY3Rvcl9nZXRfaGVpZ2h0KGFjdG9yKSk7
CisKKyAgICBwcml2LT50ZXh0dXJlID0gQ0xVVFRFUl9BQ1RPUihnX29iamVjdF9uZXcoQ0xVVFRF
Ul9UWVBFX0NBSVJPX1RFWFRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJhdXRvLXJlc2l6ZSIsIFRSVUUsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJmYWNlLWhlaWdodCIsIHdpZHRoID4gMCA/IHdp
ZHRoIDogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
InN1cmZhY2Utd2lkdGgiLCBoZWlnaHQgPiAwID8gaGVpZ2h0IDogMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCkpOworCisgICAgY2x1dHRlcl9hY3Rv
cl9zZXRfcGFyZW50KHByaXYtPnRleHR1cmUsIGFjdG9yKTsKKworICAgIGdfc2lnbmFsX2Nvbm5l
Y3QocHJpdi0+dGV4dHVyZSwgImRyYXciLCBHX0NBTExCQUNLKGdyYXBoaWNzTGF5ZXJBY3RvckRy
YXcpLCBsYXllcik7Cit9CisKKy8vIERyYXcgY29udGVudCBpbnRvIHRoZSBsYXllci4KK3N0YXRp
YyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckRyYXdMYXllckNvbnRlbnRzKENsdXR0ZXJBY3Rvciog
YWN0b3IsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0
b3JQcml2YXRlKiBwcml2ID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1IoYWN0b3IpLT5wcml2OworCisg
ICAgaWYgKCFwcml2LT5kcmF3c0NvbnRlbnQgfHwgIXByaXYtPmxheWVyQ2xpZW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBnZmxvYXQgd2lkdGggPSBjbHV0dGVyX2FjdG9yX2dldF93aWR0aChh
Y3Rvcik7CisgICAgZ2Zsb2F0IGhlaWdodCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X2hlaWdodChhY3Rv
cik7CisgICAgSW50UmVjdCBjbGlwKDAsIDAsIHdpZHRoLCBoZWlnaHQpOworCisgICAgLy8gQXBw
bHkgdGhlIHBhaW50ZWQgY29udGVudCB0byB0aGUgbGF5ZXIuCisgICAgcHJpdi0+bGF5ZXJDbGll
bnQtPnBsYXRmb3JtQ2x1dHRlckxheWVyUGFpbnRDb250ZW50cyhjb250ZXh0LCBjbGlwKTsKK30K
KworCitHcmFwaGljc0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXJBY3Rvck5ldyhHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6TGF5ZXJUeXBlIHR5cGUpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBs
YXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGdfb2JqZWN0X25ldyhHUkFQSElDU19MQVlFUl9U
WVBFX0FDVE9SLCAwKSk7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxh
eWVyLT5wcml2OworCisgICAgcHJpdi0+bGF5ZXJUeXBlID0gdHlwZTsKKworICAgIC8vIEZvciB2
aWRlbyBsYXllcnMgd2UgZG9uJ3Qgd2FudCB0aGUgY2Fpcm8gdGV4dHVyZSwgYnV0IGEgcmVndWxh
ciBvbmUuCisgICAgaWYgKHByaXYtPmxheWVyVHlwZSA9PSBHcmFwaGljc0xheWVyQ2x1dHRlcjo6
TGF5ZXJUeXBlVmlkZW9MYXllcikgeworICAgICAgICBwcml2LT50ZXh0dXJlID0gY2x1dHRlcl90
ZXh0dXJlX25ldygpOworICAgICAgICBjbHV0dGVyX2FjdG9yX3NldF9wYXJlbnQocHJpdi0+dGV4
dHVyZSwgQ0xVVFRFUl9BQ1RPUihsYXllcikpOworICAgIH0KKworICAgIHJldHVybiBsYXllcjsK
K30KKworR3JhcGhpY3NMYXllckFjdG9yKiBncmFwaGljc0xheWVyQWN0b3JOZXdXaXRoQ2xpZW50
KEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUgdHlwZSwgUGxhdGZvcm1DbHV0dGVyTGF5
ZXJDbGllbnQqIGxheWVyQ2xpZW50KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIg
PSBncmFwaGljc0xheWVyQWN0b3JOZXcodHlwZSk7CisgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0
Q2xpZW50KGxheWVyLCBsYXllckNsaWVudCk7CisKKyAgICByZXR1cm4gbGF5ZXI7Cit9CisKK3Zv
aWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0Q2xpZW50KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIs
IFBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbGF5ZXItPnByaXYt
PmxheWVyQ2xpZW50ID0gY2xpZW50OworfQorCitQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCog
Z3JhcGhpY3NMYXllckFjdG9yR2V0Q2xpZW50KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7
CisgICAgcmV0dXJuIGxheWVyLT5wcml2LT5sYXllckNsaWVudDsKK30KKworLyogCisgKiBwdWJs
aWMgQVBJCisgKi8KK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlQWxsKEdyYXBoaWNzTGF5
ZXJBY3RvciogbGF5ZXIpCit7CisgICAgZ19yZXR1cm5faWZfZmFpbChHUkFQSElDU19MQVlFUl9J
U19BQ1RPUihsYXllcikpOworCisgICAgR0xpc3QqIGNoaWxkcmVuID0gY2x1dHRlcl9hY3Rvcl9n
ZXRfY2hpbGRyZW4oQ0xVVFRFUl9BQ1RPUihsYXllcikpOworICAgIGZvciAoOyBjaGlsZHJlbjsg
Y2hpbGRyZW4gPSBjaGlsZHJlbi0+bmV4dCkgeworICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8g
cmVtb3ZlIHN1YmxheWVycywgbm90IG91ciBvd24gY29tcG9zaXRlIGFjdG9ycy4KKyAgICAgICAg
aWYgKGNoaWxkcmVuLT5kYXRhID09IGxheWVyLT5wcml2LT50ZXh0dXJlKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgY2x1dHRlcl9hY3Rvcl9yZW1vdmVfY2hpbGQoQ0xVVFRFUl9B
Q1RPUihsYXllciksIENMVVRURVJfQUNUT1IoY2hpbGRyZW4tPmRhdGEpKTsKKyAgICB9Cit9CisK
K2NhaXJvX3N1cmZhY2VfdCogZ3JhcGhpY3NMYXllckFjdG9yR2V0U3VyZmFjZShHcmFwaGljc0xh
eWVyQWN0b3IqIGxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYg
PSBsYXllci0+cHJpdjsKKyAgICBpZiAoIXByaXYtPnN1cmZhY2UpCisgICAgICAgIGdfbWVzc2Fn
ZSgic3VyZmFjZSBpcyBudWxsIik7CisKKyAgICByZXR1cm4gcHJpdi0+c3VyZmFjZS5nZXQoKTsK
K30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRTdXJmYWNlKEdyYXBoaWNzTGF5ZXJBY3Rv
ciogbGF5ZXIsIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBHcmFwaGljc0xheWVy
QWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgcHJpdi0+c3VyZmFjZSA9IHN1
cmZhY2U7CisgICAgZ3JhcGhpY3NMYXllckFjdG9yVXBkYXRlVGV4dHVyZShsYXllcik7Cit9CisK
K3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9ySW52YWxpZGF0ZVJlY3RhbmdsZShHcmFwaGljc0xheWVy
QWN0b3IqIGxheWVyLCBjb25zdCBGbG9hdFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBHcmFwaGlj
c0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisKKyAgICBpZiAoIXByaXYt
PnRleHR1cmUpCisgICAgICAgIHJldHVybjsKKworICAgIGNhaXJvX3JlY3RhbmdsZV9pbnRfdCBy
ZWN0KGVuY2xvc2luZ0ludFJlY3QoZGlydHlSZWN0KSk7CisgICAgY2x1dHRlcl9jYWlyb190ZXh0
dXJlX2ludmFsaWRhdGVfcmVjdGFuZ2xlKENMVVRURVJfQ0FJUk9fVEVYVFVSRShwcml2LT50ZXh0
dXJlKSwgJnJlY3QpOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zZm9ybShH
cmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBjb25zdCBDb2dsTWF0cml4KiBtYXRyaXgpIAorewor
ICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKworCisg
ICAgaWYgKHByaXYtPm1hdHJpeCkgeworICAgICAgICBjb2dsX21hdHJpeF9mcmVlKHByaXYtPm1h
dHJpeCk7CisgICAgICAgIHByaXYtPm1hdHJpeCA9IDA7CisgICAgICAgIGNsdXR0ZXJfYWN0b3Jf
cXVldWVfcmVkcmF3KENMVVRURVJfQUNUT1IobGF5ZXIpKTsKKyAgICB9CisKKyAgICBDb2dsTWF0
cml4IGlkZW50aXR5OworICAgIGNvZ2xfbWF0cml4X2luaXRfaWRlbnRpdHkoJmlkZW50aXR5KTsK
KyAgICBpZiAoY29nbF9tYXRyaXhfZXF1YWwoKENvZ2xNYXRyaXgqKSZpZGVudGl0eSwgKENvZ2xN
YXRyaXgqKW1hdHJpeCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChwcml2LT5tYXRyaXgp
CisgICAgICAgIGNvZ2xfbWF0cml4X2ZyZWUocHJpdi0+bWF0cml4KTsKKworICAgIHByaXYtPm1h
dHJpeCA9IGNvZ2xfbWF0cml4X2NvcHkobWF0cml4KTsKKyAgICBjbHV0dGVyX2FjdG9yX3F1ZXVl
X3JlZHJhdyhDTFVUVEVSX0FDVE9SKGxheWVyKSk7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFj
dG9yU2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgZ2Zsb2F0IHgsIGdm
bG9hdCB5LCBnZmxvYXQgeikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2
ID0gbGF5ZXItPnByaXY7CisKKyAgICBwcml2LT5hbmNob3JYID0geDsKKyAgICBwcml2LT5hbmNo
b3JZID0geTsKKyAgICBwcml2LT5hbmNob3JaID0gejsKKworICAgIENsdXR0ZXJBY3RvciogYWN0
b3IgPSBDTFVUVEVSX0FDVE9SKGxheWVyKTsKKworICAgIGZsb2F0IHdpZHRoLCBoZWlnaHQ7Cisg
ICAgY2x1dHRlcl9hY3Rvcl9nZXRfc2l6ZShhY3RvciwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBj
bHV0dGVyX2FjdG9yX3NldF9hbmNob3JfcG9pbnQoYWN0b3IsIHdpZHRoICogcHJpdi0+YW5jaG9y
WCwgaGVpZ2h0ICogcHJpdi0+YW5jaG9yWSk7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9y
R2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgZ2Zsb2F0KiB4LCBnZmxv
YXQqIHksIGdmbG9hdCogeikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2
ID0gbGF5ZXItPnByaXY7CisgICAgaWYgKHgpCisgICAgICAgICp4ID0gcHJpdi0+YW5jaG9yWDsK
KworICAgIGlmICh5KQorICAgICAgICAqeSA9IHByaXYtPmFuY2hvclk7CisKKyAgICBpZiAoeikK
KyAgICAgICAgKnogPSBwcml2LT5hbmNob3JaOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rv
clNldFNjcm9sbFBvc2l0aW9uKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGdmbG9hdCB4LCBn
ZmxvYXQgeSkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXIt
PnByaXY7CisKKyAgICBpZiAoeCA+IDAgfHwgeSA+IDApCisgICAgICAgIHJldHVybjsKKworICAg
IHByaXYtPnNjcm9sbFggPSB4OworICAgIHByaXYtPnNjcm9sbFkgPSB5OworCisgICAgY2x1dHRl
cl9hY3Rvcl9xdWV1ZV9yZWRyYXcoQ0xVVFRFUl9BQ1RPUihsYXllcikpOworfQorCitnaW50IGdy
YXBoaWNzTGF5ZXJBY3RvckdldG5DaGlsZHJlbihHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQor
eworICAgIEFTU0VSVChHUkFQSElDU19MQVlFUl9JU19BQ1RPUihsYXllcikpOworCisgICAgcmV0
dXJuIGdfbGlzdF9sZW5ndGgobGF5ZXItPmNoaWxkcmVuKTsKK30KKwordm9pZCBncmFwaGljc0xh
eWVyQWN0b3JSZXBsYWNlU3VibGF5ZXIoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgQ2x1dHRl
ckFjdG9yKiBvbGRDaGlsZExheWVyLCBDbHV0dGVyQWN0b3IqIG5ld0NoaWxkTGF5ZXIpCit7Cisg
ICAgQVNTRVJUKEdSQVBISUNTX0xBWUVSX0lTX0FDVE9SKGxheWVyKSk7CisgICAgQVNTRVJUKENM
VVRURVJfSVNfQUNUT1Iob2xkQ2hpbGRMYXllcikpOworICAgIEFTU0VSVChDTFVUVEVSX0lTX0FD
VE9SKG5ld0NoaWxkTGF5ZXIpKTsKKworICAgIGNsdXR0ZXJfYWN0b3JfcmVtb3ZlX2NoaWxkKENM
VVRURVJfQUNUT1IobGF5ZXIpLCBvbGRDaGlsZExheWVyKTsKKyAgICBjbHV0dGVyX2FjdG9yX2Fk
ZF9jaGlsZChDTFVUVEVSX0FDVE9SKGxheWVyKSwgbmV3Q2hpbGRMYXllcik7Cit9CisKK3ZvaWQg
Z3JhcGhpY3NMYXllckFjdG9ySW5zZXJ0U3VibGF5ZXIoR3JhcGhpY3NMYXllckFjdG9yKiBsYXll
ciwgQ2x1dHRlckFjdG9yKiBjaGlsZExheWVyLCBnaW50IGluZGV4KQoreworICAgIEFTU0VSVChH
UkFQSElDU19MQVlFUl9JU19BQ1RPUihsYXllcikpOworICAgIEFTU0VSVChDTFVUVEVSX0lTX0FD
VE9SKGNoaWxkTGF5ZXIpKTsKKworICAgIGdfb2JqZWN0X3JlZihjaGlsZExheWVyKTsKKworICAg
IGxheWVyLT5jaGlsZHJlbiA9IGdfbGlzdF9pbnNlcnQobGF5ZXItPmNoaWxkcmVuLCBjaGlsZExh
eWVyLCBpbmRleCk7CisgICAgQVNTRVJUKCFjbHV0dGVyX2FjdG9yX2dldF9wYXJlbnQoY2hpbGRM
YXllcikpOworICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3BhcmVudChjaGlsZExheWVyLCBDTFVUVEVS
X0FDVE9SKGxheWVyKSk7CisgICAgY2x1dHRlcl9hY3Rvcl9xdWV1ZV9yZWxheW91dChDTFVUVEVS
X0FDVE9SKGxheWVyKSk7CisKKyAgICBnX29iamVjdF91bnJlZihjaGlsZExheWVyKTsKK30KKwor
dm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRTdWJsYXllcnMoR3JhcGhpY3NMYXllckFjdG9yKiBs
YXllciwgR3JhcGhpY3NMYXllckFjdG9yTGlzdCYgc3ViTGF5ZXJzKQoreworICAgIGlmICghc3Vi
TGF5ZXJzLnNpemUoKSkgeworICAgICAgICBncmFwaGljc0xheWVyQWN0b3JSZW1vdmVBbGwobGF5
ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBzdWJMYXllcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQ2x1dHRlckFjdG9yKiBsYXllckFj
dG9yID0gQ0xVVFRFUl9BQ1RPUihzdWJMYXllcnNbaV0uZ2V0KCkpOworICAgICAgICBjbHV0dGVy
X2NvbnRhaW5lcl9hZGRfYWN0b3IoQ0xVVFRFUl9DT05UQUlORVIobGF5ZXIpLCBsYXllckFjdG9y
KTsKKyAgICB9Cit9CisKK0dyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUgZ3JhcGhpY3NM
YXllckFjdG9yR2V0TGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAg
R3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIHJldHVy
biBwcml2LT5sYXllclR5cGU7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0TGF5ZXJU
eXBlKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXll
clR5cGUgbGF5ZXJUeXBlKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYg
PSBsYXllci0+cHJpdjsKKyAgICBwcml2LT5sYXllclR5cGUgPSBsYXllclR5cGU7Cit9CisKK3Zv
aWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWChHcmFwaGljc0xheWVyQWN0b3IqIGxh
eWVyLCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2
ID0gbGF5ZXItPnByaXY7CisgICAgcHJpdi0+dHJhbnNsYXRlWCA9IHZhbHVlOworICAgIGNsdXR0
ZXJfYWN0b3JfcXVldWVfcmVkcmF3KENMVVRURVJfQUNUT1IobGF5ZXIpKTsKK30KKworZmxvYXQg
Z3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVy
KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsK
KyAgICByZXR1cm4gcHJpdi0+dHJhbnNsYXRlWDsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0
b3JTZXRUcmFuc2xhdGVZKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGZsb2F0IHZhbHVlKQor
eworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKyAg
ICBwcml2LT50cmFuc2xhdGVZID0gdmFsdWU7CisgICAgY2x1dHRlcl9hY3Rvcl9xdWV1ZV9yZWRy
YXcoQ0xVVFRFUl9BQ1RPUihsYXllcikpOworfQorCitmbG9hdCBncmFwaGljc0xheWVyQWN0b3JH
ZXRUcmFuc2xhdGVZKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NM
YXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIHJldHVybiBwcml2LT50
cmFuc2xhdGVZOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldERyYXdzQ29udGVudChH
cmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBnYm9vbGVhbiBkcmF3c0NvbnRlbnQpCit7CisgICAg
R3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgaWYg
KGRyYXdzQ29udGVudCA9PSBwcml2LT5kcmF3c0NvbnRlbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIHByaXYtPmRyYXdzQ29udGVudCA9IGRyYXdzQ29udGVudDsKKworICAgIGdyYXBoaWNzTGF5
ZXJBY3RvclVwZGF0ZVRleHR1cmUobGF5ZXIpOworfQorCitnYm9vbGVhbiBncmFwaGljc0xheWVy
QWN0b3JHZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBy
ZXR1cm4gbGF5ZXItPnByaXYtPmRyYXdzQ29udGVudDsKK30KKworI2VuZGlmIC8vIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0ZDdkYzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5o
CkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IDIwMTEsMjAxMiBDb2xsYWJvcmEg
TGltaXRlZAorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMg
YW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwK
KyAqIHZlcnNpb24gMi4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQg
d2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorICogV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUworICog
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBHcmFwaGlj
c0xheWVyQWN0b3JfaCAKKyNkZWZpbmUgR3JhcGhpY3NMYXllckFjdG9yX2ggCisKKyNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2x1dHRl
ci5oIgorI2luY2x1ZGUgPGNsdXR0ZXIvY2x1dHRlci5oPgorI2luY2x1ZGUgPGNvZ2wvY29nbC5o
PgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBH
UkFQSElDU19MQVlFUl9UWVBFX0FDVE9SIGdyYXBoaWNzX2xheWVyX2FjdG9yX2dldF90eXBlKCkK
KworI2RlZmluZSBHUkFQSElDU19MQVlFUl9BQ1RPUihvYmopIFwKKyAgICAoR19UWVBFX0NIRUNL
X0lOU1RBTkNFX0NBU1QoKG9iaiksIFwKKyAgICBHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SLCBH
cmFwaGljc0xheWVyQWN0b3IpKQorCisjZGVmaW5lIEdSQVBISUNTX0xBWUVSX0FDVE9SX0NMQVNT
KGtsYXNzKSBcCisgICAgKEdfVFlQRV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIFwKKyAgICBH
UkFQSElDU19MQVlFUl9UWVBFX0FDVE9SLCBHcmFwaGljc0xheWVyQWN0b3JDbGFzcykpCisKKyNk
ZWZpbmUgR1JBUEhJQ1NfTEFZRVJfSVNfQUNUT1Iob2JqKSBcCisgICAgKEdfVFlQRV9DSEVDS19J
TlNUQU5DRV9UWVBFKChvYmopLCBcCisgICAgR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUikpCisK
KyNkZWZpbmUgR1JBUEhJQ1NfTEFZRVJfSVNfQUNUT1JfQ0xBU1Moa2xhc3MpIFwKKyAgICAoR19U
WVBFX0NIRUNLX0NMQVNTX1RZUEUoKGtsYXNzKSwgXAorICAgIEdSQVBISUNTX0xBWUVSX1RZUEVf
QUNUT1IpKQorCisjZGVmaW5lIEdSQVBISUNTX0xBWUVSX0FDVE9SX0dFVF9DTEFTUyhvYmopIFwK
KyAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgXAorICAgIEdSQVBISUNTX0xB
WUVSX1RZUEVfQUNUT1IsIEdyYXBoaWNzTGF5ZXJBY3RvckNsYXNzKSkKKwordHlwZWRlZiBzdHJ1
Y3QgX0dyYXBoaWNzTGF5ZXJBY3RvciBHcmFwaGljc0xheWVyQWN0b3I7Cit0eXBlZGVmIHN0cnVj
dCBfR3JhcGhpY3NMYXllckFjdG9yQ2xhc3MgR3JhcGhpY3NMYXllckFjdG9yQ2xhc3M7Cit0eXBl
ZGVmIHN0cnVjdCBfR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSBHcmFwaGljc0xheWVyQWN0b3JQ
cml2YXRlOworCisvKioKKyAqIEdyYXBoaWNzTGF5ZXJBY3RvcjoKKyAqCisgKiBUaGUgY29udGVu
dHMgb2YgdGhpcyBzdHJ1Y3R1cmUgYXJlIHByaXZhdGUgYW5kIHNob3VsZCBvbmx5IGJlIGFjY2Vz
c2VkCisgKiB0aHJvdWdoIHRoZSBwdWJsaWMgQVBJLgorICovCitzdHJ1Y3QgX0dyYXBoaWNzTGF5
ZXJBY3RvciB7CisgICAgQ2x1dHRlclJlY3RhbmdsZSBwYXJlbnQ7CisgICAgR3JhcGhpY3NMYXll
ckFjdG9yUHJpdmF0ZSAqcHJpdjsKKyAgICBHTGlzdCAqY2hpbGRyZW47Cit9OworCitzdHJ1Y3Qg
X0dyYXBoaWNzTGF5ZXJBY3RvckNsYXNzIHsKKyAgICBDbHV0dGVyUmVjdGFuZ2xlQ2xhc3MgcGFy
ZW50X2NsYXNzOworCisgICAgLyogcGFkZGluZyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworICAg
IHZvaWQgKCpfcGFkZGluZ18wKSh2b2lkKTsKKyAgICB2b2lkICgqX3BhZGRpbmdfMSkodm9pZCk7
CisgICAgdm9pZCAoKl9wYWRkaW5nXzIpKHZvaWQpOworICAgIHZvaWQgKCpfcGFkZGluZ18zKSh2
b2lkKTsKKyAgICB2b2lkICgqX3BhZGRpbmdfNCkodm9pZCk7Cit9OworCitHVHlwZSBncmFwaGlj
c19sYXllcl9hY3Rvcl9nZXRfdHlwZSh2b2lkKSBHX0dOVUNfQ09OU1Q7CisKK0dyYXBoaWNzTGF5
ZXJBY3RvciogZ3JhcGhpY3NMYXllckFjdG9yTmV3KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0
dGVyOjpMYXllclR5cGUpOworR3JhcGhpY3NMYXllckFjdG9yKiBncmFwaGljc0xheWVyQWN0b3JO
ZXdXaXRoQ2xpZW50KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUsIFdl
YkNvcmU6OlBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50Kik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJB
Y3RvclNldENsaWVudChHcmFwaGljc0xheWVyQWN0b3IqLCBXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0
ZXJMYXllckNsaWVudCopOworV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqIGdy
YXBoaWNzTGF5ZXJBY3RvckdldENsaWVudChHcmFwaGljc0xheWVyQWN0b3IqKTsKK3ZvaWQgZ3Jh
cGhpY3NMYXllckFjdG9yUmVtb3ZlQWxsKEdyYXBoaWNzTGF5ZXJBY3RvciopOworY2Fpcm9fc3Vy
ZmFjZV90KiBncmFwaGljc0xheWVyQWN0b3JHZXRTdXJmYWNlKEdyYXBoaWNzTGF5ZXJBY3Rvciop
Owordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRTdXJmYWNlKEdyYXBoaWNzTGF5ZXJBY3Rvcios
IGNhaXJvX3N1cmZhY2VfdCopOwordm9pZCBncmFwaGljc0xheWVyQWN0b3JJbnZhbGlkYXRlUmVj
dGFuZ2xlKEdyYXBoaWNzTGF5ZXJBY3RvciosIGNvbnN0IFdlYkNvcmU6OkZsb2F0UmVjdCYpOwor
dm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2Zvcm0oR3JhcGhpY3NMYXllckFjdG9yKiwg
Y29uc3QgQ29nbE1hdHJpeCopOwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRBbmNob3JQb2lu
dChHcmFwaGljc0xheWVyQWN0b3IqLCBnZmxvYXQsIGdmbG9hdCwgZ2Zsb2F0KTsKK3ZvaWQgZ3Jh
cGhpY3NMYXllckFjdG9yR2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NMYXllckFjdG9yKiwgZ2Zsb2F0
KiwgZ2Zsb2F0KiwgZ2Zsb2F0Kik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFNjcm9sbFBv
c2l0aW9uKEdyYXBoaWNzTGF5ZXJBY3RvciosIGdmbG9hdCwgZ2Zsb2F0KTsgCit2b2lkIGdyYXBo
aWNzTGF5ZXJBY3RvclNldFRyYW5zbGF0ZVgoR3JhcGhpY3NMYXllckFjdG9yKiwgZmxvYXQpOwor
ZmxvYXQgZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWChHcmFwaGljc0xheWVyQWN0b3Iq
KTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWShHcmFwaGljc0xheWVyQWN0
b3IqLCBmbG9hdCk7CitmbG9hdCBncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVZKEdyYXBo
aWNzTGF5ZXJBY3RvciopOworZ2ludCBncmFwaGljc0xheWVyQWN0b3JHZXRuQ2hpbGRyZW4oR3Jh
cGhpY3NMYXllckFjdG9yKik7CitXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJU
eXBlIGdyYXBoaWNzTGF5ZXJBY3RvckdldExheWVyVHlwZShHcmFwaGljc0xheWVyQWN0b3IqKTsK
K3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0TGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXJBY3Rvcios
IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUpOwordm9pZCBncmFwaGlj
c0xheWVyQWN0b3JTZXRTdWJsYXllcnMoR3JhcGhpY3NMYXllckFjdG9yKiwgV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckFjdG9yTGlzdCYpOworZ2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yR2V0RHJh
d3NDb250ZW50KEdyYXBoaWNzTGF5ZXJBY3RvciopOwordm9pZCBncmFwaGljc0xheWVyQWN0b3JT
ZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9yKiwgZ2Jvb2xlYW4gZHJhd3NDb250ZW50
KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElO
RykKKworI2VuZGlmIC8qIEdyYXBoaWNzTGF5ZXJBY3Rvcl9oICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>156700</attachid>
            <date>2012-08-06 08:42:41 -0700</date>
            <delta_ts>2012-09-25 07:23:19 -0700</delta_ts>
            <desc>Patch that adds GraphicsLayerActor and uses it in GraphicsLayerClutter</desc>
            <filename>webkit-add-grGraphicsLayerActor.patch</filename>
            <type>text/plain</type>
            <size>72298</size>
            <attacher name="Rodrigo Moya">rodrigo</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUuYW0KaW5kZXggNTg3MWM2Yi4uNjBjNjhiZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUuYW0KQEAgLTEwMjgsNiArMTAyOCw4IEBAIGxpYldlYkNvcmVHdGtfbGFfQ1BQRkxBR1MgPSBc
CiAJJChqYXZhc2NyaXB0Y29yZV9jcHBmbGFncykgXAogCS1mbm8tc3RyaWN0LWFsaWFzaW5nIFwK
IAkkKEhJTERPTl9DUFBGTEFHUykgXAorCSQoQ0FJUk9fQ0ZMQUdTKSBcCisJJChDTFVUVEVSX0NG
TEFHUykgXAogCSQoQ09WRVJBR0VfQ0ZMQUdTKSBcCiAJJChFTkNIQU5UX0NGTEFHUykgXAogCSQo
R0FJTF9DRkxBR1MpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxp
c3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDdjZmVjZDku
Ljg4OGM0MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0K
KysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjE3Myw4ICs2MTcz
LDExIEBAIGlmIFVTRV9DTFVUVEVSCiB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NsdXR0ZXIvR1JlZlB0ckNsdXR0ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jbHV0dGVyL0dSZWZQdHJDbHV0dGVyLmggXAorCVNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcCBcCisJU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuaCBc
CiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVy
Q2x1dHRlci5jcHAgXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIv
R3JhcGhpY3NMYXllckNsdXR0ZXIuaAorCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2x1dHRlci9QbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudC5oCiBlbmRpZiAg
IyBFTkQgVVNFX0NMVVRURVIKIAogaWYgVVNFX1RFWFRVUkVfTUFQUEVSX0NBSVJPCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jbHV0dGVyL0dSZWZQdHJDbHV0dGVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NsdXR0ZXIvR1JlZlB0ckNsdXR0ZXIuY3BwCmluZGV4
IDJhMzQxODYuLjBkOWE4Y2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Ns
dXR0ZXIvR1JlZlB0ckNsdXR0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Ns
dXR0ZXIvR1JlZlB0ckNsdXR0ZXIuY3BwCkBAIC01MCw0ICs1MCwzMCBAQCB0ZW1wbGF0ZSA8PiB2
b2lkIGRlcmVmR1B0cjxDbHV0dGVyQWN0b3I+KENsdXR0ZXJBY3RvciogcHRyKQogICAgICAgICBn
X29iamVjdF91bnJlZihwdHIpOwogfQogCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdyYXBoaWNzTGF5
ZXJBY3Rvcj4gYWRvcHRHUmVmKEdyYXBoaWNzTGF5ZXJBY3RvciogcHRyKQoreworICAgIGlmIChn
X29iamVjdF9pc19mbG9hdGluZyhwdHIpKQorICAgICAgICBnX29iamVjdF9yZWZfc2luayhwdHIp
OworCisgICAgcmV0dXJuIEdSZWZQdHI8R3JhcGhpY3NMYXllckFjdG9yPihwdHIsIEdSZWZQdHJB
ZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdyYXBoaWNzTGF5ZXJBY3RvciogcmVmR1B0cjxHcmFw
aGljc0xheWVyQWN0b3I+KEdyYXBoaWNzTGF5ZXJBY3RvciogcHRyKQoreworICAgIGlmIChwdHIp
IHsKKyAgICAgICAgaWYgKGdfb2JqZWN0X2lzX2Zsb2F0aW5nKHB0cikpCisgICAgICAgICAgICBn
X29iamVjdF9yZWZfc2luayhwdHIpOworCisgICAgICAgIGdfb2JqZWN0X3JlZihwdHIpOworICAg
IH0KKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdy
YXBoaWNzTGF5ZXJBY3Rvcj4oR3JhcGhpY3NMYXllckFjdG9yKiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHRyKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2x1dHRlci9HUmVmUHRyQ2x1dHRlci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2x1dHRlci9HUmVmUHRyQ2x1dHRlci5oCmluZGV4IGJkZWM2NTQuLjM1
ZmY4OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NsdXR0ZXIvR1JlZlB0
ckNsdXR0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jbHV0dGVyL0dSZWZQdHJD
bHV0dGVyLmgKQEAgLTIzLDEyICsyMywxNiBAQAogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0L0dSZWZQ
dHIuaD4KIAogdHlwZWRlZiBzdHJ1Y3QgX0NsdXR0ZXJBY3RvciBDbHV0dGVyQWN0b3I7Cit0eXBl
ZGVmIHN0cnVjdCBfR3JhcGhpY3NMYXllckFjdG9yIEdyYXBoaWNzTGF5ZXJBY3RvcjsKIAogbmFt
ZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gQ2x1dHRlckFjdG9yKiByZWZHUHRyPENsdXR0ZXJB
Y3Rvcj4oQ2x1dHRlckFjdG9yKiBwdHIpOwogdGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxDbHV0
dGVyQWN0b3I+KENsdXR0ZXJBY3RvciogcHRyKTsKIAordGVtcGxhdGU8PiBHcmFwaGljc0xheWVy
QWN0b3IqIHJlZkdQdHI8R3JhcGhpY3NMYXllckFjdG9yPihHcmFwaGljc0xheWVyQWN0b3IqIHB0
cik7Cit0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPEdyYXBoaWNzTGF5ZXJBY3Rvcj4oR3JhcGhp
Y3NMYXllckFjdG9yKiBwdHIpOworCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0
b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYjQwMWMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzTGF5ZXJBY3Rvci5jcHAKQEAgLTAsMCArMSwxNTM3IEBACisvKgorICogQ29weXJpZ2h0
IDIwMTEgQ29sbGFib3JhIExpbWl0ZWQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIg
dGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkKKyAqIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyAqIEluYy4sIDUxIEZyYW5rbGluIFN0IC0g
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKyNpbmNs
dWRlICJHcmFwaGljc0xheWVyQWN0b3IuaCIKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbHV0dGVyLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorCisjaWZuZGVm
IE5ERUJVRworI2luY2x1ZGUgPGdsaWIvZ3ByaW50Zi5oPgorI2VuZGlmCisKK3VzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOworCitHX0RFRklORV9UWVBFKEdyYXBoaWNzTGF5ZXJBY3RvciwgZ3JhcGhp
Y3NfbGF5ZXJfYWN0b3IsIENMVVRURVJfVFlQRV9SRUNUQU5HTEUpCisKKyNkZWZpbmUgR1JBUEhJ
Q1NfTEFZRVJfQUNUT1JfR0VUX1BSSVZBVEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklW
QVRFKChvYmopLCBHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SLCBHcmFwaGljc0xheWVyQWN0b3JQ
cml2YXRlKSkKKworI2lmbmRlZiBOREVCVUcKKyNkZWZpbmUgbWF0cml4VG9TdHJpbmcobWF0cml4
KSBnX3N0cmR1cF9wcmludGYoInh4LHh5LHh6LHh3PSVmLCVmLCVmLCVmXG4iIFwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInl4LHl5LHl6LHl3PSVmLCVm
LCVmLCVmXG4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInp4LHp5LHp6LHp3PSVmLCVmLCVmLCVmXG4iIFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInd4LHd5LHd6LHd3PSVmLCVmLCVmLCVmXG4iLCBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeC0+eHgs
IG1hdHJpeC0+eHksIG1hdHJpeC0+eHosIG1hdHJpeC0+eHcsIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4LT55eCwgbWF0cml4LT55eSwgbWF0
cml4LT55eiwgbWF0cml4LT55dywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtYXRyaXgtPnp4LCBtYXRyaXgtPnp5LCBtYXRyaXgtPnp6LCBtYXRyaXgt
Pnp3LCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dHJpeC0+d3gsIG1hdHJpeC0+d3ksIG1hdHJpeC0+d3osIG1hdHJpeC0+d3cpCisjZWxzZQorI2Rl
ZmluZSBtYXRyaXhUb1N0cmluZyhtYXRyaXgpIG1hdHJpeAorI2VuZGlmCisKK3N0YXRpYyB2b2lk
IGdyYXBoaWNzTGF5ZXJBY3RvclNldE1hdHJpeEFycmF5KEdyYXBoaWNzTGF5ZXJBY3RvciosIGdp
bnQgaW5kZXgsIGdmbG9hdCk7CitzdGF0aWMgdm9pZCBjcmVhdGVPZmZTY3JlZW5GcmFtZUJ1ZmZl
cihHcmFwaGljc0xheWVyQWN0b3IqLCBjb25zdCBDb2dsTWF0cml4Kik7CisKK3N0cnVjdCBfR3Jh
cGhpY3NMYXllckFjdG9yUHJpdmF0ZSB7CisgICAgR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVy
VHlwZSBsYXllclR5cGU7CisgICAgLy8gR3VhcmQgYWdhaW5zdCBjaGFuZ2luZyBzaXplIHdoaWxl
IGFsbG9jYXRpbmcuCisgICAgZ2Jvb2xlYW4gYWxsb2NhdGluZzsKKworICAgIC8qIENoaWxkcmVu
ICovCisgICAgQ2x1dHRlckFjdG9yKiB0ZXh0dXJlOworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNl
X3Q+IHN1cmZhY2U7CisgICAgQ29nbE1hdHJpeCogbWF0cml4OworICAgIGNvbnN0IENvZ2xNYXRy
aXgqIHBlcnNwZWN0aXZlTWF0cml4OworICAgIENvZ2xNYXRyaXgqIGNoaWxkcmVuTWF0cml4Owor
CisgICAgUGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqIGxheWVyQ2xpZW50OworCisgICAgZ2Jv
b2xlYW4gZHJhd3NDb250ZW50OworICAgIGdib29sZWFuIG1hc2tzVG9Cb3VuZHM7CisKKyAgICBn
ZmxvYXQgYW5jaG9yWDsKKyAgICBnZmxvYXQgYW5jaG9yWTsKKyAgICBnZmxvYXQgYW5jaG9yWjsK
KworICAgIGdmbG9hdCBzY3JvbGxYOworICAgIGdmbG9hdCBzY3JvbGxZOworCisgICAgZmxvYXQg
dHJhbnNsYXRlWDsKKyAgICBmbG9hdCB0cmFuc2xhdGVZOworCisgICAgZmxvYXQgZGVwdGg7Cisg
ICAgZ2Jvb2xlYW4gc29ydEJ5RGVwdGg7CisKKyAgICBnYm9vbGVhbiBiYWNrZmFjZUN1bGxpbmc7
CisgICAgZ2Jvb2xlYW4gcHJlc2VydmVzM0Q7CisgICAgZ2Jvb2xlYW4gZmxhdHRlbk1hdHJpeDsK
KyAgICBnYm9vbGVhbiBhbmltYXRlZDsKKworICAgIGdmbG9hdCBtYXRyaXhBcnJheVsxNl07CisK
KyAgICBnYm9vbGVhbiBvZmZzY3JlZW47CisgICAgQ29nbEhhbmRsZSB0ZXh0dXJlSUQ7CisgICAg
Q29nbEhhbmRsZSBvZmZzY3JlZW5JRDsKKyAgICBnZmxvYXQgZXhwYW5kWDsKKyAgICBnZmxvYXQg
ZXhwYW5kWTsKKyAgICBnZmxvYXQgZmJvV2lkdGg7CisgICAgZ2Zsb2F0IGZib0hlaWdodDsKKwor
fTsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJPUF9ET1VCTEVfU0lERUQsCisgICAg
UFJPUF9GTEFUVEVOX01BVFJJWCwKKyAgICBQUk9QX0FOSU1BVEVELAorCisgICAgUFJPUF9NQVRS
SVhfWFgsCisgICAgUFJPUF9NQVRSSVhfWVgsCisgICAgUFJPUF9NQVRSSVhfWlgsCisgICAgUFJP
UF9NQVRSSVhfV1gsCisKKyAgICBQUk9QX01BVFJJWF9YWSwKKyAgICBQUk9QX01BVFJJWF9ZWSwK
KyAgICBQUk9QX01BVFJJWF9aWSwKKyAgICBQUk9QX01BVFJJWF9XWSwKKworICAgIFBST1BfTUFU
UklYX1haLAorICAgIFBST1BfTUFUUklYX1laLAorICAgIFBST1BfTUFUUklYX1paLAorICAgIFBS
T1BfTUFUUklYX1daLAorCisgICAgUFJPUF9NQVRSSVhfWFcsCisgICAgUFJPUF9NQVRSSVhfWVcs
CisgICAgUFJPUF9NQVRSSVhfWlcsCisgICAgUFJPUF9NQVRSSVhfV1csCisKKyAgICBQUk9QX1RS
QU5TTEFURV9YLAorICAgIFBST1BfVFJBTlNMQVRFX1ksCisKKyAgICBQUk9QX0xBU1QKK307CisK
K3N0YXRpYyB2b2lkCitncmFwaGljc0xheWVyQWN0b3JTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmpl
Y3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyAqcHNwZWMp
Cit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9S
KG9iamVjdCk7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5w
cml2OworCisgICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBjYXNlIFBST1BfVFJBTlNMQVRFX1g6
CisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zbGF0ZVgobGF5ZXIsIGdfdmFsdWVf
Z2V0X2Zsb2F0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9UUkFOU0xB
VEVfWToKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWShsYXllciwgZ192
YWx1ZV9nZXRfZmxvYXQodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0RP
VUJMRV9TSURFRDoKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0RG91YmxlU2lkZWQobGF5
ZXIsIGdfdmFsdWVfZ2V0X2Jvb2xlYW4odmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX0ZMQVRURU5fTUFUUklYOgorICAgICAgICBncmFwaGljc0xheWVyQWN0b3JTZXRGbGF0
dGVuTWF0cml4KGxheWVyLCBnX3ZhbHVlX2dldF9ib29sZWFuKHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUFJPUF9BTklNQVRFRDoKKyAgICAgICAgcHJpdi0+YW5pbWF0ZWQgPSAg
Z192YWx1ZV9nZXRfYm9vbGVhbih2YWx1ZSk7CisgICAgICAgIC8vIENsZWFyIHRoZSBmaW5hbCBt
YXRyaXggdmFsdWUgdG8gc3RhcnQgdGhlIGFuaW1hdGlvbiBmb3JtIHRoZSBmaXJzdCBzdGF0ZS4K
KyAgICAgICAgaWYgKHByaXYtPmFuaW1hdGVkID09IFRSVUUgJiYgcHJpdi0+bWF0cml4KSB7Cisg
ICAgICAgICAgICBjb2dsX21hdHJpeF9mcmVlKHByaXYtPm1hdHJpeCk7CisgICAgICAgICAgICBw
cml2LT5tYXRyaXggPSAwOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJP
UF9NQVRSSVhfWFg6CisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldE1hdHJpeEFycmF5KGxh
eWVyLCAwLCBnX3ZhbHVlX2dldF9mbG9hdCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTUFUUklYX1lYOgorICAgICAgICBncmFwaGljc0xheWVyQWN0b3JTZXRNYXRyaXhB
cnJheShsYXllciwgMSwgZ192YWx1ZV9nZXRfZmxvYXQodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQUk9QX01BVFJJWF9aWDoKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0
TWF0cml4QXJyYXkobGF5ZXIsIDIsIGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVRSSVhfV1g6CisgICAgICAgIGdyYXBoaWNzTGF5ZXJB
Y3RvclNldE1hdHJpeEFycmF5KGxheWVyLCAzLCBnX3ZhbHVlX2dldF9mbG9hdCh2YWx1ZSkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFUUklYX1hZOgorICAgICAgICBncmFwaGlj
c0xheWVyQWN0b3JTZXRNYXRyaXhBcnJheShsYXllciwgNCwgZ192YWx1ZV9nZXRfZmxvYXQodmFs
dWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BVFJJWF9ZWToKKyAgICAgICAg
Z3JhcGhpY3NMYXllckFjdG9yU2V0TWF0cml4QXJyYXkobGF5ZXIsIDUsIGdfdmFsdWVfZ2V0X2Zs
b2F0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVRSSVhfWlk6Cisg
ICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldE1hdHJpeEFycmF5KGxheWVyLCA2LCBnX3ZhbHVl
X2dldF9mbG9hdCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFUUklY
X1dZOgorICAgICAgICBncmFwaGljc0xheWVyQWN0b3JTZXRNYXRyaXhBcnJheShsYXllciwgNywg
Z192YWx1ZV9nZXRfZmxvYXQodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X01BVFJJWF9YWjoKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0TWF0cml4QXJyYXkobGF5
ZXIsIDgsIGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgUFJPUF9NQVRSSVhfWVo6CisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldE1hdHJpeEFy
cmF5KGxheWVyLCA5LCBnX3ZhbHVlX2dldF9mbG9hdCh2YWx1ZSkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFBST1BfTUFUUklYX1paOgorICAgICAgICBncmFwaGljc0xheWVyQWN0b3JTZXRN
YXRyaXhBcnJheShsYXllciwgMTAsIGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVRSSVhfV1o6CisgICAgICAgIGdyYXBoaWNzTGF5ZXJB
Y3RvclNldE1hdHJpeEFycmF5KGxheWVyLCAxMSwgZ192YWx1ZV9nZXRfZmxvYXQodmFsdWUpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BVFJJWF9YVzoKKyAgICAgICAgZ3JhcGhp
Y3NMYXllckFjdG9yU2V0TWF0cml4QXJyYXkobGF5ZXIsIDEyLCBnX3ZhbHVlX2dldF9mbG9hdCh2
YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFUUklYX1lXOgorICAgICAg
ICBncmFwaGljc0xheWVyQWN0b3JTZXRNYXRyaXhBcnJheShsYXllciwgMTMsIGdfdmFsdWVfZ2V0
X2Zsb2F0KHZhbHVlKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVRSSVhfWlc6
CisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldE1hdHJpeEFycmF5KGxheWVyLCAxNCwgZ192
YWx1ZV9nZXRfZmxvYXQodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01B
VFJJWF9XVzoKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0TWF0cml4QXJyYXkobGF5ZXIs
IDE1LCBnX3ZhbHVlX2dldF9mbG9hdCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBw
cm9wSUQsIHBzcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitncmFwaGljc0xheWVyQWN0
b3JHZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1
ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciA9
IEdSQVBISUNTX0xBWUVSX0FDVE9SKG9iamVjdCk7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJp
dmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgc3dpdGNoIChwcm9wSUQpIHsKKyAgICBj
YXNlIFBST1BfVFJBTlNMQVRFX1g6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBn
cmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVYKGxheWVyKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUFJPUF9UUkFOU0xBVEVfWToKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFs
dWUsIGdyYXBoaWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVkobGF5ZXIpKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0RPVUJMRV9TSURFRDoKKyAgICAgICAgZ192YWx1ZV9zZXRfYm9v
bGVhbih2YWx1ZSwgZ3JhcGhpY3NMYXllckFjdG9yR2V0RG91YmxlU2lkZWQobGF5ZXIpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX0ZMQVRURU5fTUFUUklYOgorICAgICAgICBnX3Zh
bHVlX3NldF9ib29sZWFuKHZhbHVlLCBwcml2LT5mbGF0dGVuTWF0cml4KTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQUk9QX0FOSU1BVEVEOgorICAgICAgICBnX3ZhbHVlX3NldF9ib29sZWFu
KHZhbHVlLCBwcml2LT5hbmltYXRlZCk7CisgICAgICAgIGJyZWFrOworICAgIC8qIGNvbHVtbiAw
ICovCisgICAgY2FzZSBQUk9QX01BVFJJWF9YWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQo
dmFsdWUsIHByaXYtPm1hdHJpeEFycmF5WzBdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQ
Uk9QX01BVFJJWF9ZWDoKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPm1h
dHJpeEFycmF5WzFdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BVFJJWF9aWDoK
KyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPm1hdHJpeEFycmF5WzJdKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX01BVFJJWF9XWDoKKyAgICAgICAgZ192YWx1
ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPm1hdHJpeEFycmF5WzNdKTsKKyAgICAgICAgYnJlYWs7
CisgICAgLyogY29sdW1uIDEgKi8KKyAgICBjYXNlIFBST1BfTUFUUklYX1hZOgorICAgICAgICBn
X3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+bWF0cml4QXJyYXlbNF0pOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFBST1BfTUFUUklYX1lZOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9h
dCh2YWx1ZSwgcHJpdi0+bWF0cml4QXJyYXlbNV0pOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFBST1BfTUFUUklYX1pZOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+
bWF0cml4QXJyYXlbNl0pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFUUklYX1dZ
OgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+bWF0cml4QXJyYXlbN10p
OworICAgICAgICBicmVhazsKKyAgICAvKiBjb2x1bW4gMiAqLworICAgIGNhc2UgUFJPUF9NQVRS
SVhfWFo6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBwcml2LT5tYXRyaXhBcnJh
eVs4XSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVRSSVhfWVo6CisgICAgICAg
IGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBwcml2LT5tYXRyaXhBcnJheVs5XSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVRSSVhfWlo6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zs
b2F0KHZhbHVlLCBwcml2LT5tYXRyaXhBcnJheVsxMF0pOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFBST1BfTUFUUklYX1daOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgcHJp
di0+bWF0cml4QXJyYXlbMTFdKTsKKyAgICAgICAgYnJlYWs7CisgICAgLyogY29sdW1uIDMgKi8K
KyAgICBjYXNlIFBST1BfTUFUUklYX1hXOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1
ZSwgcHJpdi0+bWF0cml4QXJyYXlbMTJdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9Q
X01BVFJJWF9ZVzoKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIHByaXYtPm1hdHJp
eEFycmF5WzEzXSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUFJPUF9NQVRSSVhfWlc6Cisg
ICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBwcml2LT5tYXRyaXhBcnJheVsxNF0pOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFBST1BfTUFUUklYX1dXOgorICAgICAgICBnX3ZhbHVl
X3NldF9mbG9hdCh2YWx1ZSwgcHJpdi0+bWF0cml4QXJyYXlbMTVdKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lE
KG9iamVjdCwgcHJvcElELCBwc3BlYyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorZ3JhcGhp
Y3NMYXllckFjdG9yRGlzcG9zZShHT2JqZWN0KiBvYmplY3QpCit7CisgICAgR3JhcGhpY3NMYXll
ckFjdG9yKiBsYXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKG9iamVjdCk7CisgICAgR3JhcGhp
Y3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgaWYgKHByaXYt
PnRleHR1cmUpIHsKKyAgICAgICAgY2x1dHRlcl9hY3Rvcl9kZXN0cm95KHByaXYtPnRleHR1cmUp
OworICAgICAgICBwcml2LT50ZXh0dXJlID0gMDsKKyAgICB9CisKKyAgICBwcml2LT5zdXJmYWNl
LmNsZWFyKCk7CisKKyAgICBpZiAocHJpdi0+bWF0cml4KQorICAgICAgIGNvZ2xfbWF0cml4X2Zy
ZWUocHJpdi0+bWF0cml4KTsKKworICAgIGlmIChwcml2LT5jaGlsZHJlbk1hdHJpeCkKKyAgICAg
ICBjb2dsX21hdHJpeF9mcmVlKHByaXYtPmNoaWxkcmVuTWF0cml4KTsKKworICAgIGlmIChwcml2
LT50ZXh0dXJlSUQpCisgICAgICAgIGNvZ2xfaGFuZGxlX3VucmVmKHByaXYtPnRleHR1cmVJRCk7
CisKKyAgICBpZiAocHJpdi0+b2Zmc2NyZWVuSUQpCisgICAgICAgIGNvZ2xfaGFuZGxlX3VucmVm
KHByaXYtPm9mZnNjcmVlbklEKTsKKworICAgIEdfT0JKRUNUX0NMQVNTKGdyYXBoaWNzX2xheWVy
X2FjdG9yX3BhcmVudF9jbGFzcyktPmRpc3Bvc2Uob2JqZWN0KTsKK30KKworLy8gQ29waWVkIGZy
b20gY2Fpcm8uCisjZGVmaW5lIE1BWF9JTUFHRV9TSVpFIDMyNzY3CisKK3N0YXRpYyBpbmxpbmUg
dm9pZAordXBkYXRlQW5jaG9yUG9pbnRzKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7Cisg
ICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIGdy
YXBoaWNzTGF5ZXJBY3RvclNldEFuY2hvclBvaW50KGxheWVyLCBwcml2LT5hbmNob3JYLCBwcml2
LT5hbmNob3JZLCBwcml2LT5hbmNob3JaKTsKK30KKworc3RhdGljIHZvaWQKK2dyYXBoaWNzTGF5
ZXJBY3RvckFsbG9jYXRlKENsdXR0ZXJBY3Rvciogc2VsZiwgY29uc3QgQ2x1dHRlckFjdG9yQm94
ICpib3gsIENsdXR0ZXJBbGxvY2F0aW9uRmxhZ3MgZmxhZ3MpCit7CisgICAgTE9HKEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmcsICIlcyBhY3Rvcj0lcCAlcyIsIF9fZnVuY19fLCBzZWxmLCBjbHV0dGVy
X2FjdG9yX2dldF9uYW1lKHNlbGYpKTsKKworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIg
PSBHUkFQSElDU19MQVlFUl9BQ1RPUihzZWxmKTsKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2
YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisKKyAgICBwcml2LT5hbGxvY2F0aW5nID0gVFJVRTsK
KworICAgIENMVVRURVJfQUNUT1JfQ0xBU1MoZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfcGFyZW50X2Ns
YXNzKS0+YWxsb2NhdGUoc2VsZiwgYm94LCBmbGFncyk7CisKKyAgICB1cGRhdGVBbmNob3JQb2lu
dHMobGF5ZXIpOworCisgICAgaWYgKHByaXYtPnRleHR1cmUpIHsKKyAgICAgICAgLy8gVGhlIHRl
eHR1cmUgb2NjdXBpZXMgdGhlIHdob2xlIGFyZWEsIGJ1dCBpcyBwb3NpdGlvbmVkIGF0IDAsMAor
ICAgICAgICAvLyByZWxhdGl2ZSB0byB0aGUgbGF5ZXIgYWN0b3IuCisgICAgICAgIENsdXR0ZXJB
Y3RvckJveCB0ZXh0dXJlQm94ID0geyAwLjAsIDAuMCwgYm94LT54MiAtIGJveC0+eDEsIGJveC0+
eTIgLSBib3gtPnkxIH07CisKKyAgICAgICAgLy8gcHJvdGVjdCBhZ2FpbnN0IDB4MAorICAgICAg
ICBpZiAoIXRleHR1cmVCb3gueDIpCisgICAgICAgICAgICB0ZXh0dXJlQm94LngyID0gMTsKKwor
ICAgICAgICBpZiAoIXRleHR1cmVCb3gueTIpCisgICAgICAgICAgICB0ZXh0dXJlQm94LnkyID0g
MTsKKworICAgICAgICAvLyBGSVhNRTogc29tZSBwYWdlcyBtYWtlIHVzIGNyZWF0ZSB2ZXJ5IGJp
ZyBsYXllcnMsIHdoaWNoCisgICAgICAgIC8vIGV4Y2VlZHMgY2Fpcm8ncyBsaW1pdHMsIGNoZWNr
IGZvciB0aGF0IGhlcmUuCisgICAgICAgIGlmICh0ZXh0dXJlQm94LngyID4gTUFYX0lNQUdFX1NJ
WkUpIHsKKyAgICAgICAgICAgIGdfd2FybmluZygiTGF5ZXIgJXMgaGFzIGEgd2lkdGggdGhhdCBl
eGNlZWRzIGNhaXJvJ3MgbGltaXRzOiAlLjJmIiwgY2x1dHRlcl9hY3Rvcl9nZXRfbmFtZShzZWxm
KSwgdGV4dHVyZUJveC54Mik7CisgICAgICAgICAgICB0ZXh0dXJlQm94LngyID0gTUFYX0lNQUdF
X1NJWkU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGV4dHVyZUJveC55MiA+IE1BWF9JTUFH
RV9TSVpFKSB7CisgICAgICAgICAgICBnX3dhcm5pbmcoIkxheWVyICVzIGhhcyBhIGhlaWdodCB0
aGF0IGV4Y2VlZHMgY2Fpcm8ncyBsaW1pdHM6ICUuMmYiLCBjbHV0dGVyX2FjdG9yX2dldF9uYW1l
KHNlbGYpLCB0ZXh0dXJlQm94LnkyKTsKKyAgICAgICAgICAgIHRleHR1cmVCb3gueTIgPSBNQVhf
SU1BR0VfU0laRTsKKyAgICAgICAgfQorCisgICAgICAgIGNsdXR0ZXJfYWN0b3JfYWxsb2NhdGUo
cHJpdi0+dGV4dHVyZSwgJnRleHR1cmVCb3gsIGZsYWdzKTsKKyAgICB9CisKKyNpZm5kZWYgTkRF
QlVHCisgICAgZmxvYXQgYm94V2lkdGgsIGJveEhlaWdodDsKKworICAgIGJveFdpZHRoICA9IGNs
dXR0ZXJfYWN0b3JfYm94X2dldF93aWR0aChib3gpOworICAgIGJveEhlaWdodCA9IGNsdXR0ZXJf
YWN0b3JfYm94X2dldF9oZWlnaHQoYm94KTsKKworICAgIExPRyhBY2NlbGVyYXRlZENvbXBvc2l0
aW5nLCAiJXMgYm94KHgxLHkxLHgyLHkyKSA9ICglZiwlZiwlZiwlZikiLCBfX2Z1bmNfXywgYm94
LT54MSwgYm94LT55MSwgYm94LT54MiwgYm94LT55Mik7CisgICAgTE9HKEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmcsICIlcyBib3godyxoKSA9ICglZiwlZikiLCBfX2Z1bmNfXywgYm94V2lkdGgsIGJv
eEhlaWdodCk7CisjZW5kaWYKKworICAgIC8vIEZJWE1FOiBtYXliZSB3ZSBjYW4gY2FjaGUgY2hp
bGRyZW4gYWxsb2NhdGlvbiBhbmQgbm90IGNhbGwKKyAgICAvLyBhbGxvY2F0ZSBvbiB0aGVtIHRo
aXMgb2Z0ZW4/CisgICAgZm9yIChHTGlzdCogbGlzdCA9IGxheWVyLT5jaGlsZHJlbjsgbGlzdDsg
bGlzdCA9IGxpc3QtPm5leHQpIHsKKyAgICAgICAgIENsdXR0ZXJBY3RvciogY2hpbGQgPSBDTFVU
VEVSX0FDVE9SKGxpc3QtPmRhdGEpOworCisgICAgICAgICBmbG9hdCBjaGlsZFdpZHRoID0gY2x1
dHRlcl9hY3Rvcl9nZXRfd2lkdGgoY2hpbGQpOworICAgICAgICAgZmxvYXQgY2hpbGRIZWlnaHQg
PSBjbHV0dGVyX2FjdG9yX2dldF9oZWlnaHQoY2hpbGQpOworCisgICAgICAgICBDbHV0dGVyQWN0
b3JCb3ggY2hpbGRCb3g7CisgICAgICAgICBjaGlsZEJveC54MSA9IGNsdXR0ZXJfYWN0b3JfZ2V0
X3goY2hpbGQpOworICAgICAgICAgY2hpbGRCb3gueTEgPSBjbHV0dGVyX2FjdG9yX2dldF95KGNo
aWxkKTsKKyAgICAgICAgIGNoaWxkQm94LngyID0gY2hpbGRCb3gueDEgKyBjaGlsZFdpZHRoOwor
ICAgICAgICAgY2hpbGRCb3gueTIgPSBjaGlsZEJveC55MSArIGNoaWxkSGVpZ2h0OworCisgICAg
ICAgICBjbHV0dGVyX2FjdG9yX2FsbG9jYXRlKGNoaWxkLCAmY2hpbGRCb3gsIGZsYWdzKTsKKyAg
ICB9CisKKyAgICBwcml2LT5hbGxvY2F0aW5nID0gRkFMU0U7Cit9CisKKy8vIFJlZmVyIHRvIFRl
eHR1cmVNYXBwZXIuCitzdGF0aWMgdm9pZCBtdWx0VmVjTWF0cml4KENvZ2xNYXRyaXgqIG1hdHJp
eCwgZG91YmxlIHgsIGRvdWJsZSB5LCBkb3VibGUgeiwgZG91YmxlKiByZXN1bHRYLCBkb3VibGUq
IHJlc3VsdFksIGRvdWJsZSogcmVzdWx0WikKK3sKKyAgICAqcmVzdWx0WCA9IG1hdHJpeC0+eHcg
KyB4ICogbWF0cml4LT54eCArIHkgKiBtYXRyaXgtPnh5ICsgeiAqIG1hdHJpeC0+eHo7CisgICAg
KnJlc3VsdFkgPSBtYXRyaXgtPnl3ICsgeCAqIG1hdHJpeC0+eXggKyB5ICogbWF0cml4LT55eSAr
IHogKiBtYXRyaXgtPnl6OworICAgICpyZXN1bHRaID0gbWF0cml4LT56dyArIHggKiBtYXRyaXgt
Pnp4ICsgeSAqIG1hdHJpeC0+enkgKyB6ICogbWF0cml4LT56ejsKKyAgICBkb3VibGUgdyA9bWF0
cml4LT53dyArIHggKiBtYXRyaXgtPnd4ICsgeSAqIG1hdHJpeC0+d3kgKyB6ICogbWF0cml4LT53
ejsKKyAgICBpZiAodyAhPSAxICYmICF3KSB7CisgICAgICAgICpyZXN1bHRYIC89IHc7CisgICAg
ICAgICpyZXN1bHRZIC89IHc7CisgICAgICAgICpyZXN1bHRaIC89IHc7CisgICAgfQorfQorCitz
dGF0aWMgYm9vbCBpc0lkZW50aXR5T3JUcmFuc2xhdGlvbihDb2dsTWF0cml4KiBtYXRyaXgpIAor
eworICAgIHJldHVybiBtYXRyaXgtPnh4ID09IDEgJiYgIW1hdHJpeC0+eXggJiYgIW1hdHJpeC0+
enggJiYgIW1hdHJpeC0+d3gKKyAgICAgICAgICAgJiYgIW1hdHJpeC0+eHkgJiYgbWF0cml4LT55
eSA9PSAxICYmICFtYXRyaXgtPnp5ICYmICFtYXRyaXgtPnd5CisgICAgICAgICAgICYmICFtYXRy
aXgtPnh6ICYmICFtYXRyaXgtPnl6ICYmIG1hdHJpeC0+enogPT0gMSAmJiAhbWF0cml4LT53egor
ICAgICAgICAgICAmJiBtYXRyaXgtPnd3ID09IDE7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNz
TGF5ZXJBY3RvckFwcGx5VHJhbnNmb3JtKENsdXR0ZXJBY3RvciAqYWN0b3IsIENvZ2xNYXRyaXgg
Km1hdHJpeCkKK3sKKyAgICBMT0coQWNjZWxlcmF0ZWRDb21wb3NpdGluZywgIiVzIGFjdG9yPSVw
ICVzIiwgX19mdW5jX18sIGFjdG9yLCBjbHV0dGVyX2FjdG9yX2dldF9uYW1lKGFjdG9yKSk7CisK
KyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gR1JBUEhJQ1NfTEFZRVJfQUNU
T1IoYWN0b3IpLT5wcml2OworCisKKyAgICAvLyBBcHBseSB0cmFuc2xhdGlvbiBhbmQgc2Nyb2xs
aW5nIGFzIGEgc2luZ2xlIHRyYW5zbGF0aW9uLiBUaGVzZQorICAgIC8vIG5lZWQgdG8gY29tZSBi
ZWZvcmUgYW55dGhpbmcgZWxzZSwgb3RoZXJ3aXNlIHRoZXknbGwgYmUKKyAgICAvLyBhZmZlY3Rl
ZCBieSBvdGhlciBvcGVyYXRpb25zIHN1Y2ggYXMgc2NhbGluZywgd2hpY2ggaXMgbm90IHdoYXQK
KyAgICAvLyB3ZSB3YW50LgorICAgIGZsb2F0IHRyYW5zbGF0ZVggPSBwcml2LT5zY3JvbGxYICsg
cHJpdi0+dHJhbnNsYXRlWDsKKyAgICBmbG9hdCB0cmFuc2xhdGVZID0gcHJpdi0+c2Nyb2xsWSAr
IHByaXYtPnRyYW5zbGF0ZVk7CisKKyAgICBpZiAodHJhbnNsYXRlWCB8fCB0cmFuc2xhdGVZKQor
ICAgICAgICBjb2dsX21hdHJpeF90cmFuc2xhdGUobWF0cml4LCB0cmFuc2xhdGVYLCB0cmFuc2xh
dGVZLCAwKTsKKworICAgIENMVVRURVJfQUNUT1JfQ0xBU1MoZ3JhcGhpY3NfbGF5ZXJfYWN0b3Jf
cGFyZW50X2NsYXNzKS0+YXBwbHlfdHJhbnNmb3JtKGFjdG9yLCBtYXRyaXgpOworCisgICAgZ2Zs
b2F0IHdpZHRoID0gY2x1dHRlcl9hY3Rvcl9nZXRfd2lkdGgoYWN0b3IpOworICAgIGdmbG9hdCBo
ZWlnaHQgPSBjbHV0dGVyX2FjdG9yX2dldF9oZWlnaHQoYWN0b3IpOworICAgIGlmICh3aWR0aCA8
PSAxLjAgfHwgaGVpZ2h0IDw9IDEuMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ2Zsb2F0IHBp
dm90WCwgcGl2b3RZOworICAgIHBpdm90WCA9IHdpZHRoICogcHJpdi0+YW5jaG9yWDsKKyAgICBw
aXZvdFkgPSBoZWlnaHQgKiBwcml2LT5hbmNob3JZOworCisgICAgaWYgKHByaXYtPm1hdHJpeCkg
eworICAgICAgICBMT0coQWNjZWxlcmF0ZWRDb21wb3NpdGluZywgIk1hdHJpeDpcbiVzIiwgbWF0
cml4VG9TdHJpbmcocHJpdi0+bWF0cml4KSk7CisKKyAgICAgICAgQ29nbE1hdHJpeCogbG9jYWxN
YXRyaXg7CisgICAgICAgIC8vIENTUzMgdHJhbmZvcm0tc3R5bGUgY2FuIGJlIGNoYW5nZWQgb24g
dGhlIGZseSwgCisgICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gY29weSBwcml2LT5tYXRyaXggaW4g
b3JkZXIgdG8gcmVjb3ZlciB6LWF4aXMuIAorICAgICAgICBsb2NhbE1hdHJpeCA9IGNvZ2xfbWF0
cml4X2NvcHkocHJpdi0+bWF0cml4KTsKKworICAgICAgICAvLyBGbGF0dGVuIHRvIDJECisgICAg
ICAgIGlmIChwcml2LT5mbGF0dGVuTWF0cml4KSAgeworICAgICAgICAgICAgTE9HKEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmcsICJGbGF0dGVuIG1hdHJpeCIpOworICAgICAgICAgICAgbG9jYWxNYXRy
aXgtPnh6ID0gMDsKKyAgICAgICAgICAgIGxvY2FsTWF0cml4LT55eiA9IDA7CisgICAgICAgICAg
ICBsb2NhbE1hdHJpeC0+enogPSAxOworICAgICAgICAgICAgbG9jYWxNYXRyaXgtPnp4ID0gMDsK
KyAgICAgICAgICAgIGxvY2FsTWF0cml4LT56eSA9IDA7CisgICAgICAgICAgICBsb2NhbE1hdHJp
eC0+encgPSAwOworICAgICAgICAgICAgbG9jYWxNYXRyaXgtPnd6ID0gMDsKKyAgICAgICAgfQor
CisgICAgICAgIGNvZ2xfbWF0cml4X3RyYW5zbGF0ZShtYXRyaXgsIHBpdm90WCwgcGl2b3RZLCBw
cml2LT5hbmNob3JaKTsKKyAgICAgICAgY29nbF9tYXRyaXhfbXVsdGlwbHkobWF0cml4LCBtYXRy
aXgsIGxvY2FsTWF0cml4KTsKKyAgICAgICAgY29nbF9tYXRyaXhfdHJhbnNsYXRlKG1hdHJpeCwg
LXBpdm90WCwgLXBpdm90WSwgLXByaXYtPmFuY2hvclopOworICAgICAgICBjb2dsX21hdHJpeF9m
cmVlKGxvY2FsTWF0cml4KTsKKyAgICB9Cit9CisKKy8vIERyYXcgY29udGVudCBpbnRvIHRoZSBs
YXllci4KK3N0YXRpYyB2b2lkIGRyYXdMYXllckNvbnRlbnRzKENsdXR0ZXJBY3RvciogYWN0b3Is
IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBMT0coQWNjZWxlcmF0ZWRDb21wb3Np
dGluZywgImdyYXBoaWNzX2xheWVyX2FjdG9yOiVzICIsIF9fZnVuY19fKTsKKyAgICBHcmFwaGlj
c0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1IoYWN0b3IpLT5w
cml2OworCisgICAgaWYgKCFwcml2LT5kcmF3c0NvbnRlbnQgfHwgIXByaXYtPmxheWVyQ2xpZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBnZmxvYXQgd2lkdGggPSBjbHV0dGVyX2FjdG9yX2dl
dF93aWR0aChhY3Rvcik7CisgICAgZ2Zsb2F0IGhlaWdodCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X2hl
aWdodChhY3Rvcik7CisgICAgSW50UmVjdCBjbGlwKDAsIDAsIHdpZHRoLCBoZWlnaHQpOworCisg
ICAgLy8gQXBwbHkgdGhlIHBhaW50ZWQgY29udGVudCB0byB0aGUgbGF5ZXIuCisgICAgcHJpdi0+
bGF5ZXJDbGllbnQtPnBsYXRmb3JtQ2x1dHRlckxheWVyUGFpbnRDb250ZW50cyhjb250ZXh0LCBj
bGlwKTsKK30KKworc3RhdGljIGdib29sZWFuIGdyYXBoaWNzTGF5ZXJBY3RvckRyYXcoQ2x1dHRl
ckNhaXJvVGV4dHVyZSogdGV4dHVyZSwgY2Fpcm9fdCogY3IsIEdyYXBoaWNzTGF5ZXJBY3Rvciog
bGF5ZXIpCit7CisgICAgQ2x1dHRlckFjdG9yKiBhY3RvciA9IENMVVRURVJfQUNUT1IobGF5ZXIp
OworICAgIGdmbG9hdCB3aWR0aCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3dpZHRoKGFjdG9yKTsKKyAg
ICBnZmxvYXQgaGVpZ2h0ID0gY2x1dHRlcl9hY3Rvcl9nZXRfaGVpZ2h0KGFjdG9yKTsKKworICAg
IGlmICghd2lkdGggfHwgIWhlaWdodCkgeworICAgICAgICBMT0coQWNjZWxlcmF0ZWRDb21wb3Np
dGluZywgImFjdG9yKCVwKSdzIHdpZHRoIG9yIGhlaWdodCA9IDAiLCBhY3Rvcik7CisgICAgICAg
IHJldHVybiBGQUxTRTsKKyAgICB9CisKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBw
cml2ID0gbGF5ZXItPnByaXY7CisgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRleHQoY3IpOworCisg
ICAgY2x1dHRlcl9jYWlyb190ZXh0dXJlX2NsZWFyKHRleHR1cmUpOworCisgICAgaWYgKHByaXYt
PnN1cmZhY2UpIHsKKyAgICAgICAgaW50IHN1cmZhY2VXaWR0aCA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X3dpZHRoKHByaXYtPnN1cmZhY2UuZ2V0KCkpOworICAgICAgICBpbnQgc3VyZmFjZUhl
aWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChwcml2LT5zdXJmYWNlLmdldCgp
KTsKKworICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLjAsIDAuMCwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHN1cmZhY2VXaWR0aCksIHN0YXRpY19jYXN0PGZsb2F0PihzdXJmYWNlSGVpZ2h0KSk7Cisg
ICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdCgwLjAsIDAuMCwgd2lkdGgsIGhlaWdodCk7CisgICAg
ICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KHByaXYt
PnN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCAmY29udGV4dCk7CisgICAgfQorCisg
ICAgaWYgKHByaXYtPmxheWVyVHlwZSA9PSBHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBl
V2ViTGF5ZXIpCisgICAgICAgIGRyYXdMYXllckNvbnRlbnRzKGFjdG9yLCBjb250ZXh0KTsKKwor
ICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2ludCBzb3J0QnlEZXB0aChnY29uc3Rwb2lu
dGVyIGEsIGdjb25zdHBvaW50ZXIgYikKK3sKKyAgICBnZmxvYXQgZGVwdGhBID0gZ3JhcGhpY3NM
YXllckFjdG9yR2V0RGVwdGgoR1JBUEhJQ1NfTEFZRVJfQUNUT1IoYSkpOworICAgIGdmbG9hdCBk
ZXB0aEIgPSBncmFwaGljc0xheWVyQWN0b3JHZXREZXB0aChHUkFQSElDU19MQVlFUl9BQ1RPUihi
KSk7CisKKyAgICBpZiAoZGVwdGhBIDwgZGVwdGhCKQorICAgICAgICByZXR1cm4gLTE7CisKKyAg
ICBpZiAoZGVwdGhBID4gZGVwdGhCKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAw
OworfQorCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JTb3J0RGVwdGhPcmRlcihHcmFw
aGljc0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXIpCit7CisgICAgZ3JhcGhpY3NMYXllci0+Y2hp
bGRyZW4gPSBnX2xpc3Rfc29ydChncmFwaGljc0xheWVyLT5jaGlsZHJlbiwgc29ydEJ5RGVwdGgp
OworfQorCitzdGF0aWMgdm9pZCBhY3RvckFkZGVkKENsdXR0ZXJDb250YWluZXIqIGNvbnRhaW5l
ciwgQ2x1dHRlckFjdG9yKiBhY3RvciwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBHcmFwaGljc0xh
eWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXIgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihjb250YWluZXIp
OworICAgIGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuID0gZ19saXN0X2FwcGVuZChncmFwaGljc0xh
eWVyLT5jaGlsZHJlbiwgYWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBhY3RvclJlbW92ZWQoQ2x1
dHRlckNvbnRhaW5lciogY29udGFpbmVyLCBDbHV0dGVyQWN0b3IqIGFjdG9yLCBncG9pbnRlciBk
YXRhKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogZ3JhcGhpY3NMYXllciA9IEdSQVBISUNT
X0xBWUVSX0FDVE9SKGNvbnRhaW5lcik7CisgICAgZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4gPSBn
X2xpc3RfcmVtb3ZlKGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuLCBhY3Rvcik7Cit9CisKK3N0YXRp
YyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclBhaW50KENsdXR0ZXJBY3RvciogYWN0b3IpCit7Cisg
ICAgTE9HKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmcsICIlcywgYWN0b3I9JXAsICVzIiwgX19mdW5j
X18sIGFjdG9yLCBjbHV0dGVyX2FjdG9yX2dldF9uYW1lKGFjdG9yKSk7CisKKyAgICBHcmFwaGlj
c0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXIgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihhY3Rvcik7
CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IEdSQVBISUNTX0xBWUVSX0FD
VE9SKGFjdG9yKS0+cHJpdjsKKworI2lmbmRlZiBOREVCVUcKKyAgICBpZiAocHJpdi0+bGF5ZXJU
eXBlID09IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGVSb290TGF5ZXIpIHsKKyAgICAg
ICAgV1RGTG9nQ2hhbm5lbCogY2hhbm5lbCA9IGdldENoYW5uZWxGcm9tTmFtZSgiQWNjZWxlcmF0
ZWRDb21wb3NpdGluZyIpOworICAgICAgICBpZiAoY2hhbm5lbC0+c3RhdGUgPT0gV1RGTG9nQ2hh
bm5lbE9uKQorICAgICAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yUHJpbnRDaGlsZHJlbkluZm9y
bWF0aW9uKGdyYXBoaWNzTGF5ZXIsIDApOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKHByaXYt
Pm1hc2tzVG9Cb3VuZHMpCisgICAgICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X2NsaXAoYWN0b3IsIC1w
cml2LT5zY3JvbGxYLCAtcHJpdi0+c2Nyb2xsWSwgY2x1dHRlcl9hY3Rvcl9nZXRfd2lkdGgoYWN0
b3IpLCBjbHV0dGVyX2FjdG9yX2dldF9oZWlnaHQoYWN0b3IpKTsKKyAgICBlbHNlIGlmIChjbHV0
dGVyX2FjdG9yX2hhc19jbGlwKGFjdG9yKSkKKyAgICAgICAgY2x1dHRlcl9hY3Rvcl9yZW1vdmVf
Y2xpcChhY3Rvcik7CisKKyAgICBjb2dsX3NldF9iYWNrZmFjZV9jdWxsaW5nX2VuYWJsZWQocHJp
di0+YmFja2ZhY2VDdWxsaW5nKTsKKworICAgIC8vIFBhaW50IHRoZSB0ZXh0dXJlIGluIGNhc2Ug
d2UgaGF2ZSBhIGJvcmRlci4gVGhpcyB3aWxsIGJlIHRoZSBjYXNlIHdoZW4gZGVidWdnaW5nIGJv
cmRlcnMKKyAgICAvLyBhcmUgdHVybmVkIG9uIHRoYXQgd2Ugd2FudCB0byBzZWUuCisgICAgaWYg
KHByaXYtPnRleHR1cmUpCisgICAgICAgIGNsdXR0ZXJfYWN0b3JfcGFpbnQocHJpdi0+dGV4dHVy
ZSk7CisKKyAgICBnYm9vbGVhbiBoYXNCb3JkZXI7CisgICAgZ19vYmplY3RfZ2V0KGFjdG9yLCAi
aGFzLWJvcmRlciIsICZoYXNCb3JkZXIsIE5VTEwpOworCisgICAgaWYgKGhhc0JvcmRlcikgewor
ICAgICAgICBmbG9hdCB3aWR0aCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3dpZHRoKGFjdG9yKTsKKyAg
ICAgICAgZmxvYXQgaGVpZ2h0ID0gY2x1dHRlcl9hY3Rvcl9nZXRfaGVpZ2h0KGFjdG9yKTsKKyAg
ICAgICAgQ2x1dHRlckNvbG9yKiBib3JkZXJDb2xvcjsKKyAgICAgICAgZ3VpbnQgYm9yZGVyV2lk
dGg7CisKKyAgICAgICAgZ19vYmplY3RfZ2V0KGFjdG9yLCAiYm9yZGVyLWNvbG9yIiwgJmJvcmRl
ckNvbG9yLCAiYm9yZGVyLXdpZHRoIiwgJmJvcmRlcldpZHRoLCBOVUxMKTsKKworICAgICAgICAv
LyBJZ25vcmUgdGhlIGFscGhhIGNvbXBvbmVudCB0byBtYWtlIHRoZSBib3JkZXIgbW9yZSB2aXNp
YmxlLgorICAgICAgICBjb2dsX3NldF9zb3VyY2VfY29sb3I0dWIoYm9yZGVyQ29sb3ItPnJlZCwg
Ym9yZGVyQ29sb3ItPmdyZWVuLCBib3JkZXJDb2xvci0+Ymx1ZSwgMjU1KTsKKworICAgICAgICBj
b2dsX3JlY3RhbmdsZShib3JkZXJXaWR0aCwgMCwgd2lkdGgsIGJvcmRlcldpZHRoKTsKKworICAg
ICAgICBjb2dsX3JlY3RhbmdsZSh3aWR0aCAtIGJvcmRlcldpZHRoLCBib3JkZXJXaWR0aCwgd2lk
dGgsIGhlaWdodCk7CisKKyAgICAgICAgY29nbF9yZWN0YW5nbGUoMCwgaGVpZ2h0IC0gYm9yZGVy
V2lkdGgsIHdpZHRoIC0gYm9yZGVyV2lkdGgsIGhlaWdodCk7CisKKyAgICAgICAgY29nbF9yZWN0
YW5nbGUoMCwgMCwgYm9yZGVyV2lkdGgsIGhlaWdodCAtIGJvcmRlcldpZHRoKTsKKyAgICB9CisK
KyAgICAvLyBSZWRpcmVjdHMgYWxsIHN1YnNlcXVlbnQgZHJhd2luZyB0byB0aGlzIG9mZnNjcmVl
biBidWZmZXIKKyAgICBpZiAocHJpdi0+b2Zmc2NyZWVuKSB7CisgICAgICAgIENvZ2xDb2xvciB0
cmFuc3BhcmVudDsKKworICAgICAgICBjb2dsX3B1c2hfZnJhbWVidWZmZXIoc3RhdGljX2Nhc3Q8
Q29nbEZyYW1lYnVmZmVyKj4ocHJpdi0+b2Zmc2NyZWVuSUQpKTsKKyAgICAgICAgY29nbF9jb2xv
cl9pbml0X2Zyb21fNHViKCZ0cmFuc3BhcmVudCwgMCwgMCwgMCwgMCk7CisgICAgICAgIGNvZ2xf
Y2xlYXIoJnRyYW5zcGFyZW50LCBDT0dMX0JVRkZFUl9CSVRfQ09MT1IgfCBDT0dMX0JVRkZFUl9C
SVRfREVQVEgpOworICAgIH0KKworICAgIC8vIFNldCB0aGUgZGVwdGggdG8gdGhlIGFjdG9yLgor
ICAgIC8vIFRoaXMgaGFkIGJldHRlciBiZSBpbiB0aGUgYXBwbHlfdHJhbnNmb3JtIGZ1bmN0aW9u
LCBidXQgdGhlIGFwcGx5X3RyYW5zZm9ybSBpcyBjYWxsZWQgdHdpY2UgCisgICAgLy8gYmVmb3Jl
IHBhaW50aW5nLiBBcyBhIHJlc3VsdCwgdGhlIGRlcHRoIHZhbHVlIGdvdHRlbiBmb3IgdGhlIGZp
cnN0IHRpbWUgY2FuIGJlIG92ZXJ3cml0dGVuIAorICAgIC8vIGJ5IHRoZSBkZXB0aCB2YWx1ZSBn
b3R0ZW4gZm9yIHRoZSBuZXh0IHRpbWUuIAorICAgIC8vIFRoZXJlZm9yZSwgdGhlIGZpcnN0IGRl
cHRoIHZhbHVlIHdpbGwgYmUgb25seSB1c2VkIHRvIGJlIHNvcnRlZCBieSB0aGUgcGFyZW50IGxh
eWVyLgorICAgIENsdXR0ZXJBY3RvciogcGFyZW50ID0gY2x1dHRlcl9hY3Rvcl9nZXRfcGFyZW50
KGFjdG9yKTsKKyAgICBpZiAoR1JBUEhJQ1NfTEFZRVJfSVNfQUNUT1IocGFyZW50KSAmJiBncmFw
aGljc0xheWVyQWN0b3JHZXRMYXllclR5cGUoR1JBUEhJQ1NfTEFZRVJfQUNUT1IocGFyZW50KSkg
PT0gR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyKSB7CisgICAg
ICAgQ29nbE1hdHJpeCBtYXRyaXg7CisgICAgICAgY29nbF9nZXRfbW9kZWx2aWV3X21hdHJpeCgm
bWF0cml4KTsKKworICAgICAgIC8vIEZJWE1FOiBubyBjYXNlIG9mIHdoaWNoIHJldHVybnMgVFJV
RS4KKyAgICAgICBpZiAoaXNJZGVudGl0eU9yVHJhbnNsYXRpb24oJm1hdHJpeCkpCisgICAgICAg
ICAgIHByaXYtPmRlcHRoID0gbWF0cml4Lnp3OworICAgICAgIGVsc2UgeworICAgICAgICAgICBm
bG9hdCB3aWR0aCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3dpZHRoKGFjdG9yKTsKKyAgICAgICAgICAg
ZmxvYXQgaGVpZ2h0ID0gY2x1dHRlcl9hY3Rvcl9nZXRfaGVpZ2h0KGFjdG9yKTsKKworICAgICAg
ICAgICBkb3VibGUgeCwgeSwgejsKKyAgICAgICAgICAgbXVsdFZlY01hdHJpeCgmbWF0cml4LCB3
aWR0aCAvIDIuMCwgaGVpZ2h0IC8gMi4wLCAwLCAmeCwgJnksICZ6KTsKKworICAgICAgICAgICBp
ZiAocHJpdi0+ZGVwdGggIT0geikgeworICAgICAgICAgICAgICAgcHJpdi0+ZGVwdGggPSB6Owor
ICAgICAgICAgICAgICAgLy8gQ2x1dHRlciB0cmllcyB0byBwYWludCBBY3RvcnMgYmVmb3JlIHNv
cnRpbmcsIHNvIHdlIG5lZWQgIAorICAgICAgICAgICAgICAgLy8gdG8gc29ydCB0aGUgc2libGlu
Z3MgYnkgZGVwdGggd2hlbiBlYWNoIHNpYmxpbmcgZ2V0cyAKKyAgICAgICAgICAgICAgIC8vIHRo
ZSBkZXB0aCB2YWx1ZSBmb3IgdGhlIGZpcnN0IHRpbWUuCisgICAgICAgICAgICAgICBpZiAoKEdS
QVBISUNTX0xBWUVSX0FDVE9SKHBhcmVudCkpLT5wcml2LT5zb3J0QnlEZXB0aCA9PSBGQUxTRSkK
KyAgICAgICAgICAgICAgICAgICBncmFwaGljc0xheWVyQWN0b3JTb3J0RGVwdGhPcmRlcihHUkFQ
SElDU19MQVlFUl9BQ1RPUihwYXJlbnQpKTsKKyAgICAgICAgICAgfQorICAgICAgIH0KKyAgICB9
CisKKyAgICBHTGlzdCogbGlzdDsKKyAgICBmb3IgKGxpc3QgPSBncmFwaGljc0xheWVyLT5jaGls
ZHJlbjsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKKyAgICAgICAgQ2x1dHRlckFjdG9yKiBj
aGlsZCA9IENMVVRURVJfQUNUT1IobGlzdC0+ZGF0YSk7CisgICAgICAgIGNsdXR0ZXJfYWN0b3Jf
cGFpbnQoY2hpbGQpOworICAgIH0KKworICAgIC8vIFNvcnQgdGhlIGNoaWxkIGxheWVycyBvZiB0
aGUgdHJhbnNmb3JtIGxheWVyLiAKKyAgICBpZiAocHJpdi0+bGF5ZXJUeXBlID09IEdyYXBoaWNz
TGF5ZXJDbHV0dGVyOjpMYXllclR5cGVUcmFuc2Zvcm1MYXllcikgeworICAgICAgICBncmFwaGlj
c0xheWVyQWN0b3JTb3J0RGVwdGhPcmRlcihHUkFQSElDU19MQVlFUl9BQ1RPUihhY3RvcikpOwor
ICAgICAgICBwcml2LT5zb3J0QnlEZXB0aCA9IFRSVUU7CisgICAgfQorCisgICAgaWYgKHByaXYt
Pm9mZnNjcmVlbikgeworICAgICAgIGNvZ2xfcG9wX2ZyYW1lYnVmZmVyKCk7CisgICAgICAKKyAg
ICAgICBDb2dsSGFuZGxlIG1hdGVyaWFsOworICAgICAgIG1hdGVyaWFsID0gY29nbF9tYXRlcmlh
bF9uZXcoKTsKKyAgICAgICBjb2dsX21hdGVyaWFsX3NldF9sYXllcihzdGF0aWNfY2FzdDxDb2ds
TWF0ZXJpYWwqPihtYXRlcmlhbCksIDAsIHByaXYtPnRleHR1cmVJRCk7CisKKyAgICAgICBjb2ds
X3NldF9zb3VyY2UoKENvZ2xNYXRlcmlhbCopbWF0ZXJpYWwpOworICAgICAgIGNvZ2xfcmVjdGFu
Z2xlX3dpdGhfdGV4dHVyZV9jb29yZHMoLXByaXYtPmV4cGFuZFgsIC1wcml2LT5leHBhbmRZLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+ZmJvV2lkdGgg
LSBwcml2LT5leHBhbmRYLCBwcml2LT5mYm9IZWlnaHQgLSBwcml2LT5leHBhbmRZLCAwLCAwLCAx
LCAxKTsKKyAgICAgICBjb2dsX2hhbmRsZV91bnJlZihtYXRlcmlhbCk7CisgICAgfQorfQorCitz
dGF0aWMgdm9pZAorZ3JhcGhpY3NMYXllckFjdG9yUGljayhDbHV0dGVyQWN0b3IqIGFjdG9yLCBj
b25zdCBDbHV0dGVyQ29sb3IqIHBpY2spCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBncmFw
aGljc0xheWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1IoYWN0b3IpOworICAgIEdyYXBoaWNzTGF5
ZXJBY3RvclByaXZhdGUqIHByaXYgPSBncmFwaGljc0xheWVyLT5wcml2OworCisgICAgQ0xVVFRF
Ul9BQ1RPUl9DTEFTUyhncmFwaGljc19sYXllcl9hY3Rvcl9wYXJlbnRfY2xhc3MpLT5waWNrKGFj
dG9yLCBwaWNrKTsKKworICAgIGlmIChwcml2LT50ZXh0dXJlKQorICAgICAgICBjbHV0dGVyX2Fj
dG9yX3BhaW50KHByaXYtPnRleHR1cmUpOworCisgICAgR0xpc3QqIGxpc3Q7CisgICAgZm9yIChs
aXN0ID0gZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW47IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7
CisgICAgICAgICBDbHV0dGVyQWN0b3IqIGNoaWxkID0gQ0xVVFRFUl9BQ1RPUihsaXN0LT5kYXRh
KTsKKyAgICAgICAgIGNsdXR0ZXJfYWN0b3JfcGFpbnQoY2hpbGQpOworICAgIH0KK30KKworc3Rh
dGljIGdib29sZWFuCitncmFwaGljc0xhZXJBY3RvckdldFBhaW50Vm9sdW1lKENsdXR0ZXJBY3Rv
ciogYWN0b3IsIENsdXR0ZXJQYWludFZvbHVtZSogdm9sdW1lKQoreworICAgIEdyYXBoaWNzTGF5
ZXJBY3RvciogZ3JhcGhpY3NMYXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9yKTsKKyAg
ICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gZ3JhcGhpY3NMYXllci0+cHJpdjsK
KworICAgIGlmICghY2x1dHRlcl9wYWludF92b2x1bWVfc2V0X2Zyb21fYWxsb2NhdGlvbih2b2x1
bWUsIGFjdG9yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ2x1dHRlclZlcnRleCB2
b2x1bWVPcmlnaW47CisgICAgY2x1dHRlcl9wYWludF92b2x1bWVfZ2V0X29yaWdpbih2b2x1bWUs
ICZ2b2x1bWVPcmlnaW4pOworCisgICAgdm9sdW1lT3JpZ2luLnggLT0gKHByaXYtPnNjcm9sbFgg
KyBwcml2LT50cmFuc2xhdGVYKTsKKyAgICB2b2x1bWVPcmlnaW4ueSAtPSAocHJpdi0+c2Nyb2xs
WSArIHByaXYtPnRyYW5zbGF0ZVkpOworCisgICAgY2x1dHRlcl9wYWludF92b2x1bWVfc2V0X29y
aWdpbih2b2x1bWUsICZ2b2x1bWVPcmlnaW4pOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0
YXRpYyB2b2lkCitncmFwaGljc19sYXllcl9hY3Rvcl9jbGFzc19pbml0KEdyYXBoaWNzTGF5ZXJB
Y3RvckNsYXNzICprbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdENsYXNzID0gR19P
QkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIENsdXR0ZXJBY3RvckNsYXNzKiBhY3RvckNsYXNzID0g
Q0xVVFRFUl9BQ1RPUl9DTEFTUyhrbGFzcyk7CisgICAgR1BhcmFtU3BlYyogcHNwZWM7CisgICAg
CisgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdyYXBoaWNzTGF5ZXJBY3RvckdldFBy
b3BlcnR5OworICAgIG9iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSBncmFwaGljc0xheWVyQWN0
b3JTZXRQcm9wZXJ0eTsKKyAgICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IGdyYXBoaWNzTGF5ZXJB
Y3RvckRpc3Bvc2U7CisgICAgYWN0b3JDbGFzcy0+YXBwbHlfdHJhbnNmb3JtID0gZ3JhcGhpY3NM
YXllckFjdG9yQXBwbHlUcmFuc2Zvcm07CisgICAgYWN0b3JDbGFzcy0+Z2V0X3BhaW50X3ZvbHVt
ZSA9IGdyYXBoaWNzTGFlckFjdG9yR2V0UGFpbnRWb2x1bWU7CisgICAgYWN0b3JDbGFzcy0+YWxs
b2NhdGUgPSBncmFwaGljc0xheWVyQWN0b3JBbGxvY2F0ZTsKKyAgICBhY3RvckNsYXNzLT5wYWlu
dCA9IGdyYXBoaWNzTGF5ZXJBY3RvclBhaW50OworICAgIGFjdG9yQ2xhc3MtPnBpY2sgPSBncmFw
aGljc0xheWVyQWN0b3JQaWNrOworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNz
LCBzaXplb2YoR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSkpOworCisKKyAgICBwc3BlYyA9IGdf
cGFyYW1fc3BlY19ib29sZWFuKCJmbGF0dGVuTWF0cml4IiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJGbGF0dGVuTWF0cml4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJXaGV0aGVyIHRvIGZsYXR0ZW4gdGhlIG1hdHJpeCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBGQUxTRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURXUklURSkpOworICAgIGdfb2Jq
ZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsIFBST1BfRkxBVFRFTl9NQVRS
SVgsIHBzcGVjKTsKKyAgICAgIAorICAgIHBzcGVjID0gZ19wYXJhbV9zcGVjX2Jvb2xlYW4oImRv
dWJsZVNpZGVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJEb3VibGVTaWRl
ZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiV2hldGhlciB0byB1c2UgYmFj
a2ZhY2UgY3VsbGluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQUxTRSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdz
PihHX1BBUkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVy
dHkob2JqZWN0Q2xhc3MsIFBST1BfRE9VQkxFX1NJREVELCBwc3BlYyk7CisKKyAgICBwc3BlYyA9
IGdfcGFyYW1fc3BlY19ib29sZWFuKCJhbmltYXRlZCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiQW5pbWF0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IldoZXRoZXIgYW5pbWF0aW9uIHN0YXJ0ZWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRkFMU0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2Fz
dDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9BTklNQVRFRCwgcHNwZWMpOworCisg
ICAgLyogY29sdW1uIDEgKi8KKyAgICBwc3BlYyA9IGdfcGFyYW1fc3BlY19mbG9hdCgibWF0cml4
WFgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYXRyaXhYWCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInh4IG9mIHRoZSBtYXRyaXgiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC1HX01BWEZMT0FULAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihH
X1BBUkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHko
b2JqZWN0Q2xhc3MsIFBST1BfTUFUUklYX1hYLCBwc3BlYyk7CisKKyAgICBwc3BlYyA9IGdfcGFy
YW1fc3BlY19mbG9hdCgibWF0cml4WVgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJNYXRyaXhZWCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInl4IG9mIHRoZSBt
YXRyaXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1HX01BWEZMT0FULAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsIFBST1BfTUFUUklYX1lYLCBwc3BlYyk7
CisKKyAgICBwc3BlYyA9IGdfcGFyYW1fc3BlY19mbG9hdCgibWF0cml4WlgiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJNYXRyaXhaWCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgInp4IG9mIHRoZSBtYXRyaXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC1HX01BWEZMT0FULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxP
QVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURXUklU
RSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsIFBS
T1BfTUFUUklYX1pYLCBwc3BlYyk7CisKKyAgICBwc3BlYyA9IGdfcGFyYW1fc3BlY19mbG9hdCgi
bWF0cml4V1giLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYXRyaXhXWCIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInd4IG9mIHRoZSBtYXRyaXgiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC1HX01BWEZMT0FULAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdQYXJhbUZs
YWdzPihHX1BBUkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJv
cGVydHkob2JqZWN0Q2xhc3MsIFBST1BfTUFUUklYX1dYLCBwc3BlYyk7CisKKyAgICAvKiBjb2x1
bW4gMSAqLworICAgIHBzcGVjID0gZ19wYXJhbV9zcGVjX2Zsb2F0KCJtYXRyaXhYWSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hdHJpeFhZIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAieHkgb2YgdGhlIG1hdHJpeCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLUdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19N
QVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVB
RFdSSVRFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFz
cywgUFJPUF9NQVRSSVhfWFksIHBzcGVjKTsKKworICAgIHBzcGVjID0gZ19wYXJhbV9zcGVjX2Zs
b2F0KCJtYXRyaXhZWSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hdHJpeFlZ
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieXkgb2YgdGhlIG1hdHJpeCIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUdfTUFYRkxPQVQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1Bh
cmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFs
bF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9NQVRSSVhfWVksIHBzcGVjKTsKKworICAgIHBz
cGVjID0gZ19wYXJhbV9zcGVjX2Zsb2F0KCJtYXRyaXhaWSIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIk1hdHJpeFpZIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
enkgb2YgdGhlIG1hdHJpeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUdfTUFY
RkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhGTE9BVCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRFKSk7CisgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9NQVRSSVhf
WlksIHBzcGVjKTsKKworICAgIHBzcGVjID0gZ19wYXJhbV9zcGVjX2Zsb2F0KCJtYXRyaXhXWSIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hdHJpeFdZIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAid3kgb2YgdGhlIG1hdHJpeCIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLUdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgR19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLjAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFS
QU1fUkVBRFdSSVRFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmpl
Y3RDbGFzcywgUFJPUF9NQVRSSVhfV1ksIHBzcGVjKTsKKworICAgIC8qIGNvbHVtbiAyICovCisg
ICAgcHNwZWMgPSBnX3BhcmFtX3NwZWNfZmxvYXQoIm1hdHJpeFhaIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiTWF0cml4WFoiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJ4eiBvZiB0aGUgbWF0cml4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAt
R19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FULAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUpKTsK
KyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQUk9QX01B
VFJJWF9YWiwgcHNwZWMpOworCisgICAgcHNwZWMgPSBnX3BhcmFtX3NwZWNfZmxvYXQoIm1hdHJp
eFlaIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTWF0cml4WVoiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJ5eiBvZiB0aGUgbWF0cml4IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtR19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBHX01BWEZMT0FULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4o
R19QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5
KG9iamVjdENsYXNzLCBQUk9QX01BVFJJWF9ZWiwgcHNwZWMpOworCisgICAgcHNwZWMgPSBnX3Bh
cmFtX3NwZWNfZmxvYXQoIm1hdHJpeFpaIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiTWF0cml4WloiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ6eiBvZiB0aGUg
bWF0cml4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtR19NQVhGTE9BVCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FULAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9j
bGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQUk9QX01BVFJJWF9aWiwgcHNwZWMp
OworCisgICAgcHNwZWMgPSBnX3BhcmFtX3NwZWNfZmxvYXQoIm1hdHJpeFdaIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiTWF0cml4V1oiLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJ3eiBvZiB0aGUgbWF0cml4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAtR19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZM
T0FULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJ
VEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQ
Uk9QX01BVFJJWF9XWiwgcHNwZWMpOworCisgICAgLyogY29sdW1uIDMgKi8KKyAgICBwc3BlYyA9
IGdfcGFyYW1fc3BlY19mbG9hdCgibWF0cml4WFciLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJNYXRyaXhYVyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInh3IG9m
IHRoZSBtYXRyaXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1HX01BWEZMT0FU
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURXUklURSkpOworICAgICAgZ19v
YmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9NQVRSSVhfWFcs
IHBzcGVjKTsKKworICAgICAgcHNwZWMgPSBnX3BhcmFtX3NwZWNfZmxvYXQoIm1hdHJpeFlXIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYXRyaXhZVyIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAieXcgb2YgdGhlIG1hdHJpeCIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAtR19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHUGFyYW1G
bGFncz4oR19QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxf
cHJvcGVydHkob2JqZWN0Q2xhc3MsIFBST1BfTUFUUklYX1lXLCBwc3BlYyk7CisKKyAgICAgIHBz
cGVjID0gZ19wYXJhbV9zcGVjX2Zsb2F0KCJtYXRyaXhaVyIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiTWF0cml4WlciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInp3IG9mIHRoZSBtYXRyaXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LUdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FU
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdS
SVRFKSk7CisgICAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNz
LCBQUk9QX01BVFJJWF9aVywgcHNwZWMpOworCisgICAgICBwc3BlYyA9IGdfcGFyYW1fc3BlY19m
bG9hdCgibWF0cml4V1ciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk1hdHJp
eFdXIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3dyBvZiB0aGUgbWF0cml4
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1HX01BWEZMT0FULAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhGTE9BVCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURXUklURSkpOworICAgICAgZ19vYmpl
Y3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9NQVRSSVhfV1csIHBz
cGVjKTsKKworICAgICAgcHNwZWMgPSBnX3BhcmFtX3NwZWNfZmxvYXQoInRyYW5zbGF0ZS14IiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUcmFuc2xhdGUgWCIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJhbnNsYXRpb24gdmFsdWUgZm9yIHRoZSBYIGF4
aXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUdfTUFYRkxPQVQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FULAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMC4wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRFKSk7CisgICAgICBnX29i
amVjdF9jbGFzc19pbnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQUk9QX1RSQU5TTEFURV9Y
LCBwc3BlYyk7CisKKyAgICAgIHBzcGVjID0gZ19wYXJhbV9zcGVjX2Zsb2F0KCJ0cmFuc2xhdGUt
eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJhbnNsYXRlIFkiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYW5zbGF0aW9uIHZhbHVlIGZvciB0aGUg
WSBheWlzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1HX01BWEZMT0FULAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR19NQVhGTE9BVCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURXUklURSkpOworICAgICAg
Z19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9UUkFOU0xB
VEVfWSwgcHNwZWMpOworfQorCitzdGF0aWMgdm9pZAorZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfaW5p
dChHcmFwaGljc0xheWVyQWN0b3IgKnNlbGYpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJp
dmF0ZSogcHJpdiA9IHNlbGYtPnByaXYgPSBHUkFQSElDU19MQVlFUl9BQ1RPUl9HRVRfUFJJVkFU
RShzZWxmKTsKKworICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3JlYWN0aXZlKENMVVRURVJfQUNUT1Io
c2VsZiksIEZBTFNFKTsKKworICAgIC8vIERlZmF1bHQgdXNlZCBieSBHcmFwaGljc0xheWVyLgor
ICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldEFuY2hvclBvaW50KHNlbGYsIDAuNSwgMC41LCAwLjAp
OworCisgICAgcHJpdi0+c2Nyb2xsWCA9IDAuMDsKKyAgICBwcml2LT5zY3JvbGxZID0gMC4wOwor
CisgICAgcHJpdi0+dHJhbnNsYXRlWCA9IDAuMDsKKyAgICBwcml2LT50cmFuc2xhdGVZID0gMC4w
OworICAgIAorICAgIHByaXYtPmRlcHRoID0gMC4wOworICAgIHByaXYtPnNvcnRCeURlcHRoID0g
RkFMU0U7CisKKyAgICBwcml2LT5tYXRyaXggPSAwOworICAgIHByaXYtPnBlcnNwZWN0aXZlTWF0
cml4ID0gMDsKKyAgICBwcml2LT5hbmltYXRlZCA9IEZBTFNFOworICAgIHByaXYtPmJhY2tmYWNl
Q3VsbGluZyA9IEZBTFNFOworICAgIHByaXYtPnByZXNlcnZlczNEID0gRkFMU0U7CisgICAgcHJp
di0+ZmxhdHRlbk1hdHJpeCA9IFRSVUU7CisgICAKKyAgICBwcml2LT5vZmZzY3JlZW4gPSBGQUxT
RTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Qoc2VsZiwgImFjdG9yLWFkZGVkIiwKKyAgICAgICAg
ICAgICAgICAgICAgIEdfQ0FMTEJBQ0soYWN0b3JBZGRlZCksIDApOworCisgICAgZ19zaWduYWxf
Y29ubmVjdChzZWxmLCAiYWN0b3ItcmVtb3ZlZCIsCisgICAgICAgICAgICAgICAgICAgICBHX0NB
TExCQUNLKGFjdG9yUmVtb3ZlZCksIDApOworfQorCitHcmFwaGljc0xheWVyQWN0b3IqIGdyYXBo
aWNzTGF5ZXJBY3Rvck5ldyhHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlIHR5cGUpCit7
CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGdf
b2JqZWN0X25ldyhHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SLCBOVUxMKSk7CisgICAgR3JhcGhp
Y3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgcHJpdi0+bGF5
ZXJUeXBlID0gdHlwZTsKKworICAgIC8vIEZvciB2aWRlbyBsYXllcnMgd2UgZG9uJ3Qgd2FudCB0
aGUgY2Fpcm8gdGV4dHVyZSwgYnV0IGEgcmVndWxhciBvbmUuCisgICAgaWYgKHByaXYtPmxheWVy
VHlwZSA9PSBHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlVmlkZW9MYXllcikgeworICAg
ICAgICBwcml2LT50ZXh0dXJlID0gY2x1dHRlcl90ZXh0dXJlX25ldygpOworICAgICAgICBjbHV0
dGVyX2FjdG9yX3NldF9wYXJlbnQocHJpdi0+dGV4dHVyZSwgQ0xVVFRFUl9BQ1RPUihsYXllcikp
OworICAgIH0KKworICAgIGlmIChwcml2LT5sYXllclR5cGUgPT0gR3JhcGhpY3NMYXllckNsdXR0
ZXI6OkxheWVyVHlwZVRyYW5zZm9ybUxheWVyKQorICAgICAgICBwcml2LT5mbGF0dGVuTWF0cml4
ID0gRkFMU0U7CisKKyAgICByZXR1cm4gbGF5ZXI7Cit9CisKK0dyYXBoaWNzTGF5ZXJBY3Rvciog
Z3JhcGhpY3NMYXllckFjdG9yTmV3V2l0aENsaWVudChHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5
ZXJUeXBlIHR5cGUsIFBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50KiBsYXllckNsaWVudCkKK3sK
KyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0gZ3JhcGhpY3NMYXllckFjdG9yTmV3KHR5
cGUpOworICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldENsaWVudChsYXllciwgbGF5ZXJDbGllbnQp
OworICAgIHJldHVybiBsYXllcjsKK30KKwordm9pZAorZ3JhcGhpY3NMYXllckFjdG9yU2V0Q2xp
ZW50KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIFBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50
KiBjbGllbnQpCit7CisgICAgbGF5ZXItPnByaXYtPmxheWVyQ2xpZW50ID0gY2xpZW50OworfQor
CitQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCogZ3JhcGhpY3NMYXllckFjdG9yR2V0Q2xpZW50
KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgcmV0dXJuIGxheWVyLT5wcml2LT5s
YXllckNsaWVudDsKK30KKworLyogCisgKiBwdWJsaWMgQVBJCisgKi8KK3ZvaWQgZ3JhcGhpY3NM
YXllckFjdG9yUmVtb3ZlQWxsKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgTE9H
KEFjY2VsZXJhdGVkQ29tcG9zaXRpbmcsICIlc1xuIiwgX19mdW5jX18pOworCisgICAgZ19yZXR1
cm5faWZfZmFpbChHUkFQSElDU19MQVlFUl9JU19BQ1RPUihsYXllcikpOworCisgICAgR0xpc3Qq
IGNoaWxkcmVuID0gY2x1dHRlcl9hY3Rvcl9nZXRfY2hpbGRyZW4oQ0xVVFRFUl9BQ1RPUihsYXll
cikpOworICAgIGZvciAoOyBjaGlsZHJlbjsgY2hpbGRyZW4gPSBjaGlsZHJlbi0+bmV4dCkgewor
ICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gcmVtb3ZlIHN1YmxheWVycywgbm90IG91ciBvd24g
Y29tcG9zaXRlIGFjdG9ycy4KKyAgICAgICAgaWYgKGNoaWxkcmVuLT5kYXRhID09IGxheWVyLT5w
cml2LT50ZXh0dXJlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY2x1dHRlcl9h
Y3Rvcl9yZW1vdmVfY2hpbGQoQ0xVVFRFUl9BQ1RPUihsYXllciksIENMVVRURVJfQUNUT1IoY2hp
bGRyZW4tPmRhdGEpKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHVwZGF0ZVRleHR1cmUoR3Jh
cGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRl
KiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgQVNTRVJUKHByaXYtPmxheWVyVHlwZSAhPSBHcmFw
aGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlVmlkZW9MYXllcik7CisKKyAgICAvLyBOb3RoaW5n
IG5lZWRzIGEgdGV4dHVyZSwgcmVtb3ZlIHRoZSBvbmUgd2UgaGF2ZSwgaWYgYW55LgorICAgIGlm
ICghcHJpdi0+ZHJhd3NDb250ZW50ICYmICFwcml2LT5zdXJmYWNlKSB7CisgICAgICAgIGlmICgh
cHJpdi0+dGV4dHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMocHJpdi0+dGV4dHVyZSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oZ3JhcGhpY3NMYXllckFjdG9yRHJhdyksIGxheWVyKTsKKyAgICAgICAgY2x1dHRl
cl9hY3Rvcl91bnBhcmVudChwcml2LT50ZXh0dXJlKTsKKyAgICAgICAgcHJpdi0+dGV4dHVyZSA9
IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBuZWVkIGEgdGV4dHVyZSwg
YnV0IGFscmVhZHkgaGF2ZSBvbmUhCisgICAgaWYgKHByaXYtPnRleHR1cmUpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIFdlIG5lZWQgYSB0ZXh0dXJlLCBzbyBjcmVhdGUgaXQuCisgICAgQ2x1
dHRlckFjdG9yKiBhY3RvciA9IENMVVRURVJfQUNUT1IobGF5ZXIpOworICAgIGludCB3aWR0aCA9
IGNlaWxmKGNsdXR0ZXJfYWN0b3JfZ2V0X3dpZHRoKGFjdG9yKSk7CisgICAgaW50IGhlaWdodCA9
IGNlaWxmKGNsdXR0ZXJfYWN0b3JfZ2V0X2hlaWdodChhY3RvcikpOworCisgICAgcHJpdi0+dGV4
dHVyZSA9IGNsdXR0ZXJfY2Fpcm9fdGV4dHVyZV9uZXcod2lkdGgsIGhlaWdodCk7CisgICAgY2x1
dHRlcl9jYWlyb190ZXh0dXJlX3NldF9hdXRvX3Jlc2l6ZShDTFVUVEVSX0NBSVJPX1RFWFRVUkUo
cHJpdi0+dGV4dHVyZSksIFRSVUUpOworCisgICAgY2x1dHRlcl9hY3Rvcl9zZXRfcGFyZW50KHBy
aXYtPnRleHR1cmUsIGFjdG9yKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+dGV4dHVy
ZSwgImRyYXciLCBHX0NBTExCQUNLKGdyYXBoaWNzTGF5ZXJBY3RvckRyYXcpLCBsYXllcik7CisK
KyNpZm5kZWYgTkRFQlVHCisgICAgZ2NoYXIgdGV4dHVyZU5hbWVbNTEyXTsKKyAgICBnX3Nwcmlu
dGYodGV4dHVyZU5hbWUsICIlcyB0ZXh0dXJlIiwgY2x1dHRlcl9hY3Rvcl9nZXRfbmFtZShhY3Rv
cikpOworICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X25hbWUocHJpdi0+dGV4dHVyZSwgdGV4dHVyZU5h
bWUpOworI2VuZGlmCit9CisKK2NhaXJvX3N1cmZhY2VfdCogZ3JhcGhpY3NMYXllckFjdG9yR2V0
U3VyZmFjZShHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQoreworICAgIExPRyhBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nLCAiJXNcbiIsIF9fZnVuY19fKTsKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQ
cml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgaWYgKCFwcml2LT5zdXJmYWNlKQorICAg
ICAgICBnX21lc3NhZ2UoInN1cmZhY2UgaXMgbnVsbCIpOworCisgICAgcmV0dXJuIHByaXYtPnN1
cmZhY2UuZ2V0KCk7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0U3VyZmFjZShHcmFw
aGljc0xheWVyQWN0b3IqIGxheWVyLCBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAg
TE9HKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmcsICIlc1xuIGFjdG9yPSAlcCIsIF9fZnVuY19fLCBs
YXllcik7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2
OworICAgIHByaXYtPnN1cmZhY2UgPSBzdXJmYWNlOworICAgIHVwZGF0ZVRleHR1cmUobGF5ZXIp
OworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckludmFsaWRhdGVSZWN0YW5nbGUoR3JhcGhp
Y3NMYXllckFjdG9yKiBsYXllciwgY29uc3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAg
R3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgaWYg
KCFwcml2LT50ZXh0dXJlKQorICAgICAgICByZXR1cm47CisKKyAgICBjYWlyb19yZWN0YW5nbGVf
aW50X3QgcmVjdChlbmNsb3NpbmdJbnRSZWN0KGRpcnR5UmVjdCkpOworICAgIGNsdXR0ZXJfY2Fp
cm9fdGV4dHVyZV9pbnZhbGlkYXRlX3JlY3RhbmdsZShDTFVUVEVSX0NBSVJPX1RFWFRVUkUocHJp
di0+dGV4dHVyZSksICZyZWN0KTsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRUcmFu
c2Zvcm0oR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgY29uc3QgQ29nbE1hdHJpeCogbWF0cml4
KSAKK3sKKyAgICBMT0coQWNjZWxlcmF0ZWRDb21wb3NpdGluZywgIiVzIGFjdG9yID0gJXAgJXMi
LCBfX2Z1bmNfXywgbGF5ZXIsIGNsdXR0ZXJfYWN0b3JfZ2V0X25hbWUoQ0xVVFRFUl9BQ1RPUihs
YXllcikpKTsKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnBy
aXY7CisKKyAgICBMT0coQWNjZWxlcmF0ZWRDb21wb3NpdGluZywgIlRyYW5zZm9ybSBtYXRyaXg6
ICVzIiwgbWF0cml4VG9TdHJpbmcobWF0cml4KSk7CisKKyAgICBpZiAocHJpdi0+bWF0cml4KSB7
CisgICAgICAgIGNvZ2xfbWF0cml4X2ZyZWUocHJpdi0+bWF0cml4KTsKKyAgICAgICAgcHJpdi0+
bWF0cml4ID0gMDsKKyAgICAgICAgY2x1dHRlcl9hY3Rvcl9xdWV1ZV9yZWRyYXcoQ0xVVFRFUl9B
Q1RPUihsYXllcikpOworICAgIH0KKworICAgIENvZ2xNYXRyaXggaWRlbnRpdHk7CisgICAgY29n
bF9tYXRyaXhfaW5pdF9pZGVudGl0eSgmaWRlbnRpdHkpOworICAgIGlmIChjb2dsX21hdHJpeF9l
cXVhbCgoQ29nbE1hdHJpeCopJmlkZW50aXR5LCAoQ29nbE1hdHJpeCopbWF0cml4KSkgeworICAg
ICAgICBMT0coQWNjZWxlcmF0ZWRDb21wb3NpdGluZywgIklnbm9yZSBpZGVudGl0eSBtYXRyaXgi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChwcml2LT5tYXRyaXgpCisgICAg
ICAgIGNvZ2xfbWF0cml4X2ZyZWUocHJpdi0+bWF0cml4KTsKKworICAgIHByaXYtPm1hdHJpeCA9
IGNvZ2xfbWF0cml4X2NvcHkobWF0cml4KTsKKyAgICBjbHV0dGVyX2FjdG9yX3F1ZXVlX3JlZHJh
dyhDTFVUVEVSX0FDVE9SKGxheWVyKSk7Cit9CisKK3N0YXRpYyB2b2lkIGNyZWF0ZU9mZlNjcmVl
bkZyYW1lQnVmZmVyKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGNvbnN0IENvZ2xNYXRyaXgq
IG1hdHJpeCkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXIt
PnByaXY7CisKKyAgICBnZmxvYXQgd2lkdGggPSBjbHV0dGVyX2FjdG9yX2dldF93aWR0aChDTFVU
VEVSX0FDVE9SKGxheWVyKSk7CisgICAgZ2Zsb2F0IGhlaWdodCA9IGNsdXR0ZXJfYWN0b3JfZ2V0
X2hlaWdodChDTFVUVEVSX0FDVE9SKGxheWVyKSk7CisKKyAgICBDbHV0dGVyQWN0b3JCb3ggYm94
OworICAgIAorICAgIC8vIEhvdyB0byBnZXQgdGhlIHRoZSBwYWludCBib3ggb2YgY2hpbGRyZW4/
IAorICAgIGlmIChjbHV0dGVyX2FjdG9yX2dldF9wYWludF9ib3goQ0xVVFRFUl9BQ1RPUihsYXll
ciksICZib3gpKSB7CisgICAgICAgIGNsdXR0ZXJfYWN0b3JfYm94X2dldF9zaXplKCZib3gsICZw
cml2LT5mYm9XaWR0aCwgJnByaXYtPmZib0hlaWdodCk7CisgICAgICAgIGNsdXR0ZXJfYWN0b3Jf
Ym94X2dldF9vcmlnaW4oJmJveCwgJnByaXYtPmZib1dpZHRoLCAmcHJpdi0+ZmJvSGVpZ2h0KTsK
KyAgICAgICAgcHJpdi0+ZXhwYW5kWCA9IChwcml2LT5mYm9XaWR0aCAtICB3aWR0aCkgLyAyLjBm
OworICAgICAgICBwcml2LT5leHBhbmRZID0gKHByaXYtPmZib0hlaWdodCAtICBoZWlnaHQpIC8g
Mi4wZjsKKyAgICB9IGVsc2UgeworICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCB0byBnZXQgYSBw
YWludCBib3giKTsKKyAgICAgICAgZmxvYXQgZmFjdG9yID0gMy4wZjsgCisgICAgICAgIHByaXYt
PmZib1dpZHRoID0gIHdpZHRoICogZmFjdG9yOworICAgICAgICBwcml2LT5mYm9IZWlnaHQ9ICBo
ZWlnaHQgKiBmYWN0b3I7CisgICAgICAgIHByaXYtPmV4cGFuZFggPSAgKHdpZHRoICogZmFjdG9y
IC0gd2lkdGgpIC8gMi4wZjsKKyAgICAgICAgcHJpdi0+ZXhwYW5kWSA9ICAoaGVpZ2h0ICogZmFj
dG9yIC0gaGVpZ2h0KSAvIDIuMGY7CisgICAgfQorCisgICAgLyogCisgICAgICogQ3JlYXRlIGFu
IG9mZnNjcmVlbiBidWZmZXIgd2l0aCB0ZXh0dXJlLgorICAgICAqLworICAgIExPRyhBY2NlbGVy
YXRlZENvbXBvc2l0aW5nLCAiQ3JlYXRpbmcgdGV4dHVyZSB3aXRoIHNpemUgKCVmLCAlZilcbiIs
IHByaXYtPmZib1dpZHRoLCBwcml2LT5mYm9IZWlnaHQpOworCisgICAgaWYgKHByaXYtPnRleHR1
cmVJRCkKKyAgICAgICAgY29nbF9oYW5kbGVfdW5yZWYocHJpdi0+dGV4dHVyZUlEKTsKKworICAg
IGlmIChwcml2LT5vZmZzY3JlZW5JRCkKKyAgICAgICAgY29nbF9oYW5kbGVfdW5yZWYocHJpdi0+
b2Zmc2NyZWVuSUQpOworCisgICAgcHJpdi0+dGV4dHVyZUlEID0gY29nbF90ZXh0dXJlX25ld193
aXRoX3NpemUocHJpdi0+ZmJvV2lkdGgsIHByaXYtPmZib0hlaWdodCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT0dMX1RFWFRVUkVfTk9fU0xJQ0lO
RywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT0dM
X1BJWEVMX0ZPUk1BVF9BUkdCXzg4ODgpOworIAorICAgIGlmIChwcml2LT50ZXh0dXJlSUQgPT0g
Q09HTF9JTlZBTElEX0hBTkRMRSkgeworICAgICAgICBnX3dhcm5pbmcoIkZhaWxlZCBjcmVhdGlu
ZyB0ZXh0dXJlIHdpdGggc2l6ZSFcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorIAorCisj
aWYgQ0xVVFRFUl9DSEVDS19WRVJTSU9OKDEsIDEwLCAwKQorICAgIHByaXYtPm9mZnNjcmVlbklE
ID0gY29nbF9vZmZzY3JlZW5fbmV3X3RvX3RleHR1cmUoc3RhdGljX2Nhc3Q8Q29nbFRleHR1cmUq
Pihwcml2LT50ZXh0dXJlSUQpKTsKKyNlbHNlCisgICAgcHJpdi0+b2Zmc2NyZWVuSUQgPSBjb2ds
X29mZnNjcmVlbl9uZXdfdG9fdGV4dHVyZShwcml2LT50ZXh0dXJlSUQpOworI2VuZGlmCisKKyAg
ICBpZiAocHJpdi0+b2Zmc2NyZWVuSUQgPT0gQ09HTF9JTlZBTElEX0hBTkRMRSkgeworICAgICAg
ICBnX3dhcm5pbmcoIkZhaWxlZCBjcmVhdGluZyBvZmZzY3JlZW4gdG8gdGV4dHVyZSFcbiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZ2Zsb2F0IHpDYW1lcmE7CisgICAgQ29nbE1h
dHJpeCBtdk1hdHJpeDsKKyAgICBDb2dsTWF0cml4IHByb2plY3Rpb25NYXRyaXg7CisgICAgCisg
ICAgY29nbF9wdXNoX2ZyYW1lYnVmZmVyKChDb2dsRnJhbWVidWZmZXIqKXByaXYtPm9mZnNjcmVl
bklEKTsKKworICAgIC8vIFRoZSBjb25zdGFudCB2YWx1ZSBuZWVkcyB0byBiZSBtdWx0aXBsaWVk
IGluIG9yZGVyIHRvIHJlbmRlciBsaWtlIG90aGVyIFdlYktpdCBicm93c2Vycy4KKyAgICBnZmxv
YXQgcGVyc3BlY3RpdmVPcmlnaW5YID0gLW1hdHJpeC0+eHogLyBtYXRyaXgtPnd6OworICAgIGdm
bG9hdCBwZXJzcGVjdGl2ZU9yaWdpblkgPSAtbWF0cml4LT55eiAvIG1hdHJpeC0+d3o7CisKKyAg
ICAvKiBFeHBhbmQgdGhlIHZpZXdwb3J0IGlmIHRoZSBhY3RvciBpcyBwYXJ0aWFsbHkgb2ZmLXN0
YWdlLAorICAgICAqIG90aGVyd2lzZSB0aGUgYWN0b3Igd2lsbCBlbmQgdXAgY2xpcHBlZCB0byB0
aGUgc3RhZ2Ugdmlld3BvcnQKKyAgICAgKi8gICAgCisgICAgY29nbF9zZXRfdmlld3BvcnQoLXBl
cnNwZWN0aXZlT3JpZ2luWCwgLXBlcnNwZWN0aXZlT3JpZ2luWSwgcHJpdi0+ZmJvV2lkdGgsIHBy
aXYtPmZib0hlaWdodCk7CisKKyAgICAvKiBjaGlsZHJlbk1hdHJpeChjaGlsZHJlblRyYW5zZm9y
bSkgaXMgZ2l2ZW4gYnkgV2ViQ29yZS4KKyAgICAgICBXaGVuIENTUzMgcGVyc3BlY3RpdmUgcHJv
cGVydHkgdmFsdWUgaXMgNDAwLCBpdCBoYXMgdGhlIGZvbGxvd2luZyBtYXRyaXggdmFsdWU6Cisg
ICAgICAgeHgseHkseHoseHc9MS4wMDAwMDAsMC4wMDAwMDAsMC4wMDAwMDAsMC4wMDAwMDAKKyAg
ICAgICB5eCx5eSx5eix5dz0wLjAwMDAwMCwxLjAwMDAwMCwwLjAwMDAwMCwwLjAwMDAwMAorICAg
ICAgIHp4LHp5LHp6LHp3PTAuMDAwMDAwLDAuMDAwMDAwLDEuMDAwMDAwLDAuMDAwMDAwCisgICAg
ICAgd3gsd3ksd3osd3c9MC4wMDAwMDAsMC4wMDAwMDAsLTAuMDAyNTAwLDEuMDAwMDAwCisgICAg
ICovCisgICAgY29nbF9tYXRyaXhfaW5pdF9pZGVudGl0eSgmcHJvamVjdGlvbk1hdHJpeCk7Cisg
ICAgLy8gQ3JlYXRlIGEgcGVyc3BlY3RpdmUgcHJvamVjdGlvbiBtYXRyaXggdXNpbmcgdGhlIENT
UzMgcGVyc3BlY3RpdmUgcHJvcGVydHkgdmFsdWUuCisKKyAgICBnZmxvYXQgY3NzM1BlcnNwZWN0
aXZlID0gLTEuMGYgLyBtYXRyaXgtPnd6OworICAgIExPRyhBY2NlbGVyYXRlZENvbXBvc2l0aW5n
LCAiQ1NTMyBQZXJzZXBjdGl2ZSB2YWx1ZSBpcyAlZiIsIGNzczNQZXJzcGVjdGl2ZSk7CisgICAg
TE9HKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmcsICJDU1MzIFBlcnNlcGN0aXZlLW9yaWdpbih4KSB2
YWx1ZSBpcyAlZiIsIG1hdHJpeC0+eHopOworICAgIExPRyhBY2NlbGVyYXRlZENvbXBvc2l0aW5n
LCAiQ1NTMyBQZXJzZXBjdGl2ZS1vcmlnaW4oeSkgdmFsdWUgaXMgJWYiLCBtYXRyaXgtPnl6KTsK
KworICAgIGNvZ2xfbWF0cml4X3BlcnNwZWN0aXZlKCZwcm9qZWN0aW9uTWF0cml4LCAzMCwgMS4w
LCAwLjEsIGNzczNQZXJzcGVjdGl2ZSk7CisgICAgY29nbF9zZXRfcHJvamVjdGlvbl9tYXRyaXgo
JnByb2plY3Rpb25NYXRyaXgpOworCisgICAgekNhbWVyYSA9IDAuNSAqIHByb2plY3Rpb25NYXRy
aXgueHg7CisgICAgY29nbF9tYXRyaXhfaW5pdF9pZGVudGl0eSgmbXZNYXRyaXgpOworICAgIGNv
Z2xfbWF0cml4X3RyYW5zbGF0ZSgmbXZNYXRyaXgsIC0wLjVmLCAtMC41ZiwgLXpDYW1lcmEpOwor
ICAgIC8vIFRoZSBsYXN0IHBhcmFtZXRlciBoYXMgYW4gZWZmZWN0IG9uIHRoZSBkZXB0aC4KKyAg
ICBjb2dsX21hdHJpeF9zY2FsZSgmbXZNYXRyaXgsIDEuMGYgLyB3aWR0aCwgLTEuMGYgLyBoZWln
aHQsIDEuMGYgLyBjc3MzUGVyc3BlY3RpdmUgLyAwLjU1Zik7CisgICAgY29nbF9tYXRyaXhfdHJh
bnNsYXRlKCZtdk1hdHJpeCwgMC4wZiwgLTEuMGYgKiBoZWlnaHQsIDAuMGYpOworCisgICAgY29n
bF9tYXRyaXhfdHJhbnNsYXRlKCZtdk1hdHJpeCwgd2lkdGggLyAyLjBmLCBoZWlnaHQgLyAyLjBm
LCAwLjBmKTsKKyAgICBjb2dsX21hdHJpeF9zY2FsZSgmbXZNYXRyaXgsIHdpZHRoIC8gcHJpdi0+
ZmJvV2lkdGgsIGhlaWdodCAvIHByaXYtPmZib0hlaWdodCwgMS4wZik7CisgICAgY29nbF9tYXRy
aXhfdHJhbnNsYXRlKCZtdk1hdHJpeCwgLXdpZHRoIC8gMi4wZiwgLWhlaWdodCAvIDIuMGYsIDAu
MGYpOworCisgICAgY29nbF9tYXRyaXhfdHJhbnNsYXRlKCZtdk1hdHJpeCwgcGVyc3BlY3RpdmVP
cmlnaW5YLCBwZXJzcGVjdGl2ZU9yaWdpblksIDAuMGYpOworICAgIGNvZ2xfc2V0X21vZGVsdmll
d19tYXRyaXgoJm12TWF0cml4KTsKKworICAgIGNvZ2xfcG9wX2ZyYW1lYnVmZmVyKCk7CisKKyAg
ICBwcml2LT5vZmZzY3JlZW4gPSBUUlVFOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNl
dENoaWxkcmVuVHJhbnNmb3JtKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGNvbnN0IENvZ2xN
YXRyaXgqIG1hdHJpeCkKK3sKKyAgICBMT0coQWNjZWxlcmF0ZWRDb21wb3NpdGluZywgIiVzICVz
KCVwKSIsIF9fZnVuY19fLCBjbHV0dGVyX2FjdG9yX2dldF9uYW1lKENMVVRURVJfQUNUT1IobGF5
ZXIpKSwgbGF5ZXIpOworICAgIExPRyhBY2NlbGVyYXRlZENvbXBvc2l0aW5nLCAiTWF0cml4Olxu
JXMiLCBtYXRyaXhUb1N0cmluZyhtYXRyaXgpKTsKKworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclBy
aXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKworICAgIENvZ2xNYXRyaXggaWRlbnRpdHk7Cisg
ICAgY29nbF9tYXRyaXhfaW5pdF9pZGVudGl0eSgmaWRlbnRpdHkpOworICAgIGlmIChjb2dsX21h
dHJpeF9lcXVhbCgoQ29nbE1hdHJpeCopJmlkZW50aXR5LCAoQ29nbE1hdHJpeCopbWF0cml4KSkg
eworICAgICAgICBnX21lc3NhZ2UoIklnbm9yZSBpZGVudGl0eSBtYXRyaXgiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChwcml2LT5jaGlsZHJlbk1hdHJpeCkKKyAgICAgICAg
Y29nbF9tYXRyaXhfZnJlZShwcml2LT5jaGlsZHJlbk1hdHJpeCk7CisKKyAgICBwcml2LT5jaGls
ZHJlbk1hdHJpeCA9IGNvZ2xfbWF0cml4X2NvcHkobWF0cml4KTsKKworICAgIC8vIFRoZSBjaGls
ZHJlbiBvZiB0aGlzIGxheWVyIHdoaWNoIGhhcyBhIHBlcnNwZWN0aXZlIHByb3BlcnR5IGFyZSBu
b3QgZmxhdHRlbiAKKyAgICAvLyB0byBtYWtlIHRoZSBwZXJzcGVjdGl2ZSB3b3JrLgorICAgIEdM
aXN0KiBsaXN0OworICAgIGZvciAobGlzdCA9IGxheWVyLT5jaGlsZHJlbjsgbGlzdDsgbGlzdCA9
IGxpc3QtPm5leHQpIHsKKyAgICAgICAgR3JhcGhpY3NMYXllckFjdG9yKiBjaGlsZCA9IEdSQVBI
SUNTX0xBWUVSX0FDVE9SKGxpc3QtPmRhdGEpOworICAgICAgICBncmFwaGljc0xheWVyQWN0b3JT
ZXRGbGF0dGVuTWF0cml4KGNoaWxkLCBGQUxTRSk7CisgICAgfQorCisgICAgY3JlYXRlT2ZmU2Ny
ZWVuRnJhbWVCdWZmZXIobGF5ZXIsIG1hdHJpeCk7CisKKyAgICBjbHV0dGVyX2FjdG9yX3F1ZXVl
X3JlZHJhdyhDTFVUVEVSX0FDVE9SKGxheWVyKSk7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFj
dG9yU2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgZ2Zsb2F0IHgsIGdm
bG9hdCB5LCBnZmxvYXQgeikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2
ID0gbGF5ZXItPnByaXY7CisgICAgcHJpdi0+YW5jaG9yWCA9IHg7CisgICAgcHJpdi0+YW5jaG9y
WSA9IHk7CisgICAgcHJpdi0+YW5jaG9yWiA9IHo7CisKKyAgICBDbHV0dGVyQWN0b3IqIGFjdG9y
ID0gQ0xVVFRFUl9BQ1RPUihsYXllcik7CisKKyAgICBmbG9hdCB3aWR0aCwgaGVpZ2h0OworICAg
IGNsdXR0ZXJfYWN0b3JfZ2V0X3NpemUoYWN0b3IsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgY2x1
dHRlcl9hY3Rvcl9zZXRfYW5jaG9yX3BvaW50KGFjdG9yLCB3aWR0aCAqIHByaXYtPmFuY2hvclgs
IGhlaWdodCAqIHByaXYtPmFuY2hvclkpOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rvckdl
dEFuY2hvclBvaW50KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGdmbG9hdCogeCwgZ2Zsb2F0
KiB5LCBnZmxvYXQqIHopCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9
IGxheWVyLT5wcml2OworICAgIGlmICh4KQorICAgICAgICAqeCA9IHByaXYtPmFuY2hvclg7CisK
KyAgICBpZiAoeSkKKyAgICAgICAgKnkgPSBwcml2LT5hbmNob3JZOworCisgICAgaWYgKHopCisg
ICAgICAgICp6ID0gcHJpdi0+YW5jaG9yWjsKK30KKworZ2Zsb2F0IGdyYXBoaWNzTGF5ZXJBY3Rv
ckdldERlcHRoKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXll
ckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIHJldHVybiBwcml2LT5kZXB0
aDsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRTY3JvbGxQb3NpdGlvbihHcmFwaGlj
c0xheWVyQWN0b3IqIGxheWVyLCBnZmxvYXQgeCwgZ2Zsb2F0IHkpCit7CisgICAgTE9HKEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcsICJHcmFwaGljc0xheWVyQWN0b3I6OiVzKCVmLCAlZikiLCBfX2Z1
bmNfXywgeCwgeSk7CisKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5
ZXItPnByaXY7CisKKyAgICBpZiAoeCA+IDAgfHwgeSA+IDApCisgICAgICAgIHJldHVybjsKKwor
ICAgIHByaXYtPnNjcm9sbFggPSB4OworICAgIHByaXYtPnNjcm9sbFkgPSB5OworCisgICAgY2x1
dHRlcl9hY3Rvcl9xdWV1ZV9yZWRyYXcoQ0xVVFRFUl9BQ1RPUihsYXllcikpOworfQorCitnaW50
IGdyYXBoaWNzTGF5ZXJBY3RvckdldENvdW50Y2hpbGRyZW4oR3JhcGhpY3NMYXllckFjdG9yKiBs
YXllcikKK3sKKyAgICBBU1NFUlQoR1JBUEhJQ1NfTEFZRVJfSVNfQUNUT1IobGF5ZXIpKTsKKwor
ICAgIHJldHVybiBnX2xpc3RfbGVuZ3RoKGxheWVyLT5jaGlsZHJlbik7Cit9CisKK3ZvaWQgZ3Jh
cGhpY3NMYXllckFjdG9yUmVwbGFjZVN1YmxheWVyKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIs
IENsdXR0ZXJBY3Rvciogb2xkQ2hpbGRMYXllciwgQ2x1dHRlckFjdG9yKiBuZXdDaGlsZExheWVy
KQoreworICAgIExPRyhBY2NlbGVyYXRlZENvbXBvc2l0aW5nLCAiR3JhcGhpY3NMYXllckFjdG9y
OjolcyIsIF9fZnVuY19fKTsKKworICAgIEFTU0VSVChHUkFQSElDU19MQVlFUl9JU19BQ1RPUihs
YXllcikpOworICAgIEFTU0VSVChDTFVUVEVSX0lTX0FDVE9SKG9sZENoaWxkTGF5ZXIpKTsKKyAg
ICBBU1NFUlQoQ0xVVFRFUl9JU19BQ1RPUihuZXdDaGlsZExheWVyKSk7CisKKyAgICBjbHV0dGVy
X2FjdG9yX3JlbW92ZV9jaGlsZChDTFVUVEVSX0FDVE9SKGxheWVyKSwgb2xkQ2hpbGRMYXllcik7
CisgICAgY2x1dHRlcl9hY3Rvcl9hZGRfY2hpbGQoQ0xVVFRFUl9BQ1RPUihsYXllciksIG5ld0No
aWxkTGF5ZXIpOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rvckluc2VydFN1YmxheWVyKEdy
YXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIENsdXR0ZXJBY3RvciogY2hpbGRMYXllciwgZ2ludCBp
bmRleCkKK3sKKyAgICBMT0coQWNjZWxlcmF0ZWRDb21wb3NpdGluZywgIkdyYXBoaWNzTGF5ZXJB
Y3Rvcjo6JXMiLCBfX2Z1bmNfXyk7CisKKyAgICBBU1NFUlQoR1JBUEhJQ1NfTEFZRVJfSVNfQUNU
T1IobGF5ZXIpKTsKKyAgICBBU1NFUlQoQ0xVVFRFUl9JU19BQ1RPUihjaGlsZExheWVyKSk7CisK
KyAgICBnX29iamVjdF9yZWYoY2hpbGRMYXllcik7CisKKyAgICBsYXllci0+Y2hpbGRyZW4gPSBn
X2xpc3RfaW5zZXJ0KGxheWVyLT5jaGlsZHJlbiwgY2hpbGRMYXllciwgaW5kZXgpOworICAgIEFT
U0VSVCghY2x1dHRlcl9hY3Rvcl9nZXRfcGFyZW50KGNoaWxkTGF5ZXIpKTsKKyAgICBjbHV0dGVy
X2FjdG9yX3NldF9wYXJlbnQoY2hpbGRMYXllciwgQ0xVVFRFUl9BQ1RPUihsYXllcikpOworICAg
IGNsdXR0ZXJfYWN0b3JfcXVldWVfcmVsYXlvdXQoQ0xVVFRFUl9BQ1RPUihsYXllcikpOworCisg
ICAgZ19vYmplY3RfdW5yZWYoY2hpbGRMYXllcik7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFj
dG9yU2V0U3VibGF5ZXJzKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXJB
Y3Rvckxpc3QmIHN1YkxheWVycykKK3sKKyAgICBpZiAoIXN1YkxheWVycy5zaXplKCkpIHsKKyAg
ICAgICAgZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlQWxsKGxheWVyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3ViTGF5ZXJzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIENsdXR0ZXJBY3RvciogbGF5ZXJBY3RvciA9IENMVVRURVJfQUNUT1Io
c3ViTGF5ZXJzW2ldLmdldCgpKTsKKyAgICAgICAgY2x1dHRlcl9jb250YWluZXJfYWRkX2FjdG9y
KENMVVRURVJfQ09OVEFJTkVSKGxheWVyKSwgbGF5ZXJBY3Rvcik7CisgICAgfQorfQorCit2b2lk
IGdyYXBoaWNzTGF5ZXJBY3RvclNldFByZXNlcnZlczNEKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5
ZXIsIGdib29sZWFuIHZhbHVlKQoreworICAgIExPRyhBY2NlbGVyYXRlZENvbXBvc2l0aW5nLCAi
JXMoJWQpIGFjdG9yPSVwICVzIiwgX19mdW5jX18sIHZhbHVlLCBsYXllciwgY2x1dHRlcl9hY3Rv
cl9nZXRfbmFtZShDTFVUVEVSX0FDVE9SKGxheWVyKSkpOworCisgICAgR3JhcGhpY3NMYXllckFj
dG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIHByaXYtPnByZXNlcnZlczNEID0g
dmFsdWU7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0RmxhdHRlbk1hdHJpeChHcmFw
aGljc0xheWVyQWN0b3IqIGxheWVyLCBnYm9vbGVhbiB2YWx1ZSkKK3sKKyAgICBMT0coQWNjZWxl
cmF0ZWRDb21wb3NpdGluZywgIiVzKCVkKSAlcyIsIF9fZnVuY19fLCB2YWx1ZSwgY2x1dHRlcl9h
Y3Rvcl9nZXRfbmFtZShDTFVUVEVSX0FDVE9SKGxheWVyKSkpOworCisKKyAgICBHcmFwaGljc0xh
eWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgcHJpdi0+ZmxhdHRlbk1h
dHJpeCA9IHZhbHVlOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldERvdWJsZVNpZGVk
KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGdib29sZWFuIHZhbHVlKQoreworICAgIExPRyhB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nLCAiR3JhcGhpY3NMYXllckFjdG9yOjolcyglZCkiLCBfX2Z1
bmNfXywgdmFsdWUpOworCisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxh
eWVyLT5wcml2OworICAgIHByaXYtPmJhY2tmYWNlQ3VsbGluZyA9ICF2YWx1ZTsKK30KKworZ2Jv
b2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yR2V0RG91YmxlU2lkZWQoR3JhcGhpY3NMYXllckFjdG9y
KiBsYXllcikKK3sKKyAgICBMT0coQWNjZWxlcmF0ZWRDb21wb3NpdGluZywgIkdyYXBoaWNzTGF5
ZXJBY3Rvcjo6JXMiLCBfX2Z1bmNfXyk7CisKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRl
KiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgcmV0dXJuICFwcml2LT5iYWNrZmFjZUN1bGxpbmc7
Cit9CisKK0dyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUgZ3JhcGhpY3NMYXllckFjdG9y
R2V0TGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgTE9HKEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmcsICJHcmFwaGljc0xheWVyQWN0b3I6OiVzIiwgX19mdW5jX18pOwor
ICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKyAgICBy
ZXR1cm4gcHJpdi0+bGF5ZXJUeXBlOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldExh
eWVyVHlwZShHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6
TGF5ZXJUeXBlIGxheWVyVHlwZSkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBw
cml2ID0gbGF5ZXItPnByaXY7CisgICAgcHJpdi0+bGF5ZXJUeXBlID0gbGF5ZXJUeXBlOworfQor
Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zbGF0ZVgoR3JhcGhpY3NMYXllckFjdG9y
KiBsYXllciwgZmxvYXQgdmFsdWUpCit7CisgICAgTE9HKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmcs
ICJHcmFwaGljc0xheWVyQWN0b3I6OiVzKCVmKSIsIF9fZnVuY19fLCB2YWx1ZSk7CisKKyAgICBH
cmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgcHJpdi0+
dHJhbnNsYXRlWCA9IHZhbHVlOworICAgIGNsdXR0ZXJfYWN0b3JfcXVldWVfcmVkcmF3KENMVVRU
RVJfQUNUT1IobGF5ZXIpKTsKK30KKworZmxvYXQgZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNs
YXRlWChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQoreworICAgIExPRyhBY2NlbGVyYXRlZENv
bXBvc2l0aW5nLCAiR3JhcGhpY3NMYXllckFjdG9yOjolcyIsIF9fZnVuY19fKTsKKworICAgIEdy
YXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKyAgICByZXR1cm4g
cHJpdi0+dHJhbnNsYXRlWDsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xh
dGVZKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGZsb2F0IHZhbHVlKQoreworICAgIExPRyhB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nLCAiR3JhcGhpY3NMYXllckFjdG9yOjolcyglZikiLCBfX2Z1
bmNfXywgdmFsdWUpOworCisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxh
eWVyLT5wcml2OworICAgIHByaXYtPnRyYW5zbGF0ZVkgPSB2YWx1ZTsKKyAgICBjbHV0dGVyX2Fj
dG9yX3F1ZXVlX3JlZHJhdyhDTFVUVEVSX0FDVE9SKGxheWVyKSk7Cit9CisKK2Zsb2F0IGdyYXBo
aWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVkoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sK
KyAgICBMT0coQWNjZWxlcmF0ZWRDb21wb3NpdGluZywgIkdyYXBoaWNzTGF5ZXJBY3Rvcjo6JXMi
LCBfX2Z1bmNfXyk7CisKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5
ZXItPnByaXY7CisgICAgcmV0dXJuIHByaXYtPnRyYW5zbGF0ZVk7Cit9CisKK3N0YXRpYyB2b2lk
IGdyYXBoaWNzTGF5ZXJBY3RvclNldE1hdHJpeEFycmF5KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5
ZXIsIGdpbnQgaW5kZXgsIGdmbG9hdCB2YWx1ZSkKK3sKKyAgICBMT0coQWNjZWxlcmF0ZWRDb21w
b3NpdGluZywgIkdyYXBoaWNzTGF5ZXJBY3Rvcjo6JXMgaW5kZXggPSAlZCIsIF9fZnVuY19fLCBp
bmRleCk7CisKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnBy
aXY7CisgICAgcHJpdi0+bWF0cml4QXJyYXlbaW5kZXhdID0gdmFsdWU7CisKKyAgICBpZiAoaW5k
ZXggPT0gMTUpIHsKKyAgICAgICAgQ29nbE1hdHJpeCBtYXRyaXg7CisgICAgICAgIGNvZ2xfbWF0
cml4X2luaXRfaWRlbnRpdHkoJm1hdHJpeCk7CisgICAgICAgIG1hdHJpeC54eCA9IHByaXYtPm1h
dHJpeEFycmF5WzBdOworICAgICAgICBtYXRyaXgueXggPSBwcml2LT5tYXRyaXhBcnJheVsxXTsK
KyAgICAgICAgbWF0cml4Lnp4ID0gcHJpdi0+bWF0cml4QXJyYXlbMl07CisgICAgICAgIG1hdHJp
eC53eCA9IHByaXYtPm1hdHJpeEFycmF5WzNdOworICAgICAgICBtYXRyaXgueHkgPSBwcml2LT5t
YXRyaXhBcnJheVs0XTsKKyAgICAgICAgbWF0cml4Lnl5ID0gcHJpdi0+bWF0cml4QXJyYXlbNV07
CisgICAgICAgIG1hdHJpeC56eSA9IHByaXYtPm1hdHJpeEFycmF5WzZdOworICAgICAgICBtYXRy
aXgud3kgPSBwcml2LT5tYXRyaXhBcnJheVs3XTsKKyAgICAgICAgbWF0cml4Lnh6ID0gcHJpdi0+
bWF0cml4QXJyYXlbOF07CisgICAgICAgIG1hdHJpeC55eiA9IHByaXYtPm1hdHJpeEFycmF5Wzld
OworICAgICAgICBtYXRyaXguenogPSBwcml2LT5tYXRyaXhBcnJheVsxMF07CisgICAgICAgIG1h
dHJpeC53eiA9IHByaXYtPm1hdHJpeEFycmF5WzExXTsKKyAgICAgICAgbWF0cml4Lnh3ID0gcHJp
di0+bWF0cml4QXJyYXlbMTJdOworICAgICAgICBtYXRyaXgueXcgPSBwcml2LT5tYXRyaXhBcnJh
eVsxM107CisgICAgICAgIG1hdHJpeC56dyA9IHByaXYtPm1hdHJpeEFycmF5WzE0XTsKKyAgICAg
ICAgbWF0cml4Lnd3ID0gcHJpdi0+bWF0cml4QXJyYXlbMTVdOworICAgICAgICBwcml2LT5tYXRy
aXggPSBjb2dsX21hdHJpeF9jb3B5KCZtYXRyaXgpOworCisgICAgICAgIGNsdXR0ZXJfYWN0b3Jf
cXVldWVfcmVkcmF3KENMVVRURVJfQUNUT1IobGF5ZXIpKTsKKyAgICB9Cit9CisKKy8vIE9ubHkg
dXNlZCBmb3IgdmlkZW8gbGF5ZXJzLiBTaG91bGQgbW92ZSB0byBpdHMgb3duIG9iamVjdC4KK0Ns
dXR0ZXJUZXh0dXJlKiBncmFwaGljc0xheWVyQWN0b3JHZXRUZXh0dXJlKEdyYXBoaWNzTGF5ZXJB
Y3RvciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxh
eWVyLT5wcml2OworICAgIEFTU0VSVChwcml2LT50ZXh0dXJlICYmIENMVVRURVJfSVNfVEVYVFVS
RShwcml2LT50ZXh0dXJlKSAmJiAhQ0xVVFRFUl9JU19DQUlST19URVhUVVJFKHByaXYtPnRleHR1
cmUpKTsKKyAgICByZXR1cm4gQ0xVVFRFUl9URVhUVVJFIChwcml2LT50ZXh0dXJlKTsKK30KKwor
dm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9y
KiBsYXllciwgZ2Jvb2xlYW4gZHJhd3NDb250ZW50KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3Rv
clByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKworICAgIGlmIChkcmF3c0NvbnRlbnQgPT0g
cHJpdi0+ZHJhd3NDb250ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5kcmF3c0Nv
bnRlbnQgPSBkcmF3c0NvbnRlbnQ7CisKKyAgICB1cGRhdGVUZXh0dXJlKGxheWVyKTsKK30KKwor
Z2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yR2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJB
Y3RvciogbGF5ZXIpCit7CisgICAgcmV0dXJuIGxheWVyLT5wcml2LT5kcmF3c0NvbnRlbnQ7Cit9
CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0TWFza3NUb0JvdW5kcyhHcmFwaGljc0xheWVy
QWN0b3IqIGxheWVyLCBnYm9vbGVhbiBtYXNrc1RvQm91bmRzKQoreworICAgIEdyYXBoaWNzTGF5
ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKworICAgIGlmIChwcml2LT5tYXNr
c1RvQm91bmRzID09IG1hc2tzVG9Cb3VuZHMpCisgICAgICAgIHJldHVybjsKKworICAgIHByaXYt
Pm1hc2tzVG9Cb3VuZHMgPSBtYXNrc1RvQm91bmRzOworICAgIGNsdXR0ZXJfYWN0b3JfcXVldWVf
cmVkcmF3KENMVVRURVJfQUNUT1IobGF5ZXIpKTsKK30KKworI2lmbmRlZiBOREVCVUcKK3N0YXRp
YyB2b2lkIHByaW50SW5kZW50KGdpbnQgaW5kZW50KQoreworICAgIGZvciAoIDsgaW5kZW50ID4g
MDsgLS1pbmRlbnQpCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiICAiKTsKK30KKworc3RhdGlj
IGNvbnN0IGdjaGFyKiBsYXllclR5cGVbXSA9IHsgIkxheWVyVHlwZUxheWVyIiwgIkxheWVyVHlw
ZVdlYkxheWVyIiwgIkxheWVyVHlwZVZpZGVvTGF5ZXIiLCAiTGF5ZXJUeXBlVHJhbnNmb3JtTGF5
ZXIiLCAiTGF5ZXJUeXBlUm9vdExheWVyIiwgIkxheWVyVHlwZUN1c3RvbSIgfTsKKwordm9pZCBn
cmFwaGljc0xheWVyQWN0b3JQcmludENoaWxkcmVuSW5mb3JtYXRpb24oR3JhcGhpY3NMYXllckFj
dG9yKiBsYXllciwgZ2ludCBpbmRlbnQpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0
ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgcHJpbnRJbmRlbnQoaW5kZW50KTsKKyAgICBm
cHJpbnRmKHN0ZGVyciwgIkxheWVyIG5hbWU6ICVzXG4iLCBjbHV0dGVyX2FjdG9yX2dldF9uYW1l
KENMVVRURVJfQUNUT1IobGF5ZXIpKSk7CisgICAgcHJpbnRJbmRlbnQoaW5kZW50KTsKKyAgICBm
cHJpbnRmKHN0ZGVyciwgIkxheWVyIFR5cGU6ICVzXG4iLCBsYXllclR5cGVbcHJpdi0+bGF5ZXJU
eXBlXSk7CisgICAgcHJpbnRJbmRlbnQoaW5kZW50KTsKKyAgICBnZmxvYXQgeCwgeSwgeiwgIHcs
IGg7CisgICAgY2x1dHRlcl9hY3Rvcl9nZXRfcG9zaXRpb24oQ0xVVFRFUl9BQ1RPUihsYXllciks
ICZ4LCAmeSk7CisgICAgdyA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3dpZHRoKENMVVRURVJfQUNUT1Io
bGF5ZXIpKTsKKyAgICBoID0gY2x1dHRlcl9hY3Rvcl9nZXRfaGVpZ2h0KENMVVRURVJfQUNUT1Io
bGF5ZXIpKTsKKyAgICB6ID0gcHJpdi0+ZGVwdGg7CisgICAgZnByaW50ZihzdGRlcnIsICJQb3Np
dGlvbjogKCVmLCAlZiwgJWYpIFNpemU6ICglZiwgJWYpXG4iLCB4LCB5LCB6LCB3LCBoKTsKKyAg
ICBwcmludEluZGVudChpbmRlbnQpOworICAgIGZwcmludGYoc3RkZXJyLCAiUHJlc2VydmUtM2Q6
ICVkICBmbGF0dGVuOiAlZCBcbiIsIHByaXYtPnByZXNlcnZlczNELCBwcml2LT5mbGF0dGVuTWF0
cml4KTsKKyAgICBwcmludEluZGVudChpbmRlbnQpOworICAgIGZwcmludGYoc3RkZXJyLCAiUGVy
c3BlY3RpdmU6ICVkXG4iLCBwcml2LT5wZXJzcGVjdGl2ZU1hdHJpeCA/IDEgOiAwKTsKKyAgICBw
cmludEluZGVudChpbmRlbnQpOworICAgIGZwcmludGYoc3RkZXJyLCAiQ2hpbGRyZW5NOiAlZFxu
IiwgcHJpdi0+Y2hpbGRyZW5NYXRyaXggPyAxIDogMCk7CisgICAgcHJpbnRJbmRlbnQoaW5kZW50
KTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIm5DaGlsZHJlbjogJWRcblxuIiwgZ3JhcGhpY3NMYXll
ckFjdG9yR2V0Q291bnRDaGlsZHJlbihsYXllcikpOworCisgICAgR0xpc3QqIGNoaWxkcmVuOwor
ICAgIGNoaWxkcmVuID0gbGF5ZXItPmNoaWxkcmVuOworCisgICAgaW5kZW50Kys7CisgICAgd2hp
bGUgKGNoaWxkcmVuKSB7CisgICAgICAgIENsdXR0ZXJBY3RvciogY2hpbGQgPSBDTFVUVEVSX0FD
VE9SKGNoaWxkcmVuLT5kYXRhKTsKKyAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi0+bmV4dDsK
KyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yUHJpbnRDaGlsZHJlbkluZm9ybWF0aW9uKEdSQVBI
SUNTX0xBWUVSX0FDVE9SKGNoaWxkKSwgaW5kZW50KTsKKyAgICB9Cit9CisjZW5kaWYKKyNlbmRp
ZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3Iu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2RkNmMzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGlj
c0xheWVyQWN0b3IuaApAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAyMDExIENv
bGxhYm9yYSBMaW1pdGVkCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJt
cyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
LAorICogdmVyc2lvbiAyLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBp
dCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgKiBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCisg
KiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJbmMuLCA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEdyYXBo
aWNzTGF5ZXJBY3Rvcl9oCisjZGVmaW5lIEdyYXBoaWNzTGF5ZXJBY3Rvcl9oCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1
ZGUgIkdyYXBoaWNzTGF5ZXJDbHV0dGVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DbHV0dGVyTGF5
ZXJDbGllbnQuaCIKKworI2luY2x1ZGUgPGNsdXR0ZXIvY2x1dHRlci5oPgorI2luY2x1ZGUgPGNv
Z2wvY29nbC5oPgorI2luY2x1ZGUgPGdsaWItb2JqZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKwor
I2RlZmluZSBHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SIGdyYXBoaWNzX2xheWVyX2FjdG9yX2dl
dF90eXBlKCkKKworI2RlZmluZSBHUkFQSElDU19MQVlFUl9BQ1RPUihvYmopIFwKKyAgICAoR19U
WVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiksICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBISUNTX0xBWUVSX1RZUEVfQUNUT1IsIEdyYXBo
aWNzTGF5ZXJBY3RvcikpCisKKyNkZWZpbmUgR1JBUEhJQ1NfTEFZRVJfQUNUT1JfQ0xBU1Moa2xh
c3MpIFwKKyAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBISUNTX0xBWUVSX1RZUEVf
QUNUT1IsIEdyYXBoaWNzTGF5ZXJBY3RvckNsYXNzKSkKKworI2RlZmluZSBHUkFQSElDU19MQVlF
Ul9JU19BQ1RPUihvYmopIFwKKyAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZUEUoKG9iaiks
ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHUkFQSElDU19MQVlF
Ul9UWVBFX0FDVE9SKSkKKworI2RlZmluZSBHUkFQSElDU19MQVlFUl9JU19BQ1RPUl9DTEFTUyhr
bGFzcykgXAorICAgIChHX1RZUEVfQ0hFQ0tfQ0xBU1NfVFlQRSgoa2xhc3MpLCAgICAgICBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSQVBISUNTX0xBWUVSX1RZUEVfQUNUT1IpKQor
CisjZGVmaW5lIEdSQVBISUNTX0xBWUVSX0FDVE9SX0dFVF9DTEFTUyhvYmopIFwKKyAgICAoR19U
WVBFX0lOU1RBTkNFX0dFVF9DTEFTUygob2JqKSwgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUiwgR3JhcGhp
Y3NMYXllckFjdG9yQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfR3JhcGhpY3NMYXllckFjdG9y
IEdyYXBoaWNzTGF5ZXJBY3RvcjsKK3R5cGVkZWYgc3RydWN0IF9HcmFwaGljc0xheWVyQWN0b3JD
bGFzcyBHcmFwaGljc0xheWVyQWN0b3JDbGFzczsKK3R5cGVkZWYgc3RydWN0IF9HcmFwaGljc0xh
eWVyQWN0b3JQcml2YXRlIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGU7CisKKy8qKgorICogR3Jh
cGhpY3NMYXllckFjdG9yOgorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIHN0cnVjdHVyZSBh
cmUgcHJpdmF0ZSBhbmQgc2hvdWxkIG9ubHkgYmUgYWNjZXNzZWQKKyAqIHRocm91Z2ggdGhlIHB1
YmxpYyBBUEkuCisgKi8KK3N0cnVjdCBfR3JhcGhpY3NMYXllckFjdG9yIHsKKyAgICBDbHV0dGVy
UmVjdGFuZ2xlIHBhcmVudDsKKworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUgKnByaXY7
CisgICAgR0xpc3QgKmNoaWxkcmVuOworfTsKKworc3RydWN0IF9HcmFwaGljc0xheWVyQWN0b3JD
bGFzcyB7CisgICAgQ2x1dHRlclJlY3RhbmdsZUNsYXNzIHBhcmVudF9jbGFzczsKKworICAgIC8q
IHBhZGRpbmcgZm9yIGZ1dHVyZSBleHBhbnNpb24gKi8KKyAgICB2b2lkKCpfcGFkZGluZ18wKSAo
dm9pZCk7CisgICAgdm9pZCgqX3BhZGRpbmdfMSkgKHZvaWQpOworICAgIHZvaWQoKl9wYWRkaW5n
XzIpICh2b2lkKTsKKyAgICB2b2lkKCpfcGFkZGluZ18zKSAodm9pZCk7CisgICAgdm9pZCgqX3Bh
ZGRpbmdfNCkgKHZvaWQpOworfTsKKworR1R5cGUgZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfZ2V0X3R5
cGUodm9pZCkgR19HTlVDX0NPTlNUOworCitHcmFwaGljc0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5
ZXJBY3Rvck5ldyhXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlKTsKK0dy
YXBoaWNzTGF5ZXJBY3RvciogZ3JhcGhpY3NMYXllckFjdG9yTmV3V2l0aENsaWVudChXZWJDb3Jl
OjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlLCBXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0
ZXJMYXllckNsaWVudCopOwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRDbGllbnQoR3JhcGhp
Y3NMYXllckFjdG9yKiwgV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqKTsKK1dl
YkNvcmU6OlBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50KiBncmFwaGljc0xheWVyQWN0b3JHZXRD
bGllbnQoR3JhcGhpY3NMYXllckFjdG9yKik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92
ZUFsbChHcmFwaGljc0xheWVyQWN0b3IqKTsKK2NhaXJvX3N1cmZhY2VfdCogZ3JhcGhpY3NMYXll
ckFjdG9yR2V0U3VyZmFjZShHcmFwaGljc0xheWVyQWN0b3IqKTsKK3ZvaWQgZ3JhcGhpY3NMYXll
ckFjdG9yU2V0U3VyZmFjZShHcmFwaGljc0xheWVyQWN0b3IqLCBjYWlyb19zdXJmYWNlX3QqKTsK
K3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9ySW52YWxpZGF0ZVJlY3RhbmdsZShHcmFwaGljc0xheWVy
QWN0b3IqLCBjb25zdCBXZWJDb3JlOjpGbG9hdFJlY3QmKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFj
dG9yU2V0VHJhbnNmb3JtKEdyYXBoaWNzTGF5ZXJBY3RvciosIGNvbnN0IENvZ2xNYXRyaXgqKTsK
K3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0Q2hpbGRyZW5UcmFuc2Zvcm0oR3JhcGhpY3NMYXll
ckFjdG9yKiwgY29uc3QgQ29nbE1hdHJpeCopOwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRB
bmNob3JQb2ludChHcmFwaGljc0xheWVyQWN0b3IqLCBnZmxvYXQsIGdmbG9hdCwgZ2Zsb2F0KTsK
K3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yR2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NMYXllckFjdG9y
KiwgZ2Zsb2F0KiwgZ2Zsb2F0KiwgZ2Zsb2F0Kik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNl
dFNjcm9sbFBvc2l0aW9uKEdyYXBoaWNzTGF5ZXJBY3RvciosIGdmbG9hdCwgZ2Zsb2F0KTsgCit2
b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zbGF0ZVgoR3JhcGhpY3NMYXllckFjdG9yKiwg
ZmxvYXQpOworZmxvYXQgZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWChHcmFwaGljc0xh
eWVyQWN0b3IqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWShHcmFwaGlj
c0xheWVyQWN0b3IqLCBmbG9hdCk7CitmbG9hdCBncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xh
dGVZKEdyYXBoaWNzTGF5ZXJBY3RvciopOworZ2ludCBncmFwaGljc0xheWVyQWN0b3JHZXRDb3Vu
dENoaWxkcmVuKEdyYXBoaWNzTGF5ZXJBY3RvciopOwordm9pZCBncmFwaGljc0xheWVyQWN0b3JS
ZXBsYWNlU3VibGF5ZXIoR3JhcGhpY3NMYXllckFjdG9yKiwgQ2x1dHRlckFjdG9yKiwgQ2x1dHRl
ckFjdG9yKik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rvckluc2VydFN1YmxheWVyKEdyYXBoaWNz
TGF5ZXJBY3RvciosIENsdXR0ZXJBY3RvciosIGdpbnQpOwordm9pZCBncmFwaGljc0xheWVyQWN0
b3JTZXRTdWJsYXllcnMoR3JhcGhpY3NMYXllckFjdG9yKiwgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckFjdG9yTGlzdCYpOwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXREb3VibGVTaWRlZChHcmFw
aGljc0xheWVyQWN0b3IqLCBnYm9vbGVhbik7CitnYm9vbGVhbiBncmFwaGljc0xheWVyQWN0b3JH
ZXREb3VibGVTaWRlZChHcmFwaGljc0xheWVyQWN0b3IqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFj
dG9yU2V0UHJlc2VydmVzM0QoR3JhcGhpY3NMYXllckFjdG9yKiwgZ2Jvb2xlYW4pOwordm9pZCBn
cmFwaGljc0xheWVyQWN0b3JTZXRGbGF0dGVuTWF0cml4KEdyYXBoaWNzTGF5ZXJBY3RvciosIGdi
b29sZWFuKTsKK1dlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUgZ3JhcGhp
Y3NMYXllckFjdG9yR2V0TGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXJBY3RvciopOwordm9pZCBncmFw
aGljc0xheWVyQWN0b3JTZXRMYXllclR5cGUoR3JhcGhpY3NMYXllckFjdG9yKiwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSk7CitDbHV0dGVyVGV4dHVyZSogZ3JhcGhp
Y3NMYXllckFjdG9yR2V0VGV4dHVyZShHcmFwaGljc0xheWVyQWN0b3IqKTsKK2dib29sZWFuIGdy
YXBoaWNzTGF5ZXJBY3RvckdldERyYXdzQ29udGVudChHcmFwaGljc0xheWVyQWN0b3IqKTsKK3Zv
aWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJBY3Rvcios
IGdib29sZWFuKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0TWFza3NUb0JvdW5kcyhHcmFw
aGljc0xheWVyQWN0b3IqLCBnYm9vbGVhbik7CitnZmxvYXQgZ3JhcGhpY3NMYXllckFjdG9yR2V0
RGVwdGgoR3JhcGhpY3NMYXllckFjdG9yKik7CisKKy8qIEZvciBEZWJ1Z2dpbmcgKi8KK3ZvaWQg
Z3JhcGhpY3NMYXllckFjdG9yUHJpbnRDaGlsZHJlbkluZm9ybWF0aW9uKEdyYXBoaWNzTGF5ZXJB
Y3RvciogLCBnaW50IGluZGVudCk7CisKK0dfRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCisKKyNlbmRpZiAvKiBHcmFwaGljc0xheWVyQWN0b3JfaCAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9H
cmFwaGljc0xheWVyQ2x1dHRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcAppbmRleCBlZGExNGQwLi40Njg5MGI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dy
YXBoaWNzTGF5ZXJDbHV0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcApAQCAtMjgsMzEgKzI4LDY5IEBA
CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAjaW5jbHVkZSAiR3JhcGhpY3NM
YXllckNsdXR0ZXIuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQWN0b3IuaCIKIAogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorLy8gVGhpcyBp
cyB0aGUgaG9vayBmb3IgV2ViQ29yZSBjb21wb3NpdG9yIHRvIGtub3cgdGhhdCB0aGUgd2ViS2l0
IGNsdXR0ZXIgcG9ydCBpbXBsZW1lbnRzCisvLyBjb21wb3NpdGluZyB3aXRoIEdyYXBoaWNzTGF5
ZXJDbHV0dGVyLgogUGFzc093blB0cjxHcmFwaGljc0xheWVyPiBHcmFwaGljc0xheWVyOjpjcmVh
dGUoR3JhcGhpY3NMYXllckNsaWVudCogY2xpZW50KQogeworICAgIExPRyhBY2NlbGVyYXRlZENv
bXBvc2l0aW5nLCAiR3JhcGhpY3NMYXllckNsdXR0ZXI6OiVzMSIsIF9fZnVuY19fKTsKICAgICBy
ZXR1cm4gYWRvcHRQdHIobmV3IEdyYXBoaWNzTGF5ZXJDbHV0dGVyKGNsaWVudCkpOwogfQogCiBH
cmFwaGljc0xheWVyQ2x1dHRlcjo6R3JhcGhpY3NMYXllckNsdXR0ZXIoR3JhcGhpY3NMYXllckNs
aWVudCogY2xpZW50KQogICAgIDogR3JhcGhpY3NMYXllcihjbGllbnQpCiB7Ci0gICAgLy8gQ2x1
dHRlclJlY3RhbmdsZSB3aWxsIGJlIHVzZWQgdG8gc2hvdyB0aGUgZGVidWcgYm9yZGVyLgotICAg
IG1fbGF5ZXIgPSBhZG9wdEdSZWYoY2x1dHRlcl9yZWN0YW5nbGVfbmV3KCkpOworICAgIExPRyhB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nLCAiR3JhcGhpY3NMYXllckNsdXR0ZXI6OiVzIENyZWF0ZSBh
IExheWVyVHlwZVdlYkxheWVyIiwgX19mdW5jX18pOworCisgICAgbV9sYXllciA9IGFkb3B0R1Jl
ZihncmFwaGljc0xheWVyQWN0b3JOZXdXaXRoQ2xpZW50KExheWVyVHlwZVdlYkxheWVyLCB0aGlz
KSk7CisKKyAgICB1cGRhdGVEZWJ1Z0luZGljYXRvcnMoKTsKK30KKworc3RhdGljIGdib29sZWFu
IGlkbGVEZXN0cm95KGdwb2ludGVyIGRhdGEpCit7CisgICAgR1JlZlB0cjxDbHV0dGVyQWN0b3I+
IGFjdG9yID0gYWRvcHRHUmVmKENMVVRURVJfQUNUT1IoZGF0YSkpOworICAgIENsdXR0ZXJBY3Rv
ciogcGFyZW50ID0gY2x1dHRlcl9hY3Rvcl9nZXRfcGFyZW50KGFjdG9yLmdldCgpKTsKKworICAg
IC8vIFdlIHNob3VsZCByZW1vdmUgY2hpbGQgYWN0b3JzIG1hbnVhbGx5IGJlY2F1c2UgdGhlIGNv
bnRhaW5lciBvZiBDbHV0dGVyCisgICAgLy8gc2VlbXMgdG8gaGF2ZSBhIGJ1ZyB0byByZW1vdmUg
aXRzIGNoaWxkIGFjdG9ycyB3aGVuIGl0IGlzIHJlbW92ZWQuCisgICAgaWYgKEdSQVBISUNTX0xB
WUVSX0lTX0FDVE9SKEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9yLmdldCgpKSkpCisgICAgICAg
IGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92ZUFsbChHUkFQSElDU19MQVlFUl9BQ1RPUihhY3Rvci5n
ZXQoKSkpOworCisgICAgaWYgKHBhcmVudCkKKyAgICAgICAgY2x1dHRlcl9hY3Rvcl9yZW1vdmVf
Y2hpbGQocGFyZW50LCBhY3Rvci5nZXQoKSk7CisKKyAgICAvLyBGSVhNRTogd2Ugc2hvdWxkIGFz
c2VydCB0aGF0IHRoZSBhY3RvcidzIHJlZiBjb3VudCBpcyAxIGhlcmUsIGJ1dCBzb21lCisgICAg
Ly8gb2YgdGhlbSBhcmUgZ2V0dGluZyBoZXJlIHdpdGggMiEKKyAgICAvLyBBU1NFUlQoKEdfT0JK
RUNUKGFjdG9yLmdldCgpKSktPnJlZl9jb3VudCA9PSAxKTsKKworICAgIHJldHVybiBGQUxTRTsK
IH0KIAogR3JhcGhpY3NMYXllckNsdXR0ZXI6On5HcmFwaGljc0xheWVyQ2x1dHRlcigpCiB7Ci0g
ICAgd2lsbEJlRGVzdHJveWVkKCk7CisgICAgTE9HKEFjY2VsZXJhdGVkQ29tcG9zaXRpbmcsICJH
cmFwaGljc0xheWVyQ2x1dHRlcjo6JXMiLCBfX2Z1bmNfXyk7CisKKyAgICBHcmFwaGljc0xheWVy
Ojp3aWxsQmVEZXN0cm95ZWQoKTsKKworICAgIC8vIFdlIGRlc3Ryb3kgdGhlIGFjdG9ycyBvbiBh
biBpZGxlIHNvIHRoYXQgdGhlIG1haW4gbG9vcCBjYW4gcnVuIGVub3VnaCB0bworICAgIC8vIHJl
cGFpbnQgdGhlIGJhY2tncm91bmQgdGhhdCB3aWxsIHJlcGxhY2UgdGhlIGFjdG9yLgorICAgIGlm
IChtX2xheWVyKSB7CisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldENsaWVudChtX2xheWVy
LmdldCgpLCAwKTsKKyAgICAgICAgZ19pZGxlX2FkZChpZGxlRGVzdHJveSwgbV9sYXllci5sZWFr
UmVmKCkpOworICAgIH0KKworICAgIG1fY2xpZW50ID0gMDsKIH0KIAogQ2x1dHRlckFjdG9yKiBH
cmFwaGljc0xheWVyQ2x1dHRlcjo6cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fbGF5ZXIuZ2V0KCk7CisgICAgcmV0dXJuIENMVVRURVJfQUNUT1IobV9sYXllci5nZXQoKSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NMYXllckNsdXR0ZXI6OnNldE5lZWRzRGlzcGxheSgpCkBAIC02
NSw2ICsxMDMsMTYgQEAgdm9pZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6c2V0TmVlZHNEaXNwbGF5
SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9p
ZCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6cGxhdGZvcm1DbHV0dGVyTGF5ZXJQYWludENvbnRlbnRz
KEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgY2xpcCkKK3sKKyAgICBw
YWludEdyYXBoaWNzTGF5ZXJDb250ZW50cyhjb250ZXh0LCBjbGlwKTsKK30KKwordm9pZCBHcmFw
aGljc0xheWVyQ2x1dHRlcjo6cGxhdGZvcm1DbHV0dGVyTGF5ZXJBbmltYXRpb25TdGFydGVkKGRv
dWJsZSBzdGFydFRpbWUpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFw
aGljc0xheWVyQ2x1dHRlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1
dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oCmluZGV4IDQyZjZiNzYuLjMxNTBhMTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NM
YXllckNsdXR0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0
dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmgKQEAgLTMxLDIyICszMSwzNCBAQAogCiAjaW5jbHVk
ZSAiR1JlZlB0ckNsdXR0ZXIuaCIKICNpbmNsdWRlICJHcmFwaGljc0xheWVyLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQuaCIKKwordHlwZWRlZiBzdHJ1Y3QgX0dyYXBo
aWNzTGF5ZXJBY3RvciBHcmFwaGljc0xheWVyQWN0b3I7CiAKICNpbmNsdWRlIDxjbHV0dGVyL2Ns
dXR0ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0xheWVyQ2x1
dHRlciA6IHB1YmxpYyBHcmFwaGljc0xheWVyIHsKK3R5cGVkZWYgVmVjdG9yPEdSZWZQdHI8R3Jh
cGhpY3NMYXllckFjdG9yPiA+IEdyYXBoaWNzTGF5ZXJBY3Rvckxpc3Q7CisKK2NsYXNzIEdyYXBo
aWNzTGF5ZXJDbHV0dGVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIsIHB1YmxpYyBQbGF0Zm9ybUNs
dXR0ZXJMYXllckNsaWVudCB7CiBwdWJsaWM6CisgICAgZW51bSBMYXllclR5cGUgeyBMYXllclR5
cGVMYXllciwgTGF5ZXJUeXBlV2ViTGF5ZXIsIExheWVyVHlwZVZpZGVvTGF5ZXIsIExheWVyVHlw
ZVRyYW5zZm9ybUxheWVyLCBMYXllclR5cGVSb290TGF5ZXIsIExheWVyVHlwZUN1c3RvbSB9Owor
CiAgICAgR3JhcGhpY3NMYXllckNsdXR0ZXIoR3JhcGhpY3NMYXllckNsaWVudCopOwogICAgIHZp
cnR1YWwgfkdyYXBoaWNzTGF5ZXJDbHV0dGVyKCk7CiAKKyAgICAvLyAgUmVpbXBsZW1lbnRlZCBm
cm9tIEdyYXBoaWNzTGF5ZXIKICAgICB2aXJ0dWFsIENsdXR0ZXJBY3RvciogcGxhdGZvcm1MYXll
cigpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc0Rpc3BsYXkoKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEZsb2F0UmVjdCYpOwogCiBwcml2
YXRlOgotICAgIEdSZWZQdHI8Q2x1dHRlckFjdG9yPiBtX2xheWVyOworCisgICAgdmlydHVhbCB2
b2lkIHBsYXRmb3JtQ2x1dHRlckxheWVyQW5pbWF0aW9uU3RhcnRlZChkb3VibGUgYmVnaW5UaW1l
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DbHV0dGVyTGF5ZXJQYWludENvbnRlbnRzKEdy
YXBoaWNzQ29udGV4dCYsIGNvbnN0IEludFJlY3QmIGNsaXApOworCisgICAgR1JlZlB0cjxHcmFw
aGljc0xheWVyQWN0b3I+IG1fbGF5ZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL1BsYXRm
b3JtQ2x1dHRlckxheWVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jbHV0dGVyL1BsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNGRlZjE0ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvUGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQu
aApAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSBDb2xsYWJvcmEgTHRk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmbmRlZiBQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudF9oCisjZGVmaW5lIFBsYXRmb3JtQ2x1
dHRlckxheWVyQ2xpZW50X2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKKwor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorCisjaW5jbHVkZSA8Z2xpYi5oPgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdIYXNoLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUGxh
dGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQgeworcHVibGljOgorICAgIHZpcnR1YWwgdm9pZCBwbGF0
Zm9ybUNsdXR0ZXJMYXllclBhaW50Q29udGVudHMoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgSW50
UmVjdCYgaW5DbGlwKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ2x1dHRlckxheWVy
QW5pbWF0aW9uU3RhcnRlZChkb3VibGUgc3RhcnRUaW1lKSA9IDA7CisKK3Byb3RlY3RlZDoKKyAg
ICB2aXJ0dWFsIH5QbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCgpIHsgfQorfTsKKworfQorCisj
ZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5kaWYgLy8gUGxhdGZv
cm1DbHV0dGVyTGF5ZXJDbGllbnRfaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVt
YWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDkxMDhiYjQu
LjNlNGU1ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC0xNjEsNiArMTYxLDggQEAgbGlid2Vi
a2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5P
Ul9WRVJTSU9OQF9sYV9MSUIKIAlsaWJqYXZhc2NyaXB0Y29yZWd0ay1AV0VCS0lUR1RLX0FQSV9N
QUpPUl9WRVJTSU9OQC5AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQC5sYSBcCiAJbGliV2Vi
Q29yZUd0ay5sYSBcCiAJJChDQUlST19MSUJTKSBcCisJJChDTFVUVEVSX0xJQlMpIFwKKwkkKENM
VVRURVJfR1RLX0xJQlMpIFwKIAkkKENPVkVSQUdFX0xERkxBR1MpIFwKIAkkKEVOQ0hBTlRfTElC
UykgXAogCSQoR0FJTF9MSUJTKSBcCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>165610</attachid>
            <date>2012-09-25 07:23:28 -0700</date>
            <delta_ts>2012-10-07 00:39:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91940-20120925232247.patch</filename>
            <type>text/plain</type>
            <size>34821</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2I4Y2Q2MGJlYTQ0NDVm
NGMzYmMyMGQxODhhMDE2ZDhhMzcxZWRjYy4uZDVhYzUxZjIzNjA5Yzc0YjAyMDhkOThiZWRjMmQw
N2FkNGUwMjRjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDEyLTA5LTI1ICBKb29u
ZSBIdXIgIDxqb29uZS5odXJAaW50ZWwuY29tPiwgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3Vz
dGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIEdyYXBoaWNz
TGF5ZXJBY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTE5NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBHcmFwaGljc0xheWVyQWN0b3IsIHdoaWNoIGlzIGEgbmV3IENsdXR0ZXJBY3RvciwgcmVwcmVz
ZW50cyBhIG5vZGUgaW4gdGhlIEdQVS1yZW5kZXJhYmxlIGxheWVyIHRyZWUKKyAgICAgICAgd2hl
biBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyBlbmFibGVkIHdpdGggQ2x1dHRlciBhcyBhY2Nl
bGVyYXRpb24gYmFja2VuZC4KKyAgICAgICAgVGhpcyBwYXRjaCBhbGxvd3MgdG8gc3VwcG9ydCBi
YXNpYyBmZWF0dXJlcyBvZiBDU1MgM0QgVHJhbnNmb3Jtcy4KKworICAgICAgICBObyBuZXcgdGVz
dHMuIFRoaXMgd2lsbCBiZSBjb3ZlcmVkIGJ5IHBpeGVsIHRlc3RzIGZvciBRdCBhbmQgR1RLKyBh
Y2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGluZyBhbmQgM0QgdHJhbnNmb3Jtcy4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9HcmFwaGlj
c0xheWVyQWN0b3JQcml2YXRlKToKKyAgICAgICAgKGdyYXBoaWNzX2xheWVyX2FjdG9yX2NsYXNz
X2luaXQpOiBHT2JqZWN0IGNvbmZpZ3VyYXRpb24gb2YgYSBuZXcgQ2x1dHRlciBBY3Rvci4KKyAg
ICAgICAgKGdyYXBoaWNzX2xheWVyX2FjdG9yX2luaXQpOiBJbml0aWFsaXphdGlvbiBvZiB0aGUg
cHJpdmF0ZSBkYXRhIG9mIHRoaXMgYWN0b3IuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JT
ZXRQcm9wZXJ0eSk6IEdPYmplY3QgcHJvcGVydHkgc2V0dGVyLgorICAgICAgICAoZ3JhcGhpY3NM
YXllckFjdG9yR2V0UHJvcGVydHkpOiBHT2JqZWN0IHByb3BlcnR5IGdldHRlci4KKyAgICAgICAg
KGdyYXBoaWNzTGF5ZXJBY3RvckRpc3Bvc2UpOiBDYWxsZWQgdG8gZHJvcCBhbGwgcmVmZXJlbmNl
cyB0byBvdGhlciBvYmplY3RzLgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yQWxsb2NhdGUp
OiAgQ2FsbGVkIHRvIHNldCB0aGUgY29vcmRpbmF0ZXMgb2YgYW4gYWN0b3IuCisgICAgICAgIChn
cmFwaGljc0xheWVyQWN0b3JBcHBseVRyYW5zZm9ybSk6IEFwcGx5aW5nIHRoZSB0cmFuc2Zvcm1h
dGlvbiB0byBhbiBhY3RvciBiZWZvcmUgcGFpbnRpbmcgaXQuCisgICAgICAgIChncmFwaGljc0xh
eWVyQWN0b3JQYWludCk6IENhbGxlZCB0byBwYWludCB0aGUgYWN0b3IuCisgICAgICAgIChncmFw
aGljc0xheWVyQWN0b3JQaWNrKTogQ2FsbGVkIHRvIGRyYXcgYW4gb3V0bGluZSBvZiB0aGUgYWN0
b3Igd2l0aCB0aGUgZ2l2ZW4gY29sb3IuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JEcmF3
KTogQ2FsbGVkIGVhY2ggdGltZSBhIENsdXR0ZXJDYWlyb1RleHR1cmUgaGFzIGJlZW4gaW52YWxp
ZGF0ZWQuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JBZGRlZCk6IENhbGxlZCBlYWNoIHRp
bWUgYW4gYWN0b3IgaGFzIGJlZW4gYWRkZWQgdG8gY29udGFpbmVyLgorICAgICAgICAoZ3JhcGhp
Y3NMYXllckFjdG9yUmVtb3ZlZCk6IENhbGxlZCBlYWNoIHRpbWUgYW4gYWN0b3IgaXMgcmVtb3Zl
ZCBmcm9tIGNvbnRhaW5lci4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3Rvck5ldyk6IENyZWF0
ZSBhIHNwZWNpZmljIGxheWVyIHR5cGUgb2YgR3JhcGhpY3NMYXllckFjdG9yIG9iamVjdC4KKyAg
ICAgICAgKGdyYXBoaWNzTGF5ZXJBY3Rvck5ld1dpdGhDbGllbnQpOiBDcmVhdGUgYSBzcGVjaWZp
YyBsYXllciB0eXBlIG9mIEdyYXBoaWNzTGF5ZXJBY3RvciBvYmplY3Qgd2l0aCAKKyAgICAgICAg
aXRzIFBsYXRmb3JtQ2x1dHRlckNsaWVudExheWVyLgorICAgICAgICAoZ3JhcGhpY3NMYXllckFj
dG9yU2V0Q2xpZW50KTogQWRkZWQgc2V0dGVyIHRvIHNldCB0aGUgUGxhdGZvcm1DbHV0dGVyQ2xp
ZW50TGF5ZXIuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRDbGllbnQpOiBBZGRlZCBn
ZXR0ZXIgdG8gZ2V0IHRoZSBQbGF0Zm9ybUNsdXR0ZXJDbGllbnRMYXllci4KKyAgICAgICAgKGdy
YXBoaWNzTGF5ZXJBY3RvclJlbW92ZUFsbCk6IFJlbW92ZSBhbGwgY2hpbGQgYWN0b3JzLgorICAg
ICAgICAoZ3JhcGhpY3NMYXllclVwZGF0ZVRleHR1cmUpOiBDcmVhdGUgYSBDbHV0dGVyQ2Fpcm9U
ZXh0dXJlLgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yR2V0U3VyZmFjZSk6IEFkZGVkIHNl
dHRlciB0byBzZXQgYSBjYWlyb19zdXJmYWNlX3QuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0
b3JTZXRTdXJmYWNlKTogQWRkZWQgZ2V0dGVyIHRvIGdldCB0aGUgY2Fpcm9fc3VyZmFjZV90Lgor
ICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9ySW52YWxpZGF0ZVJlY3RhbmdsZSk6CisgICAgICAg
IChncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2Zvcm0pOiBTZXQgYSBDb2dsTWF0cml4IHRvIGFw
cGx5IG1hdHJpeCB0cmFuc2Zvcm0uCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXRBbmNo
b3JQb2ludCk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRBbmNob3JQb2ludCk6Cisg
ICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXRTY3JvbGxQb3NpdGlvbik6CisgICAgICAgIChn
cmFwaGljc0xheWVyQWN0b3JHZXRuQ2hpbGRyZW4pOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFj
dG9yUmVwbGFjZVN1YmxheWVyKToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3Rvckluc2VydFN1
YmxheWVyKToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1YmxheWVycyk6CisgICAg
ICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRMYXllclR5cGUpOgorICAgICAgICAoZ3JhcGhpY3NM
YXllckFjdG9yU2V0TGF5ZXJUeXBlKToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclNldFRy
YW5zbGF0ZVgpOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWCk6Cisg
ICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xhdGVZKToKKyAgICAgICAgKGdyYXBo
aWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVkpOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9y
U2V0RHJhd3NDb250ZW50KTogQWRkZWQgc2V0dGVyIHRvIHBhaW50IGNvbnRlbnQgaW5zaWRlIGEg
bGF5ZXIuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXREcmF3c0NvbnRlbnQpOiBBZGRl
ZCBnZXR0ZXIgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgZHJhd3NDb250ZW50LiAKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oOiBBZGRlZC4K
KyAgICAgICAgKF9HcmFwaGljc0xheWVyQWN0b3IpOgorICAgICAgICAoX0dyYXBoaWNzTGF5ZXJB
Y3RvckNsYXNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNz
TGF5ZXJDbHV0dGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKwogMjAxMi0wOS0yNCAgRGVhbiBK
YWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdMXSBJbnRlbCBNYWMgbmVl
ZHMgYnVpbHQtaW4gZnVuY3Rpb24gZW11bGF0aW9uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5h
bQppbmRleCBkMmVkMjkxNWY2NWRhOWIzZjI1MTFkZTQ1NDEyNDVlZjQ1YjZjMTQ4Li45ZTk3NGJj
NDI0MmJlOTA2M2FkMzJhMWVkNzFkYTRjNGE3YjI2OGIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
Lmxpc3QuYW0KQEAgLTYyNDAsNiArNjI0MCw4IEBAIGVuZGlmICAjIEVORCBFTkFCTEVfV0VCR0wK
IGlmIFVTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElORwogaWYgVVNFX0NMVVRURVIKIHdlYmNvcmVf
c291cmNlcyArPSBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9H
cmFwaGljc0xheWVyQWN0b3IuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL1RyYW5zZm9ybWF0aW9u
TWF0cml4Q2x1dHRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jOWRmNjM0MWM2N2ExMzFjODc5ZThmZjhkOTg5NTQ2MjdiMWY4M2U0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xh
eWVyQWN0b3IuY3BwCkBAIC0wLDAgKzEsNjU5IEBACisvKgorICogQ29weXJpZ2h0IDIwMTEsMjAx
MiBDb2xsYWJvcmEgTGltaXRlZAorICogQ29weXJpZ2h0IChDKSAyMDEyIEludGVsIENvcnBvcmF0
aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRl
ciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMi4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorICogV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5jLiwgNTEgRnJhbmtsaW4gU3Qg
LSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKyAqCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisj
aW5jbHVkZSAiR3JhcGhpY3NMYXllckFjdG9yLmgiCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2x1dHRlci5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtQ2x1dHRlckxheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0Q2Fpcm8u
aCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUgPGdsaWIvZ3ByaW50Zi5oPgor
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworR19ERUZJTkVfVFlQRShHcmFwaGljc0xheWVy
QWN0b3IsIGdyYXBoaWNzX2xheWVyX2FjdG9yLCBDTFVUVEVSX1RZUEVfUkVDVEFOR0xFKQorCisj
ZGVmaW5lIEdSQVBISUNTX0xBWUVSX0FDVE9SX0dFVF9QUklWQVRFKG9iaikgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURSgob2JqKSwgR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUiwgR3JhcGhp
Y3NMYXllckFjdG9yUHJpdmF0ZSkpCisKK3N0cnVjdCBfR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0
ZSB7CisgICAgR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSBsYXllclR5cGU7CisgICAg
Ly8gR3VhcmQgYWdhaW5zdCBjaGFuZ2luZyBzaXplIHdoaWxlIGFsbG9jYXRpbmcuCisgICAgZ2Jv
b2xlYW4gYWxsb2NhdGluZzsKKworICAgIENsdXR0ZXJBY3RvciogdGV4dHVyZTsKKyAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlOworICAgIENvZ2xNYXRyaXgqIG1hdHJpeDsKKwor
ICAgIFBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50KiBsYXllckNsaWVudDsKKworICAgIGdib29s
ZWFuIGRyYXdzQ29udGVudDsKKworICAgIGdmbG9hdCBhbmNob3JYOworICAgIGdmbG9hdCBhbmNo
b3JZOworICAgIGdmbG9hdCBhbmNob3JaOworCisgICAgZ2Zsb2F0IHNjcm9sbFg7CisgICAgZ2Zs
b2F0IHNjcm9sbFk7CisKKyAgICBmbG9hdCB0cmFuc2xhdGVYOworICAgIGZsb2F0IHRyYW5zbGF0
ZVk7Cit9OworCitlbnVtIHsKKyAgICBQUk9QXzAsCisKKyAgICBQUk9QX1RSQU5TTEFURV9YLAor
ICAgIFBST1BfVFJBTlNMQVRFX1ksCisKKyAgICBQUk9QX0xBU1QKK307CisKK3N0YXRpYyB2b2lk
IGdyYXBoaWNzTGF5ZXJBY3RvckFsbG9jYXRlKENsdXR0ZXJBY3RvciosIGNvbnN0IENsdXR0ZXJB
Y3RvckJveCosIENsdXR0ZXJBbGxvY2F0aW9uRmxhZ3MpOworc3RhdGljIHZvaWQgZ3JhcGhpY3NM
YXllckFjdG9yQXBwbHlUcmFuc2Zvcm0oQ2x1dHRlckFjdG9yKiwgQ29nbE1hdHJpeCopOworc3Rh
dGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yRGlzcG9zZShHT2JqZWN0Kik7CitzdGF0aWMgdm9p
ZCBncmFwaGljc0xheWVyQWN0b3JHZXRQcm9wZXJ0eShHT2JqZWN0KiwgZ3VpbnQgcHJvcElELCBH
VmFsdWUqLCBHUGFyYW1TcGVjKik7CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRQ
cm9wZXJ0eShHT2JqZWN0KiwgZ3VpbnQgcHJvcElELCBjb25zdCBHVmFsdWUqLCBHUGFyYW1TcGVj
Kik7CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JQYWludChDbHV0dGVyQWN0b3IqKTsK
K3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclBpY2soQ2x1dHRlckFjdG9yKiwgY29uc3Qg
Q2x1dHRlckNvbG9yKik7CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckFkZGVkKENs
dXR0ZXJDb250YWluZXIqLCBDbHV0dGVyQWN0b3IqLCBncG9pbnRlciBkYXRhKTsKK3N0YXRpYyB2
b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92ZWQoQ2x1dHRlckNvbnRhaW5lciosIENsdXR0ZXJB
Y3RvciosIGdwb2ludGVyIGRhdGEpOworc3RhdGljIGdib29sZWFuIGdyYXBoaWNzTGF5ZXJBY3Rv
ckRyYXcoQ2x1dHRlckNhaXJvVGV4dHVyZSosIGNhaXJvX3QqLCBHcmFwaGljc0xheWVyQWN0b3Iq
KTsKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclVwZGF0ZVRleHR1cmUoR3JhcGhpY3NM
YXllckFjdG9yKik7CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JEcmF3TGF5ZXJDb250
ZW50cyhDbHV0dGVyQWN0b3IqLCBHcmFwaGljc0NvbnRleHQmKTsKKworc3RhdGljIHZvaWQgZ3Jh
cGhpY3NfbGF5ZXJfYWN0b3JfY2xhc3NfaW5pdChHcmFwaGljc0xheWVyQWN0b3JDbGFzcyoga2xh
c3MpCit7CisgICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGts
YXNzKTsKKyAgICBDbHV0dGVyQWN0b3JDbGFzcyogYWN0b3JDbGFzcyA9IENMVVRURVJfQUNUT1Jf
Q0xBU1Moa2xhc3MpOworICAgIEdQYXJhbVNwZWMqIHBzcGVjOworCisgICAgb2JqZWN0Q2xhc3Mt
PmdldF9wcm9wZXJ0eSA9IGdyYXBoaWNzTGF5ZXJBY3RvckdldFByb3BlcnR5OworICAgIG9iamVj
dENsYXNzLT5zZXRfcHJvcGVydHkgPSBncmFwaGljc0xheWVyQWN0b3JTZXRQcm9wZXJ0eTsKKyAg
ICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IGdyYXBoaWNzTGF5ZXJBY3RvckRpc3Bvc2U7CisgICAg
YWN0b3JDbGFzcy0+YXBwbHlfdHJhbnNmb3JtID0gZ3JhcGhpY3NMYXllckFjdG9yQXBwbHlUcmFu
c2Zvcm07CisgICAgYWN0b3JDbGFzcy0+YWxsb2NhdGUgPSBncmFwaGljc0xheWVyQWN0b3JBbGxv
Y2F0ZTsKKyAgICBhY3RvckNsYXNzLT5wYWludCA9IGdyYXBoaWNzTGF5ZXJBY3RvclBhaW50Owor
ICAgIGFjdG9yQ2xhc3MtPnBpY2sgPSBncmFwaGljc0xheWVyQWN0b3JQaWNrOworCisgICAgZ190
eXBlX2NsYXNzX2FkZF9wcml2YXRlKGtsYXNzLCBzaXplb2YoR3JhcGhpY3NMYXllckFjdG9yUHJp
dmF0ZSkpOworCisgICAgcHNwZWMgPSBnX3BhcmFtX3NwZWNfZmxvYXQoInRyYW5zbGF0ZS14IiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJhbnNsYXRlIFgiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJUcmFuc2xhdGlvbiB2YWx1ZSBmb3IgdGhlIFggYXhpcyIs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLUdfTUFYRkxPQVQsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRFKSk7CisgICAgZ19vYmplY3RfY2xhc3Nf
aW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9UUkFOU0xBVEVfWCwgcHNwZWMpOwor
CisgICAgcHNwZWMgPSBnX3BhcmFtX3NwZWNfZmxvYXQoInRyYW5zbGF0ZS15IiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiVHJhbnNsYXRlIFkiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJUcmFuc2xhdGlvbiB2YWx1ZSBmb3IgdGhlIFkgYXlpcyIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLUdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEdfTUFYRkxPQVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAuMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R1BhcmFt
RmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRFKSk7CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9w
cm9wZXJ0eShvYmplY3RDbGFzcywgUFJPUF9UUkFOU0xBVEVfWSwgcHNwZWMpOworfQorCitzdGF0
aWMgdm9pZCBncmFwaGljc19sYXllcl9hY3Rvcl9pbml0KEdyYXBoaWNzTGF5ZXJBY3Rvciogc2Vs
ZikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdiA9
IEdSQVBISUNTX0xBWUVSX0FDVE9SX0dFVF9QUklWQVRFKHNlbGYpOworCisgICAgY2x1dHRlcl9h
Y3Rvcl9zZXRfcmVhY3RpdmUoQ0xVVFRFUl9BQ1RPUihzZWxmKSwgRkFMU0UpOworCisgICAgLy8g
RGVmYXVsdCB1c2VkIGJ5IEdyYXBoaWNzTGF5ZXIuCisgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0
QW5jaG9yUG9pbnQoc2VsZiwgMC41LCAwLjUsIDAuMCk7CisKKyAgICBwcml2LT5zY3JvbGxYID0g
MC4wOworICAgIHByaXYtPnNjcm9sbFkgPSAwLjA7CisKKyAgICBwcml2LT50cmFuc2xhdGVYID0g
MC4wOworICAgIHByaXYtPnRyYW5zbGF0ZVkgPSAwLjA7CisKKyAgICBwcml2LT5tYXRyaXggPSAw
OworCisgICAgZ19zaWduYWxfY29ubmVjdChzZWxmLCAiYWN0b3ItYWRkZWQiLCBHX0NBTExCQUNL
KGdyYXBoaWNzTGF5ZXJBY3RvckFkZGVkKSwgMCk7CisgICAgZ19zaWduYWxfY29ubmVjdChzZWxm
LCAiYWN0b3ItcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlZCks
IDApOworfQorCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRQcm9wZXJ0eShHT2Jq
ZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3Bl
YyogcHNwZWMpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciA9IEdSQVBISUNTX0xB
WUVSX0FDVE9SKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJP
UF9UUkFOU0xBVEVfWDoKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWChs
YXllciwgZ192YWx1ZV9nZXRfZmxvYXQodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBQUk9QX1RSQU5TTEFURV9ZOgorICAgICAgICBncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xh
dGVZKGxheWVyLCBnX3ZhbHVlX2dldF9mbG9hdCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2Jq
ZWN0LCBwcm9wSUQsIHBzcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5
ZXJBY3RvckdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUq
IHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxh
eWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1Iob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElE
KSB7CisgICAgY2FzZSBQUk9QX1RSQU5TTEFURV9YOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9h
dCh2YWx1ZSwgZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWChsYXllcikpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFBST1BfVFJBTlNMQVRFX1k6CisgICAgICAgIGdfdmFsdWVfc2V0
X2Zsb2F0KHZhbHVlLCBncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVZKGxheWVyKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJ
RF9QUk9QRVJUWV9JRChvYmplY3QsIHByb3BJRCwgcHNwZWMpOworICAgIH0KK30KKworCitzdGF0
aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAg
ICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1Iob2JqZWN0
KTsKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisK
KyAgICBpZiAocHJpdi0+dGV4dHVyZSkgeworICAgICAgICBjbHV0dGVyX2FjdG9yX2Rlc3Ryb3ko
cHJpdi0+dGV4dHVyZSk7CisgICAgICAgIHByaXYtPnRleHR1cmUgPSAwOworICAgIH0KKworICAg
IHByaXYtPnN1cmZhY2UuY2xlYXIoKTsKKworICAgIGlmIChwcml2LT5tYXRyaXgpCisgICAgICAg
Y29nbF9tYXRyaXhfZnJlZShwcml2LT5tYXRyaXgpOworCisgICAgR19PQkpFQ1RfQ0xBU1MoZ3Jh
cGhpY3NfbGF5ZXJfYWN0b3JfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCisv
LyBDb3BpZWQgZnJvbSBjYWlyby4KKyNkZWZpbmUgTUFYX0lNQUdFX1NJWkUgMzI3NjcKKworc3Rh
dGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yQWxsb2NhdGUoQ2x1dHRlckFjdG9yKiBzZWxmLCBj
b25zdCBDbHV0dGVyQWN0b3JCb3gqIGJveCwgQ2x1dHRlckFsbG9jYXRpb25GbGFncyBmbGFncykK
K3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1Io
c2VsZik7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2
OworCisgICAgcHJpdi0+YWxsb2NhdGluZyA9IFRSVUU7CisKKyAgICBDTFVUVEVSX0FDVE9SX0NM
QVNTKGdyYXBoaWNzX2xheWVyX2FjdG9yX3BhcmVudF9jbGFzcyktPmFsbG9jYXRlKHNlbGYsIGJv
eCwgZmxhZ3MpOworCisgICAgaWYgKHByaXYtPnRleHR1cmUpIHsKKyAgICAgICAgLy8gVGhlIHRl
eHR1cmUgb2NjdXBpZXMgdGhlIHdob2xlIGFyZWEsIGJ1dCBpcyBwb3NpdGlvbmVkIGF0IDAsMAor
ICAgICAgICAvLyByZWxhdGl2ZSB0byB0aGUgbGF5ZXIgYWN0b3IuCisgICAgICAgIENsdXR0ZXJB
Y3RvckJveCB0ZXh0dXJlQm94ID0geyAwLjAsIDAuMCwgYm94LT54MiAtIGJveC0+eDEsIGJveC0+
eTIgLSBib3gtPnkxIH07CisKKyAgICAgICAgLy8gcHJvdGVjdCBhZ2FpbnN0IDB4MAorICAgICAg
ICBpZiAoIXRleHR1cmVCb3gueDIpCisgICAgICAgICAgICB0ZXh0dXJlQm94LngyID0gMTsKKwor
ICAgICAgICBpZiAoIXRleHR1cmVCb3gueTIpCisgICAgICAgICAgICB0ZXh0dXJlQm94LnkyID0g
MTsKKworICAgICAgICAvLyBGSVhNRTogc29tZSBwYWdlcyBtYWtlIHVzIGNyZWF0ZSB2ZXJ5IGJp
ZyBsYXllcnMsIHdoaWNoCisgICAgICAgIC8vIGV4Y2VlZHMgY2Fpcm8ncyBsaW1pdHMsIGNoZWNr
IGZvciB0aGF0IGhlcmUuCisgICAgICAgIGlmICh0ZXh0dXJlQm94LngyID4gTUFYX0lNQUdFX1NJ
WkUpIHsKKyAgICAgICAgICAgIGdfd2FybmluZygiTGF5ZXIgJXMgaGFzIGEgd2lkdGggdGhhdCBl
eGNlZWRzIGNhaXJvJ3MgbGltaXRzOiAlLjJmIiwgY2x1dHRlcl9hY3Rvcl9nZXRfbmFtZShzZWxm
KSwgdGV4dHVyZUJveC54Mik7CisgICAgICAgICAgICB0ZXh0dXJlQm94LngyID0gTUFYX0lNQUdF
X1NJWkU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodGV4dHVyZUJveC55MiA+IE1BWF9JTUFH
RV9TSVpFKSB7CisgICAgICAgICAgICBnX3dhcm5pbmcoIkxheWVyICVzIGhhcyBhIGhlaWdodCB0
aGF0IGV4Y2VlZHMgY2Fpcm8ncyBsaW1pdHM6ICUuMmYiLCBjbHV0dGVyX2FjdG9yX2dldF9uYW1l
KHNlbGYpLCB0ZXh0dXJlQm94LnkyKTsKKyAgICAgICAgICAgIHRleHR1cmVCb3gueTIgPSBNQVhf
SU1BR0VfU0laRTsKKyAgICAgICAgfQorCisgICAgICAgIGNsdXR0ZXJfYWN0b3JfYWxsb2NhdGUo
cHJpdi0+dGV4dHVyZSwgJnRleHR1cmVCb3gsIGZsYWdzKTsKKyAgICB9CisKKyAgICAvLyBGSVhN
RTogbWF5YmUgd2UgY2FuIGNhY2hlIGNoaWxkcmVuIGFsbG9jYXRpb24gYW5kIG5vdCBjYWxsCisg
ICAgLy8gYWxsb2NhdGUgb24gdGhlbSB0aGlzIG9mdGVuPworICAgIGZvciAoR0xpc3QqIGxpc3Qg
PSBsYXllci0+Y2hpbGRyZW47IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisgICAgICAgICBD
bHV0dGVyQWN0b3IqIGNoaWxkID0gQ0xVVFRFUl9BQ1RPUihsaXN0LT5kYXRhKTsKKworICAgICAg
ICAgZmxvYXQgY2hpbGRXaWR0aCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3dpZHRoKGNoaWxkKTsKKyAg
ICAgICAgIGZsb2F0IGNoaWxkSGVpZ2h0ID0gY2x1dHRlcl9hY3Rvcl9nZXRfaGVpZ2h0KGNoaWxk
KTsKKworICAgICAgICAgQ2x1dHRlckFjdG9yQm94IGNoaWxkQm94OworICAgICAgICAgY2hpbGRC
b3gueDEgPSBjbHV0dGVyX2FjdG9yX2dldF94KGNoaWxkKTsKKyAgICAgICAgIGNoaWxkQm94Lnkx
ID0gY2x1dHRlcl9hY3Rvcl9nZXRfeShjaGlsZCk7CisgICAgICAgICBjaGlsZEJveC54MiA9IGNo
aWxkQm94LngxICsgY2hpbGRXaWR0aDsKKyAgICAgICAgIGNoaWxkQm94LnkyID0gY2hpbGRCb3gu
eTEgKyBjaGlsZEhlaWdodDsKKworICAgICAgICAgY2x1dHRlcl9hY3Rvcl9hbGxvY2F0ZShjaGls
ZCwgJmNoaWxkQm94LCBmbGFncyk7CisgICAgfQorCisgICAgcHJpdi0+YWxsb2NhdGluZyA9IEZB
TFNFOworfQorCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JBcHBseVRyYW5zZm9ybShD
bHV0dGVyQWN0b3IqIGFjdG9yLCBDb2dsTWF0cml4KiBtYXRyaXgpCit7CisgICAgR3JhcGhpY3NM
YXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9yKS0+cHJp
djsKKworICAgIC8vIEFwcGx5IHRyYW5zbGF0aW9uIGFuZCBzY3JvbGxpbmcgYXMgYSBzaW5nbGUg
dHJhbnNsYXRpb24uIFRoZXNlCisgICAgLy8gbmVlZCB0byBjb21lIGJlZm9yZSBhbnl0aGluZyBl
bHNlLCBvdGhlcndpc2UgdGhleSdsbCBiZQorICAgIC8vIGFmZmVjdGVkIGJ5IG90aGVyIG9wZXJh
dGlvbnMgc3VjaCBhcyBzY2FsaW5nLCB3aGljaCBpcyBub3Qgd2hhdAorICAgIC8vIHdlIHdhbnQu
CisgICAgZ2Zsb2F0IHRyYW5zbGF0ZVggPSBwcml2LT5zY3JvbGxYICsgcHJpdi0+dHJhbnNsYXRl
WDsKKyAgICBnZmxvYXQgdHJhbnNsYXRlWSA9IHByaXYtPnNjcm9sbFkgKyBwcml2LT50cmFuc2xh
dGVZOworCisgICAgaWYgKHRyYW5zbGF0ZVggfHwgdHJhbnNsYXRlWSkKKyAgICAgICAgY29nbF9t
YXRyaXhfdHJhbnNsYXRlKG1hdHJpeCwgdHJhbnNsYXRlWCwgdHJhbnNsYXRlWSwgMCk7CisKKyAg
ICBDTFVUVEVSX0FDVE9SX0NMQVNTKGdyYXBoaWNzX2xheWVyX2FjdG9yX3BhcmVudF9jbGFzcykt
PmFwcGx5X3RyYW5zZm9ybShhY3RvciwgbWF0cml4KTsKKworICAgIGdmbG9hdCB3aWR0aCA9IGNs
dXR0ZXJfYWN0b3JfZ2V0X3dpZHRoKGFjdG9yKTsKKyAgICBnZmxvYXQgaGVpZ2h0ID0gY2x1dHRl
cl9hY3Rvcl9nZXRfaGVpZ2h0KGFjdG9yKTsKKyAgICBpZiAod2lkdGggPD0gMS4wIHx8IGhlaWdo
dCA8PSAxLjApCisgICAgICAgIHJldHVybjsKKworICAgIGdmbG9hdCBwaXZvdFgsIHBpdm90WTsK
KyAgICBwaXZvdFggPSB3aWR0aCAqIHByaXYtPmFuY2hvclg7CisgICAgcGl2b3RZID0gaGVpZ2h0
ICogcHJpdi0+YW5jaG9yWTsKKworICAgIGlmIChwcml2LT5tYXRyaXgpIHsKKyAgICAgICAgQ29n
bE1hdHJpeCogbG9jYWxNYXRyaXg7CisgICAgICAgIC8vIENTUzMgdHJhbmZvcm0tc3R5bGUgY2Fu
IGJlIGNoYW5nZWQgb24gdGhlIGZseSwgCisgICAgICAgIC8vIHNvIHdlIGhhdmUgdG8gY29weSBw
cml2LT5tYXRyaXggaW4gb3JkZXIgdG8gcmVjb3ZlciB6LWF4aXMuIAorICAgICAgICBsb2NhbE1h
dHJpeCA9IGNvZ2xfbWF0cml4X2NvcHkocHJpdi0+bWF0cml4KTsKKworICAgICAgICBjb2dsX21h
dHJpeF90cmFuc2xhdGUobWF0cml4LCBwaXZvdFgsIHBpdm90WSwgcHJpdi0+YW5jaG9yWik7Cisg
ICAgICAgIGNvZ2xfbWF0cml4X211bHRpcGx5KG1hdHJpeCwgbWF0cml4LCBsb2NhbE1hdHJpeCk7
CisgICAgICAgIGNvZ2xfbWF0cml4X3RyYW5zbGF0ZShtYXRyaXgsIC1waXZvdFgsIC1waXZvdFks
IC1wcml2LT5hbmNob3JaKTsKKyAgICAgICAgY29nbF9tYXRyaXhfZnJlZShsb2NhbE1hdHJpeCk7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JQYWludChDbHV0dGVy
QWN0b3IqIGFjdG9yKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogZ3JhcGhpY3NMYXllciA9
IEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9yKTsKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2
YXRlKiBwcml2ID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1IoYWN0b3IpLT5wcml2OworCisgICAgLy8g
UGFpbnQgdGhlIHRleHR1cmUgaW4gY2FzZSB3ZSBoYXZlIGEgYm9yZGVyLiBUaGlzIHdpbGwgYmUg
dGhlIGNhc2Ugd2hlbiBkZWJ1Z2dpbmcgYm9yZGVycworICAgIC8vIGFyZSB0dXJuZWQgb24gdGhh
dCB3ZSB3YW50IHRvIHNlZS4KKyAgICBpZiAocHJpdi0+dGV4dHVyZSkKKyAgICAgICAgY2x1dHRl
cl9hY3Rvcl9wYWludChwcml2LT50ZXh0dXJlKTsKKworICAgIEdMaXN0KiBsaXN0OworICAgIGZv
ciAobGlzdCA9IGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4
dCkgeworICAgICAgICAgQ2x1dHRlckFjdG9yKiBjaGlsZCA9IENMVVRURVJfQUNUT1IobGlzdC0+
ZGF0YSk7CisgICAgICAgICBjbHV0dGVyX2FjdG9yX3BhaW50KGNoaWxkKTsKKyAgICB9Cit9CisK
K3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclBpY2soQ2x1dHRlckFjdG9yKiBhY3Rvciwg
Y29uc3QgQ2x1dHRlckNvbG9yKiBwaWNrKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogZ3Jh
cGhpY3NMYXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9yKTsKKyAgICBHcmFwaGljc0xh
eWVyQWN0b3JQcml2YXRlKiBwcml2ID0gZ3JhcGhpY3NMYXllci0+cHJpdjsKKworICAgIENMVVRU
RVJfQUNUT1JfQ0xBU1MoZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfcGFyZW50X2NsYXNzKS0+cGljayhh
Y3RvciwgcGljayk7CisKKyAgICBpZiAocHJpdi0+dGV4dHVyZSkKKyAgICAgICAgY2x1dHRlcl9h
Y3Rvcl9wYWludChwcml2LT50ZXh0dXJlKTsKKworICAgIEdMaXN0KiBsaXN0OworICAgIGZvciAo
bGlzdCA9IGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuOyBsaXN0OyBsaXN0ID0gbGlzdC0+bmV4dCkg
eworICAgICAgICAgQ2x1dHRlckFjdG9yKiBjaGlsZCA9IENMVVRURVJfQUNUT1IobGlzdC0+ZGF0
YSk7CisgICAgICAgICBjbHV0dGVyX2FjdG9yX3BhaW50KGNoaWxkKTsKKyAgICB9Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiBncmFwaGljc0xheWVyQWN0b3JEcmF3KENsdXR0ZXJDYWlyb1RleHR1cmUq
IHRleHR1cmUsIGNhaXJvX3QqIGNyLCBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQoreworICAg
IENsdXR0ZXJBY3RvciogYWN0b3IgPSBDTFVUVEVSX0FDVE9SKGxheWVyKTsKKyAgICBnZmxvYXQg
d2lkdGggPSBjbHV0dGVyX2FjdG9yX2dldF93aWR0aChhY3Rvcik7CisgICAgZ2Zsb2F0IGhlaWdo
dCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X2hlaWdodChhY3Rvcik7CisKKyAgICBpZiAoIXdpZHRoIHx8
ICFoZWlnaHQpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIEdyYXBoaWNzTGF5ZXJBY3Rv
clByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKyAgICBHcmFwaGljc0NvbnRleHQgY29udGV4
dChjcik7CisKKyAgICBjbHV0dGVyX2NhaXJvX3RleHR1cmVfY2xlYXIodGV4dHVyZSk7CisKKyAg
ICBpZiAocHJpdi0+c3VyZmFjZSkgeworICAgICAgICBnaW50IHN1cmZhY2VXaWR0aCA9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHByaXYtPnN1cmZhY2UuZ2V0KCkpOworICAgICAgICBn
aW50IHN1cmZhY2VIZWlnaHQgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQocHJpdi0+
c3VyZmFjZS5nZXQoKSk7CisKKyAgICAgICAgRmxvYXRSZWN0IHNyY1JlY3QoMC4wLCAwLjAsIHN0
YXRpY19jYXN0PGZsb2F0PihzdXJmYWNlV2lkdGgpLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3VyZmFj
ZUhlaWdodCkpOworICAgICAgICBGbG9hdFJlY3QgZGVzdFJlY3QoMC4wLCAwLjAsIHdpZHRoLCBo
ZWlnaHQpOworICAgICAgICBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRv
Q29udGV4dChwcml2LT5zdXJmYWNlLmdldCgpLCBkZXN0UmVjdCwgc3JjUmVjdCwgJmNvbnRleHQp
OworICAgIH0KKworICAgIGlmIChwcml2LT5sYXllclR5cGUgPT0gR3JhcGhpY3NMYXllckNsdXR0
ZXI6OkxheWVyVHlwZVdlYkxheWVyKQorICAgICAgICBncmFwaGljc0xheWVyQWN0b3JEcmF3TGF5
ZXJDb250ZW50cyhhY3RvciwgY29udGV4dCk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3Rh
dGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yQWRkZWQoQ2x1dHRlckNvbnRhaW5lciogY29udGFp
bmVyLCBDbHV0dGVyQWN0b3IqIGFjdG9yLCBncG9pbnRlciBkYXRhKQoreworICAgIEdyYXBoaWNz
TGF5ZXJBY3RvciogZ3JhcGhpY3NMYXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGNvbnRhaW5l
cik7CisgICAgZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4gPSBnX2xpc3RfYXBwZW5kKGdyYXBoaWNz
TGF5ZXItPmNoaWxkcmVuLCBhY3Rvcik7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJB
Y3RvclJlbW92ZWQoQ2x1dHRlckNvbnRhaW5lciogY29udGFpbmVyLCBDbHV0dGVyQWN0b3IqIGFj
dG9yLCBncG9pbnRlciBkYXRhKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogZ3JhcGhpY3NM
YXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGNvbnRhaW5lcik7CisgICAgZ3JhcGhpY3NMYXll
ci0+Y2hpbGRyZW4gPSBnX2xpc3RfcmVtb3ZlKGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuLCBhY3Rv
cik7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclVwZGF0ZVRleHR1cmUoR3Jh
cGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRl
KiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgQVNTRVJUKHByaXYtPmxheWVyVHlwZSAhPSBHcmFw
aGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlVmlkZW9MYXllcik7CisKKyAgICAvLyBOb3RoaW5n
IG5lZWRzIGEgdGV4dHVyZSwgcmVtb3ZlIHRoZSBvbmUgd2UgaGF2ZSwgaWYgYW55LgorICAgIGlm
ICghcHJpdi0+ZHJhd3NDb250ZW50ICYmICFwcml2LT5zdXJmYWNlKSB7CisgICAgICAgIGlmICgh
cHJpdi0+dGV4dHVyZSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMocHJpdi0+dGV4dHVyZSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4oZ3JhcGhpY3NMYXllckFjdG9yRHJhdyksIGxheWVyKTsKKyAgICAgICAgY2x1dHRl
cl9hY3Rvcl91bnBhcmVudChwcml2LT50ZXh0dXJlKTsKKyAgICAgICAgcHJpdi0+dGV4dHVyZSA9
IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZSBuZWVkIGEgdGV4dHVyZSwg
YnV0IGFscmVhZHkgaGF2ZSBvbmUhCisgICAgaWYgKHByaXYtPnRleHR1cmUpCisgICAgICAgIHJl
dHVybjsKKworICAgIC8vIFdlIG5lZWQgYSB0ZXh0dXJlLCBzbyBjcmVhdGUgaXQuCisgICAgQ2x1
dHRlckFjdG9yKiBhY3RvciA9IENMVVRURVJfQUNUT1IobGF5ZXIpOworICAgIGludCB3aWR0aCA9
IGNlaWxmKGNsdXR0ZXJfYWN0b3JfZ2V0X3dpZHRoKGFjdG9yKSk7CisgICAgaW50IGhlaWdodCA9
IGNlaWxmKGNsdXR0ZXJfYWN0b3JfZ2V0X2hlaWdodChhY3RvcikpOworCisgICAgcHJpdi0+dGV4
dHVyZSA9IENMVVRURVJfQUNUT1IoZ19vYmplY3RfbmV3KENMVVRURVJfVFlQRV9DQUlST19URVhU
VVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXV0
by1yZXNpemUiLCBUUlVFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAic3VyZmFjZS1oZWlnaHQiLCB3aWR0aCA+IDAgPyB3aWR0aCA6IDEsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJmYWNlLXdpZHRoIiwg
aGVpZ2h0ID4gMCA/IGhlaWdodCA6IDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDApKTsKKworICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3BhcmVudChwcml2
LT50ZXh0dXJlLCBhY3Rvcik7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHByaXYtPnRleHR1cmUs
ICJkcmF3IiwgR19DQUxMQkFDSyhncmFwaGljc0xheWVyQWN0b3JEcmF3KSwgbGF5ZXIpOworfQor
CisvLyBEcmF3IGNvbnRlbnQgaW50byB0aGUgbGF5ZXIuCitzdGF0aWMgdm9pZCBncmFwaGljc0xh
eWVyQWN0b3JEcmF3TGF5ZXJDb250ZW50cyhDbHV0dGVyQWN0b3IqIGFjdG9yLCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9
IEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9yKS0+cHJpdjsKKworICAgIGlmICghcHJpdi0+ZHJh
d3NDb250ZW50IHx8ICFwcml2LT5sYXllckNsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Z2Zsb2F0IHdpZHRoID0gY2x1dHRlcl9hY3Rvcl9nZXRfd2lkdGgoYWN0b3IpOworICAgIGdmbG9h
dCBoZWlnaHQgPSBjbHV0dGVyX2FjdG9yX2dldF9oZWlnaHQoYWN0b3IpOworICAgIEludFJlY3Qg
Y2xpcCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKworICAgIC8vIEFwcGx5IHRoZSBwYWludGVkIGNv
bnRlbnQgdG8gdGhlIGxheWVyLgorICAgIHByaXYtPmxheWVyQ2xpZW50LT5wbGF0Zm9ybUNsdXR0
ZXJMYXllclBhaW50Q29udGVudHMoY29udGV4dCwgY2xpcCk7Cit9CisKKworR3JhcGhpY3NMYXll
ckFjdG9yKiBncmFwaGljc0xheWVyQWN0b3JOZXcoR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVy
VHlwZSB0eXBlKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIgPSBHUkFQSElDU19M
QVlFUl9BQ1RPUihnX29iamVjdF9uZXcoR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUiwgMCkpOwor
ICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKworICAg
IHByaXYtPmxheWVyVHlwZSA9IHR5cGU7CisKKyAgICAvLyBGb3IgdmlkZW8gbGF5ZXJzIHdlIGRv
bid0IHdhbnQgdGhlIGNhaXJvIHRleHR1cmUsIGJ1dCBhIHJlZ3VsYXIgb25lLgorICAgIGlmIChw
cml2LT5sYXllclR5cGUgPT0gR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZVZpZGVvTGF5
ZXIpIHsKKyAgICAgICAgcHJpdi0+dGV4dHVyZSA9IGNsdXR0ZXJfdGV4dHVyZV9uZXcoKTsKKyAg
ICAgICAgY2x1dHRlcl9hY3Rvcl9zZXRfcGFyZW50KHByaXYtPnRleHR1cmUsIENMVVRURVJfQUNU
T1IobGF5ZXIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbGF5ZXI7Cit9CisKK0dyYXBoaWNzTGF5
ZXJBY3RvciogZ3JhcGhpY3NMYXllckFjdG9yTmV3V2l0aENsaWVudChHcmFwaGljc0xheWVyQ2x1
dHRlcjo6TGF5ZXJUeXBlIHR5cGUsIFBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50KiBsYXllckNs
aWVudCkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0gZ3JhcGhpY3NMYXllckFj
dG9yTmV3KHR5cGUpOworICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNldENsaWVudChsYXllciwgbGF5
ZXJDbGllbnQpOworCisgICAgcmV0dXJuIGxheWVyOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJB
Y3RvclNldENsaWVudChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBQbGF0Zm9ybUNsdXR0ZXJM
YXllckNsaWVudCogY2xpZW50KQoreworICAgIGxheWVyLT5wcml2LT5sYXllckNsaWVudCA9IGNs
aWVudDsKK30KKworUGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqIGdyYXBoaWNzTGF5ZXJBY3Rv
ckdldENsaWVudChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQoreworICAgIHJldHVybiBsYXll
ci0+cHJpdi0+bGF5ZXJDbGllbnQ7Cit9CisKKy8qIAorICogcHVibGljIEFQSQorICovCit2b2lk
IGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92ZUFsbChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQor
eworICAgIGdfcmV0dXJuX2lmX2ZhaWwoR1JBUEhJQ1NfTEFZRVJfSVNfQUNUT1IobGF5ZXIpKTsK
KworICAgIEdMaXN0KiBjaGlsZHJlbiA9IGNsdXR0ZXJfYWN0b3JfZ2V0X2NoaWxkcmVuKENMVVRU
RVJfQUNUT1IobGF5ZXIpKTsKKyAgICBmb3IgKDsgY2hpbGRyZW47IGNoaWxkcmVuID0gY2hpbGRy
ZW4tPm5leHQpIHsKKyAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHJlbW92ZSBzdWJsYXllcnMs
IG5vdCBvdXIgb3duIGNvbXBvc2l0ZSBhY3RvcnMuCisgICAgICAgIGlmIChjaGlsZHJlbi0+ZGF0
YSA9PSBsYXllci0+cHJpdi0+dGV4dHVyZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGNsdXR0ZXJfYWN0b3JfcmVtb3ZlX2NoaWxkKENMVVRURVJfQUNUT1IobGF5ZXIpLCBDTFVU
VEVSX0FDVE9SKGNoaWxkcmVuLT5kYXRhKSk7CisgICAgfQorfQorCitjYWlyb19zdXJmYWNlX3Qq
IGdyYXBoaWNzTGF5ZXJBY3RvckdldFN1cmZhY2UoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikK
K3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7Cisg
ICAgaWYgKCFwcml2LT5zdXJmYWNlKQorICAgICAgICBnX21lc3NhZ2UoInN1cmZhY2UgaXMgbnVs
bCIpOworCisgICAgcmV0dXJuIHByaXYtPnN1cmZhY2UuZ2V0KCk7Cit9CisKK3ZvaWQgZ3JhcGhp
Y3NMYXllckFjdG9yU2V0U3VyZmFjZShHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBjYWlyb19z
dXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJp
diA9IGxheWVyLT5wcml2OworICAgIHByaXYtPnN1cmZhY2UgPSBzdXJmYWNlOworICAgIGdyYXBo
aWNzTGF5ZXJBY3RvclVwZGF0ZVRleHR1cmUobGF5ZXIpOworfQorCit2b2lkIGdyYXBoaWNzTGF5
ZXJBY3RvckludmFsaWRhdGVSZWN0YW5nbGUoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgY29u
c3QgRmxvYXRSZWN0JiBkaXJ0eVJlY3QpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0
ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgaWYgKCFwcml2LT50ZXh0dXJlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBjYWlyb19yZWN0YW5nbGVfaW50X3QgcmVjdChlbmNsb3NpbmdJbnRS
ZWN0KGRpcnR5UmVjdCkpOworICAgIGNsdXR0ZXJfY2Fpcm9fdGV4dHVyZV9pbnZhbGlkYXRlX3Jl
Y3RhbmdsZShDTFVUVEVSX0NBSVJPX1RFWFRVUkUocHJpdi0+dGV4dHVyZSksICZyZWN0KTsKK30K
Kwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2Zvcm0oR3JhcGhpY3NMYXllckFjdG9y
KiBsYXllciwgY29uc3QgQ29nbE1hdHJpeCogbWF0cml4KSAKK3sKKyAgICBHcmFwaGljc0xheWVy
QWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisKKyAgICBpZiAocHJpdi0+bWF0cml4
KSB7CisgICAgICAgIGNvZ2xfbWF0cml4X2ZyZWUocHJpdi0+bWF0cml4KTsKKyAgICAgICAgcHJp
di0+bWF0cml4ID0gMDsKKyAgICAgICAgY2x1dHRlcl9hY3Rvcl9xdWV1ZV9yZWRyYXcoQ0xVVFRF
Ul9BQ1RPUihsYXllcikpOworICAgIH0KKworICAgIENvZ2xNYXRyaXggaWRlbnRpdHk7CisgICAg
Y29nbF9tYXRyaXhfaW5pdF9pZGVudGl0eSgmaWRlbnRpdHkpOworICAgIGlmIChjb2dsX21hdHJp
eF9lcXVhbCgoQ29nbE1hdHJpeCopJmlkZW50aXR5LCAoQ29nbE1hdHJpeCopbWF0cml4KSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgaWYgKHByaXYtPm1hdHJpeCkKKyAgICAgICAgY29nbF9tYXRy
aXhfZnJlZShwcml2LT5tYXRyaXgpOworCisgICAgcHJpdi0+bWF0cml4ID0gY29nbF9tYXRyaXhf
Y29weShtYXRyaXgpOworICAgIGNsdXR0ZXJfYWN0b3JfcXVldWVfcmVkcmF3KENMVVRURVJfQUNU
T1IobGF5ZXIpKTsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRBbmNob3JQb2ludChH
cmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBnZmxvYXQgeCwgZ2Zsb2F0IHksIGdmbG9hdCB6KQor
eworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKwor
ICAgIHByaXYtPmFuY2hvclggPSB4OworICAgIHByaXYtPmFuY2hvclkgPSB5OworICAgIHByaXYt
PmFuY2hvclogPSB6OworCisgICAgQ2x1dHRlckFjdG9yKiBhY3RvciA9IENMVVRURVJfQUNUT1Io
bGF5ZXIpOworCisgICAgZmxvYXQgd2lkdGgsIGhlaWdodDsKKyAgICBjbHV0dGVyX2FjdG9yX2dl
dF9zaXplKGFjdG9yLCAmd2lkdGgsICZoZWlnaHQpOworICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X2Fu
Y2hvcl9wb2ludChhY3Rvciwgd2lkdGggKiBwcml2LT5hbmNob3JYLCBoZWlnaHQgKiBwcml2LT5h
bmNob3JZKTsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JHZXRBbmNob3JQb2ludChHcmFw
aGljc0xheWVyQWN0b3IqIGxheWVyLCBnZmxvYXQqIHgsIGdmbG9hdCogeSwgZ2Zsb2F0KiB6KQor
eworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKyAg
ICBpZiAoeCkKKyAgICAgICAgKnggPSBwcml2LT5hbmNob3JYOworCisgICAgaWYgKHkpCisgICAg
ICAgICp5ID0gcHJpdi0+YW5jaG9yWTsKKworICAgIGlmICh6KQorICAgICAgICAqeiA9IHByaXYt
PmFuY2hvclo7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0U2Nyb2xsUG9zaXRpb24o
R3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgZ2Zsb2F0IHgsIGdmbG9hdCB5KQoreworICAgIEdy
YXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKworICAgIGlmICh4
ID4gMCB8fCB5ID4gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+c2Nyb2xsWCA9IHg7
CisgICAgcHJpdi0+c2Nyb2xsWSA9IHk7CisKKyAgICBjbHV0dGVyX2FjdG9yX3F1ZXVlX3JlZHJh
dyhDTFVUVEVSX0FDVE9SKGxheWVyKSk7Cit9CisKK2dpbnQgZ3JhcGhpY3NMYXllckFjdG9yR2V0
bkNoaWxkcmVuKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgQVNTRVJUKEdSQVBI
SUNTX0xBWUVSX0lTX0FDVE9SKGxheWVyKSk7CisKKyAgICByZXR1cm4gZ19saXN0X2xlbmd0aChs
YXllci0+Y2hpbGRyZW4pOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclJlcGxhY2VTdWJs
YXllcihHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBDbHV0dGVyQWN0b3IqIG9sZENoaWxkTGF5
ZXIsIENsdXR0ZXJBY3RvciogbmV3Q2hpbGRMYXllcikKK3sKKyAgICBBU1NFUlQoR1JBUEhJQ1Nf
TEFZRVJfSVNfQUNUT1IobGF5ZXIpKTsKKyAgICBBU1NFUlQoQ0xVVFRFUl9JU19BQ1RPUihvbGRD
aGlsZExheWVyKSk7CisgICAgQVNTRVJUKENMVVRURVJfSVNfQUNUT1IobmV3Q2hpbGRMYXllcikp
OworCisgICAgY2x1dHRlcl9hY3Rvcl9yZW1vdmVfY2hpbGQoQ0xVVFRFUl9BQ1RPUihsYXllciks
IG9sZENoaWxkTGF5ZXIpOworICAgIGNsdXR0ZXJfYWN0b3JfYWRkX2NoaWxkKENMVVRURVJfQUNU
T1IobGF5ZXIpLCBuZXdDaGlsZExheWVyKTsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JJ
bnNlcnRTdWJsYXllcihHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBDbHV0dGVyQWN0b3IqIGNo
aWxkTGF5ZXIsIGdpbnQgaW5kZXgpCit7CisgICAgQVNTRVJUKEdSQVBISUNTX0xBWUVSX0lTX0FD
VE9SKGxheWVyKSk7CisgICAgQVNTRVJUKENMVVRURVJfSVNfQUNUT1IoY2hpbGRMYXllcikpOwor
CisgICAgZ19vYmplY3RfcmVmKGNoaWxkTGF5ZXIpOworCisgICAgbGF5ZXItPmNoaWxkcmVuID0g
Z19saXN0X2luc2VydChsYXllci0+Y2hpbGRyZW4sIGNoaWxkTGF5ZXIsIGluZGV4KTsKKyAgICBB
U1NFUlQoIWNsdXR0ZXJfYWN0b3JfZ2V0X3BhcmVudChjaGlsZExheWVyKSk7CisgICAgY2x1dHRl
cl9hY3Rvcl9zZXRfcGFyZW50KGNoaWxkTGF5ZXIsIENMVVRURVJfQUNUT1IobGF5ZXIpKTsKKyAg
ICBjbHV0dGVyX2FjdG9yX3F1ZXVlX3JlbGF5b3V0KENMVVRURVJfQUNUT1IobGF5ZXIpKTsKKwor
ICAgIGdfb2JqZWN0X3VucmVmKGNoaWxkTGF5ZXIpOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJB
Y3RvclNldFN1YmxheWVycyhHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBHcmFwaGljc0xheWVy
QWN0b3JMaXN0JiBzdWJMYXllcnMpCit7CisgICAgaWYgKCFzdWJMYXllcnMuc2l6ZSgpKSB7Cisg
ICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92ZUFsbChsYXllcik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YkxheWVycy5zaXplKCk7
ICsraSkgeworICAgICAgICBDbHV0dGVyQWN0b3IqIGxheWVyQWN0b3IgPSBDTFVUVEVSX0FDVE9S
KHN1YkxheWVyc1tpXS5nZXQoKSk7CisgICAgICAgIGNsdXR0ZXJfY29udGFpbmVyX2FkZF9hY3Rv
cihDTFVUVEVSX0NPTlRBSU5FUihsYXllciksIGxheWVyQWN0b3IpOworICAgIH0KK30KKworR3Jh
cGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSBncmFwaGljc0xheWVyQWN0b3JHZXRMYXllclR5
cGUoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQ
cml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgcmV0dXJuIHByaXYtPmxheWVyVHlwZTsK
K30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRMYXllclR5cGUoR3JhcGhpY3NMYXllckFj
dG9yKiBsYXllciwgR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSBsYXllclR5cGUpCit7
CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAg
IHByaXYtPmxheWVyVHlwZSA9IGxheWVyVHlwZTsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0
b3JTZXRUcmFuc2xhdGVYKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGZsb2F0IHZhbHVlKQor
eworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKyAg
ICBwcml2LT50cmFuc2xhdGVYID0gdmFsdWU7CisgICAgY2x1dHRlcl9hY3Rvcl9xdWV1ZV9yZWRy
YXcoQ0xVVFRFUl9BQ1RPUihsYXllcikpOworfQorCitmbG9hdCBncmFwaGljc0xheWVyQWN0b3JH
ZXRUcmFuc2xhdGVYKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NM
YXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIHJldHVybiBwcml2LT50
cmFuc2xhdGVYOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zbGF0ZVkoR3Jh
cGhpY3NMYXllckFjdG9yKiBsYXllciwgZmxvYXQgdmFsdWUpCit7CisgICAgR3JhcGhpY3NMYXll
ckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIHByaXYtPnRyYW5zbGF0ZVkg
PSB2YWx1ZTsKKyAgICBjbHV0dGVyX2FjdG9yX3F1ZXVlX3JlZHJhdyhDTFVUVEVSX0FDVE9SKGxh
eWVyKSk7Cit9CisKK2Zsb2F0IGdyYXBoaWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVkoR3JhcGhp
Y3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBw
cml2ID0gbGF5ZXItPnByaXY7CisgICAgcmV0dXJuIHByaXYtPnRyYW5zbGF0ZVk7Cit9CisKK3Zv
aWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJBY3Rvciog
bGF5ZXIsIGdib29sZWFuIGRyYXdzQ29udGVudCkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQ
cml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisKKyAgICBpZiAoZHJhd3NDb250ZW50ID09IHBy
aXYtPmRyYXdzQ29udGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+ZHJhd3NDb250
ZW50ID0gZHJhd3NDb250ZW50OworCisgICAgZ3JhcGhpY3NMYXllckFjdG9yVXBkYXRlVGV4dHVy
ZShsYXllcik7Cit9CisKK2dib29sZWFuIGdyYXBoaWNzTGF5ZXJBY3RvckdldERyYXdzQ29udGVu
dChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQoreworICAgIHJldHVybiBsYXllci0+cHJpdi0+
ZHJhd3NDb250ZW50OworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9H
cmFwaGljc0xheWVyQWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Ns
dXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjRkN2RjMzAyYmU3Y2M5ZDUy
ZmMzZDExOGI0NTk3MGU2YmY5YjFlZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmgKQEAgLTAsMCAr
MSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAxMSwyMDEyIENvbGxhYm9yYSBMaW1pdGVkCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0
aW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lv
biAyLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoK
KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVz
ZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCisgKiBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCisgKiBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IKKyAqIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sCisgKiBJbmMuLCA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BIDAyMTEwLTEzMDEgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEdyYXBoaWNzTGF5ZXJBY3Rv
cl9oIAorI2RlZmluZSBHcmFwaGljc0xheWVyQWN0b3JfaCAKKworI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbHV0dGVyLmgiCisjaW5j
bHVkZSA8Y2x1dHRlci9jbHV0dGVyLmg+CisjaW5jbHVkZSA8Y29nbC9jb2dsLmg+CisjaW5jbHVk
ZSA8Z2xpYi1vYmplY3QuaD4KKworR19CRUdJTl9ERUNMUworCisjZGVmaW5lIEdSQVBISUNTX0xB
WUVSX1RZUEVfQUNUT1IgZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfZ2V0X3R5cGUoKQorCisjZGVmaW5l
IEdSQVBISUNTX0xBWUVSX0FDVE9SKG9iaikgXAorICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0Vf
Q0FTVCgob2JqKSwgXAorICAgIEdSQVBISUNTX0xBWUVSX1RZUEVfQUNUT1IsIEdyYXBoaWNzTGF5
ZXJBY3RvcikpCisKKyNkZWZpbmUgR1JBUEhJQ1NfTEFZRVJfQUNUT1JfQ0xBU1Moa2xhc3MpIFwK
KyAgICAoR19UWVBFX0NIRUNLX0NMQVNTX0NBU1QoKGtsYXNzKSwgXAorICAgIEdSQVBISUNTX0xB
WUVSX1RZUEVfQUNUT1IsIEdyYXBoaWNzTGF5ZXJBY3RvckNsYXNzKSkKKworI2RlZmluZSBHUkFQ
SElDU19MQVlFUl9JU19BQ1RPUihvYmopIFwKKyAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX1RZ
UEUoKG9iaiksIFwKKyAgICBHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SKSkKKworI2RlZmluZSBH
UkFQSElDU19MQVlFUl9JU19BQ1RPUl9DTEFTUyhrbGFzcykgXAorICAgIChHX1RZUEVfQ0hFQ0tf
Q0xBU1NfVFlQRSgoa2xhc3MpLCBcCisgICAgR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUikpCisK
KyNkZWZpbmUgR1JBUEhJQ1NfTEFZRVJfQUNUT1JfR0VUX0NMQVNTKG9iaikgXAorICAgIChHX1RZ
UEVfSU5TVEFOQ0VfR0VUX0NMQVNTKChvYmopLCBcCisgICAgR1JBUEhJQ1NfTEFZRVJfVFlQRV9B
Q1RPUiwgR3JhcGhpY3NMYXllckFjdG9yQ2xhc3MpKQorCit0eXBlZGVmIHN0cnVjdCBfR3JhcGhp
Y3NMYXllckFjdG9yIEdyYXBoaWNzTGF5ZXJBY3RvcjsKK3R5cGVkZWYgc3RydWN0IF9HcmFwaGlj
c0xheWVyQWN0b3JDbGFzcyBHcmFwaGljc0xheWVyQWN0b3JDbGFzczsKK3R5cGVkZWYgc3RydWN0
IF9HcmFwaGljc0xheWVyQWN0b3JQcml2YXRlIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGU7CisK
Ky8qKgorICogR3JhcGhpY3NMYXllckFjdG9yOgorICoKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlz
IHN0cnVjdHVyZSBhcmUgcHJpdmF0ZSBhbmQgc2hvdWxkIG9ubHkgYmUgYWNjZXNzZWQKKyAqIHRo
cm91Z2ggdGhlIHB1YmxpYyBBUEkuCisgKi8KK3N0cnVjdCBfR3JhcGhpY3NMYXllckFjdG9yIHsK
KyAgICBDbHV0dGVyUmVjdGFuZ2xlIHBhcmVudDsKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2
YXRlICpwcml2OworICAgIEdMaXN0ICpjaGlsZHJlbjsKK307CisKK3N0cnVjdCBfR3JhcGhpY3NM
YXllckFjdG9yQ2xhc3MgeworICAgIENsdXR0ZXJSZWN0YW5nbGVDbGFzcyBwYXJlbnRfY2xhc3M7
CisKKyAgICAvKiBwYWRkaW5nIGZvciBmdXR1cmUgZXhwYW5zaW9uICovCisgICAgdm9pZCAoKl9w
YWRkaW5nXzApKHZvaWQpOworICAgIHZvaWQgKCpfcGFkZGluZ18xKSh2b2lkKTsKKyAgICB2b2lk
ICgqX3BhZGRpbmdfMikodm9pZCk7CisgICAgdm9pZCAoKl9wYWRkaW5nXzMpKHZvaWQpOworICAg
IHZvaWQgKCpfcGFkZGluZ180KSh2b2lkKTsKK307CisKK0dUeXBlIGdyYXBoaWNzX2xheWVyX2Fj
dG9yX2dldF90eXBlKHZvaWQpIEdfR05VQ19DT05TVDsKKworR3JhcGhpY3NMYXllckFjdG9yKiBn
cmFwaGljc0xheWVyQWN0b3JOZXcoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVy
VHlwZSk7CitHcmFwaGljc0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXJBY3Rvck5ld1dpdGhDbGll
bnQoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSwgV2ViQ29yZTo6UGxh
dGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0Q2xp
ZW50KEdyYXBoaWNzTGF5ZXJBY3RvciosIFdlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckxheWVyQ2xp
ZW50Kik7CitXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCogZ3JhcGhpY3NMYXll
ckFjdG9yR2V0Q2xpZW50KEdyYXBoaWNzTGF5ZXJBY3RvciopOwordm9pZCBncmFwaGljc0xheWVy
QWN0b3JSZW1vdmVBbGwoR3JhcGhpY3NMYXllckFjdG9yKik7CitjYWlyb19zdXJmYWNlX3QqIGdy
YXBoaWNzTGF5ZXJBY3RvckdldFN1cmZhY2UoR3JhcGhpY3NMYXllckFjdG9yKik7Cit2b2lkIGdy
YXBoaWNzTGF5ZXJBY3RvclNldFN1cmZhY2UoR3JhcGhpY3NMYXllckFjdG9yKiwgY2Fpcm9fc3Vy
ZmFjZV90Kik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckludmFsaWRhdGVSZWN0YW5nbGUoR3Jh
cGhpY3NMYXllckFjdG9yKiwgY29uc3QgV2ViQ29yZTo6RmxvYXRSZWN0Jik7Cit2b2lkIGdyYXBo
aWNzTGF5ZXJBY3RvclNldFRyYW5zZm9ybShHcmFwaGljc0xheWVyQWN0b3IqLCBjb25zdCBDb2ds
TWF0cml4Kik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldEFuY2hvclBvaW50KEdyYXBoaWNz
TGF5ZXJBY3RvciosIGdmbG9hdCwgZ2Zsb2F0LCBnZmxvYXQpOwordm9pZCBncmFwaGljc0xheWVy
QWN0b3JHZXRBbmNob3JQb2ludChHcmFwaGljc0xheWVyQWN0b3IqLCBnZmxvYXQqLCBnZmxvYXQq
LCBnZmxvYXQqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0U2Nyb2xsUG9zaXRpb24oR3Jh
cGhpY3NMYXllckFjdG9yKiwgZ2Zsb2F0LCBnZmxvYXQpOyAKK3ZvaWQgZ3JhcGhpY3NMYXllckFj
dG9yU2V0VHJhbnNsYXRlWChHcmFwaGljc0xheWVyQWN0b3IqLCBmbG9hdCk7CitmbG9hdCBncmFw
aGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVYKEdyYXBoaWNzTGF5ZXJBY3RvciopOwordm9pZCBn
cmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xhdGVZKEdyYXBoaWNzTGF5ZXJBY3RvciosIGZsb2F0
KTsKK2Zsb2F0IGdyYXBoaWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVkoR3JhcGhpY3NMYXllckFj
dG9yKik7CitnaW50IGdyYXBoaWNzTGF5ZXJBY3RvckdldG5DaGlsZHJlbihHcmFwaGljc0xheWVy
QWN0b3IqKTsKK1dlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUgZ3JhcGhp
Y3NMYXllckFjdG9yR2V0TGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXJBY3RvciopOwordm9pZCBncmFw
aGljc0xheWVyQWN0b3JTZXRMYXllclR5cGUoR3JhcGhpY3NMYXllckFjdG9yKiwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSk7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rv
clNldFN1YmxheWVycyhHcmFwaGljc0xheWVyQWN0b3IqLCBXZWJDb3JlOjpHcmFwaGljc0xheWVy
QWN0b3JMaXN0Jik7CitnYm9vbGVhbiBncmFwaGljc0xheWVyQWN0b3JHZXREcmF3c0NvbnRlbnQo
R3JhcGhpY3NMYXllckFjdG9yKik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldERyYXdzQ29u
dGVudChHcmFwaGljc0xheWVyQWN0b3IqLCBnYm9vbGVhbiBkcmF3c0NvbnRlbnQpOworCitHX0VO
RF9ERUNMUworCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjZW5k
aWYgLyogR3JhcGhpY3NMYXllckFjdG9yX2ggKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIu
aAppbmRleCAzZTE0MmU0ODdkZTUwZWNmOGZlZDE0MWQ0NTY2NTQ2NGQ0NzQzOTI5Li5jNmM5MjEy
OTlmNGE3OGE5ZTM2NjFkM2NlOWEwMzM3Y2UzMzUyNGMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVy
Q2x1dHRlci5oCkBAIC0zMSwxMyArMzEsMTcgQEAKIAogI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXIu
aCIKIAorI2luY2x1ZGUgIlBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50LmgiCiAjaW5jbHVkZSA8
Y2x1dHRlci9jbHV0dGVyLmg+CiAjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1JlZlB0ci5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKK3R5cGVkZWYgVmVjdG9yPEdSZWZQdHI8R3JhcGhpY3NMYXll
ckFjdG9yPiA+IEdyYXBoaWNzTGF5ZXJBY3Rvckxpc3Q7CisKIGNsYXNzIEdyYXBoaWNzTGF5ZXJD
bHV0dGVyIDogcHVibGljIEdyYXBoaWNzTGF5ZXIgewogcHVibGljOgorICAgIGVudW0gTGF5ZXJU
eXBlIHsgTGF5ZXJUeXBlTGF5ZXIsIExheWVyVHlwZVdlYkxheWVyLCBMYXllclR5cGVWaWRlb0xh
eWVyLCBMYXllclR5cGVUcmFuc2Zvcm1MYXllciwgTGF5ZXJUeXBlUm9vdExheWVyLCBMYXllclR5
cGVDdXN0b20gfTsKICAgICBHcmFwaGljc0xheWVyQ2x1dHRlcihHcmFwaGljc0xheWVyQ2xpZW50
Kik7CiAgICAgdmlydHVhbCB+R3JhcGhpY3NMYXllckNsdXR0ZXIoKTsKIApkaWZmIC0tZ2l0IGEv
VG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDMyN2RlMDE3YjNkOWE5NzM2
NWRjYTdiNzBlY2Y1MWNkMjMxN2QzM2YuLmUzZmNkNjkzNjljNjIwNmJiNWY2ZGM2YzJjYzRmMjQ2
YzcwZDc1MzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNiBAQAorMjAxMi0wOS0yNSAgSm9vbmUgSHVyICA8am9vbmUuaHVyQGlu
dGVsLmNvbT4KKworICAgICAgICBbR1RLXSBBZGQgR3JhcGhpY3NMYXllckFjdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MTk0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBHcmFwaGljc0xheWVy
QWN0b3IgdG8gdGhlIGxpc3Qgb2YgY2xhc3NlcyB0aGF0IGNvbnRhaW4gR09iamVjdHMKKyAgICAg
ICAgaW4gdGhlIHN0eWxlIGNoZWNrZXIgc2NyaXB0IHNvIHRoYXQgaXQgZG9lcyBub3QgY29tcGxh
aW4gYWJvdXQgR09iamVjdAorICAgICAgICBjb2Rpbmcgc3R5bGUuCisKKyAgICAgICAgKiBTY3Jp
cHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHk6CisKIDIwMTItMDktMjQgIE5pa2hpbCBCYW5z
YWwgIDxuLmJhbnNhbEBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtXSzJdIFRlc3RSdW5u
ZXIgbmVlZHMgdG91Y2ggZXZlbnRzIHN1cHBvcnQuCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxl
L2NoZWNrZXIucHkKaW5kZXggNWIxMWFmNDgzZmYxNThjMWRmMDc4Yzk0NDcxMmFmMDdjODgzNWM5
My4uMjk1YWI2ZTE0N2QwOTM4NmZiZmJkYmYxZWIwZWI3MjUyMGRiY2E5OSAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQpAQCAtMjE4LDYgKzIxOCw4IEBAIF9QQVRIX1JV
TEVTX1NQRUNJRklFUiA9IFsKICAgICAgICItd2hpdGVzcGFjZS9kZWNsYXJhdGlvbiJdKSwKICAg
ICAoWyMgVGhlc2UgZmlsZXMgZGVmaW5lIEdPYmplY3RzLCB3aGljaCBpbXBsaWVzIHNvbWUgZGVm
aW5pdGlvbnMgb2YKICAgICAgICMgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgY29udGFpbmluZyB1
bmRlcnNjb3Jlcy4KKyAgICAgICJTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0
dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5jcHAiLAorICAgICAgIlNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmgiLAogICAgICAgIlNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIx
LmNwcCIsCiAgICAgICAiU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L1ZpZGVvU2lua0dTdHJlYW1lci5jcHAiLAogICAgICAgIlNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIiwK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167473</attachid>
            <date>2012-10-07 00:39:24 -0700</date>
            <delta_ts>2012-12-11 06:03:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91940-20121007163828.patch</filename>
            <type>text/plain</type>
            <size>33640</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5NDM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2I4Y2Q2MGJlYTQ0NDVm
NGMzYmMyMGQxODhhMDE2ZDhhMzcxZWRjYy4uNmMwNmMxYzg1MWI1YjA5ODEzZTZhMTE5ZTZmNWRm
NTE0NDhkZmQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTEwLTA3ICBKb29u
ZSBIdXIgIDxqb29uZS5odXJAaW50ZWwuY29tPiwgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3Vz
dGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIEdyYXBoaWNz
TGF5ZXJBY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTE5NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBHcmFwaGljc0xheWVyQWN0b3IsIHdoaWNoIGlzIGEgbmV3IENsdXR0ZXJBY3RvciwgcmVwcmVz
ZW50cyBhIG5vZGUgaW4gdGhlIEdQVS1yZW5kZXJhYmxlIGxheWVyIHRyZWUKKyAgICAgICAgd2hl
biBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyBlbmFibGVkIHdpdGggQ2x1dHRlciBhcyBhY2Nl
bGVyYXRpb24gYmFja2VuZC4KKyAgICAgICAgVGhpcyBwYXRjaCBhbGxvd3MgdG8gc3VwcG9ydCBi
YXNpYyBmZWF0dXJlcyBvZiBDU1MgM0QgVHJhbnNmb3Jtcy4KKworICAgICAgICBObyBuZXcgdGVz
dHMuIFRoaXMgd2lsbCBiZSBjb3ZlcmVkIGJ5IHBpeGVsIHRlc3RzIGZvciBRdCBhbmQgR1RLKyBh
Y2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGluZyBhbmQgM0QgdHJhbnNmb3Jtcy4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9HcmFwaGlj
c0xheWVyQWN0b3JQcml2YXRlKToKKyAgICAgICAgKGdyYXBoaWNzX2xheWVyX2FjdG9yX2NsYXNz
X2luaXQpOiBHT2JqZWN0IGNvbmZpZ3VyYXRpb24gb2YgYSBuZXcgQ2x1dHRlciBBY3Rvci4KKyAg
ICAgICAgKGdyYXBoaWNzX2xheWVyX2FjdG9yX2luaXQpOiBJbml0aWFsaXphdGlvbiBvZiB0aGUg
cHJpdmF0ZSBkYXRhIG9mIHRoaXMgYWN0b3IuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JT
ZXRQcm9wZXJ0eSk6IEdPYmplY3QgcHJvcGVydHkgc2V0dGVyLgorICAgICAgICAoZ3JhcGhpY3NM
YXllckFjdG9yR2V0UHJvcGVydHkpOiBHT2JqZWN0IHByb3BlcnR5IGdldHRlci4KKyAgICAgICAg
KGdyYXBoaWNzTGF5ZXJBY3RvckRpc3Bvc2UpOiBDYWxsZWQgdG8gZHJvcCBhbGwgcmVmZXJlbmNl
cyB0byBvdGhlciBvYmplY3RzLgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yQWxsb2NhdGUp
OiAgQ2FsbGVkIHRvIHNldCB0aGUgY29vcmRpbmF0ZXMgb2YgYW4gYWN0b3IuCisgICAgICAgIChn
cmFwaGljc0xheWVyQWN0b3JBcHBseVRyYW5zZm9ybSk6IEFwcGx5aW5nIHRoZSB0cmFuc2Zvcm1h
dGlvbiB0byBhbiBhY3RvciBiZWZvcmUgcGFpbnRpbmcgaXQuCisgICAgICAgIChncmFwaGljc0xh
eWVyQWN0b3JQYWludCk6IENhbGxlZCB0byBwYWludCB0aGUgYWN0b3IuCisgICAgICAgIChncmFw
aGljc0xheWVyQWN0b3JEcmF3KTogQ2FsbGVkIGVhY2ggdGltZSBhIENsdXR0ZXJDYWlyb1RleHR1
cmUgaGFzIGJlZW4gaW52YWxpZGF0ZWQuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JBZGRl
ZCk6IENhbGxlZCBlYWNoIHRpbWUgYW4gYWN0b3IgaGFzIGJlZW4gYWRkZWQgdG8gY29udGFpbmVy
LgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlZCk6IENhbGxlZCBlYWNoIHRpbWUg
YW4gYWN0b3IgaXMgcmVtb3ZlZCBmcm9tIGNvbnRhaW5lci4KKyAgICAgICAgKGdyYXBoaWNzTGF5
ZXJBY3Rvck5ldyk6IENyZWF0ZSBhIHNwZWNpZmljIGxheWVyIHR5cGUgb2YgR3JhcGhpY3NMYXll
ckFjdG9yIG9iamVjdC4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3Rvck5ld1dpdGhDbGllbnQp
OiBDcmVhdGUgYSBzcGVjaWZpYyBsYXllciB0eXBlIG9mIEdyYXBoaWNzTGF5ZXJBY3RvciBvYmpl
Y3Qgd2l0aCAKKyAgICAgICAgaXRzIFBsYXRmb3JtQ2x1dHRlckNsaWVudExheWVyLgorICAgICAg
ICAoZ3JhcGhpY3NMYXllckFjdG9yU2V0Q2xpZW50KTogQWRkZWQgc2V0dGVyIHRvIHNldCB0aGUg
UGxhdGZvcm1DbHV0dGVyQ2xpZW50TGF5ZXIuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JH
ZXRDbGllbnQpOiBBZGRlZCBnZXR0ZXIgdG8gZ2V0IHRoZSBQbGF0Zm9ybUNsdXR0ZXJDbGllbnRM
YXllci4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92ZUFsbCk6IFJlbW92ZSBhbGwg
Y2hpbGQgYWN0b3JzLgorICAgICAgICAoZ3JhcGhpY3NMYXllclVwZGF0ZVRleHR1cmUpOiBDcmVh
dGUgYSBDbHV0dGVyQ2Fpcm9UZXh0dXJlLgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yR2V0
U3VyZmFjZSk6IEFkZGVkIHNldHRlciB0byBzZXQgYSBjYWlyb19zdXJmYWNlX3QuCisgICAgICAg
IChncmFwaGljc0xheWVyQWN0b3JTZXRTdXJmYWNlKTogQWRkZWQgZ2V0dGVyIHRvIGdldCB0aGUg
Y2Fpcm9fc3VyZmFjZV90LgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9ySW52YWxpZGF0ZVJl
Y3RhbmdsZSk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2Zvcm0pOiBTZXQg
YSBDb2dsTWF0cml4IHRvIGFwcGx5IG1hdHJpeCB0cmFuc2Zvcm0uCisgICAgICAgIChncmFwaGlj
c0xheWVyQWN0b3JTZXRBbmNob3JQb2ludCk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JH
ZXRBbmNob3JQb2ludCk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXRTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRuQ2hpbGRyZW4pOgorICAgICAg
ICAoZ3JhcGhpY3NMYXllckFjdG9yUmVwbGFjZVN1YmxheWVyKToKKyAgICAgICAgKGdyYXBoaWNz
TGF5ZXJBY3Rvckluc2VydFN1YmxheWVyKToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclNl
dFN1YmxheWVycyk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRMYXllclR5cGUpOgor
ICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yU2V0TGF5ZXJUeXBlKToKKyAgICAgICAgKGdyYXBo
aWNzTGF5ZXJBY3RvclNldFRyYW5zbGF0ZVgpOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9y
R2V0VHJhbnNsYXRlWCk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xhdGVZ
KToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVkpOgorICAgICAgICAo
Z3JhcGhpY3NMYXllckFjdG9yU2V0RHJhd3NDb250ZW50KTogQWRkZWQgc2V0dGVyIHRvIHBhaW50
IGNvbnRlbnQgaW5zaWRlIGEgbGF5ZXIuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRE
cmF3c0NvbnRlbnQpOiBBZGRlZCBnZXR0ZXIgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgZHJhd3ND
b250ZW50LiAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5
ZXJBY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKF9HcmFwaGljc0xheWVyQWN0b3IpOgorICAgICAg
ICAoX0dyYXBoaWNzTGF5ZXJBY3RvckNsYXNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKwog
MjAxMi0wOS0yNCAgRGVhbiBKYWNrc29uICA8ZGlub0BhcHBsZS5jb20+CiAKICAgICAgICAgW1dl
YkdMXSBJbnRlbCBNYWMgbmVlZHMgYnVpbHQtaW4gZnVuY3Rpb24gZW11bGF0aW9uCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUv
R05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBkMmVkMjkxNWY2NWRhOWIzZjI1MTFkZTQ1NDEyNDVl
ZjQ1YjZjMTQ4Li45ZTk3NGJjNDI0MmJlOTA2M2FkMzJhMWVkNzFkYTRjNGE3YjI2OGIwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTYyNDAsNiArNjI0MCw4IEBAIGVuZGlmICAj
IEVORCBFTkFCTEVfV0VCR0wKIGlmIFVTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElORwogaWYgVVNF
X0NMVVRURVIKIHdlYmNvcmVfc291cmNlcyArPSBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwIFwKKwlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVy
LmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGlj
c0xheWVyQ2x1dHRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0
dGVyL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2x1dHRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFj
dG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41ZjNkNDYwYjAwM2MyYjcwMTJjMjI4ZGNlNDZiZjRkY2RjODlk
MTM5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwCkBAIC0wLDAgKzEsNjI5IEBACisvKgorICog
Q29weXJpZ2h0IDIwMTEsMjAxMiBDb2xsYWJvcmEgTGltaXRlZAorICogQ29weXJpZ2h0IChDKSAy
MDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
cHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3Ig
bW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMi4xLCBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0g
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VU
IEFOWQorICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh
bTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorICogSW5j
LiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEFDQ0VMRVJBVEVE
X0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckFjdG9yLmgiCisKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2x1dHRlci5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50LmgiCisjaW5jbHVkZSAiUGxh
dGZvcm1Db250ZXh0Q2Fpcm8uaCIKKyNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgorI2luY2x1ZGUg
PGdsaWIvZ3ByaW50Zi5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworR19ERUZJTkVf
VFlQRShHcmFwaGljc0xheWVyQWN0b3IsIGdyYXBoaWNzX2xheWVyX2FjdG9yLCBDTFVUVEVSX1RZ
UEVfUkVDVEFOR0xFKQorCisjZGVmaW5lIEdSQVBISUNTX0xBWUVSX0FDVE9SX0dFVF9QUklWQVRF
KG9iaikgKEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURSgob2JqKSwgR1JBUEhJQ1NfTEFZRVJf
VFlQRV9BQ1RPUiwgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSkpCisKK3N0cnVjdCBfR3JhcGhp
Y3NMYXllckFjdG9yUHJpdmF0ZSB7CisgICAgR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlw
ZSBsYXllclR5cGU7CisgICAgZ2Jvb2xlYW4gYWxsb2NhdGluZzsKKworICAgIENsdXR0ZXJBY3Rv
ciogdGV4dHVyZTsKKyAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBzdXJmYWNlOworICAgIENv
Z2xNYXRyaXgqIG1hdHJpeDsKKworICAgIFBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50KiBsYXll
ckNsaWVudDsKKworICAgIGdib29sZWFuIGRyYXdzQ29udGVudDsKKworICAgIGZsb2F0IGFuY2hv
clg7CisgICAgZmxvYXQgYW5jaG9yWTsKKyAgICBmbG9hdCBhbmNob3JaOworCisgICAgZmxvYXQg
c2Nyb2xsWDsKKyAgICBmbG9hdCBzY3JvbGxZOworCisgICAgZmxvYXQgdHJhbnNsYXRlWDsKKyAg
ICBmbG9hdCB0cmFuc2xhdGVZOworfTsKKworZW51bSB7CisgICAgUFJPUF8wLAorCisgICAgUFJP
UF9UUkFOU0xBVEVfWCwKKyAgICBQUk9QX1RSQU5TTEFURV9ZLAorCisgICAgUFJPUF9MQVNUCit9
OworCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JBbGxvY2F0ZShDbHV0dGVyQWN0b3Iq
LCBjb25zdCBDbHV0dGVyQWN0b3JCb3gqLCBDbHV0dGVyQWxsb2NhdGlvbkZsYWdzKTsKK3N0YXRp
YyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckFwcGx5VHJhbnNmb3JtKENsdXR0ZXJBY3RvciosIENv
Z2xNYXRyaXgqKTsKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckRpc3Bvc2UoR09iamVj
dCopOworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yR2V0UHJvcGVydHkoR09iamVjdCos
IGd1aW50IHByb3BJRCwgR1ZhbHVlKiwgR1BhcmFtU3BlYyopOworc3RhdGljIHZvaWQgZ3JhcGhp
Y3NMYXllckFjdG9yU2V0UHJvcGVydHkoR09iamVjdCosIGd1aW50IHByb3BJRCwgY29uc3QgR1Zh
bHVlKiwgR1BhcmFtU3BlYyopOworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yUGFpbnQo
Q2x1dHRlckFjdG9yKik7CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JQaWNrKENsdXR0
ZXJBY3RvciosIGNvbnN0IENsdXR0ZXJDb2xvciopOworCitzdGF0aWMgdm9pZCBncmFwaGljc0xh
eWVyQWN0b3JBZGRlZChDbHV0dGVyQ29udGFpbmVyKiwgQ2x1dHRlckFjdG9yKiwgZ3BvaW50ZXIg
ZGF0YSk7CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JSZW1vdmVkKENsdXR0ZXJDb250
YWluZXIqLCBDbHV0dGVyQWN0b3IqLCBncG9pbnRlciBkYXRhKTsKK3N0YXRpYyBnYm9vbGVhbiBn
cmFwaGljc0xheWVyQWN0b3JEcmF3KENsdXR0ZXJDYWlyb1RleHR1cmUqLCBjYWlyb190KiwgR3Jh
cGhpY3NMYXllckFjdG9yKik7CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JVcGRhdGVU
ZXh0dXJlKEdyYXBoaWNzTGF5ZXJBY3RvciopOworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFj
dG9yRHJhd0xheWVyQ29udGVudHMoQ2x1dHRlckFjdG9yKiwgR3JhcGhpY3NDb250ZXh0Jik7CisK
K3N0YXRpYyB2b2lkIGdyYXBoaWNzX2xheWVyX2FjdG9yX2NsYXNzX2luaXQoR3JhcGhpY3NMYXll
ckFjdG9yQ2xhc3MqIGtsYXNzKQoreworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0Q2xhc3MgPSBH
X09CSkVDVF9DTEFTUyhrbGFzcyk7CisgICAgQ2x1dHRlckFjdG9yQ2xhc3MqIGFjdG9yQ2xhc3Mg
PSBDTFVUVEVSX0FDVE9SX0NMQVNTKGtsYXNzKTsKKworICAgIG9iamVjdENsYXNzLT5nZXRfcHJv
cGVydHkgPSBncmFwaGljc0xheWVyQWN0b3JHZXRQcm9wZXJ0eTsKKyAgICBvYmplY3RDbGFzcy0+
c2V0X3Byb3BlcnR5ID0gZ3JhcGhpY3NMYXllckFjdG9yU2V0UHJvcGVydHk7CisgICAgb2JqZWN0
Q2xhc3MtPmRpc3Bvc2UgPSBncmFwaGljc0xheWVyQWN0b3JEaXNwb3NlOworICAgIGFjdG9yQ2xh
c3MtPmFwcGx5X3RyYW5zZm9ybSA9IGdyYXBoaWNzTGF5ZXJBY3RvckFwcGx5VHJhbnNmb3JtOwor
ICAgIGFjdG9yQ2xhc3MtPmFsbG9jYXRlID0gZ3JhcGhpY3NMYXllckFjdG9yQWxsb2NhdGU7Cisg
ICAgYWN0b3JDbGFzcy0+cGFpbnQgPSBncmFwaGljc0xheWVyQWN0b3JQYWludDsKKworICAgIGdf
dHlwZV9jbGFzc19hZGRfcHJpdmF0ZShrbGFzcywgc2l6ZW9mKEdyYXBoaWNzTGF5ZXJBY3RvclBy
aXZhdGUpKTsKKworICAgIEdQYXJhbVNwZWMqIHBzcGVjID0gZ19wYXJhbV9zcGVjX2Zsb2F0KCJ0
cmFuc2xhdGUteCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYW5zbGF0ZSBY
IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJhbnNsYXRpb24gdmFsdWUgZm9y
IHRoZSBYIGF4aXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1HX01BWEZMT0FU
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FULAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURXUklURSkpOworICAgIGdf
b2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsIFBST1BfVFJBTlNMQVRF
X1gsIHBzcGVjKTsKKworICAgIHBzcGVjID0gZ19wYXJhbV9zcGVjX2Zsb2F0KCJ0cmFuc2xhdGUt
eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRyYW5zbGF0ZSBZIiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiVHJhbnNsYXRpb24gdmFsdWUgZm9yIHRoZSBZIGF5
aXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1HX01BWEZMT0FULAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHX01BWEZMT0FULAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLjAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURXUklURSkpOworICAgIGdfb2JqZWN0X2Ns
YXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsIFBST1BfVFJBTlNMQVRFX1ksIHBzcGVj
KTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfaW5pdChHcmFwaGljc0xh
eWVyQWN0b3IqIHNlbGYpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9
IHNlbGYtPnByaXYgPSBHUkFQSElDU19MQVlFUl9BQ1RPUl9HRVRfUFJJVkFURShzZWxmKTsKKwor
ICAgIGNsdXR0ZXJfYWN0b3Jfc2V0X3JlYWN0aXZlKENMVVRURVJfQUNUT1Ioc2VsZiksIEZBTFNF
KTsKKworICAgIC8vIERlZmF1bHQgdXNlZCBieSBHcmFwaGljc0xheWVyLgorICAgIGdyYXBoaWNz
TGF5ZXJBY3RvclNldEFuY2hvclBvaW50KHNlbGYsIDAuNSwgMC41LCAwLjApOworCisgICAgZ19z
aWduYWxfY29ubmVjdChzZWxmLCAiYWN0b3ItYWRkZWQiLCBHX0NBTExCQUNLKGdyYXBoaWNzTGF5
ZXJBY3RvckFkZGVkKSwgMCk7CisgICAgZ19zaWduYWxfY29ubmVjdChzZWxmLCAiYWN0b3ItcmVt
b3ZlZCIsIEdfQ0FMTEJBQ0soZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlZCksIDApOworfQorCitz
dGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3Qs
IGd1aW50IHByb3BJRCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7
CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKG9i
amVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUFJPUF9UUkFOU0xBVEVf
WDoKKyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWChsYXllciwgZ192YWx1
ZV9nZXRfZmxvYXQodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBQUk9QX1RSQU5T
TEFURV9ZOgorICAgICAgICBncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xhdGVZKGxheWVyLCBn
X3ZhbHVlX2dldF9mbG9hdCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQs
IHBzcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckdldFBy
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBHVmFsdWUqIHZhbHVlLCBHUGFy
YW1TcGVjKiBwc3BlYykKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0gR1JBUEhJ
Q1NfTEFZRVJfQUNUT1Iob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElEKSB7CisgICAgY2Fz
ZSBQUk9QX1RSQU5TTEFURV9YOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgZ3Jh
cGhpY3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWChsYXllcikpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFBST1BfVFJBTlNMQVRFX1k6CisgICAgICAgIGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVl
LCBncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVZKGxheWVyKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIEdfT0JKRUNUX1dBUk5fSU5WQUxJRF9QUk9QRVJUWV9J
RChvYmplY3QsIHByb3BJRCwgcHNwZWMpOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZCBncmFw
aGljc0xheWVyQWN0b3JEaXNwb3NlKEdPYmplY3QqIG9iamVjdCkKK3sKKyAgICBHcmFwaGljc0xh
eWVyQWN0b3IqIGxheWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1Iob2JqZWN0KTsKKyAgICBHcmFw
aGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisKKyAgICBpZiAocHJp
di0+dGV4dHVyZSkgeworICAgICAgICBjbHV0dGVyX2FjdG9yX2Rlc3Ryb3kocHJpdi0+dGV4dHVy
ZSk7CisgICAgICAgIHByaXYtPnRleHR1cmUgPSAwOworICAgIH0KKworICAgIHByaXYtPnN1cmZh
Y2UuY2xlYXIoKTsKKworICAgIGlmIChwcml2LT5tYXRyaXgpCisgICAgICAgY29nbF9tYXRyaXhf
ZnJlZShwcml2LT5tYXRyaXgpOworCisgICAgR19PQkpFQ1RfQ0xBU1MoZ3JhcGhpY3NfbGF5ZXJf
YWN0b3JfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCisvLyBDb3BpZWQgZnJv
bSBjYWlyby4KKyNkZWZpbmUgTUFYX0lNQUdFX1NJWkUgMzI3NjcKKworc3RhdGljIHZvaWQgZ3Jh
cGhpY3NMYXllckFjdG9yQWxsb2NhdGUoQ2x1dHRlckFjdG9yKiBzZWxmLCBjb25zdCBDbHV0dGVy
QWN0b3JCb3gqIGJveCwgQ2x1dHRlckFsbG9jYXRpb25GbGFncyBmbGFncykKK3sKKyAgICBHcmFw
aGljc0xheWVyQWN0b3IqIGxheWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1Ioc2VsZik7CisgICAg
R3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgcHJp
di0+YWxsb2NhdGluZyA9IFRSVUU7CisKKyAgICBDTFVUVEVSX0FDVE9SX0NMQVNTKGdyYXBoaWNz
X2xheWVyX2FjdG9yX3BhcmVudF9jbGFzcyktPmFsbG9jYXRlKHNlbGYsIGJveCwgZmxhZ3MpOwor
CisgICAgaWYgKHByaXYtPnRleHR1cmUpIHsKKyAgICAgICAgLy8gVGhlIHRleHR1cmUgb2NjdXBp
ZXMgdGhlIHdob2xlIGFyZWEsIGJ1dCBpcyBwb3NpdGlvbmVkIGF0IDAsMAorICAgICAgICAvLyBy
ZWxhdGl2ZSB0byB0aGUgbGF5ZXIgYWN0b3IuCisgICAgICAgIENsdXR0ZXJBY3RvckJveCB0ZXh0
dXJlQm94ID0geyAwLjAsIDAuMCwgYm94LT54MiAtIGJveC0+eDEsIGJveC0+eTIgLSBib3gtPnkx
IH07CisKKyAgICAgICAgLy8gcHJvdGVjdCBhZ2FpbnN0IDB4MAorICAgICAgICBpZiAoIXRleHR1
cmVCb3gueDIpCisgICAgICAgICAgICB0ZXh0dXJlQm94LngyID0gMTsKKworICAgICAgICBpZiAo
IXRleHR1cmVCb3gueTIpCisgICAgICAgICAgICB0ZXh0dXJlQm94LnkyID0gMTsKKworICAgICAg
ICAvLyBGSVhNRTogc29tZSBwYWdlcyBtYWtlIHVzIGNyZWF0ZSB2ZXJ5IGJpZyBsYXllcnMsIHdo
aWNoCisgICAgICAgIC8vIGV4Y2VlZHMgY2Fpcm8ncyBsaW1pdHMsIGNoZWNrIGZvciB0aGF0IGhl
cmUuCisgICAgICAgIGlmICh0ZXh0dXJlQm94LngyID4gTUFYX0lNQUdFX1NJWkUpIHsKKyAgICAg
ICAgICAgIGdfd2FybmluZygiTGF5ZXIgJXMgaGFzIGEgd2lkdGggdGhhdCBleGNlZWRzIGNhaXJv
J3MgbGltaXRzOiAlLjJmIiwgY2x1dHRlcl9hY3Rvcl9nZXRfbmFtZShzZWxmKSwgdGV4dHVyZUJv
eC54Mik7CisgICAgICAgICAgICB0ZXh0dXJlQm94LngyID0gTUFYX0lNQUdFX1NJWkU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAodGV4dHVyZUJveC55MiA+IE1BWF9JTUFHRV9TSVpFKSB7Cisg
ICAgICAgICAgICBnX3dhcm5pbmcoIkxheWVyICVzIGhhcyBhIGhlaWdodCB0aGF0IGV4Y2VlZHMg
Y2Fpcm8ncyBsaW1pdHM6ICUuMmYiLCBjbHV0dGVyX2FjdG9yX2dldF9uYW1lKHNlbGYpLCB0ZXh0
dXJlQm94LnkyKTsKKyAgICAgICAgICAgIHRleHR1cmVCb3gueTIgPSBNQVhfSU1BR0VfU0laRTsK
KyAgICAgICAgfQorCisgICAgICAgIGNsdXR0ZXJfYWN0b3JfYWxsb2NhdGUocHJpdi0+dGV4dHVy
ZSwgJnRleHR1cmVCb3gsIGZsYWdzKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogbWF5YmUgd2Ug
Y2FuIGNhY2hlIGNoaWxkcmVuIGFsbG9jYXRpb24gYW5kIG5vdCBjYWxsCisgICAgLy8gYWxsb2Nh
dGUgb24gdGhlbSB0aGlzIG9mdGVuPworICAgIGZvciAoR0xpc3QqIGxpc3QgPSBsYXllci0+Y2hp
bGRyZW47IGxpc3Q7IGxpc3QgPSBsaXN0LT5uZXh0KSB7CisgICAgICAgICBDbHV0dGVyQWN0b3Iq
IGNoaWxkID0gQ0xVVFRFUl9BQ1RPUihsaXN0LT5kYXRhKTsKKworICAgICAgICAgZmxvYXQgY2hp
bGRXaWR0aCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3dpZHRoKGNoaWxkKTsKKyAgICAgICAgIGZsb2F0
IGNoaWxkSGVpZ2h0ID0gY2x1dHRlcl9hY3Rvcl9nZXRfaGVpZ2h0KGNoaWxkKTsKKworICAgICAg
ICAgQ2x1dHRlckFjdG9yQm94IGNoaWxkQm94OworICAgICAgICAgY2hpbGRCb3gueDEgPSBjbHV0
dGVyX2FjdG9yX2dldF94KGNoaWxkKTsKKyAgICAgICAgIGNoaWxkQm94LnkxID0gY2x1dHRlcl9h
Y3Rvcl9nZXRfeShjaGlsZCk7CisgICAgICAgICBjaGlsZEJveC54MiA9IGNoaWxkQm94LngxICsg
Y2hpbGRXaWR0aDsKKyAgICAgICAgIGNoaWxkQm94LnkyID0gY2hpbGRCb3gueTEgKyBjaGlsZEhl
aWdodDsKKworICAgICAgICAgY2x1dHRlcl9hY3Rvcl9hbGxvY2F0ZShjaGlsZCwgJmNoaWxkQm94
LCBmbGFncyk7CisgICAgfQorCisgICAgcHJpdi0+YWxsb2NhdGluZyA9IEZBTFNFOworfQorCitz
dGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JBcHBseVRyYW5zZm9ybShDbHV0dGVyQWN0b3Iq
IGFjdG9yLCBDb2dsTWF0cml4KiBtYXRyaXgpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJp
dmF0ZSogcHJpdiA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9yKS0+cHJpdjsKKworICAgIC8v
IEFwcGx5IHRyYW5zbGF0aW9uIGFuZCBzY3JvbGxpbmcgYXMgYSBzaW5nbGUgdHJhbnNsYXRpb24u
IFRoZXNlCisgICAgLy8gbmVlZCB0byBjb21lIGJlZm9yZSBhbnl0aGluZyBlbHNlLCBvdGhlcndp
c2UgdGhleSdsbCBiZQorICAgIC8vIGFmZmVjdGVkIGJ5IG90aGVyIG9wZXJhdGlvbnMgc3VjaCBh
cyBzY2FsaW5nLCB3aGljaCBpcyBub3Qgd2hhdAorICAgIC8vIHdlIHdhbnQuCisgICAgZmxvYXQg
dHJhbnNsYXRlWCA9IHByaXYtPnNjcm9sbFggKyBwcml2LT50cmFuc2xhdGVYOworICAgIGZsb2F0
IHRyYW5zbGF0ZVkgPSBwcml2LT5zY3JvbGxZICsgcHJpdi0+dHJhbnNsYXRlWTsKKworICAgIGlm
ICh0cmFuc2xhdGVYIHx8IHRyYW5zbGF0ZVkpCisgICAgICAgIGNvZ2xfbWF0cml4X3RyYW5zbGF0
ZShtYXRyaXgsIHRyYW5zbGF0ZVgsIHRyYW5zbGF0ZVksIDApOworCisgICAgQ0xVVFRFUl9BQ1RP
Ul9DTEFTUyhncmFwaGljc19sYXllcl9hY3Rvcl9wYXJlbnRfY2xhc3MpLT5hcHBseV90cmFuc2Zv
cm0oYWN0b3IsIG1hdHJpeCk7CisKKyAgICBmbG9hdCB3aWR0aCA9IGNsdXR0ZXJfYWN0b3JfZ2V0
X3dpZHRoKGFjdG9yKTsKKyAgICBmbG9hdCBoZWlnaHQgPSBjbHV0dGVyX2FjdG9yX2dldF9oZWln
aHQoYWN0b3IpOworICAgIGlmICh3aWR0aCA8PSAxLjAgfHwgaGVpZ2h0IDw9IDEuMCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZmxvYXQgcGl2b3RYLCBwaXZvdFk7CisgICAgcGl2b3RYID0gd2lk
dGggKiBwcml2LT5hbmNob3JYOworICAgIHBpdm90WSA9IGhlaWdodCAqIHByaXYtPmFuY2hvclk7
CisKKyAgICBpZiAocHJpdi0+bWF0cml4KSB7CisgICAgICAgIENvZ2xNYXRyaXgqIGxvY2FsTWF0
cml4OworICAgICAgICAvLyBDU1MzIHRyYW5mb3JtLXN0eWxlIGNhbiBiZSBjaGFuZ2VkIG9uIHRo
ZSBmbHksIAorICAgICAgICAvLyBzbyB3ZSBoYXZlIHRvIGNvcHkgcHJpdi0+bWF0cml4IGluIG9y
ZGVyIHRvIHJlY292ZXIgei1heGlzLiAKKyAgICAgICAgbG9jYWxNYXRyaXggPSBjb2dsX21hdHJp
eF9jb3B5KHByaXYtPm1hdHJpeCk7CisKKyAgICAgICAgY29nbF9tYXRyaXhfdHJhbnNsYXRlKG1h
dHJpeCwgcGl2b3RYLCBwaXZvdFksIHByaXYtPmFuY2hvclopOworICAgICAgICBjb2dsX21hdHJp
eF9tdWx0aXBseShtYXRyaXgsIG1hdHJpeCwgbG9jYWxNYXRyaXgpOworICAgICAgICBjb2dsX21h
dHJpeF90cmFuc2xhdGUobWF0cml4LCAtcGl2b3RYLCAtcGl2b3RZLCAtcHJpdi0+YW5jaG9yWik7
CisgICAgICAgIGNvZ2xfbWF0cml4X2ZyZWUobG9jYWxNYXRyaXgpOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yUGFpbnQoQ2x1dHRlckFjdG9yKiBhY3RvcikKK3sK
KyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXIgPSBHUkFQSElDU19MQVlFUl9B
Q1RPUihhY3Rvcik7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IEdSQVBI
SUNTX0xBWUVSX0FDVE9SKGFjdG9yKS0+cHJpdjsKKworICAgIC8vIFBhaW50IHRoZSB0ZXh0dXJl
IGluIGNhc2Ugd2UgaGF2ZSBhIGJvcmRlci4gVGhpcyB3aWxsIGJlIHRoZSBjYXNlIHdoZW4gZGVi
dWdnaW5nIGJvcmRlcnMKKyAgICAvLyBhcmUgdHVybmVkIG9uIHRoYXQgd2Ugd2FudCB0byBzZWUu
CisgICAgaWYgKHByaXYtPnRleHR1cmUpCisgICAgICAgIGNsdXR0ZXJfYWN0b3JfcGFpbnQocHJp
di0+dGV4dHVyZSk7CisKKyAgICBHTGlzdCogbGlzdDsKKyAgICBmb3IgKGxpc3QgPSBncmFwaGlj
c0xheWVyLT5jaGlsZHJlbjsgbGlzdDsgbGlzdCA9IGxpc3QtPm5leHQpIHsKKyAgICAgICAgIENs
dXR0ZXJBY3RvciogY2hpbGQgPSBDTFVUVEVSX0FDVE9SKGxpc3QtPmRhdGEpOworICAgICAgICAg
Y2x1dHRlcl9hY3Rvcl9wYWludChjaGlsZCk7CisgICAgfQorfQorCitzdGF0aWMgZ2Jvb2xlYW4g
Z3JhcGhpY3NMYXllckFjdG9yRHJhdyhDbHV0dGVyQ2Fpcm9UZXh0dXJlKiB0ZXh0dXJlLCBjYWly
b190KiBjciwgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBDbHV0dGVyQWN0b3Iq
IGFjdG9yID0gQ0xVVFRFUl9BQ1RPUihsYXllcik7CisgICAgZmxvYXQgd2lkdGggPSBjbHV0dGVy
X2FjdG9yX2dldF93aWR0aChhY3Rvcik7CisgICAgZmxvYXQgaGVpZ2h0ID0gY2x1dHRlcl9hY3Rv
cl9nZXRfaGVpZ2h0KGFjdG9yKTsKKworICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkKKyAgICAg
ICAgcmV0dXJuIEZBTFNFOworCisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9
IGxheWVyLT5wcml2OworICAgIEdyYXBoaWNzQ29udGV4dCBjb250ZXh0KGNyKTsKKworICAgIGNs
dXR0ZXJfY2Fpcm9fdGV4dHVyZV9jbGVhcih0ZXh0dXJlKTsKKworICAgIGlmIChwcml2LT5zdXJm
YWNlKSB7CisgICAgICAgIGdpbnQgc3VyZmFjZVdpZHRoID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfd2lkdGgocHJpdi0+c3VyZmFjZS5nZXQoKSk7CisgICAgICAgIGdpbnQgc3VyZmFjZUhlaWdo
dCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChwcml2LT5zdXJmYWNlLmdldCgpKTsK
KworICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLjAsIDAuMCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHN1cmZhY2VXaWR0aCksIHN0YXRpY19jYXN0PGZsb2F0PihzdXJmYWNlSGVpZ2h0KSk7CisgICAg
ICAgIEZsb2F0UmVjdCBkZXN0UmVjdCgwLjAsIDAuMCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAg
IGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJmYWNlVG9Db250ZXh0KHByaXYtPnN1
cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCAmY29udGV4dCk7CisgICAgfQorCisgICAg
aWYgKHByaXYtPmxheWVyVHlwZSA9PSBHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlV2Vi
TGF5ZXIpCisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvckRyYXdMYXllckNvbnRlbnRzKGFjdG9y
LCBjb250ZXh0KTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBncmFwaGlj
c0xheWVyQWN0b3JBZGRlZChDbHV0dGVyQ29udGFpbmVyKiBjb250YWluZXIsIENsdXR0ZXJBY3Rv
ciogYWN0b3IsIGdwb2ludGVyIGRhdGEpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBncmFw
aGljc0xheWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1IoY29udGFpbmVyKTsKKyAgICBncmFwaGlj
c0xheWVyLT5jaGlsZHJlbiA9IGdfbGlzdF9hcHBlbmQoZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4s
IGFjdG9yKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlZChDbHV0
dGVyQ29udGFpbmVyKiBjb250YWluZXIsIENsdXR0ZXJBY3RvciogYWN0b3IsIGdwb2ludGVyIGRh
dGEpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBncmFwaGljc0xheWVyID0gR1JBUEhJQ1Nf
TEFZRVJfQUNUT1IoY29udGFpbmVyKTsKKyAgICBncmFwaGljc0xheWVyLT5jaGlsZHJlbiA9IGdf
bGlzdF9yZW1vdmUoZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4sIGFjdG9yKTsKK30KKworc3RhdGlj
IHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yVXBkYXRlVGV4dHVyZShHcmFwaGljc0xheWVyQWN0b3Iq
IGxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+
cHJpdjsKKyAgICBBU1NFUlQocHJpdi0+bGF5ZXJUeXBlICE9IEdyYXBoaWNzTGF5ZXJDbHV0dGVy
OjpMYXllclR5cGVWaWRlb0xheWVyKTsKKworICAgIC8vIE5vdGhpbmcgbmVlZHMgYSB0ZXh0dXJl
LCByZW1vdmUgdGhlIG9uZSB3ZSBoYXZlLCBpZiBhbnkuCisgICAgaWYgKCFwcml2LT5kcmF3c0Nv
bnRlbnQgJiYgIXByaXYtPnN1cmZhY2UpIHsKKyAgICAgICAgaWYgKCFwcml2LT50ZXh0dXJlKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5l
Y3RfYnlfZnVuYyhwcml2LT50ZXh0dXJlLCByZWludGVycHJldF9jYXN0PHZvaWQqPihncmFwaGlj
c0xheWVyQWN0b3JEcmF3KSwgbGF5ZXIpOworICAgICAgICBjbHV0dGVyX2FjdG9yX3VucGFyZW50
KHByaXYtPnRleHR1cmUpOworICAgICAgICBwcml2LT50ZXh0dXJlID0gMDsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIC8vIFdlIG5lZWQgYSB0ZXh0dXJlLCBidXQgYWxyZWFkeSBoYXZl
IG9uZSEKKyAgICBpZiAocHJpdi0+dGV4dHVyZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
V2UgbmVlZCBhIHRleHR1cmUsIHNvIGNyZWF0ZSBpdC4KKyAgICBDbHV0dGVyQWN0b3IqIGFjdG9y
ID0gQ0xVVFRFUl9BQ1RPUihsYXllcik7CisgICAgaW50IHdpZHRoID0gY2VpbGYoY2x1dHRlcl9h
Y3Rvcl9nZXRfd2lkdGgoYWN0b3IpKTsKKyAgICBpbnQgaGVpZ2h0ID0gY2VpbGYoY2x1dHRlcl9h
Y3Rvcl9nZXRfaGVpZ2h0KGFjdG9yKSk7CisKKyAgICBwcml2LT50ZXh0dXJlID0gQ0xVVFRFUl9B
Q1RPUihnX29iamVjdF9uZXcoQ0xVVFRFUl9UWVBFX0NBSVJPX1RFWFRVUkUsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhdXRvLXJlc2l6ZSIsIFRSVUUs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXJmYWNl
LWhlaWdodCIsIHdpZHRoID4gMCA/IHdpZHRoIDogMSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgInN1cmZhY2Utd2lkdGgiLCBoZWlnaHQgPiAwID8gaGVp
Z2h0IDogMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCkpOworCisgICAgY2x1dHRlcl9hY3Rvcl9zZXRfcGFyZW50KHByaXYtPnRleHR1cmUsIGFjdG9y
KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+dGV4dHVyZSwgImRyYXciLCBHX0NBTExC
QUNLKGdyYXBoaWNzTGF5ZXJBY3RvckRyYXcpLCBsYXllcik7Cit9CisKKy8vIERyYXcgY29udGVu
dCBpbnRvIHRoZSBsYXllci4KK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckRyYXdMYXll
ckNvbnRlbnRzKENsdXR0ZXJBY3RvciogYWN0b3IsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkK
K3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gR1JBUEhJQ1NfTEFZRVJf
QUNUT1IoYWN0b3IpLT5wcml2OworCisgICAgaWYgKCFwcml2LT5kcmF3c0NvbnRlbnQgfHwgIXBy
aXYtPmxheWVyQ2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB3aWR0aCA9IGNs
dXR0ZXJfYWN0b3JfZ2V0X3dpZHRoKGFjdG9yKTsKKyAgICBmbG9hdCBoZWlnaHQgPSBjbHV0dGVy
X2FjdG9yX2dldF9oZWlnaHQoYWN0b3IpOworICAgIEludFJlY3QgY2xpcCgwLCAwLCB3aWR0aCwg
aGVpZ2h0KTsKKworICAgIC8vIEFwcGx5IHRoZSBwYWludGVkIGNvbnRlbnQgdG8gdGhlIGxheWVy
LgorICAgIHByaXYtPmxheWVyQ2xpZW50LT5wbGF0Zm9ybUNsdXR0ZXJMYXllclBhaW50Q29udGVu
dHMoY29udGV4dCwgY2xpcCk7Cit9CisKKworR3JhcGhpY3NMYXllckFjdG9yKiBncmFwaGljc0xh
eWVyQWN0b3JOZXcoR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSB0eXBlKQoreworICAg
IEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihnX29iamVj
dF9uZXcoR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUiwgMCkpOworICAgIEdyYXBoaWNzTGF5ZXJB
Y3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKworICAgIHByaXYtPmxheWVyVHlwZSA9
IHR5cGU7CisKKyAgICAvLyBGb3IgdmlkZW8gbGF5ZXJzIHdlIGRvbid0IHdhbnQgdGhlIGNhaXJv
IHRleHR1cmUsIGJ1dCBhIHJlZ3VsYXIgb25lLgorICAgIGlmIChwcml2LT5sYXllclR5cGUgPT0g
R3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZVZpZGVvTGF5ZXIpIHsKKyAgICAgICAgcHJp
di0+dGV4dHVyZSA9IGNsdXR0ZXJfdGV4dHVyZV9uZXcoKTsKKyAgICAgICAgY2x1dHRlcl9hY3Rv
cl9zZXRfcGFyZW50KHByaXYtPnRleHR1cmUsIENMVVRURVJfQUNUT1IobGF5ZXIpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gbGF5ZXI7Cit9CisKK0dyYXBoaWNzTGF5ZXJBY3RvciogZ3JhcGhpY3NM
YXllckFjdG9yTmV3V2l0aENsaWVudChHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlIHR5
cGUsIFBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50KiBsYXllckNsaWVudCkKK3sKKyAgICBHcmFw
aGljc0xheWVyQWN0b3IqIGxheWVyID0gZ3JhcGhpY3NMYXllckFjdG9yTmV3KHR5cGUpOworICAg
IGdyYXBoaWNzTGF5ZXJBY3RvclNldENsaWVudChsYXllciwgbGF5ZXJDbGllbnQpOworCisgICAg
cmV0dXJuIGxheWVyOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldENsaWVudChHcmFw
aGljc0xheWVyQWN0b3IqIGxheWVyLCBQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCogY2xpZW50
KQoreworICAgIGxheWVyLT5wcml2LT5sYXllckNsaWVudCA9IGNsaWVudDsKK30KKworUGxhdGZv
cm1DbHV0dGVyTGF5ZXJDbGllbnQqIGdyYXBoaWNzTGF5ZXJBY3RvckdldENsaWVudChHcmFwaGlj
c0xheWVyQWN0b3IqIGxheWVyKQoreworICAgIHJldHVybiBsYXllci0+cHJpdi0+bGF5ZXJDbGll
bnQ7Cit9CisKKy8qIAorICogcHVibGljIEFQSQorICovCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rv
clJlbW92ZUFsbChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQoreworICAgIGdfcmV0dXJuX2lm
X2ZhaWwoR1JBUEhJQ1NfTEFZRVJfSVNfQUNUT1IobGF5ZXIpKTsKKworICAgIEdMaXN0KiBjaGls
ZHJlbiA9IGNsdXR0ZXJfYWN0b3JfZ2V0X2NoaWxkcmVuKENMVVRURVJfQUNUT1IobGF5ZXIpKTsK
KyAgICBmb3IgKDsgY2hpbGRyZW47IGNoaWxkcmVuID0gY2hpbGRyZW4tPm5leHQpIHsKKyAgICAg
ICAgLy8gV2Ugb25seSB3YW50IHRvIHJlbW92ZSBzdWJsYXllcnMsIG5vdCBvdXIgb3duIGNvbXBv
c2l0ZSBhY3RvcnMuCisgICAgICAgIGlmIChjaGlsZHJlbi0+ZGF0YSA9PSBsYXllci0+cHJpdi0+
dGV4dHVyZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNsdXR0ZXJfYWN0b3Jf
cmVtb3ZlX2NoaWxkKENMVVRURVJfQUNUT1IobGF5ZXIpLCBDTFVUVEVSX0FDVE9SKGNoaWxkcmVu
LT5kYXRhKSk7CisgICAgfQorfQorCitjYWlyb19zdXJmYWNlX3QqIGdyYXBoaWNzTGF5ZXJBY3Rv
ckdldFN1cmZhY2UoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xh
eWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgQVNTRVJUKHByaXYtPnN1
cmZhY2UpOworICAgIHJldHVybiBwcml2LT5zdXJmYWNlLmdldCgpOworfQorCit2b2lkIGdyYXBo
aWNzTGF5ZXJBY3RvclNldFN1cmZhY2UoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgY2Fpcm9f
c3VyZmFjZV90KiBzdXJmYWNlKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHBy
aXYgPSBsYXllci0+cHJpdjsKKyAgICBwcml2LT5zdXJmYWNlID0gc3VyZmFjZTsKKyAgICBncmFw
aGljc0xheWVyQWN0b3JVcGRhdGVUZXh0dXJlKGxheWVyKTsKK30KKwordm9pZCBncmFwaGljc0xh
eWVyQWN0b3JJbnZhbGlkYXRlUmVjdGFuZ2xlKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGNv
bnN0IEZsb2F0UmVjdCYgZGlydHlSZWN0KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZh
dGUqIHByaXYgPSBsYXllci0+cHJpdjsKKworICAgIGlmICghcHJpdi0+dGV4dHVyZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgY2Fpcm9fcmVjdGFuZ2xlX2ludF90IHJlY3QoZW5jbG9zaW5nSW50
UmVjdChkaXJ0eVJlY3QpKTsKKyAgICBjbHV0dGVyX2NhaXJvX3RleHR1cmVfaW52YWxpZGF0ZV9y
ZWN0YW5nbGUoQ0xVVFRFUl9DQUlST19URVhUVVJFKHByaXYtPnRleHR1cmUpLCAmcmVjdCk7Cit9
CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNmb3JtKEdyYXBoaWNzTGF5ZXJBY3Rv
ciogbGF5ZXIsIGNvbnN0IENvZ2xNYXRyaXgqIG1hdHJpeCkgCit7CisgICAgR3JhcGhpY3NMYXll
ckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgaWYgKHByaXYtPm1hdHJp
eCkgeworICAgICAgICBjb2dsX21hdHJpeF9mcmVlKHByaXYtPm1hdHJpeCk7CisgICAgICAgIHBy
aXYtPm1hdHJpeCA9IDA7CisgICAgICAgIGNsdXR0ZXJfYWN0b3JfcXVldWVfcmVkcmF3KENMVVRU
RVJfQUNUT1IobGF5ZXIpKTsKKyAgICB9CisKKyAgICBDb2dsTWF0cml4IGlkZW50aXR5OworICAg
IGNvZ2xfbWF0cml4X2luaXRfaWRlbnRpdHkoJmlkZW50aXR5KTsKKyAgICBpZiAoY29nbF9tYXRy
aXhfZXF1YWwoKENvZ2xNYXRyaXgqKSZpZGVudGl0eSwgKENvZ2xNYXRyaXgqKW1hdHJpeCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmIChwcml2LT5tYXRyaXgpCisgICAgICAgIGNvZ2xfbWF0
cml4X2ZyZWUocHJpdi0+bWF0cml4KTsKKworICAgIHByaXYtPm1hdHJpeCA9IGNvZ2xfbWF0cml4
X2NvcHkobWF0cml4KTsKKyAgICBjbHV0dGVyX2FjdG9yX3F1ZXVlX3JlZHJhdyhDTFVUVEVSX0FD
VE9SKGxheWVyKSk7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0QW5jaG9yUG9pbnQo
R3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikKK3sK
KyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisKKyAg
ICBwcml2LT5hbmNob3JYID0geDsKKyAgICBwcml2LT5hbmNob3JZID0geTsKKyAgICBwcml2LT5h
bmNob3JaID0gejsKKworICAgIENsdXR0ZXJBY3RvciogYWN0b3IgPSBDTFVUVEVSX0FDVE9SKGxh
eWVyKTsKKworICAgIGZsb2F0IHdpZHRoLCBoZWlnaHQ7CisgICAgY2x1dHRlcl9hY3Rvcl9nZXRf
c2l6ZShhY3RvciwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBjbHV0dGVyX2FjdG9yX3NldF9hbmNo
b3JfcG9pbnQoYWN0b3IsIHdpZHRoICogcHJpdi0+YW5jaG9yWCwgaGVpZ2h0ICogcHJpdi0+YW5j
aG9yWSk7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yR2V0QW5jaG9yUG9pbnQoR3JhcGhp
Y3NMYXllckFjdG9yKiBsYXllciwgZmxvYXQqIHgsIGZsb2F0KiB5LCBmbG9hdCogeikKK3sKKyAg
ICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgaWYg
KHgpCisgICAgICAgICp4ID0gcHJpdi0+YW5jaG9yWDsKKworICAgIGlmICh5KQorICAgICAgICAq
eSA9IHByaXYtPmFuY2hvclk7CisKKyAgICBpZiAoeikKKyAgICAgICAgKnogPSBwcml2LT5hbmNo
b3JaOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFNjcm9sbFBvc2l0aW9uKEdyYXBo
aWNzTGF5ZXJBY3RvciogbGF5ZXIsIGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgR3JhcGhpY3NM
YXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgaWYgKHggPiAwIHx8
IHkgPiAwKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5zY3JvbGxYID0geDsKKyAgICBw
cml2LT5zY3JvbGxZID0geTsKKworICAgIGNsdXR0ZXJfYWN0b3JfcXVldWVfcmVkcmF3KENMVVRU
RVJfQUNUT1IobGF5ZXIpKTsKK30KKworZ2ludCBncmFwaGljc0xheWVyQWN0b3JHZXRuQ2hpbGRy
ZW4oR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBBU1NFUlQoR1JBUEhJQ1NfTEFZ
RVJfSVNfQUNUT1IobGF5ZXIpKTsKKworICAgIHJldHVybiBnX2xpc3RfbGVuZ3RoKGxheWVyLT5j
aGlsZHJlbik7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yUmVwbGFjZVN1YmxheWVyKEdy
YXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIENsdXR0ZXJBY3Rvciogb2xkQ2hpbGRMYXllciwgQ2x1
dHRlckFjdG9yKiBuZXdDaGlsZExheWVyKQoreworICAgIEFTU0VSVChHUkFQSElDU19MQVlFUl9J
U19BQ1RPUihsYXllcikpOworICAgIEFTU0VSVChDTFVUVEVSX0lTX0FDVE9SKG9sZENoaWxkTGF5
ZXIpKTsKKyAgICBBU1NFUlQoQ0xVVFRFUl9JU19BQ1RPUihuZXdDaGlsZExheWVyKSk7CisKKyAg
ICBjbHV0dGVyX2FjdG9yX3JlbW92ZV9jaGlsZChDTFVUVEVSX0FDVE9SKGxheWVyKSwgb2xkQ2hp
bGRMYXllcik7CisgICAgY2x1dHRlcl9hY3Rvcl9hZGRfY2hpbGQoQ0xVVFRFUl9BQ1RPUihsYXll
ciksIG5ld0NoaWxkTGF5ZXIpOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rvckluc2VydFN1
YmxheWVyKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIENsdXR0ZXJBY3RvciogY2hpbGRMYXll
ciwgZ2ludCBpbmRleCkKK3sKKyAgICBBU1NFUlQoR1JBUEhJQ1NfTEFZRVJfSVNfQUNUT1IobGF5
ZXIpKTsKKyAgICBBU1NFUlQoQ0xVVFRFUl9JU19BQ1RPUihjaGlsZExheWVyKSk7CisKKyAgICBn
X29iamVjdF9yZWYoY2hpbGRMYXllcik7CisKKyAgICBsYXllci0+Y2hpbGRyZW4gPSBnX2xpc3Rf
aW5zZXJ0KGxheWVyLT5jaGlsZHJlbiwgY2hpbGRMYXllciwgaW5kZXgpOworICAgIEFTU0VSVCgh
Y2x1dHRlcl9hY3Rvcl9nZXRfcGFyZW50KGNoaWxkTGF5ZXIpKTsKKyAgICBjbHV0dGVyX2FjdG9y
X3NldF9wYXJlbnQoY2hpbGRMYXllciwgQ0xVVFRFUl9BQ1RPUihsYXllcikpOworICAgIGNsdXR0
ZXJfYWN0b3JfcXVldWVfcmVsYXlvdXQoQ0xVVFRFUl9BQ1RPUihsYXllcikpOworCisgICAgZ19v
YmplY3RfdW5yZWYoY2hpbGRMYXllcik7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0
U3VibGF5ZXJzKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXJBY3Rvckxp
c3QmIHN1YkxheWVycykKK3sKKyAgICBpZiAoIXN1YkxheWVycy5zaXplKCkpIHsKKyAgICAgICAg
Z3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlQWxsKGxheWVyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3ViTGF5ZXJzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIENsdXR0ZXJBY3RvciogbGF5ZXJBY3RvciA9IENMVVRURVJfQUNUT1Ioc3ViTGF5
ZXJzW2ldLmdldCgpKTsKKyAgICAgICAgY2x1dHRlcl9jb250YWluZXJfYWRkX2FjdG9yKENMVVRU
RVJfQ09OVEFJTkVSKGxheWVyKSwgbGF5ZXJBY3Rvcik7CisgICAgfQorfQorCitHcmFwaGljc0xh
eWVyQ2x1dHRlcjo6TGF5ZXJUeXBlIGdyYXBoaWNzTGF5ZXJBY3RvckdldExheWVyVHlwZShHcmFw
aGljc0xheWVyQWN0b3IqIGxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUq
IHByaXYgPSBsYXllci0+cHJpdjsKKyAgICByZXR1cm4gcHJpdi0+bGF5ZXJUeXBlOworfQorCit2
b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldExheWVyVHlwZShHcmFwaGljc0xheWVyQWN0b3IqIGxh
eWVyLCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSkKK3sKKyAgICBH
cmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgcHJpdi0+
bGF5ZXJUeXBlID0gbGF5ZXJUeXBlOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRy
YW5zbGF0ZVgoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgZmxvYXQgdmFsdWUpCit7CisgICAg
R3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIHByaXYt
PnRyYW5zbGF0ZVggPSB2YWx1ZTsKKyAgICBjbHV0dGVyX2FjdG9yX3F1ZXVlX3JlZHJhdyhDTFVU
VEVSX0FDVE9SKGxheWVyKSk7Cit9CisKK2Zsb2F0IGdyYXBoaWNzTGF5ZXJBY3RvckdldFRyYW5z
bGF0ZVgoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0
b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgcmV0dXJuIHByaXYtPnRyYW5zbGF0
ZVg7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWShHcmFwaGljc0xh
eWVyQWN0b3IqIGxheWVyLCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQ
cml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgcHJpdi0+dHJhbnNsYXRlWSA9IHZhbHVl
OworICAgIGNsdXR0ZXJfYWN0b3JfcXVldWVfcmVkcmF3KENMVVRURVJfQUNUT1IobGF5ZXIpKTsK
K30KKworZmxvYXQgZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWShHcmFwaGljc0xheWVy
QWN0b3IqIGxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBs
YXllci0+cHJpdjsKKyAgICByZXR1cm4gcHJpdi0+dHJhbnNsYXRlWTsKK30KKwordm9pZCBncmFw
aGljc0xheWVyQWN0b3JTZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwg
Z2Jvb2xlYW4gZHJhd3NDb250ZW50KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUq
IHByaXYgPSBsYXllci0+cHJpdjsKKworICAgIGlmIChkcmF3c0NvbnRlbnQgPT0gcHJpdi0+ZHJh
d3NDb250ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5kcmF3c0NvbnRlbnQgPSBk
cmF3c0NvbnRlbnQ7CisKKyAgICBncmFwaGljc0xheWVyQWN0b3JVcGRhdGVUZXh0dXJlKGxheWVy
KTsKK30KKworZ2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yR2V0RHJhd3NDb250ZW50KEdyYXBo
aWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgcmV0dXJuIGxheWVyLT5wcml2LT5kcmF3c0Nv
bnRlbnQ7Cit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNz
TGF5ZXJBY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9H
cmFwaGljc0xheWVyQWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzUyYjgxZThmYTMwYzRkNTNkZmZkMTE5
ZTQ4YTk4ZWI2Y2ZhYjU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuaApAQCAtMCwwICsxLDEwMyBA
QAorLyoKKyAqIENvcHlyaWdodCAyMDExLDIwMTIgQ29sbGFib3JhIExpbWl0ZWQKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIuMSwg
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBi
dXQgV0lUSE9VVCBBTlkKKyAqIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgor
ICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwKKyAqIEluYy4sIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpZm5kZWYgR3JhcGhpY3NMYXllckFjdG9yX2ggCisj
ZGVmaW5lIEdyYXBoaWNzTGF5ZXJBY3Rvcl9oIAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBP
U0lUSU5HKQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsdXR0ZXIuaCIKKyNpbmNsdWRlIDxj
bHV0dGVyL2NsdXR0ZXIuaD4KKyNpbmNsdWRlIDxjb2dsL2NvZ2wuaD4KKyNpbmNsdWRlIDxnbGli
LW9iamVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgR1JBUEhJQ1NfTEFZRVJfVFlQ
RV9BQ1RPUiBncmFwaGljc19sYXllcl9hY3Rvcl9nZXRfdHlwZSgpCisKKyNkZWZpbmUgR1JBUEhJ
Q1NfTEFZRVJfQUNUT1Iob2JqKSBcCisgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChv
YmopLCBcCisgICAgR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUiwgR3JhcGhpY3NMYXllckFjdG9y
KSkKKworI2RlZmluZSBHUkFQSElDU19MQVlFUl9BQ1RPUl9DTEFTUyhrbGFzcykgXAorICAgIChH
X1RZUEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBcCisgICAgR1JBUEhJQ1NfTEFZRVJfVFlQ
RV9BQ1RPUiwgR3JhcGhpY3NMYXllckFjdG9yQ2xhc3MpKQorCisjZGVmaW5lIEdSQVBISUNTX0xB
WUVSX0lTX0FDVE9SKG9iaikgXAorICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2Jq
KSwgXAorICAgIEdSQVBISUNTX0xBWUVSX1RZUEVfQUNUT1IpKQorCisjZGVmaW5lIEdSQVBISUNT
X0xBWUVSX0lTX0FDVE9SX0NMQVNTKGtsYXNzKSBcCisgICAgKEdfVFlQRV9DSEVDS19DTEFTU19U
WVBFKChrbGFzcyksIFwKKyAgICBHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SKSkKKworI2RlZmlu
ZSBHUkFQSElDU19MQVlFUl9BQ1RPUl9HRVRfQ0xBU1Mob2JqKSBcCisgICAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfQ0xBU1MoKG9iaiksIFwKKyAgICBHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SLCBH
cmFwaGljc0xheWVyQWN0b3JDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9HcmFwaGljc0xheWVy
QWN0b3IgR3JhcGhpY3NMYXllckFjdG9yOwordHlwZWRlZiBzdHJ1Y3QgX0dyYXBoaWNzTGF5ZXJB
Y3RvckNsYXNzIEdyYXBoaWNzTGF5ZXJBY3RvckNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0dyYXBo
aWNzTGF5ZXJBY3RvclByaXZhdGUgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZTsKKworLyoqCisg
KiBHcmFwaGljc0xheWVyQWN0b3I6CisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgc3RydWN0
dXJlIGFyZSBwcml2YXRlIGFuZCBzaG91bGQgb25seSBiZSBhY2Nlc3NlZAorICogdGhyb3VnaCB0
aGUgcHVibGljIEFQSS4KKyAqLworc3RydWN0IF9HcmFwaGljc0xheWVyQWN0b3IgeworICAgIENs
dXR0ZXJSZWN0YW5nbGUgcGFyZW50OworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUgKnBy
aXY7CisgICAgR0xpc3QgKmNoaWxkcmVuOworfTsKKworc3RydWN0IF9HcmFwaGljc0xheWVyQWN0
b3JDbGFzcyB7CisgICAgQ2x1dHRlclJlY3RhbmdsZUNsYXNzIHBhcmVudF9jbGFzczsKK307CisK
K0dUeXBlIGdyYXBoaWNzX2xheWVyX2FjdG9yX2dldF90eXBlKHZvaWQpIEdfR05VQ19DT05TVDsK
KworR3JhcGhpY3NMYXllckFjdG9yKiBncmFwaGljc0xheWVyQWN0b3JOZXcoV2ViQ29yZTo6R3Jh
cGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSk7CitHcmFwaGljc0xheWVyQWN0b3IqIGdyYXBo
aWNzTGF5ZXJBY3Rvck5ld1dpdGhDbGllbnQoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6
OkxheWVyVHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqKTsKK3ZvaWQg
Z3JhcGhpY3NMYXllckFjdG9yU2V0Q2xpZW50KEdyYXBoaWNzTGF5ZXJBY3RvciosIFdlYkNvcmU6
OlBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50Kik7CitXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJM
YXllckNsaWVudCogZ3JhcGhpY3NMYXllckFjdG9yR2V0Q2xpZW50KEdyYXBoaWNzTGF5ZXJBY3Rv
ciopOwordm9pZCBncmFwaGljc0xheWVyQWN0b3JSZW1vdmVBbGwoR3JhcGhpY3NMYXllckFjdG9y
Kik7CitjYWlyb19zdXJmYWNlX3QqIGdyYXBoaWNzTGF5ZXJBY3RvckdldFN1cmZhY2UoR3JhcGhp
Y3NMYXllckFjdG9yKik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1cmZhY2UoR3JhcGhp
Y3NMYXllckFjdG9yKiwgY2Fpcm9fc3VyZmFjZV90Kik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rv
ckludmFsaWRhdGVSZWN0YW5nbGUoR3JhcGhpY3NMYXllckFjdG9yKiwgY29uc3QgV2ViQ29yZTo6
RmxvYXRSZWN0Jik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zZm9ybShHcmFwaGlj
c0xheWVyQWN0b3IqLCBjb25zdCBDb2dsTWF0cml4Kik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rv
clNldEFuY2hvclBvaW50KEdyYXBoaWNzTGF5ZXJBY3RvciosIGZsb2F0LCBmbG9hdCwgZmxvYXQp
Owordm9pZCBncmFwaGljc0xheWVyQWN0b3JHZXRBbmNob3JQb2ludChHcmFwaGljc0xheWVyQWN0
b3IqLCBmbG9hdCosIGZsb2F0KiwgZmxvYXQqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0
U2Nyb2xsUG9zaXRpb24oR3JhcGhpY3NMYXllckFjdG9yKiwgZmxvYXQsIGZsb2F0KTsgCit2b2lk
IGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zbGF0ZVgoR3JhcGhpY3NMYXllckFjdG9yKiwgZmxv
YXQpOworZmxvYXQgZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWChHcmFwaGljc0xheWVy
QWN0b3IqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWShHcmFwaGljc0xh
eWVyQWN0b3IqLCBmbG9hdCk7CitmbG9hdCBncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVZ
KEdyYXBoaWNzTGF5ZXJBY3RvciopOworZ2ludCBncmFwaGljc0xheWVyQWN0b3JHZXRuQ2hpbGRy
ZW4oR3JhcGhpY3NMYXllckFjdG9yKik7CitXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6
TGF5ZXJUeXBlIGdyYXBoaWNzTGF5ZXJBY3RvckdldExheWVyVHlwZShHcmFwaGljc0xheWVyQWN0
b3IqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0TGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXJB
Y3RvciosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUpOwordm9pZCBn
cmFwaGljc0xheWVyQWN0b3JTZXRTdWJsYXllcnMoR3JhcGhpY3NMYXllckFjdG9yKiwgV2ViQ29y
ZTo6R3JhcGhpY3NMYXllckFjdG9yTGlzdCYpOworZ2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9y
R2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJBY3RvciopOwordm9pZCBncmFwaGljc0xheWVy
QWN0b3JTZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9yKiwgZ2Jvb2xlYW4gZHJhd3ND
b250ZW50KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKKworI2VuZGlmIC8qIEdyYXBoaWNzTGF5ZXJBY3Rvcl9oICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJD
bHV0dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBo
aWNzTGF5ZXJDbHV0dGVyLmgKaW5kZXggM2UxNDJlNDg3ZGU1MGVjZjhmZWQxNDFkNDU2NjU0NjRk
NDc0MzkyOS4uYzZjOTIxMjk5ZjRhNzhhOWUzNjYxZDNjZTlhMDMzN2NlMzM1MjRjMSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xh
eWVyQ2x1dHRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0
ZXIvR3JhcGhpY3NMYXllckNsdXR0ZXIuaApAQCAtMzEsMTMgKzMxLDE3IEBACiAKICNpbmNsdWRl
ICJHcmFwaGljc0xheWVyLmgiCiAKKyNpbmNsdWRlICJQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVu
dC5oIgogI2luY2x1ZGUgPGNsdXR0ZXIvY2x1dHRlci5oPgogI2luY2x1ZGUgPHd0Zi9nb2JqZWN0
L0dSZWZQdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCit0eXBlZGVmIFZlY3RvcjxHUmVm
UHRyPEdyYXBoaWNzTGF5ZXJBY3Rvcj4gPiBHcmFwaGljc0xheWVyQWN0b3JMaXN0OworCiBjbGFz
cyBHcmFwaGljc0xheWVyQ2x1dHRlciA6IHB1YmxpYyBHcmFwaGljc0xheWVyIHsKIHB1YmxpYzoK
KyAgICBlbnVtIExheWVyVHlwZSB7IExheWVyVHlwZUxheWVyLCBMYXllclR5cGVXZWJMYXllciwg
TGF5ZXJUeXBlVmlkZW9MYXllciwgTGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIsIExheWVyVHlwZVJv
b3RMYXllciwgTGF5ZXJUeXBlQ3VzdG9tIH07CiAgICAgR3JhcGhpY3NMYXllckNsdXR0ZXIoR3Jh
cGhpY3NMYXllckNsaWVudCopOwogICAgIHZpcnR1YWwgfkdyYXBoaWNzTGF5ZXJDbHV0dGVyKCk7
CiAKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAz
MjdkZTAxN2IzZDlhOTczNjVkY2E3YjcwZWNmNTFjZDIzMTdkMzNmLi5lM2ZjZDY5MzY5YzYyMDZi
YjVmNmRjNmMyY2M0ZjI0NmM3MGQ3NTM0IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysr
IGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMDktMjUgIEpvb25lIEh1
ciAgPGpvb25lLmh1ckBpbnRlbC5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIEdyYXBoaWNzTGF5
ZXJBY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
OTE5NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBB
ZGQgR3JhcGhpY3NMYXllckFjdG9yIHRvIHRoZSBsaXN0IG9mIGNsYXNzZXMgdGhhdCBjb250YWlu
IEdPYmplY3RzCisgICAgICAgIGluIHRoZSBzdHlsZSBjaGVja2VyIHNjcmlwdCBzbyB0aGF0IGl0
IGRvZXMgbm90IGNvbXBsYWluIGFib3V0IEdPYmplY3QKKyAgICAgICAgY29kaW5nIHN0eWxlLgor
CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5OgorCiAyMDEyLTA5
LTI0ICBOaWtoaWwgQmFuc2FsICA8bi5iYW5zYWxAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0VG
TF1bV0syXSBUZXN0UnVubmVyIG5lZWRzIHRvdWNoIGV2ZW50cyBzdXBwb3J0LgpkaWZmIC0tZ2l0
IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5IGIvVG9vbHMvU2NyaXB0
cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CmluZGV4IDViMTFhZjQ4M2ZmMTU4YzFkZjA3OGM5
NDQ3MTJhZjA3Yzg4MzVjOTMuLjI5NWFiNmUxNDdkMDkzODZmYmZiZGJmMWViMGViNzI1MjBkYmNh
OTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weQor
KysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKQEAgLTIxOCw2ICsy
MTgsOCBAQCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAgICAiLXdoaXRlc3BhY2UvZGVj
bGFyYXRpb24iXSksCiAgICAgKFsjIFRoZXNlIGZpbGVzIGRlZmluZSBHT2JqZWN0cywgd2hpY2gg
aW1wbGllcyBzb21lIGRlZmluaXRpb25zIG9mCiAgICAgICAjIHZhcmlhYmxlcyBhbmQgZnVuY3Rp
b25zIGNvbnRhaW5pbmcgdW5kZXJzY29yZXMuCisgICAgICAiU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwIiwKKyAgICAgICJTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5o
IiwKICAgICAgICJTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlk
ZW9TaW5rR1N0cmVhbWVyMS5jcHAiLAogICAgICAgIlNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9WaWRlb1NpbmtHU3RyZWFtZXIuY3BwIiwKICAgICAgICJTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvV2ViS2l0V2ViU291cmNlR1N0cmVh
bWVyLmNwcCIsCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178788</attachid>
            <date>2012-12-11 06:03:20 -0800</date>
            <delta_ts>2012-12-11 07:57:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91940-20121211150027.patch</filename>
            <type>text/plain</type>
            <size>32138</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmYyMjMyYzJhYTAyYWU1
N2YzNDBhNzNjYzhkZjI0ZTAzZjZhYWY2MS4uMmU2YmVlYjMzZWY5OWYyMjYxODVjMGE1ZWI0YWNi
NTJhMzc1ZTEwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTEyLTA5ICBKb29u
ZSBIdXIgIDxqb29uZS5odXJAaW50ZWwuY29tPiwgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3Vz
dGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIEdyYXBoaWNz
TGF5ZXJBY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTE5NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBHcmFwaGljc0xheWVyQWN0b3IsIHdoaWNoIGlzIGEgbmV3IENsdXR0ZXJBY3RvciwgcmVwcmVz
ZW50cyBhIG5vZGUgaW4gdGhlIEdQVS1yZW5kZXJhYmxlIGxheWVyIHRyZWUKKyAgICAgICAgd2hl
biBhY2NlbGVyYXRlZCBjb21wb3NpdGluZyBpcyBlbmFibGVkIHdpdGggQ2x1dHRlciBhcyBhY2Nl
bGVyYXRpb24gYmFja2VuZC4KKyAgICAgICAgVGhpcyBwYXRjaCBhbGxvd3MgdG8gc3VwcG9ydCBi
YXNpYyBmZWF0dXJlcyBvZiBDU1MgM0QgVHJhbnNmb3Jtcy4KKworICAgICAgICBObyBuZXcgdGVz
dHMuIFRoaXMgd2lsbCBiZSBjb3ZlcmVkIGJ5IHBpeGVsIHRlc3RzIGZvciBRdCBhbmQgR1RLKyBh
Y2NlbGVyYXRlZAorICAgICAgICBjb21wb3NpdGluZyBhbmQgM0QgdHJhbnNmb3Jtcy4KKworICAg
ICAgICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKF9HcmFwaGlj
c0xheWVyQWN0b3JQcml2YXRlKToKKyAgICAgICAgKGdyYXBoaWNzX2xheWVyX2FjdG9yX2NsYXNz
X2luaXQpOiBHT2JqZWN0IGNvbmZpZ3VyYXRpb24gb2YgYSBuZXcgQ2x1dHRlciBBY3Rvci4KKyAg
ICAgICAgKGdyYXBoaWNzX2xheWVyX2FjdG9yX2luaXQpOiBJbml0aWFsaXphdGlvbiBvZiB0aGUg
cHJpdmF0ZSBkYXRhIG9mIHRoaXMgYWN0b3IuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JT
ZXRQcm9wZXJ0eSk6IEdPYmplY3QgcHJvcGVydHkgc2V0dGVyLgorICAgICAgICAoZ3JhcGhpY3NM
YXllckFjdG9yR2V0UHJvcGVydHkpOiBHT2JqZWN0IHByb3BlcnR5IGdldHRlci4KKyAgICAgICAg
KGdyYXBoaWNzTGF5ZXJBY3RvckRpc3Bvc2UpOiBDYWxsZWQgdG8gZHJvcCBhbGwgcmVmZXJlbmNl
cyB0byBvdGhlciBvYmplY3RzLgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yQWxsb2NhdGUp
OiAgQ2FsbGVkIHRvIHNldCB0aGUgY29vcmRpbmF0ZXMgb2YgYW4gYWN0b3IuCisgICAgICAgIChn
cmFwaGljc0xheWVyQWN0b3JBcHBseVRyYW5zZm9ybSk6IEFwcGx5aW5nIHRoZSB0cmFuc2Zvcm1h
dGlvbiB0byBhbiBhY3RvciBiZWZvcmUgcGFpbnRpbmcgaXQuCisgICAgICAgIChncmFwaGljc0xh
eWVyQWN0b3JQYWludCk6IENhbGxlZCB0byBwYWludCB0aGUgYWN0b3IuCisgICAgICAgIChncmFw
aGljc0xheWVyQWN0b3JEcmF3KTogQ2FsbGVkIGVhY2ggdGltZSBhIENsdXR0ZXJDYWlyb1RleHR1
cmUgaGFzIGJlZW4gaW52YWxpZGF0ZWQuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JBZGRl
ZCk6IENhbGxlZCBlYWNoIHRpbWUgYW4gYWN0b3IgaGFzIGJlZW4gYWRkZWQgdG8gY29udGFpbmVy
LgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlZCk6IENhbGxlZCBlYWNoIHRpbWUg
YW4gYWN0b3IgaXMgcmVtb3ZlZCBmcm9tIGNvbnRhaW5lci4KKyAgICAgICAgKGdyYXBoaWNzTGF5
ZXJBY3Rvck5ldyk6IENyZWF0ZSBhIHNwZWNpZmljIGxheWVyIHR5cGUgb2YgR3JhcGhpY3NMYXll
ckFjdG9yIG9iamVjdC4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3Rvck5ld1dpdGhDbGllbnQp
OiBDcmVhdGUgYSBzcGVjaWZpYyBsYXllciB0eXBlIG9mIEdyYXBoaWNzTGF5ZXJBY3RvciBvYmpl
Y3Qgd2l0aCAKKyAgICAgICAgaXRzIFBsYXRmb3JtQ2x1dHRlckNsaWVudExheWVyLgorICAgICAg
ICAoZ3JhcGhpY3NMYXllckFjdG9yU2V0Q2xpZW50KTogQWRkZWQgc2V0dGVyIHRvIHNldCB0aGUg
UGxhdGZvcm1DbHV0dGVyQ2xpZW50TGF5ZXIuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JH
ZXRDbGllbnQpOiBBZGRlZCBnZXR0ZXIgdG8gZ2V0IHRoZSBQbGF0Zm9ybUNsdXR0ZXJDbGllbnRM
YXllci4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92ZUFsbCk6IFJlbW92ZSBhbGwg
Y2hpbGQgYWN0b3JzLgorICAgICAgICAoZ3JhcGhpY3NMYXllclVwZGF0ZVRleHR1cmUpOiBDcmVh
dGUgYSBDbHV0dGVyQ2Fpcm9UZXh0dXJlLgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yR2V0
U3VyZmFjZSk6IEFkZGVkIHNldHRlciB0byBzZXQgYSBjYWlyb19zdXJmYWNlX3QuCisgICAgICAg
IChncmFwaGljc0xheWVyQWN0b3JTZXRTdXJmYWNlKTogQWRkZWQgZ2V0dGVyIHRvIGdldCB0aGUg
Y2Fpcm9fc3VyZmFjZV90LgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9ySW52YWxpZGF0ZVJl
Y3RhbmdsZSk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2Zvcm0pOiBTZXQg
YSBDb2dsTWF0cml4IHRvIGFwcGx5IG1hdHJpeCB0cmFuc2Zvcm0uCisgICAgICAgIChncmFwaGlj
c0xheWVyQWN0b3JTZXRBbmNob3JQb2ludCk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JH
ZXRBbmNob3JQb2ludCk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXRTY3JvbGxQb3Np
dGlvbik6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRuQ2hpbGRyZW4pOgorICAgICAg
ICAoZ3JhcGhpY3NMYXllckFjdG9yUmVwbGFjZVN1YmxheWVyKToKKyAgICAgICAgKGdyYXBoaWNz
TGF5ZXJBY3Rvckluc2VydFN1YmxheWVyKToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclNl
dFN1YmxheWVycyk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRMYXllclR5cGUpOgor
ICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yU2V0TGF5ZXJUeXBlKToKKyAgICAgICAgKGdyYXBo
aWNzTGF5ZXJBY3RvclNldFRyYW5zbGF0ZVgpOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9y
R2V0VHJhbnNsYXRlWCk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xhdGVZ
KToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVkpOgorICAgICAgICAo
Z3JhcGhpY3NMYXllckFjdG9yU2V0RHJhd3NDb250ZW50KTogQWRkZWQgc2V0dGVyIHRvIHBhaW50
IGNvbnRlbnQgaW5zaWRlIGEgbGF5ZXIuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRE
cmF3c0NvbnRlbnQpOiBBZGRlZCBnZXR0ZXIgdG8gZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgZHJhd3ND
b250ZW50LiAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5
ZXJBY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKF9HcmFwaGljc0xheWVyQWN0b3IpOgorICAgICAg
ICAoX0dyYXBoaWNzTGF5ZXJBY3RvckNsYXNzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJDbHV0dGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKwog
MjAxMi0xMi0wOSAgSm9hbm1hcmllIERpZ2dzICA8amRpZ2dzQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dUS10gYWNjZXNzaWJpbGl0eS9wbGFjZWhvbGRlci5odG1sIGlzIGZhaWxpbmcKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29y
ZS9HTlVtYWtlZmlsZS5saXN0LmFtCmluZGV4IDFkNDJlYTMwMDAxMTM2MzZiNDYxOWNkMjAyOGQy
MzgzMGY3YWVlMzEuLmNjOTg2ZTYzMzJmZDI2NDNjMjRjOGViYTIxZjA3OTBmMDI2ZWM3MjYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQpAQCAtNjM3NSw2ICs2Mzc1LDggQEAgZW5kaWYg
ICMgRU5EIEVOQUJMRV9XRUJHTAogaWYgVVNFX0FDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HCiBpZiBV
U0VfQ0xVVFRFUgogd2ViY29yZV9zb3VyY2VzICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5jcHAgXAorCVNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckNsdXR0
ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBo
aWNzTGF5ZXJDbHV0dGVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Ns
dXR0ZXIvVHJhbnNmb3JtYXRpb25NYXRyaXhDbHV0dGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVy
QWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQyMjAwMzViZjMyYTgyNmJiMTVmNDY4MTc2NGNmMTE2ZmY5
Njg1Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5jcHAKQEAgLTAsMCArMSw2MTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgMjAxMSwyMDEyIENvbGxhYm9yYSBMaW1pdGVkCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
ciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICogdmVyc2lvbiAyLjEsIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3Jh
bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhP
VVQgQU5ZCisgKiBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAqIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisgKiBJ
bmMuLCA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg
VVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoQUNDRUxFUkFU
RURfQ09NUE9TSVRJTkcpCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQWN0b3IuaCIKKworI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJDbHV0dGVy
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUNvbnRleHRDYWlyby5oIgorI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjaW5jbHVk
ZSA8Z2xpYi9ncHJpbnRmLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCitHX0RFRklO
RV9UWVBFKEdyYXBoaWNzTGF5ZXJBY3RvciwgZ3JhcGhpY3NfbGF5ZXJfYWN0b3IsIENMVVRURVJf
VFlQRV9SRUNUQU5HTEUpCisKKyNkZWZpbmUgR1JBUEhJQ1NfTEFZRVJfQUNUT1JfR0VUX1BSSVZB
VEUob2JqKSAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBHUkFQSElDU19MQVlF
Ul9UWVBFX0FDVE9SLCBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKSkKKworc3RydWN0IF9HcmFw
aGljc0xheWVyQWN0b3JQcml2YXRlIHsKKyAgICBHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJU
eXBlIGxheWVyVHlwZTsKKyAgICBnYm9vbGVhbiBhbGxvY2F0aW5nOworCisgICAgQ2x1dHRlckFj
dG9yKiB0ZXh0dXJlOworICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IHN1cmZhY2U7CisgICAg
Q29nbE1hdHJpeCogbWF0cml4OworCisgICAgUGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqIGxh
eWVyQ2xpZW50OworCisgICAgZ2Jvb2xlYW4gZHJhd3NDb250ZW50OworCisgICAgZmxvYXQgYW5j
aG9yWDsKKyAgICBmbG9hdCBhbmNob3JZOworICAgIGZsb2F0IGFuY2hvclo7CisKKyAgICBmbG9h
dCBzY3JvbGxYOworICAgIGZsb2F0IHNjcm9sbFk7CisKKyAgICBmbG9hdCB0cmFuc2xhdGVYOwor
ICAgIGZsb2F0IHRyYW5zbGF0ZVk7Cit9OworCitlbnVtIHsKKyAgICBQcm9wZXJ0eTAsCisgICAg
UHJvcGVydHlUcmFuc2xhdGVYLAorICAgIFByb3BlcnR5VHJhbnNsYXRlWSwKKworICAgIFByb3Bl
cnR5TGFzdAorfTsKKworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yQWxsb2NhdGUoQ2x1
dHRlckFjdG9yKiwgY29uc3QgQ2x1dHRlckFjdG9yQm94KiwgQ2x1dHRlckFsbG9jYXRpb25GbGFn
cyk7CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JBcHBseVRyYW5zZm9ybShDbHV0dGVy
QWN0b3IqLCBDb2dsTWF0cml4Kik7CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JEaXNw
b3NlKEdPYmplY3QqKTsKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckdldFByb3BlcnR5
KEdPYmplY3QqLCBndWludCBwcm9wSUQsIEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKK3N0YXRpYyB2
b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFByb3BlcnR5KEdPYmplY3QqLCBndWludCBwcm9wSUQs
IGNvbnN0IEdWYWx1ZSosIEdQYXJhbVNwZWMqKTsKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJB
Y3RvclBhaW50KENsdXR0ZXJBY3RvciopOworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9y
UGljayhDbHV0dGVyQWN0b3IqLCBjb25zdCBDbHV0dGVyQ29sb3IqKTsKKworc3RhdGljIHZvaWQg
Z3JhcGhpY3NMYXllckFjdG9yQWRkZWQoQ2x1dHRlckNvbnRhaW5lciosIENsdXR0ZXJBY3Rvcios
IGdwb2ludGVyIGRhdGEpOworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlZChD
bHV0dGVyQ29udGFpbmVyKiwgQ2x1dHRlckFjdG9yKiwgZ3BvaW50ZXIgZGF0YSk7CitzdGF0aWMg
Z2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yRHJhdyhDbHV0dGVyQ2Fpcm9UZXh0dXJlKiwgY2Fp
cm9fdCosIEdyYXBoaWNzTGF5ZXJBY3RvciopOworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFj
dG9yVXBkYXRlVGV4dHVyZShHcmFwaGljc0xheWVyQWN0b3IqKTsKK3N0YXRpYyB2b2lkIGdyYXBo
aWNzTGF5ZXJBY3RvckRyYXdMYXllckNvbnRlbnRzKENsdXR0ZXJBY3RvciosIEdyYXBoaWNzQ29u
dGV4dCYpOworCitzdGF0aWMgdm9pZCBncmFwaGljc19sYXllcl9hY3Rvcl9jbGFzc19pbml0KEdy
YXBoaWNzTGF5ZXJBY3RvckNsYXNzKiBrbGFzcykKK3sKKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVj
dENsYXNzID0gR19PQkpFQ1RfQ0xBU1Moa2xhc3MpOworICAgIENsdXR0ZXJBY3RvckNsYXNzKiBh
Y3RvckNsYXNzID0gQ0xVVFRFUl9BQ1RPUl9DTEFTUyhrbGFzcyk7CisKKyAgICBvYmplY3RDbGFz
cy0+Z2V0X3Byb3BlcnR5ID0gZ3JhcGhpY3NMYXllckFjdG9yR2V0UHJvcGVydHk7CisgICAgb2Jq
ZWN0Q2xhc3MtPnNldF9wcm9wZXJ0eSA9IGdyYXBoaWNzTGF5ZXJBY3RvclNldFByb3BlcnR5Owor
ICAgIG9iamVjdENsYXNzLT5kaXNwb3NlID0gZ3JhcGhpY3NMYXllckFjdG9yRGlzcG9zZTsKKyAg
ICBhY3RvckNsYXNzLT5hcHBseV90cmFuc2Zvcm0gPSBncmFwaGljc0xheWVyQWN0b3JBcHBseVRy
YW5zZm9ybTsKKyAgICBhY3RvckNsYXNzLT5hbGxvY2F0ZSA9IGdyYXBoaWNzTGF5ZXJBY3RvckFs
bG9jYXRlOworICAgIGFjdG9yQ2xhc3MtPnBhaW50ID0gZ3JhcGhpY3NMYXllckFjdG9yUGFpbnQ7
CisKKyAgICBnX3R5cGVfY2xhc3NfYWRkX3ByaXZhdGUoa2xhc3MsIHNpemVvZihHcmFwaGljc0xh
eWVyQWN0b3JQcml2YXRlKSk7CisKKyAgICBHUGFyYW1TcGVjKiBwc3BlYyA9IGdfcGFyYW1fc3Bl
Y19mbG9hdCgidHJhbnNsYXRlLXgiLCAiVHJhbnNsYXRlIFgiLCAiVHJhbnNsYXRpb24gdmFsdWUg
Zm9yIHRoZSBYIGF4aXMiLCAtR19NQVhGTE9BVCwgR19NQVhGTE9BVCwgMC4wLCBzdGF0aWNfY2Fz
dDxHUGFyYW1GbGFncz4oR19QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19p
bnN0YWxsX3Byb3BlcnR5KG9iamVjdENsYXNzLCBQcm9wZXJ0eVRyYW5zbGF0ZVgsIHBzcGVjKTsK
KworICAgIHBzcGVjID0gZ19wYXJhbV9zcGVjX2Zsb2F0KCJ0cmFuc2xhdGUteSIsICJUcmFuc2xh
dGUgWSIsICJUcmFuc2xhdGlvbiB2YWx1ZSBmb3IgdGhlIFkgYXlpcyIsIC1HX01BWEZMT0FULCBH
X01BWEZMT0FULCAwLjAsIHN0YXRpY19jYXN0PEdQYXJhbUZsYWdzPihHX1BBUkFNX1JFQURXUklU
RSkpOworICAgIGdfb2JqZWN0X2NsYXNzX2luc3RhbGxfcHJvcGVydHkob2JqZWN0Q2xhc3MsIFBy
b3BlcnR5VHJhbnNsYXRlWSwgcHNwZWMpOworfQorCitzdGF0aWMgdm9pZCBncmFwaGljc19sYXll
cl9hY3Rvcl9pbml0KEdyYXBoaWNzTGF5ZXJBY3Rvciogc2VsZikKK3sKKyAgICBHcmFwaGljc0xh
eWVyQWN0b3JQcml2YXRlKiBwcml2ID0gc2VsZi0+cHJpdiA9IEdSQVBISUNTX0xBWUVSX0FDVE9S
X0dFVF9QUklWQVRFKHNlbGYpOworCisgICAgY2x1dHRlcl9hY3Rvcl9zZXRfcmVhY3RpdmUoQ0xV
VFRFUl9BQ1RPUihzZWxmKSwgRkFMU0UpOworCisgICAgLy8gRGVmYXVsdCB1c2VkIGJ5IEdyYXBo
aWNzTGF5ZXIuCisgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0QW5jaG9yUG9pbnQoc2VsZiwgMC41
LCAwLjUsIDAuMCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0KHNlbGYsICJhY3Rvci1hZGRlZCIs
IEdfQ0FMTEJBQ0soZ3JhcGhpY3NMYXllckFjdG9yQWRkZWQpLCAwKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0KHNlbGYsICJhY3Rvci1yZW1vdmVkIiwgR19DQUxMQkFDSyhncmFwaGljc0xheWVyQWN0
b3JSZW1vdmVkKSwgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFBy
b3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQgcHJvcElELCBjb25zdCBHVmFsdWUqIHZhbHVl
LCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyID0g
R1JBUEhJQ1NfTEFZRVJfQUNUT1Iob2JqZWN0KTsKKworICAgIHN3aXRjaCAocHJvcElEKSB7Cisg
ICAgY2FzZSBQcm9wZXJ0eVRyYW5zbGF0ZVg6CisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNl
dFRyYW5zbGF0ZVgobGF5ZXIsIGdfdmFsdWVfZ2V0X2Zsb2F0KHZhbHVlKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUHJvcGVydHlUcmFuc2xhdGVZOgorICAgICAgICBncmFwaGljc0xheWVy
QWN0b3JTZXRUcmFuc2xhdGVZKGxheWVyLCBnX3ZhbHVlX2dldF9mbG9hdCh2YWx1ZSkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBHX09CSkVDVF9XQVJOX0lOVkFMSURf
UFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBzcGVjKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2
b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckdldFByb3BlcnR5KEdPYmplY3QqIG9iamVjdCwgZ3VpbnQg
cHJvcElELCBHVmFsdWUqIHZhbHVlLCBHUGFyYW1TcGVjKiBwc3BlYykKK3sKKyAgICBHcmFwaGlj
c0xheWVyQWN0b3IqIGxheWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1Iob2JqZWN0KTsKKworICAg
IHN3aXRjaCAocHJvcElEKSB7CisgICAgY2FzZSBQcm9wZXJ0eVRyYW5zbGF0ZVg6CisgICAgICAg
IGdfdmFsdWVfc2V0X2Zsb2F0KHZhbHVlLCBncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVY
KGxheWVyKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvcGVydHlUcmFuc2xhdGVZOgor
ICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJh
bnNsYXRlWShsYXllcikpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBH
X09CSkVDVF9XQVJOX0lOVkFMSURfUFJPUEVSVFlfSUQob2JqZWN0LCBwcm9wSUQsIHBzcGVjKTsK
KyAgICB9Cit9CisKKworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yRGlzcG9zZShHT2Jq
ZWN0KiBvYmplY3QpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciA9IEdSQVBISUNT
X0xBWUVSX0FDVE9SKG9iamVjdCk7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJp
diA9IGxheWVyLT5wcml2OworCisgICAgaWYgKHByaXYtPnRleHR1cmUpIHsKKyAgICAgICAgY2x1
dHRlcl9hY3Rvcl9kZXN0cm95KHByaXYtPnRleHR1cmUpOworICAgICAgICBwcml2LT50ZXh0dXJl
ID0gMDsKKyAgICB9CisKKyAgICBwcml2LT5zdXJmYWNlLmNsZWFyKCk7CisKKyAgICBpZiAocHJp
di0+bWF0cml4KQorICAgICAgICBjb2dsX21hdHJpeF9mcmVlKHByaXYtPm1hdHJpeCk7CisKKyAg
ICBHX09CSkVDVF9DTEFTUyhncmFwaGljc19sYXllcl9hY3Rvcl9wYXJlbnRfY2xhc3MpLT5kaXNw
b3NlKG9iamVjdCk7Cit9CisKKy8vIENvcGllZCBmcm9tIGNhaXJvLgorI2RlZmluZSBNQVhfSU1B
R0VfU0laRSAzMjc2NworCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JBbGxvY2F0ZShD
bHV0dGVyQWN0b3IqIHNlbGYsIGNvbnN0IENsdXR0ZXJBY3RvckJveCogYm94LCBDbHV0dGVyQWxs
b2NhdGlvbkZsYWdzIGZsYWdzKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIgPSBH
UkFQSElDU19MQVlFUl9BQ1RPUihzZWxmKTsKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRl
KiBwcml2ID0gbGF5ZXItPnByaXY7CisKKyAgICBwcml2LT5hbGxvY2F0aW5nID0gVFJVRTsKKwor
ICAgIENMVVRURVJfQUNUT1JfQ0xBU1MoZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfcGFyZW50X2NsYXNz
KS0+YWxsb2NhdGUoc2VsZiwgYm94LCBmbGFncyk7CisKKyAgICBpZiAocHJpdi0+dGV4dHVyZSkg
eworICAgICAgICAvLyBUaGUgdGV4dHVyZSBvY2N1cGllcyB0aGUgd2hvbGUgYXJlYSwgYnV0IGlz
IHBvc2l0aW9uZWQgYXQgMCwwCisgICAgICAgIC8vIHJlbGF0aXZlIHRvIHRoZSBsYXllciBhY3Rv
ci4KKyAgICAgICAgQ2x1dHRlckFjdG9yQm94IHRleHR1cmVCb3ggPSB7IDAuMCwgMC4wLCBib3gt
PngyIC0gYm94LT54MSwgYm94LT55MiAtIGJveC0+eTEgfTsKKworICAgICAgICAvLyBwcm90ZWN0
IGFnYWluc3QgMHgwCisgICAgICAgIGlmICghdGV4dHVyZUJveC54MikKKyAgICAgICAgICAgIHRl
eHR1cmVCb3gueDIgPSAxOworCisgICAgICAgIGlmICghdGV4dHVyZUJveC55MikKKyAgICAgICAg
ICAgIHRleHR1cmVCb3gueTIgPSAxOworCisgICAgICAgIC8vIEZJWE1FOiBzb21lIHBhZ2VzIG1h
a2UgdXMgY3JlYXRlIHZlcnkgYmlnIGxheWVycywgd2hpY2gKKyAgICAgICAgLy8gZXhjZWVkcyBj
YWlybydzIGxpbWl0cywgY2hlY2sgZm9yIHRoYXQgaGVyZS4KKyAgICAgICAgaWYgKHRleHR1cmVC
b3gueDIgPiBNQVhfSU1BR0VfU0laRSkgeworICAgICAgICAgICAgZ193YXJuaW5nKCJMYXllciAl
cyBoYXMgYSB3aWR0aCB0aGF0IGV4Y2VlZHMgY2Fpcm8ncyBsaW1pdHM6ICUuMmYiLCBjbHV0dGVy
X2FjdG9yX2dldF9uYW1lKHNlbGYpLCB0ZXh0dXJlQm94LngyKTsKKyAgICAgICAgICAgIHRleHR1
cmVCb3gueDIgPSBNQVhfSU1BR0VfU0laRTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0ZXh0
dXJlQm94LnkyID4gTUFYX0lNQUdFX1NJWkUpIHsKKyAgICAgICAgICAgIGdfd2FybmluZygiTGF5
ZXIgJXMgaGFzIGEgaGVpZ2h0IHRoYXQgZXhjZWVkcyBjYWlybydzIGxpbWl0czogJS4yZiIsIGNs
dXR0ZXJfYWN0b3JfZ2V0X25hbWUoc2VsZiksIHRleHR1cmVCb3gueTIpOworICAgICAgICAgICAg
dGV4dHVyZUJveC55MiA9IE1BWF9JTUFHRV9TSVpFOworICAgICAgICB9CisKKyAgICAgICAgY2x1
dHRlcl9hY3Rvcl9hbGxvY2F0ZShwcml2LT50ZXh0dXJlLCAmdGV4dHVyZUJveCwgZmxhZ3MpOwor
ICAgIH0KKworICAgIC8vIEZJWE1FOiBtYXliZSB3ZSBjYW4gY2FjaGUgY2hpbGRyZW4gYWxsb2Nh
dGlvbiBhbmQgbm90IGNhbGwKKyAgICAvLyBhbGxvY2F0ZSBvbiB0aGVtIHRoaXMgb2Z0ZW4/Cisg
ICAgZm9yIChHTGlzdCogbGlzdCA9IGxheWVyLT5jaGlsZHJlbjsgbGlzdDsgbGlzdCA9IGxpc3Qt
Pm5leHQpIHsKKyAgICAgICAgQ2x1dHRlckFjdG9yKiBjaGlsZCA9IENMVVRURVJfQUNUT1IobGlz
dC0+ZGF0YSk7CisKKyAgICAgICAgZmxvYXQgY2hpbGRXaWR0aCA9IGNsdXR0ZXJfYWN0b3JfZ2V0
X3dpZHRoKGNoaWxkKTsKKyAgICAgICAgZmxvYXQgY2hpbGRIZWlnaHQgPSBjbHV0dGVyX2FjdG9y
X2dldF9oZWlnaHQoY2hpbGQpOworCisgICAgICAgIENsdXR0ZXJBY3RvckJveCBjaGlsZEJveDsK
KyAgICAgICAgY2hpbGRCb3gueDEgPSBjbHV0dGVyX2FjdG9yX2dldF94KGNoaWxkKTsKKyAgICAg
ICAgY2hpbGRCb3gueTEgPSBjbHV0dGVyX2FjdG9yX2dldF95KGNoaWxkKTsKKyAgICAgICAgY2hp
bGRCb3gueDIgPSBjaGlsZEJveC54MSArIGNoaWxkV2lkdGg7CisgICAgICAgIGNoaWxkQm94Lnky
ID0gY2hpbGRCb3gueTEgKyBjaGlsZEhlaWdodDsKKworICAgICAgICBjbHV0dGVyX2FjdG9yX2Fs
bG9jYXRlKGNoaWxkLCAmY2hpbGRCb3gsIGZsYWdzKTsKKyAgICB9CisKKyAgICBwcml2LT5hbGxv
Y2F0aW5nID0gRkFMU0U7Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckFwcGx5
VHJhbnNmb3JtKENsdXR0ZXJBY3RvciogYWN0b3IsIENvZ2xNYXRyaXgqIG1hdHJpeCkKK3sKKyAg
ICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1Io
YWN0b3IpLT5wcml2OworCisgICAgLy8gQXBwbHkgdHJhbnNsYXRpb24gYW5kIHNjcm9sbGluZyBh
cyBhIHNpbmdsZSB0cmFuc2xhdGlvbi4gVGhlc2UKKyAgICAvLyBuZWVkIHRvIGNvbWUgYmVmb3Jl
IGFueXRoaW5nIGVsc2UsIG90aGVyd2lzZSB0aGV5J2xsIGJlCisgICAgLy8gYWZmZWN0ZWQgYnkg
b3RoZXIgb3BlcmF0aW9ucyBzdWNoIGFzIHNjYWxpbmcsIHdoaWNoIGlzIG5vdCB3aGF0CisgICAg
Ly8gd2Ugd2FudC4KKyAgICBmbG9hdCB0cmFuc2xhdGVYID0gcHJpdi0+c2Nyb2xsWCArIHByaXYt
PnRyYW5zbGF0ZVg7CisgICAgZmxvYXQgdHJhbnNsYXRlWSA9IHByaXYtPnNjcm9sbFkgKyBwcml2
LT50cmFuc2xhdGVZOworCisgICAgaWYgKHRyYW5zbGF0ZVggfHwgdHJhbnNsYXRlWSkKKyAgICAg
ICAgY29nbF9tYXRyaXhfdHJhbnNsYXRlKG1hdHJpeCwgdHJhbnNsYXRlWCwgdHJhbnNsYXRlWSwg
MCk7CisKKyAgICBDTFVUVEVSX0FDVE9SX0NMQVNTKGdyYXBoaWNzX2xheWVyX2FjdG9yX3BhcmVu
dF9jbGFzcyktPmFwcGx5X3RyYW5zZm9ybShhY3RvciwgbWF0cml4KTsKKworICAgIGZsb2F0IHdp
ZHRoID0gY2x1dHRlcl9hY3Rvcl9nZXRfd2lkdGgoYWN0b3IpOworICAgIGZsb2F0IGhlaWdodCA9
IGNsdXR0ZXJfYWN0b3JfZ2V0X2hlaWdodChhY3Rvcik7CisgICAgaWYgKHdpZHRoIDw9IDEuMCB8
fCBoZWlnaHQgPD0gMS4wKQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCBwaXZvdFgsIHBp
dm90WTsKKyAgICBwaXZvdFggPSB3aWR0aCAqIHByaXYtPmFuY2hvclg7CisgICAgcGl2b3RZID0g
aGVpZ2h0ICogcHJpdi0+YW5jaG9yWTsKKworICAgIGlmIChwcml2LT5tYXRyaXgpIHsKKyAgICAg
ICAgQ29nbE1hdHJpeCogbG9jYWxNYXRyaXg7CisgICAgICAgIC8vIENTUzMgdHJhbmZvcm0tc3R5
bGUgY2FuIGJlIGNoYW5nZWQgb24gdGhlIGZseSwgCisgICAgICAgIC8vIHNvIHdlIGhhdmUgdG8g
Y29weSBwcml2LT5tYXRyaXggaW4gb3JkZXIgdG8gcmVjb3ZlciB6LWF4aXMuIAorICAgICAgICBs
b2NhbE1hdHJpeCA9IGNvZ2xfbWF0cml4X2NvcHkocHJpdi0+bWF0cml4KTsKKworICAgICAgICBj
b2dsX21hdHJpeF90cmFuc2xhdGUobWF0cml4LCBwaXZvdFgsIHBpdm90WSwgcHJpdi0+YW5jaG9y
Wik7CisgICAgICAgIGNvZ2xfbWF0cml4X211bHRpcGx5KG1hdHJpeCwgbWF0cml4LCBsb2NhbE1h
dHJpeCk7CisgICAgICAgIGNvZ2xfbWF0cml4X3RyYW5zbGF0ZShtYXRyaXgsIC1waXZvdFgsIC1w
aXZvdFksIC1wcml2LT5hbmNob3JaKTsKKyAgICAgICAgY29nbF9tYXRyaXhfZnJlZShsb2NhbE1h
dHJpeCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JQYWludChD
bHV0dGVyQWN0b3IqIGFjdG9yKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogZ3JhcGhpY3NM
YXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKGFjdG9yKTsKKyAgICBHcmFwaGljc0xheWVyQWN0
b3JQcml2YXRlKiBwcml2ID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1IoYWN0b3IpLT5wcml2OworCisg
ICAgLy8gUGFpbnQgdGhlIHRleHR1cmUgaW4gY2FzZSB3ZSBoYXZlIGEgYm9yZGVyLiBUaGlzIHdp
bGwgYmUgdGhlIGNhc2Ugd2hlbiBkZWJ1Z2dpbmcgYm9yZGVycworICAgIC8vIGFyZSB0dXJuZWQg
b24gdGhhdCB3ZSB3YW50IHRvIHNlZS4KKyAgICBpZiAocHJpdi0+dGV4dHVyZSkKKyAgICAgICAg
Y2x1dHRlcl9hY3Rvcl9wYWludChwcml2LT50ZXh0dXJlKTsKKworICAgIEdMaXN0KiBsaXN0Owor
ICAgIGZvciAobGlzdCA9IGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVuOyBsaXN0OyBsaXN0ID0gbGlz
dC0+bmV4dCkgeworICAgICAgICBDbHV0dGVyQWN0b3IqIGNoaWxkID0gQ0xVVFRFUl9BQ1RPUihs
aXN0LT5kYXRhKTsKKyAgICAgICAgY2x1dHRlcl9hY3Rvcl9wYWludChjaGlsZCk7CisgICAgfQor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yRHJhdyhDbHV0dGVyQ2Fpcm9U
ZXh0dXJlKiB0ZXh0dXJlLCBjYWlyb190KiBjciwgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikK
K3sKKyAgICBDbHV0dGVyQWN0b3IqIGFjdG9yID0gQ0xVVFRFUl9BQ1RPUihsYXllcik7CisgICAg
ZmxvYXQgd2lkdGggPSBjbHV0dGVyX2FjdG9yX2dldF93aWR0aChhY3Rvcik7CisgICAgZmxvYXQg
aGVpZ2h0ID0gY2x1dHRlcl9hY3Rvcl9nZXRfaGVpZ2h0KGFjdG9yKTsKKworICAgIGlmICghd2lk
dGggfHwgIWhlaWdodCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgR3JhcGhpY3NMYXll
ckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KGNyKTsKKworICAgIGNsdXR0ZXJfY2Fpcm9fdGV4dHVyZV9jbGVhcih0ZXh0dXJlKTsK
KworICAgIGlmIChwcml2LT5zdXJmYWNlKSB7CisgICAgICAgIGdpbnQgc3VyZmFjZVdpZHRoID0g
Y2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgocHJpdi0+c3VyZmFjZS5nZXQoKSk7CisgICAg
ICAgIGdpbnQgc3VyZmFjZUhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChw
cml2LT5zdXJmYWNlLmdldCgpKTsKKworICAgICAgICBGbG9hdFJlY3Qgc3JjUmVjdCgwLjAsIDAu
MCwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHN1cmZhY2VXaWR0aCksIHN0YXRpY19jYXN0PGZsb2F0Pihz
dXJmYWNlSGVpZ2h0KSk7CisgICAgICAgIEZsb2F0UmVjdCBkZXN0UmVjdCgwLjAsIDAuMCwgd2lk
dGgsIGhlaWdodCk7CisgICAgICAgIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJm
YWNlVG9Db250ZXh0KHByaXYtPnN1cmZhY2UuZ2V0KCksIGRlc3RSZWN0LCBzcmNSZWN0LCAmY29u
dGV4dCk7CisgICAgfQorCisgICAgaWYgKHByaXYtPmxheWVyVHlwZSA9PSBHcmFwaGljc0xheWVy
Q2x1dHRlcjo6TGF5ZXJUeXBlV2ViTGF5ZXIpCisgICAgICAgIGdyYXBoaWNzTGF5ZXJBY3RvckRy
YXdMYXllckNvbnRlbnRzKGFjdG9yLCBjb250ZXh0KTsKKworICAgIHJldHVybiBUUlVFOworfQor
CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JBZGRlZChDbHV0dGVyQ29udGFpbmVyKiBj
b250YWluZXIsIENsdXR0ZXJBY3RvciogYWN0b3IsIGdwb2ludGVyIGRhdGEpCit7CisgICAgR3Jh
cGhpY3NMYXllckFjdG9yKiBncmFwaGljc0xheWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1IoY29u
dGFpbmVyKTsKKyAgICBncmFwaGljc0xheWVyLT5jaGlsZHJlbiA9IGdfbGlzdF9hcHBlbmQoZ3Jh
cGhpY3NMYXllci0+Y2hpbGRyZW4sIGFjdG9yKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhpY3NM
YXllckFjdG9yUmVtb3ZlZChDbHV0dGVyQ29udGFpbmVyKiBjb250YWluZXIsIENsdXR0ZXJBY3Rv
ciogYWN0b3IsIGdwb2ludGVyIGRhdGEpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBncmFw
aGljc0xheWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1IoY29udGFpbmVyKTsKKyAgICBncmFwaGlj
c0xheWVyLT5jaGlsZHJlbiA9IGdfbGlzdF9yZW1vdmUoZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW4s
IGFjdG9yKTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yVXBkYXRlVGV4dHVy
ZShHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclBy
aXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKyAgICBBU1NFUlQocHJpdi0+bGF5ZXJUeXBlICE9
IEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGVWaWRlb0xheWVyKTsKKworICAgIC8vIE5v
dGhpbmcgbmVlZHMgYSB0ZXh0dXJlLCByZW1vdmUgdGhlIG9uZSB3ZSBoYXZlLCBpZiBhbnkuCisg
ICAgaWYgKCFwcml2LT5kcmF3c0NvbnRlbnQgJiYgIXByaXYtPnN1cmZhY2UpIHsKKyAgICAgICAg
aWYgKCFwcml2LT50ZXh0dXJlKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhwcml2LT50ZXh0dXJlLCByZWludGVycHJl
dF9jYXN0PHZvaWQqPihncmFwaGljc0xheWVyQWN0b3JEcmF3KSwgbGF5ZXIpOworICAgICAgICBj
bHV0dGVyX2FjdG9yX3VucGFyZW50KHByaXYtPnRleHR1cmUpOworICAgICAgICBwcml2LT50ZXh0
dXJlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIFdlIG5lZWQgYSB0ZXh0
dXJlLCBidXQgYWxyZWFkeSBoYXZlIG9uZSEKKyAgICBpZiAocHJpdi0+dGV4dHVyZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgLy8gV2UgbmVlZCBhIHRleHR1cmUsIHNvIGNyZWF0ZSBpdC4KKyAg
ICBDbHV0dGVyQWN0b3IqIGFjdG9yID0gQ0xVVFRFUl9BQ1RPUihsYXllcik7CisgICAgaW50IHdp
ZHRoID0gY2VpbGYoY2x1dHRlcl9hY3Rvcl9nZXRfd2lkdGgoYWN0b3IpKTsKKyAgICBpbnQgaGVp
Z2h0ID0gY2VpbGYoY2x1dHRlcl9hY3Rvcl9nZXRfaGVpZ2h0KGFjdG9yKSk7CisKKyAgICBwcml2
LT50ZXh0dXJlID0gY2x1dHRlcl9jYWlyb190ZXh0dXJlX25ldyh3aWR0aCA+IDAgPyB3aWR0aCA6
IDEsIGhlaWdodCA+IDAgPyBoZWlnaHQgOiAxKTsKKyAgICBjbHV0dGVyX2NhaXJvX3RleHR1cmVf
c2V0X2F1dG9fcmVzaXplKENMVVRURVJfQ0FJUk9fVEVYVFVSRShwcml2LT50ZXh0dXJlKSwgVFJV
RSk7CisgICAgY2x1dHRlcl9hY3Rvcl9zZXRfcGFyZW50KHByaXYtPnRleHR1cmUsIGFjdG9yKTsK
KworICAgIGdfc2lnbmFsX2Nvbm5lY3QocHJpdi0+dGV4dHVyZSwgImRyYXciLCBHX0NBTExCQUNL
KGdyYXBoaWNzTGF5ZXJBY3RvckRyYXcpLCBsYXllcik7Cit9CisKKy8vIERyYXcgY29udGVudCBp
bnRvIHRoZSBsYXllci4KK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckRyYXdMYXllckNv
bnRlbnRzKENsdXR0ZXJBY3RvciogYWN0b3IsIEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK3sK
KyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gR1JBUEhJQ1NfTEFZRVJfQUNU
T1IoYWN0b3IpLT5wcml2OworCisgICAgaWYgKCFwcml2LT5kcmF3c0NvbnRlbnQgfHwgIXByaXYt
PmxheWVyQ2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBmbG9hdCB3aWR0aCA9IGNsdXR0
ZXJfYWN0b3JfZ2V0X3dpZHRoKGFjdG9yKTsKKyAgICBmbG9hdCBoZWlnaHQgPSBjbHV0dGVyX2Fj
dG9yX2dldF9oZWlnaHQoYWN0b3IpOworICAgIEludFJlY3QgY2xpcCgwLCAwLCB3aWR0aCwgaGVp
Z2h0KTsKKworICAgIC8vIEFwcGx5IHRoZSBwYWludGVkIGNvbnRlbnQgdG8gdGhlIGxheWVyLgor
ICAgIHByaXYtPmxheWVyQ2xpZW50LT5wbGF0Zm9ybUNsdXR0ZXJMYXllclBhaW50Q29udGVudHMo
Y29udGV4dCwgY2xpcCk7Cit9CisKKworR3JhcGhpY3NMYXllckFjdG9yKiBncmFwaGljc0xheWVy
QWN0b3JOZXcoR3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSB0eXBlKQoreworICAgIEdy
YXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihnX29iamVjdF9u
ZXcoR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUiwgMCkpOworICAgIEdyYXBoaWNzTGF5ZXJBY3Rv
clByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKworICAgIHByaXYtPmxheWVyVHlwZSA9IHR5
cGU7CisKKyAgICAvLyBGb3IgdmlkZW8gbGF5ZXJzIHdlIGRvbid0IHdhbnQgdGhlIGNhaXJvIHRl
eHR1cmUsIGJ1dCBhIHJlZ3VsYXIgb25lLgorICAgIGlmIChwcml2LT5sYXllclR5cGUgPT0gR3Jh
cGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZVZpZGVvTGF5ZXIpIHsKKyAgICAgICAgcHJpdi0+
dGV4dHVyZSA9IGNsdXR0ZXJfdGV4dHVyZV9uZXcoKTsKKyAgICAgICAgY2x1dHRlcl9hY3Rvcl9z
ZXRfcGFyZW50KHByaXYtPnRleHR1cmUsIENMVVRURVJfQUNUT1IobGF5ZXIpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbGF5ZXI7Cit9CisKK0dyYXBoaWNzTGF5ZXJBY3RvciogZ3JhcGhpY3NMYXll
ckFjdG9yTmV3V2l0aENsaWVudChHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlIHR5cGUs
IFBsYXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50KiBsYXllckNsaWVudCkKK3sKKyAgICBHcmFwaGlj
c0xheWVyQWN0b3IqIGxheWVyID0gZ3JhcGhpY3NMYXllckFjdG9yTmV3KHR5cGUpOworICAgIGdy
YXBoaWNzTGF5ZXJBY3RvclNldENsaWVudChsYXllciwgbGF5ZXJDbGllbnQpOworCisgICAgcmV0
dXJuIGxheWVyOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldENsaWVudChHcmFwaGlj
c0xheWVyQWN0b3IqIGxheWVyLCBQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCogY2xpZW50KQor
eworICAgIGxheWVyLT5wcml2LT5sYXllckNsaWVudCA9IGNsaWVudDsKK30KKworUGxhdGZvcm1D
bHV0dGVyTGF5ZXJDbGllbnQqIGdyYXBoaWNzTGF5ZXJBY3RvckdldENsaWVudChHcmFwaGljc0xh
eWVyQWN0b3IqIGxheWVyKQoreworICAgIHJldHVybiBsYXllci0+cHJpdi0+bGF5ZXJDbGllbnQ7
Cit9CisKKy8qIAorICogcHVibGljIEFQSQorICovCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclJl
bW92ZUFsbChHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyKQoreworICAgIGdfcmV0dXJuX2lmX2Zh
aWwoR1JBUEhJQ1NfTEFZRVJfSVNfQUNUT1IobGF5ZXIpKTsKKworICAgIEdMaXN0KiBjaGlsZHJl
biA9IGNsdXR0ZXJfYWN0b3JfZ2V0X2NoaWxkcmVuKENMVVRURVJfQUNUT1IobGF5ZXIpKTsKKyAg
ICBmb3IgKDsgY2hpbGRyZW47IGNoaWxkcmVuID0gY2hpbGRyZW4tPm5leHQpIHsKKyAgICAgICAg
Ly8gV2Ugb25seSB3YW50IHRvIHJlbW92ZSBzdWJsYXllcnMsIG5vdCBvdXIgb3duIGNvbXBvc2l0
ZSBhY3RvcnMuCisgICAgICAgIGlmIChjaGlsZHJlbi0+ZGF0YSA9PSBsYXllci0+cHJpdi0+dGV4
dHVyZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGNsdXR0ZXJfYWN0b3JfcmVt
b3ZlX2NoaWxkKENMVVRURVJfQUNUT1IobGF5ZXIpLCBDTFVUVEVSX0FDVE9SKGNoaWxkcmVuLT5k
YXRhKSk7CisgICAgfQorfQorCitjYWlyb19zdXJmYWNlX3QqIGdyYXBoaWNzTGF5ZXJBY3Rvckdl
dFN1cmZhY2UoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVy
QWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgQVNTRVJUKHByaXYtPnN1cmZh
Y2UpOworICAgIHJldHVybiBwcml2LT5zdXJmYWNlLmdldCgpOworfQorCit2b2lkIGdyYXBoaWNz
TGF5ZXJBY3RvclNldFN1cmZhY2UoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgY2Fpcm9fc3Vy
ZmFjZV90KiBzdXJmYWNlKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYg
PSBsYXllci0+cHJpdjsKKyAgICBwcml2LT5zdXJmYWNlID0gc3VyZmFjZTsKKyAgICBncmFwaGlj
c0xheWVyQWN0b3JVcGRhdGVUZXh0dXJlKGxheWVyKTsKK30KKwordm9pZCBncmFwaGljc0xheWVy
QWN0b3JJbnZhbGlkYXRlUmVjdGFuZ2xlKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGNvbnN0
IEZsb2F0UmVjdCYgZGlydHlSZWN0KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUq
IHByaXYgPSBsYXllci0+cHJpdjsKKworICAgIGlmICghcHJpdi0+dGV4dHVyZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgY2Fpcm9fcmVjdGFuZ2xlX2ludF90IHJlY3QoZW5jbG9zaW5nSW50UmVj
dChkaXJ0eVJlY3QpKTsKKyAgICBjbHV0dGVyX2NhaXJvX3RleHR1cmVfaW52YWxpZGF0ZV9yZWN0
YW5nbGUoQ0xVVFRFUl9DQUlST19URVhUVVJFKHByaXYtPnRleHR1cmUpLCAmcmVjdCk7Cit9CisK
K3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNmb3JtKEdyYXBoaWNzTGF5ZXJBY3Rvciog
bGF5ZXIsIGNvbnN0IENvZ2xNYXRyaXgqIG1hdHJpeCkgCit7CisgICAgR3JhcGhpY3NMYXllckFj
dG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgaWYgKHByaXYtPm1hdHJpeCkg
eworICAgICAgICBjb2dsX21hdHJpeF9mcmVlKHByaXYtPm1hdHJpeCk7CisgICAgICAgIHByaXYt
Pm1hdHJpeCA9IDA7CisgICAgICAgIGNsdXR0ZXJfYWN0b3JfcXVldWVfcmVkcmF3KENMVVRURVJf
QUNUT1IobGF5ZXIpKTsKKyAgICB9CisKKyAgICBDb2dsTWF0cml4IGlkZW50aXR5OworICAgIGNv
Z2xfbWF0cml4X2luaXRfaWRlbnRpdHkoJmlkZW50aXR5KTsKKyAgICBpZiAoY29nbF9tYXRyaXhf
ZXF1YWwoKENvZ2xNYXRyaXgqKSZpZGVudGl0eSwgKENvZ2xNYXRyaXgqKW1hdHJpeCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChwcml2LT5tYXRyaXgpCisgICAgICAgIGNvZ2xfbWF0cml4
X2ZyZWUocHJpdi0+bWF0cml4KTsKKworICAgIHByaXYtPm1hdHJpeCA9IGNvZ2xfbWF0cml4X2Nv
cHkobWF0cml4KTsKKyAgICBjbHV0dGVyX2FjdG9yX3F1ZXVlX3JlZHJhdyhDTFVUVEVSX0FDVE9S
KGxheWVyKSk7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0QW5jaG9yUG9pbnQoR3Jh
cGhpY3NMYXllckFjdG9yKiBsYXllciwgZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgeikKK3sKKyAg
ICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisKKyAgICBw
cml2LT5hbmNob3JYID0geDsKKyAgICBwcml2LT5hbmNob3JZID0geTsKKyAgICBwcml2LT5hbmNo
b3JaID0gejsKKworICAgIENsdXR0ZXJBY3RvciogYWN0b3IgPSBDTFVUVEVSX0FDVE9SKGxheWVy
KTsKKworICAgIGZsb2F0IHdpZHRoLCBoZWlnaHQ7CisgICAgY2x1dHRlcl9hY3Rvcl9nZXRfc2l6
ZShhY3RvciwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBjbHV0dGVyX2FjdG9yX3NldF9hbmNob3Jf
cG9pbnQoYWN0b3IsIHdpZHRoICogcHJpdi0+YW5jaG9yWCwgaGVpZ2h0ICogcHJpdi0+YW5jaG9y
WSk7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yR2V0QW5jaG9yUG9pbnQoR3JhcGhpY3NM
YXllckFjdG9yKiBsYXllciwgZmxvYXQqIHgsIGZsb2F0KiB5LCBmbG9hdCogeikKK3sKKyAgICBH
cmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgaWYgKHgp
CisgICAgICAgICp4ID0gcHJpdi0+YW5jaG9yWDsKKworICAgIGlmICh5KQorICAgICAgICAqeSA9
IHByaXYtPmFuY2hvclk7CisKKyAgICBpZiAoeikKKyAgICAgICAgKnogPSBwcml2LT5hbmNob3Ja
OworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFNjcm9sbFBvc2l0aW9uKEdyYXBoaWNz
TGF5ZXJBY3RvciogbGF5ZXIsIGZsb2F0IHgsIGZsb2F0IHkpCit7CisgICAgR3JhcGhpY3NMYXll
ckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgaWYgKHggPiAwIHx8IHkg
PiAwKQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5zY3JvbGxYID0geDsKKyAgICBwcml2
LT5zY3JvbGxZID0geTsKKworICAgIGNsdXR0ZXJfYWN0b3JfcXVldWVfcmVkcmF3KENMVVRURVJf
QUNUT1IobGF5ZXIpKTsKK30KKworZ2ludCBncmFwaGljc0xheWVyQWN0b3JHZXRuQ2hpbGRyZW4o
R3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBBU1NFUlQoR1JBUEhJQ1NfTEFZRVJf
SVNfQUNUT1IobGF5ZXIpKTsKKworICAgIHJldHVybiBnX2xpc3RfbGVuZ3RoKGxheWVyLT5jaGls
ZHJlbik7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yUmVwbGFjZVN1YmxheWVyKEdyYXBo
aWNzTGF5ZXJBY3RvciogbGF5ZXIsIENsdXR0ZXJBY3Rvciogb2xkQ2hpbGRMYXllciwgQ2x1dHRl
ckFjdG9yKiBuZXdDaGlsZExheWVyKQoreworICAgIEFTU0VSVChHUkFQSElDU19MQVlFUl9JU19B
Q1RPUihsYXllcikpOworICAgIEFTU0VSVChDTFVUVEVSX0lTX0FDVE9SKG9sZENoaWxkTGF5ZXIp
KTsKKyAgICBBU1NFUlQoQ0xVVFRFUl9JU19BQ1RPUihuZXdDaGlsZExheWVyKSk7CisKKyAgICBj
bHV0dGVyX2FjdG9yX3JlbW92ZV9jaGlsZChDTFVUVEVSX0FDVE9SKGxheWVyKSwgb2xkQ2hpbGRM
YXllcik7CisgICAgY2x1dHRlcl9hY3Rvcl9hZGRfY2hpbGQoQ0xVVFRFUl9BQ1RPUihsYXllciks
IG5ld0NoaWxkTGF5ZXIpOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rvckluc2VydFN1Ymxh
eWVyKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIENsdXR0ZXJBY3RvciogY2hpbGRMYXllciwg
Z2ludCBpbmRleCkKK3sKKyAgICBBU1NFUlQoR1JBUEhJQ1NfTEFZRVJfSVNfQUNUT1IobGF5ZXIp
KTsKKyAgICBBU1NFUlQoQ0xVVFRFUl9JU19BQ1RPUihjaGlsZExheWVyKSk7CisKKyAgICBnX29i
amVjdF9yZWYoY2hpbGRMYXllcik7CisKKyAgICBsYXllci0+Y2hpbGRyZW4gPSBnX2xpc3RfaW5z
ZXJ0KGxheWVyLT5jaGlsZHJlbiwgY2hpbGRMYXllciwgaW5kZXgpOworICAgIEFTU0VSVCghY2x1
dHRlcl9hY3Rvcl9nZXRfcGFyZW50KGNoaWxkTGF5ZXIpKTsKKyAgICBjbHV0dGVyX2FjdG9yX3Nl
dF9wYXJlbnQoY2hpbGRMYXllciwgQ0xVVFRFUl9BQ1RPUihsYXllcikpOworICAgIGNsdXR0ZXJf
YWN0b3JfcXVldWVfcmVsYXlvdXQoQ0xVVFRFUl9BQ1RPUihsYXllcikpOworCisgICAgZ19vYmpl
Y3RfdW5yZWYoY2hpbGRMYXllcik7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0U3Vi
bGF5ZXJzKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIEdyYXBoaWNzTGF5ZXJBY3Rvckxpc3Qm
IHN1YkxheWVycykKK3sKKyAgICBpZiAoIXN1YkxheWVycy5zaXplKCkpIHsKKyAgICAgICAgZ3Jh
cGhpY3NMYXllckFjdG9yUmVtb3ZlQWxsKGxheWVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3ViTGF5ZXJzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIENsdXR0ZXJBY3RvciogbGF5ZXJBY3RvciA9IENMVVRURVJfQUNUT1Ioc3ViTGF5ZXJz
W2ldLmdldCgpKTsKKyAgICAgICAgY2x1dHRlcl9jb250YWluZXJfYWRkX2FjdG9yKENMVVRURVJf
Q09OVEFJTkVSKGxheWVyKSwgbGF5ZXJBY3Rvcik7CisgICAgfQorfQorCitHcmFwaGljc0xheWVy
Q2x1dHRlcjo6TGF5ZXJUeXBlIGdyYXBoaWNzTGF5ZXJBY3RvckdldExheWVyVHlwZShHcmFwaGlj
c0xheWVyQWN0b3IqIGxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHBy
aXYgPSBsYXllci0+cHJpdjsKKyAgICByZXR1cm4gcHJpdi0+bGF5ZXJUeXBlOworfQorCit2b2lk
IGdyYXBoaWNzTGF5ZXJBY3RvclNldExheWVyVHlwZShHcmFwaGljc0xheWVyQWN0b3IqIGxheWVy
LCBHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSkKK3sKKyAgICBHcmFw
aGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgcHJpdi0+bGF5
ZXJUeXBlID0gbGF5ZXJUeXBlOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5z
bGF0ZVgoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgZmxvYXQgdmFsdWUpCit7CisgICAgR3Jh
cGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIHByaXYtPnRy
YW5zbGF0ZVggPSB2YWx1ZTsKKyAgICBjbHV0dGVyX2FjdG9yX3F1ZXVlX3JlZHJhdyhDTFVUVEVS
X0FDVE9SKGxheWVyKSk7Cit9CisKK2Zsb2F0IGdyYXBoaWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0
ZVgoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQ
cml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgcmV0dXJuIHByaXYtPnRyYW5zbGF0ZVg7
Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWShHcmFwaGljc0xheWVy
QWN0b3IqIGxheWVyLCBmbG9hdCB2YWx1ZSkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2
YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgcHJpdi0+dHJhbnNsYXRlWSA9IHZhbHVlOwor
ICAgIGNsdXR0ZXJfYWN0b3JfcXVldWVfcmVkcmF3KENMVVRURVJfQUNUT1IobGF5ZXIpKTsKK30K
KworZmxvYXQgZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWShHcmFwaGljc0xheWVyQWN0
b3IqIGxheWVyKQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXll
ci0+cHJpdjsKKyAgICByZXR1cm4gcHJpdi0+dHJhbnNsYXRlWTsKK30KKwordm9pZCBncmFwaGlj
c0xheWVyQWN0b3JTZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwgZ2Jv
b2xlYW4gZHJhd3NDb250ZW50KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHBy
aXYgPSBsYXllci0+cHJpdjsKKworICAgIGlmIChkcmF3c0NvbnRlbnQgPT0gcHJpdi0+ZHJhd3ND
b250ZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBwcml2LT5kcmF3c0NvbnRlbnQgPSBkcmF3
c0NvbnRlbnQ7CisKKyAgICBncmFwaGljc0xheWVyQWN0b3JVcGRhdGVUZXh0dXJlKGxheWVyKTsK
K30KKworZ2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yR2V0RHJhd3NDb250ZW50KEdyYXBoaWNz
TGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgcmV0dXJuIGxheWVyLT5wcml2LT5kcmF3c0NvbnRl
bnQ7Cit9CisKKyNlbmRpZiAvLyBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5
ZXJBY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFw
aGljc0xheWVyQWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMzUyYjgxZThmYTMwYzRkNTNkZmZkMTE5ZTQ4
YTk4ZWI2Y2ZhYjU3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuaApAQCAtMCwwICsxLDEwMyBAQAor
LyoKKyAqIENvcHlyaWdodCAyMDExLDIwMTIgQ29sbGFib3JhIExpbWl0ZWQKKyAqIENvcHlyaWdo
dCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIuMSwgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBw
cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQg
V0lUSE9VVCBBTlkKKyAqIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICog
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwK
KyAqIEluYy4sIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSBVU0EuCisgKgorICovCisKKyNpZm5kZWYgR3JhcGhpY3NMYXllckFjdG9yX2ggCisjZGVm
aW5lIEdyYXBoaWNzTGF5ZXJBY3Rvcl9oIAorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisjaW5jbHVkZSAiR3JhcGhpY3NMYXllckNsdXR0ZXIuaCIKKyNpbmNsdWRlIDxjbHV0
dGVyL2NsdXR0ZXIuaD4KKyNpbmNsdWRlIDxjb2dsL2NvZ2wuaD4KKyNpbmNsdWRlIDxnbGliLW9i
amVjdC5oPgorCitHX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgR1JBUEhJQ1NfTEFZRVJfVFlQRV9B
Q1RPUiBncmFwaGljc19sYXllcl9hY3Rvcl9nZXRfdHlwZSgpCisKKyNkZWZpbmUgR1JBUEhJQ1Nf
TEFZRVJfQUNUT1Iob2JqKSBcCisgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9DQVNUKChvYmop
LCBcCisgICAgR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUiwgR3JhcGhpY3NMYXllckFjdG9yKSkK
KworI2RlZmluZSBHUkFQSElDU19MQVlFUl9BQ1RPUl9DTEFTUyhrbGFzcykgXAorICAgIChHX1RZ
UEVfQ0hFQ0tfQ0xBU1NfQ0FTVCgoa2xhc3MpLCBcCisgICAgR1JBUEhJQ1NfTEFZRVJfVFlQRV9B
Q1RPUiwgR3JhcGhpY3NMYXllckFjdG9yQ2xhc3MpKQorCisjZGVmaW5lIEdSQVBISUNTX0xBWUVS
X0lTX0FDVE9SKG9iaikgXAorICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfVFlQRSgob2JqKSwg
XAorICAgIEdSQVBISUNTX0xBWUVSX1RZUEVfQUNUT1IpKQorCisjZGVmaW5lIEdSQVBISUNTX0xB
WUVSX0lTX0FDVE9SX0NMQVNTKGtsYXNzKSBcCisgICAgKEdfVFlQRV9DSEVDS19DTEFTU19UWVBF
KChrbGFzcyksIFwKKyAgICBHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SKSkKKworI2RlZmluZSBH
UkFQSElDU19MQVlFUl9BQ1RPUl9HRVRfQ0xBU1Mob2JqKSBcCisgICAgKEdfVFlQRV9JTlNUQU5D
RV9HRVRfQ0xBU1MoKG9iaiksIFwKKyAgICBHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SLCBHcmFw
aGljc0xheWVyQWN0b3JDbGFzcykpCisKK3R5cGVkZWYgc3RydWN0IF9HcmFwaGljc0xheWVyQWN0
b3IgR3JhcGhpY3NMYXllckFjdG9yOwordHlwZWRlZiBzdHJ1Y3QgX0dyYXBoaWNzTGF5ZXJBY3Rv
ckNsYXNzIEdyYXBoaWNzTGF5ZXJBY3RvckNsYXNzOwordHlwZWRlZiBzdHJ1Y3QgX0dyYXBoaWNz
TGF5ZXJBY3RvclByaXZhdGUgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZTsKKworLyoqCisgKiBH
cmFwaGljc0xheWVyQWN0b3I6CisgKgorICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgc3RydWN0dXJl
IGFyZSBwcml2YXRlIGFuZCBzaG91bGQgb25seSBiZSBhY2Nlc3NlZAorICogdGhyb3VnaCB0aGUg
cHVibGljIEFQSS4KKyAqLworc3RydWN0IF9HcmFwaGljc0xheWVyQWN0b3IgeworICAgIENsdXR0
ZXJSZWN0YW5nbGUgcGFyZW50OworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUgKnByaXY7
CisgICAgR0xpc3QgKmNoaWxkcmVuOworfTsKKworc3RydWN0IF9HcmFwaGljc0xheWVyQWN0b3JD
bGFzcyB7CisgICAgQ2x1dHRlclJlY3RhbmdsZUNsYXNzIHBhcmVudF9jbGFzczsKK307CisKK0dU
eXBlIGdyYXBoaWNzX2xheWVyX2FjdG9yX2dldF90eXBlKHZvaWQpIEdfR05VQ19DT05TVDsKKwor
R3JhcGhpY3NMYXllckFjdG9yKiBncmFwaGljc0xheWVyQWN0b3JOZXcoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSk7CitHcmFwaGljc0xheWVyQWN0b3IqIGdyYXBoaWNz
TGF5ZXJBY3Rvck5ld1dpdGhDbGllbnQoV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6Okxh
eWVyVHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqKTsKK3ZvaWQgZ3Jh
cGhpY3NMYXllckFjdG9yU2V0Q2xpZW50KEdyYXBoaWNzTGF5ZXJBY3RvciosIFdlYkNvcmU6OlBs
YXRmb3JtQ2x1dHRlckxheWVyQ2xpZW50Kik7CitXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJMYXll
ckNsaWVudCogZ3JhcGhpY3NMYXllckFjdG9yR2V0Q2xpZW50KEdyYXBoaWNzTGF5ZXJBY3Rvciop
Owordm9pZCBncmFwaGljc0xheWVyQWN0b3JSZW1vdmVBbGwoR3JhcGhpY3NMYXllckFjdG9yKik7
CitjYWlyb19zdXJmYWNlX3QqIGdyYXBoaWNzTGF5ZXJBY3RvckdldFN1cmZhY2UoR3JhcGhpY3NM
YXllckFjdG9yKik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1cmZhY2UoR3JhcGhpY3NM
YXllckFjdG9yKiwgY2Fpcm9fc3VyZmFjZV90Kik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rvcklu
dmFsaWRhdGVSZWN0YW5nbGUoR3JhcGhpY3NMYXllckFjdG9yKiwgY29uc3QgV2ViQ29yZTo6Rmxv
YXRSZWN0Jik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zZm9ybShHcmFwaGljc0xh
eWVyQWN0b3IqLCBjb25zdCBDb2dsTWF0cml4Kik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNl
dEFuY2hvclBvaW50KEdyYXBoaWNzTGF5ZXJBY3RvciosIGZsb2F0LCBmbG9hdCwgZmxvYXQpOwor
dm9pZCBncmFwaGljc0xheWVyQWN0b3JHZXRBbmNob3JQb2ludChHcmFwaGljc0xheWVyQWN0b3Iq
LCBmbG9hdCosIGZsb2F0KiwgZmxvYXQqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0U2Ny
b2xsUG9zaXRpb24oR3JhcGhpY3NMYXllckFjdG9yKiwgZmxvYXQsIGZsb2F0KTsgCit2b2lkIGdy
YXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zbGF0ZVgoR3JhcGhpY3NMYXllckFjdG9yKiwgZmxvYXQp
OworZmxvYXQgZ3JhcGhpY3NMYXllckFjdG9yR2V0VHJhbnNsYXRlWChHcmFwaGljc0xheWVyQWN0
b3IqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWShHcmFwaGljc0xheWVy
QWN0b3IqLCBmbG9hdCk7CitmbG9hdCBncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVZKEdy
YXBoaWNzTGF5ZXJBY3RvciopOworZ2ludCBncmFwaGljc0xheWVyQWN0b3JHZXRuQ2hpbGRyZW4o
R3JhcGhpY3NMYXllckFjdG9yKik7CitXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5
ZXJUeXBlIGdyYXBoaWNzTGF5ZXJBY3RvckdldExheWVyVHlwZShHcmFwaGljc0xheWVyQWN0b3Iq
KTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0TGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXJBY3Rv
ciosIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUpOwordm9pZCBncmFw
aGljc0xheWVyQWN0b3JTZXRTdWJsYXllcnMoR3JhcGhpY3NMYXllckFjdG9yKiwgV2ViQ29yZTo6
R3JhcGhpY3NMYXllckFjdG9yTGlzdCYpOworZ2Jvb2xlYW4gZ3JhcGhpY3NMYXllckFjdG9yR2V0
RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJBY3RvciopOwordm9pZCBncmFwaGljc0xheWVyQWN0
b3JTZXREcmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9yKiwgZ2Jvb2xlYW4gZHJhd3NDb250
ZW50KTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8vIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJ
VElORykKKworI2VuZGlmIC8qIEdyYXBoaWNzTGF5ZXJBY3Rvcl9oICovCmRpZmYgLS1naXQgYS9U
b29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODk5ZmQ4MTBjYWMyYmY2ZDVh
MjI3MDI1MmY1NzQ3NmI4YzU1NzQ3YS4uZGIzY2I1MzI4ZTk4NjRmYmY2Y2VlOGJhNjUyMThiMTYx
Zjg3ZmYzZCAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDE2IEBACisyMDEyLTEyLTA5ICBKb29uZSBIdXIgIDxqb29uZS5odXJAaW50
ZWwuY29tPgorCisgICAgICAgIFtHVEtdIEFkZCBHcmFwaGljc0xheWVyQWN0b3IKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkxOTQwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEdyYXBoaWNzTGF5ZXJB
Y3RvciB0byB0aGUgbGlzdCBvZiBjbGFzc2VzIHRoYXQgY29udGFpbiBHT2JqZWN0cworICAgICAg
ICBpbiB0aGUgc3R5bGUgY2hlY2tlciBzY3JpcHQgc28gdGhhdCBpdCBkb2VzIG5vdCBjb21wbGFp
biBhYm91dCBHT2JqZWN0CisgICAgICAgIGNvZGluZyBzdHlsZS4KKworICAgICAgICAqIFNjcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weToKKwogMjAxMi0xMi0wOSAgSm9hbm1hcmllIERp
Z2dzICA8amRpZ2dzQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gYWNjZXNzaWJpbGl0eS9w
bGFjZWhvbGRlci5odG1sIGlzIGZhaWxpbmcKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Vi
a2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hl
Y2tlci5weQppbmRleCA5Mzk1OTQ3MWZmNjIyNDZkMmMyOWFjMTIxYjg2YzFmNTRkYjY1NzQzLi5j
NTBhYmY2ZjAyMWRkZTAwNjM1NWMzN2RkNDJiM2QzZTIwMTk0NTg1IDEwMDY0NAotLS0gYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93
ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBAIC0yMjIsNiArMjIyLDggQEAgX1BBVEhfUlVMRVNf
U1BFQ0lGSUVSID0gWwogICAgICAgIi13aGl0ZXNwYWNlL2RlY2xhcmF0aW9uIl0pLAogICAgIChb
IyBUaGVzZSBmaWxlcyBkZWZpbmUgR09iamVjdHMsIHdoaWNoIGltcGxpZXMgc29tZSBkZWZpbml0
aW9ucyBvZgogICAgICAgIyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBjb250YWluaW5nIHVuZGVy
c2NvcmVzLgorICAgICAgIlNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIv
R3JhcGhpY3NMYXllckFjdG9yLmNwcCIsCisgICAgICAiU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuaCIsCiAgICAgICAiU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3Bw
IiwKICAgICAgICJTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlk
ZW9TaW5rR1N0cmVhbWVyLmNwcCIsCiAgICAgICAiU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAiLAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>178806</attachid>
            <date>2012-12-11 07:57:32 -0800</date>
            <delta_ts>2012-12-11 08:21:11 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-91940-20121211165438.patch</filename>
            <type>text/plain</type>
            <size>31460</size>
            <attacher name="Joone Hur">joone</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM3MDk5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmYyMjMyYzJhYTAyYWU1
N2YzNDBhNzNjYzhkZjI0ZTAzZjZhYWY2MS4uMTA2MzBhY2U0ZTljOTlhNmFjOGM1ZDM4NWU5NmMw
ZWQxODA4N2I4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDEyLTEyLTA5ICBKb29u
ZSBIdXIgIDxqb29uZS5odXJAaW50ZWwuY29tPiwgR3VzdGF2byBOb3JvbmhhIFNpbHZhICA8Z3Vz
dGF2by5ub3JvbmhhQGNvbGxhYm9yYS5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIEdyYXBoaWNz
TGF5ZXJBY3RvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTE5NDAKKworICAgICAgICBSZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEuCisK
KyAgICAgICAgR3JhcGhpY3NMYXllckFjdG9yLCB3aGljaCBpcyBhIG5ldyBDbHV0dGVyQWN0b3Is
IHJlcHJlc2VudHMgYSBub2RlIGluIHRoZSBHUFUtcmVuZGVyYWJsZSBsYXllciB0cmVlCisgICAg
ICAgIHdoZW4gYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgaXMgZW5hYmxlZCB3aXRoIENsdXR0ZXIg
YXMgYWNjZWxlcmF0aW9uIGJhY2tlbmQuCisgICAgICAgIFRoaXMgcGF0Y2ggYWxsb3dzIHRvIHN1
cHBvcnQgYmFzaWMgZmVhdHVyZXMgb2YgQ1NTIDNEIFRyYW5zZm9ybXMuCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLiBUaGlzIHdpbGwgYmUgY292ZXJlZCBieSBwaXhlbCB0ZXN0cyBmb3IgUXQgYW5k
IEdUSysgYWNjZWxlcmF0ZWQKKyAgICAgICAgY29tcG9zaXRpbmcgYW5kIDNEIHRyYW5zZm9ybXMu
CisKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChf
R3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSk6CisgICAgICAgIChncmFwaGljc19sYXllcl9hY3Rv
cl9jbGFzc19pbml0KTogR09iamVjdCBjb25maWd1cmF0aW9uIG9mIGEgbmV3IENsdXR0ZXIgQWN0
b3IuCisgICAgICAgIChncmFwaGljc19sYXllcl9hY3Rvcl9pbml0KTogSW5pdGlhbGl6YXRpb24g
b2YgdGhlIHByaXZhdGUgZGF0YSBvZiB0aGlzIGFjdG9yLgorICAgICAgICAoZ3JhcGhpY3NMYXll
ckFjdG9yU2V0UHJvcGVydHkpOiBHT2JqZWN0IHByb3BlcnR5IHNldHRlci4KKyAgICAgICAgKGdy
YXBoaWNzTGF5ZXJBY3RvckdldFByb3BlcnR5KTogR09iamVjdCBwcm9wZXJ0eSBnZXR0ZXIuCisg
ICAgICAgIChncmFwaGljc0xheWVyQWN0b3JEaXNwb3NlKTogQ2FsbGVkIHRvIGRyb3AgYWxsIHJl
ZmVyZW5jZXMgdG8gb3RoZXIgb2JqZWN0cy4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvckFs
bG9jYXRlKTogIENhbGxlZCB0byBzZXQgdGhlIGNvb3JkaW5hdGVzIG9mIGFuIGFjdG9yLgorICAg
ICAgICAoZ3JhcGhpY3NMYXllckFjdG9yQXBwbHlUcmFuc2Zvcm0pOiBBcHBseWluZyB0aGUgdHJh
bnNmb3JtYXRpb24gdG8gYW4gYWN0b3IgYmVmb3JlIHBhaW50aW5nIGl0LgorICAgICAgICAoZ3Jh
cGhpY3NMYXllckFjdG9yUGFpbnQpOiBDYWxsZWQgdG8gcGFpbnQgdGhlIGFjdG9yLgorICAgICAg
ICAoZ3JhcGhpY3NMYXllckFjdG9yRHJhdyk6IENhbGxlZCBlYWNoIHRpbWUgYSBDbHV0dGVyQ2Fp
cm9UZXh0dXJlIGhhcyBiZWVuIGludmFsaWRhdGVkLgorICAgICAgICAoZ3JhcGhpY3NMYXllckFj
dG9yQWRkZWQpOiBDYWxsZWQgZWFjaCB0aW1lIGFuIGFjdG9yIGhhcyBiZWVuIGFkZGVkIHRvIGNv
bnRhaW5lci4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92ZWQpOiBDYWxsZWQgZWFj
aCB0aW1lIGFuIGFjdG9yIGlzIHJlbW92ZWQgZnJvbSBjb250YWluZXIuCisgICAgICAgIChncmFw
aGljc0xheWVyQWN0b3JOZXcpOiBDcmVhdGUgYSBzcGVjaWZpYyBsYXllciB0eXBlIG9mIEdyYXBo
aWNzTGF5ZXJBY3RvciBvYmplY3QuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JOZXdXaXRo
Q2xpZW50KTogQ3JlYXRlIGEgc3BlY2lmaWMgbGF5ZXIgdHlwZSBvZiBHcmFwaGljc0xheWVyQWN0
b3Igb2JqZWN0IHdpdGggCisgICAgICAgIGl0cyBQbGF0Zm9ybUNsdXR0ZXJDbGllbnRMYXllci4K
KyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclNldENsaWVudCk6IEFkZGVkIHNldHRlciB0byBz
ZXQgdGhlIFBsYXRmb3JtQ2x1dHRlckNsaWVudExheWVyLgorICAgICAgICAoZ3JhcGhpY3NMYXll
ckFjdG9yR2V0Q2xpZW50KTogQWRkZWQgZ2V0dGVyIHRvIGdldCB0aGUgUGxhdGZvcm1DbHV0dGVy
Q2xpZW50TGF5ZXIuCisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JSZW1vdmVBbGwpOiBSZW1v
dmUgYWxsIGNoaWxkIGFjdG9ycy4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJVcGRhdGVUZXh0dXJl
KTogQ3JlYXRlIGEgQ2x1dHRlckNhaXJvVGV4dHVyZS4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJB
Y3RvckdldFN1cmZhY2UpOiBBZGRlZCBzZXR0ZXIgdG8gc2V0IGEgY2Fpcm9fc3VyZmFjZV90Lgor
ICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yU2V0U3VyZmFjZSk6IEFkZGVkIGdldHRlciB0byBn
ZXQgdGhlIGNhaXJvX3N1cmZhY2VfdC4KKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvckludmFs
aWRhdGVSZWN0YW5nbGUpOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNmb3Jt
KTogU2V0IGEgQ29nbE1hdHJpeCB0byBhcHBseSBtYXRyaXggdHJhbnNmb3JtLgorICAgICAgICAo
Z3JhcGhpY3NMYXllckFjdG9yU2V0QW5jaG9yUG9pbnQpOgorICAgICAgICAoZ3JhcGhpY3NMYXll
ckFjdG9yR2V0QW5jaG9yUG9pbnQpOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yU2V0U2Ny
b2xsUG9zaXRpb24pOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yR2V0bkNoaWxkcmVuKToK
KyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclJlcGxhY2VTdWJsYXllcik6CisgICAgICAgIChn
cmFwaGljc0xheWVyQWN0b3JJbnNlcnRTdWJsYXllcik6CisgICAgICAgIChncmFwaGljc0xheWVy
QWN0b3JTZXRTdWJsYXllcnMpOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yR2V0TGF5ZXJU
eXBlKToKKyAgICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclNldExheWVyVHlwZSk6CisgICAgICAg
IChncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xhdGVYKToKKyAgICAgICAgKGdyYXBoaWNzTGF5
ZXJBY3RvckdldFRyYW5zbGF0ZVgpOgorICAgICAgICAoZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJh
bnNsYXRlWSk6CisgICAgICAgIChncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVZKToKKyAg
ICAgICAgKGdyYXBoaWNzTGF5ZXJBY3RvclNldERyYXdzQ29udGVudCk6IEFkZGVkIHNldHRlciB0
byBwYWludCBjb250ZW50IGluc2lkZSBhIGxheWVyLgorICAgICAgICAoZ3JhcGhpY3NMYXllckFj
dG9yR2V0RHJhd3NDb250ZW50KTogQWRkZWQgZ2V0dGVyIHRvIGdldCB0aGUgdmFsdWUgb2YgdGhl
IGRyYXdzQ29udGVudC4gCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFw
aGljc0xheWVyQWN0b3IuaDogQWRkZWQuCisgICAgICAgIChfR3JhcGhpY3NMYXllckFjdG9yKToK
KyAgICAgICAgKF9HcmFwaGljc0xheWVyQWN0b3JDbGFzcyk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQ2x1dHRlci5oOgorICAgICAgICAoV2ViQ29y
ZSk6CisKIDIwMTItMTItMDkgIEpvYW5tYXJpZSBEaWdncyAgPGpkaWdnc0BpZ2FsaWEuY29tPgog
CiAgICAgICAgIFtHVEtdIGFjY2Vzc2liaWxpdHkvcGxhY2Vob2xkZXIuaHRtbCBpcyBmYWlsaW5n
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNl
L1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCAxZDQyZWEzMDAwMTEzNjM2YjQ2MTlj
ZDIwMjhkMjM4MzBmN2FlZTMxLi5jYzk4NmU2MzMyZmQyNjQzYzI0YzhlYmEyMWYwNzkwZjAyNmVj
NzI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBi
L1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTYzNzUsNiArNjM3NSw4IEBA
IGVuZGlmICAjIEVORCBFTkFCTEVfV0VCR0wKIGlmIFVTRV9BQ0NFTEVSQVRFRF9DT01QT1NJVElO
RwogaWYgVVNFX0NMVVRURVIKIHdlYmNvcmVfc291cmNlcyArPSBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwIFwKKwlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5ZXJBY3Rvci5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jbHV0dGVyL0dyYXBoaWNzTGF5
ZXJDbHV0dGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRl
ci9HcmFwaGljc0xheWVyQ2x1dHRlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jbHV0dGVyL1RyYW5zZm9ybWF0aW9uTWF0cml4Q2x1dHRlci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFj
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhp
Y3NMYXllckFjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44OWE3MWQ3Y2Q2NDBkOGY5Zjg5YTdhZWJhNGJm
YTVkODUyYWQzOTc1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuY3BwCkBAIC0wLDAgKzEsNTk3IEBA
CisvKgorICogQ29weXJpZ2h0IDIwMTEsIDIwMTIgQ29sbGFib3JhIExpbWl0ZWQKKyAqIENvcHly
aWdodCAoQykgMjAxMiBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgKiB2ZXJzaW9uIDIuMSwg
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhp
cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBi
dXQgV0lUSE9VVCBBTlkKKyAqIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgor
ICogbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwKKyAqIEluYy4sIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShB
Q0NFTEVSQVRFRF9DT01QT1NJVElORykKKworI2luY2x1ZGUgIkdyYXBoaWNzTGF5ZXJBY3Rvci5o
IgorCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NMYXll
ckNsdXR0ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dENhaXJvLmgiCisjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIK
KwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK0dfREVGSU5FX1RZUEUoR3JhcGhpY3NMYXll
ckFjdG9yLCBncmFwaGljc19sYXllcl9hY3RvciwgQ0xVVFRFUl9UWVBFX1JFQ1RBTkdMRSkKKwor
I2RlZmluZSBHUkFQSElDU19MQVlFUl9BQ1RPUl9HRVRfUFJJVkFURShvYmopIChHX1RZUEVfSU5T
VEFOQ0VfR0VUX1BSSVZBVEUoKG9iaiksIEdSQVBISUNTX0xBWUVSX1RZUEVfQUNUT1IsIEdyYXBo
aWNzTGF5ZXJBY3RvclByaXZhdGUpKQorCitzdHJ1Y3QgX0dyYXBoaWNzTGF5ZXJBY3RvclByaXZh
dGUgeworICAgIEdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXllclR5cGUgbGF5ZXJUeXBlOworICAg
IGdib29sZWFuIGFsbG9jYXRpbmc7CisKKyAgICBDbHV0dGVyQWN0b3IqIHRleHR1cmU7CisgICAg
UmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gc3VyZmFjZTsKKyAgICBDb2dsTWF0cml4KiBtYXRyaXg7
CisKKyAgICBQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCogbGF5ZXJDbGllbnQ7CisKKyAgICBn
Ym9vbGVhbiBkcmF3c0NvbnRlbnQ7CisKKyAgICBmbG9hdCBhbmNob3JYOworICAgIGZsb2F0IGFu
Y2hvclk7CisgICAgZmxvYXQgYW5jaG9yWjsKKworICAgIGZsb2F0IHNjcm9sbFg7CisgICAgZmxv
YXQgc2Nyb2xsWTsKKworICAgIGZsb2F0IHRyYW5zbGF0ZVg7CisgICAgZmxvYXQgdHJhbnNsYXRl
WTsKK307CisKK2VudW0geworICAgIFByb3BlcnR5MCwKKworICAgIFByb3BlcnR5VHJhbnNsYXRl
WCwKKyAgICBQcm9wZXJ0eVRyYW5zbGF0ZVksCisKKyAgICBQcm9wZXJ0eUxhc3QKK307CisKK3N0
YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckFsbG9jYXRlKENsdXR0ZXJBY3RvciosIGNvbnN0
IENsdXR0ZXJBY3RvckJveCosIENsdXR0ZXJBbGxvY2F0aW9uRmxhZ3MpOworc3RhdGljIHZvaWQg
Z3JhcGhpY3NMYXllckFjdG9yQXBwbHlUcmFuc2Zvcm0oQ2x1dHRlckFjdG9yKiwgQ29nbE1hdHJp
eCopOworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yRGlzcG9zZShHT2JqZWN0Kik7Citz
dGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JHZXRQcm9wZXJ0eShHT2JqZWN0KiwgZ3VpbnQg
cHJvcElELCBHVmFsdWUqLCBHUGFyYW1TcGVjKik7CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVy
QWN0b3JTZXRQcm9wZXJ0eShHT2JqZWN0KiwgZ3VpbnQgcHJvcElELCBjb25zdCBHVmFsdWUqLCBH
UGFyYW1TcGVjKik7CitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JQYWludChDbHV0dGVy
QWN0b3IqKTsKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclBpY2soQ2x1dHRlckFjdG9y
KiwgY29uc3QgQ2x1dHRlckNvbG9yKik7CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rv
ckFkZGVkKENsdXR0ZXJDb250YWluZXIqLCBDbHV0dGVyQWN0b3IqLCBncG9pbnRlciBkYXRhKTsK
K3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92ZWQoQ2x1dHRlckNvbnRhaW5lcios
IENsdXR0ZXJBY3RvciosIGdwb2ludGVyIGRhdGEpOworc3RhdGljIGdib29sZWFuIGdyYXBoaWNz
TGF5ZXJBY3RvckRyYXcoQ2x1dHRlckNhaXJvVGV4dHVyZSosIGNhaXJvX3QqLCBHcmFwaGljc0xh
eWVyQWN0b3IqKTsKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclVwZGF0ZVRleHR1cmUo
R3JhcGhpY3NMYXllckFjdG9yKik7CitzdGF0aWMgdm9pZCBkcmF3TGF5ZXJDb250ZW50cyhDbHV0
dGVyQWN0b3IqLCBHcmFwaGljc0NvbnRleHQmKTsKKworc3RhdGljIHZvaWQgZ3JhcGhpY3NfbGF5
ZXJfYWN0b3JfY2xhc3NfaW5pdChHcmFwaGljc0xheWVyQWN0b3JDbGFzcyoga2xhc3MpCit7Cisg
ICAgR09iamVjdENsYXNzKiBvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKGtsYXNzKTsKKyAg
ICBDbHV0dGVyQWN0b3JDbGFzcyogYWN0b3JDbGFzcyA9IENMVVRURVJfQUNUT1JfQ0xBU1Moa2xh
c3MpOworCisgICAgb2JqZWN0Q2xhc3MtPmdldF9wcm9wZXJ0eSA9IGdyYXBoaWNzTGF5ZXJBY3Rv
ckdldFByb3BlcnR5OworICAgIG9iamVjdENsYXNzLT5zZXRfcHJvcGVydHkgPSBncmFwaGljc0xh
eWVyQWN0b3JTZXRQcm9wZXJ0eTsKKyAgICBvYmplY3RDbGFzcy0+ZGlzcG9zZSA9IGdyYXBoaWNz
TGF5ZXJBY3RvckRpc3Bvc2U7CisgICAgYWN0b3JDbGFzcy0+YXBwbHlfdHJhbnNmb3JtID0gZ3Jh
cGhpY3NMYXllckFjdG9yQXBwbHlUcmFuc2Zvcm07CisgICAgYWN0b3JDbGFzcy0+YWxsb2NhdGUg
PSBncmFwaGljc0xheWVyQWN0b3JBbGxvY2F0ZTsKKyAgICBhY3RvckNsYXNzLT5wYWludCA9IGdy
YXBoaWNzTGF5ZXJBY3RvclBhaW50OworCisgICAgZ190eXBlX2NsYXNzX2FkZF9wcml2YXRlKGts
YXNzLCBzaXplb2YoR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSkpOworCisgICAgR1BhcmFtU3Bl
YyogcHNwZWMgPSBnX3BhcmFtX3NwZWNfZmxvYXQoInRyYW5zbGF0ZS14IiwgIlRyYW5zbGF0ZSBY
IiwgIlRyYW5zbGF0aW9uIHZhbHVlIGZvciB0aGUgWCBheGlzIiwgLUdfTUFYRkxPQVQsIEdfTUFY
RkxPQVQsIDAuMCwgc3RhdGljX2Nhc3Q8R1BhcmFtRmxhZ3M+KEdfUEFSQU1fUkVBRFdSSVRFKSk7
CisgICAgZ19vYmplY3RfY2xhc3NfaW5zdGFsbF9wcm9wZXJ0eShvYmplY3RDbGFzcywgUHJvcGVy
dHlUcmFuc2xhdGVYLCBwc3BlYyk7CisKKyAgICBwc3BlYyA9IGdfcGFyYW1fc3BlY19mbG9hdCgi
dHJhbnNsYXRlLXkiLCAiVHJhbnNsYXRlIFkiLCAiVHJhbnNsYXRpb24gdmFsdWUgZm9yIHRoZSBZ
IGF5aXMiLCAtR19NQVhGTE9BVCwgR19NQVhGTE9BVCwgMC4wLCBzdGF0aWNfY2FzdDxHUGFyYW1G
bGFncz4oR19QQVJBTV9SRUFEV1JJVEUpKTsKKyAgICBnX29iamVjdF9jbGFzc19pbnN0YWxsX3By
b3BlcnR5KG9iamVjdENsYXNzLCBQcm9wZXJ0eVRyYW5zbGF0ZVksIHBzcGVjKTsKK30KKworc3Rh
dGljIHZvaWQgZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfaW5pdChHcmFwaGljc0xheWVyQWN0b3IqIHNl
bGYpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IHNlbGYtPnByaXYg
PSBHUkFQSElDU19MQVlFUl9BQ1RPUl9HRVRfUFJJVkFURShzZWxmKTsKKworICAgIGNsdXR0ZXJf
YWN0b3Jfc2V0X3JlYWN0aXZlKENMVVRURVJfQUNUT1Ioc2VsZiksIEZBTFNFKTsKKworICAgIC8v
IERlZmF1bHQgdXNlZCBieSBHcmFwaGljc0xheWVyLgorICAgIGdyYXBoaWNzTGF5ZXJBY3RvclNl
dEFuY2hvclBvaW50KHNlbGYsIDAuNSwgMC41LCAwLjApOworCisgICAgZ19zaWduYWxfY29ubmVj
dChzZWxmLCAiYWN0b3ItYWRkZWQiLCBHX0NBTExCQUNLKGdyYXBoaWNzTGF5ZXJBY3RvckFkZGVk
KSwgMCk7CisgICAgZ19zaWduYWxfY29ubmVjdChzZWxmLCAiYWN0b3ItcmVtb3ZlZCIsIEdfQ0FM
TEJBQ0soZ3JhcGhpY3NMYXllckFjdG9yUmVtb3ZlZCksIDApOworfQorCitzdGF0aWMgdm9pZCBn
cmFwaGljc0xheWVyQWN0b3JTZXRQcm9wZXJ0eShHT2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJ
RCwgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyogcHNwZWMpCit7CisgICAgR3JhcGhp
Y3NMYXllckFjdG9yKiBsYXllciA9IEdSQVBISUNTX0xBWUVSX0FDVE9SKG9iamVjdCk7CisKKyAg
ICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUHJvcGVydHlUcmFuc2xhdGVYOgorICAgICAg
ICBncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xhdGVYKGxheWVyLCBnX3ZhbHVlX2dldF9mbG9h
dCh2YWx1ZSkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFByb3BlcnR5VHJhbnNsYXRlWToK
KyAgICAgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWShsYXllciwgZ192YWx1ZV9n
ZXRfZmxvYXQodmFsdWUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
R19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9iamVjdCwgcHJvcElELCBwc3BlYyk7
CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JHZXRQcm9wZXJ0eShH
T2JqZWN0KiBvYmplY3QsIGd1aW50IHByb3BJRCwgR1ZhbHVlKiB2YWx1ZSwgR1BhcmFtU3BlYyog
cHNwZWMpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciA9IEdSQVBISUNTX0xBWUVS
X0FDVE9SKG9iamVjdCk7CisKKyAgICBzd2l0Y2ggKHByb3BJRCkgeworICAgIGNhc2UgUHJvcGVy
dHlUcmFuc2xhdGVYOgorICAgICAgICBnX3ZhbHVlX3NldF9mbG9hdCh2YWx1ZSwgZ3JhcGhpY3NM
YXllckFjdG9yR2V0VHJhbnNsYXRlWChsYXllcikpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFByb3BlcnR5VHJhbnNsYXRlWToKKyAgICAgICAgZ192YWx1ZV9zZXRfZmxvYXQodmFsdWUsIGdy
YXBoaWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVkobGF5ZXIpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgR19PQkpFQ1RfV0FSTl9JTlZBTElEX1BST1BFUlRZX0lEKG9i
amVjdCwgcHJvcElELCBwc3BlYyk7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIGdyYXBoaWNz
TGF5ZXJBY3RvckRpc3Bvc2UoR09iamVjdCogb2JqZWN0KQoreworICAgIEdyYXBoaWNzTGF5ZXJB
Y3RvciogbGF5ZXIgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihvYmplY3QpOworICAgIEdyYXBoaWNz
TGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKworICAgIGlmIChwcml2LT50
ZXh0dXJlKSB7CisgICAgICAgIGNsdXR0ZXJfYWN0b3JfZGVzdHJveShwcml2LT50ZXh0dXJlKTsK
KyAgICAgICAgcHJpdi0+dGV4dHVyZSA9IDA7CisgICAgfQorCisgICAgcHJpdi0+c3VyZmFjZS5j
bGVhcigpOworCisgICAgaWYgKHByaXYtPm1hdHJpeCkKKyAgICAgICAgY29nbF9tYXRyaXhfZnJl
ZShwcml2LT5tYXRyaXgpOworCisgICAgR19PQkpFQ1RfQ0xBU1MoZ3JhcGhpY3NfbGF5ZXJfYWN0
b3JfcGFyZW50X2NsYXNzKS0+ZGlzcG9zZShvYmplY3QpOworfQorCisvLyBDb3BpZWQgZnJvbSBj
YWlyby4KKyNkZWZpbmUgTUFYX0lNQUdFX1NJWkUgMzI3NjcKKworc3RhdGljIHZvaWQgZ3JhcGhp
Y3NMYXllckFjdG9yQWxsb2NhdGUoQ2x1dHRlckFjdG9yKiBzZWxmLCBjb25zdCBDbHV0dGVyQWN0
b3JCb3gqIGJveCwgQ2x1dHRlckFsbG9jYXRpb25GbGFncyBmbGFncykKK3sKKyAgICBHcmFwaGlj
c0xheWVyQWN0b3IqIGxheWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1Ioc2VsZik7CisgICAgR3Jh
cGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgcHJpdi0+
YWxsb2NhdGluZyA9IFRSVUU7CisKKyAgICBDTFVUVEVSX0FDVE9SX0NMQVNTKGdyYXBoaWNzX2xh
eWVyX2FjdG9yX3BhcmVudF9jbGFzcyktPmFsbG9jYXRlKHNlbGYsIGJveCwgZmxhZ3MpOworCisg
ICAgaWYgKHByaXYtPnRleHR1cmUpIHsKKyAgICAgICAgLy8gVGhlIHRleHR1cmUgb2NjdXBpZXMg
dGhlIHdob2xlIGFyZWEsIGJ1dCBpcyBwb3NpdGlvbmVkIGF0IDAsMAorICAgICAgICAvLyByZWxh
dGl2ZSB0byB0aGUgbGF5ZXIgYWN0b3IuCisgICAgICAgIENsdXR0ZXJBY3RvckJveCB0ZXh0dXJl
Qm94ID0geyAwLjAsIDAuMCwgYm94LT54MiAtIGJveC0+eDEsIGJveC0+eTIgLSBib3gtPnkxIH07
CisKKyAgICAgICAgLy8gcHJvdGVjdCBhZ2FpbnN0IDB4MAorICAgICAgICBpZiAoIXRleHR1cmVC
b3gueDIpCisgICAgICAgICAgICB0ZXh0dXJlQm94LngyID0gMTsKKworICAgICAgICBpZiAoIXRl
eHR1cmVCb3gueTIpCisgICAgICAgICAgICB0ZXh0dXJlQm94LnkyID0gMTsKKworICAgICAgICBj
bHV0dGVyX2FjdG9yX2FsbG9jYXRlKHByaXYtPnRleHR1cmUsICZ0ZXh0dXJlQm94LCBmbGFncyk7
CisgICAgfQorCisgICAgLy8gRklYTUU6IG1heWJlIHdlIGNhbiBjYWNoZSBjaGlsZHJlbiBhbGxv
Y2F0aW9uIGFuZCBub3QgY2FsbAorICAgIC8vIGFsbG9jYXRlIG9uIHRoZW0gdGhpcyBvZnRlbj8K
KyAgICBmb3IgKEdMaXN0KiBsaXN0ID0gbGF5ZXItPmNoaWxkcmVuOyBsaXN0OyBsaXN0ID0gbGlz
dC0+bmV4dCkgeworICAgICAgICBDbHV0dGVyQWN0b3IqIGNoaWxkID0gQ0xVVFRFUl9BQ1RPUihs
aXN0LT5kYXRhKTsKKworICAgICAgICBmbG9hdCBjaGlsZFdpZHRoID0gY2x1dHRlcl9hY3Rvcl9n
ZXRfd2lkdGgoY2hpbGQpOworICAgICAgICBmbG9hdCBjaGlsZEhlaWdodCA9IGNsdXR0ZXJfYWN0
b3JfZ2V0X2hlaWdodChjaGlsZCk7CisKKyAgICAgICAgQ2x1dHRlckFjdG9yQm94IGNoaWxkQm94
OworICAgICAgICBjaGlsZEJveC54MSA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3goY2hpbGQpOworICAg
ICAgICBjaGlsZEJveC55MSA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3koY2hpbGQpOworICAgICAgICBj
aGlsZEJveC54MiA9IGNoaWxkQm94LngxICsgY2hpbGRXaWR0aDsKKyAgICAgICAgY2hpbGRCb3gu
eTIgPSBjaGlsZEJveC55MSArIGNoaWxkSGVpZ2h0OworCisgICAgICAgIGNsdXR0ZXJfYWN0b3Jf
YWxsb2NhdGUoY2hpbGQsICZjaGlsZEJveCwgZmxhZ3MpOworICAgIH0KKworICAgIHByaXYtPmFs
bG9jYXRpbmcgPSBGQUxTRTsKK30KKworc3RhdGljIHZvaWQgZ3JhcGhpY3NMYXllckFjdG9yQXBw
bHlUcmFuc2Zvcm0oQ2x1dHRlckFjdG9yKiBhY3RvciwgQ29nbE1hdHJpeCogbWF0cml4KQorewor
ICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBHUkFQSElDU19MQVlFUl9BQ1RP
UihhY3RvciktPnByaXY7CisKKyAgICAvLyBBcHBseSB0cmFuc2xhdGlvbiBhbmQgc2Nyb2xsaW5n
IGFzIGEgc2luZ2xlIHRyYW5zbGF0aW9uLiBUaGVzZQorICAgIC8vIG5lZWQgdG8gY29tZSBiZWZv
cmUgYW55dGhpbmcgZWxzZSwgb3RoZXJ3aXNlIHRoZXknbGwgYmUKKyAgICAvLyBhZmZlY3RlZCBi
eSBvdGhlciBvcGVyYXRpb25zIHN1Y2ggYXMgc2NhbGluZywgd2hpY2ggaXMgbm90IHdoYXQKKyAg
ICAvLyB3ZSB3YW50LgorICAgIGZsb2F0IHRyYW5zbGF0ZVggPSBwcml2LT5zY3JvbGxYICsgcHJp
di0+dHJhbnNsYXRlWDsKKyAgICBmbG9hdCB0cmFuc2xhdGVZID0gcHJpdi0+c2Nyb2xsWSArIHBy
aXYtPnRyYW5zbGF0ZVk7CisKKyAgICBpZiAodHJhbnNsYXRlWCB8fCB0cmFuc2xhdGVZKQorICAg
ICAgICBjb2dsX21hdHJpeF90cmFuc2xhdGUobWF0cml4LCB0cmFuc2xhdGVYLCB0cmFuc2xhdGVZ
LCAwKTsKKworICAgIENMVVRURVJfQUNUT1JfQ0xBU1MoZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfcGFy
ZW50X2NsYXNzKS0+YXBwbHlfdHJhbnNmb3JtKGFjdG9yLCBtYXRyaXgpOworCisgICAgZmxvYXQg
d2lkdGggPSBjbHV0dGVyX2FjdG9yX2dldF93aWR0aChhY3Rvcik7CisgICAgZmxvYXQgaGVpZ2h0
ID0gY2x1dHRlcl9hY3Rvcl9nZXRfaGVpZ2h0KGFjdG9yKTsKKyAgICBpZiAod2lkdGggPD0gMS4w
IHx8IGhlaWdodCA8PSAxLjApCisgICAgICAgIHJldHVybjsKKworICAgIGZsb2F0IHBpdm90WCwg
cGl2b3RZOworICAgIHBpdm90WCA9IHdpZHRoICogcHJpdi0+YW5jaG9yWDsKKyAgICBwaXZvdFkg
PSBoZWlnaHQgKiBwcml2LT5hbmNob3JZOworCisgICAgaWYgKHByaXYtPm1hdHJpeCkgeworICAg
ICAgICBDb2dsTWF0cml4KiBsb2NhbE1hdHJpeDsKKyAgICAgICAgLy8gQ1NTMyB0cmFuZm9ybS1z
dHlsZSBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgZmx5LCAKKyAgICAgICAgLy8gc28gd2UgaGF2ZSB0
byBjb3B5IHByaXYtPm1hdHJpeCBpbiBvcmRlciB0byByZWNvdmVyIHotYXhpcy4gCisgICAgICAg
IGxvY2FsTWF0cml4ID0gY29nbF9tYXRyaXhfY29weShwcml2LT5tYXRyaXgpOworCisgICAgICAg
IGNvZ2xfbWF0cml4X3RyYW5zbGF0ZShtYXRyaXgsIHBpdm90WCwgcGl2b3RZLCBwcml2LT5hbmNo
b3JaKTsKKyAgICAgICAgY29nbF9tYXRyaXhfbXVsdGlwbHkobWF0cml4LCBtYXRyaXgsIGxvY2Fs
TWF0cml4KTsKKyAgICAgICAgY29nbF9tYXRyaXhfdHJhbnNsYXRlKG1hdHJpeCwgLXBpdm90WCwg
LXBpdm90WSwgLXByaXYtPmFuY2hvclopOworICAgICAgICBjb2dsX21hdHJpeF9mcmVlKGxvY2Fs
TWF0cml4KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclBhaW50
KENsdXR0ZXJBY3RvciogYWN0b3IpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBncmFwaGlj
c0xheWVyID0gR1JBUEhJQ1NfTEFZRVJfQUNUT1IoYWN0b3IpOworICAgIEdyYXBoaWNzTGF5ZXJB
Y3RvclByaXZhdGUqIHByaXYgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihhY3RvciktPnByaXY7CisK
KyAgICAvLyBQYWludCB0aGUgdGV4dHVyZSBpbiBjYXNlIHdlIGhhdmUgYSBib3JkZXIuIFRoaXMg
d2lsbCBiZSB0aGUgY2FzZSB3aGVuIGRlYnVnZ2luZyBib3JkZXJzCisgICAgLy8gYXJlIHR1cm5l
ZCBvbiB0aGF0IHdlIHdhbnQgdG8gc2VlLgorICAgIGlmIChwcml2LT50ZXh0dXJlKQorICAgICAg
ICBjbHV0dGVyX2FjdG9yX3BhaW50KHByaXYtPnRleHR1cmUpOworCisgICAgR0xpc3QqIGxpc3Q7
CisgICAgZm9yIChsaXN0ID0gZ3JhcGhpY3NMYXllci0+Y2hpbGRyZW47IGxpc3Q7IGxpc3QgPSBs
aXN0LT5uZXh0KSB7CisgICAgICAgIENsdXR0ZXJBY3RvciogY2hpbGQgPSBDTFVUVEVSX0FDVE9S
KGxpc3QtPmRhdGEpOworICAgICAgICBjbHV0dGVyX2FjdG9yX3BhaW50KGNoaWxkKTsKKyAgICB9
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBncmFwaGljc0xheWVyQWN0b3JEcmF3KENsdXR0ZXJDYWly
b1RleHR1cmUqIHRleHR1cmUsIGNhaXJvX3QqIGNyLCBHcmFwaGljc0xheWVyQWN0b3IqIGxheWVy
KQoreworICAgIENsdXR0ZXJBY3RvciogYWN0b3IgPSBDTFVUVEVSX0FDVE9SKGxheWVyKTsKKyAg
ICBmbG9hdCB3aWR0aCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X3dpZHRoKGFjdG9yKTsKKyAgICBmbG9h
dCBoZWlnaHQgPSBjbHV0dGVyX2FjdG9yX2dldF9oZWlnaHQoYWN0b3IpOworCisgICAgaWYgKCF3
aWR0aCB8fCAhaGVpZ2h0KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBHcmFwaGljc0xh
eWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXItPnByaXY7CisgICAgR3JhcGhpY3NDb250ZXh0
IGNvbnRleHQoY3IpOworCisgICAgY2x1dHRlcl9jYWlyb190ZXh0dXJlX2NsZWFyKHRleHR1cmUp
OworCisgICAgaWYgKHByaXYtPnN1cmZhY2UpIHsKKyAgICAgICAgZ2ludCBzdXJmYWNlV2lkdGgg
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChwcml2LT5zdXJmYWNlLmdldCgpKTsKKyAg
ICAgICAgZ2ludCBzdXJmYWNlSGVpZ2h0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KHByaXYtPnN1cmZhY2UuZ2V0KCkpOworCisgICAgICAgIEZsb2F0UmVjdCBzcmNSZWN0KDAuMCwg
MC4wLCBzdGF0aWNfY2FzdDxmbG9hdD4oc3VyZmFjZVdpZHRoKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KHN1cmZhY2VIZWlnaHQpKTsKKyAgICAgICAgRmxvYXRSZWN0IGRlc3RSZWN0KDAuMCwgMC4wLCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgY29udGV4dC5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1
cmZhY2VUb0NvbnRleHQocHJpdi0+c3VyZmFjZS5nZXQoKSwgZGVzdFJlY3QsIHNyY1JlY3QsICZj
b250ZXh0KTsKKyAgICB9CisKKyAgICBpZiAocHJpdi0+bGF5ZXJUeXBlID09IEdyYXBoaWNzTGF5
ZXJDbHV0dGVyOjpMYXllclR5cGVXZWJMYXllcikKKyAgICAgICAgZHJhd0xheWVyQ29udGVudHMo
YWN0b3IsIGNvbnRleHQpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIGdy
YXBoaWNzTGF5ZXJBY3RvckFkZGVkKENsdXR0ZXJDb250YWluZXIqIGNvbnRhaW5lciwgQ2x1dHRl
ckFjdG9yKiBhY3RvciwgZ3BvaW50ZXIgZGF0YSkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3Iq
IGdyYXBoaWNzTGF5ZXIgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihjb250YWluZXIpOworICAgIGdy
YXBoaWNzTGF5ZXItPmNoaWxkcmVuID0gZ19saXN0X2FwcGVuZChncmFwaGljc0xheWVyLT5jaGls
ZHJlbiwgYWN0b3IpOworfQorCitzdGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JSZW1vdmVk
KENsdXR0ZXJDb250YWluZXIqIGNvbnRhaW5lciwgQ2x1dHRlckFjdG9yKiBhY3RvciwgZ3BvaW50
ZXIgZGF0YSkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXIgPSBHUkFQ
SElDU19MQVlFUl9BQ1RPUihjb250YWluZXIpOworICAgIGdyYXBoaWNzTGF5ZXItPmNoaWxkcmVu
ID0gZ19saXN0X3JlbW92ZShncmFwaGljc0xheWVyLT5jaGlsZHJlbiwgYWN0b3IpOworfQorCitz
dGF0aWMgdm9pZCBncmFwaGljc0xheWVyQWN0b3JVcGRhdGVUZXh0dXJlKEdyYXBoaWNzTGF5ZXJB
Y3RvciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxh
eWVyLT5wcml2OworICAgIEFTU0VSVChwcml2LT5sYXllclR5cGUgIT0gR3JhcGhpY3NMYXllckNs
dXR0ZXI6OkxheWVyVHlwZVZpZGVvTGF5ZXIpOworCisgICAgLy8gTm90aGluZyBuZWVkcyBhIHRl
eHR1cmUsIHJlbW92ZSB0aGUgb25lIHdlIGhhdmUsIGlmIGFueS4KKyAgICBpZiAoIXByaXYtPmRy
YXdzQ29udGVudCAmJiAhcHJpdi0+c3VyZmFjZSkgeworICAgICAgICBpZiAoIXByaXYtPnRleHR1
cmUpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jKHByaXYtPnRleHR1cmUsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGdy
YXBoaWNzTGF5ZXJBY3RvckRyYXcpLCBsYXllcik7CisgICAgICAgIGNsdXR0ZXJfYWN0b3JfdW5w
YXJlbnQocHJpdi0+dGV4dHVyZSk7CisgICAgICAgIHByaXYtPnRleHR1cmUgPSAwOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgLy8gV2UgbmVlZCBhIHRleHR1cmUsIGJ1dCBhbHJlYWR5
IGhhdmUgb25lIQorICAgIGlmIChwcml2LT50ZXh0dXJlKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBXZSBuZWVkIGEgdGV4dHVyZSwgc28gY3JlYXRlIGl0LgorICAgIENsdXR0ZXJBY3Rvciog
YWN0b3IgPSBDTFVUVEVSX0FDVE9SKGxheWVyKTsKKyAgICBpbnQgd2lkdGggPSBjZWlsZihjbHV0
dGVyX2FjdG9yX2dldF93aWR0aChhY3RvcikpOworICAgIGludCBoZWlnaHQgPSBjZWlsZihjbHV0
dGVyX2FjdG9yX2dldF9oZWlnaHQoYWN0b3IpKTsKKworICAgIHByaXYtPnRleHR1cmUgPSBjbHV0
dGVyX2NhaXJvX3RleHR1cmVfbmV3KHdpZHRoID4gMCA/IHdpZHRoIDogMSwgaGVpZ2h0ID4gMCA/
IGhlaWdodCA6IDEpOworICAgIGNsdXR0ZXJfY2Fpcm9fdGV4dHVyZV9zZXRfYXV0b19yZXNpemUo
Q0xVVFRFUl9DQUlST19URVhUVVJFKHByaXYtPnRleHR1cmUpLCBUUlVFKTsKKyAgICBjbHV0dGVy
X2FjdG9yX3NldF9wYXJlbnQocHJpdi0+dGV4dHVyZSwgYWN0b3IpOworCisgICAgZ19zaWduYWxf
Y29ubmVjdChwcml2LT50ZXh0dXJlLCAiZHJhdyIsIEdfQ0FMTEJBQ0soZ3JhcGhpY3NMYXllckFj
dG9yRHJhdyksIGxheWVyKTsKK30KKworLy8gRHJhdyBjb250ZW50IGludG8gdGhlIGxheWVyLgor
c3RhdGljIHZvaWQgZHJhd0xheWVyQ29udGVudHMoQ2x1dHRlckFjdG9yKiBhY3RvciwgR3JhcGhp
Y3NDb250ZXh0JiBjb250ZXh0KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvclByaXZhdGUqIHBy
aXYgPSBHUkFQSElDU19MQVlFUl9BQ1RPUihhY3RvciktPnByaXY7CisKKyAgICBpZiAoIXByaXYt
PmRyYXdzQ29udGVudCB8fCAhcHJpdi0+bGF5ZXJDbGllbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGZsb2F0IHdpZHRoID0gY2x1dHRlcl9hY3Rvcl9nZXRfd2lkdGgoYWN0b3IpOworICAgIGZs
b2F0IGhlaWdodCA9IGNsdXR0ZXJfYWN0b3JfZ2V0X2hlaWdodChhY3Rvcik7CisgICAgSW50UmVj
dCBjbGlwKDAsIDAsIHdpZHRoLCBoZWlnaHQpOworCisgICAgLy8gQXBwbHkgdGhlIHBhaW50ZWQg
Y29udGVudCB0byB0aGUgbGF5ZXIuCisgICAgcHJpdi0+bGF5ZXJDbGllbnQtPnBsYXRmb3JtQ2x1
dHRlckxheWVyUGFpbnRDb250ZW50cyhjb250ZXh0LCBjbGlwKTsKK30KKworCitHcmFwaGljc0xh
eWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXJBY3Rvck5ldyhHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5
ZXJUeXBlIHR5cGUpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciA9IEdSQVBISUNT
X0xBWUVSX0FDVE9SKGdfb2JqZWN0X25ldyhHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SLCAwKSk7
CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisg
ICAgcHJpdi0+bGF5ZXJUeXBlID0gdHlwZTsKKworICAgIC8vIEZvciB2aWRlbyBsYXllcnMgd2Ug
ZG9uJ3Qgd2FudCB0aGUgY2Fpcm8gdGV4dHVyZSwgYnV0IGEgcmVndWxhciBvbmUuCisgICAgaWYg
KHByaXYtPmxheWVyVHlwZSA9PSBHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlVmlkZW9M
YXllcikgeworICAgICAgICBwcml2LT50ZXh0dXJlID0gY2x1dHRlcl90ZXh0dXJlX25ldygpOwor
ICAgICAgICBjbHV0dGVyX2FjdG9yX3NldF9wYXJlbnQocHJpdi0+dGV4dHVyZSwgQ0xVVFRFUl9B
Q1RPUihsYXllcikpOworICAgIH0KKworICAgIHJldHVybiBsYXllcjsKK30KKworR3JhcGhpY3NM
YXllckFjdG9yKiBncmFwaGljc0xheWVyQWN0b3JOZXdXaXRoQ2xpZW50KEdyYXBoaWNzTGF5ZXJD
bHV0dGVyOjpMYXllclR5cGUgdHlwZSwgUGxhdGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqIGxheWVy
Q2xpZW50KQoreworICAgIEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIgPSBncmFwaGljc0xheWVy
QWN0b3JOZXcodHlwZSk7CisgICAgZ3JhcGhpY3NMYXllckFjdG9yU2V0Q2xpZW50KGxheWVyLCBs
YXllckNsaWVudCk7CisKKyAgICByZXR1cm4gbGF5ZXI7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXll
ckFjdG9yU2V0Q2xpZW50KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIFBsYXRmb3JtQ2x1dHRl
ckxheWVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbGF5ZXItPnByaXYtPmxheWVyQ2xpZW50ID0g
Y2xpZW50OworfQorCitQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCogZ3JhcGhpY3NMYXllckFj
dG9yR2V0Q2xpZW50KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgcmV0dXJuIGxh
eWVyLT5wcml2LT5sYXllckNsaWVudDsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JSZW1v
dmVBbGwoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllcikKK3sKKyAgICBnX3JldHVybl9pZl9mYWls
KEdSQVBISUNTX0xBWUVSX0lTX0FDVE9SKGxheWVyKSk7CisKKyAgICBHTGlzdCogY2hpbGRyZW4g
PSBjbHV0dGVyX2FjdG9yX2dldF9jaGlsZHJlbihDTFVUVEVSX0FDVE9SKGxheWVyKSk7CisgICAg
Zm9yICg7IGNoaWxkcmVuOyBjaGlsZHJlbiA9IGNoaWxkcmVuLT5uZXh0KSB7CisgICAgICAgIC8v
IFdlIG9ubHkgd2FudCB0byByZW1vdmUgc3VibGF5ZXJzLCBub3Qgb3VyIG93biBjb21wb3NpdGUg
YWN0b3JzLgorICAgICAgICBpZiAoY2hpbGRyZW4tPmRhdGEgPT0gbGF5ZXItPnByaXYtPnRleHR1
cmUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjbHV0dGVyX2FjdG9yX3JlbW92
ZV9jaGlsZChDTFVUVEVSX0FDVE9SKGxheWVyKSwgQ0xVVFRFUl9BQ1RPUihjaGlsZHJlbi0+ZGF0
YSkpOworICAgIH0KK30KKworY2Fpcm9fc3VyZmFjZV90KiBncmFwaGljc0xheWVyQWN0b3JHZXRT
dXJmYWNlKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllckFj
dG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIEFTU0VSVChwcml2LT5zdXJmYWNl
KTsKKyAgICByZXR1cm4gcHJpdi0+c3VyZmFjZS5nZXQoKTsKK30KKwordm9pZCBncmFwaGljc0xh
eWVyQWN0b3JTZXRTdXJmYWNlKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGNhaXJvX3N1cmZh
Y2VfdCogc3VyZmFjZSkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0g
bGF5ZXItPnByaXY7CisgICAgcHJpdi0+c3VyZmFjZSA9IHN1cmZhY2U7CisgICAgZ3JhcGhpY3NM
YXllckFjdG9yVXBkYXRlVGV4dHVyZShsYXllcik7Cit9CisKK3ZvaWQgZ3JhcGhpY3NMYXllckFj
dG9ySW52YWxpZGF0ZVJlY3RhbmdsZShHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBjb25zdCBG
bG9hdFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBw
cml2ID0gbGF5ZXItPnByaXY7CisKKyAgICBpZiAoIXByaXYtPnRleHR1cmUpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNhaXJvX3JlY3RhbmdsZV9pbnRfdCByZWN0KGVuY2xvc2luZ0ludFJlY3Qo
ZGlydHlSZWN0KSk7CisgICAgY2x1dHRlcl9jYWlyb190ZXh0dXJlX2ludmFsaWRhdGVfcmVjdGFu
Z2xlKENMVVRURVJfQ0FJUk9fVEVYVFVSRShwcml2LT50ZXh0dXJlKSwgJnJlY3QpOworfQorCit2
b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zZm9ybShHcmFwaGljc0xheWVyQWN0b3IqIGxh
eWVyLCBjb25zdCBDb2dsTWF0cml4KiBtYXRyaXgpIAoreworICAgIEdyYXBoaWNzTGF5ZXJBY3Rv
clByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKworICAgIGlmIChwcml2LT5tYXRyaXgpIHsK
KyAgICAgICAgY29nbF9tYXRyaXhfZnJlZShwcml2LT5tYXRyaXgpOworICAgICAgICBwcml2LT5t
YXRyaXggPSAwOworICAgICAgICBjbHV0dGVyX2FjdG9yX3F1ZXVlX3JlZHJhdyhDTFVUVEVSX0FD
VE9SKGxheWVyKSk7CisgICAgfQorCisgICAgQ29nbE1hdHJpeCBpZGVudGl0eTsKKyAgICBjb2ds
X21hdHJpeF9pbml0X2lkZW50aXR5KCZpZGVudGl0eSk7CisgICAgaWYgKGNvZ2xfbWF0cml4X2Vx
dWFsKChDb2dsTWF0cml4KikmaWRlbnRpdHksIChDb2dsTWF0cml4KiltYXRyaXgpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAocHJpdi0+bWF0cml4KQorICAgICAgICBjb2dsX21hdHJpeF9m
cmVlKHByaXYtPm1hdHJpeCk7CisKKyAgICBwcml2LT5tYXRyaXggPSBjb2dsX21hdHJpeF9jb3B5
KG1hdHJpeCk7CisgICAgY2x1dHRlcl9hY3Rvcl9xdWV1ZV9yZWRyYXcoQ0xVVFRFUl9BQ1RPUihs
YXllcikpOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldEFuY2hvclBvaW50KEdyYXBo
aWNzTGF5ZXJBY3RvciogbGF5ZXIsIGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHopCit7CisgICAg
R3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworCisgICAgcHJp
di0+YW5jaG9yWCA9IHg7CisgICAgcHJpdi0+YW5jaG9yWSA9IHk7CisgICAgcHJpdi0+YW5jaG9y
WiA9IHo7CisKKyAgICBDbHV0dGVyQWN0b3IqIGFjdG9yID0gQ0xVVFRFUl9BQ1RPUihsYXllcik7
CisKKyAgICBmbG9hdCB3aWR0aCwgaGVpZ2h0OworICAgIGNsdXR0ZXJfYWN0b3JfZ2V0X3NpemUo
YWN0b3IsICZ3aWR0aCwgJmhlaWdodCk7CisgICAgY2x1dHRlcl9hY3Rvcl9zZXRfYW5jaG9yX3Bv
aW50KGFjdG9yLCB3aWR0aCAqIHByaXYtPmFuY2hvclgsIGhlaWdodCAqIHByaXYtPmFuY2hvclkp
OworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckdldEFuY2hvclBvaW50KEdyYXBoaWNzTGF5
ZXJBY3RvciogbGF5ZXIsIGZsb2F0KiB4LCBmbG9hdCogeSwgZmxvYXQqIHopCit7CisgICAgR3Jh
cGhpY3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIGlmICh4KQor
ICAgICAgICAqeCA9IHByaXYtPmFuY2hvclg7CisKKyAgICBpZiAoeSkKKyAgICAgICAgKnkgPSBw
cml2LT5hbmNob3JZOworCisgICAgaWYgKHopCisgICAgICAgICp6ID0gcHJpdi0+YW5jaG9yWjsK
K30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRTY3JvbGxQb3NpdGlvbihHcmFwaGljc0xh
eWVyQWN0b3IqIGxheWVyLCBmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIEdyYXBoaWNzTGF5ZXJB
Y3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKworICAgIGlmICh4ID4gMCB8fCB5ID4g
MCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+c2Nyb2xsWCA9IHg7CisgICAgcHJpdi0+
c2Nyb2xsWSA9IHk7CisKKyAgICBjbHV0dGVyX2FjdG9yX3F1ZXVlX3JlZHJhdyhDTFVUVEVSX0FD
VE9SKGxheWVyKSk7Cit9CisKK2dpbnQgZ3JhcGhpY3NMYXllckFjdG9yR2V0bkNoaWxkcmVuKEdy
YXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgQVNTRVJUKEdSQVBISUNTX0xBWUVSX0lT
X0FDVE9SKGxheWVyKSk7CisKKyAgICByZXR1cm4gZ19saXN0X2xlbmd0aChsYXllci0+Y2hpbGRy
ZW4pOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclJlcGxhY2VTdWJsYXllcihHcmFwaGlj
c0xheWVyQWN0b3IqIGxheWVyLCBDbHV0dGVyQWN0b3IqIG9sZENoaWxkTGF5ZXIsIENsdXR0ZXJB
Y3RvciogbmV3Q2hpbGRMYXllcikKK3sKKyAgICBBU1NFUlQoR1JBUEhJQ1NfTEFZRVJfSVNfQUNU
T1IobGF5ZXIpKTsKKyAgICBBU1NFUlQoQ0xVVFRFUl9JU19BQ1RPUihvbGRDaGlsZExheWVyKSk7
CisgICAgQVNTRVJUKENMVVRURVJfSVNfQUNUT1IobmV3Q2hpbGRMYXllcikpOworCisgICAgY2x1
dHRlcl9hY3Rvcl9yZW1vdmVfY2hpbGQoQ0xVVFRFUl9BQ1RPUihsYXllciksIG9sZENoaWxkTGF5
ZXIpOworICAgIGNsdXR0ZXJfYWN0b3JfYWRkX2NoaWxkKENMVVRURVJfQUNUT1IobGF5ZXIpLCBu
ZXdDaGlsZExheWVyKTsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JJbnNlcnRTdWJsYXll
cihHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBDbHV0dGVyQWN0b3IqIGNoaWxkTGF5ZXIsIGdp
bnQgaW5kZXgpCit7CisgICAgQVNTRVJUKEdSQVBISUNTX0xBWUVSX0lTX0FDVE9SKGxheWVyKSk7
CisgICAgQVNTRVJUKENMVVRURVJfSVNfQUNUT1IoY2hpbGRMYXllcikpOworCisgICAgZ19vYmpl
Y3RfcmVmKGNoaWxkTGF5ZXIpOworCisgICAgbGF5ZXItPmNoaWxkcmVuID0gZ19saXN0X2luc2Vy
dChsYXllci0+Y2hpbGRyZW4sIGNoaWxkTGF5ZXIsIGluZGV4KTsKKyAgICBBU1NFUlQoIWNsdXR0
ZXJfYWN0b3JfZ2V0X3BhcmVudChjaGlsZExheWVyKSk7CisgICAgY2x1dHRlcl9hY3Rvcl9zZXRf
cGFyZW50KGNoaWxkTGF5ZXIsIENMVVRURVJfQUNUT1IobGF5ZXIpKTsKKyAgICBjbHV0dGVyX2Fj
dG9yX3F1ZXVlX3JlbGF5b3V0KENMVVRURVJfQUNUT1IobGF5ZXIpKTsKKworICAgIGdfb2JqZWN0
X3VucmVmKGNoaWxkTGF5ZXIpOworfQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFN1Ymxh
eWVycyhHcmFwaGljc0xheWVyQWN0b3IqIGxheWVyLCBHcmFwaGljc0xheWVyQWN0b3JMaXN0JiBz
dWJMYXllcnMpCit7CisgICAgaWYgKCFzdWJMYXllcnMuc2l6ZSgpKSB7CisgICAgICAgIGdyYXBo
aWNzTGF5ZXJBY3RvclJlbW92ZUFsbChsYXllcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN1YkxheWVycy5zaXplKCk7ICsraSkgeworICAg
ICAgICBDbHV0dGVyQWN0b3IqIGxheWVyQWN0b3IgPSBDTFVUVEVSX0FDVE9SKHN1YkxheWVyc1tp
XS5nZXQoKSk7CisgICAgICAgIGNsdXR0ZXJfY29udGFpbmVyX2FkZF9hY3RvcihDTFVUVEVSX0NP
TlRBSU5FUihsYXllciksIGxheWVyQWN0b3IpOworICAgIH0KK30KKworR3JhcGhpY3NMYXllckNs
dXR0ZXI6OkxheWVyVHlwZSBncmFwaGljc0xheWVyQWN0b3JHZXRMYXllclR5cGUoR3JhcGhpY3NM
YXllckFjdG9yKiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2
ID0gbGF5ZXItPnByaXY7CisgICAgcmV0dXJuIHByaXYtPmxheWVyVHlwZTsKK30KKwordm9pZCBn
cmFwaGljc0xheWVyQWN0b3JTZXRMYXllclR5cGUoR3JhcGhpY3NMYXllckFjdG9yKiBsYXllciwg
R3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSBsYXllclR5cGUpCit7CisgICAgR3JhcGhp
Y3NMYXllckFjdG9yUHJpdmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIHByaXYtPmxheWVy
VHlwZSA9IGxheWVyVHlwZTsKK30KKwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xh
dGVYKEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGZsb2F0IHZhbHVlKQoreworICAgIEdyYXBo
aWNzTGF5ZXJBY3RvclByaXZhdGUqIHByaXYgPSBsYXllci0+cHJpdjsKKyAgICBwcml2LT50cmFu
c2xhdGVYID0gdmFsdWU7CisgICAgY2x1dHRlcl9hY3Rvcl9xdWV1ZV9yZWRyYXcoQ0xVVFRFUl9B
Q1RPUihsYXllcikpOworfQorCitmbG9hdCBncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVY
KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJp
dmF0ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIHJldHVybiBwcml2LT50cmFuc2xhdGVYOwor
fQorCit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclNldFRyYW5zbGF0ZVkoR3JhcGhpY3NMYXllckFj
dG9yKiBsYXllciwgZmxvYXQgdmFsdWUpCit7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0
ZSogcHJpdiA9IGxheWVyLT5wcml2OworICAgIHByaXYtPnRyYW5zbGF0ZVkgPSB2YWx1ZTsKKyAg
ICBjbHV0dGVyX2FjdG9yX3F1ZXVlX3JlZHJhdyhDTFVUVEVSX0FDVE9SKGxheWVyKSk7Cit9CisK
K2Zsb2F0IGdyYXBoaWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVkoR3JhcGhpY3NMYXllckFjdG9y
KiBsYXllcikKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2ID0gbGF5ZXIt
PnByaXY7CisgICAgcmV0dXJuIHByaXYtPnRyYW5zbGF0ZVk7Cit9CisKK3ZvaWQgZ3JhcGhpY3NM
YXllckFjdG9yU2V0RHJhd3NDb250ZW50KEdyYXBoaWNzTGF5ZXJBY3RvciogbGF5ZXIsIGdib29s
ZWFuIGRyYXdzQ29udGVudCkKK3sKKyAgICBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlKiBwcml2
ID0gbGF5ZXItPnByaXY7CisKKyAgICBpZiAoZHJhd3NDb250ZW50ID09IHByaXYtPmRyYXdzQ29u
dGVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpdi0+ZHJhd3NDb250ZW50ID0gZHJhd3ND
b250ZW50OworCisgICAgZ3JhcGhpY3NMYXllckFjdG9yVXBkYXRlVGV4dHVyZShsYXllcik7Cit9
CisKK2dib29sZWFuIGdyYXBoaWNzTGF5ZXJBY3RvckdldERyYXdzQ29udGVudChHcmFwaGljc0xh
eWVyQWN0b3IqIGxheWVyKQoreworICAgIHJldHVybiBsYXllci0+cHJpdi0+ZHJhd3NDb250ZW50
OworfQorCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVy
QWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NsdXR0ZXIvR3JhcGhp
Y3NMYXllckFjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDk2NWRhZmIwMzY0ZDAwNDdjMzA5NDhjZjk1OGUz
NDZjYjY3YjhjYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NsdXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgMjAxMSwgMjAxMiBDb2xsYWJvcmEgTGltaXRlZAorICogQ29weXJpZ2h0
IChDKSAyMDEyIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAqIHZlcnNpb24gMi4xLCBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIHBy
b2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBX
SVRIT1VUIEFOWQorICogV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgKiBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
cHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAor
ICogSW5jLiwgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0x
MzAxIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBHcmFwaGljc0xheWVyQWN0b3JfaCAKKyNkZWZp
bmUgR3JhcGhpY3NMYXllckFjdG9yX2ggCisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJ
TkcpCisKKyNpbmNsdWRlICJHcmFwaGljc0xheWVyQ2x1dHRlci5oIgorI2luY2x1ZGUgPGNsdXR0
ZXIvY2x1dHRlci5oPgorI2luY2x1ZGUgPGNvZ2wvY29nbC5oPgorI2luY2x1ZGUgPGdsaWItb2Jq
ZWN0Lmg+CisKK0dfQkVHSU5fREVDTFMKKworI2RlZmluZSBHUkFQSElDU19MQVlFUl9UWVBFX0FD
VE9SIGdyYXBoaWNzX2xheWVyX2FjdG9yX2dldF90eXBlKCkKKworI2RlZmluZSBHUkFQSElDU19M
QVlFUl9BQ1RPUihvYmopIFwKKyAgICAoR19UWVBFX0NIRUNLX0lOU1RBTkNFX0NBU1QoKG9iaiks
IFwKKyAgICBHUkFQSElDU19MQVlFUl9UWVBFX0FDVE9SLCBHcmFwaGljc0xheWVyQWN0b3IpKQor
CisjZGVmaW5lIEdSQVBISUNTX0xBWUVSX0FDVE9SX0NMQVNTKGtsYXNzKSBcCisgICAgKEdfVFlQ
RV9DSEVDS19DTEFTU19DQVNUKChrbGFzcyksIFwKKyAgICBHUkFQSElDU19MQVlFUl9UWVBFX0FD
VE9SLCBHcmFwaGljc0xheWVyQWN0b3JDbGFzcykpCisKKyNkZWZpbmUgR1JBUEhJQ1NfTEFZRVJf
SVNfQUNUT1Iob2JqKSBcCisgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFKChvYmopLCBc
CisgICAgR1JBUEhJQ1NfTEFZRVJfVFlQRV9BQ1RPUikpCisKKyNkZWZpbmUgR1JBUEhJQ1NfTEFZ
RVJfSVNfQUNUT1JfQ0xBU1Moa2xhc3MpIFwKKyAgICAoR19UWVBFX0NIRUNLX0NMQVNTX1RZUEUo
KGtsYXNzKSwgXAorICAgIEdSQVBISUNTX0xBWUVSX1RZUEVfQUNUT1IpKQorCisjZGVmaW5lIEdS
QVBISUNTX0xBWUVSX0FDVE9SX0dFVF9DTEFTUyhvYmopIFwKKyAgICAoR19UWVBFX0lOU1RBTkNF
X0dFVF9DTEFTUygob2JqKSwgXAorICAgIEdSQVBISUNTX0xBWUVSX1RZUEVfQUNUT1IsIEdyYXBo
aWNzTGF5ZXJBY3RvckNsYXNzKSkKKwordHlwZWRlZiBzdHJ1Y3QgX0dyYXBoaWNzTGF5ZXJBY3Rv
ciBHcmFwaGljc0xheWVyQWN0b3I7Cit0eXBlZGVmIHN0cnVjdCBfR3JhcGhpY3NMYXllckFjdG9y
Q2xhc3MgR3JhcGhpY3NMYXllckFjdG9yQ2xhc3M7Cit0eXBlZGVmIHN0cnVjdCBfR3JhcGhpY3NM
YXllckFjdG9yUHJpdmF0ZSBHcmFwaGljc0xheWVyQWN0b3JQcml2YXRlOworCisvKioKKyAqIEdy
YXBoaWNzTGF5ZXJBY3RvcjoKKyAqCisgKiBUaGUgY29udGVudHMgb2YgdGhpcyBzdHJ1Y3R1cmUg
YXJlIHByaXZhdGUgYW5kIHNob3VsZCBvbmx5IGJlIGFjY2Vzc2VkCisgKiB0aHJvdWdoIHRoZSBw
dWJsaWMgQVBJLgorICovCitzdHJ1Y3QgX0dyYXBoaWNzTGF5ZXJBY3RvciB7CisgICAgQ2x1dHRl
clJlY3RhbmdsZSBwYXJlbnQ7CisgICAgR3JhcGhpY3NMYXllckFjdG9yUHJpdmF0ZSAqcHJpdjsK
KyAgICBHTGlzdCAqY2hpbGRyZW47Cit9OworCitzdHJ1Y3QgX0dyYXBoaWNzTGF5ZXJBY3RvckNs
YXNzIHsKKyAgICBDbHV0dGVyUmVjdGFuZ2xlQ2xhc3MgcGFyZW50X2NsYXNzOworfTsKKworR1R5
cGUgZ3JhcGhpY3NfbGF5ZXJfYWN0b3JfZ2V0X3R5cGUodm9pZCkgR19HTlVDX0NPTlNUOworCitH
cmFwaGljc0xheWVyQWN0b3IqIGdyYXBoaWNzTGF5ZXJBY3Rvck5ldyhXZWJDb3JlOjpHcmFwaGlj
c0xheWVyQ2x1dHRlcjo6TGF5ZXJUeXBlKTsKK0dyYXBoaWNzTGF5ZXJBY3RvciogZ3JhcGhpY3NM
YXllckFjdG9yTmV3V2l0aENsaWVudChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ2x1dHRlcjo6TGF5
ZXJUeXBlLCBXZWJDb3JlOjpQbGF0Zm9ybUNsdXR0ZXJMYXllckNsaWVudCopOwordm9pZCBncmFw
aGljc0xheWVyQWN0b3JTZXRDbGllbnQoR3JhcGhpY3NMYXllckFjdG9yKiwgV2ViQ29yZTo6UGxh
dGZvcm1DbHV0dGVyTGF5ZXJDbGllbnQqKTsKK1dlYkNvcmU6OlBsYXRmb3JtQ2x1dHRlckxheWVy
Q2xpZW50KiBncmFwaGljc0xheWVyQWN0b3JHZXRDbGllbnQoR3JhcGhpY3NMYXllckFjdG9yKik7
Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3RvclJlbW92ZUFsbChHcmFwaGljc0xheWVyQWN0b3IqKTsK
K2NhaXJvX3N1cmZhY2VfdCogZ3JhcGhpY3NMYXllckFjdG9yR2V0U3VyZmFjZShHcmFwaGljc0xh
eWVyQWN0b3IqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0U3VyZmFjZShHcmFwaGljc0xh
eWVyQWN0b3IqLCBjYWlyb19zdXJmYWNlX3QqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9ySW52
YWxpZGF0ZVJlY3RhbmdsZShHcmFwaGljc0xheWVyQWN0b3IqLCBjb25zdCBXZWJDb3JlOjpGbG9h
dFJlY3QmKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0VHJhbnNmb3JtKEdyYXBoaWNzTGF5
ZXJBY3RvciosIGNvbnN0IENvZ2xNYXRyaXgqKTsKK3ZvaWQgZ3JhcGhpY3NMYXllckFjdG9yU2V0
QW5jaG9yUG9pbnQoR3JhcGhpY3NMYXllckFjdG9yKiwgZmxvYXQsIGZsb2F0LCBmbG9hdCk7Cit2
b2lkIGdyYXBoaWNzTGF5ZXJBY3RvckdldEFuY2hvclBvaW50KEdyYXBoaWNzTGF5ZXJBY3Rvcios
IGZsb2F0KiwgZmxvYXQqLCBmbG9hdCopOwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRTY3Jv
bGxQb3NpdGlvbihHcmFwaGljc0xheWVyQWN0b3IqLCBmbG9hdCwgZmxvYXQpOyAKK3ZvaWQgZ3Jh
cGhpY3NMYXllckFjdG9yU2V0VHJhbnNsYXRlWChHcmFwaGljc0xheWVyQWN0b3IqLCBmbG9hdCk7
CitmbG9hdCBncmFwaGljc0xheWVyQWN0b3JHZXRUcmFuc2xhdGVYKEdyYXBoaWNzTGF5ZXJBY3Rv
ciopOwordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRUcmFuc2xhdGVZKEdyYXBoaWNzTGF5ZXJB
Y3RvciosIGZsb2F0KTsKK2Zsb2F0IGdyYXBoaWNzTGF5ZXJBY3RvckdldFRyYW5zbGF0ZVkoR3Jh
cGhpY3NMYXllckFjdG9yKik7CitnaW50IGdyYXBoaWNzTGF5ZXJBY3RvckdldG5DaGlsZHJlbihH
cmFwaGljc0xheWVyQWN0b3IqKTsKK1dlYkNvcmU6OkdyYXBoaWNzTGF5ZXJDbHV0dGVyOjpMYXll
clR5cGUgZ3JhcGhpY3NMYXllckFjdG9yR2V0TGF5ZXJUeXBlKEdyYXBoaWNzTGF5ZXJBY3Rvciop
Owordm9pZCBncmFwaGljc0xheWVyQWN0b3JTZXRMYXllclR5cGUoR3JhcGhpY3NMYXllckFjdG9y
KiwgV2ViQ29yZTo6R3JhcGhpY3NMYXllckNsdXR0ZXI6OkxheWVyVHlwZSk7Cit2b2lkIGdyYXBo
aWNzTGF5ZXJBY3RvclNldFN1YmxheWVycyhHcmFwaGljc0xheWVyQWN0b3IqLCBXZWJDb3JlOjpH
cmFwaGljc0xheWVyQWN0b3JMaXN0Jik7CitnYm9vbGVhbiBncmFwaGljc0xheWVyQWN0b3JHZXRE
cmF3c0NvbnRlbnQoR3JhcGhpY3NMYXllckFjdG9yKik7Cit2b2lkIGdyYXBoaWNzTGF5ZXJBY3Rv
clNldERyYXdzQ29udGVudChHcmFwaGljc0xheWVyQWN0b3IqLCBnYm9vbGVhbiBkcmF3c0NvbnRl
bnQpOworCitHX0VORF9ERUNMUworCisjZW5kaWYgLy8gVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lU
SU5HKQorCisjZW5kaWYgLyogR3JhcGhpY3NMYXllckFjdG9yX2ggKi8KZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4OTlmZDgxMGNhYzJiZjZkNWEy
MjcwMjUyZjU3NDc2YjhjNTU3NDdhLi4zOGM1MThmNWExNDgwYjRhYjhjYjJkNDA3YTVkN2U2MTM2
MzQyMDdkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTYgQEAKKzIwMTItMTItMDkgIEpvb25lIEh1ciAgPGpvb25lLmh1ckBpbnRl
bC5jb20+CisKKyAgICAgICAgW0dUS10gQWRkIEdyYXBoaWNzTGF5ZXJBY3RvcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTE5NDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBHdXN0YXZvIE5vcm9uaGEgU2lsdmEuCisKKyAgICAgICAgQWRkIEdyYXBoaWNz
TGF5ZXJBY3RvciB0byB0aGUgbGlzdCBvZiBjbGFzc2VzIHRoYXQgY29udGFpbiBHT2JqZWN0cwor
ICAgICAgICBpbiB0aGUgc3R5bGUgY2hlY2tlciBzY3JpcHQgc28gdGhhdCBpdCBkb2VzIG5vdCBj
b21wbGFpbiBhYm91dCBHT2JqZWN0CisgICAgICAgIGNvZGluZyBzdHlsZS4KKworICAgICAgICAq
IFNjcmlwdHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weToKKwogMjAxMi0xMi0wOSAgSm9hbm1h
cmllIERpZ2dzICA8amRpZ2dzQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gYWNjZXNzaWJp
bGl0eS9wbGFjZWhvbGRlci5odG1sIGlzIGZhaWxpbmcKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvc3R5bGUvY2hlY2tlci5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5
bGUvY2hlY2tlci5weQppbmRleCA5Mzk1OTQ3MWZmNjIyNDZkMmMyOWFjMTIxYjg2YzFmNTRkYjY1
NzQzLi5jNTBhYmY2ZjAyMWRkZTAwNjM1NWMzN2RkNDJiM2QzZTIwMTk0NTg1IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIucHkKKysrIGIvVG9vbHMvU2Ny
aXB0cy93ZWJraXRweS9zdHlsZS9jaGVja2VyLnB5CkBAIC0yMjIsNiArMjIyLDggQEAgX1BBVEhf
UlVMRVNfU1BFQ0lGSUVSID0gWwogICAgICAgIi13aGl0ZXNwYWNlL2RlY2xhcmF0aW9uIl0pLAog
ICAgIChbIyBUaGVzZSBmaWxlcyBkZWZpbmUgR09iamVjdHMsIHdoaWNoIGltcGxpZXMgc29tZSBk
ZWZpbml0aW9ucyBvZgogICAgICAgIyB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBjb250YWluaW5n
IHVuZGVyc2NvcmVzLgorICAgICAgIlNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Ns
dXR0ZXIvR3JhcGhpY3NMYXllckFjdG9yLmNwcCIsCisgICAgICAiU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2x1dHRlci9HcmFwaGljc0xheWVyQWN0b3IuaCIsCiAgICAgICAiU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1l
cjEuY3BwIiwKICAgICAgICJTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvVmlkZW9TaW5rR1N0cmVhbWVyLmNwcCIsCiAgICAgICAiU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAiLAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>