<?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>14729</bug_id>
          
          <creation_ts>2007-07-23 11:53:42 -0700</creation_ts>
          <short_desc>[gtk] Implement FrameLoaderClientGdk::createFrame</short_desc>
          <delta_ts>2007-08-09 18:45:42 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>14857</dependson>
          <blocked>14725</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Holger Freyther">zecke</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aroben</cc>
    
    <cc>christian</cc>
    
    <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>3956</commentid>
    <comment_count>0</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-23 11:53:42 -0700</bug_when>
    <thetext>Due to CSS Frame&apos;s can overlap. This means one would have to make sure to deliver expose events in the same z-order as the one of the Render Tree and to get alpha between overlapping frames right.

The planned solution to this issue is the following:
   -Make Frame&apos;s not use any Gdk/Gtk resources
   -Create the FrameView on demand from within the FrameLoaderClientGdk
   -Make ScrollView not use any Gdk/Gtk resources and follow the Windows and Qt design which involves fixing PlatformScrollbar and properly implementing the HitEvent in a way robust across different styles/themes. The biggest issue with FrameView&apos;s will be handling GtkAdjustment to the outside and drawing scrollbars. E.g. the WebKitGtkPage will get gtk_widget_set_scroll_adjustments called and these need to be forwarded to the FrameView (everytime the FrameView gets created).
    -Make WebKitGtkPage something like a GtkDrawable and have a GdkWindow of the size of the viewport. All ScrollView&apos;s need to track there current scroll offset and relative position in their parent. ScrollView::update and the other invalidate methods need to invalidate the right rect of the outer GtkDrawable of the WebKitGtkPage.
     -WebKitGtkPage should behave like a GtkLayout and be embedable in a GtkScrolledWindow
     -ScrollView::addWidget should continue to work to allow embedding plugins at one point in time.
     -Big question of addWidget for ScrollView&apos;s is who is going to create the scrollbars? Who is going to forceLayout when we show/hide scrollbars?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3925</commentid>
    <comment_count>1</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-23 13:14:36 -0700</bug_when>
    <thetext>Add the Gtk keyword, even to the curl bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3487</commentid>
    <comment_count>2</comment_count>
      <attachid>15731</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-29 16:08:21 -0700</bug_when>
    <thetext>Created attachment 15731
Implement ScrollView similiar to win/qt

Mostly follow the Windows design (which works great):
The most controversal change is with Widget::setScrollViewControl. PlatformScrollbar uses a GtkWidget. In order to draw it correctly we need to have a proper GtkAllocation set on the widget. We set one when PlatformScrollbar::setRect gets called.

Now PlatformScrollbar is used by RenderFrame and ScrollView. In the case of ScrollView scrolling should not change the position of the ScrollBar. In Win/Qt this is achieved by translating the context before painting. As the PlatformScrollbar in Gtk+ is a GtkWidget I would like to avoid changing the GtkAllocation on every paint and treat it more like WebCore/plugins/win and handle it like/similiar geometryChanged to position it.
This leads to the controversial change in Widget to select which coordinate translation to use. Other solutions considered where to subclass PlatformScrollbar for ScrollView to change the placing behaviour.

This is just a current diff of the work in progress implementation and comments would be appreciated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3483</commentid>
    <comment_count>3</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-07-29 16:37:02 -0700</bug_when>
    <thetext>CCing Hyatt so he can look at the PlatformScrollBar changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3434</commentid>
    <comment_count>4</comment_count>
      <attachid>15748</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-30 12:42:18 -0700</bug_when>
    <thetext>Created attachment 15748
Implement ScrollView similiar to win/qt

It has the same controversal change as the previous attachment. This patch changes the following things:

  -It should apply against ToT
  -It handles getting embedded into a GtkScrolledWindow nicely by using GtkAdjustment

Known issues:
  -On destructing it seems I get ref counting of the PlatformScrollbar wrong.
  -We might create and destroy PlatformScrollbar too often (same as on Windows and not introduced by this patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3374</commentid>
    <comment_count>5</comment_count>
      <attachid>15754</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-31 07:19:21 -0700</bug_when>
    <thetext>Created attachment 15754
Implement ScrollView similiar to win/qt

Compared to the previous patch:

-Make it compile on case-sensitive filesystems (PlatformScrollbar.h vs. PlatformScrollBar.h)
-Add (again) refcounting to PlatformScrollbar and ScrollView
-Implement forall and unrealize in WebKitGtkPage to make issues on exit go away.
-Fixup some comments.

The biggest part of the patch is copy and paste from the windows port. The controversal change is in Widget to use one of the two possible IntRect conversion methods. I think this change is fine, other approaches would be to move this code to PlatformScrollbar or to subclass PlatformScrollbar and use that subclss in ScrollView.

I think this is commit-worthy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3375</commentid>
    <comment_count>6</comment_count>
      <attachid>15755</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-31 07:19:27 -0700</bug_when>
    <thetext>Created attachment 15755
Implement ScrollView similiar to win/qt

Compared to the previous patch:

-Make it compile on case-sensitive filesystems (PlatformScrollbar.h vs. PlatformScrollBar.h)
-Add (again) refcounting to PlatformScrollbar and ScrollView
-Implement forall and unrealize in WebKitGtkPage to make issues on exit go away.
-Fixup some comments.

The biggest part of the patch is copy and paste from the windows port. The controversal change is in Widget to use one of the two possible IntRect conversion methods. I think this change is fine, other approaches would be to move this code to PlatformScrollbar or to subclass PlatformScrollbar and use that subclss in ScrollView.

I think this is commit-worthy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3373</commentid>
    <comment_count>7</comment_count>
      <attachid>15756</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-31 07:19:48 -0700</bug_when>
    <thetext>Created attachment 15756
Implement ScrollView similiar to win/qt

Compared to the previous patch:

-Make it compile on case-sensitive filesystems (PlatformScrollbar.h vs. PlatformScrollBar.h)
-Add (again) refcounting to PlatformScrollbar and ScrollView
-Implement forall and unrealize in WebKitGtkPage to make issues on exit go away.
-Fixup some comments.

The biggest part of the patch is copy and paste from the windows port. The controversal change is in Widget to use one of the two possible IntRect conversion methods. I think this change is fine, other approaches would be to move this code to PlatformScrollbar or to subclass PlatformScrollbar and use that subclss in ScrollView.

I think this is commit-worthy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3370</commentid>
    <comment_count>8</comment_count>
      <attachid>15754</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-31 07:20:32 -0700</bug_when>
    <thetext>Comment on attachment 15754
Implement ScrollView similiar to win/qt

Duplicate attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3371</commentid>
    <comment_count>9</comment_count>
      <attachid>15755</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-31 07:21:05 -0700</bug_when>
    <thetext>Comment on attachment 15755
Implement ScrollView similiar to win/qt

Duplicate attachment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3305</commentid>
    <comment_count>10</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-01 09:07:17 -0700</bug_when>
    <thetext>I have one report that the Xserver hogs memory when scrolling. But I have no information beyond this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3328</commentid>
    <comment_count>11</comment_count>
      <attachid>15784</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-01 10:47:19 -0700</bug_when>
    <thetext>Created attachment 15784
Implement ScrollView similiar to win/qt to support createFrame

Changes due the Xserver leakage report:
The z-order painting patch introduced thig bug. The gdk_window_end_painting call was removed. As Xan pointed out in another bug report this window is double buffered any so we can remove the begin_paint call as well.

Interdiff:
 +    gdk_region_get_clipbox(event-&gt;region, &amp;clip);
-+    gdk_window_begin_paint_region(event-&gt;window, event-&gt;region);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>3135</commentid>
    <comment_count>12</comment_count>
    <who name="Christian Dywan">christian</who>
    <bug_when>2007-08-02 10:20:17 -0700</bug_when>
    <thetext>I tested the patch 15755 which caused the X server to eat memory when scrolling.

I can also confirm that patch 15784 is fine now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2936</commentid>
    <comment_count>13</comment_count>
      <attachid>15784</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-08-06 11:43:10 -0700</bug_when>
    <thetext>Comment on attachment 15784
Implement ScrollView similiar to win/qt to support createFrame

Clearing review flag as the patches in bug 14857 should be reviewed instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2697</commentid>
    <comment_count>14</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-08-09 18:45:42 -0700</bug_when>
    <thetext>Thanks to the reviewing effort of Niko and especially Adam this method and everything needed to implement it is in ToT. There is one known issue/race with GtkLayout and the positioning of ScrollViewScrollbar which will be addressed in another patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15731</attachid>
            <date>2007-07-29 16:08:21 -0700</date>
            <delta_ts>2007-07-30 12:42:18 -0700</delta_ts>
            <desc>Implement ScrollView similiar to win/qt</desc>
            <filename>gtk-scrollview-handling-r0.diff</filename>
            <type>text/plain</type>
            <size>63484</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHAg
Yi9XZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVMb2FkZXJDbGllbnRHZGsuY3BwCmluZGV4IGVkZWEw
YzMuLjBjZDk5ODcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNs
aWVudEdkay5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2Rr
LmNwcApAQCAtMjcxLDEyICsyNzEsMTIgQEAgdm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6bWFr
ZURvY3VtZW50VmlldygpIHsKICAgICBmcmFtZVZpZXctPmRlcmVmKCk7CiAgICAgCiAgICAgLyoK
LSAgICAgKiBzZXQgdGhlIEd0a0xheW91dCogb24gdGhlIEZyYW1lVmlldyBhbmQgbWFrZSBzdXJl
IHRvIHVzZSB0aGUgY3VycmVudCBnZW9tZXRyeSBvZgotICAgICAqIHRoZSBHdGtMYXlvdXQgZm9y
IHRoZSBGcmFtZVZpZXcuCisgICAgICogc2V0IHRoZSBXZWJLaXRHdGtQYWdlIChDb250YWluaW5n
IFdpbmRvdykgYW5kIG1ha2Ugc3VyZSB0byBnaXZlIGl0IGEgc2FuZSBkZWZhdWx0IGZyYW1lIGdl
b21ldHJ5LgogICAgICAqLwogICAgIFdlYktpdEd0a1BhZ2UqIHBhZ2UgPSBnZXRQYWdlRnJvbUZy
YW1lKG1fZnJhbWUpOwotICAgIGZyYW1lVmlldy0+c2V0R3RrV2lkZ2V0KEdUS19MQVlPVVQocGFn
ZSkpOwotICAgIGZyYW1lVmlldy0+dXBkYXRlR2VvbWV0cnkoR1RLX1dJREdFVChwYWdlKS0+YWxs
b2NhdGlvbi53aWR0aCwgR1RLX1dJREdFVChwYWdlKS0+YWxsb2NhdGlvbi5oZWlnaHQpOworICAg
IGZyYW1lVmlldy0+c2V0Q29udGFpbmluZ1dpbmRvdyhwYWdlKTsKKyAgICBmcmFtZVZpZXctPnNl
dEZyYW1lR2VvbWV0cnkoSW50UmVjdCgwLCAwLCBHVEtfV0lER0VUKHBhZ2UpLT5hbGxvY2F0aW9u
LndpZHRoLCBHVEtfV0lER0VUKHBhZ2UpLT5hbGxvY2F0aW9uLmhlaWdodCkpOworICAgIFdlYktp
dEd0azo6YXBwbHlBZGp1c3RtZW50cyhwYWdlLCBmcmFtZVZpZXcpOwogCiAgICAgLyoKICAgICAg
KiBUT0RPOiBVc2UgbWFyZ2lucyBsaWtlIFdlYlZpZXc/CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL1Njcm9sbFZpZXcuaCBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCmluZGV4
IDFjNWNkYzUuLmExOTkzMDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCkBAIC0zMiw3ICszMiw3IEBA
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KIAogI2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYg
c3RydWN0IF9HdGtMYXlvdXQgR3RrTGF5b3V0OwordHlwZWRlZiBzdHJ1Y3QgX0d0a0FkanVzdG1l
bnQgR3RrQWRqdXN0bWVudDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtMTUxLDEz
ICsxNTEsMjcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFBMQVRGT1JNKEdESykKICAgICAg
ICAgU2Nyb2xsVmlldygpOwogICAgICAgICB+U2Nyb2xsVmlldygpOworICAgICAgICB2aXJ0dWFs
IHZvaWQgc2V0R3RrQWRqdXN0bWVudHMoR3RrQWRqdXN0bWVudCogaGFkaiwgR3RrQWRqdXN0bWVu
dCogdmFkaik7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRQYXJlbnQoU2Nyb2xsVmlldyopOwor
CisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRS
ZWN0Jik7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldEd0a1dpZGdldChHdGtMYXlvdXQqIGxh
eW91dCk7CisgICAgICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydENoaWxkVG9TZWxmKGNvbnN0
IFdpZGdldCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgSW50UG9p
bnQgY29udmVydFNlbGZUb0NoaWxkKGNvbnN0IFdpZGdldCosIGNvbnN0IEludFBvaW50JikgY29u
c3Q7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0OwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHZW9tZXRyeShpbnQgd2lkdGgsIGludCBoZWlnaHQpOwor
CisgICAgICAgIEludFJlY3Qgd2luZG93UmVzaXplclJlY3QoKTsKKyAgICAgICAgYm9vbCByZXNp
emVyT3ZlcmxhcHNDb250ZW50KCkgY29uc3Q7CisgICAgICAgIHZvaWQgYWRqdXN0T3ZlcmxhcHBp
bmdTY3JvbGxiYXJDb3VudChpbnQgb3ZlcmxhcERlbHRhKTsKKworICAgICAgICB2b2lkIGFkZFRv
RGlydHlSZWdpb24oY29uc3QgSW50UmVjdCYpOworICAgICAgICB2b2lkIHNjcm9sbEJhY2tpbmdT
dG9yZShpbnQgZHgsIGludCBkeSwgY29uc3QgSW50UmVjdCYgc2Nyb2xsVmlld1JlY3QsIGNvbnN0
IEludFJlY3QmIGNsaXBSZWN0KTsKKyAgICAgICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmUoKTsK
ICAgICBwcml2YXRlOgotICAgICAgICB2b2lkIHVwZGF0ZVZpZXcoY29uc3QgSW50UmVjdCYsIGJv
b2wgbm93ID0gZmFsc2UpOwotICAgICAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAg
ICAgSW50U2l6ZSBtYXhpbXVtU2Nyb2xsKCkgY29uc3Q7CisgICAgICAgIHZvaWQgdXBkYXRlU2Ny
b2xsYmFycyhjb25zdCBJbnRTaXplJiBkZXNpcmVkT2Zmc2V0KTsKICAgICAgICAgY2xhc3MgU2Ny
b2xsVmlld1ByaXZhdGU7CiAgICAgICAgIFNjcm9sbFZpZXdQcml2YXRlKiBtX2RhdGE7CiAjZW5k
aWYKQEAgLTE4OCw2ICsyMDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsYXRm
b3JtU2Nyb2xsYmFyICp2ZXJ0aWNhbFNjcm9sbEJhcigpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToK
KyAgICAgICAgSGFzaFNldDxXaWRnZXQqPiogY2hpbGRyZW4oKTsKICAgICAgICAgdm9pZCB1cGRh
dGVTY3JvbGxiYXJzKGNvbnN0IEludFNpemUmIGRlc2lyZWRPZmZzZXQpOwogICAgICAgICBJbnRT
aXplIG1heGltdW1TY3JvbGwoKSBjb25zdDsKICAgICAgICAgY2xhc3MgU2Nyb2xsVmlld1ByaXZh
dGU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oIGIvV2ViQ29yZS9wbGF0
Zm9ybS9XaWRnZXQuaAppbmRleCA4MTM1YzNhLi5mYzFhOTg4IDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3BsYXRmb3JtL1dpZGdldC5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgKQEAgLTQx
LDggKzQxLDggQEAgdHlwZWRlZiBzdHJ1Y3QgSFdORF9fKiBIV05EOwogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShHREspCi10eXBlZGVmIHN0cnVjdCBfR2RrRHJhd2FibGUgR2RrRHJhd2FibGU7CiB0
eXBlZGVmIHN0cnVjdCBfR3RrV2lkZ2V0IEd0a1dpZGdldDsKK3R5cGVkZWYgc3RydWN0IF9XZWJL
aXRHdGtQYWdlIFdlYktpdEd0a1BhZ2U7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQpAQCAt
MTM2LDEwICsxMzYsMzAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShHREspCi0gICAgICAgIFdpZGdldChHdGtXaWRnZXQqKTsKLSAgICAgICAgdmlydHVhbCB2
b2lkIHNldEd0a1dpZGdldChHdGtXaWRnZXQqKTsKLSAgICAgICAgR2RrRHJhd2FibGUqIGdka0Ry
YXdhYmxlKCkgY29uc3Q7Ci0gICAgICAgIEd0a1dpZGdldCogZ3RrV2lkZ2V0KCkgY29uc3Q7Cisg
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRJbnRlcm5hbEd0a1dpZGdldChHdGtXaWRnZXQqKTsKKyAg
ICAgICAgR3RrV2lkZ2V0KiBpbnRlcm5hbEd0a1dpZGdldCgpIGNvbnN0OworCisgICAgICAgIHZp
cnR1YWwgdm9pZCBzZXRQYXJlbnQoU2Nyb2xsVmlldyopOworICAgICAgICBTY3JvbGxWaWV3KiBw
YXJlbnQoKSBjb25zdDsKKworICAgICAgICB2b2lkIHNldENvbnRhaW5pbmdXaW5kb3coV2ViS2l0
R3RrUGFnZSopOworICAgICAgICBXZWJLaXRHdGtQYWdlKiBjb250YWluaW5nV2luZG93KCkgY29u
c3Q7CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0OworCisg
ICAgICAgIEludFJlY3QgY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0Jikg
Y29uc3Q7CisgICAgICAgIEludFBvaW50IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3Qg
SW50UG9pbnQmKSBjb25zdDsKKyAgICAgICAgSW50UG9pbnQgY29udmVydEZyb21Db250YWluaW5n
V2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCBJbnRQb2lu
dCBjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiwgY29uc3QgSW50UG9pbnQmKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0U2VsZlRvQ2hpbGQoY29uc3QgV2lk
Z2V0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKworICAgICAgICBib29sIHN1cHByZXNzSW52
YWxpZGF0aW9uKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0U3VwcHJlc3NJbnZhbGlkYXRpb24o
Ym9vbCk7CisKKyAgICAgICAgdm9pZCBzZXRTY3JvbGxWaWV3Q29udHJvbCgpOworICAgIHByb3Rl
Y3RlZDoKKyAgICAgICAgdm9pZCB1cGRhdGVOYXRpdmVBbGxvY2F0aW9uKCkgY29uc3Q7CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKFFUKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
UGxhdGZvcm1TY3JlZW5HZGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3Jl
ZW5HZGsuY3BwCmluZGV4IGYzNzgyMTUuLjFiODViMDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ2RrL1BsYXRmb3JtU2NyZWVuR2RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dk
ay9QbGF0Zm9ybVNjcmVlbkdkay5jcHAKQEAgLTMwLDcgKzMwLDkgQEAKIAogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiV2lkZ2V0LmgiCi0jaW5jbHVkZSA8Z2RrL2dkay5o
PgorI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNp
bmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKQEAgLTM4LDEw
ICs0MCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGludCBzY3JlZW5EZXB0aChXaWRnZXQq
IHdpZGdldCkgCiB7Ci0gICAgQVNTRVJUKHdpZGdldC0+Z2RrRHJhd2FibGUoKSk7CisgICAgQVNT
RVJUKHdpZGdldC0+Y29udGFpbmluZ1dpbmRvdygpICYmIHdpZGdldC0+Y29udGFpbmluZ1dpbmRv
dygpLT5iaW5fd2luZG93KTsKIAogICAgIGdpbnQgZHVtbXksIGRlcHRoOwotICAgIGdka193aW5k
b3dfZ2V0X2dlb21ldHJ5KHdpZGdldC0+Z2RrRHJhd2FibGUoKSwgJmR1bW15LCAmZHVtbXksICZk
dW1teSwgJmR1bW15LCAmZGVwdGgpOworICAgIGdka193aW5kb3dfZ2V0X2dlb21ldHJ5KHdpZGdl
dC0+Y29udGFpbmluZ1dpbmRvdygpLT5iaW5fd2luZG93LCAmZHVtbXksICZkdW1teSwgJmR1bW15
LCAmZHVtbXksICZkZXB0aCk7CiAgICAgcmV0dXJuIGRlcHRoOwogfQogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5jcHAKaW5kZXggNWNhMTI0MC4uZmU5Yzc1
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHZGsu
Y3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNwcApA
QCAtNDksNyArNDksNyBAQCBQbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIoU2Ny
b2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aQogICAgIGd0a193aWRnZXRf
c2hvdyhHVEtfV0lER0VUKHNjcm9sbEJhcikpOwogICAgIGdfc2lnbmFsX2Nvbm5lY3QoR19PQkpF
Q1Qoc2Nyb2xsQmFyKSwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExCQUNLKFBsYXRmb3JtU2Nyb2xs
YmFyOjpndGtWYWx1ZUNoYW5nZWQpLCB0aGlzKTsKIAotICAgIHNldEd0a1dpZGdldChHVEtfV0lE
R0VUKHNjcm9sbEJhcikpOworICAgIHNldEludGVybmFsR3RrV2lkZ2V0KEdUS19XSURHRVQoc2Ny
b2xsQmFyKSk7CiAKICAgICAvKgogICAgICAqIGFzc2lnbiBhIHNhbmUgZGVmYXVsdCB3aWR0aCBh
bmQgaGVpZ2h0IHRvIHRoZSBTY3JvbGxCYXIsIG90aGVyd2lzZQpAQCAtNTcsNiArNTcsNyBAQCBQ
bGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIoU2Nyb2xsYmFyQ2xpZW50KiBjbGll
bnQsIFNjcm9sbGJhck9yaWVudGF0aQogICAgICAqLwogICAgIHJlc2l6ZShQbGF0Zm9ybVNjcm9s
bGJhcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpLAogICAgICAgICAgICBQbGF0Zm9ybVNj
cm9sbGJhcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpKTsgICAgCisgICAgZ2VvbWV0cnlDaGFu
Z2VkKCk7CiAKICAgICBnX29iamVjdF9yZWYoR19PQkpFQ1Qoc2Nyb2xsQmFyKSk7CiAgICAgZ3Rr
X29iamVjdF9zaW5rKEdUS19PQkpFQ1Qoc2Nyb2xsQmFyKSk7CkBAIC02Nyw4ICs2OCw4IEBAIFBs
YXRmb3JtU2Nyb2xsYmFyOjp+UGxhdGZvcm1TY3JvbGxiYXIoKQogICAgIC8qCiAgICAgICogdGhl
IFdpZGdldCBkb2VzIG5vdCB0YWtlIG92ZXIgb3duZXJzaGlwLgogICAgICAqLwotICAgIGd0a193
aWRnZXRfZGVzdHJveShndGtXaWRnZXQoKSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoR19PQkpFQ1Qo
Z3RrV2lkZ2V0KCkpKTsKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koaW50ZXJuYWxHdGtXaWRnZXQo
KSk7CisgICAgZ19vYmplY3RfdW5yZWYoR19PQkpFQ1QoaW50ZXJuYWxHdGtXaWRnZXQoKSkpOwog
fQogCiBpbnQgUGxhdGZvcm1TY3JvbGxiYXI6OndpZHRoKCkgY29uc3QKQEAgLTExMSw2ICsxMTIs
NyBAQCB2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlByb3BvcnRpb24oKQogdm9p
ZCBQbGF0Zm9ybVNjcm9sbGJhcjo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAg
IHNldEZyYW1lR2VvbWV0cnkocmVjdCk7CisgICAgdXBkYXRlTmF0aXZlQWxsb2NhdGlvbigpOwog
fQogCiB2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpndGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVu
dCosIFBsYXRmb3JtU2Nyb2xsYmFyKiB0aGF0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhl
bWVHZGsuY3BwCmluZGV4IDk3NTdkZTguLmM4ZjU2NWYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxh
dGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dkay9S
ZW5kZXJUaGVtZUdkay5jcHAKQEAgLTE3NSwxMCArMTc1LDExIEBAIGJvb2wgUmVuZGVyVGhlbWVH
ZGs6OnBhaW50Q2hlY2tib3goUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mCiB7CiAgICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB0aGluZyB0byBkbz8KICAg
ICBHdGtXaWRnZXQqIGNoZWNrYm94ID0gZ3RrQ2hlY2tib3goKTsKKyAgICBJbnRQb2ludCBwb3Mg
PSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CiAgICAgZ3RrX3Bh
aW50X2NoZWNrKGNoZWNrYm94LT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAg
ICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgaXNDaGVja2VkKG8pID8gR1RLX1NI
QURPV19JTiA6IEdUS19TSEFET1dfT1VULAogICAgICAgICAgICAgICAgICAgICBOVUxMLCBjaGVj
a2JveCwgImNoZWNrYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAgcmVjdC54KCksIHJlY3Qu
eSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICBw
b3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgcmV0
dXJuIGZhbHNlOwogfQpAQCAtMjA3LDEwICsyMDgsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZUdkazo6
cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JgogeyAKICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwogICAgIEd0
a1dpZGdldCogcmFkaW8gPSBndGtSYWRpb0J1dHRvbigpOworICAgIEludFBvaW50IHBvcyA9IGku
Y29udGV4dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKICAgICBndGtfcGFpbnRf
b3B0aW9uKHJhZGlvLT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAgICAg
ICAgICAgICAgICAgZGV0ZXJtaW5lU3RhdGUobyksIGlzQ2hlY2tlZChvKSA/IEdUS19TSEFET1df
SU4gOiBHVEtfU0hBRE9XX09VVCwKICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHJhZGlvLCAi
cmFkaW9idXR0b24iLAotICAgICAgICAgICAgICAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLCBy
ZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgcG9zLngo
KSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIAogICAgIHJldHVybiBm
YWxzZTsKIH0KQEAgLTIxOSwxMCArMjIxLDExIEBAIGJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mCiB7
IAogICAgIC8vIEZJWE1FOiBzaG91bGQgdXNlIHRoZW1lLWF3YXJlIGRyYXdpbmcuIFRoaXMgc2hv
dWxkIGhvbm9yIHRoZSBzdGF0ZSBhcyB3ZWxsCiAgICAgR3RrV2lkZ2V0KiBidXR0b24gPSBndGtC
dXR0b24oKTsKKyAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJl
Y3QubG9jYXRpb24oKSk7CiAgICAgZ3RrX3BhaW50X2JveChidXR0b24tPnN0eWxlLCBpLmNvbnRl
eHQtPmdka0RyYXdhYmxlKCksCiAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwg
aXNDaGVja2VkKG8pID8gR1RLX1NIQURPV19JTiA6IEdUS19TSEFET1dfT1VULAogICAgICAgICAg
ICAgICAgICAgTlVMTCwgYnV0dG9uLCAiYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgIHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAg
ICAgICAgIHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAg
ICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dkay9T
Y3JvbGxWaWV3R2RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3Bw
CmluZGV4IDNhZjg5Y2MuLjljNTBjMzggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1Njcm9sbFZpZXdHZGsuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdH
ZGsuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwNyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAogICog
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKgpAQCAtMzcs
NiArMzcsMTEgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIndlYmtpdGd0a3Bh
Z2UuaCIKIAogI2luY2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDxndGsvZ3RrLmg+CkBAIC00
NSwzMCArNTAsMTQ4IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUKKy8qCisgKiBUaGUgZGVz
aWduIGlzIGEgY29weSBvZiB0aGUgV2luZG93cyBTY3JvbGxWaWV3IGZyb20gcGxhdGZvcm0vd2lu
L1Njcm9sbFZpZXdXaW4uY3BwCisgKiB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhbmdlcy9kaWZmaWN1
bHRpZXMuCisgKiBXZSBjYW4gbm90IHVzZSBQbGF0Zm9ybVNjcm9sbGJhciBkaXJlY3RseSBkdWUg
dGhlIHdheSBzY3JvbGxpbmcgd29ya3Mgb24gR3RrKy4gRS5nLgorICogaWYgd2UgZ2V0IGVtYmVk
ZGVkIGludG8gYSBHdGtTY3JvbGxlZFdpbmRvdyB3ZSBnZXQgdHdvIEd0a0FkanVzdG1lbnQgc2V0
IGFuZCBtdXNuJ3QKKyAqIGRyYXcvcGxhY2Ugc2Nyb2xsYmFycyBvdXJzZWxmLgorICoKKyAqLwor
Y2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUgOiBwdWJsaWMgU2Nyb2xsYmFyQ2xp
ZW50CiB7CiBwdWJsaWM6Ci0gICAgU2Nyb2xsVmlld1ByaXZhdGUoKQotICAgICAgICA6IGhhc1N0
YXRpY0JhY2tncm91bmQoZmFsc2UpCi0gICAgICAgICwgc3VwcHJlc3NTY3JvbGxiYXJzKGZhbHNl
KQorICAgIFNjcm9sbFZpZXdQcml2YXRlKFNjcm9sbFZpZXcqIF92aWV3KQorICAgICAgICA6IHZp
ZXcoX3ZpZXcpCisgICAgICAgICwgaGFzU3RhdGljQmFja2dyb3VuZChmYWxzZSkKKyAgICAgICAg
LCBzY3JvbGxiYXJzU3VwcHJlc3NlZChmYWxzZSkKKyAgICAgICAgLCBzY3JvbGxiYXJzQXZvaWRp
bmdSZXNpemVyKDApCiAgICAgICAgICwgdlNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKICAg
ICAgICAgLCBoU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQotICAgICAgICAsIGxheW91dCgw
KQogICAgICAgICAsIHNjcm9sbEJhcnNOZWVkVXBkYXRlKGZhbHNlKQotICAgIHsgfQorICAgICAg
ICAsIGluVXBkYXRlU2Nyb2xsYmFycyhmYWxzZSkKKyAgICAgICAgLCB2QWRqKDApCisgICAgICAg
ICwgaEFkaigwKQorICAgIHt9CisKKyAgICB+U2Nyb2xsVmlld1ByaXZhdGUoKQorICAgIHsKKyAg
ICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihmYWxzZSk7CisgICAgICAgIHNldEhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsKKyAgICB9CiAKKyAgICB2b2lkIHNjcm9sbEJhY2tpbmdT
dG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CisKKyAgICB2b2lkIHNldEhhc0hvcml6
b250YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpOworICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3Jv
bGxiYXIoYm9vbCBoYXNCYXIpOworCisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3Jv
bGxiYXIqKTsKKyAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKKwor
ICAgIFNjcm9sbFZpZXcqIHZpZXc7CiAgICAgYm9vbCBoYXNTdGF0aWNCYWNrZ3JvdW5kOwotICAg
IGJvb2wgc3VwcHJlc3NTY3JvbGxiYXJzOworICAgIGJvb2wgc2Nyb2xsYmFyc1N1cHByZXNzZWQ7
CisgICAgaW50IHNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXI7CiAgICAgU2Nyb2xsYmFyTW9kZSB2
U2Nyb2xsYmFyTW9kZTsKICAgICBTY3JvbGxiYXJNb2RlIGhTY3JvbGxiYXJNb2RlOwotICAgIEd0
a0xheW91dCAqbGF5b3V0OworICAgIFJlZlB0cjxQbGF0Zm9ybVNjcm9sbGJhcj4gdkJhcjsKKyAg
ICBSZWZQdHI8UGxhdGZvcm1TY3JvbGxiYXI+IGhCYXI7CisgICAgR3RrQWRqdXN0bWVudCogdkFk
ajsKKyAgICBHdGtBZGp1c3RtZW50KiBoQWRqOworICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0Owog
ICAgIEludFNpemUgY29udGVudHNTaXplOwotICAgIEludFNpemUgdmlld1BvcnRTaXplOwogICAg
IGJvb2wgc2Nyb2xsQmFyc05lZWRVcGRhdGU7CisgICAgYm9vbCBpblVwZGF0ZVNjcm9sbGJhcnM7
CisgICAgSGFzaFNldDxXaWRnZXQqPiBjaGlsZHJlbjsKIH07CiAKK3ZvaWQgU2Nyb2xsVmlldzo6
U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIp
Cit7CisgICAgaWYgKFNjcm9sbGJhcjo6aGFzUGxhdGZvcm1TY3JvbGxiYXJzKCkpIHsKKyAgICAg
ICAgaWYgKGhhc0JhciAmJiAhaEJhcikgeworICAgICAgICAgICAgaEJhciA9IG5ldyBQbGF0Zm9y
bVNjcm9sbGJhcih0aGlzLCBIb3Jpem9udGFsU2Nyb2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsK
KyAgICAgICAgICAgIGhCYXItPnNldFNjcm9sbFZpZXdDb250cm9sKCk7CisgICAgICAgICAgICB2
aWV3LT5hZGRDaGlsZChoQmFyLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghaGFzQmFyICYm
IGhCYXIpIHsKKyAgICAgICAgICAgIHZpZXctPnJlbW92ZUNoaWxkKGhCYXIuZ2V0KCkpOworICAg
ICAgICAgICAgaEJhciA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmll
dzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGJvb2wgaGFzQmFy
KQoreworICAgIGlmIChTY3JvbGxiYXI6Omhhc1BsYXRmb3JtU2Nyb2xsYmFycygpKSB7CisgICAg
ICAgIGlmIChoYXNCYXIgJiYgIXZCYXIpIHsKKyAgICAgICAgICAgIHZCYXIgPSBuZXcgUGxhdGZv
cm1TY3JvbGxiYXIodGhpcywgVmVydGljYWxTY3JvbGxiYXIsIFJlZ3VsYXJTY3JvbGxiYXIpOwor
ICAgICAgICAgICAgdkJhci0+c2V0U2Nyb2xsVmlld0NvbnRyb2woKTsKKyAgICAgICAgICAgIHZp
ZXctPmFkZENoaWxkKHZCYXIuZ2V0KCkpOworICAgICAgICB9IGVsc2UgaWYgKCFoYXNCYXIgJiYg
dkJhcikgeworICAgICAgICAgICAgdmlldy0+cmVtb3ZlQ2hpbGQodkJhci5nZXQoKSk7CisgICAg
ICAgICAgICB2QmFyID0gMDsKKyAgICAgICAgfQorICAgIH0KK30KKworCit2b2lkIFNjcm9sbFZp
ZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUoY29uc3QgSW50U2l6ZSYg
c2Nyb2xsRGVsdGEpCit7CisgICAgLy8gU2luY2Ugc2Nyb2xsaW5nIGlzIGRvdWJsZSBidWZmZXJl
ZCwgd2Ugd2lsbCBiZSBibGl0dGluZyB0aGUgc2Nyb2xsIHZpZXcncyBpbnRlcnNlY3Rpb24KKyAg
ICAvLyB3aXRoIHRoZSBjbGlwIHJlY3QgZXZlcnkgdGltZSB0byBrZWVwIGl0IHNtb290aC4KKyAg
ICBJbnRSZWN0IGNsaXBSZWN0ID0gdmlldy0+d2luZG93Q2xpcFJlY3QoKTsKKyAgICBJbnRSZWN0
IHNjcm9sbFZpZXdSZWN0ID0gdmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhJbnRSZWN0
KDAsIDAsIHZpZXctPnZpc2libGVXaWR0aCgpLCB2aWV3LT52aXNpYmxlSGVpZ2h0KCkpKTsKKwor
ICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IGNsaXBSZWN0OworICAgIHVwZGF0ZVJlY3QuaW50ZXJz
ZWN0KHNjcm9sbFZpZXdSZWN0KTsKKworICAgIC8vRklYTUUgdXBkYXRlIGhlcmU/CisKKyAgICBp
ZiAoIWhhc1N0YXRpY0JhY2tncm91bmQpIC8vIFRoZSBtYWluIGZyYW1lIGNhbiBqdXN0IGJsaXQg
dGhlIFdlYlZpZXcgd2luZG93CisgICAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gYmxpdCBz
dWJmcmFtZXMgd2l0aG91dCBibGl0dGluZyBvdmVybGFwcGluZyBjb250ZW50CisgICAgICAgdmll
dy0+c2Nyb2xsQmFja2luZ1N0b3JlKC1zY3JvbGxEZWx0YS53aWR0aCgpLCAtc2Nyb2xsRGVsdGEu
aGVpZ2h0KCksIHNjcm9sbFZpZXdSZWN0LCBjbGlwUmVjdCk7CisgICAgZWxzZSAgeworICAgICAg
IC8vIFdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJlcGFpbnQgdGhlIGVudGlyZSBiYWNraW5nIHN0
b3JlLiAgRG8gaXQgbm93IGJlZm9yZSBtb3ZpbmcgdGhlCisgICAgICAgLy8gcGx1Z2lucy4KKyAg
ICAgICB2aWV3LT5hZGRUb0RpcnR5UmVnaW9uKHVwZGF0ZVJlY3QpOworICAgICAgIHZpZXctPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIH0KKworICAgIHZpZXctPmdlb21ldHJ5Q2hhbmdlZCgp
OworCisgICAgLy8gTm93IHVwZGF0ZSB0aGUgd2luZG93ICh3aGljaCBzaG91bGQgZG8gbm90aGlu
ZyBidXQgYSBibGl0IG9mIHRoZSBiYWNraW5nIHN0b3JlJ3MgdXBkYXRlUmVjdCBhbmQgc28gc2hv
dWxkCisgICAgLy8gYmUgdmVyeSBmYXN0KS4KKyAgICB2aWV3LT51cGRhdGUoKTsKK30KKwordm9p
ZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6dmFsdWVDaGFuZ2VkKFNjcm9sbGJhciog
YmFyKQoreworICAgIC8vIEZpZ3VyZSBvdXQgaWYgd2UgcmVhbGx5IG1vdmVkLgorICAgIEludFNp
emUgbmV3T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0OworICAgIGlmIChiYXIpIHsKKyAgICAgICAgaWYg
KGJhciA9PSBoQmFyKQorICAgICAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKGJhci0+dmFsdWUo
KSk7CisgICAgICAgIGVsc2UgaWYgKGJhciA9PSB2QmFyKQorICAgICAgICAgICAgbmV3T2Zmc2V0
LnNldEhlaWdodChiYXItPnZhbHVlKCkpOworICAgIH0KKyAgICBJbnRTaXplIHNjcm9sbERlbHRh
ID0gbmV3T2Zmc2V0IC0gc2Nyb2xsT2Zmc2V0OworICAgIGlmIChzY3JvbGxEZWx0YSA9PSBJbnRT
aXplKCkpCisgICAgICAgIHJldHVybjsKKyAgICBzY3JvbGxPZmZzZXQgPSBuZXdPZmZzZXQ7CisK
KyAgICBpZiAoc2Nyb2xsYmFyc1N1cHByZXNzZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHNj
cm9sbEJhY2tpbmdTdG9yZShzY3JvbGxEZWx0YSk7CisgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3
Kj4odmlldyktPmZyYW1lKCktPnNlbmRTY3JvbGxFdmVudCgpOworfQorCitJbnRSZWN0IFNjcm9s
bFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjp3aW5kb3dDbGlwUmVjdCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHZpZXcpLT53aW5kb3dDbGlwUmVj
dChmYWxzZSk7Cit9CisKIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXcoKQotICAgIDogbV9kYXRhKG5l
dyBTY3JvbGxWaWV3UHJpdmF0ZSkKKyAgICA6IG1fZGF0YShuZXcgU2Nyb2xsVmlld1ByaXZhdGUo
dGhpcykpCiB7fQogCiBTY3JvbGxWaWV3Ojp+U2Nyb2xsVmlldygpCkBAIC03Niw0MyArMTk5LDYw
IEBAIFNjcm9sbFZpZXc6On5TY3JvbGxWaWV3KCkKICAgICBkZWxldGUgbV9kYXRhOwogfQogCi12
b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVZpZXcoY29uc3QgSW50UmVjdCYgdXBkYXRlUmVjdCwgYm9v
bCBub3cpCit2b2lkIFNjcm9sbFZpZXc6OnNldEd0a0FkanVzdG1lbnRzKEd0a0FkanVzdG1lbnQq
IGhhZGosIEd0a0FkanVzdG1lbnQqIHZhZGopCiB7Ci0gICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7
IHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRh
dGVSZWN0LmhlaWdodCgpIH07Ci0gICAgR2RrRHJhd2FibGUqIGdka2RyYXdhYmxlID0gV2lkZ2V0
OjpnZGtEcmF3YWJsZSgpOwotICAgIGlmIChHREtfSVNfV0lORE9XKGdka2RyYXdhYmxlKSkgewot
ICAgICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdES19XSU5ET1coZ2RrZHJhd2FibGUpOwotICAg
ICAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKLSAg
ICAgICAgaWYgKG5vdykKLSAgICAgICAgICAgIGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVzKHdp
bmRvdywgdHJ1ZSk7Ci0gICAgfQorICAgIG1fZGF0YS0+aEFkaiA9IGhhZGo7CisgICAgbV9kYXRh
LT52QWRqID0gdmFkajsKIH0KIAogdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25z
dCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIG5vdykKIHsKLSAgICB1cGRhdGVWaWV3KHVwZGF0
ZVJlY3QsIG5vdyk7CisgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IGNvbnRlbnRzVG9XaW5kb3codXBkYXRl
UmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IGNvbnRhaW5pbmdXaW5kb3dSZWN0ID0gdXBk
YXRlUmVjdDsKKyAgICBjb250YWluaW5nV2luZG93UmVjdC5zZXRMb2NhdGlvbih3aW5kb3dQb2lu
dCk7CisKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgY29udGFpbmluZ1dpbmRvd1JlY3QueCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nV2luZG93UmVjdC55KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LndpZHRoKCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LmhlaWdodCgpIH07
CisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBjb250YWluaW5nV2luZG93KCktPmJpbl93aW5kb3c7
CisKKyAgICBpZiAod2luZG93KQorICAgICAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdCh3
aW5kb3csICZyZWN0LCB0cnVlKTsKKworICAgIC8vIENhY2hlIHRoZSBkaXJ0eSBzcG90LgorICAg
IGFkZFRvRGlydHlSZWdpb24oY29udGFpbmluZ1dpbmRvd1JlY3QpOworCisgICAgaWYgKG5vdyAm
JiB3aW5kb3cpCisgICAgICAgIGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVzKHdpbmRvdywgdHJ1
ZSk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlKCkKIHsKLSAgICBBU1NFUlQoZ3RrV2lk
Z2V0KCkpOwotICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhndGtXaWRnZXQoKSk7CisgICAgQVNT
RVJUKGNvbnRhaW5pbmdXaW5kb3coKSk7CisKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgMCwg
MCwgbV9kYXRhLT5jb250ZW50c1NpemUud2lkdGgoKSwgbV9kYXRhLT5jb250ZW50c1NpemUuaGVp
Z2h0KCkgfTsKKyAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdChjb250YWluaW5nV2luZG93
KCktPmJpbl93aW5kb3csICZyZWN0LCB0cnVlKTsKIAotICAgIGlmIChtX2RhdGEtPnNjcm9sbEJh
cnNOZWVkVXBkYXRlKQotICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAgaWYgKG1fZGF0
YS0+c2Nyb2xsQmFyc05lZWRVcGRhdGUpIHsKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2Rh
dGEtPnNjcm9sbE9mZnNldCk7CisgICAgICAgIGdlb21ldHJ5Q2hhbmdlZCgpOworICAgIH0KIH0K
IAogaW50IFNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1f
ZGF0YS0+dmlld1BvcnRTaXplLndpZHRoKCk7CisgICAgcmV0dXJuIHdpZHRoKCkgLSAobV9kYXRh
LT52QmFyID8gbV9kYXRhLT52QmFyLT53aWR0aCgpIDogMCk7CiB9CiAKIGludCBTY3JvbGxWaWV3
Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLT52aWV3UG9ydFNp
emUuaGVpZ2h0KCk7CisgICAgcmV0dXJuIGhlaWdodCgpIC0gKG1fZGF0YS0+aEJhciA/IG1fZGF0
YS0+aEJhci0+aGVpZ2h0KCkgOiAwKTsKIH0KIAotLy8gUmVnaW9uIG9mIHRoZSBjb250ZW50IGN1
cnJlbnRseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydCBpbiB0aGUgY29udGVudCB2aWV3J3MgY29v
cmRpbmF0ZSBzeXN0ZW0uCiBGbG9hdFJlY3QgU2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gRmxvYXRSZWN0KGNvbnRlbnRzWCgpLCBjb250ZW50c1ko
KSwgdmlzaWJsZVdpZHRoKCksIHZpc2libGVIZWlnaHQoKSk7CkBAIC0xMzgsMjMgKzI3OCwxNyBA
QCB2b2lkIFNjcm9sbFZpZXc6OnJlc2l6ZUNvbnRlbnRzKGludCB3LCBpbnQgaCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgbV9kYXRhLT5jb250ZW50c1NpemUgPSBuZXdTaXplOwotICAgIAotICAg
IGlmIChtX2RhdGEtPmxheW91dCkgewotICAgICAgICBndGtfbGF5b3V0X3NldF9zaXplKG1fZGF0
YS0+bGF5b3V0LCB3LCBoKTsKLSAgICAgICAgbV9kYXRhLT5zY3JvbGxCYXJzTmVlZFVwZGF0ZSA9
IHRydWU7Ci0gICAgfQorICAgIG1fZGF0YS0+c2Nyb2xsQmFyc05lZWRVcGRhdGUgPSB0cnVlOwog
fQogCiBpbnQgU2Nyb2xsVmlldzo6Y29udGVudHNYKCkgY29uc3QKIHsKLSAgICBnX3JldHVybl92
YWxfaWZfZmFpbChndGtfbGF5b3V0X2dldF9oYWRqdXN0bWVudChtX2RhdGEtPmxheW91dCksIDAp
OwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGd0a19hZGp1c3RtZW50X2dldF92YWx1ZShn
dGtfbGF5b3V0X2dldF9oYWRqdXN0bWVudChtX2RhdGEtPmxheW91dCkpKTsKKyAgICByZXR1cm4g
c2Nyb2xsT2Zmc2V0KCkud2lkdGgoKTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzWSgp
IGNvbnN0CiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ3RrX2xheW91dF9nZXRfdmFkanVz
dG1lbnQobV9kYXRhLT5sYXlvdXQpLCAwKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihn
dGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoZ3RrX2xheW91dF9nZXRfdmFkanVzdG1lbnQobV9kYXRh
LT5sYXlvdXQpKSk7CisgICAgcmV0dXJuIHNjcm9sbE9mZnNldCgpLmhlaWdodCgpOwogfQogCiBp
bnQgU2Nyb2xsVmlldzo6Y29udGVudHNXaWR0aCgpIGNvbnN0CkBAIC0xNjksMjcgKzMwMywyNiBA
QCBpbnQgU2Nyb2xsVmlldzo6Y29udGVudHNIZWlnaHQoKSBjb25zdAogCiBJbnRTaXplIFNjcm9s
bFZpZXc6OnNjcm9sbE9mZnNldCgpIGNvbnN0CiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
bV9kYXRhLCBJbnRTaXplKCkpOwotICAgIHJldHVybiBJbnRTaXplKGNvbnRlbnRzWCgpLCBjb250
ZW50c1koKSk7CisgICAgcmV0dXJuIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OwogfQogCi12b2lkIFNj
cm9sbFZpZXc6OnNjcm9sbEJ5KGludCBkeCwgaW50IGR5KQorSW50U2l6ZSBTY3JvbGxWaWV3Ojpt
YXhpbXVtU2Nyb2xsKCkgY29uc3QKIHsKLSAgICBHdGtBZGp1c3RtZW50KiBoYWRqID0gZ3RrX2xh
eW91dF9nZXRfaGFkanVzdG1lbnQobV9kYXRhLT5sYXlvdXQpOwotICAgIEd0a0FkanVzdG1lbnQq
IHZhZGogPSBndGtfbGF5b3V0X2dldF92YWRqdXN0bWVudChtX2RhdGEtPmxheW91dCk7Ci0gICAg
Z19yZXR1cm5faWZfZmFpbChoYWRqKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhZGopOworICAg
IEludFNpemUgZGVsdGEgPSAobV9kYXRhLT5jb250ZW50c1NpemUgLSBJbnRTaXplKHZpc2libGVX
aWR0aCgpLCB2aXNpYmxlSGVpZ2h0KCkpKSAtIHNjcm9sbE9mZnNldCgpOworICAgIGRlbHRhLmNs
YW1wTmVnYXRpdmVUb1plcm8oKTsKKyAgICByZXR1cm4gZGVsdGE7Cit9CiAKLSAgICBpbnQgY3Vy
cmVudF94ID0gY29udGVudHNYKCk7Ci0gICAgaW50IGN1cnJlbnRfeSA9IGNvbnRlbnRzWSgpOwor
dm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxCeShpbnQgZHgsIGludCBkeSkKK3sKKyAgICBJbnRTaXpl
IHNjcm9sbE9mZnNldCA9IG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OworICAgIEludFNpemUgbmV3U2Ny
b2xsT2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0ICsgSW50U2l6ZShkeCwgZHkpLnNocnVua1RvKG1heGlt
dW1TY3JvbGwoKSk7CisgICAgbmV3U2Nyb2xsT2Zmc2V0LmNsYW1wTmVnYXRpdmVUb1plcm8oKTsK
IAorICAgIGlmIChuZXdTY3JvbGxPZmZzZXQgPT0gc2Nyb2xsT2Zmc2V0KQorICAgICAgICByZXR1
cm47CiAKLSAgICBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUoaGFkaiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ0xBTVAoY3VycmVudF94K2R4LCBoYWRqLT5sb3dlciwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYKDAuMCwgaGFkai0+dXBwZXIgLSBoYWRqLT5w
YWdlX3NpemUpKSk7Ci0gICAgZ3RrX2FkanVzdG1lbnRfc2V0X3ZhbHVlKHZhZGosCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIENMQU1QKGN1cnJlbnRfeStkeSwgdmFkai0+bG93ZXIsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BWCgwLjAsIHZhZGotPnVwcGVyIC0g
dmFkai0+cGFnZV9zaXplKSkpOworICAgIHVwZGF0ZVNjcm9sbGJhcnMobmV3U2Nyb2xsT2Zmc2V0
KTsKIH0KIAogU2Nyb2xsYmFyTW9kZSBTY3JvbGxWaWV3OjpoU2Nyb2xsYmFyTW9kZSgpIGNvbnN0
CkBAIC0yMDQsMTYgKzMzNywxNiBAQCBTY3JvbGxiYXJNb2RlIFNjcm9sbFZpZXc6OnZTY3JvbGxi
YXJNb2RlKCkgY29uc3QKIAogdm9pZCBTY3JvbGxWaWV3OjpzdXBwcmVzc1Njcm9sbGJhcnMoYm9v
bCBzdXBwcmVzc2VkLCBib29sIHJlcGFpbnRPblN1cHByZXNzKQogewotICAgIG1fZGF0YS0+c3Vw
cHJlc3NTY3JvbGxiYXJzID0gc3VwcHJlc3NlZDsKKyAgICBtX2RhdGEtPnNjcm9sbGJhcnNTdXBw
cmVzc2VkID0gc3VwcHJlc3NlZDsKICAgICBpZiAocmVwYWludE9uU3VwcHJlc3MpCi0gICAgICAg
IHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNj
cm9sbE9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0SFNjcm9sbGJhck1vZGUoU2Ny
b2xsYmFyTW9kZSBuZXdNb2RlKQogewogICAgIGlmIChtX2RhdGEtPmhTY3JvbGxiYXJNb2RlICE9
IG5ld01vZGUpIHsKICAgICAgICAgbV9kYXRhLT5oU2Nyb2xsYmFyTW9kZSA9IG5ld01vZGU7Ci0g
ICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2Rh
dGEtPnNjcm9sbE9mZnNldCk7CiAgICAgfQogfQogCkBAIC0yMjEsMTQgKzM1NCwxNCBAQCB2b2lk
IFNjcm9sbFZpZXc6OnNldFZTY3JvbGxiYXJNb2RlKFNjcm9sbGJhck1vZGUgbmV3TW9kZSkKIHsK
ICAgICBpZiAobV9kYXRhLT52U2Nyb2xsYmFyTW9kZSAhPSBuZXdNb2RlKSB7CiAgICAgICAgIG1f
ZGF0YS0+dlNjcm9sbGJhck1vZGUgPSBuZXdNb2RlOwotICAgICAgICB1cGRhdGVTY3JvbGxiYXJz
KCk7CisgICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMobV9kYXRhLT5zY3JvbGxPZmZzZXQpOwogICAg
IH0KIH0KIAogdm9pZCBTY3JvbGxWaWV3OjpzZXRTY3JvbGxiYXJzTW9kZShTY3JvbGxiYXJNb2Rl
IG5ld01vZGUpCiB7CiAgICAgbV9kYXRhLT5oU2Nyb2xsYmFyTW9kZSA9IG1fZGF0YS0+dlNjcm9s
bGJhck1vZGUgPSBuZXdNb2RlOwotICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICB1cGRhdGVT
Y3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3Ojpz
ZXRTdGF0aWNCYWNrZ3JvdW5kKGJvb2wgZmxhZykKQEAgLTIzNiw0OCArMzY5LDUyIEBAIHZvaWQg
U2Nyb2xsVmlldzo6c2V0U3RhdGljQmFja2dyb3VuZChib29sIGZsYWcpCiAgICAgbV9kYXRhLT5o
YXNTdGF0aWNCYWNrZ3JvdW5kID0gZmxhZzsKIH0KIAotLyoKLSAqIG9ubHkgdXBkYXRlIHRoZSBh
ZGp1c3RtZW50cywgdGhlIEd0a0xheW91dCBpcyBkb2luZyB0aGUgd29yawotICogZm9yIHVzIChh
c3N1bWluZyBpdCBpcyBpbiBhIGJveC4uLikuCi0gKi8KLXZvaWQgU2Nyb2xsVmlldzo6c2V0RnJh
bWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQordm9pZCBTY3JvbGxWaWV3OjpzZXRGcmFtZUdl
b21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld0dlb21ldHJ5KQogewotICAgIFdpZGdldDo6c2V0RnJh
bWVHZW9tZXRyeShyKTsKLSAgICB1cGRhdGVHZW9tZXRyeShyLndpZHRoKCksIHIuaGVpZ2h0KCkp
OwotfQorICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKIAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRh
dGVHZW9tZXRyeShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgbV9kYXRhLT52aWV3UG9y
dFNpemUgPSBJbnRTaXplKHdpZHRoLGhlaWdodCk7Ci19CisgICAgSW50UmVjdCBvbGRHZW9tZXRy
eSA9IGZyYW1lR2VvbWV0cnkoKTsKKyAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkobmV3R2Vv
bWV0cnkpOwogCi12b2lkIFNjcm9sbFZpZXc6OnNldEd0a1dpZGdldChHdGtMYXlvdXQqIGxheW91
dCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKEdUS19MQVlPVVQobGF5b3V0KSk7Ci0gICAgbV9k
YXRhLT5sYXlvdXQgPSBsYXlvdXQ7CisgICAgaWYgKG5ld0dlb21ldHJ5ID09IG9sZEdlb21ldHJ5
KQorICAgICAgICByZXR1cm47CiAKLSAgICBXaWRnZXQ6OnNldEd0a1dpZGdldChHVEtfV0lER0VU
KGxheW91dCkpOworICAgIGlmIChuZXdHZW9tZXRyeS53aWR0aCgpICE9IG9sZEdlb21ldHJ5Lndp
ZHRoKCkgfHwgbmV3R2VvbWV0cnkuaGVpZ2h0KCkgIT0gb2xkR2VvbWV0cnkuaGVpZ2h0KCkpIHsK
KyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisgICAgICAg
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5zZXROZWVkc0xheW91dCgpOworICAgIH0K
KworICAgIGdlb21ldHJ5Q2hhbmdlZCgpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OmFkZENoaWxk
KFdpZGdldCogdykKK3ZvaWQgU2Nyb2xsVmlldzo6YWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKIHsg
Ci0gICAgQVNTRVJUKHctPmd0a1dpZGdldCgpKTsKLSAgICBBU1NFUlQobV9kYXRhLT5sYXlvdXQp
OworICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CisgICAgY2hpbGQtPnNldENvbnRhaW5pbmdX
aW5kb3coY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICBtX2RhdGEtPmNoaWxkcmVuLmFkZChjaGls
ZCk7CiAKLSAgICBndGtfbGF5b3V0X3B1dChtX2RhdGEtPmxheW91dCwgdy0+Z3RrV2lkZ2V0KCks
IDAsIDApOworICAgIGlmIChjaGlsZC0+aW50ZXJuYWxHdGtXaWRnZXQoKSkKKyAgICAgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250YWluaW5nV2luZG93KCkpLCBjaGlsZC0+
aW50ZXJuYWxHdGtXaWRnZXQoKSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQo
V2lkZ2V0KiB3KQordm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxkKQog
ewotICAgIEFTU0VSVCh3LT5ndGtXaWRnZXQoKSk7Ci0gICAgQVNTRVJUKG1fZGF0YS0+bGF5b3V0
KTsKKyAgICBjaGlsZC0+c2V0UGFyZW50KDApOworICAgIG1fZGF0YS0+Y2hpbGRyZW4ucmVtb3Zl
KGNoaWxkKTsKIAotICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9kYXRh
LT5sYXlvdXQpLCB3LT5ndGtXaWRnZXQoKSk7CisgICAgaWYgKGNoaWxkLT5pbnRlcm5hbEd0a1dp
ZGdldCgpKQorICAgICAgICBndGtfY29udGFpbmVyX3JlbW92ZShHVEtfQ09OVEFJTkVSKGNvbnRh
aW5pbmdXaW5kb3coKSksIGNoaWxkLT5pbnRlcm5hbEd0a1dpZGdldCgpKTsKIH0KIAotdm9pZCBT
Y3JvbGxWaWV3OjpzY3JvbGxSZWN0SW50b1ZpZXdSZWN1cnNpdmVseShjb25zdCBJbnRSZWN0JikK
K3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3UmVjdXJzaXZlbHkoY29uc3QgSW50
UmVjdCYgcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIEludFBvaW50IHAobWF4KDAs
IHIueCgpKSwgbWF4KDAsIHIueSgpKSk7CisgICAgU2Nyb2xsVmlldyogdmlldyA9IHRoaXM7Cisg
ICAgd2hpbGUgKHZpZXcpIHsKKyAgICAgICAgdmlldy0+c2V0Q29udGVudHNQb3MocC54KCksIHAu
eSgpKTsKKyAgICAgICAgcC5tb3ZlKHZpZXctPngoKSAtIHZpZXctPnNjcm9sbE9mZnNldCgpLndp
ZHRoKCksIHZpZXctPnkoKSAtIHZpZXctPnNjcm9sbE9mZnNldCgpLmhlaWdodCgpKTsKKyAgICAg
ICAgdmlldyA9IHN0YXRpY19jYXN0PFNjcm9sbFZpZXcqPih2aWV3LT5wYXJlbnQoKSk7CisgICAg
fQogfQogCiBib29sIFNjcm9sbFZpZXc6OmluV2luZG93KCkgY29uc3QKQEAgLTI4Niw0OCArNDIz
LDMzMSBAQCBib29sIFNjcm9sbFZpZXc6OmluV2luZG93KCkgY29uc3QKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYp
Cit2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxhdGZvcm1XaGVlbEV2ZW50JiBlKQogewot
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gRGV0ZXJtaW5lIGhvdyBtdWNoIHdlIHdhbnQg
dG8gc2Nyb2xsLiAgSWYgd2UgY2FuIG1vdmUgYXQgYWxsLCB3ZSB3aWxsIGFjY2VwdCB0aGUgZXZl
bnQuCisgICAgSW50U2l6ZSBtYXhTY3JvbGxEZWx0YSA9IG1heGltdW1TY3JvbGwoKTsKKyAgICBp
ZiAoKGUuZGVsdGFYKCkgPCAwICYmIG1heFNjcm9sbERlbHRhLndpZHRoKCkgPiAwKSB8fAorICAg
ICAgICAoZS5kZWx0YVgoKSA+IDAgJiYgc2Nyb2xsT2Zmc2V0KCkud2lkdGgoKSA+IDApIHx8Cisg
ICAgICAgIChlLmRlbHRhWSgpIDwgMCAmJiBtYXhTY3JvbGxEZWx0YS5oZWlnaHQoKSA+IDApIHx8
CisgICAgICAgIChlLmRlbHRhWSgpID4gMCAmJiBzY3JvbGxPZmZzZXQoKS5oZWlnaHQoKSA+IDAp
KQorICAgICAgICBlLmFjY2VwdCgpOworCisgICAgc2Nyb2xsQnkoZS5kZWx0YVgoKSAqIExJTkVf
U1RFUCwgZS5kZWx0YVkoKSAqIExJTkVfU1RFUCk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6dXBk
YXRlU2Nyb2xsYmFycygpCit2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3Qg
SW50U2l6ZSYgZGVzaXJlZE9mZnNldCkKIHsKLSAgICBHdGtBZGp1c3RtZW50KiBoYWRqID0gZ3Rr
X2xheW91dF9nZXRfaGFkanVzdG1lbnQobV9kYXRhLT5sYXlvdXQpOwotICAgIEd0a0FkanVzdG1l
bnQqIHZhZGogPSBndGtfbGF5b3V0X2dldF92YWRqdXN0bWVudChtX2RhdGEtPmxheW91dCk7Cisj
d2FybmluZyAiVXBkYXRpbmcgdGhlIHNjcm9sbGJhcnMiCisgICAgLy8gRG9uJ3QgYWxsb3cgcmUt
ZW50cmFuY3kgaW50byB0aGlzIGZ1bmN0aW9uLgorICAgIGlmIChtX2RhdGEtPmluVXBkYXRlU2Ny
b2xsYmFycykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgZ19yZXR1cm5faWZfZmFpbChoYWRqKTsK
LSAgICBnX3JldHVybl9pZl9mYWlsKHZhZGopOwotICAgIAotICAgIGhhZGotPnBhZ2Vfc2l6ZSA9
IHZpc2libGVXaWR0aCgpOwotICAgIGhhZGotPnN0ZXBfaW5jcmVtZW50ID0gMTM7CisgICAgLy8g
RklYTUU6IFRoaXMgY29kZSBpcyBoZXJlIHNvIHdlIGRvbid0IGhhdmUgdG8gZm9yayBGcmFtZVZp
ZXcuaC8uY3BwLgorICAgIC8vIEluIHRoZSBlbmQsIEZyYW1lVmlldyBzaG91bGQganVzdCBtZXJn
ZSB3aXRoIFNjcm9sbFZpZXcuCisgICAgaWYgKHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+
KHRoaXMpLT5mcmFtZSgpLT5wcm9oaWJpdHNTY3JvbGxpbmcoKSkKKyAgICAgICAgcmV0dXJuOwog
ICAgIAotICAgIHZhZGotPnBhZ2Vfc2l6ZSA9IHZpc2libGVIZWlnaHQoKTsKLSAgICB2YWRqLT5z
dGVwX2luY3JlbWVudCA9IDEzOworICAgIG1fZGF0YS0+aW5VcGRhdGVTY3JvbGxiYXJzID0gdHJ1
ZTsKKworICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBtX2RhdGEtPnZCYXI7CisgICAg
Ym9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gbV9kYXRhLT5oQmFyOworICAgIGJvb2wgb2xk
SGFzVmVydGljYWwgPSBoYXNWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBib29sIG9sZEhhc0hvcml6
b250YWwgPSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgIFNjcm9sbGJhck1vZGUgaFNjcm9s
bCA9IG1fZGF0YS0+aFNjcm9sbGJhck1vZGU7CisgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xsID0g
bV9kYXRhLT52U2Nyb2xsYmFyTW9kZTsKICAgICAKLSAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2Vk
KGhhZGopOwotICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQoaGFkaik7CisgICAgY29u
c3QgaW50IGNWZXJ0aWNhbFdpZHRoID0gUGxhdGZvcm1TY3JvbGxiYXI6OnZlcnRpY2FsU2Nyb2xs
YmFyV2lkdGgoKTsKKyAgICBjb25zdCBpbnQgY0hvcml6b250YWxIZWlnaHQgPSBQbGF0Zm9ybVNj
cm9sbGJhcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpOworCisgICAgZm9yIChpbnQgcGFz
cyA9IDA7IHBhc3MgPCAyOyBwYXNzKyspIHsKKyAgICAgICAgYm9vbCBzY3JvbGxzVmVydGljYWxs
eTsKKyAgICAgICAgYm9vbCBzY3JvbGxzSG9yaXpvbnRhbGx5OworCisgICAgICAgIGlmICghbV9k
YXRhLT5zY3JvbGxiYXJzU3VwcHJlc3NlZCAmJiAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvIHx8
IHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykpIHsKKyAgICAgICAgICAgIC8vIERvIGEgbGF5b3V0
IGlmIHBlbmRpbmcgYmVmb3JlIGNoZWNraW5nIGlmIHNjcm9sbGJhcnMgYXJlIG5lZWRlZC4KKyAg
ICAgICAgICAgIGlmIChoYXNWZXJ0aWNhbFNjcm9sbGJhciAhPSBvbGRIYXNWZXJ0aWNhbCB8fCBo
YXNIb3Jpem9udGFsU2Nyb2xsYmFyICE9IG9sZEhhc0hvcml6b250YWwpCisgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4odGhpcyktPmxheW91dCgpOworICAgICAgICAgICAg
IAorICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJB
bHdheXNPbikgfHwgKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50c0hlaWdodCgp
ID4gaGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKHNjcm9sbHNWZXJ0aWNhbGx5KQorICAgICAg
ICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdh
eXNPbikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50c1dpZHRoKCkgKyBj
VmVydGljYWxXaWR0aCA+IHdpZHRoKCkpOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICAgICAgc2Nyb2xsc0hvcml6b250YWxseSA9IChoU2Nyb2xsID09IFNjcm9sbGJhckFsd2F5c09u
KSB8fCAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzV2lkdGgoKSA+IHdpZHRo
KCkpOworICAgICAgICAgICAgICAgIGlmIChzY3JvbGxzSG9yaXpvbnRhbGx5KQorICAgICAgICAg
ICAgICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2U2Nyb2xsID09IFNjcm9sbGJhckFsd2F5
c09uKSB8fCAodlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvICYmIGNvbnRlbnRzSGVpZ2h0KCkgKyBj
SG9yaXpvbnRhbEhlaWdodCA+IGhlaWdodCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9s
bCA9PSBTY3JvbGxiYXJBdXRvKSA/IGhhc0hvcml6b250YWxTY3JvbGxiYXIgOiAoaFNjcm9sbCA9
PSBTY3JvbGxiYXJBbHdheXNPbik7CisgICAgICAgICAgICBzY3JvbGxzVmVydGljYWxseSA9ICh2
U2Nyb2xsID09IFNjcm9sbGJhckF1dG8pID8gaGFzVmVydGljYWxTY3JvbGxiYXIgOiAodlNjcm9s
bCA9PSBTY3JvbGxiYXJBbHdheXNPbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChoYXNWZXJ0aWNhbFNjcm9sbGJhciAhPSBzY3JvbGxzVmVydGljYWxseSkgeworICAgICAgICAg
ICAgbV9kYXRhLT5zZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcihzY3JvbGxzVmVydGljYWxseSk7Cisg
ICAgICAgICAgICBoYXNWZXJ0aWNhbFNjcm9sbGJhciA9IHNjcm9sbHNWZXJ0aWNhbGx5OworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGhhc0hvcml6b250YWxTY3JvbGxiYXIgIT0gc2Nyb2xsc0hv
cml6b250YWxseSkgeworICAgICAgICAgICAgbV9kYXRhLT5zZXRIYXNIb3Jpem9udGFsU2Nyb2xs
YmFyKHNjcm9sbHNIb3Jpem9udGFsbHkpOworICAgICAgICAgICAgaGFzSG9yaXpvbnRhbFNjcm9s
bGJhciA9IHNjcm9sbHNIb3Jpem9udGFsbHk7CisgICAgICAgIH0KKyAgICB9CiAgICAgCi0gICAg
Z3RrX2FkanVzdG1lbnRfY2hhbmdlZCh2YWRqKTsKLSAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9j
aGFuZ2VkKHZhZGopOworICAgIC8vIFNldCB1cCB0aGUgcmFuZ2UgKGFuZCBwYWdlIHN0ZXAvbGlu
ZSBzdGVwKS4KKyAgICBJbnRTaXplIG1heFNjcm9sbFBvc2l0aW9uKGNvbnRlbnRzV2lkdGgoKSAt
IHZpc2libGVXaWR0aCgpLCBjb250ZW50c0hlaWdodCgpIC0gdmlzaWJsZUhlaWdodCgpKTsKKyAg
ICBJbnRTaXplIHNjcm9sbCA9IGRlc2lyZWRPZmZzZXQuc2hydW5rVG8obWF4U2Nyb2xsUG9zaXRp
b24pOworICAgIHNjcm9sbC5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisgCisgICAgaWYgKG1fZGF0
YS0+aEJhcikgeworICAgICAgICBpbnQgY2xpZW50V2lkdGggPSB2aXNpYmxlV2lkdGgoKTsKKyAg
ICAgICAgbV9kYXRhLT5oQmFyLT5zZXRFbmFibGVkKGNvbnRlbnRzV2lkdGgoKSA+IGNsaWVudFdp
ZHRoKTsKKyAgICAgICAgaW50IHBhZ2VTdGVwID0gKGNsaWVudFdpZHRoIC0gUEFHRV9LRUVQKTsK
KyAgICAgICAgaWYgKHBhZ2VTdGVwIDwgMCkgcGFnZVN0ZXAgPSBjbGllbnRXaWR0aDsKKyAgICAg
ICAgSW50UmVjdCBvbGRSZWN0KG1fZGF0YS0+aEJhci0+ZnJhbWVHZW9tZXRyeSgpKTsKKyAgICAg
ICAgSW50UmVjdCBoQmFyUmVjdCA9IEludFJlY3QoMCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaGVpZ2h0KCkgLSBtX2RhdGEtPmhCYXItPmhlaWdodCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aCgpIC0gKG1fZGF0YS0+dkJhciA/IG1fZGF0
YS0+dkJhci0+d2lkdGgoKSA6IDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2RhdGEtPmhCYXItPmhlaWdodCgpKTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRSZWN0
KGhCYXJSZWN0KTsKKyAgICAgICAgaWYgKCFtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkICYm
IG9sZFJlY3QgIT0gbV9kYXRhLT5oQmFyLT5mcmFtZUdlb21ldHJ5KCkpCisgICAgICAgICAgICBt
X2RhdGEtPmhCYXItPmludmFsaWRhdGUoKTsKKworICAgICAgICBpZiAobV9kYXRhLT5zY3JvbGxi
YXJzU3VwcHJlc3NlZCkKKyAgICAgICAgICAgIG1fZGF0YS0+aEJhci0+c2V0U3VwcHJlc3NJbnZh
bGlkYXRpb24odHJ1ZSk7CisgICAgICAgIG1fZGF0YS0+aEJhci0+c2V0U3RlcHMoTElORV9TVEVQ
LCBwYWdlU3RlcCk7CisgICAgICAgIG1fZGF0YS0+aEJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRX
aWR0aCwgY29udGVudHNXaWR0aCgpKTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRWYWx1ZShz
Y3JvbGwud2lkdGgoKSk7CisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2Vk
KQorICAgICAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihmYWxz
ZSk7IAorICAgIH0gCisKKyAgICBpZiAobV9kYXRhLT52QmFyKSB7CisgICAgICAgIGludCBjbGll
bnRIZWlnaHQgPSB2aXNpYmxlSGVpZ2h0KCk7CisgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0RW5h
YmxlZChjb250ZW50c0hlaWdodCgpID4gY2xpZW50SGVpZ2h0KTsKKyAgICAgICAgaW50IHBhZ2VT
dGVwID0gKGNsaWVudEhlaWdodCAtIFBBR0VfS0VFUCk7CisgICAgICAgIGlmIChwYWdlU3RlcCA8
IDApIHBhZ2VTdGVwID0gY2xpZW50SGVpZ2h0OworICAgICAgICBJbnRSZWN0IG9sZFJlY3QobV9k
YXRhLT52QmFyLT5mcmFtZUdlb21ldHJ5KCkpOworICAgICAgICBJbnRSZWN0IHZCYXJSZWN0ID0g
SW50UmVjdCh3aWR0aCgpIC0gbV9kYXRhLT52QmFyLT53aWR0aCgpLCAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV9kYXRhLT52QmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWlnaHQoKSAtIChtX2RhdGEtPmhCYXIgPyBtX2RhdGEtPmhCYXItPmhlaWdodCgpIDog
MCkpOworICAgICAgICBtX2RhdGEtPnZCYXItPnNldFJlY3QodkJhclJlY3QpOworICAgICAgICBp
ZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAhPSBtX2RhdGEtPnZC
YXItPmZyYW1lR2VvbWV0cnkoKSkKKyAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+aW52YWxpZGF0
ZSgpOworCisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkKQorICAgICAg
ICAgICAgbV9kYXRhLT52QmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0cnVlKTsKKyAgICAg
ICAgbV9kYXRhLT52QmFyLT5zZXRTdGVwcyhMSU5FX1NURVAsIHBhZ2VTdGVwKTsKKyAgICAgICAg
bV9kYXRhLT52QmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudEhlaWdodCwgY29udGVudHNIZWlnaHQo
KSk7CisgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0VmFsdWUoc2Nyb2xsLmhlaWdodCgpKTsKKyAg
ICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpCisgICAgICAgICAgICBtX2Rh
dGEtPnZCYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsKKyAgICB9CiAKLSAgICBt
X2RhdGEtPnNjcm9sbEJhcnNOZWVkVXBkYXRlID0gZmFsc2U7CisgICAgaWYgKG9sZEhhc1ZlcnRp
Y2FsICE9IChtX2RhdGEtPnZCYXIgIT0gMCkgfHwgb2xkSGFzSG9yaXpvbnRhbCAhPSAobV9kYXRh
LT5oQmFyICE9IDApKQorICAgICAgICBnZW9tZXRyeUNoYW5nZWQoKTsKKworICAgIC8vIFNlZSBp
ZiBvdXIgb2Zmc2V0IGhhcyBjaGFuZ2VkIGluIGEgc2l0dWF0aW9uIHdoZXJlIHdlIG1pZ2h0IG5v
dCBoYXZlIHNjcm9sbGJhcnMuCisgICAgLy8gVGhpcyBjYW4gaGFwcGVuIHdoZW4gZWRpdGluZyBh
IGJvZHkgd2l0aCBvdmVyZmxvdzpoaWRkZW4gYW5kIHNjcm9sbGluZyB0byByZXZlYWwgc2VsZWN0
aW9uLgorICAgIC8vIEl0IGNhbiBhbHNvIGhhcHBlbiB3aGVuIG1heGltaXppbmcgYSB3aW5kb3cg
dGhhdCBoYXMgc2Nyb2xsYmFycyAoYnV0IHRoZSBuZXcgbWF4aW1pemVkIHJlc3VsdAorICAgIC8v
IGRvZXMgbm90KS4KKyAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gc2Nyb2xsIC0gbV9kYXRhLT5z
Y3JvbGxPZmZzZXQ7CisgICAgaWYgKHNjcm9sbERlbHRhICE9IEludFNpemUoKSkgeworICAgICAg
IG1fZGF0YS0+c2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsOworICAgICAgIG1fZGF0YS0+c2Nyb2xsQmFj
a2luZ1N0b3JlKHNjcm9sbERlbHRhKTsKKyAgICB9CisKKyAgICBtX2RhdGEtPmluVXBkYXRlU2Ny
b2xsYmFycyA9IGZhbHNlOwogfQogCi1JbnRQb2ludCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRl
bnRzKGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK0ludFBvaW50IFNjcm9sbFZpZXc6Ondp
bmRvd1RvQ29udGVudHMoY29uc3QgSW50UG9pbnQmIHdpbmRvd1BvaW50KSBjb25zdAogeyAKLSAg
ICByZXR1cm4gcG9pbnQ7CisgICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udmVydEZyb21Db250
YWluaW5nV2luZG93KHdpbmRvd1BvaW50KTsKKyAgICByZXR1cm4gdmlld1BvaW50ICsgc2Nyb2xs
T2Zmc2V0KCk7CiB9CiAKLUludFBvaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3coY29u
c3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAorSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udGVudHNU
b1dpbmRvdyhjb25zdCBJbnRQb2ludCYgY29udGVudHNQb2ludCkgY29uc3QKIHsKLSAgICByZXR1
cm4gcG9pbnQ7CisgICAgSW50UG9pbnQgdmlld1BvaW50ID0gY29udGVudHNQb2ludCAtIHNjcm9s
bE9mZnNldCgpOworICAgIHJldHVybiBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KHZpZXdQb2lu
dCk7ICAKIH0KIAogUGxhdGZvcm1TY3JvbGxiYXIqIFNjcm9sbFZpZXc6OnNjcm9sbGJhclVuZGVy
TW91c2UoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBtb3VzZUV2ZW50KQogeyAKLSAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnZlcnRGcm9tQ29udGFp
bmluZ1dpbmRvdyhtb3VzZUV2ZW50LnBvcygpKTsKKyAgICBpZiAobV9kYXRhLT5oQmFyICYmIG1f
ZGF0YS0+aEJhci0+ZnJhbWVHZW9tZXRyeSgpLmNvbnRhaW5zKHZpZXdQb2ludCkpCisgICAgICAg
IHJldHVybiBtX2RhdGEtPmhCYXIuZ2V0KCk7CisgICAgaWYgKG1fZGF0YS0+dkJhciAmJiBtX2Rh
dGEtPnZCYXItPmZyYW1lR2VvbWV0cnkoKS5jb250YWlucyh2aWV3UG9pbnQpKQorICAgICAgICBy
ZXR1cm4gbV9kYXRhLT52QmFyLmdldCgpOwogICAgIHJldHVybiAwOwogfQogCitJbnRQb2ludCBT
Y3JvbGxWaWV3Ojpjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiBjaGlsZCwgY29uc3Qg
SW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IG5ld1BvaW50ID0gcG9pbnQ7
CisgICAgaWYgKGNoaWxkICE9IG1fZGF0YS0+aEJhciAmJiBjaGlsZCAhPSBtX2RhdGEtPnZCYXIp
CisgICAgICAgIG5ld1BvaW50ID0gcG9pbnQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICByZXR1cm4g
V2lkZ2V0Ojpjb252ZXJ0Q2hpbGRUb1NlbGYoY2hpbGQsIG5ld1BvaW50KTsKK30KKworSW50UG9p
bnQgU2Nyb2xsVmlldzo6Y29udmVydFNlbGZUb0NoaWxkKGNvbnN0IFdpZGdldCogY2hpbGQsIGNv
bnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCBuZXdQb2ludCA9IHBv
aW50OworICAgIGlmIChjaGlsZCAhPSBtX2RhdGEtPmhCYXIgJiYgY2hpbGQgIT0gbV9kYXRhLT52
QmFyKQorICAgICAgICBuZXdQb2ludCA9IHBvaW50ICsgc2Nyb2xsT2Zmc2V0KCk7CisgICAgcmV0
dXJuIFdpZGdldDo6Y29udmVydFNlbGZUb0NoaWxkKGNoaWxkLCBuZXdQb2ludCk7Cit9CisKK3Zv
aWQgU2Nyb2xsVmlldzo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRS
ZWN0JiByZWN0KQoreworICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgaXMgaGVyZSBzbyB3ZSBkb24n
dCBoYXZlIHRvIGZvcmsgRnJhbWVWaWV3LmgvLmNwcC4KKyAgICAvLyBJbiB0aGUgZW5kLCBGcmFt
ZVZpZXcgc2hvdWxkIGp1c3QgbWVyZ2Ugd2l0aCBTY3JvbGxWaWV3LgorICAgIEFTU0VSVChpc0Zy
YW1lVmlldygpKTsKKworICAgIGlmIChjb250ZXh0LT5wYWludGluZ0Rpc2FibGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIEludFJlY3QgZG9jdW1lbnREaXJ0eVJlY3QgPSByZWN0OworICAg
IGRvY3VtZW50RGlydHlSZWN0LmludGVyc2VjdChmcmFtZUdlb21ldHJ5KCkpOworCisgICAgY29u
dGV4dC0+c2F2ZSgpOworCisgICAgY29udGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgpKTsKKyAgICBk
b2N1bWVudERpcnR5UmVjdC5tb3ZlKC14KCksIC15KCkpOworCisgICAgY29udGV4dC0+dHJhbnNs
YXRlKC1jb250ZW50c1goKSwgLWNvbnRlbnRzWSgpKTsKKyAgICBkb2N1bWVudERpcnR5UmVjdC5t
b3ZlKGNvbnRlbnRzWCgpLCBjb250ZW50c1koKSk7CisKKyAgICBjb250ZXh0LT5jbGlwKGVuY2xv
c2luZ0ludFJlY3QodmlzaWJsZUNvbnRlbnRSZWN0KCkpKTsKKyAgICBzdGF0aWNfY2FzdDxjb25z
dCBGcmFtZVZpZXcqPih0aGlzKS0+ZnJhbWUoKS0+cGFpbnQoY29udGV4dCwgZG9jdW1lbnREaXJ0
eVJlY3QpOworICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKworICAgIC8vIE5vdyBwYWludCB0aGUg
c2Nyb2xsYmFycy4KKyAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgKG1f
ZGF0YS0+aEJhciB8fCBtX2RhdGEtPnZCYXIpKSB7CisgICAgICAgIGNvbnRleHQtPnNhdmUoKTsK
KyAgICAgICAgSW50UmVjdCBzY3JvbGxWaWV3RGlydHlSZWN0ID0gcmVjdDsKKyAgICAgICAgc2Ny
b2xsVmlld0RpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKyAgICAgICAgY29u
dGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgpKTsKKyAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5t
b3ZlKC14KCksIC15KCkpOworICAgICAgICBpZiAobV9kYXRhLT5oQmFyKQorICAgICAgICAgICAg
bV9kYXRhLT5oQmFyLT5wYWludChjb250ZXh0LCBzY3JvbGxWaWV3RGlydHlSZWN0KTsKKyAgICAg
ICAgaWYgKG1fZGF0YS0+dkJhcikKKyAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+cGFpbnQoY29u
dGV4dCwgc2Nyb2xsVmlld0RpcnR5UmVjdCk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRklY
TUU6IFRPRE86IENoZWNrIGlmIHRoYXQgd29ya3Mgd2l0aCBSVEwKKyAgICAgICAgICovCisgICAg
ICAgIC8vIEZpbGwgdGhlIHNjcm9sbCBjb3JuZXIgd2l0aCB3aGl0ZS4KKyAgICAgICAgSW50UmVj
dCBoQ29ybmVyOworICAgICAgICBpZiAobV9kYXRhLT5oQmFyICYmIHdpZHRoKCkgLSBtX2RhdGEt
PmhCYXItPndpZHRoKCkgPiAwKSB7CisgICAgICAgICAgICBoQ29ybmVyID0gSW50UmVjdChtX2Rh
dGEtPmhCYXItPndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQo
KSAtIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aWR0aCgpIC0gbV9kYXRhLT5oQmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9kYXRhLT5oQmFyLT5oZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAoaENvcm5l
ci5pbnRlcnNlY3RzKHNjcm9sbFZpZXdEaXJ0eVJlY3QpKQorICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmZpbGxSZWN0KGhDb3JuZXIsIENvbG9yOjp3aGl0ZSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAobV9kYXRhLT52QmFyICYmIGhlaWdodCgpIC0gbV9kYXRhLT52QmFyLT5oZWlnaHQoKSA+
IDApIHsKKyAgICAgICAgICAgIEludFJlY3QgdkNvcm5lcih3aWR0aCgpIC0gbV9kYXRhLT52QmFy
LT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+aGVp
Z2h0KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9kYXRhLT52QmFyLT53aWR0aCgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCgpIC0gbV9kYXRhLT52QmFyLT5o
ZWlnaHQoKSk7CisgICAgICAgICAgICBpZiAodkNvcm5lciAhPSBoQ29ybmVyICYmIHZDb3JuZXIu
aW50ZXJzZWN0cyhzY3JvbGxWaWV3RGlydHlSZWN0KSkKKyAgICAgICAgICAgICAgICBjb250ZXh0
LT5maWxsUmVjdCh2Q29ybmVyLCBDb2xvcjo6d2hpdGUpOworICAgICAgICB9CisKKyAgICAgICAg
Y29udGV4dC0+cmVzdG9yZSgpOworICAgIH0KK30KKworLyoKKyAqIHVwZGF0ZSBjaGlsZHJlbiBi
dXQgbm9yIG91ciBzY3JvbGxiYXJzLiBUaGV5IHNob3VsZCBub3Qgc2Nyb2xsIHdoZW4KKyAqIHdl
IHNjcm9sbCBvdXIgY29udGVudC4KKyAqLwordm9pZCBTY3JvbGxWaWV3OjpnZW9tZXRyeUNoYW5n
ZWQoKSBjb25zdAoreworICAgIEhhc2hTZXQ8V2lkZ2V0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1fZGF0YS0+Y2hpbGRyZW4uZW5kKCk7CisgICAgZm9yIChIYXNoU2V0PFdpZGdldCo+Ojpjb25z
dF9pdGVyYXRvciBjdXJyZW50ID0gbV9kYXRhLT5jaGlsZHJlbi5iZWdpbigpOyBjdXJyZW50ICE9
IGVuZDsgKytjdXJyZW50KQorICAgICAgICBpZiAoKmN1cnJlbnQgIT0gbV9kYXRhLT5oQmFyICYm
ICpjdXJyZW50ICE9IG1fZGF0YS0+dkJhcikKKyAgICAgICAgICAgICgqY3VycmVudCktPmdlb21l
dHJ5Q2hhbmdlZCgpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbChTY3JvbGxEaXJlY3Rp
b24gZGlyZWN0aW9uLCBTY3JvbGxHcmFudWxhcml0eSBncmFudWxhcml0eSkKK3sKKyAgICBpZiAg
KChkaXJlY3Rpb24gPT0gU2Nyb2xsVXAgfHwgZGlyZWN0aW9uID09IFNjcm9sbERvd24pICYmIG1f
ZGF0YS0+dkJhcikKKyAgICAgICAgbV9kYXRhLT52QmFyLT5zY3JvbGwoZGlyZWN0aW9uLCBncmFu
dWxhcml0eSk7CisgICAgZWxzZSBpZiAobV9kYXRhLT5oQmFyKQorICAgICAgICBtX2RhdGEtPmhC
YXItPnNjcm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKK30KKworSW50UmVjdCBTY3JvbGxW
aWV3Ojp3aW5kb3dSZXNpemVyUmVjdCgpCit7CisgICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOwor
ICAgIGNvbnN0IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVW
aWV3Kj4odGhpcyk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1l
Vmlldy0+ZnJhbWUoKS0+cGFnZSgpIDogMDsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVy
biBJbnRSZWN0KCk7CisgICAgcmV0dXJuIHBhZ2UtPmNocm9tZSgpLT53aW5kb3dSZXNpemVyUmVj
dCgpOworfQorCitib29sIFNjcm9sbFZpZXc6OnJlc2l6ZXJPdmVybGFwc0NvbnRlbnQoKSBjb25z
dAoreworICAgIHJldHVybiAhbV9kYXRhLT5zY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyOworfQor
Cit2b2lkIFNjcm9sbFZpZXc6OmFkanVzdE92ZXJsYXBwaW5nU2Nyb2xsYmFyQ291bnQoaW50IG92
ZXJsYXBEZWx0YSkKK3sKKyAgICBpbnQgb2xkQ291bnQgPSBtX2RhdGEtPnNjcm9sbGJhcnNBdm9p
ZGluZ1Jlc2l6ZXI7CisgICAgbV9kYXRhLT5zY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyICs9IG92
ZXJsYXBEZWx0YTsKKyAgICBpZiAocGFyZW50KCkgJiYgcGFyZW50KCktPmlzRnJhbWVWaWV3KCkp
CisgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHBhcmVudCgpKS0+YWRqdXN0T3Zlcmxh
cHBpbmdTY3JvbGxiYXJDb3VudChvdmVybGFwRGVsdGEpOworICAgIGVsc2UgaWYgKCFtX2RhdGEt
PnNjcm9sbGJhcnNTdXBwcmVzc2VkKSB7CisgICAgICAgIC8vIElmIHdlIHdlbnQgZnJvbSBuIHRv
IDAgb3IgZnJvbSAwIHRvIG4gYW5kIHdlJ3JlIHRoZSBvdXRlcm1vc3QgdmlldywKKyAgICAgICAg
Ly8gd2UgbmVlZCB0byBpbnZhbGlkYXRlIHRoZSB3aW5kb3dSZXNpemVyUmVjdCgpLCBzaW5jZSBp
dCB3aWxsIG5vdyBuZWVkIHRvIHBhaW50CisgICAgICAgIC8vIGRpZmZlcmVudGx5LgorICAgICAg
ICBpZiAob2xkQ291bnQgPiAwICYmIG1fZGF0YS0+c2Nyb2xsYmFyc0F2b2lkaW5nUmVzaXplciA9
PSAwIHx8CisgICAgICAgICAgICBvbGRDb3VudCA9PSAwICYmIG1fZGF0YS0+c2Nyb2xsYmFyc0F2
b2lkaW5nUmVzaXplciA+IDApCisgICAgICAgICAgICBpbnZhbGlkYXRlUmVjdCh3aW5kb3dSZXNp
emVyUmVjdCgpKTsKKyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2V0UGFyZW50KFNjcm9s
bFZpZXcqIHBhcmVudFZpZXcpCit7CisgICAgaWYgKCFwYXJlbnRWaWV3ICYmIG1fZGF0YS0+c2Ny
b2xsYmFyc0F2b2lkaW5nUmVzaXplciAmJiBwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNGcmFtZVZp
ZXcoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5hZGp1c3RP
dmVybGFwcGluZ1Njcm9sbGJhckNvdW50KGZhbHNlKTsKKyAgICBXaWRnZXQ6OnNldFBhcmVudChw
YXJlbnRWaWV3KTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjphZGRUb0RpcnR5UmVnaW9uKGNvbnN0
IEludFJlY3QmIGNvbnRhaW5pbmdXaW5kb3dSZWN0KQoreworICAgIEFTU0VSVChpc0ZyYW1lVmll
dygpKTsKKyAgICBjb25zdCBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PGNvbnN0
IEZyYW1lVmlldyo+KHRoaXMpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZVZpZXctPmZyYW1lKCkg
PyBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKSA6IDA7CisgICAgaWYgKCFwYWdlKQorICAgICAg
ICByZXR1cm47CisgICAgcGFnZS0+Y2hyb21lKCktPmFkZFRvRGlydHlSZWdpb24oY29udGFpbmlu
Z1dpbmRvd1JlY3QpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbEJhY2tpbmdTdG9yZShp
bnQgZHgsIGludCBkeSwgY29uc3QgSW50UmVjdCYgc2Nyb2xsVmlld1JlY3QsIGNvbnN0IEludFJl
Y3QmIGNsaXBSZWN0KQoreworICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKKyAgICBjb25zdCBG
cmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHRoaXMp
OworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZVZpZXctPmZyYW1lKCkgPyBmcmFtZVZpZXctPmZyYW1l
KCktPnBhZ2UoKSA6IDA7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgcGFn
ZS0+Y2hyb21lKCktPnNjcm9sbEJhY2tpbmdTdG9yZShkeCwgZHksIHNjcm9sbFZpZXdSZWN0LCBj
bGlwUmVjdCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlQmFja2luZ1N0b3JlKCkKK3sK
KyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CisgICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih0aGlzKTsKKyAgICBQYWdlKiBwYWdl
ID0gZnJhbWVWaWV3LT5mcmFtZSgpID8gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOwor
ICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworICAgIHBhZ2UtPmNocm9tZSgpLT51cGRh
dGVCYWNraW5nU3RvcmUoKTsKK30KKwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
ZGsvV2lkZ2V0R2RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAKaW5k
ZXggMGZmYTIzZC4uYmExODM3OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2lk
Z2V0R2RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hh
ZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9s
Z2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCkBAIC0zNCw3
ICszNCw5IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiSW50UmVj
dC5oIgogI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgog
I2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAid2Via2l0Z3RrcGFnZS5oIgog
CiAjaW5jbHVkZSA8Z2RrL2dkay5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KQEAgLTQ2LDggKzQ4
LDE5IEBAIHB1YmxpYzoKICAgICBHZGtEcmF3YWJsZSogZHJhd2FibGU7CiAgICAgR3RrV2lkZ2V0
KiB3aWRnZXQ7CiAgICAgV2lkZ2V0Q2xpZW50KiBjbGllbnQ7Ci0gICAgSW50UmVjdCBnZW9tZXRy
eTsKLSAgICBGb250IGZvbnQ7CisgICAgSW50UmVjdCBmcmFtZVJlY3Q7CisKKyAgICBTY3JvbGxW
aWV3KiBwYXJlbnQ7CisgICAgV2ViS2l0R3RrUGFnZSogY29udGFpbmluZ1dpbmRvdzsKKyAgICBi
b29sIHN1cHByZXNzSW52YWxpZGF0aW9uOworICAgIGJvb2wgaXNTY3JvbGxWaWV3Q29udHJvbDsK
KworICAgIEdka0RyYXdhYmxlKiBnZGtEcmF3YWJsZSgpCisgICAgeworICAgICAgICBpZiAoIWRy
YXdhYmxlICYmIHdpZGdldCkKKyAgICAgICAgICAgIGRyYXdhYmxlID0gd2lkZ2V0LT53aW5kb3c7
CisgICAgICAgIHJldHVybiBkcmF3YWJsZTsKKyAgICB9CiB9OwogCiBXaWRnZXQ6OldpZGdldCgp
CkBAIC01NSwyNyArNjgsMjAgQEAgV2lkZ2V0OjpXaWRnZXQoKQogewogICAgIGRhdGEtPmRyYXdh
YmxlID0gMDsKICAgICBkYXRhLT53aWRnZXQgPSAwOworICAgIGRhdGEtPmNsaWVudCA9IDA7Cisg
ICAgZGF0YS0+cGFyZW50ID0gMDsKKyAgICBkYXRhLT5jb250YWluaW5nV2luZG93ID0gMDsKKyAg
ICBkYXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbiA9IGZhbHNlOworICAgIGRhdGEtPmlzU2Nyb2xs
Vmlld0NvbnRyb2wgPSBmYWxzZTsKIH0KIAotV2lkZ2V0OjpXaWRnZXQoR3RrV2lkZ2V0KiB3aWRn
ZXQpCi0gICAgOiBkYXRhKG5ldyBXaWRnZXRQcml2YXRlKQotewotICAgIHNldEd0a1dpZGdldCh3
aWRnZXQpOwotfQotCi1HZGtEcmF3YWJsZSogV2lkZ2V0OjpnZGtEcmF3YWJsZSgpIGNvbnN0Ci17
Ci0gICAgaWYgKCFkYXRhLT5kcmF3YWJsZSAmJiBkYXRhLT53aWRnZXQpCi0gICAgICAgIGRhdGEt
PmRyYXdhYmxlID0gR1RLX0lTX0xBWU9VVChkYXRhLT53aWRnZXQpID8gR1RLX0xBWU9VVChkYXRh
LT53aWRnZXQpLT5iaW5fd2luZG93IDogZGF0YS0+d2lkZ2V0LT53aW5kb3c7Ci0gICAgcmV0dXJu
IGRhdGEtPmRyYXdhYmxlOwotfQogCi1HdGtXaWRnZXQqIFdpZGdldDo6Z3RrV2lkZ2V0KCkgY29u
c3QKK0d0a1dpZGdldCogV2lkZ2V0OjppbnRlcm5hbEd0a1dpZGdldCgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGRhdGEtPndpZGdldDsKIH0KIAotdm9pZCBXaWRnZXQ6OnNldEd0a1dpZGdldChHdGtX
aWRnZXQqIHdpZGdldCkKK3ZvaWQgV2lkZ2V0OjpzZXRJbnRlcm5hbEd0a1dpZGdldChHdGtXaWRn
ZXQqIHdpZGdldCkKIHsKICAgICBkYXRhLT5kcmF3YWJsZSA9IDA7CiAgICAgZGF0YS0+d2lkZ2V0
ID0gd2lkZ2V0OwpAQCAtODYsNiArOTIsMTYgQEAgV2lkZ2V0Ojp+V2lkZ2V0KCkKICAgICBkZWxl
dGUgZGF0YTsKIH0KIAordm9pZCBXaWRnZXQ6OnNldENvbnRhaW5pbmdXaW5kb3coV2ViS2l0R3Rr
UGFnZSogY29udGFpbmluZ1dpbmRvdykKK3sKKyAgICBkYXRhLT5jb250YWluaW5nV2luZG93ID0g
Y29udGFpbmluZ1dpbmRvdzsKK30KKworV2ViS2l0R3RrUGFnZSogV2lkZ2V0Ojpjb250YWluaW5n
V2luZG93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGF0YS0+Y29udGFpbmluZ1dpbmRvdzsKK30K
Kwogdm9pZCBXaWRnZXQ6OnNldENsaWVudChXaWRnZXRDbGllbnQqIGMpCiB7CiAgICAgZGF0YS0+
Y2xpZW50ID0gYzsKQEAgLTk4LDE1ICsxMTQsMjcgQEAgV2lkZ2V0Q2xpZW50KiBXaWRnZXQ6OmNs
aWVudCgpIGNvbnN0CiAKIEludFJlY3QgV2lkZ2V0OjpmcmFtZUdlb21ldHJ5KCkgY29uc3QKIHsK
LSAgICByZXR1cm4gZGF0YS0+Z2VvbWV0cnk7CisgICAgcmV0dXJuIGRhdGEtPmZyYW1lUmVjdDsK
K30KKwordm9pZCBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkoY29uc3QgSW50UmVjdCYgcikKK3sK
KyAgICBkYXRhLT5mcmFtZVJlY3QgPSByOworfQorCit2b2lkIFdpZGdldDo6c2V0UGFyZW50KFNj
cm9sbFZpZXcqIHYpCit7CisgICAgZGF0YS0+cGFyZW50ID0gdjsKK30KKworU2Nyb2xsVmlldyog
V2lkZ2V0OjpwYXJlbnQoKSBjb25zdAoreworICAgIHJldHVybiBkYXRhLT5wYXJlbnQ7CiB9CiAK
IHZvaWQgV2lkZ2V0OjpzZXRGb2N1cygpCiB7Ci0gICAgR3RrV2lkZ2V0ICp3aWRnZXQgPSBkYXRh
LT53aWRnZXQ7Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAgIHJldHVybjsKLSAgICBndGtfd2lk
Z2V0X2dyYWJfZm9jdXMod2lkZ2V0KTsKKyAgICBndGtfd2lkZ2V0X2dyYWJfZm9jdXMoaW50ZXJu
YWxHdGtXaWRnZXQoKSA/IGludGVybmFsR3RrV2lkZ2V0KCkgOiBHVEtfV0lER0VUKGNvbnRhaW5p
bmdXaW5kb3coKSkpOwogfQogCiB2b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYg
Y3Vyc29yKQpAQCAtMTE1LDM5ICsxNDMsMjEgQEAgdm9pZCBXaWRnZXQ6OnNldEN1cnNvcihjb25z
dCBDdXJzb3ImIGN1cnNvcikKICAgICBpZiAoIXBjdXIpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9IGdka0RyYXdhYmxlKCk7Ci0gICAgaWYgKCFkcmF3YWJs
ZSB8fCAhR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkpCi0gICAgICAgIHJldHVybjsKLSAgICBHZGtX
aW5kb3cqIHdpbmRvdyA9IEdES19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfc2V0
X2N1cnNvcih3aW5kb3csIHBjdXIpOwotCisgICAgZ2RrX3dpbmRvd19zZXRfY3Vyc29yKGRhdGEt
Pmdka0RyYXdhYmxlKCkgPyBHREtfV0lORE9XKGRhdGEtPmdka0RyYXdhYmxlKCkpIDogY29udGFp
bmluZ1dpbmRvdygpLT5iaW5fd2luZG93LCBwY3VyKTsKIH0KIAogdm9pZCBXaWRnZXQ6OnNob3co
KQogewotICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZSA9IGdka0RyYXdhYmxlKCk7Ci0gICAgaWYg
KCFkcmF3YWJsZSB8fCAhR0RLX0lTX1dJTkRPVyhkcmF3YWJsZSkpCisgICAgaWYgKCFpbnRlcm5h
bEd0a1dpZGdldCgpKQogICAgICAgICByZXR1cm47Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBH
REtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93X3Nob3cod2luZG93KTsKKyAgICBn
dGtfd2lkZ2V0X3Nob3coaW50ZXJuYWxHdGtXaWRnZXQoKSk7CiB9CiAKIHZvaWQgV2lkZ2V0Ojpo
aWRlKCkKIHsKLSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBnZGtEcmF3YWJsZSgpOwotICAg
IGlmICghZHJhd2FibGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUpKQorICAgIGlmICghaW50
ZXJuYWxHdGtXaWRnZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEdka1dpbmRvdyogd2luZG93
ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19oaWRlKHdpbmRvdyk7Ci19
Ci0KLXZvaWQgV2lkZ2V0OjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmIHIpCi17Ci0g
ICAgZGF0YS0+Z2VvbWV0cnkgPSByOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwoZGF0YS0+d2lkZ2V0
KTsKLQotICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbiA9IHsgci54KCksIHIueSgpLCByLndp
ZHRoKCksIHIuaGVpZ2h0KCkgfTsKLSAgICBndGtfd2lkZ2V0X3NpemVfYWxsb2NhdGUoZGF0YS0+
d2lkZ2V0LCAmYWxsb2NhdGlvbik7CisgICAgZ3RrX3dpZGdldF9oaWRlKGludGVybmFsR3RrV2lk
Z2V0KCkpOwogfQogCiB2b2lkIFdpZGdldDo6c2V0RW5hYmxlZChib29sKQpAQCAtMTYzLDMwICsx
NzMsMzUgQEAgYm9vbCBXaWRnZXQ6OmlzRW5hYmxlZCgpIGNvbnN0CiAKIHZvaWQgV2lkZ2V0Ojpy
ZW1vdmVGcm9tUGFyZW50KCkKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChwYXJl
bnQoKSkKKyAgICAgICAgcGFyZW50KCktPnJlbW92ZUNoaWxkKHRoaXMpOwogfQogCiAvKgogICog
c2ltaWxpYXIgdG8gZ3RrX2NvbnRhaW5lcl9wcm9wYWdhdGVfZXhwb3NlLCB3ZSB3YW50IHRvIG1h
a2Ugc3VyZQotICogZ3RrV2lkZ2V0KCkgaXMgcGFpbnRlZCBub3cuCisgKiBpbnRlcm5hbEd0a1dp
ZGdldCgpIGlzIHBhaW50ZWQgbm93LgorICoKKyAqIFRPRE86IHdlIG1pZ2h0IHdhbnQgdG8gaG9u
b3IgdGhlIHRyYW5zbGF0aW9uIG9mIHRoZSBjb250ZXh0IGFuZCBtYW5pcHVsYXRlCisgKiBhbGxv
Y2F0aW9uLnggYW5kIGFsbG9jYXRpb24ueSBiZWZvcmUgZHJhd2luZy4gVGhpcyBoYXMgcG90ZW50
aWFsIHRvIHJlbW92ZQorICogdGhlIHNldFNjcm9sbFZpZXdDb250cm9sIG1ldGhvZC4KICAqLwog
dm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVj
dCYpCiB7Ci0gICAgaWYgKCFndGtXaWRnZXQoKSkKKyAgICBpZiAoIWludGVybmFsR3RrV2lkZ2V0
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIEdka0V2ZW50KiBldmVudCA9IGdka19ldmVudF9u
ZXcoR0RLX0VYUE9TRSk7CiAgICAgZXZlbnQtPmV4cG9zZSA9ICpjb250ZXh0LT5nZGtFeHBvc2VF
dmVudCgpOwotICAgIGV2ZW50LT5leHBvc2UucmVnaW9uID0gZ3RrX3dpZGdldF9yZWdpb25faW50
ZXJzZWN0KGd0a1dpZGdldCgpLCBldmVudC0+ZXhwb3NlLnJlZ2lvbik7CisgICAgZXZlbnQtPmV4
cG9zZS5yZWdpb24gPSBndGtfd2lkZ2V0X3JlZ2lvbl9pbnRlcnNlY3QoaW50ZXJuYWxHdGtXaWRn
ZXQoKSwgZXZlbnQtPmV4cG9zZS5yZWdpb24pOwogICAgIGdfb2JqZWN0X3JlZihldmVudC0+ZXhw
b3NlLndpbmRvdyk7CiAKICAgICBpZiAoIWdka19yZWdpb25fZW1wdHkoZXZlbnQtPmV4cG9zZS5y
ZWdpb24pKSB7CiAgICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5y
ZWdpb24sICZldmVudC0+ZXhwb3NlLmFyZWEpOwotICAgICAgICBndGtfd2lkZ2V0X3NlbmRfZXhw
b3NlKGd0a1dpZGdldCgpLCBldmVudCk7CisgICAgICAgIGd0a193aWRnZXRfc2VuZF9leHBvc2Uo
aW50ZXJuYWxHdGtXaWRnZXQoKSwgZXZlbnQpOwogICAgIH0KIAotICAgIGd0a193aWRnZXRfc2Vu
ZF9leHBvc2UoZ3RrV2lkZ2V0KCksIGV2ZW50KTsKLSAgICBnZGtfZXZlbnRfZnJlZSAoZXZlbnQp
OworICAgIGd0a193aWRnZXRfc2VuZF9leHBvc2UoaW50ZXJuYWxHdGtXaWRnZXQoKSwgZXZlbnQp
OworICAgIGdka19ldmVudF9mcmVlKGV2ZW50KTsKIH0KIAogdm9pZCBXaWRnZXQ6OnNldElzU2Vs
ZWN0ZWQoYm9vbCkKQEAgLTE5NiwxNSArMjExLDEwMiBAQCB2b2lkIFdpZGdldDo6c2V0SXNTZWxl
Y3RlZChib29sKQogCiB2b2lkIFdpZGdldDo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgaWYgKGRhdGEt
PndpZGdldCkKLSAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3KGRhdGEtPndpZGdldCk7Cisg
ICAgaW52YWxpZGF0ZVJlY3QoSW50UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpOworfQor
Cit2b2lkIFdpZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBp
ZiAoZGF0YS0+c3VwcHJlc3NJbnZhbGlkYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGlm
ICghcGFyZW50KCkpIHsKKyAgICAgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJ
REdFVChjb250YWluaW5nV2luZG93KCkpLCByLngoKSwgci55KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHIud2lkdGgoKSwgci5oZWlnaHQoKSk7CisgICAgICAgIGlmIChp
c0ZyYW1lVmlldygpKQorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4odGhpcykt
PmFkZFRvRGlydHlSZWdpb24ocik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBH
ZXQgdGhlIHJvb3Qgd2lkZ2V0LgorICAgIFNjcm9sbFZpZXcqIG91dGVybW9zdFZpZXcgPSBwYXJl
bnQoKTsKKyAgICB3aGlsZSAob3V0ZXJtb3N0VmlldyAmJiBvdXRlcm1vc3RWaWV3LT5wYXJlbnQo
KSkKKyAgICAgICAgb3V0ZXJtb3N0VmlldyA9IG91dGVybW9zdFZpZXctPnBhcmVudCgpOworICAg
IGlmICghb3V0ZXJtb3N0VmlldykKKyAgICAgICAgcmV0dXJuOworCisgICAgSW50UmVjdCB3aW5k
b3dSZWN0ID0gY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhyKTsKKyAgICBndGtfd2lkZ2V0X3F1
ZXVlX2RyYXdfYXJlYShHVEtfV0lER0VUKGNvbnRhaW5pbmdXaW5kb3coKSksIHdpbmRvd1JlY3Qu
eCgpLCB3aW5kb3dSZWN0LnkoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5k
b3dSZWN0LndpZHRoKCksIHdpbmRvd1JlY3QuaGVpZ2h0KCkpOworICAgIG91dGVybW9zdFZpZXct
PmFkZFRvRGlydHlSZWdpb24od2luZG93UmVjdCk7Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29u
dmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7Cisg
ICAgSW50UG9pbnQgd2luZG93UG9pbnQgPSBwb2ludDsKKyAgICBmb3IgKGNvbnN0IFdpZGdldCAq
cGFyZW50V2lkZ2V0ID0gcGFyZW50KCksICpjaGlsZFdpZGdldCA9IHRoaXM7CisgICAgICAgICBw
YXJlbnRXaWRnZXQ7CisgICAgICAgICBjaGlsZFdpZGdldCA9IHBhcmVudFdpZGdldCwgcGFyZW50
V2lkZ2V0ID0gcGFyZW50V2lkZ2V0LT5wYXJlbnQoKSkKKyAgICAgICAgd2luZG93UG9pbnQgPSBw
YXJlbnRXaWRnZXQtPmNvbnZlcnRDaGlsZFRvU2VsZihjaGlsZFdpZGdldCwgd2luZG93UG9pbnQp
OworICAgIHJldHVybiB3aW5kb3dQb2ludDsKK30KKworSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0
RnJvbUNvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAg
IEludFBvaW50IHdpZGdldFBvaW50ID0gcG9pbnQ7CisgICAgZm9yIChjb25zdCBXaWRnZXQgKnBh
cmVudFdpZGdldCA9IHBhcmVudCgpLCAqY2hpbGRXaWRnZXQgPSB0aGlzOworICAgICAgICAgcGFy
ZW50V2lkZ2V0OworICAgICAgICAgY2hpbGRXaWRnZXQgPSBwYXJlbnRXaWRnZXQsIHBhcmVudFdp
ZGdldCA9IHBhcmVudFdpZGdldC0+cGFyZW50KCkpCisgICAgICAgIHdpZGdldFBvaW50ID0gcGFy
ZW50V2lkZ2V0LT5jb252ZXJ0U2VsZlRvQ2hpbGQoY2hpbGRXaWRnZXQsIHdpZGdldFBvaW50KTsK
KyAgICByZXR1cm4gd2lkZ2V0UG9pbnQ7Cit9CisKK0ludFJlY3QgV2lkZ2V0Ojpjb252ZXJ0VG9D
b250YWluaW5nV2luZG93KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Cit7CisgICAgSW50UmVj
dCBjb252ZXJ0ZWRSZWN0ID0gcmVjdDsKKyAgICBjb252ZXJ0ZWRSZWN0LnNldExvY2F0aW9uKGNv
bnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29udmVydGVkUmVjdC5sb2NhdGlvbigpKSk7CisgICAg
cmV0dXJuIGNvbnZlcnRlZFJlY3Q7Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29udmVydENoaWxk
VG9TZWxmKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QK
K3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpICsgY2hpbGQtPngoKSwgcG9pbnQueSgp
ICsgY2hpbGQtPnkoKSk7CiB9CiAKLXZvaWQgV2lkZ2V0OjppbnZhbGlkYXRlUmVjdChjb25zdCBJ
bnRSZWN0JiByZWN0KQorSW50UG9pbnQgV2lkZ2V0Ojpjb252ZXJ0U2VsZlRvQ2hpbGQoY29uc3Qg
V2lkZ2V0KiBjaGlsZCwgY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogewotICAgIGlmIChk
YXRhLT53aWRnZXQpCi0gICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19hcmVhKGRhdGEtPndp
ZGdldCwgcmVjdC54KCksIHJlY3QueSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBJbnRQb2ludChw
b2ludC54KCkgLSBjaGlsZC0+eCgpLCBwb2ludC55KCkgLSBjaGlsZC0+eSgpKTsKIH0KIAorYm9v
bCBXaWRnZXQ6OnN1cHByZXNzSW52YWxpZGF0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZGF0
YS0+c3VwcHJlc3NJbnZhbGlkYXRpb247Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRTdXBwcmVzc0lu
dmFsaWRhdGlvbihib29sIHN1cHByZXNzKQoreworICAgIGRhdGEtPnN1cHByZXNzSW52YWxpZGF0
aW9uID0gc3VwcHJlc3M7Cit9CisKK3ZvaWQgV2lkZ2V0OjpnZW9tZXRyeUNoYW5nZWQoKSBjb25z
dAoreworfQorCit2b2lkIFdpZGdldDo6c2V0U2Nyb2xsVmlld0NvbnRyb2woKQoreworICAgIGRh
dGEtPmlzU2Nyb2xsVmlld0NvbnRyb2wgPSB0cnVlOworfQorCit2b2lkIFdpZGdldDo6dXBkYXRl
TmF0aXZlQWxsb2NhdGlvbigpIGNvbnN0Cit7CisgICAgQVNTRVJUKGludGVybmFsR3RrV2lkZ2V0
KCkgJiYgcGFyZW50KCkgJiYgcGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAgRnJhbWVW
aWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisKKyAg
ICBJbnRSZWN0IHdpbmRvd1JlY3QgPSBkYXRhLT5pc1Njcm9sbFZpZXdDb250cm9sID8KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50UmVjdChmcmFtZVZpZXctPmNvbnZlcnRUb0Nv
bnRhaW5pbmdXaW5kb3coZnJhbWVHZW9tZXRyeSgpLmxvY2F0aW9uKCkpLCBmcmFtZUdlb21ldHJ5
KCkuc2l6ZSgpKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJlY3QoZnJh
bWVWaWV3LT5jb250ZW50c1RvV2luZG93KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJh
bWVHZW9tZXRyeSgpLnNpemUoKSk7CisKKyAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7
IHdpbmRvd1JlY3QueCgpLCB3aW5kb3dSZWN0LnkoKSwgd2luZG93UmVjdC53aWR0aCgpLCB3aW5k
b3dSZWN0LmhlaWdodCgpIH07CisgICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGRhdGEtPndp
ZGdldCwgJmFsbG9jYXRpb24pOworfQogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKaW5kZXggZTVjZWJjYS4uMGZiMGFmNyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCkBAIC0yMTIsNiArMjEyLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldEdka0V4cG9zZUV2ZW50KEdka0V2ZW50RXhw
b3NlKik7CiAgICAgICAgIEdka0RyYXdhYmxlKiBnZGtEcmF3YWJsZSgpIGNvbnN0OwogICAgICAg
ICBHZGtFdmVudEV4cG9zZSogZ2RrRXhwb3NlRXZlbnQoKSBjb25zdDsKKyAgICAgICAgSW50UG9p
bnQgdHJhbnNsYXRlUG9pbnQoY29uc3QgSW50UG9pbnQmKTsKICNlbmRpZgogCiAgICAgcHJpdmF0
ZToKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3ND
b250ZXh0Q2Fpcm8uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGlj
c0NvbnRleHRDYWlyby5jcHAKaW5kZXggZWQ0ZTA4My4uZDZmMWNiOCAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKKysr
IGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5j
cHAKQEAgLTgxMiw2ICs4MTIsMTcgQEAgR2RrRHJhd2FibGUqIEdyYXBoaWNzQ29udGV4dDo6Z2Rr
RHJhd2FibGUoKSBjb25zdAogewogICAgIHJldHVybiBHREtfRFJBV0FCTEUobV9kYXRhLT5leHBv
c2UtPndpbmRvdyk7CiB9CisKK0ludFBvaW50IEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUG9p
bnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQoreworICAgIGNhaXJvX21hdHJpeF90IHRtOworICAg
IGNhaXJvX2dldF9tYXRyaXgobV9kYXRhLT5jciwgJnRtKTsKKyAgICBkb3VibGUgeCA9IHBvaW50
LngoKTsKKyAgICBkb3VibGUgeSA9IHBvaW50LnkoKTsKKworICAgIGNhaXJvX21hdHJpeF90cmFu
c2Zvcm1fcG9pbnQoJnRtLCAmeCwgJnkpOworICAgIHJldHVybiBJbnRQb2ludCh4LHkpOworfQog
I2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYktpdC9ndGsv
QXBpL3dlYmtpdGd0ay1tYXJzaGFsLmxpc3QgYi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGstbWFy
c2hhbC5saXN0CmluZGV4IGFjYTQ2N2EuLjQwZDFlODcgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsv
QXBpL3dlYmtpdGd0ay1tYXJzaGFsLmxpc3QKKysrIGIvV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3Rr
LW1hcnNoYWwubGlzdApAQCAtMSwyICsxLDMgQEAKIFZPSUQ6U1RSSU5HLFNUUklORwogVk9JRDpP
QkpFQ1QsQk9PTEVBTgorVk9JRDpPQkpFQ1QsT0JKRUNUCmRpZmYgLS1naXQgYS9XZWJLaXQvZ3Rr
L0FwaS93ZWJraXRndGtwYWdlLmNwcCBiL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuY3Bw
CmluZGV4IGY0Y2Y1OGEuLjA5OTY3OGIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9ndGsvQXBpL3dlYmtp
dGd0a3BhZ2UuY3BwCisrKyBiL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuY3BwCkBAIC03
MCwxMSArNzAsMTIgQEAgZW51bSB7CiAKIHN0YXRpYyBndWludCB3ZWJraXRfZ3RrX3BhZ2Vfc2ln
bmFsc1tMQVNUX1NJR05BTF0gPSB7IDAsIH07CiAKLUdfREVGSU5FX1RZUEUoV2ViS2l0R3RrUGFn
ZSwgd2Via2l0X2d0a19wYWdlLCBHVEtfVFlQRV9MQVlPVVQpCitHX0RFRklORV9UWVBFKFdlYktp
dEd0a1BhZ2UsIHdlYmtpdF9ndGtfcGFnZSwgR1RLX1RZUEVfQ09OVEFJTkVSKQogCiBzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0X2d0a19wYWdlX2V4cG9zZV9ldmVudChHdGtXaWRnZXQqIHdpZGdldCwg
R2RrRXZlbnRFeHBvc2UqIGV2ZW50KQogewogICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IGNv
cmUoZ2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSkpOworCiAgICAgR2Rr
UmVjdGFuZ2xlIGNsaXA7CiAgICAgZ2RrX3JlZ2lvbl9nZXRfY2xpcGJveChldmVudC0+cmVnaW9u
LCAmY2xpcCk7CiAgICAgZ2RrX3dpbmRvd19iZWdpbl9wYWludF9yZWdpb24oZXZlbnQtPndpbmRv
dywgZXZlbnQtPnJlZ2lvbik7CkBAIC04NSw3ICs4Niw3IEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZ3RrX3BhZ2VfZXhwb3NlX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEV4cG9z
ZSoKICAgICAgICAgaWYgKGZyYW1lLT52aWV3KCktPm5lZWRzTGF5b3V0KCkpCiAgICAgICAgICAg
ICBmcmFtZS0+dmlldygpLT5sYXlvdXQoKTsKICAgICAgICAgSW50UmVjdCByZWN0KGNsaXAueCwg
Y2xpcC55LCBjbGlwLndpZHRoLCBjbGlwLmhlaWdodCk7Ci0gICAgICAgIGZyYW1lLT5wYWludCgm
Y3R4LCByZWN0KTsKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+cGFpbnQoJmN0eCwgcmVjdCk7CiAg
ICAgfQogICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwogCkBAIC0xMzQsMTMgKzEzNSw2IEBAIHN0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2Vfc2Nyb2xsX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0
LCBHZGtFdmVudFNjcm9sbCoKICAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5v
ZGUoKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiBGQUxTRTsKLSAgICAvKgotICAg
ICAqIEZJWE1FOiBEb2VzIHRoaXMgYmVsb25nIGhlcmU/Ci0gICAgICogRGVmYXVsdCB0byBzY3Jv
bGxpbmcgdGhlIHBhZ2UKLSAgICAgKiBub3Qgc3VyZSB3aHkgaXRzIG51bGwKLSAgICAgKiBicm9r
ZSBhbnl3YXkgd2hlbiBpdHMgbm90IG51bGwKLSAgICAgKiBkb1Njcm9sbChyZW5kZXJlcigpLCB3
aGVlbEV2ZW50LmRlbHRhWCgpLCB3aGVlbEV2ZW50LmRlbHRhWSgpKTsKLSAgICAgKi8KIAogICAg
IHJldHVybiBUUlVFOwogfQpAQCAtMTQ5LDE5ICsxNDMsNTAgQEAgc3RhdGljIHZvaWQgd2Via2l0
X2d0a19wYWdlX3NpemVfYWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0FsbG9jYXRpb24q
IGFsbG8KIHsKICAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF9ndGtfcGFnZV9wYXJlbnRfY2xh
c3MpLT5zaXplX2FsbG9jYXRlKHdpZGdldCwgYWxsb2NhdGlvbik7CiAKKyAgICBpZiAoR1RLX1dJ
REdFVF9SRUFMSVpFRCh3aWRnZXQpKQorICAgICAgICBnZGtfd2luZG93X3Jlc2l6ZShXRUJLSVRf
R1RLX1BBR0Uod2lkZ2V0KS0+YmluX3dpbmRvdywgYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRp
b24tPmhlaWdodCk7CisKICAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1l
RnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKKyAgICBpZiAoIWZyYW1lLT52aWV3
KCkpCisgICAgICAgIHJldHVybjsKIAotICAgIGZyYW1lLT52aWV3KCktPnVwZGF0ZUdlb21ldHJ5
KGFsbG9jYXRpb24tPndpZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpOworICAgIGZyYW1lLT52aWV3
KCktPnJlc2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KTsKICAgICBm
cmFtZS0+Zm9yY2VMYXlvdXQoKTsKICAgICBmcmFtZS0+dmlldygpLT5hZGp1c3RWaWV3U2l6ZSgp
OwogICAgIGZyYW1lLT5zZW5kUmVzaXplRXZlbnQoKTsKIH0KIAorLyoKKyAqIGl0IGlzIGEgR3Rr
Q29udGFpbmVyIHRvIGltcGxlbWVudCBTY3JvbGxWaWV3LiBBbmQgd2UgbmVlZCB0byBtYWtlIGl0
IHNpbWlsaWFyCisgKiB0byBHdGtMYXlvdXQgdG8gaGF2ZSBzYW5lIHBhaW50aW5nLgorICovCiBz
dGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKIHsK
LSAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5yZWFs
aXplKHdpZGdldCk7Ci0gICAgZ2RrX3dpbmRvd19zZXRfZXZlbnRzKEdUS19MQVlPVVQod2lkZ2V0
KS0+YmluX3dpbmRvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKEdka0V2ZW50TWFzayko
R0RLX0VYUE9TVVJFX01BU0sKKyAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3aWRnZXQsIEdUS19S
RUFMSVpFRCk7CisKKyAgICBHZGtXaW5kb3dBdHRyIGF0dHJpYnV0ZXM7CisKKyAgICBhdHRyaWJ1
dGVzLndpbmRvd190eXBlID0gR0RLX1dJTkRPV19DSElMRDsKKyAgICBhdHRyaWJ1dGVzLnggPSB3
aWRnZXQtPmFsbG9jYXRpb24ueDsKKyAgICBhdHRyaWJ1dGVzLnkgPSB3aWRnZXQtPmFsbG9jYXRp
b24ueTsKKyAgICBhdHRyaWJ1dGVzLndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0aW9uLndpZHRoOwor
ICAgIGF0dHJpYnV0ZXMuaGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodDsKKyAgICBh
dHRyaWJ1dGVzLndjbGFzcyA9IEdES19JTlBVVF9PVVRQVVQ7CisgICAgYXR0cmlidXRlcy52aXN1
YWwgPSBndGtfd2lkZ2V0X2dldF92aXN1YWwgKHdpZGdldCk7CisgICAgYXR0cmlidXRlcy5jb2xv
cm1hcCA9IGd0a193aWRnZXRfZ2V0X2NvbG9ybWFwICh3aWRnZXQpOworICAgIGF0dHJpYnV0ZXMu
ZXZlbnRfbWFzayA9IEdES19WSVNJQklMSVRZX05PVElGWV9NQVNLOworCisgICAgZ2ludCBhdHRy
aWJ1dGVzX21hc2sgPSBHREtfV0FfWCB8IEdES19XQV9ZIHwgR0RLX1dBX1ZJU1VBTCB8IEdES19X
QV9DT0xPUk1BUDsKKyAgICB3aWRnZXQtPndpbmRvdyA9IGdka193aW5kb3dfbmV3KGd0a193aWRn
ZXRfZ2V0X3BhcmVudF93aW5kb3cgKHdpZGdldCksICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzX21h
c2spOworICAgIGdka193aW5kb3dfc2V0X2JhY2tfcGl4bWFwKHdpZGdldC0+d2luZG93LCBOVUxM
LCBGQUxTRSk7CisgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHdpZGdldC0+d2luZG93LCB3
aWRnZXQpOworCisgICAgYXR0cmlidXRlcy54ID0gMDsKKyAgICBhdHRyaWJ1dGVzLnkgPSAwOwor
ICAgIGF0dHJpYnV0ZXMud2lkdGggPSB3aWRnZXQtPmFsbG9jYXRpb24ud2lkdGg7CisgICAgYXR0
cmlidXRlcy5oZWlnaHQgPSB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0OworICAgIGF0dHJpYnV0
ZXMuZXZlbnRfbWFzayA9IEdES19FWFBPU1VSRV9NQVNLCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBHREtfU0NST0xMX01BU0sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdE
S19CVVRUT05fUFJFU1NfTUFTSwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JV
VFRPTl9SRUxFQVNFX01BU0sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19QT0lO
VEVSX01PVElPTl9NQVNLCkBAIC0xNzAsNyArMTk1LDkwIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9n
dGtfcGFnZV9yZWFsaXplKEd0a1dpZGdldCogd2lkZ2V0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgR0RLX0JVVFRPTl9NT1RJT05fTUFTSwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgR0RLX0JVVFRPTjFfTU9USU9OX01BU0sKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IEdES19CVVRUT04yX01PVElPTl9NQVNLCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBHREtfQlVUVE9OM19NT1RJT05fTUFTSykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgR0RLX0JVVFRPTjNfTU9USU9OX01BU0sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IGd0a193aWRnZXRfZ2V0X2V2ZW50cyh3aWRnZXQpOworCisgICAgV2ViS2l0R3RrUGFnZSogcGFn
ZSA9IFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpOworICAgIHBhZ2UtPmJpbl93aW5kb3cgPSBnZGtf
d2luZG93X25ldyh3aWRnZXQtPndpbmRvdywgJmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXNfbWFzayk7
CisgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHBhZ2UtPmJpbl93aW5kb3csIHdpZGdldCk7
CisKKyAgICB3aWRnZXQtPnN0eWxlID0gZ3RrX3N0eWxlX2F0dGFjaCAod2lkZ2V0LT5zdHlsZSwg
d2lkZ2V0LT53aW5kb3cpOworICAgIGd0a19zdHlsZV9zZXRfYmFja2dyb3VuZCh3aWRnZXQtPnN0
eWxlLCBwYWdlLT5iaW5fd2luZG93LCBHVEtfU1RBVEVfTk9STUFMKTsKKworICAgIFdlYktpdEd0
a1BhZ2VQcml2YXRlKiBwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUo
cGFnZSk7CisgICAgSGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gcHJp
dmF0ZV9kYXRhLT5jaGlsZHJlbi5lbmQoKTsKKyAgICBmb3IgKEhhc2hTZXQ8R3RrV2lkZ2V0Kj46
OmNvbnN0X2l0ZXJhdG9yIGN1cnJlbnQgPSBwcml2YXRlX2RhdGEtPmNoaWxkcmVuLmJlZ2luKCk7
IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCisgICAgICAgIGd0a193aWRnZXRfc2V0X3BhcmVu
dF93aW5kb3coKmN1cnJlbnQsIHBhZ2UtPmJpbl93aW5kb3cpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRfZ3RrX3BhZ2VfbWFwKEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIEdUS19XSURHRVRf
U0VUX0ZMQUdTKHdpZGdldCwgR1RLX01BUFBFRCk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUq
IHByaXZhdGVfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BB
R0Uod2lkZ2V0KSk7CisKKyAgICBIYXNoU2V0PEd0a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBwcml2YXRlX2RhdGEtPmNoaWxkcmVuLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxHdGtX
aWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4u
YmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKKyAgICAgICAgaWYgKEdUS19XSURH
RVRfVklTSUJMRSgqY3VycmVudCkgJiYgIUdUS19XSURHRVRfTUFQUEVEKCpjdXJyZW50KSkKKyAg
ICAgICAgICAgIGd0a193aWRnZXRfbWFwKCgqY3VycmVudCkpOworCisgICAgZ2RrX3dpbmRvd19z
aG93KFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpLT5iaW5fd2luZG93KTsKKyAgICBnZGtfd2luZG93
X3Nob3cod2lkZ2V0LT53aW5kb3cpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vf
c3R5bGVfc2V0KEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdHlsZSogb2xkX3N0eWxlKQoreworICAg
IGlmIChHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5zdHls
ZV9zZXQpCisgICAgICAgIEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X2d0a19wYWdlX3BhcmVudF9j
bGFzcyktPnN0eWxlX3NldCh3aWRnZXQsIG9sZF9zdHlsZSk7CisKKyAgICBpZiAoR1RLX1dJREdF
VF9SRUFMSVpFRCh3aWRnZXQpKQorICAgICAgICBndGtfc3R5bGVfc2V0X2JhY2tncm91bmQod2lk
Z2V0LT5zdHlsZSwgV0VCS0lUX0dUS19QQUdFKHdpZGdldCktPmJpbl93aW5kb3csIEdUS19TVEFU
RV9OT1JNQUwpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfY29udGFpbmVyX2Fk
ZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2Vi
S2l0R3RrUGFnZSogcGFnZSA9IFdFQktJVF9HVEtfUEFHRShjb250YWluZXIpOworICAgIFdlYktp
dEd0a1BhZ2VQcml2YXRlKiBwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZB
VEUocGFnZSk7CisKKyAgICBwcml2YXRlX2RhdGEtPmNoaWxkcmVuLmFkZCh3aWRnZXQpOworICAg
IGlmIChHVEtfV0lER0VUX1JFQUxJWkVEKGNvbnRhaW5lcikpCisgICAgICAgIGd0a193aWRnZXRf
c2V0X3BhcmVudF93aW5kb3cod2lkZ2V0LCBwYWdlLT5iaW5fd2luZG93KTsKKyAgICBndGtfd2lk
Z2V0X3NldF9wYXJlbnQod2lkZ2V0LCBHVEtfV0lER0VUKGNvbnRhaW5lcikpOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfY29udGFpbmVyX3JlbW92ZShHdGtDb250YWluZXIqIGNv
bnRhaW5lciwgR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUq
IHByaXZhdGVfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BB
R0UoY29udGFpbmVyKSk7CisKKyAgICBpZiAocHJpdmF0ZV9kYXRhLT5jaGlsZHJlbi5jb250YWlu
cyh3aWRnZXQpKSB7CisgICAgICAgIGd0a193aWRnZXRfdW5wYXJlbnQod2lkZ2V0KTsKKyAgICAg
ICAgcHJpdmF0ZV9kYXRhLT5jaGlsZHJlbi5yZW1vdmUod2lkZ2V0KTsKKyAgICB9Cit9CisKKy8q
CisgKiB0YWtlIG93bmVyc2hpcCBvZiB0aGUgYWRqdXN0bWVudHMgYW5kIGlmIHdlIGhhdmUgYSBG
cmFtZVZpZXcgYWxyZWFkeSBzZXQgdGhlCisgKiBhZGp1c3RtZW50cyBhcyB3ZWxsLgorICovCitz
dGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc2V0X2FkanVzdG1lbnRzKFdlYktpdEd0a1BhZ2Uq
IHBhZ2UsIEd0a0FkanVzdG1lbnQqIGhvcml6b250YWxBZGp1c3RtZW50LCBHdGtBZGp1c3RtZW50
KiB2ZXJ0aWNhbEFkanVzdG1lbnQpCit7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUgKnByaXZh
dGVfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0UocGFn
ZSkpOworCisgICAgaWYgKHByaXZhdGVfZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpCisgICAg
ICAgIGdfb2JqZWN0X3VucmVmKHByaXZhdGVfZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQpOwor
ICAgIGlmIChwcml2YXRlX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCkKKyAgICAgICAgZ19vYmpl
Y3RfdW5yZWYocHJpdmF0ZV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpOworCisgICAgcHJpdmF0
ZV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0bWVudCA9IGhvcml6b250YWxBZGp1c3RtZW50OworICAg
IHByaXZhdGVfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50ID0gdmVydGljYWxBZGp1c3RtZW50Owor
CisgICAgaWYgKGhvcml6b250YWxBZGp1c3RtZW50KQorICAgICAgICBnX29iamVjdF9yZWZfc2lu
ayhob3Jpem9udGFsQWRqdXN0bWVudCk7CisgICAgaWYgKHZlcnRpY2FsQWRqdXN0bWVudCkKKyAg
ICAgICAgZ19vYmplY3RfcmVmX3NpbmsodmVydGljYWxBZGp1c3RtZW50KTsKKworICAgIFdlYkNv
cmU6OkZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShwYWdlKSk7CisgICAgaWYg
KGZyYW1lLT52aWV3KCkpCisgICAgICAgIGZyYW1lLT52aWV3KCktPnNldEd0a0FkanVzdG1lbnRz
KGhvcml6b250YWxBZGp1c3RtZW50LCB2ZXJ0aWNhbEFkanVzdG1lbnQpOwogfQogCiBzdGF0aWMg
V2ViS2l0R3RrRnJhbWUqIHdlYmtpdF9ndGtfcGFnZV9yZWFsX2NyZWF0ZV9mcmFtZShXZWJLaXRH
dGtQYWdlKiwgV2ViS2l0R3RrRnJhbWUqIHBhcmVudCwgV2ViS2l0R3RrRnJhbWVEYXRhKikKQEAg
LTIzMCw5ICszMzgsMjEgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2ZpbmFsaXplKEdP
YmplY3QqIG9iamVjdCkKIAogICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEg
PSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKG9iamVjdCkpOwog
ICAgIC8vZGVsZXRlIHByaXZhdGVfZGF0YS0+cGFnZTsgLSB3ZSBkb24ndCBoYXZlIGEgRHJhZ0Ns
aWVudCB5ZXQsIHNvIGl0IGlzIGNyYXNoaW5nIGhlcmUKKworICAgIC8qCisgICAgICogRm9yZ2V0
IGFsbCBjaGlsZHJlbiBidXQgZG9uJ3QgdW5wYXJlbnQgdGhlbSBhcyB0aGUgU2Nyb2xsVmlldyB3
aWxsIHN0aWwKKyAgICAgKiB0cnkgdG8gcmVtb3ZlIHRoZW0gZHVlIHVzIGRlbGV0aW5nIHRoZSBt
YWluX2ZyYW1lLgorICAgICAqLworICAgIHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uY2xlYXIoKTsK
KwogICAgIGRlbGV0ZSBwcml2YXRlX2RhdGEtPnNldHRpbmdzOwogICAgIGdfb2JqZWN0X3VucmVm
KHByaXZhdGVfZGF0YS0+bWFpbl9mcmFtZSk7CiAgICAgZGVsZXRlIHByaXZhdGVfZGF0YS0+dXNl
cl9hZ2VudDsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KQor
ICAgICAgICBnX29iamVjdF91bnJlZihwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50
KTsKKyAgICBpZiAocHJpdmF0ZV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIGdf
b2JqZWN0X3VucmVmKHByaXZhdGVfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKIH0KIAogc3Rh
dGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NsYXNzX2luaXQoV2ViS2l0R3RrUGFnZUNsYXNzKiBw
YWdlX2NsYXNzKQpAQCAtMjQzLDYgKzM2Myw5IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFn
ZV9jbGFzc19pbml0KFdlYktpdEd0a1BhZ2VDbGFzcyogcGFnZV9jbGFzcykKICAgICAvKgogICAg
ICAqIHNpZ25hbHMKICAgICAgKi8KKyAgICBHT2JqZWN0Q2xhc3MqIG9iamVjdF9jbGFzcyA9IEdf
T0JKRUNUX0NMQVNTKHBhZ2VfY2xhc3MpOworICAgIG9iamVjdF9jbGFzcy0+ZmluYWxpemUgPSB3
ZWJraXRfZ3RrX3BhZ2VfZmluYWxpemU7CisKICAgICBHdGtXaWRnZXRDbGFzcyogd2lkZ2V0X2Ns
YXNzID0gR1RLX1dJREdFVF9DTEFTUyhwYWdlX2NsYXNzKTsKICAgICB3aWRnZXRfY2xhc3MtPmV4
cG9zZV9ldmVudCA9IHdlYmtpdF9ndGtfcGFnZV9leHBvc2VfZXZlbnQ7CiAgICAgd2lkZ2V0X2Ns
YXNzLT5rZXlfcHJlc3NfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2Vfa2V5X2V2ZW50OwpAQCAtMjUz
LDYgKzM3NiwxMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfY2xhc3NfaW5pdChXZWJL
aXRHdGtQYWdlQ2xhc3MqIHBhZ2VfY2xhc3MpCiAgICAgd2lkZ2V0X2NsYXNzLT5zY3JvbGxfZXZl
bnQgPSB3ZWJraXRfZ3RrX3BhZ2Vfc2Nyb2xsX2V2ZW50OwogICAgIHdpZGdldF9jbGFzcy0+cmVh
bGl6ZSA9IHdlYmtpdF9ndGtfcGFnZV9yZWFsaXplOwogICAgIHdpZGdldF9jbGFzcy0+c2l6ZV9h
bGxvY2F0ZSA9IHdlYmtpdF9ndGtfcGFnZV9zaXplX2FsbG9jYXRlOworICAgIHdpZGdldF9jbGFz
cy0+c3R5bGVfc2V0ID0gd2Via2l0X2d0a19wYWdlX3N0eWxlX3NldDsKKyAgICB3aWRnZXRfY2xh
c3MtPm1hcCA9IHdlYmtpdF9ndGtfcGFnZV9tYXA7CisKKyAgICBHdGtDb250YWluZXJDbGFzcyog
Y29udGFpbmVyX2NsYXNzID0gR1RLX0NPTlRBSU5FUl9DTEFTUyhwYWdlX2NsYXNzKTsKKyAgICBj
b250YWluZXJfY2xhc3MtPmFkZCA9IHdlYmtpdF9ndGtfcGFnZV9jb250YWluZXJfYWRkOworICAg
IGNvbnRhaW5lcl9jbGFzcy0+cmVtb3ZlID0gd2Via2l0X2d0a19wYWdlX2NvbnRhaW5lcl9yZW1v
dmU7CiAKICAgICAvKioKICAgICAgKiBXZWJLaXRHdGtQYWdlOjpsb2FkLXN0YXJ0ZWQKQEAgLTM0
NSw2ICs0NzQsMTkgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NsYXNzX2luaXQoV2Vi
S2l0R3RrUGFnZUNsYXNzKiBwYWdlX2NsYXNzKQogICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJz
aGFsX1ZPSURfX1ZPSUQsCiAgICAgICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CiAKKyAgICAvKgor
ICAgICAqIG1ha2UgdXMgc2Nyb2xsYWJsZSAoZS5nLiBhZGRhYmxlIHRvIGEgR3RrU2Nyb2xsZWRX
aW5kb3cpCisgICAgICovCisgICAgcGFnZV9jbGFzcy0+c2V0X3Njcm9sbF9hZGp1c3RtZW50cyA9
IHdlYmtpdF9ndGtfcGFnZV9zZXRfYWRqdXN0bWVudHM7CisgICAgR1RLX1dJREdFVF9DTEFTUyhw
YWdlX2NsYXNzKS0+c2V0X3Njcm9sbF9hZGp1c3RtZW50c19zaWduYWwgPSBnX3NpZ25hbF9uZXco
InNldF9zY3JvbGxfYWRqdXN0bWVudHMiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1Mo
cGFnZV9jbGFzcyksCisgICAgICAgICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFT
VCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0
R3RrUGFnZUNsYXNzLCBzZXRfc2Nyb2xsX2FkanVzdG1lbnRzKSwKKyAgICAgICAgICAgIE5VTEws
IE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfZ3RrX21hcnNoYWxfVk9JRF9fT0JKRUNUX09CSkVD
VCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAyLAorICAgICAgICAgICAgR1RLX1RZUEVfQURK
VVNUTUVOVCwgR1RLX1RZUEVfQURKVVNUTUVOVCk7CisKIAogICAgIC8qCiAgICAgICogaW1wbGVt
ZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcwpAQCAtMzU3LDEyICs0OTksMTIgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X2d0a19wYWdlX2NsYXNzX2luaXQoV2ViS2l0R3RrUGFnZUNsYXNzKiBwYWdl
X2NsYXNzKQogICAgIHBhZ2VfY2xhc3MtPmphdmFfc2NyaXB0X2NvbmZpcm0gPSB3ZWJraXRfZ3Rr
X3BhZ2VfcmVhbF9qYXZhX3NjcmlwdF9jb25maXJtOwogICAgIHBhZ2VfY2xhc3MtPmphdmFfc2Ny
aXB0X3Byb21wdCA9IHdlYmtpdF9ndGtfcGFnZV9yZWFsX2phdmFfc2NyaXB0X3Byb21wdDsKICAg
ICBwYWdlX2NsYXNzLT5qYXZhX3NjcmlwdF9jb25zb2xlX21lc3NhZ2UgPSB3ZWJraXRfZ3RrX3Bh
Z2VfcmVhbF9qYXZhX3NjcmlwdF9jb25zb2xlX21lc3NhZ2U7Ci0gICAgR19PQkpFQ1RfQ0xBU1Mo
cGFnZV9jbGFzcyktPmZpbmFsaXplID0gd2Via2l0X2d0a19wYWdlX2ZpbmFsaXplOwogfQogCiBz
dGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfaW5pdChXZWJLaXRHdGtQYWdlKiBwYWdlKQogewog
ICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHBhZ2UsIEdUS19DQU5fRk9DVVMpOworICAgIHBhZ2Ut
PmJpbl93aW5kb3cgPSAwOwogCiAgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUgKnByaXZhdGVfZGF0
YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0UocGFnZSkpOwog
ICAgIHByaXZhdGVfZGF0YS0+cGFnZSA9IG5ldyBQYWdlKG5ldyBDaHJvbWVDbGllbnRHZGsocGFn
ZSksIG5ldyBDb250ZXh0TWVudUNsaWVudEdkaywgbmV3IEVkaXRvckNsaWVudEdkayhwYWdlKSwg
MCwgbmV3IEluc3BlY3RvckNsaWVudEdkayk7CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtwYWdlLmggYi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwYWdlLmgKaW5kZXggMjg2
ZDVhMC4uOTkxOGEyMSAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5o
CisrKyBiL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaApAQCAtNjEsMTEgKzYxLDEzIEBA
IHR5cGVkZWYgc3RydWN0IF9XZWJLaXRHdGtQYWdlQ2xhc3MgV2ViS2l0R3RrUGFnZUNsYXNzOwog
ICogdGhlICBzaXplIG9mIHRoZSB2aWV3cG9ydCBhbmQgd2Ugd29uJ3QgYmUgYWJsZSB0byB1c2Ug
Z2RrX3dpbmRvd19tb3ZlLgogICovCiBzdHJ1Y3QgX1dlYktpdEd0a1BhZ2UgewotICAgIEd0a0xh
eW91dCBwYXJlbnQ7CisgICAgR3RrQ29udGFpbmVyIHBhcmVudDsKKworICAgIEdka1dpbmRvdyAq
YmluX3dpbmRvdzsKIH07CiAKIHN0cnVjdCBfV2ViS2l0R3RrUGFnZUNsYXNzIHsKLSAgICBHdGtM
YXlvdXRDbGFzcyBwYXJlbnQ7CisgICAgR3RrQ29udGFpbmVyQ2xhc3MgcGFyZW50OwogCiAgICAg
LyoKICAgICAgKiBkZWZhdWx0IGhhbmRsZXIvdmlydHVhbCBtZXRob2RzCkBAIC04OSw2ICs5MSwx
MSBAQCBzdHJ1Y3QgX1dlYktpdEd0a1BhZ2VDbGFzcyB7CiAgICAgZ2Jvb2xlYW4gICAoKmphdmFf
c2NyaXB0X2NvbmZpcm0pIChXZWJLaXRHdGtQYWdlKiBwYWdlLCBXZWJLaXRHdGtGcmFtZSogZnJh
bWUsIGNvbnN0IGdjaGFyKiBjb25maXJtX21lc3NhZ2UpOwogICAgIGdjaGFyKiAoKmphdmFfc2Ny
aXB0X3Byb21wdCkgKFdlYktpdEd0a1BhZ2UqIHBhZ2UsIFdlYktpdEd0a0ZyYW1lKiBmcmFtZSwg
Y29uc3QgZ2NoYXIqIG1lc3NhZ2UsIGNvbnN0IGdjaGFyKiBkZWZhdWx0X3ZhbHVlKTsKICAgICB2
b2lkICAgKCpqYXZhX3NjcmlwdF9jb25zb2xlX21lc3NhZ2UpIChXZWJLaXRHdGtQYWdlKiwgY29u
c3QgZ2NoYXIqIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lX251bWJlciwgY29uc3QgZ2NoYXIq
IHNvdXJjZV9pZCk7CisKKyAgICAvKgorICAgICAqIGludGVybmFsCisgICAgICovCisgICAgdm9p
ZCAgICgqc2V0X3Njcm9sbF9hZGp1c3RtZW50cykgKFdlYktpdEd0a1BhZ2UqLCBHdGtBZGp1c3Rt
ZW50KiwgR3RrQWRqdXN0bWVudCopOwogfTsKIAogV0VCS0lUX0dUS19BUEkgR1R5cGUKZGlmZiAt
LWdpdCBhL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuY3BwIGIvV2ViS2l0L2d0ay9B
cGkvd2Via2l0Z3RrcHJpdmF0ZS5jcHAKaW5kZXggMTliN2IxMi4uNmQ2ZTYyOCAxMDA2NDQKLS0t
IGEvV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5jcHAKKysrIGIvV2ViS2l0L2d0ay9B
cGkvd2Via2l0Z3RrcHJpdmF0ZS5jcHAKQEAgLTgwLDQgKzgwLDE2IEBAIFdlYktpdEd0a1BhZ2Uq
IGtpdChXZWJDb3JlOjpQYWdlKiBwYWdlKQogICAgIENocm9tZUNsaWVudEdkayogY2xpZW50ID0g
c3RhdGljX2Nhc3Q8Q2hyb21lQ2xpZW50R2RrKj4ocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpKTsK
ICAgICByZXR1cm4gY2xpZW50LT53ZWJQYWdlKCk7CiB9CisKKy8qCisgKiBJZiB3ZSBjYW4sIGFw
cGx5IHRoZSBleHRlcm5hbCBHdGtBZGp1c3RtZW50cyB0byB0aGUgRnJhbWVWaWV3CisgKi8KK3Zv
aWQgYXBwbHlBZGp1c3RtZW50cyhXZWJLaXRHdGtQYWdlKiBwYWdlLCBXZWJDb3JlOjpGcmFtZVZp
ZXcqIHZpZXcpCit7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VfZGF0YSA9IFdFQktJ
VF9HVEtfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKKworICAgIGlmIChwYWdlX2RhdGEtPmhvcml6
b250YWxBZGp1c3RtZW50ICYmIHBhZ2VfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KQorICAgICAg
ICB2aWV3LT5zZXRHdGtBZGp1c3RtZW50cyhwYWdlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWdlX2RhdGEtPnZlcnRpY2FsQWRq
dXN0bWVudCk7Cit9CiB9CmRpZmYgLS1naXQgYS9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2
YXRlLmggYi9XZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgKaW5kZXggZjg4NmE4MS4u
M2Y4NzMzYiAxMDA2NDQKLS0tIGEvV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCisr
KyBiL1dlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuaApAQCAtNDUsNiArNDUsNyBAQAog
I2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRH
ZGsuaCIKIAogbmFtZXNwYWNlIFdlYktpdEd0ayB7CkBAIC01Nyw2ICs1OCw4IEBAIG5hbWVzcGFj
ZSBXZWJLaXRHdGsgewogICAgIFdlYktpdEd0a0ZyYW1lKiBraXQoV2ViQ29yZTo6RnJhbWUqKTsK
ICAgICBXZWJDb3JlOjpQYWdlKiBjb3JlKFdlYktpdEd0a1BhZ2UqKTsKICAgICBXZWJLaXRHdGtQ
YWdlKiBraXQoV2ViQ29yZTo6UGFnZSopOworCisgICAgdm9pZCBhcHBseUFkanVzdG1lbnRzKFdl
YktpdEd0a1BhZ2UqLCBXZWJDb3JlOjpGcmFtZVZpZXcqKTsKIH0KIAogZXh0ZXJuICJDIiB7CkBA
IC02OSw2ICs3MiwxNCBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgV2ViS2l0R3RrRnJhbWUqIG1h
aW5fZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyBhcHBsaWNhdGlvbl9uYW1lX2Zvcl91
c2VyX2FnZW50OwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcqIHVzZXJfYWdlbnQ7CisKKyAgICAg
ICAgLyoKKyAgICAgICAgICogZS5nLiBzZXQgYnkgYSBHdGtTY3JvbGxlZFdpbmRvdyBhbmQgdXNl
ZCBieSB0aGUgRnJhbWVWaWV3IG9mIG91ciBtYWluX2ZyYW1lCisgICAgICAgICAqLworICAgICAg
ICBHdGtBZGp1c3RtZW50KiBob3Jpem9udGFsQWRqdXN0bWVudDsKKyAgICAgICAgR3RrQWRqdXN0
bWVudCogdmVydGljYWxBZGp1c3RtZW50OworCisgICAgICAgIEhhc2hTZXQ8R3RrV2lkZ2V0Kj4g
Y2hpbGRyZW47CiAgICAgfTsKICAgICAKICAgICAjZGVmaW5lIFdFQktJVF9HVEtfRlJBTUVfR0VU
X1BSSVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJL
SVRfR1RLX1RZUEVfRlJBTUUsIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSkpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15748</attachid>
            <date>2007-07-30 12:42:18 -0700</date>
            <delta_ts>2007-07-31 07:19:27 -0700</delta_ts>
            <desc>Implement ScrollView similiar to win/qt</desc>
            <filename>gtk-scrollview-r0.patch</filename>
            <type>text/plain</type>
            <size>110306</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQ5IEBACisyMDA3LTA3LTMwICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAg
PHplY2tlQHNlbGZpc2gub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisg
ICAgICAgIEtpbGwgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSB3
YXMgbW92ZWQgdG8KKyAgICAgICAgV2ViS2l0R3RrUGFnZSwgSW1hZ2VHZGsgYW5kIHRoZSBuZWVk
ZWQgc3R1YnMgZm9yIEZyYW1lIHdoZXJlIGludHJvZHVjZWQKKyAgICAgICAgaW4gcGFnZS9nZGsv
RnJhbWVHZGsuIE9uIHRoaXMgd2F5IGNoYW5nZWQgdGhlIGNvbnN0cnVjdG9ycyBvZiB0aGUgdmFy
aW91cworICAgICAgICBQbGF0Zm9ybSpFdmVudCBtZXRob2RzIHRvIHVzZSB0aGUgc3BlY2lhbGlz
ZWQgdHlwZSBpbnN0ZWFkIG9mIHRoZSBHZGtFdmVudCB1bmlvbi4KKyAgICAgICAgVGhpcyBpcyBu
ZWVkZWQgZHVlIHRoZSBjaGFuZ2VzIGluIFdlYktpdEd0a1BhZ2UgYW5kIHRoZSByZWltcGxlbWVu
dGF0aW9uIG9mIHRoZQorICAgICAgICB2YXJpb3VzIGV2ZW50IGhvb2tzLgorCisgICAgICAgIENy
ZWF0ZSB0aGUgRnJhbWVWaWV3IGZyb20gd2l0aGluIG1ha2VEb2N1bWVudFZpZXcgYW5kIGFzIGRv
Y3VtZW50ZWQgaXQgZG9lc24ndAorICAgICAgICBob25vciB0aGUgbWFyZ2lucyBhcyBXZWJWaWV3
IGlzIGRvaW5nLiBUaGlzIHJlbWFpbnMgdG8gYmUgZG9uZS4KKworICAgICAgICBVc2UgdGhlIFNj
cm9sbFZpZXcvV2lkZ2V0IGRlc2lnbiBvZiB0aGUgV2luZG93cyBwb3J0IGFuZCBhZG9wdCBpdCB0
byBHdGsrLiBPbiB0aGUKKyAgICAgICAgd2F5IHRvIHRoaXMgaW1wbGVtZW50IFBsYXRmb3JtU2Ny
b2xsYmFyIHByb3Blcmx5LgorICAgICAgICBUaGUgb25seSB0d28gZGlmZmVyZW5jZXMgdG8gdGhl
IFdpbmRvd3MgcG9ydCBpcyB0aGF0IFBsYXRmb3JtU2Nyb2xsYmFyIGlzCisgICAgICAgIGEgR3Rr
V2lkZ2V0IChzdGlsbCBzaGFyaW5nIHRoZSBzYW1lIGdsb2JhbCB3aW5kb3cpIHdoaWNoIG5lZWRz
IHNwZWNpYWwgdHJlYXRtZW50IHdoZW4KKyAgICAgICAgcGxhY2luZyB0aGUgc2Nyb2xsYmFyIChl
LmcuIGRvbid0IG1vdmUgdGhlIHNjcm9sbGJhciBvZiBhIEZyYW1lVmlldyB3aGVuIHRoZSBGcmFt
ZVZpZXcKKyAgICAgICAgc2Nyb2xscykuIFRoZSBvdGhlciBkaWZmZXJlbmNlIGlzIGR1ZSB0aGUg
J3Njcm9sbGFibGUgcHJvdG9jb2wnIG9mIEd0aysgd2hlcmUgd2Ugd2lsbAorICAgICAgICBnZXQg
dHdvIEd0a0FkanVzdG1lbnQgc2V0LiBJZiB3ZSBoYXZlIHRoZW0gc2V0IGluIFNjcm9sbFZpZXcg
ZG9uJ3QgY3JlYXRlIGEgUGxhdGZvcm1TY3JvbGxiYXIKKyAgICAgICAgYnV0IHVwZGF0ZSB0aGUg
R3RrQWp1c3RtZW50LgorCisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogbG9hZGVy
L2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEdkazo6bWFrZURvY3VtZW50Vmlldyk6CisgICAgICAgICogbG9hZGVyL2dkay9G
cmFtZUxvYWRlckNsaWVudEdkay5oOgorICAgICAgICAqIHBhZ2UvZ2RrL0ZyYW1lR2RrLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aXNzdWVUcmFuc3Bvc2VDb21tYW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjbGVhbnVwUGxhdGZvcm1TY3JpcHRPYmplY3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpzZXROZWVkc1JlYXBwbHlTdHlsZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtTW91
c2VFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dkay9GcmFtZUdkay5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dkay9LZXlFdmVudEdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL01v
dXNlRXZlbnRHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50OjpQ
bGF0Zm9ybU1vdXNlRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcmVl
bkdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aCk6CisgICAgICAgICogcGxh
dGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1Bs
YXRmb3JtU2Nyb2xsQmFyR2RrLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0
Zm9ybVNjcm9sbGJhcik6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Ny
b2xsYmFyKToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBvc2l0aW9u
KToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlByb3BvcnRpb24pOgor
ICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OnNldFJlY3QpOgorICAgICAgICAoUGxhdGZvcm1T
Y3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1JlbmRl
clRoZW1lR2RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludENo
ZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludFJhZGlvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludEJ1dHRvbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OlNjcm9sbFZpZXdQcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjp+U2Nyb2xsVmlld1ByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNl
dEhhc0hvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OmFkanVz
dG1lbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQ
cml2YXRlOjp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Ny
b2xsVmlld1ByaXZhdGU6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OlNjcm9sbFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0R3Rr
QWRqdXN0bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnJl
c2l6ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNvbnRlbnRzWCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpjb250ZW50c1kpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6Om1heGltdW1TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Ny
b2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c3VwcHJlc3NTY3JvbGxiYXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldEhTY3JvbGxiYXJNb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFZTY3JvbGxiYXJNb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbGJhcnNNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OnNldEZyYW1lR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cmVtb3Zl
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3
UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndpbmRvd1RvQ29udGVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OmNvbnZlcnRDaGlsZFRvU2VsZik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
Ojpjb252ZXJ0U2VsZlRvQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3Ojp3aW5kb3dSZXNpemVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3OjpyZXNpemVyT3ZlcmxhcHNDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OmFkanVzdE92ZXJsYXBwaW5nU2Nyb2xsYmFyQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmFk
ZFRvRGlydHlSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVwZGF0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0UHJpdmF0
ZTo6Z2RrRHJhd2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpXaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2lkZ2V0OjppbnRlcm5hbEd0a1dpZGdldCk6CisgICAgICAgIChXZWJD
b3JlOjpXaWRnZXQ6OnNldEludGVybmFsR3RrV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZGdldDo6c2V0Q29udGFpbmluZ1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmNv
bnRhaW5pbmdXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpmcmFtZUdlb21ldHJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0RnJhbWVHZW9tZXRyeSk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6
OnBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEZvY3VzKToKKyAgICAgICAg
KFdlYkNvcmU6OldpZGdldDo6c2V0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmhpZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjppbnZhbGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldpZGdldDo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0Ojpjb252ZXJ0VG9Db250YWluaW5nV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dDo6Y29udmVydENoaWxkVG9TZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6Y29udmVy
dFNlbGZUb0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c3VwcHJlc3NJbnZhbGlk
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRTdXBwcmVzc0ludmFsaWRhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNldFNjcm9sbFZpZXdDb250cm9sKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEdka0V4cG9zZUV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2RrRXhwb3NlRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZGtEcmF3YWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZVBvaW50KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwOgorICAgICAgICAobG9hZFJlc291
cmNlSW50b0FycmF5KToKKwogMjAwNy0wNy0zMCAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llai4KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5w
cm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gMjQ3ODEpCisr
KyBXZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC04NDYsNiArODQ2LDcgQEAg
Z2RrLXBvcnQgewogICAgICAgICBwbGF0Zm9ybS9UZXh0Q29kZWNJQ1UuY3BwIFwKICAgICAgICAg
cGxhdGZvcm0vVGV4dEJyZWFrSXRlcmF0b3JJQ1UuY3BwIFwKICAgICAgICAgcGFnZS9nZGsvRXZl
bnRIYW5kbGVyR2RrLmNwcCBcCisgICAgICAgIHBhZ2UvZ2RrL0ZyYW1lR2RrLmNwcCBcCiAgICAg
ICAgIHBhZ2UvZ2RrL0NvbnRleHRNZW51Q2xpZW50R2RrLmNwcCBcCiAgICAgICAgIHBhZ2UvZ2Rr
L0RyYWdDb250cm9sbGVyR2RrLmNwcCBcCiAgICAgICAgIHBhZ2UvZ2RrL0luc3BlY3RvckNsaWVu
dEdkay5jcHAgXApAQCAtODYwLDcgKzg2MSw2IEBAIGdkay1wb3J0IHsKICAgICAgICAgcGxhdGZv
cm0vZ2RrL0ZvbnREYXRhR2RrLmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250R2RrLmNw
cCBcCiAgICAgICAgIHBsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcCBcCi0gICAg
ICAgIHBsYXRmb3JtL2dkay9GcmFtZUdkay5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9nZGsvR2x5
cGhQYWdlVHJlZU5vZGVHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2Rr
LmNwcCBcCiAgICAgICAgIHBsYXRmb3JtL2dkay9Mb2dnaW5nR2RrLmNwcCBcCkluZGV4OiBXZWJD
b3JlL2xvYWRlci9nZGsvRnJhbWVMb2FkZXJDbGllbnRHZGsuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHAJKHJldmlzaW9uIDI0Nzgx
KQorKysgV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50R2RrLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKLSNp
bmNsdWRlICJGcmFtZUdkay5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKQEAgLTI2MCw3ICsy
NjAsMjkgQEAgYm9vbCBGcmFtZUxvYWRlckNsaWVudEdkazo6c2hvdWxkR29Ub0hpcwogfQogCiBi
b29sIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpwcml2YXRlQnJvd3NpbmdFbmFibGVkKCkgY29uc3Qg
eyBub3RJbXBsZW1lbnRlZCgpOyByZXR1cm4gZmFsc2U7IH0KLXZvaWQgRnJhbWVMb2FkZXJDbGll
bnRHZGs6Om1ha2VEb2N1bWVudFZpZXcoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KKwordm9pZCBG
cmFtZUxvYWRlckNsaWVudEdkazo6bWFrZURvY3VtZW50VmlldygpIHsKKyAgICBXZWJDb3JlOjpG
cmFtZSogZnJhbWUgPSBjb3JlKG1fZnJhbWUpOworICAgIGlmIChmcmFtZSkKKyAgICAgICAgZnJh
bWUtPnNldFZpZXcoMCk7CisKKyAgICBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IG5ldyBGcmFtZVZp
ZXcoZnJhbWUpOworICAgIGZyYW1lLT5zZXRWaWV3KGZyYW1lVmlldyk7CisgICAgZnJhbWVWaWV3
LT5kZXJlZigpOworICAgIAorICAgIC8qCisgICAgICogc2V0IHRoZSBXZWJLaXRHdGtQYWdlIChD
b250YWluaW5nIFdpbmRvdykgYW5kIG1ha2Ugc3VyZSB0byBnaXZlIGl0IGEgc2FuZSBkZWZhdWx0
IGZyYW1lIGdlb21ldHJ5LgorICAgICAqLworICAgIFdlYktpdEd0a1BhZ2UqIHBhZ2UgPSBnZXRQ
YWdlRnJvbUZyYW1lKG1fZnJhbWUpOworICAgIGZyYW1lVmlldy0+c2V0Q29udGFpbmluZ1dpbmRv
dyhwYWdlKTsKKyAgICBmcmFtZVZpZXctPnNldEZyYW1lR2VvbWV0cnkoSW50UmVjdCgwLCAwLCBH
VEtfV0lER0VUKHBhZ2UpLT5hbGxvY2F0aW9uLndpZHRoLCBHVEtfV0lER0VUKHBhZ2UpLT5hbGxv
Y2F0aW9uLmhlaWdodCkpOworICAgIFdlYktpdEd0azo6YXBwbHlBZGp1c3RtZW50cyhwYWdlLCBm
cmFtZVZpZXcpOworCisgICAgLyoKKyAgICAgKiBUT0RPOiBVc2UgbWFyZ2lucyBsaWtlIFdlYlZp
ZXc/CisgICAgICovCit9CisKIHZvaWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6Om1ha2VSZXByZXNl
bnRhdGlvbihEb2N1bWVudExvYWRlciopIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEdkazo6Zm9yY2VMYXlvdXQoKSB7IG5vdEltcGxlbWVudGVkKCk7IH0KIHZv
aWQgRnJhbWVMb2FkZXJDbGllbnRHZGs6OmZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgpIHsgbm90SW1w
bGVtZW50ZWQoKTsgfQpJbmRleDogV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50
R2RrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50
R2RrLmgJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVy
Q2xpZW50R2RrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkgKzM2LDYgQEAKIHR5cGVkZWYgc3Ry
dWN0IF9XZWJLaXRHdGtGcmFtZSBXZWJLaXRHdGtGcmFtZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi0gICAgY2xhc3MgRnJhbWVHZGs7Ci0KICAgICBjbGFzcyBGcmFtZUxvYWRlckNsaWVudEdk
ayA6IHB1YmxpYyBGcmFtZUxvYWRlckNsaWVudCB7CiAgICAgcHVibGljOgogICAgICAgICBGcmFt
ZUxvYWRlckNsaWVudEdkayhXZWJLaXRHdGtGcmFtZSopOwpJbmRleDogV2ViQ29yZS9wYWdlL2dk
ay9GcmFtZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wYWdlL2dkay9GcmFtZUdkay5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BhZ2UvZ2RrL0ZyYW1lR2RrLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBD
b21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
NiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordm9pZCBGcmFtZTo6aXNzdWVUcmFuc3Bvc2VDb21tYW5kKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorICAgIAordm9pZCBGcmFtZTo6Y2xlYW51cFBsYXRmb3JtU2NyaXB0T2Jq
ZWN0cygpCit7ICAgCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30gICAKKyAgICAKK0RyYWdJbWFn
ZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0aW9uKCkKK3sgICAgICAgCisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBGcmFtZTo6ZGFzaGJvYXJkUmVn
aW9uc0NoYW5nZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWU6
OnNldE5lZWRzUmVhcHBseVN0eWxlcygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
fQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9wYWdlL2dkay9GcmFtZUdkay5jcHAKX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1
LDcgKzQ1LDcgQEAgdHlwZWRlZiBsb25nIExQQVJBTTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0o
R0RLKQotdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQgR2RrRXZlbnQ7Cit0eXBlZGVmIHN0cnVjdCBf
R2RrRXZlbnRLZXkgR2RrRXZlbnRLZXk7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKFFUKQpAQCAt
ODAsNyArODAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JN
KEdESykKLSAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50Kik7CisgICAgICAg
IFBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSopOwogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShRVCkKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2ZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNlRXZlbnQuaAkocmV2aXNp
b24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVudC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw3ICs0OSw4IEBAIHR5cGVkZWYgbG9uZyBMUEFSQU07CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYgdW5pb24gX0dka0V2ZW50IEdka0V2ZW50Owor
dHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50QnV0dG9uIEdka0V2ZW50QnV0dG9uOwordHlwZWRlZiBz
dHJ1Y3QgX0dka0V2ZW50TW90aW9uIEdka0V2ZW50TW90aW9uOwogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShRVCkKQEAgLTExOCw3ICsxMTksOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGJvb2wgYWN0aXZhdGVkV2ViVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZhdGVkV2ViVmll
dzsgfQogI2VuZGlmCiAjaWYgUExBVEZPUk0oR0RLKSAKLSAgICAgICAgUGxhdGZvcm1Nb3VzZUV2
ZW50KEdka0V2ZW50Kik7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudEJ1dHRv
biopOworICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRNb3Rpb24qKTsKICNlbmRp
ZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBQbGF0Zm9ybU1vdXNlRXZlbnQoUU1vdXNlRXZl
bnQqLCBpbnQgY2xpY2tDb3VudCk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtV2hl
ZWxFdmVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1XaGVlbEV2
ZW50LmgJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybVdoZWVs
RXZlbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCB0eXBlZGVmIGxvbmcgTFBB
UkFNOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShHREspCi10eXBlZGVmIHVuaW9uIF9HZGtFdmVu
dCBHZGtFdmVudDsKK3R5cGVkZWYgc3RydWN0IF9HZGtFdmVudFNjcm9sbCBHZGtFdmVudFNjcm9s
bDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC04NSw3ICs4NSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEhXTkQsIFdQQVJBTSwgTFBB
UkFNLCBib29sIGlzSG9yaXpvbnRhbCk7CiAjZW5kaWYKICNpZiBQTEFURk9STShHREspCi0gICAg
ICAgIFBsYXRmb3JtV2hlZWxFdmVudChHZGtFdmVudCopOworICAgICAgICBQbGF0Zm9ybVdoZWVs
RXZlbnQoR2RrRXZlbnRTY3JvbGwqKTsKICNlbmRpZgogI2lmIFBMQVRGT1JNKFFUKQogICAgICAg
ICBQbGF0Zm9ybVdoZWVsRXZlbnQoUVdoZWVsRXZlbnQqKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vU2Nyb2xsVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmll
dy5oCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vU2Nyb2xsVmlldy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
IAogI2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYgc3RydWN0IF9HdGtMYXlvdXQgR3RrTGF5b3V0
OwordHlwZWRlZiBzdHJ1Y3QgX0d0a0FkanVzdG1lbnQgR3RrQWRqdXN0bWVudDsKICNlbmRpZgog
CiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtMTUxLDEzICsxNTEsMjcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogI2lmIFBMQVRGT1JNKEdESykKICAgICAgICAgU2Nyb2xsVmlldygpOwogICAgICAgICB+
U2Nyb2xsVmlldygpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0R3RrQWRqdXN0bWVudHMoR3Rr
QWRqdXN0bWVudCogaGFkaiwgR3RrQWRqdXN0bWVudCogdmFkaik7CisgICAgICAgIHZpcnR1YWwg
dm9pZCBzZXRQYXJlbnQoU2Nyb2xsVmlldyopOworCisgICAgICAgIHZpcnR1YWwgdm9pZCBwYWlu
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBJbnRSZWN0Jik7CiAKLSAgICAgICAgdmlydHVhbCB2
b2lkIHNldEd0a1dpZGdldChHdGtMYXlvdXQqIGxheW91dCk7CisgICAgICAgIHZpcnR1YWwgSW50
UG9pbnQgY29udmVydENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCosIGNvbnN0IEludFBvaW50Jikg
Y29uc3Q7CisgICAgICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFNlbGZUb0NoaWxkKGNvbnN0
IFdpZGdldCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CisKKyAgICAgICAgdmlydHVhbCB2b2lk
IGdlb21ldHJ5Q2hhbmdlZCgpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0RnJhbWVH
ZW9tZXRyeShjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHZW9t
ZXRyeShpbnQgd2lkdGgsIGludCBoZWlnaHQpOworCisgICAgICAgIEludFJlY3Qgd2luZG93UmVz
aXplclJlY3QoKTsKKyAgICAgICAgYm9vbCByZXNpemVyT3ZlcmxhcHNDb250ZW50KCkgY29uc3Q7
CisgICAgICAgIHZvaWQgYWRqdXN0T3ZlcmxhcHBpbmdTY3JvbGxiYXJDb3VudChpbnQgb3Zlcmxh
cERlbHRhKTsKKworICAgICAgICB2b2lkIGFkZFRvRGlydHlSZWdpb24oY29uc3QgSW50UmVjdCYp
OworICAgICAgICB2b2lkIHNjcm9sbEJhY2tpbmdTdG9yZShpbnQgZHgsIGludCBkeSwgY29uc3Qg
SW50UmVjdCYgc2Nyb2xsVmlld1JlY3QsIGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KTsKKyAgICAg
ICAgdm9pZCB1cGRhdGVCYWNraW5nU3RvcmUoKTsKICAgICBwcml2YXRlOgotICAgICAgICB2b2lk
IHVwZGF0ZVZpZXcoY29uc3QgSW50UmVjdCYsIGJvb2wgbm93ID0gZmFsc2UpOwotICAgICAgICB2
b2lkIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAgICAgSW50U2l6ZSBtYXhpbXVtU2Nyb2xsKCkg
Y29uc3Q7CisgICAgICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycyhjb25zdCBJbnRTaXplJiBkZXNp
cmVkT2Zmc2V0KTsKICAgICAgICAgY2xhc3MgU2Nyb2xsVmlld1ByaXZhdGU7CiAgICAgICAgIFNj
cm9sbFZpZXdQcml2YXRlKiBtX2RhdGE7CiAjZW5kaWYKQEAgLTE4OCw2ICsyMDIsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFBsYXRmb3JtU2Nyb2xsYmFyICp2ZXJ0aWNhbFNjcm9s
bEJhcigpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKKyAgICAgICAgSGFzaFNldDxXaWRnZXQqPiog
Y2hpbGRyZW4oKTsKICAgICAgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IEludFNpemUm
IGRlc2lyZWRPZmZzZXQpOwogICAgICAgICBJbnRTaXplIG1heGltdW1TY3JvbGwoKSBjb25zdDsK
ICAgICAgICAgY2xhc3MgU2Nyb2xsVmlld1ByaXZhdGU7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L1dpZGdldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vV2lkZ2V0LmgJKHJldmlz
aW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9XaWRnZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsOCArNDEsOCBAQCB0eXBlZGVmIHN0cnVjdCBIV05EX18qIEhXTkQ7CiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYgc3RydWN0IF9HZGtEcmF3YWJsZSBHZGtEcmF3YWJs
ZTsKIHR5cGVkZWYgc3RydWN0IF9HdGtXaWRnZXQgR3RrV2lkZ2V0OwordHlwZWRlZiBzdHJ1Y3Qg
X1dlYktpdEd0a1BhZ2UgV2ViS2l0R3RrUGFnZTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQp
CkBAIC0xMzYsMTAgKzEzNiwyOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjZW5kaWYKIAogI2lm
IFBMQVRGT1JNKEdESykKLSAgICAgICAgV2lkZ2V0KEd0a1dpZGdldCopOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0R3RrV2lkZ2V0KEd0a1dpZGdldCopOwotICAgICAgICBHZGtEcmF3YWJsZSog
Z2RrRHJhd2FibGUoKSBjb25zdDsKLSAgICAgICAgR3RrV2lkZ2V0KiBndGtXaWRnZXQoKSBjb25z
dDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldEludGVybmFsR3RrV2lkZ2V0KEd0a1dpZGdldCop
OworICAgICAgICBHdGtXaWRnZXQqIGludGVybmFsR3RrV2lkZ2V0KCkgY29uc3Q7CisKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisgICAgICAgIFNjcm9sbFZp
ZXcqIHBhcmVudCgpIGNvbnN0OworCisgICAgICAgIHZvaWQgc2V0Q29udGFpbmluZ1dpbmRvdyhX
ZWJLaXRHdGtQYWdlKik7CisgICAgICAgIFdlYktpdEd0a1BhZ2UqIGNvbnRhaW5pbmdXaW5kb3co
KSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkgY29uc3Q7
CisKKyAgICAgICAgSW50UmVjdCBjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnN0IEludFJl
Y3QmKSBjb25zdDsKKyAgICAgICAgSW50UG9pbnQgY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhj
b25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgICAgICBJbnRQb2ludCBjb252ZXJ0RnJvbUNvbnRh
aW5pbmdXaW5kb3coY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKworICAgICAgICB2aXJ0dWFsIElu
dFBvaW50IGNvbnZlcnRDaGlsZFRvU2VsZihjb25zdCBXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYp
IGNvbnN0OworICAgICAgICB2aXJ0dWFsIEludFBvaW50IGNvbnZlcnRTZWxmVG9DaGlsZChjb25z
dCBXaWRnZXQqLCBjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCisgICAgICAgIGJvb2wgc3VwcHJl
c3NJbnZhbGlkYXRpb24oKSBjb25zdDsKKyAgICAgICAgdm9pZCBzZXRTdXBwcmVzc0ludmFsaWRh
dGlvbihib29sKTsKKworICAgICAgICB2b2lkIHNldFNjcm9sbFZpZXdDb250cm9sKCk7CiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKFFUKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVH
ZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcAko
cmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsMjQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqIENvcHlyaWdo
dCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
Q09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgi
Ci0KLSNpbmNsdWRlICJDU3RyaW5nLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRl
ICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgotI2luY2x1ZGUg
IkZyYW1lTG9hZGVyLmgiCi0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKLSNpbmNs
dWRlICJGcmFtZVByaXZhdGUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJH
cmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJIaXRUZXN0UmVxdWVzdC5oIgotI2luY2x1ZGUg
IkhpdFRlc3RSZXN1bHQuaCIKLSNpbmNsdWRlICJLZXlib2FyZENvZGVzLmgiCi0jaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1L
ZXlib2FyZEV2ZW50LmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCi0jaW5jbHVk
ZSAiUGxhdGZvcm1TdHJpbmcuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybVdoZWVsRXZlbnQuaCIKLSNp
bmNsdWRlICJSZW5kZXJPYmplY3QuaCIKLSNpbmNsdWRlICJSZW5kZXJUcmVlQXNUZXh0LmgiCi0j
aW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKLSNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgi
Ci0jaW5jbHVkZSAiU2VsZWN0aW9uQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIlNldHRpbmdzLmgi
Ci0jaW5jbHVkZSAiVHlwaW5nQ29tbWFuZC5oIgotI2luY2x1ZGUgIndlYmtpdGd0a2ZyYW1lLmgi
Ci0KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotCi0vLyBUaGlz
IGZ1bmN0aW9uIGxvYWRzIHJlc291cmNlcyBmcm9tIFdlYktpdAotLy8gVGhpcyBkb2VzIG5vdCBi
ZWxvbmcgaGVyZSBhbmQgSSdtIG5vdCBzdXJlIHdoZXJlCi0vLyBpdCBzaG91bGQgZ28KLS8vIEkg
ZG9uJ3Qga25vdyB3aGF0IHRoZSBwbGFucyBvciBkZXNpZ24gaXMKLS8vIGZvciBub25lIGNvZGUg
cmVzb3VyY2VzCi1WZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIq
IHJlc291cmNlTmFtZSkKLXsKLSAgICBWZWN0b3I8Y2hhcj4gcmVzb3VyY2U7Ci0gICAgLy9pZiAo
c3RyY21wKHJlc291cmNlTmFtZSwibWlzc2luZ0ltYWdlIikgPT0gMCkgewotICAgIC8vfQotICAg
IHJldHVybiByZXNvdXJjZTsKLX0KLQotc3RydWN0IEZyYW1lR2RrRXhwb3NlRGF0YSB7Ci0gICAg
R3RrQ29udGFpbmVyICpjb250YWluZXI7Ci0gICAgR2RrRXZlbnRFeHBvc2UgKmV4cG9zZTsKLX07
Ci0KLXN0YXRpYyB2b2lkIGZyYW1lX2dka19leHBvc2VfY2hpbGQoR3RrV2lkZ2V0ICp3aWRnZXQs
IGdwb2ludGVyIF9kYXRhKQotewotICAgIEZyYW1lR2RrRXhwb3NlRGF0YSogZGF0YSA9IChGcmFt
ZUdka0V4cG9zZURhdGEqKV9kYXRhOwotICAgIGludCB3aWR0aCwgaGVpZ2h0OwotICAgIGd0a19j
b250YWluZXJfcHJvcGFnYXRlX2V4cG9zZShkYXRhLT5jb250YWluZXIsIHdpZGdldCwgZGF0YS0+
ZXhwb3NlKTsKLX0gCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRnJhbWVHZGs6OkZyYW1lR2Rr
KFBhZ2UqIHBhZ2UsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBGcmFtZUxv
YWRlckNsaWVudEdkayogZnJhbWVMb2FkZXIpCi0gICAgOiBGcmFtZShwYWdlLCBvd25lckVsZW1l
bnQsIGZyYW1lTG9hZGVyKQotewotICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IHBhZ2UtPnNldHRp
bmdzKCk7Ci0gICAgc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsK
LSAgICBzZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKDUpOwotICAgIHNldHRpbmdzLT5zZXRN
aW5pbXVtTG9naWNhbEZvbnRTaXplKDUpOwotICAgIHNldHRpbmdzLT5zZXRTaG91bGRQcmludEJh
Y2tncm91bmRzKHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5hYmxlZCh0cnVl
KTsKLQotICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxNCk7Ci0gICAgc2V0
dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxNCk7Ci0gICAgc2V0dGluZ3MtPnNldFNlcmlmRm9u
dEZhbWlseSgiVGltZXMgTmV3IFJvbWFuIik7Ci0gICAgc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZv
bnRGYW1pbHkoIkFyaWFsIik7Ci0gICAgc2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseSgiQ291
cmllciIpOwotICAgIHNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoIkFyaWFsIik7Ci19
Ci0KLUZyYW1lR2RrOjp+RnJhbWVHZGsoKQotewotICAgIGxvYWRlcigpLT5jYW5jZWxBbmRDbGVh
cigpOwotfQotCi12b2lkIEZyYW1lR2RrOjpkdW1wUmVuZGVyVHJlZSgpIGNvbnN0Ci17Ci0gICAg
aWYgKHZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKLSAgICAgICAgdmlldygpLT5sYXlvdXQoKTsKLSAg
ICAKLSAgICBTdHJpbmcgdHh0ID0gZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihyZW5kZXJlcigpKTsK
LSAgICBDU3RyaW5nIHV0ZjhTdHIgPSB0eHQudXRmOCgpOwotICAgIGNvbnN0IGNoYXIgKnV0Zjgg
PSB1dGY4U3RyLmRhdGEoKTsKLSAgICBpZiAodXRmOCkKLSAgICAgICAgcHJpbnRmKCIlc1xuIiwg
dXRmOCk7Ci0gICAgZWxzZQotICAgICAgICBwcmludGYoIkZyYW1lR2RrOjpkdW1wUmVuZGVyVHJl
ZSgpIG5vIGRhdGFcbiIpOwotfQotCi1ib29sIEZyYW1lR2RrOjprZXlQcmVzcyhjb25zdCBQbGF0
Zm9ybUtleWJvYXJkRXZlbnQmIGtleUV2ZW50KQotewotICAgIGlmICghZXZlbnRIYW5kbGVyKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBldmVudEhhbmRsZXIoKS0+a2V5
RXZlbnQoa2V5RXZlbnQpOwotfQotCi12b2lkIEZyYW1lR2RrOjpoYW5kbGVHZGtFdmVudChHZGtF
dmVudCogZXZlbnQpCi17Ci0gICAgc3dpdGNoIChldmVudC0+dHlwZSkgewotCi0gICAgICAgIGNh
c2UgR0RLX0VYUE9TRTogewotICAgICAgICAgICAgR2RrUmVjdGFuZ2xlIGNsaXA7Ci0gICAgICAg
ICAgICBnZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5leHBvc2UucmVnaW9uLCAmY2xpcCk7
Ci0gICAgICAgICAgICBnZGtfd2luZG93X2JlZ2luX3BhaW50X3JlZ2lvbihldmVudC0+YW55Lndp
bmRvdywgZXZlbnQtPmV4cG9zZS5yZWdpb24pOwotICAgICAgICAgICAgY2Fpcm9fdCogY3IgPSBn
ZGtfY2Fpcm9fY3JlYXRlKGV2ZW50LT5hbnkud2luZG93KTsKLSAgICAgICAgICAgIEdyYXBoaWNz
Q29udGV4dCBjdHgoY3IpOwotICAgICAgICAgICAgY3R4LnNldEdka0RyYXdhYmxlKGV2ZW50LT5h
bnkud2luZG93KTsKLSAgICAgICAgICAgIGlmIChyZW5kZXJlcigpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKHZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKLSAgICAgICAgICAgICAgICAgICAgdmlldygp
LT5sYXlvdXQoKTsKLSAgICAgICAgICAgICAgICBJbnRSZWN0IHJlY3QoY2xpcC54LCBjbGlwLnks
IGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKLSAgICAgICAgICAgICAgICBwYWludCgmY3R4LCBy
ZWN0KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwotCi0g
ICAgICAgICAgICAvKgotICAgICAgICAgICAgICogTWFrZSBzdXJlIGNoaWxkcmVuIG9mIHRoZSB2
aWV3IGdldCByZWRyYXduCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIEZyYW1lR2RrRXhw
b3NlRGF0YSBkYXRhID0geyBHVEtfQ09OVEFJTkVSKHZpZXcoKS0+Z3RrV2lkZ2V0KCkpLCAmZXZl
bnQtPmV4cG9zZSB9OwotICAgICAgICAgICAgZ3RrX2NvbnRhaW5lcl9mb3JhbGwoR1RLX0NPTlRB
SU5FUih2aWV3KCktPmd0a1dpZGdldCgpKSwgZnJhbWVfZ2RrX2V4cG9zZV9jaGlsZCwgJmRhdGEp
OwotICAgICAgICAgICAgZ2RrX3dpbmRvd19lbmRfcGFpbnQoZXZlbnQtPmFueS53aW5kb3cpOwot
ICAgICAgICAgICAgCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNh
c2UgR0RLX0NPTkZJR1VSRTogewotICAgICAgICAgICAgdmlldygpLT51cGRhdGVHZW9tZXRyeShl
dmVudC0+Y29uZmlndXJlLndpZHRoLCBldmVudC0+Y29uZmlndXJlLmhlaWdodCk7Ci0gICAgICAg
ICAgICBmb3JjZUxheW91dCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg
ICAgICBjYXNlIEdES19TQ1JPTEw6IHsKLSAgICAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudCB3
aGVlbEV2ZW50KGV2ZW50KTsKLSAgICAgICAgICAgIHZpZXcoKS0+d2hlZWxFdmVudCh3aGVlbEV2
ZW50KTsKLSAgICAgICAgICAgIGlmICh3aGVlbEV2ZW50LmlzQWNjZXB0ZWQoKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgICAgIEhpdFRlc3RSZXF1ZXN0IGhpdFRlc3RSZXF1
ZXN0KHRydWUsIHRydWUpOwotICAgICAgICAgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0
KHdoZWVsRXZlbnQucG9zKCkpOwotICAgICAgICAgICAgcmVuZGVyZXIoKS0+bGF5ZXIoKS0+aGl0
VGVzdChoaXRUZXN0UmVxdWVzdCwgaGl0VGVzdFJlc3VsdCk7Ci0gICAgICAgICAgICBOb2RlKiBu
b2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5vZGUoKTsKLSAgICAgICAgICAgIGlmICghbm9kZSkK
LSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICog
RklYTUU6IERvZXMgdGhpcyBiZWxvbmcgaGVyZT8KLSAgICAgICAgICAgICAqIERlZmF1bHQgdG8g
c2Nyb2xsaW5nIHRoZSBwYWdlCi0gICAgICAgICAgICAgKiBub3Qgc3VyZSB3aHkgaXRzIG51bGwK
LSAgICAgICAgICAgICAqIGJyb2tlIGFueXdheSB3aGVuIGl0cyBub3QgbnVsbAotICAgICAgICAg
ICAgICogZG9TY3JvbGwocmVuZGVyZXIoKSwgd2hlZWxFdmVudC5kZWx0YVgoKSwgd2hlZWxFdmVu
dC5kZWx0YVkoKSk7Ci0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgR0RLX0RSQUdfRU5URVI6Ci0gICAgICAgIGNhc2UgR0RLX0RSQUdf
TEVBVkU6Ci0gICAgICAgIGNhc2UgR0RLX0RSQUdfTU9USU9OOgotICAgICAgICBjYXNlIEdES19E
UkFHX1NUQVRVUzoKLSAgICAgICAgY2FzZSBHREtfRFJPUF9TVEFSVDoKLSAgICAgICAgY2FzZSBH
REtfRFJPUF9GSU5JU0hFRDogewotICAgICAgICAgICAgLy9ib29sIHVwZGF0ZURyYWdBbmREcm9w
KGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwotICAgICAgICAgICAgLy92
b2lkIGNhbmNlbERyYWdBbmREcm9wKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2Fy
ZCopOwotICAgICAgICAgICAgLy9ib29sIHBlcmZvcm1EcmFnQW5kRHJvcChjb25zdCBQbGF0Zm9y
bU1vdXNlRXZlbnQmLCBDbGlwYm9hcmQqKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgR0RLX01PVElPTl9OT1RJRlk6Ci0gICAgICAgICAgICBldmVudEhhbmRs
ZXIoKS0+bW91c2VNb3ZlZChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6Ci0gICAgICAgIGNhc2UgR0RL
XzJCVVRUT05fUFJFU1M6Ci0gICAgICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6Ci0gICAgICAg
ICAgICBldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KFBsYXRmb3JtTW91c2VF
dmVudChldmVudCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX0JVVFRP
Tl9SRUxFQVNFOgotICAgICAgICAgICAgZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUmVsZWFz
ZUV2ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgR0RLX0tFWV9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtfS0VZX1JFTEVBU0U6
IHsKLSAgICAgICAgICAgIFBsYXRmb3JtS2V5Ym9hcmRFdmVudCBrZXlFdmVudChldmVudCk7Ci0g
ICAgICAgICAgICBrZXlQcmVzcyhrZXlFdmVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgZGVmYXVs
dDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBGcmFtZTo6aXNzdWVUcmFu
c3Bvc2VDb21tYW5kKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi12b2lkIEZyYW1l
OjpjbGVhbnVwUGxhdGZvcm1TY3JpcHRPYmplY3RzKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OwotfQotCi1EcmFnSW1hZ2VSZWYgRnJhbWU6OmRyYWdJbWFnZUZvclNlbGVjdGlvbigpIAotewot
ICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgRnJhbWU6OmRh
c2hib2FyZFJlZ2lvbnNDaGFuZ2VkKCkKLXsKLSAgICBub3RJbXBsZW1lbnRlZCgpOwotfQotCi19
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1NyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5l
bW1lbEBnbWFpbC5jb20gCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IEZyYW1lR2RrX2gKLSNkZWZpbmUgRnJhbWVHZGtfaAotCi0jaW5jbHVkZSAiRWRpdG9yQ2xpZW50
LmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSAi
UmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBF
bGVtZW50OwotY2xhc3MgRnJhbWVHZGs7Ci1jbGFzcyBGcmFtZUxvYWRlckNsaWVudEdkazsKLWNs
YXNzIEZvcm1EYXRhOwotCi0KLWNsYXNzIEZyYW1lR2RrIDogcHVibGljIEZyYW1lIHsKLXB1Ymxp
YzoKLSAgICBGcmFtZUdkayhQYWdlKiwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiwgRnJhbWVMb2Fk
ZXJDbGllbnRHZGsqKTsKLSAgICB2aXJ0dWFsIH5GcmFtZUdkaygpOwotCi0gICAgdm9pZCBoYW5k
bGVHZGtFdmVudChHZGtFdmVudCopOwotICAgIGJvb2wga2V5UHJlc3MoY29uc3QgUGxhdGZvcm1L
ZXlib2FyZEV2ZW50JiBrZXlFdmVudCk7Ci0KLSAgICB2b2lkIGR1bXBSZW5kZXJUcmVlKCkgY29u
c3Q7Ci19OwotCi19Ci0KLSNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvS2V5RXZl
bnRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0tleUV2ZW50R2Rr
LmNwcAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9LZXlFdmVudEdk
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OCwxNyArNDU4LDE3IEBAIHN0YXRpYyBpbnQgd2lu
ZG93c0tleUNvZGVGb3JLZXlFdmVudCh1bnMKIAogfQogCi1QbGF0Zm9ybUtleWJvYXJkRXZlbnQ6
OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudCogZXZlbnQpCitQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudChHZGtFdmVudEtleSogZXZlbnQpCiB7CiAgICAg
bV9pc0tleVVwID0gZXZlbnQtPnR5cGUgPT0gR0RLX0tFWV9SRUxFQVNFOwotICAgIG1fc2hpZnRL
ZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX1NISUZUX01BU0sgIT0gMDsKLSAgICBtX2N0cmxL
ZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSyAhPSAwOwotICAgIG1fYWx0
S2V5ID0gZXZlbnQtPmtleS5zdGF0ZSAmIEdES19NT0QxX01BU0sgIT0gMDsKLSAgICBtX21ldGFL
ZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX01PRDJfTUFTSyAhPSAwOwotICAgIG1fdGV4dCA9
IGV2ZW50LT5rZXkuc3RyaW5nOwotICAgIG1fdW5tb2RpZmllZFRleHQgPSBldmVudC0+a2V5LnN0
cmluZzsKLSAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVudGlmaWVyRm9yR2RrS2V5Q29kZShl
dmVudC0+a2V5LmtleXZhbCk7Ci0gICAgbV9XaW5kb3dzS2V5Q29kZSA9IHdpbmRvd3NLZXlDb2Rl
Rm9yS2V5RXZlbnQoZXZlbnQtPmtleS5rZXl2YWwpOworICAgIG1fc2hpZnRLZXkgPSBldmVudC0+
c3RhdGUgJiBHREtfU0hJRlRfTUFTSyAhPSAwOworICAgIG1fY3RybEtleSA9IGV2ZW50LT5zdGF0
ZSAmIEdES19DT05UUk9MX01BU0sgIT0gMDsKKyAgICBtX2FsdEtleSA9IGV2ZW50LT5zdGF0ZSAm
IEdES19NT0QxX01BU0sgIT0gMDsKKyAgICBtX21ldGFLZXkgPSBldmVudC0+c3RhdGUgJiBHREtf
TU9EMl9NQVNLICE9IDA7CisgICAgbV90ZXh0ID0gZXZlbnQtPnN0cmluZzsKKyAgICBtX3VubW9k
aWZpZWRUZXh0ID0gZXZlbnQtPnN0cmluZzsKKyAgICBtX2tleUlkZW50aWZpZXIgPSBrZXlJZGVu
dGlmaWVyRm9yR2RrS2V5Q29kZShldmVudC0+a2V5dmFsKTsKKyAgICBtX1dpbmRvd3NLZXlDb2Rl
ID0gd2luZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVudC0+a2V5dmFsKTsKICAgICBtX2F1dG9S
ZXBlYXQgPSBmYWxzZTsKICAgICBtX2lzS2V5cGFkID0gZmFsc2U7CiAKSW5kZXg6IFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL01vdXNlRXZlbnRHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw1NyAr
MjgsNzEgQEAKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKIAogI2luY2x1ZGUgIlN5
c3RlbVRpbWUuaCIKLSNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlICJBc3NlcnRpb25zLmgi
CisKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gRklY
TUU6IFdvdWxkIGJlIGV2ZW4gYmV0dGVyIHRvIGZpZ3VyZSBvdXQgd2hpY2ggbW9kaWZpZXIgaXMg
QWx0IGluc3RlYWQgb2YgYWx3YXlzIHVzaW5nIEdES19NT0QxX01BU0suCiAKLVBsYXRmb3JtTW91
c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50KiBldmVudCkKK1BsYXRmb3JtTW91
c2VFdmVudDo6UGxhdGZvcm1Nb3VzZUV2ZW50KEdka0V2ZW50QnV0dG9uKiBldmVudCkKIHsKICAg
ICBtX3RpbWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7Ci0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50
KChpbnQpZXZlbnQtPm1vdGlvbi54LCAoaW50KWV2ZW50LT5tb3Rpb24ueSk7Ci0gICAgbV9nbG9i
YWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPm1vdGlvbi54X3Jvb3QsIChpbnQpZXZl
bnQtPm1vdGlvbi55X3Jvb3QpOwotICAgIG1fc2hpZnRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRl
ICYgR0RLX1NISUZUX01BU0s7Ci0gICAgbV9jdHJsS2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAm
IEdES19DT05UUk9MX01BU0s7Ci0gICAgbV9hbHRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYg
R0RLX01PRDFfTUFTSzsKLSAgICBtX21ldGFLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RL
X01PRDJfTUFTSzsKKyAgICBtX3Bvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+eCwgKGlu
dClldmVudC0+eSk7CisgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQt
Pnhfcm9vdCwgKGludClldmVudC0+eV9yb290KTsKKyAgICBtX3NoaWZ0S2V5ID0gZXZlbnQtPnN0
YXRlICYgR0RLX1NISUZUX01BU0s7CisgICAgbV9jdHJsS2V5ID0gZXZlbnQtPnN0YXRlICYgR0RL
X0NPTlRST0xfTUFTSzsKKyAgICBtX2FsdEtleSA9IGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01B
U0s7CisgICAgbV9tZXRhS2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX01PRDJfTUFTSzsKIAogICAg
IHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKLSAgICAgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToK
LSAgICAgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudE1vdmVkOwotICAgICAgICAgICAg
bV9idXR0b24gPSBOb0J1dHRvbjsKKyAgICBjYXNlIEdES19CVVRUT05fUFJFU1M6CisgICAgY2Fz
ZSBHREtfMkJVVFRPTl9QUkVTUzoKKyAgICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgorICAgIGNh
c2UgR0RLX0JVVFRPTl9SRUxFQVNFOgorICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRQ
cmVzc2VkOworICAgICAgICBpZiAoZXZlbnQtPnR5cGUgPT0gR0RLX0JVVFRPTl9SRUxFQVNFKSB7
CisgICAgICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRSZWxlYXNlZDsKICAgICAgICAg
ICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IEdES19CVVRUT05fUFJFU1M6Ci0gICAgICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6Ci0gICAg
ICAgIGNhc2UgR0RLXzNCVVRUT05fUFJFU1M6Ci0gICAgICAgIGNhc2UgR0RLX0JVVFRPTl9SRUxF
QVNFOgotICAgICAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50UHJlc3NlZDsKLSAgICAg
ICAgICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1JFTEVBU0UpIHsKLSAgICAgICAg
ICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRSZWxlYXNlZDsKLSAgICAgICAgICAgICAg
ICBtX2NsaWNrQ291bnQgPSAwOwotICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSA9
PSBHREtfQlVUVE9OX1BSRVNTKQotICAgICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDE7Ci0g
ICAgICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUykKLSAg
ICAgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAyOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZl
bnQtPnR5cGUgPT0gR0RLXzNCVVRUT05fUFJFU1MpCi0gICAgICAgICAgICAgICAgbV9jbGlja0Nv
dW50ID0gMzsKLQotICAgICAgICAgICAgaWYgKGV2ZW50LT5idXR0b24uYnV0dG9uID09IDEpCi0g
ICAgICAgICAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOwotICAgICAgICAgICAgZWxzZSBp
ZiAoZXZlbnQtPmJ1dHRvbi5idXR0b24gPT0gMikKLSAgICAgICAgICAgICAgICBtX2J1dHRvbiA9
IE1pZGRsZUJ1dHRvbjsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24uYnV0dG9u
ID09IDMpCi0gICAgICAgICAgICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRvbjsKLSAgICAgICAg
ICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIlVua25vd24gbW91c2UgZXZlbnRcbiIpOwotICAgICAgICAgICAgYXNzZXJ0KDApOwotICAg
IH0KKyAgICAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9OX1BSRVNTKQor
ICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMTsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPnR5
cGUgPT0gR0RLXzJCVVRUT05fUFJFU1MpCisgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAyOwor
ICAgICAgICBlbHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKKyAgICAg
ICAgICAgIG1fY2xpY2tDb3VudCA9IDM7CisKKyAgICAgICAgaWYgKGV2ZW50LT5idXR0b24gPT0g
MSkKKyAgICAgICAgICAgIG1fYnV0dG9uID0gTGVmdEJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAo
ZXZlbnQtPmJ1dHRvbiA9PSAyKQorICAgICAgICAgICAgbV9idXR0b24gPSBNaWRkbGVCdXR0b247
CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5idXR0b24gPT0gMykKKyAgICAgICAgICAgIG1fYnV0
dG9uID0gUmlnaHRCdXR0b247CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfTsKIH0KIAorUGxhdGZvcm1Nb3VzZUV2ZW50
OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRNb3Rpb24qIG1vdGlvbikKK3sKKyAgICBtX3Rp
bWVzdGFtcCA9IGN1cnJlbnRUaW1lKCk7CisgICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQp
bW90aW9uLT54LCAoaW50KW1vdGlvbi0+eSk7CisgICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBv
aW50KChpbnQpbW90aW9uLT54X3Jvb3QsIChpbnQpbW90aW9uLT55X3Jvb3QpOworICAgIG1fc2hp
ZnRLZXkgPSBtb3Rpb24tPnN0YXRlICYgR0RLX1NISUZUX01BU0s7CisgICAgbV9jdHJsS2V5ID0g
bW90aW9uLT5zdGF0ZSAmIEdES19DT05UUk9MX01BU0s7CisgICAgbV9hbHRLZXkgPSBtb3Rpb24t
PnN0YXRlICYgR0RLX01PRDFfTUFTSzsKKyAgICBtX21ldGFLZXkgPSBtb3Rpb24tPnN0YXRlICYg
R0RLX01PRDJfTUFTSzsKKworICAgIHN3aXRjaCAobW90aW9uLT50eXBlKSB7CisgICAgY2FzZSBH
REtfTU9USU9OX05PVElGWToKKyAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50TW92ZWQ7
CisgICAgICAgIG1fYnV0dG9uID0gTm9CdXR0b247CisgICAgICAgIG1fY2xpY2tDb3VudCA9IDA7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH07Cit9CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNj
cmVlbkdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1T
Y3JlZW5HZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1Bs
YXRmb3JtU2NyZWVuR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsOSBAQAogCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJXaWRnZXQuaCIKLSNpbmNsdWRl
IDxnZGsvZ2RrLmg+CisjaW5jbHVkZSAid2Via2l0Z3RrcGFnZS5oIgorCisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4K
IApAQCAtMzgsMTAgKzQwLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogaW50IHNjcmVlbkRl
cHRoKFdpZGdldCogd2lkZ2V0KSAKIHsKLSAgICBBU1NFUlQod2lkZ2V0LT5nZGtEcmF3YWJsZSgp
KTsKKyAgICBBU1NFUlQod2lkZ2V0LT5jb250YWluaW5nV2luZG93KCkgJiYgd2lkZ2V0LT5jb250
YWluaW5nV2luZG93KCktPmJpbl93aW5kb3cpOwogCiAgICAgZ2ludCBkdW1teSwgZGVwdGg7Ci0g
ICAgZ2RrX3dpbmRvd19nZXRfZ2VvbWV0cnkod2lkZ2V0LT5nZGtEcmF3YWJsZSgpLCAmZHVtbXks
ICZkdW1teSwgJmR1bW15LCAmZHVtbXksICZkZXB0aCk7CisgICAgZ2RrX3dpbmRvd19nZXRfZ2Vv
bWV0cnkod2lkZ2V0LT5jb250YWluaW5nV2luZG93KCktPmJpbl93aW5kb3csICZkdW1teSwgJmR1
bW15LCAmZHVtbXksICZkdW1teSwgJmRlcHRoKTsKICAgICByZXR1cm4gZGVwdGg7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXIuaAkocmV2aXNpb24gMjQ3
ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yOSw2ICsyOSw4IEBACiAjaW5jbHVkZSAiV2lkZ2V0LmgiCiAjaW5jbHVkZSAi
U2Nyb2xsQmFyLmgiCiAKK3R5cGVkZWYgc3RydWN0IF9HdGtBZGp1c3RtZW50IEd0a0FkanVzdG1l
bnQ7CisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1TY3JvbGxiYXIgOiBw
dWJsaWMgV2lkZ2V0LCBwdWJsaWMgU2Nyb2xsYmFyIHsKQEAgLTUxLDYgKzUzLDEwIEBAIHB1Ymxp
YzoKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlVGh1bWJQb3NpdGlvbigpOwog
ICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlByb3BvcnRpb24oKTsKKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgdm9pZCBndGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCosIFBsYXRmb3JtU2Ny
b2xsYmFyKik7CisgICAgR3RrQWRqdXN0bWVudCogbV9hZGp1c3RtZW50OwogfTsKIAogfQpJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJHZGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyR2RrLmNwcAkocmV2
aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdk
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDE1ICszNywxOSBAQAogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIAorCiBQbGF0Zm9ybVNjcm9sbGJhcjo6UGxhdGZvcm1TY3JvbGxiYXIoU2Ny
b2xsYmFyQ2xpZW50KiBjbGllbnQsIFNjcm9sbGJhck9yaWVudGF0aW9uIG9yaWVudGF0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNjcm9sbGJhckNvbnRyb2xTaXpl
IGNvbnRyb2xTaXplKQogICAgIDogU2Nyb2xsYmFyKGNsaWVudCwgb3JpZW50YXRpb24sIGNvbnRy
b2xTaXplKQorICAgICwgbV9hZGp1c3RtZW50KEdUS19BREpVU1RNRU5UKGd0a19hZGp1c3RtZW50
X25ldygwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wKSkpCiB7IAogICAgIEd0a1Njcm9sbGJh
ciogc2Nyb2xsQmFyID0gb3JpZW50YXRpb24gPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU0NST0xMQkFSKDo6Z3RrX2hzY3JvbGxiYXJf
bmV3KE5VTEwpKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU0NST0xMQkFS
KDo6Z3RrX3ZzY3JvbGxiYXJfbmV3KE5VTEwpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEdUS19TQ1JPTExCQVIoOjpndGtfaHNjcm9sbGJhcl9uZXcobV9hZGp1c3RtZW50KSkgOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1RLX1NDUk9MTEJBUig6Omd0a192c2Nyb2xs
YmFyX25ldyhtX2FkanVzdG1lbnQpKTsKICAgICBndGtfd2lkZ2V0X3Nob3coR1RLX1dJREdFVChz
Y3JvbGxCYXIpKTsKLSAgICBzZXRHdGtXaWRnZXQoR1RLX1dJREdFVChzY3JvbGxCYXIpKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0KEdfT0JKRUNUKHNjcm9sbEJhciksICJ2YWx1ZS1jaGFuZ2VkIiwg
R19DQUxMQkFDSyhQbGF0Zm9ybVNjcm9sbGJhcjo6Z3RrVmFsdWVDaGFuZ2VkKSwgdGhpcyk7CisK
KyAgICBzZXRJbnRlcm5hbEd0a1dpZGdldChHVEtfV0lER0VUKHNjcm9sbEJhcikpOwogCiAgICAg
LyoKICAgICAgKiBhc3NpZ24gYSBzYW5lIGRlZmF1bHQgd2lkdGggYW5kIGhlaWdodCB0byB0aGUg
U2Nyb2xsQmFyLCBvdGhlcndpc2UKQEAgLTUzLDYgKzU3LDcgQEAgUGxhdGZvcm1TY3JvbGxiYXI6
OlBsYXRmb3JtU2Nyb2xsYmFyKFNjcgogICAgICAqLwogICAgIHJlc2l6ZShQbGF0Zm9ybVNjcm9s
bGJhcjo6aG9yaXpvbnRhbFNjcm9sbGJhckhlaWdodCgpLAogICAgICAgICAgICBQbGF0Zm9ybVNj
cm9sbGJhcjo6dmVydGljYWxTY3JvbGxiYXJXaWR0aCgpKTsgICAgCisgICAgZ2VvbWV0cnlDaGFu
Z2VkKCk7CiAKICAgICBnX29iamVjdF9yZWYoR19PQkpFQ1Qoc2Nyb2xsQmFyKSk7CiAgICAgZ3Rr
X29iamVjdF9zaW5rKEdUS19PQkpFQ1Qoc2Nyb2xsQmFyKSk7CkBAIC02Myw4ICs2OCw4IEBAIFBs
YXRmb3JtU2Nyb2xsYmFyOjp+UGxhdGZvcm1TY3JvbGxiYXIoKQogICAgIC8qCiAgICAgICogdGhl
IFdpZGdldCBkb2VzIG5vdCB0YWtlIG92ZXIgb3duZXJzaGlwLgogICAgICAqLwotICAgIGd0a193
aWRnZXRfZGVzdHJveShndGtXaWRnZXQoKSk7Ci0gICAgZ19vYmplY3RfdW5yZWYoR19PQkpFQ1Qo
Z3RrV2lkZ2V0KCkpKTsKKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koaW50ZXJuYWxHdGtXaWRnZXQo
KSk7CisgICAgZ19vYmplY3RfdW5yZWYoR19PQkpFQ1QoaW50ZXJuYWxHdGtXaWRnZXQoKSkpOwog
fQogCiBpbnQgUGxhdGZvcm1TY3JvbGxiYXI6OndpZHRoKCkgY29uc3QKQEAgLTg5LDE2ICs5NCwy
OCBAQCB2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpwYWludChHcmFwaGljc0NvCiAKIHZvaWQgUGxh
dGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRodW1iUG9zaXRpb24oKQogeyAKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIGlmIChtX2FkanVzdG1lbnQtPnZhbHVlICE9IG1fY3VycmVudFBvcykgewor
ICAgICAgICBtX2FkanVzdG1lbnQtPnZhbHVlID0gbV9jdXJyZW50UG9zOworICAgICAgICBndGtf
YWRqdXN0bWVudF92YWx1ZV9jaGFuZ2VkKG1fYWRqdXN0bWVudCk7CisgICAgfQogfQogCiB2b2lk
IFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlByb3BvcnRpb24oKQogewotICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgbV9hZGp1c3RtZW50LT5zdGVwX2luY3JlbWVudCA9IG1fbGluZVN0
ZXA7CisgICAgbV9hZGp1c3RtZW50LT5wYWdlX2luY3JlbWVudCA9IG1fcGFnZVN0ZXA7CisgICAg
bV9hZGp1c3RtZW50LT5wYWdlX3NpemUgPSBtX3Zpc2libGVTaXplOworICAgIG1fYWRqdXN0bWVu
dC0+dXBwZXIgPSBtX3RvdGFsU2l6ZTsKKyAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKG1fYWRq
dXN0bWVudCk7CiB9CiAKIHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnNldFJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKICAgICBzZXRGcmFtZUdlb21ldHJ5KHJlY3QpOworICAgIGdlb21ldHJ5
Q2hhbmdlZCgpOwogfQogCit2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjpndGtWYWx1ZUNoYW5nZWQo
R3RrQWRqdXN0bWVudCosIFBsYXRmb3JtU2Nyb2xsYmFyKiB0aGF0KQoreworICAgIHRoYXQtPnNl
dFZhbHVlKGd0a19hZGp1c3RtZW50X2dldF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQpKTsKK30K
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1JlbmRlclRoZW1lR2RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9SZW5kZXJUaGVtZUdkay5jcHAJKHJldmlzaW9uIDI0
NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzksMTEgKzE3OSwxMiBAQCB2b2lkIFJlbmRlclRoZW1lR2RrOjpzZXRDaGVj
a2JveFNpemUoUmVuCiBib29sIFJlbmRlclRoZW1lR2RrOjpwYWludENoZWNrYm94KFJlbmRlck9i
amVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3Qm
IHJlY3QpCiB7CiAgICAgLy8gRklYTUU6IGlzIGl0IHRoZSByaWdodCB0aGluZyB0byBkbz8KLSAg
ICBHdGtXaWRnZXQgKmNoZWNrYm94ID0gZ3RrQ2hlY2tib3goKTsKKyAgICBHdGtXaWRnZXQqIGNo
ZWNrYm94ID0gZ3RrQ2hlY2tib3goKTsKKyAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRy
YW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CiAgICAgZ3RrX3BhaW50X2NoZWNrKGNoZWNr
Ym94LT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAgICAg
ICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAg
ICAgICBOVUxMLCBjaGVja2JveCwgImNoZWNrYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAg
cmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAg
ICAgICAgICAgICAgICBwb3MueCgpLCBwb3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQpAQCAtMjExLDExICsyMTIsMTIgQEAgdm9pZCBS
ZW5kZXJUaGVtZUdkazo6c2V0UmFkaW9TaXplKFJlbmRlcgogYm9vbCBSZW5kZXJUaGVtZUdkazo6
cGFpbnRSYWRpbyhSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZv
JiBpLCBjb25zdCBJbnRSZWN0JiByZWN0KQogeyAKICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJp
Z2h0IHRoaW5nIHRvIGRvPwotICAgIEd0a1dpZGdldCAqcmFkaW8gPSBndGtSYWRpb0J1dHRvbigp
OworICAgIEd0a1dpZGdldCogcmFkaW8gPSBndGtSYWRpb0J1dHRvbigpOworICAgIEludFBvaW50
IHBvcyA9IGkuY29udGV4dC0+dHJhbnNsYXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKICAgICBn
dGtfcGFpbnRfb3B0aW9uKHJhZGlvLT5zdHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAog
ICAgICAgICAgICAgICAgICAgICAgZGV0ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhv
KSwKICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHJhZGlvLCAicmFkaW9idXR0b24iLAotICAg
ICAgICAgICAgICAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIyMywx
MSArMjI1LDEyIEBAIGJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50UmFkaW8oUmVuZGVyT2IKIGJv
b2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpIAogeyAKICAgICAv
LyBGSVhNRTogc2hvdWxkIHVzZSB0aGVtZS1hd2FyZSBkcmF3aW5nLiBUaGlzIHNob3VsZCBob25v
ciB0aGUgc3RhdGUgYXMgd2VsbAotICAgIEd0a1dpZGdldCAqYnV0dG9uID0gZ3RrQnV0dG9uKCk7
CisgICAgR3RrV2lkZ2V0KiBidXR0b24gPSBndGtCdXR0b24oKTsKKyAgICBJbnRQb2ludCBwb3Mg
PSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRpb24oKSk7CiAgICAgZ3RrX3Bh
aW50X2JveChidXR0b24tPnN0eWxlLCBpLmNvbnRleHQtPmdka0RyYXdhYmxlKCksCiAgICAgICAg
ICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAgICAg
ICAgICAgICAgICAgTlVMTCwgYnV0dG9uLCAiYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgIHJl
Y3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAg
ICAgICAgICAgIHBvcy54KCksIHBvcy55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7
CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3Jv
bGxWaWV3R2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxW
aWV3R2RrLmNwcAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3Jv
bGxWaWV3R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbSAKICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgogICoKQEAgLTM3LDM4ICszNywxOTQgQEAKICNpbmNsdWRlICJJbnRSZWN0Lmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU2Nyb2xsYmFyLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKIAogI2luY2x1ZGUgPGdkay9nZGsuaD4KICNp
bmNsdWRlIDxndGsvZ3RrLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKKworc3RhdGljIGNv
bnN0IGludCBNYWdpY0d0a1Njcm9sbENvbnN0YW50ID0gMTM7CisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUKKy8qCisgKiBUaGUgZGVz
aWduIGlzIGEgY29weSBvZiB0aGUgV2luZG93cyBTY3JvbGxWaWV3IGZyb20gcGxhdGZvcm0vd2lu
L1Njcm9sbFZpZXdXaW4uY3BwCisgKiB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhbmdlcy9kaWZmaWN1
bHRpZXMuCisgKiBXZSBjYW4gbm90IHVzZSBQbGF0Zm9ybVNjcm9sbGJhciBkaXJlY3RseSBkdWUg
dGhlIHdheSBzY3JvbGxpbmcgd29ya3Mgb24gR3RrKy4gRS5nLgorICogaWYgd2UgZ2V0IGVtYmVk
ZGVkIGludG8gYSBHdGtTY3JvbGxlZFdpbmRvdyB3ZSBnZXQgdHdvIEd0a0FkanVzdG1lbnQgc2V0
IGFuZCBtdXNuJ3QKKyAqIGRyYXcvcGxhY2Ugc2Nyb2xsYmFycyBvdXJzZWxmLgorICoKKyAqLwor
Y2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGUgOiBwdWJsaWMgU2Nyb2xsYmFyQ2xp
ZW50CiB7CiBwdWJsaWM6Ci0gICAgU2Nyb2xsVmlld1ByaXZhdGUoKQotICAgICAgICA6IGhhc1N0
YXRpY0JhY2tncm91bmQoZmFsc2UpCi0gICAgICAgICwgc3VwcHJlc3NTY3JvbGxiYXJzKGZhbHNl
KQorICAgIFNjcm9sbFZpZXdQcml2YXRlKFNjcm9sbFZpZXcqIF92aWV3KQorICAgICAgICA6IHZp
ZXcoX3ZpZXcpCisgICAgICAgICwgaGFzU3RhdGljQmFja2dyb3VuZChmYWxzZSkKKyAgICAgICAg
LCBzY3JvbGxiYXJzU3VwcHJlc3NlZChmYWxzZSkKKyAgICAgICAgLCBzY3JvbGxiYXJzQXZvaWRp
bmdSZXNpemVyKDApCiAgICAgICAgICwgdlNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKICAg
ICAgICAgLCBoU2Nyb2xsYmFyTW9kZShTY3JvbGxiYXJBdXRvKQotICAgICAgICAsIGxheW91dCgw
KQogICAgICAgICAsIHNjcm9sbEJhcnNOZWVkVXBkYXRlKGZhbHNlKQotICAgIHsgfQorICAgICAg
ICAsIGluVXBkYXRlU2Nyb2xsYmFycyhmYWxzZSkKKyAgICAgICAgLCB2QWRqKDApCisgICAgICAg
ICwgaEFkaigwKQorICAgIHt9CisKKyAgICB+U2Nyb2xsVmlld1ByaXZhdGUoKQorICAgIHsKKyAg
ICAgICAgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihmYWxzZSk7CisgICAgICAgIHNldEhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsKKyAgICB9CisKKyAgICB2b2lkIHNjcm9sbEJhY2tpbmdT
dG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSk7CisKKyAgICB2b2lkIHNldEhhc0hvcml6
b250YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpOworICAgIHZvaWQgc2V0SGFzVmVydGljYWxTY3Jv
bGxiYXIoYm9vbCBoYXNCYXIpOworCisgICAgdmlydHVhbCB2b2lkIHZhbHVlQ2hhbmdlZChTY3Jv
bGxiYXIqKTsKKyAgICB2aXJ0dWFsIEludFJlY3Qgd2luZG93Q2xpcFJlY3QoKSBjb25zdDsKIAor
ICAgIHN0YXRpYyB2b2lkIGFkanVzdG1lbnRDaGFuZ2VkKEd0a0FkanVzdG1lbnQqLCBncG9pbnRl
cik7CisKKyAgICBTY3JvbGxWaWV3KiB2aWV3OwogICAgIGJvb2wgaGFzU3RhdGljQmFja2dyb3Vu
ZDsKLSAgICBib29sIHN1cHByZXNzU2Nyb2xsYmFyczsKKyAgICBib29sIHNjcm9sbGJhcnNTdXBw
cmVzc2VkOworICAgIGludCBzY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyOwogICAgIFNjcm9sbGJh
ck1vZGUgdlNjcm9sbGJhck1vZGU7CiAgICAgU2Nyb2xsYmFyTW9kZSBoU2Nyb2xsYmFyTW9kZTsK
LSAgICBHdGtMYXlvdXQgKmxheW91dDsKKyAgICBSZWZQdHI8UGxhdGZvcm1TY3JvbGxiYXI+IHZC
YXI7CisgICAgUmVmUHRyPFBsYXRmb3JtU2Nyb2xsYmFyPiBoQmFyOworICAgIEd0a0FkanVzdG1l
bnQqIHZBZGo7CisgICAgR3RrQWRqdXN0bWVudCogaEFkajsKKyAgICBJbnRTaXplIHNjcm9sbE9m
ZnNldDsKICAgICBJbnRTaXplIGNvbnRlbnRzU2l6ZTsKLSAgICBJbnRTaXplIHZpZXdQb3J0U2l6
ZTsKICAgICBib29sIHNjcm9sbEJhcnNOZWVkVXBkYXRlOworICAgIGJvb2wgaW5VcGRhdGVTY3Jv
bGxiYXJzOworICAgIEhhc2hTZXQ8V2lkZ2V0Kj4gY2hpbGRyZW47CiB9OwogCisvKgorICogRG9u
J3QgY3JlYXRlIHRoZSBzY3JvbGxiYXJzIHdoZW4gd2UgaGF2ZSBhIGhvcml6b250YWwgR3RrQWRq
dXN0bWVudAorICovCit2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzZXRIYXNI
b3Jpem9udGFsU2Nyb2xsYmFyKGJvb2wgaGFzQmFyKQoreworICAgIGlmIChTY3JvbGxiYXI6Omhh
c1BsYXRmb3JtU2Nyb2xsYmFycygpKSB7CisgICAgICAgIGlmIChoYXNCYXIgJiYgIWhCYXIgJiYg
IWhBZGopIHsKKyAgICAgICAgICAgIGhCYXIgPSBuZXcgUGxhdGZvcm1TY3JvbGxiYXIodGhpcywg
SG9yaXpvbnRhbFNjcm9sbGJhciwgUmVndWxhclNjcm9sbGJhcik7CisgICAgICAgICAgICBoQmFy
LT5zZXRTY3JvbGxWaWV3Q29udHJvbCgpOworICAgICAgICAgICAgdmlldy0+YWRkQ2hpbGQoaEJh
ci5nZXQoKSk7CisgICAgICAgIH0gZWxzZSBpZiAoIWhhc0JhciAmJiBoQmFyKSB7CisgICAgICAg
ICAgICB2aWV3LT5yZW1vdmVDaGlsZChoQmFyLmdldCgpKTsKKyAgICAgICAgICAgIGhCYXIgPSAw
OworICAgICAgICB9CisgICAgfQorfQorCisvKgorICogRG9uJ3QgY3JlYXRlIHRoZSBzY3JvbGxi
YXJzIHdoZW4gd2UgaGF2ZSBhIHZlcnRpY2FsIEd0a0FkanVzdG1lbnQKKyAqLwordm9pZCBTY3Jv
bGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoYm9vbCBo
YXNCYXIpCit7CisgICAgaWYgKFNjcm9sbGJhcjo6aGFzUGxhdGZvcm1TY3JvbGxiYXJzKCkpIHsK
KyAgICAgICAgaWYgKGhhc0JhciAmJiAhdkJhciAmJiAhdkFkaikgeworICAgICAgICAgICAgdkJh
ciA9IG5ldyBQbGF0Zm9ybVNjcm9sbGJhcih0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgUmVndWxh
clNjcm9sbGJhcik7CisgICAgICAgICAgICB2QmFyLT5zZXRTY3JvbGxWaWV3Q29udHJvbCgpOwor
ICAgICAgICAgICAgdmlldy0+YWRkQ2hpbGQodkJhci5nZXQoKSk7CisgICAgICAgIH0gZWxzZSBp
ZiAoIWhhc0JhciAmJiB2QmFyKSB7CisgICAgICAgICAgICB2aWV3LT5yZW1vdmVDaGlsZCh2QmFy
LmdldCgpKTsKKyAgICAgICAgICAgIHZCYXIgPSAwOworICAgICAgICB9CisgICAgfQorfQorCit2
b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUoY29u
c3QgSW50U2l6ZSYgc2Nyb2xsRGVsdGEpCit7CisgICAgLy8gU2luY2Ugc2Nyb2xsaW5nIGlzIGRv
dWJsZSBidWZmZXJlZCwgd2Ugd2lsbCBiZSBibGl0dGluZyB0aGUgc2Nyb2xsIHZpZXcncyBpbnRl
cnNlY3Rpb24KKyAgICAvLyB3aXRoIHRoZSBjbGlwIHJlY3QgZXZlcnkgdGltZSB0byBrZWVwIGl0
IHNtb290aC4KKyAgICBJbnRSZWN0IGNsaXBSZWN0ID0gdmlldy0+d2luZG93Q2xpcFJlY3QoKTsK
KyAgICBJbnRSZWN0IHNjcm9sbFZpZXdSZWN0ID0gdmlldy0+Y29udmVydFRvQ29udGFpbmluZ1dp
bmRvdyhJbnRSZWN0KDAsIDAsIHZpZXctPnZpc2libGVXaWR0aCgpLCB2aWV3LT52aXNpYmxlSGVp
Z2h0KCkpKTsKKworICAgIEludFJlY3QgdXBkYXRlUmVjdCA9IGNsaXBSZWN0OworICAgIHVwZGF0
ZVJlY3QuaW50ZXJzZWN0KHNjcm9sbFZpZXdSZWN0KTsKKworICAgIC8vRklYTUUgdXBkYXRlIGhl
cmU/CisKKyAgICBpZiAoIWhhc1N0YXRpY0JhY2tncm91bmQpIC8vIFRoZSBtYWluIGZyYW1lIGNh
biBqdXN0IGJsaXQgdGhlIFdlYlZpZXcgd2luZG93CisgICAgICAgLy8gRklYTUU6IEZpbmQgYSB3
YXkgdG8gYmxpdCBzdWJmcmFtZXMgd2l0aG91dCBibGl0dGluZyBvdmVybGFwcGluZyBjb250ZW50
CisgICAgICAgdmlldy0+c2Nyb2xsQmFja2luZ1N0b3JlKC1zY3JvbGxEZWx0YS53aWR0aCgpLCAt
c2Nyb2xsRGVsdGEuaGVpZ2h0KCksIHNjcm9sbFZpZXdSZWN0LCBjbGlwUmVjdCk7CisgICAgZWxz
ZSAgeworICAgICAgIC8vIFdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHJlcGFpbnQgdGhlIGVudGly
ZSBiYWNraW5nIHN0b3JlLiAgRG8gaXQgbm93IGJlZm9yZSBtb3ZpbmcgdGhlCisgICAgICAgLy8g
cGx1Z2lucy4KKyAgICAgICB2aWV3LT5hZGRUb0RpcnR5UmVnaW9uKHVwZGF0ZVJlY3QpOworICAg
ICAgIHZpZXctPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworICAgIH0KKworICAgIHZpZXctPmdlb21l
dHJ5Q2hhbmdlZCgpOworCisgICAgLy8gTm93IHVwZGF0ZSB0aGUgd2luZG93ICh3aGljaCBzaG91
bGQgZG8gbm90aGluZyBidXQgYSBibGl0IG9mIHRoZSBiYWNraW5nIHN0b3JlJ3MgdXBkYXRlUmVj
dCBhbmQgc28gc2hvdWxkCisgICAgLy8gYmUgdmVyeSBmYXN0KS4KKyAgICB2aWV3LT51cGRhdGUo
KTsKK30KKwordm9pZCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6YWRqdXN0bWVudENo
YW5nZWQoR3RrQWRqdXN0bWVudCogYWRqdXN0bWVudCwgZ3BvaW50ZXIgX3RoYXQpCit7CisgICAg
U2Nyb2xsVmlld1ByaXZhdGUqIHRoYXQgPSByZWludGVycHJldF9jYXN0PFNjcm9sbFZpZXdQcml2
YXRlKj4oX3RoYXQpOworCisgICAgLy8gRmlndXJlIG91dCBpZiB3ZSByZWFsbHkgbW92ZWQuCisg
ICAgSW50U2l6ZSBuZXdPZmZzZXQgPSB0aGF0LT5zY3JvbGxPZmZzZXQ7CisgICAgaWYgKGFkanVz
dG1lbnQgPT0gdGhhdC0+aEFkaikKKyAgICAgICAgbmV3T2Zmc2V0LnNldFdpZHRoKGd0a19hZGp1
c3RtZW50X2dldF92YWx1ZShhZGp1c3RtZW50KSk7CisgICAgZWxzZSBpZiAoYWRqdXN0bWVudCA9
PSB0aGF0LT52QWRqKQorICAgICAgICBuZXdPZmZzZXQuc2V0SGVpZ2h0KGd0a19hZGp1c3RtZW50
X2dldF92YWx1ZShhZGp1c3RtZW50KSk7CisKKyAgICBJbnRTaXplIHNjcm9sbERlbHRhID0gbmV3
T2Zmc2V0IC0gdGhhdC0+c2Nyb2xsT2Zmc2V0OworICAgIGlmIChzY3JvbGxEZWx0YSA9PSBJbnRT
aXplKCkpCisgICAgICAgIHJldHVybjsKKyAgICB0aGF0LT5zY3JvbGxPZmZzZXQgPSBuZXdPZmZz
ZXQ7CisKKyAgICBpZiAodGhhdC0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpCisgICAgICAgIHJldHVy
bjsKKworICAgIHRoYXQtPnNjcm9sbEJhY2tpbmdTdG9yZShzY3JvbGxEZWx0YSk7CisgICAgc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4odGhhdC0+dmlldyktPmZyYW1lKCktPnNlbmRTY3JvbGxFdmVu
dCgpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjp2YWx1ZUNoYW5n
ZWQoU2Nyb2xsYmFyKiBiYXIpCit7CisgICAgLy8gRmlndXJlIG91dCBpZiB3ZSByZWFsbHkgbW92
ZWQuCisgICAgSW50U2l6ZSBuZXdPZmZzZXQgPSBzY3JvbGxPZmZzZXQ7CisgICAgaWYgKGJhcikg
eworICAgICAgICBpZiAoYmFyID09IGhCYXIpCisgICAgICAgICAgICBuZXdPZmZzZXQuc2V0V2lk
dGgoYmFyLT52YWx1ZSgpKTsKKyAgICAgICAgZWxzZSBpZiAoYmFyID09IHZCYXIpCisgICAgICAg
ICAgICBuZXdPZmZzZXQuc2V0SGVpZ2h0KGJhci0+dmFsdWUoKSk7CisgICAgfQorICAgIEludFNp
emUgc2Nyb2xsRGVsdGEgPSBuZXdPZmZzZXQgLSBzY3JvbGxPZmZzZXQ7CisgICAgaWYgKHNjcm9s
bERlbHRhID09IEludFNpemUoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHNjcm9sbE9mZnNldCA9
IG5ld09mZnNldDsKKworICAgIGlmIChzY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERlbHRhKTsKKyAgICBzdGF0aWNf
Y2FzdDxGcmFtZVZpZXcqPih2aWV3KS0+ZnJhbWUoKS0+c2VuZFNjcm9sbEV2ZW50KCk7Cit9CisK
K0ludFJlY3QgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OndpbmRvd0NsaXBSZWN0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odmlldykt
PndpbmRvd0NsaXBSZWN0KGZhbHNlKTsKK30KKwogU2Nyb2xsVmlldzo6U2Nyb2xsVmlldygpCi0g
ICAgOiBtX2RhdGEobmV3IFNjcm9sbFZpZXdQcml2YXRlKQorICAgIDogbV9kYXRhKG5ldyBTY3Jv
bGxWaWV3UHJpdmF0ZSh0aGlzKSkKIHt9CiAKIFNjcm9sbFZpZXc6On5TY3JvbGxWaWV3KCkKQEAg
LTc2LDQzICsyMzIsODIgQEAgU2Nyb2xsVmlldzo6flNjcm9sbFZpZXcoKQogICAgIGRlbGV0ZSBt
X2RhdGE7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlVmlldyhjb25zdCBJbnRSZWN0JiB1
cGRhdGVSZWN0LCBib29sIG5vdykKKy8qCisgKiBUaGUgZm9sbG93aW5nIGlzIGFzc3VtZWQ6Cisg
KiAgIChoYWRqICYmIHZhZGopIHx8ICghaGFkaiAmJiAhdmFkaikKKyAqLwordm9pZCBTY3JvbGxW
aWV3OjpzZXRHdGtBZGp1c3RtZW50cyhHdGtBZGp1c3RtZW50KiBoYWRqLCBHdGtBZGp1c3RtZW50
KiB2YWRqKQogewotICAgIEdka1JlY3RhbmdsZSByZWN0ID0geyB1cGRhdGVSZWN0LngoKSwgdXBk
YXRlUmVjdC55KCksIHVwZGF0ZVJlY3Qud2lkdGgoKSwgdXBkYXRlUmVjdC5oZWlnaHQoKSB9Owot
ICAgIEdka0RyYXdhYmxlKiBnZGtkcmF3YWJsZSA9IFdpZGdldDo6Z2RrRHJhd2FibGUoKTsKLSAg
ICBpZiAoR0RLX0lTX1dJTkRPVyhnZGtkcmF3YWJsZSkpIHsKLSAgICAgICAgR2RrV2luZG93KiB3
aW5kb3cgPSBHREtfV0lORE9XKGdka2RyYXdhYmxlKTsKLSAgICAgICAgZ2RrX3dpbmRvd19pbnZh
bGlkYXRlX3JlY3Qod2luZG93LCAmcmVjdCwgdHJ1ZSk7Ci0gICAgICAgIGlmIChub3cpCi0gICAg
ICAgICAgICBnZGtfd2luZG93X3Byb2Nlc3NfdXBkYXRlcyh3aW5kb3csIHRydWUpOworICAgIGlm
IChtX2RhdGEtPmhBZGopIHsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9i
eV9mdW5jKEdfT0JKRUNUKG1fZGF0YS0+aEFkaiksIChncG9pbnRlcilTY3JvbGxWaWV3UHJpdmF0
ZTo6YWRqdXN0bWVudENoYW5nZWQsIG1fZGF0YSk7CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJz
X2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVChtX2RhdGEtPnZBZGopLCAoZ3BvaW50ZXIpU2Ny
b2xsVmlld1ByaXZhdGU6OmFkanVzdG1lbnRDaGFuZ2VkLCBtX2RhdGEpOworICAgIH0KKworICAg
IG1fZGF0YS0+aEFkaiA9IGhhZGo7CisgICAgbV9kYXRhLT52QWRqID0gdmFkajsKKworICAgIGlm
IChtX2RhdGEtPmhBZGopIHsKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdChtX2RhdGEtPmhBZGos
ICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxMQkFDSyhTY3JvbGxWaWV3UHJpdmF0ZTo6YWRqdXN0bWVu
dENoYW5nZWQpLCBtX2RhdGEpOworICAgICAgICBnX3NpZ25hbF9jb25uZWN0KG1fZGF0YS0+dkFk
aiwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExCQUNLKFNjcm9sbFZpZXdQcml2YXRlOjphZGp1c3Rt
ZW50Q2hhbmdlZCksIG1fZGF0YSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZGlzYWJsZSB0
aGUgc2Nyb2xsYmFycyAoaWYgd2UgaGF2ZSBhbnkpIGFzIHRoZSBHdGtBZGp1c3RtZW50IG92ZXIK
KyAgICAgICAgICovCisgICAgICAgIG1fZGF0YS0+c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoZmFs
c2UpOworICAgICAgICBtX2RhdGEtPnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoZmFsc2UpOwog
ICAgIH0KKyAgICAgICAKKyAgICB1cGRhdGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0
KTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiB1
cGRhdGVSZWN0LCBib29sIG5vdykKIHsKLSAgICB1cGRhdGVWaWV3KHVwZGF0ZVJlY3QsIG5vdyk7
CisgICAgaWYgKHVwZGF0ZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJ
bnRQb2ludCB3aW5kb3dQb2ludCA9IGNvbnRlbnRzVG9XaW5kb3codXBkYXRlUmVjdC5sb2NhdGlv
bigpKTsKKyAgICBJbnRSZWN0IGNvbnRhaW5pbmdXaW5kb3dSZWN0ID0gdXBkYXRlUmVjdDsKKyAg
ICBjb250YWluaW5nV2luZG93UmVjdC5zZXRMb2NhdGlvbih3aW5kb3dQb2ludCk7CisKKyAgICBH
ZGtSZWN0YW5nbGUgcmVjdCA9IHsgY29udGFpbmluZ1dpbmRvd1JlY3QueCgpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250YWluaW5nV2luZG93UmVjdC55KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LndpZHRoKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRhaW5pbmdXaW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgR2RrV2lu
ZG93KiB3aW5kb3cgPSBjb250YWluaW5nV2luZG93KCktPmJpbl93aW5kb3c7CisKKyAgICBpZiAo
d2luZG93KQorICAgICAgICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdCh3aW5kb3csICZyZWN0
LCB0cnVlKTsKKworICAgIC8vIENhY2hlIHRoZSBkaXJ0eSBzcG90LgorICAgIGFkZFRvRGlydHlS
ZWdpb24oY29udGFpbmluZ1dpbmRvd1JlY3QpOworCisgICAgaWYgKG5vdyAmJiB3aW5kb3cpCisg
ICAgICAgIGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7CiB9CiAKIHZv
aWQgU2Nyb2xsVmlldzo6dXBkYXRlKCkKIHsKLSAgICBBU1NFUlQoZ3RrV2lkZ2V0KCkpOwotICAg
IGd0a193aWRnZXRfcXVldWVfZHJhdyhndGtXaWRnZXQoKSk7CisgICAgQVNTRVJUKGNvbnRhaW5p
bmdXaW5kb3coKSk7CisKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgMCwgMCwgbV9kYXRhLT5j
b250ZW50c1NpemUud2lkdGgoKSwgbV9kYXRhLT5jb250ZW50c1NpemUuaGVpZ2h0KCkgfTsKKyAg
ICBnZGtfd2luZG93X2ludmFsaWRhdGVfcmVjdChjb250YWluaW5nV2luZG93KCktPmJpbl93aW5k
b3csICZyZWN0LCB0cnVlKTsKIAotICAgIGlmIChtX2RhdGEtPnNjcm9sbEJhcnNOZWVkVXBkYXRl
KQotICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAgaWYgKG1fZGF0YS0+c2Nyb2xsQmFy
c05lZWRVcGRhdGUpIHsKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9m
ZnNldCk7CisgICAgICAgIGdlb21ldHJ5Q2hhbmdlZCgpOworICAgIH0KIH0KIAogaW50IFNjcm9s
bFZpZXc6OnZpc2libGVXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+dmlld1Bv
cnRTaXplLndpZHRoKCk7CisgICAgcmV0dXJuIHdpZHRoKCkgLSAobV9kYXRhLT52QmFyID8gbV9k
YXRhLT52QmFyLT53aWR0aCgpIDogMCk7CiB9CiAKIGludCBTY3JvbGxWaWV3Ojp2aXNpYmxlSGVp
Z2h0KCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kYXRhLT52aWV3UG9ydFNpemUuaGVpZ2h0KCk7
CisgICAgcmV0dXJuIGhlaWdodCgpIC0gKG1fZGF0YS0+aEJhciA/IG1fZGF0YS0+aEJhci0+aGVp
Z2h0KCkgOiAwKTsKIH0KIAotLy8gUmVnaW9uIG9mIHRoZSBjb250ZW50IGN1cnJlbnRseSB2aXNp
YmxlIGluIHRoZSB2aWV3cG9ydCBpbiB0aGUgY29udGVudCB2aWV3J3MgY29vcmRpbmF0ZSBzeXN0
ZW0uCiBGbG9hdFJlY3QgU2Nyb2xsVmlldzo6dmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKIHsK
ICAgICByZXR1cm4gRmxvYXRSZWN0KGNvbnRlbnRzWCgpLCBjb250ZW50c1koKSwgdmlzaWJsZVdp
ZHRoKCksIHZpc2libGVIZWlnaHQoKSk7CkBAIC0xMzgsMjMgKzMzMywxNyBAQCB2b2lkIFNjcm9s
bFZpZXc6OnJlc2l6ZUNvbnRlbnRzKGludCB3LCBpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1f
ZGF0YS0+Y29udGVudHNTaXplID0gbmV3U2l6ZTsKLSAgICAKLSAgICBpZiAobV9kYXRhLT5sYXlv
dXQpIHsKLSAgICAgICAgZ3RrX2xheW91dF9zZXRfc2l6ZShtX2RhdGEtPmxheW91dCwgdywgaCk7
Ci0gICAgICAgIG1fZGF0YS0+c2Nyb2xsQmFyc05lZWRVcGRhdGUgPSB0cnVlOwotICAgIH0KKyAg
ICBtX2RhdGEtPnNjcm9sbEJhcnNOZWVkVXBkYXRlID0gdHJ1ZTsKIH0KIAogaW50IFNjcm9sbFZp
ZXc6OmNvbnRlbnRzWCgpIGNvbnN0CiB7Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ3RrX2xh
eW91dF9nZXRfaGFkanVzdG1lbnQobV9kYXRhLT5sYXlvdXQpLCAwKTsKLSAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoZ3RrX2xheW91dF9nZXRfaGFk
anVzdG1lbnQobV9kYXRhLT5sYXlvdXQpKSk7CisgICAgcmV0dXJuIHNjcm9sbE9mZnNldCgpLndp
ZHRoKCk7CiB9CiAKIGludCBTY3JvbGxWaWV3Ojpjb250ZW50c1koKSBjb25zdAogewotICAgIGdf
cmV0dXJuX3ZhbF9pZl9mYWlsKGd0a19sYXlvdXRfZ2V0X3ZhZGp1c3RtZW50KG1fZGF0YS0+bGF5
b3V0KSwgMCk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0
X3ZhbHVlKGd0a19sYXlvdXRfZ2V0X3ZhZGp1c3RtZW50KG1fZGF0YS0+bGF5b3V0KSkpOworICAg
IHJldHVybiBzY3JvbGxPZmZzZXQoKS5oZWlnaHQoKTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OmNv
bnRlbnRzV2lkdGgoKSBjb25zdApAQCAtMTY5LDI3ICszNTgsMjYgQEAgaW50IFNjcm9sbFZpZXc6
OmNvbnRlbnRzSGVpZ2h0KCkgY29uc3QKIAogSW50U2l6ZSBTY3JvbGxWaWV3OjpzY3JvbGxPZmZz
ZXQoKSBjb25zdAogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKG1fZGF0YSwgSW50U2l6ZSgp
KTsKLSAgICByZXR1cm4gSW50U2l6ZShjb250ZW50c1goKSwgY29udGVudHNZKCkpOworICAgIHJl
dHVybiBtX2RhdGEtPnNjcm9sbE9mZnNldDsKK30KKworSW50U2l6ZSBTY3JvbGxWaWV3OjptYXhp
bXVtU2Nyb2xsKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIGRlbHRhID0gKG1fZGF0YS0+Y29udGVu
dHNTaXplIC0gSW50U2l6ZSh2aXNpYmxlV2lkdGgoKSwgdmlzaWJsZUhlaWdodCgpKSkgLSBzY3Jv
bGxPZmZzZXQoKTsKKyAgICBkZWx0YS5jbGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisgICAgcmV0dXJu
IGRlbHRhOwogfQogCiB2b2lkIFNjcm9sbFZpZXc6OnNjcm9sbEJ5KGludCBkeCwgaW50IGR5KQog
ewotICAgIEd0a0FkanVzdG1lbnQqIGhhZGogPSBndGtfbGF5b3V0X2dldF9oYWRqdXN0bWVudCht
X2RhdGEtPmxheW91dCk7Ci0gICAgR3RrQWRqdXN0bWVudCogdmFkaiA9IGd0a19sYXlvdXRfZ2V0
X3ZhZGp1c3RtZW50KG1fZGF0YS0+bGF5b3V0KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKGhhZGop
OwotICAgIGdfcmV0dXJuX2lmX2ZhaWwodmFkaik7Ci0KLSAgICBpbnQgY3VycmVudF94ID0gY29u
dGVudHNYKCk7Ci0gICAgaW50IGN1cnJlbnRfeSA9IGNvbnRlbnRzWSgpOworICAgIEludFNpemUg
c2Nyb2xsT2Zmc2V0ID0gbV9kYXRhLT5zY3JvbGxPZmZzZXQ7CisgICAgSW50U2l6ZSBuZXdTY3Jv
bGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQgKyBJbnRTaXplKGR4LCBkeSkuc2hydW5rVG8obWF4aW11
bVNjcm9sbCgpKTsKKyAgICBuZXdTY3JvbGxPZmZzZXQuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwog
CisgICAgaWYgKG5ld1Njcm9sbE9mZnNldCA9PSBzY3JvbGxPZmZzZXQpCisgICAgICAgIHJldHVy
bjsKIAotICAgIGd0a19hZGp1c3RtZW50X3NldF92YWx1ZShoYWRqLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDTEFNUChjdXJyZW50X3grZHgsIGhhZGotPmxvd2VyLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBNQVgoMC4wLCBoYWRqLT51cHBlciAtIGhhZGotPnBh
Z2Vfc2l6ZSkpKTsKLSAgICBndGtfYWRqdXN0bWVudF9zZXRfdmFsdWUodmFkaiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ0xBTVAoY3VycmVudF95K2R5LCB2YWRqLT5sb3dlciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFYKDAuMCwgdmFkai0+dXBwZXIgLSB2
YWRqLT5wYWdlX3NpemUpKSk7CisgICAgdXBkYXRlU2Nyb2xsYmFycyhuZXdTY3JvbGxPZmZzZXQp
OwogfQogCiBTY3JvbGxiYXJNb2RlIFNjcm9sbFZpZXc6OmhTY3JvbGxiYXJNb2RlKCkgY29uc3QK
QEAgLTIwNCwxNiArMzkyLDE2IEBAIFNjcm9sbGJhck1vZGUgU2Nyb2xsVmlldzo6dlNjcm9sbGJh
ck1vZGUKIAogdm9pZCBTY3JvbGxWaWV3OjpzdXBwcmVzc1Njcm9sbGJhcnMoYm9vbCBzdXBwcmVz
c2VkLCBib29sIHJlcGFpbnRPblN1cHByZXNzKQogewotICAgIG1fZGF0YS0+c3VwcHJlc3NTY3Jv
bGxiYXJzID0gc3VwcHJlc3NlZDsKKyAgICBtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkID0g
c3VwcHJlc3NlZDsKICAgICBpZiAocmVwYWludE9uU3VwcHJlc3MpCi0gICAgICAgIHVwZGF0ZVNj
cm9sbGJhcnMoKTsKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNl
dCk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0SFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9k
ZSBuZXdNb2RlKQogewogICAgIGlmIChtX2RhdGEtPmhTY3JvbGxiYXJNb2RlICE9IG5ld01vZGUp
IHsKICAgICAgICAgbV9kYXRhLT5oU2Nyb2xsYmFyTW9kZSA9IG5ld01vZGU7Ci0gICAgICAgIHVw
ZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9s
bE9mZnNldCk7CiAgICAgfQogfQogCkBAIC0yMjEsMTQgKzQwOSwxNCBAQCB2b2lkIFNjcm9sbFZp
ZXc6OnNldFZTY3JvbGxiYXJNb2RlKFNjcm9sCiB7CiAgICAgaWYgKG1fZGF0YS0+dlNjcm9sbGJh
ck1vZGUgIT0gbmV3TW9kZSkgewogICAgICAgICBtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID0gbmV3
TW9kZTsKLSAgICAgICAgdXBkYXRlU2Nyb2xsYmFycygpOworICAgICAgICB1cGRhdGVTY3JvbGxi
YXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKICAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6
c2V0U2Nyb2xsYmFyc01vZGUoU2Nyb2xsYmFyTW9kZSBuZXdNb2RlKQogewogICAgIG1fZGF0YS0+
aFNjcm9sbGJhck1vZGUgPSBtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID0gbmV3TW9kZTsKLSAgICB1
cGRhdGVTY3JvbGxiYXJzKCk7CisgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9m
ZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0U3RhdGljQmFja2dyb3VuZChib29sIGZs
YWcpCkBAIC0yMzYsNDggKzQyNCw1MiBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldFN0YXRpY0JhY2tn
cm91bmQoYm9vCiAgICAgbV9kYXRhLT5oYXNTdGF0aWNCYWNrZ3JvdW5kID0gZmxhZzsKIH0KIAot
LyoKLSAqIG9ubHkgdXBkYXRlIHRoZSBhZGp1c3RtZW50cywgdGhlIEd0a0xheW91dCBpcyBkb2lu
ZyB0aGUgd29yawotICogZm9yIHVzIChhc3N1bWluZyBpdCBpcyBpbiBhIGJveC4uLikuCi0gKi8K
LXZvaWQgU2Nyb2xsVmlldzo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQordm9p
ZCBTY3JvbGxWaWV3OjpzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld0dlb21ldHJ5
KQogewotICAgIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShyKTsKLSAgICB1cGRhdGVHZW9tZXRy
eShyLndpZHRoKCksIHIuaGVpZ2h0KCkpOwotfQorICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsK
IAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVHZW9tZXRyeShpbnQgd2lkdGgsIGludCBoZWlnaHQp
Ci17Ci0gICAgbV9kYXRhLT52aWV3UG9ydFNpemUgPSBJbnRTaXplKHdpZHRoLGhlaWdodCk7Ci19
CisgICAgSW50UmVjdCBvbGRHZW9tZXRyeSA9IGZyYW1lR2VvbWV0cnkoKTsKKyAgICBXaWRnZXQ6
OnNldEZyYW1lR2VvbWV0cnkobmV3R2VvbWV0cnkpOwogCi12b2lkIFNjcm9sbFZpZXc6OnNldEd0
a1dpZGdldChHdGtMYXlvdXQqIGxheW91dCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKEdUS19M
QVlPVVQobGF5b3V0KSk7Ci0gICAgbV9kYXRhLT5sYXlvdXQgPSBsYXlvdXQ7CisgICAgaWYgKG5l
d0dlb21ldHJ5ID09IG9sZEdlb21ldHJ5KQorICAgICAgICByZXR1cm47CiAKLSAgICBXaWRnZXQ6
OnNldEd0a1dpZGdldChHVEtfV0lER0VUKGxheW91dCkpOworICAgIGlmIChuZXdHZW9tZXRyeS53
aWR0aCgpICE9IG9sZEdlb21ldHJ5LndpZHRoKCkgfHwgbmV3R2VvbWV0cnkuaGVpZ2h0KCkgIT0g
b2xkR2VvbWV0cnkuaGVpZ2h0KCkpIHsKKyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEt
PnNjcm9sbE9mZnNldCk7CisgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5z
ZXROZWVkc0xheW91dCgpOworICAgIH0KKworICAgIGdlb21ldHJ5Q2hhbmdlZCgpOwogfQogCi12
b2lkIFNjcm9sbFZpZXc6OmFkZENoaWxkKFdpZGdldCogdykKK3ZvaWQgU2Nyb2xsVmlldzo6YWRk
Q2hpbGQoV2lkZ2V0KiBjaGlsZCkKIHsgCi0gICAgQVNTRVJUKHctPmd0a1dpZGdldCgpKTsKLSAg
ICBBU1NFUlQobV9kYXRhLT5sYXlvdXQpOworICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7Cisg
ICAgY2hpbGQtPnNldENvbnRhaW5pbmdXaW5kb3coY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICBt
X2RhdGEtPmNoaWxkcmVuLmFkZChjaGlsZCk7CiAKLSAgICBndGtfbGF5b3V0X3B1dChtX2RhdGEt
PmxheW91dCwgdy0+Z3RrV2lkZ2V0KCksIDAsIDApOworICAgIGlmIChjaGlsZC0+aW50ZXJuYWxH
dGtXaWRnZXQoKSkKKyAgICAgICAgZ3RrX2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250
YWluaW5nV2luZG93KCkpLCBjaGlsZC0+aW50ZXJuYWxHdGtXaWRnZXQoKSk7CiB9CiAKLXZvaWQg
U2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQoV2lkZ2V0KiB3KQordm9pZCBTY3JvbGxWaWV3OjpyZW1v
dmVDaGlsZChXaWRnZXQqIGNoaWxkKQogewotICAgIEFTU0VSVCh3LT5ndGtXaWRnZXQoKSk7Ci0g
ICAgQVNTRVJUKG1fZGF0YS0+bGF5b3V0KTsKKyAgICBjaGlsZC0+c2V0UGFyZW50KDApOworICAg
IG1fZGF0YS0+Y2hpbGRyZW4ucmVtb3ZlKGNoaWxkKTsKIAotICAgIGd0a19jb250YWluZXJfcmVt
b3ZlKEdUS19DT05UQUlORVIobV9kYXRhLT5sYXlvdXQpLCB3LT5ndGtXaWRnZXQoKSk7CisgICAg
aWYgKGNoaWxkLT5pbnRlcm5hbEd0a1dpZGdldCgpKQorICAgICAgICBndGtfY29udGFpbmVyX3Jl
bW92ZShHVEtfQ09OVEFJTkVSKGNvbnRhaW5pbmdXaW5kb3coKSksIGNoaWxkLT5pbnRlcm5hbEd0
a1dpZGdldCgpKTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxSZWN0SW50b1ZpZXdSZWN1
cnNpdmVseShjb25zdCBJbnRSZWN0JikKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9W
aWV3UmVjdXJzaXZlbHkoY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIEludFBvaW50IHAobWF4KDAsIHIueCgpKSwgbWF4KDAsIHIueSgpKSk7CisgICAgU2Ny
b2xsVmlldyogdmlldyA9IHRoaXM7CisgICAgd2hpbGUgKHZpZXcpIHsKKyAgICAgICAgdmlldy0+
c2V0Q29udGVudHNQb3MocC54KCksIHAueSgpKTsKKyAgICAgICAgcC5tb3ZlKHZpZXctPngoKSAt
IHZpZXctPnNjcm9sbE9mZnNldCgpLndpZHRoKCksIHZpZXctPnkoKSAtIHZpZXctPnNjcm9sbE9m
ZnNldCgpLmhlaWdodCgpKTsKKyAgICAgICAgdmlldyA9IHN0YXRpY19jYXN0PFNjcm9sbFZpZXcq
Pih2aWV3LT5wYXJlbnQoKSk7CisgICAgfQogfQogCiBib29sIFNjcm9sbFZpZXc6OmluV2luZG93
KCkgY29uc3QKQEAgLTI4Niw0OCArNDc4LDM2MCBAQCBib29sIFNjcm9sbFZpZXc6OmluV2luZG93
KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp3aGVlbEV2
ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYpCit2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQoUGxh
dGZvcm1XaGVlbEV2ZW50JiBlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8gRGV0
ZXJtaW5lIGhvdyBtdWNoIHdlIHdhbnQgdG8gc2Nyb2xsLiAgSWYgd2UgY2FuIG1vdmUgYXQgYWxs
LCB3ZSB3aWxsIGFjY2VwdCB0aGUgZXZlbnQuCisgICAgSW50U2l6ZSBtYXhTY3JvbGxEZWx0YSA9
IG1heGltdW1TY3JvbGwoKTsKKyAgICBpZiAoKGUuZGVsdGFYKCkgPCAwICYmIG1heFNjcm9sbERl
bHRhLndpZHRoKCkgPiAwKSB8fAorICAgICAgICAoZS5kZWx0YVgoKSA+IDAgJiYgc2Nyb2xsT2Zm
c2V0KCkud2lkdGgoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpIDwgMCAmJiBtYXhTY3Jv
bGxEZWx0YS5oZWlnaHQoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpID4gMCAmJiBzY3Jv
bGxPZmZzZXQoKS5oZWlnaHQoKSA+IDApKQorICAgICAgICBlLmFjY2VwdCgpOworCisgICAgc2Ny
b2xsQnkoZS5kZWx0YVgoKSwgZS5kZWx0YVkoKSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6dXBk
YXRlU2Nyb2xsYmFycygpCit2b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3Qg
SW50U2l6ZSYgZGVzaXJlZE9mZnNldCkKIHsKLSAgICBHdGtBZGp1c3RtZW50KiBoYWRqID0gZ3Rr
X2xheW91dF9nZXRfaGFkanVzdG1lbnQobV9kYXRhLT5sYXlvdXQpOwotICAgIEd0a0FkanVzdG1l
bnQqIHZhZGogPSBndGtfbGF5b3V0X2dldF92YWRqdXN0bWVudChtX2RhdGEtPmxheW91dCk7Cisg
ICAgLy8gRG9uJ3QgYWxsb3cgcmUtZW50cmFuY3kgaW50byB0aGlzIGZ1bmN0aW9uLgorICAgIGlm
IChtX2RhdGEtPmluVXBkYXRlU2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgZ19y
ZXR1cm5faWZfZmFpbChoYWRqKTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhZGopOwotICAgIAot
ICAgIGhhZGotPnBhZ2Vfc2l6ZSA9IHZpc2libGVXaWR0aCgpOwotICAgIGhhZGotPnN0ZXBfaW5j
cmVtZW50ID0gMTM7CisgICAgLy8gRklYTUU6IFRoaXMgY29kZSBpcyBoZXJlIHNvIHdlIGRvbid0
IGhhdmUgdG8gZm9yayBGcmFtZVZpZXcuaC8uY3BwLgorICAgIC8vIEluIHRoZSBlbmQsIEZyYW1l
VmlldyBzaG91bGQganVzdCBtZXJnZSB3aXRoIFNjcm9sbFZpZXcuCisgICAgaWYgKHN0YXRpY19j
YXN0PGNvbnN0IEZyYW1lVmlldyo+KHRoaXMpLT5mcmFtZSgpLT5wcm9oaWJpdHNTY3JvbGxpbmco
KSkKKyAgICAgICAgcmV0dXJuOwogICAgIAotICAgIHZhZGotPnBhZ2Vfc2l6ZSA9IHZpc2libGVI
ZWlnaHQoKTsKLSAgICB2YWRqLT5zdGVwX2luY3JlbWVudCA9IDEzOworICAgIG1fZGF0YS0+aW5V
cGRhdGVTY3JvbGxiYXJzID0gdHJ1ZTsKKworICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIg
PSBtX2RhdGEtPnZCYXI7CisgICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gbV9kYXRh
LT5oQmFyOworICAgIGJvb2wgb2xkSGFzVmVydGljYWwgPSBoYXNWZXJ0aWNhbFNjcm9sbGJhcjsK
KyAgICBib29sIG9sZEhhc0hvcml6b250YWwgPSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyOworICAg
IFNjcm9sbGJhck1vZGUgaFNjcm9sbCA9IG1fZGF0YS0+aFNjcm9sbGJhck1vZGU7CisgICAgU2Ny
b2xsYmFyTW9kZSB2U2Nyb2xsID0gbV9kYXRhLT52U2Nyb2xsYmFyTW9kZTsKICAgICAKLSAgICBn
dGtfYWRqdXN0bWVudF9jaGFuZ2VkKGhhZGopOwotICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2No
YW5nZWQoaGFkaik7CisgICAgLyoKKyAgICAgKiBJdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hv
IGlzIGdvaW5nIHRvIHJlbW92ZSBzcGFjZSBmcm9tIG91ciB2aWV3cG9ydC4gRWl0aGVyCisgICAg
ICogd2UgZG8gaXQgYnkgY3JlYXRpbmcgYSBQbGF0Zm9ybVNjcm9sbGJhciBvciB0aGUgR3RrV2lk
Z2V0IGVtYmVkZGluZyB1cyBpcyBnb2luZyB0byBkbworICAgICAqIHRoYXQgYnkgY2FsbGluZyBz
ZXRGcmFtZUdlb21ldHJ5LgorICAgICAqLworICAgIGNvbnN0IGludCBjVmVydGljYWxXaWR0aCA9
IFBsYXRmb3JtU2Nyb2xsYmFyOjp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CisgICAgY29uc3Qg
aW50IGNIb3Jpem9udGFsSGVpZ2h0ID0gUGxhdGZvcm1TY3JvbGxiYXI6Omhvcml6b250YWxTY3Jv
bGxiYXJIZWlnaHQoKTsKKworICAgIGZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysr
KSB7CisgICAgICAgIGJvb2wgc2Nyb2xsc1ZlcnRpY2FsbHk7CisgICAgICAgIGJvb2wgc2Nyb2xs
c0hvcml6b250YWxseTsKKworICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNz
ZWQgJiYgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byB8fCB2U2Nyb2xsID09IFNjcm9sbGJhckF1
dG8pKSB7CisgICAgICAgICAgICAvLyBEbyBhIGxheW91dCBpZiBwZW5kaW5nIGJlZm9yZSBjaGVj
a2luZyBpZiBzY3JvbGxiYXJzIGFyZSBuZWVkZWQuCisgICAgICAgICAgICBpZiAoaGFzVmVydGlj
YWxTY3JvbGxiYXIgIT0gb2xkSGFzVmVydGljYWwgfHwgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciAh
PSBvbGRIYXNIb3Jpem9udGFsKQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmll
dyo+KHRoaXMpLT5sYXlvdXQoKTsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgIHNjcm9sbHNW
ZXJ0aWNhbGx5ID0gKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09
IFNjcm9sbGJhckF1dG8gJiYgY29udGVudHNIZWlnaHQoKSA+IGhlaWdodCgpKTsKKyAgICAgICAg
ICAgIGlmIChzY3JvbGxzVmVydGljYWxseSkKKyAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpv
bnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNj
cm9sbGJhckF1dG8gJiYgY29udGVudHNXaWR0aCgpICsgY1ZlcnRpY2FsV2lkdGggPiB3aWR0aCgp
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFs
bHkgPSAoaFNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xs
YmFyQXV0byAmJiBjb250ZW50c1dpZHRoKCkgPiB3aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoc2Nyb2xsc0hvcml6b250YWxseSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsc1ZlcnRp
Y2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKHZTY3JvbGwgPT0gU2Ny
b2xsYmFyQXV0byAmJiBjb250ZW50c0hlaWdodCgpICsgY0hvcml6b250YWxIZWlnaHQgPiBoZWln
aHQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAg
ICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykgPyBo
YXNIb3Jpem9udGFsU2Nyb2xsYmFyIDogKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pOwor
ICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRv
KSA/IGhhc1ZlcnRpY2FsU2Nyb2xsYmFyIDogKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24p
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxiYXIg
IT0gc2Nyb2xsc1ZlcnRpY2FsbHkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFzVmVydGlj
YWxTY3JvbGxiYXIoc2Nyb2xsc1ZlcnRpY2FsbHkpOworICAgICAgICAgICAgaGFzVmVydGljYWxT
Y3JvbGxiYXIgPSBzY3JvbGxzVmVydGljYWxseTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICho
YXNIb3Jpem9udGFsU2Nyb2xsYmFyICE9IHNjcm9sbHNIb3Jpem9udGFsbHkpIHsKKyAgICAgICAg
ICAgIG1fZGF0YS0+c2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxzSG9yaXpvbnRhbGx5
KTsKKyAgICAgICAgICAgIGhhc0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxzSG9yaXpvbnRh
bGx5OworICAgICAgICB9CisgICAgfQogICAgIAotICAgIGd0a19hZGp1c3RtZW50X2NoYW5nZWQo
dmFkaik7Ci0gICAgZ3RrX2FkanVzdG1lbnRfdmFsdWVfY2hhbmdlZCh2YWRqKTsKKyAgICAvLyBT
ZXQgdXAgdGhlIHJhbmdlIChhbmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCisgICAgSW50U2l6ZSBt
YXhTY3JvbGxQb3NpdGlvbihjb250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSwgY29udGVu
dHNIZWlnaHQoKSAtIHZpc2libGVIZWlnaHQoKSk7CisgICAgSW50U2l6ZSBzY3JvbGwgPSBkZXNp
cmVkT2Zmc2V0LnNocnVua1RvKG1heFNjcm9sbFBvc2l0aW9uKTsKKyAgICBzY3JvbGwuY2xhbXBO
ZWdhdGl2ZVRvWmVybygpOworCisKKyAKKyAgICBpZiAobV9kYXRhLT5oQWRqKSB7CisgICAgICAg
IG1fZGF0YS0+aEFkai0+cGFnZV9zaXplID0gdmlzaWJsZVdpZHRoKCk7CisgICAgICAgIG1fZGF0
YS0+aEFkai0+c3RlcF9pbmNyZW1lbnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50OworICAgICAg
ICBtX2RhdGEtPmhBZGotPnVwcGVyID0gY29udGVudHNXaWR0aCgpOworICAgICAgICBndGtfYWRq
dXN0bWVudF9jaGFuZ2VkKG1fZGF0YS0+aEFkaik7CisKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Ny
b2xsT2Zmc2V0LndpZHRoKCkgIT0gc2Nyb2xsLndpZHRoKCkpIHsKKyAgICAgICAgICAgIG1fZGF0
YS0+aEFkai0+dmFsdWUgPSBzY3JvbGwud2lkdGgoKTsKKyAgICAgICAgICAgIGd0a19hZGp1c3Rt
ZW50X3ZhbHVlX2NoYW5nZWQobV9kYXRhLT5oQWRqKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAobV9kYXRhLT5oQmFyKSB7CisgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHZpc2libGVXaWR0
aCgpOworICAgICAgICBtX2RhdGEtPmhCYXItPnNldEVuYWJsZWQoY29udGVudHNXaWR0aCgpID4g
Y2xpZW50V2lkdGgpOworICAgICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50V2lkdGggLSBQQUdF
X0tFRVApOworICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudFdpZHRo
OworICAgICAgICBJbnRSZWN0IG9sZFJlY3QobV9kYXRhLT5oQmFyLT5mcmFtZUdlb21ldHJ5KCkp
OworICAgICAgICBJbnRSZWN0IGhCYXJSZWN0ID0gSW50UmVjdCgwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAtIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoKCkgLSAobV9kYXRhLT52QmFy
ID8gbV9kYXRhLT52QmFyLT53aWR0aCgpIDogMCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPmhCYXIt
PnNldFJlY3QoaEJhclJlY3QpOworICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHBy
ZXNzZWQgJiYgb2xkUmVjdCAhPSBtX2RhdGEtPmhCYXItPmZyYW1lR2VvbWV0cnkoKSkKKyAgICAg
ICAgICAgIG1fZGF0YS0+aEJhci0+aW52YWxpZGF0ZSgpOworCisgICAgICAgIGlmIChtX2RhdGEt
PnNjcm9sbGJhcnNTdXBwcmVzc2VkKQorICAgICAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdXBw
cmVzc0ludmFsaWRhdGlvbih0cnVlKTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdGVwcyhM
SU5FX1NURVAsIHBhZ2VTdGVwKTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRQcm9wb3J0aW9u
KGNsaWVudFdpZHRoLCBjb250ZW50c1dpZHRoKCkpOworICAgICAgICBtX2RhdGEtPmhCYXItPnNl
dFZhbHVlKHNjcm9sbC53aWR0aCgpKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsYmFyc1N1
cHByZXNzZWQpCisgICAgICAgICAgICBtX2RhdGEtPmhCYXItPnNldFN1cHByZXNzSW52YWxpZGF0
aW9uKGZhbHNlKTsgCisgICAgfSAKKworICAgIGlmIChtX2RhdGEtPnZBZGopIHsKKyAgICAgICAg
bV9kYXRhLT52QWRqLT5wYWdlX3NpemUgPSB2aXNpYmxlSGVpZ2h0KCk7CisgICAgICAgIG1fZGF0
YS0+dkFkai0+c3RlcF9pbmNyZW1lbnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50OworICAgICAg
ICBtX2RhdGEtPnZBZGotPnVwcGVyID0gY29udGVudHNIZWlnaHQoKTsKKyAgICAgICAgZ3RrX2Fk
anVzdG1lbnRfY2hhbmdlZChtX2RhdGEtPnZBZGopOworCisgICAgICAgIGlmIChtX2RhdGEtPnNj
cm9sbE9mZnNldC5oZWlnaHQoKSAhPSBzY3JvbGwuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIG1f
ZGF0YS0+dkFkai0+dmFsdWUgPSBzY3JvbGwuaGVpZ2h0KCk7CisgICAgICAgICAgICBndGtfYWRq
dXN0bWVudF92YWx1ZV9jaGFuZ2VkKG1fZGF0YS0+dkFkaik7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKG1fZGF0YS0+dkJhcikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gdmlzaWJs
ZUhlaWdodCgpOworICAgICAgICBtX2RhdGEtPnZCYXItPnNldEVuYWJsZWQoY29udGVudHNIZWln
aHQoKSA+IGNsaWVudEhlaWdodCk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRIZWln
aHQgLSBQQUdFX0tFRVApOworICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNs
aWVudEhlaWdodDsKKyAgICAgICAgSW50UmVjdCBvbGRSZWN0KG1fZGF0YS0+dkJhci0+ZnJhbWVH
ZW9tZXRyeSgpKTsKKyAgICAgICAgSW50UmVjdCB2QmFyUmVjdCA9IEludFJlY3Qod2lkdGgoKSAt
IG1fZGF0YS0+dkJhci0+d2lkdGgoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+
d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSAo
bV9kYXRhLT5oQmFyID8gbV9kYXRhLT5oQmFyLT5oZWlnaHQoKSA6IDApKTsKKyAgICAgICAgbV9k
YXRhLT52QmFyLT5zZXRSZWN0KHZCYXJSZWN0KTsKKyAgICAgICAgaWYgKCFtX2RhdGEtPnNjcm9s
bGJhcnNTdXBwcmVzc2VkICYmIG9sZFJlY3QgIT0gbV9kYXRhLT52QmFyLT5mcmFtZUdlb21ldHJ5
KCkpCisgICAgICAgICAgICBtX2RhdGEtPnZCYXItPmludmFsaWRhdGUoKTsKKworICAgICAgICBp
ZiAobV9kYXRhLT5zY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAgICAgICAgICAgIG1fZGF0YS0+dkJh
ci0+c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24odHJ1ZSk7CisgICAgICAgIG1fZGF0YS0+dkJhci0+
c2V0U3RlcHMoTElORV9TVEVQLCBwYWdlU3RlcCk7CisgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0
UHJvcG9ydGlvbihjbGllbnRIZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOworICAgICAgICBtX2Rh
dGEtPnZCYXItPnNldFZhbHVlKHNjcm9sbC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChtX2RhdGEt
PnNjcm9sbGJhcnNTdXBwcmVzc2VkKQorICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRTdXBw
cmVzc0ludmFsaWRhdGlvbihmYWxzZSk7CisgICAgfQogCi0gICAgbV9kYXRhLT5zY3JvbGxCYXJz
TmVlZFVwZGF0ZSA9IGZhbHNlOworICAgIGlmIChvbGRIYXNWZXJ0aWNhbCAhPSAobV9kYXRhLT52
QmFyICE9IDApIHx8IG9sZEhhc0hvcml6b250YWwgIT0gKG1fZGF0YS0+aEJhciAhPSAwKSkKKyAg
ICAgICAgZ2VvbWV0cnlDaGFuZ2VkKCk7CisKKyAgICAvLyBTZWUgaWYgb3VyIG9mZnNldCBoYXMg
Y2hhbmdlZCBpbiBhIHNpdHVhdGlvbiB3aGVyZSB3ZSBtaWdodCBub3QgaGF2ZSBzY3JvbGxiYXJz
LgorICAgIC8vIFRoaXMgY2FuIGhhcHBlbiB3aGVuIGVkaXRpbmcgYSBib2R5IHdpdGggb3ZlcmZs
b3c6aGlkZGVuIGFuZCBzY3JvbGxpbmcgdG8gcmV2ZWFsIHNlbGVjdGlvbi4KKyAgICAvLyBJdCBj
YW4gYWxzbyBoYXBwZW4gd2hlbiBtYXhpbWl6aW5nIGEgd2luZG93IHRoYXQgaGFzIHNjcm9sbGJh
cnMgKGJ1dCB0aGUgbmV3IG1heGltaXplZCByZXN1bHQKKyAgICAvLyBkb2VzIG5vdCkuCisgICAg
SW50U2l6ZSBzY3JvbGxEZWx0YSA9IHNjcm9sbCAtIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OworICAg
IGlmIChzY3JvbGxEZWx0YSAhPSBJbnRTaXplKCkpIHsKKyAgICAgICBtX2RhdGEtPnNjcm9sbE9m
ZnNldCA9IHNjcm9sbDsKKyAgICAgICBtX2RhdGEtPnNjcm9sbEJhY2tpbmdTdG9yZShzY3JvbGxE
ZWx0YSk7CisgICAgfQorCisgICAgbV9kYXRhLT5pblVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZTsK
IH0KIAotSW50UG9pbnQgU2Nyb2xsVmlldzo6d2luZG93VG9Db250ZW50cyhjb25zdCBJbnRQb2lu
dCYgcG9pbnQpIGNvbnN0CitJbnRQb2ludCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNv
bnN0IEludFBvaW50JiB3aW5kb3dQb2ludCkgY29uc3QKIHsgCi0gICAgcmV0dXJuIHBvaW50Owor
ICAgIEludFBvaW50IHZpZXdQb2ludCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5k
b3dQb2ludCk7CisgICAgcmV0dXJuIHZpZXdQb2ludCArIHNjcm9sbE9mZnNldCgpOwogfQogCi1J
bnRQb2ludCBTY3JvbGxWaWV3Ojpjb250ZW50c1RvV2luZG93KGNvbnN0IEludFBvaW50JiBwb2lu
dCkgY29uc3QKK0ludFBvaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3coY29uc3QgSW50
UG9pbnQmIGNvbnRlbnRzUG9pbnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHBvaW50OworICAgIElu
dFBvaW50IHZpZXdQb2ludCA9IGNvbnRlbnRzUG9pbnQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICBy
ZXR1cm4gY29udmVydFRvQ29udGFpbmluZ1dpbmRvdyh2aWV3UG9pbnQpOyAgCiB9CiAKIFBsYXRm
b3JtU2Nyb2xsYmFyKiBTY3JvbGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKGNvbnN0IFBsYXRm
b3JtTW91c2VFdmVudCYgbW91c2VFdmVudCkKIHsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICBJbnRQb2ludCB2aWV3UG9pbnQgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cobW91c2VF
dmVudC5wb3MoKSk7CisgICAgaWYgKG1fZGF0YS0+aEJhciAmJiBtX2RhdGEtPmhCYXItPmZyYW1l
R2VvbWV0cnkoKS5jb250YWlucyh2aWV3UG9pbnQpKQorICAgICAgICByZXR1cm4gbV9kYXRhLT5o
QmFyLmdldCgpOworICAgIGlmIChtX2RhdGEtPnZCYXIgJiYgbV9kYXRhLT52QmFyLT5mcmFtZUdl
b21ldHJ5KCkuY29udGFpbnModmlld1BvaW50KSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dkJh
ci5nZXQoKTsKICAgICByZXR1cm4gMDsKIH0KIAorSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udmVy
dENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkg
Y29uc3QKK3sKKyAgICBJbnRQb2ludCBuZXdQb2ludCA9IHBvaW50OworICAgIGlmIChjaGlsZCAh
PSBtX2RhdGEtPmhCYXIgJiYgY2hpbGQgIT0gbV9kYXRhLT52QmFyKQorICAgICAgICBuZXdQb2lu
dCA9IHBvaW50IC0gc2Nyb2xsT2Zmc2V0KCk7CisgICAgcmV0dXJuIFdpZGdldDo6Y29udmVydENo
aWxkVG9TZWxmKGNoaWxkLCBuZXdQb2ludCk7Cit9CisKK0ludFBvaW50IFNjcm9sbFZpZXc6OmNv
bnZlcnRTZWxmVG9DaGlsZChjb25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0Cit7CisgICAgSW50UG9pbnQgbmV3UG9pbnQgPSBwb2ludDsKKyAgICBpZiAoY2hp
bGQgIT0gbV9kYXRhLT5oQmFyICYmIGNoaWxkICE9IG1fZGF0YS0+dkJhcikKKyAgICAgICAgbmV3
UG9pbnQgPSBwb2ludCArIHNjcm9sbE9mZnNldCgpOworICAgIHJldHVybiBXaWRnZXQ6OmNvbnZl
cnRTZWxmVG9DaGlsZChjaGlsZCwgbmV3UG9pbnQpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBh
aW50KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAg
ICAvLyBGSVhNRTogVGhpcyBjb2RlIGlzIGhlcmUgc28gd2UgZG9uJ3QgaGF2ZSB0byBmb3JrIEZy
YW1lVmlldy5oLy5jcHAuCisgICAgLy8gSW4gdGhlIGVuZCwgRnJhbWVWaWV3IHNob3VsZCBqdXN0
IG1lcmdlIHdpdGggU2Nyb2xsVmlldy4KKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CisKKyAg
ICBpZiAoY29udGV4dC0+cGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBJbnRSZWN0IGRvY3VtZW50RGlydHlSZWN0ID0gcmVjdDsKKyAgICBkb2N1bWVudERpcnR5UmVj
dC5pbnRlcnNlY3QoZnJhbWVHZW9tZXRyeSgpKTsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKwor
ICAgIGNvbnRleHQtPnRyYW5zbGF0ZSh4KCksIHkoKSk7CisgICAgZG9jdW1lbnREaXJ0eVJlY3Qu
bW92ZSgteCgpLCAteSgpKTsKKworICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtY29udGVudHNYKCks
IC1jb250ZW50c1koKSk7CisgICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZShjb250ZW50c1goKSwg
Y29udGVudHNZKCkpOworCisgICAgY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KHZpc2li
bGVDb250ZW50UmVjdCgpKSk7CisgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhp
cyktPmZyYW1lKCktPnBhaW50KGNvbnRleHQsIGRvY3VtZW50RGlydHlSZWN0KTsKKyAgICBjb250
ZXh0LT5yZXN0b3JlKCk7CisKKyAgICAvLyBOb3cgcGFpbnQgdGhlIHNjcm9sbGJhcnMuCisgICAg
aWYgKCFtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkICYmIChtX2RhdGEtPmhCYXIgfHwgbV9k
YXRhLT52QmFyKSkgeworICAgICAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgICAgIEludFJlY3Qg
c2Nyb2xsVmlld0RpcnR5UmVjdCA9IHJlY3Q7CisgICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3Qu
aW50ZXJzZWN0KGZyYW1lR2VvbWV0cnkoKSk7CisgICAgICAgIC8qCisgICAgICAgICAqIFdlIGRv
bid0IG5lZWQgdG8gdHJhbnNsYXRlIHRoZSBjb250ZXh0IGFzIFBsYXRmb3JtU2Nyb2xsYmFyOjpz
ZXRSZWN0IG1ha2VzIHN1cmUgdGhlIHNjcm9sbGJhcgorICAgICAgICAgKiBpcyBhdCB0aGUgcmln
aHQgc3BvdC4KKyAgICAgICAgICovCisgICAgICAgIGlmIChtX2RhdGEtPmhCYXIpCisgICAgICAg
ICAgICBtX2RhdGEtPmhCYXItPnBhaW50KGNvbnRleHQsIHNjcm9sbFZpZXdEaXJ0eVJlY3QpOwor
ICAgICAgICBpZiAobV9kYXRhLT52QmFyKQorICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5wYWlu
dChjb250ZXh0LCBzY3JvbGxWaWV3RGlydHlSZWN0KTsKKworICAgICAgICAvKgorICAgICAgICAg
KiBGSVhNRTogVE9ETzogQ2hlY2sgaWYgdGhhdCB3b3JrcyB3aXRoIFJUTAorICAgICAgICAgKi8K
KyAgICAgICAgY29udGV4dC0+dHJhbnNsYXRlKHgoKSwgeSgpKTsKKyAgICAgICAgc2Nyb2xsVmll
d0RpcnR5UmVjdC5tb3ZlKC14KCksIC15KCkpOworICAgICAgICAvLyBGaWxsIHRoZSBzY3JvbGwg
Y29ybmVyIHdpdGggd2hpdGUuCisgICAgICAgIEludFJlY3QgaENvcm5lcjsKKyAgICAgICAgaWYg
KG1fZGF0YS0+aEJhciAmJiB3aWR0aCgpIC0gbV9kYXRhLT5oQmFyLT53aWR0aCgpID4gMCkgewor
ICAgICAgICAgICAgaENvcm5lciA9IEludFJlY3QobV9kYXRhLT5oQmFyLT53aWR0aCgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSBtX2RhdGEtPmhCYXItPmhlaWdo
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIG1fZGF0YS0+aEJh
ci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+aEJhci0+
aGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKGhDb3JuZXIuaW50ZXJzZWN0cyhzY3JvbGxWaWV3
RGlydHlSZWN0KSkKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChoQ29ybmVyLCBD
b2xvcjo6d2hpdGUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZGF0YS0+dkJhciAmJiBo
ZWlnaHQoKSAtIG1fZGF0YS0+dkJhci0+aGVpZ2h0KCkgPiAwKSB7CisgICAgICAgICAgICBJbnRS
ZWN0IHZDb3JuZXIod2lkdGgoKSAtIG1fZGF0YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2RhdGEtPnZCYXItPmhlaWdodCgpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoZWlnaHQoKSAtIG1fZGF0YS0+dkJhci0+aGVpZ2h0KCkpOworICAgICAgICAgICAg
aWYgKHZDb3JuZXIgIT0gaENvcm5lciAmJiB2Q29ybmVyLmludGVyc2VjdHMoc2Nyb2xsVmlld0Rp
cnR5UmVjdCkpCisgICAgICAgICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QodkNvcm5lciwgQ29s
b3I6OndoaXRlKTsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAg
ICB9Cit9CisKKy8qCisgKiB1cGRhdGUgY2hpbGRyZW4gYnV0IG5vciBvdXIgc2Nyb2xsYmFycy4g
VGhleSBzaG91bGQgbm90IHNjcm9sbCB3aGVuCisgKiB3ZSBzY3JvbGwgb3VyIGNvbnRlbnQuCisg
Ki8KK3ZvaWQgU2Nyb2xsVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBIYXNo
U2V0PFdpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2RhdGEtPmNoaWxkcmVuLmVuZCgp
OworICAgIGZvciAoSGFzaFNldDxXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IG1f
ZGF0YS0+Y2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKKyAgICAg
ICAgKCpjdXJyZW50KS0+Z2VvbWV0cnlDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51
bGFyaXR5KQoreworICAgIGlmICAoKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24g
PT0gU2Nyb2xsRG93bikgJiYgbV9kYXRhLT52QmFyKQorICAgICAgICBtX2RhdGEtPnZCYXItPnNj
cm9sbChkaXJlY3Rpb24sIGdyYW51bGFyaXR5KTsKKyAgICBlbHNlIGlmIChtX2RhdGEtPmhCYXIp
CisgICAgICAgIG1fZGF0YS0+aEJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOwor
fQorCitJbnRSZWN0IFNjcm9sbFZpZXc6OndpbmRvd1Jlc2l6ZXJSZWN0KCkKK3sKKyAgICBBU1NF
UlQoaXNGcmFtZVZpZXcoKSk7CisgICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0
aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih0aGlzKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWVW
aWV3LT5mcmFtZSgpID8gZnJhbWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOworICAgIGlmICgh
cGFnZSkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gcGFnZS0+Y2hyb21l
KCktPndpbmRvd1Jlc2l6ZXJSZWN0KCk7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cmVzaXplck92
ZXJsYXBzQ29udGVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICFtX2RhdGEtPnNjcm9sbGJhcnNB
dm9pZGluZ1Jlc2l6ZXI7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6YWRqdXN0T3ZlcmxhcHBpbmdT
Y3JvbGxiYXJDb3VudChpbnQgb3ZlcmxhcERlbHRhKQoreworICAgIGludCBvbGRDb3VudCA9IG1f
ZGF0YS0+c2Nyb2xsYmFyc0F2b2lkaW5nUmVzaXplcjsKKyAgICBtX2RhdGEtPnNjcm9sbGJhcnNB
dm9pZGluZ1Jlc2l6ZXIgKz0gb3ZlcmxhcERlbHRhOworICAgIGlmIChwYXJlbnQoKSAmJiBwYXJl
bnQoKS0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFy
ZW50KCkpLT5hZGp1c3RPdmVybGFwcGluZ1Njcm9sbGJhckNvdW50KG92ZXJsYXBEZWx0YSk7Cisg
ICAgZWxzZSBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpIHsKKyAgICAgICAgLy8g
SWYgd2Ugd2VudCBmcm9tIG4gdG8gMCBvciBmcm9tIDAgdG8gbiBhbmQgd2UncmUgdGhlIG91dGVy
bW9zdCB2aWV3LAorICAgICAgICAvLyB3ZSBuZWVkIHRvIGludmFsaWRhdGUgdGhlIHdpbmRvd1Jl
c2l6ZXJSZWN0KCksIHNpbmNlIGl0IHdpbGwgbm93IG5lZWQgdG8gcGFpbnQKKyAgICAgICAgLy8g
ZGlmZmVyZW50bHkuCisgICAgICAgIGlmIChvbGRDb3VudCA+IDAgJiYgbV9kYXRhLT5zY3JvbGxi
YXJzQXZvaWRpbmdSZXNpemVyID09IDAgfHwKKyAgICAgICAgICAgIG9sZENvdW50ID09IDAgJiYg
bV9kYXRhLT5zY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyID4gMCkKKyAgICAgICAgICAgIGludmFs
aWRhdGVSZWN0KHdpbmRvd1Jlc2l6ZXJSZWN0KCkpOworICAgIH0KK30KKwordm9pZCBTY3JvbGxW
aWV3OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogcGFyZW50VmlldykKK3sKKyAgICBpZiAoIXBhcmVu
dFZpZXcgJiYgbV9kYXRhLT5zY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyICYmIHBhcmVudCgpICYm
IHBhcmVudCgpLT5pc0ZyYW1lVmlldygpKQorICAgICAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcq
PihwYXJlbnQoKSktPmFkanVzdE92ZXJsYXBwaW5nU2Nyb2xsYmFyQ291bnQoZmFsc2UpOworICAg
IFdpZGdldDo6c2V0UGFyZW50KHBhcmVudFZpZXcpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OmFk
ZFRvRGlydHlSZWdpb24oY29uc3QgSW50UmVjdCYgY29udGFpbmluZ1dpbmRvd1JlY3QpCit7Cisg
ICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOworICAgIGNvbnN0IEZyYW1lVmlldyogZnJhbWVWaWV3
ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcyk7CisgICAgUGFnZSogcGFnZSA9
IGZyYW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpIDogMDsKKyAg
ICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBwYWdlLT5jaHJvbWUoKS0+YWRkVG9E
aXJ0eVJlZ2lvbihjb250YWluaW5nV2luZG93UmVjdCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6
c2Nyb2xsQmFja2luZ1N0b3JlKGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxW
aWV3UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJlY3QpCit7CisgICAgQVNTRVJUKGlzRnJhbWVW
aWV3KCkpOworICAgIGNvbnN0IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRnJhbWVWaWV3Kj4odGhpcyk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUo
KSA/IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpIDogMDsKKyAgICBpZiAoIXBhZ2UpCisgICAg
ICAgIHJldHVybjsKKyAgICBwYWdlLT5jaHJvbWUoKS0+c2Nyb2xsQmFja2luZ1N0b3JlKGR4LCBk
eSwgc2Nyb2xsVmlld1JlY3QsIGNsaXBSZWN0KTsKK30KKwordm9pZCBTY3JvbGxWaWV3Ojp1cGRh
dGVCYWNraW5nU3RvcmUoKQoreworICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKKyAgICBjb25z
dCBGcmFtZVZpZXcqIGZyYW1lVmlldyA9IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHRo
aXMpOworICAgIFBhZ2UqIHBhZ2UgPSBmcmFtZVZpZXctPmZyYW1lKCkgPyBmcmFtZVZpZXctPmZy
YW1lKCktPnBhZ2UoKSA6IDA7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAg
cGFnZS0+Y2hyb21lKCktPnVwZGF0ZUJhY2tpbmdTdG9yZSgpOworfQorCiB9CkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL2dkay9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDI0Nzgx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsNiBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUg
IkZpbGVDaG9vc2VyLmgiCiAjaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKQEAgLTE2Myw3ICsxNjIsNiBAQCBT
dHJpbmcgRmlsZUNob29zZXI6OmJhc2VuYW1lRm9yV2lkdGgoY29uCiBDb2xvciBXZWJDb3JlOjpm
b2N1c1JpbmdDb2xvcigpIHsgcmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0
Rm9jdXNSaW5nQ29sb3JDaGFuZ2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KIAotdm9pZCBGcmFt
ZTo6c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCkgeyB9CiAKIGJvb2wgUmVzb3VyY2VIYW5kbGU6Ondp
bGxMb2FkRnJvbUNhY2hlKFJlc291cmNlUmVxdWVzdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0
dXJuIGZhbHNlOyB9CiBib29sIFJlc291cmNlSGFuZGxlOjpsb2Fkc0Jsb2NrZWQoKSB7IG5vdElt
cGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
V2hlZWxFdmVudEdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hl
ZWxFdmVudEdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
V2hlZWxFdmVudEdkay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDI3ICszMiwyNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLVBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2
ZW50KEdka0V2ZW50KiBldmVudCkKK1BsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2
ZW50KEdka0V2ZW50U2Nyb2xsKiBldmVudCkKIHsKICAgICBtX2RlbHRhWCA9IDA7CiAgICAgbV9k
ZWx0YVkgPSAwOwogCi0gICAgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JP
TExfVVApCisgICAgaWYgKGV2ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9VUCkKICAgICAg
ICAgbV9kZWx0YVkgPSAtMTIwOwotICAgIGVsc2UgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9u
ID09IEdES19TQ1JPTExfTEVGVCkKKyAgICBlbHNlIGlmIChldmVudC0+ZGlyZWN0aW9uID09IEdE
S19TQ1JPTExfTEVGVCkKICAgICAgICAgbV9kZWx0YVggPSAtMTIwOwotICAgIGVsc2UgaWYgKGV2
ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfUklHSFQpCisgICAgZWxzZSBpZiAo
ZXZlbnQtPmRpcmVjdGlvbiA9PSBHREtfU0NST0xMX1JJR0hUKQogICAgICAgICBtX2RlbHRhWCA9
IDEyMDsKICAgICBlbHNlCiAgICAgICAgIG1fZGVsdGFZID0gMTIwOwogCi0gICAgbV9wb3NpdGlv
biA9IEludFBvaW50KChpbnQpZXZlbnQtPnNjcm9sbC54LCAoaW50KWV2ZW50LT5zY3JvbGwueSk7
Ci0gICAgbV9nbG9iYWxQb3NpdGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPnNjcm9sbC54X3Jv
b3QsIChpbnQpZXZlbnQtPnNjcm9sbC55X3Jvb3QpOworICAgIG1fcG9zaXRpb24gPSBJbnRQb2lu
dCgoaW50KWV2ZW50LT54LCAoaW50KWV2ZW50LT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0g
SW50UG9pbnQoKGludClldmVudC0+eF9yb290LCAoaW50KWV2ZW50LT55X3Jvb3QpOwogICAgIG1f
aXNBY2NlcHRlZCA9IGZhbHNlOwotICAgIG1fc2hpZnRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRl
ICYgR0RLX1NISUZUX01BU0s7Ci0gICAgbV9jdHJsS2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAm
IEdES19DT05UUk9MX01BU0s7Ci0gICAgbV9hbHRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYg
R0RLX01PRDFfTUFTSzsKLSAgICBtX21ldGFLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RL
X01PRDJfTUFTSzsKKyAgICBtX3NoaWZ0S2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01B
U0s7CisgICAgbV9jdHJsS2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKKyAg
ICBtX2FsdEtleSA9IGV2ZW50LT5zdGF0ZSAmIEdES19NT0QxX01BU0s7CisgICAgbV9tZXRhS2V5
ID0gZXZlbnQtPnN0YXRlICYgR0RLX01PRDJfTUFTSzsKICAgICBtX2lzQ29udGludW91cyA9IGZh
bHNlOwogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAJKHJldmlzaW9uIDI0
NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0
ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIw
MDcgQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAw
NiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAogICogQ29weXJpZ2h0IChDKSAy
MDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgpA
QCAtMzEsMTEgKzMxLDEyIEBACiAKICNpbmNsdWRlICJDdXJzb3IuaCIKICNpbmNsdWRlICJGb250
LmgiCi0jaW5jbHVkZSAiRnJhbWVHZGsuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIK
ICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVk
ZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJ3
ZWJraXRndGtwYWdlLmgiCiAKICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0
ay5oPgpAQCAtNDcsOCArNDgsMTkgQEAgcHVibGljOgogICAgIEdka0RyYXdhYmxlKiBkcmF3YWJs
ZTsKICAgICBHdGtXaWRnZXQqIHdpZGdldDsKICAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKLSAg
ICBJbnRSZWN0IGdlb21ldHJ5OwotICAgIEZvbnQgZm9udDsKKyAgICBJbnRSZWN0IGZyYW1lUmVj
dDsKKworICAgIFNjcm9sbFZpZXcqIHBhcmVudDsKKyAgICBXZWJLaXRHdGtQYWdlKiBjb250YWlu
aW5nV2luZG93OworICAgIGJvb2wgc3VwcHJlc3NJbnZhbGlkYXRpb247CisgICAgYm9vbCBpc1Nj
cm9sbFZpZXdDb250cm9sOworCisgICAgR2RrRHJhd2FibGUqIGdka0RyYXdhYmxlKCkKKyAgICB7
CisgICAgICAgIGlmICghZHJhd2FibGUgJiYgd2lkZ2V0KQorICAgICAgICAgICAgZHJhd2FibGUg
PSB3aWRnZXQtPndpbmRvdzsKKyAgICAgICAgcmV0dXJuIGRyYXdhYmxlOworICAgIH0KIH07CiAK
IFdpZGdldDo6V2lkZ2V0KCkKQEAgLTU2LDI3ICs2OCwyMCBAQCBXaWRnZXQ6OldpZGdldCgpCiB7
CiAgICAgZGF0YS0+ZHJhd2FibGUgPSAwOwogICAgIGRhdGEtPndpZGdldCA9IDA7CisgICAgZGF0
YS0+Y2xpZW50ID0gMDsKKyAgICBkYXRhLT5wYXJlbnQgPSAwOworICAgIGRhdGEtPmNvbnRhaW5p
bmdXaW5kb3cgPSAwOworICAgIGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uID0gZmFsc2U7Cisg
ICAgZGF0YS0+aXNTY3JvbGxWaWV3Q29udHJvbCA9IGZhbHNlOwogfQogCi1XaWRnZXQ6OldpZGdl
dChHdGtXaWRnZXQqIHdpZGdldCkKLSAgICA6IGRhdGEobmV3IFdpZGdldFByaXZhdGUpCi17Ci0g
ICAgc2V0R3RrV2lkZ2V0KHdpZGdldCk7Ci19Ci0KLUdka0RyYXdhYmxlKiBXaWRnZXQ6Omdka0Ry
YXdhYmxlKCkgY29uc3QKLXsKLSAgICBpZiAoIWRhdGEtPmRyYXdhYmxlICYmIGRhdGEtPndpZGdl
dCkKLSAgICAgICAgZGF0YS0+ZHJhd2FibGUgPSBHVEtfSVNfTEFZT1VUKGRhdGEtPndpZGdldCkg
PyBHVEtfTEFZT1VUKGRhdGEtPndpZGdldCktPmJpbl93aW5kb3cgOiBkYXRhLT53aWRnZXQtPndp
bmRvdzsKLSAgICByZXR1cm4gZGF0YS0+ZHJhd2FibGU7Ci19CiAKLUd0a1dpZGdldCogV2lkZ2V0
OjpndGtXaWRnZXQoKSBjb25zdAorR3RrV2lkZ2V0KiBXaWRnZXQ6OmludGVybmFsR3RrV2lkZ2V0
KCkgY29uc3QKIHsKICAgICByZXR1cm4gZGF0YS0+d2lkZ2V0OwogfQogCi12b2lkIFdpZGdldDo6
c2V0R3RrV2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQordm9pZCBXaWRnZXQ6OnNldEludGVybmFs
R3RrV2lkZ2V0KEd0a1dpZGdldCogd2lkZ2V0KQogewogICAgIGRhdGEtPmRyYXdhYmxlID0gMDsK
ICAgICBkYXRhLT53aWRnZXQgPSB3aWRnZXQ7CkBAIC04Nyw2ICs5MiwxNiBAQCBXaWRnZXQ6On5X
aWRnZXQoKQogICAgIGRlbGV0ZSBkYXRhOwogfQogCit2b2lkIFdpZGdldDo6c2V0Q29udGFpbmlu
Z1dpbmRvdyhXZWJLaXRHdGtQYWdlKiBjb250YWluaW5nV2luZG93KQoreworICAgIGRhdGEtPmNv
bnRhaW5pbmdXaW5kb3cgPSBjb250YWluaW5nV2luZG93OworfQorCitXZWJLaXRHdGtQYWdlKiBX
aWRnZXQ6OmNvbnRhaW5pbmdXaW5kb3coKSBjb25zdAoreworICAgIHJldHVybiBkYXRhLT5jb250
YWluaW5nV2luZG93OworfQorCiB2b2lkIFdpZGdldDo6c2V0Q2xpZW50KFdpZGdldENsaWVudCog
YykKIHsKICAgICBkYXRhLT5jbGllbnQgPSBjOwpAQCAtOTksMTUgKzExNCwyNyBAQCBXaWRnZXRD
bGllbnQqIFdpZGdldDo6Y2xpZW50KCkgY29uc3QKIAogSW50UmVjdCBXaWRnZXQ6OmZyYW1lR2Vv
bWV0cnkoKSBjb25zdAogewotICAgIHJldHVybiBkYXRhLT5nZW9tZXRyeTsKKyAgICByZXR1cm4g
ZGF0YS0+ZnJhbWVSZWN0OworfQorCit2b2lkIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25z
dCBJbnRSZWN0JiByKQoreworICAgIGRhdGEtPmZyYW1lUmVjdCA9IHI7Cit9CisKK3ZvaWQgV2lk
Z2V0OjpzZXRQYXJlbnQoU2Nyb2xsVmlldyogdikKK3sKKyAgICBkYXRhLT5wYXJlbnQgPSB2Owor
fQorCitTY3JvbGxWaWV3KiBXaWRnZXQ6OnBhcmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRh
dGEtPnBhcmVudDsKIH0KIAogdm9pZCBXaWRnZXQ6OnNldEZvY3VzKCkKIHsKLSAgICBHdGtXaWRn
ZXQgKndpZGdldCA9IGRhdGEtPndpZGdldDsKLSAgICBpZiAoIXdpZGdldCkKLSAgICAgICAgcmV0
dXJuOwotICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworICAgIGd0a193aWRnZXRf
Z3JhYl9mb2N1cyhpbnRlcm5hbEd0a1dpZGdldCgpID8gaW50ZXJuYWxHdGtXaWRnZXQoKSA6IEdU
S19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKSk7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzZXRDdXJz
b3IoY29uc3QgQ3Vyc29yJiBjdXJzb3IpCkBAIC0xMTYsMzkgKzE0MywyMSBAQCB2b2lkIFdpZGdl
dDo6c2V0Q3Vyc29yKGNvbnN0IEN1cnNvciYgY3VyCiAgICAgaWYgKCFwY3VyKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBnZGtEcmF3YWJsZSgpOwotICAg
IGlmICghZHJhd2FibGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUpKQotICAgICAgICByZXR1
cm47Ci0gICAgR2RrV2luZG93KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICBn
ZGtfd2luZG93X3NldF9jdXJzb3Iod2luZG93LCBwY3VyKTsKLQorICAgIGdka193aW5kb3dfc2V0
X2N1cnNvcihkYXRhLT5nZGtEcmF3YWJsZSgpID8gR0RLX1dJTkRPVyhkYXRhLT5nZGtEcmF3YWJs
ZSgpKSA6IGNvbnRhaW5pbmdXaW5kb3coKS0+YmluX3dpbmRvdywgcGN1cik7CiB9CiAKIHZvaWQg
V2lkZ2V0OjpzaG93KCkKIHsKLSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBnZGtEcmF3YWJs
ZSgpOwotICAgIGlmICghZHJhd2FibGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUpKQorICAg
IGlmICghaW50ZXJuYWxHdGtXaWRnZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEdka1dpbmRv
dyogd2luZG93ID0gR0RLX1dJTkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19zaG93KHdp
bmRvdyk7CisgICAgZ3RrX3dpZGdldF9zaG93KGludGVybmFsR3RrV2lkZ2V0KCkpOwogfQogCiB2
b2lkIFdpZGdldDo6aGlkZSgpCiB7Ci0gICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlID0gZ2RrRHJh
d2FibGUoKTsKLSAgICBpZiAoIWRyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdhYmxlKSkK
KyAgICBpZiAoIWludGVybmFsR3RrV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBHZGtX
aW5kb3cqIHdpbmRvdyA9IEdES19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfaGlk
ZSh3aW5kb3cpOwotfQotCi12b2lkIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRS
ZWN0JiByKQotewotICAgIGRhdGEtPmdlb21ldHJ5ID0gcjsKLSAgICBnX3JldHVybl9pZl9mYWls
KGRhdGEtPndpZGdldCk7Ci0KLSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHIueCgp
LCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2Fs
bG9jYXRlKGRhdGEtPndpZGdldCwgJmFsbG9jYXRpb24pOworICAgIGd0a193aWRnZXRfaGlkZShp
bnRlcm5hbEd0a1dpZGdldCgpKTsKIH0KIAogdm9pZCBXaWRnZXQ6OnNldEVuYWJsZWQoYm9vbCkK
QEAgLTE2NCwxMiArMTczLDM1IEBAIGJvb2wgV2lkZ2V0Ojppc0VuYWJsZWQoKSBjb25zdAogCiB2
b2lkIFdpZGdldDo6cmVtb3ZlRnJvbVBhcmVudCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBpZiAocGFyZW50KCkpCisgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZCh0aGlzKTsK
IH0KIAotdm9pZCBXaWRnZXQ6OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIEludFJlY3QgY29uc3Qm
KQorLyoKKyAqIHNpbWlsaWFyIHRvIGd0a19jb250YWluZXJfcHJvcGFnYXRlX2V4cG9zZSwgd2Ug
d2FudCB0byBtYWtlIHN1cmUKKyAqIGludGVybmFsR3RrV2lkZ2V0KCkgaXMgcGFpbnRlZCBub3cu
CisgKgorICogVE9ETzogd2UgbWlnaHQgd2FudCB0byBob25vciB0aGUgdHJhbnNsYXRpb24gb2Yg
dGhlIGNvbnRleHQgYW5kIG1hbmlwdWxhdGUKKyAqIGFsbG9jYXRpb24ueCBhbmQgYWxsb2NhdGlv
bi55IGJlZm9yZSBkcmF3aW5nLiBUaGlzIGhhcyBwb3RlbnRpYWwgdG8gcmVtb3ZlCisgKiB0aGUg
c2V0U2Nyb2xsVmlld0NvbnRyb2wgbWV0aG9kLgorICovCit2b2lkIFdpZGdldDo6cGFpbnQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JikKIHsKLSAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIGlmICghaW50ZXJuYWxHdGtXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR2RrRXZlbnQqIGV2ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfRVhQT1NFKTsKKyAgICBl
dmVudC0+ZXhwb3NlID0gKmNvbnRleHQtPmdka0V4cG9zZUV2ZW50KCk7CisgICAgZXZlbnQtPmV4
cG9zZS5yZWdpb24gPSBndGtfd2lkZ2V0X3JlZ2lvbl9pbnRlcnNlY3QoaW50ZXJuYWxHdGtXaWRn
ZXQoKSwgZXZlbnQtPmV4cG9zZS5yZWdpb24pOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+ZXhw
b3NlLndpbmRvdyk7CisKKyAgICBpZiAoIWdka19yZWdpb25fZW1wdHkoZXZlbnQtPmV4cG9zZS5y
ZWdpb24pKSB7CisgICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5y
ZWdpb24sICZldmVudC0+ZXhwb3NlLmFyZWEpOworICAgICAgICBndGtfd2lkZ2V0X3NlbmRfZXhw
b3NlKGludGVybmFsR3RrV2lkZ2V0KCksIGV2ZW50KTsKKyAgICB9CisKKyAgICBndGtfd2lkZ2V0
X3NlbmRfZXhwb3NlKGludGVybmFsR3RrV2lkZ2V0KCksIGV2ZW50KTsKKyAgICBnZGtfZXZlbnRf
ZnJlZShldmVudCk7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpCkBAIC0x
NzksMTUgKzIxMSwxMDAgQEAgdm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKIAogdm9p
ZCBXaWRnZXQ6OmludmFsaWRhdGUoKQogewotICAgIGlmIChkYXRhLT53aWRnZXQpCi0gICAgICAg
IGd0a193aWRnZXRfcXVldWVfZHJhdyhkYXRhLT53aWRnZXQpOworICAgIGludmFsaWRhdGVSZWN0
KEludFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKK30KKwordm9pZCBXaWRnZXQ6Omlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHIpCit7CisgICAgaWYgKGRhdGEtPnN1cHByZXNz
SW52YWxpZGF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXBhcmVudCgpKSB7Cisg
ICAgICAgIGd0a193aWRnZXRfcXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQoY29udGFpbmluZ1dp
bmRvdygpKSwgci54KCksIHIueSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByLndpZHRoKCksIHIuaGVpZ2h0KCkpOworICAgICAgICBpZiAoaXNGcmFtZVZpZXcoKSkKKyAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5hZGRUb0RpcnR5UmVnaW9u
KHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gR2V0IHRoZSByb290IHdpZGdl
dC4KKyAgICBTY3JvbGxWaWV3KiBvdXRlcm1vc3RWaWV3ID0gcGFyZW50KCk7CisgICAgd2hpbGUg
KG91dGVybW9zdFZpZXcgJiYgb3V0ZXJtb3N0Vmlldy0+cGFyZW50KCkpCisgICAgICAgIG91dGVy
bW9zdFZpZXcgPSBvdXRlcm1vc3RWaWV3LT5wYXJlbnQoKTsKKyAgICBpZiAoIW91dGVybW9zdFZp
ZXcpCisgICAgICAgIHJldHVybjsKKworICAgIEludFJlY3Qgd2luZG93UmVjdCA9IGNvbnZlcnRU
b0NvbnRhaW5pbmdXaW5kb3cocik7CisgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RL
X1dJREdFVChjb250YWluaW5nV2luZG93KCkpLCB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55
KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93UmVjdC53aWR0aCgpLCB3
aW5kb3dSZWN0LmhlaWdodCgpKTsKKyAgICBvdXRlcm1vc3RWaWV3LT5hZGRUb0RpcnR5UmVnaW9u
KHdpbmRvd1JlY3QpOworfQorCitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdX
aW5kb3coY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHdpbmRv
d1BvaW50ID0gcG9pbnQ7CisgICAgZm9yIChjb25zdCBXaWRnZXQgKnBhcmVudFdpZGdldCA9IHBh
cmVudCgpLCAqY2hpbGRXaWRnZXQgPSB0aGlzOworICAgICAgICAgcGFyZW50V2lkZ2V0OworICAg
ICAgICAgY2hpbGRXaWRnZXQgPSBwYXJlbnRXaWRnZXQsIHBhcmVudFdpZGdldCA9IHBhcmVudFdp
ZGdldC0+cGFyZW50KCkpCisgICAgICAgIHdpbmRvd1BvaW50ID0gcGFyZW50V2lkZ2V0LT5jb252
ZXJ0Q2hpbGRUb1NlbGYoY2hpbGRXaWRnZXQsIHdpbmRvd1BvaW50KTsKKyAgICByZXR1cm4gd2lu
ZG93UG9pbnQ7Cit9CisKK0ludFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2lu
ZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCB3aWRnZXRQ
b2ludCA9IHBvaW50OworICAgIGZvciAoY29uc3QgV2lkZ2V0ICpwYXJlbnRXaWRnZXQgPSBwYXJl
bnQoKSwgKmNoaWxkV2lkZ2V0ID0gdGhpczsKKyAgICAgICAgIHBhcmVudFdpZGdldDsKKyAgICAg
ICAgIGNoaWxkV2lkZ2V0ID0gcGFyZW50V2lkZ2V0LCBwYXJlbnRXaWRnZXQgPSBwYXJlbnRXaWRn
ZXQtPnBhcmVudCgpKQorICAgICAgICB3aWRnZXRQb2ludCA9IHBhcmVudFdpZGdldC0+Y29udmVy
dFNlbGZUb0NoaWxkKGNoaWxkV2lkZ2V0LCB3aWRnZXRQb2ludCk7CisgICAgcmV0dXJuIHdpZGdl
dFBvaW50OworfQorCitJbnRSZWN0IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhj
b25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIEludFJlY3QgY29udmVydGVkUmVjdCA9
IHJlY3Q7CisgICAgY29udmVydGVkUmVjdC5zZXRMb2NhdGlvbihjb252ZXJ0VG9Db250YWluaW5n
V2luZG93KGNvbnZlcnRlZFJlY3QubG9jYXRpb24oKSkpOworICAgIHJldHVybiBjb252ZXJ0ZWRS
ZWN0OwogfQogCi12b2lkIFdpZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVj
dCkKK0ludFBvaW50IFdpZGdldDo6Y29udmVydENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCogY2hp
bGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKLSAgICBpZiAoZGF0YS0+d2lkZ2V0
KQotICAgICAgICBndGtfd2lkZ2V0X3F1ZXVlX2RyYXdfYXJlYShkYXRhLT53aWRnZXQsIHJlY3Qu
eCgpLCByZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpICsg
Y2hpbGQtPngoKSwgcG9pbnQueSgpICsgY2hpbGQtPnkoKSk7CiB9CiAKK0ludFBvaW50IFdpZGdl
dDo6Y29udmVydFNlbGZUb0NoaWxkKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpIC0gY2hpbGQt
PngoKSwgcG9pbnQueSgpIC0gY2hpbGQtPnkoKSk7Cit9CisKK2Jvb2wgV2lkZ2V0OjpzdXBwcmVz
c0ludmFsaWRhdGlvbigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPnN1cHByZXNzSW52YWxp
ZGF0aW9uOworfQorCit2b2lkIFdpZGdldDo6c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vbCBz
dXBwcmVzcykKK3sKKyAgICBkYXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbiA9IHN1cHByZXNzOwor
fQorCit2b2lkIFdpZGdldDo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIWlu
dGVybmFsR3RrV2lkZ2V0KCkgfHwgIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBB
U1NFUlQocGFyZW50KCktPmlzRnJhbWVWaWV3KCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZp
ZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSk7CisgICAgSW50UmVjdCB3aW5k
b3dSZWN0ID0gZGF0YS0+aXNTY3JvbGxWaWV3Q29udHJvbCA/CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEludFJlY3QoZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93
KGZyYW1lR2VvbWV0cnkoKS5sb2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNpemUoKSkgOgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVu
dHNUb1dpbmRvdyhmcmFtZUdlb21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5z
aXplKCkpOworCisgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3aW5kb3dSZWN0Lngo
KSwgd2luZG93UmVjdC55KCksIHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93UmVjdC5oZWlnaHQo
KSB9OworICAgIGd0a193aWRnZXRfc2l6ZV9hbGxvY2F0ZShkYXRhLT53aWRnZXQsICZhbGxvY2F0
aW9uKTsKK30KKwordm9pZCBXaWRnZXQ6OnNldFNjcm9sbFZpZXdDb250cm9sKCkKK3sKKyAgICBk
YXRhLT5pc1Njcm9sbFZpZXdDb250cm9sID0gdHJ1ZTsKK30KIH0KSW5kZXg6IFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw2ICs0Niw3IEBAIHR5cGVkZWYgdm9pZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50RXhw
b3NlIEdka0V2ZW50RXhwb3NlOwogdHlwZWRlZiBzdHJ1Y3QgX0dka0RyYXdhYmxlIEdka0RyYXdh
YmxlOwogI2VuZGlmCiAKQEAgLTIwOCw4ICsyMDksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
I2VuZGlmCiAKICNpZiBQTEFURk9STShHREspCi0gICAgICAgIHZvaWQgc2V0R2RrRHJhd2FibGUo
R2RrRHJhd2FibGUqKTsKLSAgICAgICAgR2RrRHJhd2FibGUgKmdka0RyYXdhYmxlKCkgY29uc3Q7
CisgICAgICAgIHZvaWQgc2V0R2RrRXhwb3NlRXZlbnQoR2RrRXZlbnRFeHBvc2UqKTsKKyAgICAg
ICAgR2RrRHJhd2FibGUqIGdka0RyYXdhYmxlKCkgY29uc3Q7CisgICAgICAgIEdka0V2ZW50RXhw
b3NlKiBnZGtFeHBvc2VFdmVudCgpIGNvbnN0OworICAgICAgICBJbnRQb2ludCB0cmFuc2xhdGVQ
b2ludChjb25zdCBJbnRQb2ludCYpOwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHRDYWlyby5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcg
KzY1LDcgQEAgcHVibGljOgogICAgIFZlY3RvcjxmbG9hdD4gbGF5ZXJzOwogCiAjaWYgUExBVEZP
Uk0oR0RLKQotICAgIEdka0RyYXdhYmxlICpkcmF3YWJsZTsKKyAgICBHZGtFdmVudEV4cG9zZSAq
ZXhwb3NlOwogI2VuZGlmCiB9OwogCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBmaWxsUmVjdFNvdXJjZU92ZXIoY2EKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCkKICAgICA6ICBjcigwKQogI2lmIFBMQVRG
T1JNKEdESykKLSAgICAsIGRyYXdhYmxlKDApCisgICAgLCBleHBvc2UoMCkKICNlbmRpZgogewog
fQpAQCAtNzk4LDE0ICs3OTgsMzAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVk
UmVjdChjbwogfQogCiAjaWYgUExBVEZPUk0oR0RLKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dEdka0RyYXdhYmxlKEdka0RyYXdhYmxlKiBkcmF3YWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRHZGtFeHBvc2VFdmVudChHZGtFdmVudEV4cG9zZSogZXhwb3NlKQogewotICAgIG1fZGF0
YS0+ZHJhd2FibGUgPSBkcmF3YWJsZTsKKyAgICBtX2RhdGEtPmV4cG9zZSA9IGV4cG9zZTsKK30K
KworR2RrRXZlbnRFeHBvc2UqIEdyYXBoaWNzQ29udGV4dDo6Z2RrRXhwb3NlRXZlbnQoKSBjb25z
dAoreworICAgIHJldHVybiBtX2RhdGEtPmV4cG9zZTsKIH0KIAogR2RrRHJhd2FibGUqIEdyYXBo
aWNzQ29udGV4dDo6Z2RrRHJhd2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEtPmRy
YXdhYmxlOworICAgIHJldHVybiBHREtfRFJBV0FCTEUobV9kYXRhLT5leHBvc2UtPndpbmRvdyk7
Cit9CisKK0ludFBvaW50IEdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUG9pbnQoY29uc3QgSW50
UG9pbnQmIHBvaW50KQoreworICAgIGNhaXJvX21hdHJpeF90IHRtOworICAgIGNhaXJvX2dldF9t
YXRyaXgobV9kYXRhLT5jciwgJnRtKTsKKyAgICBkb3VibGUgeCA9IHBvaW50LngoKTsKKyAgICBk
b3VibGUgeSA9IHBvaW50LnkoKTsKKworICAgIGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnQo
JnRtLCAmeCwgJnkpOworICAgIHJldHVybiBJbnRQb2ludCh4LHkpOwogfQogI2VuZGlmCiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2RrL0ltYWdlR2RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dkay9JbWFnZUdkay5jcHAJKHJldmlzaW9u
IDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KICAKLS8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3Vy
Y2VzIGZyb20gV2ViS2l0Ci1WZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0
IGNoYXIqKTsKKy8qCisgKiBUT0RPOiBXZSBzaG91bGQgZm9sbG93IFF0IGFuZCBtb3ZlIHRoYXQg
dG8gd2Via2l0Z3Rrc2V0dGluZ3MuCisgKiBGb3Igbm93IGl0IGlzIGNvcGllZCB0byB0aGUgZmls
ZSBhY3R1YWxseSB1c2luZyB0aGlzIG1ldGhvZC4KKyAqLworc3RhdGljIFZlY3RvcjxjaGFyPiBs
b2FkUmVzb3VyY2VJbnRvQXJyYXkoY29uc3QgY2hhciogcmVzb3VyY2VOYW1lKQoreyAgIAorICAg
IFZlY3RvcjxjaGFyPiByZXNvdXJjZTsKKyAgICAvL2lmIChzdHJjbXAocmVzb3VyY2VOYW1lLCJt
aXNzaW5nSW1hZ2UiKSA9PSAwKSB7CisgICAgLy99CisgICAgcmV0dXJuIHJlc291cmNlOworfQog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKSW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L0NoYW5nZUxvZwkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJLaXQvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDctMDctMzAgIEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyICA8emVja2VAc2VsZmlzaC5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBXZWJLaXRHdGtQYWdlIGEgdHJ1
ZSBHdGtDb250YWluZXIgd2l0aG91dCBpbmhlcml0aW5nIEd0a0xheW91dC4gSXQgd2lsbAorICAg
ICAgICBoYW5kbGUgYW5kIGRpc3BhdGNoIHRoZSBldmVudHMgaW5jbHVkaW5nIGNvbnRhaW5lciBh
ZGQgYW5kIHJlbW92ZSwgZXhwb3NpbmcKKyAgICAgICAgYW5kIG1vdmluZyB0aGUgbW91c2UuCisK
KyAgICAgICAgSXQgaW1wbGVtZW50cyB0aGUgR3RrKyAncHJvdG9jb2wnIGZvciBzY3JvbGxhYmxl
IGNvbnRlbnQgYW5kIHRoZSBzZXQgR3RrQWRqdXN0bWVudAorICAgICAgICBnZXQgcGFzc2VkIHRv
IHRoZSBGcmFtZVZpZXcgb2YgdGhlIG1haW4gZnJhbWUuCisKKyAgICAgICAgKiBndGsvQXBpL3dl
YmtpdGd0ay1tYXJzaGFsLmxpc3Q6CisgICAgICAgICogZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5j
cHA6CisgICAgICAgICogZ3RrL0FwaS93ZWJraXRndGtwYWdlLmNwcDoKKyAgICAgICAgKiBndGsv
QXBpL3dlYmtpdGd0a3BhZ2UuaDoKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUu
Y3BwOgorICAgICAgICAoV2ViS2l0R3RrOjphcHBseUFkanVzdG1lbnRzKToKKyAgICAgICAgKiBn
dGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuaDoKKwogMjAwNy0wNy0zMCAgSnVzdGluIEdhcmNpYSAg
PGp1c3Rpbi5nYXJjaWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRyaXN0YW4u
CkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGstbWFyc2hhbC5saXN0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0ay1tYXJzaGFsLmxpc3QJKHJldmlzaW9uIDI0Nzgx
KQorKysgV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrLW1hcnNoYWwubGlzdAkod29ya2luZyBjb3B5
KQpAQCAtMSwyICsxLDMgQEAKIFZPSUQ6U1RSSU5HLFNUUklORwogVk9JRDpPQkpFQ1QsQk9PTEVB
TgorVk9JRDpPQkpFQ1QsT0JKRUNUCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtmcmFt
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZnJhbWUuY3BwCShy
ZXZpc2lvbiAyNDc4MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1lLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzEsMTEgKzMxLDEwIEBACiAjaW5jbHVkZSAid2Via2l0Z3RrcGFnZS5o
IgogI2luY2x1ZGUgIndlYmtpdGd0a3ByaXZhdGUuaCIKIAotI2luY2x1ZGUgIkZyYW1lR2RrLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViS2l0R3Rr
OwogCiBleHRlcm4gIkMiIHsKIApAQCAtMTIwLDIxICsxMTksMTYgQEAgc3RhdGljIHZvaWQgd2Vi
a2l0X2d0a19mcmFtZV9pbml0KFdlYktpdAogewogfQogCi1HT2JqZWN0KiB3ZWJraXRfZ3RrX2Zy
YW1lX25ldyhXZWJLaXRHdGtQYWdlKiBwYWdlKQorR09iamVjdCogd2Via2l0X2d0a19mcmFtZV9u
ZXcoV2ViS2l0R3RrUGFnZSogd2ViX3BhZ2UpCiB7CiAgICAgV2ViS2l0R3RrRnJhbWUqIGZyYW1l
ID0gV0VCS0lUX0dUS19GUkFNRShnX29iamVjdF9uZXcoV0VCS0lUX0dUS19UWVBFX0ZSQU1FLCBO
VUxMKSk7CiAgICAgV2ViS2l0R3RrRnJhbWVQcml2YXRlICpmcmFtZV9kYXRhID0gV0VCS0lUX0dU
S19GUkFNRV9HRVRfUFJJVkFURShmcmFtZSk7Ci0gICAgV2ViS2l0R3RrUGFnZVByaXZhdGUgICpw
YWdlX2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisgICAgV2ViQ29y
ZTo6UGFnZSogcGFnZSA9IGNvcmUod2ViX3BhZ2UpOwogCisgICAgZnJhbWVfZGF0YS0+cGFnZSA9
IHdlYl9wYWdlOwogICAgIGZyYW1lX2RhdGEtPmNsaWVudCA9IG5ldyBGcmFtZUxvYWRlckNsaWVu
dEdkayhmcmFtZSk7Ci0gICAgZnJhbWVfZGF0YS0+ZnJhbWUgPSBuZXcgRnJhbWVHZGsocGFnZV9k
YXRhLT5wYWdlLCAwLCBmcmFtZV9kYXRhLT5jbGllbnQpOwotCi0gICAgRnJhbWVWaWV3KiBmcmFt
ZV92aWV3ID0gbmV3IEZyYW1lVmlldyhmcmFtZV9kYXRhLT5mcmFtZSk7Ci0gICAgZnJhbWVfZGF0
YS0+ZnJhbWUtPnNldFZpZXcoZnJhbWVfdmlldyk7Ci0KLSAgICBmcmFtZV92aWV3LT5zZXRHdGtX
aWRnZXQoR1RLX0xBWU9VVChwYWdlKSk7CisgICAgZnJhbWVfZGF0YS0+ZnJhbWUgPSBuZXcgRnJh
bWUocGFnZSwgMCwgZnJhbWVfZGF0YS0+Y2xpZW50KTsKICAgICBmcmFtZV9kYXRhLT5mcmFtZS0+
aW5pdCgpOwotICAgIGZyYW1lX2RhdGEtPnBhZ2UgPSBwYWdlOwogCiAgICAgcmV0dXJuIEdfT0JK
RUNUKGZyYW1lKTsKIH0KSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuY3BwCShyZXZpc2lvbiAy
NDc4MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDQgKzEsNSBAQAogLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVs
IG1pa2UuZW1tZWxAZ21haWwuY29tCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIKICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTQwLDYgKzQxLDEzIEBACiAjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJT
dWJzdGl0dXRlRGF0YS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVu
dC5oIgorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxl
ci5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0LmgiCisjaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgogCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtNjIsMzEgKzcwLDEyMyBAQCBl
bnVtIHsKIAogc3RhdGljIGd1aW50IHdlYmtpdF9ndGtfcGFnZV9zaWduYWxzW0xBU1RfU0lHTkFM
XSA9IHsgMCwgfTsKIAotR19ERUZJTkVfVFlQRShXZWJLaXRHdGtQYWdlLCB3ZWJraXRfZ3RrX3Bh
Z2UsIEdUS19UWVBFX0xBWU9VVCkKK0dfREVGSU5FX1RZUEUoV2ViS2l0R3RrUGFnZSwgd2Via2l0
X2d0a19wYWdlLCBHVEtfVFlQRV9DT05UQUlORVIpCiAKLXN0YXRpYyB2b2lkIHdlYmtpdF9ndGtf
cGFnZV9yZW5kZXJpbmdfYXJlYV9oYW5kbGVfZ2RrX2V2ZW50KEd0a1dpZGdldCosIEdka0V2ZW50
KiBldmVudCwgV2ViS2l0R3RrUGFnZSogcGFnZSkKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZ3Rr
X3BhZ2VfZXhwb3NlX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEV4cG9zZSogZXZl
bnQpCiB7Ci0gICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VfZGF0YSA9IFdFQktJVF9HVEtf
UEFHRV9HRVRfUFJJVkFURShwYWdlKTsKLSAgICBXZWJLaXRHdGtGcmFtZVByaXZhdGUqIGZyYW1l
X2RhdGEgPSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKHBhZ2VfZGF0YS0+bWFpbl9mcmFt
ZSk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdF
QktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisKKyAgICBHZGtSZWN0YW5nbGUgY2xpcDsKKyAgICBn
ZGtfcmVnaW9uX2dldF9jbGlwYm94KGV2ZW50LT5yZWdpb24sICZjbGlwKTsKKyAgICBnZGtfd2lu
ZG93X2JlZ2luX3BhaW50X3JlZ2lvbihldmVudC0+d2luZG93LCBldmVudC0+cmVnaW9uKTsKKyAg
ICBjYWlyb190KiBjciA9IGdka19jYWlyb19jcmVhdGUoZXZlbnQtPndpbmRvdyk7CisgICAgR3Jh
cGhpY3NDb250ZXh0IGN0eChjcik7CisgICAgY3R4LnNldEdka0V4cG9zZUV2ZW50KGV2ZW50KTsK
KyAgICBpZiAoZnJhbWUtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKGZyYW1lLT52aWV3KCkt
Pm5lZWRzTGF5b3V0KCkpCisgICAgICAgICAgICBmcmFtZS0+dmlldygpLT5sYXlvdXQoKTsKKyAg
ICAgICAgSW50UmVjdCByZWN0KGNsaXAueCwgY2xpcC55LCBjbGlwLndpZHRoLCBjbGlwLmhlaWdo
dCk7CisgICAgICAgIGZyYW1lLT52aWV3KCktPnBhaW50KCZjdHgsIHJlY3QpOworICAgIH0KKyAg
ICBjYWlyb19kZXN0cm95KGNyKTsKIAotICAgIGZyYW1lX2RhdGEtPmZyYW1lLT5oYW5kbGVHZGtF
dmVudChldmVudCk7CisgICAgcmV0dXJuIFRSVUU7CiB9CiAKLXN0YXRpYyB2b2lkIHdlYmtpdF9n
dGtfcGFnZV9yZW5kZXJpbmdfYXJlYV9yZXNpemVfY2FsbGJhY2soR3RrV2lkZ2V0KiwgR3RrQWxs
b2NhdGlvbiogYWxsb2NhdGlvbiwgV2ViS2l0R3RrUGFnZSogcGFnZSkKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZ3RrX3BhZ2Vfa2V5X2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEtl
eSogZXZlbnQpCiB7Ci0gICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHBhZ2VfZGF0YSA9IFdFQktJ
VF9HVEtfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKLSAgICBXZWJLaXRHdGtGcmFtZVByaXZhdGUq
IGZyYW1lX2RhdGEgPSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKHBhZ2VfZGF0YS0+bWFp
bl9mcmFtZSk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21Q
YWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CiAKLSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+
dmlldygpLT51cGRhdGVHZW9tZXRyeShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+aGVp
Z2h0KTsKLSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+Zm9yY2VMYXlvdXQoKTsKLSAgICBmcmFtZV9k
YXRhLT5mcmFtZS0+dmlldygpLT5hZGp1c3RWaWV3U2l6ZSgpOwotICAgIGZyYW1lX2RhdGEtPmZy
YW1lLT5zZW5kUmVzaXplRXZlbnQoKTsKKyAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2
ZW50KFBsYXRmb3JtS2V5Ym9hcmRFdmVudChldmVudCkpOworICAgIHJldHVybiBUUlVFOwogfQog
Ci1zdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuZGVyaW5nX2FyZWFfZXZl
bnRzKEd0a1dpZGdldCogd2luLCBXZWJLaXRHdGtQYWdlKiBwYWdlKQorc3RhdGljIGdib29sZWFu
IHdlYmtpdF9ndGtfcGFnZV9idXR0b25fZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50
QnV0dG9uKiBldmVudCkKIHsKLSAgICBnZGtfd2luZG93X3NldF9ldmVudHMoR1RLX0lTX0xBWU9V
VCh3aW4pID8gR1RLX0xBWU9VVCh3aW4pLT5iaW5fd2luZG93IDogd2luLT53aW5kb3csCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgIChHZGtFdmVudE1hc2spKEdES19FWFBPU1VSRV9NQVNLCisg
ICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9H
VEtfUEFHRSh3aWRnZXQpKSk7CisgICAgCisgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRU
T05fUkVMRUFTRSkKKyAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJl
bGVhc2VFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKKyAgICBlbHNlCisgICAgICAg
IGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KFBsYXRmb3JtTW91
c2VFdmVudChldmVudCkpOworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0X2d0a19wYWdlX21vdGlvbl9ldmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRN
b3Rpb24qIGV2ZW50KQoreworICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJh
bWVGcm9tUGFnZShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSkpOworCisgICAgZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOworICAgIHJl
dHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0X2d0a19wYWdlX3Njcm9sbF9l
dmVudChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRXZlbnRTY3JvbGwqIGV2ZW50KQoreworICAgIFdl
YkNvcmU6OkZyYW1lKiBmcmFtZSA9IGNvcmUoZ2V0RnJhbWVGcm9tUGFnZShXRUJLSVRfR1RLX1BB
R0Uod2lkZ2V0KSkpOworCisgICAgUGxhdGZvcm1XaGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQp
OworICAgIGZyYW1lLT52aWV3KCktPndoZWVsRXZlbnQod2hlZWxFdmVudCk7CisgICAgaWYgKHdo
ZWVsRXZlbnQuaXNBY2NlcHRlZCgpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIEhpdFRl
c3RSZXF1ZXN0IGhpdFRlc3RSZXF1ZXN0KHRydWUsIHRydWUpOworICAgIEhpdFRlc3RSZXN1bHQg
aGl0VGVzdFJlc3VsdCh3aGVlbEV2ZW50LnBvcygpKTsKKyAgICBmcmFtZS0+cmVuZGVyZXIoKS0+
bGF5ZXIoKS0+aGl0VGVzdChoaXRUZXN0UmVxdWVzdCwgaGl0VGVzdFJlc3VsdCk7CisgICAgTm9k
ZSogbm9kZSA9IGhpdFRlc3RSZXN1bHQuaW5uZXJOb2RlKCk7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm4gRkFMU0U7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0X2d0a19wYWdlX3NpemVfYWxsb2NhdGUoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a0FsbG9j
YXRpb24qIGFsbG9jYXRpb24pCit7CisgICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRfZ3RrX3Bh
Z2VfcGFyZW50X2NsYXNzKS0+c2l6ZV9hbGxvY2F0ZSh3aWRnZXQsIGFsbG9jYXRpb24pOworCisg
ICAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQod2lkZ2V0KSkKKyAgICAgICAgZ2RrX3dpbmRvd19y
ZXNpemUoV0VCS0lUX0dUS19QQUdFKHdpZGdldCktPmJpbl93aW5kb3csIGFsbG9jYXRpb24tPndp
ZHRoLCBhbGxvY2F0aW9uLT5oZWlnaHQpOworCisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0g
Y29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisgICAgaWYg
KCFmcmFtZS0+dmlldygpKQorICAgICAgICByZXR1cm47CisKKyAgICBmcmFtZS0+dmlldygpLT5y
ZXNpemUoYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCk7CisgICAgZnJhbWUt
PmZvcmNlTGF5b3V0KCk7CisgICAgZnJhbWUtPnZpZXcoKS0+YWRqdXN0Vmlld1NpemUoKTsKKyAg
ICBmcmFtZS0+c2VuZFJlc2l6ZUV2ZW50KCk7Cit9CisKKy8qCisgKiBpdCBpcyBhIEd0a0NvbnRh
aW5lciB0byBpbXBsZW1lbnQgU2Nyb2xsVmlldy4gQW5kIHdlIG5lZWQgdG8gbWFrZSBpdCBzaW1p
bGlhcgorICogdG8gR3RrTGF5b3V0IHRvIGhhdmUgc2FuZSBwYWludGluZy4KKyAqLworc3RhdGlj
IHZvaWQgd2Via2l0X2d0a19wYWdlX3JlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAg
R1RLX1dJREdFVF9TRVRfRkxBR1Mod2lkZ2V0LCBHVEtfUkVBTElaRUQpOworCisgICAgR2RrV2lu
ZG93QXR0ciBhdHRyaWJ1dGVzOworCisgICAgYXR0cmlidXRlcy53aW5kb3dfdHlwZSA9IEdES19X
SU5ET1dfQ0hJTEQ7CisgICAgYXR0cmlidXRlcy54ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLng7Cisg
ICAgYXR0cmlidXRlcy55ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLnk7CisgICAgYXR0cmlidXRlcy53
aWR0aCA9IHdpZGdldC0+YWxsb2NhdGlvbi53aWR0aDsKKyAgICBhdHRyaWJ1dGVzLmhlaWdodCA9
IHdpZGdldC0+YWxsb2NhdGlvbi5oZWlnaHQ7CisgICAgYXR0cmlidXRlcy53Y2xhc3MgPSBHREtf
SU5QVVRfT1VUUFVUOworICAgIGF0dHJpYnV0ZXMudmlzdWFsID0gZ3RrX3dpZGdldF9nZXRfdmlz
dWFsICh3aWRnZXQpOworICAgIGF0dHJpYnV0ZXMuY29sb3JtYXAgPSBndGtfd2lkZ2V0X2dldF9j
b2xvcm1hcCAod2lkZ2V0KTsKKyAgICBhdHRyaWJ1dGVzLmV2ZW50X21hc2sgPSBHREtfVklTSUJJ
TElUWV9OT1RJRllfTUFTSzsKKworICAgIGdpbnQgYXR0cmlidXRlc19tYXNrID0gR0RLX1dBX1gg
fCBHREtfV0FfWSB8IEdES19XQV9WSVNVQUwgfCBHREtfV0FfQ09MT1JNQVA7CisgICAgd2lkZ2V0
LT53aW5kb3cgPSBnZGtfd2luZG93X25ldyhndGtfd2lkZ2V0X2dldF9wYXJlbnRfd2luZG93ICh3
aWRnZXQpLCAmYXR0cmlidXRlcywgYXR0cmlidXRlc19tYXNrKTsKKyAgICBnZGtfd2luZG93X3Nl
dF9iYWNrX3BpeG1hcCh3aWRnZXQtPndpbmRvdywgTlVMTCwgRkFMU0UpOworICAgIGdka193aW5k
b3dfc2V0X3VzZXJfZGF0YSh3aWRnZXQtPndpbmRvdywgd2lkZ2V0KTsKKworICAgIGF0dHJpYnV0
ZXMueCA9IDA7CisgICAgYXR0cmlidXRlcy55ID0gMDsKKyAgICBhdHRyaWJ1dGVzLndpZHRoID0g
d2lkZ2V0LT5hbGxvY2F0aW9uLndpZHRoOworICAgIGF0dHJpYnV0ZXMuaGVpZ2h0ID0gd2lkZ2V0
LT5hbGxvY2F0aW9uLmhlaWdodDsKKyAgICBhdHRyaWJ1dGVzLmV2ZW50X21hc2sgPSBHREtfRVhQ
T1NVUkVfTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX1NDUk9MTF9NQVNL
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OX1BSRVNTX01BU0sKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT05fUkVMRUFTRV9NQVNLCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfUE9JTlRFUl9NT1RJT05fTUFTSwpAQCAtOTUs
MTUgKzE5NSw5MCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OX01PVElPTl9NQVNLCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OMV9NT1RJT05fTUFTSwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JVVFRPTjJfTU9USU9OX01BU0sKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRUT04zX01PVElPTl9NQVNLKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVUVE9OM19NT1RJT05fTUFTSworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgZ3RrX3dpZGdldF9nZXRfZXZlbnRzKHdpZGdldCk7CisKKyAg
ICBXZWJLaXRHdGtQYWdlKiBwYWdlID0gV0VCS0lUX0dUS19QQUdFKHdpZGdldCk7CisgICAgcGFn
ZS0+YmluX3dpbmRvdyA9IGdka193aW5kb3dfbmV3KHdpZGdldC0+d2luZG93LCAmYXR0cmlidXRl
cywgYXR0cmlidXRlc19tYXNrKTsKKyAgICBnZGtfd2luZG93X3NldF91c2VyX2RhdGEocGFnZS0+
YmluX3dpbmRvdywgd2lkZ2V0KTsKKworICAgIHdpZGdldC0+c3R5bGUgPSBndGtfc3R5bGVfYXR0
YWNoICh3aWRnZXQtPnN0eWxlLCB3aWRnZXQtPndpbmRvdyk7CisgICAgZ3RrX3N0eWxlX3NldF9i
YWNrZ3JvdW5kKHdpZGdldC0+c3R5bGUsIHBhZ2UtPmJpbl93aW5kb3csIEdUS19TVEFURV9OT1JN
QUwpOworCisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHByaXZhdGVfZGF0YSA9IFdFQktJVF9H
VEtfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKKyAgICBIYXNoU2V0PEd0a1dpZGdldCo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBwcml2YXRlX2RhdGEtPmNoaWxkcmVuLmVuZCgpOworICAgIGZvciAo
SGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IHByaXZhdGVfZGF0
YS0+Y2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKKyAgICAgICAg
Z3RrX3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdygqY3VycmVudCwgcGFnZS0+YmluX3dpbmRvdyk7
Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9tYXAoR3RrV2lkZ2V0KiB3aWRnZXQp
Cit7CisgICAgR1RLX1dJREdFVF9TRVRfRkxBR1Mod2lkZ2V0LCBHVEtfTUFQUEVEKTsKKyAgICBX
ZWJLaXRHdGtQYWdlUHJpdmF0ZSogcHJpdmF0ZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9Q
UklWQVRFKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKTsKKworICAgIEhhc2hTZXQ8R3RrV2lkZ2V0
Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uZW5kKCk7Cisg
ICAgZm9yIChIYXNoU2V0PEd0a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBjdXJyZW50ID0gcHJp
dmF0ZV9kYXRhLT5jaGlsZHJlbi5iZWdpbigpOyBjdXJyZW50ICE9IGVuZDsgKytjdXJyZW50KQor
ICAgICAgICBpZiAoR1RLX1dJREdFVF9WSVNJQkxFKCpjdXJyZW50KSAmJiAhR1RLX1dJREdFVF9N
QVBQRUQoKmN1cnJlbnQpKQorICAgICAgICAgICAgZ3RrX3dpZGdldF9tYXAoKCpjdXJyZW50KSk7
CisKKyAgICBnZGtfd2luZG93X3Nob3coV0VCS0lUX0dUS19QQUdFKHdpZGdldCktPmJpbl93aW5k
b3cpOworICAgIGdka193aW5kb3dfc2hvdyh3aWRnZXQtPndpbmRvdyk7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9ndGtfcGFnZV9zdHlsZV9zZXQoR3RrV2lkZ2V0KiB3aWRnZXQsIEd0a1N0eWxl
KiBvbGRfc3R5bGUpCit7CisgICAgaWYgKEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X2d0a19wYWdl
X3BhcmVudF9jbGFzcyktPnN0eWxlX3NldCkKKyAgICAgICAgR1RLX1dJREdFVF9DTEFTUyh3ZWJr
aXRfZ3RrX3BhZ2VfcGFyZW50X2NsYXNzKS0+c3R5bGVfc2V0KHdpZGdldCwgb2xkX3N0eWxlKTsK
IAotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3aW4pLCAiZXhwb3NlLWV2ZW50Iiwg
R19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxlX2dka19ldmVu
dCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3aW4pLCAia2V5LXBy
ZXNzLWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFu
ZGxlX2dka19ldmVudCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3
aW4pLCAia2V5LXJlbGVhc2UtZXZlbnQiLCBHX0NBTExCQUNLKHdlYmtpdF9ndGtfcGFnZV9yZW5k
ZXJpbmdfYXJlYV9oYW5kbGVfZ2RrX2V2ZW50KSwgcGFnZSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dChHVEtfT0JKRUNUKHdpbiksICJidXR0b24tcHJlc3MtZXZlbnQiLCBHX0NBTExCQUNLKHdlYmtp
dF9ndGtfcGFnZV9yZW5kZXJpbmdfYXJlYV9oYW5kbGVfZ2RrX2V2ZW50KSwgcGFnZSk7Ci0gICAg
Z19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKHdpbiksICJidXR0b24tcmVsZWFzZS1ldmVudCIs
IEdfQ0FMTEJBQ0sod2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hhbmRsZV9nZGtfZXZl
bnQpLCBwYWdlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1Qod2luKSwgIm1vdGlv
bi1ub3RpZnktZXZlbnQiLCBHX0NBTExCQUNLKHdlYmtpdF9ndGtfcGFnZV9yZW5kZXJpbmdfYXJl
YV9oYW5kbGVfZ2RrX2V2ZW50KSwgcGFnZSk7Ci0gICAgZ19zaWduYWxfY29ubmVjdChHVEtfT0JK
RUNUKHdpbiksICJzY3JvbGwtZXZlbnQiLCBHX0NBTExCQUNLKHdlYmtpdF9ndGtfcGFnZV9yZW5k
ZXJpbmdfYXJlYV9oYW5kbGVfZ2RrX2V2ZW50KSwgcGFnZSk7CisgICAgaWYgKEdUS19XSURHRVRf
UkVBTElaRUQod2lkZ2V0KSkKKyAgICAgICAgZ3RrX3N0eWxlX3NldF9iYWNrZ3JvdW5kKHdpZGdl
dC0+c3R5bGUsIFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpLT5iaW5fd2luZG93LCBHVEtfU1RBVEVf
Tk9STUFMKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NvbnRhaW5lcl9hZGQo
R3RrQ29udGFpbmVyKiBjb250YWluZXIsIEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIFdlYktp
dEd0a1BhZ2UqIHBhZ2UgPSBXRUJLSVRfR1RLX1BBR0UoY29udGFpbmVyKTsKKyAgICBXZWJLaXRH
dGtQYWdlUHJpdmF0ZSogcHJpdmF0ZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRF
KHBhZ2UpOworCisgICAgcHJpdmF0ZV9kYXRhLT5jaGlsZHJlbi5hZGQod2lkZ2V0KTsKKyAgICBp
ZiAoR1RLX1dJREdFVF9SRUFMSVpFRChjb250YWluZXIpKQorICAgICAgICBndGtfd2lkZ2V0X3Nl
dF9wYXJlbnRfd2luZG93KHdpZGdldCwgcGFnZS0+YmluX3dpbmRvdyk7CisgICAgZ3RrX3dpZGdl
dF9zZXRfcGFyZW50KHdpZGdldCwgR1RLX1dJREdFVChjb250YWluZXIpKTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0X2d0a19wYWdlX2NvbnRhaW5lcl9yZW1vdmUoR3RrQ29udGFpbmVyKiBjb250
YWluZXIsIEd0a1dpZGdldCogd2lkZ2V0KQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBw
cml2YXRlX2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdF
KGNvbnRhaW5lcikpOworCisgICAgaWYgKHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uY29udGFpbnMo
d2lkZ2V0KSkgeworICAgICAgICBndGtfd2lkZ2V0X3VucGFyZW50KHdpZGdldCk7CisgICAgICAg
IHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4ucmVtb3ZlKHdpZGdldCk7CisgICAgfQorfQorCisvKgor
ICogdGFrZSBvd25lcnNoaXAgb2YgdGhlIGFkanVzdG1lbnRzIGFuZCBpZiB3ZSBoYXZlIGEgRnJh
bWVWaWV3IGFscmVhZHkgc2V0IHRoZQorICogYWRqdXN0bWVudHMgYXMgd2VsbC4KKyAqLworc3Rh
dGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3NldF9hZGp1c3RtZW50cyhXZWJLaXRHdGtQYWdlKiBw
YWdlLCBHdGtBZGp1c3RtZW50KiBob3Jpem9udGFsQWRqdXN0bWVudCwgR3RrQWRqdXN0bWVudCog
dmVydGljYWxBZGp1c3RtZW50KQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRl
X2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2Up
KTsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KQorICAgICAg
ICBnX29iamVjdF91bnJlZihwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsKKyAg
ICBpZiAocHJpdmF0ZV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIGdfb2JqZWN0
X3VucmVmKHByaXZhdGVfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKKworICAgIHByaXZhdGVf
ZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQgPSBob3Jpem9udGFsQWRqdXN0bWVudDsKKyAgICBw
cml2YXRlX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCA9IHZlcnRpY2FsQWRqdXN0bWVudDsKKwor
ICAgIGlmIChob3Jpem9udGFsQWRqdXN0bWVudCkKKyAgICAgICAgZ19vYmplY3RfcmVmX3Npbmso
aG9yaXpvbnRhbEFkanVzdG1lbnQpOworICAgIGlmICh2ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAg
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZlcnRpY2FsQWRqdXN0bWVudCk7CisKKyAgICBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UocGFnZSkpOworICAgIGlmIChm
cmFtZS0+dmlldygpKQorICAgICAgICBmcmFtZS0+dmlldygpLT5zZXRHdGtBZGp1c3RtZW50cyho
b3Jpem9udGFsQWRqdXN0bWVudCwgdmVydGljYWxBZGp1c3RtZW50KTsKIH0KIAogc3RhdGljIFdl
YktpdEd0a0ZyYW1lKiB3ZWJraXRfZ3RrX3BhZ2VfcmVhbF9jcmVhdGVfZnJhbWUoV2ViS2l0R3Rr
UGFnZSosIFdlYktpdEd0a0ZyYW1lKiBwYXJlbnQsIFdlYktpdEd0a0ZyYW1lRGF0YSopCkBAIC0x
NjMsOSArMzM4LDIxIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9maW5hbGl6ZShHT2IK
IAogICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RLX1BB
R0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKG9iamVjdCkpOwogICAgIC8vZGVsZXRlIHBy
aXZhdGVfZGF0YS0+cGFnZTsgLSB3ZSBkb24ndCBoYXZlIGEgRHJhZ0NsaWVudCB5ZXQsIHNvIGl0
IGlzIGNyYXNoaW5nIGhlcmUKKworICAgIC8qCisgICAgICogRm9yZ2V0IGFsbCBjaGlsZHJlbiBi
dXQgZG9uJ3QgdW5wYXJlbnQgdGhlbSBhcyB0aGUgU2Nyb2xsVmlldyB3aWxsIHN0aWwKKyAgICAg
KiB0cnkgdG8gcmVtb3ZlIHRoZW0gZHVlIHVzIGRlbGV0aW5nIHRoZSBtYWluX2ZyYW1lLgorICAg
ICAqLworICAgIHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uY2xlYXIoKTsKKwogICAgIGRlbGV0ZSBw
cml2YXRlX2RhdGEtPnNldHRpbmdzOwogICAgIGdfb2JqZWN0X3VucmVmKHByaXZhdGVfZGF0YS0+
bWFpbl9mcmFtZSk7CiAgICAgZGVsZXRlIHByaXZhdGVfZGF0YS0+dXNlcl9hZ2VudDsKKworICAg
IGlmIChwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KQorICAgICAgICBnX29iamVj
dF91bnJlZihwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsKKyAgICBpZiAocHJp
dmF0ZV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHBy
aXZhdGVfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKIH0KIAogc3RhdGljIHZvaWQgd2Via2l0
X2d0a19wYWdlX2NsYXNzX2luaXQoV2ViS2l0R3RrUGFnZUNsYXNzKiBwYWdlX2NsYXNzKQpAQCAt
MTc2LDYgKzM2MywyNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfY2xhc3NfaW5pdChX
CiAgICAgLyoKICAgICAgKiBzaWduYWxzCiAgICAgICovCisgICAgR09iamVjdENsYXNzKiBvYmpl
Y3RfY2xhc3MgPSBHX09CSkVDVF9DTEFTUyhwYWdlX2NsYXNzKTsKKyAgICBvYmplY3RfY2xhc3Mt
PmZpbmFsaXplID0gd2Via2l0X2d0a19wYWdlX2ZpbmFsaXplOworCisgICAgR3RrV2lkZ2V0Q2xh
c3MqIHdpZGdldF9jbGFzcyA9IEdUS19XSURHRVRfQ0xBU1MocGFnZV9jbGFzcyk7CisgICAgd2lk
Z2V0X2NsYXNzLT5leHBvc2VfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2VfZXhwb3NlX2V2ZW50Owor
ICAgIHdpZGdldF9jbGFzcy0+a2V5X3ByZXNzX2V2ZW50ID0gd2Via2l0X2d0a19wYWdlX2tleV9l
dmVudDsKKyAgICB3aWRnZXRfY2xhc3MtPmtleV9yZWxlYXNlX2V2ZW50ID0gd2Via2l0X2d0a19w
YWdlX2tleV9ldmVudDsKKyAgICB3aWRnZXRfY2xhc3MtPmJ1dHRvbl9wcmVzc19ldmVudCA9IHdl
YmtpdF9ndGtfcGFnZV9idXR0b25fZXZlbnQ7CisgICAgd2lkZ2V0X2NsYXNzLT5idXR0b25fcmVs
ZWFzZV9ldmVudCA9IHdlYmtpdF9ndGtfcGFnZV9idXR0b25fZXZlbnQ7CisgICAgd2lkZ2V0X2Ns
YXNzLT5tb3Rpb25fbm90aWZ5X2V2ZW50ID0gd2Via2l0X2d0a19wYWdlX21vdGlvbl9ldmVudDsK
KyAgICB3aWRnZXRfY2xhc3MtPnNjcm9sbF9ldmVudCA9IHdlYmtpdF9ndGtfcGFnZV9zY3JvbGxf
ZXZlbnQ7CisgICAgd2lkZ2V0X2NsYXNzLT5yZWFsaXplID0gd2Via2l0X2d0a19wYWdlX3JlYWxp
emU7CisgICAgd2lkZ2V0X2NsYXNzLT5zaXplX2FsbG9jYXRlID0gd2Via2l0X2d0a19wYWdlX3Np
emVfYWxsb2NhdGU7CisgICAgd2lkZ2V0X2NsYXNzLT5zdHlsZV9zZXQgPSB3ZWJraXRfZ3RrX3Bh
Z2Vfc3R5bGVfc2V0OworICAgIHdpZGdldF9jbGFzcy0+bWFwID0gd2Via2l0X2d0a19wYWdlX21h
cDsKKworICAgIEd0a0NvbnRhaW5lckNsYXNzKiBjb250YWluZXJfY2xhc3MgPSBHVEtfQ09OVEFJ
TkVSX0NMQVNTKHBhZ2VfY2xhc3MpOworICAgIGNvbnRhaW5lcl9jbGFzcy0+YWRkID0gd2Via2l0
X2d0a19wYWdlX2NvbnRhaW5lcl9hZGQ7CisgICAgY29udGFpbmVyX2NsYXNzLT5yZW1vdmUgPSB3
ZWJraXRfZ3RrX3BhZ2VfY29udGFpbmVyX3JlbW92ZTsKKwogICAgIC8qKgogICAgICAqIFdlYktp
dEd0a1BhZ2U6OmxvYWQtc3RhcnRlZAogICAgICAqIEBwYWdlOiB0aGUgb2JqZWN0IG9uIHdoaWNo
IHRoZSBzaWduYWwgaXMgZW1pdHRlZApAQCAtMjY3LDYgKzQ3NCwxOSBAQCBzdGF0aWMgdm9pZCB3
ZWJraXRfZ3RrX3BhZ2VfY2xhc3NfaW5pdChXCiAgICAgICAgICAgICBnX2NjbG9zdXJlX21hcnNo
YWxfVk9JRF9fVk9JRCwKICAgICAgICAgICAgIEdfVFlQRV9OT05FLCAwKTsKIAorICAgIC8qCisg
ICAgICogbWFrZSB1cyBzY3JvbGxhYmxlIChlLmcuIGFkZGFibGUgdG8gYSBHdGtTY3JvbGxlZFdp
bmRvdykKKyAgICAgKi8KKyAgICBwYWdlX2NsYXNzLT5zZXRfc2Nyb2xsX2FkanVzdG1lbnRzID0g
d2Via2l0X2d0a19wYWdlX3NldF9hZGp1c3RtZW50czsKKyAgICBHVEtfV0lER0VUX0NMQVNTKHBh
Z2VfY2xhc3MpLT5zZXRfc2Nyb2xsX2FkanVzdG1lbnRzX3NpZ25hbCA9IGdfc2lnbmFsX25ldygi
c2V0X3Njcm9sbF9hZGp1c3RtZW50cyIsCisgICAgICAgICAgICBHX1RZUEVfRlJPTV9DTEFTUyhw
YWdlX2NsYXNzKSwKKyAgICAgICAgICAgIChHU2lnbmFsRmxhZ3MpKEdfU0lHTkFMX1JVTl9MQVNU
IHwgR19TSUdOQUxfQUNUSU9OKSwKKyAgICAgICAgICAgIEdfU1RSVUNUX09GRlNFVChXZWJLaXRH
dGtQYWdlQ2xhc3MsIHNldF9zY3JvbGxfYWRqdXN0bWVudHMpLAorICAgICAgICAgICAgTlVMTCwg
TlVMTCwKKyAgICAgICAgICAgIHdlYmtpdF9ndGtfbWFyc2hhbF9WT0lEX19PQkpFQ1RfT0JKRUNU
LAorICAgICAgICAgICAgR19UWVBFX05PTkUsIDIsCisgICAgICAgICAgICBHVEtfVFlQRV9BREpV
U1RNRU5ULCBHVEtfVFlQRV9BREpVU1RNRU5UKTsKKwogCiAgICAgLyoKICAgICAgKiBpbXBsZW1l
bnRhdGlvbnMgb2YgdmlydHVhbCBtZXRob2RzCkBAIC0yNzksMjEgKzQ5OSwzMyBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfZ3RrX3BhZ2VfY2xhc3NfaW5pdChXCiAgICAgcGFnZV9jbGFzcy0+amF2YV9z
Y3JpcHRfY29uZmlybSA9IHdlYmtpdF9ndGtfcGFnZV9yZWFsX2phdmFfc2NyaXB0X2NvbmZpcm07
CiAgICAgcGFnZV9jbGFzcy0+amF2YV9zY3JpcHRfcHJvbXB0ID0gd2Via2l0X2d0a19wYWdlX3Jl
YWxfamF2YV9zY3JpcHRfcHJvbXB0OwogICAgIHBhZ2VfY2xhc3MtPmphdmFfc2NyaXB0X2NvbnNv
bGVfbWVzc2FnZSA9IHdlYmtpdF9ndGtfcGFnZV9yZWFsX2phdmFfc2NyaXB0X2NvbnNvbGVfbWVz
c2FnZTsKLSAgICBHX09CSkVDVF9DTEFTUyhwYWdlX2NsYXNzKS0+ZmluYWxpemUgPSB3ZWJraXRf
Z3RrX3BhZ2VfZmluYWxpemU7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9pbml0
KFdlYktpdEd0a1BhZ2UqIHBhZ2UpCiB7Ci0gICAgV2ViS2l0R3RrUGFnZVByaXZhdGUgKnByaXZh
dGVfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0UocGFn
ZSkpOwotICAgIHByaXZhdGVfZGF0YS0+cGFnZSA9IG5ldyBQYWdlKG5ldyBDaHJvbWVDbGllbnRH
ZGsocGFnZSksIG5ldyBDb250ZXh0TWVudUNsaWVudEdkaywgbmV3IEVkaXRvckNsaWVudEdkayhw
YWdlKSwgMCwgbmV3IEluc3BlY3RvckNsaWVudEdkayk7Ci0KLQogICAgIEdUS19XSURHRVRfU0VU
X0ZMQUdTKHBhZ2UsIEdUS19DQU5fRk9DVVMpOworICAgIHBhZ2UtPmJpbl93aW5kb3cgPSAwOwog
Ci0gICAgZ19zaWduYWxfY29ubmVjdF9hZnRlcihHX09CSkVDVChwYWdlKSwgInJlYWxpemUiLCBH
X0NBTExCQUNLKHdlYmtpdF9ndGtfcGFnZV9yZWdpc3Rlcl9yZW5kZXJpbmdfYXJlYV9ldmVudHMp
LCBwYWdlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0X2FmdGVyKEdfT0JKRUNUKHBhZ2UpLCAic2l6
ZS1hbGxvY2F0ZSIsIEdfQ0FMTEJBQ0sod2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX3Jl
c2l6ZV9jYWxsYmFjayksIHBhZ2UpOwotCisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUgKnByaXZh
dGVfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0UocGFn
ZSkpOworICAgIHByaXZhdGVfZGF0YS0+cGFnZSA9IG5ldyBQYWdlKG5ldyBDaHJvbWVDbGllbnRH
ZGsocGFnZSksIG5ldyBDb250ZXh0TWVudUNsaWVudEdkaywgbmV3IEVkaXRvckNsaWVudEdkayhw
YWdlKSwgMCwgbmV3IEluc3BlY3RvckNsaWVudEdkayk7CiAgICAgcHJpdmF0ZV9kYXRhLT5tYWlu
X2ZyYW1lID0gV0VCS0lUX0dUS19GUkFNRSh3ZWJraXRfZ3RrX2ZyYW1lX25ldyhwYWdlKSk7CisK
KyAgICAvKgorICAgICAqIFRPRE86IG1vdmUgdGhhdCBvdmVyIHRvIHVzZSB3ZWJraXRndGtzZXR0
aW5ncyAKKyAgICAgKi8KKyAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBwcml2YXRlX2RhdGEtPnBh
Z2UtPnNldHRpbmdzKCk7CisgICAgc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxs
eSh0cnVlKTsKKyAgICBzZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKDUpOworICAgIHNldHRp
bmdzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKDUpOworICAgIHNldHRpbmdzLT5zZXRTaG91
bGRQcmludEJhY2tncm91bmRzKHRydWUpOworICAgIHNldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5h
YmxlZCh0cnVlKTsKKyAgICAKKyAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUo
MTQpOworICAgIHNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUoMTQpOworICAgIHNldHRpbmdz
LT5zZXRTZXJpZkZvbnRGYW1pbHkoIlRpbWVzIE5ldyBSb21hbiIpOworICAgIHNldHRpbmdzLT5z
ZXRTYW5zU2VyaWZGb250RmFtaWx5KCJBcmlhbCIpOworICAgIHNldHRpbmdzLT5zZXRGaXhlZEZv
bnRGYW1pbHkoIkNvdXJpZXIiKTsKKyAgICBzZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5
KCJBcmlhbCIpOwogfQogCiBHdGtXaWRnZXQqIHdlYmtpdF9ndGtfcGFnZV9uZXcodm9pZCkKSW5k
ZXg6IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Z3RrL0FwaS93ZWJraXRndGtwYWdlLmgJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViS2l0L2d0ay9B
cGkvd2Via2l0Z3RrcGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSwxMSArNjEsMTMgQEAgdHlw
ZWRlZiBzdHJ1Y3QgX1dlYktpdEd0a1BhZ2VDbGFzcyBXZWJLaQogICogdGhlICBzaXplIG9mIHRo
ZSB2aWV3cG9ydCBhbmQgd2Ugd29uJ3QgYmUgYWJsZSB0byB1c2UgZ2RrX3dpbmRvd19tb3ZlLgog
ICovCiBzdHJ1Y3QgX1dlYktpdEd0a1BhZ2UgewotICAgIEd0a0xheW91dCBwYXJlbnQ7CisgICAg
R3RrQ29udGFpbmVyIHBhcmVudDsKKworICAgIEdka1dpbmRvdyAqYmluX3dpbmRvdzsKIH07CiAK
IHN0cnVjdCBfV2ViS2l0R3RrUGFnZUNsYXNzIHsKLSAgICBHdGtMYXlvdXRDbGFzcyBwYXJlbnQ7
CisgICAgR3RrQ29udGFpbmVyQ2xhc3MgcGFyZW50OwogCiAgICAgLyoKICAgICAgKiBkZWZhdWx0
IGhhbmRsZXIvdmlydHVhbCBtZXRob2RzCkBAIC04OSw2ICs5MSwxMSBAQCBzdHJ1Y3QgX1dlYktp
dEd0a1BhZ2VDbGFzcyB7CiAgICAgZ2Jvb2xlYW4gICAoKmphdmFfc2NyaXB0X2NvbmZpcm0pIChX
ZWJLaXRHdGtQYWdlKiBwYWdlLCBXZWJLaXRHdGtGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBj
b25maXJtX21lc3NhZ2UpOwogICAgIGdjaGFyKiAoKmphdmFfc2NyaXB0X3Byb21wdCkgKFdlYktp
dEd0a1BhZ2UqIHBhZ2UsIFdlYktpdEd0a0ZyYW1lKiBmcmFtZSwgY29uc3QgZ2NoYXIqIG1lc3Nh
Z2UsIGNvbnN0IGdjaGFyKiBkZWZhdWx0X3ZhbHVlKTsKICAgICB2b2lkICAgKCpqYXZhX3Njcmlw
dF9jb25zb2xlX21lc3NhZ2UpIChXZWJLaXRHdGtQYWdlKiwgY29uc3QgZ2NoYXIqIG1lc3NhZ2Us
IHVuc2lnbmVkIGludCBsaW5lX251bWJlciwgY29uc3QgZ2NoYXIqIHNvdXJjZV9pZCk7CisKKyAg
ICAvKgorICAgICAqIGludGVybmFsCisgICAgICovCisgICAgdm9pZCAgICgqc2V0X3Njcm9sbF9h
ZGp1c3RtZW50cykgKFdlYktpdEd0a1BhZ2UqLCBHdGtBZGp1c3RtZW50KiwgR3RrQWRqdXN0bWVu
dCopOwogfTsKIAogV0VCS0lUX0dUS19BUEkgR1R5cGUKSW5kZXg6IFdlYktpdC9ndGsvQXBpL3dl
YmtpdGd0a3ByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0
a3ByaXZhdGUuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0
a3ByaXZhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw0ICs4MCwxNiBAQCBXZWJLaXRHdGtQ
YWdlKiBraXQoV2ViQ29yZTo6UGFnZSogcGFnZSkKICAgICBDaHJvbWVDbGllbnRHZGsqIGNsaWVu
dCA9IHN0YXRpY19jYXN0PENocm9tZUNsaWVudEdkayo+KHBhZ2UtPmNocm9tZSgpLT5jbGllbnQo
KSk7CiAgICAgcmV0dXJuIGNsaWVudC0+d2ViUGFnZSgpOwogfQorCisvKgorICogSWYgd2UgY2Fu
LCBhcHBseSB0aGUgZXh0ZXJuYWwgR3RrQWRqdXN0bWVudHMgdG8gdGhlIEZyYW1lVmlldworICov
Cit2b2lkIGFwcGx5QWRqdXN0bWVudHMoV2ViS2l0R3RrUGFnZSogcGFnZSwgV2ViQ29yZTo6RnJh
bWVWaWV3KiB2aWV3KQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwYWdlX2RhdGEgPSBX
RUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CisKKyAgICBpZiAocGFnZV9kYXRhLT5o
b3Jpem9udGFsQWRqdXN0bWVudCAmJiBwYWdlX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCkKKyAg
ICAgICAgdmlldy0+c2V0R3RrQWRqdXN0bWVudHMocGFnZV9kYXRhLT5ob3Jpem9udGFsQWRqdXN0
bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZV9kYXRhLT52ZXJ0aWNh
bEFkanVzdG1lbnQpOworfQogfQpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcHJpdmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuaAkocmV2
aXNpb24gMjQ3ODEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ0LDcgKzQ0LDggQEAKIAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEdkay5o
IgogCiBuYW1lc3BhY2UgV2ViS2l0R3RrIHsKQEAgLTU3LDYgKzU4LDggQEAgbmFtZXNwYWNlIFdl
YktpdEd0ayB7CiAgICAgV2ViS2l0R3RrRnJhbWUqIGtpdChXZWJDb3JlOjpGcmFtZSopOwogICAg
IFdlYkNvcmU6OlBhZ2UqIGNvcmUoV2ViS2l0R3RrUGFnZSopOwogICAgIFdlYktpdEd0a1BhZ2Uq
IGtpdChXZWJDb3JlOjpQYWdlKik7CisKKyAgICB2b2lkIGFwcGx5QWRqdXN0bWVudHMoV2ViS2l0
R3RrUGFnZSosIFdlYkNvcmU6OkZyYW1lVmlldyopOwogfQogCiBleHRlcm4gIkMiIHsKQEAgLTY5
LDEyICs3MiwyMCBAQCBleHRlcm4gIkMiIHsKICAgICAgICAgV2ViS2l0R3RrRnJhbWUqIG1haW5f
ZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OlN0cmluZyBhcHBsaWNhdGlvbl9uYW1lX2Zvcl91c2Vy
X2FnZW50OwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcqIHVzZXJfYWdlbnQ7CisKKyAgICAgICAg
LyoKKyAgICAgICAgICogZS5nLiBzZXQgYnkgYSBHdGtTY3JvbGxlZFdpbmRvdyBhbmQgdXNlZCBi
eSB0aGUgRnJhbWVWaWV3IG9mIG91ciBtYWluX2ZyYW1lCisgICAgICAgICAqLworICAgICAgICBH
dGtBZGp1c3RtZW50KiBob3Jpem9udGFsQWRqdXN0bWVudDsKKyAgICAgICAgR3RrQWRqdXN0bWVu
dCogdmVydGljYWxBZGp1c3RtZW50OworCisgICAgICAgIEhhc2hTZXQ8R3RrV2lkZ2V0Kj4gY2hp
bGRyZW47CiAgICAgfTsKICAgICAKICAgICAjZGVmaW5lIFdFQktJVF9HVEtfRlJBTUVfR0VUX1BS
SVZBVEUob2JqKSAgICAoR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKChvYmopLCBXRUJLSVRf
R1RLX1RZUEVfRlJBTUUsIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSkpCiAgICAgdHlwZWRlZiBzdHJ1
Y3QgX1dlYktpdEd0a0ZyYW1lUHJpdmF0ZSBXZWJLaXRHdGtGcmFtZVByaXZhdGU7CiAgICAgc3Ry
dWN0IF9XZWJLaXRHdGtGcmFtZVByaXZhdGUgewotICAgICAgICBXZWJDb3JlOjpGcmFtZUdkayog
ZnJhbWU7CisgICAgICAgIFdlYkNvcmU6OkZyYW1lKiBmcmFtZTsKICAgICAgICAgV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRHZGsqIGNsaWVudDsKICAgICAgICAgV2ViS2l0R3RrUGFnZSogcGFn
ZTsKICAgICB9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15754</attachid>
            <date>2007-07-31 07:19:21 -0700</date>
            <delta_ts>2007-07-31 07:20:32 -0700</delta_ts>
            <desc>Implement ScrollView similiar to win/qt</desc>
            <filename>gtk-scrollview-r1.patch</filename>
            <type>text/plain</type>
            <size>112275</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDc5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQ5IEBACisyMDA3LTA3LTMxICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAg
PHplY2tlQHNlbGZpc2gub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisg
ICAgICAgIEtpbGwgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSB3
YXMgbW92ZWQgdG8KKyAgICAgICAgV2ViS2l0R3RrUGFnZSwgSW1hZ2VHZGsgYW5kIHRoZSBuZWVk
ZWQgc3R1YnMgZm9yIEZyYW1lIHdoZXJlIGludHJvZHVjZWQKKyAgICAgICAgaW4gcGFnZS9nZGsv
RnJhbWVHZGsuIE9uIHRoaXMgd2F5IGNoYW5nZWQgdGhlIGNvbnN0cnVjdG9ycyBvZiB0aGUgdmFy
aW91cworICAgICAgICBQbGF0Zm9ybSpFdmVudCBtZXRob2RzIHRvIHVzZSB0aGUgc3BlY2lhbGlz
ZWQgdHlwZSBpbnN0ZWFkIG9mIHRoZSBHZGtFdmVudCB1bmlvbi4KKyAgICAgICAgVGhpcyBpcyBu
ZWVkZWQgZHVlIHRoZSBjaGFuZ2VzIGluIFdlYktpdEd0a1BhZ2UgYW5kIHRoZSByZWltcGxlbWVu
dGF0aW9uIG9mIHRoZQorICAgICAgICB2YXJpb3VzIGV2ZW50IGhvb2tzLgorCisgICAgICAgIENy
ZWF0ZSB0aGUgRnJhbWVWaWV3IGZyb20gd2l0aGluIG1ha2VEb2N1bWVudFZpZXcgYW5kIGFzIGRv
Y3VtZW50ZWQgaXQgZG9lc24ndAorICAgICAgICBob25vciB0aGUgbWFyZ2lucyBhcyBXZWJWaWV3
IGlzIGRvaW5nLiBUaGlzIHJlbWFpbnMgdG8gYmUgZG9uZS4KKworICAgICAgICBVc2UgdGhlIFNj
cm9sbFZpZXcvV2lkZ2V0IGRlc2lnbiBvZiB0aGUgV2luZG93cyBwb3J0IGFuZCBhZG9wdCBpdCB0
byBHdGsrLiBPbiB0aGUKKyAgICAgICAgd2F5IHRvIHRoaXMgaW1wbGVtZW50IFBsYXRmb3JtU2Ny
b2xsYmFyIHByb3Blcmx5LgorICAgICAgICBUaGUgb25seSB0d28gZGlmZmVyZW5jZXMgdG8gdGhl
IFdpbmRvd3MgcG9ydCBpcyB0aGF0IFBsYXRmb3JtU2Nyb2xsYmFyIGlzCisgICAgICAgIGEgR3Rr
V2lkZ2V0IChzdGlsbCBzaGFyaW5nIHRoZSBzYW1lIGdsb2JhbCB3aW5kb3cpIHdoaWNoIG5lZWRz
IHNwZWNpYWwgdHJlYXRtZW50IHdoZW4KKyAgICAgICAgcGxhY2luZyB0aGUgc2Nyb2xsYmFyIChl
LmcuIGRvbid0IG1vdmUgdGhlIHNjcm9sbGJhciBvZiBhIEZyYW1lVmlldyB3aGVuIHRoZSBGcmFt
ZVZpZXcKKyAgICAgICAgc2Nyb2xscykuIFRoZSBvdGhlciBkaWZmZXJlbmNlIGlzIGR1ZSB0aGUg
J3Njcm9sbGFibGUgcHJvdG9jb2wnIG9mIEd0aysgd2hlcmUgd2Ugd2lsbAorICAgICAgICBnZXQg
dHdvIEd0a0FkanVzdG1lbnQgc2V0LiBJZiB3ZSBoYXZlIHRoZW0gc2V0IGluIFNjcm9sbFZpZXcg
ZG9uJ3QgY3JlYXRlIGEgUGxhdGZvcm1TY3JvbGxiYXIKKyAgICAgICAgYnV0IHVwZGF0ZSB0aGUg
R3RrQWp1c3RtZW50LgorCisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogbG9hZGVy
L2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEdkazo6bWFrZURvY3VtZW50Vmlldyk6CisgICAgICAgICogbG9hZGVyL2dkay9G
cmFtZUxvYWRlckNsaWVudEdkay5oOgorICAgICAgICAqIHBhZ2UvZ2RrL0ZyYW1lR2RrLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aXNzdWVUcmFuc3Bvc2VDb21tYW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjbGVhbnVwUGxhdGZvcm1TY3JpcHRPYmplY3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpzZXROZWVkc1JlYXBwbHlTdHlsZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtTW91
c2VFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dkay9GcmFtZUdkay5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dkay9LZXlFdmVudEdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL01v
dXNlRXZlbnRHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50OjpQ
bGF0Zm9ybU1vdXNlRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcmVl
bkdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aCk6CisgICAgICAgICogcGxh
dGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1Bs
YXRmb3JtU2Nyb2xsQmFyR2RrLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0
Zm9ybVNjcm9sbGJhcik6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Ny
b2xsYmFyKToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBvc2l0aW9u
KToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlByb3BvcnRpb24pOgor
ICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OnNldFJlY3QpOgorICAgICAgICAoUGxhdGZvcm1T
Y3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1JlbmRl
clRoZW1lR2RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludENo
ZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludFJhZGlvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludEJ1dHRvbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OlNjcm9sbFZpZXdQcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjp+U2Nyb2xsVmlld1ByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNl
dEhhc0hvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OmFkanVz
dG1lbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQ
cml2YXRlOjp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Ny
b2xsVmlld1ByaXZhdGU6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OlNjcm9sbFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0R3Rr
QWRqdXN0bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnJl
c2l6ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNvbnRlbnRzWCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpjb250ZW50c1kpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6Om1heGltdW1TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Ny
b2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c3VwcHJlc3NTY3JvbGxiYXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldEhTY3JvbGxiYXJNb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFZTY3JvbGxiYXJNb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbGJhcnNNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OnNldEZyYW1lR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cmVtb3Zl
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3
UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndpbmRvd1RvQ29udGVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OmNvbnZlcnRDaGlsZFRvU2VsZik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
Ojpjb252ZXJ0U2VsZlRvQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3Ojp3aW5kb3dSZXNpemVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3OjpyZXNpemVyT3ZlcmxhcHNDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OmFkanVzdE92ZXJsYXBwaW5nU2Nyb2xsYmFyQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmFk
ZFRvRGlydHlSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVwZGF0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0UHJpdmF0
ZTo6Z2RrRHJhd2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpXaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2lkZ2V0OjppbnRlcm5hbEd0a1dpZGdldCk6CisgICAgICAgIChXZWJD
b3JlOjpXaWRnZXQ6OnNldEludGVybmFsR3RrV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZGdldDo6c2V0Q29udGFpbmluZ1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmNv
bnRhaW5pbmdXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpmcmFtZUdlb21ldHJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0RnJhbWVHZW9tZXRyeSk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6
OnBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEZvY3VzKToKKyAgICAgICAg
KFdlYkNvcmU6OldpZGdldDo6c2V0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmhpZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjppbnZhbGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldpZGdldDo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0Ojpjb252ZXJ0VG9Db250YWluaW5nV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dDo6Y29udmVydENoaWxkVG9TZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6Y29udmVy
dFNlbGZUb0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c3VwcHJlc3NJbnZhbGlk
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRTdXBwcmVzc0ludmFsaWRhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNldFNjcm9sbFZpZXdDb250cm9sKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEdka0V4cG9zZUV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2RrRXhwb3NlRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZGtEcmF3YWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZVBvaW50KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwOgorICAgICAgICAobG9hZFJlc291
cmNlSW50b0FycmF5KToKKwogMjAwNy0wNy0zMCAgSnVzdGluIEdhcmNpYSAgPGp1c3Rpbi5nYXJj
aWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lv
biAyNDc4MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTg0Niw2
ICs4NDYsNyBAQCBnZGstcG9ydCB7CiAgICAgICAgIHBsYXRmb3JtL1RleHRDb2RlY0lDVS5jcHAg
XAogICAgICAgICBwbGF0Zm9ybS9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgXAogICAgICAgICBw
YWdlL2dkay9FdmVudEhhbmRsZXJHZGsuY3BwIFwKKyAgICAgICAgcGFnZS9nZGsvRnJhbWVHZGsu
Y3BwIFwKICAgICAgICAgcGFnZS9nZGsvQ29udGV4dE1lbnVDbGllbnRHZGsuY3BwIFwKICAgICAg
ICAgcGFnZS9nZGsvRHJhZ0NvbnRyb2xsZXJHZGsuY3BwIFwKICAgICAgICAgcGFnZS9nZGsvSW5z
cGVjdG9yQ2xpZW50R2RrLmNwcCBcCkBAIC04NjAsNyArODYxLDYgQEAgZ2RrLXBvcnQgewogICAg
ICAgICBwbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2Rr
L0ZvbnRHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsu
Y3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcCBcCiAgICAgICAgIHBsYXRm
b3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9nZGsv
S2V5RXZlbnRHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2RrL0xvZ2dpbmdHZGsuY3BwIFwK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmNwcAkocmV2
aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVMb2FkZXJDbGllbnRHZGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpA
QCAtMjYwLDcgKzI2MCwyOSBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpzaG91bGRHb1Rv
SGlzCiB9CiAKIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEdkazo6bWFrZURvY3VtZW50VmlldygpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjptYWtlRG9jdW1lbnRWaWV3KCkgeworICAg
IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IGNvcmUobV9mcmFtZSk7CisgICAgaWYgKGZyYW1lKQor
ICAgICAgICBmcmFtZS0+c2V0VmlldygwKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
bmV3IEZyYW1lVmlldyhmcmFtZSk7CisgICAgZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsKKyAg
ICBmcmFtZVZpZXctPmRlcmVmKCk7CisgICAgCisgICAgLyoKKyAgICAgKiBzZXQgdGhlIFdlYktp
dEd0a1BhZ2UgKENvbnRhaW5pbmcgV2luZG93KSBhbmQgbWFrZSBzdXJlIHRvIGdpdmUgaXQgYSBz
YW5lIGRlZmF1bHQgZnJhbWUgZ2VvbWV0cnkuCisgICAgICovCisgICAgV2ViS2l0R3RrUGFnZSog
cGFnZSA9IGdldFBhZ2VGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgZnJhbWVWaWV3LT5zZXRDb250
YWluaW5nV2luZG93KHBhZ2UpOworICAgIGZyYW1lVmlldy0+c2V0RnJhbWVHZW9tZXRyeShJbnRS
ZWN0KDAsIDAsIEdUS19XSURHRVQocGFnZSktPmFsbG9jYXRpb24ud2lkdGgsIEdUS19XSURHRVQo
cGFnZSktPmFsbG9jYXRpb24uaGVpZ2h0KSk7CisgICAgV2ViS2l0R3RrOjphcHBseUFkanVzdG1l
bnRzKHBhZ2UsIGZyYW1lVmlldyk7CisKKyAgICAvKgorICAgICAqIFRPRE86IFVzZSBtYXJnaW5z
IGxpa2UgV2ViVmlldz8KKyAgICAgKi8KK30KKwogdm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6
bWFrZVJlcHJlc2VudGF0aW9uKERvY3VtZW50TG9hZGVyKikgeyBub3RJbXBsZW1lbnRlZCgpOyB9
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpmb3JjZUxheW91dCgpIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQogdm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6Zm9yY2VMYXlvdXRGb3JOb25IVE1M
KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVM
b2FkZXJDbGllbnRHZGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVM
b2FkZXJDbGllbnRHZGsuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL2xvYWRlci9nZGsv
RnJhbWVMb2FkZXJDbGllbnRHZGsuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsNiBAQAog
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEd0a0ZyYW1lIFdlYktpdEd0a0ZyYW1lOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBGcmFtZUdkazsKLQogICAgIGNsYXNzIEZyYW1lTG9h
ZGVyQ2xpZW50R2RrIDogcHVibGljIEZyYW1lTG9hZGVyQ2xpZW50IHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50R2RrKFdlYktpdEd0a0ZyYW1lKik7CkluZGV4OiBXZWJD
b3JlL3BhZ2UvZ2RrL0ZyYW1lR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvZ2Rr
L0ZyYW1lR2RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9nZGsvRnJhbWVHZGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIEZyYW1lOjppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisgICAgCit2b2lkIEZyYW1lOjpjbGVhbnVwUGxhdGZv
cm1TY3JpcHRPYmplY3RzKCkKK3sgICAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfSAgIAorICAg
IAorRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24oKQoreyAgICAgICAK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEZyYW1lOjpk
YXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBGcmFtZTo6c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BhZ2UvZ2RrL0ZyYW1l
R2RrLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgJKHJldmlzaW9uIDI0Nzgx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCB0eXBlZGVmIGxvbmcgTFBBUkFNOwogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShHREspCi10eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKK3R5cGVk
ZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oUVQpCkBAIC04MCw3ICs4MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oR0RLKQotICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnQq
KTsKKyAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5Kik7CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFFUKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNl
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVu
dC5oCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgdHlwZWRlZiBsb25nIExQQVJB
TTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQg
R2RrRXZlbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRCdXR0b24gR2RrRXZlbnRCdXR0b247
Cit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRNb3Rpb24gR2RrRXZlbnRNb3Rpb247CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFFUKQpAQCAtMTE4LDcgKzExOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgYm9vbCBhY3RpdmF0ZWRXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9hY3Rp
dmF0ZWRXZWJWaWV3OyB9CiAjZW5kaWYKICNpZiBQTEFURk9STShHREspIAotICAgICAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnQqKTsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KEdk
a0V2ZW50QnV0dG9uKik7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudE1vdGlv
biopOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVu
dChRTW91c2VFdmVudCosIGludCBjbGlja0NvdW50KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1XaGVlbEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybVdoZWVsRXZlbnQuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtV2hlZWxFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHR5cGVk
ZWYgbG9uZyBMUEFSQU07CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYgdW5p
b24gX0dka0V2ZW50IEdka0V2ZW50OwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50U2Nyb2xsIEdk
a0V2ZW50U2Nyb2xsOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKQEAgLTg1LDcgKzg1LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCwg
V1BBUkFNLCBMUEFSQU0sIGJvb2wgaXNIb3Jpem9udGFsKTsKICNlbmRpZgogI2lmIFBMQVRGT1JN
KEdESykKLSAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50Kik7CisgICAgICAgIFBs
YXRmb3JtV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCopOwogI2VuZGlmCiAjaWYgUExBVEZPUk0o
UVQpCiAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudChRV2hlZWxFdmVudCopOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogCiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiBzdHJ1Y3QgX0d0a0xheW91
dCBHdGtMYXlvdXQ7Cit0eXBlZGVmIHN0cnVjdCBfR3RrQWRqdXN0bWVudCBHdGtBZGp1c3RtZW50
OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC0xNTEsMTMgKzE1MSwyNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAjaWYgUExBVEZPUk0oR0RLKQogICAgICAgICBTY3JvbGxWaWV3KCk7
CiAgICAgICAgIH5TY3JvbGxWaWV3KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRHdGtBZGp1
c3RtZW50cyhHdGtBZGp1c3RtZW50KiBoYWRqLCBHdGtBZGp1c3RtZW50KiB2YWRqKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgdmlydHVh
bCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0R3RrV2lkZ2V0KEd0a0xheW91dCogbGF5b3V0KTsKKyAgICAgICAg
dmlydHVhbCBJbnRQb2ludCBjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiwgY29uc3Qg
SW50UG9pbnQmKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0U2VsZlRv
Q2hpbGQoY29uc3QgV2lkZ2V0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUdlb21ldHJ5KGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICAgICAgSW50UmVj
dCB3aW5kb3dSZXNpemVyUmVjdCgpOworICAgICAgICBib29sIHJlc2l6ZXJPdmVybGFwc0NvbnRl
bnQoKSBjb25zdDsKKyAgICAgICAgdm9pZCBhZGp1c3RPdmVybGFwcGluZ1Njcm9sbGJhckNvdW50
KGludCBvdmVybGFwRGVsdGEpOworCisgICAgICAgIHZvaWQgYWRkVG9EaXJ0eVJlZ2lvbihjb25z
dCBJbnRSZWN0Jik7CisgICAgICAgIHZvaWQgc2Nyb2xsQmFja2luZ1N0b3JlKGludCBkeCwgaW50
IGR5LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QpOworICAgICAgICB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHZvaWQgdXBkYXRlVmlldyhjb25zdCBJbnRSZWN0JiwgYm9vbCBub3cgPSBmYWxzZSk7
Ci0gICAgICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOworICAgICAgICBJbnRTaXplIG1heGlt
dW1TY3JvbGwoKSBjb25zdDsKKyAgICAgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IElu
dFNpemUmIGRlc2lyZWRPZmZzZXQpOwogICAgICAgICBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0ZTsK
ICAgICAgICAgU2Nyb2xsVmlld1ByaXZhdGUqIG1fZGF0YTsKICNlbmRpZgpAQCAtMTg4LDYgKzIw
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXIgKnZl
cnRpY2FsU2Nyb2xsQmFyKCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgorICAgICAgICBIYXNoU2V0
PFdpZGdldCo+KiBjaGlsZHJlbigpOwogICAgICAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoY29u
c3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCk7CiAgICAgICAgIEludFNpemUgbWF4aW11bVNjcm9s
bCgpIGNvbnN0OwogICAgICAgICBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0ZTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9XaWRn
ZXQuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4IEBAIHR5cGVkZWYgc3RydWN0IEhXTkRfXyogSFdORDsK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiBzdHJ1Y3QgX0dka0RyYXdhYmxl
IEdka0RyYXdhYmxlOwogdHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtXaWRnZXQ7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0R3RrUGFnZSBXZWJLaXRHdGtQYWdlOwogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShRVCkKQEAgLTEzNiwxMCArMTM2LDI4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQotICAgICAgICBXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRHdGtXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0gICAgICAgIEdk
a0RyYXdhYmxlKiBnZGtEcmF3YWJsZSgpIGNvbnN0OwotICAgICAgICBHdGtXaWRnZXQqIGd0a1dp
ZGdldCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SW50ZXJuYWxHdGtXaWRnZXQo
R3RrV2lkZ2V0Kik7CisgICAgICAgIEd0a1dpZGdldCogaW50ZXJuYWxHdGtXaWRnZXQoKSBjb25z
dDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKKyAgICAg
ICAgU2Nyb2xsVmlldyogcGFyZW50KCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRDb250YWlu
aW5nV2luZG93KFdlYktpdEd0a1BhZ2UqKTsKKyAgICAgICAgV2ViS2l0R3RrUGFnZSogY29udGFp
bmluZ1dpbmRvdygpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5n
ZWQoKSBjb25zdDsKKworICAgICAgICBJbnRSZWN0IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3co
Y29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgICAgICBJbnRQb2ludCBjb252ZXJ0VG9Db250YWlu
aW5nV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgICAgIEludFBvaW50IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCisgICAgICAg
IHZpcnR1YWwgSW50UG9pbnQgY29udmVydENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCosIGNvbnN0
IEludFBvaW50JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFNlbGZU
b0NoaWxkKGNvbnN0IFdpZGdldCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CisKKyAgICAgICAg
Ym9vbCBzdXBwcmVzc0ludmFsaWRhdGlvbigpIGNvbnN0OworICAgICAgICB2b2lkIHNldFN1cHBy
ZXNzSW52YWxpZGF0aW9uKGJvb2wpOworCisgICAgICAgIHZvaWQgc2V0U2Nyb2xsVmlld0NvbnRy
b2woKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9GcmFtZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJh
bWVHZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1l
R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
RnJhbWVHZGsuaCIKLQotI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEdk
ay5oIgotI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0Lmgi
Ci0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRl
ICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVB
c1RleHQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNl
UmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAi
U2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCi0jaW5jbHVkZSAid2Via2l0
Z3RrZnJhbWUuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0KLS8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0Ci0vLyBUaGlz
IGRvZXMgbm90IGJlbG9uZyBoZXJlIGFuZCBJJ20gbm90IHN1cmUgd2hlcmUKLS8vIGl0IHNob3Vs
ZCBnbwotLy8gSSBkb24ndCBrbm93IHdoYXQgdGhlIHBsYW5zIG9yIGRlc2lnbiBpcwotLy8gZm9y
IG5vbmUgY29kZSByZXNvdXJjZXMKLVZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXko
Y29uc3QgY2hhciogcmVzb3VyY2VOYW1lKQotewotICAgIFZlY3RvcjxjaGFyPiByZXNvdXJjZTsK
LSAgICAvL2lmIChzdHJjbXAocmVzb3VyY2VOYW1lLCJtaXNzaW5nSW1hZ2UiKSA9PSAwKSB7Ci0g
ICAgLy99Ci0gICAgcmV0dXJuIHJlc291cmNlOwotfQotCi1zdHJ1Y3QgRnJhbWVHZGtFeHBvc2VE
YXRhIHsKLSAgICBHdGtDb250YWluZXIgKmNvbnRhaW5lcjsKLSAgICBHZGtFdmVudEV4cG9zZSAq
ZXhwb3NlOwotfTsKLQotc3RhdGljIHZvaWQgZnJhbWVfZ2RrX2V4cG9zZV9jaGlsZChHdGtXaWRn
ZXQgKndpZGdldCwgZ3BvaW50ZXIgX2RhdGEpCi17Ci0gICAgRnJhbWVHZGtFeHBvc2VEYXRhKiBk
YXRhID0gKEZyYW1lR2RrRXhwb3NlRGF0YSopX2RhdGE7Ci0gICAgaW50IHdpZHRoLCBoZWlnaHQ7
Ci0gICAgZ3RrX2NvbnRhaW5lcl9wcm9wYWdhdGVfZXhwb3NlKGRhdGEtPmNvbnRhaW5lciwgd2lk
Z2V0LCBkYXRhLT5leHBvc2UpOwotfSAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GcmFtZUdk
azo6RnJhbWVHZGsoUGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1l
bnQsIEZyYW1lTG9hZGVyQ2xpZW50R2RrKiBmcmFtZUxvYWRlcikKLSAgICA6IEZyYW1lKHBhZ2Us
IG93bmVyRWxlbWVudCwgZnJhbWVMb2FkZXIpCi17Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0g
cGFnZS0+c2V0dGluZ3MoKTsKLSAgICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNh
bGx5KHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoNSk7Ci0gICAgc2V0
dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoNSk7Ci0gICAgc2V0dGluZ3MtPnNldFNo
b3VsZFByaW50QmFja2dyb3VuZHModHJ1ZSk7Ci0gICAgc2V0dGluZ3MtPnNldEphdmFTY3JpcHRF
bmFibGVkKHRydWUpOwotCi0gICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDE0
KTsKLSAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDE0KTsKLSAgICBzZXR0aW5ncy0+
c2V0U2VyaWZGb250RmFtaWx5KCJUaW1lcyBOZXcgUm9tYW4iKTsKLSAgICBzZXR0aW5ncy0+c2V0
U2Fuc1NlcmlmRm9udEZhbWlseSgiQXJpYWwiKTsKLSAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250
RmFtaWx5KCJDb3VyaWVyIik7Ci0gICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgi
QXJpYWwiKTsKLX0KLQotRnJhbWVHZGs6On5GcmFtZUdkaygpCi17Ci0gICAgbG9hZGVyKCktPmNh
bmNlbEFuZENsZWFyKCk7Ci19Ci0KLXZvaWQgRnJhbWVHZGs6OmR1bXBSZW5kZXJUcmVlKCkgY29u
c3QKLXsKLSAgICBpZiAodmlldygpLT5uZWVkc0xheW91dCgpKQotICAgICAgICB2aWV3KCktPmxh
eW91dCgpOwotICAgIAotICAgIFN0cmluZyB0eHQgPSBleHRlcm5hbFJlcHJlc2VudGF0aW9uKHJl
bmRlcmVyKCkpOwotICAgIENTdHJpbmcgdXRmOFN0ciA9IHR4dC51dGY4KCk7Ci0gICAgY29uc3Qg
Y2hhciAqdXRmOCA9IHV0ZjhTdHIuZGF0YSgpOwotICAgIGlmICh1dGY4KQotICAgICAgICBwcmlu
dGYoIiVzXG4iLCB1dGY4KTsKLSAgICBlbHNlCi0gICAgICAgIHByaW50ZigiRnJhbWVHZGs6OmR1
bXBSZW5kZXJUcmVlKCkgbm8gZGF0YVxuIik7Ci19Ci0KLWJvb2wgRnJhbWVHZGs6OmtleVByZXNz
KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQpCi17Ci0gICAgaWYgKCFldmVu
dEhhbmRsZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGV2ZW50SGFu
ZGxlcigpLT5rZXlFdmVudChrZXlFdmVudCk7Ci19Ci0KLXZvaWQgRnJhbWVHZGs6OmhhbmRsZUdk
a0V2ZW50KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Ci0K
LSAgICAgICAgY2FzZSBHREtfRVhQT1NFOiB7Ci0gICAgICAgICAgICBHZGtSZWN0YW5nbGUgY2xp
cDsKLSAgICAgICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdp
b24sICZjbGlwKTsKLSAgICAgICAgICAgIGdka193aW5kb3dfYmVnaW5fcGFpbnRfcmVnaW9uKGV2
ZW50LT5hbnkud2luZG93LCBldmVudC0+ZXhwb3NlLnJlZ2lvbik7Ci0gICAgICAgICAgICBjYWly
b190KiBjciA9IGdka19jYWlyb19jcmVhdGUoZXZlbnQtPmFueS53aW5kb3cpOwotICAgICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0IGN0eChjcik7Ci0gICAgICAgICAgICBjdHguc2V0R2RrRHJhd2Fi
bGUoZXZlbnQtPmFueS53aW5kb3cpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAodmlldygpLT5uZWVkc0xheW91dCgpKQotICAgICAgICAgICAgICAg
ICAgICB2aWV3KCktPmxheW91dCgpOwotICAgICAgICAgICAgICAgIEludFJlY3QgcmVjdChjbGlw
LngsIGNsaXAueSwgY2xpcC53aWR0aCwgY2xpcC5oZWlnaHQpOwotICAgICAgICAgICAgICAgIHBh
aW50KCZjdHgsIHJlY3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fpcm9fZGVzdHJv
eShjcik7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBNYWtlIHN1cmUgY2hpbGRy
ZW4gb2YgdGhlIHZpZXcgZ2V0IHJlZHJhd24KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
RnJhbWVHZGtFeHBvc2VEYXRhIGRhdGEgPSB7IEdUS19DT05UQUlORVIodmlldygpLT5ndGtXaWRn
ZXQoKSksICZldmVudC0+ZXhwb3NlIH07Ci0gICAgICAgICAgICBndGtfY29udGFpbmVyX2ZvcmFs
bChHVEtfQ09OVEFJTkVSKHZpZXcoKS0+Z3RrV2lkZ2V0KCkpLCBmcmFtZV9nZGtfZXhwb3NlX2No
aWxkLCAmZGF0YSk7Ci0gICAgICAgICAgICBnZGtfd2luZG93X2VuZF9wYWludChldmVudC0+YW55
LndpbmRvdyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgY2FzZSBHREtfQ09ORklHVVJFOiB7Ci0gICAgICAgICAgICB2aWV3KCktPnVwZGF0
ZUdlb21ldHJ5KGV2ZW50LT5jb25maWd1cmUud2lkdGgsIGV2ZW50LT5jb25maWd1cmUuaGVpZ2h0
KTsKLSAgICAgICAgICAgIGZvcmNlTGF5b3V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgR0RLX1NDUk9MTDogewotICAgICAgICAgICAgUGxhdGZvcm1X
aGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgdmlldygpLT53aGVlbEV2
ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICAgICAgaWYgKHdoZWVsRXZlbnQuaXNBY2NlcHRlZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgSGl0VGVzdFJlcXVlc3Qg
aGl0VGVzdFJlcXVlc3QodHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBIaXRUZXN0UmVzdWx0IGhp
dFRlc3RSZXN1bHQod2hlZWxFdmVudC5wb3MoKSk7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5s
YXllcigpLT5oaXRUZXN0KGhpdFRlc3RSZXF1ZXN0LCBoaXRUZXN0UmVzdWx0KTsKLSAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpOwotICAgICAgICAgICAg
aWYgKCFub2RlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIC8qCi0gICAg
ICAgICAgICAgKiBGSVhNRTogRG9lcyB0aGlzIGJlbG9uZyBoZXJlPwotICAgICAgICAgICAgICog
RGVmYXVsdCB0byBzY3JvbGxpbmcgdGhlIHBhZ2UKLSAgICAgICAgICAgICAqIG5vdCBzdXJlIHdo
eSBpdHMgbnVsbAotICAgICAgICAgICAgICogYnJva2UgYW55d2F5IHdoZW4gaXRzIG5vdCBudWxs
Ci0gICAgICAgICAgICAgKiBkb1Njcm9sbChyZW5kZXJlcigpLCB3aGVlbEV2ZW50LmRlbHRhWCgp
LCB3aGVlbEV2ZW50LmRlbHRhWSgpKTsKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHREtfRFJBR19FTlRFUjoKLSAgICAgICAgY2Fz
ZSBHREtfRFJBR19MRUFWRToKLSAgICAgICAgY2FzZSBHREtfRFJBR19NT1RJT046Ci0gICAgICAg
IGNhc2UgR0RLX0RSQUdfU1RBVFVTOgotICAgICAgICBjYXNlIEdES19EUk9QX1NUQVJUOgotICAg
ICAgICBjYXNlIEdES19EUk9QX0ZJTklTSEVEOiB7Ci0gICAgICAgICAgICAvL2Jvb2wgdXBkYXRl
RHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7Ci0gICAg
ICAgICAgICAvL3ZvaWQgY2FuY2VsRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiwgQ2xpcGJvYXJkKik7Ci0gICAgICAgICAgICAvL2Jvb2wgcGVyZm9ybURyYWdBbmREcm9wKGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKLSAgICAgICAgICAg
IGV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICAg
ICAgY2FzZSBHREtfMkJVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVT
UzoKLSAgICAgICAgICAgIGV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoUGxh
dGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHREtfQlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgICAgICBldmVudEhhbmRsZXIoKS0+aGFuZGxl
TW91c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHREtfS0VZX1BSRVNTOgotICAgICAgICBjYXNlIEdES19L
RVlfUkVMRUFTRTogewotICAgICAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleUV2ZW50
KGV2ZW50KTsKLSAgICAgICAgICAgIGtleVByZXNzKGtleUV2ZW50KTsKLSAgICAgICAgfQotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEZyYW1l
Ojppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgRnJhbWU6OmNsZWFudXBQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLURyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0
aW9uKCkgCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9p
ZCBGcmFtZTo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAkocmV2aXNpb24gMjQ3ODEp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgRnJhbWVHZGtfaAotI2RlZmluZSBGcmFtZUdka19oCi0KLSNpbmNsdWRlICJF
ZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgPGdkay9nZGsuaD4K
LSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGcmFtZUdkazsKLWNsYXNzIEZyYW1lTG9hZGVyQ2xp
ZW50R2RrOwotY2xhc3MgRm9ybURhdGE7Ci0KLQotY2xhc3MgRnJhbWVHZGsgOiBwdWJsaWMgRnJh
bWUgewotcHVibGljOgotICAgIEZyYW1lR2RrKFBhZ2UqLCBIVE1MRnJhbWVPd25lckVsZW1lbnQq
LCBGcmFtZUxvYWRlckNsaWVudEdkayopOwotICAgIHZpcnR1YWwgfkZyYW1lR2RrKCk7Ci0KLSAg
ICB2b2lkIGhhbmRsZUdka0V2ZW50KEdka0V2ZW50Kik7Ci0gICAgYm9vbCBrZXlQcmVzcyhjb25z
dCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleUV2ZW50KTsKLQotICAgIHZvaWQgZHVtcFJlbmRl
clRyZWUoKSBjb25zdDsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9LZXlFdmVudEdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
S2V5RXZlbnRHZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0tleUV2ZW50R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU4LDE3ICs0NTgsMTcgQEAgc3Rh
dGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVucwogCiB9CiAKLVBsYXRmb3JtS2V5
Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50KiBldmVudCkKK1BsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5KiBldmVu
dCkKIHsKICAgICBtX2lzS2V5VXAgPSBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0U7Ci0g
ICAgbV9zaGlmdEtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBHREtfU0hJRlRfTUFTSyAhPSAwOwot
ICAgIG1fY3RybEtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLICE9IDA7
Ci0gICAgbV9hbHRLZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwOwot
ICAgIG1fbWV0YUtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBHREtfTU9EMl9NQVNLICE9IDA7Ci0g
ICAgbV90ZXh0ID0gZXZlbnQtPmtleS5zdHJpbmc7Ci0gICAgbV91bm1vZGlmaWVkVGV4dCA9IGV2
ZW50LT5rZXkuc3RyaW5nOwotICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJGb3JH
ZGtLZXlDb2RlKGV2ZW50LT5rZXkua2V5dmFsKTsKLSAgICBtX1dpbmRvd3NLZXlDb2RlID0gd2lu
ZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVudC0+a2V5LmtleXZhbCk7CisgICAgbV9zaGlmdEtl
eSA9IGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLICE9IDA7CisgICAgbV9jdHJsS2V5ID0g
ZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSyAhPSAwOworICAgIG1fYWx0S2V5ID0gZXZl
bnQtPnN0YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwOworICAgIG1fbWV0YUtleSA9IGV2ZW50LT5z
dGF0ZSAmIEdES19NT0QyX01BU0sgIT0gMDsKKyAgICBtX3RleHQgPSBldmVudC0+c3RyaW5nOwor
ICAgIG1fdW5tb2RpZmllZFRleHQgPSBldmVudC0+c3RyaW5nOworICAgIG1fa2V5SWRlbnRpZmll
ciA9IGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGV2ZW50LT5rZXl2YWwpOworICAgIG1fV2lu
ZG93c0tleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGV2ZW50LT5rZXl2YWwpOwog
ICAgIG1fYXV0b1JlcGVhdCA9IGZhbHNlOwogICAgIG1faXNLZXlwYWQgPSBmYWxzZTsKIApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDU3ICsyOCw3MSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogCiAj
aW5jbHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgIkFz
c2VydGlvbnMuaCIKKwogI2luY2x1ZGUgPGdkay9nZGsuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBt
b2RpZmllciBpcyBBbHQgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgR0RLX01PRDFfTUFTSy4KIAot
UGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQor
UGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRCdXR0b24qIGV2
ZW50KQogewogICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKLSAgICBtX3Bvc2l0aW9u
ID0gSW50UG9pbnQoKGludClldmVudC0+bW90aW9uLngsIChpbnQpZXZlbnQtPm1vdGlvbi55KTsK
LSAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+bW90aW9uLnhfcm9v
dCwgKGludClldmVudC0+bW90aW9uLnlfcm9vdCk7Ci0gICAgbV9zaGlmdEtleSA9IGV2ZW50LT5i
dXR0b24uc3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKLSAgICBtX2N0cmxLZXkgPSBldmVudC0+YnV0
dG9uLnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKLSAgICBtX2FsdEtleSA9IGV2ZW50LT5idXR0
b24uc3RhdGUgJiBHREtfTU9EMV9NQVNLOwotICAgIG1fbWV0YUtleSA9IGV2ZW50LT5idXR0b24u
c3RhdGUgJiBHREtfTU9EMl9NQVNLOworICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2
ZW50LT54LCAoaW50KWV2ZW50LT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQo
KGludClldmVudC0+eF9yb290LCAoaW50KWV2ZW50LT55X3Jvb3QpOworICAgIG1fc2hpZnRLZXkg
PSBldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKKyAgICBtX2N0cmxLZXkgPSBldmVudC0+
c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLOworICAgIG1fYWx0S2V5ID0gZXZlbnQtPnN0YXRlICYg
R0RLX01PRDFfTUFTSzsKKyAgICBtX21ldGFLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfTU9EMl9N
QVNLOwogCiAgICAgc3dpdGNoIChldmVudC0+dHlwZSkgewotICAgICAgICBjYXNlIEdES19NT1RJ
T05fTk9USUZZOgotICAgICAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50TW92ZWQ7Ci0g
ICAgICAgICAgICBtX2J1dHRvbiA9IE5vQnV0dG9uOworICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVT
UzoKKyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzNCVVRUT05fUFJF
U1M6CisgICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6CisgICAgICAgIG1fZXZlbnRUeXBlID0g
TW91c2VFdmVudFByZXNzZWQ7CisgICAgICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9O
X1JFTEVBU0UpIHsKKyAgICAgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFJlbGVhc2Vk
OwogICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtfMkJVVFRPTl9Q
UkVTUzoKLSAgICAgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtf
QlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRQcmVz
c2VkOwotICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkg
ewotICAgICAgICAgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFJlbGVhc2VkOwotICAg
ICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV2
ZW50LT50eXBlID09IEdES19CVVRUT05fUFJFU1MpCi0gICAgICAgICAgICAgICAgbV9jbGlja0Nv
dW50ID0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9O
X1BSRVNTKQotICAgICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDI7Ci0gICAgICAgICAgICBl
bHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKLSAgICAgICAgICAgICAg
ICBtX2NsaWNrQ291bnQgPSAzOwotCi0gICAgICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0
b24gPT0gMSkKLSAgICAgICAgICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247Ci0gICAgICAg
ICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiA9PSAyKQotICAgICAgICAgICAgICAg
IG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1
dHRvbi5idXR0b24gPT0gMykKLSAgICAgICAgICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9u
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiVW5rbm93biBtb3VzZSBldmVudFxuIik7Ci0gICAgICAgICAgICBhc3Nl
cnQoMCk7Ci0gICAgfQorICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRU
T05fUFJFU1MpCisgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAxOworICAgICAgICBlbHNlIGlm
IChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUykKKyAgICAgICAgICAgIG1fY2xpY2tD
b3VudCA9IDI7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18zQlVUVE9OX1BS
RVNTKQorICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMzsKKworICAgICAgICBpZiAoZXZlbnQt
PmJ1dHRvbiA9PSAxKQorICAgICAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOworICAgICAg
ICBlbHNlIGlmIChldmVudC0+YnV0dG9uID09IDIpCisgICAgICAgICAgICBtX2J1dHRvbiA9IE1p
ZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAzKQorICAgICAg
ICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OwogfQogCitQbGF0Zm9y
bU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudE1vdGlvbiogbW90aW9uKQor
eworICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKKyAgICBtX3Bvc2l0aW9uID0gSW50
UG9pbnQoKGludCltb3Rpb24tPngsIChpbnQpbW90aW9uLT55KTsKKyAgICBtX2dsb2JhbFBvc2l0
aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPnhfcm9vdCwgKGludCltb3Rpb24tPnlfcm9vdCk7
CisgICAgbV9zaGlmdEtleSA9IG1vdGlvbi0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKKyAgICBt
X2N0cmxLZXkgPSBtb3Rpb24tPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKKyAgICBtX2FsdEtl
eSA9IG1vdGlvbi0+c3RhdGUgJiBHREtfTU9EMV9NQVNLOworICAgIG1fbWV0YUtleSA9IG1vdGlv
bi0+c3RhdGUgJiBHREtfTU9EMl9NQVNLOworCisgICAgc3dpdGNoIChtb3Rpb24tPnR5cGUpIHsK
KyAgICBjYXNlIEdES19NT1RJT05fTk9USUZZOgorICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNl
RXZlbnRNb3ZlZDsKKyAgICAgICAgbV9idXR0b24gPSBOb0J1dHRvbjsKKyAgICAgICAgbV9jbGlj
a0NvdW50ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfTsKK30KIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1BsYXRmb3JtU2NyZWVuR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9QbGF0Zm9ybVNjcmVlbkdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvUGxhdGZvcm1TY3JlZW5HZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw5IEBACiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldpZGdldC5o
IgotI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCisKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCkBAIC0zOCwxMCArNDAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBp
bnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpIAogewotICAgIEFTU0VSVCh3aWRnZXQtPmdk
a0RyYXdhYmxlKCkpOworICAgIEFTU0VSVCh3aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKSAmJiB3
aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKS0+YmluX3dpbmRvdyk7CiAKICAgICBnaW50IGR1bW15
LCBkZXB0aDsKLSAgICBnZGtfd2luZG93X2dldF9nZW9tZXRyeSh3aWRnZXQtPmdka0RyYXdhYmxl
KCksICZkdW1teSwgJmR1bW15LCAmZHVtbXksICZkdW1teSwgJmRlcHRoKTsKKyAgICBnZGtfd2lu
ZG93X2dldF9nZW9tZXRyeSh3aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKS0+YmluX3dpbmRvdywg
JmR1bW15LCAmZHVtbXksICZkdW1teSwgJmR1bW15LCAmZGVwdGgpOwogICAgIHJldHVybiBkZXB0
aDsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhci5oCShy
ZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJXaWRnZXQuaCIK
ICNpbmNsdWRlICJTY3JvbGxCYXIuaCIKIAordHlwZWRlZiBzdHJ1Y3QgX0d0a0FkanVzdG1lbnQg
R3RrQWRqdXN0bWVudDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQbGF0Zm9ybVNj
cm9sbGJhciA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYyBTY3JvbGxiYXIgewpAQCAtNTEsNiArNTMs
MTAgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBv
c2l0aW9uKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUHJvcG9ydGlvbigpOworCitw
cml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGd0a1ZhbHVlQ2hhbmdlZChHdGtBZGp1c3RtZW50Kiwg
UGxhdGZvcm1TY3JvbGxiYXIqKTsKKyAgICBHdGtBZGp1c3RtZW50KiBtX2FkanVzdG1lbnQ7CiB9
OwogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJH
ZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3Jt
U2Nyb2xsQmFyR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMzQgKzM3LDMzIEBACiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCisKIFBsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0Zm9ybVNj
cm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsYmFy
Q29udHJvbFNpemUgY29udHJvbFNpemUpCiAgICAgOiBTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRh
dGlvbiwgY29udHJvbFNpemUpCisgICAgLCBtX2FkanVzdG1lbnQoR1RLX0FESlVTVE1FTlQoZ3Rr
X2FkanVzdG1lbnRfbmV3KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApKSkKIHsgCiAgICAg
R3RrU2Nyb2xsYmFyKiBzY3JvbGxCYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TQ1JPTExCQVIoOjpndGtf
aHNjcm9sbGJhcl9uZXcoTlVMTCkpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU
S19TQ1JPTExCQVIoOjpndGtfdnNjcm9sbGJhcl9uZXcoTlVMTCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1RLX1NDUk9MTEJBUig6Omd0a19oc2Nyb2xsYmFyX25ldyhtX2FkanVz
dG1lbnQpKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU0NST0xMQkFSKDo6
Z3RrX3ZzY3JvbGxiYXJfbmV3KG1fYWRqdXN0bWVudCkpOwogICAgIGd0a193aWRnZXRfc2hvdyhH
VEtfV0lER0VUKHNjcm9sbEJhcikpOwotICAgIHNldEd0a1dpZGdldChHVEtfV0lER0VUKHNjcm9s
bEJhcikpOworICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChzY3JvbGxCYXIpKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KEdfT0JKRUNUKHNjcm9sbEJhciksICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhQbGF0Zm9ybVNjcm9sbGJhcjo6Z3RrVmFsdWVDaGFuZ2VkKSwgdGhpcyk7CisKKyAgICBz
ZXRJbnRlcm5hbEd0a1dpZGdldChHVEtfV0lER0VUKHNjcm9sbEJhcikpOwogCiAgICAgLyoKICAg
ICAgKiBhc3NpZ24gYSBzYW5lIGRlZmF1bHQgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgU2Nyb2xs
QmFyLCBvdGhlcndpc2UKICAgICAgKiB3ZSB3aWxsIGVuZCB1cCB3aXRoIGEgMCB3aWR0aCBzY3Jv
bGxiYXIuCiAgICAgICovCiAgICAgcmVzaXplKFBsYXRmb3JtU2Nyb2xsYmFyOjpob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KCksCi0gICAgICAgICAgIFBsYXRmb3JtU2Nyb2xsYmFyOjp2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKCkpOyAgICAKLQotICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChzY3Jv
bGxCYXIpKTsKLSAgICBndGtfb2JqZWN0X3NpbmsoR1RLX09CSkVDVChzY3JvbGxCYXIpKTsKKyAg
ICAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSk7IAog
fQogCiBQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKCkKIHsKLSAgICAvKgot
ICAgICAqIHRoZSBXaWRnZXQgZG9lcyBub3QgdGFrZSBvdmVyIG93bmVyc2hpcC4KLSAgICAgKi8K
LSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZ3RrV2lkZ2V0KCkpOwotICAgIGdfb2JqZWN0X3VucmVm
KEdfT0JKRUNUKGd0a1dpZGdldCgpKSk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKEdfT0JKRUNUKGludGVybmFsR3RrV2lkZ2V0KCkpLCAoZ3BvaW50ZXIpUGxhdGZv
cm1TY3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCwgdGhpcyk7CisgICAgZ19vYmplY3RfdW5yZWYo
R19PQkpFQ1QoaW50ZXJuYWxHdGtXaWRnZXQoKSkpOwogfQogCiBpbnQgUGxhdGZvcm1TY3JvbGxi
YXI6OndpZHRoKCkgY29uc3QKQEAgLTg5LDE2ICs4OCwyOCBAQCB2b2lkIFBsYXRmb3JtU2Nyb2xs
YmFyOjpwYWludChHcmFwaGljc0NvCiAKIHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRo
dW1iUG9zaXRpb24oKQogeyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX2FkanVz
dG1lbnQtPnZhbHVlICE9IG1fY3VycmVudFBvcykgeworICAgICAgICBtX2FkanVzdG1lbnQtPnZh
bHVlID0gbV9jdXJyZW50UG9zOworICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2Vk
KG1fYWRqdXN0bWVudCk7CisgICAgfQogfQogCiB2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRh
dGVUaHVtYlByb3BvcnRpb24oKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9hZGp1
c3RtZW50LT5zdGVwX2luY3JlbWVudCA9IG1fbGluZVN0ZXA7CisgICAgbV9hZGp1c3RtZW50LT5w
YWdlX2luY3JlbWVudCA9IG1fcGFnZVN0ZXA7CisgICAgbV9hZGp1c3RtZW50LT5wYWdlX3NpemUg
PSBtX3Zpc2libGVTaXplOworICAgIG1fYWRqdXN0bWVudC0+dXBwZXIgPSBtX3RvdGFsU2l6ZTsK
KyAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKG1fYWRqdXN0bWVudCk7CiB9CiAKIHZvaWQgUGxh
dGZvcm1TY3JvbGxiYXI6OnNldFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBzZXRG
cmFtZUdlb21ldHJ5KHJlY3QpOworICAgIGdlb21ldHJ5Q2hhbmdlZCgpOwogfQogCit2b2lkIFBs
YXRmb3JtU2Nyb2xsYmFyOjpndGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCosIFBsYXRmb3Jt
U2Nyb2xsYmFyKiB0aGF0KQoreworICAgIHRoYXQtPnNldFZhbHVlKGd0a19hZGp1c3RtZW50X2dl
dF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQpKTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1JlbmRlclRoZW1lR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9SZW5kZXJUaGVtZUdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksMTEgKzE3OSwx
MiBAQCB2b2lkIFJlbmRlclRoZW1lR2RrOjpzZXRDaGVja2JveFNpemUoUmVuCiBib29sIFJlbmRl
clRoZW1lR2RrOjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gRklYTUU6
IGlzIGl0IHRoZSByaWdodCB0aGluZyB0byBkbz8KLSAgICBHdGtXaWRnZXQgKmNoZWNrYm94ID0g
Z3RrQ2hlY2tib3goKTsKKyAgICBHdGtXaWRnZXQqIGNoZWNrYm94ID0gZ3RrQ2hlY2tib3goKTsK
KyAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRp
b24oKSk7CiAgICAgZ3RrX3BhaW50X2NoZWNrKGNoZWNrYm94LT5zdHlsZSwgaS5jb250ZXh0LT5n
ZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0
ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAgICAgICBOVUxMLCBjaGVja2JveCwgImNo
ZWNrYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICBwb3MueCgpLCBw
b3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgcmV0dXJuIGZhbHNl
OwogfQpAQCAtMjExLDExICsyMTIsMTIgQEAgdm9pZCBSZW5kZXJUaGVtZUdkazo6c2V0UmFkaW9T
aXplKFJlbmRlcgogYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogeyAKICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwotICAgIEd0
a1dpZGdldCAqcmFkaW8gPSBndGtSYWRpb0J1dHRvbigpOworICAgIEd0a1dpZGdldCogcmFkaW8g
PSBndGtSYWRpb0J1dHRvbigpOworICAgIEludFBvaW50IHBvcyA9IGkuY29udGV4dC0+dHJhbnNs
YXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKICAgICBndGtfcGFpbnRfb3B0aW9uKHJhZGlvLT5z
dHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICAgZGV0
ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwKICAgICAgICAgICAgICAgICAgICAg
IE5VTEwsIHJhZGlvLCAicmFkaW9idXR0b24iLAotICAgICAgICAgICAgICAgICAgICAgcmVjdC54
KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
IAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIyMywxMSArMjI1LDEyIEBAIGJvb2wgUmVuZGVy
VGhlbWVHZGs6OnBhaW50UmFkaW8oUmVuZGVyT2IKIGJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHJlY3QpIAogeyAKICAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGVt
ZS1hd2FyZSBkcmF3aW5nLiBUaGlzIHNob3VsZCBob25vciB0aGUgc3RhdGUgYXMgd2VsbAotICAg
IEd0a1dpZGdldCAqYnV0dG9uID0gZ3RrQnV0dG9uKCk7CisgICAgR3RrV2lkZ2V0KiBidXR0b24g
PSBndGtCdXR0b24oKTsKKyAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBv
aW50KHJlY3QubG9jYXRpb24oKSk7CiAgICAgZ3RrX3BhaW50X2JveChidXR0b24tPnN0eWxlLCBp
LmNvbnRleHQtPmdka0RyYXdhYmxlKCksCiAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0
ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAgICAgTlVMTCwgYnV0dG9u
LCAiYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgIHBvcy54KCksIHBvcy55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAkocmV2aXNpb24gMjQ3
ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKICAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICoKQEAgLTM3LDM4
ICszNywyMDMgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIndlYmtpdGd0a3Bh
Z2UuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCiAKICNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCisKK3N0
YXRpYyBjb25zdCBpbnQgTWFnaWNHdGtTY3JvbGxDb25zdGFudCA9IDEzOworCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlCisvKgorICog
VGhlIGRlc2lnbiBpcyBhIGNvcHkgb2YgdGhlIFdpbmRvd3MgU2Nyb2xsVmlldyBmcm9tIHBsYXRm
b3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcAorICogd2l0aCB0aGUgZm9sbG93aW5nIGNoYW5nZXMv
ZGlmZmljdWx0aWVzLgorICogVG8gY29uZm9ybSB0byB0aGUgJ3Njcm9sbGFibGUgcHJvdG9jb2wn
IG9mIEd0aysgd2UgbWlnaHQgZ2V0IHR3byBHdGtBZGp1c3RtZW50cyBzZXQuIElmCisgKiB3ZSBo
YXZlIHRoZW0gc2V0IHdlIG1heSBub3QgY3JlYXRlIFBsYXRmb3JtU2Nyb2xsYmFyIGJ1dCBoYXZl
IHRvIHVzZSB0aGUgR3RrQWRqdXN0bWVudC4KKyAqLworY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xs
Vmlld1ByaXZhdGUgOiBwdWJsaWMgU2Nyb2xsYmFyQ2xpZW50CiB7CiBwdWJsaWM6Ci0gICAgU2Ny
b2xsVmlld1ByaXZhdGUoKQotICAgICAgICA6IGhhc1N0YXRpY0JhY2tncm91bmQoZmFsc2UpCi0g
ICAgICAgICwgc3VwcHJlc3NTY3JvbGxiYXJzKGZhbHNlKQorICAgIFNjcm9sbFZpZXdQcml2YXRl
KFNjcm9sbFZpZXcqIF92aWV3KQorICAgICAgICA6IHZpZXcoX3ZpZXcpCisgICAgICAgICwgaGFz
U3RhdGljQmFja2dyb3VuZChmYWxzZSkKKyAgICAgICAgLCBzY3JvbGxiYXJzU3VwcHJlc3NlZChm
YWxzZSkKKyAgICAgICAgLCBzY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyKDApCiAgICAgICAgICwg
dlNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKICAgICAgICAgLCBoU2Nyb2xsYmFyTW9kZShT
Y3JvbGxiYXJBdXRvKQotICAgICAgICAsIGxheW91dCgwKQogICAgICAgICAsIHNjcm9sbEJhcnNO
ZWVkVXBkYXRlKGZhbHNlKQotICAgIHsgfQorICAgICAgICAsIGluVXBkYXRlU2Nyb2xsYmFycyhm
YWxzZSkKKyAgICAgICAgLCB2QWRqKDApCisgICAgICAgICwgaEFkaigwKQorICAgIHt9CisKKyAg
ICB+U2Nyb2xsVmlld1ByaXZhdGUoKQorICAgIHsKKyAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNj
cm9sbGJhcihmYWxzZSk7CisgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsK
KworICAgICAgICBpZiAoaEFkaikgeworICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jKEdfT0JKRUNUKGhBZGopLCAoZ3BvaW50ZXIpU2Nyb2xsVmlld1ByaXZh
dGU6OmFkanVzdG1lbnRDaGFuZ2VkLCB0aGlzKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3VucmVm
KGhBZGopOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZBZGopIHsKKyAgICAgICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVCh2QWRqKSwgKGdwb2lu
dGVyKVNjcm9sbFZpZXdQcml2YXRlOjphZGp1c3RtZW50Q2hhbmdlZCwgdGhpcyk7CisgICAgICAg
ICAgICBnX29iamVjdF91bnJlZih2QWRqKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
c2Nyb2xsQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKTsKKworICAgIHZv
aWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc0Jhcik7CisgICAgdm9pZCBzZXRI
YXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc0Jhcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmFs
dWVDaGFuZ2VkKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVj
dCgpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgYWRqdXN0bWVudENoYW5nZWQoR3RrQWRqdXN0
bWVudCosIGdwb2ludGVyKTsKIAorICAgIFNjcm9sbFZpZXcqIHZpZXc7CiAgICAgYm9vbCBoYXNT
dGF0aWNCYWNrZ3JvdW5kOwotICAgIGJvb2wgc3VwcHJlc3NTY3JvbGxiYXJzOworICAgIGJvb2wg
c2Nyb2xsYmFyc1N1cHByZXNzZWQ7CisgICAgaW50IHNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXI7
CiAgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xsYmFyTW9kZTsKICAgICBTY3JvbGxiYXJNb2RlIGhT
Y3JvbGxiYXJNb2RlOwotICAgIEd0a0xheW91dCAqbGF5b3V0OworICAgIFJlZlB0cjxQbGF0Zm9y
bVNjcm9sbGJhcj4gdkJhcjsKKyAgICBSZWZQdHI8UGxhdGZvcm1TY3JvbGxiYXI+IGhCYXI7Cisg
ICAgR3RrQWRqdXN0bWVudCogdkFkajsKKyAgICBHdGtBZGp1c3RtZW50KiBoQWRqOworICAgIElu
dFNpemUgc2Nyb2xsT2Zmc2V0OwogICAgIEludFNpemUgY29udGVudHNTaXplOwotICAgIEludFNp
emUgdmlld1BvcnRTaXplOwogICAgIGJvb2wgc2Nyb2xsQmFyc05lZWRVcGRhdGU7CisgICAgYm9v
bCBpblVwZGF0ZVNjcm9sbGJhcnM7CisgICAgSGFzaFNldDxXaWRnZXQqPiBjaGlsZHJlbjsKIH07
CiAKKy8qCisgKiBEb24ndCBjcmVhdGUgdGhlIHNjcm9sbGJhcnMgd2hlbiB3ZSBoYXZlIGEgaG9y
aXpvbnRhbCBHdGtBZGp1c3RtZW50CisgKi8KK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1By
aXZhdGU6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCit7CisgICAgaWYg
KFNjcm9sbGJhcjo6aGFzUGxhdGZvcm1TY3JvbGxiYXJzKCkpIHsKKyAgICAgICAgaWYgKGhhc0Jh
ciAmJiAhaEJhciAmJiAhaEFkaikgeworICAgICAgICAgICAgaEJhciA9IG5ldyBQbGF0Zm9ybVNj
cm9sbGJhcih0aGlzLCBIb3Jpem9udGFsU2Nyb2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAg
ICAgICAgICAgIGhCYXItPnNldFNjcm9sbFZpZXdDb250cm9sKCk7CisgICAgICAgICAgICB2aWV3
LT5hZGRDaGlsZChoQmFyLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghaGFzQmFyICYmIGhC
YXIpIHsKKyAgICAgICAgICAgIHZpZXctPnJlbW92ZUNoaWxkKGhCYXIuZ2V0KCkpOworICAgICAg
ICAgICAgaEJhciA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qCisgKiBEb24ndCBjcmVh
dGUgdGhlIHNjcm9sbGJhcnMgd2hlbiB3ZSBoYXZlIGEgdmVydGljYWwgR3RrQWRqdXN0bWVudAor
ICovCit2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihib29sIGhhc0JhcikKK3sKKyAgICBpZiAoU2Nyb2xsYmFyOjpoYXNQbGF0Zm9ybVNj
cm9sbGJhcnMoKSkgeworICAgICAgICBpZiAoaGFzQmFyICYmICF2QmFyICYmICF2QWRqKSB7Cisg
ICAgICAgICAgICB2QmFyID0gbmV3IFBsYXRmb3JtU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Ny
b2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIHZCYXItPnNldFNjcm9sbFZp
ZXdDb250cm9sKCk7CisgICAgICAgICAgICB2aWV3LT5hZGRDaGlsZCh2QmFyLmdldCgpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghaGFzQmFyICYmIHZCYXIpIHsKKyAgICAgICAgICAgIHZpZXctPnJl
bW92ZUNoaWxkKHZCYXIuZ2V0KCkpOworICAgICAgICAgICAgdkJhciA9IDA7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNjcm9sbEJh
Y2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICAvLyBTaW5jZSBz
Y3JvbGxpbmcgaXMgZG91YmxlIGJ1ZmZlcmVkLCB3ZSB3aWxsIGJlIGJsaXR0aW5nIHRoZSBzY3Jv
bGwgdmlldydzIGludGVyc2VjdGlvbgorICAgIC8vIHdpdGggdGhlIGNsaXAgcmVjdCBldmVyeSB0
aW1lIHRvIGtlZXAgaXQgc21vb3RoLgorICAgIEludFJlY3QgY2xpcFJlY3QgPSB2aWV3LT53aW5k
b3dDbGlwUmVjdCgpOworICAgIEludFJlY3Qgc2Nyb2xsVmlld1JlY3QgPSB2aWV3LT5jb252ZXJ0
VG9Db250YWluaW5nV2luZG93KEludFJlY3QoMCwgMCwgdmlldy0+dmlzaWJsZVdpZHRoKCksIHZp
ZXctPnZpc2libGVIZWlnaHQoKSkpOworCisgICAgSW50UmVjdCB1cGRhdGVSZWN0ID0gY2xpcFJl
Y3Q7CisgICAgdXBkYXRlUmVjdC5pbnRlcnNlY3Qoc2Nyb2xsVmlld1JlY3QpOworCisgICAgLy9G
SVhNRSB1cGRhdGUgaGVyZT8KKworICAgIGlmICghaGFzU3RhdGljQmFja2dyb3VuZCkgLy8gVGhl
IG1haW4gZnJhbWUgY2FuIGp1c3QgYmxpdCB0aGUgV2ViVmlldyB3aW5kb3cKKyAgICAgICAvLyBG
SVhNRTogRmluZCBhIHdheSB0byBibGl0IHN1YmZyYW1lcyB3aXRob3V0IGJsaXR0aW5nIG92ZXJs
YXBwaW5nIGNvbnRlbnQKKyAgICAgICB2aWV3LT5zY3JvbGxCYWNraW5nU3RvcmUoLXNjcm9sbERl
bHRhLndpZHRoKCksIC1zY3JvbGxEZWx0YS5oZWlnaHQoKSwgc2Nyb2xsVmlld1JlY3QsIGNsaXBS
ZWN0KTsKKyAgICBlbHNlICB7CisgICAgICAgLy8gV2UgbmVlZCB0byBnbyBhaGVhZCBhbmQgcmVw
YWludCB0aGUgZW50aXJlIGJhY2tpbmcgc3RvcmUuICBEbyBpdCBub3cgYmVmb3JlIG1vdmluZyB0
aGUKKyAgICAgICAvLyBwbHVnaW5zLgorICAgICAgIHZpZXctPmFkZFRvRGlydHlSZWdpb24odXBk
YXRlUmVjdCk7CisgICAgICAgdmlldy0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgfQorCisg
ICAgdmlldy0+Z2VvbWV0cnlDaGFuZ2VkKCk7CisKKyAgICAvLyBOb3cgdXBkYXRlIHRoZSB3aW5k
b3cgKHdoaWNoIHNob3VsZCBkbyBub3RoaW5nIGJ1dCBhIGJsaXQgb2YgdGhlIGJhY2tpbmcgc3Rv
cmUncyB1cGRhdGVSZWN0IGFuZCBzbyBzaG91bGQKKyAgICAvLyBiZSB2ZXJ5IGZhc3QpLgorICAg
IHZpZXctPnVwZGF0ZSgpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRl
OjphZGp1c3RtZW50Q2hhbmdlZChHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50LCBncG9pbnRlciBf
dGhhdCkKK3sKKyAgICBTY3JvbGxWaWV3UHJpdmF0ZSogdGhhdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
U2Nyb2xsVmlld1ByaXZhdGUqPihfdGhhdCk7CisKKyAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJl
YWxseSBtb3ZlZC4KKyAgICBJbnRTaXplIG5ld09mZnNldCA9IHRoYXQtPnNjcm9sbE9mZnNldDsK
KyAgICBpZiAoYWRqdXN0bWVudCA9PSB0aGF0LT5oQWRqKQorICAgICAgICBuZXdPZmZzZXQuc2V0
V2lkdGgoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVu
dCkpKTsKKyAgICBlbHNlIGlmIChhZGp1c3RtZW50ID09IHRoYXQtPnZBZGopCisgICAgICAgIG5l
d09mZnNldC5zZXRIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFs
dWUoYWRqdXN0bWVudCkpKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBuZXdPZmZzZXQg
LSB0aGF0LT5zY3JvbGxPZmZzZXQ7CisgICAgaWYgKHNjcm9sbERlbHRhID09IEludFNpemUoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHRoYXQtPnNjcm9sbE9mZnNldCA9IG5ld09mZnNldDsKKwor
ICAgIGlmICh0aGF0LT5zY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdGhhdC0+c2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERlbHRhKTsKKyAgICBzdGF0aWNfY2Fz
dDxGcmFtZVZpZXcqPih0aGF0LT52aWV3KS0+ZnJhbWUoKS0+c2VuZFNjcm9sbEV2ZW50KCk7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnZhbHVlQ2hhbmdlZChTY3Jv
bGxiYXIqIGJhcikKK3sKKyAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KKyAg
ICBJbnRTaXplIG5ld09mZnNldCA9IHNjcm9sbE9mZnNldDsKKyAgICBpZiAoYmFyKSB7CisgICAg
ICAgIGlmIChiYXIgPT0gaEJhcikKKyAgICAgICAgICAgIG5ld09mZnNldC5zZXRXaWR0aChiYXIt
PnZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChiYXIgPT0gdkJhcikKKyAgICAgICAgICAgIG5l
d09mZnNldC5zZXRIZWlnaHQoYmFyLT52YWx1ZSgpKTsKKyAgICB9CisgICAgSW50U2l6ZSBzY3Jv
bGxEZWx0YSA9IG5ld09mZnNldCAtIHNjcm9sbE9mZnNldDsKKyAgICBpZiAoc2Nyb2xsRGVsdGEg
PT0gSW50U2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgc2Nyb2xsT2Zmc2V0ID0gbmV3T2Zm
c2V0OworCisgICAgaWYgKHNjcm9sbGJhcnNTdXBwcmVzc2VkKQorICAgICAgICByZXR1cm47CisK
KyAgICBzY3JvbGxCYWNraW5nU3RvcmUoc2Nyb2xsRGVsdGEpOworICAgIHN0YXRpY19jYXN0PEZy
YW1lVmlldyo+KHZpZXcpLT5mcmFtZSgpLT5zZW5kU2Nyb2xsRXZlbnQoKTsKK30KKworSW50UmVj
dCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAor
eworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih2aWV3KS0+d2luZG93
Q2xpcFJlY3QoZmFsc2UpOworfQorCiBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkKLSAgICA6IG1f
ZGF0YShuZXcgU2Nyb2xsVmlld1ByaXZhdGUpCisgICAgOiBtX2RhdGEobmV3IFNjcm9sbFZpZXdQ
cml2YXRlKHRoaXMpKQoge30KIAogU2Nyb2xsVmlldzo6flNjcm9sbFZpZXcoKQpAQCAtNzYsNDMg
KzI0MSw4NyBAQCBTY3JvbGxWaWV3Ojp+U2Nyb2xsVmlldygpCiAgICAgZGVsZXRlIG1fZGF0YTsK
IH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVWaWV3KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJl
Y3QsIGJvb2wgbm93KQorLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgYXNzdW1lZDoKKyAqICAgKGhh
ZGogJiYgdmFkaikgfHwgKCFoYWRqICYmICF2YWRqKQorICovCit2b2lkIFNjcm9sbFZpZXc6OnNl
dEd0a0FkanVzdG1lbnRzKEd0a0FkanVzdG1lbnQqIGhhZGosIEd0a0FkanVzdG1lbnQqIHZhZGop
CiB7Ci0gICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0
LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpIH07Ci0gICAgR2Rr
RHJhd2FibGUqIGdka2RyYXdhYmxlID0gV2lkZ2V0OjpnZGtEcmF3YWJsZSgpOwotICAgIGlmIChH
REtfSVNfV0lORE9XKGdka2RyYXdhYmxlKSkgewotICAgICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9
IEdES19XSU5ET1coZ2RrZHJhd2FibGUpOwotICAgICAgICBnZGtfd2luZG93X2ludmFsaWRhdGVf
cmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKG5vdykKLSAgICAgICAgICAg
IGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7CisgICAgaWYgKG1fZGF0
YS0+aEFkaikgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMo
R19PQkpFQ1QobV9kYXRhLT5oQWRqKSwgKGdwb2ludGVyKVNjcm9sbFZpZXdQcml2YXRlOjphZGp1
c3RtZW50Q2hhbmdlZCwgbV9kYXRhKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jKEdfT0JKRUNUKG1fZGF0YS0+dkFkaiksIChncG9pbnRlcilTY3JvbGxWaWV3
UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5nZWQsIG1fZGF0YSk7CisgICAgICAgIGdfb2JqZWN0X3Vu
cmVmKG1fZGF0YS0+aEFkaik7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZGF0YS0+dkFkaik7
CisgICAgfQorCisgICAgbV9kYXRhLT5oQWRqID0gaGFkajsKKyAgICBtX2RhdGEtPnZBZGogPSB2
YWRqOworCisgICAgaWYgKG1fZGF0YS0+aEFkaikgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fZGF0YS0+aEFkaiwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExCQUNLKFNjcm9sbFZpZXdQcml2
YXRlOjphZGp1c3RtZW50Q2hhbmdlZCksIG1fZGF0YSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9kYXRhLT52QWRqLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soU2Nyb2xsVmlld1By
aXZhdGU6OmFkanVzdG1lbnRDaGFuZ2VkKSwgbV9kYXRhKTsKKworICAgICAgICAvKgorICAgICAg
ICAgKiBkaXNhYmxlIHRoZSBzY3JvbGxiYXJzIChpZiB3ZSBoYXZlIGFueSkgYXMgdGhlIEd0a0Fk
anVzdG1lbnQgb3ZlcgorICAgICAgICAgKi8KKyAgICAgICAgbV9kYXRhLT5zZXRIYXNWZXJ0aWNh
bFNjcm9sbGJhcihmYWxzZSk7CisgICAgICAgIG1fZGF0YS0+c2V0SGFzSG9yaXpvbnRhbFNjcm9s
bGJhcihmYWxzZSk7CisKKyAgICAgICAgZ19vYmplY3RfcmVmKG1fZGF0YS0+aEFkaik7CisgICAg
ICAgIGdfb2JqZWN0X3JlZihtX2RhdGEtPnZBZGopOwogICAgIH0KKyAgICAgICAKKyAgICB1cGRh
dGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3
Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIG5vdykKIHsK
LSAgICB1cGRhdGVWaWV3KHVwZGF0ZVJlY3QsIG5vdyk7CisgICAgaWYgKHVwZGF0ZVJlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IGNv
bnRlbnRzVG9XaW5kb3codXBkYXRlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IGNvbnRh
aW5pbmdXaW5kb3dSZWN0ID0gdXBkYXRlUmVjdDsKKyAgICBjb250YWluaW5nV2luZG93UmVjdC5z
ZXRMb2NhdGlvbih3aW5kb3dQb2ludCk7CisKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgY29u
dGFpbmluZ1dpbmRvd1JlY3QueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlu
aW5nV2luZG93UmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdX
aW5kb3dSZWN0LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdX
aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBjb250YWluaW5n
V2luZG93KCktPmJpbl93aW5kb3c7CisKKyAgICBpZiAod2luZG93KQorICAgICAgICBnZGtfd2lu
ZG93X2ludmFsaWRhdGVfcmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKKworICAgIC8vIENhY2hl
IHRoZSBkaXJ0eSBzcG90LgorICAgIGFkZFRvRGlydHlSZWdpb24oY29udGFpbmluZ1dpbmRvd1Jl
Y3QpOworCisgICAgaWYgKG5vdyAmJiB3aW5kb3cpCisgICAgICAgIGdka193aW5kb3dfcHJvY2Vz
c191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlKCkK
IHsKLSAgICBBU1NFUlQoZ3RrV2lkZ2V0KCkpOwotICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhn
dGtXaWRnZXQoKSk7CisgICAgQVNTRVJUKGNvbnRhaW5pbmdXaW5kb3coKSk7CisKKyAgICBHZGtS
ZWN0YW5nbGUgcmVjdCA9IHsgMCwgMCwgbV9kYXRhLT5jb250ZW50c1NpemUud2lkdGgoKSwgbV9k
YXRhLT5jb250ZW50c1NpemUuaGVpZ2h0KCkgfTsKKyAgICBnZGtfd2luZG93X2ludmFsaWRhdGVf
cmVjdChjb250YWluaW5nV2luZG93KCktPmJpbl93aW5kb3csICZyZWN0LCB0cnVlKTsKIAotICAg
IGlmIChtX2RhdGEtPnNjcm9sbEJhcnNOZWVkVXBkYXRlKQotICAgICAgICB1cGRhdGVTY3JvbGxi
YXJzKCk7CisgICAgaWYgKG1fZGF0YS0+c2Nyb2xsQmFyc05lZWRVcGRhdGUpIHsKKyAgICAgICAg
dXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisgICAgICAgIGdlb21ldHJ5
Q2hhbmdlZCgpOworICAgIH0KIH0KIAogaW50IFNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+dmlld1BvcnRTaXplLndpZHRoKCk7CisgICAgcmV0
dXJuIHdpZHRoKCkgLSAobV9kYXRhLT52QmFyID8gbV9kYXRhLT52QmFyLT53aWR0aCgpIDogMCk7
CiB9CiAKIGludCBTY3JvbGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9kYXRhLT52aWV3UG9ydFNpemUuaGVpZ2h0KCk7CisgICAgcmV0dXJuIGhlaWdodCgpIC0g
KG1fZGF0YS0+aEJhciA/IG1fZGF0YS0+aEJhci0+aGVpZ2h0KCkgOiAwKTsKIH0KIAotLy8gUmVn
aW9uIG9mIHRoZSBjb250ZW50IGN1cnJlbnRseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydCBpbiB0
aGUgY29udGVudCB2aWV3J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiBGbG9hdFJlY3QgU2Nyb2xsVmll
dzo6dmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gRmxvYXRSZWN0KGNv
bnRlbnRzWCgpLCBjb250ZW50c1koKSwgdmlzaWJsZVdpZHRoKCksIHZpc2libGVIZWlnaHQoKSk7
CkBAIC0xMzgsMjMgKzM0NywxNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnJlc2l6ZUNvbnRlbnRzKGlu
dCB3LCBpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YS0+Y29udGVudHNTaXplID0gbmV3
U2l6ZTsKLSAgICAKLSAgICBpZiAobV9kYXRhLT5sYXlvdXQpIHsKLSAgICAgICAgZ3RrX2xheW91
dF9zZXRfc2l6ZShtX2RhdGEtPmxheW91dCwgdywgaCk7Ci0gICAgICAgIG1fZGF0YS0+c2Nyb2xs
QmFyc05lZWRVcGRhdGUgPSB0cnVlOwotICAgIH0KKyAgICBtX2RhdGEtPnNjcm9sbEJhcnNOZWVk
VXBkYXRlID0gdHJ1ZTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzWCgpIGNvbnN0CiB7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ3RrX2xheW91dF9nZXRfaGFkanVzdG1lbnQobV9k
YXRhLT5sYXlvdXQpLCAwKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0
bWVudF9nZXRfdmFsdWUoZ3RrX2xheW91dF9nZXRfaGFkanVzdG1lbnQobV9kYXRhLT5sYXlvdXQp
KSk7CisgICAgcmV0dXJuIHNjcm9sbE9mZnNldCgpLndpZHRoKCk7CiB9CiAKIGludCBTY3JvbGxW
aWV3Ojpjb250ZW50c1koKSBjb25zdAogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGd0a19s
YXlvdXRfZ2V0X3ZhZGp1c3RtZW50KG1fZGF0YS0+bGF5b3V0KSwgMCk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGd0a19sYXlvdXRfZ2V0X3Zh
ZGp1c3RtZW50KG1fZGF0YS0+bGF5b3V0KSkpOworICAgIHJldHVybiBzY3JvbGxPZmZzZXQoKS5o
ZWlnaHQoKTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzV2lkdGgoKSBjb25zdApAQCAt
MTY5LDI3ICszNzIsMjYgQEAgaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzSGVpZ2h0KCkgY29uc3QK
IAogSW50U2l6ZSBTY3JvbGxWaWV3OjpzY3JvbGxPZmZzZXQoKSBjb25zdAogewotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKG1fZGF0YSwgSW50U2l6ZSgpKTsKLSAgICByZXR1cm4gSW50U2l6ZShj
b250ZW50c1goKSwgY29udGVudHNZKCkpOworICAgIHJldHVybiBtX2RhdGEtPnNjcm9sbE9mZnNl
dDsKK30KKworSW50U2l6ZSBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xsKCkgY29uc3QKK3sKKyAg
ICBJbnRTaXplIGRlbHRhID0gKG1fZGF0YS0+Y29udGVudHNTaXplIC0gSW50U2l6ZSh2aXNpYmxl
V2lkdGgoKSwgdmlzaWJsZUhlaWdodCgpKSkgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICBkZWx0YS5j
bGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisgICAgcmV0dXJuIGRlbHRhOwogfQogCiB2b2lkIFNjcm9s
bFZpZXc6OnNjcm9sbEJ5KGludCBkeCwgaW50IGR5KQogewotICAgIEd0a0FkanVzdG1lbnQqIGhh
ZGogPSBndGtfbGF5b3V0X2dldF9oYWRqdXN0bWVudChtX2RhdGEtPmxheW91dCk7Ci0gICAgR3Rr
QWRqdXN0bWVudCogdmFkaiA9IGd0a19sYXlvdXRfZ2V0X3ZhZGp1c3RtZW50KG1fZGF0YS0+bGF5
b3V0KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKGhhZGopOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFkaik7Ci0KLSAgICBpbnQgY3VycmVudF94ID0gY29udGVudHNYKCk7Ci0gICAgaW50IGN1cnJl
bnRfeSA9IGNvbnRlbnRzWSgpOworICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0ID0gbV9kYXRhLT5z
Y3JvbGxPZmZzZXQ7CisgICAgSW50U2l6ZSBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQg
KyBJbnRTaXplKGR4LCBkeSkuc2hydW5rVG8obWF4aW11bVNjcm9sbCgpKTsKKyAgICBuZXdTY3Jv
bGxPZmZzZXQuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwogCisgICAgaWYgKG5ld1Njcm9sbE9mZnNl
dCA9PSBzY3JvbGxPZmZzZXQpCisgICAgICAgIHJldHVybjsKIAotICAgIGd0a19hZGp1c3RtZW50
X3NldF92YWx1ZShoYWRqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEFNUChjdXJy
ZW50X3grZHgsIGhhZGotPmxvd2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNQVgoMC4wLCBoYWRqLT51cHBlciAtIGhhZGotPnBhZ2Vfc2l6ZSkpKTsKLSAgICBndGtfYWRq
dXN0bWVudF9zZXRfdmFsdWUodmFkaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xB
TVAoY3VycmVudF95K2R5LCB2YWRqLT5sb3dlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTUFYKDAuMCwgdmFkai0+dXBwZXIgLSB2YWRqLT5wYWdlX3NpemUpKSk7CisgICAg
dXBkYXRlU2Nyb2xsYmFycyhuZXdTY3JvbGxPZmZzZXQpOwogfQogCiBTY3JvbGxiYXJNb2RlIFNj
cm9sbFZpZXc6OmhTY3JvbGxiYXJNb2RlKCkgY29uc3QKQEAgLTIwNCwxNiArNDA2LDE2IEBAIFNj
cm9sbGJhck1vZGUgU2Nyb2xsVmlldzo6dlNjcm9sbGJhck1vZGUKIAogdm9pZCBTY3JvbGxWaWV3
OjpzdXBwcmVzc1Njcm9sbGJhcnMoYm9vbCBzdXBwcmVzc2VkLCBib29sIHJlcGFpbnRPblN1cHBy
ZXNzKQogewotICAgIG1fZGF0YS0+c3VwcHJlc3NTY3JvbGxiYXJzID0gc3VwcHJlc3NlZDsKKyAg
ICBtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkID0gc3VwcHJlc3NlZDsKICAgICBpZiAocmVw
YWludE9uU3VwcHJlc3MpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAgICAgdXBk
YXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xsVmll
dzo6c2V0SFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSBuZXdNb2RlKQogewogICAgIGlmICht
X2RhdGEtPmhTY3JvbGxiYXJNb2RlICE9IG5ld01vZGUpIHsKICAgICAgICAgbV9kYXRhLT5oU2Ny
b2xsYmFyTW9kZSA9IG5ld01vZGU7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAg
ICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CiAgICAgfQogfQogCkBA
IC0yMjEsMTQgKzQyMywxNCBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldFZTY3JvbGxiYXJNb2RlKFNj
cm9sCiB7CiAgICAgaWYgKG1fZGF0YS0+dlNjcm9sbGJhck1vZGUgIT0gbmV3TW9kZSkgewogICAg
ICAgICBtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID0gbmV3TW9kZTsKLSAgICAgICAgdXBkYXRlU2Ny
b2xsYmFycygpOworICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0
KTsKICAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyc01vZGUoU2Nyb2xs
YmFyTW9kZSBuZXdNb2RlKQogewogICAgIG1fZGF0YS0+aFNjcm9sbGJhck1vZGUgPSBtX2RhdGEt
PnZTY3JvbGxiYXJNb2RlID0gbmV3TW9kZTsKLSAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAg
dXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xs
Vmlldzo6c2V0U3RhdGljQmFja2dyb3VuZChib29sIGZsYWcpCkBAIC0yMzYsNDggKzQzOCw1MiBA
QCB2b2lkIFNjcm9sbFZpZXc6OnNldFN0YXRpY0JhY2tncm91bmQoYm9vCiAgICAgbV9kYXRhLT5o
YXNTdGF0aWNCYWNrZ3JvdW5kID0gZmxhZzsKIH0KIAotLyoKLSAqIG9ubHkgdXBkYXRlIHRoZSBh
ZGp1c3RtZW50cywgdGhlIEd0a0xheW91dCBpcyBkb2luZyB0aGUgd29yawotICogZm9yIHVzIChh
c3N1bWluZyBpdCBpcyBpbiBhIGJveC4uLikuCi0gKi8KLXZvaWQgU2Nyb2xsVmlldzo6c2V0RnJh
bWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQordm9pZCBTY3JvbGxWaWV3OjpzZXRGcmFtZUdl
b21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld0dlb21ldHJ5KQogewotICAgIFdpZGdldDo6c2V0RnJh
bWVHZW9tZXRyeShyKTsKLSAgICB1cGRhdGVHZW9tZXRyeShyLndpZHRoKCksIHIuaGVpZ2h0KCkp
OwotfQorICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKIAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRh
dGVHZW9tZXRyeShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgbV9kYXRhLT52aWV3UG9y
dFNpemUgPSBJbnRTaXplKHdpZHRoLGhlaWdodCk7Ci19CisgICAgSW50UmVjdCBvbGRHZW9tZXRy
eSA9IGZyYW1lR2VvbWV0cnkoKTsKKyAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkobmV3R2Vv
bWV0cnkpOwogCi12b2lkIFNjcm9sbFZpZXc6OnNldEd0a1dpZGdldChHdGtMYXlvdXQqIGxheW91
dCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKEdUS19MQVlPVVQobGF5b3V0KSk7Ci0gICAgbV9k
YXRhLT5sYXlvdXQgPSBsYXlvdXQ7CisgICAgaWYgKG5ld0dlb21ldHJ5ID09IG9sZEdlb21ldHJ5
KQorICAgICAgICByZXR1cm47CiAKLSAgICBXaWRnZXQ6OnNldEd0a1dpZGdldChHVEtfV0lER0VU
KGxheW91dCkpOworICAgIGlmIChuZXdHZW9tZXRyeS53aWR0aCgpICE9IG9sZEdlb21ldHJ5Lndp
ZHRoKCkgfHwgbmV3R2VvbWV0cnkuaGVpZ2h0KCkgIT0gb2xkR2VvbWV0cnkuaGVpZ2h0KCkpIHsK
KyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisgICAgICAg
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5zZXROZWVkc0xheW91dCgpOworICAgIH0K
KworICAgIGdlb21ldHJ5Q2hhbmdlZCgpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OmFkZENoaWxk
KFdpZGdldCogdykKK3ZvaWQgU2Nyb2xsVmlldzo6YWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKIHsg
Ci0gICAgQVNTRVJUKHctPmd0a1dpZGdldCgpKTsKLSAgICBBU1NFUlQobV9kYXRhLT5sYXlvdXQp
OworICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CisgICAgY2hpbGQtPnNldENvbnRhaW5pbmdX
aW5kb3coY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICBtX2RhdGEtPmNoaWxkcmVuLmFkZChjaGls
ZCk7CiAKLSAgICBndGtfbGF5b3V0X3B1dChtX2RhdGEtPmxheW91dCwgdy0+Z3RrV2lkZ2V0KCks
IDAsIDApOworICAgIGlmIChjaGlsZC0+aW50ZXJuYWxHdGtXaWRnZXQoKSkKKyAgICAgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250YWluaW5nV2luZG93KCkpLCBjaGlsZC0+
aW50ZXJuYWxHdGtXaWRnZXQoKSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQo
V2lkZ2V0KiB3KQordm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxkKQog
ewotICAgIEFTU0VSVCh3LT5ndGtXaWRnZXQoKSk7Ci0gICAgQVNTRVJUKG1fZGF0YS0+bGF5b3V0
KTsKKyAgICBjaGlsZC0+c2V0UGFyZW50KDApOworICAgIG1fZGF0YS0+Y2hpbGRyZW4ucmVtb3Zl
KGNoaWxkKTsKIAotICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9kYXRh
LT5sYXlvdXQpLCB3LT5ndGtXaWRnZXQoKSk7CisgICAgaWYgKGNoaWxkLT5pbnRlcm5hbEd0a1dp
ZGdldCgpICYmIEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKSA9PSBHVEtfV0lER0VUKGNo
aWxkLT5pbnRlcm5hbEd0a1dpZGdldCgpKS0+cGFyZW50KQorICAgICAgICBndGtfY29udGFpbmVy
X3JlbW92ZShHVEtfQ09OVEFJTkVSKGNvbnRhaW5pbmdXaW5kb3coKSksIGNoaWxkLT5pbnRlcm5h
bEd0a1dpZGdldCgpKTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxSZWN0SW50b1ZpZXdS
ZWN1cnNpdmVseShjb25zdCBJbnRSZWN0JikKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUmVjdElu
dG9WaWV3UmVjdXJzaXZlbHkoY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIEludFBvaW50IHAobWF4KDAsIHIueCgpKSwgbWF4KDAsIHIueSgpKSk7CisgICAg
U2Nyb2xsVmlldyogdmlldyA9IHRoaXM7CisgICAgd2hpbGUgKHZpZXcpIHsKKyAgICAgICAgdmll
dy0+c2V0Q29udGVudHNQb3MocC54KCksIHAueSgpKTsKKyAgICAgICAgcC5tb3ZlKHZpZXctPngo
KSAtIHZpZXctPnNjcm9sbE9mZnNldCgpLndpZHRoKCksIHZpZXctPnkoKSAtIHZpZXctPnNjcm9s
bE9mZnNldCgpLmhlaWdodCgpKTsKKyAgICAgICAgdmlldyA9IHN0YXRpY19jYXN0PFNjcm9sbFZp
ZXcqPih2aWV3LT5wYXJlbnQoKSk7CisgICAgfQogfQogCiBib29sIFNjcm9sbFZpZXc6OmluV2lu
ZG93KCkgY29uc3QKQEAgLTI4Niw0OCArNDkyLDM2MCBAQCBib29sIFNjcm9sbFZpZXc6OmluV2lu
ZG93KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp3aGVl
bEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYpCit2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQo
UGxhdGZvcm1XaGVlbEV2ZW50JiBlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8g
RGV0ZXJtaW5lIGhvdyBtdWNoIHdlIHdhbnQgdG8gc2Nyb2xsLiAgSWYgd2UgY2FuIG1vdmUgYXQg
YWxsLCB3ZSB3aWxsIGFjY2VwdCB0aGUgZXZlbnQuCisgICAgSW50U2l6ZSBtYXhTY3JvbGxEZWx0
YSA9IG1heGltdW1TY3JvbGwoKTsKKyAgICBpZiAoKGUuZGVsdGFYKCkgPCAwICYmIG1heFNjcm9s
bERlbHRhLndpZHRoKCkgPiAwKSB8fAorICAgICAgICAoZS5kZWx0YVgoKSA+IDAgJiYgc2Nyb2xs
T2Zmc2V0KCkud2lkdGgoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpIDwgMCAmJiBtYXhT
Y3JvbGxEZWx0YS5oZWlnaHQoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpID4gMCAmJiBz
Y3JvbGxPZmZzZXQoKS5oZWlnaHQoKSA+IDApKQorICAgICAgICBlLmFjY2VwdCgpOworCisgICAg
c2Nyb2xsQnkoc3RhdGljX2Nhc3Q8aW50PihlLmRlbHRhWCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihl
LmRlbHRhWSgpKSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCit2
b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9m
ZnNldCkKIHsKLSAgICBHdGtBZGp1c3RtZW50KiBoYWRqID0gZ3RrX2xheW91dF9nZXRfaGFkanVz
dG1lbnQobV9kYXRhLT5sYXlvdXQpOwotICAgIEd0a0FkanVzdG1lbnQqIHZhZGogPSBndGtfbGF5
b3V0X2dldF92YWRqdXN0bWVudChtX2RhdGEtPmxheW91dCk7CisgICAgLy8gRG9uJ3QgYWxsb3cg
cmUtZW50cmFuY3kgaW50byB0aGlzIGZ1bmN0aW9uLgorICAgIGlmIChtX2RhdGEtPmluVXBkYXRl
U2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgZ19yZXR1cm5faWZfZmFpbChoYWRq
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhZGopOwotICAgIAotICAgIGhhZGotPnBhZ2Vfc2l6
ZSA9IHZpc2libGVXaWR0aCgpOwotICAgIGhhZGotPnN0ZXBfaW5jcmVtZW50ID0gMTM7CisgICAg
Ly8gRklYTUU6IFRoaXMgY29kZSBpcyBoZXJlIHNvIHdlIGRvbid0IGhhdmUgdG8gZm9yayBGcmFt
ZVZpZXcuaC8uY3BwLgorICAgIC8vIEluIHRoZSBlbmQsIEZyYW1lVmlldyBzaG91bGQganVzdCBt
ZXJnZSB3aXRoIFNjcm9sbFZpZXcuCisgICAgaWYgKHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmll
dyo+KHRoaXMpLT5mcmFtZSgpLT5wcm9oaWJpdHNTY3JvbGxpbmcoKSkKKyAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIHZhZGotPnBhZ2Vfc2l6ZSA9IHZpc2libGVIZWlnaHQoKTsKLSAgICB2YWRq
LT5zdGVwX2luY3JlbWVudCA9IDEzOworICAgIG1fZGF0YS0+aW5VcGRhdGVTY3JvbGxiYXJzID0g
dHJ1ZTsKKworICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBtX2RhdGEtPnZCYXI7Cisg
ICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gbV9kYXRhLT5oQmFyOworICAgIGJvb2wg
b2xkSGFzVmVydGljYWwgPSBoYXNWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBib29sIG9sZEhhc0hv
cml6b250YWwgPSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgIFNjcm9sbGJhck1vZGUgaFNj
cm9sbCA9IG1fZGF0YS0+aFNjcm9sbGJhck1vZGU7CisgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xs
ID0gbV9kYXRhLT52U2Nyb2xsYmFyTW9kZTsKICAgICAKLSAgICBndGtfYWRqdXN0bWVudF9jaGFu
Z2VkKGhhZGopOwotICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQoaGFkaik7CisgICAg
LyoKKyAgICAgKiBJdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hvIGlzIGdvaW5nIHRvIHJlbW92
ZSBzcGFjZSBmcm9tIG91ciB2aWV3cG9ydC4gRWl0aGVyCisgICAgICogd2UgZG8gaXQgYnkgY3Jl
YXRpbmcgYSBQbGF0Zm9ybVNjcm9sbGJhciBvciB0aGUgR3RrV2lkZ2V0IGVtYmVkZGluZyB1cyBp
cyBnb2luZyB0byBkbworICAgICAqIHRoYXQgYnkgY2FsbGluZyBzZXRGcmFtZUdlb21ldHJ5Lgor
ICAgICAqLworICAgIGNvbnN0IGludCBjVmVydGljYWxXaWR0aCA9IFBsYXRmb3JtU2Nyb2xsYmFy
Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CisgICAgY29uc3QgaW50IGNIb3Jpem9udGFsSGVp
Z2h0ID0gUGxhdGZvcm1TY3JvbGxiYXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKKwor
ICAgIGZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisgICAgICAgIGJvb2wg
c2Nyb2xsc1ZlcnRpY2FsbHk7CisgICAgICAgIGJvb2wgc2Nyb2xsc0hvcml6b250YWxseTsKKwor
ICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgKGhTY3JvbGwgPT0g
U2Nyb2xsYmFyQXV0byB8fCB2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8pKSB7CisgICAgICAgICAg
ICAvLyBEbyBhIGxheW91dCBpZiBwZW5kaW5nIGJlZm9yZSBjaGVja2luZyBpZiBzY3JvbGxiYXJz
IGFyZSBuZWVkZWQuCisgICAgICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxiYXIgIT0gb2xk
SGFzVmVydGljYWwgfHwgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciAhPSBvbGRIYXNIb3Jpem9udGFs
KQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5sYXlvdXQo
KTsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5ID0gKHZTY3Jv
bGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYg
Y29udGVudHNIZWlnaHQoKSA+IGhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxzVmVy
dGljYWxseSkKKyAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0gKGhTY3JvbGwg
PT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYgY29u
dGVudHNXaWR0aCgpICsgY1ZlcnRpY2FsV2lkdGggPiB3aWR0aCgpKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBT
Y3JvbGxiYXJBbHdheXNPbikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50
c1dpZHRoKCkgPiB3aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsc0hvcml6b250
YWxseSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9
PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250
ZW50c0hlaWdodCgpICsgY0hvcml6b250YWxIZWlnaHQgPiBoZWlnaHQoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzY3JvbGxzSG9yaXpv
bnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykgPyBoYXNIb3Jpem9udGFsU2Nyb2xs
YmFyIDogKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pOworICAgICAgICAgICAgc2Nyb2xs
c1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvKSA/IGhhc1ZlcnRpY2FsU2Ny
b2xsYmFyIDogKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxiYXIgIT0gc2Nyb2xsc1ZlcnRpY2Fs
bHkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xs
c1ZlcnRpY2FsbHkpOworICAgICAgICAgICAgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxz
VmVydGljYWxseTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYXNIb3Jpem9udGFsU2Nyb2xs
YmFyICE9IHNjcm9sbHNIb3Jpem9udGFsbHkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFz
SG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxzSG9yaXpvbnRhbGx5KTsKKyAgICAgICAgICAgIGhh
c0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxzSG9yaXpvbnRhbGx5OworICAgICAgICB9Cisg
ICAgfQogICAgIAotICAgIGd0a19hZGp1c3RtZW50X2NoYW5nZWQodmFkaik7Ci0gICAgZ3RrX2Fk
anVzdG1lbnRfdmFsdWVfY2hhbmdlZCh2YWRqKTsKKyAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChh
bmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCisgICAgSW50U2l6ZSBtYXhTY3JvbGxQb3NpdGlvbihj
b250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSwgY29udGVudHNIZWlnaHQoKSAtIHZpc2li
bGVIZWlnaHQoKSk7CisgICAgSW50U2l6ZSBzY3JvbGwgPSBkZXNpcmVkT2Zmc2V0LnNocnVua1Rv
KG1heFNjcm9sbFBvc2l0aW9uKTsKKyAgICBzY3JvbGwuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwor
CisKKyAKKyAgICBpZiAobV9kYXRhLT5oQWRqKSB7CisgICAgICAgIG1fZGF0YS0+aEFkai0+cGFn
ZV9zaXplID0gdmlzaWJsZVdpZHRoKCk7CisgICAgICAgIG1fZGF0YS0+aEFkai0+c3RlcF9pbmNy
ZW1lbnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50OworICAgICAgICBtX2RhdGEtPmhBZGotPnVw
cGVyID0gY29udGVudHNXaWR0aCgpOworICAgICAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKG1f
ZGF0YS0+aEFkaik7CisKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0LndpZHRoKCkg
IT0gc2Nyb2xsLndpZHRoKCkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+aEFkai0+dmFsdWUgPSBz
Y3JvbGwud2lkdGgoKTsKKyAgICAgICAgICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQo
bV9kYXRhLT5oQWRqKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9kYXRhLT5oQmFyKSB7
CisgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHZpc2libGVXaWR0aCgpOworICAgICAgICBtX2Rh
dGEtPmhCYXItPnNldEVuYWJsZWQoY29udGVudHNXaWR0aCgpID4gY2xpZW50V2lkdGgpOworICAg
ICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50V2lkdGggLSBQQUdFX0tFRVApOworICAgICAgICBp
ZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudFdpZHRoOworICAgICAgICBJbnRSZWN0
IG9sZFJlY3QobV9kYXRhLT5oQmFyLT5mcmFtZUdlb21ldHJ5KCkpOworICAgICAgICBJbnRSZWN0
IGhCYXJSZWN0ID0gSW50UmVjdCgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWlnaHQoKSAtIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpZHRoKCkgLSAobV9kYXRhLT52QmFyID8gbV9kYXRhLT52QmFyLT53
aWR0aCgpIDogMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+
aEJhci0+aGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPmhCYXItPnNldFJlY3QoaEJhclJlY3Qp
OworICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAh
PSBtX2RhdGEtPmhCYXItPmZyYW1lR2VvbWV0cnkoKSkKKyAgICAgICAgICAgIG1fZGF0YS0+aEJh
ci0+aW52YWxpZGF0ZSgpOworCisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVz
c2VkKQorICAgICAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0
cnVlKTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdGVwcyhMSU5FX1NURVAsIHBhZ2VTdGVw
KTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBjb250
ZW50c1dpZHRoKCkpOworICAgICAgICBtX2RhdGEtPmhCYXItPnNldFZhbHVlKHNjcm9sbC53aWR0
aCgpKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpCisgICAgICAg
ICAgICBtX2RhdGEtPmhCYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsgCisgICAg
fSAKKworICAgIGlmIChtX2RhdGEtPnZBZGopIHsKKyAgICAgICAgbV9kYXRhLT52QWRqLT5wYWdl
X3NpemUgPSB2aXNpYmxlSGVpZ2h0KCk7CisgICAgICAgIG1fZGF0YS0+dkFkai0+c3RlcF9pbmNy
ZW1lbnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50OworICAgICAgICBtX2RhdGEtPnZBZGotPnVw
cGVyID0gY29udGVudHNIZWlnaHQoKTsKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRfY2hhbmdlZCht
X2RhdGEtPnZBZGopOworCisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbE9mZnNldC5oZWlnaHQo
KSAhPSBzY3JvbGwuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+dkFkai0+dmFsdWUg
PSBzY3JvbGwuaGVpZ2h0KCk7CisgICAgICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFu
Z2VkKG1fZGF0YS0+dkFkaik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fZGF0YS0+dkJh
cikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gdmlzaWJsZUhlaWdodCgpOworICAgICAg
ICBtX2RhdGEtPnZCYXItPnNldEVuYWJsZWQoY29udGVudHNIZWlnaHQoKSA+IGNsaWVudEhlaWdo
dCk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRIZWlnaHQgLSBQQUdFX0tFRVApOwor
ICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKKyAgICAg
ICAgSW50UmVjdCBvbGRSZWN0KG1fZGF0YS0+dkJhci0+ZnJhbWVHZW9tZXRyeSgpKTsKKyAgICAg
ICAgSW50UmVjdCB2QmFyUmVjdCA9IEludFJlY3Qod2lkdGgoKSAtIG1fZGF0YS0+dkJhci0+d2lk
dGgoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSAobV9kYXRhLT5oQmFyID8gbV9k
YXRhLT5oQmFyLT5oZWlnaHQoKSA6IDApKTsKKyAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRSZWN0
KHZCYXJSZWN0KTsKKyAgICAgICAgaWYgKCFtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkICYm
IG9sZFJlY3QgIT0gbV9kYXRhLT52QmFyLT5mcmFtZUdlb21ldHJ5KCkpCisgICAgICAgICAgICBt
X2RhdGEtPnZCYXItPmludmFsaWRhdGUoKTsKKworICAgICAgICBpZiAobV9kYXRhLT5zY3JvbGxi
YXJzU3VwcHJlc3NlZCkKKyAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0U3VwcHJlc3NJbnZh
bGlkYXRpb24odHJ1ZSk7CisgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0U3RlcHMoTElORV9TVEVQ
LCBwYWdlU3RlcCk7CisgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRI
ZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPnZCYXItPnNldFZhbHVl
KHNjcm9sbC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVz
c2VkKQorICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihm
YWxzZSk7CisgICAgfQogCi0gICAgbV9kYXRhLT5zY3JvbGxCYXJzTmVlZFVwZGF0ZSA9IGZhbHNl
OworICAgIGlmIChvbGRIYXNWZXJ0aWNhbCAhPSAobV9kYXRhLT52QmFyICE9IDApIHx8IG9sZEhh
c0hvcml6b250YWwgIT0gKG1fZGF0YS0+aEJhciAhPSAwKSkKKyAgICAgICAgZ2VvbWV0cnlDaGFu
Z2VkKCk7CisKKyAgICAvLyBTZWUgaWYgb3VyIG9mZnNldCBoYXMgY2hhbmdlZCBpbiBhIHNpdHVh
dGlvbiB3aGVyZSB3ZSBtaWdodCBub3QgaGF2ZSBzY3JvbGxiYXJzLgorICAgIC8vIFRoaXMgY2Fu
IGhhcHBlbiB3aGVuIGVkaXRpbmcgYSBib2R5IHdpdGggb3ZlcmZsb3c6aGlkZGVuIGFuZCBzY3Jv
bGxpbmcgdG8gcmV2ZWFsIHNlbGVjdGlvbi4KKyAgICAvLyBJdCBjYW4gYWxzbyBoYXBwZW4gd2hl
biBtYXhpbWl6aW5nIGEgd2luZG93IHRoYXQgaGFzIHNjcm9sbGJhcnMgKGJ1dCB0aGUgbmV3IG1h
eGltaXplZCByZXN1bHQKKyAgICAvLyBkb2VzIG5vdCkuCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0
YSA9IHNjcm9sbCAtIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OworICAgIGlmIChzY3JvbGxEZWx0YSAh
PSBJbnRTaXplKCkpIHsKKyAgICAgICBtX2RhdGEtPnNjcm9sbE9mZnNldCA9IHNjcm9sbDsKKyAg
ICAgICBtX2RhdGEtPnNjcm9sbEJhY2tpbmdTdG9yZShzY3JvbGxEZWx0YSk7CisgICAgfQorCisg
ICAgbV9kYXRhLT5pblVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZTsKIH0KIAotSW50UG9pbnQgU2Ny
b2xsVmlldzo6d2luZG93VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CitJ
bnRQb2ludCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiB3aW5k
b3dQb2ludCkgY29uc3QKIHsgCi0gICAgcmV0dXJuIHBvaW50OworICAgIEludFBvaW50IHZpZXdQ
b2ludCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dQb2ludCk7CisgICAgcmV0
dXJuIHZpZXdQb2ludCArIHNjcm9sbE9mZnNldCgpOwogfQogCi1JbnRQb2ludCBTY3JvbGxWaWV3
Ojpjb250ZW50c1RvV2luZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK0ludFBvaW50
IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3coY29uc3QgSW50UG9pbnQmIGNvbnRlbnRzUG9p
bnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHBvaW50OworICAgIEludFBvaW50IHZpZXdQb2ludCA9
IGNvbnRlbnRzUG9pbnQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICByZXR1cm4gY29udmVydFRvQ29u
dGFpbmluZ1dpbmRvdyh2aWV3UG9pbnQpOyAgCiB9CiAKIFBsYXRmb3JtU2Nyb2xsYmFyKiBTY3Jv
bGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91
c2VFdmVudCkKIHsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBJbnRQb2ludCB2aWV3UG9p
bnQgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cobW91c2VFdmVudC5wb3MoKSk7CisgICAg
aWYgKG1fZGF0YS0+aEJhciAmJiBtX2RhdGEtPmhCYXItPmZyYW1lR2VvbWV0cnkoKS5jb250YWlu
cyh2aWV3UG9pbnQpKQorICAgICAgICByZXR1cm4gbV9kYXRhLT5oQmFyLmdldCgpOworICAgIGlm
IChtX2RhdGEtPnZCYXIgJiYgbV9kYXRhLT52QmFyLT5mcmFtZUdlb21ldHJ5KCkuY29udGFpbnMo
dmlld1BvaW50KSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dkJhci5nZXQoKTsKICAgICByZXR1
cm4gMDsKIH0KIAorSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udmVydENoaWxkVG9TZWxmKGNvbnN0
IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQ
b2ludCBuZXdQb2ludCA9IHBvaW50OworICAgIGlmIChjaGlsZCAhPSBtX2RhdGEtPmhCYXIgJiYg
Y2hpbGQgIT0gbV9kYXRhLT52QmFyKQorICAgICAgICBuZXdQb2ludCA9IHBvaW50IC0gc2Nyb2xs
T2Zmc2V0KCk7CisgICAgcmV0dXJuIFdpZGdldDo6Y29udmVydENoaWxkVG9TZWxmKGNoaWxkLCBu
ZXdQb2ludCk7Cit9CisKK0ludFBvaW50IFNjcm9sbFZpZXc6OmNvbnZlcnRTZWxmVG9DaGlsZChj
b25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAg
SW50UG9pbnQgbmV3UG9pbnQgPSBwb2ludDsKKyAgICBpZiAoY2hpbGQgIT0gbV9kYXRhLT5oQmFy
ICYmIGNoaWxkICE9IG1fZGF0YS0+dkJhcikKKyAgICAgICAgbmV3UG9pbnQgPSBwb2ludCArIHNj
cm9sbE9mZnNldCgpOworICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRTZWxmVG9DaGlsZChjaGls
ZCwgbmV3UG9pbnQpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBj
b2RlIGlzIGhlcmUgc28gd2UgZG9uJ3QgaGF2ZSB0byBmb3JrIEZyYW1lVmlldy5oLy5jcHAuCisg
ICAgLy8gSW4gdGhlIGVuZCwgRnJhbWVWaWV3IHNob3VsZCBqdXN0IG1lcmdlIHdpdGggU2Nyb2xs
Vmlldy4KKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CisKKyAgICBpZiAoY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IGRvY3VtZW50
RGlydHlSZWN0ID0gcmVjdDsKKyAgICBkb2N1bWVudERpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVH
ZW9tZXRyeSgpKTsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKworICAgIGNvbnRleHQtPnRyYW5z
bGF0ZSh4KCksIHkoKSk7CisgICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZSgteCgpLCAteSgpKTsK
KworICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtY29udGVudHNYKCksIC1jb250ZW50c1koKSk7Cisg
ICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZShjb250ZW50c1goKSwgY29udGVudHNZKCkpOworCisg
ICAgY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCgpKSk7
CisgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcyktPmZyYW1lKCktPnBhaW50
KGNvbnRleHQsIGRvY3VtZW50RGlydHlSZWN0KTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisK
KyAgICAvLyBOb3cgcGFpbnQgdGhlIHNjcm9sbGJhcnMuCisgICAgaWYgKCFtX2RhdGEtPnNjcm9s
bGJhcnNTdXBwcmVzc2VkICYmIChtX2RhdGEtPmhCYXIgfHwgbV9kYXRhLT52QmFyKSkgeworICAg
ICAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsVmlld0RpcnR5UmVj
dCA9IHJlY3Q7CisgICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QuaW50ZXJzZWN0KGZyYW1lR2Vv
bWV0cnkoKSk7CisgICAgICAgIC8qCisgICAgICAgICAqIFdlIGRvbid0IG5lZWQgdG8gdHJhbnNs
YXRlIHRoZSBjb250ZXh0IGFzIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRSZWN0IG1ha2VzIHN1cmUg
dGhlIHNjcm9sbGJhcgorICAgICAgICAgKiBpcyBhdCB0aGUgcmlnaHQgc3BvdC4KKyAgICAgICAg
ICovCisgICAgICAgIGlmIChtX2RhdGEtPmhCYXIpCisgICAgICAgICAgICBtX2RhdGEtPmhCYXIt
PnBhaW50KGNvbnRleHQsIHNjcm9sbFZpZXdEaXJ0eVJlY3QpOworICAgICAgICBpZiAobV9kYXRh
LT52QmFyKQorICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5wYWludChjb250ZXh0LCBzY3JvbGxW
aWV3RGlydHlSZWN0KTsKKworICAgICAgICAvKgorICAgICAgICAgKiBGSVhNRTogVE9ETzogQ2hl
Y2sgaWYgdGhhdCB3b3JrcyB3aXRoIFJUTAorICAgICAgICAgKi8KKyAgICAgICAgY29udGV4dC0+
dHJhbnNsYXRlKHgoKSwgeSgpKTsKKyAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5tb3ZlKC14
KCksIC15KCkpOworICAgICAgICAvLyBGaWxsIHRoZSBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUu
CisgICAgICAgIEludFJlY3QgaENvcm5lcjsKKyAgICAgICAgaWYgKG1fZGF0YS0+aEJhciAmJiB3
aWR0aCgpIC0gbV9kYXRhLT5oQmFyLT53aWR0aCgpID4gMCkgeworICAgICAgICAgICAgaENvcm5l
ciA9IEludFJlY3QobV9kYXRhLT5oQmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVpZ2h0KCkgLSBtX2RhdGEtPmhCYXItPmhlaWdodCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIG1fZGF0YS0+aEJhci0+d2lkdGgoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCkpOworICAgICAg
ICAgICAgaWYgKGhDb3JuZXIuaW50ZXJzZWN0cyhzY3JvbGxWaWV3RGlydHlSZWN0KSkKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChoQ29ybmVyLCBDb2xvcjo6d2hpdGUpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fZGF0YS0+dkJhciAmJiBoZWlnaHQoKSAtIG1fZGF0YS0+
dkJhci0+aGVpZ2h0KCkgPiAwKSB7CisgICAgICAgICAgICBJbnRSZWN0IHZDb3JuZXIod2lkdGgo
KSAtIG1fZGF0YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2RhdGEtPnZCYXItPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0
YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAt
IG1fZGF0YS0+dkJhci0+aGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKHZDb3JuZXIgIT0gaENv
cm5lciAmJiB2Q29ybmVyLmludGVyc2VjdHMoc2Nyb2xsVmlld0RpcnR5UmVjdCkpCisgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QodkNvcm5lciwgQ29sb3I6OndoaXRlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9Cit9CisKKy8qCisgKiB1
cGRhdGUgY2hpbGRyZW4gYnV0IG5vciBvdXIgc2Nyb2xsYmFycy4gVGhleSBzaG91bGQgbm90IHNj
cm9sbCB3aGVuCisgKiB3ZSBzY3JvbGwgb3VyIGNvbnRlbnQuCisgKi8KK3ZvaWQgU2Nyb2xsVmll
dzo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFdpZGdldCo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX2RhdGEtPmNoaWxkcmVuLmVuZCgpOworICAgIGZvciAoSGFzaFNl
dDxXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IG1fZGF0YS0+Y2hpbGRyZW4uYmVn
aW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKKyAgICAgICAgKCpjdXJyZW50KS0+Z2Vv
bWV0cnlDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIGlm
ICAoKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93bikgJiYg
bV9kYXRhLT52QmFyKQorICAgICAgICBtX2RhdGEtPnZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5KTsKKyAgICBlbHNlIGlmIChtX2RhdGEtPmhCYXIpCisgICAgICAgIG1fZGF0YS0+
aEJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworfQorCitJbnRSZWN0IFNjcm9s
bFZpZXc6OndpbmRvd1Jlc2l6ZXJSZWN0KCkKK3sKKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7
CisgICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxjb25zdCBGcmFt
ZVZpZXcqPih0aGlzKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWVWaWV3LT5mcmFtZSgpID8gZnJh
bWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gcGFnZS0+Y2hyb21lKCktPndpbmRvd1Jlc2l6ZXJS
ZWN0KCk7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cmVzaXplck92ZXJsYXBzQ29udGVudCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtX2RhdGEtPnNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXI7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6YWRqdXN0T3ZlcmxhcHBpbmdTY3JvbGxiYXJDb3VudChpbnQg
b3ZlcmxhcERlbHRhKQoreworICAgIGludCBvbGRDb3VudCA9IG1fZGF0YS0+c2Nyb2xsYmFyc0F2
b2lkaW5nUmVzaXplcjsKKyAgICBtX2RhdGEtPnNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXIgKz0g
b3ZlcmxhcERlbHRhOworICAgIGlmIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNGcmFtZVZpZXco
KSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5hZGp1c3RPdmVy
bGFwcGluZ1Njcm9sbGJhckNvdW50KG92ZXJsYXBEZWx0YSk7CisgICAgZWxzZSBpZiAoIW1fZGF0
YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpIHsKKyAgICAgICAgLy8gSWYgd2Ugd2VudCBmcm9tIG4g
dG8gMCBvciBmcm9tIDAgdG8gbiBhbmQgd2UncmUgdGhlIG91dGVybW9zdCB2aWV3LAorICAgICAg
ICAvLyB3ZSBuZWVkIHRvIGludmFsaWRhdGUgdGhlIHdpbmRvd1Jlc2l6ZXJSZWN0KCksIHNpbmNl
IGl0IHdpbGwgbm93IG5lZWQgdG8gcGFpbnQKKyAgICAgICAgLy8gZGlmZmVyZW50bHkuCisgICAg
ICAgIGlmIChvbGRDb3VudCA+IDAgJiYgbV9kYXRhLT5zY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVy
ID09IDAgfHwKKyAgICAgICAgICAgIG9sZENvdW50ID09IDAgJiYgbV9kYXRhLT5zY3JvbGxiYXJz
QXZvaWRpbmdSZXNpemVyID4gMCkKKyAgICAgICAgICAgIGludmFsaWRhdGVSZWN0KHdpbmRvd1Jl
c2l6ZXJSZWN0KCkpOworICAgIH0KK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogcGFyZW50VmlldykKK3sKKyAgICBpZiAoIXBhcmVudFZpZXcgJiYgbV9kYXRhLT5z
Y3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyICYmIHBhcmVudCgpICYmIHBhcmVudCgpLT5pc0ZyYW1l
VmlldygpKQorICAgICAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmFkanVz
dE92ZXJsYXBwaW5nU2Nyb2xsYmFyQ291bnQoZmFsc2UpOworICAgIFdpZGdldDo6c2V0UGFyZW50
KHBhcmVudFZpZXcpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OmFkZFRvRGlydHlSZWdpb24oY29u
c3QgSW50UmVjdCYgY29udGFpbmluZ1dpbmRvd1JlY3QpCit7CisgICAgQVNTRVJUKGlzRnJhbWVW
aWV3KCkpOworICAgIGNvbnN0IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRnJhbWVWaWV3Kj4odGhpcyk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUo
KSA/IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpIDogMDsKKyAgICBpZiAoIXBhZ2UpCisgICAg
ICAgIHJldHVybjsKKyAgICBwYWdlLT5jaHJvbWUoKS0+YWRkVG9EaXJ0eVJlZ2lvbihjb250YWlu
aW5nV2luZG93UmVjdCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQmFja2luZ1N0b3Jl
KGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50
UmVjdCYgY2xpcFJlY3QpCit7CisgICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOworICAgIGNvbnN0
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhp
cyk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmlldy0+ZnJh
bWUoKS0+cGFnZSgpIDogMDsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBw
YWdlLT5jaHJvbWUoKS0+c2Nyb2xsQmFja2luZ1N0b3JlKGR4LCBkeSwgc2Nyb2xsVmlld1JlY3Qs
IGNsaXBSZWN0KTsKK30KKwordm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUoKQor
eworICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKKyAgICBjb25zdCBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHRoaXMpOworICAgIFBhZ2UqIHBh
Z2UgPSBmcmFtZVZpZXctPmZyYW1lKCkgPyBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKSA6IDA7
CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgcGFnZS0+Y2hyb21lKCktPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNiBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCiAj
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnRHZGsuaCIKQEAgLTE2Myw3ICsxNjIsNiBAQCBTdHJpbmcgRmlsZUNob29zZXI6
OmJhc2VuYW1lRm9yV2lkdGgoY29uCiBDb2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsg
cmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFu
Z2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KIAotdm9pZCBGcmFtZTo6c2V0TmVlZHNSZWFwcGx5
U3R5bGVzKCkgeyB9CiAKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJl
c291cmNlUmVxdWVzdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiBib29s
IFJlc291cmNlSGFuZGxlOjpsb2Fkc0Jsb2NrZWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBmYWxzZTsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAJKHJl
dmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDI3ICszMiwyNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50KiBldmVu
dCkKK1BsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xs
KiBldmVudCkKIHsKICAgICBtX2RlbHRhWCA9IDA7CiAgICAgbV9kZWx0YVkgPSAwOwogCi0gICAg
aWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfVVApCisgICAgaWYgKGV2
ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9VUCkKICAgICAgICAgbV9kZWx0YVkgPSAtMTIw
OwotICAgIGVsc2UgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfTEVG
VCkKKyAgICBlbHNlIGlmIChldmVudC0+ZGlyZWN0aW9uID09IEdES19TQ1JPTExfTEVGVCkKICAg
ICAgICAgbV9kZWx0YVggPSAtMTIwOwotICAgIGVsc2UgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0
aW9uID09IEdES19TQ1JPTExfUklHSFQpCisgICAgZWxzZSBpZiAoZXZlbnQtPmRpcmVjdGlvbiA9
PSBHREtfU0NST0xMX1JJR0hUKQogICAgICAgICBtX2RlbHRhWCA9IDEyMDsKICAgICBlbHNlCiAg
ICAgICAgIG1fZGVsdGFZID0gMTIwOwogCi0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQp
ZXZlbnQtPnNjcm9sbC54LCAoaW50KWV2ZW50LT5zY3JvbGwueSk7Ci0gICAgbV9nbG9iYWxQb3Np
dGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPnNjcm9sbC54X3Jvb3QsIChpbnQpZXZlbnQtPnNj
cm9sbC55X3Jvb3QpOworICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54LCAo
aW50KWV2ZW50LT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVu
dC0+eF9yb290LCAoaW50KWV2ZW50LT55X3Jvb3QpOwogICAgIG1faXNBY2NlcHRlZCA9IGZhbHNl
OwotICAgIG1fc2hpZnRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX1NISUZUX01BU0s7
Ci0gICAgbV9jdHJsS2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19DT05UUk9MX01BU0s7
Ci0gICAgbV9hbHRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDFfTUFTSzsKLSAg
ICBtX21ldGFLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDJfTUFTSzsKKyAgICBt
X3NoaWZ0S2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0s7CisgICAgbV9jdHJsS2V5
ID0gZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKKyAgICBtX2FsdEtleSA9IGV2ZW50
LT5zdGF0ZSAmIEdES19NT0QxX01BU0s7CisgICAgbV9tZXRhS2V5ID0gZXZlbnQtPnN0YXRlICYg
R0RLX01PRDJfTUFTSzsKICAgICBtX2lzQ29udGludW91cyA9IGZhbHNlOwogfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tIAogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMzEsMTEgKzMxLDEyIEBA
CiAKICNpbmNsdWRlICJDdXJzb3IuaCIKICNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRnJh
bWVHZGsuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCiAK
ICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgpAQCAtNDcsOCArNDgs
MTkgQEAgcHVibGljOgogICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZTsKICAgICBHdGtXaWRnZXQq
IHdpZGdldDsKICAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKLSAgICBJbnRSZWN0IGdlb21ldHJ5
OwotICAgIEZvbnQgZm9udDsKKyAgICBJbnRSZWN0IGZyYW1lUmVjdDsKKworICAgIFNjcm9sbFZp
ZXcqIHBhcmVudDsKKyAgICBXZWJLaXRHdGtQYWdlKiBjb250YWluaW5nV2luZG93OworICAgIGJv
b2wgc3VwcHJlc3NJbnZhbGlkYXRpb247CisgICAgYm9vbCBpc1Njcm9sbFZpZXdDb250cm9sOwor
CisgICAgR2RrRHJhd2FibGUqIGdka0RyYXdhYmxlKCkKKyAgICB7CisgICAgICAgIGlmICghZHJh
d2FibGUgJiYgd2lkZ2V0KQorICAgICAgICAgICAgZHJhd2FibGUgPSB3aWRnZXQtPndpbmRvdzsK
KyAgICAgICAgcmV0dXJuIGRyYXdhYmxlOworICAgIH0KIH07CiAKIFdpZGdldDo6V2lkZ2V0KCkK
QEAgLTU2LDI3ICs2OCwyMCBAQCBXaWRnZXQ6OldpZGdldCgpCiB7CiAgICAgZGF0YS0+ZHJhd2Fi
bGUgPSAwOwogICAgIGRhdGEtPndpZGdldCA9IDA7CisgICAgZGF0YS0+Y2xpZW50ID0gMDsKKyAg
ICBkYXRhLT5wYXJlbnQgPSAwOworICAgIGRhdGEtPmNvbnRhaW5pbmdXaW5kb3cgPSAwOworICAg
IGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uID0gZmFsc2U7CisgICAgZGF0YS0+aXNTY3JvbGxW
aWV3Q29udHJvbCA9IGZhbHNlOwogfQogCi1XaWRnZXQ6OldpZGdldChHdGtXaWRnZXQqIHdpZGdl
dCkKLSAgICA6IGRhdGEobmV3IFdpZGdldFByaXZhdGUpCi17Ci0gICAgc2V0R3RrV2lkZ2V0KHdp
ZGdldCk7Ci19Ci0KLUdka0RyYXdhYmxlKiBXaWRnZXQ6Omdka0RyYXdhYmxlKCkgY29uc3QKLXsK
LSAgICBpZiAoIWRhdGEtPmRyYXdhYmxlICYmIGRhdGEtPndpZGdldCkKLSAgICAgICAgZGF0YS0+
ZHJhd2FibGUgPSBHVEtfSVNfTEFZT1VUKGRhdGEtPndpZGdldCkgPyBHVEtfTEFZT1VUKGRhdGEt
PndpZGdldCktPmJpbl93aW5kb3cgOiBkYXRhLT53aWRnZXQtPndpbmRvdzsKLSAgICByZXR1cm4g
ZGF0YS0+ZHJhd2FibGU7Ci19CiAKLUd0a1dpZGdldCogV2lkZ2V0OjpndGtXaWRnZXQoKSBjb25z
dAorR3RrV2lkZ2V0KiBXaWRnZXQ6OmludGVybmFsR3RrV2lkZ2V0KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gZGF0YS0+d2lkZ2V0OwogfQogCi12b2lkIFdpZGdldDo6c2V0R3RrV2lkZ2V0KEd0a1dp
ZGdldCogd2lkZ2V0KQordm9pZCBXaWRnZXQ6OnNldEludGVybmFsR3RrV2lkZ2V0KEd0a1dpZGdl
dCogd2lkZ2V0KQogewogICAgIGRhdGEtPmRyYXdhYmxlID0gMDsKICAgICBkYXRhLT53aWRnZXQg
PSB3aWRnZXQ7CkBAIC04Nyw2ICs5MiwxNiBAQCBXaWRnZXQ6On5XaWRnZXQoKQogICAgIGRlbGV0
ZSBkYXRhOwogfQogCit2b2lkIFdpZGdldDo6c2V0Q29udGFpbmluZ1dpbmRvdyhXZWJLaXRHdGtQ
YWdlKiBjb250YWluaW5nV2luZG93KQoreworICAgIGRhdGEtPmNvbnRhaW5pbmdXaW5kb3cgPSBj
b250YWluaW5nV2luZG93OworfQorCitXZWJLaXRHdGtQYWdlKiBXaWRnZXQ6OmNvbnRhaW5pbmdX
aW5kb3coKSBjb25zdAoreworICAgIHJldHVybiBkYXRhLT5jb250YWluaW5nV2luZG93OworfQor
CiB2b2lkIFdpZGdldDo6c2V0Q2xpZW50KFdpZGdldENsaWVudCogYykKIHsKICAgICBkYXRhLT5j
bGllbnQgPSBjOwpAQCAtOTksMTUgKzExNCwyNyBAQCBXaWRnZXRDbGllbnQqIFdpZGdldDo6Y2xp
ZW50KCkgY29uc3QKIAogSW50UmVjdCBXaWRnZXQ6OmZyYW1lR2VvbWV0cnkoKSBjb25zdAogewot
ICAgIHJldHVybiBkYXRhLT5nZW9tZXRyeTsKKyAgICByZXR1cm4gZGF0YS0+ZnJhbWVSZWN0Owor
fQorCit2b2lkIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIGRhdGEtPmZyYW1lUmVjdCA9IHI7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogdikKK3sKKyAgICBkYXRhLT5wYXJlbnQgPSB2OworfQorCitTY3JvbGxWaWV3KiBX
aWRnZXQ6OnBhcmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPnBhcmVudDsKIH0KIAog
dm9pZCBXaWRnZXQ6OnNldEZvY3VzKCkKIHsKLSAgICBHdGtXaWRnZXQgKndpZGdldCA9IGRhdGEt
PndpZGdldDsKLSAgICBpZiAoIXdpZGdldCkKLSAgICAgICAgcmV0dXJuOwotICAgIGd0a193aWRn
ZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhpbnRlcm5h
bEd0a1dpZGdldCgpID8gaW50ZXJuYWxHdGtXaWRnZXQoKSA6IEdUS19XSURHRVQoY29udGFpbmlu
Z1dpbmRvdygpKSk7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBj
dXJzb3IpCkBAIC0xMTYsMzkgKzE0MywyMSBAQCB2b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0
IEN1cnNvciYgY3VyCiAgICAgaWYgKCFwY3VyKQogICAgICAgICByZXR1cm47CiAKLSAgICBHZGtE
cmF3YWJsZSogZHJhd2FibGUgPSBnZGtEcmF3YWJsZSgpOwotICAgIGlmICghZHJhd2FibGUgfHwg
IUdES19JU19XSU5ET1coZHJhd2FibGUpKQotICAgICAgICByZXR1cm47Ci0gICAgR2RrV2luZG93
KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93X3NldF9jdXJz
b3Iod2luZG93LCBwY3VyKTsKLQorICAgIGdka193aW5kb3dfc2V0X2N1cnNvcihkYXRhLT5nZGtE
cmF3YWJsZSgpID8gR0RLX1dJTkRPVyhkYXRhLT5nZGtEcmF3YWJsZSgpKSA6IGNvbnRhaW5pbmdX
aW5kb3coKS0+YmluX3dpbmRvdywgcGN1cik7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzaG93KCkKIHsK
LSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBnZGtEcmF3YWJsZSgpOwotICAgIGlmICghZHJh
d2FibGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUpKQorICAgIGlmICghaW50ZXJuYWxHdGtX
aWRnZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEdka1dpbmRvdyogd2luZG93ID0gR0RLX1dJ
TkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19zaG93KHdpbmRvdyk7CisgICAgZ3RrX3dp
ZGdldF9zaG93KGludGVybmFsR3RrV2lkZ2V0KCkpOwogfQogCiB2b2lkIFdpZGdldDo6aGlkZSgp
CiB7Ci0gICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlID0gZ2RrRHJhd2FibGUoKTsKLSAgICBpZiAo
IWRyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdhYmxlKSkKKyAgICBpZiAoIWludGVybmFs
R3RrV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdE
S19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfaGlkZSh3aW5kb3cpOwotfQotCi12
b2lkIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQotewotICAgIGRh
dGEtPmdlb21ldHJ5ID0gcjsKLSAgICBnX3JldHVybl9pZl9mYWlsKGRhdGEtPndpZGdldCk7Ci0K
LSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHIueCgpLCByLnkoKSwgci53aWR0aCgp
LCByLmhlaWdodCgpIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGRhdGEtPndpZGdl
dCwgJmFsbG9jYXRpb24pOworICAgIGd0a193aWRnZXRfaGlkZShpbnRlcm5hbEd0a1dpZGdldCgp
KTsKIH0KIAogdm9pZCBXaWRnZXQ6OnNldEVuYWJsZWQoYm9vbCkKQEAgLTE2NCwxMiArMTczLDM1
IEBAIGJvb2wgV2lkZ2V0Ojppc0VuYWJsZWQoKSBjb25zdAogCiB2b2lkIFdpZGdldDo6cmVtb3Zl
RnJvbVBhcmVudCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAocGFyZW50KCkp
CisgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZCh0aGlzKTsKIH0KIAotdm9pZCBXaWRnZXQ6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIEludFJlY3QgY29uc3QmKQorLyoKKyAqIHNpbWlsaWFy
IHRvIGd0a19jb250YWluZXJfcHJvcGFnYXRlX2V4cG9zZSwgd2Ugd2FudCB0byBtYWtlIHN1cmUK
KyAqIGludGVybmFsR3RrV2lkZ2V0KCkgaXMgcGFpbnRlZCBub3cuCisgKgorICogVE9ETzogd2Ug
bWlnaHQgd2FudCB0byBob25vciB0aGUgdHJhbnNsYXRpb24gb2YgdGhlIGNvbnRleHQgYW5kIG1h
bmlwdWxhdGUKKyAqIGFsbG9jYXRpb24ueCBhbmQgYWxsb2NhdGlvbi55IGJlZm9yZSBkcmF3aW5n
LiBUaGlzIGhhcyBwb3RlbnRpYWwgdG8gcmVtb3ZlCisgKiB0aGUgc2V0U2Nyb2xsVmlld0NvbnRy
b2wgbWV0aG9kLgorICovCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICgh
aW50ZXJuYWxHdGtXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR2RrRXZlbnQqIGV2
ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfRVhQT1NFKTsKKyAgICBldmVudC0+ZXhwb3NlID0gKmNv
bnRleHQtPmdka0V4cG9zZUV2ZW50KCk7CisgICAgZXZlbnQtPmV4cG9zZS5yZWdpb24gPSBndGtf
d2lkZ2V0X3JlZ2lvbl9pbnRlcnNlY3QoaW50ZXJuYWxHdGtXaWRnZXQoKSwgZXZlbnQtPmV4cG9z
ZS5yZWdpb24pOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+ZXhwb3NlLndpbmRvdyk7CisKKyAg
ICBpZiAoIWdka19yZWdpb25fZW1wdHkoZXZlbnQtPmV4cG9zZS5yZWdpb24pKSB7CisgICAgICAg
IGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdpb24sICZldmVudC0+ZXhw
b3NlLmFyZWEpOworICAgICAgICBndGtfd2lkZ2V0X3NlbmRfZXhwb3NlKGludGVybmFsR3RrV2lk
Z2V0KCksIGV2ZW50KTsKKyAgICB9CisKKyAgICBndGtfd2lkZ2V0X3NlbmRfZXhwb3NlKGludGVy
bmFsR3RrV2lkZ2V0KCksIGV2ZW50KTsKKyAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7CiB9CiAK
IHZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpCkBAIC0xNzksMTUgKzIxMSwxMDAgQEAg
dm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKIAogdm9pZCBXaWRnZXQ6OmludmFsaWRh
dGUoKQogewotICAgIGlmIChkYXRhLT53aWRnZXQpCi0gICAgICAgIGd0a193aWRnZXRfcXVldWVf
ZHJhdyhkYXRhLT53aWRnZXQpOworICAgIGludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgd2lk
dGgoKSwgaGVpZ2h0KCkpKTsKK30KKwordm9pZCBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0
IEludFJlY3QmIHIpCit7CisgICAgaWYgKGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIXBhcmVudCgpKSB7CisgICAgICAgIGd0a193aWRnZXRf
cXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKSwgci54KCksIHIu
eSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLndpZHRoKCksIHIuaGVp
Z2h0KCkpOworICAgICAgICBpZiAoaXNGcmFtZVZpZXcoKSkKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEZyYW1lVmlldyo+KHRoaXMpLT5hZGRUb0RpcnR5UmVnaW9uKHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gR2V0IHRoZSByb290IHdpZGdldC4KKyAgICBTY3JvbGxWaWV3
KiBvdXRlcm1vc3RWaWV3ID0gcGFyZW50KCk7CisgICAgd2hpbGUgKG91dGVybW9zdFZpZXcgJiYg
b3V0ZXJtb3N0Vmlldy0+cGFyZW50KCkpCisgICAgICAgIG91dGVybW9zdFZpZXcgPSBvdXRlcm1v
c3RWaWV3LT5wYXJlbnQoKTsKKyAgICBpZiAoIW91dGVybW9zdFZpZXcpCisgICAgICAgIHJldHVy
bjsKKworICAgIEludFJlY3Qgd2luZG93UmVjdCA9IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3co
cik7CisgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChjb250YWluaW5n
V2luZG93KCkpLCB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2luZG93UmVjdC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdodCgp
KTsKKyAgICBvdXRlcm1vc3RWaWV3LT5hZGRUb0RpcnR5UmVnaW9uKHdpbmRvd1JlY3QpOworfQor
CitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gcG9pbnQ7Cisg
ICAgZm9yIChjb25zdCBXaWRnZXQgKnBhcmVudFdpZGdldCA9IHBhcmVudCgpLCAqY2hpbGRXaWRn
ZXQgPSB0aGlzOworICAgICAgICAgcGFyZW50V2lkZ2V0OworICAgICAgICAgY2hpbGRXaWRnZXQg
PSBwYXJlbnRXaWRnZXQsIHBhcmVudFdpZGdldCA9IHBhcmVudFdpZGdldC0+cGFyZW50KCkpCisg
ICAgICAgIHdpbmRvd1BvaW50ID0gcGFyZW50V2lkZ2V0LT5jb252ZXJ0Q2hpbGRUb1NlbGYoY2hp
bGRXaWRnZXQsIHdpbmRvd1BvaW50KTsKKyAgICByZXR1cm4gd2luZG93UG9pbnQ7Cit9CisKK0lu
dFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCB3aWRnZXRQb2ludCA9IHBvaW50OworICAg
IGZvciAoY29uc3QgV2lkZ2V0ICpwYXJlbnRXaWRnZXQgPSBwYXJlbnQoKSwgKmNoaWxkV2lkZ2V0
ID0gdGhpczsKKyAgICAgICAgIHBhcmVudFdpZGdldDsKKyAgICAgICAgIGNoaWxkV2lkZ2V0ID0g
cGFyZW50V2lkZ2V0LCBwYXJlbnRXaWRnZXQgPSBwYXJlbnRXaWRnZXQtPnBhcmVudCgpKQorICAg
ICAgICB3aWRnZXRQb2ludCA9IHBhcmVudFdpZGdldC0+Y29udmVydFNlbGZUb0NoaWxkKGNoaWxk
V2lkZ2V0LCB3aWRnZXRQb2ludCk7CisgICAgcmV0dXJuIHdpZGdldFBvaW50OworfQorCitJbnRS
ZWN0IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAoreworICAgIEludFJlY3QgY29udmVydGVkUmVjdCA9IHJlY3Q7CisgICAgY29udmVy
dGVkUmVjdC5zZXRMb2NhdGlvbihjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnZlcnRlZFJl
Y3QubG9jYXRpb24oKSkpOworICAgIHJldHVybiBjb252ZXJ0ZWRSZWN0OwogfQogCi12b2lkIFdp
ZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK0ludFBvaW50IFdpZGdl
dDo6Y29udmVydENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKIHsKLSAgICBpZiAoZGF0YS0+d2lkZ2V0KQotICAgICAgICBndGtfd2lk
Z2V0X3F1ZXVlX2RyYXdfYXJlYShkYXRhLT53aWRnZXQsIHJlY3QueCgpLCByZWN0LnkoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpICsgY2hpbGQtPngoKSwgcG9pbnQu
eSgpICsgY2hpbGQtPnkoKSk7CiB9CiAKK0ludFBvaW50IFdpZGdldDo6Y29udmVydFNlbGZUb0No
aWxkKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sK
KyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpIC0gY2hpbGQtPngoKSwgcG9pbnQueSgpIC0g
Y2hpbGQtPnkoKSk7Cit9CisKK2Jvb2wgV2lkZ2V0OjpzdXBwcmVzc0ludmFsaWRhdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uOworfQorCit2b2lk
IFdpZGdldDo6c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vbCBzdXBwcmVzcykKK3sKKyAgICBk
YXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbiA9IHN1cHByZXNzOworfQorCit2b2lkIFdpZGdldDo6
Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIWludGVybmFsR3RrV2lkZ2V0KCkg
fHwgIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlz
RnJhbWVWaWV3KCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnQoKSk7CisgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gZGF0YS0+aXNT
Y3JvbGxWaWV3Q29udHJvbCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJl
Y3QoZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5s
b2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNpemUoKSkgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZUdl
b21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXplKCkpOworCisgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCks
IHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShkYXRhLT53aWRnZXQsICZhbGxvY2F0aW9uKTsKK30KKwordm9pZCBX
aWRnZXQ6OnNldFNjcm9sbFZpZXdDb250cm9sKCkKK3sKKyAgICBkYXRhLT5pc1Njcm9sbFZpZXdD
b250cm9sID0gdHJ1ZTsKK30KIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBA
IHR5cGVkZWYgdm9pZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oR0RLKQordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50RXhwb3NlIEdka0V2ZW50RXhwb3Nl
OwogdHlwZWRlZiBzdHJ1Y3QgX0dka0RyYXdhYmxlIEdka0RyYXdhYmxlOwogI2VuZGlmCiAKQEAg
LTIwOCw4ICsyMDksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShHREspCi0gICAgICAgIHZvaWQgc2V0R2RrRHJhd2FibGUoR2RrRHJhd2FibGUqKTsKLSAg
ICAgICAgR2RrRHJhd2FibGUgKmdka0RyYXdhYmxlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0
R2RrRXhwb3NlRXZlbnQoR2RrRXZlbnRFeHBvc2UqKTsKKyAgICAgICAgR2RrRHJhd2FibGUqIGdk
a0RyYXdhYmxlKCkgY29uc3Q7CisgICAgICAgIEdka0V2ZW50RXhwb3NlKiBnZGtFeHBvc2VFdmVu
dCgpIGNvbnN0OworICAgICAgICBJbnRQb2ludCB0cmFuc2xhdGVQb2ludChjb25zdCBJbnRQb2lu
dCYpOwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlz
aW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgog
ICAgIFZlY3RvcjxmbG9hdD4gbGF5ZXJzOwogCiAjaWYgUExBVEZPUk0oR0RLKQotICAgIEdka0Ry
YXdhYmxlICpkcmF3YWJsZTsKKyAgICBHZGtFdmVudEV4cG9zZSAqZXhwb3NlOwogI2VuZGlmCiB9
OwogCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUmVjdFNvdXJjZU92
ZXIoY2EKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKCkKICAgICA6ICBjcigwKQogI2lmIFBMQVRGT1JNKEdESykKLSAgICAsIGRy
YXdhYmxlKDApCisgICAgLCBleHBvc2UoMCkKICNlbmRpZgogewogfQpAQCAtNzk4LDE0ICs3OTgs
MzAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjbwogfQogCiAjaWYg
UExBVEZPUk0oR0RLKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEdka0RyYXdhYmxlKEdka0Ry
YXdhYmxlKiBkcmF3YWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRHZGtFeHBvc2VFdmVu
dChHZGtFdmVudEV4cG9zZSogZXhwb3NlKQogewotICAgIG1fZGF0YS0+ZHJhd2FibGUgPSBkcmF3
YWJsZTsKKyAgICBtX2RhdGEtPmV4cG9zZSA9IGV4cG9zZTsKK30KKworR2RrRXZlbnRFeHBvc2Uq
IEdyYXBoaWNzQ29udGV4dDo6Z2RrRXhwb3NlRXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2RhdGEtPmV4cG9zZTsKIH0KIAogR2RrRHJhd2FibGUqIEdyYXBoaWNzQ29udGV4dDo6Z2RrRHJh
d2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEtPmRyYXdhYmxlOworICAgIHJldHVy
biBHREtfRFJBV0FCTEUobV9kYXRhLT5leHBvc2UtPndpbmRvdyk7Cit9CisKK0ludFBvaW50IEdy
YXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQorewor
ICAgIGNhaXJvX21hdHJpeF90IHRtOworICAgIGNhaXJvX2dldF9tYXRyaXgobV9kYXRhLT5jciwg
JnRtKTsKKyAgICBkb3VibGUgeCA9IHBvaW50LngoKTsKKyAgICBkb3VibGUgeSA9IHBvaW50Lnko
KTsKKworICAgIGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnQoJnRtLCAmeCwgJnkpOworICAg
IHJldHVybiBJbnRQb2ludCh4LHkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ2RrL0ltYWdlR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dkay9JbWFnZUdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw4ICszMCwxNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8Y2Fp
cm8uaD4KICAKLS8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0Ci1W
ZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKTsKKy8qCisgKiBU
T0RPOiBXZSBzaG91bGQgZm9sbG93IFF0IGFuZCBtb3ZlIHRoYXQgdG8gd2Via2l0Z3Rrc2V0dGlu
Z3MuCisgKiBGb3Igbm93IGl0IGlzIGNvcGllZCB0byB0aGUgZmlsZSBhY3R1YWxseSB1c2luZyB0
aGlzIG1ldGhvZC4KKyAqLworc3RhdGljIFZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJy
YXkoY29uc3QgY2hhciogcmVzb3VyY2VOYW1lKQoreyAgIAorICAgIFZlY3RvcjxjaGFyPiByZXNv
dXJjZTsKKyAgICAvL2lmIChzdHJjbXAocmVzb3VyY2VOYW1lLCJtaXNzaW5nSW1hZ2UiKSA9PSAw
KSB7CisgICAgLy99CisgICAgcmV0dXJuIHJlc291cmNlOworfQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKSW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5n
ZUxvZwkocmV2aXNpb24gMjQ3OTIpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjIgQEAKKzIwMDctMDctMzEgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
ICA8emVja2VAc2VsZmlzaC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTWFrZSBXZWJLaXRHdGtQYWdlIGEgdHJ1ZSBHdGtDb250YWluZXIgd2l0
aG91dCBpbmhlcml0aW5nIEd0a0xheW91dC4gSXQgd2lsbAorICAgICAgICBoYW5kbGUgYW5kIGRp
c3BhdGNoIHRoZSBldmVudHMgaW5jbHVkaW5nIGNvbnRhaW5lciBhZGQgYW5kIHJlbW92ZSwgZXhw
b3NpbmcKKyAgICAgICAgYW5kIG1vdmluZyB0aGUgbW91c2UuCisKKyAgICAgICAgSXQgaW1wbGVt
ZW50cyB0aGUgR3RrKyAncHJvdG9jb2wnIGZvciBzY3JvbGxhYmxlIGNvbnRlbnQgYW5kIHRoZSBz
ZXQgR3RrQWRqdXN0bWVudAorICAgICAgICBnZXQgcGFzc2VkIHRvIHRoZSBGcmFtZVZpZXcgb2Yg
dGhlIG1haW4gZnJhbWUuCisKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0ay1tYXJzaGFsLmxp
c3Q6CisgICAgICAgICogZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5jcHA6CisgICAgICAgICogZ3Rr
L0FwaS93ZWJraXRndGtwYWdlLmNwcDoKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3BhZ2Uu
aDoKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuY3BwOgorICAgICAgICAoV2Vi
S2l0R3RrOjphcHBseUFkanVzdG1lbnRzKToKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3By
aXZhdGUuaDoKKwogMjAwNy0wNy0zMCAgSm9obiBTdWxsaXZhbiAgPHN1bGxpdmFuQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbgpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrLW1hcnNoYWwubGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRn
dGstbWFyc2hhbC5saXN0CShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtp
dGd0ay1tYXJzaGFsLmxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTEsMiArMSwzIEBACiBWT0lEOlNU
UklORyxTVFJJTkcKIFZPSUQ6T0JKRUNULEJPT0xFQU4KK1ZPSUQ6T0JKRUNULE9CSkVDVApJbmRl
eDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1lLmNwcAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJLaXQv
Z3RrL0FwaS93ZWJraXRndGtmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwx
MCBAQAogI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKICNpbmNsdWRlICJ3ZWJraXRndGtwcml2
YXRlLmgiCiAKLSNpbmNsdWRlICJGcmFtZUdkay5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50R2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdEd0azsKIAogZXh0ZXJuICJDIiB7CiAKQEAgLTYy
LDYgKzYxLDggQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19mcmFtZV9maW5hbGl6ZShHTwogewog
ICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSAqcHJpdmF0ZV9kYXRhID0gV0VCS0lUX0dUS19GUkFN
RV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX0ZSQU1FKG9iamVjdCkpOwogICAgIGRlbGV0ZSBwcml2
YXRlX2RhdGEtPmZyYW1lOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2d0a19mcmFtZV9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRf
Z3RrX2ZyYW1lX2NsYXNzX2luaXQoV2ViS2l0R3RrRnJhbWVDbGFzcyogZnJhbWVfY2xhc3MpCkBA
IC0xMjAsMjEgKzEyMSwxNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX2ZyYW1lX2luaXQoV2Vi
S2l0CiB7CiB9CiAKLUdPYmplY3QqIHdlYmtpdF9ndGtfZnJhbWVfbmV3KFdlYktpdEd0a1BhZ2Uq
IHBhZ2UpCitHT2JqZWN0KiB3ZWJraXRfZ3RrX2ZyYW1lX25ldyhXZWJLaXRHdGtQYWdlKiB3ZWJf
cGFnZSkKIHsKICAgICBXZWJLaXRHdGtGcmFtZSogZnJhbWUgPSBXRUJLSVRfR1RLX0ZSQU1FKGdf
b2JqZWN0X25ldyhXRUJLSVRfR1RLX1RZUEVfRlJBTUUsIE5VTEwpKTsKICAgICBXZWJLaXRHdGtG
cmFtZVByaXZhdGUgKmZyYW1lX2RhdGEgPSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKGZy
YW1lKTsKLSAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSAgKnBhZ2VfZGF0YSA9IFdFQktJVF9HVEtf
UEFHRV9HRVRfUFJJVkFURShwYWdlKTsKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gY29yZSh3
ZWJfcGFnZSk7CiAKKyAgICBmcmFtZV9kYXRhLT5wYWdlID0gd2ViX3BhZ2U7CiAgICAgZnJhbWVf
ZGF0YS0+Y2xpZW50ID0gbmV3IEZyYW1lTG9hZGVyQ2xpZW50R2RrKGZyYW1lKTsKLSAgICBmcmFt
ZV9kYXRhLT5mcmFtZSA9IG5ldyBGcmFtZUdkayhwYWdlX2RhdGEtPnBhZ2UsIDAsIGZyYW1lX2Rh
dGEtPmNsaWVudCk7Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lX3ZpZXcgPSBuZXcgRnJhbWVWaWV3
KGZyYW1lX2RhdGEtPmZyYW1lKTsKLSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+c2V0VmlldyhmcmFt
ZV92aWV3KTsKLQotICAgIGZyYW1lX3ZpZXctPnNldEd0a1dpZGdldChHVEtfTEFZT1VUKHBhZ2Up
KTsKKyAgICBmcmFtZV9kYXRhLT5mcmFtZSA9IG5ldyBGcmFtZShwYWdlLCAwLCBmcmFtZV9kYXRh
LT5jbGllbnQpOwogICAgIGZyYW1lX2RhdGEtPmZyYW1lLT5pbml0KCk7Ci0gICAgZnJhbWVfZGF0
YS0+cGFnZSA9IHBhZ2U7CiAKICAgICByZXR1cm4gR19PQkpFQ1QoZnJhbWUpOwogfQpJbmRleDog
V2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0
ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViS2l0L2d0ay9B
cGkvd2Via2l0Z3RrcGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20K
ICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtNDAsNiArNDEsMTMgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiSGl0VGVz
dFJlcXVlc3QuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CkBAIC02MiwzMSArNzAsMTIzIEBAIGVudW0gewogCiBzdGF0aWMgZ3VpbnQg
d2Via2l0X2d0a19wYWdlX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwogCi1HX0RFRklO
RV9UWVBFKFdlYktpdEd0a1BhZ2UsIHdlYmtpdF9ndGtfcGFnZSwgR1RLX1RZUEVfTEFZT1VUKQor
R19ERUZJTkVfVFlQRShXZWJLaXRHdGtQYWdlLCB3ZWJraXRfZ3RrX3BhZ2UsIEdUS19UWVBFX0NP
TlRBSU5FUikKIAotc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hh
bmRsZV9nZGtfZXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRHdGtQYWdl
KiBwYWdlKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9leHBvc2VfZXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50RXhwb3NlKiBldmVudCkKIHsKLSAgICBXZWJLaXRHdGtQ
YWdlUHJpdmF0ZSogcGFnZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2Up
OwotICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSogZnJhbWVfZGF0YSA9IFdFQktJVF9HVEtfRlJB
TUVfR0VUX1BSSVZBVEUocGFnZV9kYXRhLT5tYWluX2ZyYW1lKTsKKyAgICBXZWJDb3JlOjpGcmFt
ZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkp
KTsKKworICAgIEdka1JlY3RhbmdsZSBjbGlwOworICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3go
ZXZlbnQtPnJlZ2lvbiwgJmNsaXApOworICAgIGdka193aW5kb3dfYmVnaW5fcGFpbnRfcmVnaW9u
KGV2ZW50LT53aW5kb3csIGV2ZW50LT5yZWdpb24pOworICAgIGNhaXJvX3QqIGNyID0gZ2RrX2Nh
aXJvX2NyZWF0ZShldmVudC0+d2luZG93KTsKKyAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNyKTsK
KyAgICBjdHguc2V0R2RrRXhwb3NlRXZlbnQoZXZlbnQpOworICAgIGlmIChmcmFtZS0+cmVuZGVy
ZXIoKSkgeworICAgICAgICBpZiAoZnJhbWUtPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKKyAgICAg
ICAgICAgIGZyYW1lLT52aWV3KCktPmxheW91dCgpOworICAgICAgICBJbnRSZWN0IHJlY3QoY2xp
cC54LCBjbGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKKyAgICAgICAgZnJhbWUtPnZp
ZXcoKS0+cGFpbnQoJmN0eCwgcmVjdCk7CisgICAgfQorICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwog
Ci0gICAgZnJhbWVfZGF0YS0+ZnJhbWUtPmhhbmRsZUdka0V2ZW50KGV2ZW50KTsKKyAgICByZXR1
cm4gVFJVRTsKIH0KIAotc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVh
X3Jlc2l6ZV9jYWxsYmFjayhHdGtXaWRnZXQqLCBHdGtBbGxvY2F0aW9uKiBhbGxvY2F0aW9uLCBX
ZWJLaXRHdGtQYWdlKiBwYWdlKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9rZXlf
ZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCkKIHsKLSAgICBXZWJL
aXRHdGtQYWdlUHJpdmF0ZSogcGFnZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRF
KHBhZ2UpOwotICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSogZnJhbWVfZGF0YSA9IFdFQktJVF9H
VEtfRlJBTUVfR0VUX1BSSVZBVEUocGFnZV9kYXRhLT5tYWluX2ZyYW1lKTsKKyAgICBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdp
ZGdldCkpKTsKKworICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoUGxhdGZvcm1L
ZXlib2FyZEV2ZW50KGV2ZW50KSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CiAKLSAgICBmcmFtZV9k
YXRhLT5mcmFtZS0+dmlldygpLT51cGRhdGVHZW9tZXRyeShhbGxvY2F0aW9uLT53aWR0aCwgYWxs
b2NhdGlvbi0+aGVpZ2h0KTsKLSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+Zm9yY2VMYXlvdXQoKTsK
LSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+dmlldygpLT5hZGp1c3RWaWV3U2l6ZSgpOwotICAgIGZy
YW1lX2RhdGEtPmZyYW1lLT5zZW5kUmVzaXplRXZlbnQoKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZ3RrX3BhZ2VfYnV0dG9uX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRv
biogZXZlbnQpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZy
b21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisgICAgCisgICAgaWYgKGV2ZW50LT50
eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkKKyAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKKyAg
ICBlbHNlCisgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2
ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOworICAgIHJldHVybiBUUlVFOwogfQogCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuZGVyaW5nX2FyZWFfZXZlbnRz
KEd0a1dpZGdldCogd2luLCBXZWJLaXRHdGtQYWdlKiBwYWdlKQorc3RhdGljIGdib29sZWFuIHdl
YmtpdF9ndGtfcGFnZV9tb3Rpb25fZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90
aW9uKiBldmVudCkKIHsKLSAgICBnZGtfd2luZG93X3NldF9ldmVudHMoR1RLX0lTX0xBWU9VVCh3
aW4pID8gR1RLX0xBWU9VVCh3aW4pLT5iaW5fd2luZG93IDogd2luLT53aW5kb3csCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIChHZGtFdmVudE1hc2spKEdES19FWFBPU1VSRV9NQVNLCisgICAg
V2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtf
UEFHRSh3aWRnZXQpKSk7CisKKyAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQo
UGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2Vfc2Nyb2xsX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0
LCBHZGtFdmVudFNjcm9sbCogZXZlbnQpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0g
Y29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisKKyAgICBQ
bGF0Zm9ybVdoZWVsRXZlbnQgd2hlZWxFdmVudChldmVudCk7CisgICAgZnJhbWUtPnZpZXcoKS0+
d2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICBpZiAod2hlZWxFdmVudC5pc0FjY2VwdGVkKCkp
CisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgSGl0VGVzdFJlcXVlc3QgaGl0VGVzdFJlcXVl
c3QodHJ1ZSwgdHJ1ZSk7CisgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0KHdoZWVsRXZl
bnQucG9zKCkpOworICAgIGZyYW1lLT5yZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KGhpdFRl
c3RSZXF1ZXN0LCBoaXRUZXN0UmVzdWx0KTsKKyAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3Vs
dC5pbm5lck5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBGQUxTRTsKKwor
ICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc2l6ZV9h
bGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKK3sK
KyAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5zaXpl
X2FsbG9jYXRlKHdpZGdldCwgYWxsb2NhdGlvbik7CisKKyAgICBpZiAoR1RLX1dJREdFVF9SRUFM
SVpFRCh3aWRnZXQpKQorICAgICAgICBnZGtfd2luZG93X3Jlc2l6ZShXRUJLSVRfR1RLX1BBR0Uo
d2lkZ2V0KS0+YmluX3dpbmRvdywgYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdo
dCk7CisKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2Uo
V0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKKyAgICBpZiAoIWZyYW1lLT52aWV3KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZyYW1lLT52aWV3KCktPnJlc2l6ZShhbGxvY2F0aW9uLT53aWR0
aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KTsKKyAgICBmcmFtZS0+Zm9yY2VMYXlvdXQoKTsKKyAgICBm
cmFtZS0+dmlldygpLT5hZGp1c3RWaWV3U2l6ZSgpOworICAgIGZyYW1lLT5zZW5kUmVzaXplRXZl
bnQoKTsKK30KKworLyoKKyAqIGl0IGlzIGEgR3RrQ29udGFpbmVyIHRvIGltcGxlbWVudCBTY3Jv
bGxWaWV3LiBBbmQgd2UgbmVlZCB0byBtYWtlIGl0IHNpbWlsaWFyCisgKiB0byBHdGtMYXlvdXQg
dG8gaGF2ZSBzYW5lIHBhaW50aW5nLgorICovCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vf
cmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3
aWRnZXQsIEdUS19SRUFMSVpFRCk7CisKKyAgICBHZGtXaW5kb3dBdHRyIGF0dHJpYnV0ZXM7CisK
KyAgICBhdHRyaWJ1dGVzLndpbmRvd190eXBlID0gR0RLX1dJTkRPV19DSElMRDsKKyAgICBhdHRy
aWJ1dGVzLnggPSB3aWRnZXQtPmFsbG9jYXRpb24ueDsKKyAgICBhdHRyaWJ1dGVzLnkgPSB3aWRn
ZXQtPmFsbG9jYXRpb24ueTsKKyAgICBhdHRyaWJ1dGVzLndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0
aW9uLndpZHRoOworICAgIGF0dHJpYnV0ZXMuaGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhl
aWdodDsKKyAgICBhdHRyaWJ1dGVzLndjbGFzcyA9IEdES19JTlBVVF9PVVRQVVQ7CisgICAgYXR0
cmlidXRlcy52aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92aXN1YWwgKHdpZGdldCk7CisgICAgYXR0
cmlidXRlcy5jb2xvcm1hcCA9IGd0a193aWRnZXRfZ2V0X2NvbG9ybWFwICh3aWRnZXQpOworICAg
IGF0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IEdES19WSVNJQklMSVRZX05PVElGWV9NQVNLOworCisg
ICAgZ2ludCBhdHRyaWJ1dGVzX21hc2sgPSBHREtfV0FfWCB8IEdES19XQV9ZIHwgR0RLX1dBX1ZJ
U1VBTCB8IEdES19XQV9DT0xPUk1BUDsKKyAgICB3aWRnZXQtPndpbmRvdyA9IGdka193aW5kb3df
bmV3KGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cgKHdpZGdldCksICZhdHRyaWJ1dGVzLCBh
dHRyaWJ1dGVzX21hc2spOworICAgIGdka193aW5kb3dfc2V0X2JhY2tfcGl4bWFwKHdpZGdldC0+
d2luZG93LCBOVUxMLCBGQUxTRSk7CisgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHdpZGdl
dC0+d2luZG93LCB3aWRnZXQpOworCisgICAgYXR0cmlidXRlcy54ID0gMDsKKyAgICBhdHRyaWJ1
dGVzLnkgPSAwOworICAgIGF0dHJpYnV0ZXMud2lkdGggPSB3aWRnZXQtPmFsbG9jYXRpb24ud2lk
dGg7CisgICAgYXR0cmlidXRlcy5oZWlnaHQgPSB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0Owor
ICAgIGF0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IEdES19FWFBPU1VSRV9NQVNLCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBHREtfU0NST0xMX01BU0sKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEdES19CVVRUT05fUFJFU1NfTUFTSwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgR0RLX0JVVFRPTl9SRUxFQVNFX01BU0sKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IEdES19QT0lOVEVSX01PVElPTl9NQVNLCkBAIC05NSwxNSArMTk1LDExMSBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBHREtfQlVUVE9OX01PVElPTl9NQVNLCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBHREtfQlVUVE9OMV9NT1RJT05fTUFTSwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgR0RLX0JVVFRPTjJfTU9USU9OX01BU0sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IEdES19CVVRUT04zX01PVElPTl9NQVNLKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBHREtfQlVUVE9OM19NT1RJT05fTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
Z3RrX3dpZGdldF9nZXRfZXZlbnRzKHdpZGdldCk7CisKKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdl
ID0gV0VCS0lUX0dUS19QQUdFKHdpZGdldCk7CisgICAgcGFnZS0+YmluX3dpbmRvdyA9IGdka193
aW5kb3dfbmV3KHdpZGdldC0+d2luZG93LCAmYXR0cmlidXRlcywgYXR0cmlidXRlc19tYXNrKTsK
KyAgICBnZGtfd2luZG93X3NldF91c2VyX2RhdGEocGFnZS0+YmluX3dpbmRvdywgd2lkZ2V0KTsK
KworICAgIHdpZGdldC0+c3R5bGUgPSBndGtfc3R5bGVfYXR0YWNoICh3aWRnZXQtPnN0eWxlLCB3
aWRnZXQtPndpbmRvdyk7CisgICAgZ3RrX3N0eWxlX3NldF9iYWNrZ3JvdW5kKHdpZGdldC0+c3R5
bGUsIHBhZ2UtPmJpbl93aW5kb3csIEdUS19TVEFURV9OT1JNQUwpOworCisgICAgV2ViS2l0R3Rr
UGFnZVByaXZhdGUqIHByaXZhdGVfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShw
YWdlKTsKKyAgICBIYXNoU2V0PEd0a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2
YXRlX2RhdGEtPmNoaWxkcmVuLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6
Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uYmVnaW4oKTsg
Y3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRfcGFyZW50
X3dpbmRvdygqY3VycmVudCwgcGFnZS0+YmluX3dpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9ndGtfcGFnZV91bnJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0
R3RrUGFnZSogcGFnZSA9IFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpOworCisgICAgZ2RrX3dpbmRv
d19zZXRfdXNlcl9kYXRhKHBhZ2UtPmJpbl93aW5kb3csIDApOworICAgIGdka193aW5kb3dfZGVz
dHJveShwYWdlLT5iaW5fd2luZG93KTsKKyAgICBwYWdlLT5iaW5fd2luZG93ID0gMDsKKworICAg
IEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X2d0a19wYWdlX3BhcmVudF9jbGFzcyktPnVucmVhbGl6
ZSh3aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfbWFwKEd0a1dpZGdl
dCogd2lkZ2V0KQoreworICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX01BUFBF
RCk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHByaXZhdGVfZGF0YSA9IFdFQktJVF9HVEtf
UEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSk7CisKKyAgICBIYXNoU2V0
PEd0a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2YXRlX2RhdGEtPmNoaWxkcmVu
LmVuZCgpOworICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3Vy
cmVudCA9IHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsr
Y3VycmVudCkKKyAgICAgICAgaWYgKEdUS19XSURHRVRfVklTSUJMRSgqY3VycmVudCkgJiYgIUdU
S19XSURHRVRfTUFQUEVEKCpjdXJyZW50KSkKKyAgICAgICAgICAgIGd0a193aWRnZXRfbWFwKCgq
Y3VycmVudCkpOworCisgICAgZ2RrX3dpbmRvd19zaG93KFdFQktJVF9HVEtfUEFHRSh3aWRnZXQp
LT5iaW5fd2luZG93KTsKKyAgICBnZGtfd2luZG93X3Nob3cod2lkZ2V0LT53aW5kb3cpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc3R5bGVfc2V0KEd0a1dpZGdldCogd2lkZ2V0
LCBHdGtTdHlsZSogb2xkX3N0eWxlKQoreworICAgIGlmIChHVEtfV0lER0VUX0NMQVNTKHdlYmtp
dF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5zdHlsZV9zZXQpCisgICAgICAgIEdUS19XSURHRVRf
Q0xBU1Mod2Via2l0X2d0a19wYWdlX3BhcmVudF9jbGFzcyktPnN0eWxlX3NldCh3aWRnZXQsIG9s
ZF9zdHlsZSk7CisKKyAgICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCh3aWRnZXQpKQorICAgICAg
ICBndGtfc3R5bGVfc2V0X2JhY2tncm91bmQod2lkZ2V0LT5zdHlsZSwgV0VCS0lUX0dUS19QQUdF
KHdpZGdldCktPmJpbl93aW5kb3csIEdUS19TVEFURV9OT1JNQUwpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZ3RrX3BhZ2VfY29udGFpbmVyX2FkZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwg
R3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0R3RrUGFnZSogcGFnZSA9IFdFQktJVF9H
VEtfUEFHRShjb250YWluZXIpOworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwcml2YXRlX2Rh
dGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CiAKLSAgICBnX3NpZ25hbF9j
b25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImV4cG9zZS1ldmVudCIsIEdfQ0FMTEJBQ0sod2Via2l0
X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hhbmRsZV9nZGtfZXZlbnQpLCBwYWdlKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImtleS1wcmVzcy1ldmVudCIsIEdfQ0FM
TEJBQ0sod2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hhbmRsZV9nZGtfZXZlbnQpLCBw
YWdlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImtleS1yZWxlYXNl
LWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxl
X2dka19ldmVudCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3aW4p
LCAiYnV0dG9uLXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVy
aW5nX2FyZWFfaGFuZGxlX2dka19ldmVudCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
R1RLX09CSkVDVCh3aW4pLCAiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBHX0NBTExCQUNLKHdlYmtp
dF9ndGtfcGFnZV9yZW5kZXJpbmdfYXJlYV9oYW5kbGVfZ2RrX2V2ZW50KSwgcGFnZSk7Ci0gICAg
Z19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKHdpbiksICJtb3Rpb24tbm90aWZ5LWV2ZW50Iiwg
R19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxlX2dka19ldmVu
dCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3aW4pLCAic2Nyb2xs
LWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxl
X2dka19ldmVudCksIHBhZ2UpOworICAgIHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uYWRkKHdpZGdl
dCk7CisgICAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQoY29udGFpbmVyKSkKKyAgICAgICAgZ3Rr
X3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQsIHBhZ2UtPmJpbl93aW5kb3cpOworICAg
IGd0a193aWRnZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9jb250YWluZXJfcmVtb3ZlKEd0a0NvbnRh
aW5lciogY29udGFpbmVyLCBHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBXZWJLaXRHdGtQYWdl
UHJpdmF0ZSogcHJpdmF0ZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKFdFQktJ
VF9HVEtfUEFHRShjb250YWluZXIpKTsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmNoaWxkcmVu
LmNvbnRhaW5zKHdpZGdldCkpIHsKKyAgICAgICAgZ3RrX3dpZGdldF91bnBhcmVudCh3aWRnZXQp
OworICAgICAgICBwcml2YXRlX2RhdGEtPmNoaWxkcmVuLnJlbW92ZSh3aWRnZXQpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NvbnRhaW5lcl9mb3JhbGwoR3RrQ29u
dGFpbmVyKiBjb250YWluZXIsIGdib29sZWFuLCBHdGtDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50
ZXIgY2FsbGJhY2tEYXRhKQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwcml2YXRlRGF0
YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0UoY29udGFpbmVy
KSk7CisKKyAgICBIYXNoU2V0PEd0a1dpZGdldCo+IGNoaWxkcmVuID0gcHJpdmF0ZURhdGEtPmNo
aWxkcmVuOworICAgIEhhc2hTZXQ8R3RrV2lkZ2V0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNo
aWxkcmVuLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0
b3IgY3VycmVudCA9IGNoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQp
CisgICAgICAgICgqY2FsbGJhY2spKCpjdXJyZW50LCBjYWxsYmFja0RhdGEpOworfQorCisvKgor
ICogdGFrZSBvd25lcnNoaXAgb2YgdGhlIGFkanVzdG1lbnRzIGFuZCBpZiB3ZSBoYXZlIGEgRnJh
bWVWaWV3IGFscmVhZHkgc2V0IHRoZQorICogYWRqdXN0bWVudHMgYXMgd2VsbC4KKyAqLworc3Rh
dGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3NldF9hZGp1c3RtZW50cyhXZWJLaXRHdGtQYWdlKiBw
YWdlLCBHdGtBZGp1c3RtZW50KiBob3Jpem9udGFsQWRqdXN0bWVudCwgR3RrQWRqdXN0bWVudCog
dmVydGljYWxBZGp1c3RtZW50KQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRl
X2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2Up
KTsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KQorICAgICAg
ICBnX29iamVjdF91bnJlZihwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsKKyAg
ICBpZiAocHJpdmF0ZV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIGdfb2JqZWN0
X3VucmVmKHByaXZhdGVfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKKworICAgIHByaXZhdGVf
ZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQgPSBob3Jpem9udGFsQWRqdXN0bWVudDsKKyAgICBw
cml2YXRlX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCA9IHZlcnRpY2FsQWRqdXN0bWVudDsKKwor
ICAgIGlmIChob3Jpem9udGFsQWRqdXN0bWVudCkKKyAgICAgICAgZ19vYmplY3RfcmVmX3Npbmso
aG9yaXpvbnRhbEFkanVzdG1lbnQpOworICAgIGlmICh2ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAg
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZlcnRpY2FsQWRqdXN0bWVudCk7CisKKyAgICBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UocGFnZSkpOworICAgIGlmIChm
cmFtZS0+dmlldygpKQorICAgICAgICBmcmFtZS0+dmlldygpLT5zZXRHdGtBZGp1c3RtZW50cyho
b3Jpem9udGFsQWRqdXN0bWVudCwgdmVydGljYWxBZGp1c3RtZW50KTsKIH0KIAogc3RhdGljIFdl
YktpdEd0a0ZyYW1lKiB3ZWJraXRfZ3RrX3BhZ2VfcmVhbF9jcmVhdGVfZnJhbWUoV2ViS2l0R3Rr
UGFnZSosIFdlYktpdEd0a0ZyYW1lKiBwYXJlbnQsIFdlYktpdEd0a0ZyYW1lRGF0YSopCkBAIC0x
NjMsOSArMzU5LDE3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9maW5hbGl6ZShHT2IK
IAogICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RLX1BB
R0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKG9iamVjdCkpOwogICAgIC8vZGVsZXRlIHBy
aXZhdGVfZGF0YS0+cGFnZTsgLSB3ZSBkb24ndCBoYXZlIGEgRHJhZ0NsaWVudCB5ZXQsIHNvIGl0
IGlzIGNyYXNoaW5nIGhlcmUKLSAgICBkZWxldGUgcHJpdmF0ZV9kYXRhLT5zZXR0aW5nczsKKwog
ICAgIGdfb2JqZWN0X3VucmVmKHByaXZhdGVfZGF0YS0+bWFpbl9mcmFtZSk7CisgICAgZGVsZXRl
IHByaXZhdGVfZGF0YS0+c2V0dGluZ3M7CiAgICAgZGVsZXRlIHByaXZhdGVfZGF0YS0+dXNlcl9h
Z2VudDsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KQorICAg
ICAgICBnX29iamVjdF91bnJlZihwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsK
KyAgICBpZiAocHJpdmF0ZV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIGdfb2Jq
ZWN0X3VucmVmKHByaXZhdGVfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKKworICAgIEdfT0JK
RUNUX0NMQVNTICh3ZWJraXRfZ3RrX3BhZ2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVj
dCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9jbGFzc19pbml0KFdlYktpdEd0
a1BhZ2VDbGFzcyogcGFnZV9jbGFzcykKQEAgLTE3Niw2ICszODAsMjggQEAgc3RhdGljIHZvaWQg
d2Via2l0X2d0a19wYWdlX2NsYXNzX2luaXQoVwogICAgIC8qCiAgICAgICogc2lnbmFscwogICAg
ICAqLworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MocGFn
ZV9jbGFzcyk7CisgICAgb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9ndGtfcGFnZV9m
aW5hbGl6ZTsKKworICAgIEd0a1dpZGdldENsYXNzKiB3aWRnZXRfY2xhc3MgPSBHVEtfV0lER0VU
X0NMQVNTKHBhZ2VfY2xhc3MpOworICAgIHdpZGdldF9jbGFzcy0+ZXhwb3NlX2V2ZW50ID0gd2Vi
a2l0X2d0a19wYWdlX2V4cG9zZV9ldmVudDsKKyAgICB3aWRnZXRfY2xhc3MtPmtleV9wcmVzc19l
dmVudCA9IHdlYmtpdF9ndGtfcGFnZV9rZXlfZXZlbnQ7CisgICAgd2lkZ2V0X2NsYXNzLT5rZXlf
cmVsZWFzZV9ldmVudCA9IHdlYmtpdF9ndGtfcGFnZV9rZXlfZXZlbnQ7CisgICAgd2lkZ2V0X2Ns
YXNzLT5idXR0b25fcHJlc3NfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2VfYnV0dG9uX2V2ZW50Owor
ICAgIHdpZGdldF9jbGFzcy0+YnV0dG9uX3JlbGVhc2VfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2Vf
YnV0dG9uX2V2ZW50OworICAgIHdpZGdldF9jbGFzcy0+bW90aW9uX25vdGlmeV9ldmVudCA9IHdl
YmtpdF9ndGtfcGFnZV9tb3Rpb25fZXZlbnQ7CisgICAgd2lkZ2V0X2NsYXNzLT5zY3JvbGxfZXZl
bnQgPSB3ZWJraXRfZ3RrX3BhZ2Vfc2Nyb2xsX2V2ZW50OworICAgIHdpZGdldF9jbGFzcy0+cmVh
bGl6ZSA9IHdlYmtpdF9ndGtfcGFnZV9yZWFsaXplOworICAgIHdpZGdldF9jbGFzcy0+dW5yZWFs
aXplID0gd2Via2l0X2d0a19wYWdlX3VucmVhbGl6ZTsKKyAgICB3aWRnZXRfY2xhc3MtPnNpemVf
YWxsb2NhdGUgPSB3ZWJraXRfZ3RrX3BhZ2Vfc2l6ZV9hbGxvY2F0ZTsKKyAgICB3aWRnZXRfY2xh
c3MtPnN0eWxlX3NldCA9IHdlYmtpdF9ndGtfcGFnZV9zdHlsZV9zZXQ7CisgICAgd2lkZ2V0X2Ns
YXNzLT5tYXAgPSB3ZWJraXRfZ3RrX3BhZ2VfbWFwOworCisgICAgR3RrQ29udGFpbmVyQ2xhc3Mq
IGNvbnRhaW5lcl9jbGFzcyA9IEdUS19DT05UQUlORVJfQ0xBU1MocGFnZV9jbGFzcyk7CisgICAg
Y29udGFpbmVyX2NsYXNzLT5hZGQgPSB3ZWJraXRfZ3RrX3BhZ2VfY29udGFpbmVyX2FkZDsKKyAg
ICBjb250YWluZXJfY2xhc3MtPnJlbW92ZSA9IHdlYmtpdF9ndGtfcGFnZV9jb250YWluZXJfcmVt
b3ZlOworICAgIGNvbnRhaW5lcl9jbGFzcy0+Zm9yYWxsID0gd2Via2l0X2d0a19wYWdlX2NvbnRh
aW5lcl9mb3JhbGw7CisKICAgICAvKioKICAgICAgKiBXZWJLaXRHdGtQYWdlOjpsb2FkLXN0YXJ0
ZWQKICAgICAgKiBAcGFnZTogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0
ZWQKQEAgLTI2Nyw2ICs0OTMsMTkgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NsYXNz
X2luaXQoVwogICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCiAgICAg
ICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CiAKKyAgICAvKgorICAgICAqIG1ha2UgdXMgc2Nyb2xs
YWJsZSAoZS5nLiBhZGRhYmxlIHRvIGEgR3RrU2Nyb2xsZWRXaW5kb3cpCisgICAgICovCisgICAg
cGFnZV9jbGFzcy0+c2V0X3Njcm9sbF9hZGp1c3RtZW50cyA9IHdlYmtpdF9ndGtfcGFnZV9zZXRf
YWRqdXN0bWVudHM7CisgICAgR1RLX1dJREdFVF9DTEFTUyhwYWdlX2NsYXNzKS0+c2V0X3Njcm9s
bF9hZGp1c3RtZW50c19zaWduYWwgPSBnX3NpZ25hbF9uZXcoInNldF9zY3JvbGxfYWRqdXN0bWVu
dHMiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZV9jbGFzcyksCisgICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiks
CisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0R3RrUGFnZUNsYXNzLCBzZXRfc2Ny
b2xsX2FkanVzdG1lbnRzKSwKKyAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICB3
ZWJraXRfZ3RrX21hcnNoYWxfVk9JRF9fT0JKRUNUX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQ
RV9OT05FLCAyLAorICAgICAgICAgICAgR1RLX1RZUEVfQURKVVNUTUVOVCwgR1RLX1RZUEVfQURK
VVNUTUVOVCk7CisKIAogICAgIC8qCiAgICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwg
bWV0aG9kcwpAQCAtMjc5LDIxICs1MTgsMzMgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdl
X2NsYXNzX2luaXQoVwogICAgIHBhZ2VfY2xhc3MtPmphdmFfc2NyaXB0X2NvbmZpcm0gPSB3ZWJr
aXRfZ3RrX3BhZ2VfcmVhbF9qYXZhX3NjcmlwdF9jb25maXJtOwogICAgIHBhZ2VfY2xhc3MtPmph
dmFfc2NyaXB0X3Byb21wdCA9IHdlYmtpdF9ndGtfcGFnZV9yZWFsX2phdmFfc2NyaXB0X3Byb21w
dDsKICAgICBwYWdlX2NsYXNzLT5qYXZhX3NjcmlwdF9jb25zb2xlX21lc3NhZ2UgPSB3ZWJraXRf
Z3RrX3BhZ2VfcmVhbF9qYXZhX3NjcmlwdF9jb25zb2xlX21lc3NhZ2U7Ci0gICAgR19PQkpFQ1Rf
Q0xBU1MocGFnZV9jbGFzcyktPmZpbmFsaXplID0gd2Via2l0X2d0a19wYWdlX2ZpbmFsaXplOwog
fQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfaW5pdChXZWJLaXRHdGtQYWdlKiBwYWdl
KQogewotICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RL
X1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2UpKTsKLSAgICBwcml2YXRlX2Rh
dGEtPnBhZ2UgPSBuZXcgUGFnZShuZXcgQ2hyb21lQ2xpZW50R2RrKHBhZ2UpLCBuZXcgQ29udGV4
dE1lbnVDbGllbnRHZGssIG5ldyBFZGl0b3JDbGllbnRHZGsocGFnZSksIDAsIG5ldyBJbnNwZWN0
b3JDbGllbnRHZGspOwotCi0KICAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyhwYWdlLCBHVEtfQ0FO
X0ZPQ1VTKTsKKyAgICBwYWdlLT5iaW5fd2luZG93ID0gMDsKIAotICAgIGdfc2lnbmFsX2Nvbm5l
Y3RfYWZ0ZXIoR19PQkpFQ1QocGFnZSksICJyZWFsaXplIiwgR19DQUxMQkFDSyh3ZWJraXRfZ3Rr
X3BhZ2VfcmVnaXN0ZXJfcmVuZGVyaW5nX2FyZWFfZXZlbnRzKSwgcGFnZSk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdF9hZnRlcihHX09CSkVDVChwYWdlKSwgInNpemUtYWxsb2NhdGUiLCBHX0NBTExC
QUNLKHdlYmtpdF9ndGtfcGFnZV9yZW5kZXJpbmdfYXJlYV9yZXNpemVfY2FsbGJhY2spLCBwYWdl
KTsKLQorICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RL
X1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2UpKTsKKyAgICBwcml2YXRlX2Rh
dGEtPnBhZ2UgPSBuZXcgUGFnZShuZXcgQ2hyb21lQ2xpZW50R2RrKHBhZ2UpLCBuZXcgQ29udGV4
dE1lbnVDbGllbnRHZGssIG5ldyBFZGl0b3JDbGllbnRHZGsocGFnZSksIDAsIG5ldyBJbnNwZWN0
b3JDbGllbnRHZGspOwogICAgIHByaXZhdGVfZGF0YS0+bWFpbl9mcmFtZSA9IFdFQktJVF9HVEtf
RlJBTUUod2Via2l0X2d0a19mcmFtZV9uZXcocGFnZSkpOworCisgICAgLyoKKyAgICAgKiBUT0RP
OiBtb3ZlIHRoYXQgb3ZlciB0byB1c2Ugd2Via2l0Z3Rrc2V0dGluZ3MgCisgICAgICovCisgICAg
U2V0dGluZ3MqIHNldHRpbmdzID0gcHJpdmF0ZV9kYXRhLT5wYWdlLT5zZXR0aW5ncygpOworICAg
IHNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7CisgICAgc2V0dGlu
Z3MtPnNldE1pbmltdW1Gb250U2l6ZSg1KTsKKyAgICBzZXR0aW5ncy0+c2V0TWluaW11bUxvZ2lj
YWxGb250U2l6ZSg1KTsKKyAgICBzZXR0aW5ncy0+c2V0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcyh0
cnVlKTsKKyAgICBzZXR0aW5ncy0+c2V0SmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7CisgICAgCisg
ICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+
c2V0RGVmYXVsdEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5
KCJUaW1lcyBOZXcgUm9tYW4iKTsKKyAgICBzZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZhbWls
eSgiQXJpYWwiKTsKKyAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVyIik7
CisgICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgiQXJpYWwiKTsKIH0KIAogR3Rr
V2lkZ2V0KiB3ZWJraXRfZ3RrX3BhZ2VfbmV3KHZvaWQpCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtwYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFn
ZS5oCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNjEsMTEgKzYxLDEzIEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRH
dGtQYWdlQ2xhc3MgV2ViS2kKICAqIHRoZSAgc2l6ZSBvZiB0aGUgdmlld3BvcnQgYW5kIHdlIHdv
bid0IGJlIGFibGUgdG8gdXNlIGdka193aW5kb3dfbW92ZS4KICAqLwogc3RydWN0IF9XZWJLaXRH
dGtQYWdlIHsKLSAgICBHdGtMYXlvdXQgcGFyZW50OworICAgIEd0a0NvbnRhaW5lciBwYXJlbnQ7
CisKKyAgICBHZGtXaW5kb3cgKmJpbl93aW5kb3c7CiB9OwogCiBzdHJ1Y3QgX1dlYktpdEd0a1Bh
Z2VDbGFzcyB7Ci0gICAgR3RrTGF5b3V0Q2xhc3MgcGFyZW50OworICAgIEd0a0NvbnRhaW5lckNs
YXNzIHBhcmVudDsKIAogICAgIC8qCiAgICAgICogZGVmYXVsdCBoYW5kbGVyL3ZpcnR1YWwgbWV0
aG9kcwpAQCAtODksNiArOTEsMTEgQEAgc3RydWN0IF9XZWJLaXRHdGtQYWdlQ2xhc3MgewogICAg
IGdib29sZWFuICAgKCpqYXZhX3NjcmlwdF9jb25maXJtKSAoV2ViS2l0R3RrUGFnZSogcGFnZSwg
V2ViS2l0R3RrRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogY29uZmlybV9tZXNzYWdlKTsKICAg
ICBnY2hhciogKCpqYXZhX3NjcmlwdF9wcm9tcHQpIChXZWJLaXRHdGtQYWdlKiBwYWdlLCBXZWJL
aXRHdGtGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBjb25zdCBnY2hhciogZGVm
YXVsdF92YWx1ZSk7CiAgICAgdm9pZCAgICgqamF2YV9zY3JpcHRfY29uc29sZV9tZXNzYWdlKSAo
V2ViS2l0R3RrUGFnZSosIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZV9u
dW1iZXIsIGNvbnN0IGdjaGFyKiBzb3VyY2VfaWQpOworCisgICAgLyoKKyAgICAgKiBpbnRlcm5h
bAorICAgICAqLworICAgIHZvaWQgICAoKnNldF9zY3JvbGxfYWRqdXN0bWVudHMpIChXZWJLaXRH
dGtQYWdlKiwgR3RrQWRqdXN0bWVudCosIEd0a0FkanVzdG1lbnQqKTsKIH07CiAKIFdFQktJVF9H
VEtfQVBJIEdUeXBlCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmNwcAkocmV2aXNp
b24gMjQ3ODEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNCArODAsMTQgQEAgV2ViS2l0R3RrUGFnZSoga2l0KFdlYkNvcmU6OlBh
Z2UqIHBhZ2UpCiAgICAgQ2hyb21lQ2xpZW50R2RrKiBjbGllbnQgPSBzdGF0aWNfY2FzdDxDaHJv
bWVDbGllbnRHZGsqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpOwogICAgIHJldHVybiBjbGll
bnQtPndlYlBhZ2UoKTsKIH0KKworLyoKKyAqIE1ha2UgdGhlIEZyYW1lVmlldyB1c2UgdGhlIEd0
a0FkanVzdG1lbnRzIG9mIHRoZSBXZWJLaXRHdGtQYWdlIHRvIGNvbmZvcm0KKyAqIHRvIHRoZSAn
c2Nyb2xsYWJsZSBwcm90b2NvbCcgb2YgR3RrKy4KKyAqLwordm9pZCBhcHBseUFkanVzdG1lbnRz
KFdlYktpdEd0a1BhZ2UqIHBhZ2UsIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldykKK3sKKyAgICBX
ZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZB
VEUocGFnZSk7CisgICAgdmlldy0+c2V0R3RrQWRqdXN0bWVudHMocGFnZURhdGEtPmhvcml6b250
YWxBZGp1c3RtZW50LCBwYWdlRGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKK30KIH0KSW5kZXg6
IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Z3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViS2l0L2d0
ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw4IEBA
CiAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJG
cmFtZUdkay5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKIAogbmFtZXNwYWNlIFdlYktpdEd0ayB7
CkBAIC01Nyw2ICs1OCw4IEBAIG5hbWVzcGFjZSBXZWJLaXRHdGsgewogICAgIFdlYktpdEd0a0Zy
YW1lKiBraXQoV2ViQ29yZTo6RnJhbWUqKTsKICAgICBXZWJDb3JlOjpQYWdlKiBjb3JlKFdlYktp
dEd0a1BhZ2UqKTsKICAgICBXZWJLaXRHdGtQYWdlKiBraXQoV2ViQ29yZTo6UGFnZSopOworCisg
ICAgdm9pZCBhcHBseUFkanVzdG1lbnRzKFdlYktpdEd0a1BhZ2UqLCBXZWJDb3JlOjpGcmFtZVZp
ZXcqKTsKIH0KIAogZXh0ZXJuICJDIiB7CkBAIC02OSwxMiArNzIsMjAgQEAgZXh0ZXJuICJDIiB7
CiAgICAgICAgIFdlYktpdEd0a0ZyYW1lKiBtYWluX2ZyYW1lOwogICAgICAgICBXZWJDb3JlOjpT
dHJpbmcgYXBwbGljYXRpb25fbmFtZV9mb3JfdXNlcl9hZ2VudDsKICAgICAgICAgV2ViQ29yZTo6
U3RyaW5nKiB1c2VyX2FnZW50OworCisgICAgICAgIC8qCisgICAgICAgICAqIGUuZy4gc2V0IGJ5
IGEgR3RrU2Nyb2xsZWRXaW5kb3cgYW5kIHVzZWQgYnkgdGhlIEZyYW1lVmlldyBvZiBvdXIgbWFp
bl9mcmFtZQorICAgICAgICAgKi8KKyAgICAgICAgR3RrQWRqdXN0bWVudCogaG9yaXpvbnRhbEFk
anVzdG1lbnQ7CisgICAgICAgIEd0a0FkanVzdG1lbnQqIHZlcnRpY2FsQWRqdXN0bWVudDsKKwor
ICAgICAgICBIYXNoU2V0PEd0a1dpZGdldCo+IGNoaWxkcmVuOwogICAgIH07CiAgICAgCiAgICAg
I2RlZmluZSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX0dUS19UWVBFX0ZSQU1FLCBXZWJLaXRHdGtG
cmFtZVByaXZhdGUpKQogICAgIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRHdGtGcmFtZVByaXZhdGUg
V2ViS2l0R3RrRnJhbWVQcml2YXRlOwogICAgIHN0cnVjdCBfV2ViS2l0R3RrRnJhbWVQcml2YXRl
IHsKLSAgICAgICAgV2ViQ29yZTo6RnJhbWVHZGsqIGZyYW1lOworICAgICAgICBXZWJDb3JlOjpG
cmFtZSogZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50R2RrKiBjbGll
bnQ7CiAgICAgICAgIFdlYktpdEd0a1BhZ2UqIHBhZ2U7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15755</attachid>
            <date>2007-07-31 07:19:27 -0700</date>
            <delta_ts>2007-07-31 07:21:05 -0700</delta_ts>
            <desc>Implement ScrollView similiar to win/qt</desc>
            <filename>gtk-scrollview-r1.patch</filename>
            <type>text/plain</type>
            <size>112275</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDc5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQ5IEBACisyMDA3LTA3LTMxICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAg
PHplY2tlQHNlbGZpc2gub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisg
ICAgICAgIEtpbGwgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSB3
YXMgbW92ZWQgdG8KKyAgICAgICAgV2ViS2l0R3RrUGFnZSwgSW1hZ2VHZGsgYW5kIHRoZSBuZWVk
ZWQgc3R1YnMgZm9yIEZyYW1lIHdoZXJlIGludHJvZHVjZWQKKyAgICAgICAgaW4gcGFnZS9nZGsv
RnJhbWVHZGsuIE9uIHRoaXMgd2F5IGNoYW5nZWQgdGhlIGNvbnN0cnVjdG9ycyBvZiB0aGUgdmFy
aW91cworICAgICAgICBQbGF0Zm9ybSpFdmVudCBtZXRob2RzIHRvIHVzZSB0aGUgc3BlY2lhbGlz
ZWQgdHlwZSBpbnN0ZWFkIG9mIHRoZSBHZGtFdmVudCB1bmlvbi4KKyAgICAgICAgVGhpcyBpcyBu
ZWVkZWQgZHVlIHRoZSBjaGFuZ2VzIGluIFdlYktpdEd0a1BhZ2UgYW5kIHRoZSByZWltcGxlbWVu
dGF0aW9uIG9mIHRoZQorICAgICAgICB2YXJpb3VzIGV2ZW50IGhvb2tzLgorCisgICAgICAgIENy
ZWF0ZSB0aGUgRnJhbWVWaWV3IGZyb20gd2l0aGluIG1ha2VEb2N1bWVudFZpZXcgYW5kIGFzIGRv
Y3VtZW50ZWQgaXQgZG9lc24ndAorICAgICAgICBob25vciB0aGUgbWFyZ2lucyBhcyBXZWJWaWV3
IGlzIGRvaW5nLiBUaGlzIHJlbWFpbnMgdG8gYmUgZG9uZS4KKworICAgICAgICBVc2UgdGhlIFNj
cm9sbFZpZXcvV2lkZ2V0IGRlc2lnbiBvZiB0aGUgV2luZG93cyBwb3J0IGFuZCBhZG9wdCBpdCB0
byBHdGsrLiBPbiB0aGUKKyAgICAgICAgd2F5IHRvIHRoaXMgaW1wbGVtZW50IFBsYXRmb3JtU2Ny
b2xsYmFyIHByb3Blcmx5LgorICAgICAgICBUaGUgb25seSB0d28gZGlmZmVyZW5jZXMgdG8gdGhl
IFdpbmRvd3MgcG9ydCBpcyB0aGF0IFBsYXRmb3JtU2Nyb2xsYmFyIGlzCisgICAgICAgIGEgR3Rr
V2lkZ2V0IChzdGlsbCBzaGFyaW5nIHRoZSBzYW1lIGdsb2JhbCB3aW5kb3cpIHdoaWNoIG5lZWRz
IHNwZWNpYWwgdHJlYXRtZW50IHdoZW4KKyAgICAgICAgcGxhY2luZyB0aGUgc2Nyb2xsYmFyIChl
LmcuIGRvbid0IG1vdmUgdGhlIHNjcm9sbGJhciBvZiBhIEZyYW1lVmlldyB3aGVuIHRoZSBGcmFt
ZVZpZXcKKyAgICAgICAgc2Nyb2xscykuIFRoZSBvdGhlciBkaWZmZXJlbmNlIGlzIGR1ZSB0aGUg
J3Njcm9sbGFibGUgcHJvdG9jb2wnIG9mIEd0aysgd2hlcmUgd2Ugd2lsbAorICAgICAgICBnZXQg
dHdvIEd0a0FkanVzdG1lbnQgc2V0LiBJZiB3ZSBoYXZlIHRoZW0gc2V0IGluIFNjcm9sbFZpZXcg
ZG9uJ3QgY3JlYXRlIGEgUGxhdGZvcm1TY3JvbGxiYXIKKyAgICAgICAgYnV0IHVwZGF0ZSB0aGUg
R3RrQWp1c3RtZW50LgorCisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogbG9hZGVy
L2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEdkazo6bWFrZURvY3VtZW50Vmlldyk6CisgICAgICAgICogbG9hZGVyL2dkay9G
cmFtZUxvYWRlckNsaWVudEdkay5oOgorICAgICAgICAqIHBhZ2UvZ2RrL0ZyYW1lR2RrLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aXNzdWVUcmFuc3Bvc2VDb21tYW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjbGVhbnVwUGxhdGZvcm1TY3JpcHRPYmplY3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpzZXROZWVkc1JlYXBwbHlTdHlsZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtTW91
c2VFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dkay9GcmFtZUdkay5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dkay9LZXlFdmVudEdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL01v
dXNlRXZlbnRHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50OjpQ
bGF0Zm9ybU1vdXNlRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcmVl
bkdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aCk6CisgICAgICAgICogcGxh
dGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1Bs
YXRmb3JtU2Nyb2xsQmFyR2RrLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0
Zm9ybVNjcm9sbGJhcik6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Ny
b2xsYmFyKToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBvc2l0aW9u
KToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlByb3BvcnRpb24pOgor
ICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OnNldFJlY3QpOgorICAgICAgICAoUGxhdGZvcm1T
Y3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1JlbmRl
clRoZW1lR2RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludENo
ZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludFJhZGlvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludEJ1dHRvbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OlNjcm9sbFZpZXdQcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjp+U2Nyb2xsVmlld1ByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNl
dEhhc0hvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OmFkanVz
dG1lbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQ
cml2YXRlOjp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Ny
b2xsVmlld1ByaXZhdGU6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OlNjcm9sbFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0R3Rr
QWRqdXN0bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnJl
c2l6ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNvbnRlbnRzWCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpjb250ZW50c1kpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6Om1heGltdW1TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Ny
b2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c3VwcHJlc3NTY3JvbGxiYXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldEhTY3JvbGxiYXJNb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFZTY3JvbGxiYXJNb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbGJhcnNNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OnNldEZyYW1lR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cmVtb3Zl
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3
UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndpbmRvd1RvQ29udGVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OmNvbnZlcnRDaGlsZFRvU2VsZik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
Ojpjb252ZXJ0U2VsZlRvQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3Ojp3aW5kb3dSZXNpemVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3OjpyZXNpemVyT3ZlcmxhcHNDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OmFkanVzdE92ZXJsYXBwaW5nU2Nyb2xsYmFyQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmFk
ZFRvRGlydHlSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVwZGF0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0UHJpdmF0
ZTo6Z2RrRHJhd2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpXaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2lkZ2V0OjppbnRlcm5hbEd0a1dpZGdldCk6CisgICAgICAgIChXZWJD
b3JlOjpXaWRnZXQ6OnNldEludGVybmFsR3RrV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZGdldDo6c2V0Q29udGFpbmluZ1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmNv
bnRhaW5pbmdXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpmcmFtZUdlb21ldHJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0RnJhbWVHZW9tZXRyeSk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6
OnBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEZvY3VzKToKKyAgICAgICAg
KFdlYkNvcmU6OldpZGdldDo6c2V0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmhpZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjppbnZhbGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldpZGdldDo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0Ojpjb252ZXJ0VG9Db250YWluaW5nV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dDo6Y29udmVydENoaWxkVG9TZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6Y29udmVy
dFNlbGZUb0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c3VwcHJlc3NJbnZhbGlk
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRTdXBwcmVzc0ludmFsaWRhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNldFNjcm9sbFZpZXdDb250cm9sKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEdka0V4cG9zZUV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2RrRXhwb3NlRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZGtEcmF3YWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZVBvaW50KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwOgorICAgICAgICAobG9hZFJlc291
cmNlSW50b0FycmF5KToKKwogMjAwNy0wNy0zMCAgSnVzdGluIEdhcmNpYSAgPGp1c3Rpbi5nYXJj
aWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lv
biAyNDc4MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTg0Niw2
ICs4NDYsNyBAQCBnZGstcG9ydCB7CiAgICAgICAgIHBsYXRmb3JtL1RleHRDb2RlY0lDVS5jcHAg
XAogICAgICAgICBwbGF0Zm9ybS9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgXAogICAgICAgICBw
YWdlL2dkay9FdmVudEhhbmRsZXJHZGsuY3BwIFwKKyAgICAgICAgcGFnZS9nZGsvRnJhbWVHZGsu
Y3BwIFwKICAgICAgICAgcGFnZS9nZGsvQ29udGV4dE1lbnVDbGllbnRHZGsuY3BwIFwKICAgICAg
ICAgcGFnZS9nZGsvRHJhZ0NvbnRyb2xsZXJHZGsuY3BwIFwKICAgICAgICAgcGFnZS9nZGsvSW5z
cGVjdG9yQ2xpZW50R2RrLmNwcCBcCkBAIC04NjAsNyArODYxLDYgQEAgZ2RrLXBvcnQgewogICAg
ICAgICBwbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2Rr
L0ZvbnRHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsu
Y3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcCBcCiAgICAgICAgIHBsYXRm
b3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9nZGsv
S2V5RXZlbnRHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2RrL0xvZ2dpbmdHZGsuY3BwIFwK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmNwcAkocmV2
aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVMb2FkZXJDbGllbnRHZGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpA
QCAtMjYwLDcgKzI2MCwyOSBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpzaG91bGRHb1Rv
SGlzCiB9CiAKIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEdkazo6bWFrZURvY3VtZW50VmlldygpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjptYWtlRG9jdW1lbnRWaWV3KCkgeworICAg
IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IGNvcmUobV9mcmFtZSk7CisgICAgaWYgKGZyYW1lKQor
ICAgICAgICBmcmFtZS0+c2V0VmlldygwKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
bmV3IEZyYW1lVmlldyhmcmFtZSk7CisgICAgZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsKKyAg
ICBmcmFtZVZpZXctPmRlcmVmKCk7CisgICAgCisgICAgLyoKKyAgICAgKiBzZXQgdGhlIFdlYktp
dEd0a1BhZ2UgKENvbnRhaW5pbmcgV2luZG93KSBhbmQgbWFrZSBzdXJlIHRvIGdpdmUgaXQgYSBz
YW5lIGRlZmF1bHQgZnJhbWUgZ2VvbWV0cnkuCisgICAgICovCisgICAgV2ViS2l0R3RrUGFnZSog
cGFnZSA9IGdldFBhZ2VGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgZnJhbWVWaWV3LT5zZXRDb250
YWluaW5nV2luZG93KHBhZ2UpOworICAgIGZyYW1lVmlldy0+c2V0RnJhbWVHZW9tZXRyeShJbnRS
ZWN0KDAsIDAsIEdUS19XSURHRVQocGFnZSktPmFsbG9jYXRpb24ud2lkdGgsIEdUS19XSURHRVQo
cGFnZSktPmFsbG9jYXRpb24uaGVpZ2h0KSk7CisgICAgV2ViS2l0R3RrOjphcHBseUFkanVzdG1l
bnRzKHBhZ2UsIGZyYW1lVmlldyk7CisKKyAgICAvKgorICAgICAqIFRPRE86IFVzZSBtYXJnaW5z
IGxpa2UgV2ViVmlldz8KKyAgICAgKi8KK30KKwogdm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6
bWFrZVJlcHJlc2VudGF0aW9uKERvY3VtZW50TG9hZGVyKikgeyBub3RJbXBsZW1lbnRlZCgpOyB9
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpmb3JjZUxheW91dCgpIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQogdm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6Zm9yY2VMYXlvdXRGb3JOb25IVE1M
KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVM
b2FkZXJDbGllbnRHZGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVM
b2FkZXJDbGllbnRHZGsuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL2xvYWRlci9nZGsv
RnJhbWVMb2FkZXJDbGllbnRHZGsuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsNiBAQAog
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEd0a0ZyYW1lIFdlYktpdEd0a0ZyYW1lOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBGcmFtZUdkazsKLQogICAgIGNsYXNzIEZyYW1lTG9h
ZGVyQ2xpZW50R2RrIDogcHVibGljIEZyYW1lTG9hZGVyQ2xpZW50IHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50R2RrKFdlYktpdEd0a0ZyYW1lKik7CkluZGV4OiBXZWJD
b3JlL3BhZ2UvZ2RrL0ZyYW1lR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvZ2Rr
L0ZyYW1lR2RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9nZGsvRnJhbWVHZGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIEZyYW1lOjppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisgICAgCit2b2lkIEZyYW1lOjpjbGVhbnVwUGxhdGZv
cm1TY3JpcHRPYmplY3RzKCkKK3sgICAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfSAgIAorICAg
IAorRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24oKQoreyAgICAgICAK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEZyYW1lOjpk
YXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBGcmFtZTo6c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BhZ2UvZ2RrL0ZyYW1l
R2RrLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgJKHJldmlzaW9uIDI0Nzgx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCB0eXBlZGVmIGxvbmcgTFBBUkFNOwogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShHREspCi10eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKK3R5cGVk
ZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oUVQpCkBAIC04MCw3ICs4MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oR0RLKQotICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnQq
KTsKKyAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5Kik7CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFFUKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNl
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVu
dC5oCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgdHlwZWRlZiBsb25nIExQQVJB
TTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQg
R2RrRXZlbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRCdXR0b24gR2RrRXZlbnRCdXR0b247
Cit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRNb3Rpb24gR2RrRXZlbnRNb3Rpb247CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFFUKQpAQCAtMTE4LDcgKzExOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgYm9vbCBhY3RpdmF0ZWRXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9hY3Rp
dmF0ZWRXZWJWaWV3OyB9CiAjZW5kaWYKICNpZiBQTEFURk9STShHREspIAotICAgICAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnQqKTsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KEdk
a0V2ZW50QnV0dG9uKik7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudE1vdGlv
biopOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVu
dChRTW91c2VFdmVudCosIGludCBjbGlja0NvdW50KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1XaGVlbEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybVdoZWVsRXZlbnQuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtV2hlZWxFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHR5cGVk
ZWYgbG9uZyBMUEFSQU07CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYgdW5p
b24gX0dka0V2ZW50IEdka0V2ZW50OwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50U2Nyb2xsIEdk
a0V2ZW50U2Nyb2xsOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKQEAgLTg1LDcgKzg1LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCwg
V1BBUkFNLCBMUEFSQU0sIGJvb2wgaXNIb3Jpem9udGFsKTsKICNlbmRpZgogI2lmIFBMQVRGT1JN
KEdESykKLSAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50Kik7CisgICAgICAgIFBs
YXRmb3JtV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCopOwogI2VuZGlmCiAjaWYgUExBVEZPUk0o
UVQpCiAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudChRV2hlZWxFdmVudCopOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogCiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiBzdHJ1Y3QgX0d0a0xheW91
dCBHdGtMYXlvdXQ7Cit0eXBlZGVmIHN0cnVjdCBfR3RrQWRqdXN0bWVudCBHdGtBZGp1c3RtZW50
OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC0xNTEsMTMgKzE1MSwyNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAjaWYgUExBVEZPUk0oR0RLKQogICAgICAgICBTY3JvbGxWaWV3KCk7
CiAgICAgICAgIH5TY3JvbGxWaWV3KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRHdGtBZGp1
c3RtZW50cyhHdGtBZGp1c3RtZW50KiBoYWRqLCBHdGtBZGp1c3RtZW50KiB2YWRqKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgdmlydHVh
bCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0R3RrV2lkZ2V0KEd0a0xheW91dCogbGF5b3V0KTsKKyAgICAgICAg
dmlydHVhbCBJbnRQb2ludCBjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiwgY29uc3Qg
SW50UG9pbnQmKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0U2VsZlRv
Q2hpbGQoY29uc3QgV2lkZ2V0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUdlb21ldHJ5KGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICAgICAgSW50UmVj
dCB3aW5kb3dSZXNpemVyUmVjdCgpOworICAgICAgICBib29sIHJlc2l6ZXJPdmVybGFwc0NvbnRl
bnQoKSBjb25zdDsKKyAgICAgICAgdm9pZCBhZGp1c3RPdmVybGFwcGluZ1Njcm9sbGJhckNvdW50
KGludCBvdmVybGFwRGVsdGEpOworCisgICAgICAgIHZvaWQgYWRkVG9EaXJ0eVJlZ2lvbihjb25z
dCBJbnRSZWN0Jik7CisgICAgICAgIHZvaWQgc2Nyb2xsQmFja2luZ1N0b3JlKGludCBkeCwgaW50
IGR5LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QpOworICAgICAgICB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHZvaWQgdXBkYXRlVmlldyhjb25zdCBJbnRSZWN0JiwgYm9vbCBub3cgPSBmYWxzZSk7
Ci0gICAgICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOworICAgICAgICBJbnRTaXplIG1heGlt
dW1TY3JvbGwoKSBjb25zdDsKKyAgICAgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IElu
dFNpemUmIGRlc2lyZWRPZmZzZXQpOwogICAgICAgICBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0ZTsK
ICAgICAgICAgU2Nyb2xsVmlld1ByaXZhdGUqIG1fZGF0YTsKICNlbmRpZgpAQCAtMTg4LDYgKzIw
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXIgKnZl
cnRpY2FsU2Nyb2xsQmFyKCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgorICAgICAgICBIYXNoU2V0
PFdpZGdldCo+KiBjaGlsZHJlbigpOwogICAgICAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoY29u
c3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCk7CiAgICAgICAgIEludFNpemUgbWF4aW11bVNjcm9s
bCgpIGNvbnN0OwogICAgICAgICBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0ZTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9XaWRn
ZXQuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4IEBAIHR5cGVkZWYgc3RydWN0IEhXTkRfXyogSFdORDsK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiBzdHJ1Y3QgX0dka0RyYXdhYmxl
IEdka0RyYXdhYmxlOwogdHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtXaWRnZXQ7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0R3RrUGFnZSBXZWJLaXRHdGtQYWdlOwogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShRVCkKQEAgLTEzNiwxMCArMTM2LDI4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQotICAgICAgICBXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRHdGtXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0gICAgICAgIEdk
a0RyYXdhYmxlKiBnZGtEcmF3YWJsZSgpIGNvbnN0OwotICAgICAgICBHdGtXaWRnZXQqIGd0a1dp
ZGdldCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SW50ZXJuYWxHdGtXaWRnZXQo
R3RrV2lkZ2V0Kik7CisgICAgICAgIEd0a1dpZGdldCogaW50ZXJuYWxHdGtXaWRnZXQoKSBjb25z
dDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKKyAgICAg
ICAgU2Nyb2xsVmlldyogcGFyZW50KCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRDb250YWlu
aW5nV2luZG93KFdlYktpdEd0a1BhZ2UqKTsKKyAgICAgICAgV2ViS2l0R3RrUGFnZSogY29udGFp
bmluZ1dpbmRvdygpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5n
ZWQoKSBjb25zdDsKKworICAgICAgICBJbnRSZWN0IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3co
Y29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgICAgICBJbnRQb2ludCBjb252ZXJ0VG9Db250YWlu
aW5nV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgICAgIEludFBvaW50IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCisgICAgICAg
IHZpcnR1YWwgSW50UG9pbnQgY29udmVydENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCosIGNvbnN0
IEludFBvaW50JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFNlbGZU
b0NoaWxkKGNvbnN0IFdpZGdldCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CisKKyAgICAgICAg
Ym9vbCBzdXBwcmVzc0ludmFsaWRhdGlvbigpIGNvbnN0OworICAgICAgICB2b2lkIHNldFN1cHBy
ZXNzSW52YWxpZGF0aW9uKGJvb2wpOworCisgICAgICAgIHZvaWQgc2V0U2Nyb2xsVmlld0NvbnRy
b2woKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9GcmFtZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJh
bWVHZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1l
R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
RnJhbWVHZGsuaCIKLQotI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEdk
ay5oIgotI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0Lmgi
Ci0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRl
ICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVB
c1RleHQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNl
UmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAi
U2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCi0jaW5jbHVkZSAid2Via2l0
Z3RrZnJhbWUuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0KLS8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0Ci0vLyBUaGlz
IGRvZXMgbm90IGJlbG9uZyBoZXJlIGFuZCBJJ20gbm90IHN1cmUgd2hlcmUKLS8vIGl0IHNob3Vs
ZCBnbwotLy8gSSBkb24ndCBrbm93IHdoYXQgdGhlIHBsYW5zIG9yIGRlc2lnbiBpcwotLy8gZm9y
IG5vbmUgY29kZSByZXNvdXJjZXMKLVZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXko
Y29uc3QgY2hhciogcmVzb3VyY2VOYW1lKQotewotICAgIFZlY3RvcjxjaGFyPiByZXNvdXJjZTsK
LSAgICAvL2lmIChzdHJjbXAocmVzb3VyY2VOYW1lLCJtaXNzaW5nSW1hZ2UiKSA9PSAwKSB7Ci0g
ICAgLy99Ci0gICAgcmV0dXJuIHJlc291cmNlOwotfQotCi1zdHJ1Y3QgRnJhbWVHZGtFeHBvc2VE
YXRhIHsKLSAgICBHdGtDb250YWluZXIgKmNvbnRhaW5lcjsKLSAgICBHZGtFdmVudEV4cG9zZSAq
ZXhwb3NlOwotfTsKLQotc3RhdGljIHZvaWQgZnJhbWVfZ2RrX2V4cG9zZV9jaGlsZChHdGtXaWRn
ZXQgKndpZGdldCwgZ3BvaW50ZXIgX2RhdGEpCi17Ci0gICAgRnJhbWVHZGtFeHBvc2VEYXRhKiBk
YXRhID0gKEZyYW1lR2RrRXhwb3NlRGF0YSopX2RhdGE7Ci0gICAgaW50IHdpZHRoLCBoZWlnaHQ7
Ci0gICAgZ3RrX2NvbnRhaW5lcl9wcm9wYWdhdGVfZXhwb3NlKGRhdGEtPmNvbnRhaW5lciwgd2lk
Z2V0LCBkYXRhLT5leHBvc2UpOwotfSAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GcmFtZUdk
azo6RnJhbWVHZGsoUGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1l
bnQsIEZyYW1lTG9hZGVyQ2xpZW50R2RrKiBmcmFtZUxvYWRlcikKLSAgICA6IEZyYW1lKHBhZ2Us
IG93bmVyRWxlbWVudCwgZnJhbWVMb2FkZXIpCi17Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0g
cGFnZS0+c2V0dGluZ3MoKTsKLSAgICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNh
bGx5KHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoNSk7Ci0gICAgc2V0
dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoNSk7Ci0gICAgc2V0dGluZ3MtPnNldFNo
b3VsZFByaW50QmFja2dyb3VuZHModHJ1ZSk7Ci0gICAgc2V0dGluZ3MtPnNldEphdmFTY3JpcHRF
bmFibGVkKHRydWUpOwotCi0gICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDE0
KTsKLSAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDE0KTsKLSAgICBzZXR0aW5ncy0+
c2V0U2VyaWZGb250RmFtaWx5KCJUaW1lcyBOZXcgUm9tYW4iKTsKLSAgICBzZXR0aW5ncy0+c2V0
U2Fuc1NlcmlmRm9udEZhbWlseSgiQXJpYWwiKTsKLSAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250
RmFtaWx5KCJDb3VyaWVyIik7Ci0gICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgi
QXJpYWwiKTsKLX0KLQotRnJhbWVHZGs6On5GcmFtZUdkaygpCi17Ci0gICAgbG9hZGVyKCktPmNh
bmNlbEFuZENsZWFyKCk7Ci19Ci0KLXZvaWQgRnJhbWVHZGs6OmR1bXBSZW5kZXJUcmVlKCkgY29u
c3QKLXsKLSAgICBpZiAodmlldygpLT5uZWVkc0xheW91dCgpKQotICAgICAgICB2aWV3KCktPmxh
eW91dCgpOwotICAgIAotICAgIFN0cmluZyB0eHQgPSBleHRlcm5hbFJlcHJlc2VudGF0aW9uKHJl
bmRlcmVyKCkpOwotICAgIENTdHJpbmcgdXRmOFN0ciA9IHR4dC51dGY4KCk7Ci0gICAgY29uc3Qg
Y2hhciAqdXRmOCA9IHV0ZjhTdHIuZGF0YSgpOwotICAgIGlmICh1dGY4KQotICAgICAgICBwcmlu
dGYoIiVzXG4iLCB1dGY4KTsKLSAgICBlbHNlCi0gICAgICAgIHByaW50ZigiRnJhbWVHZGs6OmR1
bXBSZW5kZXJUcmVlKCkgbm8gZGF0YVxuIik7Ci19Ci0KLWJvb2wgRnJhbWVHZGs6OmtleVByZXNz
KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQpCi17Ci0gICAgaWYgKCFldmVu
dEhhbmRsZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGV2ZW50SGFu
ZGxlcigpLT5rZXlFdmVudChrZXlFdmVudCk7Ci19Ci0KLXZvaWQgRnJhbWVHZGs6OmhhbmRsZUdk
a0V2ZW50KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Ci0K
LSAgICAgICAgY2FzZSBHREtfRVhQT1NFOiB7Ci0gICAgICAgICAgICBHZGtSZWN0YW5nbGUgY2xp
cDsKLSAgICAgICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdp
b24sICZjbGlwKTsKLSAgICAgICAgICAgIGdka193aW5kb3dfYmVnaW5fcGFpbnRfcmVnaW9uKGV2
ZW50LT5hbnkud2luZG93LCBldmVudC0+ZXhwb3NlLnJlZ2lvbik7Ci0gICAgICAgICAgICBjYWly
b190KiBjciA9IGdka19jYWlyb19jcmVhdGUoZXZlbnQtPmFueS53aW5kb3cpOwotICAgICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0IGN0eChjcik7Ci0gICAgICAgICAgICBjdHguc2V0R2RrRHJhd2Fi
bGUoZXZlbnQtPmFueS53aW5kb3cpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAodmlldygpLT5uZWVkc0xheW91dCgpKQotICAgICAgICAgICAgICAg
ICAgICB2aWV3KCktPmxheW91dCgpOwotICAgICAgICAgICAgICAgIEludFJlY3QgcmVjdChjbGlw
LngsIGNsaXAueSwgY2xpcC53aWR0aCwgY2xpcC5oZWlnaHQpOwotICAgICAgICAgICAgICAgIHBh
aW50KCZjdHgsIHJlY3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fpcm9fZGVzdHJv
eShjcik7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBNYWtlIHN1cmUgY2hpbGRy
ZW4gb2YgdGhlIHZpZXcgZ2V0IHJlZHJhd24KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
RnJhbWVHZGtFeHBvc2VEYXRhIGRhdGEgPSB7IEdUS19DT05UQUlORVIodmlldygpLT5ndGtXaWRn
ZXQoKSksICZldmVudC0+ZXhwb3NlIH07Ci0gICAgICAgICAgICBndGtfY29udGFpbmVyX2ZvcmFs
bChHVEtfQ09OVEFJTkVSKHZpZXcoKS0+Z3RrV2lkZ2V0KCkpLCBmcmFtZV9nZGtfZXhwb3NlX2No
aWxkLCAmZGF0YSk7Ci0gICAgICAgICAgICBnZGtfd2luZG93X2VuZF9wYWludChldmVudC0+YW55
LndpbmRvdyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgY2FzZSBHREtfQ09ORklHVVJFOiB7Ci0gICAgICAgICAgICB2aWV3KCktPnVwZGF0
ZUdlb21ldHJ5KGV2ZW50LT5jb25maWd1cmUud2lkdGgsIGV2ZW50LT5jb25maWd1cmUuaGVpZ2h0
KTsKLSAgICAgICAgICAgIGZvcmNlTGF5b3V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgR0RLX1NDUk9MTDogewotICAgICAgICAgICAgUGxhdGZvcm1X
aGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgdmlldygpLT53aGVlbEV2
ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICAgICAgaWYgKHdoZWVsRXZlbnQuaXNBY2NlcHRlZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgSGl0VGVzdFJlcXVlc3Qg
aGl0VGVzdFJlcXVlc3QodHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBIaXRUZXN0UmVzdWx0IGhp
dFRlc3RSZXN1bHQod2hlZWxFdmVudC5wb3MoKSk7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5s
YXllcigpLT5oaXRUZXN0KGhpdFRlc3RSZXF1ZXN0LCBoaXRUZXN0UmVzdWx0KTsKLSAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpOwotICAgICAgICAgICAg
aWYgKCFub2RlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIC8qCi0gICAg
ICAgICAgICAgKiBGSVhNRTogRG9lcyB0aGlzIGJlbG9uZyBoZXJlPwotICAgICAgICAgICAgICog
RGVmYXVsdCB0byBzY3JvbGxpbmcgdGhlIHBhZ2UKLSAgICAgICAgICAgICAqIG5vdCBzdXJlIHdo
eSBpdHMgbnVsbAotICAgICAgICAgICAgICogYnJva2UgYW55d2F5IHdoZW4gaXRzIG5vdCBudWxs
Ci0gICAgICAgICAgICAgKiBkb1Njcm9sbChyZW5kZXJlcigpLCB3aGVlbEV2ZW50LmRlbHRhWCgp
LCB3aGVlbEV2ZW50LmRlbHRhWSgpKTsKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHREtfRFJBR19FTlRFUjoKLSAgICAgICAgY2Fz
ZSBHREtfRFJBR19MRUFWRToKLSAgICAgICAgY2FzZSBHREtfRFJBR19NT1RJT046Ci0gICAgICAg
IGNhc2UgR0RLX0RSQUdfU1RBVFVTOgotICAgICAgICBjYXNlIEdES19EUk9QX1NUQVJUOgotICAg
ICAgICBjYXNlIEdES19EUk9QX0ZJTklTSEVEOiB7Ci0gICAgICAgICAgICAvL2Jvb2wgdXBkYXRl
RHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7Ci0gICAg
ICAgICAgICAvL3ZvaWQgY2FuY2VsRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiwgQ2xpcGJvYXJkKik7Ci0gICAgICAgICAgICAvL2Jvb2wgcGVyZm9ybURyYWdBbmREcm9wKGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKLSAgICAgICAgICAg
IGV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICAg
ICAgY2FzZSBHREtfMkJVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVT
UzoKLSAgICAgICAgICAgIGV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoUGxh
dGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHREtfQlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgICAgICBldmVudEhhbmRsZXIoKS0+aGFuZGxl
TW91c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHREtfS0VZX1BSRVNTOgotICAgICAgICBjYXNlIEdES19L
RVlfUkVMRUFTRTogewotICAgICAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleUV2ZW50
KGV2ZW50KTsKLSAgICAgICAgICAgIGtleVByZXNzKGtleUV2ZW50KTsKLSAgICAgICAgfQotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEZyYW1l
Ojppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgRnJhbWU6OmNsZWFudXBQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLURyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0
aW9uKCkgCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9p
ZCBGcmFtZTo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAkocmV2aXNpb24gMjQ3ODEp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgRnJhbWVHZGtfaAotI2RlZmluZSBGcmFtZUdka19oCi0KLSNpbmNsdWRlICJF
ZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgPGdkay9nZGsuaD4K
LSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGcmFtZUdkazsKLWNsYXNzIEZyYW1lTG9hZGVyQ2xp
ZW50R2RrOwotY2xhc3MgRm9ybURhdGE7Ci0KLQotY2xhc3MgRnJhbWVHZGsgOiBwdWJsaWMgRnJh
bWUgewotcHVibGljOgotICAgIEZyYW1lR2RrKFBhZ2UqLCBIVE1MRnJhbWVPd25lckVsZW1lbnQq
LCBGcmFtZUxvYWRlckNsaWVudEdkayopOwotICAgIHZpcnR1YWwgfkZyYW1lR2RrKCk7Ci0KLSAg
ICB2b2lkIGhhbmRsZUdka0V2ZW50KEdka0V2ZW50Kik7Ci0gICAgYm9vbCBrZXlQcmVzcyhjb25z
dCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleUV2ZW50KTsKLQotICAgIHZvaWQgZHVtcFJlbmRl
clRyZWUoKSBjb25zdDsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9LZXlFdmVudEdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
S2V5RXZlbnRHZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0tleUV2ZW50R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU4LDE3ICs0NTgsMTcgQEAgc3Rh
dGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVucwogCiB9CiAKLVBsYXRmb3JtS2V5
Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50KiBldmVudCkKK1BsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5KiBldmVu
dCkKIHsKICAgICBtX2lzS2V5VXAgPSBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0U7Ci0g
ICAgbV9zaGlmdEtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBHREtfU0hJRlRfTUFTSyAhPSAwOwot
ICAgIG1fY3RybEtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLICE9IDA7
Ci0gICAgbV9hbHRLZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwOwot
ICAgIG1fbWV0YUtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBHREtfTU9EMl9NQVNLICE9IDA7Ci0g
ICAgbV90ZXh0ID0gZXZlbnQtPmtleS5zdHJpbmc7Ci0gICAgbV91bm1vZGlmaWVkVGV4dCA9IGV2
ZW50LT5rZXkuc3RyaW5nOwotICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJGb3JH
ZGtLZXlDb2RlKGV2ZW50LT5rZXkua2V5dmFsKTsKLSAgICBtX1dpbmRvd3NLZXlDb2RlID0gd2lu
ZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVudC0+a2V5LmtleXZhbCk7CisgICAgbV9zaGlmdEtl
eSA9IGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLICE9IDA7CisgICAgbV9jdHJsS2V5ID0g
ZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSyAhPSAwOworICAgIG1fYWx0S2V5ID0gZXZl
bnQtPnN0YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwOworICAgIG1fbWV0YUtleSA9IGV2ZW50LT5z
dGF0ZSAmIEdES19NT0QyX01BU0sgIT0gMDsKKyAgICBtX3RleHQgPSBldmVudC0+c3RyaW5nOwor
ICAgIG1fdW5tb2RpZmllZFRleHQgPSBldmVudC0+c3RyaW5nOworICAgIG1fa2V5SWRlbnRpZmll
ciA9IGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGV2ZW50LT5rZXl2YWwpOworICAgIG1fV2lu
ZG93c0tleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGV2ZW50LT5rZXl2YWwpOwog
ICAgIG1fYXV0b1JlcGVhdCA9IGZhbHNlOwogICAgIG1faXNLZXlwYWQgPSBmYWxzZTsKIApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDU3ICsyOCw3MSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogCiAj
aW5jbHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgIkFz
c2VydGlvbnMuaCIKKwogI2luY2x1ZGUgPGdkay9nZGsuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBt
b2RpZmllciBpcyBBbHQgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgR0RLX01PRDFfTUFTSy4KIAot
UGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQor
UGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRCdXR0b24qIGV2
ZW50KQogewogICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKLSAgICBtX3Bvc2l0aW9u
ID0gSW50UG9pbnQoKGludClldmVudC0+bW90aW9uLngsIChpbnQpZXZlbnQtPm1vdGlvbi55KTsK
LSAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+bW90aW9uLnhfcm9v
dCwgKGludClldmVudC0+bW90aW9uLnlfcm9vdCk7Ci0gICAgbV9zaGlmdEtleSA9IGV2ZW50LT5i
dXR0b24uc3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKLSAgICBtX2N0cmxLZXkgPSBldmVudC0+YnV0
dG9uLnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKLSAgICBtX2FsdEtleSA9IGV2ZW50LT5idXR0
b24uc3RhdGUgJiBHREtfTU9EMV9NQVNLOwotICAgIG1fbWV0YUtleSA9IGV2ZW50LT5idXR0b24u
c3RhdGUgJiBHREtfTU9EMl9NQVNLOworICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2
ZW50LT54LCAoaW50KWV2ZW50LT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQo
KGludClldmVudC0+eF9yb290LCAoaW50KWV2ZW50LT55X3Jvb3QpOworICAgIG1fc2hpZnRLZXkg
PSBldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKKyAgICBtX2N0cmxLZXkgPSBldmVudC0+
c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLOworICAgIG1fYWx0S2V5ID0gZXZlbnQtPnN0YXRlICYg
R0RLX01PRDFfTUFTSzsKKyAgICBtX21ldGFLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfTU9EMl9N
QVNLOwogCiAgICAgc3dpdGNoIChldmVudC0+dHlwZSkgewotICAgICAgICBjYXNlIEdES19NT1RJ
T05fTk9USUZZOgotICAgICAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50TW92ZWQ7Ci0g
ICAgICAgICAgICBtX2J1dHRvbiA9IE5vQnV0dG9uOworICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVT
UzoKKyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzNCVVRUT05fUFJF
U1M6CisgICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6CisgICAgICAgIG1fZXZlbnRUeXBlID0g
TW91c2VFdmVudFByZXNzZWQ7CisgICAgICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9O
X1JFTEVBU0UpIHsKKyAgICAgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFJlbGVhc2Vk
OwogICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtfMkJVVFRPTl9Q
UkVTUzoKLSAgICAgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtf
QlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRQcmVz
c2VkOwotICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkg
ewotICAgICAgICAgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFJlbGVhc2VkOwotICAg
ICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV2
ZW50LT50eXBlID09IEdES19CVVRUT05fUFJFU1MpCi0gICAgICAgICAgICAgICAgbV9jbGlja0Nv
dW50ID0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9O
X1BSRVNTKQotICAgICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDI7Ci0gICAgICAgICAgICBl
bHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKLSAgICAgICAgICAgICAg
ICBtX2NsaWNrQ291bnQgPSAzOwotCi0gICAgICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0
b24gPT0gMSkKLSAgICAgICAgICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247Ci0gICAgICAg
ICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiA9PSAyKQotICAgICAgICAgICAgICAg
IG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1
dHRvbi5idXR0b24gPT0gMykKLSAgICAgICAgICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9u
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiVW5rbm93biBtb3VzZSBldmVudFxuIik7Ci0gICAgICAgICAgICBhc3Nl
cnQoMCk7Ci0gICAgfQorICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRU
T05fUFJFU1MpCisgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAxOworICAgICAgICBlbHNlIGlm
IChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUykKKyAgICAgICAgICAgIG1fY2xpY2tD
b3VudCA9IDI7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18zQlVUVE9OX1BS
RVNTKQorICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMzsKKworICAgICAgICBpZiAoZXZlbnQt
PmJ1dHRvbiA9PSAxKQorICAgICAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOworICAgICAg
ICBlbHNlIGlmIChldmVudC0+YnV0dG9uID09IDIpCisgICAgICAgICAgICBtX2J1dHRvbiA9IE1p
ZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAzKQorICAgICAg
ICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OwogfQogCitQbGF0Zm9y
bU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudE1vdGlvbiogbW90aW9uKQor
eworICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKKyAgICBtX3Bvc2l0aW9uID0gSW50
UG9pbnQoKGludCltb3Rpb24tPngsIChpbnQpbW90aW9uLT55KTsKKyAgICBtX2dsb2JhbFBvc2l0
aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPnhfcm9vdCwgKGludCltb3Rpb24tPnlfcm9vdCk7
CisgICAgbV9zaGlmdEtleSA9IG1vdGlvbi0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKKyAgICBt
X2N0cmxLZXkgPSBtb3Rpb24tPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKKyAgICBtX2FsdEtl
eSA9IG1vdGlvbi0+c3RhdGUgJiBHREtfTU9EMV9NQVNLOworICAgIG1fbWV0YUtleSA9IG1vdGlv
bi0+c3RhdGUgJiBHREtfTU9EMl9NQVNLOworCisgICAgc3dpdGNoIChtb3Rpb24tPnR5cGUpIHsK
KyAgICBjYXNlIEdES19NT1RJT05fTk9USUZZOgorICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNl
RXZlbnRNb3ZlZDsKKyAgICAgICAgbV9idXR0b24gPSBOb0J1dHRvbjsKKyAgICAgICAgbV9jbGlj
a0NvdW50ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfTsKK30KIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1BsYXRmb3JtU2NyZWVuR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9QbGF0Zm9ybVNjcmVlbkdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvUGxhdGZvcm1TY3JlZW5HZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw5IEBACiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldpZGdldC5o
IgotI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCisKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCkBAIC0zOCwxMCArNDAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBp
bnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpIAogewotICAgIEFTU0VSVCh3aWRnZXQtPmdk
a0RyYXdhYmxlKCkpOworICAgIEFTU0VSVCh3aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKSAmJiB3
aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKS0+YmluX3dpbmRvdyk7CiAKICAgICBnaW50IGR1bW15
LCBkZXB0aDsKLSAgICBnZGtfd2luZG93X2dldF9nZW9tZXRyeSh3aWRnZXQtPmdka0RyYXdhYmxl
KCksICZkdW1teSwgJmR1bW15LCAmZHVtbXksICZkdW1teSwgJmRlcHRoKTsKKyAgICBnZGtfd2lu
ZG93X2dldF9nZW9tZXRyeSh3aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKS0+YmluX3dpbmRvdywg
JmR1bW15LCAmZHVtbXksICZkdW1teSwgJmR1bW15LCAmZGVwdGgpOwogICAgIHJldHVybiBkZXB0
aDsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhci5oCShy
ZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJXaWRnZXQuaCIK
ICNpbmNsdWRlICJTY3JvbGxCYXIuaCIKIAordHlwZWRlZiBzdHJ1Y3QgX0d0a0FkanVzdG1lbnQg
R3RrQWRqdXN0bWVudDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQbGF0Zm9ybVNj
cm9sbGJhciA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYyBTY3JvbGxiYXIgewpAQCAtNTEsNiArNTMs
MTAgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBv
c2l0aW9uKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUHJvcG9ydGlvbigpOworCitw
cml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGd0a1ZhbHVlQ2hhbmdlZChHdGtBZGp1c3RtZW50Kiwg
UGxhdGZvcm1TY3JvbGxiYXIqKTsKKyAgICBHdGtBZGp1c3RtZW50KiBtX2FkanVzdG1lbnQ7CiB9
OwogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJH
ZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3Jt
U2Nyb2xsQmFyR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMzQgKzM3LDMzIEBACiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCisKIFBsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0Zm9ybVNj
cm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsYmFy
Q29udHJvbFNpemUgY29udHJvbFNpemUpCiAgICAgOiBTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRh
dGlvbiwgY29udHJvbFNpemUpCisgICAgLCBtX2FkanVzdG1lbnQoR1RLX0FESlVTVE1FTlQoZ3Rr
X2FkanVzdG1lbnRfbmV3KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApKSkKIHsgCiAgICAg
R3RrU2Nyb2xsYmFyKiBzY3JvbGxCYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TQ1JPTExCQVIoOjpndGtf
aHNjcm9sbGJhcl9uZXcoTlVMTCkpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU
S19TQ1JPTExCQVIoOjpndGtfdnNjcm9sbGJhcl9uZXcoTlVMTCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1RLX1NDUk9MTEJBUig6Omd0a19oc2Nyb2xsYmFyX25ldyhtX2FkanVz
dG1lbnQpKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU0NST0xMQkFSKDo6
Z3RrX3ZzY3JvbGxiYXJfbmV3KG1fYWRqdXN0bWVudCkpOwogICAgIGd0a193aWRnZXRfc2hvdyhH
VEtfV0lER0VUKHNjcm9sbEJhcikpOwotICAgIHNldEd0a1dpZGdldChHVEtfV0lER0VUKHNjcm9s
bEJhcikpOworICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChzY3JvbGxCYXIpKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KEdfT0JKRUNUKHNjcm9sbEJhciksICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhQbGF0Zm9ybVNjcm9sbGJhcjo6Z3RrVmFsdWVDaGFuZ2VkKSwgdGhpcyk7CisKKyAgICBz
ZXRJbnRlcm5hbEd0a1dpZGdldChHVEtfV0lER0VUKHNjcm9sbEJhcikpOwogCiAgICAgLyoKICAg
ICAgKiBhc3NpZ24gYSBzYW5lIGRlZmF1bHQgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgU2Nyb2xs
QmFyLCBvdGhlcndpc2UKICAgICAgKiB3ZSB3aWxsIGVuZCB1cCB3aXRoIGEgMCB3aWR0aCBzY3Jv
bGxiYXIuCiAgICAgICovCiAgICAgcmVzaXplKFBsYXRmb3JtU2Nyb2xsYmFyOjpob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KCksCi0gICAgICAgICAgIFBsYXRmb3JtU2Nyb2xsYmFyOjp2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKCkpOyAgICAKLQotICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChzY3Jv
bGxCYXIpKTsKLSAgICBndGtfb2JqZWN0X3NpbmsoR1RLX09CSkVDVChzY3JvbGxCYXIpKTsKKyAg
ICAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSk7IAog
fQogCiBQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKCkKIHsKLSAgICAvKgot
ICAgICAqIHRoZSBXaWRnZXQgZG9lcyBub3QgdGFrZSBvdmVyIG93bmVyc2hpcC4KLSAgICAgKi8K
LSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZ3RrV2lkZ2V0KCkpOwotICAgIGdfb2JqZWN0X3VucmVm
KEdfT0JKRUNUKGd0a1dpZGdldCgpKSk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKEdfT0JKRUNUKGludGVybmFsR3RrV2lkZ2V0KCkpLCAoZ3BvaW50ZXIpUGxhdGZv
cm1TY3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCwgdGhpcyk7CisgICAgZ19vYmplY3RfdW5yZWYo
R19PQkpFQ1QoaW50ZXJuYWxHdGtXaWRnZXQoKSkpOwogfQogCiBpbnQgUGxhdGZvcm1TY3JvbGxi
YXI6OndpZHRoKCkgY29uc3QKQEAgLTg5LDE2ICs4OCwyOCBAQCB2b2lkIFBsYXRmb3JtU2Nyb2xs
YmFyOjpwYWludChHcmFwaGljc0NvCiAKIHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRo
dW1iUG9zaXRpb24oKQogeyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX2FkanVz
dG1lbnQtPnZhbHVlICE9IG1fY3VycmVudFBvcykgeworICAgICAgICBtX2FkanVzdG1lbnQtPnZh
bHVlID0gbV9jdXJyZW50UG9zOworICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2Vk
KG1fYWRqdXN0bWVudCk7CisgICAgfQogfQogCiB2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRh
dGVUaHVtYlByb3BvcnRpb24oKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9hZGp1
c3RtZW50LT5zdGVwX2luY3JlbWVudCA9IG1fbGluZVN0ZXA7CisgICAgbV9hZGp1c3RtZW50LT5w
YWdlX2luY3JlbWVudCA9IG1fcGFnZVN0ZXA7CisgICAgbV9hZGp1c3RtZW50LT5wYWdlX3NpemUg
PSBtX3Zpc2libGVTaXplOworICAgIG1fYWRqdXN0bWVudC0+dXBwZXIgPSBtX3RvdGFsU2l6ZTsK
KyAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKG1fYWRqdXN0bWVudCk7CiB9CiAKIHZvaWQgUGxh
dGZvcm1TY3JvbGxiYXI6OnNldFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBzZXRG
cmFtZUdlb21ldHJ5KHJlY3QpOworICAgIGdlb21ldHJ5Q2hhbmdlZCgpOwogfQogCit2b2lkIFBs
YXRmb3JtU2Nyb2xsYmFyOjpndGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCosIFBsYXRmb3Jt
U2Nyb2xsYmFyKiB0aGF0KQoreworICAgIHRoYXQtPnNldFZhbHVlKGd0a19hZGp1c3RtZW50X2dl
dF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQpKTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1JlbmRlclRoZW1lR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9SZW5kZXJUaGVtZUdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksMTEgKzE3OSwx
MiBAQCB2b2lkIFJlbmRlclRoZW1lR2RrOjpzZXRDaGVja2JveFNpemUoUmVuCiBib29sIFJlbmRl
clRoZW1lR2RrOjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gRklYTUU6
IGlzIGl0IHRoZSByaWdodCB0aGluZyB0byBkbz8KLSAgICBHdGtXaWRnZXQgKmNoZWNrYm94ID0g
Z3RrQ2hlY2tib3goKTsKKyAgICBHdGtXaWRnZXQqIGNoZWNrYm94ID0gZ3RrQ2hlY2tib3goKTsK
KyAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRp
b24oKSk7CiAgICAgZ3RrX3BhaW50X2NoZWNrKGNoZWNrYm94LT5zdHlsZSwgaS5jb250ZXh0LT5n
ZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0
ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAgICAgICBOVUxMLCBjaGVja2JveCwgImNo
ZWNrYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICBwb3MueCgpLCBw
b3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgcmV0dXJuIGZhbHNl
OwogfQpAQCAtMjExLDExICsyMTIsMTIgQEAgdm9pZCBSZW5kZXJUaGVtZUdkazo6c2V0UmFkaW9T
aXplKFJlbmRlcgogYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogeyAKICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwotICAgIEd0
a1dpZGdldCAqcmFkaW8gPSBndGtSYWRpb0J1dHRvbigpOworICAgIEd0a1dpZGdldCogcmFkaW8g
PSBndGtSYWRpb0J1dHRvbigpOworICAgIEludFBvaW50IHBvcyA9IGkuY29udGV4dC0+dHJhbnNs
YXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKICAgICBndGtfcGFpbnRfb3B0aW9uKHJhZGlvLT5z
dHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICAgZGV0
ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwKICAgICAgICAgICAgICAgICAgICAg
IE5VTEwsIHJhZGlvLCAicmFkaW9idXR0b24iLAotICAgICAgICAgICAgICAgICAgICAgcmVjdC54
KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
IAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIyMywxMSArMjI1LDEyIEBAIGJvb2wgUmVuZGVy
VGhlbWVHZGs6OnBhaW50UmFkaW8oUmVuZGVyT2IKIGJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHJlY3QpIAogeyAKICAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGVt
ZS1hd2FyZSBkcmF3aW5nLiBUaGlzIHNob3VsZCBob25vciB0aGUgc3RhdGUgYXMgd2VsbAotICAg
IEd0a1dpZGdldCAqYnV0dG9uID0gZ3RrQnV0dG9uKCk7CisgICAgR3RrV2lkZ2V0KiBidXR0b24g
PSBndGtCdXR0b24oKTsKKyAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBv
aW50KHJlY3QubG9jYXRpb24oKSk7CiAgICAgZ3RrX3BhaW50X2JveChidXR0b24tPnN0eWxlLCBp
LmNvbnRleHQtPmdka0RyYXdhYmxlKCksCiAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0
ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAgICAgTlVMTCwgYnV0dG9u
LCAiYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgIHBvcy54KCksIHBvcy55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAkocmV2aXNpb24gMjQ3
ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKICAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICoKQEAgLTM3LDM4
ICszNywyMDMgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIndlYmtpdGd0a3Bh
Z2UuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCiAKICNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCisKK3N0
YXRpYyBjb25zdCBpbnQgTWFnaWNHdGtTY3JvbGxDb25zdGFudCA9IDEzOworCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlCisvKgorICog
VGhlIGRlc2lnbiBpcyBhIGNvcHkgb2YgdGhlIFdpbmRvd3MgU2Nyb2xsVmlldyBmcm9tIHBsYXRm
b3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcAorICogd2l0aCB0aGUgZm9sbG93aW5nIGNoYW5nZXMv
ZGlmZmljdWx0aWVzLgorICogVG8gY29uZm9ybSB0byB0aGUgJ3Njcm9sbGFibGUgcHJvdG9jb2wn
IG9mIEd0aysgd2UgbWlnaHQgZ2V0IHR3byBHdGtBZGp1c3RtZW50cyBzZXQuIElmCisgKiB3ZSBo
YXZlIHRoZW0gc2V0IHdlIG1heSBub3QgY3JlYXRlIFBsYXRmb3JtU2Nyb2xsYmFyIGJ1dCBoYXZl
IHRvIHVzZSB0aGUgR3RrQWRqdXN0bWVudC4KKyAqLworY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xs
Vmlld1ByaXZhdGUgOiBwdWJsaWMgU2Nyb2xsYmFyQ2xpZW50CiB7CiBwdWJsaWM6Ci0gICAgU2Ny
b2xsVmlld1ByaXZhdGUoKQotICAgICAgICA6IGhhc1N0YXRpY0JhY2tncm91bmQoZmFsc2UpCi0g
ICAgICAgICwgc3VwcHJlc3NTY3JvbGxiYXJzKGZhbHNlKQorICAgIFNjcm9sbFZpZXdQcml2YXRl
KFNjcm9sbFZpZXcqIF92aWV3KQorICAgICAgICA6IHZpZXcoX3ZpZXcpCisgICAgICAgICwgaGFz
U3RhdGljQmFja2dyb3VuZChmYWxzZSkKKyAgICAgICAgLCBzY3JvbGxiYXJzU3VwcHJlc3NlZChm
YWxzZSkKKyAgICAgICAgLCBzY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyKDApCiAgICAgICAgICwg
dlNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKICAgICAgICAgLCBoU2Nyb2xsYmFyTW9kZShT
Y3JvbGxiYXJBdXRvKQotICAgICAgICAsIGxheW91dCgwKQogICAgICAgICAsIHNjcm9sbEJhcnNO
ZWVkVXBkYXRlKGZhbHNlKQotICAgIHsgfQorICAgICAgICAsIGluVXBkYXRlU2Nyb2xsYmFycyhm
YWxzZSkKKyAgICAgICAgLCB2QWRqKDApCisgICAgICAgICwgaEFkaigwKQorICAgIHt9CisKKyAg
ICB+U2Nyb2xsVmlld1ByaXZhdGUoKQorICAgIHsKKyAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNj
cm9sbGJhcihmYWxzZSk7CisgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsK
KworICAgICAgICBpZiAoaEFkaikgeworICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jKEdfT0JKRUNUKGhBZGopLCAoZ3BvaW50ZXIpU2Nyb2xsVmlld1ByaXZh
dGU6OmFkanVzdG1lbnRDaGFuZ2VkLCB0aGlzKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3VucmVm
KGhBZGopOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZBZGopIHsKKyAgICAgICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVCh2QWRqKSwgKGdwb2lu
dGVyKVNjcm9sbFZpZXdQcml2YXRlOjphZGp1c3RtZW50Q2hhbmdlZCwgdGhpcyk7CisgICAgICAg
ICAgICBnX29iamVjdF91bnJlZih2QWRqKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
c2Nyb2xsQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKTsKKworICAgIHZv
aWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc0Jhcik7CisgICAgdm9pZCBzZXRI
YXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc0Jhcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmFs
dWVDaGFuZ2VkKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVj
dCgpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgYWRqdXN0bWVudENoYW5nZWQoR3RrQWRqdXN0
bWVudCosIGdwb2ludGVyKTsKIAorICAgIFNjcm9sbFZpZXcqIHZpZXc7CiAgICAgYm9vbCBoYXNT
dGF0aWNCYWNrZ3JvdW5kOwotICAgIGJvb2wgc3VwcHJlc3NTY3JvbGxiYXJzOworICAgIGJvb2wg
c2Nyb2xsYmFyc1N1cHByZXNzZWQ7CisgICAgaW50IHNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXI7
CiAgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xsYmFyTW9kZTsKICAgICBTY3JvbGxiYXJNb2RlIGhT
Y3JvbGxiYXJNb2RlOwotICAgIEd0a0xheW91dCAqbGF5b3V0OworICAgIFJlZlB0cjxQbGF0Zm9y
bVNjcm9sbGJhcj4gdkJhcjsKKyAgICBSZWZQdHI8UGxhdGZvcm1TY3JvbGxiYXI+IGhCYXI7Cisg
ICAgR3RrQWRqdXN0bWVudCogdkFkajsKKyAgICBHdGtBZGp1c3RtZW50KiBoQWRqOworICAgIElu
dFNpemUgc2Nyb2xsT2Zmc2V0OwogICAgIEludFNpemUgY29udGVudHNTaXplOwotICAgIEludFNp
emUgdmlld1BvcnRTaXplOwogICAgIGJvb2wgc2Nyb2xsQmFyc05lZWRVcGRhdGU7CisgICAgYm9v
bCBpblVwZGF0ZVNjcm9sbGJhcnM7CisgICAgSGFzaFNldDxXaWRnZXQqPiBjaGlsZHJlbjsKIH07
CiAKKy8qCisgKiBEb24ndCBjcmVhdGUgdGhlIHNjcm9sbGJhcnMgd2hlbiB3ZSBoYXZlIGEgaG9y
aXpvbnRhbCBHdGtBZGp1c3RtZW50CisgKi8KK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1By
aXZhdGU6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCit7CisgICAgaWYg
KFNjcm9sbGJhcjo6aGFzUGxhdGZvcm1TY3JvbGxiYXJzKCkpIHsKKyAgICAgICAgaWYgKGhhc0Jh
ciAmJiAhaEJhciAmJiAhaEFkaikgeworICAgICAgICAgICAgaEJhciA9IG5ldyBQbGF0Zm9ybVNj
cm9sbGJhcih0aGlzLCBIb3Jpem9udGFsU2Nyb2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAg
ICAgICAgICAgIGhCYXItPnNldFNjcm9sbFZpZXdDb250cm9sKCk7CisgICAgICAgICAgICB2aWV3
LT5hZGRDaGlsZChoQmFyLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghaGFzQmFyICYmIGhC
YXIpIHsKKyAgICAgICAgICAgIHZpZXctPnJlbW92ZUNoaWxkKGhCYXIuZ2V0KCkpOworICAgICAg
ICAgICAgaEJhciA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qCisgKiBEb24ndCBjcmVh
dGUgdGhlIHNjcm9sbGJhcnMgd2hlbiB3ZSBoYXZlIGEgdmVydGljYWwgR3RrQWRqdXN0bWVudAor
ICovCit2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihib29sIGhhc0JhcikKK3sKKyAgICBpZiAoU2Nyb2xsYmFyOjpoYXNQbGF0Zm9ybVNj
cm9sbGJhcnMoKSkgeworICAgICAgICBpZiAoaGFzQmFyICYmICF2QmFyICYmICF2QWRqKSB7Cisg
ICAgICAgICAgICB2QmFyID0gbmV3IFBsYXRmb3JtU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Ny
b2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIHZCYXItPnNldFNjcm9sbFZp
ZXdDb250cm9sKCk7CisgICAgICAgICAgICB2aWV3LT5hZGRDaGlsZCh2QmFyLmdldCgpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghaGFzQmFyICYmIHZCYXIpIHsKKyAgICAgICAgICAgIHZpZXctPnJl
bW92ZUNoaWxkKHZCYXIuZ2V0KCkpOworICAgICAgICAgICAgdkJhciA9IDA7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNjcm9sbEJh
Y2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICAvLyBTaW5jZSBz
Y3JvbGxpbmcgaXMgZG91YmxlIGJ1ZmZlcmVkLCB3ZSB3aWxsIGJlIGJsaXR0aW5nIHRoZSBzY3Jv
bGwgdmlldydzIGludGVyc2VjdGlvbgorICAgIC8vIHdpdGggdGhlIGNsaXAgcmVjdCBldmVyeSB0
aW1lIHRvIGtlZXAgaXQgc21vb3RoLgorICAgIEludFJlY3QgY2xpcFJlY3QgPSB2aWV3LT53aW5k
b3dDbGlwUmVjdCgpOworICAgIEludFJlY3Qgc2Nyb2xsVmlld1JlY3QgPSB2aWV3LT5jb252ZXJ0
VG9Db250YWluaW5nV2luZG93KEludFJlY3QoMCwgMCwgdmlldy0+dmlzaWJsZVdpZHRoKCksIHZp
ZXctPnZpc2libGVIZWlnaHQoKSkpOworCisgICAgSW50UmVjdCB1cGRhdGVSZWN0ID0gY2xpcFJl
Y3Q7CisgICAgdXBkYXRlUmVjdC5pbnRlcnNlY3Qoc2Nyb2xsVmlld1JlY3QpOworCisgICAgLy9G
SVhNRSB1cGRhdGUgaGVyZT8KKworICAgIGlmICghaGFzU3RhdGljQmFja2dyb3VuZCkgLy8gVGhl
IG1haW4gZnJhbWUgY2FuIGp1c3QgYmxpdCB0aGUgV2ViVmlldyB3aW5kb3cKKyAgICAgICAvLyBG
SVhNRTogRmluZCBhIHdheSB0byBibGl0IHN1YmZyYW1lcyB3aXRob3V0IGJsaXR0aW5nIG92ZXJs
YXBwaW5nIGNvbnRlbnQKKyAgICAgICB2aWV3LT5zY3JvbGxCYWNraW5nU3RvcmUoLXNjcm9sbERl
bHRhLndpZHRoKCksIC1zY3JvbGxEZWx0YS5oZWlnaHQoKSwgc2Nyb2xsVmlld1JlY3QsIGNsaXBS
ZWN0KTsKKyAgICBlbHNlICB7CisgICAgICAgLy8gV2UgbmVlZCB0byBnbyBhaGVhZCBhbmQgcmVw
YWludCB0aGUgZW50aXJlIGJhY2tpbmcgc3RvcmUuICBEbyBpdCBub3cgYmVmb3JlIG1vdmluZyB0
aGUKKyAgICAgICAvLyBwbHVnaW5zLgorICAgICAgIHZpZXctPmFkZFRvRGlydHlSZWdpb24odXBk
YXRlUmVjdCk7CisgICAgICAgdmlldy0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgfQorCisg
ICAgdmlldy0+Z2VvbWV0cnlDaGFuZ2VkKCk7CisKKyAgICAvLyBOb3cgdXBkYXRlIHRoZSB3aW5k
b3cgKHdoaWNoIHNob3VsZCBkbyBub3RoaW5nIGJ1dCBhIGJsaXQgb2YgdGhlIGJhY2tpbmcgc3Rv
cmUncyB1cGRhdGVSZWN0IGFuZCBzbyBzaG91bGQKKyAgICAvLyBiZSB2ZXJ5IGZhc3QpLgorICAg
IHZpZXctPnVwZGF0ZSgpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRl
OjphZGp1c3RtZW50Q2hhbmdlZChHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50LCBncG9pbnRlciBf
dGhhdCkKK3sKKyAgICBTY3JvbGxWaWV3UHJpdmF0ZSogdGhhdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
U2Nyb2xsVmlld1ByaXZhdGUqPihfdGhhdCk7CisKKyAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJl
YWxseSBtb3ZlZC4KKyAgICBJbnRTaXplIG5ld09mZnNldCA9IHRoYXQtPnNjcm9sbE9mZnNldDsK
KyAgICBpZiAoYWRqdXN0bWVudCA9PSB0aGF0LT5oQWRqKQorICAgICAgICBuZXdPZmZzZXQuc2V0
V2lkdGgoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVu
dCkpKTsKKyAgICBlbHNlIGlmIChhZGp1c3RtZW50ID09IHRoYXQtPnZBZGopCisgICAgICAgIG5l
d09mZnNldC5zZXRIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFs
dWUoYWRqdXN0bWVudCkpKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBuZXdPZmZzZXQg
LSB0aGF0LT5zY3JvbGxPZmZzZXQ7CisgICAgaWYgKHNjcm9sbERlbHRhID09IEludFNpemUoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHRoYXQtPnNjcm9sbE9mZnNldCA9IG5ld09mZnNldDsKKwor
ICAgIGlmICh0aGF0LT5zY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdGhhdC0+c2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERlbHRhKTsKKyAgICBzdGF0aWNfY2Fz
dDxGcmFtZVZpZXcqPih0aGF0LT52aWV3KS0+ZnJhbWUoKS0+c2VuZFNjcm9sbEV2ZW50KCk7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnZhbHVlQ2hhbmdlZChTY3Jv
bGxiYXIqIGJhcikKK3sKKyAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KKyAg
ICBJbnRTaXplIG5ld09mZnNldCA9IHNjcm9sbE9mZnNldDsKKyAgICBpZiAoYmFyKSB7CisgICAg
ICAgIGlmIChiYXIgPT0gaEJhcikKKyAgICAgICAgICAgIG5ld09mZnNldC5zZXRXaWR0aChiYXIt
PnZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChiYXIgPT0gdkJhcikKKyAgICAgICAgICAgIG5l
d09mZnNldC5zZXRIZWlnaHQoYmFyLT52YWx1ZSgpKTsKKyAgICB9CisgICAgSW50U2l6ZSBzY3Jv
bGxEZWx0YSA9IG5ld09mZnNldCAtIHNjcm9sbE9mZnNldDsKKyAgICBpZiAoc2Nyb2xsRGVsdGEg
PT0gSW50U2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgc2Nyb2xsT2Zmc2V0ID0gbmV3T2Zm
c2V0OworCisgICAgaWYgKHNjcm9sbGJhcnNTdXBwcmVzc2VkKQorICAgICAgICByZXR1cm47CisK
KyAgICBzY3JvbGxCYWNraW5nU3RvcmUoc2Nyb2xsRGVsdGEpOworICAgIHN0YXRpY19jYXN0PEZy
YW1lVmlldyo+KHZpZXcpLT5mcmFtZSgpLT5zZW5kU2Nyb2xsRXZlbnQoKTsKK30KKworSW50UmVj
dCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAor
eworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih2aWV3KS0+d2luZG93
Q2xpcFJlY3QoZmFsc2UpOworfQorCiBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkKLSAgICA6IG1f
ZGF0YShuZXcgU2Nyb2xsVmlld1ByaXZhdGUpCisgICAgOiBtX2RhdGEobmV3IFNjcm9sbFZpZXdQ
cml2YXRlKHRoaXMpKQoge30KIAogU2Nyb2xsVmlldzo6flNjcm9sbFZpZXcoKQpAQCAtNzYsNDMg
KzI0MSw4NyBAQCBTY3JvbGxWaWV3Ojp+U2Nyb2xsVmlldygpCiAgICAgZGVsZXRlIG1fZGF0YTsK
IH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVWaWV3KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJl
Y3QsIGJvb2wgbm93KQorLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgYXNzdW1lZDoKKyAqICAgKGhh
ZGogJiYgdmFkaikgfHwgKCFoYWRqICYmICF2YWRqKQorICovCit2b2lkIFNjcm9sbFZpZXc6OnNl
dEd0a0FkanVzdG1lbnRzKEd0a0FkanVzdG1lbnQqIGhhZGosIEd0a0FkanVzdG1lbnQqIHZhZGop
CiB7Ci0gICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0
LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpIH07Ci0gICAgR2Rr
RHJhd2FibGUqIGdka2RyYXdhYmxlID0gV2lkZ2V0OjpnZGtEcmF3YWJsZSgpOwotICAgIGlmIChH
REtfSVNfV0lORE9XKGdka2RyYXdhYmxlKSkgewotICAgICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9
IEdES19XSU5ET1coZ2RrZHJhd2FibGUpOwotICAgICAgICBnZGtfd2luZG93X2ludmFsaWRhdGVf
cmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKG5vdykKLSAgICAgICAgICAg
IGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7CisgICAgaWYgKG1fZGF0
YS0+aEFkaikgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMo
R19PQkpFQ1QobV9kYXRhLT5oQWRqKSwgKGdwb2ludGVyKVNjcm9sbFZpZXdQcml2YXRlOjphZGp1
c3RtZW50Q2hhbmdlZCwgbV9kYXRhKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jKEdfT0JKRUNUKG1fZGF0YS0+dkFkaiksIChncG9pbnRlcilTY3JvbGxWaWV3
UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5nZWQsIG1fZGF0YSk7CisgICAgICAgIGdfb2JqZWN0X3Vu
cmVmKG1fZGF0YS0+aEFkaik7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZGF0YS0+dkFkaik7
CisgICAgfQorCisgICAgbV9kYXRhLT5oQWRqID0gaGFkajsKKyAgICBtX2RhdGEtPnZBZGogPSB2
YWRqOworCisgICAgaWYgKG1fZGF0YS0+aEFkaikgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fZGF0YS0+aEFkaiwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExCQUNLKFNjcm9sbFZpZXdQcml2
YXRlOjphZGp1c3RtZW50Q2hhbmdlZCksIG1fZGF0YSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9kYXRhLT52QWRqLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soU2Nyb2xsVmlld1By
aXZhdGU6OmFkanVzdG1lbnRDaGFuZ2VkKSwgbV9kYXRhKTsKKworICAgICAgICAvKgorICAgICAg
ICAgKiBkaXNhYmxlIHRoZSBzY3JvbGxiYXJzIChpZiB3ZSBoYXZlIGFueSkgYXMgdGhlIEd0a0Fk
anVzdG1lbnQgb3ZlcgorICAgICAgICAgKi8KKyAgICAgICAgbV9kYXRhLT5zZXRIYXNWZXJ0aWNh
bFNjcm9sbGJhcihmYWxzZSk7CisgICAgICAgIG1fZGF0YS0+c2V0SGFzSG9yaXpvbnRhbFNjcm9s
bGJhcihmYWxzZSk7CisKKyAgICAgICAgZ19vYmplY3RfcmVmKG1fZGF0YS0+aEFkaik7CisgICAg
ICAgIGdfb2JqZWN0X3JlZihtX2RhdGEtPnZBZGopOwogICAgIH0KKyAgICAgICAKKyAgICB1cGRh
dGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3
Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIG5vdykKIHsK
LSAgICB1cGRhdGVWaWV3KHVwZGF0ZVJlY3QsIG5vdyk7CisgICAgaWYgKHVwZGF0ZVJlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IGNv
bnRlbnRzVG9XaW5kb3codXBkYXRlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IGNvbnRh
aW5pbmdXaW5kb3dSZWN0ID0gdXBkYXRlUmVjdDsKKyAgICBjb250YWluaW5nV2luZG93UmVjdC5z
ZXRMb2NhdGlvbih3aW5kb3dQb2ludCk7CisKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgY29u
dGFpbmluZ1dpbmRvd1JlY3QueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlu
aW5nV2luZG93UmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdX
aW5kb3dSZWN0LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdX
aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBjb250YWluaW5n
V2luZG93KCktPmJpbl93aW5kb3c7CisKKyAgICBpZiAod2luZG93KQorICAgICAgICBnZGtfd2lu
ZG93X2ludmFsaWRhdGVfcmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKKworICAgIC8vIENhY2hl
IHRoZSBkaXJ0eSBzcG90LgorICAgIGFkZFRvRGlydHlSZWdpb24oY29udGFpbmluZ1dpbmRvd1Jl
Y3QpOworCisgICAgaWYgKG5vdyAmJiB3aW5kb3cpCisgICAgICAgIGdka193aW5kb3dfcHJvY2Vz
c191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlKCkK
IHsKLSAgICBBU1NFUlQoZ3RrV2lkZ2V0KCkpOwotICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhn
dGtXaWRnZXQoKSk7CisgICAgQVNTRVJUKGNvbnRhaW5pbmdXaW5kb3coKSk7CisKKyAgICBHZGtS
ZWN0YW5nbGUgcmVjdCA9IHsgMCwgMCwgbV9kYXRhLT5jb250ZW50c1NpemUud2lkdGgoKSwgbV9k
YXRhLT5jb250ZW50c1NpemUuaGVpZ2h0KCkgfTsKKyAgICBnZGtfd2luZG93X2ludmFsaWRhdGVf
cmVjdChjb250YWluaW5nV2luZG93KCktPmJpbl93aW5kb3csICZyZWN0LCB0cnVlKTsKIAotICAg
IGlmIChtX2RhdGEtPnNjcm9sbEJhcnNOZWVkVXBkYXRlKQotICAgICAgICB1cGRhdGVTY3JvbGxi
YXJzKCk7CisgICAgaWYgKG1fZGF0YS0+c2Nyb2xsQmFyc05lZWRVcGRhdGUpIHsKKyAgICAgICAg
dXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisgICAgICAgIGdlb21ldHJ5
Q2hhbmdlZCgpOworICAgIH0KIH0KIAogaW50IFNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+dmlld1BvcnRTaXplLndpZHRoKCk7CisgICAgcmV0
dXJuIHdpZHRoKCkgLSAobV9kYXRhLT52QmFyID8gbV9kYXRhLT52QmFyLT53aWR0aCgpIDogMCk7
CiB9CiAKIGludCBTY3JvbGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9kYXRhLT52aWV3UG9ydFNpemUuaGVpZ2h0KCk7CisgICAgcmV0dXJuIGhlaWdodCgpIC0g
KG1fZGF0YS0+aEJhciA/IG1fZGF0YS0+aEJhci0+aGVpZ2h0KCkgOiAwKTsKIH0KIAotLy8gUmVn
aW9uIG9mIHRoZSBjb250ZW50IGN1cnJlbnRseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydCBpbiB0
aGUgY29udGVudCB2aWV3J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiBGbG9hdFJlY3QgU2Nyb2xsVmll
dzo6dmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gRmxvYXRSZWN0KGNv
bnRlbnRzWCgpLCBjb250ZW50c1koKSwgdmlzaWJsZVdpZHRoKCksIHZpc2libGVIZWlnaHQoKSk7
CkBAIC0xMzgsMjMgKzM0NywxNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnJlc2l6ZUNvbnRlbnRzKGlu
dCB3LCBpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YS0+Y29udGVudHNTaXplID0gbmV3
U2l6ZTsKLSAgICAKLSAgICBpZiAobV9kYXRhLT5sYXlvdXQpIHsKLSAgICAgICAgZ3RrX2xheW91
dF9zZXRfc2l6ZShtX2RhdGEtPmxheW91dCwgdywgaCk7Ci0gICAgICAgIG1fZGF0YS0+c2Nyb2xs
QmFyc05lZWRVcGRhdGUgPSB0cnVlOwotICAgIH0KKyAgICBtX2RhdGEtPnNjcm9sbEJhcnNOZWVk
VXBkYXRlID0gdHJ1ZTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzWCgpIGNvbnN0CiB7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ3RrX2xheW91dF9nZXRfaGFkanVzdG1lbnQobV9k
YXRhLT5sYXlvdXQpLCAwKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0
bWVudF9nZXRfdmFsdWUoZ3RrX2xheW91dF9nZXRfaGFkanVzdG1lbnQobV9kYXRhLT5sYXlvdXQp
KSk7CisgICAgcmV0dXJuIHNjcm9sbE9mZnNldCgpLndpZHRoKCk7CiB9CiAKIGludCBTY3JvbGxW
aWV3Ojpjb250ZW50c1koKSBjb25zdAogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGd0a19s
YXlvdXRfZ2V0X3ZhZGp1c3RtZW50KG1fZGF0YS0+bGF5b3V0KSwgMCk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGd0a19sYXlvdXRfZ2V0X3Zh
ZGp1c3RtZW50KG1fZGF0YS0+bGF5b3V0KSkpOworICAgIHJldHVybiBzY3JvbGxPZmZzZXQoKS5o
ZWlnaHQoKTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzV2lkdGgoKSBjb25zdApAQCAt
MTY5LDI3ICszNzIsMjYgQEAgaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzSGVpZ2h0KCkgY29uc3QK
IAogSW50U2l6ZSBTY3JvbGxWaWV3OjpzY3JvbGxPZmZzZXQoKSBjb25zdAogewotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKG1fZGF0YSwgSW50U2l6ZSgpKTsKLSAgICByZXR1cm4gSW50U2l6ZShj
b250ZW50c1goKSwgY29udGVudHNZKCkpOworICAgIHJldHVybiBtX2RhdGEtPnNjcm9sbE9mZnNl
dDsKK30KKworSW50U2l6ZSBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xsKCkgY29uc3QKK3sKKyAg
ICBJbnRTaXplIGRlbHRhID0gKG1fZGF0YS0+Y29udGVudHNTaXplIC0gSW50U2l6ZSh2aXNpYmxl
V2lkdGgoKSwgdmlzaWJsZUhlaWdodCgpKSkgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICBkZWx0YS5j
bGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisgICAgcmV0dXJuIGRlbHRhOwogfQogCiB2b2lkIFNjcm9s
bFZpZXc6OnNjcm9sbEJ5KGludCBkeCwgaW50IGR5KQogewotICAgIEd0a0FkanVzdG1lbnQqIGhh
ZGogPSBndGtfbGF5b3V0X2dldF9oYWRqdXN0bWVudChtX2RhdGEtPmxheW91dCk7Ci0gICAgR3Rr
QWRqdXN0bWVudCogdmFkaiA9IGd0a19sYXlvdXRfZ2V0X3ZhZGp1c3RtZW50KG1fZGF0YS0+bGF5
b3V0KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKGhhZGopOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFkaik7Ci0KLSAgICBpbnQgY3VycmVudF94ID0gY29udGVudHNYKCk7Ci0gICAgaW50IGN1cnJl
bnRfeSA9IGNvbnRlbnRzWSgpOworICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0ID0gbV9kYXRhLT5z
Y3JvbGxPZmZzZXQ7CisgICAgSW50U2l6ZSBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQg
KyBJbnRTaXplKGR4LCBkeSkuc2hydW5rVG8obWF4aW11bVNjcm9sbCgpKTsKKyAgICBuZXdTY3Jv
bGxPZmZzZXQuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwogCisgICAgaWYgKG5ld1Njcm9sbE9mZnNl
dCA9PSBzY3JvbGxPZmZzZXQpCisgICAgICAgIHJldHVybjsKIAotICAgIGd0a19hZGp1c3RtZW50
X3NldF92YWx1ZShoYWRqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEFNUChjdXJy
ZW50X3grZHgsIGhhZGotPmxvd2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNQVgoMC4wLCBoYWRqLT51cHBlciAtIGhhZGotPnBhZ2Vfc2l6ZSkpKTsKLSAgICBndGtfYWRq
dXN0bWVudF9zZXRfdmFsdWUodmFkaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xB
TVAoY3VycmVudF95K2R5LCB2YWRqLT5sb3dlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTUFYKDAuMCwgdmFkai0+dXBwZXIgLSB2YWRqLT5wYWdlX3NpemUpKSk7CisgICAg
dXBkYXRlU2Nyb2xsYmFycyhuZXdTY3JvbGxPZmZzZXQpOwogfQogCiBTY3JvbGxiYXJNb2RlIFNj
cm9sbFZpZXc6OmhTY3JvbGxiYXJNb2RlKCkgY29uc3QKQEAgLTIwNCwxNiArNDA2LDE2IEBAIFNj
cm9sbGJhck1vZGUgU2Nyb2xsVmlldzo6dlNjcm9sbGJhck1vZGUKIAogdm9pZCBTY3JvbGxWaWV3
OjpzdXBwcmVzc1Njcm9sbGJhcnMoYm9vbCBzdXBwcmVzc2VkLCBib29sIHJlcGFpbnRPblN1cHBy
ZXNzKQogewotICAgIG1fZGF0YS0+c3VwcHJlc3NTY3JvbGxiYXJzID0gc3VwcHJlc3NlZDsKKyAg
ICBtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkID0gc3VwcHJlc3NlZDsKICAgICBpZiAocmVw
YWludE9uU3VwcHJlc3MpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAgICAgdXBk
YXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xsVmll
dzo6c2V0SFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSBuZXdNb2RlKQogewogICAgIGlmICht
X2RhdGEtPmhTY3JvbGxiYXJNb2RlICE9IG5ld01vZGUpIHsKICAgICAgICAgbV9kYXRhLT5oU2Ny
b2xsYmFyTW9kZSA9IG5ld01vZGU7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAg
ICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CiAgICAgfQogfQogCkBA
IC0yMjEsMTQgKzQyMywxNCBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldFZTY3JvbGxiYXJNb2RlKFNj
cm9sCiB7CiAgICAgaWYgKG1fZGF0YS0+dlNjcm9sbGJhck1vZGUgIT0gbmV3TW9kZSkgewogICAg
ICAgICBtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID0gbmV3TW9kZTsKLSAgICAgICAgdXBkYXRlU2Ny
b2xsYmFycygpOworICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0
KTsKICAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyc01vZGUoU2Nyb2xs
YmFyTW9kZSBuZXdNb2RlKQogewogICAgIG1fZGF0YS0+aFNjcm9sbGJhck1vZGUgPSBtX2RhdGEt
PnZTY3JvbGxiYXJNb2RlID0gbmV3TW9kZTsKLSAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAg
dXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xs
Vmlldzo6c2V0U3RhdGljQmFja2dyb3VuZChib29sIGZsYWcpCkBAIC0yMzYsNDggKzQzOCw1MiBA
QCB2b2lkIFNjcm9sbFZpZXc6OnNldFN0YXRpY0JhY2tncm91bmQoYm9vCiAgICAgbV9kYXRhLT5o
YXNTdGF0aWNCYWNrZ3JvdW5kID0gZmxhZzsKIH0KIAotLyoKLSAqIG9ubHkgdXBkYXRlIHRoZSBh
ZGp1c3RtZW50cywgdGhlIEd0a0xheW91dCBpcyBkb2luZyB0aGUgd29yawotICogZm9yIHVzIChh
c3N1bWluZyBpdCBpcyBpbiBhIGJveC4uLikuCi0gKi8KLXZvaWQgU2Nyb2xsVmlldzo6c2V0RnJh
bWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQordm9pZCBTY3JvbGxWaWV3OjpzZXRGcmFtZUdl
b21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld0dlb21ldHJ5KQogewotICAgIFdpZGdldDo6c2V0RnJh
bWVHZW9tZXRyeShyKTsKLSAgICB1cGRhdGVHZW9tZXRyeShyLndpZHRoKCksIHIuaGVpZ2h0KCkp
OwotfQorICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKIAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRh
dGVHZW9tZXRyeShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgbV9kYXRhLT52aWV3UG9y
dFNpemUgPSBJbnRTaXplKHdpZHRoLGhlaWdodCk7Ci19CisgICAgSW50UmVjdCBvbGRHZW9tZXRy
eSA9IGZyYW1lR2VvbWV0cnkoKTsKKyAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkobmV3R2Vv
bWV0cnkpOwogCi12b2lkIFNjcm9sbFZpZXc6OnNldEd0a1dpZGdldChHdGtMYXlvdXQqIGxheW91
dCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKEdUS19MQVlPVVQobGF5b3V0KSk7Ci0gICAgbV9k
YXRhLT5sYXlvdXQgPSBsYXlvdXQ7CisgICAgaWYgKG5ld0dlb21ldHJ5ID09IG9sZEdlb21ldHJ5
KQorICAgICAgICByZXR1cm47CiAKLSAgICBXaWRnZXQ6OnNldEd0a1dpZGdldChHVEtfV0lER0VU
KGxheW91dCkpOworICAgIGlmIChuZXdHZW9tZXRyeS53aWR0aCgpICE9IG9sZEdlb21ldHJ5Lndp
ZHRoKCkgfHwgbmV3R2VvbWV0cnkuaGVpZ2h0KCkgIT0gb2xkR2VvbWV0cnkuaGVpZ2h0KCkpIHsK
KyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisgICAgICAg
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5zZXROZWVkc0xheW91dCgpOworICAgIH0K
KworICAgIGdlb21ldHJ5Q2hhbmdlZCgpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OmFkZENoaWxk
KFdpZGdldCogdykKK3ZvaWQgU2Nyb2xsVmlldzo6YWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKIHsg
Ci0gICAgQVNTRVJUKHctPmd0a1dpZGdldCgpKTsKLSAgICBBU1NFUlQobV9kYXRhLT5sYXlvdXQp
OworICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CisgICAgY2hpbGQtPnNldENvbnRhaW5pbmdX
aW5kb3coY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICBtX2RhdGEtPmNoaWxkcmVuLmFkZChjaGls
ZCk7CiAKLSAgICBndGtfbGF5b3V0X3B1dChtX2RhdGEtPmxheW91dCwgdy0+Z3RrV2lkZ2V0KCks
IDAsIDApOworICAgIGlmIChjaGlsZC0+aW50ZXJuYWxHdGtXaWRnZXQoKSkKKyAgICAgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250YWluaW5nV2luZG93KCkpLCBjaGlsZC0+
aW50ZXJuYWxHdGtXaWRnZXQoKSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQo
V2lkZ2V0KiB3KQordm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxkKQog
ewotICAgIEFTU0VSVCh3LT5ndGtXaWRnZXQoKSk7Ci0gICAgQVNTRVJUKG1fZGF0YS0+bGF5b3V0
KTsKKyAgICBjaGlsZC0+c2V0UGFyZW50KDApOworICAgIG1fZGF0YS0+Y2hpbGRyZW4ucmVtb3Zl
KGNoaWxkKTsKIAotICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9kYXRh
LT5sYXlvdXQpLCB3LT5ndGtXaWRnZXQoKSk7CisgICAgaWYgKGNoaWxkLT5pbnRlcm5hbEd0a1dp
ZGdldCgpICYmIEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKSA9PSBHVEtfV0lER0VUKGNo
aWxkLT5pbnRlcm5hbEd0a1dpZGdldCgpKS0+cGFyZW50KQorICAgICAgICBndGtfY29udGFpbmVy
X3JlbW92ZShHVEtfQ09OVEFJTkVSKGNvbnRhaW5pbmdXaW5kb3coKSksIGNoaWxkLT5pbnRlcm5h
bEd0a1dpZGdldCgpKTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxSZWN0SW50b1ZpZXdS
ZWN1cnNpdmVseShjb25zdCBJbnRSZWN0JikKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUmVjdElu
dG9WaWV3UmVjdXJzaXZlbHkoY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIEludFBvaW50IHAobWF4KDAsIHIueCgpKSwgbWF4KDAsIHIueSgpKSk7CisgICAg
U2Nyb2xsVmlldyogdmlldyA9IHRoaXM7CisgICAgd2hpbGUgKHZpZXcpIHsKKyAgICAgICAgdmll
dy0+c2V0Q29udGVudHNQb3MocC54KCksIHAueSgpKTsKKyAgICAgICAgcC5tb3ZlKHZpZXctPngo
KSAtIHZpZXctPnNjcm9sbE9mZnNldCgpLndpZHRoKCksIHZpZXctPnkoKSAtIHZpZXctPnNjcm9s
bE9mZnNldCgpLmhlaWdodCgpKTsKKyAgICAgICAgdmlldyA9IHN0YXRpY19jYXN0PFNjcm9sbFZp
ZXcqPih2aWV3LT5wYXJlbnQoKSk7CisgICAgfQogfQogCiBib29sIFNjcm9sbFZpZXc6OmluV2lu
ZG93KCkgY29uc3QKQEAgLTI4Niw0OCArNDkyLDM2MCBAQCBib29sIFNjcm9sbFZpZXc6OmluV2lu
ZG93KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp3aGVl
bEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYpCit2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQo
UGxhdGZvcm1XaGVlbEV2ZW50JiBlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8g
RGV0ZXJtaW5lIGhvdyBtdWNoIHdlIHdhbnQgdG8gc2Nyb2xsLiAgSWYgd2UgY2FuIG1vdmUgYXQg
YWxsLCB3ZSB3aWxsIGFjY2VwdCB0aGUgZXZlbnQuCisgICAgSW50U2l6ZSBtYXhTY3JvbGxEZWx0
YSA9IG1heGltdW1TY3JvbGwoKTsKKyAgICBpZiAoKGUuZGVsdGFYKCkgPCAwICYmIG1heFNjcm9s
bERlbHRhLndpZHRoKCkgPiAwKSB8fAorICAgICAgICAoZS5kZWx0YVgoKSA+IDAgJiYgc2Nyb2xs
T2Zmc2V0KCkud2lkdGgoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpIDwgMCAmJiBtYXhT
Y3JvbGxEZWx0YS5oZWlnaHQoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpID4gMCAmJiBz
Y3JvbGxPZmZzZXQoKS5oZWlnaHQoKSA+IDApKQorICAgICAgICBlLmFjY2VwdCgpOworCisgICAg
c2Nyb2xsQnkoc3RhdGljX2Nhc3Q8aW50PihlLmRlbHRhWCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihl
LmRlbHRhWSgpKSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCit2
b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9m
ZnNldCkKIHsKLSAgICBHdGtBZGp1c3RtZW50KiBoYWRqID0gZ3RrX2xheW91dF9nZXRfaGFkanVz
dG1lbnQobV9kYXRhLT5sYXlvdXQpOwotICAgIEd0a0FkanVzdG1lbnQqIHZhZGogPSBndGtfbGF5
b3V0X2dldF92YWRqdXN0bWVudChtX2RhdGEtPmxheW91dCk7CisgICAgLy8gRG9uJ3QgYWxsb3cg
cmUtZW50cmFuY3kgaW50byB0aGlzIGZ1bmN0aW9uLgorICAgIGlmIChtX2RhdGEtPmluVXBkYXRl
U2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgZ19yZXR1cm5faWZfZmFpbChoYWRq
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhZGopOwotICAgIAotICAgIGhhZGotPnBhZ2Vfc2l6
ZSA9IHZpc2libGVXaWR0aCgpOwotICAgIGhhZGotPnN0ZXBfaW5jcmVtZW50ID0gMTM7CisgICAg
Ly8gRklYTUU6IFRoaXMgY29kZSBpcyBoZXJlIHNvIHdlIGRvbid0IGhhdmUgdG8gZm9yayBGcmFt
ZVZpZXcuaC8uY3BwLgorICAgIC8vIEluIHRoZSBlbmQsIEZyYW1lVmlldyBzaG91bGQganVzdCBt
ZXJnZSB3aXRoIFNjcm9sbFZpZXcuCisgICAgaWYgKHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmll
dyo+KHRoaXMpLT5mcmFtZSgpLT5wcm9oaWJpdHNTY3JvbGxpbmcoKSkKKyAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIHZhZGotPnBhZ2Vfc2l6ZSA9IHZpc2libGVIZWlnaHQoKTsKLSAgICB2YWRq
LT5zdGVwX2luY3JlbWVudCA9IDEzOworICAgIG1fZGF0YS0+aW5VcGRhdGVTY3JvbGxiYXJzID0g
dHJ1ZTsKKworICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBtX2RhdGEtPnZCYXI7Cisg
ICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gbV9kYXRhLT5oQmFyOworICAgIGJvb2wg
b2xkSGFzVmVydGljYWwgPSBoYXNWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBib29sIG9sZEhhc0hv
cml6b250YWwgPSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgIFNjcm9sbGJhck1vZGUgaFNj
cm9sbCA9IG1fZGF0YS0+aFNjcm9sbGJhck1vZGU7CisgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xs
ID0gbV9kYXRhLT52U2Nyb2xsYmFyTW9kZTsKICAgICAKLSAgICBndGtfYWRqdXN0bWVudF9jaGFu
Z2VkKGhhZGopOwotICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQoaGFkaik7CisgICAg
LyoKKyAgICAgKiBJdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hvIGlzIGdvaW5nIHRvIHJlbW92
ZSBzcGFjZSBmcm9tIG91ciB2aWV3cG9ydC4gRWl0aGVyCisgICAgICogd2UgZG8gaXQgYnkgY3Jl
YXRpbmcgYSBQbGF0Zm9ybVNjcm9sbGJhciBvciB0aGUgR3RrV2lkZ2V0IGVtYmVkZGluZyB1cyBp
cyBnb2luZyB0byBkbworICAgICAqIHRoYXQgYnkgY2FsbGluZyBzZXRGcmFtZUdlb21ldHJ5Lgor
ICAgICAqLworICAgIGNvbnN0IGludCBjVmVydGljYWxXaWR0aCA9IFBsYXRmb3JtU2Nyb2xsYmFy
Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CisgICAgY29uc3QgaW50IGNIb3Jpem9udGFsSGVp
Z2h0ID0gUGxhdGZvcm1TY3JvbGxiYXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKKwor
ICAgIGZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisgICAgICAgIGJvb2wg
c2Nyb2xsc1ZlcnRpY2FsbHk7CisgICAgICAgIGJvb2wgc2Nyb2xsc0hvcml6b250YWxseTsKKwor
ICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgKGhTY3JvbGwgPT0g
U2Nyb2xsYmFyQXV0byB8fCB2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8pKSB7CisgICAgICAgICAg
ICAvLyBEbyBhIGxheW91dCBpZiBwZW5kaW5nIGJlZm9yZSBjaGVja2luZyBpZiBzY3JvbGxiYXJz
IGFyZSBuZWVkZWQuCisgICAgICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxiYXIgIT0gb2xk
SGFzVmVydGljYWwgfHwgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciAhPSBvbGRIYXNIb3Jpem9udGFs
KQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5sYXlvdXQo
KTsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5ID0gKHZTY3Jv
bGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYg
Y29udGVudHNIZWlnaHQoKSA+IGhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxzVmVy
dGljYWxseSkKKyAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0gKGhTY3JvbGwg
PT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYgY29u
dGVudHNXaWR0aCgpICsgY1ZlcnRpY2FsV2lkdGggPiB3aWR0aCgpKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBT
Y3JvbGxiYXJBbHdheXNPbikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50
c1dpZHRoKCkgPiB3aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsc0hvcml6b250
YWxseSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9
PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250
ZW50c0hlaWdodCgpICsgY0hvcml6b250YWxIZWlnaHQgPiBoZWlnaHQoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzY3JvbGxzSG9yaXpv
bnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykgPyBoYXNIb3Jpem9udGFsU2Nyb2xs
YmFyIDogKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pOworICAgICAgICAgICAgc2Nyb2xs
c1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvKSA/IGhhc1ZlcnRpY2FsU2Ny
b2xsYmFyIDogKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxiYXIgIT0gc2Nyb2xsc1ZlcnRpY2Fs
bHkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xs
c1ZlcnRpY2FsbHkpOworICAgICAgICAgICAgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxz
VmVydGljYWxseTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYXNIb3Jpem9udGFsU2Nyb2xs
YmFyICE9IHNjcm9sbHNIb3Jpem9udGFsbHkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFz
SG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxzSG9yaXpvbnRhbGx5KTsKKyAgICAgICAgICAgIGhh
c0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxzSG9yaXpvbnRhbGx5OworICAgICAgICB9Cisg
ICAgfQogICAgIAotICAgIGd0a19hZGp1c3RtZW50X2NoYW5nZWQodmFkaik7Ci0gICAgZ3RrX2Fk
anVzdG1lbnRfdmFsdWVfY2hhbmdlZCh2YWRqKTsKKyAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChh
bmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCisgICAgSW50U2l6ZSBtYXhTY3JvbGxQb3NpdGlvbihj
b250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSwgY29udGVudHNIZWlnaHQoKSAtIHZpc2li
bGVIZWlnaHQoKSk7CisgICAgSW50U2l6ZSBzY3JvbGwgPSBkZXNpcmVkT2Zmc2V0LnNocnVua1Rv
KG1heFNjcm9sbFBvc2l0aW9uKTsKKyAgICBzY3JvbGwuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwor
CisKKyAKKyAgICBpZiAobV9kYXRhLT5oQWRqKSB7CisgICAgICAgIG1fZGF0YS0+aEFkai0+cGFn
ZV9zaXplID0gdmlzaWJsZVdpZHRoKCk7CisgICAgICAgIG1fZGF0YS0+aEFkai0+c3RlcF9pbmNy
ZW1lbnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50OworICAgICAgICBtX2RhdGEtPmhBZGotPnVw
cGVyID0gY29udGVudHNXaWR0aCgpOworICAgICAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKG1f
ZGF0YS0+aEFkaik7CisKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0LndpZHRoKCkg
IT0gc2Nyb2xsLndpZHRoKCkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+aEFkai0+dmFsdWUgPSBz
Y3JvbGwud2lkdGgoKTsKKyAgICAgICAgICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQo
bV9kYXRhLT5oQWRqKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9kYXRhLT5oQmFyKSB7
CisgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHZpc2libGVXaWR0aCgpOworICAgICAgICBtX2Rh
dGEtPmhCYXItPnNldEVuYWJsZWQoY29udGVudHNXaWR0aCgpID4gY2xpZW50V2lkdGgpOworICAg
ICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50V2lkdGggLSBQQUdFX0tFRVApOworICAgICAgICBp
ZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudFdpZHRoOworICAgICAgICBJbnRSZWN0
IG9sZFJlY3QobV9kYXRhLT5oQmFyLT5mcmFtZUdlb21ldHJ5KCkpOworICAgICAgICBJbnRSZWN0
IGhCYXJSZWN0ID0gSW50UmVjdCgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWlnaHQoKSAtIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpZHRoKCkgLSAobV9kYXRhLT52QmFyID8gbV9kYXRhLT52QmFyLT53
aWR0aCgpIDogMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+
aEJhci0+aGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPmhCYXItPnNldFJlY3QoaEJhclJlY3Qp
OworICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAh
PSBtX2RhdGEtPmhCYXItPmZyYW1lR2VvbWV0cnkoKSkKKyAgICAgICAgICAgIG1fZGF0YS0+aEJh
ci0+aW52YWxpZGF0ZSgpOworCisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVz
c2VkKQorICAgICAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0
cnVlKTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdGVwcyhMSU5FX1NURVAsIHBhZ2VTdGVw
KTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBjb250
ZW50c1dpZHRoKCkpOworICAgICAgICBtX2RhdGEtPmhCYXItPnNldFZhbHVlKHNjcm9sbC53aWR0
aCgpKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpCisgICAgICAg
ICAgICBtX2RhdGEtPmhCYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsgCisgICAg
fSAKKworICAgIGlmIChtX2RhdGEtPnZBZGopIHsKKyAgICAgICAgbV9kYXRhLT52QWRqLT5wYWdl
X3NpemUgPSB2aXNpYmxlSGVpZ2h0KCk7CisgICAgICAgIG1fZGF0YS0+dkFkai0+c3RlcF9pbmNy
ZW1lbnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50OworICAgICAgICBtX2RhdGEtPnZBZGotPnVw
cGVyID0gY29udGVudHNIZWlnaHQoKTsKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRfY2hhbmdlZCht
X2RhdGEtPnZBZGopOworCisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbE9mZnNldC5oZWlnaHQo
KSAhPSBzY3JvbGwuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+dkFkai0+dmFsdWUg
PSBzY3JvbGwuaGVpZ2h0KCk7CisgICAgICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFu
Z2VkKG1fZGF0YS0+dkFkaik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fZGF0YS0+dkJh
cikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gdmlzaWJsZUhlaWdodCgpOworICAgICAg
ICBtX2RhdGEtPnZCYXItPnNldEVuYWJsZWQoY29udGVudHNIZWlnaHQoKSA+IGNsaWVudEhlaWdo
dCk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRIZWlnaHQgLSBQQUdFX0tFRVApOwor
ICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKKyAgICAg
ICAgSW50UmVjdCBvbGRSZWN0KG1fZGF0YS0+dkJhci0+ZnJhbWVHZW9tZXRyeSgpKTsKKyAgICAg
ICAgSW50UmVjdCB2QmFyUmVjdCA9IEludFJlY3Qod2lkdGgoKSAtIG1fZGF0YS0+dkJhci0+d2lk
dGgoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSAobV9kYXRhLT5oQmFyID8gbV9k
YXRhLT5oQmFyLT5oZWlnaHQoKSA6IDApKTsKKyAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRSZWN0
KHZCYXJSZWN0KTsKKyAgICAgICAgaWYgKCFtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkICYm
IG9sZFJlY3QgIT0gbV9kYXRhLT52QmFyLT5mcmFtZUdlb21ldHJ5KCkpCisgICAgICAgICAgICBt
X2RhdGEtPnZCYXItPmludmFsaWRhdGUoKTsKKworICAgICAgICBpZiAobV9kYXRhLT5zY3JvbGxi
YXJzU3VwcHJlc3NlZCkKKyAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0U3VwcHJlc3NJbnZh
bGlkYXRpb24odHJ1ZSk7CisgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0U3RlcHMoTElORV9TVEVQ
LCBwYWdlU3RlcCk7CisgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRI
ZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPnZCYXItPnNldFZhbHVl
KHNjcm9sbC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVz
c2VkKQorICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihm
YWxzZSk7CisgICAgfQogCi0gICAgbV9kYXRhLT5zY3JvbGxCYXJzTmVlZFVwZGF0ZSA9IGZhbHNl
OworICAgIGlmIChvbGRIYXNWZXJ0aWNhbCAhPSAobV9kYXRhLT52QmFyICE9IDApIHx8IG9sZEhh
c0hvcml6b250YWwgIT0gKG1fZGF0YS0+aEJhciAhPSAwKSkKKyAgICAgICAgZ2VvbWV0cnlDaGFu
Z2VkKCk7CisKKyAgICAvLyBTZWUgaWYgb3VyIG9mZnNldCBoYXMgY2hhbmdlZCBpbiBhIHNpdHVh
dGlvbiB3aGVyZSB3ZSBtaWdodCBub3QgaGF2ZSBzY3JvbGxiYXJzLgorICAgIC8vIFRoaXMgY2Fu
IGhhcHBlbiB3aGVuIGVkaXRpbmcgYSBib2R5IHdpdGggb3ZlcmZsb3c6aGlkZGVuIGFuZCBzY3Jv
bGxpbmcgdG8gcmV2ZWFsIHNlbGVjdGlvbi4KKyAgICAvLyBJdCBjYW4gYWxzbyBoYXBwZW4gd2hl
biBtYXhpbWl6aW5nIGEgd2luZG93IHRoYXQgaGFzIHNjcm9sbGJhcnMgKGJ1dCB0aGUgbmV3IG1h
eGltaXplZCByZXN1bHQKKyAgICAvLyBkb2VzIG5vdCkuCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0
YSA9IHNjcm9sbCAtIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OworICAgIGlmIChzY3JvbGxEZWx0YSAh
PSBJbnRTaXplKCkpIHsKKyAgICAgICBtX2RhdGEtPnNjcm9sbE9mZnNldCA9IHNjcm9sbDsKKyAg
ICAgICBtX2RhdGEtPnNjcm9sbEJhY2tpbmdTdG9yZShzY3JvbGxEZWx0YSk7CisgICAgfQorCisg
ICAgbV9kYXRhLT5pblVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZTsKIH0KIAotSW50UG9pbnQgU2Ny
b2xsVmlldzo6d2luZG93VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CitJ
bnRQb2ludCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiB3aW5k
b3dQb2ludCkgY29uc3QKIHsgCi0gICAgcmV0dXJuIHBvaW50OworICAgIEludFBvaW50IHZpZXdQ
b2ludCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dQb2ludCk7CisgICAgcmV0
dXJuIHZpZXdQb2ludCArIHNjcm9sbE9mZnNldCgpOwogfQogCi1JbnRQb2ludCBTY3JvbGxWaWV3
Ojpjb250ZW50c1RvV2luZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK0ludFBvaW50
IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3coY29uc3QgSW50UG9pbnQmIGNvbnRlbnRzUG9p
bnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHBvaW50OworICAgIEludFBvaW50IHZpZXdQb2ludCA9
IGNvbnRlbnRzUG9pbnQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICByZXR1cm4gY29udmVydFRvQ29u
dGFpbmluZ1dpbmRvdyh2aWV3UG9pbnQpOyAgCiB9CiAKIFBsYXRmb3JtU2Nyb2xsYmFyKiBTY3Jv
bGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91
c2VFdmVudCkKIHsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBJbnRQb2ludCB2aWV3UG9p
bnQgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cobW91c2VFdmVudC5wb3MoKSk7CisgICAg
aWYgKG1fZGF0YS0+aEJhciAmJiBtX2RhdGEtPmhCYXItPmZyYW1lR2VvbWV0cnkoKS5jb250YWlu
cyh2aWV3UG9pbnQpKQorICAgICAgICByZXR1cm4gbV9kYXRhLT5oQmFyLmdldCgpOworICAgIGlm
IChtX2RhdGEtPnZCYXIgJiYgbV9kYXRhLT52QmFyLT5mcmFtZUdlb21ldHJ5KCkuY29udGFpbnMo
dmlld1BvaW50KSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dkJhci5nZXQoKTsKICAgICByZXR1
cm4gMDsKIH0KIAorSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udmVydENoaWxkVG9TZWxmKGNvbnN0
IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQ
b2ludCBuZXdQb2ludCA9IHBvaW50OworICAgIGlmIChjaGlsZCAhPSBtX2RhdGEtPmhCYXIgJiYg
Y2hpbGQgIT0gbV9kYXRhLT52QmFyKQorICAgICAgICBuZXdQb2ludCA9IHBvaW50IC0gc2Nyb2xs
T2Zmc2V0KCk7CisgICAgcmV0dXJuIFdpZGdldDo6Y29udmVydENoaWxkVG9TZWxmKGNoaWxkLCBu
ZXdQb2ludCk7Cit9CisKK0ludFBvaW50IFNjcm9sbFZpZXc6OmNvbnZlcnRTZWxmVG9DaGlsZChj
b25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAg
SW50UG9pbnQgbmV3UG9pbnQgPSBwb2ludDsKKyAgICBpZiAoY2hpbGQgIT0gbV9kYXRhLT5oQmFy
ICYmIGNoaWxkICE9IG1fZGF0YS0+dkJhcikKKyAgICAgICAgbmV3UG9pbnQgPSBwb2ludCArIHNj
cm9sbE9mZnNldCgpOworICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRTZWxmVG9DaGlsZChjaGls
ZCwgbmV3UG9pbnQpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBj
b2RlIGlzIGhlcmUgc28gd2UgZG9uJ3QgaGF2ZSB0byBmb3JrIEZyYW1lVmlldy5oLy5jcHAuCisg
ICAgLy8gSW4gdGhlIGVuZCwgRnJhbWVWaWV3IHNob3VsZCBqdXN0IG1lcmdlIHdpdGggU2Nyb2xs
Vmlldy4KKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CisKKyAgICBpZiAoY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IGRvY3VtZW50
RGlydHlSZWN0ID0gcmVjdDsKKyAgICBkb2N1bWVudERpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVH
ZW9tZXRyeSgpKTsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKworICAgIGNvbnRleHQtPnRyYW5z
bGF0ZSh4KCksIHkoKSk7CisgICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZSgteCgpLCAteSgpKTsK
KworICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtY29udGVudHNYKCksIC1jb250ZW50c1koKSk7Cisg
ICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZShjb250ZW50c1goKSwgY29udGVudHNZKCkpOworCisg
ICAgY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCgpKSk7
CisgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcyktPmZyYW1lKCktPnBhaW50
KGNvbnRleHQsIGRvY3VtZW50RGlydHlSZWN0KTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisK
KyAgICAvLyBOb3cgcGFpbnQgdGhlIHNjcm9sbGJhcnMuCisgICAgaWYgKCFtX2RhdGEtPnNjcm9s
bGJhcnNTdXBwcmVzc2VkICYmIChtX2RhdGEtPmhCYXIgfHwgbV9kYXRhLT52QmFyKSkgeworICAg
ICAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsVmlld0RpcnR5UmVj
dCA9IHJlY3Q7CisgICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QuaW50ZXJzZWN0KGZyYW1lR2Vv
bWV0cnkoKSk7CisgICAgICAgIC8qCisgICAgICAgICAqIFdlIGRvbid0IG5lZWQgdG8gdHJhbnNs
YXRlIHRoZSBjb250ZXh0IGFzIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRSZWN0IG1ha2VzIHN1cmUg
dGhlIHNjcm9sbGJhcgorICAgICAgICAgKiBpcyBhdCB0aGUgcmlnaHQgc3BvdC4KKyAgICAgICAg
ICovCisgICAgICAgIGlmIChtX2RhdGEtPmhCYXIpCisgICAgICAgICAgICBtX2RhdGEtPmhCYXIt
PnBhaW50KGNvbnRleHQsIHNjcm9sbFZpZXdEaXJ0eVJlY3QpOworICAgICAgICBpZiAobV9kYXRh
LT52QmFyKQorICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5wYWludChjb250ZXh0LCBzY3JvbGxW
aWV3RGlydHlSZWN0KTsKKworICAgICAgICAvKgorICAgICAgICAgKiBGSVhNRTogVE9ETzogQ2hl
Y2sgaWYgdGhhdCB3b3JrcyB3aXRoIFJUTAorICAgICAgICAgKi8KKyAgICAgICAgY29udGV4dC0+
dHJhbnNsYXRlKHgoKSwgeSgpKTsKKyAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5tb3ZlKC14
KCksIC15KCkpOworICAgICAgICAvLyBGaWxsIHRoZSBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUu
CisgICAgICAgIEludFJlY3QgaENvcm5lcjsKKyAgICAgICAgaWYgKG1fZGF0YS0+aEJhciAmJiB3
aWR0aCgpIC0gbV9kYXRhLT5oQmFyLT53aWR0aCgpID4gMCkgeworICAgICAgICAgICAgaENvcm5l
ciA9IEludFJlY3QobV9kYXRhLT5oQmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVpZ2h0KCkgLSBtX2RhdGEtPmhCYXItPmhlaWdodCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIG1fZGF0YS0+aEJhci0+d2lkdGgoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCkpOworICAgICAg
ICAgICAgaWYgKGhDb3JuZXIuaW50ZXJzZWN0cyhzY3JvbGxWaWV3RGlydHlSZWN0KSkKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChoQ29ybmVyLCBDb2xvcjo6d2hpdGUpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fZGF0YS0+dkJhciAmJiBoZWlnaHQoKSAtIG1fZGF0YS0+
dkJhci0+aGVpZ2h0KCkgPiAwKSB7CisgICAgICAgICAgICBJbnRSZWN0IHZDb3JuZXIod2lkdGgo
KSAtIG1fZGF0YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2RhdGEtPnZCYXItPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0
YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAt
IG1fZGF0YS0+dkJhci0+aGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKHZDb3JuZXIgIT0gaENv
cm5lciAmJiB2Q29ybmVyLmludGVyc2VjdHMoc2Nyb2xsVmlld0RpcnR5UmVjdCkpCisgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QodkNvcm5lciwgQ29sb3I6OndoaXRlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9Cit9CisKKy8qCisgKiB1
cGRhdGUgY2hpbGRyZW4gYnV0IG5vciBvdXIgc2Nyb2xsYmFycy4gVGhleSBzaG91bGQgbm90IHNj
cm9sbCB3aGVuCisgKiB3ZSBzY3JvbGwgb3VyIGNvbnRlbnQuCisgKi8KK3ZvaWQgU2Nyb2xsVmll
dzo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFdpZGdldCo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX2RhdGEtPmNoaWxkcmVuLmVuZCgpOworICAgIGZvciAoSGFzaFNl
dDxXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IG1fZGF0YS0+Y2hpbGRyZW4uYmVn
aW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKKyAgICAgICAgKCpjdXJyZW50KS0+Z2Vv
bWV0cnlDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIGlm
ICAoKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93bikgJiYg
bV9kYXRhLT52QmFyKQorICAgICAgICBtX2RhdGEtPnZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5KTsKKyAgICBlbHNlIGlmIChtX2RhdGEtPmhCYXIpCisgICAgICAgIG1fZGF0YS0+
aEJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworfQorCitJbnRSZWN0IFNjcm9s
bFZpZXc6OndpbmRvd1Jlc2l6ZXJSZWN0KCkKK3sKKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7
CisgICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxjb25zdCBGcmFt
ZVZpZXcqPih0aGlzKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWVWaWV3LT5mcmFtZSgpID8gZnJh
bWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gcGFnZS0+Y2hyb21lKCktPndpbmRvd1Jlc2l6ZXJS
ZWN0KCk7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cmVzaXplck92ZXJsYXBzQ29udGVudCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtX2RhdGEtPnNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXI7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6YWRqdXN0T3ZlcmxhcHBpbmdTY3JvbGxiYXJDb3VudChpbnQg
b3ZlcmxhcERlbHRhKQoreworICAgIGludCBvbGRDb3VudCA9IG1fZGF0YS0+c2Nyb2xsYmFyc0F2
b2lkaW5nUmVzaXplcjsKKyAgICBtX2RhdGEtPnNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXIgKz0g
b3ZlcmxhcERlbHRhOworICAgIGlmIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNGcmFtZVZpZXco
KSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5hZGp1c3RPdmVy
bGFwcGluZ1Njcm9sbGJhckNvdW50KG92ZXJsYXBEZWx0YSk7CisgICAgZWxzZSBpZiAoIW1fZGF0
YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpIHsKKyAgICAgICAgLy8gSWYgd2Ugd2VudCBmcm9tIG4g
dG8gMCBvciBmcm9tIDAgdG8gbiBhbmQgd2UncmUgdGhlIG91dGVybW9zdCB2aWV3LAorICAgICAg
ICAvLyB3ZSBuZWVkIHRvIGludmFsaWRhdGUgdGhlIHdpbmRvd1Jlc2l6ZXJSZWN0KCksIHNpbmNl
IGl0IHdpbGwgbm93IG5lZWQgdG8gcGFpbnQKKyAgICAgICAgLy8gZGlmZmVyZW50bHkuCisgICAg
ICAgIGlmIChvbGRDb3VudCA+IDAgJiYgbV9kYXRhLT5zY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVy
ID09IDAgfHwKKyAgICAgICAgICAgIG9sZENvdW50ID09IDAgJiYgbV9kYXRhLT5zY3JvbGxiYXJz
QXZvaWRpbmdSZXNpemVyID4gMCkKKyAgICAgICAgICAgIGludmFsaWRhdGVSZWN0KHdpbmRvd1Jl
c2l6ZXJSZWN0KCkpOworICAgIH0KK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogcGFyZW50VmlldykKK3sKKyAgICBpZiAoIXBhcmVudFZpZXcgJiYgbV9kYXRhLT5z
Y3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyICYmIHBhcmVudCgpICYmIHBhcmVudCgpLT5pc0ZyYW1l
VmlldygpKQorICAgICAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmFkanVz
dE92ZXJsYXBwaW5nU2Nyb2xsYmFyQ291bnQoZmFsc2UpOworICAgIFdpZGdldDo6c2V0UGFyZW50
KHBhcmVudFZpZXcpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OmFkZFRvRGlydHlSZWdpb24oY29u
c3QgSW50UmVjdCYgY29udGFpbmluZ1dpbmRvd1JlY3QpCit7CisgICAgQVNTRVJUKGlzRnJhbWVW
aWV3KCkpOworICAgIGNvbnN0IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRnJhbWVWaWV3Kj4odGhpcyk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUo
KSA/IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpIDogMDsKKyAgICBpZiAoIXBhZ2UpCisgICAg
ICAgIHJldHVybjsKKyAgICBwYWdlLT5jaHJvbWUoKS0+YWRkVG9EaXJ0eVJlZ2lvbihjb250YWlu
aW5nV2luZG93UmVjdCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQmFja2luZ1N0b3Jl
KGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50
UmVjdCYgY2xpcFJlY3QpCit7CisgICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOworICAgIGNvbnN0
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhp
cyk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmlldy0+ZnJh
bWUoKS0+cGFnZSgpIDogMDsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBw
YWdlLT5jaHJvbWUoKS0+c2Nyb2xsQmFja2luZ1N0b3JlKGR4LCBkeSwgc2Nyb2xsVmlld1JlY3Qs
IGNsaXBSZWN0KTsKK30KKwordm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUoKQor
eworICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKKyAgICBjb25zdCBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHRoaXMpOworICAgIFBhZ2UqIHBh
Z2UgPSBmcmFtZVZpZXctPmZyYW1lKCkgPyBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKSA6IDA7
CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgcGFnZS0+Y2hyb21lKCktPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNiBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCiAj
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnRHZGsuaCIKQEAgLTE2Myw3ICsxNjIsNiBAQCBTdHJpbmcgRmlsZUNob29zZXI6
OmJhc2VuYW1lRm9yV2lkdGgoY29uCiBDb2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsg
cmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFu
Z2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KIAotdm9pZCBGcmFtZTo6c2V0TmVlZHNSZWFwcGx5
U3R5bGVzKCkgeyB9CiAKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJl
c291cmNlUmVxdWVzdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiBib29s
IFJlc291cmNlSGFuZGxlOjpsb2Fkc0Jsb2NrZWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBmYWxzZTsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAJKHJl
dmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDI3ICszMiwyNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50KiBldmVu
dCkKK1BsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xs
KiBldmVudCkKIHsKICAgICBtX2RlbHRhWCA9IDA7CiAgICAgbV9kZWx0YVkgPSAwOwogCi0gICAg
aWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfVVApCisgICAgaWYgKGV2
ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9VUCkKICAgICAgICAgbV9kZWx0YVkgPSAtMTIw
OwotICAgIGVsc2UgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfTEVG
VCkKKyAgICBlbHNlIGlmIChldmVudC0+ZGlyZWN0aW9uID09IEdES19TQ1JPTExfTEVGVCkKICAg
ICAgICAgbV9kZWx0YVggPSAtMTIwOwotICAgIGVsc2UgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0
aW9uID09IEdES19TQ1JPTExfUklHSFQpCisgICAgZWxzZSBpZiAoZXZlbnQtPmRpcmVjdGlvbiA9
PSBHREtfU0NST0xMX1JJR0hUKQogICAgICAgICBtX2RlbHRhWCA9IDEyMDsKICAgICBlbHNlCiAg
ICAgICAgIG1fZGVsdGFZID0gMTIwOwogCi0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQp
ZXZlbnQtPnNjcm9sbC54LCAoaW50KWV2ZW50LT5zY3JvbGwueSk7Ci0gICAgbV9nbG9iYWxQb3Np
dGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPnNjcm9sbC54X3Jvb3QsIChpbnQpZXZlbnQtPnNj
cm9sbC55X3Jvb3QpOworICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54LCAo
aW50KWV2ZW50LT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVu
dC0+eF9yb290LCAoaW50KWV2ZW50LT55X3Jvb3QpOwogICAgIG1faXNBY2NlcHRlZCA9IGZhbHNl
OwotICAgIG1fc2hpZnRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX1NISUZUX01BU0s7
Ci0gICAgbV9jdHJsS2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19DT05UUk9MX01BU0s7
Ci0gICAgbV9hbHRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDFfTUFTSzsKLSAg
ICBtX21ldGFLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDJfTUFTSzsKKyAgICBt
X3NoaWZ0S2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0s7CisgICAgbV9jdHJsS2V5
ID0gZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKKyAgICBtX2FsdEtleSA9IGV2ZW50
LT5zdGF0ZSAmIEdES19NT0QxX01BU0s7CisgICAgbV9tZXRhS2V5ID0gZXZlbnQtPnN0YXRlICYg
R0RLX01PRDJfTUFTSzsKICAgICBtX2lzQ29udGludW91cyA9IGZhbHNlOwogfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tIAogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMzEsMTEgKzMxLDEyIEBA
CiAKICNpbmNsdWRlICJDdXJzb3IuaCIKICNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRnJh
bWVHZGsuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCiAK
ICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgpAQCAtNDcsOCArNDgs
MTkgQEAgcHVibGljOgogICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZTsKICAgICBHdGtXaWRnZXQq
IHdpZGdldDsKICAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKLSAgICBJbnRSZWN0IGdlb21ldHJ5
OwotICAgIEZvbnQgZm9udDsKKyAgICBJbnRSZWN0IGZyYW1lUmVjdDsKKworICAgIFNjcm9sbFZp
ZXcqIHBhcmVudDsKKyAgICBXZWJLaXRHdGtQYWdlKiBjb250YWluaW5nV2luZG93OworICAgIGJv
b2wgc3VwcHJlc3NJbnZhbGlkYXRpb247CisgICAgYm9vbCBpc1Njcm9sbFZpZXdDb250cm9sOwor
CisgICAgR2RrRHJhd2FibGUqIGdka0RyYXdhYmxlKCkKKyAgICB7CisgICAgICAgIGlmICghZHJh
d2FibGUgJiYgd2lkZ2V0KQorICAgICAgICAgICAgZHJhd2FibGUgPSB3aWRnZXQtPndpbmRvdzsK
KyAgICAgICAgcmV0dXJuIGRyYXdhYmxlOworICAgIH0KIH07CiAKIFdpZGdldDo6V2lkZ2V0KCkK
QEAgLTU2LDI3ICs2OCwyMCBAQCBXaWRnZXQ6OldpZGdldCgpCiB7CiAgICAgZGF0YS0+ZHJhd2Fi
bGUgPSAwOwogICAgIGRhdGEtPndpZGdldCA9IDA7CisgICAgZGF0YS0+Y2xpZW50ID0gMDsKKyAg
ICBkYXRhLT5wYXJlbnQgPSAwOworICAgIGRhdGEtPmNvbnRhaW5pbmdXaW5kb3cgPSAwOworICAg
IGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uID0gZmFsc2U7CisgICAgZGF0YS0+aXNTY3JvbGxW
aWV3Q29udHJvbCA9IGZhbHNlOwogfQogCi1XaWRnZXQ6OldpZGdldChHdGtXaWRnZXQqIHdpZGdl
dCkKLSAgICA6IGRhdGEobmV3IFdpZGdldFByaXZhdGUpCi17Ci0gICAgc2V0R3RrV2lkZ2V0KHdp
ZGdldCk7Ci19Ci0KLUdka0RyYXdhYmxlKiBXaWRnZXQ6Omdka0RyYXdhYmxlKCkgY29uc3QKLXsK
LSAgICBpZiAoIWRhdGEtPmRyYXdhYmxlICYmIGRhdGEtPndpZGdldCkKLSAgICAgICAgZGF0YS0+
ZHJhd2FibGUgPSBHVEtfSVNfTEFZT1VUKGRhdGEtPndpZGdldCkgPyBHVEtfTEFZT1VUKGRhdGEt
PndpZGdldCktPmJpbl93aW5kb3cgOiBkYXRhLT53aWRnZXQtPndpbmRvdzsKLSAgICByZXR1cm4g
ZGF0YS0+ZHJhd2FibGU7Ci19CiAKLUd0a1dpZGdldCogV2lkZ2V0OjpndGtXaWRnZXQoKSBjb25z
dAorR3RrV2lkZ2V0KiBXaWRnZXQ6OmludGVybmFsR3RrV2lkZ2V0KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gZGF0YS0+d2lkZ2V0OwogfQogCi12b2lkIFdpZGdldDo6c2V0R3RrV2lkZ2V0KEd0a1dp
ZGdldCogd2lkZ2V0KQordm9pZCBXaWRnZXQ6OnNldEludGVybmFsR3RrV2lkZ2V0KEd0a1dpZGdl
dCogd2lkZ2V0KQogewogICAgIGRhdGEtPmRyYXdhYmxlID0gMDsKICAgICBkYXRhLT53aWRnZXQg
PSB3aWRnZXQ7CkBAIC04Nyw2ICs5MiwxNiBAQCBXaWRnZXQ6On5XaWRnZXQoKQogICAgIGRlbGV0
ZSBkYXRhOwogfQogCit2b2lkIFdpZGdldDo6c2V0Q29udGFpbmluZ1dpbmRvdyhXZWJLaXRHdGtQ
YWdlKiBjb250YWluaW5nV2luZG93KQoreworICAgIGRhdGEtPmNvbnRhaW5pbmdXaW5kb3cgPSBj
b250YWluaW5nV2luZG93OworfQorCitXZWJLaXRHdGtQYWdlKiBXaWRnZXQ6OmNvbnRhaW5pbmdX
aW5kb3coKSBjb25zdAoreworICAgIHJldHVybiBkYXRhLT5jb250YWluaW5nV2luZG93OworfQor
CiB2b2lkIFdpZGdldDo6c2V0Q2xpZW50KFdpZGdldENsaWVudCogYykKIHsKICAgICBkYXRhLT5j
bGllbnQgPSBjOwpAQCAtOTksMTUgKzExNCwyNyBAQCBXaWRnZXRDbGllbnQqIFdpZGdldDo6Y2xp
ZW50KCkgY29uc3QKIAogSW50UmVjdCBXaWRnZXQ6OmZyYW1lR2VvbWV0cnkoKSBjb25zdAogewot
ICAgIHJldHVybiBkYXRhLT5nZW9tZXRyeTsKKyAgICByZXR1cm4gZGF0YS0+ZnJhbWVSZWN0Owor
fQorCit2b2lkIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIGRhdGEtPmZyYW1lUmVjdCA9IHI7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogdikKK3sKKyAgICBkYXRhLT5wYXJlbnQgPSB2OworfQorCitTY3JvbGxWaWV3KiBX
aWRnZXQ6OnBhcmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPnBhcmVudDsKIH0KIAog
dm9pZCBXaWRnZXQ6OnNldEZvY3VzKCkKIHsKLSAgICBHdGtXaWRnZXQgKndpZGdldCA9IGRhdGEt
PndpZGdldDsKLSAgICBpZiAoIXdpZGdldCkKLSAgICAgICAgcmV0dXJuOwotICAgIGd0a193aWRn
ZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhpbnRlcm5h
bEd0a1dpZGdldCgpID8gaW50ZXJuYWxHdGtXaWRnZXQoKSA6IEdUS19XSURHRVQoY29udGFpbmlu
Z1dpbmRvdygpKSk7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBj
dXJzb3IpCkBAIC0xMTYsMzkgKzE0MywyMSBAQCB2b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0
IEN1cnNvciYgY3VyCiAgICAgaWYgKCFwY3VyKQogICAgICAgICByZXR1cm47CiAKLSAgICBHZGtE
cmF3YWJsZSogZHJhd2FibGUgPSBnZGtEcmF3YWJsZSgpOwotICAgIGlmICghZHJhd2FibGUgfHwg
IUdES19JU19XSU5ET1coZHJhd2FibGUpKQotICAgICAgICByZXR1cm47Ci0gICAgR2RrV2luZG93
KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93X3NldF9jdXJz
b3Iod2luZG93LCBwY3VyKTsKLQorICAgIGdka193aW5kb3dfc2V0X2N1cnNvcihkYXRhLT5nZGtE
cmF3YWJsZSgpID8gR0RLX1dJTkRPVyhkYXRhLT5nZGtEcmF3YWJsZSgpKSA6IGNvbnRhaW5pbmdX
aW5kb3coKS0+YmluX3dpbmRvdywgcGN1cik7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzaG93KCkKIHsK
LSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBnZGtEcmF3YWJsZSgpOwotICAgIGlmICghZHJh
d2FibGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUpKQorICAgIGlmICghaW50ZXJuYWxHdGtX
aWRnZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEdka1dpbmRvdyogd2luZG93ID0gR0RLX1dJ
TkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19zaG93KHdpbmRvdyk7CisgICAgZ3RrX3dp
ZGdldF9zaG93KGludGVybmFsR3RrV2lkZ2V0KCkpOwogfQogCiB2b2lkIFdpZGdldDo6aGlkZSgp
CiB7Ci0gICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlID0gZ2RrRHJhd2FibGUoKTsKLSAgICBpZiAo
IWRyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdhYmxlKSkKKyAgICBpZiAoIWludGVybmFs
R3RrV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdE
S19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfaGlkZSh3aW5kb3cpOwotfQotCi12
b2lkIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQotewotICAgIGRh
dGEtPmdlb21ldHJ5ID0gcjsKLSAgICBnX3JldHVybl9pZl9mYWlsKGRhdGEtPndpZGdldCk7Ci0K
LSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHIueCgpLCByLnkoKSwgci53aWR0aCgp
LCByLmhlaWdodCgpIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGRhdGEtPndpZGdl
dCwgJmFsbG9jYXRpb24pOworICAgIGd0a193aWRnZXRfaGlkZShpbnRlcm5hbEd0a1dpZGdldCgp
KTsKIH0KIAogdm9pZCBXaWRnZXQ6OnNldEVuYWJsZWQoYm9vbCkKQEAgLTE2NCwxMiArMTczLDM1
IEBAIGJvb2wgV2lkZ2V0Ojppc0VuYWJsZWQoKSBjb25zdAogCiB2b2lkIFdpZGdldDo6cmVtb3Zl
RnJvbVBhcmVudCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAocGFyZW50KCkp
CisgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZCh0aGlzKTsKIH0KIAotdm9pZCBXaWRnZXQ6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIEludFJlY3QgY29uc3QmKQorLyoKKyAqIHNpbWlsaWFy
IHRvIGd0a19jb250YWluZXJfcHJvcGFnYXRlX2V4cG9zZSwgd2Ugd2FudCB0byBtYWtlIHN1cmUK
KyAqIGludGVybmFsR3RrV2lkZ2V0KCkgaXMgcGFpbnRlZCBub3cuCisgKgorICogVE9ETzogd2Ug
bWlnaHQgd2FudCB0byBob25vciB0aGUgdHJhbnNsYXRpb24gb2YgdGhlIGNvbnRleHQgYW5kIG1h
bmlwdWxhdGUKKyAqIGFsbG9jYXRpb24ueCBhbmQgYWxsb2NhdGlvbi55IGJlZm9yZSBkcmF3aW5n
LiBUaGlzIGhhcyBwb3RlbnRpYWwgdG8gcmVtb3ZlCisgKiB0aGUgc2V0U2Nyb2xsVmlld0NvbnRy
b2wgbWV0aG9kLgorICovCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICgh
aW50ZXJuYWxHdGtXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR2RrRXZlbnQqIGV2
ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfRVhQT1NFKTsKKyAgICBldmVudC0+ZXhwb3NlID0gKmNv
bnRleHQtPmdka0V4cG9zZUV2ZW50KCk7CisgICAgZXZlbnQtPmV4cG9zZS5yZWdpb24gPSBndGtf
d2lkZ2V0X3JlZ2lvbl9pbnRlcnNlY3QoaW50ZXJuYWxHdGtXaWRnZXQoKSwgZXZlbnQtPmV4cG9z
ZS5yZWdpb24pOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+ZXhwb3NlLndpbmRvdyk7CisKKyAg
ICBpZiAoIWdka19yZWdpb25fZW1wdHkoZXZlbnQtPmV4cG9zZS5yZWdpb24pKSB7CisgICAgICAg
IGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdpb24sICZldmVudC0+ZXhw
b3NlLmFyZWEpOworICAgICAgICBndGtfd2lkZ2V0X3NlbmRfZXhwb3NlKGludGVybmFsR3RrV2lk
Z2V0KCksIGV2ZW50KTsKKyAgICB9CisKKyAgICBndGtfd2lkZ2V0X3NlbmRfZXhwb3NlKGludGVy
bmFsR3RrV2lkZ2V0KCksIGV2ZW50KTsKKyAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7CiB9CiAK
IHZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpCkBAIC0xNzksMTUgKzIxMSwxMDAgQEAg
dm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKIAogdm9pZCBXaWRnZXQ6OmludmFsaWRh
dGUoKQogewotICAgIGlmIChkYXRhLT53aWRnZXQpCi0gICAgICAgIGd0a193aWRnZXRfcXVldWVf
ZHJhdyhkYXRhLT53aWRnZXQpOworICAgIGludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgd2lk
dGgoKSwgaGVpZ2h0KCkpKTsKK30KKwordm9pZCBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0
IEludFJlY3QmIHIpCit7CisgICAgaWYgKGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIXBhcmVudCgpKSB7CisgICAgICAgIGd0a193aWRnZXRf
cXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKSwgci54KCksIHIu
eSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLndpZHRoKCksIHIuaGVp
Z2h0KCkpOworICAgICAgICBpZiAoaXNGcmFtZVZpZXcoKSkKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEZyYW1lVmlldyo+KHRoaXMpLT5hZGRUb0RpcnR5UmVnaW9uKHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gR2V0IHRoZSByb290IHdpZGdldC4KKyAgICBTY3JvbGxWaWV3
KiBvdXRlcm1vc3RWaWV3ID0gcGFyZW50KCk7CisgICAgd2hpbGUgKG91dGVybW9zdFZpZXcgJiYg
b3V0ZXJtb3N0Vmlldy0+cGFyZW50KCkpCisgICAgICAgIG91dGVybW9zdFZpZXcgPSBvdXRlcm1v
c3RWaWV3LT5wYXJlbnQoKTsKKyAgICBpZiAoIW91dGVybW9zdFZpZXcpCisgICAgICAgIHJldHVy
bjsKKworICAgIEludFJlY3Qgd2luZG93UmVjdCA9IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3co
cik7CisgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChjb250YWluaW5n
V2luZG93KCkpLCB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2luZG93UmVjdC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdodCgp
KTsKKyAgICBvdXRlcm1vc3RWaWV3LT5hZGRUb0RpcnR5UmVnaW9uKHdpbmRvd1JlY3QpOworfQor
CitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gcG9pbnQ7Cisg
ICAgZm9yIChjb25zdCBXaWRnZXQgKnBhcmVudFdpZGdldCA9IHBhcmVudCgpLCAqY2hpbGRXaWRn
ZXQgPSB0aGlzOworICAgICAgICAgcGFyZW50V2lkZ2V0OworICAgICAgICAgY2hpbGRXaWRnZXQg
PSBwYXJlbnRXaWRnZXQsIHBhcmVudFdpZGdldCA9IHBhcmVudFdpZGdldC0+cGFyZW50KCkpCisg
ICAgICAgIHdpbmRvd1BvaW50ID0gcGFyZW50V2lkZ2V0LT5jb252ZXJ0Q2hpbGRUb1NlbGYoY2hp
bGRXaWRnZXQsIHdpbmRvd1BvaW50KTsKKyAgICByZXR1cm4gd2luZG93UG9pbnQ7Cit9CisKK0lu
dFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCB3aWRnZXRQb2ludCA9IHBvaW50OworICAg
IGZvciAoY29uc3QgV2lkZ2V0ICpwYXJlbnRXaWRnZXQgPSBwYXJlbnQoKSwgKmNoaWxkV2lkZ2V0
ID0gdGhpczsKKyAgICAgICAgIHBhcmVudFdpZGdldDsKKyAgICAgICAgIGNoaWxkV2lkZ2V0ID0g
cGFyZW50V2lkZ2V0LCBwYXJlbnRXaWRnZXQgPSBwYXJlbnRXaWRnZXQtPnBhcmVudCgpKQorICAg
ICAgICB3aWRnZXRQb2ludCA9IHBhcmVudFdpZGdldC0+Y29udmVydFNlbGZUb0NoaWxkKGNoaWxk
V2lkZ2V0LCB3aWRnZXRQb2ludCk7CisgICAgcmV0dXJuIHdpZGdldFBvaW50OworfQorCitJbnRS
ZWN0IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAoreworICAgIEludFJlY3QgY29udmVydGVkUmVjdCA9IHJlY3Q7CisgICAgY29udmVy
dGVkUmVjdC5zZXRMb2NhdGlvbihjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnZlcnRlZFJl
Y3QubG9jYXRpb24oKSkpOworICAgIHJldHVybiBjb252ZXJ0ZWRSZWN0OwogfQogCi12b2lkIFdp
ZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK0ludFBvaW50IFdpZGdl
dDo6Y29udmVydENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKIHsKLSAgICBpZiAoZGF0YS0+d2lkZ2V0KQotICAgICAgICBndGtfd2lk
Z2V0X3F1ZXVlX2RyYXdfYXJlYShkYXRhLT53aWRnZXQsIHJlY3QueCgpLCByZWN0LnkoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpICsgY2hpbGQtPngoKSwgcG9pbnQu
eSgpICsgY2hpbGQtPnkoKSk7CiB9CiAKK0ludFBvaW50IFdpZGdldDo6Y29udmVydFNlbGZUb0No
aWxkKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sK
KyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpIC0gY2hpbGQtPngoKSwgcG9pbnQueSgpIC0g
Y2hpbGQtPnkoKSk7Cit9CisKK2Jvb2wgV2lkZ2V0OjpzdXBwcmVzc0ludmFsaWRhdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uOworfQorCit2b2lk
IFdpZGdldDo6c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vbCBzdXBwcmVzcykKK3sKKyAgICBk
YXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbiA9IHN1cHByZXNzOworfQorCit2b2lkIFdpZGdldDo6
Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIWludGVybmFsR3RrV2lkZ2V0KCkg
fHwgIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlz
RnJhbWVWaWV3KCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnQoKSk7CisgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gZGF0YS0+aXNT
Y3JvbGxWaWV3Q29udHJvbCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJl
Y3QoZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5s
b2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNpemUoKSkgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZUdl
b21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXplKCkpOworCisgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCks
IHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShkYXRhLT53aWRnZXQsICZhbGxvY2F0aW9uKTsKK30KKwordm9pZCBX
aWRnZXQ6OnNldFNjcm9sbFZpZXdDb250cm9sKCkKK3sKKyAgICBkYXRhLT5pc1Njcm9sbFZpZXdD
b250cm9sID0gdHJ1ZTsKK30KIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBA
IHR5cGVkZWYgdm9pZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oR0RLKQordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50RXhwb3NlIEdka0V2ZW50RXhwb3Nl
OwogdHlwZWRlZiBzdHJ1Y3QgX0dka0RyYXdhYmxlIEdka0RyYXdhYmxlOwogI2VuZGlmCiAKQEAg
LTIwOCw4ICsyMDksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShHREspCi0gICAgICAgIHZvaWQgc2V0R2RrRHJhd2FibGUoR2RrRHJhd2FibGUqKTsKLSAg
ICAgICAgR2RrRHJhd2FibGUgKmdka0RyYXdhYmxlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0
R2RrRXhwb3NlRXZlbnQoR2RrRXZlbnRFeHBvc2UqKTsKKyAgICAgICAgR2RrRHJhd2FibGUqIGdk
a0RyYXdhYmxlKCkgY29uc3Q7CisgICAgICAgIEdka0V2ZW50RXhwb3NlKiBnZGtFeHBvc2VFdmVu
dCgpIGNvbnN0OworICAgICAgICBJbnRQb2ludCB0cmFuc2xhdGVQb2ludChjb25zdCBJbnRQb2lu
dCYpOwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlz
aW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgog
ICAgIFZlY3RvcjxmbG9hdD4gbGF5ZXJzOwogCiAjaWYgUExBVEZPUk0oR0RLKQotICAgIEdka0Ry
YXdhYmxlICpkcmF3YWJsZTsKKyAgICBHZGtFdmVudEV4cG9zZSAqZXhwb3NlOwogI2VuZGlmCiB9
OwogCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUmVjdFNvdXJjZU92
ZXIoY2EKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKCkKICAgICA6ICBjcigwKQogI2lmIFBMQVRGT1JNKEdESykKLSAgICAsIGRy
YXdhYmxlKDApCisgICAgLCBleHBvc2UoMCkKICNlbmRpZgogewogfQpAQCAtNzk4LDE0ICs3OTgs
MzAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjbwogfQogCiAjaWYg
UExBVEZPUk0oR0RLKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEdka0RyYXdhYmxlKEdka0Ry
YXdhYmxlKiBkcmF3YWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRHZGtFeHBvc2VFdmVu
dChHZGtFdmVudEV4cG9zZSogZXhwb3NlKQogewotICAgIG1fZGF0YS0+ZHJhd2FibGUgPSBkcmF3
YWJsZTsKKyAgICBtX2RhdGEtPmV4cG9zZSA9IGV4cG9zZTsKK30KKworR2RrRXZlbnRFeHBvc2Uq
IEdyYXBoaWNzQ29udGV4dDo6Z2RrRXhwb3NlRXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2RhdGEtPmV4cG9zZTsKIH0KIAogR2RrRHJhd2FibGUqIEdyYXBoaWNzQ29udGV4dDo6Z2RrRHJh
d2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEtPmRyYXdhYmxlOworICAgIHJldHVy
biBHREtfRFJBV0FCTEUobV9kYXRhLT5leHBvc2UtPndpbmRvdyk7Cit9CisKK0ludFBvaW50IEdy
YXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQorewor
ICAgIGNhaXJvX21hdHJpeF90IHRtOworICAgIGNhaXJvX2dldF9tYXRyaXgobV9kYXRhLT5jciwg
JnRtKTsKKyAgICBkb3VibGUgeCA9IHBvaW50LngoKTsKKyAgICBkb3VibGUgeSA9IHBvaW50Lnko
KTsKKworICAgIGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnQoJnRtLCAmeCwgJnkpOworICAg
IHJldHVybiBJbnRQb2ludCh4LHkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ2RrL0ltYWdlR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dkay9JbWFnZUdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw4ICszMCwxNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8Y2Fp
cm8uaD4KICAKLS8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0Ci1W
ZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKTsKKy8qCisgKiBU
T0RPOiBXZSBzaG91bGQgZm9sbG93IFF0IGFuZCBtb3ZlIHRoYXQgdG8gd2Via2l0Z3Rrc2V0dGlu
Z3MuCisgKiBGb3Igbm93IGl0IGlzIGNvcGllZCB0byB0aGUgZmlsZSBhY3R1YWxseSB1c2luZyB0
aGlzIG1ldGhvZC4KKyAqLworc3RhdGljIFZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJy
YXkoY29uc3QgY2hhciogcmVzb3VyY2VOYW1lKQoreyAgIAorICAgIFZlY3RvcjxjaGFyPiByZXNv
dXJjZTsKKyAgICAvL2lmIChzdHJjbXAocmVzb3VyY2VOYW1lLCJtaXNzaW5nSW1hZ2UiKSA9PSAw
KSB7CisgICAgLy99CisgICAgcmV0dXJuIHJlc291cmNlOworfQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKSW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5n
ZUxvZwkocmV2aXNpb24gMjQ3OTIpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjIgQEAKKzIwMDctMDctMzEgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
ICA8emVja2VAc2VsZmlzaC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTWFrZSBXZWJLaXRHdGtQYWdlIGEgdHJ1ZSBHdGtDb250YWluZXIgd2l0
aG91dCBpbmhlcml0aW5nIEd0a0xheW91dC4gSXQgd2lsbAorICAgICAgICBoYW5kbGUgYW5kIGRp
c3BhdGNoIHRoZSBldmVudHMgaW5jbHVkaW5nIGNvbnRhaW5lciBhZGQgYW5kIHJlbW92ZSwgZXhw
b3NpbmcKKyAgICAgICAgYW5kIG1vdmluZyB0aGUgbW91c2UuCisKKyAgICAgICAgSXQgaW1wbGVt
ZW50cyB0aGUgR3RrKyAncHJvdG9jb2wnIGZvciBzY3JvbGxhYmxlIGNvbnRlbnQgYW5kIHRoZSBz
ZXQgR3RrQWRqdXN0bWVudAorICAgICAgICBnZXQgcGFzc2VkIHRvIHRoZSBGcmFtZVZpZXcgb2Yg
dGhlIG1haW4gZnJhbWUuCisKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0ay1tYXJzaGFsLmxp
c3Q6CisgICAgICAgICogZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5jcHA6CisgICAgICAgICogZ3Rr
L0FwaS93ZWJraXRndGtwYWdlLmNwcDoKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3BhZ2Uu
aDoKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuY3BwOgorICAgICAgICAoV2Vi
S2l0R3RrOjphcHBseUFkanVzdG1lbnRzKToKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3By
aXZhdGUuaDoKKwogMjAwNy0wNy0zMCAgSm9obiBTdWxsaXZhbiAgPHN1bGxpdmFuQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbgpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrLW1hcnNoYWwubGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRn
dGstbWFyc2hhbC5saXN0CShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtp
dGd0ay1tYXJzaGFsLmxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTEsMiArMSwzIEBACiBWT0lEOlNU
UklORyxTVFJJTkcKIFZPSUQ6T0JKRUNULEJPT0xFQU4KK1ZPSUQ6T0JKRUNULE9CSkVDVApJbmRl
eDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1lLmNwcAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJLaXQv
Z3RrL0FwaS93ZWJraXRndGtmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwx
MCBAQAogI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKICNpbmNsdWRlICJ3ZWJraXRndGtwcml2
YXRlLmgiCiAKLSNpbmNsdWRlICJGcmFtZUdkay5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50R2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdEd0azsKIAogZXh0ZXJuICJDIiB7CiAKQEAgLTYy
LDYgKzYxLDggQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19mcmFtZV9maW5hbGl6ZShHTwogewog
ICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSAqcHJpdmF0ZV9kYXRhID0gV0VCS0lUX0dUS19GUkFN
RV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX0ZSQU1FKG9iamVjdCkpOwogICAgIGRlbGV0ZSBwcml2
YXRlX2RhdGEtPmZyYW1lOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2d0a19mcmFtZV9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRf
Z3RrX2ZyYW1lX2NsYXNzX2luaXQoV2ViS2l0R3RrRnJhbWVDbGFzcyogZnJhbWVfY2xhc3MpCkBA
IC0xMjAsMjEgKzEyMSwxNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX2ZyYW1lX2luaXQoV2Vi
S2l0CiB7CiB9CiAKLUdPYmplY3QqIHdlYmtpdF9ndGtfZnJhbWVfbmV3KFdlYktpdEd0a1BhZ2Uq
IHBhZ2UpCitHT2JqZWN0KiB3ZWJraXRfZ3RrX2ZyYW1lX25ldyhXZWJLaXRHdGtQYWdlKiB3ZWJf
cGFnZSkKIHsKICAgICBXZWJLaXRHdGtGcmFtZSogZnJhbWUgPSBXRUJLSVRfR1RLX0ZSQU1FKGdf
b2JqZWN0X25ldyhXRUJLSVRfR1RLX1RZUEVfRlJBTUUsIE5VTEwpKTsKICAgICBXZWJLaXRHdGtG
cmFtZVByaXZhdGUgKmZyYW1lX2RhdGEgPSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKGZy
YW1lKTsKLSAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSAgKnBhZ2VfZGF0YSA9IFdFQktJVF9HVEtf
UEFHRV9HRVRfUFJJVkFURShwYWdlKTsKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gY29yZSh3
ZWJfcGFnZSk7CiAKKyAgICBmcmFtZV9kYXRhLT5wYWdlID0gd2ViX3BhZ2U7CiAgICAgZnJhbWVf
ZGF0YS0+Y2xpZW50ID0gbmV3IEZyYW1lTG9hZGVyQ2xpZW50R2RrKGZyYW1lKTsKLSAgICBmcmFt
ZV9kYXRhLT5mcmFtZSA9IG5ldyBGcmFtZUdkayhwYWdlX2RhdGEtPnBhZ2UsIDAsIGZyYW1lX2Rh
dGEtPmNsaWVudCk7Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lX3ZpZXcgPSBuZXcgRnJhbWVWaWV3
KGZyYW1lX2RhdGEtPmZyYW1lKTsKLSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+c2V0VmlldyhmcmFt
ZV92aWV3KTsKLQotICAgIGZyYW1lX3ZpZXctPnNldEd0a1dpZGdldChHVEtfTEFZT1VUKHBhZ2Up
KTsKKyAgICBmcmFtZV9kYXRhLT5mcmFtZSA9IG5ldyBGcmFtZShwYWdlLCAwLCBmcmFtZV9kYXRh
LT5jbGllbnQpOwogICAgIGZyYW1lX2RhdGEtPmZyYW1lLT5pbml0KCk7Ci0gICAgZnJhbWVfZGF0
YS0+cGFnZSA9IHBhZ2U7CiAKICAgICByZXR1cm4gR19PQkpFQ1QoZnJhbWUpOwogfQpJbmRleDog
V2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0
ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViS2l0L2d0ay9B
cGkvd2Via2l0Z3RrcGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20K
ICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtNDAsNiArNDEsMTMgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiSGl0VGVz
dFJlcXVlc3QuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CkBAIC02MiwzMSArNzAsMTIzIEBAIGVudW0gewogCiBzdGF0aWMgZ3VpbnQg
d2Via2l0X2d0a19wYWdlX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwogCi1HX0RFRklO
RV9UWVBFKFdlYktpdEd0a1BhZ2UsIHdlYmtpdF9ndGtfcGFnZSwgR1RLX1RZUEVfTEFZT1VUKQor
R19ERUZJTkVfVFlQRShXZWJLaXRHdGtQYWdlLCB3ZWJraXRfZ3RrX3BhZ2UsIEdUS19UWVBFX0NP
TlRBSU5FUikKIAotc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hh
bmRsZV9nZGtfZXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRHdGtQYWdl
KiBwYWdlKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9leHBvc2VfZXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50RXhwb3NlKiBldmVudCkKIHsKLSAgICBXZWJLaXRHdGtQ
YWdlUHJpdmF0ZSogcGFnZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2Up
OwotICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSogZnJhbWVfZGF0YSA9IFdFQktJVF9HVEtfRlJB
TUVfR0VUX1BSSVZBVEUocGFnZV9kYXRhLT5tYWluX2ZyYW1lKTsKKyAgICBXZWJDb3JlOjpGcmFt
ZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkp
KTsKKworICAgIEdka1JlY3RhbmdsZSBjbGlwOworICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3go
ZXZlbnQtPnJlZ2lvbiwgJmNsaXApOworICAgIGdka193aW5kb3dfYmVnaW5fcGFpbnRfcmVnaW9u
KGV2ZW50LT53aW5kb3csIGV2ZW50LT5yZWdpb24pOworICAgIGNhaXJvX3QqIGNyID0gZ2RrX2Nh
aXJvX2NyZWF0ZShldmVudC0+d2luZG93KTsKKyAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNyKTsK
KyAgICBjdHguc2V0R2RrRXhwb3NlRXZlbnQoZXZlbnQpOworICAgIGlmIChmcmFtZS0+cmVuZGVy
ZXIoKSkgeworICAgICAgICBpZiAoZnJhbWUtPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKKyAgICAg
ICAgICAgIGZyYW1lLT52aWV3KCktPmxheW91dCgpOworICAgICAgICBJbnRSZWN0IHJlY3QoY2xp
cC54LCBjbGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKKyAgICAgICAgZnJhbWUtPnZp
ZXcoKS0+cGFpbnQoJmN0eCwgcmVjdCk7CisgICAgfQorICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwog
Ci0gICAgZnJhbWVfZGF0YS0+ZnJhbWUtPmhhbmRsZUdka0V2ZW50KGV2ZW50KTsKKyAgICByZXR1
cm4gVFJVRTsKIH0KIAotc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVh
X3Jlc2l6ZV9jYWxsYmFjayhHdGtXaWRnZXQqLCBHdGtBbGxvY2F0aW9uKiBhbGxvY2F0aW9uLCBX
ZWJLaXRHdGtQYWdlKiBwYWdlKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9rZXlf
ZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCkKIHsKLSAgICBXZWJL
aXRHdGtQYWdlUHJpdmF0ZSogcGFnZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRF
KHBhZ2UpOwotICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSogZnJhbWVfZGF0YSA9IFdFQktJVF9H
VEtfRlJBTUVfR0VUX1BSSVZBVEUocGFnZV9kYXRhLT5tYWluX2ZyYW1lKTsKKyAgICBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdp
ZGdldCkpKTsKKworICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoUGxhdGZvcm1L
ZXlib2FyZEV2ZW50KGV2ZW50KSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CiAKLSAgICBmcmFtZV9k
YXRhLT5mcmFtZS0+dmlldygpLT51cGRhdGVHZW9tZXRyeShhbGxvY2F0aW9uLT53aWR0aCwgYWxs
b2NhdGlvbi0+aGVpZ2h0KTsKLSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+Zm9yY2VMYXlvdXQoKTsK
LSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+dmlldygpLT5hZGp1c3RWaWV3U2l6ZSgpOwotICAgIGZy
YW1lX2RhdGEtPmZyYW1lLT5zZW5kUmVzaXplRXZlbnQoKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZ3RrX3BhZ2VfYnV0dG9uX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRv
biogZXZlbnQpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZy
b21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisgICAgCisgICAgaWYgKGV2ZW50LT50
eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkKKyAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKKyAg
ICBlbHNlCisgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2
ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOworICAgIHJldHVybiBUUlVFOwogfQogCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuZGVyaW5nX2FyZWFfZXZlbnRz
KEd0a1dpZGdldCogd2luLCBXZWJLaXRHdGtQYWdlKiBwYWdlKQorc3RhdGljIGdib29sZWFuIHdl
YmtpdF9ndGtfcGFnZV9tb3Rpb25fZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90
aW9uKiBldmVudCkKIHsKLSAgICBnZGtfd2luZG93X3NldF9ldmVudHMoR1RLX0lTX0xBWU9VVCh3
aW4pID8gR1RLX0xBWU9VVCh3aW4pLT5iaW5fd2luZG93IDogd2luLT53aW5kb3csCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIChHZGtFdmVudE1hc2spKEdES19FWFBPU1VSRV9NQVNLCisgICAg
V2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtf
UEFHRSh3aWRnZXQpKSk7CisKKyAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQo
UGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2Vfc2Nyb2xsX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0
LCBHZGtFdmVudFNjcm9sbCogZXZlbnQpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0g
Y29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisKKyAgICBQ
bGF0Zm9ybVdoZWVsRXZlbnQgd2hlZWxFdmVudChldmVudCk7CisgICAgZnJhbWUtPnZpZXcoKS0+
d2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICBpZiAod2hlZWxFdmVudC5pc0FjY2VwdGVkKCkp
CisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgSGl0VGVzdFJlcXVlc3QgaGl0VGVzdFJlcXVl
c3QodHJ1ZSwgdHJ1ZSk7CisgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0KHdoZWVsRXZl
bnQucG9zKCkpOworICAgIGZyYW1lLT5yZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KGhpdFRl
c3RSZXF1ZXN0LCBoaXRUZXN0UmVzdWx0KTsKKyAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3Vs
dC5pbm5lck5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBGQUxTRTsKKwor
ICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc2l6ZV9h
bGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKK3sK
KyAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5zaXpl
X2FsbG9jYXRlKHdpZGdldCwgYWxsb2NhdGlvbik7CisKKyAgICBpZiAoR1RLX1dJREdFVF9SRUFM
SVpFRCh3aWRnZXQpKQorICAgICAgICBnZGtfd2luZG93X3Jlc2l6ZShXRUJLSVRfR1RLX1BBR0Uo
d2lkZ2V0KS0+YmluX3dpbmRvdywgYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdo
dCk7CisKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2Uo
V0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKKyAgICBpZiAoIWZyYW1lLT52aWV3KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZyYW1lLT52aWV3KCktPnJlc2l6ZShhbGxvY2F0aW9uLT53aWR0
aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KTsKKyAgICBmcmFtZS0+Zm9yY2VMYXlvdXQoKTsKKyAgICBm
cmFtZS0+dmlldygpLT5hZGp1c3RWaWV3U2l6ZSgpOworICAgIGZyYW1lLT5zZW5kUmVzaXplRXZl
bnQoKTsKK30KKworLyoKKyAqIGl0IGlzIGEgR3RrQ29udGFpbmVyIHRvIGltcGxlbWVudCBTY3Jv
bGxWaWV3LiBBbmQgd2UgbmVlZCB0byBtYWtlIGl0IHNpbWlsaWFyCisgKiB0byBHdGtMYXlvdXQg
dG8gaGF2ZSBzYW5lIHBhaW50aW5nLgorICovCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vf
cmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3
aWRnZXQsIEdUS19SRUFMSVpFRCk7CisKKyAgICBHZGtXaW5kb3dBdHRyIGF0dHJpYnV0ZXM7CisK
KyAgICBhdHRyaWJ1dGVzLndpbmRvd190eXBlID0gR0RLX1dJTkRPV19DSElMRDsKKyAgICBhdHRy
aWJ1dGVzLnggPSB3aWRnZXQtPmFsbG9jYXRpb24ueDsKKyAgICBhdHRyaWJ1dGVzLnkgPSB3aWRn
ZXQtPmFsbG9jYXRpb24ueTsKKyAgICBhdHRyaWJ1dGVzLndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0
aW9uLndpZHRoOworICAgIGF0dHJpYnV0ZXMuaGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhl
aWdodDsKKyAgICBhdHRyaWJ1dGVzLndjbGFzcyA9IEdES19JTlBVVF9PVVRQVVQ7CisgICAgYXR0
cmlidXRlcy52aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92aXN1YWwgKHdpZGdldCk7CisgICAgYXR0
cmlidXRlcy5jb2xvcm1hcCA9IGd0a193aWRnZXRfZ2V0X2NvbG9ybWFwICh3aWRnZXQpOworICAg
IGF0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IEdES19WSVNJQklMSVRZX05PVElGWV9NQVNLOworCisg
ICAgZ2ludCBhdHRyaWJ1dGVzX21hc2sgPSBHREtfV0FfWCB8IEdES19XQV9ZIHwgR0RLX1dBX1ZJ
U1VBTCB8IEdES19XQV9DT0xPUk1BUDsKKyAgICB3aWRnZXQtPndpbmRvdyA9IGdka193aW5kb3df
bmV3KGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cgKHdpZGdldCksICZhdHRyaWJ1dGVzLCBh
dHRyaWJ1dGVzX21hc2spOworICAgIGdka193aW5kb3dfc2V0X2JhY2tfcGl4bWFwKHdpZGdldC0+
d2luZG93LCBOVUxMLCBGQUxTRSk7CisgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHdpZGdl
dC0+d2luZG93LCB3aWRnZXQpOworCisgICAgYXR0cmlidXRlcy54ID0gMDsKKyAgICBhdHRyaWJ1
dGVzLnkgPSAwOworICAgIGF0dHJpYnV0ZXMud2lkdGggPSB3aWRnZXQtPmFsbG9jYXRpb24ud2lk
dGg7CisgICAgYXR0cmlidXRlcy5oZWlnaHQgPSB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0Owor
ICAgIGF0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IEdES19FWFBPU1VSRV9NQVNLCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBHREtfU0NST0xMX01BU0sKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEdES19CVVRUT05fUFJFU1NfTUFTSwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgR0RLX0JVVFRPTl9SRUxFQVNFX01BU0sKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IEdES19QT0lOVEVSX01PVElPTl9NQVNLCkBAIC05NSwxNSArMTk1LDExMSBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBHREtfQlVUVE9OX01PVElPTl9NQVNLCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBHREtfQlVUVE9OMV9NT1RJT05fTUFTSwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgR0RLX0JVVFRPTjJfTU9USU9OX01BU0sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IEdES19CVVRUT04zX01PVElPTl9NQVNLKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBHREtfQlVUVE9OM19NT1RJT05fTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
Z3RrX3dpZGdldF9nZXRfZXZlbnRzKHdpZGdldCk7CisKKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdl
ID0gV0VCS0lUX0dUS19QQUdFKHdpZGdldCk7CisgICAgcGFnZS0+YmluX3dpbmRvdyA9IGdka193
aW5kb3dfbmV3KHdpZGdldC0+d2luZG93LCAmYXR0cmlidXRlcywgYXR0cmlidXRlc19tYXNrKTsK
KyAgICBnZGtfd2luZG93X3NldF91c2VyX2RhdGEocGFnZS0+YmluX3dpbmRvdywgd2lkZ2V0KTsK
KworICAgIHdpZGdldC0+c3R5bGUgPSBndGtfc3R5bGVfYXR0YWNoICh3aWRnZXQtPnN0eWxlLCB3
aWRnZXQtPndpbmRvdyk7CisgICAgZ3RrX3N0eWxlX3NldF9iYWNrZ3JvdW5kKHdpZGdldC0+c3R5
bGUsIHBhZ2UtPmJpbl93aW5kb3csIEdUS19TVEFURV9OT1JNQUwpOworCisgICAgV2ViS2l0R3Rr
UGFnZVByaXZhdGUqIHByaXZhdGVfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShw
YWdlKTsKKyAgICBIYXNoU2V0PEd0a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2
YXRlX2RhdGEtPmNoaWxkcmVuLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6
Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uYmVnaW4oKTsg
Y3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRfcGFyZW50
X3dpbmRvdygqY3VycmVudCwgcGFnZS0+YmluX3dpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9ndGtfcGFnZV91bnJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0
R3RrUGFnZSogcGFnZSA9IFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpOworCisgICAgZ2RrX3dpbmRv
d19zZXRfdXNlcl9kYXRhKHBhZ2UtPmJpbl93aW5kb3csIDApOworICAgIGdka193aW5kb3dfZGVz
dHJveShwYWdlLT5iaW5fd2luZG93KTsKKyAgICBwYWdlLT5iaW5fd2luZG93ID0gMDsKKworICAg
IEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X2d0a19wYWdlX3BhcmVudF9jbGFzcyktPnVucmVhbGl6
ZSh3aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfbWFwKEd0a1dpZGdl
dCogd2lkZ2V0KQoreworICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX01BUFBF
RCk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHByaXZhdGVfZGF0YSA9IFdFQktJVF9HVEtf
UEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSk7CisKKyAgICBIYXNoU2V0
PEd0a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2YXRlX2RhdGEtPmNoaWxkcmVu
LmVuZCgpOworICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3Vy
cmVudCA9IHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsr
Y3VycmVudCkKKyAgICAgICAgaWYgKEdUS19XSURHRVRfVklTSUJMRSgqY3VycmVudCkgJiYgIUdU
S19XSURHRVRfTUFQUEVEKCpjdXJyZW50KSkKKyAgICAgICAgICAgIGd0a193aWRnZXRfbWFwKCgq
Y3VycmVudCkpOworCisgICAgZ2RrX3dpbmRvd19zaG93KFdFQktJVF9HVEtfUEFHRSh3aWRnZXQp
LT5iaW5fd2luZG93KTsKKyAgICBnZGtfd2luZG93X3Nob3cod2lkZ2V0LT53aW5kb3cpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc3R5bGVfc2V0KEd0a1dpZGdldCogd2lkZ2V0
LCBHdGtTdHlsZSogb2xkX3N0eWxlKQoreworICAgIGlmIChHVEtfV0lER0VUX0NMQVNTKHdlYmtp
dF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5zdHlsZV9zZXQpCisgICAgICAgIEdUS19XSURHRVRf
Q0xBU1Mod2Via2l0X2d0a19wYWdlX3BhcmVudF9jbGFzcyktPnN0eWxlX3NldCh3aWRnZXQsIG9s
ZF9zdHlsZSk7CisKKyAgICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCh3aWRnZXQpKQorICAgICAg
ICBndGtfc3R5bGVfc2V0X2JhY2tncm91bmQod2lkZ2V0LT5zdHlsZSwgV0VCS0lUX0dUS19QQUdF
KHdpZGdldCktPmJpbl93aW5kb3csIEdUS19TVEFURV9OT1JNQUwpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZ3RrX3BhZ2VfY29udGFpbmVyX2FkZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwg
R3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0R3RrUGFnZSogcGFnZSA9IFdFQktJVF9H
VEtfUEFHRShjb250YWluZXIpOworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwcml2YXRlX2Rh
dGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CiAKLSAgICBnX3NpZ25hbF9j
b25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImV4cG9zZS1ldmVudCIsIEdfQ0FMTEJBQ0sod2Via2l0
X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hhbmRsZV9nZGtfZXZlbnQpLCBwYWdlKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImtleS1wcmVzcy1ldmVudCIsIEdfQ0FM
TEJBQ0sod2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hhbmRsZV9nZGtfZXZlbnQpLCBw
YWdlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImtleS1yZWxlYXNl
LWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxl
X2dka19ldmVudCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3aW4p
LCAiYnV0dG9uLXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVy
aW5nX2FyZWFfaGFuZGxlX2dka19ldmVudCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
R1RLX09CSkVDVCh3aW4pLCAiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBHX0NBTExCQUNLKHdlYmtp
dF9ndGtfcGFnZV9yZW5kZXJpbmdfYXJlYV9oYW5kbGVfZ2RrX2V2ZW50KSwgcGFnZSk7Ci0gICAg
Z19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKHdpbiksICJtb3Rpb24tbm90aWZ5LWV2ZW50Iiwg
R19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxlX2dka19ldmVu
dCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3aW4pLCAic2Nyb2xs
LWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxl
X2dka19ldmVudCksIHBhZ2UpOworICAgIHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uYWRkKHdpZGdl
dCk7CisgICAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQoY29udGFpbmVyKSkKKyAgICAgICAgZ3Rr
X3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQsIHBhZ2UtPmJpbl93aW5kb3cpOworICAg
IGd0a193aWRnZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9jb250YWluZXJfcmVtb3ZlKEd0a0NvbnRh
aW5lciogY29udGFpbmVyLCBHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBXZWJLaXRHdGtQYWdl
UHJpdmF0ZSogcHJpdmF0ZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKFdFQktJ
VF9HVEtfUEFHRShjb250YWluZXIpKTsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmNoaWxkcmVu
LmNvbnRhaW5zKHdpZGdldCkpIHsKKyAgICAgICAgZ3RrX3dpZGdldF91bnBhcmVudCh3aWRnZXQp
OworICAgICAgICBwcml2YXRlX2RhdGEtPmNoaWxkcmVuLnJlbW92ZSh3aWRnZXQpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NvbnRhaW5lcl9mb3JhbGwoR3RrQ29u
dGFpbmVyKiBjb250YWluZXIsIGdib29sZWFuLCBHdGtDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50
ZXIgY2FsbGJhY2tEYXRhKQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwcml2YXRlRGF0
YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0UoY29udGFpbmVy
KSk7CisKKyAgICBIYXNoU2V0PEd0a1dpZGdldCo+IGNoaWxkcmVuID0gcHJpdmF0ZURhdGEtPmNo
aWxkcmVuOworICAgIEhhc2hTZXQ8R3RrV2lkZ2V0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNo
aWxkcmVuLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0
b3IgY3VycmVudCA9IGNoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQp
CisgICAgICAgICgqY2FsbGJhY2spKCpjdXJyZW50LCBjYWxsYmFja0RhdGEpOworfQorCisvKgor
ICogdGFrZSBvd25lcnNoaXAgb2YgdGhlIGFkanVzdG1lbnRzIGFuZCBpZiB3ZSBoYXZlIGEgRnJh
bWVWaWV3IGFscmVhZHkgc2V0IHRoZQorICogYWRqdXN0bWVudHMgYXMgd2VsbC4KKyAqLworc3Rh
dGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3NldF9hZGp1c3RtZW50cyhXZWJLaXRHdGtQYWdlKiBw
YWdlLCBHdGtBZGp1c3RtZW50KiBob3Jpem9udGFsQWRqdXN0bWVudCwgR3RrQWRqdXN0bWVudCog
dmVydGljYWxBZGp1c3RtZW50KQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRl
X2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2Up
KTsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KQorICAgICAg
ICBnX29iamVjdF91bnJlZihwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsKKyAg
ICBpZiAocHJpdmF0ZV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIGdfb2JqZWN0
X3VucmVmKHByaXZhdGVfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKKworICAgIHByaXZhdGVf
ZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQgPSBob3Jpem9udGFsQWRqdXN0bWVudDsKKyAgICBw
cml2YXRlX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCA9IHZlcnRpY2FsQWRqdXN0bWVudDsKKwor
ICAgIGlmIChob3Jpem9udGFsQWRqdXN0bWVudCkKKyAgICAgICAgZ19vYmplY3RfcmVmX3Npbmso
aG9yaXpvbnRhbEFkanVzdG1lbnQpOworICAgIGlmICh2ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAg
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZlcnRpY2FsQWRqdXN0bWVudCk7CisKKyAgICBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UocGFnZSkpOworICAgIGlmIChm
cmFtZS0+dmlldygpKQorICAgICAgICBmcmFtZS0+dmlldygpLT5zZXRHdGtBZGp1c3RtZW50cyho
b3Jpem9udGFsQWRqdXN0bWVudCwgdmVydGljYWxBZGp1c3RtZW50KTsKIH0KIAogc3RhdGljIFdl
YktpdEd0a0ZyYW1lKiB3ZWJraXRfZ3RrX3BhZ2VfcmVhbF9jcmVhdGVfZnJhbWUoV2ViS2l0R3Rr
UGFnZSosIFdlYktpdEd0a0ZyYW1lKiBwYXJlbnQsIFdlYktpdEd0a0ZyYW1lRGF0YSopCkBAIC0x
NjMsOSArMzU5LDE3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9maW5hbGl6ZShHT2IK
IAogICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RLX1BB
R0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKG9iamVjdCkpOwogICAgIC8vZGVsZXRlIHBy
aXZhdGVfZGF0YS0+cGFnZTsgLSB3ZSBkb24ndCBoYXZlIGEgRHJhZ0NsaWVudCB5ZXQsIHNvIGl0
IGlzIGNyYXNoaW5nIGhlcmUKLSAgICBkZWxldGUgcHJpdmF0ZV9kYXRhLT5zZXR0aW5nczsKKwog
ICAgIGdfb2JqZWN0X3VucmVmKHByaXZhdGVfZGF0YS0+bWFpbl9mcmFtZSk7CisgICAgZGVsZXRl
IHByaXZhdGVfZGF0YS0+c2V0dGluZ3M7CiAgICAgZGVsZXRlIHByaXZhdGVfZGF0YS0+dXNlcl9h
Z2VudDsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KQorICAg
ICAgICBnX29iamVjdF91bnJlZihwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsK
KyAgICBpZiAocHJpdmF0ZV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIGdfb2Jq
ZWN0X3VucmVmKHByaXZhdGVfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKKworICAgIEdfT0JK
RUNUX0NMQVNTICh3ZWJraXRfZ3RrX3BhZ2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVj
dCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9jbGFzc19pbml0KFdlYktpdEd0
a1BhZ2VDbGFzcyogcGFnZV9jbGFzcykKQEAgLTE3Niw2ICszODAsMjggQEAgc3RhdGljIHZvaWQg
d2Via2l0X2d0a19wYWdlX2NsYXNzX2luaXQoVwogICAgIC8qCiAgICAgICogc2lnbmFscwogICAg
ICAqLworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MocGFn
ZV9jbGFzcyk7CisgICAgb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9ndGtfcGFnZV9m
aW5hbGl6ZTsKKworICAgIEd0a1dpZGdldENsYXNzKiB3aWRnZXRfY2xhc3MgPSBHVEtfV0lER0VU
X0NMQVNTKHBhZ2VfY2xhc3MpOworICAgIHdpZGdldF9jbGFzcy0+ZXhwb3NlX2V2ZW50ID0gd2Vi
a2l0X2d0a19wYWdlX2V4cG9zZV9ldmVudDsKKyAgICB3aWRnZXRfY2xhc3MtPmtleV9wcmVzc19l
dmVudCA9IHdlYmtpdF9ndGtfcGFnZV9rZXlfZXZlbnQ7CisgICAgd2lkZ2V0X2NsYXNzLT5rZXlf
cmVsZWFzZV9ldmVudCA9IHdlYmtpdF9ndGtfcGFnZV9rZXlfZXZlbnQ7CisgICAgd2lkZ2V0X2Ns
YXNzLT5idXR0b25fcHJlc3NfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2VfYnV0dG9uX2V2ZW50Owor
ICAgIHdpZGdldF9jbGFzcy0+YnV0dG9uX3JlbGVhc2VfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2Vf
YnV0dG9uX2V2ZW50OworICAgIHdpZGdldF9jbGFzcy0+bW90aW9uX25vdGlmeV9ldmVudCA9IHdl
YmtpdF9ndGtfcGFnZV9tb3Rpb25fZXZlbnQ7CisgICAgd2lkZ2V0X2NsYXNzLT5zY3JvbGxfZXZl
bnQgPSB3ZWJraXRfZ3RrX3BhZ2Vfc2Nyb2xsX2V2ZW50OworICAgIHdpZGdldF9jbGFzcy0+cmVh
bGl6ZSA9IHdlYmtpdF9ndGtfcGFnZV9yZWFsaXplOworICAgIHdpZGdldF9jbGFzcy0+dW5yZWFs
aXplID0gd2Via2l0X2d0a19wYWdlX3VucmVhbGl6ZTsKKyAgICB3aWRnZXRfY2xhc3MtPnNpemVf
YWxsb2NhdGUgPSB3ZWJraXRfZ3RrX3BhZ2Vfc2l6ZV9hbGxvY2F0ZTsKKyAgICB3aWRnZXRfY2xh
c3MtPnN0eWxlX3NldCA9IHdlYmtpdF9ndGtfcGFnZV9zdHlsZV9zZXQ7CisgICAgd2lkZ2V0X2Ns
YXNzLT5tYXAgPSB3ZWJraXRfZ3RrX3BhZ2VfbWFwOworCisgICAgR3RrQ29udGFpbmVyQ2xhc3Mq
IGNvbnRhaW5lcl9jbGFzcyA9IEdUS19DT05UQUlORVJfQ0xBU1MocGFnZV9jbGFzcyk7CisgICAg
Y29udGFpbmVyX2NsYXNzLT5hZGQgPSB3ZWJraXRfZ3RrX3BhZ2VfY29udGFpbmVyX2FkZDsKKyAg
ICBjb250YWluZXJfY2xhc3MtPnJlbW92ZSA9IHdlYmtpdF9ndGtfcGFnZV9jb250YWluZXJfcmVt
b3ZlOworICAgIGNvbnRhaW5lcl9jbGFzcy0+Zm9yYWxsID0gd2Via2l0X2d0a19wYWdlX2NvbnRh
aW5lcl9mb3JhbGw7CisKICAgICAvKioKICAgICAgKiBXZWJLaXRHdGtQYWdlOjpsb2FkLXN0YXJ0
ZWQKICAgICAgKiBAcGFnZTogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0
ZWQKQEAgLTI2Nyw2ICs0OTMsMTkgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NsYXNz
X2luaXQoVwogICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCiAgICAg
ICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CiAKKyAgICAvKgorICAgICAqIG1ha2UgdXMgc2Nyb2xs
YWJsZSAoZS5nLiBhZGRhYmxlIHRvIGEgR3RrU2Nyb2xsZWRXaW5kb3cpCisgICAgICovCisgICAg
cGFnZV9jbGFzcy0+c2V0X3Njcm9sbF9hZGp1c3RtZW50cyA9IHdlYmtpdF9ndGtfcGFnZV9zZXRf
YWRqdXN0bWVudHM7CisgICAgR1RLX1dJREdFVF9DTEFTUyhwYWdlX2NsYXNzKS0+c2V0X3Njcm9s
bF9hZGp1c3RtZW50c19zaWduYWwgPSBnX3NpZ25hbF9uZXcoInNldF9zY3JvbGxfYWRqdXN0bWVu
dHMiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZV9jbGFzcyksCisgICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiks
CisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0R3RrUGFnZUNsYXNzLCBzZXRfc2Ny
b2xsX2FkanVzdG1lbnRzKSwKKyAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICB3
ZWJraXRfZ3RrX21hcnNoYWxfVk9JRF9fT0JKRUNUX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQ
RV9OT05FLCAyLAorICAgICAgICAgICAgR1RLX1RZUEVfQURKVVNUTUVOVCwgR1RLX1RZUEVfQURK
VVNUTUVOVCk7CisKIAogICAgIC8qCiAgICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwg
bWV0aG9kcwpAQCAtMjc5LDIxICs1MTgsMzMgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdl
X2NsYXNzX2luaXQoVwogICAgIHBhZ2VfY2xhc3MtPmphdmFfc2NyaXB0X2NvbmZpcm0gPSB3ZWJr
aXRfZ3RrX3BhZ2VfcmVhbF9qYXZhX3NjcmlwdF9jb25maXJtOwogICAgIHBhZ2VfY2xhc3MtPmph
dmFfc2NyaXB0X3Byb21wdCA9IHdlYmtpdF9ndGtfcGFnZV9yZWFsX2phdmFfc2NyaXB0X3Byb21w
dDsKICAgICBwYWdlX2NsYXNzLT5qYXZhX3NjcmlwdF9jb25zb2xlX21lc3NhZ2UgPSB3ZWJraXRf
Z3RrX3BhZ2VfcmVhbF9qYXZhX3NjcmlwdF9jb25zb2xlX21lc3NhZ2U7Ci0gICAgR19PQkpFQ1Rf
Q0xBU1MocGFnZV9jbGFzcyktPmZpbmFsaXplID0gd2Via2l0X2d0a19wYWdlX2ZpbmFsaXplOwog
fQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfaW5pdChXZWJLaXRHdGtQYWdlKiBwYWdl
KQogewotICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RL
X1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2UpKTsKLSAgICBwcml2YXRlX2Rh
dGEtPnBhZ2UgPSBuZXcgUGFnZShuZXcgQ2hyb21lQ2xpZW50R2RrKHBhZ2UpLCBuZXcgQ29udGV4
dE1lbnVDbGllbnRHZGssIG5ldyBFZGl0b3JDbGllbnRHZGsocGFnZSksIDAsIG5ldyBJbnNwZWN0
b3JDbGllbnRHZGspOwotCi0KICAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyhwYWdlLCBHVEtfQ0FO
X0ZPQ1VTKTsKKyAgICBwYWdlLT5iaW5fd2luZG93ID0gMDsKIAotICAgIGdfc2lnbmFsX2Nvbm5l
Y3RfYWZ0ZXIoR19PQkpFQ1QocGFnZSksICJyZWFsaXplIiwgR19DQUxMQkFDSyh3ZWJraXRfZ3Rr
X3BhZ2VfcmVnaXN0ZXJfcmVuZGVyaW5nX2FyZWFfZXZlbnRzKSwgcGFnZSk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdF9hZnRlcihHX09CSkVDVChwYWdlKSwgInNpemUtYWxsb2NhdGUiLCBHX0NBTExC
QUNLKHdlYmtpdF9ndGtfcGFnZV9yZW5kZXJpbmdfYXJlYV9yZXNpemVfY2FsbGJhY2spLCBwYWdl
KTsKLQorICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RL
X1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2UpKTsKKyAgICBwcml2YXRlX2Rh
dGEtPnBhZ2UgPSBuZXcgUGFnZShuZXcgQ2hyb21lQ2xpZW50R2RrKHBhZ2UpLCBuZXcgQ29udGV4
dE1lbnVDbGllbnRHZGssIG5ldyBFZGl0b3JDbGllbnRHZGsocGFnZSksIDAsIG5ldyBJbnNwZWN0
b3JDbGllbnRHZGspOwogICAgIHByaXZhdGVfZGF0YS0+bWFpbl9mcmFtZSA9IFdFQktJVF9HVEtf
RlJBTUUod2Via2l0X2d0a19mcmFtZV9uZXcocGFnZSkpOworCisgICAgLyoKKyAgICAgKiBUT0RP
OiBtb3ZlIHRoYXQgb3ZlciB0byB1c2Ugd2Via2l0Z3Rrc2V0dGluZ3MgCisgICAgICovCisgICAg
U2V0dGluZ3MqIHNldHRpbmdzID0gcHJpdmF0ZV9kYXRhLT5wYWdlLT5zZXR0aW5ncygpOworICAg
IHNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7CisgICAgc2V0dGlu
Z3MtPnNldE1pbmltdW1Gb250U2l6ZSg1KTsKKyAgICBzZXR0aW5ncy0+c2V0TWluaW11bUxvZ2lj
YWxGb250U2l6ZSg1KTsKKyAgICBzZXR0aW5ncy0+c2V0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcyh0
cnVlKTsKKyAgICBzZXR0aW5ncy0+c2V0SmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7CisgICAgCisg
ICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+
c2V0RGVmYXVsdEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5
KCJUaW1lcyBOZXcgUm9tYW4iKTsKKyAgICBzZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZhbWls
eSgiQXJpYWwiKTsKKyAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVyIik7
CisgICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgiQXJpYWwiKTsKIH0KIAogR3Rr
V2lkZ2V0KiB3ZWJraXRfZ3RrX3BhZ2VfbmV3KHZvaWQpCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtwYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFn
ZS5oCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNjEsMTEgKzYxLDEzIEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRH
dGtQYWdlQ2xhc3MgV2ViS2kKICAqIHRoZSAgc2l6ZSBvZiB0aGUgdmlld3BvcnQgYW5kIHdlIHdv
bid0IGJlIGFibGUgdG8gdXNlIGdka193aW5kb3dfbW92ZS4KICAqLwogc3RydWN0IF9XZWJLaXRH
dGtQYWdlIHsKLSAgICBHdGtMYXlvdXQgcGFyZW50OworICAgIEd0a0NvbnRhaW5lciBwYXJlbnQ7
CisKKyAgICBHZGtXaW5kb3cgKmJpbl93aW5kb3c7CiB9OwogCiBzdHJ1Y3QgX1dlYktpdEd0a1Bh
Z2VDbGFzcyB7Ci0gICAgR3RrTGF5b3V0Q2xhc3MgcGFyZW50OworICAgIEd0a0NvbnRhaW5lckNs
YXNzIHBhcmVudDsKIAogICAgIC8qCiAgICAgICogZGVmYXVsdCBoYW5kbGVyL3ZpcnR1YWwgbWV0
aG9kcwpAQCAtODksNiArOTEsMTEgQEAgc3RydWN0IF9XZWJLaXRHdGtQYWdlQ2xhc3MgewogICAg
IGdib29sZWFuICAgKCpqYXZhX3NjcmlwdF9jb25maXJtKSAoV2ViS2l0R3RrUGFnZSogcGFnZSwg
V2ViS2l0R3RrRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogY29uZmlybV9tZXNzYWdlKTsKICAg
ICBnY2hhciogKCpqYXZhX3NjcmlwdF9wcm9tcHQpIChXZWJLaXRHdGtQYWdlKiBwYWdlLCBXZWJL
aXRHdGtGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBjb25zdCBnY2hhciogZGVm
YXVsdF92YWx1ZSk7CiAgICAgdm9pZCAgICgqamF2YV9zY3JpcHRfY29uc29sZV9tZXNzYWdlKSAo
V2ViS2l0R3RrUGFnZSosIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZV9u
dW1iZXIsIGNvbnN0IGdjaGFyKiBzb3VyY2VfaWQpOworCisgICAgLyoKKyAgICAgKiBpbnRlcm5h
bAorICAgICAqLworICAgIHZvaWQgICAoKnNldF9zY3JvbGxfYWRqdXN0bWVudHMpIChXZWJLaXRH
dGtQYWdlKiwgR3RrQWRqdXN0bWVudCosIEd0a0FkanVzdG1lbnQqKTsKIH07CiAKIFdFQktJVF9H
VEtfQVBJIEdUeXBlCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmNwcAkocmV2aXNp
b24gMjQ3ODEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNCArODAsMTQgQEAgV2ViS2l0R3RrUGFnZSoga2l0KFdlYkNvcmU6OlBh
Z2UqIHBhZ2UpCiAgICAgQ2hyb21lQ2xpZW50R2RrKiBjbGllbnQgPSBzdGF0aWNfY2FzdDxDaHJv
bWVDbGllbnRHZGsqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpOwogICAgIHJldHVybiBjbGll
bnQtPndlYlBhZ2UoKTsKIH0KKworLyoKKyAqIE1ha2UgdGhlIEZyYW1lVmlldyB1c2UgdGhlIEd0
a0FkanVzdG1lbnRzIG9mIHRoZSBXZWJLaXRHdGtQYWdlIHRvIGNvbmZvcm0KKyAqIHRvIHRoZSAn
c2Nyb2xsYWJsZSBwcm90b2NvbCcgb2YgR3RrKy4KKyAqLwordm9pZCBhcHBseUFkanVzdG1lbnRz
KFdlYktpdEd0a1BhZ2UqIHBhZ2UsIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldykKK3sKKyAgICBX
ZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZB
VEUocGFnZSk7CisgICAgdmlldy0+c2V0R3RrQWRqdXN0bWVudHMocGFnZURhdGEtPmhvcml6b250
YWxBZGp1c3RtZW50LCBwYWdlRGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKK30KIH0KSW5kZXg6
IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Z3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViS2l0L2d0
ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw4IEBA
CiAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJG
cmFtZUdkay5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKIAogbmFtZXNwYWNlIFdlYktpdEd0ayB7
CkBAIC01Nyw2ICs1OCw4IEBAIG5hbWVzcGFjZSBXZWJLaXRHdGsgewogICAgIFdlYktpdEd0a0Zy
YW1lKiBraXQoV2ViQ29yZTo6RnJhbWUqKTsKICAgICBXZWJDb3JlOjpQYWdlKiBjb3JlKFdlYktp
dEd0a1BhZ2UqKTsKICAgICBXZWJLaXRHdGtQYWdlKiBraXQoV2ViQ29yZTo6UGFnZSopOworCisg
ICAgdm9pZCBhcHBseUFkanVzdG1lbnRzKFdlYktpdEd0a1BhZ2UqLCBXZWJDb3JlOjpGcmFtZVZp
ZXcqKTsKIH0KIAogZXh0ZXJuICJDIiB7CkBAIC02OSwxMiArNzIsMjAgQEAgZXh0ZXJuICJDIiB7
CiAgICAgICAgIFdlYktpdEd0a0ZyYW1lKiBtYWluX2ZyYW1lOwogICAgICAgICBXZWJDb3JlOjpT
dHJpbmcgYXBwbGljYXRpb25fbmFtZV9mb3JfdXNlcl9hZ2VudDsKICAgICAgICAgV2ViQ29yZTo6
U3RyaW5nKiB1c2VyX2FnZW50OworCisgICAgICAgIC8qCisgICAgICAgICAqIGUuZy4gc2V0IGJ5
IGEgR3RrU2Nyb2xsZWRXaW5kb3cgYW5kIHVzZWQgYnkgdGhlIEZyYW1lVmlldyBvZiBvdXIgbWFp
bl9mcmFtZQorICAgICAgICAgKi8KKyAgICAgICAgR3RrQWRqdXN0bWVudCogaG9yaXpvbnRhbEFk
anVzdG1lbnQ7CisgICAgICAgIEd0a0FkanVzdG1lbnQqIHZlcnRpY2FsQWRqdXN0bWVudDsKKwor
ICAgICAgICBIYXNoU2V0PEd0a1dpZGdldCo+IGNoaWxkcmVuOwogICAgIH07CiAgICAgCiAgICAg
I2RlZmluZSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX0dUS19UWVBFX0ZSQU1FLCBXZWJLaXRHdGtG
cmFtZVByaXZhdGUpKQogICAgIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRHdGtGcmFtZVByaXZhdGUg
V2ViS2l0R3RrRnJhbWVQcml2YXRlOwogICAgIHN0cnVjdCBfV2ViS2l0R3RrRnJhbWVQcml2YXRl
IHsKLSAgICAgICAgV2ViQ29yZTo6RnJhbWVHZGsqIGZyYW1lOworICAgICAgICBXZWJDb3JlOjpG
cmFtZSogZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50R2RrKiBjbGll
bnQ7CiAgICAgICAgIFdlYktpdEd0a1BhZ2UqIHBhZ2U7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15756</attachid>
            <date>2007-07-31 07:19:48 -0700</date>
            <delta_ts>2007-08-01 10:47:19 -0700</delta_ts>
            <desc>Implement ScrollView similiar to win/qt</desc>
            <filename>gtk-scrollview-r1.patch</filename>
            <type>text/plain</type>
            <size>112275</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDc5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQ5IEBACisyMDA3LTA3LTMxICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAg
PHplY2tlQHNlbGZpc2gub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisg
ICAgICAgIEtpbGwgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSB3
YXMgbW92ZWQgdG8KKyAgICAgICAgV2ViS2l0R3RrUGFnZSwgSW1hZ2VHZGsgYW5kIHRoZSBuZWVk
ZWQgc3R1YnMgZm9yIEZyYW1lIHdoZXJlIGludHJvZHVjZWQKKyAgICAgICAgaW4gcGFnZS9nZGsv
RnJhbWVHZGsuIE9uIHRoaXMgd2F5IGNoYW5nZWQgdGhlIGNvbnN0cnVjdG9ycyBvZiB0aGUgdmFy
aW91cworICAgICAgICBQbGF0Zm9ybSpFdmVudCBtZXRob2RzIHRvIHVzZSB0aGUgc3BlY2lhbGlz
ZWQgdHlwZSBpbnN0ZWFkIG9mIHRoZSBHZGtFdmVudCB1bmlvbi4KKyAgICAgICAgVGhpcyBpcyBu
ZWVkZWQgZHVlIHRoZSBjaGFuZ2VzIGluIFdlYktpdEd0a1BhZ2UgYW5kIHRoZSByZWltcGxlbWVu
dGF0aW9uIG9mIHRoZQorICAgICAgICB2YXJpb3VzIGV2ZW50IGhvb2tzLgorCisgICAgICAgIENy
ZWF0ZSB0aGUgRnJhbWVWaWV3IGZyb20gd2l0aGluIG1ha2VEb2N1bWVudFZpZXcgYW5kIGFzIGRv
Y3VtZW50ZWQgaXQgZG9lc24ndAorICAgICAgICBob25vciB0aGUgbWFyZ2lucyBhcyBXZWJWaWV3
IGlzIGRvaW5nLiBUaGlzIHJlbWFpbnMgdG8gYmUgZG9uZS4KKworICAgICAgICBVc2UgdGhlIFNj
cm9sbFZpZXcvV2lkZ2V0IGRlc2lnbiBvZiB0aGUgV2luZG93cyBwb3J0IGFuZCBhZG9wdCBpdCB0
byBHdGsrLiBPbiB0aGUKKyAgICAgICAgd2F5IHRvIHRoaXMgaW1wbGVtZW50IFBsYXRmb3JtU2Ny
b2xsYmFyIHByb3Blcmx5LgorICAgICAgICBUaGUgb25seSB0d28gZGlmZmVyZW5jZXMgdG8gdGhl
IFdpbmRvd3MgcG9ydCBpcyB0aGF0IFBsYXRmb3JtU2Nyb2xsYmFyIGlzCisgICAgICAgIGEgR3Rr
V2lkZ2V0IChzdGlsbCBzaGFyaW5nIHRoZSBzYW1lIGdsb2JhbCB3aW5kb3cpIHdoaWNoIG5lZWRz
IHNwZWNpYWwgdHJlYXRtZW50IHdoZW4KKyAgICAgICAgcGxhY2luZyB0aGUgc2Nyb2xsYmFyIChl
LmcuIGRvbid0IG1vdmUgdGhlIHNjcm9sbGJhciBvZiBhIEZyYW1lVmlldyB3aGVuIHRoZSBGcmFt
ZVZpZXcKKyAgICAgICAgc2Nyb2xscykuIFRoZSBvdGhlciBkaWZmZXJlbmNlIGlzIGR1ZSB0aGUg
J3Njcm9sbGFibGUgcHJvdG9jb2wnIG9mIEd0aysgd2hlcmUgd2Ugd2lsbAorICAgICAgICBnZXQg
dHdvIEd0a0FkanVzdG1lbnQgc2V0LiBJZiB3ZSBoYXZlIHRoZW0gc2V0IGluIFNjcm9sbFZpZXcg
ZG9uJ3QgY3JlYXRlIGEgUGxhdGZvcm1TY3JvbGxiYXIKKyAgICAgICAgYnV0IHVwZGF0ZSB0aGUg
R3RrQWp1c3RtZW50LgorCisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogbG9hZGVy
L2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEdkazo6bWFrZURvY3VtZW50Vmlldyk6CisgICAgICAgICogbG9hZGVyL2dkay9G
cmFtZUxvYWRlckNsaWVudEdkay5oOgorICAgICAgICAqIHBhZ2UvZ2RrL0ZyYW1lR2RrLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aXNzdWVUcmFuc3Bvc2VDb21tYW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjbGVhbnVwUGxhdGZvcm1TY3JpcHRPYmplY3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpzZXROZWVkc1JlYXBwbHlTdHlsZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtTW91
c2VFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dkay9GcmFtZUdkay5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dkay9LZXlFdmVudEdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL01v
dXNlRXZlbnRHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50OjpQ
bGF0Zm9ybU1vdXNlRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcmVl
bkdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aCk6CisgICAgICAgICogcGxh
dGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1Bs
YXRmb3JtU2Nyb2xsQmFyR2RrLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0
Zm9ybVNjcm9sbGJhcik6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Ny
b2xsYmFyKToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBvc2l0aW9u
KToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlByb3BvcnRpb24pOgor
ICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OnNldFJlY3QpOgorICAgICAgICAoUGxhdGZvcm1T
Y3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1JlbmRl
clRoZW1lR2RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludENo
ZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludFJhZGlvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludEJ1dHRvbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OlNjcm9sbFZpZXdQcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjp+U2Nyb2xsVmlld1ByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNl
dEhhc0hvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OmFkanVz
dG1lbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQ
cml2YXRlOjp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Ny
b2xsVmlld1ByaXZhdGU6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OlNjcm9sbFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0R3Rr
QWRqdXN0bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnJl
c2l6ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNvbnRlbnRzWCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpjb250ZW50c1kpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6Om1heGltdW1TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Ny
b2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c3VwcHJlc3NTY3JvbGxiYXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldEhTY3JvbGxiYXJNb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFZTY3JvbGxiYXJNb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbGJhcnNNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OnNldEZyYW1lR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cmVtb3Zl
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3
UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndpbmRvd1RvQ29udGVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OmNvbnZlcnRDaGlsZFRvU2VsZik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
Ojpjb252ZXJ0U2VsZlRvQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3Ojp3aW5kb3dSZXNpemVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3OjpyZXNpemVyT3ZlcmxhcHNDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OmFkanVzdE92ZXJsYXBwaW5nU2Nyb2xsYmFyQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmFk
ZFRvRGlydHlSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVwZGF0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0UHJpdmF0
ZTo6Z2RrRHJhd2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpXaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2lkZ2V0OjppbnRlcm5hbEd0a1dpZGdldCk6CisgICAgICAgIChXZWJD
b3JlOjpXaWRnZXQ6OnNldEludGVybmFsR3RrV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZGdldDo6c2V0Q29udGFpbmluZ1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmNv
bnRhaW5pbmdXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpmcmFtZUdlb21ldHJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0RnJhbWVHZW9tZXRyeSk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6
OnBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEZvY3VzKToKKyAgICAgICAg
KFdlYkNvcmU6OldpZGdldDo6c2V0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmhpZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjppbnZhbGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldpZGdldDo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0Ojpjb252ZXJ0VG9Db250YWluaW5nV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dDo6Y29udmVydENoaWxkVG9TZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6Y29udmVy
dFNlbGZUb0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c3VwcHJlc3NJbnZhbGlk
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRTdXBwcmVzc0ludmFsaWRhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNldFNjcm9sbFZpZXdDb250cm9sKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEdka0V4cG9zZUV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2RrRXhwb3NlRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZGtEcmF3YWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZVBvaW50KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwOgorICAgICAgICAobG9hZFJlc291
cmNlSW50b0FycmF5KToKKwogMjAwNy0wNy0zMCAgSnVzdGluIEdhcmNpYSAgPGp1c3Rpbi5nYXJj
aWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lv
biAyNDc4MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTg0Niw2
ICs4NDYsNyBAQCBnZGstcG9ydCB7CiAgICAgICAgIHBsYXRmb3JtL1RleHRDb2RlY0lDVS5jcHAg
XAogICAgICAgICBwbGF0Zm9ybS9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgXAogICAgICAgICBw
YWdlL2dkay9FdmVudEhhbmRsZXJHZGsuY3BwIFwKKyAgICAgICAgcGFnZS9nZGsvRnJhbWVHZGsu
Y3BwIFwKICAgICAgICAgcGFnZS9nZGsvQ29udGV4dE1lbnVDbGllbnRHZGsuY3BwIFwKICAgICAg
ICAgcGFnZS9nZGsvRHJhZ0NvbnRyb2xsZXJHZGsuY3BwIFwKICAgICAgICAgcGFnZS9nZGsvSW5z
cGVjdG9yQ2xpZW50R2RrLmNwcCBcCkBAIC04NjAsNyArODYxLDYgQEAgZ2RrLXBvcnQgewogICAg
ICAgICBwbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2Rr
L0ZvbnRHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsu
Y3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcCBcCiAgICAgICAgIHBsYXRm
b3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9nZGsv
S2V5RXZlbnRHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2RrL0xvZ2dpbmdHZGsuY3BwIFwK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmNwcAkocmV2
aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVMb2FkZXJDbGllbnRHZGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpA
QCAtMjYwLDcgKzI2MCwyOSBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpzaG91bGRHb1Rv
SGlzCiB9CiAKIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEdkazo6bWFrZURvY3VtZW50VmlldygpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjptYWtlRG9jdW1lbnRWaWV3KCkgeworICAg
IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IGNvcmUobV9mcmFtZSk7CisgICAgaWYgKGZyYW1lKQor
ICAgICAgICBmcmFtZS0+c2V0VmlldygwKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
bmV3IEZyYW1lVmlldyhmcmFtZSk7CisgICAgZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsKKyAg
ICBmcmFtZVZpZXctPmRlcmVmKCk7CisgICAgCisgICAgLyoKKyAgICAgKiBzZXQgdGhlIFdlYktp
dEd0a1BhZ2UgKENvbnRhaW5pbmcgV2luZG93KSBhbmQgbWFrZSBzdXJlIHRvIGdpdmUgaXQgYSBz
YW5lIGRlZmF1bHQgZnJhbWUgZ2VvbWV0cnkuCisgICAgICovCisgICAgV2ViS2l0R3RrUGFnZSog
cGFnZSA9IGdldFBhZ2VGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgZnJhbWVWaWV3LT5zZXRDb250
YWluaW5nV2luZG93KHBhZ2UpOworICAgIGZyYW1lVmlldy0+c2V0RnJhbWVHZW9tZXRyeShJbnRS
ZWN0KDAsIDAsIEdUS19XSURHRVQocGFnZSktPmFsbG9jYXRpb24ud2lkdGgsIEdUS19XSURHRVQo
cGFnZSktPmFsbG9jYXRpb24uaGVpZ2h0KSk7CisgICAgV2ViS2l0R3RrOjphcHBseUFkanVzdG1l
bnRzKHBhZ2UsIGZyYW1lVmlldyk7CisKKyAgICAvKgorICAgICAqIFRPRE86IFVzZSBtYXJnaW5z
IGxpa2UgV2ViVmlldz8KKyAgICAgKi8KK30KKwogdm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6
bWFrZVJlcHJlc2VudGF0aW9uKERvY3VtZW50TG9hZGVyKikgeyBub3RJbXBsZW1lbnRlZCgpOyB9
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpmb3JjZUxheW91dCgpIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQogdm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6Zm9yY2VMYXlvdXRGb3JOb25IVE1M
KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVM
b2FkZXJDbGllbnRHZGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVM
b2FkZXJDbGllbnRHZGsuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL2xvYWRlci9nZGsv
RnJhbWVMb2FkZXJDbGllbnRHZGsuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsNiBAQAog
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEd0a0ZyYW1lIFdlYktpdEd0a0ZyYW1lOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBGcmFtZUdkazsKLQogICAgIGNsYXNzIEZyYW1lTG9h
ZGVyQ2xpZW50R2RrIDogcHVibGljIEZyYW1lTG9hZGVyQ2xpZW50IHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50R2RrKFdlYktpdEd0a0ZyYW1lKik7CkluZGV4OiBXZWJD
b3JlL3BhZ2UvZ2RrL0ZyYW1lR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvZ2Rr
L0ZyYW1lR2RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9nZGsvRnJhbWVHZGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIEZyYW1lOjppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisgICAgCit2b2lkIEZyYW1lOjpjbGVhbnVwUGxhdGZv
cm1TY3JpcHRPYmplY3RzKCkKK3sgICAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfSAgIAorICAg
IAorRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24oKQoreyAgICAgICAK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEZyYW1lOjpk
YXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBGcmFtZTo6c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BhZ2UvZ2RrL0ZyYW1l
R2RrLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgJKHJldmlzaW9uIDI0Nzgx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCB0eXBlZGVmIGxvbmcgTFBBUkFNOwogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShHREspCi10eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKK3R5cGVk
ZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oUVQpCkBAIC04MCw3ICs4MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oR0RLKQotICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnQq
KTsKKyAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5Kik7CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFFUKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNl
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVu
dC5oCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgdHlwZWRlZiBsb25nIExQQVJB
TTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQg
R2RrRXZlbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRCdXR0b24gR2RrRXZlbnRCdXR0b247
Cit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRNb3Rpb24gR2RrRXZlbnRNb3Rpb247CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFFUKQpAQCAtMTE4LDcgKzExOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgYm9vbCBhY3RpdmF0ZWRXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9hY3Rp
dmF0ZWRXZWJWaWV3OyB9CiAjZW5kaWYKICNpZiBQTEFURk9STShHREspIAotICAgICAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnQqKTsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KEdk
a0V2ZW50QnV0dG9uKik7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudE1vdGlv
biopOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVu
dChRTW91c2VFdmVudCosIGludCBjbGlja0NvdW50KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1XaGVlbEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybVdoZWVsRXZlbnQuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtV2hlZWxFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHR5cGVk
ZWYgbG9uZyBMUEFSQU07CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYgdW5p
b24gX0dka0V2ZW50IEdka0V2ZW50OwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50U2Nyb2xsIEdk
a0V2ZW50U2Nyb2xsOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKQEAgLTg1LDcgKzg1LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCwg
V1BBUkFNLCBMUEFSQU0sIGJvb2wgaXNIb3Jpem9udGFsKTsKICNlbmRpZgogI2lmIFBMQVRGT1JN
KEdESykKLSAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50Kik7CisgICAgICAgIFBs
YXRmb3JtV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCopOwogI2VuZGlmCiAjaWYgUExBVEZPUk0o
UVQpCiAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudChRV2hlZWxFdmVudCopOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogCiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiBzdHJ1Y3QgX0d0a0xheW91
dCBHdGtMYXlvdXQ7Cit0eXBlZGVmIHN0cnVjdCBfR3RrQWRqdXN0bWVudCBHdGtBZGp1c3RtZW50
OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC0xNTEsMTMgKzE1MSwyNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAjaWYgUExBVEZPUk0oR0RLKQogICAgICAgICBTY3JvbGxWaWV3KCk7
CiAgICAgICAgIH5TY3JvbGxWaWV3KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRHdGtBZGp1
c3RtZW50cyhHdGtBZGp1c3RtZW50KiBoYWRqLCBHdGtBZGp1c3RtZW50KiB2YWRqKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgdmlydHVh
bCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0R3RrV2lkZ2V0KEd0a0xheW91dCogbGF5b3V0KTsKKyAgICAgICAg
dmlydHVhbCBJbnRQb2ludCBjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiwgY29uc3Qg
SW50UG9pbnQmKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0U2VsZlRv
Q2hpbGQoY29uc3QgV2lkZ2V0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUdlb21ldHJ5KGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICAgICAgSW50UmVj
dCB3aW5kb3dSZXNpemVyUmVjdCgpOworICAgICAgICBib29sIHJlc2l6ZXJPdmVybGFwc0NvbnRl
bnQoKSBjb25zdDsKKyAgICAgICAgdm9pZCBhZGp1c3RPdmVybGFwcGluZ1Njcm9sbGJhckNvdW50
KGludCBvdmVybGFwRGVsdGEpOworCisgICAgICAgIHZvaWQgYWRkVG9EaXJ0eVJlZ2lvbihjb25z
dCBJbnRSZWN0Jik7CisgICAgICAgIHZvaWQgc2Nyb2xsQmFja2luZ1N0b3JlKGludCBkeCwgaW50
IGR5LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QpOworICAgICAgICB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHZvaWQgdXBkYXRlVmlldyhjb25zdCBJbnRSZWN0JiwgYm9vbCBub3cgPSBmYWxzZSk7
Ci0gICAgICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOworICAgICAgICBJbnRTaXplIG1heGlt
dW1TY3JvbGwoKSBjb25zdDsKKyAgICAgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IElu
dFNpemUmIGRlc2lyZWRPZmZzZXQpOwogICAgICAgICBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0ZTsK
ICAgICAgICAgU2Nyb2xsVmlld1ByaXZhdGUqIG1fZGF0YTsKICNlbmRpZgpAQCAtMTg4LDYgKzIw
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXIgKnZl
cnRpY2FsU2Nyb2xsQmFyKCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgorICAgICAgICBIYXNoU2V0
PFdpZGdldCo+KiBjaGlsZHJlbigpOwogICAgICAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoY29u
c3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCk7CiAgICAgICAgIEludFNpemUgbWF4aW11bVNjcm9s
bCgpIGNvbnN0OwogICAgICAgICBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0ZTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9XaWRn
ZXQuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4IEBAIHR5cGVkZWYgc3RydWN0IEhXTkRfXyogSFdORDsK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiBzdHJ1Y3QgX0dka0RyYXdhYmxl
IEdka0RyYXdhYmxlOwogdHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtXaWRnZXQ7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0R3RrUGFnZSBXZWJLaXRHdGtQYWdlOwogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShRVCkKQEAgLTEzNiwxMCArMTM2LDI4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQotICAgICAgICBXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRHdGtXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0gICAgICAgIEdk
a0RyYXdhYmxlKiBnZGtEcmF3YWJsZSgpIGNvbnN0OwotICAgICAgICBHdGtXaWRnZXQqIGd0a1dp
ZGdldCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SW50ZXJuYWxHdGtXaWRnZXQo
R3RrV2lkZ2V0Kik7CisgICAgICAgIEd0a1dpZGdldCogaW50ZXJuYWxHdGtXaWRnZXQoKSBjb25z
dDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKKyAgICAg
ICAgU2Nyb2xsVmlldyogcGFyZW50KCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRDb250YWlu
aW5nV2luZG93KFdlYktpdEd0a1BhZ2UqKTsKKyAgICAgICAgV2ViS2l0R3RrUGFnZSogY29udGFp
bmluZ1dpbmRvdygpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5n
ZWQoKSBjb25zdDsKKworICAgICAgICBJbnRSZWN0IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3co
Y29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgICAgICBJbnRQb2ludCBjb252ZXJ0VG9Db250YWlu
aW5nV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgICAgIEludFBvaW50IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCisgICAgICAg
IHZpcnR1YWwgSW50UG9pbnQgY29udmVydENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCosIGNvbnN0
IEludFBvaW50JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFNlbGZU
b0NoaWxkKGNvbnN0IFdpZGdldCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CisKKyAgICAgICAg
Ym9vbCBzdXBwcmVzc0ludmFsaWRhdGlvbigpIGNvbnN0OworICAgICAgICB2b2lkIHNldFN1cHBy
ZXNzSW52YWxpZGF0aW9uKGJvb2wpOworCisgICAgICAgIHZvaWQgc2V0U2Nyb2xsVmlld0NvbnRy
b2woKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9GcmFtZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJh
bWVHZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1l
R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
RnJhbWVHZGsuaCIKLQotI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEdk
ay5oIgotI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0Lmgi
Ci0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRl
ICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVB
c1RleHQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNl
UmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAi
U2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCi0jaW5jbHVkZSAid2Via2l0
Z3RrZnJhbWUuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0KLS8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0Ci0vLyBUaGlz
IGRvZXMgbm90IGJlbG9uZyBoZXJlIGFuZCBJJ20gbm90IHN1cmUgd2hlcmUKLS8vIGl0IHNob3Vs
ZCBnbwotLy8gSSBkb24ndCBrbm93IHdoYXQgdGhlIHBsYW5zIG9yIGRlc2lnbiBpcwotLy8gZm9y
IG5vbmUgY29kZSByZXNvdXJjZXMKLVZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXko
Y29uc3QgY2hhciogcmVzb3VyY2VOYW1lKQotewotICAgIFZlY3RvcjxjaGFyPiByZXNvdXJjZTsK
LSAgICAvL2lmIChzdHJjbXAocmVzb3VyY2VOYW1lLCJtaXNzaW5nSW1hZ2UiKSA9PSAwKSB7Ci0g
ICAgLy99Ci0gICAgcmV0dXJuIHJlc291cmNlOwotfQotCi1zdHJ1Y3QgRnJhbWVHZGtFeHBvc2VE
YXRhIHsKLSAgICBHdGtDb250YWluZXIgKmNvbnRhaW5lcjsKLSAgICBHZGtFdmVudEV4cG9zZSAq
ZXhwb3NlOwotfTsKLQotc3RhdGljIHZvaWQgZnJhbWVfZ2RrX2V4cG9zZV9jaGlsZChHdGtXaWRn
ZXQgKndpZGdldCwgZ3BvaW50ZXIgX2RhdGEpCi17Ci0gICAgRnJhbWVHZGtFeHBvc2VEYXRhKiBk
YXRhID0gKEZyYW1lR2RrRXhwb3NlRGF0YSopX2RhdGE7Ci0gICAgaW50IHdpZHRoLCBoZWlnaHQ7
Ci0gICAgZ3RrX2NvbnRhaW5lcl9wcm9wYWdhdGVfZXhwb3NlKGRhdGEtPmNvbnRhaW5lciwgd2lk
Z2V0LCBkYXRhLT5leHBvc2UpOwotfSAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GcmFtZUdk
azo6RnJhbWVHZGsoUGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1l
bnQsIEZyYW1lTG9hZGVyQ2xpZW50R2RrKiBmcmFtZUxvYWRlcikKLSAgICA6IEZyYW1lKHBhZ2Us
IG93bmVyRWxlbWVudCwgZnJhbWVMb2FkZXIpCi17Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0g
cGFnZS0+c2V0dGluZ3MoKTsKLSAgICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNh
bGx5KHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoNSk7Ci0gICAgc2V0
dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoNSk7Ci0gICAgc2V0dGluZ3MtPnNldFNo
b3VsZFByaW50QmFja2dyb3VuZHModHJ1ZSk7Ci0gICAgc2V0dGluZ3MtPnNldEphdmFTY3JpcHRF
bmFibGVkKHRydWUpOwotCi0gICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDE0
KTsKLSAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDE0KTsKLSAgICBzZXR0aW5ncy0+
c2V0U2VyaWZGb250RmFtaWx5KCJUaW1lcyBOZXcgUm9tYW4iKTsKLSAgICBzZXR0aW5ncy0+c2V0
U2Fuc1NlcmlmRm9udEZhbWlseSgiQXJpYWwiKTsKLSAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250
RmFtaWx5KCJDb3VyaWVyIik7Ci0gICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgi
QXJpYWwiKTsKLX0KLQotRnJhbWVHZGs6On5GcmFtZUdkaygpCi17Ci0gICAgbG9hZGVyKCktPmNh
bmNlbEFuZENsZWFyKCk7Ci19Ci0KLXZvaWQgRnJhbWVHZGs6OmR1bXBSZW5kZXJUcmVlKCkgY29u
c3QKLXsKLSAgICBpZiAodmlldygpLT5uZWVkc0xheW91dCgpKQotICAgICAgICB2aWV3KCktPmxh
eW91dCgpOwotICAgIAotICAgIFN0cmluZyB0eHQgPSBleHRlcm5hbFJlcHJlc2VudGF0aW9uKHJl
bmRlcmVyKCkpOwotICAgIENTdHJpbmcgdXRmOFN0ciA9IHR4dC51dGY4KCk7Ci0gICAgY29uc3Qg
Y2hhciAqdXRmOCA9IHV0ZjhTdHIuZGF0YSgpOwotICAgIGlmICh1dGY4KQotICAgICAgICBwcmlu
dGYoIiVzXG4iLCB1dGY4KTsKLSAgICBlbHNlCi0gICAgICAgIHByaW50ZigiRnJhbWVHZGs6OmR1
bXBSZW5kZXJUcmVlKCkgbm8gZGF0YVxuIik7Ci19Ci0KLWJvb2wgRnJhbWVHZGs6OmtleVByZXNz
KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQpCi17Ci0gICAgaWYgKCFldmVu
dEhhbmRsZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGV2ZW50SGFu
ZGxlcigpLT5rZXlFdmVudChrZXlFdmVudCk7Ci19Ci0KLXZvaWQgRnJhbWVHZGs6OmhhbmRsZUdk
a0V2ZW50KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Ci0K
LSAgICAgICAgY2FzZSBHREtfRVhQT1NFOiB7Ci0gICAgICAgICAgICBHZGtSZWN0YW5nbGUgY2xp
cDsKLSAgICAgICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdp
b24sICZjbGlwKTsKLSAgICAgICAgICAgIGdka193aW5kb3dfYmVnaW5fcGFpbnRfcmVnaW9uKGV2
ZW50LT5hbnkud2luZG93LCBldmVudC0+ZXhwb3NlLnJlZ2lvbik7Ci0gICAgICAgICAgICBjYWly
b190KiBjciA9IGdka19jYWlyb19jcmVhdGUoZXZlbnQtPmFueS53aW5kb3cpOwotICAgICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0IGN0eChjcik7Ci0gICAgICAgICAgICBjdHguc2V0R2RrRHJhd2Fi
bGUoZXZlbnQtPmFueS53aW5kb3cpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAodmlldygpLT5uZWVkc0xheW91dCgpKQotICAgICAgICAgICAgICAg
ICAgICB2aWV3KCktPmxheW91dCgpOwotICAgICAgICAgICAgICAgIEludFJlY3QgcmVjdChjbGlw
LngsIGNsaXAueSwgY2xpcC53aWR0aCwgY2xpcC5oZWlnaHQpOwotICAgICAgICAgICAgICAgIHBh
aW50KCZjdHgsIHJlY3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fpcm9fZGVzdHJv
eShjcik7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBNYWtlIHN1cmUgY2hpbGRy
ZW4gb2YgdGhlIHZpZXcgZ2V0IHJlZHJhd24KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
RnJhbWVHZGtFeHBvc2VEYXRhIGRhdGEgPSB7IEdUS19DT05UQUlORVIodmlldygpLT5ndGtXaWRn
ZXQoKSksICZldmVudC0+ZXhwb3NlIH07Ci0gICAgICAgICAgICBndGtfY29udGFpbmVyX2ZvcmFs
bChHVEtfQ09OVEFJTkVSKHZpZXcoKS0+Z3RrV2lkZ2V0KCkpLCBmcmFtZV9nZGtfZXhwb3NlX2No
aWxkLCAmZGF0YSk7Ci0gICAgICAgICAgICBnZGtfd2luZG93X2VuZF9wYWludChldmVudC0+YW55
LndpbmRvdyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgY2FzZSBHREtfQ09ORklHVVJFOiB7Ci0gICAgICAgICAgICB2aWV3KCktPnVwZGF0
ZUdlb21ldHJ5KGV2ZW50LT5jb25maWd1cmUud2lkdGgsIGV2ZW50LT5jb25maWd1cmUuaGVpZ2h0
KTsKLSAgICAgICAgICAgIGZvcmNlTGF5b3V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgR0RLX1NDUk9MTDogewotICAgICAgICAgICAgUGxhdGZvcm1X
aGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgdmlldygpLT53aGVlbEV2
ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICAgICAgaWYgKHdoZWVsRXZlbnQuaXNBY2NlcHRlZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgSGl0VGVzdFJlcXVlc3Qg
aGl0VGVzdFJlcXVlc3QodHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBIaXRUZXN0UmVzdWx0IGhp
dFRlc3RSZXN1bHQod2hlZWxFdmVudC5wb3MoKSk7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5s
YXllcigpLT5oaXRUZXN0KGhpdFRlc3RSZXF1ZXN0LCBoaXRUZXN0UmVzdWx0KTsKLSAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpOwotICAgICAgICAgICAg
aWYgKCFub2RlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIC8qCi0gICAg
ICAgICAgICAgKiBGSVhNRTogRG9lcyB0aGlzIGJlbG9uZyBoZXJlPwotICAgICAgICAgICAgICog
RGVmYXVsdCB0byBzY3JvbGxpbmcgdGhlIHBhZ2UKLSAgICAgICAgICAgICAqIG5vdCBzdXJlIHdo
eSBpdHMgbnVsbAotICAgICAgICAgICAgICogYnJva2UgYW55d2F5IHdoZW4gaXRzIG5vdCBudWxs
Ci0gICAgICAgICAgICAgKiBkb1Njcm9sbChyZW5kZXJlcigpLCB3aGVlbEV2ZW50LmRlbHRhWCgp
LCB3aGVlbEV2ZW50LmRlbHRhWSgpKTsKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHREtfRFJBR19FTlRFUjoKLSAgICAgICAgY2Fz
ZSBHREtfRFJBR19MRUFWRToKLSAgICAgICAgY2FzZSBHREtfRFJBR19NT1RJT046Ci0gICAgICAg
IGNhc2UgR0RLX0RSQUdfU1RBVFVTOgotICAgICAgICBjYXNlIEdES19EUk9QX1NUQVJUOgotICAg
ICAgICBjYXNlIEdES19EUk9QX0ZJTklTSEVEOiB7Ci0gICAgICAgICAgICAvL2Jvb2wgdXBkYXRl
RHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7Ci0gICAg
ICAgICAgICAvL3ZvaWQgY2FuY2VsRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiwgQ2xpcGJvYXJkKik7Ci0gICAgICAgICAgICAvL2Jvb2wgcGVyZm9ybURyYWdBbmREcm9wKGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKLSAgICAgICAgICAg
IGV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICAg
ICAgY2FzZSBHREtfMkJVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVT
UzoKLSAgICAgICAgICAgIGV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoUGxh
dGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHREtfQlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgICAgICBldmVudEhhbmRsZXIoKS0+aGFuZGxl
TW91c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHREtfS0VZX1BSRVNTOgotICAgICAgICBjYXNlIEdES19L
RVlfUkVMRUFTRTogewotICAgICAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleUV2ZW50
KGV2ZW50KTsKLSAgICAgICAgICAgIGtleVByZXNzKGtleUV2ZW50KTsKLSAgICAgICAgfQotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEZyYW1l
Ojppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgRnJhbWU6OmNsZWFudXBQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLURyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0
aW9uKCkgCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9p
ZCBGcmFtZTo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAkocmV2aXNpb24gMjQ3ODEp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgRnJhbWVHZGtfaAotI2RlZmluZSBGcmFtZUdka19oCi0KLSNpbmNsdWRlICJF
ZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgPGdkay9nZGsuaD4K
LSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGcmFtZUdkazsKLWNsYXNzIEZyYW1lTG9hZGVyQ2xp
ZW50R2RrOwotY2xhc3MgRm9ybURhdGE7Ci0KLQotY2xhc3MgRnJhbWVHZGsgOiBwdWJsaWMgRnJh
bWUgewotcHVibGljOgotICAgIEZyYW1lR2RrKFBhZ2UqLCBIVE1MRnJhbWVPd25lckVsZW1lbnQq
LCBGcmFtZUxvYWRlckNsaWVudEdkayopOwotICAgIHZpcnR1YWwgfkZyYW1lR2RrKCk7Ci0KLSAg
ICB2b2lkIGhhbmRsZUdka0V2ZW50KEdka0V2ZW50Kik7Ci0gICAgYm9vbCBrZXlQcmVzcyhjb25z
dCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleUV2ZW50KTsKLQotICAgIHZvaWQgZHVtcFJlbmRl
clRyZWUoKSBjb25zdDsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9LZXlFdmVudEdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
S2V5RXZlbnRHZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0tleUV2ZW50R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU4LDE3ICs0NTgsMTcgQEAgc3Rh
dGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVucwogCiB9CiAKLVBsYXRmb3JtS2V5
Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50KiBldmVudCkKK1BsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5KiBldmVu
dCkKIHsKICAgICBtX2lzS2V5VXAgPSBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0U7Ci0g
ICAgbV9zaGlmdEtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBHREtfU0hJRlRfTUFTSyAhPSAwOwot
ICAgIG1fY3RybEtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLICE9IDA7
Ci0gICAgbV9hbHRLZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwOwot
ICAgIG1fbWV0YUtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBHREtfTU9EMl9NQVNLICE9IDA7Ci0g
ICAgbV90ZXh0ID0gZXZlbnQtPmtleS5zdHJpbmc7Ci0gICAgbV91bm1vZGlmaWVkVGV4dCA9IGV2
ZW50LT5rZXkuc3RyaW5nOwotICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJGb3JH
ZGtLZXlDb2RlKGV2ZW50LT5rZXkua2V5dmFsKTsKLSAgICBtX1dpbmRvd3NLZXlDb2RlID0gd2lu
ZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVudC0+a2V5LmtleXZhbCk7CisgICAgbV9zaGlmdEtl
eSA9IGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLICE9IDA7CisgICAgbV9jdHJsS2V5ID0g
ZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSyAhPSAwOworICAgIG1fYWx0S2V5ID0gZXZl
bnQtPnN0YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwOworICAgIG1fbWV0YUtleSA9IGV2ZW50LT5z
dGF0ZSAmIEdES19NT0QyX01BU0sgIT0gMDsKKyAgICBtX3RleHQgPSBldmVudC0+c3RyaW5nOwor
ICAgIG1fdW5tb2RpZmllZFRleHQgPSBldmVudC0+c3RyaW5nOworICAgIG1fa2V5SWRlbnRpZmll
ciA9IGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGV2ZW50LT5rZXl2YWwpOworICAgIG1fV2lu
ZG93c0tleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGV2ZW50LT5rZXl2YWwpOwog
ICAgIG1fYXV0b1JlcGVhdCA9IGZhbHNlOwogICAgIG1faXNLZXlwYWQgPSBmYWxzZTsKIApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDU3ICsyOCw3MSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogCiAj
aW5jbHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgIkFz
c2VydGlvbnMuaCIKKwogI2luY2x1ZGUgPGdkay9nZGsuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBt
b2RpZmllciBpcyBBbHQgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgR0RLX01PRDFfTUFTSy4KIAot
UGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQor
UGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRCdXR0b24qIGV2
ZW50KQogewogICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKLSAgICBtX3Bvc2l0aW9u
ID0gSW50UG9pbnQoKGludClldmVudC0+bW90aW9uLngsIChpbnQpZXZlbnQtPm1vdGlvbi55KTsK
LSAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+bW90aW9uLnhfcm9v
dCwgKGludClldmVudC0+bW90aW9uLnlfcm9vdCk7Ci0gICAgbV9zaGlmdEtleSA9IGV2ZW50LT5i
dXR0b24uc3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKLSAgICBtX2N0cmxLZXkgPSBldmVudC0+YnV0
dG9uLnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKLSAgICBtX2FsdEtleSA9IGV2ZW50LT5idXR0
b24uc3RhdGUgJiBHREtfTU9EMV9NQVNLOwotICAgIG1fbWV0YUtleSA9IGV2ZW50LT5idXR0b24u
c3RhdGUgJiBHREtfTU9EMl9NQVNLOworICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2
ZW50LT54LCAoaW50KWV2ZW50LT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQo
KGludClldmVudC0+eF9yb290LCAoaW50KWV2ZW50LT55X3Jvb3QpOworICAgIG1fc2hpZnRLZXkg
PSBldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKKyAgICBtX2N0cmxLZXkgPSBldmVudC0+
c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLOworICAgIG1fYWx0S2V5ID0gZXZlbnQtPnN0YXRlICYg
R0RLX01PRDFfTUFTSzsKKyAgICBtX21ldGFLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfTU9EMl9N
QVNLOwogCiAgICAgc3dpdGNoIChldmVudC0+dHlwZSkgewotICAgICAgICBjYXNlIEdES19NT1RJ
T05fTk9USUZZOgotICAgICAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50TW92ZWQ7Ci0g
ICAgICAgICAgICBtX2J1dHRvbiA9IE5vQnV0dG9uOworICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVT
UzoKKyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzNCVVRUT05fUFJF
U1M6CisgICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6CisgICAgICAgIG1fZXZlbnRUeXBlID0g
TW91c2VFdmVudFByZXNzZWQ7CisgICAgICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9O
X1JFTEVBU0UpIHsKKyAgICAgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFJlbGVhc2Vk
OwogICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtfMkJVVFRPTl9Q
UkVTUzoKLSAgICAgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtf
QlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRQcmVz
c2VkOwotICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkg
ewotICAgICAgICAgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFJlbGVhc2VkOwotICAg
ICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV2
ZW50LT50eXBlID09IEdES19CVVRUT05fUFJFU1MpCi0gICAgICAgICAgICAgICAgbV9jbGlja0Nv
dW50ID0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9O
X1BSRVNTKQotICAgICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDI7Ci0gICAgICAgICAgICBl
bHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKLSAgICAgICAgICAgICAg
ICBtX2NsaWNrQ291bnQgPSAzOwotCi0gICAgICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0
b24gPT0gMSkKLSAgICAgICAgICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247Ci0gICAgICAg
ICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiA9PSAyKQotICAgICAgICAgICAgICAg
IG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1
dHRvbi5idXR0b24gPT0gMykKLSAgICAgICAgICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9u
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiVW5rbm93biBtb3VzZSBldmVudFxuIik7Ci0gICAgICAgICAgICBhc3Nl
cnQoMCk7Ci0gICAgfQorICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRU
T05fUFJFU1MpCisgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAxOworICAgICAgICBlbHNlIGlm
IChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUykKKyAgICAgICAgICAgIG1fY2xpY2tD
b3VudCA9IDI7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18zQlVUVE9OX1BS
RVNTKQorICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMzsKKworICAgICAgICBpZiAoZXZlbnQt
PmJ1dHRvbiA9PSAxKQorICAgICAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOworICAgICAg
ICBlbHNlIGlmIChldmVudC0+YnV0dG9uID09IDIpCisgICAgICAgICAgICBtX2J1dHRvbiA9IE1p
ZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAzKQorICAgICAg
ICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OwogfQogCitQbGF0Zm9y
bU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudE1vdGlvbiogbW90aW9uKQor
eworICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKKyAgICBtX3Bvc2l0aW9uID0gSW50
UG9pbnQoKGludCltb3Rpb24tPngsIChpbnQpbW90aW9uLT55KTsKKyAgICBtX2dsb2JhbFBvc2l0
aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPnhfcm9vdCwgKGludCltb3Rpb24tPnlfcm9vdCk7
CisgICAgbV9zaGlmdEtleSA9IG1vdGlvbi0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKKyAgICBt
X2N0cmxLZXkgPSBtb3Rpb24tPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKKyAgICBtX2FsdEtl
eSA9IG1vdGlvbi0+c3RhdGUgJiBHREtfTU9EMV9NQVNLOworICAgIG1fbWV0YUtleSA9IG1vdGlv
bi0+c3RhdGUgJiBHREtfTU9EMl9NQVNLOworCisgICAgc3dpdGNoIChtb3Rpb24tPnR5cGUpIHsK
KyAgICBjYXNlIEdES19NT1RJT05fTk9USUZZOgorICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNl
RXZlbnRNb3ZlZDsKKyAgICAgICAgbV9idXR0b24gPSBOb0J1dHRvbjsKKyAgICAgICAgbV9jbGlj
a0NvdW50ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfTsKK30KIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1BsYXRmb3JtU2NyZWVuR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9QbGF0Zm9ybVNjcmVlbkdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvUGxhdGZvcm1TY3JlZW5HZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw5IEBACiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldpZGdldC5o
IgotI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCisKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCkBAIC0zOCwxMCArNDAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBp
bnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpIAogewotICAgIEFTU0VSVCh3aWRnZXQtPmdk
a0RyYXdhYmxlKCkpOworICAgIEFTU0VSVCh3aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKSAmJiB3
aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKS0+YmluX3dpbmRvdyk7CiAKICAgICBnaW50IGR1bW15
LCBkZXB0aDsKLSAgICBnZGtfd2luZG93X2dldF9nZW9tZXRyeSh3aWRnZXQtPmdka0RyYXdhYmxl
KCksICZkdW1teSwgJmR1bW15LCAmZHVtbXksICZkdW1teSwgJmRlcHRoKTsKKyAgICBnZGtfd2lu
ZG93X2dldF9nZW9tZXRyeSh3aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKS0+YmluX3dpbmRvdywg
JmR1bW15LCAmZHVtbXksICZkdW1teSwgJmR1bW15LCAmZGVwdGgpOwogICAgIHJldHVybiBkZXB0
aDsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhci5oCShy
ZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJXaWRnZXQuaCIK
ICNpbmNsdWRlICJTY3JvbGxCYXIuaCIKIAordHlwZWRlZiBzdHJ1Y3QgX0d0a0FkanVzdG1lbnQg
R3RrQWRqdXN0bWVudDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQbGF0Zm9ybVNj
cm9sbGJhciA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYyBTY3JvbGxiYXIgewpAQCAtNTEsNiArNTMs
MTAgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBv
c2l0aW9uKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUHJvcG9ydGlvbigpOworCitw
cml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGd0a1ZhbHVlQ2hhbmdlZChHdGtBZGp1c3RtZW50Kiwg
UGxhdGZvcm1TY3JvbGxiYXIqKTsKKyAgICBHdGtBZGp1c3RtZW50KiBtX2FkanVzdG1lbnQ7CiB9
OwogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJH
ZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3Jt
U2Nyb2xsQmFyR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMzQgKzM3LDMzIEBACiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCisKIFBsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0Zm9ybVNj
cm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsYmFy
Q29udHJvbFNpemUgY29udHJvbFNpemUpCiAgICAgOiBTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRh
dGlvbiwgY29udHJvbFNpemUpCisgICAgLCBtX2FkanVzdG1lbnQoR1RLX0FESlVTVE1FTlQoZ3Rr
X2FkanVzdG1lbnRfbmV3KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApKSkKIHsgCiAgICAg
R3RrU2Nyb2xsYmFyKiBzY3JvbGxCYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TQ1JPTExCQVIoOjpndGtf
aHNjcm9sbGJhcl9uZXcoTlVMTCkpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU
S19TQ1JPTExCQVIoOjpndGtfdnNjcm9sbGJhcl9uZXcoTlVMTCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1RLX1NDUk9MTEJBUig6Omd0a19oc2Nyb2xsYmFyX25ldyhtX2FkanVz
dG1lbnQpKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU0NST0xMQkFSKDo6
Z3RrX3ZzY3JvbGxiYXJfbmV3KG1fYWRqdXN0bWVudCkpOwogICAgIGd0a193aWRnZXRfc2hvdyhH
VEtfV0lER0VUKHNjcm9sbEJhcikpOwotICAgIHNldEd0a1dpZGdldChHVEtfV0lER0VUKHNjcm9s
bEJhcikpOworICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChzY3JvbGxCYXIpKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KEdfT0JKRUNUKHNjcm9sbEJhciksICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhQbGF0Zm9ybVNjcm9sbGJhcjo6Z3RrVmFsdWVDaGFuZ2VkKSwgdGhpcyk7CisKKyAgICBz
ZXRJbnRlcm5hbEd0a1dpZGdldChHVEtfV0lER0VUKHNjcm9sbEJhcikpOwogCiAgICAgLyoKICAg
ICAgKiBhc3NpZ24gYSBzYW5lIGRlZmF1bHQgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgU2Nyb2xs
QmFyLCBvdGhlcndpc2UKICAgICAgKiB3ZSB3aWxsIGVuZCB1cCB3aXRoIGEgMCB3aWR0aCBzY3Jv
bGxiYXIuCiAgICAgICovCiAgICAgcmVzaXplKFBsYXRmb3JtU2Nyb2xsYmFyOjpob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KCksCi0gICAgICAgICAgIFBsYXRmb3JtU2Nyb2xsYmFyOjp2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKCkpOyAgICAKLQotICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChzY3Jv
bGxCYXIpKTsKLSAgICBndGtfb2JqZWN0X3NpbmsoR1RLX09CSkVDVChzY3JvbGxCYXIpKTsKKyAg
ICAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSk7IAog
fQogCiBQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKCkKIHsKLSAgICAvKgot
ICAgICAqIHRoZSBXaWRnZXQgZG9lcyBub3QgdGFrZSBvdmVyIG93bmVyc2hpcC4KLSAgICAgKi8K
LSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZ3RrV2lkZ2V0KCkpOwotICAgIGdfb2JqZWN0X3VucmVm
KEdfT0JKRUNUKGd0a1dpZGdldCgpKSk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKEdfT0JKRUNUKGludGVybmFsR3RrV2lkZ2V0KCkpLCAoZ3BvaW50ZXIpUGxhdGZv
cm1TY3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCwgdGhpcyk7CisgICAgZ19vYmplY3RfdW5yZWYo
R19PQkpFQ1QoaW50ZXJuYWxHdGtXaWRnZXQoKSkpOwogfQogCiBpbnQgUGxhdGZvcm1TY3JvbGxi
YXI6OndpZHRoKCkgY29uc3QKQEAgLTg5LDE2ICs4OCwyOCBAQCB2b2lkIFBsYXRmb3JtU2Nyb2xs
YmFyOjpwYWludChHcmFwaGljc0NvCiAKIHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRo
dW1iUG9zaXRpb24oKQogeyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX2FkanVz
dG1lbnQtPnZhbHVlICE9IG1fY3VycmVudFBvcykgeworICAgICAgICBtX2FkanVzdG1lbnQtPnZh
bHVlID0gbV9jdXJyZW50UG9zOworICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2Vk
KG1fYWRqdXN0bWVudCk7CisgICAgfQogfQogCiB2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRh
dGVUaHVtYlByb3BvcnRpb24oKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9hZGp1
c3RtZW50LT5zdGVwX2luY3JlbWVudCA9IG1fbGluZVN0ZXA7CisgICAgbV9hZGp1c3RtZW50LT5w
YWdlX2luY3JlbWVudCA9IG1fcGFnZVN0ZXA7CisgICAgbV9hZGp1c3RtZW50LT5wYWdlX3NpemUg
PSBtX3Zpc2libGVTaXplOworICAgIG1fYWRqdXN0bWVudC0+dXBwZXIgPSBtX3RvdGFsU2l6ZTsK
KyAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKG1fYWRqdXN0bWVudCk7CiB9CiAKIHZvaWQgUGxh
dGZvcm1TY3JvbGxiYXI6OnNldFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBzZXRG
cmFtZUdlb21ldHJ5KHJlY3QpOworICAgIGdlb21ldHJ5Q2hhbmdlZCgpOwogfQogCit2b2lkIFBs
YXRmb3JtU2Nyb2xsYmFyOjpndGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCosIFBsYXRmb3Jt
U2Nyb2xsYmFyKiB0aGF0KQoreworICAgIHRoYXQtPnNldFZhbHVlKGd0a19hZGp1c3RtZW50X2dl
dF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQpKTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1JlbmRlclRoZW1lR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9SZW5kZXJUaGVtZUdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksMTEgKzE3OSwx
MiBAQCB2b2lkIFJlbmRlclRoZW1lR2RrOjpzZXRDaGVja2JveFNpemUoUmVuCiBib29sIFJlbmRl
clRoZW1lR2RrOjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gRklYTUU6
IGlzIGl0IHRoZSByaWdodCB0aGluZyB0byBkbz8KLSAgICBHdGtXaWRnZXQgKmNoZWNrYm94ID0g
Z3RrQ2hlY2tib3goKTsKKyAgICBHdGtXaWRnZXQqIGNoZWNrYm94ID0gZ3RrQ2hlY2tib3goKTsK
KyAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRp
b24oKSk7CiAgICAgZ3RrX3BhaW50X2NoZWNrKGNoZWNrYm94LT5zdHlsZSwgaS5jb250ZXh0LT5n
ZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0
ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAgICAgICBOVUxMLCBjaGVja2JveCwgImNo
ZWNrYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICBwb3MueCgpLCBw
b3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgcmV0dXJuIGZhbHNl
OwogfQpAQCAtMjExLDExICsyMTIsMTIgQEAgdm9pZCBSZW5kZXJUaGVtZUdkazo6c2V0UmFkaW9T
aXplKFJlbmRlcgogYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogeyAKICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwotICAgIEd0
a1dpZGdldCAqcmFkaW8gPSBndGtSYWRpb0J1dHRvbigpOworICAgIEd0a1dpZGdldCogcmFkaW8g
PSBndGtSYWRpb0J1dHRvbigpOworICAgIEludFBvaW50IHBvcyA9IGkuY29udGV4dC0+dHJhbnNs
YXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKICAgICBndGtfcGFpbnRfb3B0aW9uKHJhZGlvLT5z
dHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICAgZGV0
ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwKICAgICAgICAgICAgICAgICAgICAg
IE5VTEwsIHJhZGlvLCAicmFkaW9idXR0b24iLAotICAgICAgICAgICAgICAgICAgICAgcmVjdC54
KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
IAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIyMywxMSArMjI1LDEyIEBAIGJvb2wgUmVuZGVy
VGhlbWVHZGs6OnBhaW50UmFkaW8oUmVuZGVyT2IKIGJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHJlY3QpIAogeyAKICAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGVt
ZS1hd2FyZSBkcmF3aW5nLiBUaGlzIHNob3VsZCBob25vciB0aGUgc3RhdGUgYXMgd2VsbAotICAg
IEd0a1dpZGdldCAqYnV0dG9uID0gZ3RrQnV0dG9uKCk7CisgICAgR3RrV2lkZ2V0KiBidXR0b24g
PSBndGtCdXR0b24oKTsKKyAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBv
aW50KHJlY3QubG9jYXRpb24oKSk7CiAgICAgZ3RrX3BhaW50X2JveChidXR0b24tPnN0eWxlLCBp
LmNvbnRleHQtPmdka0RyYXdhYmxlKCksCiAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0
ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAgICAgTlVMTCwgYnV0dG9u
LCAiYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgIHBvcy54KCksIHBvcy55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAkocmV2aXNpb24gMjQ3
ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKICAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICoKQEAgLTM3LDM4
ICszNywyMDMgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIndlYmtpdGd0a3Bh
Z2UuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCiAKICNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCisKK3N0
YXRpYyBjb25zdCBpbnQgTWFnaWNHdGtTY3JvbGxDb25zdGFudCA9IDEzOworCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlCisvKgorICog
VGhlIGRlc2lnbiBpcyBhIGNvcHkgb2YgdGhlIFdpbmRvd3MgU2Nyb2xsVmlldyBmcm9tIHBsYXRm
b3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcAorICogd2l0aCB0aGUgZm9sbG93aW5nIGNoYW5nZXMv
ZGlmZmljdWx0aWVzLgorICogVG8gY29uZm9ybSB0byB0aGUgJ3Njcm9sbGFibGUgcHJvdG9jb2wn
IG9mIEd0aysgd2UgbWlnaHQgZ2V0IHR3byBHdGtBZGp1c3RtZW50cyBzZXQuIElmCisgKiB3ZSBo
YXZlIHRoZW0gc2V0IHdlIG1heSBub3QgY3JlYXRlIFBsYXRmb3JtU2Nyb2xsYmFyIGJ1dCBoYXZl
IHRvIHVzZSB0aGUgR3RrQWRqdXN0bWVudC4KKyAqLworY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xs
Vmlld1ByaXZhdGUgOiBwdWJsaWMgU2Nyb2xsYmFyQ2xpZW50CiB7CiBwdWJsaWM6Ci0gICAgU2Ny
b2xsVmlld1ByaXZhdGUoKQotICAgICAgICA6IGhhc1N0YXRpY0JhY2tncm91bmQoZmFsc2UpCi0g
ICAgICAgICwgc3VwcHJlc3NTY3JvbGxiYXJzKGZhbHNlKQorICAgIFNjcm9sbFZpZXdQcml2YXRl
KFNjcm9sbFZpZXcqIF92aWV3KQorICAgICAgICA6IHZpZXcoX3ZpZXcpCisgICAgICAgICwgaGFz
U3RhdGljQmFja2dyb3VuZChmYWxzZSkKKyAgICAgICAgLCBzY3JvbGxiYXJzU3VwcHJlc3NlZChm
YWxzZSkKKyAgICAgICAgLCBzY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyKDApCiAgICAgICAgICwg
dlNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKICAgICAgICAgLCBoU2Nyb2xsYmFyTW9kZShT
Y3JvbGxiYXJBdXRvKQotICAgICAgICAsIGxheW91dCgwKQogICAgICAgICAsIHNjcm9sbEJhcnNO
ZWVkVXBkYXRlKGZhbHNlKQotICAgIHsgfQorICAgICAgICAsIGluVXBkYXRlU2Nyb2xsYmFycyhm
YWxzZSkKKyAgICAgICAgLCB2QWRqKDApCisgICAgICAgICwgaEFkaigwKQorICAgIHt9CisKKyAg
ICB+U2Nyb2xsVmlld1ByaXZhdGUoKQorICAgIHsKKyAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNj
cm9sbGJhcihmYWxzZSk7CisgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsK
KworICAgICAgICBpZiAoaEFkaikgeworICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jKEdfT0JKRUNUKGhBZGopLCAoZ3BvaW50ZXIpU2Nyb2xsVmlld1ByaXZh
dGU6OmFkanVzdG1lbnRDaGFuZ2VkLCB0aGlzKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3VucmVm
KGhBZGopOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZBZGopIHsKKyAgICAgICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVCh2QWRqKSwgKGdwb2lu
dGVyKVNjcm9sbFZpZXdQcml2YXRlOjphZGp1c3RtZW50Q2hhbmdlZCwgdGhpcyk7CisgICAgICAg
ICAgICBnX29iamVjdF91bnJlZih2QWRqKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
c2Nyb2xsQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKTsKKworICAgIHZv
aWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc0Jhcik7CisgICAgdm9pZCBzZXRI
YXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc0Jhcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmFs
dWVDaGFuZ2VkKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVj
dCgpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgYWRqdXN0bWVudENoYW5nZWQoR3RrQWRqdXN0
bWVudCosIGdwb2ludGVyKTsKIAorICAgIFNjcm9sbFZpZXcqIHZpZXc7CiAgICAgYm9vbCBoYXNT
dGF0aWNCYWNrZ3JvdW5kOwotICAgIGJvb2wgc3VwcHJlc3NTY3JvbGxiYXJzOworICAgIGJvb2wg
c2Nyb2xsYmFyc1N1cHByZXNzZWQ7CisgICAgaW50IHNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXI7
CiAgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xsYmFyTW9kZTsKICAgICBTY3JvbGxiYXJNb2RlIGhT
Y3JvbGxiYXJNb2RlOwotICAgIEd0a0xheW91dCAqbGF5b3V0OworICAgIFJlZlB0cjxQbGF0Zm9y
bVNjcm9sbGJhcj4gdkJhcjsKKyAgICBSZWZQdHI8UGxhdGZvcm1TY3JvbGxiYXI+IGhCYXI7Cisg
ICAgR3RrQWRqdXN0bWVudCogdkFkajsKKyAgICBHdGtBZGp1c3RtZW50KiBoQWRqOworICAgIElu
dFNpemUgc2Nyb2xsT2Zmc2V0OwogICAgIEludFNpemUgY29udGVudHNTaXplOwotICAgIEludFNp
emUgdmlld1BvcnRTaXplOwogICAgIGJvb2wgc2Nyb2xsQmFyc05lZWRVcGRhdGU7CisgICAgYm9v
bCBpblVwZGF0ZVNjcm9sbGJhcnM7CisgICAgSGFzaFNldDxXaWRnZXQqPiBjaGlsZHJlbjsKIH07
CiAKKy8qCisgKiBEb24ndCBjcmVhdGUgdGhlIHNjcm9sbGJhcnMgd2hlbiB3ZSBoYXZlIGEgaG9y
aXpvbnRhbCBHdGtBZGp1c3RtZW50CisgKi8KK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1By
aXZhdGU6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCit7CisgICAgaWYg
KFNjcm9sbGJhcjo6aGFzUGxhdGZvcm1TY3JvbGxiYXJzKCkpIHsKKyAgICAgICAgaWYgKGhhc0Jh
ciAmJiAhaEJhciAmJiAhaEFkaikgeworICAgICAgICAgICAgaEJhciA9IG5ldyBQbGF0Zm9ybVNj
cm9sbGJhcih0aGlzLCBIb3Jpem9udGFsU2Nyb2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAg
ICAgICAgICAgIGhCYXItPnNldFNjcm9sbFZpZXdDb250cm9sKCk7CisgICAgICAgICAgICB2aWV3
LT5hZGRDaGlsZChoQmFyLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghaGFzQmFyICYmIGhC
YXIpIHsKKyAgICAgICAgICAgIHZpZXctPnJlbW92ZUNoaWxkKGhCYXIuZ2V0KCkpOworICAgICAg
ICAgICAgaEJhciA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qCisgKiBEb24ndCBjcmVh
dGUgdGhlIHNjcm9sbGJhcnMgd2hlbiB3ZSBoYXZlIGEgdmVydGljYWwgR3RrQWRqdXN0bWVudAor
ICovCit2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihib29sIGhhc0JhcikKK3sKKyAgICBpZiAoU2Nyb2xsYmFyOjpoYXNQbGF0Zm9ybVNj
cm9sbGJhcnMoKSkgeworICAgICAgICBpZiAoaGFzQmFyICYmICF2QmFyICYmICF2QWRqKSB7Cisg
ICAgICAgICAgICB2QmFyID0gbmV3IFBsYXRmb3JtU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Ny
b2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIHZCYXItPnNldFNjcm9sbFZp
ZXdDb250cm9sKCk7CisgICAgICAgICAgICB2aWV3LT5hZGRDaGlsZCh2QmFyLmdldCgpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghaGFzQmFyICYmIHZCYXIpIHsKKyAgICAgICAgICAgIHZpZXctPnJl
bW92ZUNoaWxkKHZCYXIuZ2V0KCkpOworICAgICAgICAgICAgdkJhciA9IDA7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNjcm9sbEJh
Y2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICAvLyBTaW5jZSBz
Y3JvbGxpbmcgaXMgZG91YmxlIGJ1ZmZlcmVkLCB3ZSB3aWxsIGJlIGJsaXR0aW5nIHRoZSBzY3Jv
bGwgdmlldydzIGludGVyc2VjdGlvbgorICAgIC8vIHdpdGggdGhlIGNsaXAgcmVjdCBldmVyeSB0
aW1lIHRvIGtlZXAgaXQgc21vb3RoLgorICAgIEludFJlY3QgY2xpcFJlY3QgPSB2aWV3LT53aW5k
b3dDbGlwUmVjdCgpOworICAgIEludFJlY3Qgc2Nyb2xsVmlld1JlY3QgPSB2aWV3LT5jb252ZXJ0
VG9Db250YWluaW5nV2luZG93KEludFJlY3QoMCwgMCwgdmlldy0+dmlzaWJsZVdpZHRoKCksIHZp
ZXctPnZpc2libGVIZWlnaHQoKSkpOworCisgICAgSW50UmVjdCB1cGRhdGVSZWN0ID0gY2xpcFJl
Y3Q7CisgICAgdXBkYXRlUmVjdC5pbnRlcnNlY3Qoc2Nyb2xsVmlld1JlY3QpOworCisgICAgLy9G
SVhNRSB1cGRhdGUgaGVyZT8KKworICAgIGlmICghaGFzU3RhdGljQmFja2dyb3VuZCkgLy8gVGhl
IG1haW4gZnJhbWUgY2FuIGp1c3QgYmxpdCB0aGUgV2ViVmlldyB3aW5kb3cKKyAgICAgICAvLyBG
SVhNRTogRmluZCBhIHdheSB0byBibGl0IHN1YmZyYW1lcyB3aXRob3V0IGJsaXR0aW5nIG92ZXJs
YXBwaW5nIGNvbnRlbnQKKyAgICAgICB2aWV3LT5zY3JvbGxCYWNraW5nU3RvcmUoLXNjcm9sbERl
bHRhLndpZHRoKCksIC1zY3JvbGxEZWx0YS5oZWlnaHQoKSwgc2Nyb2xsVmlld1JlY3QsIGNsaXBS
ZWN0KTsKKyAgICBlbHNlICB7CisgICAgICAgLy8gV2UgbmVlZCB0byBnbyBhaGVhZCBhbmQgcmVw
YWludCB0aGUgZW50aXJlIGJhY2tpbmcgc3RvcmUuICBEbyBpdCBub3cgYmVmb3JlIG1vdmluZyB0
aGUKKyAgICAgICAvLyBwbHVnaW5zLgorICAgICAgIHZpZXctPmFkZFRvRGlydHlSZWdpb24odXBk
YXRlUmVjdCk7CisgICAgICAgdmlldy0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgfQorCisg
ICAgdmlldy0+Z2VvbWV0cnlDaGFuZ2VkKCk7CisKKyAgICAvLyBOb3cgdXBkYXRlIHRoZSB3aW5k
b3cgKHdoaWNoIHNob3VsZCBkbyBub3RoaW5nIGJ1dCBhIGJsaXQgb2YgdGhlIGJhY2tpbmcgc3Rv
cmUncyB1cGRhdGVSZWN0IGFuZCBzbyBzaG91bGQKKyAgICAvLyBiZSB2ZXJ5IGZhc3QpLgorICAg
IHZpZXctPnVwZGF0ZSgpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRl
OjphZGp1c3RtZW50Q2hhbmdlZChHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50LCBncG9pbnRlciBf
dGhhdCkKK3sKKyAgICBTY3JvbGxWaWV3UHJpdmF0ZSogdGhhdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
U2Nyb2xsVmlld1ByaXZhdGUqPihfdGhhdCk7CisKKyAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJl
YWxseSBtb3ZlZC4KKyAgICBJbnRTaXplIG5ld09mZnNldCA9IHRoYXQtPnNjcm9sbE9mZnNldDsK
KyAgICBpZiAoYWRqdXN0bWVudCA9PSB0aGF0LT5oQWRqKQorICAgICAgICBuZXdPZmZzZXQuc2V0
V2lkdGgoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVu
dCkpKTsKKyAgICBlbHNlIGlmIChhZGp1c3RtZW50ID09IHRoYXQtPnZBZGopCisgICAgICAgIG5l
d09mZnNldC5zZXRIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFs
dWUoYWRqdXN0bWVudCkpKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBuZXdPZmZzZXQg
LSB0aGF0LT5zY3JvbGxPZmZzZXQ7CisgICAgaWYgKHNjcm9sbERlbHRhID09IEludFNpemUoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHRoYXQtPnNjcm9sbE9mZnNldCA9IG5ld09mZnNldDsKKwor
ICAgIGlmICh0aGF0LT5zY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdGhhdC0+c2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERlbHRhKTsKKyAgICBzdGF0aWNfY2Fz
dDxGcmFtZVZpZXcqPih0aGF0LT52aWV3KS0+ZnJhbWUoKS0+c2VuZFNjcm9sbEV2ZW50KCk7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnZhbHVlQ2hhbmdlZChTY3Jv
bGxiYXIqIGJhcikKK3sKKyAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KKyAg
ICBJbnRTaXplIG5ld09mZnNldCA9IHNjcm9sbE9mZnNldDsKKyAgICBpZiAoYmFyKSB7CisgICAg
ICAgIGlmIChiYXIgPT0gaEJhcikKKyAgICAgICAgICAgIG5ld09mZnNldC5zZXRXaWR0aChiYXIt
PnZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChiYXIgPT0gdkJhcikKKyAgICAgICAgICAgIG5l
d09mZnNldC5zZXRIZWlnaHQoYmFyLT52YWx1ZSgpKTsKKyAgICB9CisgICAgSW50U2l6ZSBzY3Jv
bGxEZWx0YSA9IG5ld09mZnNldCAtIHNjcm9sbE9mZnNldDsKKyAgICBpZiAoc2Nyb2xsRGVsdGEg
PT0gSW50U2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgc2Nyb2xsT2Zmc2V0ID0gbmV3T2Zm
c2V0OworCisgICAgaWYgKHNjcm9sbGJhcnNTdXBwcmVzc2VkKQorICAgICAgICByZXR1cm47CisK
KyAgICBzY3JvbGxCYWNraW5nU3RvcmUoc2Nyb2xsRGVsdGEpOworICAgIHN0YXRpY19jYXN0PEZy
YW1lVmlldyo+KHZpZXcpLT5mcmFtZSgpLT5zZW5kU2Nyb2xsRXZlbnQoKTsKK30KKworSW50UmVj
dCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAor
eworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih2aWV3KS0+d2luZG93
Q2xpcFJlY3QoZmFsc2UpOworfQorCiBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkKLSAgICA6IG1f
ZGF0YShuZXcgU2Nyb2xsVmlld1ByaXZhdGUpCisgICAgOiBtX2RhdGEobmV3IFNjcm9sbFZpZXdQ
cml2YXRlKHRoaXMpKQoge30KIAogU2Nyb2xsVmlldzo6flNjcm9sbFZpZXcoKQpAQCAtNzYsNDMg
KzI0MSw4NyBAQCBTY3JvbGxWaWV3Ojp+U2Nyb2xsVmlldygpCiAgICAgZGVsZXRlIG1fZGF0YTsK
IH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVWaWV3KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJl
Y3QsIGJvb2wgbm93KQorLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgYXNzdW1lZDoKKyAqICAgKGhh
ZGogJiYgdmFkaikgfHwgKCFoYWRqICYmICF2YWRqKQorICovCit2b2lkIFNjcm9sbFZpZXc6OnNl
dEd0a0FkanVzdG1lbnRzKEd0a0FkanVzdG1lbnQqIGhhZGosIEd0a0FkanVzdG1lbnQqIHZhZGop
CiB7Ci0gICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0
LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpIH07Ci0gICAgR2Rr
RHJhd2FibGUqIGdka2RyYXdhYmxlID0gV2lkZ2V0OjpnZGtEcmF3YWJsZSgpOwotICAgIGlmIChH
REtfSVNfV0lORE9XKGdka2RyYXdhYmxlKSkgewotICAgICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9
IEdES19XSU5ET1coZ2RrZHJhd2FibGUpOwotICAgICAgICBnZGtfd2luZG93X2ludmFsaWRhdGVf
cmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKG5vdykKLSAgICAgICAgICAg
IGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7CisgICAgaWYgKG1fZGF0
YS0+aEFkaikgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMo
R19PQkpFQ1QobV9kYXRhLT5oQWRqKSwgKGdwb2ludGVyKVNjcm9sbFZpZXdQcml2YXRlOjphZGp1
c3RtZW50Q2hhbmdlZCwgbV9kYXRhKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jKEdfT0JKRUNUKG1fZGF0YS0+dkFkaiksIChncG9pbnRlcilTY3JvbGxWaWV3
UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5nZWQsIG1fZGF0YSk7CisgICAgICAgIGdfb2JqZWN0X3Vu
cmVmKG1fZGF0YS0+aEFkaik7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZGF0YS0+dkFkaik7
CisgICAgfQorCisgICAgbV9kYXRhLT5oQWRqID0gaGFkajsKKyAgICBtX2RhdGEtPnZBZGogPSB2
YWRqOworCisgICAgaWYgKG1fZGF0YS0+aEFkaikgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fZGF0YS0+aEFkaiwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExCQUNLKFNjcm9sbFZpZXdQcml2
YXRlOjphZGp1c3RtZW50Q2hhbmdlZCksIG1fZGF0YSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9kYXRhLT52QWRqLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soU2Nyb2xsVmlld1By
aXZhdGU6OmFkanVzdG1lbnRDaGFuZ2VkKSwgbV9kYXRhKTsKKworICAgICAgICAvKgorICAgICAg
ICAgKiBkaXNhYmxlIHRoZSBzY3JvbGxiYXJzIChpZiB3ZSBoYXZlIGFueSkgYXMgdGhlIEd0a0Fk
anVzdG1lbnQgb3ZlcgorICAgICAgICAgKi8KKyAgICAgICAgbV9kYXRhLT5zZXRIYXNWZXJ0aWNh
bFNjcm9sbGJhcihmYWxzZSk7CisgICAgICAgIG1fZGF0YS0+c2V0SGFzSG9yaXpvbnRhbFNjcm9s
bGJhcihmYWxzZSk7CisKKyAgICAgICAgZ19vYmplY3RfcmVmKG1fZGF0YS0+aEFkaik7CisgICAg
ICAgIGdfb2JqZWN0X3JlZihtX2RhdGEtPnZBZGopOwogICAgIH0KKyAgICAgICAKKyAgICB1cGRh
dGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3
Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIG5vdykKIHsK
LSAgICB1cGRhdGVWaWV3KHVwZGF0ZVJlY3QsIG5vdyk7CisgICAgaWYgKHVwZGF0ZVJlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IGNv
bnRlbnRzVG9XaW5kb3codXBkYXRlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IGNvbnRh
aW5pbmdXaW5kb3dSZWN0ID0gdXBkYXRlUmVjdDsKKyAgICBjb250YWluaW5nV2luZG93UmVjdC5z
ZXRMb2NhdGlvbih3aW5kb3dQb2ludCk7CisKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgY29u
dGFpbmluZ1dpbmRvd1JlY3QueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlu
aW5nV2luZG93UmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdX
aW5kb3dSZWN0LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdX
aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBjb250YWluaW5n
V2luZG93KCktPmJpbl93aW5kb3c7CisKKyAgICBpZiAod2luZG93KQorICAgICAgICBnZGtfd2lu
ZG93X2ludmFsaWRhdGVfcmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKKworICAgIC8vIENhY2hl
IHRoZSBkaXJ0eSBzcG90LgorICAgIGFkZFRvRGlydHlSZWdpb24oY29udGFpbmluZ1dpbmRvd1Jl
Y3QpOworCisgICAgaWYgKG5vdyAmJiB3aW5kb3cpCisgICAgICAgIGdka193aW5kb3dfcHJvY2Vz
c191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlKCkK
IHsKLSAgICBBU1NFUlQoZ3RrV2lkZ2V0KCkpOwotICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhn
dGtXaWRnZXQoKSk7CisgICAgQVNTRVJUKGNvbnRhaW5pbmdXaW5kb3coKSk7CisKKyAgICBHZGtS
ZWN0YW5nbGUgcmVjdCA9IHsgMCwgMCwgbV9kYXRhLT5jb250ZW50c1NpemUud2lkdGgoKSwgbV9k
YXRhLT5jb250ZW50c1NpemUuaGVpZ2h0KCkgfTsKKyAgICBnZGtfd2luZG93X2ludmFsaWRhdGVf
cmVjdChjb250YWluaW5nV2luZG93KCktPmJpbl93aW5kb3csICZyZWN0LCB0cnVlKTsKIAotICAg
IGlmIChtX2RhdGEtPnNjcm9sbEJhcnNOZWVkVXBkYXRlKQotICAgICAgICB1cGRhdGVTY3JvbGxi
YXJzKCk7CisgICAgaWYgKG1fZGF0YS0+c2Nyb2xsQmFyc05lZWRVcGRhdGUpIHsKKyAgICAgICAg
dXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisgICAgICAgIGdlb21ldHJ5
Q2hhbmdlZCgpOworICAgIH0KIH0KIAogaW50IFNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+dmlld1BvcnRTaXplLndpZHRoKCk7CisgICAgcmV0
dXJuIHdpZHRoKCkgLSAobV9kYXRhLT52QmFyID8gbV9kYXRhLT52QmFyLT53aWR0aCgpIDogMCk7
CiB9CiAKIGludCBTY3JvbGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9kYXRhLT52aWV3UG9ydFNpemUuaGVpZ2h0KCk7CisgICAgcmV0dXJuIGhlaWdodCgpIC0g
KG1fZGF0YS0+aEJhciA/IG1fZGF0YS0+aEJhci0+aGVpZ2h0KCkgOiAwKTsKIH0KIAotLy8gUmVn
aW9uIG9mIHRoZSBjb250ZW50IGN1cnJlbnRseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydCBpbiB0
aGUgY29udGVudCB2aWV3J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiBGbG9hdFJlY3QgU2Nyb2xsVmll
dzo6dmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gRmxvYXRSZWN0KGNv
bnRlbnRzWCgpLCBjb250ZW50c1koKSwgdmlzaWJsZVdpZHRoKCksIHZpc2libGVIZWlnaHQoKSk7
CkBAIC0xMzgsMjMgKzM0NywxNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnJlc2l6ZUNvbnRlbnRzKGlu
dCB3LCBpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YS0+Y29udGVudHNTaXplID0gbmV3
U2l6ZTsKLSAgICAKLSAgICBpZiAobV9kYXRhLT5sYXlvdXQpIHsKLSAgICAgICAgZ3RrX2xheW91
dF9zZXRfc2l6ZShtX2RhdGEtPmxheW91dCwgdywgaCk7Ci0gICAgICAgIG1fZGF0YS0+c2Nyb2xs
QmFyc05lZWRVcGRhdGUgPSB0cnVlOwotICAgIH0KKyAgICBtX2RhdGEtPnNjcm9sbEJhcnNOZWVk
VXBkYXRlID0gdHJ1ZTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzWCgpIGNvbnN0CiB7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ3RrX2xheW91dF9nZXRfaGFkanVzdG1lbnQobV9k
YXRhLT5sYXlvdXQpLCAwKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0
bWVudF9nZXRfdmFsdWUoZ3RrX2xheW91dF9nZXRfaGFkanVzdG1lbnQobV9kYXRhLT5sYXlvdXQp
KSk7CisgICAgcmV0dXJuIHNjcm9sbE9mZnNldCgpLndpZHRoKCk7CiB9CiAKIGludCBTY3JvbGxW
aWV3Ojpjb250ZW50c1koKSBjb25zdAogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGd0a19s
YXlvdXRfZ2V0X3ZhZGp1c3RtZW50KG1fZGF0YS0+bGF5b3V0KSwgMCk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGd0a19sYXlvdXRfZ2V0X3Zh
ZGp1c3RtZW50KG1fZGF0YS0+bGF5b3V0KSkpOworICAgIHJldHVybiBzY3JvbGxPZmZzZXQoKS5o
ZWlnaHQoKTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzV2lkdGgoKSBjb25zdApAQCAt
MTY5LDI3ICszNzIsMjYgQEAgaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzSGVpZ2h0KCkgY29uc3QK
IAogSW50U2l6ZSBTY3JvbGxWaWV3OjpzY3JvbGxPZmZzZXQoKSBjb25zdAogewotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKG1fZGF0YSwgSW50U2l6ZSgpKTsKLSAgICByZXR1cm4gSW50U2l6ZShj
b250ZW50c1goKSwgY29udGVudHNZKCkpOworICAgIHJldHVybiBtX2RhdGEtPnNjcm9sbE9mZnNl
dDsKK30KKworSW50U2l6ZSBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xsKCkgY29uc3QKK3sKKyAg
ICBJbnRTaXplIGRlbHRhID0gKG1fZGF0YS0+Y29udGVudHNTaXplIC0gSW50U2l6ZSh2aXNpYmxl
V2lkdGgoKSwgdmlzaWJsZUhlaWdodCgpKSkgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICBkZWx0YS5j
bGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisgICAgcmV0dXJuIGRlbHRhOwogfQogCiB2b2lkIFNjcm9s
bFZpZXc6OnNjcm9sbEJ5KGludCBkeCwgaW50IGR5KQogewotICAgIEd0a0FkanVzdG1lbnQqIGhh
ZGogPSBndGtfbGF5b3V0X2dldF9oYWRqdXN0bWVudChtX2RhdGEtPmxheW91dCk7Ci0gICAgR3Rr
QWRqdXN0bWVudCogdmFkaiA9IGd0a19sYXlvdXRfZ2V0X3ZhZGp1c3RtZW50KG1fZGF0YS0+bGF5
b3V0KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKGhhZGopOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFkaik7Ci0KLSAgICBpbnQgY3VycmVudF94ID0gY29udGVudHNYKCk7Ci0gICAgaW50IGN1cnJl
bnRfeSA9IGNvbnRlbnRzWSgpOworICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0ID0gbV9kYXRhLT5z
Y3JvbGxPZmZzZXQ7CisgICAgSW50U2l6ZSBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQg
KyBJbnRTaXplKGR4LCBkeSkuc2hydW5rVG8obWF4aW11bVNjcm9sbCgpKTsKKyAgICBuZXdTY3Jv
bGxPZmZzZXQuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwogCisgICAgaWYgKG5ld1Njcm9sbE9mZnNl
dCA9PSBzY3JvbGxPZmZzZXQpCisgICAgICAgIHJldHVybjsKIAotICAgIGd0a19hZGp1c3RtZW50
X3NldF92YWx1ZShoYWRqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEFNUChjdXJy
ZW50X3grZHgsIGhhZGotPmxvd2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNQVgoMC4wLCBoYWRqLT51cHBlciAtIGhhZGotPnBhZ2Vfc2l6ZSkpKTsKLSAgICBndGtfYWRq
dXN0bWVudF9zZXRfdmFsdWUodmFkaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xB
TVAoY3VycmVudF95K2R5LCB2YWRqLT5sb3dlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTUFYKDAuMCwgdmFkai0+dXBwZXIgLSB2YWRqLT5wYWdlX3NpemUpKSk7CisgICAg
dXBkYXRlU2Nyb2xsYmFycyhuZXdTY3JvbGxPZmZzZXQpOwogfQogCiBTY3JvbGxiYXJNb2RlIFNj
cm9sbFZpZXc6OmhTY3JvbGxiYXJNb2RlKCkgY29uc3QKQEAgLTIwNCwxNiArNDA2LDE2IEBAIFNj
cm9sbGJhck1vZGUgU2Nyb2xsVmlldzo6dlNjcm9sbGJhck1vZGUKIAogdm9pZCBTY3JvbGxWaWV3
OjpzdXBwcmVzc1Njcm9sbGJhcnMoYm9vbCBzdXBwcmVzc2VkLCBib29sIHJlcGFpbnRPblN1cHBy
ZXNzKQogewotICAgIG1fZGF0YS0+c3VwcHJlc3NTY3JvbGxiYXJzID0gc3VwcHJlc3NlZDsKKyAg
ICBtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkID0gc3VwcHJlc3NlZDsKICAgICBpZiAocmVw
YWludE9uU3VwcHJlc3MpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAgICAgdXBk
YXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xsVmll
dzo6c2V0SFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSBuZXdNb2RlKQogewogICAgIGlmICht
X2RhdGEtPmhTY3JvbGxiYXJNb2RlICE9IG5ld01vZGUpIHsKICAgICAgICAgbV9kYXRhLT5oU2Ny
b2xsYmFyTW9kZSA9IG5ld01vZGU7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAg
ICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CiAgICAgfQogfQogCkBA
IC0yMjEsMTQgKzQyMywxNCBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldFZTY3JvbGxiYXJNb2RlKFNj
cm9sCiB7CiAgICAgaWYgKG1fZGF0YS0+dlNjcm9sbGJhck1vZGUgIT0gbmV3TW9kZSkgewogICAg
ICAgICBtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID0gbmV3TW9kZTsKLSAgICAgICAgdXBkYXRlU2Ny
b2xsYmFycygpOworICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0
KTsKICAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyc01vZGUoU2Nyb2xs
YmFyTW9kZSBuZXdNb2RlKQogewogICAgIG1fZGF0YS0+aFNjcm9sbGJhck1vZGUgPSBtX2RhdGEt
PnZTY3JvbGxiYXJNb2RlID0gbmV3TW9kZTsKLSAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAg
dXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xs
Vmlldzo6c2V0U3RhdGljQmFja2dyb3VuZChib29sIGZsYWcpCkBAIC0yMzYsNDggKzQzOCw1MiBA
QCB2b2lkIFNjcm9sbFZpZXc6OnNldFN0YXRpY0JhY2tncm91bmQoYm9vCiAgICAgbV9kYXRhLT5o
YXNTdGF0aWNCYWNrZ3JvdW5kID0gZmxhZzsKIH0KIAotLyoKLSAqIG9ubHkgdXBkYXRlIHRoZSBh
ZGp1c3RtZW50cywgdGhlIEd0a0xheW91dCBpcyBkb2luZyB0aGUgd29yawotICogZm9yIHVzIChh
c3N1bWluZyBpdCBpcyBpbiBhIGJveC4uLikuCi0gKi8KLXZvaWQgU2Nyb2xsVmlldzo6c2V0RnJh
bWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQordm9pZCBTY3JvbGxWaWV3OjpzZXRGcmFtZUdl
b21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld0dlb21ldHJ5KQogewotICAgIFdpZGdldDo6c2V0RnJh
bWVHZW9tZXRyeShyKTsKLSAgICB1cGRhdGVHZW9tZXRyeShyLndpZHRoKCksIHIuaGVpZ2h0KCkp
OwotfQorICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKIAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRh
dGVHZW9tZXRyeShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgbV9kYXRhLT52aWV3UG9y
dFNpemUgPSBJbnRTaXplKHdpZHRoLGhlaWdodCk7Ci19CisgICAgSW50UmVjdCBvbGRHZW9tZXRy
eSA9IGZyYW1lR2VvbWV0cnkoKTsKKyAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkobmV3R2Vv
bWV0cnkpOwogCi12b2lkIFNjcm9sbFZpZXc6OnNldEd0a1dpZGdldChHdGtMYXlvdXQqIGxheW91
dCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKEdUS19MQVlPVVQobGF5b3V0KSk7Ci0gICAgbV9k
YXRhLT5sYXlvdXQgPSBsYXlvdXQ7CisgICAgaWYgKG5ld0dlb21ldHJ5ID09IG9sZEdlb21ldHJ5
KQorICAgICAgICByZXR1cm47CiAKLSAgICBXaWRnZXQ6OnNldEd0a1dpZGdldChHVEtfV0lER0VU
KGxheW91dCkpOworICAgIGlmIChuZXdHZW9tZXRyeS53aWR0aCgpICE9IG9sZEdlb21ldHJ5Lndp
ZHRoKCkgfHwgbmV3R2VvbWV0cnkuaGVpZ2h0KCkgIT0gb2xkR2VvbWV0cnkuaGVpZ2h0KCkpIHsK
KyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisgICAgICAg
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5zZXROZWVkc0xheW91dCgpOworICAgIH0K
KworICAgIGdlb21ldHJ5Q2hhbmdlZCgpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OmFkZENoaWxk
KFdpZGdldCogdykKK3ZvaWQgU2Nyb2xsVmlldzo6YWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKIHsg
Ci0gICAgQVNTRVJUKHctPmd0a1dpZGdldCgpKTsKLSAgICBBU1NFUlQobV9kYXRhLT5sYXlvdXQp
OworICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CisgICAgY2hpbGQtPnNldENvbnRhaW5pbmdX
aW5kb3coY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICBtX2RhdGEtPmNoaWxkcmVuLmFkZChjaGls
ZCk7CiAKLSAgICBndGtfbGF5b3V0X3B1dChtX2RhdGEtPmxheW91dCwgdy0+Z3RrV2lkZ2V0KCks
IDAsIDApOworICAgIGlmIChjaGlsZC0+aW50ZXJuYWxHdGtXaWRnZXQoKSkKKyAgICAgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250YWluaW5nV2luZG93KCkpLCBjaGlsZC0+
aW50ZXJuYWxHdGtXaWRnZXQoKSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQo
V2lkZ2V0KiB3KQordm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxkKQog
ewotICAgIEFTU0VSVCh3LT5ndGtXaWRnZXQoKSk7Ci0gICAgQVNTRVJUKG1fZGF0YS0+bGF5b3V0
KTsKKyAgICBjaGlsZC0+c2V0UGFyZW50KDApOworICAgIG1fZGF0YS0+Y2hpbGRyZW4ucmVtb3Zl
KGNoaWxkKTsKIAotICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9kYXRh
LT5sYXlvdXQpLCB3LT5ndGtXaWRnZXQoKSk7CisgICAgaWYgKGNoaWxkLT5pbnRlcm5hbEd0a1dp
ZGdldCgpICYmIEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKSA9PSBHVEtfV0lER0VUKGNo
aWxkLT5pbnRlcm5hbEd0a1dpZGdldCgpKS0+cGFyZW50KQorICAgICAgICBndGtfY29udGFpbmVy
X3JlbW92ZShHVEtfQ09OVEFJTkVSKGNvbnRhaW5pbmdXaW5kb3coKSksIGNoaWxkLT5pbnRlcm5h
bEd0a1dpZGdldCgpKTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxSZWN0SW50b1ZpZXdS
ZWN1cnNpdmVseShjb25zdCBJbnRSZWN0JikKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUmVjdElu
dG9WaWV3UmVjdXJzaXZlbHkoY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIEludFBvaW50IHAobWF4KDAsIHIueCgpKSwgbWF4KDAsIHIueSgpKSk7CisgICAg
U2Nyb2xsVmlldyogdmlldyA9IHRoaXM7CisgICAgd2hpbGUgKHZpZXcpIHsKKyAgICAgICAgdmll
dy0+c2V0Q29udGVudHNQb3MocC54KCksIHAueSgpKTsKKyAgICAgICAgcC5tb3ZlKHZpZXctPngo
KSAtIHZpZXctPnNjcm9sbE9mZnNldCgpLndpZHRoKCksIHZpZXctPnkoKSAtIHZpZXctPnNjcm9s
bE9mZnNldCgpLmhlaWdodCgpKTsKKyAgICAgICAgdmlldyA9IHN0YXRpY19jYXN0PFNjcm9sbFZp
ZXcqPih2aWV3LT5wYXJlbnQoKSk7CisgICAgfQogfQogCiBib29sIFNjcm9sbFZpZXc6OmluV2lu
ZG93KCkgY29uc3QKQEAgLTI4Niw0OCArNDkyLDM2MCBAQCBib29sIFNjcm9sbFZpZXc6OmluV2lu
ZG93KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp3aGVl
bEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYpCit2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQo
UGxhdGZvcm1XaGVlbEV2ZW50JiBlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8g
RGV0ZXJtaW5lIGhvdyBtdWNoIHdlIHdhbnQgdG8gc2Nyb2xsLiAgSWYgd2UgY2FuIG1vdmUgYXQg
YWxsLCB3ZSB3aWxsIGFjY2VwdCB0aGUgZXZlbnQuCisgICAgSW50U2l6ZSBtYXhTY3JvbGxEZWx0
YSA9IG1heGltdW1TY3JvbGwoKTsKKyAgICBpZiAoKGUuZGVsdGFYKCkgPCAwICYmIG1heFNjcm9s
bERlbHRhLndpZHRoKCkgPiAwKSB8fAorICAgICAgICAoZS5kZWx0YVgoKSA+IDAgJiYgc2Nyb2xs
T2Zmc2V0KCkud2lkdGgoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpIDwgMCAmJiBtYXhT
Y3JvbGxEZWx0YS5oZWlnaHQoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpID4gMCAmJiBz
Y3JvbGxPZmZzZXQoKS5oZWlnaHQoKSA+IDApKQorICAgICAgICBlLmFjY2VwdCgpOworCisgICAg
c2Nyb2xsQnkoc3RhdGljX2Nhc3Q8aW50PihlLmRlbHRhWCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihl
LmRlbHRhWSgpKSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCit2
b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9m
ZnNldCkKIHsKLSAgICBHdGtBZGp1c3RtZW50KiBoYWRqID0gZ3RrX2xheW91dF9nZXRfaGFkanVz
dG1lbnQobV9kYXRhLT5sYXlvdXQpOwotICAgIEd0a0FkanVzdG1lbnQqIHZhZGogPSBndGtfbGF5
b3V0X2dldF92YWRqdXN0bWVudChtX2RhdGEtPmxheW91dCk7CisgICAgLy8gRG9uJ3QgYWxsb3cg
cmUtZW50cmFuY3kgaW50byB0aGlzIGZ1bmN0aW9uLgorICAgIGlmIChtX2RhdGEtPmluVXBkYXRl
U2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgZ19yZXR1cm5faWZfZmFpbChoYWRq
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhZGopOwotICAgIAotICAgIGhhZGotPnBhZ2Vfc2l6
ZSA9IHZpc2libGVXaWR0aCgpOwotICAgIGhhZGotPnN0ZXBfaW5jcmVtZW50ID0gMTM7CisgICAg
Ly8gRklYTUU6IFRoaXMgY29kZSBpcyBoZXJlIHNvIHdlIGRvbid0IGhhdmUgdG8gZm9yayBGcmFt
ZVZpZXcuaC8uY3BwLgorICAgIC8vIEluIHRoZSBlbmQsIEZyYW1lVmlldyBzaG91bGQganVzdCBt
ZXJnZSB3aXRoIFNjcm9sbFZpZXcuCisgICAgaWYgKHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmll
dyo+KHRoaXMpLT5mcmFtZSgpLT5wcm9oaWJpdHNTY3JvbGxpbmcoKSkKKyAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIHZhZGotPnBhZ2Vfc2l6ZSA9IHZpc2libGVIZWlnaHQoKTsKLSAgICB2YWRq
LT5zdGVwX2luY3JlbWVudCA9IDEzOworICAgIG1fZGF0YS0+aW5VcGRhdGVTY3JvbGxiYXJzID0g
dHJ1ZTsKKworICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBtX2RhdGEtPnZCYXI7Cisg
ICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gbV9kYXRhLT5oQmFyOworICAgIGJvb2wg
b2xkSGFzVmVydGljYWwgPSBoYXNWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBib29sIG9sZEhhc0hv
cml6b250YWwgPSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgIFNjcm9sbGJhck1vZGUgaFNj
cm9sbCA9IG1fZGF0YS0+aFNjcm9sbGJhck1vZGU7CisgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xs
ID0gbV9kYXRhLT52U2Nyb2xsYmFyTW9kZTsKICAgICAKLSAgICBndGtfYWRqdXN0bWVudF9jaGFu
Z2VkKGhhZGopOwotICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQoaGFkaik7CisgICAg
LyoKKyAgICAgKiBJdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hvIGlzIGdvaW5nIHRvIHJlbW92
ZSBzcGFjZSBmcm9tIG91ciB2aWV3cG9ydC4gRWl0aGVyCisgICAgICogd2UgZG8gaXQgYnkgY3Jl
YXRpbmcgYSBQbGF0Zm9ybVNjcm9sbGJhciBvciB0aGUgR3RrV2lkZ2V0IGVtYmVkZGluZyB1cyBp
cyBnb2luZyB0byBkbworICAgICAqIHRoYXQgYnkgY2FsbGluZyBzZXRGcmFtZUdlb21ldHJ5Lgor
ICAgICAqLworICAgIGNvbnN0IGludCBjVmVydGljYWxXaWR0aCA9IFBsYXRmb3JtU2Nyb2xsYmFy
Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CisgICAgY29uc3QgaW50IGNIb3Jpem9udGFsSGVp
Z2h0ID0gUGxhdGZvcm1TY3JvbGxiYXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKKwor
ICAgIGZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisgICAgICAgIGJvb2wg
c2Nyb2xsc1ZlcnRpY2FsbHk7CisgICAgICAgIGJvb2wgc2Nyb2xsc0hvcml6b250YWxseTsKKwor
ICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgKGhTY3JvbGwgPT0g
U2Nyb2xsYmFyQXV0byB8fCB2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8pKSB7CisgICAgICAgICAg
ICAvLyBEbyBhIGxheW91dCBpZiBwZW5kaW5nIGJlZm9yZSBjaGVja2luZyBpZiBzY3JvbGxiYXJz
IGFyZSBuZWVkZWQuCisgICAgICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxiYXIgIT0gb2xk
SGFzVmVydGljYWwgfHwgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciAhPSBvbGRIYXNIb3Jpem9udGFs
KQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5sYXlvdXQo
KTsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5ID0gKHZTY3Jv
bGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYg
Y29udGVudHNIZWlnaHQoKSA+IGhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxzVmVy
dGljYWxseSkKKyAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0gKGhTY3JvbGwg
PT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYgY29u
dGVudHNXaWR0aCgpICsgY1ZlcnRpY2FsV2lkdGggPiB3aWR0aCgpKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBT
Y3JvbGxiYXJBbHdheXNPbikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50
c1dpZHRoKCkgPiB3aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsc0hvcml6b250
YWxseSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9
PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250
ZW50c0hlaWdodCgpICsgY0hvcml6b250YWxIZWlnaHQgPiBoZWlnaHQoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzY3JvbGxzSG9yaXpv
bnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykgPyBoYXNIb3Jpem9udGFsU2Nyb2xs
YmFyIDogKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pOworICAgICAgICAgICAgc2Nyb2xs
c1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvKSA/IGhhc1ZlcnRpY2FsU2Ny
b2xsYmFyIDogKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxiYXIgIT0gc2Nyb2xsc1ZlcnRpY2Fs
bHkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xs
c1ZlcnRpY2FsbHkpOworICAgICAgICAgICAgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxz
VmVydGljYWxseTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYXNIb3Jpem9udGFsU2Nyb2xs
YmFyICE9IHNjcm9sbHNIb3Jpem9udGFsbHkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFz
SG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxzSG9yaXpvbnRhbGx5KTsKKyAgICAgICAgICAgIGhh
c0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxzSG9yaXpvbnRhbGx5OworICAgICAgICB9Cisg
ICAgfQogICAgIAotICAgIGd0a19hZGp1c3RtZW50X2NoYW5nZWQodmFkaik7Ci0gICAgZ3RrX2Fk
anVzdG1lbnRfdmFsdWVfY2hhbmdlZCh2YWRqKTsKKyAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChh
bmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCisgICAgSW50U2l6ZSBtYXhTY3JvbGxQb3NpdGlvbihj
b250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSwgY29udGVudHNIZWlnaHQoKSAtIHZpc2li
bGVIZWlnaHQoKSk7CisgICAgSW50U2l6ZSBzY3JvbGwgPSBkZXNpcmVkT2Zmc2V0LnNocnVua1Rv
KG1heFNjcm9sbFBvc2l0aW9uKTsKKyAgICBzY3JvbGwuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwor
CisKKyAKKyAgICBpZiAobV9kYXRhLT5oQWRqKSB7CisgICAgICAgIG1fZGF0YS0+aEFkai0+cGFn
ZV9zaXplID0gdmlzaWJsZVdpZHRoKCk7CisgICAgICAgIG1fZGF0YS0+aEFkai0+c3RlcF9pbmNy
ZW1lbnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50OworICAgICAgICBtX2RhdGEtPmhBZGotPnVw
cGVyID0gY29udGVudHNXaWR0aCgpOworICAgICAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKG1f
ZGF0YS0+aEFkaik7CisKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0LndpZHRoKCkg
IT0gc2Nyb2xsLndpZHRoKCkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+aEFkai0+dmFsdWUgPSBz
Y3JvbGwud2lkdGgoKTsKKyAgICAgICAgICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQo
bV9kYXRhLT5oQWRqKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9kYXRhLT5oQmFyKSB7
CisgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHZpc2libGVXaWR0aCgpOworICAgICAgICBtX2Rh
dGEtPmhCYXItPnNldEVuYWJsZWQoY29udGVudHNXaWR0aCgpID4gY2xpZW50V2lkdGgpOworICAg
ICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50V2lkdGggLSBQQUdFX0tFRVApOworICAgICAgICBp
ZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudFdpZHRoOworICAgICAgICBJbnRSZWN0
IG9sZFJlY3QobV9kYXRhLT5oQmFyLT5mcmFtZUdlb21ldHJ5KCkpOworICAgICAgICBJbnRSZWN0
IGhCYXJSZWN0ID0gSW50UmVjdCgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWlnaHQoKSAtIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpZHRoKCkgLSAobV9kYXRhLT52QmFyID8gbV9kYXRhLT52QmFyLT53
aWR0aCgpIDogMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+
aEJhci0+aGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPmhCYXItPnNldFJlY3QoaEJhclJlY3Qp
OworICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAh
PSBtX2RhdGEtPmhCYXItPmZyYW1lR2VvbWV0cnkoKSkKKyAgICAgICAgICAgIG1fZGF0YS0+aEJh
ci0+aW52YWxpZGF0ZSgpOworCisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVz
c2VkKQorICAgICAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0
cnVlKTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdGVwcyhMSU5FX1NURVAsIHBhZ2VTdGVw
KTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBjb250
ZW50c1dpZHRoKCkpOworICAgICAgICBtX2RhdGEtPmhCYXItPnNldFZhbHVlKHNjcm9sbC53aWR0
aCgpKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpCisgICAgICAg
ICAgICBtX2RhdGEtPmhCYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsgCisgICAg
fSAKKworICAgIGlmIChtX2RhdGEtPnZBZGopIHsKKyAgICAgICAgbV9kYXRhLT52QWRqLT5wYWdl
X3NpemUgPSB2aXNpYmxlSGVpZ2h0KCk7CisgICAgICAgIG1fZGF0YS0+dkFkai0+c3RlcF9pbmNy
ZW1lbnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50OworICAgICAgICBtX2RhdGEtPnZBZGotPnVw
cGVyID0gY29udGVudHNIZWlnaHQoKTsKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRfY2hhbmdlZCht
X2RhdGEtPnZBZGopOworCisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbE9mZnNldC5oZWlnaHQo
KSAhPSBzY3JvbGwuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+dkFkai0+dmFsdWUg
PSBzY3JvbGwuaGVpZ2h0KCk7CisgICAgICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFu
Z2VkKG1fZGF0YS0+dkFkaik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fZGF0YS0+dkJh
cikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gdmlzaWJsZUhlaWdodCgpOworICAgICAg
ICBtX2RhdGEtPnZCYXItPnNldEVuYWJsZWQoY29udGVudHNIZWlnaHQoKSA+IGNsaWVudEhlaWdo
dCk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRIZWlnaHQgLSBQQUdFX0tFRVApOwor
ICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKKyAgICAg
ICAgSW50UmVjdCBvbGRSZWN0KG1fZGF0YS0+dkJhci0+ZnJhbWVHZW9tZXRyeSgpKTsKKyAgICAg
ICAgSW50UmVjdCB2QmFyUmVjdCA9IEludFJlY3Qod2lkdGgoKSAtIG1fZGF0YS0+dkJhci0+d2lk
dGgoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSAobV9kYXRhLT5oQmFyID8gbV9k
YXRhLT5oQmFyLT5oZWlnaHQoKSA6IDApKTsKKyAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRSZWN0
KHZCYXJSZWN0KTsKKyAgICAgICAgaWYgKCFtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkICYm
IG9sZFJlY3QgIT0gbV9kYXRhLT52QmFyLT5mcmFtZUdlb21ldHJ5KCkpCisgICAgICAgICAgICBt
X2RhdGEtPnZCYXItPmludmFsaWRhdGUoKTsKKworICAgICAgICBpZiAobV9kYXRhLT5zY3JvbGxi
YXJzU3VwcHJlc3NlZCkKKyAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0U3VwcHJlc3NJbnZh
bGlkYXRpb24odHJ1ZSk7CisgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0U3RlcHMoTElORV9TVEVQ
LCBwYWdlU3RlcCk7CisgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRI
ZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPnZCYXItPnNldFZhbHVl
KHNjcm9sbC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVz
c2VkKQorICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihm
YWxzZSk7CisgICAgfQogCi0gICAgbV9kYXRhLT5zY3JvbGxCYXJzTmVlZFVwZGF0ZSA9IGZhbHNl
OworICAgIGlmIChvbGRIYXNWZXJ0aWNhbCAhPSAobV9kYXRhLT52QmFyICE9IDApIHx8IG9sZEhh
c0hvcml6b250YWwgIT0gKG1fZGF0YS0+aEJhciAhPSAwKSkKKyAgICAgICAgZ2VvbWV0cnlDaGFu
Z2VkKCk7CisKKyAgICAvLyBTZWUgaWYgb3VyIG9mZnNldCBoYXMgY2hhbmdlZCBpbiBhIHNpdHVh
dGlvbiB3aGVyZSB3ZSBtaWdodCBub3QgaGF2ZSBzY3JvbGxiYXJzLgorICAgIC8vIFRoaXMgY2Fu
IGhhcHBlbiB3aGVuIGVkaXRpbmcgYSBib2R5IHdpdGggb3ZlcmZsb3c6aGlkZGVuIGFuZCBzY3Jv
bGxpbmcgdG8gcmV2ZWFsIHNlbGVjdGlvbi4KKyAgICAvLyBJdCBjYW4gYWxzbyBoYXBwZW4gd2hl
biBtYXhpbWl6aW5nIGEgd2luZG93IHRoYXQgaGFzIHNjcm9sbGJhcnMgKGJ1dCB0aGUgbmV3IG1h
eGltaXplZCByZXN1bHQKKyAgICAvLyBkb2VzIG5vdCkuCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0
YSA9IHNjcm9sbCAtIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OworICAgIGlmIChzY3JvbGxEZWx0YSAh
PSBJbnRTaXplKCkpIHsKKyAgICAgICBtX2RhdGEtPnNjcm9sbE9mZnNldCA9IHNjcm9sbDsKKyAg
ICAgICBtX2RhdGEtPnNjcm9sbEJhY2tpbmdTdG9yZShzY3JvbGxEZWx0YSk7CisgICAgfQorCisg
ICAgbV9kYXRhLT5pblVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZTsKIH0KIAotSW50UG9pbnQgU2Ny
b2xsVmlldzo6d2luZG93VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CitJ
bnRQb2ludCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiB3aW5k
b3dQb2ludCkgY29uc3QKIHsgCi0gICAgcmV0dXJuIHBvaW50OworICAgIEludFBvaW50IHZpZXdQ
b2ludCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dQb2ludCk7CisgICAgcmV0
dXJuIHZpZXdQb2ludCArIHNjcm9sbE9mZnNldCgpOwogfQogCi1JbnRQb2ludCBTY3JvbGxWaWV3
Ojpjb250ZW50c1RvV2luZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK0ludFBvaW50
IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3coY29uc3QgSW50UG9pbnQmIGNvbnRlbnRzUG9p
bnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHBvaW50OworICAgIEludFBvaW50IHZpZXdQb2ludCA9
IGNvbnRlbnRzUG9pbnQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICByZXR1cm4gY29udmVydFRvQ29u
dGFpbmluZ1dpbmRvdyh2aWV3UG9pbnQpOyAgCiB9CiAKIFBsYXRmb3JtU2Nyb2xsYmFyKiBTY3Jv
bGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91
c2VFdmVudCkKIHsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBJbnRQb2ludCB2aWV3UG9p
bnQgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cobW91c2VFdmVudC5wb3MoKSk7CisgICAg
aWYgKG1fZGF0YS0+aEJhciAmJiBtX2RhdGEtPmhCYXItPmZyYW1lR2VvbWV0cnkoKS5jb250YWlu
cyh2aWV3UG9pbnQpKQorICAgICAgICByZXR1cm4gbV9kYXRhLT5oQmFyLmdldCgpOworICAgIGlm
IChtX2RhdGEtPnZCYXIgJiYgbV9kYXRhLT52QmFyLT5mcmFtZUdlb21ldHJ5KCkuY29udGFpbnMo
dmlld1BvaW50KSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dkJhci5nZXQoKTsKICAgICByZXR1
cm4gMDsKIH0KIAorSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udmVydENoaWxkVG9TZWxmKGNvbnN0
IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQ
b2ludCBuZXdQb2ludCA9IHBvaW50OworICAgIGlmIChjaGlsZCAhPSBtX2RhdGEtPmhCYXIgJiYg
Y2hpbGQgIT0gbV9kYXRhLT52QmFyKQorICAgICAgICBuZXdQb2ludCA9IHBvaW50IC0gc2Nyb2xs
T2Zmc2V0KCk7CisgICAgcmV0dXJuIFdpZGdldDo6Y29udmVydENoaWxkVG9TZWxmKGNoaWxkLCBu
ZXdQb2ludCk7Cit9CisKK0ludFBvaW50IFNjcm9sbFZpZXc6OmNvbnZlcnRTZWxmVG9DaGlsZChj
b25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAg
SW50UG9pbnQgbmV3UG9pbnQgPSBwb2ludDsKKyAgICBpZiAoY2hpbGQgIT0gbV9kYXRhLT5oQmFy
ICYmIGNoaWxkICE9IG1fZGF0YS0+dkJhcikKKyAgICAgICAgbmV3UG9pbnQgPSBwb2ludCArIHNj
cm9sbE9mZnNldCgpOworICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRTZWxmVG9DaGlsZChjaGls
ZCwgbmV3UG9pbnQpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBj
b2RlIGlzIGhlcmUgc28gd2UgZG9uJ3QgaGF2ZSB0byBmb3JrIEZyYW1lVmlldy5oLy5jcHAuCisg
ICAgLy8gSW4gdGhlIGVuZCwgRnJhbWVWaWV3IHNob3VsZCBqdXN0IG1lcmdlIHdpdGggU2Nyb2xs
Vmlldy4KKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CisKKyAgICBpZiAoY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IGRvY3VtZW50
RGlydHlSZWN0ID0gcmVjdDsKKyAgICBkb2N1bWVudERpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVH
ZW9tZXRyeSgpKTsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKworICAgIGNvbnRleHQtPnRyYW5z
bGF0ZSh4KCksIHkoKSk7CisgICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZSgteCgpLCAteSgpKTsK
KworICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtY29udGVudHNYKCksIC1jb250ZW50c1koKSk7Cisg
ICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZShjb250ZW50c1goKSwgY29udGVudHNZKCkpOworCisg
ICAgY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCgpKSk7
CisgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcyktPmZyYW1lKCktPnBhaW50
KGNvbnRleHQsIGRvY3VtZW50RGlydHlSZWN0KTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisK
KyAgICAvLyBOb3cgcGFpbnQgdGhlIHNjcm9sbGJhcnMuCisgICAgaWYgKCFtX2RhdGEtPnNjcm9s
bGJhcnNTdXBwcmVzc2VkICYmIChtX2RhdGEtPmhCYXIgfHwgbV9kYXRhLT52QmFyKSkgeworICAg
ICAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsVmlld0RpcnR5UmVj
dCA9IHJlY3Q7CisgICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QuaW50ZXJzZWN0KGZyYW1lR2Vv
bWV0cnkoKSk7CisgICAgICAgIC8qCisgICAgICAgICAqIFdlIGRvbid0IG5lZWQgdG8gdHJhbnNs
YXRlIHRoZSBjb250ZXh0IGFzIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRSZWN0IG1ha2VzIHN1cmUg
dGhlIHNjcm9sbGJhcgorICAgICAgICAgKiBpcyBhdCB0aGUgcmlnaHQgc3BvdC4KKyAgICAgICAg
ICovCisgICAgICAgIGlmIChtX2RhdGEtPmhCYXIpCisgICAgICAgICAgICBtX2RhdGEtPmhCYXIt
PnBhaW50KGNvbnRleHQsIHNjcm9sbFZpZXdEaXJ0eVJlY3QpOworICAgICAgICBpZiAobV9kYXRh
LT52QmFyKQorICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5wYWludChjb250ZXh0LCBzY3JvbGxW
aWV3RGlydHlSZWN0KTsKKworICAgICAgICAvKgorICAgICAgICAgKiBGSVhNRTogVE9ETzogQ2hl
Y2sgaWYgdGhhdCB3b3JrcyB3aXRoIFJUTAorICAgICAgICAgKi8KKyAgICAgICAgY29udGV4dC0+
dHJhbnNsYXRlKHgoKSwgeSgpKTsKKyAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5tb3ZlKC14
KCksIC15KCkpOworICAgICAgICAvLyBGaWxsIHRoZSBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUu
CisgICAgICAgIEludFJlY3QgaENvcm5lcjsKKyAgICAgICAgaWYgKG1fZGF0YS0+aEJhciAmJiB3
aWR0aCgpIC0gbV9kYXRhLT5oQmFyLT53aWR0aCgpID4gMCkgeworICAgICAgICAgICAgaENvcm5l
ciA9IEludFJlY3QobV9kYXRhLT5oQmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVpZ2h0KCkgLSBtX2RhdGEtPmhCYXItPmhlaWdodCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIG1fZGF0YS0+aEJhci0+d2lkdGgoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCkpOworICAgICAg
ICAgICAgaWYgKGhDb3JuZXIuaW50ZXJzZWN0cyhzY3JvbGxWaWV3RGlydHlSZWN0KSkKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChoQ29ybmVyLCBDb2xvcjo6d2hpdGUpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fZGF0YS0+dkJhciAmJiBoZWlnaHQoKSAtIG1fZGF0YS0+
dkJhci0+aGVpZ2h0KCkgPiAwKSB7CisgICAgICAgICAgICBJbnRSZWN0IHZDb3JuZXIod2lkdGgo
KSAtIG1fZGF0YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2RhdGEtPnZCYXItPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0
YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAt
IG1fZGF0YS0+dkJhci0+aGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKHZDb3JuZXIgIT0gaENv
cm5lciAmJiB2Q29ybmVyLmludGVyc2VjdHMoc2Nyb2xsVmlld0RpcnR5UmVjdCkpCisgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QodkNvcm5lciwgQ29sb3I6OndoaXRlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9Cit9CisKKy8qCisgKiB1
cGRhdGUgY2hpbGRyZW4gYnV0IG5vciBvdXIgc2Nyb2xsYmFycy4gVGhleSBzaG91bGQgbm90IHNj
cm9sbCB3aGVuCisgKiB3ZSBzY3JvbGwgb3VyIGNvbnRlbnQuCisgKi8KK3ZvaWQgU2Nyb2xsVmll
dzo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFdpZGdldCo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX2RhdGEtPmNoaWxkcmVuLmVuZCgpOworICAgIGZvciAoSGFzaFNl
dDxXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IG1fZGF0YS0+Y2hpbGRyZW4uYmVn
aW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKKyAgICAgICAgKCpjdXJyZW50KS0+Z2Vv
bWV0cnlDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIGlm
ICAoKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93bikgJiYg
bV9kYXRhLT52QmFyKQorICAgICAgICBtX2RhdGEtPnZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5KTsKKyAgICBlbHNlIGlmIChtX2RhdGEtPmhCYXIpCisgICAgICAgIG1fZGF0YS0+
aEJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworfQorCitJbnRSZWN0IFNjcm9s
bFZpZXc6OndpbmRvd1Jlc2l6ZXJSZWN0KCkKK3sKKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7
CisgICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxjb25zdCBGcmFt
ZVZpZXcqPih0aGlzKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWVWaWV3LT5mcmFtZSgpID8gZnJh
bWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gcGFnZS0+Y2hyb21lKCktPndpbmRvd1Jlc2l6ZXJS
ZWN0KCk7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cmVzaXplck92ZXJsYXBzQ29udGVudCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtX2RhdGEtPnNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXI7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6YWRqdXN0T3ZlcmxhcHBpbmdTY3JvbGxiYXJDb3VudChpbnQg
b3ZlcmxhcERlbHRhKQoreworICAgIGludCBvbGRDb3VudCA9IG1fZGF0YS0+c2Nyb2xsYmFyc0F2
b2lkaW5nUmVzaXplcjsKKyAgICBtX2RhdGEtPnNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXIgKz0g
b3ZlcmxhcERlbHRhOworICAgIGlmIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNGcmFtZVZpZXco
KSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5hZGp1c3RPdmVy
bGFwcGluZ1Njcm9sbGJhckNvdW50KG92ZXJsYXBEZWx0YSk7CisgICAgZWxzZSBpZiAoIW1fZGF0
YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpIHsKKyAgICAgICAgLy8gSWYgd2Ugd2VudCBmcm9tIG4g
dG8gMCBvciBmcm9tIDAgdG8gbiBhbmQgd2UncmUgdGhlIG91dGVybW9zdCB2aWV3LAorICAgICAg
ICAvLyB3ZSBuZWVkIHRvIGludmFsaWRhdGUgdGhlIHdpbmRvd1Jlc2l6ZXJSZWN0KCksIHNpbmNl
IGl0IHdpbGwgbm93IG5lZWQgdG8gcGFpbnQKKyAgICAgICAgLy8gZGlmZmVyZW50bHkuCisgICAg
ICAgIGlmIChvbGRDb3VudCA+IDAgJiYgbV9kYXRhLT5zY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVy
ID09IDAgfHwKKyAgICAgICAgICAgIG9sZENvdW50ID09IDAgJiYgbV9kYXRhLT5zY3JvbGxiYXJz
QXZvaWRpbmdSZXNpemVyID4gMCkKKyAgICAgICAgICAgIGludmFsaWRhdGVSZWN0KHdpbmRvd1Jl
c2l6ZXJSZWN0KCkpOworICAgIH0KK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogcGFyZW50VmlldykKK3sKKyAgICBpZiAoIXBhcmVudFZpZXcgJiYgbV9kYXRhLT5z
Y3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyICYmIHBhcmVudCgpICYmIHBhcmVudCgpLT5pc0ZyYW1l
VmlldygpKQorICAgICAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmFkanVz
dE92ZXJsYXBwaW5nU2Nyb2xsYmFyQ291bnQoZmFsc2UpOworICAgIFdpZGdldDo6c2V0UGFyZW50
KHBhcmVudFZpZXcpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OmFkZFRvRGlydHlSZWdpb24oY29u
c3QgSW50UmVjdCYgY29udGFpbmluZ1dpbmRvd1JlY3QpCit7CisgICAgQVNTRVJUKGlzRnJhbWVW
aWV3KCkpOworICAgIGNvbnN0IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRnJhbWVWaWV3Kj4odGhpcyk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUo
KSA/IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpIDogMDsKKyAgICBpZiAoIXBhZ2UpCisgICAg
ICAgIHJldHVybjsKKyAgICBwYWdlLT5jaHJvbWUoKS0+YWRkVG9EaXJ0eVJlZ2lvbihjb250YWlu
aW5nV2luZG93UmVjdCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQmFja2luZ1N0b3Jl
KGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50
UmVjdCYgY2xpcFJlY3QpCit7CisgICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOworICAgIGNvbnN0
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhp
cyk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmlldy0+ZnJh
bWUoKS0+cGFnZSgpIDogMDsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBw
YWdlLT5jaHJvbWUoKS0+c2Nyb2xsQmFja2luZ1N0b3JlKGR4LCBkeSwgc2Nyb2xsVmlld1JlY3Qs
IGNsaXBSZWN0KTsKK30KKwordm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUoKQor
eworICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKKyAgICBjb25zdCBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHRoaXMpOworICAgIFBhZ2UqIHBh
Z2UgPSBmcmFtZVZpZXctPmZyYW1lKCkgPyBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKSA6IDA7
CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgcGFnZS0+Y2hyb21lKCktPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNiBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCiAj
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnRHZGsuaCIKQEAgLTE2Myw3ICsxNjIsNiBAQCBTdHJpbmcgRmlsZUNob29zZXI6
OmJhc2VuYW1lRm9yV2lkdGgoY29uCiBDb2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsg
cmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFu
Z2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KIAotdm9pZCBGcmFtZTo6c2V0TmVlZHNSZWFwcGx5
U3R5bGVzKCkgeyB9CiAKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJl
c291cmNlUmVxdWVzdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiBib29s
IFJlc291cmNlSGFuZGxlOjpsb2Fkc0Jsb2NrZWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBmYWxzZTsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAJKHJl
dmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDI3ICszMiwyNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50KiBldmVu
dCkKK1BsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xs
KiBldmVudCkKIHsKICAgICBtX2RlbHRhWCA9IDA7CiAgICAgbV9kZWx0YVkgPSAwOwogCi0gICAg
aWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfVVApCisgICAgaWYgKGV2
ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9VUCkKICAgICAgICAgbV9kZWx0YVkgPSAtMTIw
OwotICAgIGVsc2UgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfTEVG
VCkKKyAgICBlbHNlIGlmIChldmVudC0+ZGlyZWN0aW9uID09IEdES19TQ1JPTExfTEVGVCkKICAg
ICAgICAgbV9kZWx0YVggPSAtMTIwOwotICAgIGVsc2UgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0
aW9uID09IEdES19TQ1JPTExfUklHSFQpCisgICAgZWxzZSBpZiAoZXZlbnQtPmRpcmVjdGlvbiA9
PSBHREtfU0NST0xMX1JJR0hUKQogICAgICAgICBtX2RlbHRhWCA9IDEyMDsKICAgICBlbHNlCiAg
ICAgICAgIG1fZGVsdGFZID0gMTIwOwogCi0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQp
ZXZlbnQtPnNjcm9sbC54LCAoaW50KWV2ZW50LT5zY3JvbGwueSk7Ci0gICAgbV9nbG9iYWxQb3Np
dGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPnNjcm9sbC54X3Jvb3QsIChpbnQpZXZlbnQtPnNj
cm9sbC55X3Jvb3QpOworICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54LCAo
aW50KWV2ZW50LT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVu
dC0+eF9yb290LCAoaW50KWV2ZW50LT55X3Jvb3QpOwogICAgIG1faXNBY2NlcHRlZCA9IGZhbHNl
OwotICAgIG1fc2hpZnRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX1NISUZUX01BU0s7
Ci0gICAgbV9jdHJsS2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19DT05UUk9MX01BU0s7
Ci0gICAgbV9hbHRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDFfTUFTSzsKLSAg
ICBtX21ldGFLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDJfTUFTSzsKKyAgICBt
X3NoaWZ0S2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0s7CisgICAgbV9jdHJsS2V5
ID0gZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKKyAgICBtX2FsdEtleSA9IGV2ZW50
LT5zdGF0ZSAmIEdES19NT0QxX01BU0s7CisgICAgbV9tZXRhS2V5ID0gZXZlbnQtPnN0YXRlICYg
R0RLX01PRDJfTUFTSzsKICAgICBtX2lzQ29udGludW91cyA9IGZhbHNlOwogfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tIAogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMzEsMTEgKzMxLDEyIEBA
CiAKICNpbmNsdWRlICJDdXJzb3IuaCIKICNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRnJh
bWVHZGsuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCiAK
ICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgpAQCAtNDcsOCArNDgs
MTkgQEAgcHVibGljOgogICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZTsKICAgICBHdGtXaWRnZXQq
IHdpZGdldDsKICAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKLSAgICBJbnRSZWN0IGdlb21ldHJ5
OwotICAgIEZvbnQgZm9udDsKKyAgICBJbnRSZWN0IGZyYW1lUmVjdDsKKworICAgIFNjcm9sbFZp
ZXcqIHBhcmVudDsKKyAgICBXZWJLaXRHdGtQYWdlKiBjb250YWluaW5nV2luZG93OworICAgIGJv
b2wgc3VwcHJlc3NJbnZhbGlkYXRpb247CisgICAgYm9vbCBpc1Njcm9sbFZpZXdDb250cm9sOwor
CisgICAgR2RrRHJhd2FibGUqIGdka0RyYXdhYmxlKCkKKyAgICB7CisgICAgICAgIGlmICghZHJh
d2FibGUgJiYgd2lkZ2V0KQorICAgICAgICAgICAgZHJhd2FibGUgPSB3aWRnZXQtPndpbmRvdzsK
KyAgICAgICAgcmV0dXJuIGRyYXdhYmxlOworICAgIH0KIH07CiAKIFdpZGdldDo6V2lkZ2V0KCkK
QEAgLTU2LDI3ICs2OCwyMCBAQCBXaWRnZXQ6OldpZGdldCgpCiB7CiAgICAgZGF0YS0+ZHJhd2Fi
bGUgPSAwOwogICAgIGRhdGEtPndpZGdldCA9IDA7CisgICAgZGF0YS0+Y2xpZW50ID0gMDsKKyAg
ICBkYXRhLT5wYXJlbnQgPSAwOworICAgIGRhdGEtPmNvbnRhaW5pbmdXaW5kb3cgPSAwOworICAg
IGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uID0gZmFsc2U7CisgICAgZGF0YS0+aXNTY3JvbGxW
aWV3Q29udHJvbCA9IGZhbHNlOwogfQogCi1XaWRnZXQ6OldpZGdldChHdGtXaWRnZXQqIHdpZGdl
dCkKLSAgICA6IGRhdGEobmV3IFdpZGdldFByaXZhdGUpCi17Ci0gICAgc2V0R3RrV2lkZ2V0KHdp
ZGdldCk7Ci19Ci0KLUdka0RyYXdhYmxlKiBXaWRnZXQ6Omdka0RyYXdhYmxlKCkgY29uc3QKLXsK
LSAgICBpZiAoIWRhdGEtPmRyYXdhYmxlICYmIGRhdGEtPndpZGdldCkKLSAgICAgICAgZGF0YS0+
ZHJhd2FibGUgPSBHVEtfSVNfTEFZT1VUKGRhdGEtPndpZGdldCkgPyBHVEtfTEFZT1VUKGRhdGEt
PndpZGdldCktPmJpbl93aW5kb3cgOiBkYXRhLT53aWRnZXQtPndpbmRvdzsKLSAgICByZXR1cm4g
ZGF0YS0+ZHJhd2FibGU7Ci19CiAKLUd0a1dpZGdldCogV2lkZ2V0OjpndGtXaWRnZXQoKSBjb25z
dAorR3RrV2lkZ2V0KiBXaWRnZXQ6OmludGVybmFsR3RrV2lkZ2V0KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gZGF0YS0+d2lkZ2V0OwogfQogCi12b2lkIFdpZGdldDo6c2V0R3RrV2lkZ2V0KEd0a1dp
ZGdldCogd2lkZ2V0KQordm9pZCBXaWRnZXQ6OnNldEludGVybmFsR3RrV2lkZ2V0KEd0a1dpZGdl
dCogd2lkZ2V0KQogewogICAgIGRhdGEtPmRyYXdhYmxlID0gMDsKICAgICBkYXRhLT53aWRnZXQg
PSB3aWRnZXQ7CkBAIC04Nyw2ICs5MiwxNiBAQCBXaWRnZXQ6On5XaWRnZXQoKQogICAgIGRlbGV0
ZSBkYXRhOwogfQogCit2b2lkIFdpZGdldDo6c2V0Q29udGFpbmluZ1dpbmRvdyhXZWJLaXRHdGtQ
YWdlKiBjb250YWluaW5nV2luZG93KQoreworICAgIGRhdGEtPmNvbnRhaW5pbmdXaW5kb3cgPSBj
b250YWluaW5nV2luZG93OworfQorCitXZWJLaXRHdGtQYWdlKiBXaWRnZXQ6OmNvbnRhaW5pbmdX
aW5kb3coKSBjb25zdAoreworICAgIHJldHVybiBkYXRhLT5jb250YWluaW5nV2luZG93OworfQor
CiB2b2lkIFdpZGdldDo6c2V0Q2xpZW50KFdpZGdldENsaWVudCogYykKIHsKICAgICBkYXRhLT5j
bGllbnQgPSBjOwpAQCAtOTksMTUgKzExNCwyNyBAQCBXaWRnZXRDbGllbnQqIFdpZGdldDo6Y2xp
ZW50KCkgY29uc3QKIAogSW50UmVjdCBXaWRnZXQ6OmZyYW1lR2VvbWV0cnkoKSBjb25zdAogewot
ICAgIHJldHVybiBkYXRhLT5nZW9tZXRyeTsKKyAgICByZXR1cm4gZGF0YS0+ZnJhbWVSZWN0Owor
fQorCit2b2lkIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIGRhdGEtPmZyYW1lUmVjdCA9IHI7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogdikKK3sKKyAgICBkYXRhLT5wYXJlbnQgPSB2OworfQorCitTY3JvbGxWaWV3KiBX
aWRnZXQ6OnBhcmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPnBhcmVudDsKIH0KIAog
dm9pZCBXaWRnZXQ6OnNldEZvY3VzKCkKIHsKLSAgICBHdGtXaWRnZXQgKndpZGdldCA9IGRhdGEt
PndpZGdldDsKLSAgICBpZiAoIXdpZGdldCkKLSAgICAgICAgcmV0dXJuOwotICAgIGd0a193aWRn
ZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhpbnRlcm5h
bEd0a1dpZGdldCgpID8gaW50ZXJuYWxHdGtXaWRnZXQoKSA6IEdUS19XSURHRVQoY29udGFpbmlu
Z1dpbmRvdygpKSk7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBj
dXJzb3IpCkBAIC0xMTYsMzkgKzE0MywyMSBAQCB2b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0
IEN1cnNvciYgY3VyCiAgICAgaWYgKCFwY3VyKQogICAgICAgICByZXR1cm47CiAKLSAgICBHZGtE
cmF3YWJsZSogZHJhd2FibGUgPSBnZGtEcmF3YWJsZSgpOwotICAgIGlmICghZHJhd2FibGUgfHwg
IUdES19JU19XSU5ET1coZHJhd2FibGUpKQotICAgICAgICByZXR1cm47Ci0gICAgR2RrV2luZG93
KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93X3NldF9jdXJz
b3Iod2luZG93LCBwY3VyKTsKLQorICAgIGdka193aW5kb3dfc2V0X2N1cnNvcihkYXRhLT5nZGtE
cmF3YWJsZSgpID8gR0RLX1dJTkRPVyhkYXRhLT5nZGtEcmF3YWJsZSgpKSA6IGNvbnRhaW5pbmdX
aW5kb3coKS0+YmluX3dpbmRvdywgcGN1cik7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzaG93KCkKIHsK
LSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBnZGtEcmF3YWJsZSgpOwotICAgIGlmICghZHJh
d2FibGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUpKQorICAgIGlmICghaW50ZXJuYWxHdGtX
aWRnZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEdka1dpbmRvdyogd2luZG93ID0gR0RLX1dJ
TkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19zaG93KHdpbmRvdyk7CisgICAgZ3RrX3dp
ZGdldF9zaG93KGludGVybmFsR3RrV2lkZ2V0KCkpOwogfQogCiB2b2lkIFdpZGdldDo6aGlkZSgp
CiB7Ci0gICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlID0gZ2RrRHJhd2FibGUoKTsKLSAgICBpZiAo
IWRyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdhYmxlKSkKKyAgICBpZiAoIWludGVybmFs
R3RrV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdE
S19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfaGlkZSh3aW5kb3cpOwotfQotCi12
b2lkIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQotewotICAgIGRh
dGEtPmdlb21ldHJ5ID0gcjsKLSAgICBnX3JldHVybl9pZl9mYWlsKGRhdGEtPndpZGdldCk7Ci0K
LSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHIueCgpLCByLnkoKSwgci53aWR0aCgp
LCByLmhlaWdodCgpIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGRhdGEtPndpZGdl
dCwgJmFsbG9jYXRpb24pOworICAgIGd0a193aWRnZXRfaGlkZShpbnRlcm5hbEd0a1dpZGdldCgp
KTsKIH0KIAogdm9pZCBXaWRnZXQ6OnNldEVuYWJsZWQoYm9vbCkKQEAgLTE2NCwxMiArMTczLDM1
IEBAIGJvb2wgV2lkZ2V0Ojppc0VuYWJsZWQoKSBjb25zdAogCiB2b2lkIFdpZGdldDo6cmVtb3Zl
RnJvbVBhcmVudCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAocGFyZW50KCkp
CisgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZCh0aGlzKTsKIH0KIAotdm9pZCBXaWRnZXQ6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIEludFJlY3QgY29uc3QmKQorLyoKKyAqIHNpbWlsaWFy
IHRvIGd0a19jb250YWluZXJfcHJvcGFnYXRlX2V4cG9zZSwgd2Ugd2FudCB0byBtYWtlIHN1cmUK
KyAqIGludGVybmFsR3RrV2lkZ2V0KCkgaXMgcGFpbnRlZCBub3cuCisgKgorICogVE9ETzogd2Ug
bWlnaHQgd2FudCB0byBob25vciB0aGUgdHJhbnNsYXRpb24gb2YgdGhlIGNvbnRleHQgYW5kIG1h
bmlwdWxhdGUKKyAqIGFsbG9jYXRpb24ueCBhbmQgYWxsb2NhdGlvbi55IGJlZm9yZSBkcmF3aW5n
LiBUaGlzIGhhcyBwb3RlbnRpYWwgdG8gcmVtb3ZlCisgKiB0aGUgc2V0U2Nyb2xsVmlld0NvbnRy
b2wgbWV0aG9kLgorICovCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICgh
aW50ZXJuYWxHdGtXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR2RrRXZlbnQqIGV2
ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfRVhQT1NFKTsKKyAgICBldmVudC0+ZXhwb3NlID0gKmNv
bnRleHQtPmdka0V4cG9zZUV2ZW50KCk7CisgICAgZXZlbnQtPmV4cG9zZS5yZWdpb24gPSBndGtf
d2lkZ2V0X3JlZ2lvbl9pbnRlcnNlY3QoaW50ZXJuYWxHdGtXaWRnZXQoKSwgZXZlbnQtPmV4cG9z
ZS5yZWdpb24pOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+ZXhwb3NlLndpbmRvdyk7CisKKyAg
ICBpZiAoIWdka19yZWdpb25fZW1wdHkoZXZlbnQtPmV4cG9zZS5yZWdpb24pKSB7CisgICAgICAg
IGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdpb24sICZldmVudC0+ZXhw
b3NlLmFyZWEpOworICAgICAgICBndGtfd2lkZ2V0X3NlbmRfZXhwb3NlKGludGVybmFsR3RrV2lk
Z2V0KCksIGV2ZW50KTsKKyAgICB9CisKKyAgICBndGtfd2lkZ2V0X3NlbmRfZXhwb3NlKGludGVy
bmFsR3RrV2lkZ2V0KCksIGV2ZW50KTsKKyAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7CiB9CiAK
IHZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpCkBAIC0xNzksMTUgKzIxMSwxMDAgQEAg
dm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKIAogdm9pZCBXaWRnZXQ6OmludmFsaWRh
dGUoKQogewotICAgIGlmIChkYXRhLT53aWRnZXQpCi0gICAgICAgIGd0a193aWRnZXRfcXVldWVf
ZHJhdyhkYXRhLT53aWRnZXQpOworICAgIGludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgd2lk
dGgoKSwgaGVpZ2h0KCkpKTsKK30KKwordm9pZCBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0
IEludFJlY3QmIHIpCit7CisgICAgaWYgKGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIXBhcmVudCgpKSB7CisgICAgICAgIGd0a193aWRnZXRf
cXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKSwgci54KCksIHIu
eSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLndpZHRoKCksIHIuaGVp
Z2h0KCkpOworICAgICAgICBpZiAoaXNGcmFtZVZpZXcoKSkKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEZyYW1lVmlldyo+KHRoaXMpLT5hZGRUb0RpcnR5UmVnaW9uKHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gR2V0IHRoZSByb290IHdpZGdldC4KKyAgICBTY3JvbGxWaWV3
KiBvdXRlcm1vc3RWaWV3ID0gcGFyZW50KCk7CisgICAgd2hpbGUgKG91dGVybW9zdFZpZXcgJiYg
b3V0ZXJtb3N0Vmlldy0+cGFyZW50KCkpCisgICAgICAgIG91dGVybW9zdFZpZXcgPSBvdXRlcm1v
c3RWaWV3LT5wYXJlbnQoKTsKKyAgICBpZiAoIW91dGVybW9zdFZpZXcpCisgICAgICAgIHJldHVy
bjsKKworICAgIEludFJlY3Qgd2luZG93UmVjdCA9IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3co
cik7CisgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChjb250YWluaW5n
V2luZG93KCkpLCB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2luZG93UmVjdC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdodCgp
KTsKKyAgICBvdXRlcm1vc3RWaWV3LT5hZGRUb0RpcnR5UmVnaW9uKHdpbmRvd1JlY3QpOworfQor
CitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gcG9pbnQ7Cisg
ICAgZm9yIChjb25zdCBXaWRnZXQgKnBhcmVudFdpZGdldCA9IHBhcmVudCgpLCAqY2hpbGRXaWRn
ZXQgPSB0aGlzOworICAgICAgICAgcGFyZW50V2lkZ2V0OworICAgICAgICAgY2hpbGRXaWRnZXQg
PSBwYXJlbnRXaWRnZXQsIHBhcmVudFdpZGdldCA9IHBhcmVudFdpZGdldC0+cGFyZW50KCkpCisg
ICAgICAgIHdpbmRvd1BvaW50ID0gcGFyZW50V2lkZ2V0LT5jb252ZXJ0Q2hpbGRUb1NlbGYoY2hp
bGRXaWRnZXQsIHdpbmRvd1BvaW50KTsKKyAgICByZXR1cm4gd2luZG93UG9pbnQ7Cit9CisKK0lu
dFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCB3aWRnZXRQb2ludCA9IHBvaW50OworICAg
IGZvciAoY29uc3QgV2lkZ2V0ICpwYXJlbnRXaWRnZXQgPSBwYXJlbnQoKSwgKmNoaWxkV2lkZ2V0
ID0gdGhpczsKKyAgICAgICAgIHBhcmVudFdpZGdldDsKKyAgICAgICAgIGNoaWxkV2lkZ2V0ID0g
cGFyZW50V2lkZ2V0LCBwYXJlbnRXaWRnZXQgPSBwYXJlbnRXaWRnZXQtPnBhcmVudCgpKQorICAg
ICAgICB3aWRnZXRQb2ludCA9IHBhcmVudFdpZGdldC0+Y29udmVydFNlbGZUb0NoaWxkKGNoaWxk
V2lkZ2V0LCB3aWRnZXRQb2ludCk7CisgICAgcmV0dXJuIHdpZGdldFBvaW50OworfQorCitJbnRS
ZWN0IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAoreworICAgIEludFJlY3QgY29udmVydGVkUmVjdCA9IHJlY3Q7CisgICAgY29udmVy
dGVkUmVjdC5zZXRMb2NhdGlvbihjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnZlcnRlZFJl
Y3QubG9jYXRpb24oKSkpOworICAgIHJldHVybiBjb252ZXJ0ZWRSZWN0OwogfQogCi12b2lkIFdp
ZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK0ludFBvaW50IFdpZGdl
dDo6Y29udmVydENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKIHsKLSAgICBpZiAoZGF0YS0+d2lkZ2V0KQotICAgICAgICBndGtfd2lk
Z2V0X3F1ZXVlX2RyYXdfYXJlYShkYXRhLT53aWRnZXQsIHJlY3QueCgpLCByZWN0LnkoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpICsgY2hpbGQtPngoKSwgcG9pbnQu
eSgpICsgY2hpbGQtPnkoKSk7CiB9CiAKK0ludFBvaW50IFdpZGdldDo6Y29udmVydFNlbGZUb0No
aWxkKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sK
KyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpIC0gY2hpbGQtPngoKSwgcG9pbnQueSgpIC0g
Y2hpbGQtPnkoKSk7Cit9CisKK2Jvb2wgV2lkZ2V0OjpzdXBwcmVzc0ludmFsaWRhdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uOworfQorCit2b2lk
IFdpZGdldDo6c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vbCBzdXBwcmVzcykKK3sKKyAgICBk
YXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbiA9IHN1cHByZXNzOworfQorCit2b2lkIFdpZGdldDo6
Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIWludGVybmFsR3RrV2lkZ2V0KCkg
fHwgIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlz
RnJhbWVWaWV3KCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnQoKSk7CisgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gZGF0YS0+aXNT
Y3JvbGxWaWV3Q29udHJvbCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJl
Y3QoZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5s
b2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNpemUoKSkgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZUdl
b21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXplKCkpOworCisgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCks
IHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShkYXRhLT53aWRnZXQsICZhbGxvY2F0aW9uKTsKK30KKwordm9pZCBX
aWRnZXQ6OnNldFNjcm9sbFZpZXdDb250cm9sKCkKK3sKKyAgICBkYXRhLT5pc1Njcm9sbFZpZXdD
b250cm9sID0gdHJ1ZTsKK30KIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBA
IHR5cGVkZWYgdm9pZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oR0RLKQordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50RXhwb3NlIEdka0V2ZW50RXhwb3Nl
OwogdHlwZWRlZiBzdHJ1Y3QgX0dka0RyYXdhYmxlIEdka0RyYXdhYmxlOwogI2VuZGlmCiAKQEAg
LTIwOCw4ICsyMDksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShHREspCi0gICAgICAgIHZvaWQgc2V0R2RrRHJhd2FibGUoR2RrRHJhd2FibGUqKTsKLSAg
ICAgICAgR2RrRHJhd2FibGUgKmdka0RyYXdhYmxlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0
R2RrRXhwb3NlRXZlbnQoR2RrRXZlbnRFeHBvc2UqKTsKKyAgICAgICAgR2RrRHJhd2FibGUqIGdk
a0RyYXdhYmxlKCkgY29uc3Q7CisgICAgICAgIEdka0V2ZW50RXhwb3NlKiBnZGtFeHBvc2VFdmVu
dCgpIGNvbnN0OworICAgICAgICBJbnRQb2ludCB0cmFuc2xhdGVQb2ludChjb25zdCBJbnRQb2lu
dCYpOwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlz
aW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgog
ICAgIFZlY3RvcjxmbG9hdD4gbGF5ZXJzOwogCiAjaWYgUExBVEZPUk0oR0RLKQotICAgIEdka0Ry
YXdhYmxlICpkcmF3YWJsZTsKKyAgICBHZGtFdmVudEV4cG9zZSAqZXhwb3NlOwogI2VuZGlmCiB9
OwogCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUmVjdFNvdXJjZU92
ZXIoY2EKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKCkKICAgICA6ICBjcigwKQogI2lmIFBMQVRGT1JNKEdESykKLSAgICAsIGRy
YXdhYmxlKDApCisgICAgLCBleHBvc2UoMCkKICNlbmRpZgogewogfQpAQCAtNzk4LDE0ICs3OTgs
MzAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjbwogfQogCiAjaWYg
UExBVEZPUk0oR0RLKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEdka0RyYXdhYmxlKEdka0Ry
YXdhYmxlKiBkcmF3YWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRHZGtFeHBvc2VFdmVu
dChHZGtFdmVudEV4cG9zZSogZXhwb3NlKQogewotICAgIG1fZGF0YS0+ZHJhd2FibGUgPSBkcmF3
YWJsZTsKKyAgICBtX2RhdGEtPmV4cG9zZSA9IGV4cG9zZTsKK30KKworR2RrRXZlbnRFeHBvc2Uq
IEdyYXBoaWNzQ29udGV4dDo6Z2RrRXhwb3NlRXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2RhdGEtPmV4cG9zZTsKIH0KIAogR2RrRHJhd2FibGUqIEdyYXBoaWNzQ29udGV4dDo6Z2RrRHJh
d2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEtPmRyYXdhYmxlOworICAgIHJldHVy
biBHREtfRFJBV0FCTEUobV9kYXRhLT5leHBvc2UtPndpbmRvdyk7Cit9CisKK0ludFBvaW50IEdy
YXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQorewor
ICAgIGNhaXJvX21hdHJpeF90IHRtOworICAgIGNhaXJvX2dldF9tYXRyaXgobV9kYXRhLT5jciwg
JnRtKTsKKyAgICBkb3VibGUgeCA9IHBvaW50LngoKTsKKyAgICBkb3VibGUgeSA9IHBvaW50Lnko
KTsKKworICAgIGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnQoJnRtLCAmeCwgJnkpOworICAg
IHJldHVybiBJbnRQb2ludCh4LHkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ2RrL0ltYWdlR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dkay9JbWFnZUdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw4ICszMCwxNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8Y2Fp
cm8uaD4KICAKLS8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0Ci1W
ZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKTsKKy8qCisgKiBU
T0RPOiBXZSBzaG91bGQgZm9sbG93IFF0IGFuZCBtb3ZlIHRoYXQgdG8gd2Via2l0Z3Rrc2V0dGlu
Z3MuCisgKiBGb3Igbm93IGl0IGlzIGNvcGllZCB0byB0aGUgZmlsZSBhY3R1YWxseSB1c2luZyB0
aGlzIG1ldGhvZC4KKyAqLworc3RhdGljIFZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJy
YXkoY29uc3QgY2hhciogcmVzb3VyY2VOYW1lKQoreyAgIAorICAgIFZlY3RvcjxjaGFyPiByZXNv
dXJjZTsKKyAgICAvL2lmIChzdHJjbXAocmVzb3VyY2VOYW1lLCJtaXNzaW5nSW1hZ2UiKSA9PSAw
KSB7CisgICAgLy99CisgICAgcmV0dXJuIHJlc291cmNlOworfQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKSW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5n
ZUxvZwkocmV2aXNpb24gMjQ3OTIpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjIgQEAKKzIwMDctMDctMzEgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
ICA8emVja2VAc2VsZmlzaC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTWFrZSBXZWJLaXRHdGtQYWdlIGEgdHJ1ZSBHdGtDb250YWluZXIgd2l0
aG91dCBpbmhlcml0aW5nIEd0a0xheW91dC4gSXQgd2lsbAorICAgICAgICBoYW5kbGUgYW5kIGRp
c3BhdGNoIHRoZSBldmVudHMgaW5jbHVkaW5nIGNvbnRhaW5lciBhZGQgYW5kIHJlbW92ZSwgZXhw
b3NpbmcKKyAgICAgICAgYW5kIG1vdmluZyB0aGUgbW91c2UuCisKKyAgICAgICAgSXQgaW1wbGVt
ZW50cyB0aGUgR3RrKyAncHJvdG9jb2wnIGZvciBzY3JvbGxhYmxlIGNvbnRlbnQgYW5kIHRoZSBz
ZXQgR3RrQWRqdXN0bWVudAorICAgICAgICBnZXQgcGFzc2VkIHRvIHRoZSBGcmFtZVZpZXcgb2Yg
dGhlIG1haW4gZnJhbWUuCisKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0ay1tYXJzaGFsLmxp
c3Q6CisgICAgICAgICogZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5jcHA6CisgICAgICAgICogZ3Rr
L0FwaS93ZWJraXRndGtwYWdlLmNwcDoKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3BhZ2Uu
aDoKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuY3BwOgorICAgICAgICAoV2Vi
S2l0R3RrOjphcHBseUFkanVzdG1lbnRzKToKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3By
aXZhdGUuaDoKKwogMjAwNy0wNy0zMCAgSm9obiBTdWxsaXZhbiAgPHN1bGxpdmFuQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbgpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrLW1hcnNoYWwubGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRn
dGstbWFyc2hhbC5saXN0CShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtp
dGd0ay1tYXJzaGFsLmxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTEsMiArMSwzIEBACiBWT0lEOlNU
UklORyxTVFJJTkcKIFZPSUQ6T0JKRUNULEJPT0xFQU4KK1ZPSUQ6T0JKRUNULE9CSkVDVApJbmRl
eDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1lLmNwcAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJLaXQv
Z3RrL0FwaS93ZWJraXRndGtmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwx
MCBAQAogI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKICNpbmNsdWRlICJ3ZWJraXRndGtwcml2
YXRlLmgiCiAKLSNpbmNsdWRlICJGcmFtZUdkay5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50R2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdEd0azsKIAogZXh0ZXJuICJDIiB7CiAKQEAgLTYy
LDYgKzYxLDggQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19mcmFtZV9maW5hbGl6ZShHTwogewog
ICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSAqcHJpdmF0ZV9kYXRhID0gV0VCS0lUX0dUS19GUkFN
RV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX0ZSQU1FKG9iamVjdCkpOwogICAgIGRlbGV0ZSBwcml2
YXRlX2RhdGEtPmZyYW1lOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2d0a19mcmFtZV9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRf
Z3RrX2ZyYW1lX2NsYXNzX2luaXQoV2ViS2l0R3RrRnJhbWVDbGFzcyogZnJhbWVfY2xhc3MpCkBA
IC0xMjAsMjEgKzEyMSwxNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX2ZyYW1lX2luaXQoV2Vi
S2l0CiB7CiB9CiAKLUdPYmplY3QqIHdlYmtpdF9ndGtfZnJhbWVfbmV3KFdlYktpdEd0a1BhZ2Uq
IHBhZ2UpCitHT2JqZWN0KiB3ZWJraXRfZ3RrX2ZyYW1lX25ldyhXZWJLaXRHdGtQYWdlKiB3ZWJf
cGFnZSkKIHsKICAgICBXZWJLaXRHdGtGcmFtZSogZnJhbWUgPSBXRUJLSVRfR1RLX0ZSQU1FKGdf
b2JqZWN0X25ldyhXRUJLSVRfR1RLX1RZUEVfRlJBTUUsIE5VTEwpKTsKICAgICBXZWJLaXRHdGtG
cmFtZVByaXZhdGUgKmZyYW1lX2RhdGEgPSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKGZy
YW1lKTsKLSAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSAgKnBhZ2VfZGF0YSA9IFdFQktJVF9HVEtf
UEFHRV9HRVRfUFJJVkFURShwYWdlKTsKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gY29yZSh3
ZWJfcGFnZSk7CiAKKyAgICBmcmFtZV9kYXRhLT5wYWdlID0gd2ViX3BhZ2U7CiAgICAgZnJhbWVf
ZGF0YS0+Y2xpZW50ID0gbmV3IEZyYW1lTG9hZGVyQ2xpZW50R2RrKGZyYW1lKTsKLSAgICBmcmFt
ZV9kYXRhLT5mcmFtZSA9IG5ldyBGcmFtZUdkayhwYWdlX2RhdGEtPnBhZ2UsIDAsIGZyYW1lX2Rh
dGEtPmNsaWVudCk7Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lX3ZpZXcgPSBuZXcgRnJhbWVWaWV3
KGZyYW1lX2RhdGEtPmZyYW1lKTsKLSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+c2V0VmlldyhmcmFt
ZV92aWV3KTsKLQotICAgIGZyYW1lX3ZpZXctPnNldEd0a1dpZGdldChHVEtfTEFZT1VUKHBhZ2Up
KTsKKyAgICBmcmFtZV9kYXRhLT5mcmFtZSA9IG5ldyBGcmFtZShwYWdlLCAwLCBmcmFtZV9kYXRh
LT5jbGllbnQpOwogICAgIGZyYW1lX2RhdGEtPmZyYW1lLT5pbml0KCk7Ci0gICAgZnJhbWVfZGF0
YS0+cGFnZSA9IHBhZ2U7CiAKICAgICByZXR1cm4gR19PQkpFQ1QoZnJhbWUpOwogfQpJbmRleDog
V2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0
ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViS2l0L2d0ay9B
cGkvd2Via2l0Z3RrcGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20K
ICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtNDAsNiArNDEsMTMgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiSGl0VGVz
dFJlcXVlc3QuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CkBAIC02MiwzMSArNzAsMTIzIEBAIGVudW0gewogCiBzdGF0aWMgZ3VpbnQg
d2Via2l0X2d0a19wYWdlX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwogCi1HX0RFRklO
RV9UWVBFKFdlYktpdEd0a1BhZ2UsIHdlYmtpdF9ndGtfcGFnZSwgR1RLX1RZUEVfTEFZT1VUKQor
R19ERUZJTkVfVFlQRShXZWJLaXRHdGtQYWdlLCB3ZWJraXRfZ3RrX3BhZ2UsIEdUS19UWVBFX0NP
TlRBSU5FUikKIAotc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hh
bmRsZV9nZGtfZXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRHdGtQYWdl
KiBwYWdlKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9leHBvc2VfZXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50RXhwb3NlKiBldmVudCkKIHsKLSAgICBXZWJLaXRHdGtQ
YWdlUHJpdmF0ZSogcGFnZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2Up
OwotICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSogZnJhbWVfZGF0YSA9IFdFQktJVF9HVEtfRlJB
TUVfR0VUX1BSSVZBVEUocGFnZV9kYXRhLT5tYWluX2ZyYW1lKTsKKyAgICBXZWJDb3JlOjpGcmFt
ZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkp
KTsKKworICAgIEdka1JlY3RhbmdsZSBjbGlwOworICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3go
ZXZlbnQtPnJlZ2lvbiwgJmNsaXApOworICAgIGdka193aW5kb3dfYmVnaW5fcGFpbnRfcmVnaW9u
KGV2ZW50LT53aW5kb3csIGV2ZW50LT5yZWdpb24pOworICAgIGNhaXJvX3QqIGNyID0gZ2RrX2Nh
aXJvX2NyZWF0ZShldmVudC0+d2luZG93KTsKKyAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNyKTsK
KyAgICBjdHguc2V0R2RrRXhwb3NlRXZlbnQoZXZlbnQpOworICAgIGlmIChmcmFtZS0+cmVuZGVy
ZXIoKSkgeworICAgICAgICBpZiAoZnJhbWUtPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKKyAgICAg
ICAgICAgIGZyYW1lLT52aWV3KCktPmxheW91dCgpOworICAgICAgICBJbnRSZWN0IHJlY3QoY2xp
cC54LCBjbGlwLnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKKyAgICAgICAgZnJhbWUtPnZp
ZXcoKS0+cGFpbnQoJmN0eCwgcmVjdCk7CisgICAgfQorICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwog
Ci0gICAgZnJhbWVfZGF0YS0+ZnJhbWUtPmhhbmRsZUdka0V2ZW50KGV2ZW50KTsKKyAgICByZXR1
cm4gVFJVRTsKIH0KIAotc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVh
X3Jlc2l6ZV9jYWxsYmFjayhHdGtXaWRnZXQqLCBHdGtBbGxvY2F0aW9uKiBhbGxvY2F0aW9uLCBX
ZWJLaXRHdGtQYWdlKiBwYWdlKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9rZXlf
ZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCkKIHsKLSAgICBXZWJL
aXRHdGtQYWdlUHJpdmF0ZSogcGFnZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRF
KHBhZ2UpOwotICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSogZnJhbWVfZGF0YSA9IFdFQktJVF9H
VEtfRlJBTUVfR0VUX1BSSVZBVEUocGFnZV9kYXRhLT5tYWluX2ZyYW1lKTsKKyAgICBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdp
ZGdldCkpKTsKKworICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoUGxhdGZvcm1L
ZXlib2FyZEV2ZW50KGV2ZW50KSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CiAKLSAgICBmcmFtZV9k
YXRhLT5mcmFtZS0+dmlldygpLT51cGRhdGVHZW9tZXRyeShhbGxvY2F0aW9uLT53aWR0aCwgYWxs
b2NhdGlvbi0+aGVpZ2h0KTsKLSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+Zm9yY2VMYXlvdXQoKTsK
LSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+dmlldygpLT5hZGp1c3RWaWV3U2l6ZSgpOwotICAgIGZy
YW1lX2RhdGEtPmZyYW1lLT5zZW5kUmVzaXplRXZlbnQoKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRfZ3RrX3BhZ2VfYnV0dG9uX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRv
biogZXZlbnQpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZy
b21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisgICAgCisgICAgaWYgKGV2ZW50LT50
eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkKKyAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKKyAg
ICBlbHNlCisgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2
ZW50KFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOworICAgIHJldHVybiBUUlVFOwogfQogCi1z
dGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuZGVyaW5nX2FyZWFfZXZlbnRz
KEd0a1dpZGdldCogd2luLCBXZWJLaXRHdGtQYWdlKiBwYWdlKQorc3RhdGljIGdib29sZWFuIHdl
YmtpdF9ndGtfcGFnZV9tb3Rpb25fZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90
aW9uKiBldmVudCkKIHsKLSAgICBnZGtfd2luZG93X3NldF9ldmVudHMoR1RLX0lTX0xBWU9VVCh3
aW4pID8gR1RLX0xBWU9VVCh3aW4pLT5iaW5fd2luZG93IDogd2luLT53aW5kb3csCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgIChHZGtFdmVudE1hc2spKEdES19FWFBPU1VSRV9NQVNLCisgICAg
V2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtf
UEFHRSh3aWRnZXQpKSk7CisKKyAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQo
UGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3BhZ2Vfc2Nyb2xsX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0
LCBHZGtFdmVudFNjcm9sbCogZXZlbnQpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0g
Y29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisKKyAgICBQ
bGF0Zm9ybVdoZWVsRXZlbnQgd2hlZWxFdmVudChldmVudCk7CisgICAgZnJhbWUtPnZpZXcoKS0+
d2hlZWxFdmVudCh3aGVlbEV2ZW50KTsKKyAgICBpZiAod2hlZWxFdmVudC5pc0FjY2VwdGVkKCkp
CisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgSGl0VGVzdFJlcXVlc3QgaGl0VGVzdFJlcXVl
c3QodHJ1ZSwgdHJ1ZSk7CisgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0KHdoZWVsRXZl
bnQucG9zKCkpOworICAgIGZyYW1lLT5yZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KGhpdFRl
c3RSZXF1ZXN0LCBoaXRUZXN0UmVzdWx0KTsKKyAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3Vs
dC5pbm5lck5vZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBGQUxTRTsKKwor
ICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc2l6ZV9h
bGxvY2F0ZShHdGtXaWRnZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKK3sK
KyAgICBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5zaXpl
X2FsbG9jYXRlKHdpZGdldCwgYWxsb2NhdGlvbik7CisKKyAgICBpZiAoR1RLX1dJREdFVF9SRUFM
SVpFRCh3aWRnZXQpKQorICAgICAgICBnZGtfd2luZG93X3Jlc2l6ZShXRUJLSVRfR1RLX1BBR0Uo
d2lkZ2V0KS0+YmluX3dpbmRvdywgYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdo
dCk7CisKKyAgICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2Uo
V0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsKKyAgICBpZiAoIWZyYW1lLT52aWV3KCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZyYW1lLT52aWV3KCktPnJlc2l6ZShhbGxvY2F0aW9uLT53aWR0
aCwgYWxsb2NhdGlvbi0+aGVpZ2h0KTsKKyAgICBmcmFtZS0+Zm9yY2VMYXlvdXQoKTsKKyAgICBm
cmFtZS0+dmlldygpLT5hZGp1c3RWaWV3U2l6ZSgpOworICAgIGZyYW1lLT5zZW5kUmVzaXplRXZl
bnQoKTsKK30KKworLyoKKyAqIGl0IGlzIGEgR3RrQ29udGFpbmVyIHRvIGltcGxlbWVudCBTY3Jv
bGxWaWV3LiBBbmQgd2UgbmVlZCB0byBtYWtlIGl0IHNpbWlsaWFyCisgKiB0byBHdGtMYXlvdXQg
dG8gaGF2ZSBzYW5lIHBhaW50aW5nLgorICovCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vf
cmVhbGl6ZShHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3
aWRnZXQsIEdUS19SRUFMSVpFRCk7CisKKyAgICBHZGtXaW5kb3dBdHRyIGF0dHJpYnV0ZXM7CisK
KyAgICBhdHRyaWJ1dGVzLndpbmRvd190eXBlID0gR0RLX1dJTkRPV19DSElMRDsKKyAgICBhdHRy
aWJ1dGVzLnggPSB3aWRnZXQtPmFsbG9jYXRpb24ueDsKKyAgICBhdHRyaWJ1dGVzLnkgPSB3aWRn
ZXQtPmFsbG9jYXRpb24ueTsKKyAgICBhdHRyaWJ1dGVzLndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0
aW9uLndpZHRoOworICAgIGF0dHJpYnV0ZXMuaGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhl
aWdodDsKKyAgICBhdHRyaWJ1dGVzLndjbGFzcyA9IEdES19JTlBVVF9PVVRQVVQ7CisgICAgYXR0
cmlidXRlcy52aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92aXN1YWwgKHdpZGdldCk7CisgICAgYXR0
cmlidXRlcy5jb2xvcm1hcCA9IGd0a193aWRnZXRfZ2V0X2NvbG9ybWFwICh3aWRnZXQpOworICAg
IGF0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IEdES19WSVNJQklMSVRZX05PVElGWV9NQVNLOworCisg
ICAgZ2ludCBhdHRyaWJ1dGVzX21hc2sgPSBHREtfV0FfWCB8IEdES19XQV9ZIHwgR0RLX1dBX1ZJ
U1VBTCB8IEdES19XQV9DT0xPUk1BUDsKKyAgICB3aWRnZXQtPndpbmRvdyA9IGdka193aW5kb3df
bmV3KGd0a193aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cgKHdpZGdldCksICZhdHRyaWJ1dGVzLCBh
dHRyaWJ1dGVzX21hc2spOworICAgIGdka193aW5kb3dfc2V0X2JhY2tfcGl4bWFwKHdpZGdldC0+
d2luZG93LCBOVUxMLCBGQUxTRSk7CisgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHdpZGdl
dC0+d2luZG93LCB3aWRnZXQpOworCisgICAgYXR0cmlidXRlcy54ID0gMDsKKyAgICBhdHRyaWJ1
dGVzLnkgPSAwOworICAgIGF0dHJpYnV0ZXMud2lkdGggPSB3aWRnZXQtPmFsbG9jYXRpb24ud2lk
dGg7CisgICAgYXR0cmlidXRlcy5oZWlnaHQgPSB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0Owor
ICAgIGF0dHJpYnV0ZXMuZXZlbnRfbWFzayA9IEdES19FWFBPU1VSRV9NQVNLCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBHREtfU0NST0xMX01BU0sKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IEdES19CVVRUT05fUFJFU1NfTUFTSwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgR0RLX0JVVFRPTl9SRUxFQVNFX01BU0sKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IEdES19QT0lOVEVSX01PVElPTl9NQVNLCkBAIC05NSwxNSArMTk1LDExMSBAQCBzdGF0aWMg
dm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBHREtfQlVUVE9OX01PVElPTl9NQVNLCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBHREtfQlVUVE9OMV9NT1RJT05fTUFTSwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwgR0RLX0JVVFRPTjJfTU9USU9OX01BU0sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IEdES19CVVRUT04zX01PVElPTl9NQVNLKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBHREtfQlVUVE9OM19NT1RJT05fTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
Z3RrX3dpZGdldF9nZXRfZXZlbnRzKHdpZGdldCk7CisKKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdl
ID0gV0VCS0lUX0dUS19QQUdFKHdpZGdldCk7CisgICAgcGFnZS0+YmluX3dpbmRvdyA9IGdka193
aW5kb3dfbmV3KHdpZGdldC0+d2luZG93LCAmYXR0cmlidXRlcywgYXR0cmlidXRlc19tYXNrKTsK
KyAgICBnZGtfd2luZG93X3NldF91c2VyX2RhdGEocGFnZS0+YmluX3dpbmRvdywgd2lkZ2V0KTsK
KworICAgIHdpZGdldC0+c3R5bGUgPSBndGtfc3R5bGVfYXR0YWNoICh3aWRnZXQtPnN0eWxlLCB3
aWRnZXQtPndpbmRvdyk7CisgICAgZ3RrX3N0eWxlX3NldF9iYWNrZ3JvdW5kKHdpZGdldC0+c3R5
bGUsIHBhZ2UtPmJpbl93aW5kb3csIEdUS19TVEFURV9OT1JNQUwpOworCisgICAgV2ViS2l0R3Rr
UGFnZVByaXZhdGUqIHByaXZhdGVfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShw
YWdlKTsKKyAgICBIYXNoU2V0PEd0a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2
YXRlX2RhdGEtPmNoaWxkcmVuLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6
Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uYmVnaW4oKTsg
Y3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRfcGFyZW50
X3dpbmRvdygqY3VycmVudCwgcGFnZS0+YmluX3dpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHdl
YmtpdF9ndGtfcGFnZV91bnJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0
R3RrUGFnZSogcGFnZSA9IFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpOworCisgICAgZ2RrX3dpbmRv
d19zZXRfdXNlcl9kYXRhKHBhZ2UtPmJpbl93aW5kb3csIDApOworICAgIGdka193aW5kb3dfZGVz
dHJveShwYWdlLT5iaW5fd2luZG93KTsKKyAgICBwYWdlLT5iaW5fd2luZG93ID0gMDsKKworICAg
IEdUS19XSURHRVRfQ0xBU1Mod2Via2l0X2d0a19wYWdlX3BhcmVudF9jbGFzcyktPnVucmVhbGl6
ZSh3aWRnZXQpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfbWFwKEd0a1dpZGdl
dCogd2lkZ2V0KQoreworICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX01BUFBF
RCk7CisgICAgV2ViS2l0R3RrUGFnZVByaXZhdGUqIHByaXZhdGVfZGF0YSA9IFdFQktJVF9HVEtf
UEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSk7CisKKyAgICBIYXNoU2V0
PEd0a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2YXRlX2RhdGEtPmNoaWxkcmVu
LmVuZCgpOworICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3Vy
cmVudCA9IHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsr
Y3VycmVudCkKKyAgICAgICAgaWYgKEdUS19XSURHRVRfVklTSUJMRSgqY3VycmVudCkgJiYgIUdU
S19XSURHRVRfTUFQUEVEKCpjdXJyZW50KSkKKyAgICAgICAgICAgIGd0a193aWRnZXRfbWFwKCgq
Y3VycmVudCkpOworCisgICAgZ2RrX3dpbmRvd19zaG93KFdFQktJVF9HVEtfUEFHRSh3aWRnZXQp
LT5iaW5fd2luZG93KTsKKyAgICBnZGtfd2luZG93X3Nob3cod2lkZ2V0LT53aW5kb3cpOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc3R5bGVfc2V0KEd0a1dpZGdldCogd2lkZ2V0
LCBHdGtTdHlsZSogb2xkX3N0eWxlKQoreworICAgIGlmIChHVEtfV0lER0VUX0NMQVNTKHdlYmtp
dF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5zdHlsZV9zZXQpCisgICAgICAgIEdUS19XSURHRVRf
Q0xBU1Mod2Via2l0X2d0a19wYWdlX3BhcmVudF9jbGFzcyktPnN0eWxlX3NldCh3aWRnZXQsIG9s
ZF9zdHlsZSk7CisKKyAgICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCh3aWRnZXQpKQorICAgICAg
ICBndGtfc3R5bGVfc2V0X2JhY2tncm91bmQod2lkZ2V0LT5zdHlsZSwgV0VCS0lUX0dUS19QQUdF
KHdpZGdldCktPmJpbl93aW5kb3csIEdUS19TVEFURV9OT1JNQUwpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRfZ3RrX3BhZ2VfY29udGFpbmVyX2FkZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwg
R3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0R3RrUGFnZSogcGFnZSA9IFdFQktJVF9H
VEtfUEFHRShjb250YWluZXIpOworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwcml2YXRlX2Rh
dGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CiAKLSAgICBnX3NpZ25hbF9j
b25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImV4cG9zZS1ldmVudCIsIEdfQ0FMTEJBQ0sod2Via2l0
X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hhbmRsZV9nZGtfZXZlbnQpLCBwYWdlKTsKLSAgICBn
X3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImtleS1wcmVzcy1ldmVudCIsIEdfQ0FM
TEJBQ0sod2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hhbmRsZV9nZGtfZXZlbnQpLCBw
YWdlKTsKLSAgICBnX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImtleS1yZWxlYXNl
LWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxl
X2dka19ldmVudCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3aW4p
LCAiYnV0dG9uLXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVy
aW5nX2FyZWFfaGFuZGxlX2dka19ldmVudCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3Qo
R1RLX09CSkVDVCh3aW4pLCAiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBHX0NBTExCQUNLKHdlYmtp
dF9ndGtfcGFnZV9yZW5kZXJpbmdfYXJlYV9oYW5kbGVfZ2RrX2V2ZW50KSwgcGFnZSk7Ci0gICAg
Z19zaWduYWxfY29ubmVjdChHVEtfT0JKRUNUKHdpbiksICJtb3Rpb24tbm90aWZ5LWV2ZW50Iiwg
R19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxlX2dka19ldmVu
dCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3aW4pLCAic2Nyb2xs
LWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxl
X2dka19ldmVudCksIHBhZ2UpOworICAgIHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uYWRkKHdpZGdl
dCk7CisgICAgaWYgKEdUS19XSURHRVRfUkVBTElaRUQoY29udGFpbmVyKSkKKyAgICAgICAgZ3Rr
X3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQsIHBhZ2UtPmJpbl93aW5kb3cpOworICAg
IGd0a193aWRnZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9jb250YWluZXJfcmVtb3ZlKEd0a0NvbnRh
aW5lciogY29udGFpbmVyLCBHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBXZWJLaXRHdGtQYWdl
UHJpdmF0ZSogcHJpdmF0ZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKFdFQktJ
VF9HVEtfUEFHRShjb250YWluZXIpKTsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmNoaWxkcmVu
LmNvbnRhaW5zKHdpZGdldCkpIHsKKyAgICAgICAgZ3RrX3dpZGdldF91bnBhcmVudCh3aWRnZXQp
OworICAgICAgICBwcml2YXRlX2RhdGEtPmNoaWxkcmVuLnJlbW92ZSh3aWRnZXQpOworICAgIH0K
K30KKworc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NvbnRhaW5lcl9mb3JhbGwoR3RrQ29u
dGFpbmVyKiBjb250YWluZXIsIGdib29sZWFuLCBHdGtDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50
ZXIgY2FsbGJhY2tEYXRhKQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwcml2YXRlRGF0
YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0UoY29udGFpbmVy
KSk7CisKKyAgICBIYXNoU2V0PEd0a1dpZGdldCo+IGNoaWxkcmVuID0gcHJpdmF0ZURhdGEtPmNo
aWxkcmVuOworICAgIEhhc2hTZXQ8R3RrV2lkZ2V0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNo
aWxkcmVuLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0
b3IgY3VycmVudCA9IGNoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQp
CisgICAgICAgICgqY2FsbGJhY2spKCpjdXJyZW50LCBjYWxsYmFja0RhdGEpOworfQorCisvKgor
ICogdGFrZSBvd25lcnNoaXAgb2YgdGhlIGFkanVzdG1lbnRzIGFuZCBpZiB3ZSBoYXZlIGEgRnJh
bWVWaWV3IGFscmVhZHkgc2V0IHRoZQorICogYWRqdXN0bWVudHMgYXMgd2VsbC4KKyAqLworc3Rh
dGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3NldF9hZGp1c3RtZW50cyhXZWJLaXRHdGtQYWdlKiBw
YWdlLCBHdGtBZGp1c3RtZW50KiBob3Jpem9udGFsQWRqdXN0bWVudCwgR3RrQWRqdXN0bWVudCog
dmVydGljYWxBZGp1c3RtZW50KQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRl
X2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2Up
KTsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KQorICAgICAg
ICBnX29iamVjdF91bnJlZihwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsKKyAg
ICBpZiAocHJpdmF0ZV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIGdfb2JqZWN0
X3VucmVmKHByaXZhdGVfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKKworICAgIHByaXZhdGVf
ZGF0YS0+aG9yaXpvbnRhbEFkanVzdG1lbnQgPSBob3Jpem9udGFsQWRqdXN0bWVudDsKKyAgICBw
cml2YXRlX2RhdGEtPnZlcnRpY2FsQWRqdXN0bWVudCA9IHZlcnRpY2FsQWRqdXN0bWVudDsKKwor
ICAgIGlmIChob3Jpem9udGFsQWRqdXN0bWVudCkKKyAgICAgICAgZ19vYmplY3RfcmVmX3Npbmso
aG9yaXpvbnRhbEFkanVzdG1lbnQpOworICAgIGlmICh2ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAg
ICAgIGdfb2JqZWN0X3JlZl9zaW5rKHZlcnRpY2FsQWRqdXN0bWVudCk7CisKKyAgICBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UocGFnZSkpOworICAgIGlmIChm
cmFtZS0+dmlldygpKQorICAgICAgICBmcmFtZS0+dmlldygpLT5zZXRHdGtBZGp1c3RtZW50cyho
b3Jpem9udGFsQWRqdXN0bWVudCwgdmVydGljYWxBZGp1c3RtZW50KTsKIH0KIAogc3RhdGljIFdl
YktpdEd0a0ZyYW1lKiB3ZWJraXRfZ3RrX3BhZ2VfcmVhbF9jcmVhdGVfZnJhbWUoV2ViS2l0R3Rr
UGFnZSosIFdlYktpdEd0a0ZyYW1lKiBwYXJlbnQsIFdlYktpdEd0a0ZyYW1lRGF0YSopCkBAIC0x
NjMsOSArMzU5LDE3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9maW5hbGl6ZShHT2IK
IAogICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RLX1BB
R0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKG9iamVjdCkpOwogICAgIC8vZGVsZXRlIHBy
aXZhdGVfZGF0YS0+cGFnZTsgLSB3ZSBkb24ndCBoYXZlIGEgRHJhZ0NsaWVudCB5ZXQsIHNvIGl0
IGlzIGNyYXNoaW5nIGhlcmUKLSAgICBkZWxldGUgcHJpdmF0ZV9kYXRhLT5zZXR0aW5nczsKKwog
ICAgIGdfb2JqZWN0X3VucmVmKHByaXZhdGVfZGF0YS0+bWFpbl9mcmFtZSk7CisgICAgZGVsZXRl
IHByaXZhdGVfZGF0YS0+c2V0dGluZ3M7CiAgICAgZGVsZXRlIHByaXZhdGVfZGF0YS0+dXNlcl9h
Z2VudDsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KQorICAg
ICAgICBnX29iamVjdF91bnJlZihwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsK
KyAgICBpZiAocHJpdmF0ZV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIGdfb2Jq
ZWN0X3VucmVmKHByaXZhdGVfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKKworICAgIEdfT0JK
RUNUX0NMQVNTICh3ZWJraXRfZ3RrX3BhZ2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVj
dCk7CiB9CiAKIHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9jbGFzc19pbml0KFdlYktpdEd0
a1BhZ2VDbGFzcyogcGFnZV9jbGFzcykKQEAgLTE3Niw2ICszODAsMjggQEAgc3RhdGljIHZvaWQg
d2Via2l0X2d0a19wYWdlX2NsYXNzX2luaXQoVwogICAgIC8qCiAgICAgICogc2lnbmFscwogICAg
ICAqLworICAgIEdPYmplY3RDbGFzcyogb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MocGFn
ZV9jbGFzcyk7CisgICAgb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9ndGtfcGFnZV9m
aW5hbGl6ZTsKKworICAgIEd0a1dpZGdldENsYXNzKiB3aWRnZXRfY2xhc3MgPSBHVEtfV0lER0VU
X0NMQVNTKHBhZ2VfY2xhc3MpOworICAgIHdpZGdldF9jbGFzcy0+ZXhwb3NlX2V2ZW50ID0gd2Vi
a2l0X2d0a19wYWdlX2V4cG9zZV9ldmVudDsKKyAgICB3aWRnZXRfY2xhc3MtPmtleV9wcmVzc19l
dmVudCA9IHdlYmtpdF9ndGtfcGFnZV9rZXlfZXZlbnQ7CisgICAgd2lkZ2V0X2NsYXNzLT5rZXlf
cmVsZWFzZV9ldmVudCA9IHdlYmtpdF9ndGtfcGFnZV9rZXlfZXZlbnQ7CisgICAgd2lkZ2V0X2Ns
YXNzLT5idXR0b25fcHJlc3NfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2VfYnV0dG9uX2V2ZW50Owor
ICAgIHdpZGdldF9jbGFzcy0+YnV0dG9uX3JlbGVhc2VfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2Vf
YnV0dG9uX2V2ZW50OworICAgIHdpZGdldF9jbGFzcy0+bW90aW9uX25vdGlmeV9ldmVudCA9IHdl
YmtpdF9ndGtfcGFnZV9tb3Rpb25fZXZlbnQ7CisgICAgd2lkZ2V0X2NsYXNzLT5zY3JvbGxfZXZl
bnQgPSB3ZWJraXRfZ3RrX3BhZ2Vfc2Nyb2xsX2V2ZW50OworICAgIHdpZGdldF9jbGFzcy0+cmVh
bGl6ZSA9IHdlYmtpdF9ndGtfcGFnZV9yZWFsaXplOworICAgIHdpZGdldF9jbGFzcy0+dW5yZWFs
aXplID0gd2Via2l0X2d0a19wYWdlX3VucmVhbGl6ZTsKKyAgICB3aWRnZXRfY2xhc3MtPnNpemVf
YWxsb2NhdGUgPSB3ZWJraXRfZ3RrX3BhZ2Vfc2l6ZV9hbGxvY2F0ZTsKKyAgICB3aWRnZXRfY2xh
c3MtPnN0eWxlX3NldCA9IHdlYmtpdF9ndGtfcGFnZV9zdHlsZV9zZXQ7CisgICAgd2lkZ2V0X2Ns
YXNzLT5tYXAgPSB3ZWJraXRfZ3RrX3BhZ2VfbWFwOworCisgICAgR3RrQ29udGFpbmVyQ2xhc3Mq
IGNvbnRhaW5lcl9jbGFzcyA9IEdUS19DT05UQUlORVJfQ0xBU1MocGFnZV9jbGFzcyk7CisgICAg
Y29udGFpbmVyX2NsYXNzLT5hZGQgPSB3ZWJraXRfZ3RrX3BhZ2VfY29udGFpbmVyX2FkZDsKKyAg
ICBjb250YWluZXJfY2xhc3MtPnJlbW92ZSA9IHdlYmtpdF9ndGtfcGFnZV9jb250YWluZXJfcmVt
b3ZlOworICAgIGNvbnRhaW5lcl9jbGFzcy0+Zm9yYWxsID0gd2Via2l0X2d0a19wYWdlX2NvbnRh
aW5lcl9mb3JhbGw7CisKICAgICAvKioKICAgICAgKiBXZWJLaXRHdGtQYWdlOjpsb2FkLXN0YXJ0
ZWQKICAgICAgKiBAcGFnZTogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0
ZWQKQEAgLTI2Nyw2ICs0OTMsMTkgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NsYXNz
X2luaXQoVwogICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCiAgICAg
ICAgICAgICBHX1RZUEVfTk9ORSwgMCk7CiAKKyAgICAvKgorICAgICAqIG1ha2UgdXMgc2Nyb2xs
YWJsZSAoZS5nLiBhZGRhYmxlIHRvIGEgR3RrU2Nyb2xsZWRXaW5kb3cpCisgICAgICovCisgICAg
cGFnZV9jbGFzcy0+c2V0X3Njcm9sbF9hZGp1c3RtZW50cyA9IHdlYmtpdF9ndGtfcGFnZV9zZXRf
YWRqdXN0bWVudHM7CisgICAgR1RLX1dJREdFVF9DTEFTUyhwYWdlX2NsYXNzKS0+c2V0X3Njcm9s
bF9hZGp1c3RtZW50c19zaWduYWwgPSBnX3NpZ25hbF9uZXcoInNldF9zY3JvbGxfYWRqdXN0bWVu
dHMiLAorICAgICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZV9jbGFzcyksCisgICAgICAg
ICAgICAoR1NpZ25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiks
CisgICAgICAgICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0R3RrUGFnZUNsYXNzLCBzZXRfc2Ny
b2xsX2FkanVzdG1lbnRzKSwKKyAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICB3
ZWJraXRfZ3RrX21hcnNoYWxfVk9JRF9fT0JKRUNUX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQ
RV9OT05FLCAyLAorICAgICAgICAgICAgR1RLX1RZUEVfQURKVVNUTUVOVCwgR1RLX1RZUEVfQURK
VVNUTUVOVCk7CisKIAogICAgIC8qCiAgICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwg
bWV0aG9kcwpAQCAtMjc5LDIxICs1MTgsMzMgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdl
X2NsYXNzX2luaXQoVwogICAgIHBhZ2VfY2xhc3MtPmphdmFfc2NyaXB0X2NvbmZpcm0gPSB3ZWJr
aXRfZ3RrX3BhZ2VfcmVhbF9qYXZhX3NjcmlwdF9jb25maXJtOwogICAgIHBhZ2VfY2xhc3MtPmph
dmFfc2NyaXB0X3Byb21wdCA9IHdlYmtpdF9ndGtfcGFnZV9yZWFsX2phdmFfc2NyaXB0X3Byb21w
dDsKICAgICBwYWdlX2NsYXNzLT5qYXZhX3NjcmlwdF9jb25zb2xlX21lc3NhZ2UgPSB3ZWJraXRf
Z3RrX3BhZ2VfcmVhbF9qYXZhX3NjcmlwdF9jb25zb2xlX21lc3NhZ2U7Ci0gICAgR19PQkpFQ1Rf
Q0xBU1MocGFnZV9jbGFzcyktPmZpbmFsaXplID0gd2Via2l0X2d0a19wYWdlX2ZpbmFsaXplOwog
fQogCiBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfaW5pdChXZWJLaXRHdGtQYWdlKiBwYWdl
KQogewotICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RL
X1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2UpKTsKLSAgICBwcml2YXRlX2Rh
dGEtPnBhZ2UgPSBuZXcgUGFnZShuZXcgQ2hyb21lQ2xpZW50R2RrKHBhZ2UpLCBuZXcgQ29udGV4
dE1lbnVDbGllbnRHZGssIG5ldyBFZGl0b3JDbGllbnRHZGsocGFnZSksIDAsIG5ldyBJbnNwZWN0
b3JDbGllbnRHZGspOwotCi0KICAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyhwYWdlLCBHVEtfQ0FO
X0ZPQ1VTKTsKKyAgICBwYWdlLT5iaW5fd2luZG93ID0gMDsKIAotICAgIGdfc2lnbmFsX2Nvbm5l
Y3RfYWZ0ZXIoR19PQkpFQ1QocGFnZSksICJyZWFsaXplIiwgR19DQUxMQkFDSyh3ZWJraXRfZ3Rr
X3BhZ2VfcmVnaXN0ZXJfcmVuZGVyaW5nX2FyZWFfZXZlbnRzKSwgcGFnZSk7Ci0gICAgZ19zaWdu
YWxfY29ubmVjdF9hZnRlcihHX09CSkVDVChwYWdlKSwgInNpemUtYWxsb2NhdGUiLCBHX0NBTExC
QUNLKHdlYmtpdF9ndGtfcGFnZV9yZW5kZXJpbmdfYXJlYV9yZXNpemVfY2FsbGJhY2spLCBwYWdl
KTsKLQorICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RL
X1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2UpKTsKKyAgICBwcml2YXRlX2Rh
dGEtPnBhZ2UgPSBuZXcgUGFnZShuZXcgQ2hyb21lQ2xpZW50R2RrKHBhZ2UpLCBuZXcgQ29udGV4
dE1lbnVDbGllbnRHZGssIG5ldyBFZGl0b3JDbGllbnRHZGsocGFnZSksIDAsIG5ldyBJbnNwZWN0
b3JDbGllbnRHZGspOwogICAgIHByaXZhdGVfZGF0YS0+bWFpbl9mcmFtZSA9IFdFQktJVF9HVEtf
RlJBTUUod2Via2l0X2d0a19mcmFtZV9uZXcocGFnZSkpOworCisgICAgLyoKKyAgICAgKiBUT0RP
OiBtb3ZlIHRoYXQgb3ZlciB0byB1c2Ugd2Via2l0Z3Rrc2V0dGluZ3MgCisgICAgICovCisgICAg
U2V0dGluZ3MqIHNldHRpbmdzID0gcHJpdmF0ZV9kYXRhLT5wYWdlLT5zZXR0aW5ncygpOworICAg
IHNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7CisgICAgc2V0dGlu
Z3MtPnNldE1pbmltdW1Gb250U2l6ZSg1KTsKKyAgICBzZXR0aW5ncy0+c2V0TWluaW11bUxvZ2lj
YWxGb250U2l6ZSg1KTsKKyAgICBzZXR0aW5ncy0+c2V0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcyh0
cnVlKTsKKyAgICBzZXR0aW5ncy0+c2V0SmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7CisgICAgCisg
ICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+
c2V0RGVmYXVsdEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5
KCJUaW1lcyBOZXcgUm9tYW4iKTsKKyAgICBzZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZhbWls
eSgiQXJpYWwiKTsKKyAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVyIik7
CisgICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgiQXJpYWwiKTsKIH0KIAogR3Rr
V2lkZ2V0KiB3ZWJraXRfZ3RrX3BhZ2VfbmV3KHZvaWQpCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtwYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFn
ZS5oCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtNjEsMTEgKzYxLDEzIEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRH
dGtQYWdlQ2xhc3MgV2ViS2kKICAqIHRoZSAgc2l6ZSBvZiB0aGUgdmlld3BvcnQgYW5kIHdlIHdv
bid0IGJlIGFibGUgdG8gdXNlIGdka193aW5kb3dfbW92ZS4KICAqLwogc3RydWN0IF9XZWJLaXRH
dGtQYWdlIHsKLSAgICBHdGtMYXlvdXQgcGFyZW50OworICAgIEd0a0NvbnRhaW5lciBwYXJlbnQ7
CisKKyAgICBHZGtXaW5kb3cgKmJpbl93aW5kb3c7CiB9OwogCiBzdHJ1Y3QgX1dlYktpdEd0a1Bh
Z2VDbGFzcyB7Ci0gICAgR3RrTGF5b3V0Q2xhc3MgcGFyZW50OworICAgIEd0a0NvbnRhaW5lckNs
YXNzIHBhcmVudDsKIAogICAgIC8qCiAgICAgICogZGVmYXVsdCBoYW5kbGVyL3ZpcnR1YWwgbWV0
aG9kcwpAQCAtODksNiArOTEsMTEgQEAgc3RydWN0IF9XZWJLaXRHdGtQYWdlQ2xhc3MgewogICAg
IGdib29sZWFuICAgKCpqYXZhX3NjcmlwdF9jb25maXJtKSAoV2ViS2l0R3RrUGFnZSogcGFnZSwg
V2ViS2l0R3RrRnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogY29uZmlybV9tZXNzYWdlKTsKICAg
ICBnY2hhciogKCpqYXZhX3NjcmlwdF9wcm9tcHQpIChXZWJLaXRHdGtQYWdlKiBwYWdlLCBXZWJL
aXRHdGtGcmFtZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBjb25zdCBnY2hhciogZGVm
YXVsdF92YWx1ZSk7CiAgICAgdm9pZCAgICgqamF2YV9zY3JpcHRfY29uc29sZV9tZXNzYWdlKSAo
V2ViS2l0R3RrUGFnZSosIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZV9u
dW1iZXIsIGNvbnN0IGdjaGFyKiBzb3VyY2VfaWQpOworCisgICAgLyoKKyAgICAgKiBpbnRlcm5h
bAorICAgICAqLworICAgIHZvaWQgICAoKnNldF9zY3JvbGxfYWRqdXN0bWVudHMpIChXZWJLaXRH
dGtQYWdlKiwgR3RrQWRqdXN0bWVudCosIEd0a0FkanVzdG1lbnQqKTsKIH07CiAKIFdFQktJVF9H
VEtfQVBJIEdUeXBlCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmNwcAkocmV2aXNp
b24gMjQ3ODEpCisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsNCArODAsMTQgQEAgV2ViS2l0R3RrUGFnZSoga2l0KFdlYkNvcmU6OlBh
Z2UqIHBhZ2UpCiAgICAgQ2hyb21lQ2xpZW50R2RrKiBjbGllbnQgPSBzdGF0aWNfY2FzdDxDaHJv
bWVDbGllbnRHZGsqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpOwogICAgIHJldHVybiBjbGll
bnQtPndlYlBhZ2UoKTsKIH0KKworLyoKKyAqIE1ha2UgdGhlIEZyYW1lVmlldyB1c2UgdGhlIEd0
a0FkanVzdG1lbnRzIG9mIHRoZSBXZWJLaXRHdGtQYWdlIHRvIGNvbmZvcm0KKyAqIHRvIHRoZSAn
c2Nyb2xsYWJsZSBwcm90b2NvbCcgb2YgR3RrKy4KKyAqLwordm9pZCBhcHBseUFkanVzdG1lbnRz
KFdlYktpdEd0a1BhZ2UqIHBhZ2UsIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldykKK3sKKyAgICBX
ZWJLaXRHdGtQYWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZB
VEUocGFnZSk7CisgICAgdmlldy0+c2V0R3RrQWRqdXN0bWVudHMocGFnZURhdGEtPmhvcml6b250
YWxBZGp1c3RtZW50LCBwYWdlRGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKK30KIH0KSW5kZXg6
IFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQv
Z3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmgJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViS2l0L2d0
ay9BcGkvd2Via2l0Z3RrcHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw4IEBA
CiAKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJG
cmFtZUdkay5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKIAogbmFtZXNwYWNlIFdlYktpdEd0ayB7
CkBAIC01Nyw2ICs1OCw4IEBAIG5hbWVzcGFjZSBXZWJLaXRHdGsgewogICAgIFdlYktpdEd0a0Zy
YW1lKiBraXQoV2ViQ29yZTo6RnJhbWUqKTsKICAgICBXZWJDb3JlOjpQYWdlKiBjb3JlKFdlYktp
dEd0a1BhZ2UqKTsKICAgICBXZWJLaXRHdGtQYWdlKiBraXQoV2ViQ29yZTo6UGFnZSopOworCisg
ICAgdm9pZCBhcHBseUFkanVzdG1lbnRzKFdlYktpdEd0a1BhZ2UqLCBXZWJDb3JlOjpGcmFtZVZp
ZXcqKTsKIH0KIAogZXh0ZXJuICJDIiB7CkBAIC02OSwxMiArNzIsMjAgQEAgZXh0ZXJuICJDIiB7
CiAgICAgICAgIFdlYktpdEd0a0ZyYW1lKiBtYWluX2ZyYW1lOwogICAgICAgICBXZWJDb3JlOjpT
dHJpbmcgYXBwbGljYXRpb25fbmFtZV9mb3JfdXNlcl9hZ2VudDsKICAgICAgICAgV2ViQ29yZTo6
U3RyaW5nKiB1c2VyX2FnZW50OworCisgICAgICAgIC8qCisgICAgICAgICAqIGUuZy4gc2V0IGJ5
IGEgR3RrU2Nyb2xsZWRXaW5kb3cgYW5kIHVzZWQgYnkgdGhlIEZyYW1lVmlldyBvZiBvdXIgbWFp
bl9mcmFtZQorICAgICAgICAgKi8KKyAgICAgICAgR3RrQWRqdXN0bWVudCogaG9yaXpvbnRhbEFk
anVzdG1lbnQ7CisgICAgICAgIEd0a0FkanVzdG1lbnQqIHZlcnRpY2FsQWRqdXN0bWVudDsKKwor
ICAgICAgICBIYXNoU2V0PEd0a1dpZGdldCo+IGNoaWxkcmVuOwogICAgIH07CiAgICAgCiAgICAg
I2RlZmluZSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNU
QU5DRV9HRVRfUFJJVkFURSgob2JqKSwgV0VCS0lUX0dUS19UWVBFX0ZSQU1FLCBXZWJLaXRHdGtG
cmFtZVByaXZhdGUpKQogICAgIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRHdGtGcmFtZVByaXZhdGUg
V2ViS2l0R3RrRnJhbWVQcml2YXRlOwogICAgIHN0cnVjdCBfV2ViS2l0R3RrRnJhbWVQcml2YXRl
IHsKLSAgICAgICAgV2ViQ29yZTo6RnJhbWVHZGsqIGZyYW1lOworICAgICAgICBXZWJDb3JlOjpG
cmFtZSogZnJhbWU7CiAgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50R2RrKiBjbGll
bnQ7CiAgICAgICAgIFdlYktpdEd0a1BhZ2UqIHBhZ2U7CiAgICAgfTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15784</attachid>
            <date>2007-08-01 10:47:19 -0700</date>
            <delta_ts>2007-08-09 18:43:45 -0700</delta_ts>
            <desc>Implement ScrollView similiar to win/qt to support createFrame</desc>
            <filename>gtk-scrollview-r2.patch</filename>
            <type>text/plain</type>
            <size>112209</size>
            <attacher name="Holger Freyther">zecke</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNDc5MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTQ5IEBACisyMDA3LTA3LTMxICBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlciAg
PHplY2tlQHNlbGZpc2gub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFdBUk5JTkc6IE5PIFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisg
ICAgICAgIEtpbGwgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSB3
YXMgbW92ZWQgdG8KKyAgICAgICAgV2ViS2l0R3RrUGFnZSwgSW1hZ2VHZGsgYW5kIHRoZSBuZWVk
ZWQgc3R1YnMgZm9yIEZyYW1lIHdoZXJlIGludHJvZHVjZWQKKyAgICAgICAgaW4gcGFnZS9nZGsv
RnJhbWVHZGsuIE9uIHRoaXMgd2F5IGNoYW5nZWQgdGhlIGNvbnN0cnVjdG9ycyBvZiB0aGUgdmFy
aW91cworICAgICAgICBQbGF0Zm9ybSpFdmVudCBtZXRob2RzIHRvIHVzZSB0aGUgc3BlY2lhbGlz
ZWQgdHlwZSBpbnN0ZWFkIG9mIHRoZSBHZGtFdmVudCB1bmlvbi4KKyAgICAgICAgVGhpcyBpcyBu
ZWVkZWQgZHVlIHRoZSBjaGFuZ2VzIGluIFdlYktpdEd0a1BhZ2UgYW5kIHRoZSByZWltcGxlbWVu
dGF0aW9uIG9mIHRoZQorICAgICAgICB2YXJpb3VzIGV2ZW50IGhvb2tzLgorCisgICAgICAgIENy
ZWF0ZSB0aGUgRnJhbWVWaWV3IGZyb20gd2l0aGluIG1ha2VEb2N1bWVudFZpZXcgYW5kIGFzIGRv
Y3VtZW50ZWQgaXQgZG9lc24ndAorICAgICAgICBob25vciB0aGUgbWFyZ2lucyBhcyBXZWJWaWV3
IGlzIGRvaW5nLiBUaGlzIHJlbWFpbnMgdG8gYmUgZG9uZS4KKworICAgICAgICBVc2UgdGhlIFNj
cm9sbFZpZXcvV2lkZ2V0IGRlc2lnbiBvZiB0aGUgV2luZG93cyBwb3J0IGFuZCBhZG9wdCBpdCB0
byBHdGsrLiBPbiB0aGUKKyAgICAgICAgd2F5IHRvIHRoaXMgaW1wbGVtZW50IFBsYXRmb3JtU2Ny
b2xsYmFyIHByb3Blcmx5LgorICAgICAgICBUaGUgb25seSB0d28gZGlmZmVyZW5jZXMgdG8gdGhl
IFdpbmRvd3MgcG9ydCBpcyB0aGF0IFBsYXRmb3JtU2Nyb2xsYmFyIGlzCisgICAgICAgIGEgR3Rr
V2lkZ2V0IChzdGlsbCBzaGFyaW5nIHRoZSBzYW1lIGdsb2JhbCB3aW5kb3cpIHdoaWNoIG5lZWRz
IHNwZWNpYWwgdHJlYXRtZW50IHdoZW4KKyAgICAgICAgcGxhY2luZyB0aGUgc2Nyb2xsYmFyIChl
LmcuIGRvbid0IG1vdmUgdGhlIHNjcm9sbGJhciBvZiBhIEZyYW1lVmlldyB3aGVuIHRoZSBGcmFt
ZVZpZXcKKyAgICAgICAgc2Nyb2xscykuIFRoZSBvdGhlciBkaWZmZXJlbmNlIGlzIGR1ZSB0aGUg
J3Njcm9sbGFibGUgcHJvdG9jb2wnIG9mIEd0aysgd2hlcmUgd2Ugd2lsbAorICAgICAgICBnZXQg
dHdvIEd0a0FkanVzdG1lbnQgc2V0LiBJZiB3ZSBoYXZlIHRoZW0gc2V0IGluIFNjcm9sbFZpZXcg
ZG9uJ3QgY3JlYXRlIGEgUGxhdGZvcm1TY3JvbGxiYXIKKyAgICAgICAgYnV0IHVwZGF0ZSB0aGUg
R3RrQWp1c3RtZW50LgorCisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogbG9hZGVy
L2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEdkazo6bWFrZURvY3VtZW50Vmlldyk6CisgICAgICAgICogbG9hZGVyL2dkay9G
cmFtZUxvYWRlckNsaWVudEdkay5oOgorICAgICAgICAqIHBhZ2UvZ2RrL0ZyYW1lR2RrLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6aXNzdWVUcmFuc3Bvc2VDb21tYW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjbGVhbnVwUGxhdGZvcm1TY3JpcHRPYmplY3RzKToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6RnJhbWU6OmRhc2hib2FyZFJlZ2lvbnNDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkZyYW1lOjpzZXROZWVkc1JlYXBwbHlTdHlsZXMpOgorICAgICAgICAqIHBsYXRmb3Jt
L1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtTW91
c2VFdmVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL1BsYXRmb3JtV2hlZWxFdmVudC5oOgorICAg
ICAgICAqIHBsYXRmb3JtL1Njcm9sbFZpZXcuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRnJhbWVHZGsuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dkay9GcmFtZUdkay5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dkay9LZXlFdmVudEdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJk
RXZlbnQ6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL01v
dXNlRXZlbnRHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50OjpQ
bGF0Zm9ybU1vdXNlRXZlbnQpOgorICAgICAgICAqIHBsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcmVl
bkdkay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aCk6CisgICAgICAgICogcGxh
dGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1Bs
YXRmb3JtU2Nyb2xsQmFyR2RrLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0
Zm9ybVNjcm9sbGJhcik6CisgICAgICAgIChQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Ny
b2xsYmFyKToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlBvc2l0aW9u
KToKKyAgICAgICAgKFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRhdGVUaHVtYlByb3BvcnRpb24pOgor
ICAgICAgICAoUGxhdGZvcm1TY3JvbGxiYXI6OnNldFJlY3QpOgorICAgICAgICAoUGxhdGZvcm1T
Y3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1JlbmRl
clRoZW1lR2RrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludENo
ZWNrYm94KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludFJhZGlvKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR2RrOjpwYWludEJ1dHRvbik6CisgICAgICAg
ICogcGxhdGZvcm0vZ2RrL1Njcm9sbFZpZXdHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OlNjcm9sbFZpZXdQcml2YXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjp+U2Nyb2xsVmlld1ByaXZh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNl
dEhhc0hvcml6b250YWxTY3JvbGxiYXIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6
U2Nyb2xsVmlld1ByaXZhdGU6OnNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzY3JvbGxCYWNraW5nU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OmFkanVz
dG1lbnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQ
cml2YXRlOjp2YWx1ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6U2Ny
b2xsVmlld1ByaXZhdGU6OndpbmRvd0NsaXBSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OlNjcm9sbFZpZXcpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2V0R3Rr
QWRqdXN0bWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlQ29udGVu
dHMpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6dXBkYXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpTY3Jv
bGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnJl
c2l6ZUNvbnRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmNvbnRlbnRzWCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojpjb250ZW50c1kpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6Om1heGltdW1TY3JvbGwpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Ny
b2xsQnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c3VwcHJlc3NTY3JvbGxiYXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldEhTY3JvbGxiYXJNb2RlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFZTY3JvbGxiYXJNb2RlKToKKyAgICAgICAg
KFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNldFNjcm9sbGJhcnNNb2RlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbFZpZXc6OnNldEZyYW1lR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsVmlldzo6YWRkQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cmVtb3Zl
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsUmVjdEludG9WaWV3
UmVjdXJzaXZlbHkpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6d2hlZWxFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3Ojp1cGRhdGVTY3JvbGxiYXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OndpbmRvd1RvQ29udGVudHMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsVmlldzo6Y29udGVudHNUb1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bFZpZXc6OmNvbnZlcnRDaGlsZFRvU2VsZik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxWaWV3
Ojpjb252ZXJ0U2VsZlRvQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6cGFp
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6Z2VvbWV0cnlDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnNjcm9sbCk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxWaWV3Ojp3aW5kb3dSZXNpemVyUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxW
aWV3OjpyZXNpemVyT3ZlcmxhcHNDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZp
ZXc6OmFkanVzdE92ZXJsYXBwaW5nU2Nyb2xsYmFyQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
U2Nyb2xsVmlldzo6c2V0UGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OmFk
ZFRvRGlydHlSZWdpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsVmlldzo6c2Nyb2xsQmFj
a2luZ1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbFZpZXc6OnVwZGF0ZUJhY2tpbmdT
dG9yZSk6CisgICAgICAgICogcGxhdGZvcm0vZ2RrL1RlbXBvcmFyeUxpbmtTdHVicy5jcHA6Cisg
ICAgICAgICogcGxhdGZvcm0vZ2RrL1doZWVsRXZlbnRHZGsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1XaGVlbEV2ZW50OjpQbGF0Zm9ybVdoZWVsRXZlbnQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0UHJpdmF0
ZTo6Z2RrRHJhd2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpXaWRnZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6V2lkZ2V0OjppbnRlcm5hbEd0a1dpZGdldCk6CisgICAgICAgIChXZWJD
b3JlOjpXaWRnZXQ6OnNldEludGVybmFsR3RrV2lkZ2V0KToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZGdldDo6c2V0Q29udGFpbmluZ1dpbmRvdyk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmNv
bnRhaW5pbmdXaW5kb3cpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpmcmFtZUdlb21ldHJ5
KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c2V0RnJhbWVHZW9tZXRyeSk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNldFBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6
OnBhcmVudCk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OnNldEZvY3VzKToKKyAgICAgICAg
KFdlYkNvcmU6OldpZGdldDo6c2V0Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
c2hvdyk6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6OmhpZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6V2lkZ2V0OjpyZW1vdmVGcm9tUGFyZW50KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjppbnZhbGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OldpZGdldDo6aW52YWxpZGF0ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6V2lk
Z2V0Ojpjb252ZXJ0VG9Db250YWluaW5nV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdl
dDo6Y29udmVydENoaWxkVG9TZWxmKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6Y29udmVy
dFNlbGZUb0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OldpZGdldDo6c3VwcHJlc3NJbnZhbGlk
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2lkZ2V0OjpzZXRTdXBwcmVzc0ludmFsaWRhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpXaWRnZXQ6Omdlb21ldHJ5Q2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXaWRnZXQ6OnNldFNjcm9sbFZpZXdDb250cm9sKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHA6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJp
dmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNldEdka0V4cG9zZUV2
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Z2RrRXhwb3NlRXZlbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpnZGtEcmF3YWJsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnRyYW5zbGF0ZVBvaW50KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwOgorICAgICAgICAobG9hZFJlc291
cmNlSW50b0FycmF5KToKKwogMjAwNy0wNy0zMCAgSnVzdGluIEdhcmNpYSAgPGp1c3Rpbi5nYXJj
aWFAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluLgpJbmRleDogV2ViQ29y
ZS9XZWJDb3JlLnBybwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lv
biAyNDc4MSkKKysrIFdlYkNvcmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTg0Niw2
ICs4NDYsNyBAQCBnZGstcG9ydCB7CiAgICAgICAgIHBsYXRmb3JtL1RleHRDb2RlY0lDVS5jcHAg
XAogICAgICAgICBwbGF0Zm9ybS9UZXh0QnJlYWtJdGVyYXRvcklDVS5jcHAgXAogICAgICAgICBw
YWdlL2dkay9FdmVudEhhbmRsZXJHZGsuY3BwIFwKKyAgICAgICAgcGFnZS9nZGsvRnJhbWVHZGsu
Y3BwIFwKICAgICAgICAgcGFnZS9nZGsvQ29udGV4dE1lbnVDbGllbnRHZGsuY3BwIFwKICAgICAg
ICAgcGFnZS9nZGsvRHJhZ0NvbnRyb2xsZXJHZGsuY3BwIFwKICAgICAgICAgcGFnZS9nZGsvSW5z
cGVjdG9yQ2xpZW50R2RrLmNwcCBcCkBAIC04NjAsNyArODYxLDYgQEAgZ2RrLXBvcnQgewogICAg
ICAgICBwbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2Rr
L0ZvbnRHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGFHZGsu
Y3BwIFwKLSAgICAgICAgcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmNwcCBcCiAgICAgICAgIHBsYXRm
b3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5jcHAgXAogICAgICAgICBwbGF0Zm9ybS9nZGsv
S2V5RXZlbnRHZGsuY3BwIFwKICAgICAgICAgcGxhdGZvcm0vZ2RrL0xvZ2dpbmdHZGsuY3BwIFwK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL2dkay9GcmFtZUxvYWRlckNsaWVudEdkay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvZ2RrL0ZyYW1lTG9hZGVyQ2xpZW50R2RrLmNwcAkocmV2
aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVMb2FkZXJDbGllbnRHZGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKICNpbmNsdWRlICJEb2N1bWVudExv
YWRlci5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpA
QCAtMjYwLDcgKzI2MCwyOSBAQCBib29sIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpzaG91bGRHb1Rv
SGlzCiB9CiAKIGJvb2wgRnJhbWVMb2FkZXJDbGllbnRHZGs6OnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoKSBjb25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBmYWxzZTsgfQotdm9pZCBGcmFt
ZUxvYWRlckNsaWVudEdkazo6bWFrZURvY3VtZW50VmlldygpIHsgbm90SW1wbGVtZW50ZWQoKTsg
fQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjptYWtlRG9jdW1lbnRWaWV3KCkgeworICAg
IFdlYkNvcmU6OkZyYW1lKiBmcmFtZSA9IGNvcmUobV9mcmFtZSk7CisgICAgaWYgKGZyYW1lKQor
ICAgICAgICBmcmFtZS0+c2V0VmlldygwKTsKKworICAgIEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
bmV3IEZyYW1lVmlldyhmcmFtZSk7CisgICAgZnJhbWUtPnNldFZpZXcoZnJhbWVWaWV3KTsKKyAg
ICBmcmFtZVZpZXctPmRlcmVmKCk7CisgICAgCisgICAgLyoKKyAgICAgKiBzZXQgdGhlIFdlYktp
dEd0a1BhZ2UgKENvbnRhaW5pbmcgV2luZG93KSBhbmQgbWFrZSBzdXJlIHRvIGdpdmUgaXQgYSBz
YW5lIGRlZmF1bHQgZnJhbWUgZ2VvbWV0cnkuCisgICAgICovCisgICAgV2ViS2l0R3RrUGFnZSog
cGFnZSA9IGdldFBhZ2VGcm9tRnJhbWUobV9mcmFtZSk7CisgICAgZnJhbWVWaWV3LT5zZXRDb250
YWluaW5nV2luZG93KHBhZ2UpOworICAgIGZyYW1lVmlldy0+c2V0RnJhbWVHZW9tZXRyeShJbnRS
ZWN0KDAsIDAsIEdUS19XSURHRVQocGFnZSktPmFsbG9jYXRpb24ud2lkdGgsIEdUS19XSURHRVQo
cGFnZSktPmFsbG9jYXRpb24uaGVpZ2h0KSk7CisgICAgV2ViS2l0R3RrOjphcHBseUFkanVzdG1l
bnRzKHBhZ2UsIGZyYW1lVmlldyk7CisKKyAgICAvKgorICAgICAqIFRPRE86IFVzZSBtYXJnaW5z
IGxpa2UgV2ViVmlldz8KKyAgICAgKi8KK30KKwogdm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6
bWFrZVJlcHJlc2VudGF0aW9uKERvY3VtZW50TG9hZGVyKikgeyBub3RJbXBsZW1lbnRlZCgpOyB9
CiB2b2lkIEZyYW1lTG9hZGVyQ2xpZW50R2RrOjpmb3JjZUxheW91dCgpIHsgbm90SW1wbGVtZW50
ZWQoKTsgfQogdm9pZCBGcmFtZUxvYWRlckNsaWVudEdkazo6Zm9yY2VMYXlvdXRGb3JOb25IVE1M
KCkgeyBub3RJbXBsZW1lbnRlZCgpOyB9CkluZGV4OiBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVM
b2FkZXJDbGllbnRHZGsuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRlci9nZGsvRnJhbWVM
b2FkZXJDbGllbnRHZGsuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL2xvYWRlci9nZGsv
RnJhbWVMb2FkZXJDbGllbnRHZGsuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOSArMzYsNiBAQAog
dHlwZWRlZiBzdHJ1Y3QgX1dlYktpdEd0a0ZyYW1lIFdlYktpdEd0a0ZyYW1lOwogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBGcmFtZUdkazsKLQogICAgIGNsYXNzIEZyYW1lTG9h
ZGVyQ2xpZW50R2RrIDogcHVibGljIEZyYW1lTG9hZGVyQ2xpZW50IHsKICAgICBwdWJsaWM6CiAg
ICAgICAgIEZyYW1lTG9hZGVyQ2xpZW50R2RrKFdlYktpdEd0a0ZyYW1lKik7CkluZGV4OiBXZWJD
b3JlL3BhZ2UvZ2RrL0ZyYW1lR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvZ2Rr
L0ZyYW1lR2RrLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvcGFnZS9nZGsvRnJhbWVHZGsu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHly
aWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSwgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit2b2lkIEZyYW1lOjppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisgICAgCit2b2lkIEZyYW1lOjpjbGVhbnVwUGxhdGZv
cm1TY3JpcHRPYmplY3RzKCkKK3sgICAKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfSAgIAorICAg
IAorRHJhZ0ltYWdlUmVmIEZyYW1lOjpkcmFnSW1hZ2VGb3JTZWxlY3Rpb24oKQoreyAgICAgICAK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEZyYW1lOjpk
YXNoYm9hcmRSZWdpb25zQ2hhbmdlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBGcmFtZTo6c2V0TmVlZHNSZWFwcGx5U3R5bGVzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BhZ2UvZ2RrL0ZyYW1l
R2RrLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtS2V5Ym9hcmRFdmVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgJKHJldmlzaW9uIDI0Nzgx
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybUtleWJvYXJkRXZlbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtNDUsNyArNDUsNyBAQCB0eXBlZGVmIGxvbmcgTFBBUkFNOwogI2VuZGlmCiAKICNp
ZiBQTEFURk9STShHREspCi10eXBlZGVmIHVuaW9uIF9HZGtFdmVudCBHZGtFdmVudDsKK3R5cGVk
ZWYgc3RydWN0IF9HZGtFdmVudEtleSBHZGtFdmVudEtleTsKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oUVQpCkBAIC04MCw3ICs4MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNlbmRpZgogCiAj
aWYgUExBVEZPUk0oR0RLKQotICAgICAgICBQbGF0Zm9ybUtleWJvYXJkRXZlbnQoR2RrRXZlbnQq
KTsKKyAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5Kik7CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFFUKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QbGF0Zm9ybU1vdXNl
RXZlbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL1BsYXRmb3JtTW91c2VFdmVu
dC5oCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vUGxhdGZvcm1Nb3VzZUV2
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDggQEAgdHlwZWRlZiBsb25nIExQQVJB
TTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiB1bmlvbiBfR2RrRXZlbnQg
R2RrRXZlbnQ7Cit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRCdXR0b24gR2RrRXZlbnRCdXR0b247
Cit0eXBlZGVmIHN0cnVjdCBfR2RrRXZlbnRNb3Rpb24gR2RrRXZlbnRNb3Rpb247CiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKFFUKQpAQCAtMTE4LDcgKzExOSw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKICAgICAgICAgYm9vbCBhY3RpdmF0ZWRXZWJWaWV3KCkgY29uc3QgeyByZXR1cm4gbV9hY3Rp
dmF0ZWRXZWJWaWV3OyB9CiAjZW5kaWYKICNpZiBQTEFURk9STShHREspIAotICAgICAgICBQbGF0
Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnQqKTsKKyAgICAgICAgUGxhdGZvcm1Nb3VzZUV2ZW50KEdk
a0V2ZW50QnV0dG9uKik7CisgICAgICAgIFBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudE1vdGlv
biopOwogI2VuZGlmCiAjaWYgUExBVEZPUk0oUVQpCiAgICAgICAgIFBsYXRmb3JtTW91c2VFdmVu
dChRTW91c2VFdmVudCosIGludCBjbGlja0NvdW50KTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
UGxhdGZvcm1XaGVlbEV2ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QbGF0
Zm9ybVdoZWVsRXZlbnQuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1Bs
YXRmb3JtV2hlZWxFdmVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHR5cGVk
ZWYgbG9uZyBMUEFSQU07CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKEdESykKLXR5cGVkZWYgdW5p
b24gX0dka0V2ZW50IEdka0V2ZW50OwordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50U2Nyb2xsIEdk
a0V2ZW50U2Nyb2xsOwogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKQEAgLTg1LDcgKzg1LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBQbGF0Zm9ybVdoZWVsRXZlbnQoSFdORCwg
V1BBUkFNLCBMUEFSQU0sIGJvb2wgaXNIb3Jpem9udGFsKTsKICNlbmRpZgogI2lmIFBMQVRGT1JN
KEdESykKLSAgICAgICAgUGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50Kik7CisgICAgICAgIFBs
YXRmb3JtV2hlZWxFdmVudChHZGtFdmVudFNjcm9sbCopOwogI2VuZGlmCiAjaWYgUExBVEZPUk0o
UVQpCiAgICAgICAgIFBsYXRmb3JtV2hlZWxFdmVudChRV2hlZWxFdmVudCopOwpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9TY3JvbGxWaWV3LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9TY3JvbGxWaWV3LmgJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9TY3Jv
bGxWaWV3LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlIDx3dGYv
SGFzaFNldC5oPgogCiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiBzdHJ1Y3QgX0d0a0xheW91
dCBHdGtMYXlvdXQ7Cit0eXBlZGVmIHN0cnVjdCBfR3RrQWRqdXN0bWVudCBHdGtBZGp1c3RtZW50
OwogI2VuZGlmCiAKICNpZiBQTEFURk9STShXSU4pCkBAIC0xNTEsMTMgKzE1MSwyNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAjaWYgUExBVEZPUk0oR0RLKQogICAgICAgICBTY3JvbGxWaWV3KCk7
CiAgICAgICAgIH5TY3JvbGxWaWV3KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRHdGtBZGp1
c3RtZW50cyhHdGtBZGp1c3RtZW50KiBoYWRqLCBHdGtBZGp1c3RtZW50KiB2YWRqKTsKKyAgICAg
ICAgdmlydHVhbCB2b2lkIHNldFBhcmVudChTY3JvbGxWaWV3Kik7CisKKyAgICAgICAgdmlydHVh
bCB2b2lkIHBhaW50KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmKTsKIAotICAgICAg
ICB2aXJ0dWFsIHZvaWQgc2V0R3RrV2lkZ2V0KEd0a0xheW91dCogbGF5b3V0KTsKKyAgICAgICAg
dmlydHVhbCBJbnRQb2ludCBjb252ZXJ0Q2hpbGRUb1NlbGYoY29uc3QgV2lkZ2V0KiwgY29uc3Qg
SW50UG9pbnQmKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBJbnRQb2ludCBjb252ZXJ0U2VsZlRv
Q2hpbGQoY29uc3QgV2lkZ2V0KiwgY29uc3QgSW50UG9pbnQmKSBjb25zdDsKKworICAgICAgICB2
aXJ0dWFsIHZvaWQgZ2VvbWV0cnlDaGFuZ2VkKCkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRGcmFtZUdlb21ldHJ5KGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgdmlydHVhbCB2b2lk
IHVwZGF0ZUdlb21ldHJ5KGludCB3aWR0aCwgaW50IGhlaWdodCk7CisKKyAgICAgICAgSW50UmVj
dCB3aW5kb3dSZXNpemVyUmVjdCgpOworICAgICAgICBib29sIHJlc2l6ZXJPdmVybGFwc0NvbnRl
bnQoKSBjb25zdDsKKyAgICAgICAgdm9pZCBhZGp1c3RPdmVybGFwcGluZ1Njcm9sbGJhckNvdW50
KGludCBvdmVybGFwRGVsdGEpOworCisgICAgICAgIHZvaWQgYWRkVG9EaXJ0eVJlZ2lvbihjb25z
dCBJbnRSZWN0Jik7CisgICAgICAgIHZvaWQgc2Nyb2xsQmFja2luZ1N0b3JlKGludCBkeCwgaW50
IGR5LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50UmVjdCYgY2xpcFJl
Y3QpOworICAgICAgICB2b2lkIHVwZGF0ZUJhY2tpbmdTdG9yZSgpOwogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHZvaWQgdXBkYXRlVmlldyhjb25zdCBJbnRSZWN0JiwgYm9vbCBub3cgPSBmYWxzZSk7
Ci0gICAgICAgIHZvaWQgdXBkYXRlU2Nyb2xsYmFycygpOworICAgICAgICBJbnRTaXplIG1heGlt
dW1TY3JvbGwoKSBjb25zdDsKKyAgICAgICAgdm9pZCB1cGRhdGVTY3JvbGxiYXJzKGNvbnN0IElu
dFNpemUmIGRlc2lyZWRPZmZzZXQpOwogICAgICAgICBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0ZTsK
ICAgICAgICAgU2Nyb2xsVmlld1ByaXZhdGUqIG1fZGF0YTsKICNlbmRpZgpAQCAtMTg4LDYgKzIw
Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXIgKnZl
cnRpY2FsU2Nyb2xsQmFyKCkgY29uc3Q7CiAKICAgICBwcml2YXRlOgorICAgICAgICBIYXNoU2V0
PFdpZGdldCo+KiBjaGlsZHJlbigpOwogICAgICAgICB2b2lkIHVwZGF0ZVNjcm9sbGJhcnMoY29u
c3QgSW50U2l6ZSYgZGVzaXJlZE9mZnNldCk7CiAgICAgICAgIEludFNpemUgbWF4aW11bVNjcm9s
bCgpIGNvbnN0OwogICAgICAgICBjbGFzcyBTY3JvbGxWaWV3UHJpdmF0ZTsKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vV2lkZ2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9XaWRn
ZXQuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1dpZGdldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4IEBAIHR5cGVkZWYgc3RydWN0IEhXTkRfXyogSFdORDsK
ICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQotdHlwZWRlZiBzdHJ1Y3QgX0dka0RyYXdhYmxl
IEdka0RyYXdhYmxlOwogdHlwZWRlZiBzdHJ1Y3QgX0d0a1dpZGdldCBHdGtXaWRnZXQ7Cit0eXBl
ZGVmIHN0cnVjdCBfV2ViS2l0R3RrUGFnZSBXZWJLaXRHdGtQYWdlOwogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShRVCkKQEAgLTEzNiwxMCArMTM2LDI4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNl
bmRpZgogCiAjaWYgUExBVEZPUk0oR0RLKQotICAgICAgICBXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzZXRHdGtXaWRnZXQoR3RrV2lkZ2V0Kik7Ci0gICAgICAgIEdk
a0RyYXdhYmxlKiBnZGtEcmF3YWJsZSgpIGNvbnN0OwotICAgICAgICBHdGtXaWRnZXQqIGd0a1dp
ZGdldCgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0SW50ZXJuYWxHdGtXaWRnZXQo
R3RrV2lkZ2V0Kik7CisgICAgICAgIEd0a1dpZGdldCogaW50ZXJuYWxHdGtXaWRnZXQoKSBjb25z
dDsKKworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UGFyZW50KFNjcm9sbFZpZXcqKTsKKyAgICAg
ICAgU2Nyb2xsVmlldyogcGFyZW50KCkgY29uc3Q7CisKKyAgICAgICAgdm9pZCBzZXRDb250YWlu
aW5nV2luZG93KFdlYktpdEd0a1BhZ2UqKTsKKyAgICAgICAgV2ViS2l0R3RrUGFnZSogY29udGFp
bmluZ1dpbmRvdygpIGNvbnN0OworCisgICAgICAgIHZpcnR1YWwgdm9pZCBnZW9tZXRyeUNoYW5n
ZWQoKSBjb25zdDsKKworICAgICAgICBJbnRSZWN0IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3co
Y29uc3QgSW50UmVjdCYpIGNvbnN0OworICAgICAgICBJbnRQb2ludCBjb252ZXJ0VG9Db250YWlu
aW5nV2luZG93KGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgICAgIEludFBvaW50IGNvbnZl
cnRGcm9tQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRQb2ludCYpIGNvbnN0OworCisgICAgICAg
IHZpcnR1YWwgSW50UG9pbnQgY29udmVydENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCosIGNvbnN0
IEludFBvaW50JikgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgSW50UG9pbnQgY29udmVydFNlbGZU
b0NoaWxkKGNvbnN0IFdpZGdldCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CisKKyAgICAgICAg
Ym9vbCBzdXBwcmVzc0ludmFsaWRhdGlvbigpIGNvbnN0OworICAgICAgICB2b2lkIHNldFN1cHBy
ZXNzSW52YWxpZGF0aW9uKGJvb2wpOworCisgICAgICAgIHZvaWQgc2V0U2Nyb2xsVmlld0NvbnRy
b2woKTsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oUVQpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9GcmFtZUdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJh
bWVHZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1l
R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCi0gKiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
RnJhbWVHZGsuaCIKLQotI2luY2x1ZGUgIkNTdHJpbmcuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVyLmgiCi0jaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgi
Ci0jaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKLSNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudEdk
ay5oIgotI2luY2x1ZGUgIkZyYW1lUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgot
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXF1ZXN0Lmgi
Ci0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgotI2luY2x1ZGUgIktleWJvYXJkQ29kZXMuaCIK
LSNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgotI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRl
ICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQu
aCIKLSNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgotI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxF
dmVudC5oIgotI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgotI2luY2x1ZGUgIlJlbmRlclRyZWVB
c1RleHQuaCIKLSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgotI2luY2x1ZGUgIlJlc291cmNl
UmVzcG9uc2UuaCIKLSNpbmNsdWRlICJTZWxlY3Rpb25Db250cm9sbGVyLmgiCi0jaW5jbHVkZSAi
U2V0dGluZ3MuaCIKLSNpbmNsdWRlICJUeXBpbmdDb21tYW5kLmgiCi0jaW5jbHVkZSAid2Via2l0
Z3RrZnJhbWUuaCIKLQotI2luY2x1ZGUgPGdkay9nZGsuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+
Ci0KLS8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0Ci0vLyBUaGlz
IGRvZXMgbm90IGJlbG9uZyBoZXJlIGFuZCBJJ20gbm90IHN1cmUgd2hlcmUKLS8vIGl0IHNob3Vs
ZCBnbwotLy8gSSBkb24ndCBrbm93IHdoYXQgdGhlIHBsYW5zIG9yIGRlc2lnbiBpcwotLy8gZm9y
IG5vbmUgY29kZSByZXNvdXJjZXMKLVZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJyYXko
Y29uc3QgY2hhciogcmVzb3VyY2VOYW1lKQotewotICAgIFZlY3RvcjxjaGFyPiByZXNvdXJjZTsK
LSAgICAvL2lmIChzdHJjbXAocmVzb3VyY2VOYW1lLCJtaXNzaW5nSW1hZ2UiKSA9PSAwKSB7Ci0g
ICAgLy99Ci0gICAgcmV0dXJuIHJlc291cmNlOwotfQotCi1zdHJ1Y3QgRnJhbWVHZGtFeHBvc2VE
YXRhIHsKLSAgICBHdGtDb250YWluZXIgKmNvbnRhaW5lcjsKLSAgICBHZGtFdmVudEV4cG9zZSAq
ZXhwb3NlOwotfTsKLQotc3RhdGljIHZvaWQgZnJhbWVfZ2RrX2V4cG9zZV9jaGlsZChHdGtXaWRn
ZXQgKndpZGdldCwgZ3BvaW50ZXIgX2RhdGEpCi17Ci0gICAgRnJhbWVHZGtFeHBvc2VEYXRhKiBk
YXRhID0gKEZyYW1lR2RrRXhwb3NlRGF0YSopX2RhdGE7Ci0gICAgaW50IHdpZHRoLCBoZWlnaHQ7
Ci0gICAgZ3RrX2NvbnRhaW5lcl9wcm9wYWdhdGVfZXhwb3NlKGRhdGEtPmNvbnRhaW5lciwgd2lk
Z2V0LCBkYXRhLT5leHBvc2UpOwotfSAKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1GcmFtZUdk
azo6RnJhbWVHZGsoUGFnZSogcGFnZSwgSFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1l
bnQsIEZyYW1lTG9hZGVyQ2xpZW50R2RrKiBmcmFtZUxvYWRlcikKLSAgICA6IEZyYW1lKHBhZ2Us
IG93bmVyRWxlbWVudCwgZnJhbWVMb2FkZXIpCi17Ci0gICAgU2V0dGluZ3MqIHNldHRpbmdzID0g
cGFnZS0+c2V0dGluZ3MoKTsKLSAgICBzZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNh
bGx5KHRydWUpOwotICAgIHNldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoNSk7Ci0gICAgc2V0
dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoNSk7Ci0gICAgc2V0dGluZ3MtPnNldFNo
b3VsZFByaW50QmFja2dyb3VuZHModHJ1ZSk7Ci0gICAgc2V0dGluZ3MtPnNldEphdmFTY3JpcHRF
bmFibGVkKHRydWUpOwotCi0gICAgc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDE0
KTsKLSAgICBzZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDE0KTsKLSAgICBzZXR0aW5ncy0+
c2V0U2VyaWZGb250RmFtaWx5KCJUaW1lcyBOZXcgUm9tYW4iKTsKLSAgICBzZXR0aW5ncy0+c2V0
U2Fuc1NlcmlmRm9udEZhbWlseSgiQXJpYWwiKTsKLSAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250
RmFtaWx5KCJDb3VyaWVyIik7Ci0gICAgc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgi
QXJpYWwiKTsKLX0KLQotRnJhbWVHZGs6On5GcmFtZUdkaygpCi17Ci0gICAgbG9hZGVyKCktPmNh
bmNlbEFuZENsZWFyKCk7Ci19Ci0KLXZvaWQgRnJhbWVHZGs6OmR1bXBSZW5kZXJUcmVlKCkgY29u
c3QKLXsKLSAgICBpZiAodmlldygpLT5uZWVkc0xheW91dCgpKQotICAgICAgICB2aWV3KCktPmxh
eW91dCgpOwotICAgIAotICAgIFN0cmluZyB0eHQgPSBleHRlcm5hbFJlcHJlc2VudGF0aW9uKHJl
bmRlcmVyKCkpOwotICAgIENTdHJpbmcgdXRmOFN0ciA9IHR4dC51dGY4KCk7Ci0gICAgY29uc3Qg
Y2hhciAqdXRmOCA9IHV0ZjhTdHIuZGF0YSgpOwotICAgIGlmICh1dGY4KQotICAgICAgICBwcmlu
dGYoIiVzXG4iLCB1dGY4KTsKLSAgICBlbHNlCi0gICAgICAgIHByaW50ZigiRnJhbWVHZGs6OmR1
bXBSZW5kZXJUcmVlKCkgbm8gZGF0YVxuIik7Ci19Ci0KLWJvb2wgRnJhbWVHZGs6OmtleVByZXNz
KGNvbnN0IFBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQpCi17Ci0gICAgaWYgKCFldmVu
dEhhbmRsZXIoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIGV2ZW50SGFu
ZGxlcigpLT5rZXlFdmVudChrZXlFdmVudCk7Ci19Ci0KLXZvaWQgRnJhbWVHZGs6OmhhbmRsZUdk
a0V2ZW50KEdka0V2ZW50KiBldmVudCkKLXsKLSAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Ci0K
LSAgICAgICAgY2FzZSBHREtfRVhQT1NFOiB7Ci0gICAgICAgICAgICBHZGtSZWN0YW5nbGUgY2xp
cDsKLSAgICAgICAgICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdp
b24sICZjbGlwKTsKLSAgICAgICAgICAgIGdka193aW5kb3dfYmVnaW5fcGFpbnRfcmVnaW9uKGV2
ZW50LT5hbnkud2luZG93LCBldmVudC0+ZXhwb3NlLnJlZ2lvbik7Ci0gICAgICAgICAgICBjYWly
b190KiBjciA9IGdka19jYWlyb19jcmVhdGUoZXZlbnQtPmFueS53aW5kb3cpOwotICAgICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0IGN0eChjcik7Ci0gICAgICAgICAgICBjdHguc2V0R2RrRHJhd2Fi
bGUoZXZlbnQtPmFueS53aW5kb3cpOwotICAgICAgICAgICAgaWYgKHJlbmRlcmVyKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAodmlldygpLT5uZWVkc0xheW91dCgpKQotICAgICAgICAgICAgICAg
ICAgICB2aWV3KCktPmxheW91dCgpOwotICAgICAgICAgICAgICAgIEludFJlY3QgcmVjdChjbGlw
LngsIGNsaXAueSwgY2xpcC53aWR0aCwgY2xpcC5oZWlnaHQpOwotICAgICAgICAgICAgICAgIHBh
aW50KCZjdHgsIHJlY3QpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2Fpcm9fZGVzdHJv
eShjcik7Ci0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBNYWtlIHN1cmUgY2hpbGRy
ZW4gb2YgdGhlIHZpZXcgZ2V0IHJlZHJhd24KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAg
RnJhbWVHZGtFeHBvc2VEYXRhIGRhdGEgPSB7IEdUS19DT05UQUlORVIodmlldygpLT5ndGtXaWRn
ZXQoKSksICZldmVudC0+ZXhwb3NlIH07Ci0gICAgICAgICAgICBndGtfY29udGFpbmVyX2ZvcmFs
bChHVEtfQ09OVEFJTkVSKHZpZXcoKS0+Z3RrV2lkZ2V0KCkpLCBmcmFtZV9nZGtfZXhwb3NlX2No
aWxkLCAmZGF0YSk7Ci0gICAgICAgICAgICBnZGtfd2luZG93X2VuZF9wYWludChldmVudC0+YW55
LndpbmRvdyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0K
LSAgICAgICAgY2FzZSBHREtfQ09ORklHVVJFOiB7Ci0gICAgICAgICAgICB2aWV3KCktPnVwZGF0
ZUdlb21ldHJ5KGV2ZW50LT5jb25maWd1cmUud2lkdGgsIGV2ZW50LT5jb25maWd1cmUuaGVpZ2h0
KTsKLSAgICAgICAgICAgIGZvcmNlTGF5b3V0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIGNhc2UgR0RLX1NDUk9MTDogewotICAgICAgICAgICAgUGxhdGZvcm1X
aGVlbEV2ZW50IHdoZWVsRXZlbnQoZXZlbnQpOwotICAgICAgICAgICAgdmlldygpLT53aGVlbEV2
ZW50KHdoZWVsRXZlbnQpOwotICAgICAgICAgICAgaWYgKHdoZWVsRXZlbnQuaXNBY2NlcHRlZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgSGl0VGVzdFJlcXVlc3Qg
aGl0VGVzdFJlcXVlc3QodHJ1ZSwgdHJ1ZSk7Ci0gICAgICAgICAgICBIaXRUZXN0UmVzdWx0IGhp
dFRlc3RSZXN1bHQod2hlZWxFdmVudC5wb3MoKSk7Ci0gICAgICAgICAgICByZW5kZXJlcigpLT5s
YXllcigpLT5oaXRUZXN0KGhpdFRlc3RSZXF1ZXN0LCBoaXRUZXN0UmVzdWx0KTsKLSAgICAgICAg
ICAgIE5vZGUqIG5vZGUgPSBoaXRUZXN0UmVzdWx0LmlubmVyTm9kZSgpOwotICAgICAgICAgICAg
aWYgKCFub2RlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIC8qCi0gICAg
ICAgICAgICAgKiBGSVhNRTogRG9lcyB0aGlzIGJlbG9uZyBoZXJlPwotICAgICAgICAgICAgICog
RGVmYXVsdCB0byBzY3JvbGxpbmcgdGhlIHBhZ2UKLSAgICAgICAgICAgICAqIG5vdCBzdXJlIHdo
eSBpdHMgbnVsbAotICAgICAgICAgICAgICogYnJva2UgYW55d2F5IHdoZW4gaXRzIG5vdCBudWxs
Ci0gICAgICAgICAgICAgKiBkb1Njcm9sbChyZW5kZXJlcigpLCB3aGVlbEV2ZW50LmRlbHRhWCgp
LCB3aGVlbEV2ZW50LmRlbHRhWSgpKTsKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHREtfRFJBR19FTlRFUjoKLSAgICAgICAgY2Fz
ZSBHREtfRFJBR19MRUFWRToKLSAgICAgICAgY2FzZSBHREtfRFJBR19NT1RJT046Ci0gICAgICAg
IGNhc2UgR0RLX0RSQUdfU1RBVFVTOgotICAgICAgICBjYXNlIEdES19EUk9QX1NUQVJUOgotICAg
ICAgICBjYXNlIEdES19EUk9QX0ZJTklTSEVEOiB7Ci0gICAgICAgICAgICAvL2Jvb2wgdXBkYXRl
RHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgQ2xpcGJvYXJkKik7Ci0gICAg
ICAgICAgICAvL3ZvaWQgY2FuY2VsRHJhZ0FuZERyb3AoY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50
JiwgQ2xpcGJvYXJkKik7Ci0gICAgICAgICAgICAvL2Jvb2wgcGVyZm9ybURyYWdBbmREcm9wKGNv
bnN0IFBsYXRmb3JtTW91c2VFdmVudCYsIENsaXBib2FyZCopOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHREtfTU9USU9OX05PVElGWToKLSAgICAgICAgICAg
IGV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKFBsYXRmb3JtTW91c2VFdmVudChldmVudCkpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICAg
ICAgY2FzZSBHREtfMkJVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVT
UzoKLSAgICAgICAgICAgIGV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoUGxh
dGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBHREtfQlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgICAgICBldmVudEhhbmRsZXIoKS0+aGFuZGxl
TW91c2VSZWxlYXNlRXZlbnQoUGxhdGZvcm1Nb3VzZUV2ZW50KGV2ZW50KSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBHREtfS0VZX1BSRVNTOgotICAgICAgICBjYXNlIEdES19L
RVlfUkVMRUFTRTogewotICAgICAgICAgICAgUGxhdGZvcm1LZXlib2FyZEV2ZW50IGtleUV2ZW50
KGV2ZW50KTsKLSAgICAgICAgICAgIGtleVByZXNzKGtleUV2ZW50KTsKLSAgICAgICAgfQotICAg
ICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEZyYW1l
Ojppc3N1ZVRyYW5zcG9zZUNvbW1hbmQoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci19Ci0K
LXZvaWQgRnJhbWU6OmNsZWFudXBQbGF0Zm9ybVNjcmlwdE9iamVjdHMoKQotewotICAgIG5vdElt
cGxlbWVudGVkKCk7Ci19Ci0KLURyYWdJbWFnZVJlZiBGcmFtZTo6ZHJhZ0ltYWdlRm9yU2VsZWN0
aW9uKCkgCi17Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9p
ZCBGcmFtZTo6ZGFzaGJvYXJkUmVnaW9uc0NoYW5nZWQoKQotewotICAgIG5vdEltcGxlbWVudGVk
KCk7Ci19Ci0KLX0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZyYW1lR2RrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRnJhbWVHZGsuaAkocmV2aXNpb24gMjQ3ODEp
CisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9GcmFtZUdkay5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBF
bW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0KLSNpZm5kZWYgRnJhbWVHZGtfaAotI2RlZmluZSBGcmFtZUdka19oCi0KLSNpbmNsdWRlICJF
ZGl0b3JDbGllbnQuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgPGdkay9nZGsuaD4K
LSNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZUNsaWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGcmFtZUdkazsKLWNsYXNzIEZyYW1lTG9hZGVyQ2xp
ZW50R2RrOwotY2xhc3MgRm9ybURhdGE7Ci0KLQotY2xhc3MgRnJhbWVHZGsgOiBwdWJsaWMgRnJh
bWUgewotcHVibGljOgotICAgIEZyYW1lR2RrKFBhZ2UqLCBIVE1MRnJhbWVPd25lckVsZW1lbnQq
LCBGcmFtZUxvYWRlckNsaWVudEdkayopOwotICAgIHZpcnR1YWwgfkZyYW1lR2RrKCk7Ci0KLSAg
ICB2b2lkIGhhbmRsZUdka0V2ZW50KEdka0V2ZW50Kik7Ci0gICAgYm9vbCBrZXlQcmVzcyhjb25z
dCBQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleUV2ZW50KTsKLQotICAgIHZvaWQgZHVtcFJlbmRl
clRyZWUoKSBjb25zdDsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dkay9LZXlFdmVudEdkay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsv
S2V5RXZlbnRHZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0tleUV2ZW50R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU4LDE3ICs0NTgsMTcgQEAgc3Rh
dGljIGludCB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KHVucwogCiB9CiAKLVBsYXRmb3JtS2V5
Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50KiBldmVudCkKK1BsYXRm
b3JtS2V5Ym9hcmRFdmVudDo6UGxhdGZvcm1LZXlib2FyZEV2ZW50KEdka0V2ZW50S2V5KiBldmVu
dCkKIHsKICAgICBtX2lzS2V5VXAgPSBldmVudC0+dHlwZSA9PSBHREtfS0VZX1JFTEVBU0U7Ci0g
ICAgbV9zaGlmdEtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBHREtfU0hJRlRfTUFTSyAhPSAwOwot
ICAgIG1fY3RybEtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLICE9IDA7
Ci0gICAgbV9hbHRLZXkgPSBldmVudC0+a2V5LnN0YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwOwot
ICAgIG1fbWV0YUtleSA9IGV2ZW50LT5rZXkuc3RhdGUgJiBHREtfTU9EMl9NQVNLICE9IDA7Ci0g
ICAgbV90ZXh0ID0gZXZlbnQtPmtleS5zdHJpbmc7Ci0gICAgbV91bm1vZGlmaWVkVGV4dCA9IGV2
ZW50LT5rZXkuc3RyaW5nOwotICAgIG1fa2V5SWRlbnRpZmllciA9IGtleUlkZW50aWZpZXJGb3JH
ZGtLZXlDb2RlKGV2ZW50LT5rZXkua2V5dmFsKTsKLSAgICBtX1dpbmRvd3NLZXlDb2RlID0gd2lu
ZG93c0tleUNvZGVGb3JLZXlFdmVudChldmVudC0+a2V5LmtleXZhbCk7CisgICAgbV9zaGlmdEtl
eSA9IGV2ZW50LT5zdGF0ZSAmIEdES19TSElGVF9NQVNLICE9IDA7CisgICAgbV9jdHJsS2V5ID0g
ZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSyAhPSAwOworICAgIG1fYWx0S2V5ID0gZXZl
bnQtPnN0YXRlICYgR0RLX01PRDFfTUFTSyAhPSAwOworICAgIG1fbWV0YUtleSA9IGV2ZW50LT5z
dGF0ZSAmIEdES19NT0QyX01BU0sgIT0gMDsKKyAgICBtX3RleHQgPSBldmVudC0+c3RyaW5nOwor
ICAgIG1fdW5tb2RpZmllZFRleHQgPSBldmVudC0+c3RyaW5nOworICAgIG1fa2V5SWRlbnRpZmll
ciA9IGtleUlkZW50aWZpZXJGb3JHZGtLZXlDb2RlKGV2ZW50LT5rZXl2YWwpOworICAgIG1fV2lu
ZG93c0tleUNvZGUgPSB3aW5kb3dzS2V5Q29kZUZvcktleUV2ZW50KGV2ZW50LT5rZXl2YWwpOwog
ICAgIG1fYXV0b1JlcGVhdCA9IGZhbHNlOwogICAgIG1faXNLZXlwYWQgPSBmYWxzZTsKIApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvTW91c2VFdmVudEdkay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDU3ICsyOCw3MSBAQAogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogCiAj
aW5jbHVkZSAiU3lzdGVtVGltZS5oIgotI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgIkFz
c2VydGlvbnMuaCIKKwogI2luY2x1ZGUgPGdkay9nZGsuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAvLyBGSVhNRTogV291bGQgYmUgZXZlbiBiZXR0ZXIgdG8gZmlndXJlIG91dCB3aGljaCBt
b2RpZmllciBpcyBBbHQgaW5zdGVhZCBvZiBhbHdheXMgdXNpbmcgR0RLX01PRDFfTUFTSy4KIAot
UGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnQqIGV2ZW50KQor
UGxhdGZvcm1Nb3VzZUV2ZW50OjpQbGF0Zm9ybU1vdXNlRXZlbnQoR2RrRXZlbnRCdXR0b24qIGV2
ZW50KQogewogICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKLSAgICBtX3Bvc2l0aW9u
ID0gSW50UG9pbnQoKGludClldmVudC0+bW90aW9uLngsIChpbnQpZXZlbnQtPm1vdGlvbi55KTsK
LSAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVudC0+bW90aW9uLnhfcm9v
dCwgKGludClldmVudC0+bW90aW9uLnlfcm9vdCk7Ci0gICAgbV9zaGlmdEtleSA9IGV2ZW50LT5i
dXR0b24uc3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKLSAgICBtX2N0cmxLZXkgPSBldmVudC0+YnV0
dG9uLnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKLSAgICBtX2FsdEtleSA9IGV2ZW50LT5idXR0
b24uc3RhdGUgJiBHREtfTU9EMV9NQVNLOwotICAgIG1fbWV0YUtleSA9IGV2ZW50LT5idXR0b24u
c3RhdGUgJiBHREtfTU9EMl9NQVNLOworICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2
ZW50LT54LCAoaW50KWV2ZW50LT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQo
KGludClldmVudC0+eF9yb290LCAoaW50KWV2ZW50LT55X3Jvb3QpOworICAgIG1fc2hpZnRLZXkg
PSBldmVudC0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKKyAgICBtX2N0cmxLZXkgPSBldmVudC0+
c3RhdGUgJiBHREtfQ09OVFJPTF9NQVNLOworICAgIG1fYWx0S2V5ID0gZXZlbnQtPnN0YXRlICYg
R0RLX01PRDFfTUFTSzsKKyAgICBtX21ldGFLZXkgPSBldmVudC0+c3RhdGUgJiBHREtfTU9EMl9N
QVNLOwogCiAgICAgc3dpdGNoIChldmVudC0+dHlwZSkgewotICAgICAgICBjYXNlIEdES19NT1RJ
T05fTk9USUZZOgotICAgICAgICAgICAgbV9ldmVudFR5cGUgPSBNb3VzZUV2ZW50TW92ZWQ7Ci0g
ICAgICAgICAgICBtX2J1dHRvbiA9IE5vQnV0dG9uOworICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVT
UzoKKyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgIGNhc2UgR0RLXzNCVVRUT05fUFJF
U1M6CisgICAgY2FzZSBHREtfQlVUVE9OX1JFTEVBU0U6CisgICAgICAgIG1fZXZlbnRUeXBlID0g
TW91c2VFdmVudFByZXNzZWQ7CisgICAgICAgIGlmIChldmVudC0+dHlwZSA9PSBHREtfQlVUVE9O
X1JFTEVBU0UpIHsKKyAgICAgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFJlbGVhc2Vk
OwogICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgR0RLX0JVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtfMkJVVFRPTl9Q
UkVTUzoKLSAgICAgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKLSAgICAgICAgY2FzZSBHREtf
QlVUVE9OX1JFTEVBU0U6Ci0gICAgICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNlRXZlbnRQcmVz
c2VkOwotICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRUT05fUkVMRUFTRSkg
ewotICAgICAgICAgICAgICAgIG1fZXZlbnRUeXBlID0gTW91c2VFdmVudFJlbGVhc2VkOwotICAg
ICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDA7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGV2
ZW50LT50eXBlID09IEdES19CVVRUT05fUFJFU1MpCi0gICAgICAgICAgICAgICAgbV9jbGlja0Nv
dW50ID0gMTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18yQlVUVE9O
X1BSRVNTKQotICAgICAgICAgICAgICAgIG1fY2xpY2tDb3VudCA9IDI7Ci0gICAgICAgICAgICBl
bHNlIGlmIChldmVudC0+dHlwZSA9PSBHREtfM0JVVFRPTl9QUkVTUykKLSAgICAgICAgICAgICAg
ICBtX2NsaWNrQ291bnQgPSAzOwotCi0gICAgICAgICAgICBpZiAoZXZlbnQtPmJ1dHRvbi5idXR0
b24gPT0gMSkKLSAgICAgICAgICAgICAgICBtX2J1dHRvbiA9IExlZnRCdXR0b247Ci0gICAgICAg
ICAgICBlbHNlIGlmIChldmVudC0+YnV0dG9uLmJ1dHRvbiA9PSAyKQotICAgICAgICAgICAgICAg
IG1fYnV0dG9uID0gTWlkZGxlQnV0dG9uOwotICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1
dHRvbi5idXR0b24gPT0gMykKLSAgICAgICAgICAgICAgICBtX2J1dHRvbiA9IFJpZ2h0QnV0dG9u
OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiVW5rbm93biBtb3VzZSBldmVudFxuIik7Ci0gICAgICAgICAgICBhc3Nl
cnQoMCk7Ci0gICAgfQorICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES19CVVRU
T05fUFJFU1MpCisgICAgICAgICAgICBtX2NsaWNrQ291bnQgPSAxOworICAgICAgICBlbHNlIGlm
IChldmVudC0+dHlwZSA9PSBHREtfMkJVVFRPTl9QUkVTUykKKyAgICAgICAgICAgIG1fY2xpY2tD
b3VudCA9IDI7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT50eXBlID09IEdES18zQlVUVE9OX1BS
RVNTKQorICAgICAgICAgICAgbV9jbGlja0NvdW50ID0gMzsKKworICAgICAgICBpZiAoZXZlbnQt
PmJ1dHRvbiA9PSAxKQorICAgICAgICAgICAgbV9idXR0b24gPSBMZWZ0QnV0dG9uOworICAgICAg
ICBlbHNlIGlmIChldmVudC0+YnV0dG9uID09IDIpCisgICAgICAgICAgICBtX2J1dHRvbiA9IE1p
ZGRsZUJ1dHRvbjsKKyAgICAgICAgZWxzZSBpZiAoZXZlbnQtPmJ1dHRvbiA9PSAzKQorICAgICAg
ICAgICAgbV9idXR0b24gPSBSaWdodEJ1dHRvbjsKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZh
dWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9OwogfQogCitQbGF0Zm9y
bU1vdXNlRXZlbnQ6OlBsYXRmb3JtTW91c2VFdmVudChHZGtFdmVudE1vdGlvbiogbW90aW9uKQor
eworICAgIG1fdGltZXN0YW1wID0gY3VycmVudFRpbWUoKTsKKyAgICBtX3Bvc2l0aW9uID0gSW50
UG9pbnQoKGludCltb3Rpb24tPngsIChpbnQpbW90aW9uLT55KTsKKyAgICBtX2dsb2JhbFBvc2l0
aW9uID0gSW50UG9pbnQoKGludCltb3Rpb24tPnhfcm9vdCwgKGludCltb3Rpb24tPnlfcm9vdCk7
CisgICAgbV9zaGlmdEtleSA9IG1vdGlvbi0+c3RhdGUgJiBHREtfU0hJRlRfTUFTSzsKKyAgICBt
X2N0cmxLZXkgPSBtb3Rpb24tPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKKyAgICBtX2FsdEtl
eSA9IG1vdGlvbi0+c3RhdGUgJiBHREtfTU9EMV9NQVNLOworICAgIG1fbWV0YUtleSA9IG1vdGlv
bi0+c3RhdGUgJiBHREtfTU9EMl9NQVNLOworCisgICAgc3dpdGNoIChtb3Rpb24tPnR5cGUpIHsK
KyAgICBjYXNlIEdES19NT1RJT05fTk9USUZZOgorICAgICAgICBtX2V2ZW50VHlwZSA9IE1vdXNl
RXZlbnRNb3ZlZDsKKyAgICAgICAgbV9idXR0b24gPSBOb0J1dHRvbjsKKyAgICAgICAgbV9jbGlj
a0NvdW50ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfTsKK30KIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1BsYXRmb3JtU2NyZWVuR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9QbGF0Zm9ybVNjcmVlbkdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvUGxhdGZvcm1TY3JlZW5HZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw5IEBACiAKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIldpZGdldC5o
IgotI2luY2x1ZGUgPGdkay9nZGsuaD4KKyNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCisKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgogCkBAIC0zOCwxMCArNDAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBp
bnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpIAogewotICAgIEFTU0VSVCh3aWRnZXQtPmdk
a0RyYXdhYmxlKCkpOworICAgIEFTU0VSVCh3aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKSAmJiB3
aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKS0+YmluX3dpbmRvdyk7CiAKICAgICBnaW50IGR1bW15
LCBkZXB0aDsKLSAgICBnZGtfd2luZG93X2dldF9nZW9tZXRyeSh3aWRnZXQtPmdka0RyYXdhYmxl
KCksICZkdW1teSwgJmR1bW15LCAmZHVtbXksICZkdW1teSwgJmRlcHRoKTsKKyAgICBnZGtfd2lu
ZG93X2dldF9nZW9tZXRyeSh3aWRnZXQtPmNvbnRhaW5pbmdXaW5kb3coKS0+YmluX3dpbmRvdywg
JmR1bW15LCAmZHVtbXksICZkdW1teSwgJmR1bW15LCAmZGVwdGgpOwogICAgIHJldHVybiBkZXB0
aDsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhci5oCShy
ZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3JtU2Nyb2xsQmFy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDggQEAKICNpbmNsdWRlICJXaWRnZXQuaCIK
ICNpbmNsdWRlICJTY3JvbGxCYXIuaCIKIAordHlwZWRlZiBzdHJ1Y3QgX0d0a0FkanVzdG1lbnQg
R3RrQWRqdXN0bWVudDsKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBQbGF0Zm9ybVNj
cm9sbGJhciA6IHB1YmxpYyBXaWRnZXQsIHB1YmxpYyBTY3JvbGxiYXIgewpAQCAtNTEsNiArNTMs
MTAgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVUaHVtYlBv
c2l0aW9uKCk7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZVRodW1iUHJvcG9ydGlvbigpOworCitw
cml2YXRlOgorICAgIHN0YXRpYyB2b2lkIGd0a1ZhbHVlQ2hhbmdlZChHdGtBZGp1c3RtZW50Kiwg
UGxhdGZvcm1TY3JvbGxiYXIqKTsKKyAgICBHdGtBZGp1c3RtZW50KiBtX2FkanVzdG1lbnQ7CiB9
OwogCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9QbGF0Zm9ybVNjcm9sbEJhckdkay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvUGxhdGZvcm1TY3JvbGxCYXJH
ZGsuY3BwCShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ2RrL1BsYXRmb3Jt
U2Nyb2xsQmFyR2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsMzQgKzM3LDMzIEBACiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCisKIFBsYXRmb3JtU2Nyb2xsYmFyOjpQbGF0Zm9ybVNj
cm9sbGJhcihTY3JvbGxiYXJDbGllbnQqIGNsaWVudCwgU2Nyb2xsYmFyT3JpZW50YXRpb24gb3Jp
ZW50YXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2Nyb2xsYmFy
Q29udHJvbFNpemUgY29udHJvbFNpemUpCiAgICAgOiBTY3JvbGxiYXIoY2xpZW50LCBvcmllbnRh
dGlvbiwgY29udHJvbFNpemUpCisgICAgLCBtX2FkanVzdG1lbnQoR1RLX0FESlVTVE1FTlQoZ3Rr
X2FkanVzdG1lbnRfbmV3KDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApKSkKIHsgCiAgICAg
R3RrU2Nyb2xsYmFyKiBzY3JvbGxCYXIgPSBvcmllbnRhdGlvbiA9PSBIb3Jpem9udGFsU2Nyb2xs
YmFyID8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdUS19TQ1JPTExCQVIoOjpndGtf
aHNjcm9sbGJhcl9uZXcoTlVMTCkpIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdU
S19TQ1JPTExCQVIoOjpndGtfdnNjcm9sbGJhcl9uZXcoTlVMTCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgR1RLX1NDUk9MTEJBUig6Omd0a19oc2Nyb2xsYmFyX25ldyhtX2FkanVz
dG1lbnQpKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVEtfU0NST0xMQkFSKDo6
Z3RrX3ZzY3JvbGxiYXJfbmV3KG1fYWRqdXN0bWVudCkpOwogICAgIGd0a193aWRnZXRfc2hvdyhH
VEtfV0lER0VUKHNjcm9sbEJhcikpOwotICAgIHNldEd0a1dpZGdldChHVEtfV0lER0VUKHNjcm9s
bEJhcikpOworICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChzY3JvbGxCYXIpKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0KEdfT0JKRUNUKHNjcm9sbEJhciksICJ2YWx1ZS1jaGFuZ2VkIiwgR19DQUxM
QkFDSyhQbGF0Zm9ybVNjcm9sbGJhcjo6Z3RrVmFsdWVDaGFuZ2VkKSwgdGhpcyk7CisKKyAgICBz
ZXRJbnRlcm5hbEd0a1dpZGdldChHVEtfV0lER0VUKHNjcm9sbEJhcikpOwogCiAgICAgLyoKICAg
ICAgKiBhc3NpZ24gYSBzYW5lIGRlZmF1bHQgd2lkdGggYW5kIGhlaWdodCB0byB0aGUgU2Nyb2xs
QmFyLCBvdGhlcndpc2UKICAgICAgKiB3ZSB3aWxsIGVuZCB1cCB3aXRoIGEgMCB3aWR0aCBzY3Jv
bGxiYXIuCiAgICAgICovCiAgICAgcmVzaXplKFBsYXRmb3JtU2Nyb2xsYmFyOjpob3Jpem9udGFs
U2Nyb2xsYmFySGVpZ2h0KCksCi0gICAgICAgICAgIFBsYXRmb3JtU2Nyb2xsYmFyOjp2ZXJ0aWNh
bFNjcm9sbGJhcldpZHRoKCkpOyAgICAKLQotICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChzY3Jv
bGxCYXIpKTsKLSAgICBndGtfb2JqZWN0X3NpbmsoR1RLX09CSkVDVChzY3JvbGxCYXIpKTsKKyAg
ICAgICAgICAgUGxhdGZvcm1TY3JvbGxiYXI6OnZlcnRpY2FsU2Nyb2xsYmFyV2lkdGgoKSk7IAog
fQogCiBQbGF0Zm9ybVNjcm9sbGJhcjo6flBsYXRmb3JtU2Nyb2xsYmFyKCkKIHsKLSAgICAvKgot
ICAgICAqIHRoZSBXaWRnZXQgZG9lcyBub3QgdGFrZSBvdmVyIG93bmVyc2hpcC4KLSAgICAgKi8K
LSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZ3RrV2lkZ2V0KCkpOwotICAgIGdfb2JqZWN0X3VucmVm
KEdfT0JKRUNUKGd0a1dpZGdldCgpKSk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9mdW5jKEdfT0JKRUNUKGludGVybmFsR3RrV2lkZ2V0KCkpLCAoZ3BvaW50ZXIpUGxhdGZv
cm1TY3JvbGxiYXI6Omd0a1ZhbHVlQ2hhbmdlZCwgdGhpcyk7CisgICAgZ19vYmplY3RfdW5yZWYo
R19PQkpFQ1QoaW50ZXJuYWxHdGtXaWRnZXQoKSkpOwogfQogCiBpbnQgUGxhdGZvcm1TY3JvbGxi
YXI6OndpZHRoKCkgY29uc3QKQEAgLTg5LDE2ICs4OCwyOCBAQCB2b2lkIFBsYXRmb3JtU2Nyb2xs
YmFyOjpwYWludChHcmFwaGljc0NvCiAKIHZvaWQgUGxhdGZvcm1TY3JvbGxiYXI6OnVwZGF0ZVRo
dW1iUG9zaXRpb24oKQogeyAKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmIChtX2FkanVz
dG1lbnQtPnZhbHVlICE9IG1fY3VycmVudFBvcykgeworICAgICAgICBtX2FkanVzdG1lbnQtPnZh
bHVlID0gbV9jdXJyZW50UG9zOworICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFuZ2Vk
KG1fYWRqdXN0bWVudCk7CisgICAgfQogfQogCiB2b2lkIFBsYXRmb3JtU2Nyb2xsYmFyOjp1cGRh
dGVUaHVtYlByb3BvcnRpb24oKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgbV9hZGp1
c3RtZW50LT5zdGVwX2luY3JlbWVudCA9IG1fbGluZVN0ZXA7CisgICAgbV9hZGp1c3RtZW50LT5w
YWdlX2luY3JlbWVudCA9IG1fcGFnZVN0ZXA7CisgICAgbV9hZGp1c3RtZW50LT5wYWdlX3NpemUg
PSBtX3Zpc2libGVTaXplOworICAgIG1fYWRqdXN0bWVudC0+dXBwZXIgPSBtX3RvdGFsU2l6ZTsK
KyAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKG1fYWRqdXN0bWVudCk7CiB9CiAKIHZvaWQgUGxh
dGZvcm1TY3JvbGxiYXI6OnNldFJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKICAgICBzZXRG
cmFtZUdlb21ldHJ5KHJlY3QpOworICAgIGdlb21ldHJ5Q2hhbmdlZCgpOwogfQogCit2b2lkIFBs
YXRmb3JtU2Nyb2xsYmFyOjpndGtWYWx1ZUNoYW5nZWQoR3RrQWRqdXN0bWVudCosIFBsYXRmb3Jt
U2Nyb2xsYmFyKiB0aGF0KQoreworICAgIHRoYXQtPnNldFZhbHVlKGd0a19hZGp1c3RtZW50X2dl
dF92YWx1ZSh0aGF0LT5tX2FkanVzdG1lbnQpKTsKK30KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
Z2RrL1JlbmRlclRoZW1lR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dk
ay9SZW5kZXJUaGVtZUdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS9nZGsvUmVuZGVyVGhlbWVHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksMTEgKzE3OSwx
MiBAQCB2b2lkIFJlbmRlclRoZW1lR2RrOjpzZXRDaGVja2JveFNpemUoUmVuCiBib29sIFJlbmRl
clRoZW1lR2RrOjpwYWludENoZWNrYm94KFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2Jq
ZWN0OjpQYWludEluZm8mIGksIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgLy8gRklYTUU6
IGlzIGl0IHRoZSByaWdodCB0aGluZyB0byBkbz8KLSAgICBHdGtXaWRnZXQgKmNoZWNrYm94ID0g
Z3RrQ2hlY2tib3goKTsKKyAgICBHdGtXaWRnZXQqIGNoZWNrYm94ID0gZ3RrQ2hlY2tib3goKTsK
KyAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBvaW50KHJlY3QubG9jYXRp
b24oKSk7CiAgICAgZ3RrX3BhaW50X2NoZWNrKGNoZWNrYm94LT5zdHlsZSwgaS5jb250ZXh0LT5n
ZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwgZGV0
ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAgICAgICBOVUxMLCBjaGVja2JveCwgImNo
ZWNrYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgICAgcmVjdC54KCksIHJlY3QueSgpLCByZWN0
LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAgICAgICAgICBwb3MueCgpLCBw
b3MueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOwogCiAgICAgcmV0dXJuIGZhbHNl
OwogfQpAQCAtMjExLDExICsyMTIsMTIgQEAgdm9pZCBSZW5kZXJUaGVtZUdkazo6c2V0UmFkaW9T
aXplKFJlbmRlcgogYm9vbCBSZW5kZXJUaGVtZUdkazo6cGFpbnRSYWRpbyhSZW5kZXJPYmplY3Qq
IG8sIGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiBpLCBjb25zdCBJbnRSZWN0JiByZWN0
KQogeyAKICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwotICAgIEd0
a1dpZGdldCAqcmFkaW8gPSBndGtSYWRpb0J1dHRvbigpOworICAgIEd0a1dpZGdldCogcmFkaW8g
PSBndGtSYWRpb0J1dHRvbigpOworICAgIEludFBvaW50IHBvcyA9IGkuY29udGV4dC0+dHJhbnNs
YXRlUG9pbnQocmVjdC5sb2NhdGlvbigpKTsKICAgICBndGtfcGFpbnRfb3B0aW9uKHJhZGlvLT5z
dHlsZSwgaS5jb250ZXh0LT5nZGtEcmF3YWJsZSgpLAogICAgICAgICAgICAgICAgICAgICAgZGV0
ZXJtaW5lU3RhdGUobyksIGRldGVybWluZVNoYWRvdyhvKSwKICAgICAgICAgICAgICAgICAgICAg
IE5VTEwsIHJhZGlvLCAicmFkaW9idXR0b24iLAotICAgICAgICAgICAgICAgICAgICAgcmVjdC54
KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgICAgICAgICAg
ICAgICAgICAgcG9zLngoKSwgcG9zLnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsK
IAogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTIyMywxMSArMjI1LDEyIEBAIGJvb2wgUmVuZGVy
VGhlbWVHZGs6OnBhaW50UmFkaW8oUmVuZGVyT2IKIGJvb2wgUmVuZGVyVGhlbWVHZGs6OnBhaW50
QnV0dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIGks
IGNvbnN0IEludFJlY3QmIHJlY3QpIAogeyAKICAgICAvLyBGSVhNRTogc2hvdWxkIHVzZSB0aGVt
ZS1hd2FyZSBkcmF3aW5nLiBUaGlzIHNob3VsZCBob25vciB0aGUgc3RhdGUgYXMgd2VsbAotICAg
IEd0a1dpZGdldCAqYnV0dG9uID0gZ3RrQnV0dG9uKCk7CisgICAgR3RrV2lkZ2V0KiBidXR0b24g
PSBndGtCdXR0b24oKTsKKyAgICBJbnRQb2ludCBwb3MgPSBpLmNvbnRleHQtPnRyYW5zbGF0ZVBv
aW50KHJlY3QubG9jYXRpb24oKSk7CiAgICAgZ3RrX3BhaW50X2JveChidXR0b24tPnN0eWxlLCBp
LmNvbnRleHQtPmdka0RyYXdhYmxlKCksCiAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0
ZShvKSwgZGV0ZXJtaW5lU2hhZG93KG8pLAogICAgICAgICAgICAgICAgICAgTlVMTCwgYnV0dG9u
LCAiYnV0dG9uIiwKLSAgICAgICAgICAgICAgICAgIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53
aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgICAgICAgIHBvcy54KCksIHBvcy55
KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQog
CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAkocmV2aXNpb24gMjQ3
ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dkay9TY3JvbGxWaWV3R2RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbSAKICAqIENv
cHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICoKQEAgLTM3LDM4
ICszNywyMDMgQEAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VF
dmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtV2hlZWxFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRm
b3JtU2Nyb2xsQmFyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIndlYmtpdGd0a3Bh
Z2UuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwcml2YXRlLmgiCiAKICNpbmNsdWRlIDxnZGsvZ2Rr
Lmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCisKK3N0
YXRpYyBjb25zdCBpbnQgTWFnaWNHdGtTY3JvbGxDb25zdGFudCA9IDEzOworCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlCisvKgorICog
VGhlIGRlc2lnbiBpcyBhIGNvcHkgb2YgdGhlIFdpbmRvd3MgU2Nyb2xsVmlldyBmcm9tIHBsYXRm
b3JtL3dpbi9TY3JvbGxWaWV3V2luLmNwcAorICogd2l0aCB0aGUgZm9sbG93aW5nIGNoYW5nZXMv
ZGlmZmljdWx0aWVzLgorICogVG8gY29uZm9ybSB0byB0aGUgJ3Njcm9sbGFibGUgcHJvdG9jb2wn
IG9mIEd0aysgd2UgbWlnaHQgZ2V0IHR3byBHdGtBZGp1c3RtZW50cyBzZXQuIElmCisgKiB3ZSBo
YXZlIHRoZW0gc2V0IHdlIG1heSBub3QgY3JlYXRlIFBsYXRmb3JtU2Nyb2xsYmFyIGJ1dCBoYXZl
IHRvIHVzZSB0aGUgR3RrQWRqdXN0bWVudC4KKyAqLworY2xhc3MgU2Nyb2xsVmlldzo6U2Nyb2xs
Vmlld1ByaXZhdGUgOiBwdWJsaWMgU2Nyb2xsYmFyQ2xpZW50CiB7CiBwdWJsaWM6Ci0gICAgU2Ny
b2xsVmlld1ByaXZhdGUoKQotICAgICAgICA6IGhhc1N0YXRpY0JhY2tncm91bmQoZmFsc2UpCi0g
ICAgICAgICwgc3VwcHJlc3NTY3JvbGxiYXJzKGZhbHNlKQorICAgIFNjcm9sbFZpZXdQcml2YXRl
KFNjcm9sbFZpZXcqIF92aWV3KQorICAgICAgICA6IHZpZXcoX3ZpZXcpCisgICAgICAgICwgaGFz
U3RhdGljQmFja2dyb3VuZChmYWxzZSkKKyAgICAgICAgLCBzY3JvbGxiYXJzU3VwcHJlc3NlZChm
YWxzZSkKKyAgICAgICAgLCBzY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyKDApCiAgICAgICAgICwg
dlNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyQXV0bykKICAgICAgICAgLCBoU2Nyb2xsYmFyTW9kZShT
Y3JvbGxiYXJBdXRvKQotICAgICAgICAsIGxheW91dCgwKQogICAgICAgICAsIHNjcm9sbEJhcnNO
ZWVkVXBkYXRlKGZhbHNlKQotICAgIHsgfQorICAgICAgICAsIGluVXBkYXRlU2Nyb2xsYmFycyhm
YWxzZSkKKyAgICAgICAgLCB2QWRqKDApCisgICAgICAgICwgaEFkaigwKQorICAgIHt9CisKKyAg
ICB+U2Nyb2xsVmlld1ByaXZhdGUoKQorICAgIHsKKyAgICAgICAgc2V0SGFzSG9yaXpvbnRhbFNj
cm9sbGJhcihmYWxzZSk7CisgICAgICAgIHNldEhhc1ZlcnRpY2FsU2Nyb2xsYmFyKGZhbHNlKTsK
KworICAgICAgICBpZiAoaEFkaikgeworICAgICAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9mdW5jKEdfT0JKRUNUKGhBZGopLCAoZ3BvaW50ZXIpU2Nyb2xsVmlld1ByaXZh
dGU6OmFkanVzdG1lbnRDaGFuZ2VkLCB0aGlzKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3VucmVm
KGhBZGopOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHZBZGopIHsKKyAgICAgICAgICAgIGdf
c2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZnVuYyhHX09CSkVDVCh2QWRqKSwgKGdwb2lu
dGVyKVNjcm9sbFZpZXdQcml2YXRlOjphZGp1c3RtZW50Q2hhbmdlZCwgdGhpcyk7CisgICAgICAg
ICAgICBnX29iamVjdF91bnJlZih2QWRqKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQg
c2Nyb2xsQmFja2luZ1N0b3JlKGNvbnN0IEludFNpemUmIHNjcm9sbERlbHRhKTsKKworICAgIHZv
aWQgc2V0SGFzSG9yaXpvbnRhbFNjcm9sbGJhcihib29sIGhhc0Jhcik7CisgICAgdm9pZCBzZXRI
YXNWZXJ0aWNhbFNjcm9sbGJhcihib29sIGhhc0Jhcik7CisKKyAgICB2aXJ0dWFsIHZvaWQgdmFs
dWVDaGFuZ2VkKFNjcm9sbGJhciopOworICAgIHZpcnR1YWwgSW50UmVjdCB3aW5kb3dDbGlwUmVj
dCgpIGNvbnN0OworCisgICAgc3RhdGljIHZvaWQgYWRqdXN0bWVudENoYW5nZWQoR3RrQWRqdXN0
bWVudCosIGdwb2ludGVyKTsKIAorICAgIFNjcm9sbFZpZXcqIHZpZXc7CiAgICAgYm9vbCBoYXNT
dGF0aWNCYWNrZ3JvdW5kOwotICAgIGJvb2wgc3VwcHJlc3NTY3JvbGxiYXJzOworICAgIGJvb2wg
c2Nyb2xsYmFyc1N1cHByZXNzZWQ7CisgICAgaW50IHNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXI7
CiAgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xsYmFyTW9kZTsKICAgICBTY3JvbGxiYXJNb2RlIGhT
Y3JvbGxiYXJNb2RlOwotICAgIEd0a0xheW91dCAqbGF5b3V0OworICAgIFJlZlB0cjxQbGF0Zm9y
bVNjcm9sbGJhcj4gdkJhcjsKKyAgICBSZWZQdHI8UGxhdGZvcm1TY3JvbGxiYXI+IGhCYXI7Cisg
ICAgR3RrQWRqdXN0bWVudCogdkFkajsKKyAgICBHdGtBZGp1c3RtZW50KiBoQWRqOworICAgIElu
dFNpemUgc2Nyb2xsT2Zmc2V0OwogICAgIEludFNpemUgY29udGVudHNTaXplOwotICAgIEludFNp
emUgdmlld1BvcnRTaXplOwogICAgIGJvb2wgc2Nyb2xsQmFyc05lZWRVcGRhdGU7CisgICAgYm9v
bCBpblVwZGF0ZVNjcm9sbGJhcnM7CisgICAgSGFzaFNldDxXaWRnZXQqPiBjaGlsZHJlbjsKIH07
CiAKKy8qCisgKiBEb24ndCBjcmVhdGUgdGhlIHNjcm9sbGJhcnMgd2hlbiB3ZSBoYXZlIGEgaG9y
aXpvbnRhbCBHdGtBZGp1c3RtZW50CisgKi8KK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1By
aXZhdGU6OnNldEhhc0hvcml6b250YWxTY3JvbGxiYXIoYm9vbCBoYXNCYXIpCit7CisgICAgaWYg
KFNjcm9sbGJhcjo6aGFzUGxhdGZvcm1TY3JvbGxiYXJzKCkpIHsKKyAgICAgICAgaWYgKGhhc0Jh
ciAmJiAhaEJhciAmJiAhaEFkaikgeworICAgICAgICAgICAgaEJhciA9IG5ldyBQbGF0Zm9ybVNj
cm9sbGJhcih0aGlzLCBIb3Jpem9udGFsU2Nyb2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAg
ICAgICAgICAgIGhCYXItPnNldFNjcm9sbFZpZXdDb250cm9sKCk7CisgICAgICAgICAgICB2aWV3
LT5hZGRDaGlsZChoQmFyLmdldCgpKTsKKyAgICAgICAgfSBlbHNlIGlmICghaGFzQmFyICYmIGhC
YXIpIHsKKyAgICAgICAgICAgIHZpZXctPnJlbW92ZUNoaWxkKGhCYXIuZ2V0KCkpOworICAgICAg
ICAgICAgaEJhciA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qCisgKiBEb24ndCBjcmVh
dGUgdGhlIHNjcm9sbGJhcnMgd2hlbiB3ZSBoYXZlIGEgdmVydGljYWwgR3RrQWRqdXN0bWVudAor
ICovCit2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRlOjpzZXRIYXNWZXJ0aWNhbFNj
cm9sbGJhcihib29sIGhhc0JhcikKK3sKKyAgICBpZiAoU2Nyb2xsYmFyOjpoYXNQbGF0Zm9ybVNj
cm9sbGJhcnMoKSkgeworICAgICAgICBpZiAoaGFzQmFyICYmICF2QmFyICYmICF2QWRqKSB7Cisg
ICAgICAgICAgICB2QmFyID0gbmV3IFBsYXRmb3JtU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Ny
b2xsYmFyLCBSZWd1bGFyU2Nyb2xsYmFyKTsKKyAgICAgICAgICAgIHZCYXItPnNldFNjcm9sbFZp
ZXdDb250cm9sKCk7CisgICAgICAgICAgICB2aWV3LT5hZGRDaGlsZCh2QmFyLmdldCgpKTsKKyAg
ICAgICAgfSBlbHNlIGlmICghaGFzQmFyICYmIHZCYXIpIHsKKyAgICAgICAgICAgIHZpZXctPnJl
bW92ZUNoaWxkKHZCYXIuZ2V0KCkpOworICAgICAgICAgICAgdkJhciA9IDA7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnNjcm9sbEJh
Y2tpbmdTdG9yZShjb25zdCBJbnRTaXplJiBzY3JvbGxEZWx0YSkKK3sKKyAgICAvLyBTaW5jZSBz
Y3JvbGxpbmcgaXMgZG91YmxlIGJ1ZmZlcmVkLCB3ZSB3aWxsIGJlIGJsaXR0aW5nIHRoZSBzY3Jv
bGwgdmlldydzIGludGVyc2VjdGlvbgorICAgIC8vIHdpdGggdGhlIGNsaXAgcmVjdCBldmVyeSB0
aW1lIHRvIGtlZXAgaXQgc21vb3RoLgorICAgIEludFJlY3QgY2xpcFJlY3QgPSB2aWV3LT53aW5k
b3dDbGlwUmVjdCgpOworICAgIEludFJlY3Qgc2Nyb2xsVmlld1JlY3QgPSB2aWV3LT5jb252ZXJ0
VG9Db250YWluaW5nV2luZG93KEludFJlY3QoMCwgMCwgdmlldy0+dmlzaWJsZVdpZHRoKCksIHZp
ZXctPnZpc2libGVIZWlnaHQoKSkpOworCisgICAgSW50UmVjdCB1cGRhdGVSZWN0ID0gY2xpcFJl
Y3Q7CisgICAgdXBkYXRlUmVjdC5pbnRlcnNlY3Qoc2Nyb2xsVmlld1JlY3QpOworCisgICAgLy9G
SVhNRSB1cGRhdGUgaGVyZT8KKworICAgIGlmICghaGFzU3RhdGljQmFja2dyb3VuZCkgLy8gVGhl
IG1haW4gZnJhbWUgY2FuIGp1c3QgYmxpdCB0aGUgV2ViVmlldyB3aW5kb3cKKyAgICAgICAvLyBG
SVhNRTogRmluZCBhIHdheSB0byBibGl0IHN1YmZyYW1lcyB3aXRob3V0IGJsaXR0aW5nIG92ZXJs
YXBwaW5nIGNvbnRlbnQKKyAgICAgICB2aWV3LT5zY3JvbGxCYWNraW5nU3RvcmUoLXNjcm9sbERl
bHRhLndpZHRoKCksIC1zY3JvbGxEZWx0YS5oZWlnaHQoKSwgc2Nyb2xsVmlld1JlY3QsIGNsaXBS
ZWN0KTsKKyAgICBlbHNlICB7CisgICAgICAgLy8gV2UgbmVlZCB0byBnbyBhaGVhZCBhbmQgcmVw
YWludCB0aGUgZW50aXJlIGJhY2tpbmcgc3RvcmUuICBEbyBpdCBub3cgYmVmb3JlIG1vdmluZyB0
aGUKKyAgICAgICAvLyBwbHVnaW5zLgorICAgICAgIHZpZXctPmFkZFRvRGlydHlSZWdpb24odXBk
YXRlUmVjdCk7CisgICAgICAgdmlldy0+dXBkYXRlQmFja2luZ1N0b3JlKCk7CisgICAgfQorCisg
ICAgdmlldy0+Z2VvbWV0cnlDaGFuZ2VkKCk7CisKKyAgICAvLyBOb3cgdXBkYXRlIHRoZSB3aW5k
b3cgKHdoaWNoIHNob3VsZCBkbyBub3RoaW5nIGJ1dCBhIGJsaXQgb2YgdGhlIGJhY2tpbmcgc3Rv
cmUncyB1cGRhdGVSZWN0IGFuZCBzbyBzaG91bGQKKyAgICAvLyBiZSB2ZXJ5IGZhc3QpLgorICAg
IHZpZXctPnVwZGF0ZSgpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OlNjcm9sbFZpZXdQcml2YXRl
OjphZGp1c3RtZW50Q2hhbmdlZChHdGtBZGp1c3RtZW50KiBhZGp1c3RtZW50LCBncG9pbnRlciBf
dGhhdCkKK3sKKyAgICBTY3JvbGxWaWV3UHJpdmF0ZSogdGhhdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
U2Nyb2xsVmlld1ByaXZhdGUqPihfdGhhdCk7CisKKyAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJl
YWxseSBtb3ZlZC4KKyAgICBJbnRTaXplIG5ld09mZnNldCA9IHRoYXQtPnNjcm9sbE9mZnNldDsK
KyAgICBpZiAoYWRqdXN0bWVudCA9PSB0aGF0LT5oQWRqKQorICAgICAgICBuZXdPZmZzZXQuc2V0
V2lkdGgoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFsdWUoYWRqdXN0bWVu
dCkpKTsKKyAgICBlbHNlIGlmIChhZGp1c3RtZW50ID09IHRoYXQtPnZBZGopCisgICAgICAgIG5l
d09mZnNldC5zZXRIZWlnaHQoc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0bWVudF9nZXRfdmFs
dWUoYWRqdXN0bWVudCkpKTsKKworICAgIEludFNpemUgc2Nyb2xsRGVsdGEgPSBuZXdPZmZzZXQg
LSB0aGF0LT5zY3JvbGxPZmZzZXQ7CisgICAgaWYgKHNjcm9sbERlbHRhID09IEludFNpemUoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIHRoYXQtPnNjcm9sbE9mZnNldCA9IG5ld09mZnNldDsKKwor
ICAgIGlmICh0aGF0LT5zY3JvbGxiYXJzU3VwcHJlc3NlZCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgdGhhdC0+c2Nyb2xsQmFja2luZ1N0b3JlKHNjcm9sbERlbHRhKTsKKyAgICBzdGF0aWNfY2Fz
dDxGcmFtZVZpZXcqPih0aGF0LT52aWV3KS0+ZnJhbWUoKS0+c2VuZFNjcm9sbEV2ZW50KCk7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6U2Nyb2xsVmlld1ByaXZhdGU6OnZhbHVlQ2hhbmdlZChTY3Jv
bGxiYXIqIGJhcikKK3sKKyAgICAvLyBGaWd1cmUgb3V0IGlmIHdlIHJlYWxseSBtb3ZlZC4KKyAg
ICBJbnRTaXplIG5ld09mZnNldCA9IHNjcm9sbE9mZnNldDsKKyAgICBpZiAoYmFyKSB7CisgICAg
ICAgIGlmIChiYXIgPT0gaEJhcikKKyAgICAgICAgICAgIG5ld09mZnNldC5zZXRXaWR0aChiYXIt
PnZhbHVlKCkpOworICAgICAgICBlbHNlIGlmIChiYXIgPT0gdkJhcikKKyAgICAgICAgICAgIG5l
d09mZnNldC5zZXRIZWlnaHQoYmFyLT52YWx1ZSgpKTsKKyAgICB9CisgICAgSW50U2l6ZSBzY3Jv
bGxEZWx0YSA9IG5ld09mZnNldCAtIHNjcm9sbE9mZnNldDsKKyAgICBpZiAoc2Nyb2xsRGVsdGEg
PT0gSW50U2l6ZSgpKQorICAgICAgICByZXR1cm47CisgICAgc2Nyb2xsT2Zmc2V0ID0gbmV3T2Zm
c2V0OworCisgICAgaWYgKHNjcm9sbGJhcnNTdXBwcmVzc2VkKQorICAgICAgICByZXR1cm47CisK
KyAgICBzY3JvbGxCYWNraW5nU3RvcmUoc2Nyb2xsRGVsdGEpOworICAgIHN0YXRpY19jYXN0PEZy
YW1lVmlldyo+KHZpZXcpLT5mcmFtZSgpLT5zZW5kU2Nyb2xsRXZlbnQoKTsKK30KKworSW50UmVj
dCBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3UHJpdmF0ZTo6d2luZG93Q2xpcFJlY3QoKSBjb25zdAor
eworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGcmFtZVZpZXcqPih2aWV3KS0+d2luZG93
Q2xpcFJlY3QoZmFsc2UpOworfQorCiBTY3JvbGxWaWV3OjpTY3JvbGxWaWV3KCkKLSAgICA6IG1f
ZGF0YShuZXcgU2Nyb2xsVmlld1ByaXZhdGUpCisgICAgOiBtX2RhdGEobmV3IFNjcm9sbFZpZXdQ
cml2YXRlKHRoaXMpKQoge30KIAogU2Nyb2xsVmlldzo6flNjcm9sbFZpZXcoKQpAQCAtNzYsNDMg
KzI0MSw4NyBAQCBTY3JvbGxWaWV3Ojp+U2Nyb2xsVmlldygpCiAgICAgZGVsZXRlIG1fZGF0YTsK
IH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVWaWV3KGNvbnN0IEludFJlY3QmIHVwZGF0ZVJl
Y3QsIGJvb2wgbm93KQorLyoKKyAqIFRoZSBmb2xsb3dpbmcgaXMgYXNzdW1lZDoKKyAqICAgKGhh
ZGogJiYgdmFkaikgfHwgKCFoYWRqICYmICF2YWRqKQorICovCit2b2lkIFNjcm9sbFZpZXc6OnNl
dEd0a0FkanVzdG1lbnRzKEd0a0FkanVzdG1lbnQqIGhhZGosIEd0a0FkanVzdG1lbnQqIHZhZGop
CiB7Ci0gICAgR2RrUmVjdGFuZ2xlIHJlY3QgPSB7IHVwZGF0ZVJlY3QueCgpLCB1cGRhdGVSZWN0
LnkoKSwgdXBkYXRlUmVjdC53aWR0aCgpLCB1cGRhdGVSZWN0LmhlaWdodCgpIH07Ci0gICAgR2Rr
RHJhd2FibGUqIGdka2RyYXdhYmxlID0gV2lkZ2V0OjpnZGtEcmF3YWJsZSgpOwotICAgIGlmIChH
REtfSVNfV0lORE9XKGdka2RyYXdhYmxlKSkgewotICAgICAgICBHZGtXaW5kb3cqIHdpbmRvdyA9
IEdES19XSU5ET1coZ2RrZHJhd2FibGUpOwotICAgICAgICBnZGtfd2luZG93X2ludmFsaWRhdGVf
cmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKLSAgICAgICAgaWYgKG5vdykKLSAgICAgICAgICAg
IGdka193aW5kb3dfcHJvY2Vzc191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7CisgICAgaWYgKG1fZGF0
YS0+aEFkaikgeworICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Z1bmMo
R19PQkpFQ1QobV9kYXRhLT5oQWRqKSwgKGdwb2ludGVyKVNjcm9sbFZpZXdQcml2YXRlOjphZGp1
c3RtZW50Q2hhbmdlZCwgbV9kYXRhKTsKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9mdW5jKEdfT0JKRUNUKG1fZGF0YS0+dkFkaiksIChncG9pbnRlcilTY3JvbGxWaWV3
UHJpdmF0ZTo6YWRqdXN0bWVudENoYW5nZWQsIG1fZGF0YSk7CisgICAgICAgIGdfb2JqZWN0X3Vu
cmVmKG1fZGF0YS0+aEFkaik7CisgICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZGF0YS0+dkFkaik7
CisgICAgfQorCisgICAgbV9kYXRhLT5oQWRqID0gaGFkajsKKyAgICBtX2RhdGEtPnZBZGogPSB2
YWRqOworCisgICAgaWYgKG1fZGF0YS0+aEFkaikgeworICAgICAgICBnX3NpZ25hbF9jb25uZWN0
KG1fZGF0YS0+aEFkaiwgInZhbHVlLWNoYW5nZWQiLCBHX0NBTExCQUNLKFNjcm9sbFZpZXdQcml2
YXRlOjphZGp1c3RtZW50Q2hhbmdlZCksIG1fZGF0YSk7CisgICAgICAgIGdfc2lnbmFsX2Nvbm5l
Y3QobV9kYXRhLT52QWRqLCAidmFsdWUtY2hhbmdlZCIsIEdfQ0FMTEJBQ0soU2Nyb2xsVmlld1By
aXZhdGU6OmFkanVzdG1lbnRDaGFuZ2VkKSwgbV9kYXRhKTsKKworICAgICAgICAvKgorICAgICAg
ICAgKiBkaXNhYmxlIHRoZSBzY3JvbGxiYXJzIChpZiB3ZSBoYXZlIGFueSkgYXMgdGhlIEd0a0Fk
anVzdG1lbnQgb3ZlcgorICAgICAgICAgKi8KKyAgICAgICAgbV9kYXRhLT5zZXRIYXNWZXJ0aWNh
bFNjcm9sbGJhcihmYWxzZSk7CisgICAgICAgIG1fZGF0YS0+c2V0SGFzSG9yaXpvbnRhbFNjcm9s
bGJhcihmYWxzZSk7CisKKyAgICAgICAgZ19vYmplY3RfcmVmKG1fZGF0YS0+aEFkaik7CisgICAg
ICAgIGdfb2JqZWN0X3JlZihtX2RhdGEtPnZBZGopOwogICAgIH0KKyAgICAgICAKKyAgICB1cGRh
dGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0KTsKIH0KIAogdm9pZCBTY3JvbGxWaWV3
Ojp1cGRhdGVDb250ZW50cyhjb25zdCBJbnRSZWN0JiB1cGRhdGVSZWN0LCBib29sIG5vdykKIHsK
LSAgICB1cGRhdGVWaWV3KHVwZGF0ZVJlY3QsIG5vdyk7CisgICAgaWYgKHVwZGF0ZVJlY3QuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCB3aW5kb3dQb2ludCA9IGNv
bnRlbnRzVG9XaW5kb3codXBkYXRlUmVjdC5sb2NhdGlvbigpKTsKKyAgICBJbnRSZWN0IGNvbnRh
aW5pbmdXaW5kb3dSZWN0ID0gdXBkYXRlUmVjdDsKKyAgICBjb250YWluaW5nV2luZG93UmVjdC5z
ZXRMb2NhdGlvbih3aW5kb3dQb2ludCk7CisKKyAgICBHZGtSZWN0YW5nbGUgcmVjdCA9IHsgY29u
dGFpbmluZ1dpbmRvd1JlY3QueCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWlu
aW5nV2luZG93UmVjdC55KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdX
aW5kb3dSZWN0LndpZHRoKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5pbmdX
aW5kb3dSZWN0LmhlaWdodCgpIH07CisgICAgR2RrV2luZG93KiB3aW5kb3cgPSBjb250YWluaW5n
V2luZG93KCktPmJpbl93aW5kb3c7CisKKyAgICBpZiAod2luZG93KQorICAgICAgICBnZGtfd2lu
ZG93X2ludmFsaWRhdGVfcmVjdCh3aW5kb3csICZyZWN0LCB0cnVlKTsKKworICAgIC8vIENhY2hl
IHRoZSBkaXJ0eSBzcG90LgorICAgIGFkZFRvRGlydHlSZWdpb24oY29udGFpbmluZ1dpbmRvd1Jl
Y3QpOworCisgICAgaWYgKG5vdyAmJiB3aW5kb3cpCisgICAgICAgIGdka193aW5kb3dfcHJvY2Vz
c191cGRhdGVzKHdpbmRvdywgdHJ1ZSk7CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlKCkK
IHsKLSAgICBBU1NFUlQoZ3RrV2lkZ2V0KCkpOwotICAgIGd0a193aWRnZXRfcXVldWVfZHJhdyhn
dGtXaWRnZXQoKSk7CisgICAgQVNTRVJUKGNvbnRhaW5pbmdXaW5kb3coKSk7CisKKyAgICBHZGtS
ZWN0YW5nbGUgcmVjdCA9IHsgMCwgMCwgbV9kYXRhLT5jb250ZW50c1NpemUud2lkdGgoKSwgbV9k
YXRhLT5jb250ZW50c1NpemUuaGVpZ2h0KCkgfTsKKyAgICBnZGtfd2luZG93X2ludmFsaWRhdGVf
cmVjdChjb250YWluaW5nV2luZG93KCktPmJpbl93aW5kb3csICZyZWN0LCB0cnVlKTsKIAotICAg
IGlmIChtX2RhdGEtPnNjcm9sbEJhcnNOZWVkVXBkYXRlKQotICAgICAgICB1cGRhdGVTY3JvbGxi
YXJzKCk7CisgICAgaWYgKG1fZGF0YS0+c2Nyb2xsQmFyc05lZWRVcGRhdGUpIHsKKyAgICAgICAg
dXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisgICAgICAgIGdlb21ldHJ5
Q2hhbmdlZCgpOworICAgIH0KIH0KIAogaW50IFNjcm9sbFZpZXc6OnZpc2libGVXaWR0aCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fZGF0YS0+dmlld1BvcnRTaXplLndpZHRoKCk7CisgICAgcmV0
dXJuIHdpZHRoKCkgLSAobV9kYXRhLT52QmFyID8gbV9kYXRhLT52QmFyLT53aWR0aCgpIDogMCk7
CiB9CiAKIGludCBTY3JvbGxWaWV3Ojp2aXNpYmxlSGVpZ2h0KCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9kYXRhLT52aWV3UG9ydFNpemUuaGVpZ2h0KCk7CisgICAgcmV0dXJuIGhlaWdodCgpIC0g
KG1fZGF0YS0+aEJhciA/IG1fZGF0YS0+aEJhci0+aGVpZ2h0KCkgOiAwKTsKIH0KIAotLy8gUmVn
aW9uIG9mIHRoZSBjb250ZW50IGN1cnJlbnRseSB2aXNpYmxlIGluIHRoZSB2aWV3cG9ydCBpbiB0
aGUgY29udGVudCB2aWV3J3MgY29vcmRpbmF0ZSBzeXN0ZW0uCiBGbG9hdFJlY3QgU2Nyb2xsVmll
dzo6dmlzaWJsZUNvbnRlbnRSZWN0KCkgY29uc3QKIHsKICAgICByZXR1cm4gRmxvYXRSZWN0KGNv
bnRlbnRzWCgpLCBjb250ZW50c1koKSwgdmlzaWJsZVdpZHRoKCksIHZpc2libGVIZWlnaHQoKSk7
CkBAIC0xMzgsMjMgKzM0NywxNyBAQCB2b2lkIFNjcm9sbFZpZXc6OnJlc2l6ZUNvbnRlbnRzKGlu
dCB3LCBpCiAgICAgICAgIHJldHVybjsKIAogICAgIG1fZGF0YS0+Y29udGVudHNTaXplID0gbmV3
U2l6ZTsKLSAgICAKLSAgICBpZiAobV9kYXRhLT5sYXlvdXQpIHsKLSAgICAgICAgZ3RrX2xheW91
dF9zZXRfc2l6ZShtX2RhdGEtPmxheW91dCwgdywgaCk7Ci0gICAgICAgIG1fZGF0YS0+c2Nyb2xs
QmFyc05lZWRVcGRhdGUgPSB0cnVlOwotICAgIH0KKyAgICBtX2RhdGEtPnNjcm9sbEJhcnNOZWVk
VXBkYXRlID0gdHJ1ZTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzWCgpIGNvbnN0CiB7
Ci0gICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoZ3RrX2xheW91dF9nZXRfaGFkanVzdG1lbnQobV9k
YXRhLT5sYXlvdXQpLCAwKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihndGtfYWRqdXN0
bWVudF9nZXRfdmFsdWUoZ3RrX2xheW91dF9nZXRfaGFkanVzdG1lbnQobV9kYXRhLT5sYXlvdXQp
KSk7CisgICAgcmV0dXJuIHNjcm9sbE9mZnNldCgpLndpZHRoKCk7CiB9CiAKIGludCBTY3JvbGxW
aWV3Ojpjb250ZW50c1koKSBjb25zdAogewotICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGd0a19s
YXlvdXRfZ2V0X3ZhZGp1c3RtZW50KG1fZGF0YS0+bGF5b3V0KSwgMCk7Ci0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludD4oZ3RrX2FkanVzdG1lbnRfZ2V0X3ZhbHVlKGd0a19sYXlvdXRfZ2V0X3Zh
ZGp1c3RtZW50KG1fZGF0YS0+bGF5b3V0KSkpOworICAgIHJldHVybiBzY3JvbGxPZmZzZXQoKS5o
ZWlnaHQoKTsKIH0KIAogaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzV2lkdGgoKSBjb25zdApAQCAt
MTY5LDI3ICszNzIsMjYgQEAgaW50IFNjcm9sbFZpZXc6OmNvbnRlbnRzSGVpZ2h0KCkgY29uc3QK
IAogSW50U2l6ZSBTY3JvbGxWaWV3OjpzY3JvbGxPZmZzZXQoKSBjb25zdAogewotICAgIGdfcmV0
dXJuX3ZhbF9pZl9mYWlsKG1fZGF0YSwgSW50U2l6ZSgpKTsKLSAgICByZXR1cm4gSW50U2l6ZShj
b250ZW50c1goKSwgY29udGVudHNZKCkpOworICAgIHJldHVybiBtX2RhdGEtPnNjcm9sbE9mZnNl
dDsKK30KKworSW50U2l6ZSBTY3JvbGxWaWV3OjptYXhpbXVtU2Nyb2xsKCkgY29uc3QKK3sKKyAg
ICBJbnRTaXplIGRlbHRhID0gKG1fZGF0YS0+Y29udGVudHNTaXplIC0gSW50U2l6ZSh2aXNpYmxl
V2lkdGgoKSwgdmlzaWJsZUhlaWdodCgpKSkgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICBkZWx0YS5j
bGFtcE5lZ2F0aXZlVG9aZXJvKCk7CisgICAgcmV0dXJuIGRlbHRhOwogfQogCiB2b2lkIFNjcm9s
bFZpZXc6OnNjcm9sbEJ5KGludCBkeCwgaW50IGR5KQogewotICAgIEd0a0FkanVzdG1lbnQqIGhh
ZGogPSBndGtfbGF5b3V0X2dldF9oYWRqdXN0bWVudChtX2RhdGEtPmxheW91dCk7Ci0gICAgR3Rr
QWRqdXN0bWVudCogdmFkaiA9IGd0a19sYXlvdXRfZ2V0X3ZhZGp1c3RtZW50KG1fZGF0YS0+bGF5
b3V0KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKGhhZGopOwotICAgIGdfcmV0dXJuX2lmX2ZhaWwo
dmFkaik7Ci0KLSAgICBpbnQgY3VycmVudF94ID0gY29udGVudHNYKCk7Ci0gICAgaW50IGN1cnJl
bnRfeSA9IGNvbnRlbnRzWSgpOworICAgIEludFNpemUgc2Nyb2xsT2Zmc2V0ID0gbV9kYXRhLT5z
Y3JvbGxPZmZzZXQ7CisgICAgSW50U2l6ZSBuZXdTY3JvbGxPZmZzZXQgPSBzY3JvbGxPZmZzZXQg
KyBJbnRTaXplKGR4LCBkeSkuc2hydW5rVG8obWF4aW11bVNjcm9sbCgpKTsKKyAgICBuZXdTY3Jv
bGxPZmZzZXQuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwogCisgICAgaWYgKG5ld1Njcm9sbE9mZnNl
dCA9PSBzY3JvbGxPZmZzZXQpCisgICAgICAgIHJldHVybjsKIAotICAgIGd0a19hZGp1c3RtZW50
X3NldF92YWx1ZShoYWRqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTEFNUChjdXJy
ZW50X3grZHgsIGhhZGotPmxvd2VyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBNQVgoMC4wLCBoYWRqLT51cHBlciAtIGhhZGotPnBhZ2Vfc2l6ZSkpKTsKLSAgICBndGtfYWRq
dXN0bWVudF9zZXRfdmFsdWUodmFkaiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0xB
TVAoY3VycmVudF95K2R5LCB2YWRqLT5sb3dlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgTUFYKDAuMCwgdmFkai0+dXBwZXIgLSB2YWRqLT5wYWdlX3NpemUpKSk7CisgICAg
dXBkYXRlU2Nyb2xsYmFycyhuZXdTY3JvbGxPZmZzZXQpOwogfQogCiBTY3JvbGxiYXJNb2RlIFNj
cm9sbFZpZXc6OmhTY3JvbGxiYXJNb2RlKCkgY29uc3QKQEAgLTIwNCwxNiArNDA2LDE2IEBAIFNj
cm9sbGJhck1vZGUgU2Nyb2xsVmlldzo6dlNjcm9sbGJhck1vZGUKIAogdm9pZCBTY3JvbGxWaWV3
OjpzdXBwcmVzc1Njcm9sbGJhcnMoYm9vbCBzdXBwcmVzc2VkLCBib29sIHJlcGFpbnRPblN1cHBy
ZXNzKQogewotICAgIG1fZGF0YS0+c3VwcHJlc3NTY3JvbGxiYXJzID0gc3VwcHJlc3NlZDsKKyAg
ICBtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkID0gc3VwcHJlc3NlZDsKICAgICBpZiAocmVw
YWludE9uU3VwcHJlc3MpCi0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAgICAgdXBk
YXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xsVmll
dzo6c2V0SFNjcm9sbGJhck1vZGUoU2Nyb2xsYmFyTW9kZSBuZXdNb2RlKQogewogICAgIGlmICht
X2RhdGEtPmhTY3JvbGxiYXJNb2RlICE9IG5ld01vZGUpIHsKICAgICAgICAgbV9kYXRhLT5oU2Ny
b2xsYmFyTW9kZSA9IG5ld01vZGU7Ci0gICAgICAgIHVwZGF0ZVNjcm9sbGJhcnMoKTsKKyAgICAg
ICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CiAgICAgfQogfQogCkBA
IC0yMjEsMTQgKzQyMywxNCBAQCB2b2lkIFNjcm9sbFZpZXc6OnNldFZTY3JvbGxiYXJNb2RlKFNj
cm9sCiB7CiAgICAgaWYgKG1fZGF0YS0+dlNjcm9sbGJhck1vZGUgIT0gbmV3TW9kZSkgewogICAg
ICAgICBtX2RhdGEtPnZTY3JvbGxiYXJNb2RlID0gbmV3TW9kZTsKLSAgICAgICAgdXBkYXRlU2Ny
b2xsYmFycygpOworICAgICAgICB1cGRhdGVTY3JvbGxiYXJzKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0
KTsKICAgICB9CiB9CiAKIHZvaWQgU2Nyb2xsVmlldzo6c2V0U2Nyb2xsYmFyc01vZGUoU2Nyb2xs
YmFyTW9kZSBuZXdNb2RlKQogewogICAgIG1fZGF0YS0+aFNjcm9sbGJhck1vZGUgPSBtX2RhdGEt
PnZTY3JvbGxiYXJNb2RlID0gbmV3TW9kZTsKLSAgICB1cGRhdGVTY3JvbGxiYXJzKCk7CisgICAg
dXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CiB9CiAKIHZvaWQgU2Nyb2xs
Vmlldzo6c2V0U3RhdGljQmFja2dyb3VuZChib29sIGZsYWcpCkBAIC0yMzYsNDggKzQzOCw1MiBA
QCB2b2lkIFNjcm9sbFZpZXc6OnNldFN0YXRpY0JhY2tncm91bmQoYm9vCiAgICAgbV9kYXRhLT5o
YXNTdGF0aWNCYWNrZ3JvdW5kID0gZmxhZzsKIH0KIAotLyoKLSAqIG9ubHkgdXBkYXRlIHRoZSBh
ZGp1c3RtZW50cywgdGhlIEd0a0xheW91dCBpcyBkb2luZyB0aGUgd29yawotICogZm9yIHVzIChh
c3N1bWluZyBpdCBpcyBpbiBhIGJveC4uLikuCi0gKi8KLXZvaWQgU2Nyb2xsVmlldzo6c2V0RnJh
bWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQordm9pZCBTY3JvbGxWaWV3OjpzZXRGcmFtZUdl
b21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld0dlb21ldHJ5KQogewotICAgIFdpZGdldDo6c2V0RnJh
bWVHZW9tZXRyeShyKTsKLSAgICB1cGRhdGVHZW9tZXRyeShyLndpZHRoKCksIHIuaGVpZ2h0KCkp
OwotfQorICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKIAotdm9pZCBTY3JvbGxWaWV3Ojp1cGRh
dGVHZW9tZXRyeShpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgbV9kYXRhLT52aWV3UG9y
dFNpemUgPSBJbnRTaXplKHdpZHRoLGhlaWdodCk7Ci19CisgICAgSW50UmVjdCBvbGRHZW9tZXRy
eSA9IGZyYW1lR2VvbWV0cnkoKTsKKyAgICBXaWRnZXQ6OnNldEZyYW1lR2VvbWV0cnkobmV3R2Vv
bWV0cnkpOwogCi12b2lkIFNjcm9sbFZpZXc6OnNldEd0a1dpZGdldChHdGtMYXlvdXQqIGxheW91
dCkKLXsKLSAgICBnX3JldHVybl9pZl9mYWlsKEdUS19MQVlPVVQobGF5b3V0KSk7Ci0gICAgbV9k
YXRhLT5sYXlvdXQgPSBsYXlvdXQ7CisgICAgaWYgKG5ld0dlb21ldHJ5ID09IG9sZEdlb21ldHJ5
KQorICAgICAgICByZXR1cm47CiAKLSAgICBXaWRnZXQ6OnNldEd0a1dpZGdldChHVEtfV0lER0VU
KGxheW91dCkpOworICAgIGlmIChuZXdHZW9tZXRyeS53aWR0aCgpICE9IG9sZEdlb21ldHJ5Lndp
ZHRoKCkgfHwgbmV3R2VvbWV0cnkuaGVpZ2h0KCkgIT0gb2xkR2VvbWV0cnkuaGVpZ2h0KCkpIHsK
KyAgICAgICAgdXBkYXRlU2Nyb2xsYmFycyhtX2RhdGEtPnNjcm9sbE9mZnNldCk7CisgICAgICAg
IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5zZXROZWVkc0xheW91dCgpOworICAgIH0K
KworICAgIGdlb21ldHJ5Q2hhbmdlZCgpOwogfQogCi12b2lkIFNjcm9sbFZpZXc6OmFkZENoaWxk
KFdpZGdldCogdykKK3ZvaWQgU2Nyb2xsVmlldzo6YWRkQ2hpbGQoV2lkZ2V0KiBjaGlsZCkKIHsg
Ci0gICAgQVNTRVJUKHctPmd0a1dpZGdldCgpKTsKLSAgICBBU1NFUlQobV9kYXRhLT5sYXlvdXQp
OworICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CisgICAgY2hpbGQtPnNldENvbnRhaW5pbmdX
aW5kb3coY29udGFpbmluZ1dpbmRvdygpKTsKKyAgICBtX2RhdGEtPmNoaWxkcmVuLmFkZChjaGls
ZCk7CiAKLSAgICBndGtfbGF5b3V0X3B1dChtX2RhdGEtPmxheW91dCwgdy0+Z3RrV2lkZ2V0KCks
IDAsIDApOworICAgIGlmIChjaGlsZC0+aW50ZXJuYWxHdGtXaWRnZXQoKSkKKyAgICAgICAgZ3Rr
X2NvbnRhaW5lcl9hZGQoR1RLX0NPTlRBSU5FUihjb250YWluaW5nV2luZG93KCkpLCBjaGlsZC0+
aW50ZXJuYWxHdGtXaWRnZXQoKSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6cmVtb3ZlQ2hpbGQo
V2lkZ2V0KiB3KQordm9pZCBTY3JvbGxWaWV3OjpyZW1vdmVDaGlsZChXaWRnZXQqIGNoaWxkKQog
ewotICAgIEFTU0VSVCh3LT5ndGtXaWRnZXQoKSk7Ci0gICAgQVNTRVJUKG1fZGF0YS0+bGF5b3V0
KTsKKyAgICBjaGlsZC0+c2V0UGFyZW50KDApOworICAgIG1fZGF0YS0+Y2hpbGRyZW4ucmVtb3Zl
KGNoaWxkKTsKIAotICAgIGd0a19jb250YWluZXJfcmVtb3ZlKEdUS19DT05UQUlORVIobV9kYXRh
LT5sYXlvdXQpLCB3LT5ndGtXaWRnZXQoKSk7CisgICAgaWYgKGNoaWxkLT5pbnRlcm5hbEd0a1dp
ZGdldCgpICYmIEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKSA9PSBHVEtfV0lER0VUKGNo
aWxkLT5pbnRlcm5hbEd0a1dpZGdldCgpKS0+cGFyZW50KQorICAgICAgICBndGtfY29udGFpbmVy
X3JlbW92ZShHVEtfQ09OVEFJTkVSKGNvbnRhaW5pbmdXaW5kb3coKSksIGNoaWxkLT5pbnRlcm5h
bEd0a1dpZGdldCgpKTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3OjpzY3JvbGxSZWN0SW50b1ZpZXdS
ZWN1cnNpdmVseShjb25zdCBJbnRSZWN0JikKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsUmVjdElu
dG9WaWV3UmVjdXJzaXZlbHkoY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIEludFBvaW50IHAobWF4KDAsIHIueCgpKSwgbWF4KDAsIHIueSgpKSk7CisgICAg
U2Nyb2xsVmlldyogdmlldyA9IHRoaXM7CisgICAgd2hpbGUgKHZpZXcpIHsKKyAgICAgICAgdmll
dy0+c2V0Q29udGVudHNQb3MocC54KCksIHAueSgpKTsKKyAgICAgICAgcC5tb3ZlKHZpZXctPngo
KSAtIHZpZXctPnNjcm9sbE9mZnNldCgpLndpZHRoKCksIHZpZXctPnkoKSAtIHZpZXctPnNjcm9s
bE9mZnNldCgpLmhlaWdodCgpKTsKKyAgICAgICAgdmlldyA9IHN0YXRpY19jYXN0PFNjcm9sbFZp
ZXcqPih2aWV3LT5wYXJlbnQoKSk7CisgICAgfQogfQogCiBib29sIFNjcm9sbFZpZXc6OmluV2lu
ZG93KCkgY29uc3QKQEAgLTI4Niw0OCArNDkyLDM2MCBAQCBib29sIFNjcm9sbFZpZXc6OmluV2lu
ZG93KCkgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTY3JvbGxWaWV3Ojp3aGVl
bEV2ZW50KFBsYXRmb3JtV2hlZWxFdmVudCYpCit2b2lkIFNjcm9sbFZpZXc6OndoZWVsRXZlbnQo
UGxhdGZvcm1XaGVlbEV2ZW50JiBlKQogewotICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgLy8g
RGV0ZXJtaW5lIGhvdyBtdWNoIHdlIHdhbnQgdG8gc2Nyb2xsLiAgSWYgd2UgY2FuIG1vdmUgYXQg
YWxsLCB3ZSB3aWxsIGFjY2VwdCB0aGUgZXZlbnQuCisgICAgSW50U2l6ZSBtYXhTY3JvbGxEZWx0
YSA9IG1heGltdW1TY3JvbGwoKTsKKyAgICBpZiAoKGUuZGVsdGFYKCkgPCAwICYmIG1heFNjcm9s
bERlbHRhLndpZHRoKCkgPiAwKSB8fAorICAgICAgICAoZS5kZWx0YVgoKSA+IDAgJiYgc2Nyb2xs
T2Zmc2V0KCkud2lkdGgoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpIDwgMCAmJiBtYXhT
Y3JvbGxEZWx0YS5oZWlnaHQoKSA+IDApIHx8CisgICAgICAgIChlLmRlbHRhWSgpID4gMCAmJiBz
Y3JvbGxPZmZzZXQoKS5oZWlnaHQoKSA+IDApKQorICAgICAgICBlLmFjY2VwdCgpOworCisgICAg
c2Nyb2xsQnkoc3RhdGljX2Nhc3Q8aW50PihlLmRlbHRhWCgpKSwgc3RhdGljX2Nhc3Q8aW50Pihl
LmRlbHRhWSgpKSk7CiB9CiAKLXZvaWQgU2Nyb2xsVmlldzo6dXBkYXRlU2Nyb2xsYmFycygpCit2
b2lkIFNjcm9sbFZpZXc6OnVwZGF0ZVNjcm9sbGJhcnMoY29uc3QgSW50U2l6ZSYgZGVzaXJlZE9m
ZnNldCkKIHsKLSAgICBHdGtBZGp1c3RtZW50KiBoYWRqID0gZ3RrX2xheW91dF9nZXRfaGFkanVz
dG1lbnQobV9kYXRhLT5sYXlvdXQpOwotICAgIEd0a0FkanVzdG1lbnQqIHZhZGogPSBndGtfbGF5
b3V0X2dldF92YWRqdXN0bWVudChtX2RhdGEtPmxheW91dCk7CisgICAgLy8gRG9uJ3QgYWxsb3cg
cmUtZW50cmFuY3kgaW50byB0aGlzIGZ1bmN0aW9uLgorICAgIGlmIChtX2RhdGEtPmluVXBkYXRl
U2Nyb2xsYmFycykKKyAgICAgICAgcmV0dXJuOwogCi0gICAgZ19yZXR1cm5faWZfZmFpbChoYWRq
KTsKLSAgICBnX3JldHVybl9pZl9mYWlsKHZhZGopOwotICAgIAotICAgIGhhZGotPnBhZ2Vfc2l6
ZSA9IHZpc2libGVXaWR0aCgpOwotICAgIGhhZGotPnN0ZXBfaW5jcmVtZW50ID0gMTM7CisgICAg
Ly8gRklYTUU6IFRoaXMgY29kZSBpcyBoZXJlIHNvIHdlIGRvbid0IGhhdmUgdG8gZm9yayBGcmFt
ZVZpZXcuaC8uY3BwLgorICAgIC8vIEluIHRoZSBlbmQsIEZyYW1lVmlldyBzaG91bGQganVzdCBt
ZXJnZSB3aXRoIFNjcm9sbFZpZXcuCisgICAgaWYgKHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmll
dyo+KHRoaXMpLT5mcmFtZSgpLT5wcm9oaWJpdHNTY3JvbGxpbmcoKSkKKyAgICAgICAgcmV0dXJu
OwogICAgIAotICAgIHZhZGotPnBhZ2Vfc2l6ZSA9IHZpc2libGVIZWlnaHQoKTsKLSAgICB2YWRq
LT5zdGVwX2luY3JlbWVudCA9IDEzOworICAgIG1fZGF0YS0+aW5VcGRhdGVTY3JvbGxiYXJzID0g
dHJ1ZTsKKworICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBtX2RhdGEtPnZCYXI7Cisg
ICAgYm9vbCBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyID0gbV9kYXRhLT5oQmFyOworICAgIGJvb2wg
b2xkSGFzVmVydGljYWwgPSBoYXNWZXJ0aWNhbFNjcm9sbGJhcjsKKyAgICBib29sIG9sZEhhc0hv
cml6b250YWwgPSBoYXNIb3Jpem9udGFsU2Nyb2xsYmFyOworICAgIFNjcm9sbGJhck1vZGUgaFNj
cm9sbCA9IG1fZGF0YS0+aFNjcm9sbGJhck1vZGU7CisgICAgU2Nyb2xsYmFyTW9kZSB2U2Nyb2xs
ID0gbV9kYXRhLT52U2Nyb2xsYmFyTW9kZTsKICAgICAKLSAgICBndGtfYWRqdXN0bWVudF9jaGFu
Z2VkKGhhZGopOwotICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQoaGFkaik7CisgICAg
LyoKKyAgICAgKiBJdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIgd2hvIGlzIGdvaW5nIHRvIHJlbW92
ZSBzcGFjZSBmcm9tIG91ciB2aWV3cG9ydC4gRWl0aGVyCisgICAgICogd2UgZG8gaXQgYnkgY3Jl
YXRpbmcgYSBQbGF0Zm9ybVNjcm9sbGJhciBvciB0aGUgR3RrV2lkZ2V0IGVtYmVkZGluZyB1cyBp
cyBnb2luZyB0byBkbworICAgICAqIHRoYXQgYnkgY2FsbGluZyBzZXRGcmFtZUdlb21ldHJ5Lgor
ICAgICAqLworICAgIGNvbnN0IGludCBjVmVydGljYWxXaWR0aCA9IFBsYXRmb3JtU2Nyb2xsYmFy
Ojp2ZXJ0aWNhbFNjcm9sbGJhcldpZHRoKCk7CisgICAgY29uc3QgaW50IGNIb3Jpem9udGFsSGVp
Z2h0ID0gUGxhdGZvcm1TY3JvbGxiYXI6Omhvcml6b250YWxTY3JvbGxiYXJIZWlnaHQoKTsKKwor
ICAgIGZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgMjsgcGFzcysrKSB7CisgICAgICAgIGJvb2wg
c2Nyb2xsc1ZlcnRpY2FsbHk7CisgICAgICAgIGJvb2wgc2Nyb2xsc0hvcml6b250YWxseTsKKwor
ICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgKGhTY3JvbGwgPT0g
U2Nyb2xsYmFyQXV0byB8fCB2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8pKSB7CisgICAgICAgICAg
ICAvLyBEbyBhIGxheW91dCBpZiBwZW5kaW5nIGJlZm9yZSBjaGVja2luZyBpZiBzY3JvbGxiYXJz
IGFyZSBuZWVkZWQuCisgICAgICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxiYXIgIT0gb2xk
SGFzVmVydGljYWwgfHwgaGFzSG9yaXpvbnRhbFNjcm9sbGJhciAhPSBvbGRIYXNIb3Jpem9udGFs
KQorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHRoaXMpLT5sYXlvdXQo
KTsKKyAgICAgICAgICAgICAKKyAgICAgICAgICAgIHNjcm9sbHNWZXJ0aWNhbGx5ID0gKHZTY3Jv
bGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8ICh2U2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYg
Y29udGVudHNIZWlnaHQoKSA+IGhlaWdodCgpKTsKKyAgICAgICAgICAgIGlmIChzY3JvbGxzVmVy
dGljYWxseSkKKyAgICAgICAgICAgICAgICBzY3JvbGxzSG9yaXpvbnRhbGx5ID0gKGhTY3JvbGwg
PT0gU2Nyb2xsYmFyQWx3YXlzT24pIHx8IChoU2Nyb2xsID09IFNjcm9sbGJhckF1dG8gJiYgY29u
dGVudHNXaWR0aCgpICsgY1ZlcnRpY2FsV2lkdGggPiB3aWR0aCgpKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIHNjcm9sbHNIb3Jpem9udGFsbHkgPSAoaFNjcm9sbCA9PSBT
Y3JvbGxiYXJBbHdheXNPbikgfHwgKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250ZW50
c1dpZHRoKCkgPiB3aWR0aCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsc0hvcml6b250
YWxseSkKKyAgICAgICAgICAgICAgICAgICAgc2Nyb2xsc1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9
PSBTY3JvbGxiYXJBbHdheXNPbikgfHwgKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0byAmJiBjb250
ZW50c0hlaWdodCgpICsgY0hvcml6b250YWxIZWlnaHQgPiBoZWlnaHQoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzY3JvbGxzSG9yaXpv
bnRhbGx5ID0gKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQXV0bykgPyBoYXNIb3Jpem9udGFsU2Nyb2xs
YmFyIDogKGhTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pOworICAgICAgICAgICAgc2Nyb2xs
c1ZlcnRpY2FsbHkgPSAodlNjcm9sbCA9PSBTY3JvbGxiYXJBdXRvKSA/IGhhc1ZlcnRpY2FsU2Ny
b2xsYmFyIDogKHZTY3JvbGwgPT0gU2Nyb2xsYmFyQWx3YXlzT24pOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoaGFzVmVydGljYWxTY3JvbGxiYXIgIT0gc2Nyb2xsc1ZlcnRpY2Fs
bHkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFzVmVydGljYWxTY3JvbGxiYXIoc2Nyb2xs
c1ZlcnRpY2FsbHkpOworICAgICAgICAgICAgaGFzVmVydGljYWxTY3JvbGxiYXIgPSBzY3JvbGxz
VmVydGljYWxseTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChoYXNIb3Jpem9udGFsU2Nyb2xs
YmFyICE9IHNjcm9sbHNIb3Jpem9udGFsbHkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+c2V0SGFz
SG9yaXpvbnRhbFNjcm9sbGJhcihzY3JvbGxzSG9yaXpvbnRhbGx5KTsKKyAgICAgICAgICAgIGhh
c0hvcml6b250YWxTY3JvbGxiYXIgPSBzY3JvbGxzSG9yaXpvbnRhbGx5OworICAgICAgICB9Cisg
ICAgfQogICAgIAotICAgIGd0a19hZGp1c3RtZW50X2NoYW5nZWQodmFkaik7Ci0gICAgZ3RrX2Fk
anVzdG1lbnRfdmFsdWVfY2hhbmdlZCh2YWRqKTsKKyAgICAvLyBTZXQgdXAgdGhlIHJhbmdlIChh
bmQgcGFnZSBzdGVwL2xpbmUgc3RlcCkuCisgICAgSW50U2l6ZSBtYXhTY3JvbGxQb3NpdGlvbihj
b250ZW50c1dpZHRoKCkgLSB2aXNpYmxlV2lkdGgoKSwgY29udGVudHNIZWlnaHQoKSAtIHZpc2li
bGVIZWlnaHQoKSk7CisgICAgSW50U2l6ZSBzY3JvbGwgPSBkZXNpcmVkT2Zmc2V0LnNocnVua1Rv
KG1heFNjcm9sbFBvc2l0aW9uKTsKKyAgICBzY3JvbGwuY2xhbXBOZWdhdGl2ZVRvWmVybygpOwor
CisKKyAKKyAgICBpZiAobV9kYXRhLT5oQWRqKSB7CisgICAgICAgIG1fZGF0YS0+aEFkai0+cGFn
ZV9zaXplID0gdmlzaWJsZVdpZHRoKCk7CisgICAgICAgIG1fZGF0YS0+aEFkai0+c3RlcF9pbmNy
ZW1lbnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50OworICAgICAgICBtX2RhdGEtPmhBZGotPnVw
cGVyID0gY29udGVudHNXaWR0aCgpOworICAgICAgICBndGtfYWRqdXN0bWVudF9jaGFuZ2VkKG1f
ZGF0YS0+aEFkaik7CisKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsT2Zmc2V0LndpZHRoKCkg
IT0gc2Nyb2xsLndpZHRoKCkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+aEFkai0+dmFsdWUgPSBz
Y3JvbGwud2lkdGgoKTsKKyAgICAgICAgICAgIGd0a19hZGp1c3RtZW50X3ZhbHVlX2NoYW5nZWQo
bV9kYXRhLT5oQWRqKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAobV9kYXRhLT5oQmFyKSB7
CisgICAgICAgIGludCBjbGllbnRXaWR0aCA9IHZpc2libGVXaWR0aCgpOworICAgICAgICBtX2Rh
dGEtPmhCYXItPnNldEVuYWJsZWQoY29udGVudHNXaWR0aCgpID4gY2xpZW50V2lkdGgpOworICAg
ICAgICBpbnQgcGFnZVN0ZXAgPSAoY2xpZW50V2lkdGggLSBQQUdFX0tFRVApOworICAgICAgICBp
ZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudFdpZHRoOworICAgICAgICBJbnRSZWN0
IG9sZFJlY3QobV9kYXRhLT5oQmFyLT5mcmFtZUdlb21ldHJ5KCkpOworICAgICAgICBJbnRSZWN0
IGhCYXJSZWN0ID0gSW50UmVjdCgwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWlnaHQoKSAtIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCksCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHdpZHRoKCkgLSAobV9kYXRhLT52QmFyID8gbV9kYXRhLT52QmFyLT53
aWR0aCgpIDogMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+
aEJhci0+aGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPmhCYXItPnNldFJlY3QoaEJhclJlY3Qp
OworICAgICAgICBpZiAoIW1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQgJiYgb2xkUmVjdCAh
PSBtX2RhdGEtPmhCYXItPmZyYW1lR2VvbWV0cnkoKSkKKyAgICAgICAgICAgIG1fZGF0YS0+aEJh
ci0+aW52YWxpZGF0ZSgpOworCisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVz
c2VkKQorICAgICAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbih0
cnVlKTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRTdGVwcyhMSU5FX1NURVAsIHBhZ2VTdGVw
KTsKKyAgICAgICAgbV9kYXRhLT5oQmFyLT5zZXRQcm9wb3J0aW9uKGNsaWVudFdpZHRoLCBjb250
ZW50c1dpZHRoKCkpOworICAgICAgICBtX2RhdGEtPmhCYXItPnNldFZhbHVlKHNjcm9sbC53aWR0
aCgpKTsKKyAgICAgICAgaWYgKG1fZGF0YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpCisgICAgICAg
ICAgICBtX2RhdGEtPmhCYXItPnNldFN1cHByZXNzSW52YWxpZGF0aW9uKGZhbHNlKTsgCisgICAg
fSAKKworICAgIGlmIChtX2RhdGEtPnZBZGopIHsKKyAgICAgICAgbV9kYXRhLT52QWRqLT5wYWdl
X3NpemUgPSB2aXNpYmxlSGVpZ2h0KCk7CisgICAgICAgIG1fZGF0YS0+dkFkai0+c3RlcF9pbmNy
ZW1lbnQgPSBNYWdpY0d0a1Njcm9sbENvbnN0YW50OworICAgICAgICBtX2RhdGEtPnZBZGotPnVw
cGVyID0gY29udGVudHNIZWlnaHQoKTsKKyAgICAgICAgZ3RrX2FkanVzdG1lbnRfY2hhbmdlZCht
X2RhdGEtPnZBZGopOworCisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbE9mZnNldC5oZWlnaHQo
KSAhPSBzY3JvbGwuaGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIG1fZGF0YS0+dkFkai0+dmFsdWUg
PSBzY3JvbGwuaGVpZ2h0KCk7CisgICAgICAgICAgICBndGtfYWRqdXN0bWVudF92YWx1ZV9jaGFu
Z2VkKG1fZGF0YS0+dkFkaik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG1fZGF0YS0+dkJh
cikgeworICAgICAgICBpbnQgY2xpZW50SGVpZ2h0ID0gdmlzaWJsZUhlaWdodCgpOworICAgICAg
ICBtX2RhdGEtPnZCYXItPnNldEVuYWJsZWQoY29udGVudHNIZWlnaHQoKSA+IGNsaWVudEhlaWdo
dCk7CisgICAgICAgIGludCBwYWdlU3RlcCA9IChjbGllbnRIZWlnaHQgLSBQQUdFX0tFRVApOwor
ICAgICAgICBpZiAocGFnZVN0ZXAgPCAwKSBwYWdlU3RlcCA9IGNsaWVudEhlaWdodDsKKyAgICAg
ICAgSW50UmVjdCBvbGRSZWN0KG1fZGF0YS0+dkJhci0+ZnJhbWVHZW9tZXRyeSgpKTsKKyAgICAg
ICAgSW50UmVjdCB2QmFyUmVjdCA9IEludFJlY3Qod2lkdGgoKSAtIG1fZGF0YS0+dkJhci0+d2lk
dGgoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0KCkgLSAobV9kYXRhLT5oQmFyID8gbV9k
YXRhLT5oQmFyLT5oZWlnaHQoKSA6IDApKTsKKyAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRSZWN0
KHZCYXJSZWN0KTsKKyAgICAgICAgaWYgKCFtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVzc2VkICYm
IG9sZFJlY3QgIT0gbV9kYXRhLT52QmFyLT5mcmFtZUdlb21ldHJ5KCkpCisgICAgICAgICAgICBt
X2RhdGEtPnZCYXItPmludmFsaWRhdGUoKTsKKworICAgICAgICBpZiAobV9kYXRhLT5zY3JvbGxi
YXJzU3VwcHJlc3NlZCkKKyAgICAgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0U3VwcHJlc3NJbnZh
bGlkYXRpb24odHJ1ZSk7CisgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0U3RlcHMoTElORV9TVEVQ
LCBwYWdlU3RlcCk7CisgICAgICAgIG1fZGF0YS0+dkJhci0+c2V0UHJvcG9ydGlvbihjbGllbnRI
ZWlnaHQsIGNvbnRlbnRzSGVpZ2h0KCkpOworICAgICAgICBtX2RhdGEtPnZCYXItPnNldFZhbHVl
KHNjcm9sbC5oZWlnaHQoKSk7CisgICAgICAgIGlmIChtX2RhdGEtPnNjcm9sbGJhcnNTdXBwcmVz
c2VkKQorICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5zZXRTdXBwcmVzc0ludmFsaWRhdGlvbihm
YWxzZSk7CisgICAgfQogCi0gICAgbV9kYXRhLT5zY3JvbGxCYXJzTmVlZFVwZGF0ZSA9IGZhbHNl
OworICAgIGlmIChvbGRIYXNWZXJ0aWNhbCAhPSAobV9kYXRhLT52QmFyICE9IDApIHx8IG9sZEhh
c0hvcml6b250YWwgIT0gKG1fZGF0YS0+aEJhciAhPSAwKSkKKyAgICAgICAgZ2VvbWV0cnlDaGFu
Z2VkKCk7CisKKyAgICAvLyBTZWUgaWYgb3VyIG9mZnNldCBoYXMgY2hhbmdlZCBpbiBhIHNpdHVh
dGlvbiB3aGVyZSB3ZSBtaWdodCBub3QgaGF2ZSBzY3JvbGxiYXJzLgorICAgIC8vIFRoaXMgY2Fu
IGhhcHBlbiB3aGVuIGVkaXRpbmcgYSBib2R5IHdpdGggb3ZlcmZsb3c6aGlkZGVuIGFuZCBzY3Jv
bGxpbmcgdG8gcmV2ZWFsIHNlbGVjdGlvbi4KKyAgICAvLyBJdCBjYW4gYWxzbyBoYXBwZW4gd2hl
biBtYXhpbWl6aW5nIGEgd2luZG93IHRoYXQgaGFzIHNjcm9sbGJhcnMgKGJ1dCB0aGUgbmV3IG1h
eGltaXplZCByZXN1bHQKKyAgICAvLyBkb2VzIG5vdCkuCisgICAgSW50U2l6ZSBzY3JvbGxEZWx0
YSA9IHNjcm9sbCAtIG1fZGF0YS0+c2Nyb2xsT2Zmc2V0OworICAgIGlmIChzY3JvbGxEZWx0YSAh
PSBJbnRTaXplKCkpIHsKKyAgICAgICBtX2RhdGEtPnNjcm9sbE9mZnNldCA9IHNjcm9sbDsKKyAg
ICAgICBtX2RhdGEtPnNjcm9sbEJhY2tpbmdTdG9yZShzY3JvbGxEZWx0YSk7CisgICAgfQorCisg
ICAgbV9kYXRhLT5pblVwZGF0ZVNjcm9sbGJhcnMgPSBmYWxzZTsKIH0KIAotSW50UG9pbnQgU2Ny
b2xsVmlldzo6d2luZG93VG9Db250ZW50cyhjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0CitJ
bnRQb2ludCBTY3JvbGxWaWV3Ojp3aW5kb3dUb0NvbnRlbnRzKGNvbnN0IEludFBvaW50JiB3aW5k
b3dQb2ludCkgY29uc3QKIHsgCi0gICAgcmV0dXJuIHBvaW50OworICAgIEludFBvaW50IHZpZXdQ
b2ludCA9IGNvbnZlcnRGcm9tQ29udGFpbmluZ1dpbmRvdyh3aW5kb3dQb2ludCk7CisgICAgcmV0
dXJuIHZpZXdQb2ludCArIHNjcm9sbE9mZnNldCgpOwogfQogCi1JbnRQb2ludCBTY3JvbGxWaWV3
Ojpjb250ZW50c1RvV2luZG93KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK0ludFBvaW50
IFNjcm9sbFZpZXc6OmNvbnRlbnRzVG9XaW5kb3coY29uc3QgSW50UG9pbnQmIGNvbnRlbnRzUG9p
bnQpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHBvaW50OworICAgIEludFBvaW50IHZpZXdQb2ludCA9
IGNvbnRlbnRzUG9pbnQgLSBzY3JvbGxPZmZzZXQoKTsKKyAgICByZXR1cm4gY29udmVydFRvQ29u
dGFpbmluZ1dpbmRvdyh2aWV3UG9pbnQpOyAgCiB9CiAKIFBsYXRmb3JtU2Nyb2xsYmFyKiBTY3Jv
bGxWaWV3OjpzY3JvbGxiYXJVbmRlck1vdXNlKGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgbW91
c2VFdmVudCkKIHsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBJbnRQb2ludCB2aWV3UG9p
bnQgPSBjb252ZXJ0RnJvbUNvbnRhaW5pbmdXaW5kb3cobW91c2VFdmVudC5wb3MoKSk7CisgICAg
aWYgKG1fZGF0YS0+aEJhciAmJiBtX2RhdGEtPmhCYXItPmZyYW1lR2VvbWV0cnkoKS5jb250YWlu
cyh2aWV3UG9pbnQpKQorICAgICAgICByZXR1cm4gbV9kYXRhLT5oQmFyLmdldCgpOworICAgIGlm
IChtX2RhdGEtPnZCYXIgJiYgbV9kYXRhLT52QmFyLT5mcmFtZUdlb21ldHJ5KCkuY29udGFpbnMo
dmlld1BvaW50KSkKKyAgICAgICAgcmV0dXJuIG1fZGF0YS0+dkJhci5nZXQoKTsKICAgICByZXR1
cm4gMDsKIH0KIAorSW50UG9pbnQgU2Nyb2xsVmlldzo6Y29udmVydENoaWxkVG9TZWxmKGNvbnN0
IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQ
b2ludCBuZXdQb2ludCA9IHBvaW50OworICAgIGlmIChjaGlsZCAhPSBtX2RhdGEtPmhCYXIgJiYg
Y2hpbGQgIT0gbV9kYXRhLT52QmFyKQorICAgICAgICBuZXdQb2ludCA9IHBvaW50IC0gc2Nyb2xs
T2Zmc2V0KCk7CisgICAgcmV0dXJuIFdpZGdldDo6Y29udmVydENoaWxkVG9TZWxmKGNoaWxkLCBu
ZXdQb2ludCk7Cit9CisKK0ludFBvaW50IFNjcm9sbFZpZXc6OmNvbnZlcnRTZWxmVG9DaGlsZChj
b25zdCBXaWRnZXQqIGNoaWxkLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Cit7CisgICAg
SW50UG9pbnQgbmV3UG9pbnQgPSBwb2ludDsKKyAgICBpZiAoY2hpbGQgIT0gbV9kYXRhLT5oQmFy
ICYmIGNoaWxkICE9IG1fZGF0YS0+dkJhcikKKyAgICAgICAgbmV3UG9pbnQgPSBwb2ludCArIHNj
cm9sbE9mZnNldCgpOworICAgIHJldHVybiBXaWRnZXQ6OmNvbnZlcnRTZWxmVG9DaGlsZChjaGls
ZCwgbmV3UG9pbnQpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OnBhaW50KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICAvLyBGSVhNRTogVGhpcyBj
b2RlIGlzIGhlcmUgc28gd2UgZG9uJ3QgaGF2ZSB0byBmb3JrIEZyYW1lVmlldy5oLy5jcHAuCisg
ICAgLy8gSW4gdGhlIGVuZCwgRnJhbWVWaWV3IHNob3VsZCBqdXN0IG1lcmdlIHdpdGggU2Nyb2xs
Vmlldy4KKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7CisKKyAgICBpZiAoY29udGV4dC0+cGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBJbnRSZWN0IGRvY3VtZW50
RGlydHlSZWN0ID0gcmVjdDsKKyAgICBkb2N1bWVudERpcnR5UmVjdC5pbnRlcnNlY3QoZnJhbWVH
ZW9tZXRyeSgpKTsKKworICAgIGNvbnRleHQtPnNhdmUoKTsKKworICAgIGNvbnRleHQtPnRyYW5z
bGF0ZSh4KCksIHkoKSk7CisgICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZSgteCgpLCAteSgpKTsK
KworICAgIGNvbnRleHQtPnRyYW5zbGF0ZSgtY29udGVudHNYKCksIC1jb250ZW50c1koKSk7Cisg
ICAgZG9jdW1lbnREaXJ0eVJlY3QubW92ZShjb250ZW50c1goKSwgY29udGVudHNZKCkpOworCisg
ICAgY29udGV4dC0+Y2xpcChlbmNsb3NpbmdJbnRSZWN0KHZpc2libGVDb250ZW50UmVjdCgpKSk7
CisgICAgc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhpcyktPmZyYW1lKCktPnBhaW50
KGNvbnRleHQsIGRvY3VtZW50RGlydHlSZWN0KTsKKyAgICBjb250ZXh0LT5yZXN0b3JlKCk7CisK
KyAgICAvLyBOb3cgcGFpbnQgdGhlIHNjcm9sbGJhcnMuCisgICAgaWYgKCFtX2RhdGEtPnNjcm9s
bGJhcnNTdXBwcmVzc2VkICYmIChtX2RhdGEtPmhCYXIgfHwgbV9kYXRhLT52QmFyKSkgeworICAg
ICAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgICAgIEludFJlY3Qgc2Nyb2xsVmlld0RpcnR5UmVj
dCA9IHJlY3Q7CisgICAgICAgIHNjcm9sbFZpZXdEaXJ0eVJlY3QuaW50ZXJzZWN0KGZyYW1lR2Vv
bWV0cnkoKSk7CisgICAgICAgIC8qCisgICAgICAgICAqIFdlIGRvbid0IG5lZWQgdG8gdHJhbnNs
YXRlIHRoZSBjb250ZXh0IGFzIFBsYXRmb3JtU2Nyb2xsYmFyOjpzZXRSZWN0IG1ha2VzIHN1cmUg
dGhlIHNjcm9sbGJhcgorICAgICAgICAgKiBpcyBhdCB0aGUgcmlnaHQgc3BvdC4KKyAgICAgICAg
ICovCisgICAgICAgIGlmIChtX2RhdGEtPmhCYXIpCisgICAgICAgICAgICBtX2RhdGEtPmhCYXIt
PnBhaW50KGNvbnRleHQsIHNjcm9sbFZpZXdEaXJ0eVJlY3QpOworICAgICAgICBpZiAobV9kYXRh
LT52QmFyKQorICAgICAgICAgICAgbV9kYXRhLT52QmFyLT5wYWludChjb250ZXh0LCBzY3JvbGxW
aWV3RGlydHlSZWN0KTsKKworICAgICAgICAvKgorICAgICAgICAgKiBGSVhNRTogVE9ETzogQ2hl
Y2sgaWYgdGhhdCB3b3JrcyB3aXRoIFJUTAorICAgICAgICAgKi8KKyAgICAgICAgY29udGV4dC0+
dHJhbnNsYXRlKHgoKSwgeSgpKTsKKyAgICAgICAgc2Nyb2xsVmlld0RpcnR5UmVjdC5tb3ZlKC14
KCksIC15KCkpOworICAgICAgICAvLyBGaWxsIHRoZSBzY3JvbGwgY29ybmVyIHdpdGggd2hpdGUu
CisgICAgICAgIEludFJlY3QgaENvcm5lcjsKKyAgICAgICAgaWYgKG1fZGF0YS0+aEJhciAmJiB3
aWR0aCgpIC0gbV9kYXRhLT5oQmFyLT53aWR0aCgpID4gMCkgeworICAgICAgICAgICAgaENvcm5l
ciA9IEludFJlY3QobV9kYXRhLT5oQmFyLT53aWR0aCgpLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaGVpZ2h0KCkgLSBtX2RhdGEtPmhCYXItPmhlaWdodCgpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2lkdGgoKSAtIG1fZGF0YS0+aEJhci0+d2lkdGgoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0YS0+aEJhci0+aGVpZ2h0KCkpOworICAgICAg
ICAgICAgaWYgKGhDb3JuZXIuaW50ZXJzZWN0cyhzY3JvbGxWaWV3RGlydHlSZWN0KSkKKyAgICAg
ICAgICAgICAgICBjb250ZXh0LT5maWxsUmVjdChoQ29ybmVyLCBDb2xvcjo6d2hpdGUpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKG1fZGF0YS0+dkJhciAmJiBoZWlnaHQoKSAtIG1fZGF0YS0+
dkJhci0+aGVpZ2h0KCkgPiAwKSB7CisgICAgICAgICAgICBJbnRSZWN0IHZDb3JuZXIod2lkdGgo
KSAtIG1fZGF0YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X2RhdGEtPnZCYXItPmhlaWdodCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZGF0
YS0+dkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQoKSAt
IG1fZGF0YS0+dkJhci0+aGVpZ2h0KCkpOworICAgICAgICAgICAgaWYgKHZDb3JuZXIgIT0gaENv
cm5lciAmJiB2Q29ybmVyLmludGVyc2VjdHMoc2Nyb2xsVmlld0RpcnR5UmVjdCkpCisgICAgICAg
ICAgICAgICAgY29udGV4dC0+ZmlsbFJlY3QodkNvcm5lciwgQ29sb3I6OndoaXRlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbnRleHQtPnJlc3RvcmUoKTsKKyAgICB9Cit9CisKKy8qCisgKiB1
cGRhdGUgY2hpbGRyZW4gYnV0IG5vciBvdXIgc2Nyb2xsYmFycy4gVGhleSBzaG91bGQgbm90IHNj
cm9sbCB3aGVuCisgKiB3ZSBzY3JvbGwgb3VyIGNvbnRlbnQuCisgKi8KK3ZvaWQgU2Nyb2xsVmll
dzo6Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBIYXNoU2V0PFdpZGdldCo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBtX2RhdGEtPmNoaWxkcmVuLmVuZCgpOworICAgIGZvciAoSGFzaFNl
dDxXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IG1fZGF0YS0+Y2hpbGRyZW4uYmVn
aW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkKKyAgICAgICAgKCpjdXJyZW50KS0+Z2Vv
bWV0cnlDaGFuZ2VkKCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsKFNjcm9sbERpcmVj
dGlvbiBkaXJlY3Rpb24sIFNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5KQoreworICAgIGlm
ICAoKGRpcmVjdGlvbiA9PSBTY3JvbGxVcCB8fCBkaXJlY3Rpb24gPT0gU2Nyb2xsRG93bikgJiYg
bV9kYXRhLT52QmFyKQorICAgICAgICBtX2RhdGEtPnZCYXItPnNjcm9sbChkaXJlY3Rpb24sIGdy
YW51bGFyaXR5KTsKKyAgICBlbHNlIGlmIChtX2RhdGEtPmhCYXIpCisgICAgICAgIG1fZGF0YS0+
aEJhci0+c2Nyb2xsKGRpcmVjdGlvbiwgZ3JhbnVsYXJpdHkpOworfQorCitJbnRSZWN0IFNjcm9s
bFZpZXc6OndpbmRvd1Jlc2l6ZXJSZWN0KCkKK3sKKyAgICBBU1NFUlQoaXNGcmFtZVZpZXcoKSk7
CisgICAgY29uc3QgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxjb25zdCBGcmFt
ZVZpZXcqPih0aGlzKTsKKyAgICBQYWdlKiBwYWdlID0gZnJhbWVWaWV3LT5mcmFtZSgpID8gZnJh
bWVWaWV3LT5mcmFtZSgpLT5wYWdlKCkgOiAwOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0
dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gcGFnZS0+Y2hyb21lKCktPndpbmRvd1Jlc2l6ZXJS
ZWN0KCk7Cit9CisKK2Jvb2wgU2Nyb2xsVmlldzo6cmVzaXplck92ZXJsYXBzQ29udGVudCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuICFtX2RhdGEtPnNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXI7Cit9
CisKK3ZvaWQgU2Nyb2xsVmlldzo6YWRqdXN0T3ZlcmxhcHBpbmdTY3JvbGxiYXJDb3VudChpbnQg
b3ZlcmxhcERlbHRhKQoreworICAgIGludCBvbGRDb3VudCA9IG1fZGF0YS0+c2Nyb2xsYmFyc0F2
b2lkaW5nUmVzaXplcjsKKyAgICBtX2RhdGEtPnNjcm9sbGJhcnNBdm9pZGluZ1Jlc2l6ZXIgKz0g
b3ZlcmxhcERlbHRhOworICAgIGlmIChwYXJlbnQoKSAmJiBwYXJlbnQoKS0+aXNGcmFtZVZpZXco
KSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4ocGFyZW50KCkpLT5hZGp1c3RPdmVy
bGFwcGluZ1Njcm9sbGJhckNvdW50KG92ZXJsYXBEZWx0YSk7CisgICAgZWxzZSBpZiAoIW1fZGF0
YS0+c2Nyb2xsYmFyc1N1cHByZXNzZWQpIHsKKyAgICAgICAgLy8gSWYgd2Ugd2VudCBmcm9tIG4g
dG8gMCBvciBmcm9tIDAgdG8gbiBhbmQgd2UncmUgdGhlIG91dGVybW9zdCB2aWV3LAorICAgICAg
ICAvLyB3ZSBuZWVkIHRvIGludmFsaWRhdGUgdGhlIHdpbmRvd1Jlc2l6ZXJSZWN0KCksIHNpbmNl
IGl0IHdpbGwgbm93IG5lZWQgdG8gcGFpbnQKKyAgICAgICAgLy8gZGlmZmVyZW50bHkuCisgICAg
ICAgIGlmIChvbGRDb3VudCA+IDAgJiYgbV9kYXRhLT5zY3JvbGxiYXJzQXZvaWRpbmdSZXNpemVy
ID09IDAgfHwKKyAgICAgICAgICAgIG9sZENvdW50ID09IDAgJiYgbV9kYXRhLT5zY3JvbGxiYXJz
QXZvaWRpbmdSZXNpemVyID4gMCkKKyAgICAgICAgICAgIGludmFsaWRhdGVSZWN0KHdpbmRvd1Jl
c2l6ZXJSZWN0KCkpOworICAgIH0KK30KKwordm9pZCBTY3JvbGxWaWV3OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogcGFyZW50VmlldykKK3sKKyAgICBpZiAoIXBhcmVudFZpZXcgJiYgbV9kYXRhLT5z
Y3JvbGxiYXJzQXZvaWRpbmdSZXNpemVyICYmIHBhcmVudCgpICYmIHBhcmVudCgpLT5pc0ZyYW1l
VmlldygpKQorICAgICAgICBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihwYXJlbnQoKSktPmFkanVz
dE92ZXJsYXBwaW5nU2Nyb2xsYmFyQ291bnQoZmFsc2UpOworICAgIFdpZGdldDo6c2V0UGFyZW50
KHBhcmVudFZpZXcpOworfQorCit2b2lkIFNjcm9sbFZpZXc6OmFkZFRvRGlydHlSZWdpb24oY29u
c3QgSW50UmVjdCYgY29udGFpbmluZ1dpbmRvd1JlY3QpCit7CisgICAgQVNTRVJUKGlzRnJhbWVW
aWV3KCkpOworICAgIGNvbnN0IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgRnJhbWVWaWV3Kj4odGhpcyk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUo
KSA/IGZyYW1lVmlldy0+ZnJhbWUoKS0+cGFnZSgpIDogMDsKKyAgICBpZiAoIXBhZ2UpCisgICAg
ICAgIHJldHVybjsKKyAgICBwYWdlLT5jaHJvbWUoKS0+YWRkVG9EaXJ0eVJlZ2lvbihjb250YWlu
aW5nV2luZG93UmVjdCk7Cit9CisKK3ZvaWQgU2Nyb2xsVmlldzo6c2Nyb2xsQmFja2luZ1N0b3Jl
KGludCBkeCwgaW50IGR5LCBjb25zdCBJbnRSZWN0JiBzY3JvbGxWaWV3UmVjdCwgY29uc3QgSW50
UmVjdCYgY2xpcFJlY3QpCit7CisgICAgQVNTRVJUKGlzRnJhbWVWaWV3KCkpOworICAgIGNvbnN0
IEZyYW1lVmlldyogZnJhbWVWaWV3ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRnJhbWVWaWV3Kj4odGhp
cyk7CisgICAgUGFnZSogcGFnZSA9IGZyYW1lVmlldy0+ZnJhbWUoKSA/IGZyYW1lVmlldy0+ZnJh
bWUoKS0+cGFnZSgpIDogMDsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBw
YWdlLT5jaHJvbWUoKS0+c2Nyb2xsQmFja2luZ1N0b3JlKGR4LCBkeSwgc2Nyb2xsVmlld1JlY3Qs
IGNsaXBSZWN0KTsKK30KKwordm9pZCBTY3JvbGxWaWV3Ojp1cGRhdGVCYWNraW5nU3RvcmUoKQor
eworICAgIEFTU0VSVChpc0ZyYW1lVmlldygpKTsKKyAgICBjb25zdCBGcmFtZVZpZXcqIGZyYW1l
VmlldyA9IHN0YXRpY19jYXN0PGNvbnN0IEZyYW1lVmlldyo+KHRoaXMpOworICAgIFBhZ2UqIHBh
Z2UgPSBmcmFtZVZpZXctPmZyYW1lKCkgPyBmcmFtZVZpZXctPmZyYW1lKCktPnBhZ2UoKSA6IDA7
CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisgICAgcGFnZS0+Y2hyb21lKCktPnVw
ZGF0ZUJhY2tpbmdTdG9yZSgpOworfQorCiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dkay9U
ZW1wb3JhcnlMaW5rU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ2Rr
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0
Zm9ybS9nZGsvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNiBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkZpbGVDaG9vc2VyLmgiCiAj
aW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZyYW1lR2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkUmVxdWVzdC5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnRHZGsuaCIKQEAgLTE2Myw3ICsxNjIsNiBAQCBTdHJpbmcgRmlsZUNob29zZXI6
OmJhc2VuYW1lRm9yV2lkdGgoY29uCiBDb2xvciBXZWJDb3JlOjpmb2N1c1JpbmdDb2xvcigpIHsg
cmV0dXJuIDB4RkYwMDAwRkY7IH0KIHZvaWQgV2ViQ29yZTo6c2V0Rm9jdXNSaW5nQ29sb3JDaGFu
Z2VGdW5jdGlvbih2b2lkICgqKSgpKSB7IH0KIAotdm9pZCBGcmFtZTo6c2V0TmVlZHNSZWFwcGx5
U3R5bGVzKCkgeyB9CiAKIGJvb2wgUmVzb3VyY2VIYW5kbGU6OndpbGxMb2FkRnJvbUNhY2hlKFJl
c291cmNlUmVxdWVzdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgcmV0dXJuIGZhbHNlOyB9CiBib29s
IFJlc291cmNlSGFuZGxlOjpsb2Fkc0Jsb2NrZWQoKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVy
biBmYWxzZTsgfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAJKHJl
dmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9nZGsvV2hlZWxFdmVudEdkay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDI3ICszMiwyNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLVBsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50KiBldmVu
dCkKK1BsYXRmb3JtV2hlZWxFdmVudDo6UGxhdGZvcm1XaGVlbEV2ZW50KEdka0V2ZW50U2Nyb2xs
KiBldmVudCkKIHsKICAgICBtX2RlbHRhWCA9IDA7CiAgICAgbV9kZWx0YVkgPSAwOwogCi0gICAg
aWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfVVApCisgICAgaWYgKGV2
ZW50LT5kaXJlY3Rpb24gPT0gR0RLX1NDUk9MTF9VUCkKICAgICAgICAgbV9kZWx0YVkgPSAtMTIw
OwotICAgIGVsc2UgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0aW9uID09IEdES19TQ1JPTExfTEVG
VCkKKyAgICBlbHNlIGlmIChldmVudC0+ZGlyZWN0aW9uID09IEdES19TQ1JPTExfTEVGVCkKICAg
ICAgICAgbV9kZWx0YVggPSAtMTIwOwotICAgIGVsc2UgaWYgKGV2ZW50LT5zY3JvbGwuZGlyZWN0
aW9uID09IEdES19TQ1JPTExfUklHSFQpCisgICAgZWxzZSBpZiAoZXZlbnQtPmRpcmVjdGlvbiA9
PSBHREtfU0NST0xMX1JJR0hUKQogICAgICAgICBtX2RlbHRhWCA9IDEyMDsKICAgICBlbHNlCiAg
ICAgICAgIG1fZGVsdGFZID0gMTIwOwogCi0gICAgbV9wb3NpdGlvbiA9IEludFBvaW50KChpbnQp
ZXZlbnQtPnNjcm9sbC54LCAoaW50KWV2ZW50LT5zY3JvbGwueSk7Ci0gICAgbV9nbG9iYWxQb3Np
dGlvbiA9IEludFBvaW50KChpbnQpZXZlbnQtPnNjcm9sbC54X3Jvb3QsIChpbnQpZXZlbnQtPnNj
cm9sbC55X3Jvb3QpOworICAgIG1fcG9zaXRpb24gPSBJbnRQb2ludCgoaW50KWV2ZW50LT54LCAo
aW50KWV2ZW50LT55KTsKKyAgICBtX2dsb2JhbFBvc2l0aW9uID0gSW50UG9pbnQoKGludClldmVu
dC0+eF9yb290LCAoaW50KWV2ZW50LT55X3Jvb3QpOwogICAgIG1faXNBY2NlcHRlZCA9IGZhbHNl
OwotICAgIG1fc2hpZnRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX1NISUZUX01BU0s7
Ci0gICAgbV9jdHJsS2V5ID0gZXZlbnQtPmJ1dHRvbi5zdGF0ZSAmIEdES19DT05UUk9MX01BU0s7
Ci0gICAgbV9hbHRLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDFfTUFTSzsKLSAg
ICBtX21ldGFLZXkgPSBldmVudC0+YnV0dG9uLnN0YXRlICYgR0RLX01PRDJfTUFTSzsKKyAgICBt
X3NoaWZ0S2V5ID0gZXZlbnQtPnN0YXRlICYgR0RLX1NISUZUX01BU0s7CisgICAgbV9jdHJsS2V5
ID0gZXZlbnQtPnN0YXRlICYgR0RLX0NPTlRST0xfTUFTSzsKKyAgICBtX2FsdEtleSA9IGV2ZW50
LT5zdGF0ZSAmIEdES19NT0QxX01BU0s7CisgICAgbV9tZXRhS2V5ID0gZXZlbnQtPnN0YXRlICYg
R0RLX01PRDJfTUFTSzsKICAgICBtX2lzQ29udGludW91cyA9IGZhbHNlOwogfQogCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dkay9XaWRnZXRHZGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vZ2RrL1dpZGdldEdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29yZS9w
bGF0Zm9ybS9nZGsvV2lkZ2V0R2RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1p
a2UuZW1tZWxAZ21haWwuY29tIAogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgpAQCAtMzEsMTEgKzMxLDEyIEBA
CiAKICNpbmNsdWRlICJDdXJzb3IuaCIKICNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRnJh
bWVHZGsuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJ3ZWJraXRndGtwYWdlLmgiCiAK
ICNpbmNsdWRlIDxnZGsvZ2RrLmg+CiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgpAQCAtNDcsOCArNDgs
MTkgQEAgcHVibGljOgogICAgIEdka0RyYXdhYmxlKiBkcmF3YWJsZTsKICAgICBHdGtXaWRnZXQq
IHdpZGdldDsKICAgICBXaWRnZXRDbGllbnQqIGNsaWVudDsKLSAgICBJbnRSZWN0IGdlb21ldHJ5
OwotICAgIEZvbnQgZm9udDsKKyAgICBJbnRSZWN0IGZyYW1lUmVjdDsKKworICAgIFNjcm9sbFZp
ZXcqIHBhcmVudDsKKyAgICBXZWJLaXRHdGtQYWdlKiBjb250YWluaW5nV2luZG93OworICAgIGJv
b2wgc3VwcHJlc3NJbnZhbGlkYXRpb247CisgICAgYm9vbCBpc1Njcm9sbFZpZXdDb250cm9sOwor
CisgICAgR2RrRHJhd2FibGUqIGdka0RyYXdhYmxlKCkKKyAgICB7CisgICAgICAgIGlmICghZHJh
d2FibGUgJiYgd2lkZ2V0KQorICAgICAgICAgICAgZHJhd2FibGUgPSB3aWRnZXQtPndpbmRvdzsK
KyAgICAgICAgcmV0dXJuIGRyYXdhYmxlOworICAgIH0KIH07CiAKIFdpZGdldDo6V2lkZ2V0KCkK
QEAgLTU2LDI3ICs2OCwyMCBAQCBXaWRnZXQ6OldpZGdldCgpCiB7CiAgICAgZGF0YS0+ZHJhd2Fi
bGUgPSAwOwogICAgIGRhdGEtPndpZGdldCA9IDA7CisgICAgZGF0YS0+Y2xpZW50ID0gMDsKKyAg
ICBkYXRhLT5wYXJlbnQgPSAwOworICAgIGRhdGEtPmNvbnRhaW5pbmdXaW5kb3cgPSAwOworICAg
IGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uID0gZmFsc2U7CisgICAgZGF0YS0+aXNTY3JvbGxW
aWV3Q29udHJvbCA9IGZhbHNlOwogfQogCi1XaWRnZXQ6OldpZGdldChHdGtXaWRnZXQqIHdpZGdl
dCkKLSAgICA6IGRhdGEobmV3IFdpZGdldFByaXZhdGUpCi17Ci0gICAgc2V0R3RrV2lkZ2V0KHdp
ZGdldCk7Ci19Ci0KLUdka0RyYXdhYmxlKiBXaWRnZXQ6Omdka0RyYXdhYmxlKCkgY29uc3QKLXsK
LSAgICBpZiAoIWRhdGEtPmRyYXdhYmxlICYmIGRhdGEtPndpZGdldCkKLSAgICAgICAgZGF0YS0+
ZHJhd2FibGUgPSBHVEtfSVNfTEFZT1VUKGRhdGEtPndpZGdldCkgPyBHVEtfTEFZT1VUKGRhdGEt
PndpZGdldCktPmJpbl93aW5kb3cgOiBkYXRhLT53aWRnZXQtPndpbmRvdzsKLSAgICByZXR1cm4g
ZGF0YS0+ZHJhd2FibGU7Ci19CiAKLUd0a1dpZGdldCogV2lkZ2V0OjpndGtXaWRnZXQoKSBjb25z
dAorR3RrV2lkZ2V0KiBXaWRnZXQ6OmludGVybmFsR3RrV2lkZ2V0KCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gZGF0YS0+d2lkZ2V0OwogfQogCi12b2lkIFdpZGdldDo6c2V0R3RrV2lkZ2V0KEd0a1dp
ZGdldCogd2lkZ2V0KQordm9pZCBXaWRnZXQ6OnNldEludGVybmFsR3RrV2lkZ2V0KEd0a1dpZGdl
dCogd2lkZ2V0KQogewogICAgIGRhdGEtPmRyYXdhYmxlID0gMDsKICAgICBkYXRhLT53aWRnZXQg
PSB3aWRnZXQ7CkBAIC04Nyw2ICs5MiwxNiBAQCBXaWRnZXQ6On5XaWRnZXQoKQogICAgIGRlbGV0
ZSBkYXRhOwogfQogCit2b2lkIFdpZGdldDo6c2V0Q29udGFpbmluZ1dpbmRvdyhXZWJLaXRHdGtQ
YWdlKiBjb250YWluaW5nV2luZG93KQoreworICAgIGRhdGEtPmNvbnRhaW5pbmdXaW5kb3cgPSBj
b250YWluaW5nV2luZG93OworfQorCitXZWJLaXRHdGtQYWdlKiBXaWRnZXQ6OmNvbnRhaW5pbmdX
aW5kb3coKSBjb25zdAoreworICAgIHJldHVybiBkYXRhLT5jb250YWluaW5nV2luZG93OworfQor
CiB2b2lkIFdpZGdldDo6c2V0Q2xpZW50KFdpZGdldENsaWVudCogYykKIHsKICAgICBkYXRhLT5j
bGllbnQgPSBjOwpAQCAtOTksMTUgKzExNCwyNyBAQCBXaWRnZXRDbGllbnQqIFdpZGdldDo6Y2xp
ZW50KCkgY29uc3QKIAogSW50UmVjdCBXaWRnZXQ6OmZyYW1lR2VvbWV0cnkoKSBjb25zdAogewot
ICAgIHJldHVybiBkYXRhLT5nZW9tZXRyeTsKKyAgICByZXR1cm4gZGF0YS0+ZnJhbWVSZWN0Owor
fQorCit2b2lkIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQorewor
ICAgIGRhdGEtPmZyYW1lUmVjdCA9IHI7Cit9CisKK3ZvaWQgV2lkZ2V0OjpzZXRQYXJlbnQoU2Ny
b2xsVmlldyogdikKK3sKKyAgICBkYXRhLT5wYXJlbnQgPSB2OworfQorCitTY3JvbGxWaWV3KiBX
aWRnZXQ6OnBhcmVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPnBhcmVudDsKIH0KIAog
dm9pZCBXaWRnZXQ6OnNldEZvY3VzKCkKIHsKLSAgICBHdGtXaWRnZXQgKndpZGdldCA9IGRhdGEt
PndpZGdldDsKLSAgICBpZiAoIXdpZGdldCkKLSAgICAgICAgcmV0dXJuOwotICAgIGd0a193aWRn
ZXRfZ3JhYl9mb2N1cyh3aWRnZXQpOworICAgIGd0a193aWRnZXRfZ3JhYl9mb2N1cyhpbnRlcm5h
bEd0a1dpZGdldCgpID8gaW50ZXJuYWxHdGtXaWRnZXQoKSA6IEdUS19XSURHRVQoY29udGFpbmlu
Z1dpbmRvdygpKSk7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzZXRDdXJzb3IoY29uc3QgQ3Vyc29yJiBj
dXJzb3IpCkBAIC0xMTYsMzkgKzE0MywyMSBAQCB2b2lkIFdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0
IEN1cnNvciYgY3VyCiAgICAgaWYgKCFwY3VyKQogICAgICAgICByZXR1cm47CiAKLSAgICBHZGtE
cmF3YWJsZSogZHJhd2FibGUgPSBnZGtEcmF3YWJsZSgpOwotICAgIGlmICghZHJhd2FibGUgfHwg
IUdES19JU19XSU5ET1coZHJhd2FibGUpKQotICAgICAgICByZXR1cm47Ci0gICAgR2RrV2luZG93
KiB3aW5kb3cgPSBHREtfV0lORE9XKGRyYXdhYmxlKTsKLSAgICBnZGtfd2luZG93X3NldF9jdXJz
b3Iod2luZG93LCBwY3VyKTsKLQorICAgIGdka193aW5kb3dfc2V0X2N1cnNvcihkYXRhLT5nZGtE
cmF3YWJsZSgpID8gR0RLX1dJTkRPVyhkYXRhLT5nZGtEcmF3YWJsZSgpKSA6IGNvbnRhaW5pbmdX
aW5kb3coKS0+YmluX3dpbmRvdywgcGN1cik7CiB9CiAKIHZvaWQgV2lkZ2V0OjpzaG93KCkKIHsK
LSAgICBHZGtEcmF3YWJsZSogZHJhd2FibGUgPSBnZGtEcmF3YWJsZSgpOwotICAgIGlmICghZHJh
d2FibGUgfHwgIUdES19JU19XSU5ET1coZHJhd2FibGUpKQorICAgIGlmICghaW50ZXJuYWxHdGtX
aWRnZXQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIEdka1dpbmRvdyogd2luZG93ID0gR0RLX1dJ
TkRPVyhkcmF3YWJsZSk7Ci0gICAgZ2RrX3dpbmRvd19zaG93KHdpbmRvdyk7CisgICAgZ3RrX3dp
ZGdldF9zaG93KGludGVybmFsR3RrV2lkZ2V0KCkpOwogfQogCiB2b2lkIFdpZGdldDo6aGlkZSgp
CiB7Ci0gICAgR2RrRHJhd2FibGUqIGRyYXdhYmxlID0gZ2RrRHJhd2FibGUoKTsKLSAgICBpZiAo
IWRyYXdhYmxlIHx8ICFHREtfSVNfV0lORE9XKGRyYXdhYmxlKSkKKyAgICBpZiAoIWludGVybmFs
R3RrV2lkZ2V0KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBHZGtXaW5kb3cqIHdpbmRvdyA9IEdE
S19XSU5ET1coZHJhd2FibGUpOwotICAgIGdka193aW5kb3dfaGlkZSh3aW5kb3cpOwotfQotCi12
b2lkIFdpZGdldDo6c2V0RnJhbWVHZW9tZXRyeShjb25zdCBJbnRSZWN0JiByKQotewotICAgIGRh
dGEtPmdlb21ldHJ5ID0gcjsKLSAgICBnX3JldHVybl9pZl9mYWlsKGRhdGEtPndpZGdldCk7Ci0K
LSAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb24gPSB7IHIueCgpLCByLnkoKSwgci53aWR0aCgp
LCByLmhlaWdodCgpIH07Ci0gICAgZ3RrX3dpZGdldF9zaXplX2FsbG9jYXRlKGRhdGEtPndpZGdl
dCwgJmFsbG9jYXRpb24pOworICAgIGd0a193aWRnZXRfaGlkZShpbnRlcm5hbEd0a1dpZGdldCgp
KTsKIH0KIAogdm9pZCBXaWRnZXQ6OnNldEVuYWJsZWQoYm9vbCkKQEAgLTE2NCwxMiArMTczLDM1
IEBAIGJvb2wgV2lkZ2V0Ojppc0VuYWJsZWQoKSBjb25zdAogCiB2b2lkIFdpZGdldDo6cmVtb3Zl
RnJvbVBhcmVudCgpCiB7Ci0gICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBpZiAocGFyZW50KCkp
CisgICAgICAgIHBhcmVudCgpLT5yZW1vdmVDaGlsZCh0aGlzKTsKIH0KIAotdm9pZCBXaWRnZXQ6
OnBhaW50KEdyYXBoaWNzQ29udGV4dCosIEludFJlY3QgY29uc3QmKQorLyoKKyAqIHNpbWlsaWFy
IHRvIGd0a19jb250YWluZXJfcHJvcGFnYXRlX2V4cG9zZSwgd2Ugd2FudCB0byBtYWtlIHN1cmUK
KyAqIGludGVybmFsR3RrV2lkZ2V0KCkgaXMgcGFpbnRlZCBub3cuCisgKgorICogVE9ETzogd2Ug
bWlnaHQgd2FudCB0byBob25vciB0aGUgdHJhbnNsYXRpb24gb2YgdGhlIGNvbnRleHQgYW5kIG1h
bmlwdWxhdGUKKyAqIGFsbG9jYXRpb24ueCBhbmQgYWxsb2NhdGlvbi55IGJlZm9yZSBkcmF3aW5n
LiBUaGlzIGhhcyBwb3RlbnRpYWwgdG8gcmVtb3ZlCisgKiB0aGUgc2V0U2Nyb2xsVmlld0NvbnRy
b2wgbWV0aG9kLgorICovCit2b2lkIFdpZGdldDo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBJbnRSZWN0JikKIHsKLSAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIGlmICgh
aW50ZXJuYWxHdGtXaWRnZXQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR2RrRXZlbnQqIGV2
ZW50ID0gZ2RrX2V2ZW50X25ldyhHREtfRVhQT1NFKTsKKyAgICBldmVudC0+ZXhwb3NlID0gKmNv
bnRleHQtPmdka0V4cG9zZUV2ZW50KCk7CisgICAgZXZlbnQtPmV4cG9zZS5yZWdpb24gPSBndGtf
d2lkZ2V0X3JlZ2lvbl9pbnRlcnNlY3QoaW50ZXJuYWxHdGtXaWRnZXQoKSwgZXZlbnQtPmV4cG9z
ZS5yZWdpb24pOworICAgIGdfb2JqZWN0X3JlZihldmVudC0+ZXhwb3NlLndpbmRvdyk7CisKKyAg
ICBpZiAoIWdka19yZWdpb25fZW1wdHkoZXZlbnQtPmV4cG9zZS5yZWdpb24pKSB7CisgICAgICAg
IGdka19yZWdpb25fZ2V0X2NsaXBib3goZXZlbnQtPmV4cG9zZS5yZWdpb24sICZldmVudC0+ZXhw
b3NlLmFyZWEpOworICAgICAgICBndGtfd2lkZ2V0X3NlbmRfZXhwb3NlKGludGVybmFsR3RrV2lk
Z2V0KCksIGV2ZW50KTsKKyAgICB9CisKKyAgICBndGtfd2lkZ2V0X3NlbmRfZXhwb3NlKGludGVy
bmFsR3RrV2lkZ2V0KCksIGV2ZW50KTsKKyAgICBnZGtfZXZlbnRfZnJlZShldmVudCk7CiB9CiAK
IHZvaWQgV2lkZ2V0OjpzZXRJc1NlbGVjdGVkKGJvb2wpCkBAIC0xNzksMTUgKzIxMSwxMDAgQEAg
dm9pZCBXaWRnZXQ6OnNldElzU2VsZWN0ZWQoYm9vbCkKIAogdm9pZCBXaWRnZXQ6OmludmFsaWRh
dGUoKQogewotICAgIGlmIChkYXRhLT53aWRnZXQpCi0gICAgICAgIGd0a193aWRnZXRfcXVldWVf
ZHJhdyhkYXRhLT53aWRnZXQpOworICAgIGludmFsaWRhdGVSZWN0KEludFJlY3QoMCwgMCwgd2lk
dGgoKSwgaGVpZ2h0KCkpKTsKK30KKwordm9pZCBXaWRnZXQ6OmludmFsaWRhdGVSZWN0KGNvbnN0
IEludFJlY3QmIHIpCit7CisgICAgaWYgKGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBpZiAoIXBhcmVudCgpKSB7CisgICAgICAgIGd0a193aWRnZXRf
cXVldWVfZHJhd19hcmVhKEdUS19XSURHRVQoY29udGFpbmluZ1dpbmRvdygpKSwgci54KCksIHIu
eSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByLndpZHRoKCksIHIuaGVp
Z2h0KCkpOworICAgICAgICBpZiAoaXNGcmFtZVZpZXcoKSkKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PEZyYW1lVmlldyo+KHRoaXMpLT5hZGRUb0RpcnR5UmVnaW9uKHIpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gR2V0IHRoZSByb290IHdpZGdldC4KKyAgICBTY3JvbGxWaWV3
KiBvdXRlcm1vc3RWaWV3ID0gcGFyZW50KCk7CisgICAgd2hpbGUgKG91dGVybW9zdFZpZXcgJiYg
b3V0ZXJtb3N0Vmlldy0+cGFyZW50KCkpCisgICAgICAgIG91dGVybW9zdFZpZXcgPSBvdXRlcm1v
c3RWaWV3LT5wYXJlbnQoKTsKKyAgICBpZiAoIW91dGVybW9zdFZpZXcpCisgICAgICAgIHJldHVy
bjsKKworICAgIEludFJlY3Qgd2luZG93UmVjdCA9IGNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3co
cik7CisgICAgZ3RrX3dpZGdldF9xdWV1ZV9kcmF3X2FyZWEoR1RLX1dJREdFVChjb250YWluaW5n
V2luZG93KCkpLCB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCksCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2luZG93UmVjdC53aWR0aCgpLCB3aW5kb3dSZWN0LmhlaWdodCgp
KTsKKyAgICBvdXRlcm1vc3RWaWV3LT5hZGRUb0RpcnR5UmVnaW9uKHdpbmRvd1JlY3QpOworfQor
CitJbnRQb2ludCBXaWRnZXQ6OmNvbnZlcnRUb0NvbnRhaW5pbmdXaW5kb3coY29uc3QgSW50UG9p
bnQmIHBvaW50KSBjb25zdAoreworICAgIEludFBvaW50IHdpbmRvd1BvaW50ID0gcG9pbnQ7Cisg
ICAgZm9yIChjb25zdCBXaWRnZXQgKnBhcmVudFdpZGdldCA9IHBhcmVudCgpLCAqY2hpbGRXaWRn
ZXQgPSB0aGlzOworICAgICAgICAgcGFyZW50V2lkZ2V0OworICAgICAgICAgY2hpbGRXaWRnZXQg
PSBwYXJlbnRXaWRnZXQsIHBhcmVudFdpZGdldCA9IHBhcmVudFdpZGdldC0+cGFyZW50KCkpCisg
ICAgICAgIHdpbmRvd1BvaW50ID0gcGFyZW50V2lkZ2V0LT5jb252ZXJ0Q2hpbGRUb1NlbGYoY2hp
bGRXaWRnZXQsIHdpbmRvd1BvaW50KTsKKyAgICByZXR1cm4gd2luZG93UG9pbnQ7Cit9CisKK0lu
dFBvaW50IFdpZGdldDo6Y29udmVydEZyb21Db250YWluaW5nV2luZG93KGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKK3sKKyAgICBJbnRQb2ludCB3aWRnZXRQb2ludCA9IHBvaW50OworICAg
IGZvciAoY29uc3QgV2lkZ2V0ICpwYXJlbnRXaWRnZXQgPSBwYXJlbnQoKSwgKmNoaWxkV2lkZ2V0
ID0gdGhpczsKKyAgICAgICAgIHBhcmVudFdpZGdldDsKKyAgICAgICAgIGNoaWxkV2lkZ2V0ID0g
cGFyZW50V2lkZ2V0LCBwYXJlbnRXaWRnZXQgPSBwYXJlbnRXaWRnZXQtPnBhcmVudCgpKQorICAg
ICAgICB3aWRnZXRQb2ludCA9IHBhcmVudFdpZGdldC0+Y29udmVydFNlbGZUb0NoaWxkKGNoaWxk
V2lkZ2V0LCB3aWRnZXRQb2ludCk7CisgICAgcmV0dXJuIHdpZGdldFBvaW50OworfQorCitJbnRS
ZWN0IFdpZGdldDo6Y29udmVydFRvQ29udGFpbmluZ1dpbmRvdyhjb25zdCBJbnRSZWN0JiByZWN0
KSBjb25zdAoreworICAgIEludFJlY3QgY29udmVydGVkUmVjdCA9IHJlY3Q7CisgICAgY29udmVy
dGVkUmVjdC5zZXRMb2NhdGlvbihjb252ZXJ0VG9Db250YWluaW5nV2luZG93KGNvbnZlcnRlZFJl
Y3QubG9jYXRpb24oKSkpOworICAgIHJldHVybiBjb252ZXJ0ZWRSZWN0OwogfQogCi12b2lkIFdp
ZGdldDo6aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdCkKK0ludFBvaW50IFdpZGdl
dDo6Y29udmVydENoaWxkVG9TZWxmKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50
JiBwb2ludCkgY29uc3QKIHsKLSAgICBpZiAoZGF0YS0+d2lkZ2V0KQotICAgICAgICBndGtfd2lk
Z2V0X3F1ZXVlX2RyYXdfYXJlYShkYXRhLT53aWRnZXQsIHJlY3QueCgpLCByZWN0LnkoKSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdo
dCgpKTsKKyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpICsgY2hpbGQtPngoKSwgcG9pbnQu
eSgpICsgY2hpbGQtPnkoKSk7CiB9CiAKK0ludFBvaW50IFdpZGdldDo6Y29udmVydFNlbGZUb0No
aWxkKGNvbnN0IFdpZGdldCogY2hpbGQsIGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sK
KyAgICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpIC0gY2hpbGQtPngoKSwgcG9pbnQueSgpIC0g
Y2hpbGQtPnkoKSk7Cit9CisKK2Jvb2wgV2lkZ2V0OjpzdXBwcmVzc0ludmFsaWRhdGlvbigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGRhdGEtPnN1cHByZXNzSW52YWxpZGF0aW9uOworfQorCit2b2lk
IFdpZGdldDo6c2V0U3VwcHJlc3NJbnZhbGlkYXRpb24oYm9vbCBzdXBwcmVzcykKK3sKKyAgICBk
YXRhLT5zdXBwcmVzc0ludmFsaWRhdGlvbiA9IHN1cHByZXNzOworfQorCit2b2lkIFdpZGdldDo6
Z2VvbWV0cnlDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIWludGVybmFsR3RrV2lkZ2V0KCkg
fHwgIXBhcmVudCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQocGFyZW50KCktPmlz
RnJhbWVWaWV3KCkpOworCisgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXcgPSBzdGF0aWNfY2FzdDxG
cmFtZVZpZXcqPihwYXJlbnQoKSk7CisgICAgSW50UmVjdCB3aW5kb3dSZWN0ID0gZGF0YS0+aXNT
Y3JvbGxWaWV3Q29udHJvbCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFJl
Y3QoZnJhbWVWaWV3LT5jb252ZXJ0VG9Db250YWluaW5nV2luZG93KGZyYW1lR2VvbWV0cnkoKS5s
b2NhdGlvbigpKSwgZnJhbWVHZW9tZXRyeSgpLnNpemUoKSkgOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBJbnRSZWN0KGZyYW1lVmlldy0+Y29udGVudHNUb1dpbmRvdyhmcmFtZUdl
b21ldHJ5KCkubG9jYXRpb24oKSksIGZyYW1lR2VvbWV0cnkoKS5zaXplKCkpOworCisgICAgR3Rr
QWxsb2NhdGlvbiBhbGxvY2F0aW9uID0geyB3aW5kb3dSZWN0LngoKSwgd2luZG93UmVjdC55KCks
IHdpbmRvd1JlY3Qud2lkdGgoKSwgd2luZG93UmVjdC5oZWlnaHQoKSB9OworICAgIGd0a193aWRn
ZXRfc2l6ZV9hbGxvY2F0ZShkYXRhLT53aWRnZXQsICZhbGxvY2F0aW9uKTsKK30KKwordm9pZCBX
aWRnZXQ6OnNldFNjcm9sbFZpZXdDb250cm9sKCkKK3sKKyAgICBkYXRhLT5pc1Njcm9sbFZpZXdD
b250cm9sID0gdHJ1ZTsKK30KIH0KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBA
IHR5cGVkZWYgdm9pZCBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDsKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oR0RLKQordHlwZWRlZiBzdHJ1Y3QgX0dka0V2ZW50RXhwb3NlIEdka0V2ZW50RXhwb3Nl
OwogdHlwZWRlZiBzdHJ1Y3QgX0dka0RyYXdhYmxlIEdka0RyYXdhYmxlOwogI2VuZGlmCiAKQEAg
LTIwOCw4ICsyMDksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShHREspCi0gICAgICAgIHZvaWQgc2V0R2RrRHJhd2FibGUoR2RrRHJhd2FibGUqKTsKLSAg
ICAgICAgR2RrRHJhd2FibGUgKmdka0RyYXdhYmxlKCkgY29uc3Q7CisgICAgICAgIHZvaWQgc2V0
R2RrRXhwb3NlRXZlbnQoR2RrRXZlbnRFeHBvc2UqKTsKKyAgICAgICAgR2RrRHJhd2FibGUqIGdk
a0RyYXdhYmxlKCkgY29uc3Q7CisgICAgICAgIEdka0V2ZW50RXhwb3NlKiBnZGtFeHBvc2VFdmVu
dCgpIGNvbnN0OworICAgICAgICBJbnRQb2ludCB0cmFuc2xhdGVQb2ludChjb25zdCBJbnRQb2lu
dCYpOwogI2VuZGlmCiAKICAgICBwcml2YXRlOgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlz
aW9uIDI0NzgxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHRDYWlyby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAgcHVibGljOgog
ICAgIFZlY3RvcjxmbG9hdD4gbGF5ZXJzOwogCiAjaWYgUExBVEZPUk0oR0RLKQotICAgIEdka0Ry
YXdhYmxlICpkcmF3YWJsZTsKKyAgICBHZGtFdmVudEV4cG9zZSAqZXhwb3NlOwogI2VuZGlmCiB9
OwogCkBAIC04OCw3ICs4OCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUmVjdFNvdXJjZU92
ZXIoY2EKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKCkKICAgICA6ICBjcigwKQogI2lmIFBMQVRGT1JNKEdESykKLSAgICAsIGRy
YXdhYmxlKDApCisgICAgLCBleHBvc2UoMCkKICNlbmRpZgogewogfQpAQCAtNzk4LDE0ICs3OTgs
MzAgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSb3VuZGVkUmVjdChjbwogfQogCiAjaWYg
UExBVEZPUk0oR0RLKQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEdka0RyYXdhYmxlKEdka0Ry
YXdhYmxlKiBkcmF3YWJsZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRHZGtFeHBvc2VFdmVu
dChHZGtFdmVudEV4cG9zZSogZXhwb3NlKQogewotICAgIG1fZGF0YS0+ZHJhd2FibGUgPSBkcmF3
YWJsZTsKKyAgICBtX2RhdGEtPmV4cG9zZSA9IGV4cG9zZTsKK30KKworR2RrRXZlbnRFeHBvc2Uq
IEdyYXBoaWNzQ29udGV4dDo6Z2RrRXhwb3NlRXZlbnQoKSBjb25zdAoreworICAgIHJldHVybiBt
X2RhdGEtPmV4cG9zZTsKIH0KIAogR2RrRHJhd2FibGUqIEdyYXBoaWNzQ29udGV4dDo6Z2RrRHJh
d2FibGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2RhdGEtPmRyYXdhYmxlOworICAgIHJldHVy
biBHREtfRFJBV0FCTEUobV9kYXRhLT5leHBvc2UtPndpbmRvdyk7Cit9CisKK0ludFBvaW50IEdy
YXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlUG9pbnQoY29uc3QgSW50UG9pbnQmIHBvaW50KQorewor
ICAgIGNhaXJvX21hdHJpeF90IHRtOworICAgIGNhaXJvX2dldF9tYXRyaXgobV9kYXRhLT5jciwg
JnRtKTsKKyAgICBkb3VibGUgeCA9IHBvaW50LngoKTsKKyAgICBkb3VibGUgeSA9IHBvaW50Lnko
KTsKKworICAgIGNhaXJvX21hdHJpeF90cmFuc2Zvcm1fcG9pbnQoJnRtLCAmeCwgJnkpOworICAg
IHJldHVybiBJbnRQb2ludCh4LHkpOwogfQogI2VuZGlmCiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ2RrL0ltYWdlR2RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dkay9JbWFnZUdkay5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nZGsvSW1hZ2VHZGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MCw4ICszMCwxNyBAQAogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSA8Y2Fp
cm8uaD4KICAKLS8vIFRoaXMgZnVuY3Rpb24gbG9hZHMgcmVzb3VyY2VzIGZyb20gV2ViS2l0Ci1W
ZWN0b3I8Y2hhcj4gbG9hZFJlc291cmNlSW50b0FycmF5KGNvbnN0IGNoYXIqKTsKKy8qCisgKiBU
T0RPOiBXZSBzaG91bGQgZm9sbG93IFF0IGFuZCBtb3ZlIHRoYXQgdG8gd2Via2l0Z3Rrc2V0dGlu
Z3MuCisgKiBGb3Igbm93IGl0IGlzIGNvcGllZCB0byB0aGUgZmlsZSBhY3R1YWxseSB1c2luZyB0
aGlzIG1ldGhvZC4KKyAqLworc3RhdGljIFZlY3RvcjxjaGFyPiBsb2FkUmVzb3VyY2VJbnRvQXJy
YXkoY29uc3QgY2hhciogcmVzb3VyY2VOYW1lKQoreyAgIAorICAgIFZlY3RvcjxjaGFyPiByZXNv
dXJjZTsKKyAgICAvL2lmIChzdHJjbXAocmVzb3VyY2VOYW1lLCJtaXNzaW5nSW1hZ2UiKSA9PSAw
KSB7CisgICAgLy99CisgICAgcmV0dXJuIHJlc291cmNlOworfQogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKSW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5n
ZUxvZwkocmV2aXNpb24gMjQ3OTIpCisrKyBXZWJLaXQvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjIgQEAKKzIwMDctMDctMzEgIEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVy
ICA8emVja2VAc2VsZmlzaC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgTWFrZSBXZWJLaXRHdGtQYWdlIGEgdHJ1ZSBHdGtDb250YWluZXIgd2l0
aG91dCBpbmhlcml0aW5nIEd0a0xheW91dC4gSXQgd2lsbAorICAgICAgICBoYW5kbGUgYW5kIGRp
c3BhdGNoIHRoZSBldmVudHMgaW5jbHVkaW5nIGNvbnRhaW5lciBhZGQgYW5kIHJlbW92ZSwgZXhw
b3NpbmcKKyAgICAgICAgYW5kIG1vdmluZyB0aGUgbW91c2UuCisKKyAgICAgICAgSXQgaW1wbGVt
ZW50cyB0aGUgR3RrKyAncHJvdG9jb2wnIGZvciBzY3JvbGxhYmxlIGNvbnRlbnQgYW5kIHRoZSBz
ZXQgR3RrQWRqdXN0bWVudAorICAgICAgICBnZXQgcGFzc2VkIHRvIHRoZSBGcmFtZVZpZXcgb2Yg
dGhlIG1haW4gZnJhbWUuCisKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0ay1tYXJzaGFsLmxp
c3Q6CisgICAgICAgICogZ3RrL0FwaS93ZWJraXRndGtmcmFtZS5jcHA6CisgICAgICAgICogZ3Rr
L0FwaS93ZWJraXRndGtwYWdlLmNwcDoKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3BhZ2Uu
aDoKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuY3BwOgorICAgICAgICAoV2Vi
S2l0R3RrOjphcHBseUFkanVzdG1lbnRzKToKKyAgICAgICAgKiBndGsvQXBpL3dlYmtpdGd0a3By
aXZhdGUuaDoKKwogMjAwNy0wNy0zMCAgSm9obiBTdWxsaXZhbiAgPHN1bGxpdmFuQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbgpJbmRleDogV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrLW1hcnNoYWwubGlzdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRn
dGstbWFyc2hhbC5saXN0CShyZXZpc2lvbiAyNDc4MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtp
dGd0ay1tYXJzaGFsLmxpc3QJKHdvcmtpbmcgY29weSkKQEAgLTEsMiArMSwzIEBACiBWT0lEOlNU
UklORyxTVFJJTkcKIFZPSUQ6T0JKRUNULEJPT0xFQU4KK1ZPSUQ6T0JKRUNULE9CSkVDVApJbmRl
eDogV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrZnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC9ndGsvQXBpL3dlYmtpdGd0a2ZyYW1lLmNwcAkocmV2aXNpb24gMjQ3ODEpCisrKyBXZWJLaXQv
Z3RrL0FwaS93ZWJraXRndGtmcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDExICszMSwx
MCBAQAogI2luY2x1ZGUgIndlYmtpdGd0a3BhZ2UuaCIKICNpbmNsdWRlICJ3ZWJraXRndGtwcml2
YXRlLmgiCiAKLSNpbmNsdWRlICJGcmFtZUdkay5oIgotI2luY2x1ZGUgIkZyYW1lTG9hZGVyQ2xp
ZW50R2RrLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdEd0azsKIAogZXh0ZXJuICJDIiB7CiAKQEAgLTYy
LDYgKzYxLDggQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19mcmFtZV9maW5hbGl6ZShHTwogewog
ICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSAqcHJpdmF0ZV9kYXRhID0gV0VCS0lUX0dUS19GUkFN
RV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX0ZSQU1FKG9iamVjdCkpOwogICAgIGRlbGV0ZSBwcml2
YXRlX2RhdGEtPmZyYW1lOworCisgICAgR19PQkpFQ1RfQ0xBU1Mod2Via2l0X2d0a19mcmFtZV9w
YXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCiBzdGF0aWMgdm9pZCB3ZWJraXRf
Z3RrX2ZyYW1lX2NsYXNzX2luaXQoV2ViS2l0R3RrRnJhbWVDbGFzcyogZnJhbWVfY2xhc3MpCkBA
IC0xMjAsMjEgKzEyMSwxNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX2ZyYW1lX2luaXQoV2Vi
S2l0CiB7CiB9CiAKLUdPYmplY3QqIHdlYmtpdF9ndGtfZnJhbWVfbmV3KFdlYktpdEd0a1BhZ2Uq
IHBhZ2UpCitHT2JqZWN0KiB3ZWJraXRfZ3RrX2ZyYW1lX25ldyhXZWJLaXRHdGtQYWdlKiB3ZWJf
cGFnZSkKIHsKICAgICBXZWJLaXRHdGtGcmFtZSogZnJhbWUgPSBXRUJLSVRfR1RLX0ZSQU1FKGdf
b2JqZWN0X25ldyhXRUJLSVRfR1RLX1RZUEVfRlJBTUUsIE5VTEwpKTsKICAgICBXZWJLaXRHdGtG
cmFtZVByaXZhdGUgKmZyYW1lX2RhdGEgPSBXRUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKGZy
YW1lKTsKLSAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSAgKnBhZ2VfZGF0YSA9IFdFQktJVF9HVEtf
UEFHRV9HRVRfUFJJVkFURShwYWdlKTsKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gY29yZSh3
ZWJfcGFnZSk7CiAKKyAgICBmcmFtZV9kYXRhLT5wYWdlID0gd2ViX3BhZ2U7CiAgICAgZnJhbWVf
ZGF0YS0+Y2xpZW50ID0gbmV3IEZyYW1lTG9hZGVyQ2xpZW50R2RrKGZyYW1lKTsKLSAgICBmcmFt
ZV9kYXRhLT5mcmFtZSA9IG5ldyBGcmFtZUdkayhwYWdlX2RhdGEtPnBhZ2UsIDAsIGZyYW1lX2Rh
dGEtPmNsaWVudCk7Ci0KLSAgICBGcmFtZVZpZXcqIGZyYW1lX3ZpZXcgPSBuZXcgRnJhbWVWaWV3
KGZyYW1lX2RhdGEtPmZyYW1lKTsKLSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+c2V0VmlldyhmcmFt
ZV92aWV3KTsKLQotICAgIGZyYW1lX3ZpZXctPnNldEd0a1dpZGdldChHVEtfTEFZT1VUKHBhZ2Up
KTsKKyAgICBmcmFtZV9kYXRhLT5mcmFtZSA9IG5ldyBGcmFtZShwYWdlLCAwLCBmcmFtZV9kYXRh
LT5jbGllbnQpOwogICAgIGZyYW1lX2RhdGEtPmZyYW1lLT5pbml0KCk7Ci0gICAgZnJhbWVfZGF0
YS0+cGFnZSA9IHBhZ2U7CiAKICAgICByZXR1cm4gR19PQkpFQ1QoZnJhbWUpOwogfQpJbmRleDog
V2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0
ay9BcGkvd2Via2l0Z3RrcGFnZS5jcHAJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViS2l0L2d0ay9B
cGkvd2Via2l0Z3RrcGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw1IEBACiAvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20K
ICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtNDAsNiArNDEsMTMgQEAKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgog
I2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIlN1YnN0aXR1dGVEYXRhLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2
ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1XaGVlbEV2ZW50LmgiCisjaW5jbHVkZSAiR3JhcGhp
Y3NDb250ZXh0LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiSGl0VGVz
dFJlcXVlc3QuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAKIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CkBAIC02MiwzMSArNzAsMTIyIEBAIGVudW0gewogCiBzdGF0aWMgZ3VpbnQg
d2Via2l0X2d0a19wYWdlX3NpZ25hbHNbTEFTVF9TSUdOQUxdID0geyAwLCB9OwogCi1HX0RFRklO
RV9UWVBFKFdlYktpdEd0a1BhZ2UsIHdlYmtpdF9ndGtfcGFnZSwgR1RLX1RZUEVfTEFZT1VUKQor
R19ERUZJTkVfVFlQRShXZWJLaXRHdGtQYWdlLCB3ZWJraXRfZ3RrX3BhZ2UsIEdUS19UWVBFX0NP
TlRBSU5FUikKIAotc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hh
bmRsZV9nZGtfZXZlbnQoR3RrV2lkZ2V0KiwgR2RrRXZlbnQqIGV2ZW50LCBXZWJLaXRHdGtQYWdl
KiBwYWdlKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9leHBvc2VfZXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50RXhwb3NlKiBldmVudCkKIHsKLSAgICBXZWJLaXRHdGtQ
YWdlUHJpdmF0ZSogcGFnZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2Up
OwotICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSogZnJhbWVfZGF0YSA9IFdFQktJVF9HVEtfRlJB
TUVfR0VUX1BSSVZBVEUocGFnZV9kYXRhLT5tYWluX2ZyYW1lKTsKKyAgICBXZWJDb3JlOjpGcmFt
ZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkp
KTsKKworICAgIEdka1JlY3RhbmdsZSBjbGlwOworICAgIGdka19yZWdpb25fZ2V0X2NsaXBib3go
ZXZlbnQtPnJlZ2lvbiwgJmNsaXApOworICAgIGNhaXJvX3QqIGNyID0gZ2RrX2NhaXJvX2NyZWF0
ZShldmVudC0+d2luZG93KTsKKyAgICBHcmFwaGljc0NvbnRleHQgY3R4KGNyKTsKKyAgICBjdHgu
c2V0R2RrRXhwb3NlRXZlbnQoZXZlbnQpOworICAgIGlmIChmcmFtZS0+cmVuZGVyZXIoKSkgewor
ICAgICAgICBpZiAoZnJhbWUtPnZpZXcoKS0+bmVlZHNMYXlvdXQoKSkKKyAgICAgICAgICAgIGZy
YW1lLT52aWV3KCktPmxheW91dCgpOworICAgICAgICBJbnRSZWN0IHJlY3QoY2xpcC54LCBjbGlw
LnksIGNsaXAud2lkdGgsIGNsaXAuaGVpZ2h0KTsKKyAgICAgICAgZnJhbWUtPnZpZXcoKS0+cGFp
bnQoJmN0eCwgcmVjdCk7CisgICAgfQorICAgIGNhaXJvX2Rlc3Ryb3koY3IpOwogCi0gICAgZnJh
bWVfZGF0YS0+ZnJhbWUtPmhhbmRsZUdka0V2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gVFJVRTsK
IH0KIAotc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX3Jlc2l6ZV9j
YWxsYmFjayhHdGtXaWRnZXQqLCBHdGtBbGxvY2F0aW9uKiBhbGxvY2F0aW9uLCBXZWJLaXRHdGtQ
YWdlKiBwYWdlKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtfcGFnZV9rZXlfZXZlbnQoR3Rr
V2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50S2V5KiBldmVudCkKIHsKLSAgICBXZWJLaXRHdGtQYWdl
UHJpdmF0ZSogcGFnZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKHBhZ2UpOwot
ICAgIFdlYktpdEd0a0ZyYW1lUHJpdmF0ZSogZnJhbWVfZGF0YSA9IFdFQktJVF9HVEtfRlJBTUVf
R0VUX1BSSVZBVEUocGFnZV9kYXRhLT5tYWluX2ZyYW1lKTsKKyAgICBXZWJDb3JlOjpGcmFtZSog
ZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dUS19QQUdFKHdpZGdldCkpKTsK
KworICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoUGxhdGZvcm1LZXlib2FyZEV2
ZW50KGV2ZW50KSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CiAKLSAgICBmcmFtZV9kYXRhLT5mcmFt
ZS0+dmlldygpLT51cGRhdGVHZW9tZXRyeShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2NhdGlvbi0+
aGVpZ2h0KTsKLSAgICBmcmFtZV9kYXRhLT5mcmFtZS0+Zm9yY2VMYXlvdXQoKTsKLSAgICBmcmFt
ZV9kYXRhLT5mcmFtZS0+dmlldygpLT5hZGp1c3RWaWV3U2l6ZSgpOwotICAgIGZyYW1lX2RhdGEt
PmZyYW1lLT5zZW5kUmVzaXplRXZlbnQoKTsKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRfZ3RrX3Bh
Z2VfYnV0dG9uX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVudEJ1dHRvbiogZXZlbnQp
Cit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdF
QktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisgICAgCisgICAgaWYgKGV2ZW50LT50eXBlID09IEdE
S19CVVRUT05fUkVMRUFTRSkKKyAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVN
b3VzZVJlbGVhc2VFdmVudChQbGF0Zm9ybU1vdXNlRXZlbnQoZXZlbnQpKTsKKyAgICBlbHNlCisg
ICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KFBsYXRm
b3JtTW91c2VFdmVudChldmVudCkpOworICAgIHJldHVybiBUUlVFOwogfQogCi1zdGF0aWMgdm9p
ZCB3ZWJraXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuZGVyaW5nX2FyZWFfZXZlbnRzKEd0a1dpZGdl
dCogd2luLCBXZWJLaXRHdGtQYWdlKiBwYWdlKQorc3RhdGljIGdib29sZWFuIHdlYmtpdF9ndGtf
cGFnZV9tb3Rpb25fZXZlbnQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0V2ZW50TW90aW9uKiBldmVu
dCkKIHsKLSAgICBnZGtfd2luZG93X3NldF9ldmVudHMoR1RLX0lTX0xBWU9VVCh3aW4pID8gR1RL
X0xBWU9VVCh3aW4pLT5iaW5fd2luZG93IDogd2luLT53aW5kb3csCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIChHZGtFdmVudE1hc2spKEdES19FWFBPU1VSRV9NQVNLCisgICAgV2ViQ29yZTo6
RnJhbWUqIGZyYW1lID0gY29yZShnZXRGcmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRn
ZXQpKSk7CisKKyAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoUGxhdGZvcm1N
b3VzZUV2ZW50KGV2ZW50KSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVh
biB3ZWJraXRfZ3RrX3BhZ2Vfc2Nyb2xsX2V2ZW50KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtFdmVu
dFNjcm9sbCogZXZlbnQpCit7CisgICAgV2ViQ29yZTo6RnJhbWUqIGZyYW1lID0gY29yZShnZXRG
cmFtZUZyb21QYWdlKFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpKSk7CisKKyAgICBQbGF0Zm9ybVdo
ZWVsRXZlbnQgd2hlZWxFdmVudChldmVudCk7CisgICAgZnJhbWUtPnZpZXcoKS0+d2hlZWxFdmVu
dCh3aGVlbEV2ZW50KTsKKyAgICBpZiAod2hlZWxFdmVudC5pc0FjY2VwdGVkKCkpCisgICAgICAg
IHJldHVybiBUUlVFOworCisgICAgSGl0VGVzdFJlcXVlc3QgaGl0VGVzdFJlcXVlc3QodHJ1ZSwg
dHJ1ZSk7CisgICAgSGl0VGVzdFJlc3VsdCBoaXRUZXN0UmVzdWx0KHdoZWVsRXZlbnQucG9zKCkp
OworICAgIGZyYW1lLT5yZW5kZXJlcigpLT5sYXllcigpLT5oaXRUZXN0KGhpdFRlc3RSZXF1ZXN0
LCBoaXRUZXN0UmVzdWx0KTsKKyAgICBOb2RlKiBub2RlID0gaGl0VGVzdFJlc3VsdC5pbm5lck5v
ZGUoKTsKKyAgICBpZiAoIW5vZGUpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIHJldHVy
biBUUlVFOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc2l6ZV9hbGxvY2F0ZShH
dGtXaWRnZXQqIHdpZGdldCwgR3RrQWxsb2NhdGlvbiogYWxsb2NhdGlvbikKK3sKKyAgICBHVEtf
V0lER0VUX0NMQVNTKHdlYmtpdF9ndGtfcGFnZV9wYXJlbnRfY2xhc3MpLT5zaXplX2FsbG9jYXRl
KHdpZGdldCwgYWxsb2NhdGlvbik7CisKKyAgICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCh3aWRn
ZXQpKQorICAgICAgICBnZGtfd2luZG93X3Jlc2l6ZShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KS0+
YmluX3dpbmRvdywgYWxsb2NhdGlvbi0+d2lkdGgsIGFsbG9jYXRpb24tPmhlaWdodCk7CisKKyAg
ICBXZWJDb3JlOjpGcmFtZSogZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UoV0VCS0lUX0dU
S19QQUdFKHdpZGdldCkpKTsKKyAgICBpZiAoIWZyYW1lLT52aWV3KCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZyYW1lLT52aWV3KCktPnJlc2l6ZShhbGxvY2F0aW9uLT53aWR0aCwgYWxsb2Nh
dGlvbi0+aGVpZ2h0KTsKKyAgICBmcmFtZS0+Zm9yY2VMYXlvdXQoKTsKKyAgICBmcmFtZS0+dmll
dygpLT5hZGp1c3RWaWV3U2l6ZSgpOworICAgIGZyYW1lLT5zZW5kUmVzaXplRXZlbnQoKTsKK30K
KworLyoKKyAqIGl0IGlzIGEgR3RrQ29udGFpbmVyIHRvIGltcGxlbWVudCBTY3JvbGxWaWV3LiBB
bmQgd2UgbmVlZCB0byBtYWtlIGl0IHNpbWlsaWFyCisgKiB0byBHdGtMYXlvdXQgdG8gaGF2ZSBz
YW5lIHBhaW50aW5nLgorICovCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfcmVhbGl6ZShH
dGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyh3aWRnZXQsIEdU
S19SRUFMSVpFRCk7CisKKyAgICBHZGtXaW5kb3dBdHRyIGF0dHJpYnV0ZXM7CisKKyAgICBhdHRy
aWJ1dGVzLndpbmRvd190eXBlID0gR0RLX1dJTkRPV19DSElMRDsKKyAgICBhdHRyaWJ1dGVzLngg
PSB3aWRnZXQtPmFsbG9jYXRpb24ueDsKKyAgICBhdHRyaWJ1dGVzLnkgPSB3aWRnZXQtPmFsbG9j
YXRpb24ueTsKKyAgICBhdHRyaWJ1dGVzLndpZHRoID0gd2lkZ2V0LT5hbGxvY2F0aW9uLndpZHRo
OworICAgIGF0dHJpYnV0ZXMuaGVpZ2h0ID0gd2lkZ2V0LT5hbGxvY2F0aW9uLmhlaWdodDsKKyAg
ICBhdHRyaWJ1dGVzLndjbGFzcyA9IEdES19JTlBVVF9PVVRQVVQ7CisgICAgYXR0cmlidXRlcy52
aXN1YWwgPSBndGtfd2lkZ2V0X2dldF92aXN1YWwgKHdpZGdldCk7CisgICAgYXR0cmlidXRlcy5j
b2xvcm1hcCA9IGd0a193aWRnZXRfZ2V0X2NvbG9ybWFwICh3aWRnZXQpOworICAgIGF0dHJpYnV0
ZXMuZXZlbnRfbWFzayA9IEdES19WSVNJQklMSVRZX05PVElGWV9NQVNLOworCisgICAgZ2ludCBh
dHRyaWJ1dGVzX21hc2sgPSBHREtfV0FfWCB8IEdES19XQV9ZIHwgR0RLX1dBX1ZJU1VBTCB8IEdE
S19XQV9DT0xPUk1BUDsKKyAgICB3aWRnZXQtPndpbmRvdyA9IGdka193aW5kb3dfbmV3KGd0a193
aWRnZXRfZ2V0X3BhcmVudF93aW5kb3cgKHdpZGdldCksICZhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVz
X21hc2spOworICAgIGdka193aW5kb3dfc2V0X2JhY2tfcGl4bWFwKHdpZGdldC0+d2luZG93LCBO
VUxMLCBGQUxTRSk7CisgICAgZ2RrX3dpbmRvd19zZXRfdXNlcl9kYXRhKHdpZGdldC0+d2luZG93
LCB3aWRnZXQpOworCisgICAgYXR0cmlidXRlcy54ID0gMDsKKyAgICBhdHRyaWJ1dGVzLnkgPSAw
OworICAgIGF0dHJpYnV0ZXMud2lkdGggPSB3aWRnZXQtPmFsbG9jYXRpb24ud2lkdGg7CisgICAg
YXR0cmlidXRlcy5oZWlnaHQgPSB3aWRnZXQtPmFsbG9jYXRpb24uaGVpZ2h0OworICAgIGF0dHJp
YnV0ZXMuZXZlbnRfbWFzayA9IEdES19FWFBPU1VSRV9NQVNLCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBHREtfU0NST0xMX01BU0sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IEdES19CVVRUT05fUFJFU1NfTUFTSwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RL
X0JVVFRPTl9SRUxFQVNFX01BU0sKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19Q
T0lOVEVSX01PVElPTl9NQVNLCkBAIC05NSwxNSArMTk0LDExMSBAQCBzdGF0aWMgdm9pZCB3ZWJr
aXRfZ3RrX3BhZ2VfcmVnaXN0ZXJfcmVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBH
REtfQlVUVE9OX01PVElPTl9NQVNLCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtf
QlVUVE9OMV9NT1RJT05fTUFTSwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgR0RLX0JV
VFRPTjJfTU9USU9OX01BU0sKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEdES19CVVRU
T04zX01PVElPTl9NQVNLKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBHREtfQlVU
VE9OM19NT1RJT05fTUFTSworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZ3RrX3dpZGdl
dF9nZXRfZXZlbnRzKHdpZGdldCk7CisKKyAgICBXZWJLaXRHdGtQYWdlKiBwYWdlID0gV0VCS0lU
X0dUS19QQUdFKHdpZGdldCk7CisgICAgcGFnZS0+YmluX3dpbmRvdyA9IGdka193aW5kb3dfbmV3
KHdpZGdldC0+d2luZG93LCAmYXR0cmlidXRlcywgYXR0cmlidXRlc19tYXNrKTsKKyAgICBnZGtf
d2luZG93X3NldF91c2VyX2RhdGEocGFnZS0+YmluX3dpbmRvdywgd2lkZ2V0KTsKKworICAgIHdp
ZGdldC0+c3R5bGUgPSBndGtfc3R5bGVfYXR0YWNoICh3aWRnZXQtPnN0eWxlLCB3aWRnZXQtPndp
bmRvdyk7CisgICAgZ3RrX3N0eWxlX3NldF9iYWNrZ3JvdW5kKHdpZGdldC0+c3R5bGUsIHBhZ2Ut
PmJpbl93aW5kb3csIEdUS19TVEFURV9OT1JNQUwpOworCisgICAgV2ViS2l0R3RrUGFnZVByaXZh
dGUqIHByaXZhdGVfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRfUFJJVkFURShwYWdlKTsKKyAg
ICBIYXNoU2V0PEd0a1dpZGdldCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2YXRlX2RhdGEt
PmNoaWxkcmVuLmVuZCgpOworICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRl
cmF0b3IgY3VycmVudCA9IHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudCAh
PSBlbmQ7ICsrY3VycmVudCkKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRfcGFyZW50X3dpbmRvdygq
Y3VycmVudCwgcGFnZS0+YmluX3dpbmRvdyk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdF9ndGtf
cGFnZV91bnJlYWxpemUoR3RrV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViS2l0R3RrUGFnZSog
cGFnZSA9IFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpOworCisgICAgZ2RrX3dpbmRvd19zZXRfdXNl
cl9kYXRhKHBhZ2UtPmJpbl93aW5kb3csIDApOworICAgIGdka193aW5kb3dfZGVzdHJveShwYWdl
LT5iaW5fd2luZG93KTsKKyAgICBwYWdlLT5iaW5fd2luZG93ID0gMDsKKworICAgIEdUS19XSURH
RVRfQ0xBU1Mod2Via2l0X2d0a19wYWdlX3BhcmVudF9jbGFzcyktPnVucmVhbGl6ZSh3aWRnZXQp
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfbWFwKEd0a1dpZGdldCogd2lkZ2V0
KQoreworICAgIEdUS19XSURHRVRfU0VUX0ZMQUdTKHdpZGdldCwgR1RLX01BUFBFRCk7CisgICAg
V2ViS2l0R3RrUGFnZVByaXZhdGUqIHByaXZhdGVfZGF0YSA9IFdFQktJVF9HVEtfUEFHRV9HRVRf
UFJJVkFURShXRUJLSVRfR1RLX1BBR0Uod2lkZ2V0KSk7CisKKyAgICBIYXNoU2V0PEd0a1dpZGdl
dCo+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwcml2YXRlX2RhdGEtPmNoaWxkcmVuLmVuZCgpOwor
ICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9IHBy
aXZhdGVfZGF0YS0+Y2hpbGRyZW4uYmVnaW4oKTsgY3VycmVudCAhPSBlbmQ7ICsrY3VycmVudCkK
KyAgICAgICAgaWYgKEdUS19XSURHRVRfVklTSUJMRSgqY3VycmVudCkgJiYgIUdUS19XSURHRVRf
TUFQUEVEKCpjdXJyZW50KSkKKyAgICAgICAgICAgIGd0a193aWRnZXRfbWFwKCgqY3VycmVudCkp
OworCisgICAgZ2RrX3dpbmRvd19zaG93KFdFQktJVF9HVEtfUEFHRSh3aWRnZXQpLT5iaW5fd2lu
ZG93KTsKKyAgICBnZGtfd2luZG93X3Nob3cod2lkZ2V0LT53aW5kb3cpOworfQorCitzdGF0aWMg
dm9pZCB3ZWJraXRfZ3RrX3BhZ2Vfc3R5bGVfc2V0KEd0a1dpZGdldCogd2lkZ2V0LCBHdGtTdHls
ZSogb2xkX3N0eWxlKQoreworICAgIGlmIChHVEtfV0lER0VUX0NMQVNTKHdlYmtpdF9ndGtfcGFn
ZV9wYXJlbnRfY2xhc3MpLT5zdHlsZV9zZXQpCisgICAgICAgIEdUS19XSURHRVRfQ0xBU1Mod2Vi
a2l0X2d0a19wYWdlX3BhcmVudF9jbGFzcyktPnN0eWxlX3NldCh3aWRnZXQsIG9sZF9zdHlsZSk7
CisKKyAgICBpZiAoR1RLX1dJREdFVF9SRUFMSVpFRCh3aWRnZXQpKQorICAgICAgICBndGtfc3R5
bGVfc2V0X2JhY2tncm91bmQod2lkZ2V0LT5zdHlsZSwgV0VCS0lUX0dUS19QQUdFKHdpZGdldCkt
PmJpbl93aW5kb3csIEdUS19TVEFURV9OT1JNQUwpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRf
Z3RrX3BhZ2VfY29udGFpbmVyX2FkZChHdGtDb250YWluZXIqIGNvbnRhaW5lciwgR3RrV2lkZ2V0
KiB3aWRnZXQpCit7CisgICAgV2ViS2l0R3RrUGFnZSogcGFnZSA9IFdFQktJVF9HVEtfUEFHRShj
b250YWluZXIpOworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwcml2YXRlX2RhdGEgPSBXRUJL
SVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7CiAKLSAgICBnX3NpZ25hbF9jb25uZWN0KEdU
S19PQkpFQ1Qod2luKSwgImV4cG9zZS1ldmVudCIsIEdfQ0FMTEJBQ0sod2Via2l0X2d0a19wYWdl
X3JlbmRlcmluZ19hcmVhX2hhbmRsZV9nZGtfZXZlbnQpLCBwYWdlKTsKLSAgICBnX3NpZ25hbF9j
b25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImtleS1wcmVzcy1ldmVudCIsIEdfQ0FMTEJBQ0sod2Vi
a2l0X2d0a19wYWdlX3JlbmRlcmluZ19hcmVhX2hhbmRsZV9nZGtfZXZlbnQpLCBwYWdlKTsKLSAg
ICBnX3NpZ25hbF9jb25uZWN0KEdUS19PQkpFQ1Qod2luKSwgImtleS1yZWxlYXNlLWV2ZW50Iiwg
R19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxlX2dka19ldmVu
dCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3aW4pLCAiYnV0dG9u
LXByZXNzLWV2ZW50IiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFf
aGFuZGxlX2dka19ldmVudCksIHBhZ2UpOwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVD
VCh3aW4pLCAiYnV0dG9uLXJlbGVhc2UtZXZlbnQiLCBHX0NBTExCQUNLKHdlYmtpdF9ndGtfcGFn
ZV9yZW5kZXJpbmdfYXJlYV9oYW5kbGVfZ2RrX2V2ZW50KSwgcGFnZSk7Ci0gICAgZ19zaWduYWxf
Y29ubmVjdChHVEtfT0JKRUNUKHdpbiksICJtb3Rpb24tbm90aWZ5LWV2ZW50IiwgR19DQUxMQkFD
Syh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxlX2dka19ldmVudCksIHBhZ2Up
OwotICAgIGdfc2lnbmFsX2Nvbm5lY3QoR1RLX09CSkVDVCh3aW4pLCAic2Nyb2xsLWV2ZW50Iiwg
R19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVuZGVyaW5nX2FyZWFfaGFuZGxlX2dka19ldmVu
dCksIHBhZ2UpOworICAgIHByaXZhdGVfZGF0YS0+Y2hpbGRyZW4uYWRkKHdpZGdldCk7CisgICAg
aWYgKEdUS19XSURHRVRfUkVBTElaRUQoY29udGFpbmVyKSkKKyAgICAgICAgZ3RrX3dpZGdldF9z
ZXRfcGFyZW50X3dpbmRvdyh3aWRnZXQsIHBhZ2UtPmJpbl93aW5kb3cpOworICAgIGd0a193aWRn
ZXRfc2V0X3BhcmVudCh3aWRnZXQsIEdUS19XSURHRVQoY29udGFpbmVyKSk7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9jb250YWluZXJfcmVtb3ZlKEd0a0NvbnRhaW5lciogY29u
dGFpbmVyLCBHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBXZWJLaXRHdGtQYWdlUHJpdmF0ZSog
cHJpdmF0ZV9kYXRhID0gV0VCS0lUX0dUS19QQUdFX0dFVF9QUklWQVRFKFdFQktJVF9HVEtfUEFH
RShjb250YWluZXIpKTsKKworICAgIGlmIChwcml2YXRlX2RhdGEtPmNoaWxkcmVuLmNvbnRhaW5z
KHdpZGdldCkpIHsKKyAgICAgICAgZ3RrX3dpZGdldF91bnBhcmVudCh3aWRnZXQpOworICAgICAg
ICBwcml2YXRlX2RhdGEtPmNoaWxkcmVuLnJlbW92ZSh3aWRnZXQpOworICAgIH0KK30KKworc3Rh
dGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NvbnRhaW5lcl9mb3JhbGwoR3RrQ29udGFpbmVyKiBj
b250YWluZXIsIGdib29sZWFuLCBHdGtDYWxsYmFjayBjYWxsYmFjaywgZ3BvaW50ZXIgY2FsbGJh
Y2tEYXRhKQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlKiBwcml2YXRlRGF0YSA9IFdFQktJ
VF9HVEtfUEFHRV9HRVRfUFJJVkFURShXRUJLSVRfR1RLX1BBR0UoY29udGFpbmVyKSk7CisKKyAg
ICBIYXNoU2V0PEd0a1dpZGdldCo+IGNoaWxkcmVuID0gcHJpdmF0ZURhdGEtPmNoaWxkcmVuOwor
ICAgIEhhc2hTZXQ8R3RrV2lkZ2V0Kj46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoaWxkcmVuLmVu
ZCgpOworICAgIGZvciAoSGFzaFNldDxHdGtXaWRnZXQqPjo6Y29uc3RfaXRlcmF0b3IgY3VycmVu
dCA9IGNoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnQgIT0gZW5kOyArK2N1cnJlbnQpCisgICAgICAg
ICgqY2FsbGJhY2spKCpjdXJyZW50LCBjYWxsYmFja0RhdGEpOworfQorCisvKgorICogdGFrZSBv
d25lcnNoaXAgb2YgdGhlIGFkanVzdG1lbnRzIGFuZCBpZiB3ZSBoYXZlIGEgRnJhbWVWaWV3IGFs
cmVhZHkgc2V0IHRoZQorICogYWRqdXN0bWVudHMgYXMgd2VsbC4KKyAqLworc3RhdGljIHZvaWQg
d2Via2l0X2d0a19wYWdlX3NldF9hZGp1c3RtZW50cyhXZWJLaXRHdGtQYWdlKiBwYWdlLCBHdGtB
ZGp1c3RtZW50KiBob3Jpem9udGFsQWRqdXN0bWVudCwgR3RrQWRqdXN0bWVudCogdmVydGljYWxB
ZGp1c3RtZW50KQoreworICAgIFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBX
RUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2UpKTsKKworICAg
IGlmIChwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KQorICAgICAgICBnX29iamVj
dF91bnJlZihwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsKKyAgICBpZiAocHJp
dmF0ZV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHBy
aXZhdGVfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKKworICAgIHByaXZhdGVfZGF0YS0+aG9y
aXpvbnRhbEFkanVzdG1lbnQgPSBob3Jpem9udGFsQWRqdXN0bWVudDsKKyAgICBwcml2YXRlX2Rh
dGEtPnZlcnRpY2FsQWRqdXN0bWVudCA9IHZlcnRpY2FsQWRqdXN0bWVudDsKKworICAgIGlmICho
b3Jpem9udGFsQWRqdXN0bWVudCkKKyAgICAgICAgZ19vYmplY3RfcmVmX3NpbmsoaG9yaXpvbnRh
bEFkanVzdG1lbnQpOworICAgIGlmICh2ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIGdfb2Jq
ZWN0X3JlZl9zaW5rKHZlcnRpY2FsQWRqdXN0bWVudCk7CisKKyAgICBXZWJDb3JlOjpGcmFtZSog
ZnJhbWUgPSBjb3JlKGdldEZyYW1lRnJvbVBhZ2UocGFnZSkpOworICAgIGlmIChmcmFtZS0+dmll
dygpKQorICAgICAgICBmcmFtZS0+dmlldygpLT5zZXRHdGtBZGp1c3RtZW50cyhob3Jpem9udGFs
QWRqdXN0bWVudCwgdmVydGljYWxBZGp1c3RtZW50KTsKIH0KIAogc3RhdGljIFdlYktpdEd0a0Zy
YW1lKiB3ZWJraXRfZ3RrX3BhZ2VfcmVhbF9jcmVhdGVfZnJhbWUoV2ViS2l0R3RrUGFnZSosIFdl
YktpdEd0a0ZyYW1lKiBwYXJlbnQsIFdlYktpdEd0a0ZyYW1lRGF0YSopCkBAIC0xNjMsOSArMzU4
LDE3IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9maW5hbGl6ZShHT2IKIAogICAgIFdl
YktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BS
SVZBVEUoV0VCS0lUX0dUS19QQUdFKG9iamVjdCkpOwogICAgIC8vZGVsZXRlIHByaXZhdGVfZGF0
YS0+cGFnZTsgLSB3ZSBkb24ndCBoYXZlIGEgRHJhZ0NsaWVudCB5ZXQsIHNvIGl0IGlzIGNyYXNo
aW5nIGhlcmUKLSAgICBkZWxldGUgcHJpdmF0ZV9kYXRhLT5zZXR0aW5nczsKKwogICAgIGdfb2Jq
ZWN0X3VucmVmKHByaXZhdGVfZGF0YS0+bWFpbl9mcmFtZSk7CisgICAgZGVsZXRlIHByaXZhdGVf
ZGF0YS0+c2V0dGluZ3M7CiAgICAgZGVsZXRlIHByaXZhdGVfZGF0YS0+dXNlcl9hZ2VudDsKKwor
ICAgIGlmIChwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KQorICAgICAgICBnX29i
amVjdF91bnJlZihwcml2YXRlX2RhdGEtPmhvcml6b250YWxBZGp1c3RtZW50KTsKKyAgICBpZiAo
cHJpdmF0ZV9kYXRhLT52ZXJ0aWNhbEFkanVzdG1lbnQpCisgICAgICAgIGdfb2JqZWN0X3VucmVm
KHByaXZhdGVfZGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKKworICAgIEdfT0JKRUNUX0NMQVNT
ICh3ZWJraXRfZ3RrX3BhZ2VfcGFyZW50X2NsYXNzKS0+ZmluYWxpemUgKG9iamVjdCk7CiB9CiAK
IHN0YXRpYyB2b2lkIHdlYmtpdF9ndGtfcGFnZV9jbGFzc19pbml0KFdlYktpdEd0a1BhZ2VDbGFz
cyogcGFnZV9jbGFzcykKQEAgLTE3Niw2ICszNzksMjggQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0
a19wYWdlX2NsYXNzX2luaXQoVwogICAgIC8qCiAgICAgICogc2lnbmFscwogICAgICAqLworICAg
IEdPYmplY3RDbGFzcyogb2JqZWN0X2NsYXNzID0gR19PQkpFQ1RfQ0xBU1MocGFnZV9jbGFzcyk7
CisgICAgb2JqZWN0X2NsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdF9ndGtfcGFnZV9maW5hbGl6ZTsK
KworICAgIEd0a1dpZGdldENsYXNzKiB3aWRnZXRfY2xhc3MgPSBHVEtfV0lER0VUX0NMQVNTKHBh
Z2VfY2xhc3MpOworICAgIHdpZGdldF9jbGFzcy0+ZXhwb3NlX2V2ZW50ID0gd2Via2l0X2d0a19w
YWdlX2V4cG9zZV9ldmVudDsKKyAgICB3aWRnZXRfY2xhc3MtPmtleV9wcmVzc19ldmVudCA9IHdl
YmtpdF9ndGtfcGFnZV9rZXlfZXZlbnQ7CisgICAgd2lkZ2V0X2NsYXNzLT5rZXlfcmVsZWFzZV9l
dmVudCA9IHdlYmtpdF9ndGtfcGFnZV9rZXlfZXZlbnQ7CisgICAgd2lkZ2V0X2NsYXNzLT5idXR0
b25fcHJlc3NfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2VfYnV0dG9uX2V2ZW50OworICAgIHdpZGdl
dF9jbGFzcy0+YnV0dG9uX3JlbGVhc2VfZXZlbnQgPSB3ZWJraXRfZ3RrX3BhZ2VfYnV0dG9uX2V2
ZW50OworICAgIHdpZGdldF9jbGFzcy0+bW90aW9uX25vdGlmeV9ldmVudCA9IHdlYmtpdF9ndGtf
cGFnZV9tb3Rpb25fZXZlbnQ7CisgICAgd2lkZ2V0X2NsYXNzLT5zY3JvbGxfZXZlbnQgPSB3ZWJr
aXRfZ3RrX3BhZ2Vfc2Nyb2xsX2V2ZW50OworICAgIHdpZGdldF9jbGFzcy0+cmVhbGl6ZSA9IHdl
YmtpdF9ndGtfcGFnZV9yZWFsaXplOworICAgIHdpZGdldF9jbGFzcy0+dW5yZWFsaXplID0gd2Vi
a2l0X2d0a19wYWdlX3VucmVhbGl6ZTsKKyAgICB3aWRnZXRfY2xhc3MtPnNpemVfYWxsb2NhdGUg
PSB3ZWJraXRfZ3RrX3BhZ2Vfc2l6ZV9hbGxvY2F0ZTsKKyAgICB3aWRnZXRfY2xhc3MtPnN0eWxl
X3NldCA9IHdlYmtpdF9ndGtfcGFnZV9zdHlsZV9zZXQ7CisgICAgd2lkZ2V0X2NsYXNzLT5tYXAg
PSB3ZWJraXRfZ3RrX3BhZ2VfbWFwOworCisgICAgR3RrQ29udGFpbmVyQ2xhc3MqIGNvbnRhaW5l
cl9jbGFzcyA9IEdUS19DT05UQUlORVJfQ0xBU1MocGFnZV9jbGFzcyk7CisgICAgY29udGFpbmVy
X2NsYXNzLT5hZGQgPSB3ZWJraXRfZ3RrX3BhZ2VfY29udGFpbmVyX2FkZDsKKyAgICBjb250YWlu
ZXJfY2xhc3MtPnJlbW92ZSA9IHdlYmtpdF9ndGtfcGFnZV9jb250YWluZXJfcmVtb3ZlOworICAg
IGNvbnRhaW5lcl9jbGFzcy0+Zm9yYWxsID0gd2Via2l0X2d0a19wYWdlX2NvbnRhaW5lcl9mb3Jh
bGw7CisKICAgICAvKioKICAgICAgKiBXZWJLaXRHdGtQYWdlOjpsb2FkLXN0YXJ0ZWQKICAgICAg
KiBAcGFnZTogdGhlIG9iamVjdCBvbiB3aGljaCB0aGUgc2lnbmFsIGlzIGVtaXR0ZWQKQEAgLTI2
Nyw2ICs0OTIsMTkgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NsYXNzX2luaXQoVwog
ICAgICAgICAgICAgZ19jY2xvc3VyZV9tYXJzaGFsX1ZPSURfX1ZPSUQsCiAgICAgICAgICAgICBH
X1RZUEVfTk9ORSwgMCk7CiAKKyAgICAvKgorICAgICAqIG1ha2UgdXMgc2Nyb2xsYWJsZSAoZS5n
LiBhZGRhYmxlIHRvIGEgR3RrU2Nyb2xsZWRXaW5kb3cpCisgICAgICovCisgICAgcGFnZV9jbGFz
cy0+c2V0X3Njcm9sbF9hZGp1c3RtZW50cyA9IHdlYmtpdF9ndGtfcGFnZV9zZXRfYWRqdXN0bWVu
dHM7CisgICAgR1RLX1dJREdFVF9DTEFTUyhwYWdlX2NsYXNzKS0+c2V0X3Njcm9sbF9hZGp1c3Rt
ZW50c19zaWduYWwgPSBnX3NpZ25hbF9uZXcoInNldF9zY3JvbGxfYWRqdXN0bWVudHMiLAorICAg
ICAgICAgICAgR19UWVBFX0ZST01fQ0xBU1MocGFnZV9jbGFzcyksCisgICAgICAgICAgICAoR1Np
Z25hbEZsYWdzKShHX1NJR05BTF9SVU5fTEFTVCB8IEdfU0lHTkFMX0FDVElPTiksCisgICAgICAg
ICAgICBHX1NUUlVDVF9PRkZTRVQoV2ViS2l0R3RrUGFnZUNsYXNzLCBzZXRfc2Nyb2xsX2FkanVz
dG1lbnRzKSwKKyAgICAgICAgICAgIE5VTEwsIE5VTEwsCisgICAgICAgICAgICB3ZWJraXRfZ3Rr
X21hcnNoYWxfVk9JRF9fT0JKRUNUX09CSkVDVCwKKyAgICAgICAgICAgIEdfVFlQRV9OT05FLCAy
LAorICAgICAgICAgICAgR1RLX1RZUEVfQURKVVNUTUVOVCwgR1RLX1RZUEVfQURKVVNUTUVOVCk7
CisKIAogICAgIC8qCiAgICAgICogaW1wbGVtZW50YXRpb25zIG9mIHZpcnR1YWwgbWV0aG9kcwpA
QCAtMjc5LDIxICs1MTcsMzMgQEAgc3RhdGljIHZvaWQgd2Via2l0X2d0a19wYWdlX2NsYXNzX2lu
aXQoVwogICAgIHBhZ2VfY2xhc3MtPmphdmFfc2NyaXB0X2NvbmZpcm0gPSB3ZWJraXRfZ3RrX3Bh
Z2VfcmVhbF9qYXZhX3NjcmlwdF9jb25maXJtOwogICAgIHBhZ2VfY2xhc3MtPmphdmFfc2NyaXB0
X3Byb21wdCA9IHdlYmtpdF9ndGtfcGFnZV9yZWFsX2phdmFfc2NyaXB0X3Byb21wdDsKICAgICBw
YWdlX2NsYXNzLT5qYXZhX3NjcmlwdF9jb25zb2xlX21lc3NhZ2UgPSB3ZWJraXRfZ3RrX3BhZ2Vf
cmVhbF9qYXZhX3NjcmlwdF9jb25zb2xlX21lc3NhZ2U7Ci0gICAgR19PQkpFQ1RfQ0xBU1MocGFn
ZV9jbGFzcyktPmZpbmFsaXplID0gd2Via2l0X2d0a19wYWdlX2ZpbmFsaXplOwogfQogCiBzdGF0
aWMgdm9pZCB3ZWJraXRfZ3RrX3BhZ2VfaW5pdChXZWJLaXRHdGtQYWdlKiBwYWdlKQogewotICAg
IFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VU
X1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2UpKTsKLSAgICBwcml2YXRlX2RhdGEtPnBhZ2Ug
PSBuZXcgUGFnZShuZXcgQ2hyb21lQ2xpZW50R2RrKHBhZ2UpLCBuZXcgQ29udGV4dE1lbnVDbGll
bnRHZGssIG5ldyBFZGl0b3JDbGllbnRHZGsocGFnZSksIDAsIG5ldyBJbnNwZWN0b3JDbGllbnRH
ZGspOwotCi0KICAgICBHVEtfV0lER0VUX1NFVF9GTEFHUyhwYWdlLCBHVEtfQ0FOX0ZPQ1VTKTsK
KyAgICBwYWdlLT5iaW5fd2luZG93ID0gMDsKIAotICAgIGdfc2lnbmFsX2Nvbm5lY3RfYWZ0ZXIo
R19PQkpFQ1QocGFnZSksICJyZWFsaXplIiwgR19DQUxMQkFDSyh3ZWJraXRfZ3RrX3BhZ2VfcmVn
aXN0ZXJfcmVuZGVyaW5nX2FyZWFfZXZlbnRzKSwgcGFnZSk7Ci0gICAgZ19zaWduYWxfY29ubmVj
dF9hZnRlcihHX09CSkVDVChwYWdlKSwgInNpemUtYWxsb2NhdGUiLCBHX0NBTExCQUNLKHdlYmtp
dF9ndGtfcGFnZV9yZW5kZXJpbmdfYXJlYV9yZXNpemVfY2FsbGJhY2spLCBwYWdlKTsKLQorICAg
IFdlYktpdEd0a1BhZ2VQcml2YXRlICpwcml2YXRlX2RhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VU
X1BSSVZBVEUoV0VCS0lUX0dUS19QQUdFKHBhZ2UpKTsKKyAgICBwcml2YXRlX2RhdGEtPnBhZ2Ug
PSBuZXcgUGFnZShuZXcgQ2hyb21lQ2xpZW50R2RrKHBhZ2UpLCBuZXcgQ29udGV4dE1lbnVDbGll
bnRHZGssIG5ldyBFZGl0b3JDbGllbnRHZGsocGFnZSksIDAsIG5ldyBJbnNwZWN0b3JDbGllbnRH
ZGspOwogICAgIHByaXZhdGVfZGF0YS0+bWFpbl9mcmFtZSA9IFdFQktJVF9HVEtfRlJBTUUod2Vi
a2l0X2d0a19mcmFtZV9uZXcocGFnZSkpOworCisgICAgLyoKKyAgICAgKiBUT0RPOiBtb3ZlIHRo
YXQgb3ZlciB0byB1c2Ugd2Via2l0Z3Rrc2V0dGluZ3MgCisgICAgICovCisgICAgU2V0dGluZ3Mq
IHNldHRpbmdzID0gcHJpdmF0ZV9kYXRhLT5wYWdlLT5zZXR0aW5ncygpOworICAgIHNldHRpbmdz
LT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7CisgICAgc2V0dGluZ3MtPnNldE1p
bmltdW1Gb250U2l6ZSg1KTsKKyAgICBzZXR0aW5ncy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6
ZSg1KTsKKyAgICBzZXR0aW5ncy0+c2V0U2hvdWxkUHJpbnRCYWNrZ3JvdW5kcyh0cnVlKTsKKyAg
ICBzZXR0aW5ncy0+c2V0SmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7CisgICAgCisgICAgc2V0dGlu
Z3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0RGVmYXVs
dEZvbnRTaXplKDE0KTsKKyAgICBzZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KCJUaW1lcyBO
ZXcgUm9tYW4iKTsKKyAgICBzZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseSgiQXJpYWwi
KTsKKyAgICBzZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJDb3VyaWVyIik7CisgICAgc2V0
dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgiQXJpYWwiKTsKIH0KIAogR3RrV2lkZ2V0KiB3
ZWJraXRfZ3RrX3BhZ2VfbmV3KHZvaWQpCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtw
YWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2d0ay9BcGkvd2Via2l0Z3RrcGFnZS5oCShyZXZp
c2lvbiAyNDc4MSkKKysrIFdlYktpdC9ndGsvQXBpL3dlYmtpdGd0a3BhZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtNjEsMTEgKzYxLDEzIEBAIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRHdGtQYWdlQ2xh
c3MgV2ViS2kKICAqIHRoZSAgc2l6ZSBvZiB0aGUgdmlld3BvcnQgYW5kIHdlIHdvbid0IGJlIGFi
bGUgdG8gdXNlIGdka193aW5kb3dfbW92ZS4KICAqLwogc3RydWN0IF9XZWJLaXRHdGtQYWdlIHsK
LSAgICBHdGtMYXlvdXQgcGFyZW50OworICAgIEd0a0NvbnRhaW5lciBwYXJlbnQ7CisKKyAgICBH
ZGtXaW5kb3cgKmJpbl93aW5kb3c7CiB9OwogCiBzdHJ1Y3QgX1dlYktpdEd0a1BhZ2VDbGFzcyB7
Ci0gICAgR3RrTGF5b3V0Q2xhc3MgcGFyZW50OworICAgIEd0a0NvbnRhaW5lckNsYXNzIHBhcmVu
dDsKIAogICAgIC8qCiAgICAgICogZGVmYXVsdCBoYW5kbGVyL3ZpcnR1YWwgbWV0aG9kcwpAQCAt
ODksNiArOTEsMTEgQEAgc3RydWN0IF9XZWJLaXRHdGtQYWdlQ2xhc3MgewogICAgIGdib29sZWFu
ICAgKCpqYXZhX3NjcmlwdF9jb25maXJtKSAoV2ViS2l0R3RrUGFnZSogcGFnZSwgV2ViS2l0R3Rr
RnJhbWUqIGZyYW1lLCBjb25zdCBnY2hhciogY29uZmlybV9tZXNzYWdlKTsKICAgICBnY2hhciog
KCpqYXZhX3NjcmlwdF9wcm9tcHQpIChXZWJLaXRHdGtQYWdlKiBwYWdlLCBXZWJLaXRHdGtGcmFt
ZSogZnJhbWUsIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCBjb25zdCBnY2hhciogZGVmYXVsdF92YWx1
ZSk7CiAgICAgdm9pZCAgICgqamF2YV9zY3JpcHRfY29uc29sZV9tZXNzYWdlKSAoV2ViS2l0R3Rr
UGFnZSosIGNvbnN0IGdjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZV9udW1iZXIsIGNv
bnN0IGdjaGFyKiBzb3VyY2VfaWQpOworCisgICAgLyoKKyAgICAgKiBpbnRlcm5hbAorICAgICAq
LworICAgIHZvaWQgICAoKnNldF9zY3JvbGxfYWRqdXN0bWVudHMpIChXZWJLaXRHdGtQYWdlKiwg
R3RrQWRqdXN0bWVudCosIEd0a0FkanVzdG1lbnQqKTsKIH07CiAKIFdFQktJVF9HVEtfQVBJIEdU
eXBlCkluZGV4OiBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmNwcAkocmV2aXNpb24gMjQ3ODEp
CisrKyBXZWJLaXQvZ3RrL0FwaS93ZWJraXRndGtwcml2YXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODAsNCArODAsMTQgQEAgV2ViS2l0R3RrUGFnZSoga2l0KFdlYkNvcmU6OlBhZ2UqIHBhZ2Up
CiAgICAgQ2hyb21lQ2xpZW50R2RrKiBjbGllbnQgPSBzdGF0aWNfY2FzdDxDaHJvbWVDbGllbnRH
ZGsqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpOwogICAgIHJldHVybiBjbGllbnQtPndlYlBh
Z2UoKTsKIH0KKworLyoKKyAqIE1ha2UgdGhlIEZyYW1lVmlldyB1c2UgdGhlIEd0a0FkanVzdG1l
bnRzIG9mIHRoZSBXZWJLaXRHdGtQYWdlIHRvIGNvbmZvcm0KKyAqIHRvIHRoZSAnc2Nyb2xsYWJs
ZSBwcm90b2NvbCcgb2YgR3RrKy4KKyAqLwordm9pZCBhcHBseUFkanVzdG1lbnRzKFdlYktpdEd0
a1BhZ2UqIHBhZ2UsIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldykKK3sKKyAgICBXZWJLaXRHdGtQ
YWdlUHJpdmF0ZSogcGFnZURhdGEgPSBXRUJLSVRfR1RLX1BBR0VfR0VUX1BSSVZBVEUocGFnZSk7
CisgICAgdmlldy0+c2V0R3RrQWRqdXN0bWVudHMocGFnZURhdGEtPmhvcml6b250YWxBZGp1c3Rt
ZW50LCBwYWdlRGF0YS0+dmVydGljYWxBZGp1c3RtZW50KTsKK30KIH0KSW5kZXg6IFdlYktpdC9n
dGsvQXBpL3dlYmtpdGd0a3ByaXZhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvZ3RrL0FwaS93
ZWJraXRndGtwcml2YXRlLmgJKHJldmlzaW9uIDI0NzgxKQorKysgV2ViS2l0L2d0ay9BcGkvd2Vi
a2l0Z3RrcHJpdmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw4IEBACiAKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKLSNpbmNsdWRlICJGcmFtZUdkay5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAi
RnJhbWVMb2FkZXJDbGllbnRHZGsuaCIKIAogbmFtZXNwYWNlIFdlYktpdEd0ayB7CkBAIC01Nyw2
ICs1OCw4IEBAIG5hbWVzcGFjZSBXZWJLaXRHdGsgewogICAgIFdlYktpdEd0a0ZyYW1lKiBraXQo
V2ViQ29yZTo6RnJhbWUqKTsKICAgICBXZWJDb3JlOjpQYWdlKiBjb3JlKFdlYktpdEd0a1BhZ2Uq
KTsKICAgICBXZWJLaXRHdGtQYWdlKiBraXQoV2ViQ29yZTo6UGFnZSopOworCisgICAgdm9pZCBh
cHBseUFkanVzdG1lbnRzKFdlYktpdEd0a1BhZ2UqLCBXZWJDb3JlOjpGcmFtZVZpZXcqKTsKIH0K
IAogZXh0ZXJuICJDIiB7CkBAIC02OSwxMiArNzIsMjAgQEAgZXh0ZXJuICJDIiB7CiAgICAgICAg
IFdlYktpdEd0a0ZyYW1lKiBtYWluX2ZyYW1lOwogICAgICAgICBXZWJDb3JlOjpTdHJpbmcgYXBw
bGljYXRpb25fbmFtZV9mb3JfdXNlcl9hZ2VudDsKICAgICAgICAgV2ViQ29yZTo6U3RyaW5nKiB1
c2VyX2FnZW50OworCisgICAgICAgIC8qCisgICAgICAgICAqIGUuZy4gc2V0IGJ5IGEgR3RrU2Ny
b2xsZWRXaW5kb3cgYW5kIHVzZWQgYnkgdGhlIEZyYW1lVmlldyBvZiBvdXIgbWFpbl9mcmFtZQor
ICAgICAgICAgKi8KKyAgICAgICAgR3RrQWRqdXN0bWVudCogaG9yaXpvbnRhbEFkanVzdG1lbnQ7
CisgICAgICAgIEd0a0FkanVzdG1lbnQqIHZlcnRpY2FsQWRqdXN0bWVudDsKKworICAgICAgICBI
YXNoU2V0PEd0a1dpZGdldCo+IGNoaWxkcmVuOwogICAgIH07CiAgICAgCiAgICAgI2RlZmluZSBX
RUJLSVRfR1RLX0ZSQU1FX0dFVF9QUklWQVRFKG9iaikgICAgKEdfVFlQRV9JTlNUQU5DRV9HRVRf
UFJJVkFURSgob2JqKSwgV0VCS0lUX0dUS19UWVBFX0ZSQU1FLCBXZWJLaXRHdGtGcmFtZVByaXZh
dGUpKQogICAgIHR5cGVkZWYgc3RydWN0IF9XZWJLaXRHdGtGcmFtZVByaXZhdGUgV2ViS2l0R3Rr
RnJhbWVQcml2YXRlOwogICAgIHN0cnVjdCBfV2ViS2l0R3RrRnJhbWVQcml2YXRlIHsKLSAgICAg
ICAgV2ViQ29yZTo6RnJhbWVHZGsqIGZyYW1lOworICAgICAgICBXZWJDb3JlOjpGcmFtZSogZnJh
bWU7CiAgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50R2RrKiBjbGllbnQ7CiAgICAg
ICAgIFdlYktpdEd0a1BhZ2UqIHBhZ2U7CiAgICAgfTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>