<?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>62709</bug_id>
          
          <creation_ts>2011-06-15 02:40:29 -0700</creation_ts>
          <short_desc>[EFL] Add GraphicsContext3DEfl for WebGL and accelerated compositing</short_desc>
          <delta_ts>2011-09-12 20:11:13 -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>WebKit EFL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>62707</dependson>
    
    <dependson>62961</dependson>
          <blocked>62695</blocked>
    
    <blocked>62959</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Hyowon Kim">hw1008.kim</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gyuyoung.kim</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kenneth</cc>
    
    <cc>kevin.cs.oh</cc>
    
    <cc>leandro</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sangseok.lim</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>421146</commentid>
    <comment_count>0</comment_count>
    <who name="Hyowon Kim">hw1008.kim</who>
    <bug_when>2011-06-15 02:40:29 -0700</bug_when>
    <thetext>patch will be added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422578</commentid>
    <comment_count>1</comment_count>
      <attachid>97589</attachid>
    <who name="Hyowon Kim">hw1008.kim</who>
    <bug_when>2011-06-17 05:42:02 -0700</bug_when>
    <thetext>Created attachment 97589
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422579</commentid>
    <comment_count>2</comment_count>
    <who name="Hyowon Kim">hw1008.kim</who>
    <bug_when>2011-06-17 05:44:45 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Created an attachment (id=97589) [details]
&gt; Patch

This patch adds the GraphicsContext3DInternal class using Evas_GL APIs.
Evas_GL APIs allow to use OpenGL to render to specially set up evas_image_objects which act as render target surfaces.
GraphicsContext3D in Efl port will be used for accelerated compositing as well as WebGL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>422631</commentid>
    <comment_count>3</comment_count>
      <attachid>97589</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-06-17 08:09:11 -0700</bug_when>
    <thetext>Comment on attachment 97589
Patch

Patch is *huge*; could you please split it into smaller, preferably less than 20kB parts?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423472</commentid>
    <comment_count>4</comment_count>
      <attachid>97745</attachid>
    <who name="Hyowon Kim">hw1008.kim</who>
    <bug_when>2011-06-19 22:03:22 -0700</bug_when>
    <thetext>Created attachment 97745
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423492</commentid>
    <comment_count>5</comment_count>
    <who name="Hyowon Kim">hw1008.kim</who>
    <bug_when>2011-06-19 23:05:02 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Created an attachment (id=97745) [details]
&gt; Patch

The patch has split into three bugs.
This patch contains only GraphicsContext3DEfl.cpp.

- GraphicsContext3D.h : Bug 62959
- GraphicsContext3DInternal.h/cpp : Bug 62961

I&apos;m looking forward to the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>423655</commentid>
    <comment_count>6</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-06-20 07:06:39 -0700</bug_when>
    <thetext>Reviewing this depends on changes made to bug 62961, so there&apos;s not much to say about this one.

Is there going to be another patch plugging these new files into the build system?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>424193</commentid>
    <comment_count>7</comment_count>
    <who name="Hyowon Kim">hw1008.kim</who>
    <bug_when>2011-06-20 19:40:48 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Reviewing this depends on changes made to bug 62961, so there&apos;s not much to say about this one.
&gt; 
&gt; Is there going to be another patch plugging these new files into the build system?

Yes, I will upload another patch for adding new files to build-script files. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425021</commentid>
    <comment_count>8</comment_count>
      <attachid>98116</attachid>
    <who name="Hyowon Kim">hw1008.kim</who>
    <bug_when>2011-06-21 22:15:12 -0700</bug_when>
    <thetext>Created attachment 98116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425195</commentid>
    <comment_count>9</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-06-22 07:10:21 -0700</bug_when>
    <thetext>It looks mostly OK, it just needs to be updated when the final version of GraphicsContext3DInternal is approved.

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:29
&gt; +#include &lt;wtf/text/CString.h&gt;

I don&apos;t think you need this header after you pass a String directly to Graphics</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425221</commentid>
    <comment_count>10</comment_count>
      <attachid>98116</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2011-06-22 07:44:50 -0700</bug_when>
    <thetext>Comment on attachment 98116
Patch

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

This looks like a huge wrapper class; isn&apos;t it possible to share most of this code with other ports, as there are few references to Evas and such?

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:35
&gt; +    bool renderDirectlyToEvasGLObject = (renderStyle == RenderDirectlyToHostWindow) ? true : false;

No need to use a ternary operator here; comparisons already returns a boolean.

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:142
&gt; +    m_internal-&gt;bufferData(target, size, /* data */ 0, usage);

Is this comment really needed?

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:167
&gt; +    m_internal-&gt;clearColor(r, g, b, a);

I&apos;d use more descriptive names here.

&gt; Source/WebCore/platform/graphics/efl/GraphicsContext3DEfl.cpp:177
&gt; +    m_internal-&gt;clearStencil(s);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425897</commentid>
    <comment_count>11</comment_count>
      <attachid>98298</attachid>
    <who name="Hyowon Kim">hw1008.kim</who>
    <bug_when>2011-06-22 19:36:39 -0700</bug_when>
    <thetext>Created attachment 98298
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425901</commentid>
    <comment_count>12</comment_count>
    <who name="Hyowon Kim">hw1008.kim</who>
    <bug_when>2011-06-22 19:38:52 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Created an attachment (id=98298) [details]
&gt; Patch

I updated this patch to reflect the comment #9 and #10.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>425910</commentid>
    <comment_count>13</comment_count>
    <who name="Hyowon Kim">hw1008.kim</who>
    <bug_when>2011-06-22 20:02:56 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 98116 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98116&amp;action=review
&gt; 
&gt; This looks like a huge wrapper class; isn&apos;t it possible to share most of this code with other ports, as there are few references to Evas and such?

Yes, most of this code are sharable.

Source/WebCore/platform/graphics/GraphicsContext3D.h:934

    // FIXME: ideally this would be used on all platforms.
#if PLATFORM(CHROMIUM) || PLATFORM(QT) || PLATFORM(GTK)
    friend class GraphicsContext3DInternal;
    OwnPtr&lt;GraphicsContext3DInternal&gt; m_internal;
#endif

Chromium &amp; QT already have their own GraphicsContext3DInternal class.
How can you make it common? I have no concrete plans yet.

Thank you for your comment :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427860</commentid>
    <comment_count>14</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-06-27 05:17:08 -0700</bug_when>
    <thetext>Informal r+ from my side now that GraphicsContext3DInternal looks OK too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465848</commentid>
    <comment_count>15</comment_count>
      <attachid>98298</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-09-12 15:37:56 -0700</bug_when>
    <thetext>Comment on attachment 98298
Patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466059</commentid>
    <comment_count>16</comment_count>
      <attachid>98298</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-12 20:11:07 -0700</bug_when>
    <thetext>Comment on attachment 98298
Patch

Clearing flags on attachment: 98298

Committed r95002: &lt;http://trac.webkit.org/changeset/95002&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>466060</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-09-12 20:11:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97589</attachid>
            <date>2011-06-17 05:42:02 -0700</date>
            <delta_ts>2011-06-19 22:03:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62709-20110617214213.patch</filename>
            <type>text/plain</type>
            <size>88151</size>
            <attacher name="Hyowon Kim">hw1008.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkxMzQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1YjIwNDcwMjAzMjc1MGFm
OWNiOTU1YjdjMjkyZGFiMjIzNzQwMGU2Li5mYTgwOWE4ZjNhNTMzMDAyMmYyYzE1NGNlMzA1NmVi
MjM1YTdkZjgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIzIEBACisyMDExLTA2LTE3ICBIeW93
b24gS2ltICA8aHcxMDA4LmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbRUZMXSBBZGQgR3JhcGhpY3NDb250ZXh0M0RFZmwg
Zm9yIFdlYkdMIGFuZCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI3MDkKKworICAgICAgICBObyBuZXcgdGVz
dHMgc2luY2UgbmV3IGZpbGVzIGFyZSBub3QgeWV0IGFkZGVkIHRvIENNYWtlTGlzdHMqLnR4dC4K
KworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgdGhlIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwg
Y2xhc3MgdXNpbmcgRXZhc19HTCBBUElzLgorICAgICAgICBFdmFzX0dMIEFQSXMgYWxsb3cgdG8g
dXNlIE9wZW5HTCB0byByZW5kZXIgdG8gc3BlY2lhbGx5IHNldCB1cCAKKyAgICAgICAgZXZhc19p
bWFnZV9vYmplY3RzIHdoaWNoIGFjdCBhcyByZW5kZXIgdGFyZ2V0IHN1cmZhY2VzLgorICAgICAg
ICBHcmFwaGljc0NvbnRleHQzRCBpbiBFRkwgcG9ydCB3aWxsIGJlIHVzZWQgZm9yIGFjY2VsZXJh
dGVkIGNvbXBvc2l0aW5nCisgICAgICAgIGFzIHdlbGwgYXMgV2ViR0wuCisKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQzRC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpidWZm
ZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjaGVja0Zy
YW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpj
bGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xvcik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2spOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmRlcHRoRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXB0
aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFk
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0VsZW1lbnRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2gpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmdldFVuaWZvcm1mdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmdldFZlcnRleEF0dHJpYmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpp
c0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVmZmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cG9s
eWdvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVhZFBp
eGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRl
ckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJi
dWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzYW1w
bGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2Npc3Nv
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2spOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2VwYXJhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3Jt
MWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmYpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0zaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00
Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpy
ZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4
dENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtMYXll
ckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxheWVy
Q29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGFpbnRS
ZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
OjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9lZmwvR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp+R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmNyZWF0ZVN1cmZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjptYWtlQ29udGV4dEN1cnJlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6aXNHTEVTMkNvbXBs
aWFudCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjphY3Rp
dmVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmF0dGFjaFNoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpiaW5kQXR0cmliTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6YmluZEJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpiaW5kRnJhbWVidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZFJlbmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpibGVuZENvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJsZW5kRXF1YXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmxlbmRFcXVhdGlvblNl
cGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJs
ZW5kRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpi
bGVuZEZ1bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmJ1ZmZlclN1YkRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpjbGVhckNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNsZWFyRGVwdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y2xlYXJTdGVuY2lsKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNvbG9yTWFzayk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjb21waWxlU2hhZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNvcHlUZXhJbWFnZTJEKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNvcHlUZXhTdWJJ
bWFnZTJEKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmN1
bGxGYWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmRl
cHRoRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpk
ZXB0aE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
ZGVwdGhSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6ZGlzYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpkcmF3RWxlbWVudHMpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZW5hYmxlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmZpbmlzaCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpmbHVzaCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpmcmFtZWJ1
ZmZlclRleHR1cmUyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpmcm9udEZhY2UpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6Z2V0QWN0aXZlQXR0cmliKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmdldEFjdGl2ZVVuaWZvcm0pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEF0dHJpYkxvY2F0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEJvb2xlYW52
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEJ1ZmZl
clBhcmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OmdldENvbnRleHRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmdldEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRJbnRlZ2Vydik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRQcm9ncmFt
aXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0UHJv
Z3JhbUluZm9Mb2cpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U2hhZGVyaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U2hhZGVySW5mb0xvZyk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRTaGFkZXJTb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U3RyaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFRleFBhcmFtZXRlcmZ2
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFRleFBh
cmFtZXRlcml2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OmdldFVuaWZvcm1mdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVy
bmFsOjpnZXRVbmlmb3JtaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6Z2V0VW5pZm9ybUxvY2F0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmdldFZlcnRleEF0dHJpYmZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFZlcnRleEF0dHJpYml2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFZlcnRleEF0dHJpYk9mZnNl
dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpoaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmlzQnVmZmVyKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmlzRW5hYmxlZCk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc0ZyYW1lYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmlzUHJv
Z3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc1Jl
bmRlcmJ1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
Ojppc1NoYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
Ojppc1RleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6bGluZVdpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OnBpeGVsU3RvcmVpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnBvbHlnb25PZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnNhbXBsZUNvdmVyYWdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnNjaXNzb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c2hhZGVyU291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnN0ZW5jaWxGdW5jKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnN0ZW5jaWxGdW5jU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c3RlbmNp
bE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c3Rl
bmNpbE1hc2tTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpzdGVuY2lsT3ApOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6c3RlbmNpbE9wU2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6dGV4SW1hZ2UyRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjp0ZXhQYXJhbWV0ZXJmKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnRleFBhcmFtZXRlcmkpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dGV4U3ViSW1hZ2UyRCk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMWYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTFmdik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMWkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTFpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMmYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTJmdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMmkpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTJpdik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtM2Yp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTNm
dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3Jt
M2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9y
bTNpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlm
b3JtNGYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5p
Zm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1
bmlmb3JtNGkpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
dW5pZm9ybTRpdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
Ojp1bmlmb3JtTWF0cml4MmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnVuaWZvcm1NYXRyaXgzZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybU1hdHJpeDRmdik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjp1c2VQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnZhbGlkYXRlUHJvZ3JhbSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp2ZXJ0ZXhBdHRyaWIxZik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp2ZXJ0ZXhBdHRyaWIxZnYp
OgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dmVydGV4QXR0
cmliMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dmVy
dGV4QXR0cmliMmZ2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnZlcnRleEF0dHJpYjNmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjp2ZXJ0ZXhBdHRyaWI0Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dmVydGV4QXR0cmliUG9pbnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp2aWV3cG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjcmVhdGVCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlRnJhbWVi
dWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3Jl
YXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6Y3JlYXRlU2hhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmNyZWF0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmRlbGV0ZUZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmRlbGV0ZVByb2dyYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZGVsZXRlUmVuZGVyYnVmZmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmRlbGV0ZVNo
YWRlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpkZWxl
dGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OmdldEV4dGVuc2lvbnMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Vm
bC9HcmFwaGljc0NvbnRleHQzREludGVybmFsLmg6IEFkZGVkLgorCiAyMDExLTA2LTE3ICBKb29u
ZSBIdXIgIDxqb29uZS5odXJAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE1hcnRpbiBSb2JpbnNvbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQzRC5oCmluZGV4IDE0ZTcxMDc1ZTYyNDUxNGE1ODg2ZGZkZjE4
ZjEzZDk3Njg5ZTYyMDUuLjczNGQ0YTMwOGY2OTQxMTljNGIyOGI3NzFiMzQxMDNiMzgxMjlkMWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dDNELmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0M0QuaApAQCAtMTAxLDcgKzEwMSw3IEBAIHN0cnVjdCBBY3RpdmVJbmZvIHsKIH07CiAK
IC8vIEZJWE1FOiBpZGVhbGx5IHRoaXMgd291bGQgYmUgdXNlZCBvbiBhbGwgcGxhdGZvcm1zLgot
I2lmIFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQor
I2lmIFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKSB8
fCBQTEFURk9STShFRkwpCiBjbGFzcyBHcmFwaGljc0NvbnRleHQzREludGVybmFsOwogI2VuZGlm
CiAKQEAgLTQ3Niw2ICs0NzYsMTEgQEAgcHVibGljOgogI2VsaWYgUExBVEZPUk0oR1RLKQogICAg
IFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpOwog
ICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV90
ZXh0dXJlOyB9CisjZWxpZiBQTEFURk9STShFRkwpCisgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCBwbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3Q7CisjaWYgVVNFKEFDQ0VMRVJB
VEVEX0NPTVBPU0lUSU5HKQorICAgIFBsYXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25z
dDsKKyNlbmRpZgogI2Vsc2UKICAgICBQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEIHBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBOdWxsUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRDsgfQogICAgIFBsYXRmb3JtM0RPYmplY3QgcGxhdGZvcm1UZXh0dXJlKCkgY29uc3Qg
eyByZXR1cm4gTnVsbFBsYXRmb3JtM0RPYmplY3Q7IH0KQEAgLTkzMiw3ICs5MzcsNyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgIC8vIEZJWE1FOiBpZGVhbGx5IHRoaXMgd291bGQgYmUgdXNlZCBv
biBhbGwgcGxhdGZvcm1zLgotI2lmIFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oR1RLKQorI2lmIFBMQVRGT1JNKENIUk9NSVVNKSB8fCBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oR1RLKSB8fCBQTEFURk9STShFRkwpCiAgICAgZnJpZW5kIGNsYXNzIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw7CiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw+IG1faW50ZXJuYWw7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmMyZjc0MjdlNTE2ZDY0ZjIwZjJiMzM1NDQxM2U2OTNmYmFiOGNhNzQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250
ZXh0M0RFZmwuY3BwCkBAIC0wLDAgKzEsODMzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAw
OS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxl
IENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVybmFsLmgi
CisKKyNpbmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1Bhc3NSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUo
R3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5k
b3csIFJlbmRlclN0eWxlIHJlbmRlclN0eWxlKQoreworICAgIGJvb2wgcmVuZGVyRGlyZWN0bHlU
b0V2YXNHTE9iamVjdCA9IChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dykgPyB0cnVlIDogZmFsc2U7CisKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bD4gaW50ZXJuYWwgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpKTsK
KyAgICBpZiAoIWludGVybmFsLT5pbml0aWFsaXplKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJE
aXJlY3RseVRvRXZhc0dMT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8
R3JhcGhpY3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0
M0QoYXR0cnMsIGhvc3RXaW5kb3csIHJlbmRlckRpcmVjdGx5VG9FdmFzR0xPYmplY3QpKTsKKyAg
ICBjb250ZXh0LT5tX2ludGVybmFsID0gaW50ZXJuYWwucmVsZWFzZSgpOworICAgIHJldHVybiBj
b250ZXh0LnJlbGVhc2UoKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4
dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0
V2luZG93LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgIDogbV9jdXJyZW50
V2lkdGgoMCkKKyAgICAsIG1fY3VycmVudEhlaWdodCgwKQorICAgICwgbV9pc1Jlc291cmNlU2Fm
ZShmYWxzZSkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgp
Cit7Cit9CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAoreworICAgIHJldHVybiBtX2ludGVybmFs
LT5wbGF0Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCk7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURURf
Q09NUE9TSVRJTkcpCitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1M
YXllcigpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
KyNlbmRpZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQor
eworICAgIG1faW50ZXJuYWwtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCitib29sIEdyYXBo
aWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9p
bnRlcm5hbC0+aXNHTEVTMkNvbXBsaWFudCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCit7CisgICAgbV9pbnRlcm5hbC0+YWN0
aXZlVGV4dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNo
U2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
Cit7CisgICAgbV9pbnRlcm5hbC0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
bV9pbnRlcm5hbC0+YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lLnV0Zjgo
KS5kYXRhKCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKEdDM0Rl
bnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+
YmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVy
KQoreworICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFy
Z2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5i
aW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0
IHRleHR1cmUpCit7CisgICAgbV9pbnRlcm5hbC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJl
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJl
ZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQor
eworICAgIG1faW50ZXJuYWwtPmJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUp
Cit7CisgICAgbV9pbnRlcm5hbC0+YmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdD
M0RlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBtX2ludGVybmFsLT5ibGVuZEVxdWF0aW9uU2VwYXJh
dGUobW9kZVJHQiwgbW9kZUFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Ymxl
bmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCit7CisgICAgbV9pbnRl
cm5hbC0+YmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJH
QiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQoreworICAgIG1faW50ZXJu
YWwtPmJsZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdl
dCwgR0MzRHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQoreworICAgIG1faW50ZXJuYWwt
PmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXplLCAvKiBkYXRhICovIDAsIHVzYWdlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXpl
aXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBtX2lu
dGVybmFsLT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAg
IG1faW50ZXJuYWwtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOwor
fQorCitHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
QzNEZW51bSB0YXJnZXQpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXModGFyZ2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIoR0Mz
RGJpdGZpZWxkIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+Y2xlYXIobWFzayk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBHQzNEY2xhbXBm
IGcsIEdDM0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQoreworICAgIG1faW50ZXJuYWwtPmNsZWFy
Q29sb3IociwgZywgYiwgYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVw
dGgoR0MzRGNsYW1wZiBkZXB0aCkKK3sKKyAgICBtX2ludGVybmFsLT5jbGVhckRlcHRoKGRlcHRo
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykK
K3sKKyAgICBtX2ludGVybmFsLT5jbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBH
QzNEYm9vbGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBtX2ludGVybmFsLT5j
b2xvck1hc2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIG1f
aW50ZXJuYWwtPmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNE
ZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+
Y29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIGJvcmRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhT
dWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0
LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+Y29weVRleFN1YkltYWdlMkQo
dGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCit7Cisg
ICAgbV9pbnRlcm5hbC0+Y3VsbEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlcHRoRnVuYyhHQzNEZW51bSBmdW5jKQoreworICAgIG1faW50ZXJuYWwtPmRlcHRoRnVu
YyhmdW5jKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKEdDM0Rib29s
ZWFuIGZsYWcpCit7CisgICAgbV9pbnRlcm5hbC0+ZGVwdGhNYXNrKGZsYWcpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFt
cGYgekZhcikKK3sKKyAgICBtX2ludGVybmFsLT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+ZGV0
YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmRpc2FibGUoR0MzRGVudW0gY2FwKQoreworICAgIG1faW50ZXJuYWwtPmRpc2FibGUoY2FwKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdD
M0R1aW50IGluZGV4KQoreworICAgIG1faW50ZXJuYWwtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJh
eShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVu
dW0gbW9kZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KQoreworICAgIG1faW50ZXJu
YWwtPmRyYXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0Mz
RGVudW0gdHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgbV9pbnRlcm5hbC0+ZHJhd0Vs
ZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjplbmFibGUoR0MzRGVudW0gY2FwKQoreworICAgIG1faW50ZXJuYWwtPmVuYWJsZShj
YXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJh
eShHQzNEdWludCBpbmRleCkKK3sKKyAgICBtX2ludGVybmFsLT5lbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCit7Cisg
ICAgbV9pbnRlcm5hbC0+ZmluaXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZs
dXNoKCkKK3sKKyAgICBtX2ludGVybmFsLT5mbHVzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVj
dCBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFy
Z2V0LCBhdHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0
IHRleHR1cmUsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJU
ZXh0dXJlMkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7
CisgICAgbV9pbnRlcm5hbC0+ZnJvbnRGYWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCit7CisgICAgbV9pbnRlcm5h
bC0+Z2VuZXJhdGVNaXBtYXAodGFyZ2V0KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0QWN0aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgs
IEFjdGl2ZUluZm8mIGluZm8pCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldEFjdGl2ZUF0
dHJpYihwcm9ncmFtLCBpbmRleCwgaW5mbyk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRl
eCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0QWN0aXZl
VW5pZm9ybShwcm9ncmFtLCBpbmRleCwgaW5mbyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmdldEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXpl
aSBtYXhDb3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykK
K3sKKyAgICBtX2ludGVybmFsLT5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQs
IGNvdW50LCBzaGFkZXJzKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJM
b2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sK
KyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51
dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYo
R0MzRGVudW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5n
ZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJn
ZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCit7CisgICAgcmV0dXJuIG1f
aW50ZXJuYWwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7Cit9CisKK0dDM0RlbnVtIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRFcnJvcigpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldEVycm9y
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dihHQzNEZW51bSBwYXJh
bU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+Z2V0RmxvYXR2KHBh
cmFtTmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1
ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFj
aG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFs
LT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQs
IHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2
KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5nZXRJ
bnRlZ2VydihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQ
cm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1l
LCB2YWx1ZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9M
b2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5n
ZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFt
ZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+Z2V0UmVuZGVyYnVmZmVyUGFy
YW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlcml2KHNoYWRlciwg
cG5hbWUsIHZhbHVlKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJ
bmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIHJldHVybiBtX2ludGVybmFs
LT5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIHJldHVy
biBtX2ludGVybmFsLT5nZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKTsKK30KKworU3RyaW5nIEdyYXBo
aWNzQ29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKK3sKKyAgICByZXR1cm4gbV9p
bnRlcm5hbC0+Z2V0U3RyaW5nKG5hbWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxv
YXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPmdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwg
cG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1l
dGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7
CisgICAgbV9pbnRlcm5hbC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAg
IG1faW50ZXJuYWwtPmdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVy
bmFsLT5nZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKworR0MzRGlu
dCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPmdldFZl
cnRleEF0dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPmdldFZlcnRleEF0dHJpYml2KGlu
ZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCitsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0
ZXhBdHRyaWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQoreworICAgIHJl
dHVybiBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IG1vZGUpCit7CisgICAgbV9pbnRlcm5hbC0+aGludCh0YXJnZXQsIG1vZGUpOworfQorCitHQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBvYmop
Cit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzQnVmZmVyKG9iaik7Cit9CisKK0dDM0Rib29s
ZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQoreworICAgIHJl
dHVybiBtX2ludGVybmFsLT5pc0VuYWJsZWQoY2FwKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0M0Q6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBvYmopCit7CisgICAg
cmV0dXJuIG1faW50ZXJuYWwtPmlzRnJhbWVidWZmZXIob2JqKTsKK30KKworR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IG9iaikKK3sKKyAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+aXNQcm9ncmFtKG9iaik7Cit9CisKK0dDM0Rib29sZWFuIEdy
YXBoaWNzQ29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IG9iaikKK3sK
KyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNSZW5kZXJidWZmZXIob2JqKTsKK30KKworR0MzRGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQor
eworICAgIHJldHVybiBtX2ludGVybmFsLT5pc1NoYWRlcihvYmopOworfQorCitHQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQorewor
ICAgIHJldHVybiBtX2ludGVybmFsLT5pc1RleHR1cmUob2JqKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKK3sKKyAgICBtX2ludGVybmFs
LT5saW5lV2lkdGgod2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJv
Z3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+bGlua1By
b2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3RvcmVp
KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIG1faW50ZXJuYWwtPnBpeGVs
U3RvcmVpKHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHln
b25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQoreworICAgIG1faW50
ZXJuYWwtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lk
KiBkYXRhKQoreworICAgIG1faW50ZXJuYWwtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdo
dCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVs
ZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCkKK3sKKyAgICBtX2ludGVybmFsLT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJu
YWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
YW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpCit7Cisg
ICAgbV9pbnRlcm5hbC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXpl
aSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtX2ludGVybmFsLT5zY2lzc29yKHgs
IHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJT
b3VyY2UoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sK
KyAgICBtX2ludGVybmFsLT5zaGFkZXJTb3VyY2UocHJvZ3JhbSwgc3RyaW5nLnV0ZjgoKS5kYXRh
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBm
dW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtX2ludGVybmFsLT5zdGVu
Y2lsRnVuYyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpz
dGVuY2lsRnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQg
cmVmLCBHQzNEdWludCBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPnN0ZW5jaWxGdW5jU2VwYXJh
dGUoZmFjZSwgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtX2ludGVybmFsLT5zdGVuY2lsTWFz
ayhtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2tTZXBhcmF0
ZShHQzNEZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPnN0ZW5j
aWxNYXNrU2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnN0ZW5jaWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3Mp
Cit7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKK3sKKyAgICBt
X2ludGVybmFsLT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOwor
fQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwg
R0MzRGludCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT50
ZXhJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBi
b3JkZXIsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dGV4UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxv
YXQgcGFyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+dGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1l
LCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkoR0Mz
RGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKK3sKKyAgICBtX2lu
dGVybmFsLT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQg
bGV2ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qg
dm9pZCogcGl4ZWxzKQoreworICAgIG1faW50ZXJuYWwtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhl
bHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYoR0MzRGludCBsb2Nh
dGlvbiwgR0MzRGZsb2F0IHgpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFmKGxvY2F0aW9u
LCB4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQoreworICAgIG1faW50ZXJuYWwt
PnVuaWZvcm0xZnYobG9jYXRpb24sIHNpemUsIHYpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjp1bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4KQoreworICAgIG1faW50
ZXJuYWwtPnVuaWZvcm0xaShsb2NhdGlvbiwgeCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNp
emUpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgdik7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEZmxvYXQgeCwgZmxvYXQgeSkKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMmYobG9jYXRp
b24sIHgsIHkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbV9pbnRl
cm5hbC0+dW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQg
eSkKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMmkobG9jYXRpb24sIHgsIHkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQqIHYsIEdDM0RzaXplaSBzaXplKQoreworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0yaXYobG9j
YXRpb24sIHNpemUsIHYpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Yo
R0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeikK
K3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtM2YobG9jYXRpb24sIHgsIHksIHopOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rm
bG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTNmdihs
b2NhdGlvbiwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0z
aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6KQorewor
ICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zaShsb2NhdGlvbiwgeCwgeSwgeik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCog
diwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTNpdihsb2NhdGlv
biwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNE
ZmxvYXQgdykKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtNGYobG9jYXRpb24sIHgsIHksIHos
IHcpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+
dW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0Mz
RGludCB6LCBHQzNEaW50IHcpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTRpKGxvY2F0aW9u
LCB4LCB5LCB6LCB3KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtX2lu
dGVybmFsLT51bmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVh
biB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplKQoreworICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFs
dWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KEdDM0Rp
bnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0Mz
RHNpemVpIHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlv
biwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnVuaWZvcm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3Nl
LCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT51
bmlmb3JtTWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dy
YW0pCit7CisgICAgbV9pbnRlcm5hbC0+dXNlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSkKK3sKKyAgICBtX2ludGVybmFsLT52YWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNE
ZmxvYXQgeCkKK3sKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIxZihpbmRleCwgeCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0KiB2YWx1ZXMpCit7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliMWZ2
KGluZGV4LCB2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWIyZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KQoreworICAgIG1f
aW50ZXJuYWwtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB4LCB5KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZh
bHVlcykKK3sKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHZhbHVlcyk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KQoreworICAgIG1faW50
ZXJuYWwtPnZlcnRleEF0dHJpYjNmKGluZGV4LCB4LCB5LCB6KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZh
bHVlcykKK3sKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIHZhbHVlcyk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdykK
K3sKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgeCwgeSwgeiwgdyk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRl
eCwgR0MzRGZsb2F0KiB2YWx1ZXMpCit7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliNGZ2
KGluZGV4LCB2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRy
aWJQb2ludGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdD
M0Rib29sZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0
KQoreworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5
cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgb2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCkKK3sKKyAgICBtX2ludGVybmFsLT52aWV3cG9ydCh4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgs
IGludCBoZWlnaHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXll
ckNvbXBvc2l0ZWQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3Vs
dHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQz
RDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVh
dGUoSW50U2l6ZSgxLCAxKSk7CisgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7Cit9CisK
K1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit7Cisg
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmNyZWF0ZUJ1ZmZlcigpOworfQorCitQbGF0Zm9ybTNET2Jq
ZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7CisgICAgcmV0dXJu
IG1faW50ZXJuYWwtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3Qg
R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIHJldHVybiBtX2ludGVy
bmFsLT5jcmVhdGVQcm9ncmFtKCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmNy
ZWF0ZVJlbmRlcmJ1ZmZlcigpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4
dDNEOjpjcmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5h
bC0+Y3JlYXRlU2hhZGVyKHR5cGUpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29u
dGV4dDNEOjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRl
VGV4dHVyZSgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIoUGxh
dGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+ZGVsZXRlQnVmZmVyKGJ1
ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKFBs
YXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPmRlbGV0ZUZyYW1lYnVm
ZmVyKGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1faW50ZXJuYWwtPmRlbGV0ZVByb2dy
YW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1
ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5kZWxldGVS
ZW5kZXJidWZmZXIoYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRl
U2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIG1faW50ZXJuYWwtPmRlbGV0
ZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0
dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5kZWxldGVU
ZXh0dXJlKHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXpl
R0xFcnJvcihHQzNEZW51bSBlcnJvcikKK3sKKyAgICBtX2ludGVybmFsLT5zeW50aGVzaXplR0xF
cnJvcihlcnJvcik7Cit9CisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4
dGVuc2lvbnMoKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRFeHRlbnNpb25zKCk7Cit9
CisKK0ludFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXpl
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRTaXplKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0
cjxDb250ZXh0TG9zdENhbGxiYWNrPikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCiti
b29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCBHQzNEZW51
bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9m
aWxlLCBWZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQkdMKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjA3MmU1MTQ0YjA3Njg0OTA4ZjNmYmMwYWU0OTRjMjdlYmM0NjdlNWMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3Jh
cGhpY3NDb250ZXh0M0RJbnRlcm5hbC5jcHAKQEAgLTAsMCArMSwxMTIxIEBACisvKgorICAgIENv
cHlyaWdodCAoQykgMjAwOS0yMDExIFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAg
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHQzREludGVybmFsLmgiCisKKyNpbmNsdWRlICJIb3N0V2luZG93LmgiCisjaW5jbHVkZSAiZXdr
X3ByaXZhdGUuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpHcmFwaGljc0NvbnRleHQz
REludGVybmFsKCkKKyAgICA6IG1fYm91bmRGQk8oMCkKKyAgICAsIG1fYm91bmRUZXh0dXJlKDAp
CisgICAgLCBtX2JvdW5kQXJyYXlCdWZmZXIoMCkKKyAgICAsIG1fZXZhc0dMKDApCisgICAgLCBt
X2NvbnRleHQoMCkKKyAgICAsIG1fc3VyZmFjZSgwKQorICAgICwgbV9hcGkoMCkKK3sKK30KKwor
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6fkdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKQor
eworICAgIGlmIChtX2V2YXNHTCkgeworICAgICAgICBpZiAobV9zdXJmYWNlKQorICAgICAgICAg
ICAgZXZhc19nbF9zdXJmYWNlX2Rlc3Ryb3kobV9ldmFzR0wsIG1fc3VyZmFjZSk7CisKKyAgICAg
ICAgaWYgKG1fY29udGV4dCkKKyAgICAgICAgICAgIGV2YXNfZ2xfY29udGV4dF9kZXN0cm95KG1f
ZXZhc0dMLCBtX2NvbnRleHQpOworCisgICAgICAgIGV2YXNfZ2xfZnJlZShtX2V2YXNHTCk7Cisg
ICAgfQorfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmluaXRpYWxpemUoR3Jh
cGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3cs
IGJvb2wgYlJlbmRlckRpcmVjdGx5VG9FdmFzR0xPYmplY3QpCit7CisgICAgRXZhc19PYmplY3Qq
IGV3a1ZpZXcgPSBzdGF0aWNfY2FzdDxFdmFzX09iamVjdCo+KGhvc3RXaW5kb3ctPnBsYXRmb3Jt
UGFnZUNsaWVudCgpKTsKKworICAgIG1fZXZhc0dMID0gZXdrX3ZpZXdfZXZhc19nbF9jcmVhdGUo
ZXdrVmlldyk7CisgICAgaWYgKCFtX2V2YXNHTCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgbV9hcGkgPSBldmFzX2dsX2FwaV9nZXQobV9ldmFzR0wpOworICAgIGlmICghbV9hcGkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEV2YXNfR0xfQ29udGV4dCogc2hhcmVDb250ZXh0
ID0gMDsKKworICAgIGlmICghYlJlbmRlckRpcmVjdGx5VG9FdmFzR0xPYmplY3QpIHsKKyAgICAg
ICAgLy8gdG8gc2hhcmUgcmVzb3VyY2VzIHdpdGggYWNjZWxlcmF0ZWQgY29tcG9zaXRpbmcgY29u
dGV4dAorICAgICAgICBHcmFwaGljc0NvbnRleHQzRCogY29tcG9zaXRpbmdDb250ZXh0ID0gZXdr
X3ZpZXdfYWNjZWxlcmF0ZWRfY29tcG9zaXRpbmdfY29udGV4dF9nZXQoZXdrVmlldyk7CisgICAg
ICAgIGlmIChjb21wb3NpdGluZ0NvbnRleHQpCisgICAgICAgICAgICBzaGFyZUNvbnRleHQgPSBz
dGF0aWNfY2FzdDxFdmFzX0dMX0NvbnRleHQqPihjb21wb3NpdGluZ0NvbnRleHQtPnBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKSk7CisgICAgfQorCisgICAgbV9jb250ZXh0ID0gZXZhc19nbF9j
b250ZXh0X2NyZWF0ZShtX2V2YXNHTCwgc2hhcmVDb250ZXh0KTsKKyAgICBpZiAoIW1fY29udGV4
dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFjcmVhdGVTdXJmYWNlKGV3a1Zp
ZXcsIGJSZW5kZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcmV0dXJuIG1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVN1cmZhY2UoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGJv
b2wgcmVuZGVyRGlyZWN0bHlUb0V2YXNHTE9iamVjdCkKK3sKKyAgICBFdmFzX0dMX0NvbmZpZyBj
b25maWcgPSB7CisgICAgICAgIEVWQVNfR0xfUkdCQV84LAorICAgICAgICBFVkFTX0dMX0RFUFRI
X0JJVF84LAorICAgICAgICBFVkFTX0dMX1NURU5DSUxfTk9ORQorICAgIH07CisKKyAgICBpbnQg
eCA9IDAsIHkgPSAwLCB3ID0gMCwgaCA9IDA7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0
KGV3a1ZpZXcsICZ4LCAmeSwgJncsICZoKTsKKworICAgIGludCBzdXJmYWNlV2lkdGggPSAwLCBz
dXJmYWNlSGVpZ2h0ID0gMDsKKyAgICBpZiAocmVuZGVyRGlyZWN0bHlUb0V2YXNHTE9iamVjdCkg
eworICAgICAgICAvLyBzYW1lIHNpemUgYXMgb3VyIGhvc3R3aW5kb3cKKyAgICAgICAgc3VyZmFj
ZVdpZHRoID0gdzsKKyAgICAgICAgc3VyZmFjZUhlaWdodCA9IGg7CisgICAgfSBlbHNlCisgICAg
ICAgIHN1cmZhY2VXaWR0aCA9IHN1cmZhY2VIZWlnaHQgPSAxOworCisgICAgbV9zdXJmYWNlID0g
ZXZhc19nbF9zdXJmYWNlX2NyZWF0ZShtX2V2YXNHTCwgJmNvbmZpZywgc3VyZmFjZVdpZHRoLCBz
dXJmYWNlSGVpZ2h0KTsKKyAgICBpZiAoIW1fc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKHJlbmRlckRpcmVjdGx5VG9FdmFzR0xPYmplY3QpIHsKKyAgICAgICAgRXZh
c19OYXRpdmVfU3VyZmFjZSBuYXRpdmVTdXJmYWNlOworICAgICAgICBldmFzX2dsX25hdGl2ZV9z
dXJmYWNlX2dldChtX2V2YXNHTCwgbV9zdXJmYWNlLCAmbmF0aXZlU3VyZmFjZSk7CisKKyAgICAg
ICAgZXdrX3ZpZXdfZXZhc19nbF9vYmplY3RfY3JlYXRlKGV3a1ZpZXcsICZuYXRpdmVTdXJmYWNl
LCB4LCB5LCB3LCBoKTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1BsYXRmb3JtR3Jh
cGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fY29udGV4dDsKK30KKworYm9vbCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjptYWtlQ29udGV4dEN1cnJlbnQoKQoreworICAgIHJl
dHVybiAoZXZhc19nbF9tYWtlX2N1cnJlbnQobV9ldmFzR0wsIG1fc3VyZmFjZSwgbV9jb250ZXh0
KSA9PSBFSU5BX1RSVUUpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6Omlz
R0xFUzJDb21wbGlhbnQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjphY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsQWN0aXZlVGV4dHVy
ZSh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjphdHRhY2hT
aGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xBdHRhY2hTaGFkZXIo
cHJvZ3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpi
aW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRl
eCwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBt
X2FwaS0+Z2xCaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBtX2FwaS0+Z2xCaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKKworICAgIGlmICh0YXJn
ZXQgPT0gR0xfQVJSQVlfQlVGRkVSKQorICAgICAgICBtX2JvdW5kQXJyYXlCdWZmZXIgPSBidWZm
ZXI7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZEZyYW1lYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBmcmFtZWJ1ZmZlcikKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGlmIChmcmFtZWJ1ZmZlciAhPSBtX2JvdW5kRkJP
KSB7CisgICAgICAgIG1fYXBpLT5nbEJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGZyYW1lYnVmZmVy
KTsKKyAgICAgICAgbV9ib3VuZEZCTyA9IGZyYW1lYnVmZmVyOworICAgIH0KK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpiaW5kUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgbV9hcGktPmdsQmluZFJlbmRlcmJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0
LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisgICAgbV9hcGktPmdsQmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKKyAgICBtX2JvdW5k
VGV4dHVyZSA9IHRleHR1cmU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBi
bHVlLCBHQzNEY2xhbXBmIGFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IG1fYXBpLT5nbEJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJsZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkK
K3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xCbGVuZEVxdWF0aW9u
KG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJsZW5kRXF1YXRp
b25TZXBhcmF0ZShHQzNEZW51bSBtb2RlUkdCLCBHQzNEZW51bSBtb2RlQWxwaGEpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsQmxlbmRFcXVhdGlvblNlcGFyYXRl
KG1vZGVSR0IsIG1vZGVBbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsQmxlbmRGdW5jKHNmYWN0b3IsIGRm
YWN0b3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmJsZW5kRnVuY1Nl
cGFyYXRlKEdDM0RlbnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBo
YSwgR0MzRGVudW0gZHN0QWxwaGEpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
bV9hcGktPmdsQmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RSR0IsIHNyY0FscGhhLCBkc3RB
bHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6YnVmZmVyRGF0YShH
QzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNE
ZW51bSB1c2FnZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xC
dWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OmJ1ZmZlclN1YkRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsQnVmZmVyU3ViRGF0YSh0YXJnZXQs
IG9mZnNldCwgc2l6ZSwgZGF0YSk7Cit9CisKK0dDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoR0MzRGVudW0gdGFyZ2V0KQoreworICAgIG1h
a2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBtX2FwaS0+Z2xDaGVja0ZyYW1lYnVmZmVy
U3RhdHVzKHRhcmdldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y2xl
YXIoR0MzRGJpdGZpZWxkIG1hc2spCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
bV9hcGktPmdsQ2xlYXIobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6Y2xlYXJDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1w
ZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIG1fYXBpLT5nbENsZWFyQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNsZWFyRGVwdGgoR0MzRGNsYW1wZiBkZXB0
aCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xDbGVhckRlcHRo
ZihkZXB0aCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y2xlYXJTdGVu
Y2lsKEdDM0RpbnQgcykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+
Z2xDbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFu
IGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIG1fYXBpLT5nbENvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y29tcGlsZVNoYWRlcihQbGF0Zm9ybTNET2Jq
ZWN0IHNoYWRlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xD
b21waWxlU2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51
bSBpbnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgbV9hcGktPmdsQ29weVRleEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJu
YWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGJvcmRlcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEaW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4
LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xDb3B5VGV4U3ViSW1hZ2UyRCh0YXJn
ZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpjdWxsRmFjZShHQzNEZW51bSBtb2RlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5nbEN1bGxGYWNlKG1vZGUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmRlcHRoRnVuYyhHQzNEZW51
bSBmdW5jKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5nbERlcHRo
RnVuYyhmdW5jKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpkZXB0aE1h
c2soR0MzRGJvb2xlYW4gZmxhZykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBt
X2FwaS0+Z2xEZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbDo6ZGVwdGhSYW5nZShHQzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsRGVwdGhSYW5nZWYoek5lYXIs
IHpGYXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmRldGFjaFNoYWRl
cihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5nbERldGFjaFNoYWRlcihwcm9n
cmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmRpc2Fi
bGUoR0MzRGVudW0gY2FwKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBp
LT5nbERpc2FibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpk
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsRGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpkcmF3QXJyYXlzKEdDM0Rl
bnVtIG1vZGUsIEdDM0RpbnQgZmlyc3QsIEdDM0RzaXplaSBjb3VudCkKK3sKKyAgICBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xEcmF3QXJyYXlzKG1vZGUsIGZpcnN0LCBjb3Vu
dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZHJhd0VsZW1lbnRzKEdD
M0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0gdHlwZSwgR0MzRGludHB0ciBv
ZmZzZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsRHJhd0Vs
ZW1lbnRzKG1vZGUsIGNvdW50LCB0eXBlLCByZWludGVycHJldF9jYXN0PEdMdm9pZCo+KHN0YXRp
Y19jYXN0PGludHB0cl90PihvZmZzZXQpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6ZW5hYmxlKEdDM0RlbnVtIGNhcCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBtX2FwaS0+Z2xFbmFibGUoY2FwKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNEdWludCBpbmRleCkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xFbmFibGVWZXJ0ZXhBdHRyaWJB
cnJheShpbmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6ZmluaXNo
KCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xGaW5pc2goKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpmbHVzaCgpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsRmx1c2goKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwg
UGxhdGZvcm0zRE9iamVjdCByZW5kZXJidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgbV9hcGktPmdsRnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBhdHRhY2ht
ZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIHJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmpl
Y3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBtX2FwaS0+Z2xGcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRl
eHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmZyb250RmFjZShHQzNEZW51bSBtb2RlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIG1fYXBpLT5nbEZyb250RmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsR2VuZXJhdGVNaXBtYXAodGFyZ2V0
KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRBY3RpdmVBdHRyaWIo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5m
bykKK3sKKyAgICBpZiAoIXByb2dyYW0pIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR0xf
SU5WQUxJRF9WQUxVRSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtYWtl
Q29udGV4dEN1cnJlbnQoKTsKKworICAgIGludCBtYXhOYW1lTGVuZ3RoID0gLTE7CisgICAgbV9h
cGktPmdsR2V0UHJvZ3JhbWl2KHByb2dyYW0sIEdMX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdU
SCwgJm1heE5hbWVMZW5ndGgpOworICAgIGlmIChtYXhOYW1lTGVuZ3RoIDwgMCkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgY2hhciogbmFtZSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxs
b2MobWF4TmFtZUxlbmd0aCAqIHNpemVvZihjaGFyKSkpOworICAgIGlmICghbmFtZSkgeworICAg
ICAgICBzeW50aGVzaXplR0xFcnJvcihHTF9PVVRfT0ZfTUVNT1JZKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGludCBsZW5ndGggPSAwOworICAgIGludCBzaXplID0gLTE7
CisgICAgR0xlbnVtIHR5cGUgPSAwOworCisgICAgbV9hcGktPmdsR2V0QWN0aXZlQXR0cmliKHBy
b2dyYW0sIGluZGV4LCBtYXhOYW1lTGVuZ3RoLCAmbGVuZ3RoLCAmc2l6ZSwgJnR5cGUsIG5hbWUp
OworICAgIGlmIChzaXplIDwgMCkgeworICAgICAgICBmcmVlKG5hbWUpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaW5mby5uYW1lID0gU3RyaW5nOjpmcm9tVVRGOChuYW1l
LCBsZW5ndGgpOworICAgIGluZm8udHlwZSA9IHR5cGU7CisgICAgaW5mby5zaXplID0gc2l6ZTsK
KyAgICBmcmVlKG5hbWUpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dDNESW50ZXJuYWw6OmdldEFjdGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICBpZiAoIXByb2dyYW0p
IHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR0xfSU5WQUxJRF9WQUxVRSk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAg
IGludCBtYXhOYW1lTGVuZ3RoID0gLTE7CisgICAgbV9hcGktPmdsR2V0UHJvZ3JhbWl2KHByb2dy
YW0sIEdMX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEgsICZtYXhOYW1lTGVuZ3RoKTsKKyAgICBp
ZiAobWF4TmFtZUxlbmd0aCA8IDApCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNoYXIq
IG5hbWUgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKG1heE5hbWVMZW5ndGggKiBzaXplb2Yo
Y2hhcikpKTsKKyAgICBpZiAoIW5hbWUpIHsKKyAgICAgICAgc3ludGhlc2l6ZUdMRXJyb3IoR0xf
T1VUX09GX01FTU9SWSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpbnQg
bGVuZ3RoID0gMDsKKyAgICBpbnQgc2l6ZSA9IC0xOworICAgIEdMZW51bSB0eXBlID0gMDsKKwor
ICAgIG1fYXBpLT5nbEdldEFjdGl2ZVVuaWZvcm0ocHJvZ3JhbSwgaW5kZXgsIG1heE5hbWVMZW5n
dGgsICZsZW5ndGgsICZzaXplLCAmdHlwZSwgbmFtZSk7CisgICAgaWYgKHNpemUgPCAwKSB7Cisg
ICAgICAgIGZyZWUobmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBp
bmZvLm5hbWUgPSBTdHJpbmc6OmZyb21VVEY4KG5hbWUsIGxlbmd0aCk7CisgICAgaW5mby50eXBl
ID0gdHlwZTsKKyAgICBpbmZvLnNpemUgPSBzaXplOworICAgIGZyZWUobmFtZSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0QXR0YWNo
ZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBH
QzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQoreworICAgIG1ha2VD
b250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5nbEdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFt
LCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6Z2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25z
dCBjaGFyKiBuYW1lKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBt
X2FwaS0+Z2xHZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjpnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJv
b2xlYW4qIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5n
bEdldEJvb2xlYW52KHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJ
bnRlcm5hbDo6Z2V0QnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAg
bV9hcGktPmdsR2V0QnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQor
CitHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpnZXRDb250ZXh0QXR0cmlidXRlcygpCit7CisgICAgcmV0dXJuIG1fYXR0cmlidXRlczsKK30K
KworR0MzRGVudW0gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0RXJyb3IoKQoreworICAg
IGlmIChtX3N5bnRoZXRpY0Vycm9ycy5zaXplKCkgPiAwKSB7CisgICAgICAgIExpc3RIYXNoU2V0
PEdDM0RlbnVtPjo6aXRlcmF0b3IgaXRlciA9IG1fc3ludGhldGljRXJyb3JzLmJlZ2luKCk7Cisg
ICAgICAgIEdDM0RlbnVtIGVyciA9ICppdGVyOworICAgICAgICBtX3N5bnRoZXRpY0Vycm9ycy5y
ZW1vdmUoaXRlcik7CisgICAgICAgIHJldHVybiBlcnI7CisgICAgfQorCisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgcmV0dXJuIG1fYXBpLT5nbEdldEVycm9yKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0RmxvYXR2KEdDM0RlbnVtIHBuYW1lLCBHQzNE
ZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5n
bEdldEZsb2F0dihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdl
dCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5nbEdldEZyYW1lYnVmZmVy
QXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZhbHVlKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRJbnRlZ2VydihHQzNEZW51
bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisK
KyAgICBzd2l0Y2ggKHBuYW1lKSB7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX0ZS
QUdNRU5UX1VOSUZPUk1fVkVDVE9SUzoKKyAgICAgICAgbV9hcGktPmdsR2V0SW50ZWdlcnYoR0xf
TUFYX0ZSQUdNRU5UX1VOSUZPUk1fVkVDVE9SUywgdmFsdWUpOworICAgICAgICAqdmFsdWUgLz0g
NDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRF
WF9VTklGT1JNX1ZFQ1RPUlM6CisgICAgICAgIG1fYXBpLT5nbEdldEludGVnZXJ2KEdMX01BWF9W
RVJURVhfVU5JRk9STV9WRUNUT1JTLCB2YWx1ZSk7CisgICAgICAgICp2YWx1ZSAvPSA0OworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNU
T1JTOgorICAgICAgICBtX2FwaS0+Z2xHZXRJbnRlZ2VydihHTF9NQVhfVkFSWUlOR19WRUNUT1JT
LCB2YWx1ZSk7CisgICAgICAgICp2YWx1ZSAvPSA0OworICAgICAgICBicmVhazsKKyAgICBkZWZh
dWx0OgorICAgICAgICBtX2FwaS0+Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworICAgIH0K
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRQcm9ncmFtaXYoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsR2V0UHJvZ3JhbWl2KHByb2dy
YW0sIHBuYW1lLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpnZXRQcm9ncmFtSW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBpbnQgbG9nTGVuZ3RoID0gMDsKKyAgICBtX2FwaS0+
Z2xHZXRQcm9ncmFtaXYocHJvZ3JhbSwgR3JhcGhpY3NDb250ZXh0M0Q6OklORk9fTE9HX0xFTkdU
SCwgJmxvZ0xlbmd0aCk7CisgICAgaWYgKCFsb2dMZW5ndGgpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIGNoYXIqIGxvZyA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2MobG9nTGVu
Z3RoICogc2l6ZW9mKGNoYXIpKSk7CisgICAgaWYgKCFsb2cpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIGludCByZXR1cm5lZExvZ0xlbmd0aDsKKyAgICBtX2FwaS0+Z2xHZXRQcm9n
cmFtSW5mb0xvZyhwcm9ncmFtLCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nKTsK
KyAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7CisKKyAgICBT
dHJpbmcgcmVzID0gU3RyaW5nOjpmcm9tVVRGOChsb2csIHJldHVybmVkTG9nTGVuZ3RoKTsKKyAg
ICBmcmVlKGxvZyk7CisgICAgcmV0dXJuIHJlczsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQo
KTsKKyAgICBtX2FwaS0+Z2xHZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBuYW1l
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0U2hhZGVy
aXYoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1
ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xHZXRTaGFkZXJp
dihzaGFkZXIsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAg
IG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgaW50IGxvZ0xlbmd0aCA9IDA7CisgICAgbV9h
cGktPmdsR2V0U2hhZGVyaXYoc2hhZGVyLCBHcmFwaGljc0NvbnRleHQzRDo6SU5GT19MT0dfTEVO
R1RILCAmbG9nTGVuZ3RoKTsKKyAgICBpZiAobG9nTGVuZ3RoIDw9IDEpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgIGNoYXIqIGxvZyA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2Mo
bG9nTGVuZ3RoICogc2l6ZW9mKGNoYXIpKSk7CisgICAgaWYgKCFsb2cpCisgICAgICAgIHJldHVy
biBTdHJpbmcoKTsKKworICAgIGludCByZXR1cm5lZExvZ0xlbmd0aDsKKyAgICBtX2FwaS0+Z2xH
ZXRTaGFkZXJJbmZvTG9nKHNoYWRlciwgbG9nTGVuZ3RoLCAmcmV0dXJuZWRMb2dMZW5ndGgsIGxv
Zyk7CisgICAgQVNTRVJUKGxvZ0xlbmd0aCA9PSByZXR1cm5lZExvZ0xlbmd0aCArIDEpOworCisg
ICAgU3RyaW5nIHJlcyA9IFN0cmluZzo6ZnJvbVVURjgobG9nLCByZXR1cm5lZExvZ0xlbmd0aCk7
CisgICAgZnJlZShsb2cpOworICAgIHJldHVybiByZXM7Cit9CisKK1N0cmluZyBHcmFwaGljc0Nv
bnRleHQzREludGVybmFsOjpnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBpbnQgbG9nTGVuZ3RoID0gMDsK
KyAgICBtX2FwaS0+Z2xHZXRTaGFkZXJpdihzaGFkZXIsIEdMX1NIQURFUl9TT1VSQ0VfTEVOR1RI
LCAmbG9nTGVuZ3RoKTsKKyAgICBpZiAobG9nTGVuZ3RoIDw9IDEpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKworICAgIGNoYXIqIGxvZyA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2MobG9n
TGVuZ3RoICogc2l6ZW9mKGNoYXIpKSk7CisgICAgaWYgKCFsb2cpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKworICAgIGludCByZXR1cm5lZExvZ0xlbmd0aDsKKyAgICBtX2FwaS0+Z2xHZXRT
aGFkZXJTb3VyY2Uoc2hhZGVyLCBsb2dMZW5ndGgsICZyZXR1cm5lZExvZ0xlbmd0aCwgbG9nKTsK
KyAgICBBU1NFUlQobG9nTGVuZ3RoID09IHJldHVybmVkTG9nTGVuZ3RoICsgMSk7CisKKyAgICBT
dHJpbmcgcmVzID0gU3RyaW5nOjpmcm9tVVRGOChsb2csIHJldHVybmVkTG9nTGVuZ3RoKTsKKyAg
ICBmcmVlKGxvZyk7CisgICAgcmV0dXJuIHJlczsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4
dDNESW50ZXJuYWw6OmdldFN0cmluZyhHQzNEZW51bSBuYW1lKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIHJldHVybiBTdHJpbmcocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFy
Kj4obV9hcGktPmdsR2V0U3RyaW5nKG5hbWUpKSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RJbnRlcm5hbDo6Z2V0VGV4UGFyYW1ldGVyZnYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBw
bmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBtX2FwaS0+Z2xHZXRUZXhQYXJhbWV0ZXJmdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsR2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldFVu
aWZvcm1mdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rm
bG9hdCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmds
R2V0VW5pZm9ybWZ2KHByb2dyYW0sIGxvY2F0aW9uLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0VW5pZm9ybWl2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgbV9hcGktPmdsR2V0VW5pZm9ybWl2KHByb2dyYW0sIGxvY2F0aW9uLCB2
YWx1ZSk7Cit9CisKK0dDM0RpbnQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0VW5pZm9y
bUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgY2hhciogbmFtZSkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9hcGktPmdsR2V0VW5pZm9y
bUxvY2F0aW9uKHByb2dyYW0sIG5hbWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50
ZXJuYWw6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSwg
R0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2Fw
aS0+Z2xHZXRWZXJ0ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRl
eCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIG1fYXBpLT5nbEdldFZlcnRleEF0dHJpYml2KGluZGV4LCBwbmFtZSwgdmFs
dWUpOworfQorCitHQzNEc2l6ZWlwdHIgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Z2V0VmVy
dGV4QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB2b2lkKiBwb2ludGVyID0gMDsKKyAgICBtX2FwaS0+
Z2xHZXRWZXJ0ZXhBdHRyaWJQb2ludGVydihpbmRleCwgcG5hbWUsICZwb2ludGVyKTsKKyAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxHQzNEc2l6ZWlwdHI+KHBvaW50ZXIpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51
bSBtb2RlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5nbEhpbnQo
dGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbWFrZUNvbnRleHRD
dXJyZW50KCk7CisgICAgcmV0dXJuIG1fYXBpLT5nbElzQnVmZmVyKGJ1ZmZlcik7Cit9CisKK0dD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmlzRW5hYmxlZChHQzNEZW51bSBj
YXApCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIG1fYXBpLT5nbElz
RW5hYmxlZChjYXApOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzREludGVybmFs
Ojppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgZnJhbWVidWZmZXIpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgcmV0dXJuIG1fYXBpLT5nbElzRnJhbWVidWZmZXIoZnJh
bWVidWZmZXIpOworfQorCitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpp
c1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIHJldHVybiBtX2FwaS0+Z2xJc1Byb2dyYW0ocHJvZ3JhbSk7Cit9CisKK0dD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmlzUmVuZGVyYnVmZmVyKFBsYXRm
b3JtM0RPYmplY3QgcmVuZGVyYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIHJldHVybiBtX2FwaS0+Z2xJc1JlbmRlcmJ1ZmZlcihyZW5kZXJidWZmZXIpOworfQorCitH
QzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjppc1NoYWRlcihQbGF0Zm9ybTNE
T2JqZWN0IHNoYWRlcikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4g
bV9hcGktPmdsSXNTaGFkZXIoc2hhZGVyKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0M0RJbnRlcm5hbDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAg
ICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gbV9hcGktPmdsSXNUZXh0dXJlKHRl
eHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmxpbmVXaWR0aChH
QzNEZmxvYXQgd2lkdGgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGkt
PmdsTGluZVdpZHRoKHdpZHRoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpsaW5rUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsTGlua1Byb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cGl4ZWxTdG9yZWkoR0MzRGVudW0gcG5hbWUs
IEdDM0RpbnQgcGFyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGkt
PmdsUGl4ZWxTdG9yZWkocG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjpwb2x5Z29uT2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0
cykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xQb2x5Z29uT2Zm
c2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworCisgICAgbV9hcGktPmdsRmx1c2goKTsKKyAg
ICBtX2FwaS0+Z2xSZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwg
ZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6cmVuZGVyYnVmZmVy
U3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6
ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7
CisKKyAgICBtX2FwaS0+Z2xSZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnNhbXBsZUNvdmVyYWdlKEdDM0RjbGFtcGYgdmFsdWUsIEdDM0Rib29sZWFuIGludmVydCkKK3sK
KyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xTYW1wbGVDb3ZlcmFnZSh2
YWx1ZSwgaW52ZXJ0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpzY2lz
c29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWln
aHQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsU2Npc3Nvcih4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
OjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIsIGNvbnN0IGNoYXIqIHN0cmlu
ZykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBpbnQgbGVuZ3RoID0gc3RyaW5n
ID8gc3RybGVuKHN0cmluZykgOiAwOworICAgIG1fYXBpLT5nbFNoYWRlclNvdXJjZShzaGFkZXIs
IDEsICZzdHJpbmcsICZsZW5ndGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBHQzNEdWludCBtYXNr
KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5nbFN0ZW5jaWxGdW5j
KGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNEaW50
IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBt
X2FwaS0+Z2xTdGVuY2lsRnVuY1NlcGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6c3RlbmNpbE1hc2soR0MzRHVpbnQgbWFz
aykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xTdGVuY2lsTWFz
ayhtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpzdGVuY2lsTWFz
a1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0R1aW50IG1hc2spCit7CisgICAgbWFrZUNvbnRl
eHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsU3RlbmNpbE1hc2tTZXBhcmF0ZShmYWNlLCBtYXNr
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpzdGVuY2lsT3AoR0MzRGVu
dW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIG1ha2VDb250
ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5nbFN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3Mp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnN0ZW5jaWxPcFNlcGFyYXRl
KEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6
cGFzcykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xTdGVuY2ls
T3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCitib29sIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxl
dmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkg
aGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBj
b25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9h
cGktPmdsVGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhl
aWdodCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dGV4UGFyYW1ldGVyZihHQzNEZW51
bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsVGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1l
LCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dGV4UGFyYW1l
dGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQorewor
ICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5nbFRleFBhcmFtZXRlcmkodGFy
Z2V0LCBwbmFtZSwgcGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhv
ZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sK
KyAgICBtX2FwaS0+Z2xUZXhTdWJJbWFnZTJEKHRhcmdldCwgbGV2ZWwsIHhvZmZzZXQsIHlvZmZz
ZXQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZs
b2F0IHgpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsVW5pZm9y
bTFmKGxvY2F0aW9uLCB4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1
bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIHYp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsVW5pZm9ybTFmdihs
b2NhdGlvbiwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
dW5pZm9ybTFpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCkKK3sKKyAgICBtYWtlQ29udGV4
dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xVbmlmb3JtMWkobG9jYXRpb24sIHgpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0xaXYoR0MzRGludCBsb2NhdGlv
biwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQqIHYpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50
KCk7CisgICAgbV9hcGktPmdsVW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgdik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsK
KyAgICBtX2FwaS0+Z2xVbmlmb3JtMmYobG9jYXRpb24sIHgsIHkpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNp
emVpIHNpemUsIEdDM0RmbG9hdCogdikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICBtX2FwaS0+Z2xVbmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtMmkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGlu
dCB4LCBHQzNEaW50IHkpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGkt
PmdsVW5pZm9ybTJpKGxvY2F0aW9uLCB4LCB5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
REludGVybmFsOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBH
QzNEaW50KiB2KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5nbFVu
aWZvcm0yaXYobG9jYXRpb24sIHNpemUsIHYpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
SW50ZXJuYWw6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZs
b2F0IHksIEdDM0RmbG9hdCB6KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1f
YXBpLT5nbFVuaWZvcm0zZihsb2NhdGlvbiwgeCwgeSwgeik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTNmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkg
c2l6ZSwgR0MzRGZsb2F0KiB2KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1f
YXBpLT5nbFVuaWZvcm0zZnYobG9jYXRpb24sIHNpemUsIHYpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNESW50ZXJuYWw6OnVuaWZvcm0zaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRGludCB6KQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAg
IG1fYXBpLT5nbFVuaWZvcm0zaShsb2NhdGlvbiwgeCwgeSwgeik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6
ZWkgc2l6ZSwgR0MzRGludCogdikKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBt
X2FwaS0+Z2xVbmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtNGYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0
IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsVW5pZm9ybTRmKGxvY2F0aW9uLCB4LCB5LCB6
LCB3KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1bmlmb3JtNGZ2KEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEZmxvYXQqIHYpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsVW5pZm9ybTRmdihsb2NhdGlvbiwgc2l6
ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dW5pZm9ybTRpKEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQg
dykKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xVbmlmb3JtNGko
bG9jYXRpb24sIHgsIHksIHosIHcpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnVuaWZvcm00aXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0RpbnQq
IHYpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsVW5pZm9ybTRp
dihsb2NhdGlvbiwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5h
bDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWkgc2l6ZSwgR0Mz
RGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIG1fYXBpLT5nbFVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUs
IHRyYW5zcG9zZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6
OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpIHNpemUsIEdDM0Ri
b29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtYWtlQ29udGV4dEN1
cnJlbnQoKTsKKyAgICBtX2FwaS0+Z2xVbmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0
cmFuc3Bvc2UsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp1
bmlmb3JtTWF0cml4NGZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSBzaXplLCBHQzNEYm9v
bGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgbV9hcGktPmdsVW5pZm9ybU1hdHJpeDRmdihsb2NhdGlvbiwgc2l6ZSwgdHJh
bnNwb3NlLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6dXNl
UHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgbV9hcGktPmdsVXNlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzREludGVybmFsOjp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5nbFZhbGlk
YXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFs
Ojp2ZXJ0ZXhBdHRyaWIxZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsVmVydGV4QXR0cmliMWYoaW5kZXgsIHgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnZlcnRleEF0dHJpYjFmdihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgbV9hcGktPmdsVmVydGV4QXR0cmliMWZ2KGluZGV4LCB2YWx1ZXMpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50
IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpCit7CisgICAgbWFrZUNvbnRleHRDdXJy
ZW50KCk7CisgICAgbV9hcGktPmdsVmVydGV4QXR0cmliMmYoaW5kZXgsIHgsIHkpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnZlcnRleEF0dHJpYjJmdihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7Cisg
ICAgbV9hcGktPmdsVmVydGV4QXR0cmliMmZ2KGluZGV4LCB2YWx1ZXMpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIG1fYXBpLT5nbFZlcnRleEF0dHJpYjNmKGluZGV4LCB4LCB5LCB6KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp2ZXJ0ZXhBdHRyaWIzZnYoR0Mz
RHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworICAgIG1fYXBpLT5nbFZlcnRleEF0dHJpYjNmdihpbmRleCwgdmFsdWVzKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjp2ZXJ0ZXhBdHRyaWI0ZihHQzNEdWludCBp
bmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeiwgR0MzRGZsb2F0IHcp
Cit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsVmVydGV4QXR0cmli
NGYoaW5kZXgsIHgsIHksIHosIHcpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWw6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0KiB2YWx1ZXMpCit7
CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsVmVydGV4QXR0cmliNGZ2
KGluZGV4LCB2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnZl
cnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0g
dHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0
ciBvZmZzZXQpCit7CisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisKKyAgICBpZiAobV9ib3Vu
ZEFycmF5QnVmZmVyIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIG1fYXBpLT5nbFZlcnRl
eEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5vcm1hbGl6ZWQsIHN0cmlkZSwgcmVp
bnRlcnByZXRfY2FzdDxHTHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob2Zmc2V0KSkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OnZpZXdwb3J0KEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgbWFr
ZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsVmlld3BvcnQoeCwgeSwgd2lkdGgsIGhl
aWdodCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6
Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBQbGF0Zm9y
bTNET2JqZWN0IG87CisgICAgbV9hcGktPmdsR2VuQnVmZmVycygxLCAmbyk7CisgICAgcmV0dXJu
IG87Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3Jl
YXRlRnJhbWVidWZmZXIoKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIFBsYXRm
b3JtM0RPYmplY3QgbyA9IDA7CisgICAgbV9hcGktPmdsR2VuRnJhbWVidWZmZXJzKDEsICZvKTsK
KyAgICByZXR1cm4gbzsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRElu
dGVybmFsOjpjcmVhdGVQcm9ncmFtKCkKK3sKKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAg
ICByZXR1cm4gbV9hcGktPmdsQ3JlYXRlUHJvZ3JhbSgpOworfQorCitQbGF0Zm9ybTNET2JqZWN0
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAg
bWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBvOworICAgIG1fYXBp
LT5nbEdlblJlbmRlcmJ1ZmZlcnMoMSwgJm8pOworICAgIHJldHVybiBvOworfQorCitQbGF0Zm9y
bTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmNyZWF0ZVNoYWRlcihHQzNEZW51
bSBzaGFkZXJUeXBlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIHJldHVybiBt
X2FwaS0+Z2xDcmVhdGVTaGFkZXIoc2hhZGVyVHlwZSk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3Qg
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlVGV4dHVyZSgpCit7CisgICAgbWFrZUNv
bnRleHRDdXJyZW50KCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBvOworICAgIG1fYXBpLT5nbEdl
blRleHR1cmVzKDEsICZvKTsKKyAgICByZXR1cm4gbzsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzREludGVybmFsOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7Cisg
ICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgbV9hcGktPmdsRGVsZXRlQnVmZmVycygxLCAm
YnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzREludGVybmFsOjpkZWxldGVGcmFt
ZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGZyYW1lYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0
Q3VycmVudCgpOworICAgIG1fYXBpLT5nbERlbGV0ZUZyYW1lYnVmZmVycygxLCAmZnJhbWVidWZm
ZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmRlbGV0ZVByb2dyYW0o
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwor
ICAgIG1fYXBpLT5nbERlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgcmVu
ZGVyYnVmZmVyKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5nbERl
bGV0ZVJlbmRlcmJ1ZmZlcnMoMSwgJnJlbmRlcmJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0RJbnRlcm5hbDo6ZGVsZXRlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQor
eworICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOworICAgIG1fYXBpLT5nbERlbGV0ZVNoYWRlcihz
aGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmRlbGV0ZVRleHR1
cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQoreworICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OworICAgIG1fYXBpLT5nbERlbGV0ZVRleHR1cmVzKDEsICZ0ZXh0dXJlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzREludGVybmFsOjpzeW50aGVzaXplR0xFcnJvcihHQzNEZW51bSBlcnJv
cikKK3sKKyAgICBtX3N5bnRoZXRpY0Vycm9ycy5hZGQoZXJyb3IpOworfQorCitFeHRlbnNpb25z
M0QqIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw6OmdldEV4dGVuc2lvbnMoKQoreworICAgIHJl
dHVybiAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwv
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOGQ2MjRh
YzUxYWVhZTA4YWY4OGNkMzRhOWE2ZTcxNzQ1OTg3ODI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwuaApAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMSBT
YW1zdW5nIEVsZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorKi8KKworI2lmbmRlZiBHcmFwaGljc0NvbnRleHQzREludGVybmFs
X2gKKyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbF9oCisKKyNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRC5oIgorCisjaW5jbHVkZSA8RXZhc19HTC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwgeworcHVibGljOgorICAg
IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKTsKKyAgICB+R3JhcGhpY3NDb250ZXh0M0RJbnRl
cm5hbCgpOworCisgICAgYm9vbCBpbml0aWFsaXplKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJzLCBIb3N0V2luZG93KiwgYm9vbCByZW5kZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0
KTsKKworICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgcGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCgpIGNvbnN0OworCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorICAgIFBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKKyNlbmRpZgorCisgICAgYm9vbCBt
YWtlQ29udGV4dEN1cnJlbnQoKTsKKworICAgIGJvb2wgaXNHTEVTMkNvbXBsaWFudCgpIGNvbnN0
OworCisgICAgdm9pZCBhY3RpdmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpOworICAgIHZvaWQg
YXR0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBz
aGFkZXIpOworICAgIHZvaWQgYmluZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QsIEdD
M0R1aW50IGluZGV4LCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB2b2lkIGJpbmRCdWZmZXIoR0Mz
RGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIGJpbmRGcmFtZWJ1ZmZl
cihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQgYmluZFJlbmRl
cmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQgYmlu
ZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIGJs
ZW5kQ29sb3IoR0MzRGNsYW1wZiByZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1
ZSwgR0MzRGNsYW1wZiBhbHBoYSk7CisgICAgdm9pZCBibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1v
ZGUpOworICAgIHZvaWQgYmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdD
M0RlbnVtIG1vZGVBbHBoYSk7CisgICAgdm9pZCBibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3Rvciwg
R0MzRGVudW0gZGZhY3Rvcik7CisgICAgdm9pZCBibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBz
cmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0MzRGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFs
cGhhKTsKKworICAgIHZvaWQgYnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0
ciwgY29uc3Qgdm9pZCogZGF0YSwgR0MzRGVudW0gdXNhZ2UpOworICAgIHZvaWQgYnVmZmVyU3Vi
RGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnRwdHIgb2Zmc2V0LCBHQzNEc2l6ZWlwdHIsIGNv
bnN0IHZvaWQqIGRhdGEpOworCisgICAgR0MzRGVudW0gY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhH
QzNEZW51bSB0YXJnZXQpOworICAgIHZvaWQgY2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spOworICAg
IHZvaWQgY2xlYXJDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNs
YW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKTsKKyAgICB2b2lkIGNsZWFyRGVwdGgoR0MzRGNs
YW1wZiBkZXB0aCk7CisgICAgdm9pZCBjbGVhclN0ZW5jaWwoR0MzRGludCBzKTsKKyAgICB2b2lk
IGNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9vbGVh
biBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSk7CisgICAgdm9pZCBjb21waWxlU2hhZGVyKFBsYXRm
b3JtM0RPYmplY3QpOworCisgICAgdm9pZCBjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQs
IEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0Rp
bnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcik7
CisgICAgdm9pZCBjb3B5VGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2
ZWwsIEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lkIGN1bGxGYWNl
KEdDM0RlbnVtIG1vZGUpOworICAgIHZvaWQgZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpOworICAg
IHZvaWQgZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZsYWcpOworICAgIHZvaWQgZGVwdGhSYW5nZShH
QzNEY2xhbXBmIHpOZWFyLCBHQzNEY2xhbXBmIHpGYXIpOworICAgIHZvaWQgZGV0YWNoU2hhZGVy
KFBsYXRmb3JtM0RPYmplY3QsIFBsYXRmb3JtM0RPYmplY3QpOworICAgIHZvaWQgZGlzYWJsZShH
QzNEZW51bSBjYXApOworICAgIHZvaWQgZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50
IGluZGV4KTsKKyAgICB2b2lkIGRyYXdBcnJheXMoR0MzRGVudW0gbW9kZSwgR0MzRGludCBmaXJz
dCwgR0MzRHNpemVpIGNvdW50KTsKKyAgICB2b2lkIGRyYXdFbGVtZW50cyhHQzNEZW51bSBtb2Rl
LCBHQzNEc2l6ZWkgY291bnQsIEdDM0RlbnVtIHR5cGUsIEdDM0RpbnRwdHIgb2Zmc2V0KTsKKwor
ICAgIHZvaWQgZW5hYmxlKEdDM0RlbnVtIGNhcCk7CisgICAgdm9pZCBlbmFibGVWZXJ0ZXhBdHRy
aWJBcnJheShHQzNEdWludCBpbmRleCk7CisgICAgdm9pZCBmaW5pc2goKTsKKyAgICB2b2lkIGZs
dXNoKCk7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQs
IEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZv
cm0zRE9iamVjdCk7CisgICAgdm9pZCBmcmFtZWJ1ZmZlclRleHR1cmUyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHRleHRhcmdldCwgUGxhdGZvcm0zRE9i
amVjdCwgR0MzRGludCBsZXZlbCk7CisgICAgdm9pZCBmcm9udEZhY2UoR0MzRGVudW0gbW9kZSk7
CisgICAgdm9pZCBnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpOworCisgICAgYm9vbCBn
ZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwg
QWN0aXZlSW5mbyYpOworICAgIGJvb2wgZ2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJik7CisgICAgdm9pZCBnZXRBdHRh
Y2hlZFNoYWRlcnMoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEc2l6ZWkgbWF4Q291bnQs
IEdDM0RzaXplaSogY291bnQsIFBsYXRmb3JtM0RPYmplY3QqIHNoYWRlcnMpOworICAgIEdDM0Rp
bnQgZ2V0QXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCwgY29uc3QgY2hhciogbmFtZSk7
CisgICAgdm9pZCBnZXRCb29sZWFudihHQzNEZW51bSBwbmFtZSwgR0MzRGJvb2xlYW4qIHZhbHVl
KTsKKyAgICB2b2lkIGdldEJ1ZmZlclBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRDo6QXR0cmli
dXRlcyBnZXRDb250ZXh0QXR0cmlidXRlcygpOworICAgIEdDM0RlbnVtIGdldEVycm9yKCk7Cisg
ICAgdm9pZCBnZXRGbG9hdHYoR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOworICAg
IHZvaWQgZ2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOwor
ICAgIHZvaWQgZ2V0SW50ZWdlcnYoR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKTsKKyAg
ICB2b2lkIGdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RlbnVtIHBu
YW1lLCBHQzNEaW50KiB2YWx1ZSk7CisgICAgU3RyaW5nIGdldFByb2dyYW1JbmZvTG9nKFBsYXRm
b3JtM0RPYmplY3QpOworICAgIHZvaWQgZ2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVu
dW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpOworICAgIHZvaWQgZ2V0
U2hhZGVyaXYoUGxhdGZvcm0zRE9iamVjdCwgR0MzRGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVl
KTsKKyAgICBTdHJpbmcgZ2V0U2hhZGVySW5mb0xvZyhQbGF0Zm9ybTNET2JqZWN0KTsKKworICAg
IFN0cmluZyBnZXRTaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgU3RyaW5nIGdl
dFN0cmluZyhHQzNEZW51bSBuYW1lKTsKKyAgICB2b2lkIGdldFRleFBhcmFtZXRlcmZ2KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOworICAgIHZvaWQg
Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpOworICAgIHZvaWQgZ2V0VW5pZm9ybWZ2KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2YWx1ZSk7CisgICAgdm9pZCBnZXRVbmlm
b3JtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50
KiB2YWx1ZSk7CisgICAgR0MzRGludCBnZXRVbmlmb3JtTG9jYXRpb24oUGxhdGZvcm0zRE9iamVj
dCwgY29uc3QgY2hhciogbmFtZSk7CisgICAgdm9pZCBnZXRWZXJ0ZXhBdHRyaWJmdihHQzNEdWlu
dCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCogdmFsdWUpOworICAgIHZvaWQgZ2V0
VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2
YWx1ZSk7CisgICAgR0MzRHNpemVpcHRyIGdldFZlcnRleEF0dHJpYk9mZnNldChHQzNEdWludCBp
bmRleCwgR0MzRGVudW0gcG5hbWUpOworCisgICAgdm9pZCBoaW50KEdDM0RlbnVtIHRhcmdldCwg
R0MzRGVudW0gbW9kZSk7CisgICAgR0MzRGJvb2xlYW4gaXNCdWZmZXIoUGxhdGZvcm0zRE9iamVj
dCk7CisgICAgR0MzRGJvb2xlYW4gaXNFbmFibGVkKEdDM0RlbnVtIGNhcCk7CisgICAgR0MzRGJv
b2xlYW4gaXNGcmFtZWJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICBHQzNEYm9vbGVhbiBp
c1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7CisgICAgR0MzRGJvb2xlYW4gaXNSZW5kZXJidWZm
ZXIoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgR0MzRGJvb2xlYW4gaXNTaGFkZXIoUGxhdGZvcm0z
RE9iamVjdCk7CisgICAgR0MzRGJvb2xlYW4gaXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QpOwor
ICAgIHZvaWQgbGluZVdpZHRoKEdDM0RmbG9hdCk7CisgICAgdm9pZCBsaW5rUHJvZ3JhbShQbGF0
Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIHBpeGVsU3RvcmVpKEdDM0RlbnVtIHBuYW1lLCBHQzNE
aW50IHBhcmFtKTsKKyAgICB2b2lkIHBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0Mz
RGZsb2F0IHVuaXRzKTsKKworICAgIHZvaWQgcmVhZFBpeGVscyhHQzNEaW50IHgsIEdDM0RpbnQg
eSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIHZvaWQqIGRhdGEpOworCisgICAgdm9pZCByZW5kZXJidWZmZXJTdG9yYWdl
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCk7CisgICAgdm9pZCBzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBm
IHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpOworICAgIHZvaWQgc2Npc3NvcihHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKyAgICB2b2lk
IHNoYWRlclNvdXJjZShQbGF0Zm9ybTNET2JqZWN0LCBjb25zdCBjaGFyKiBzdHJpbmcpOworICAg
IHZvaWQgc3RlbmNpbEZ1bmMoR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1h
c2spOworICAgIHZvaWQgc3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51
bSBmdW5jLCBHQzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsTWFz
ayhHQzNEdWludCBtYXNrKTsKKyAgICB2b2lkIHN0ZW5jaWxNYXNrU2VwYXJhdGUoR0MzRGVudW0g
ZmFjZSwgR0MzRHVpbnQgbWFzayk7CisgICAgdm9pZCBzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwg
R0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKTsKKyAgICB2b2lkIHN0ZW5jaWxPcFNlcGFy
YXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51
bSB6cGFzcyk7CisKKyAgICBib29sIHRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50
IGxldmVsLCBHQzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBl
LCBjb25zdCB2b2lkKiBwaXhlbHMpOworICAgIHZvaWQgdGV4UGFyYW1ldGVyZihHQzNEZW51bSB0
YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFyYW0pOworICAgIHZvaWQgdGV4UGFy
YW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKTsK
KyAgICB2b2lkIHRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6
ZWkgaGVpZ2h0LCBHQzNEZW51bSBmb3JtYXQsIEdDM0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBp
eGVscyk7CisKKyAgICB2b2lkIHVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQg
eCk7CisgICAgdm9pZCB1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0Mz
RGZsb2F0KiB2KTsKKyAgICB2b2lkIHVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50
IHgpOworICAgIHZvaWQgdW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEc2l6ZWksIEdD
M0RpbnQqIHYpOworICAgIHZvaWQgdW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9h
dCB4LCBmbG9hdCB5KTsKKyAgICB2b2lkIHVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RHNpemVpLCBHQzNEZmxvYXQqIHYpOworICAgIHZvaWQgdW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RpbnQgeCwgR0MzRGludCB5KTsKKyAgICB2b2lkIHVuaWZvcm0yaXYoR0MzRGludCBs
b2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEaW50KiB2KTsKKyAgICB2b2lkIHVuaWZvcm0zZihHQzNE
aW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KTsKKyAg
ICB2b2lkIHVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEZmxvYXQq
IHYpOworICAgIHZvaWQgdW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0Mz
RGludCB5LCBHQzNEaW50IHopOworICAgIHZvaWQgdW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEc2l6ZWksIEdDM0RpbnQqIHYpOworICAgIHZvaWQgdW5pZm9ybTRmKEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3
KTsKKyAgICB2b2lkIHVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNE
ZmxvYXQqIHYpOworICAgIHZvaWQgdW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQg
eCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdyk7CisgICAgdm9pZCB1bmlmb3JtNGl2
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGludCogdik7CisgICAgdm9pZCB1bmlm
b3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RzaXplaSwgR0MzRGJvb2xlYW4gdHJh
bnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlKTsKKyAgICB2b2lkIHVuaWZvcm1NYXRyaXgzZnYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRHNpemVpLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9h
dCogdmFsdWUpOworICAgIHZvaWQgdW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEc2l6ZWksIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSk7CisKKyAg
ICB2b2lkIHVzZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdm9pZCB2YWxpZGF0ZVBy
b2dyYW0oUGxhdGZvcm0zRE9iamVjdCk7CisKKyAgICB2b2lkIHZlcnRleEF0dHJpYjFmKEdDM0R1
aW50IGluZGV4LCBHQzNEZmxvYXQgeCk7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIxZnYoR0MzRHVp
bnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjJmKEdD
M0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpOworICAgIHZvaWQgdmVydGV4
QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcyk7CisgICAgdm9pZCB2
ZXJ0ZXhBdHRyaWIzZihHQzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBH
QzNEZmxvYXQgeik7CisgICAgdm9pZCB2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdD
M0RmbG9hdCogdmFsdWVzKTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4
LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdyk7Cisg
ICAgdm9pZCB2ZXJ0ZXhBdHRyaWI0ZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVz
KTsKKyAgICB2b2lkIHZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQg
c2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpOwor
CisgICAgdm9pZCB2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0KTsKKworICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlQnVmZmVy
KCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVGcmFtZWJ1ZmZlcigpOworICAgIFBsYXRm
b3JtM0RPYmplY3QgY3JlYXRlUHJvZ3JhbSgpOworICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRl
UmVuZGVyYnVmZmVyKCk7CisgICAgUGxhdGZvcm0zRE9iamVjdCBjcmVhdGVTaGFkZXIoR0MzRGVu
dW0pOworICAgIFBsYXRmb3JtM0RPYmplY3QgY3JlYXRlVGV4dHVyZSgpOworCisgICAgdm9pZCBk
ZWxldGVCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdm9pZCBkZWxldGVGcmFtZWJ1ZmZl
cihQbGF0Zm9ybTNET2JqZWN0KTsKKyAgICB2b2lkIGRlbGV0ZVByb2dyYW0oUGxhdGZvcm0zRE9i
amVjdCk7CisgICAgdm9pZCBkZWxldGVSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCk7Cisg
ICAgdm9pZCBkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCk7CisgICAgdm9pZCBkZWxldGVU
ZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QpOworCisgICAgdm9pZCBzeW50aGVzaXplR0xFcnJvcihH
QzNEZW51bSBlcnJvcik7CisKKyAgICBFeHRlbnNpb25zM0QqIGdldEV4dGVuc2lvbnMoKTsKKwor
cHJpdmF0ZToKKyAgICBib29sIGNyZWF0ZVN1cmZhY2UoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGJv
b2wgcmVuZGVyRGlyZWN0bHlUb0V2YXNHTE9iamVjdCk7CisKKyAgICBHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBtX2F0dHJpYnV0ZXM7CisKKyAgICBQbGF0Zm9ybTNET2JqZWN0IG1fYm91
bmRGQk87CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX2JvdW5kVGV4dHVyZTsKKyAgICBQbGF0Zm9y
bTNET2JqZWN0IG1fYm91bmRBcnJheUJ1ZmZlcjsKKworICAgIExpc3RIYXNoU2V0PEdDM0RlbnVt
PiBtX3N5bnRoZXRpY0Vycm9yczsKKworICAgIEV2YXNfR0wqIG1fZXZhc0dMOworICAgIEV2YXNf
R0xfQ29udGV4dCogbV9jb250ZXh0OworICAgIEV2YXNfR0xfU3VyZmFjZSogbV9zdXJmYWNlOwor
ICAgIEV2YXNfR0xfQVBJKiBtX2FwaTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEdyYXBoaWNzTGF5ZXJFZmxfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97745</attachid>
            <date>2011-06-19 22:03:22 -0700</date>
            <delta_ts>2011-06-21 22:14:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62709-20110620140404.patch</filename>
            <type>text/plain</type>
            <size>33020</size>
            <attacher name="Hyowon Kim">hw1008.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkyMjQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBlN2U2MjdjOWQwNmE5OTYy
MGZkMjQwYjlkZDMyYTI4NDY5MDdlOWQ5Li5iYzA1ZjhhYjI4Njk3MmQ5OWIyOTFlMThjMjAxNWFh
NmU3MGQ1NzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcwIEBACisyMDExLTA2LTE5ICBIeW93
b24gS2ltICA8aHcxMDA4LmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbRUZMXSBBZGQgR3JhcGhpY3NDb250ZXh0M0RFZmwg
Zm9yIFdlYkdMIGFuZCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI3MDkKKworICAgICAgICBBZGQgR3JhcGhp
Y3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gZm9yIEVmbCBwb3J0LgorICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRCBkZWxlZ2F0ZXMgdG8gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJy
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxp
YW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Y2xlYXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xl
YXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVu
Y2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0Vs
ZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpp
c0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1By
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6cG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVu
Y2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1
bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNp
bE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNr
U2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxP
cCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKToKKwogMjAxMS0wNi0x
OSAgVW5hIFNhYm92aWMgIDx1bmEuc2Fib3ZpY0BwYWxtLmNvbT4KIAogICAgICAgICBSZXZpZXdl
ZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMy
Zjc0MjdlNTE2ZDY0ZjIwZjJiMzM1NDQxM2U2OTNmYmFiOGNhNzQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RF
ZmwuY3BwCkBAIC0wLDAgKzEsODMzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAwOS0yMDEx
IFNhbXN1bmcgRWxlY3Ryb25pY3MKKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKworICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgICBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgICAgQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFC
TEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVybmFsLmgiCisKKyNp
bmNsdWRlICJJbWFnZURhdGEuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1Bhc3NS
ZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGUoR3JhcGhp
Y3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIFJl
bmRlclN0eWxlIHJlbmRlclN0eWxlKQoreworICAgIGJvb2wgcmVuZGVyRGlyZWN0bHlUb0V2YXNH
TE9iamVjdCA9IChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykgPyB0
cnVlIDogZmFsc2U7CisKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbD4gaW50
ZXJuYWwgPSBhZG9wdFB0cihuZXcgR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbCgpKTsKKyAgICBp
ZiAoIWludGVybmFsLT5pbml0aWFsaXplKGF0dHJzLCBob3N0V2luZG93LCByZW5kZXJEaXJlY3Rs
eVRvRXZhc0dMT2JqZWN0KSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBSZWZQdHI8R3JhcGhp
Y3NDb250ZXh0M0Q+IGNvbnRleHQgPSBhZG9wdFJlZihuZXcgR3JhcGhpY3NDb250ZXh0M0QoYXR0
cnMsIGhvc3RXaW5kb3csIHJlbmRlckRpcmVjdGx5VG9FdmFzR0xPYmplY3QpKTsKKyAgICBjb250
ZXh0LT5tX2ludGVybmFsID0gaW50ZXJuYWwucmVsZWFzZSgpOworICAgIHJldHVybiBjb250ZXh0
LnJlbGVhc2UoKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdy
YXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93
LCBib29sIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2luZG93KQorICAgIDogbV9jdXJyZW50V2lkdGgo
MCkKKyAgICAsIG1fY3VycmVudEhlaWdodCgwKQorICAgICwgbV9pc1Jlc291cmNlU2FmZShmYWxz
ZSkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCgpCit7Cit9
CisKK1BsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3Jt
R3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAoreworICAgIHJldHVybiBtX2ludGVybmFsLT5wbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dDNEKCk7Cit9CisKKyNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcpCitQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXllcigp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRp
ZgorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQoreworICAg
IG1faW50ZXJuYWwtPm1ha2VDb250ZXh0Q3VycmVudCgpOworfQorCitib29sIEdyYXBoaWNzQ29u
dGV4dDNEOjppc0dMRVMyQ29tcGxpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5h
bC0+aXNHTEVTMkNvbXBsaWFudCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphY3Rp
dmVUZXh0dXJlKEdDM0RlbnVtIHRleHR1cmUpCit7CisgICAgbV9pbnRlcm5hbC0+YWN0aXZlVGV4
dHVyZSh0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YXR0YWNoU2hhZGVy
KFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7Cisg
ICAgbV9pbnRlcm5hbC0+YXR0YWNoU2hhZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbihQbGF0Zm9ybTNET2JqZWN0IHBy
b2dyYW0sIEdDM0R1aW50IGluZGV4LCBjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgbV9pbnRl
cm5hbC0+YmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIGluZGV4LCBuYW1lLnV0ZjgoKS5kYXRh
KCkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kQnVmZmVyKEdDM0RlbnVtIHRh
cmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+YmluZEJ1
ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRG
cmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQorewor
ICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5iaW5kUmVu
ZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1
cmUpCit7CisgICAgbV9pbnRlcm5hbC0+YmluZFRleHR1cmUodGFyZ2V0LCB0ZXh0dXJlKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcihHQzNEY2xhbXBmIHJlZCwgR0Mz
RGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNEY2xhbXBmIGFscGhhKQoreworICAg
IG1faW50ZXJuYWwtPmJsZW5kQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uKEdDM0RlbnVtIG1vZGUpCit7Cisg
ICAgbV9pbnRlcm5hbC0+YmxlbmRFcXVhdGlvbihtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0RlbnVtIG1vZGVSR0IsIEdDM0RlbnVt
IG1vZGVBbHBoYSkKK3sKKyAgICBtX2ludGVybmFsLT5ibGVuZEVxdWF0aW9uU2VwYXJhdGUobW9k
ZVJHQiwgbW9kZUFscGhhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRGdW5j
KEdDM0RlbnVtIHNmYWN0b3IsIEdDM0RlbnVtIGRmYWN0b3IpCit7CisgICAgbV9pbnRlcm5hbC0+
YmxlbmRGdW5jKHNmYWN0b3IsIGRmYWN0b3IpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpibGVuZEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBzcmNSR0IsIEdDM0RlbnVtIGRzdFJHQiwgR0Mz
RGVudW0gc3JjQWxwaGEsIEdDM0RlbnVtIGRzdEFscGhhKQoreworICAgIG1faW50ZXJuYWwtPmJs
ZW5kRnVuY1NlcGFyYXRlKHNyY1JHQiwgZHN0UkdCLCBzcmNBbHBoYSwgZHN0QWxwaGEpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0Mz
RHNpemVpcHRyIHNpemUsIEdDM0RlbnVtIHVzYWdlKQoreworICAgIG1faW50ZXJuYWwtPmJ1ZmZl
ckRhdGEodGFyZ2V0LCBzaXplLCAvKiBkYXRhICovIDAsIHVzYWdlKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBz
aXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkKK3sKKyAgICBtX2ludGVybmFs
LT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludHB0ciBv
ZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAgIG1faW50
ZXJuYWwtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNpemUsIGRhdGEpOworfQorCitH
QzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhHQzNEZW51
bSB0YXJnZXQpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmNoZWNrRnJhbWVidWZmZXJTdGF0
dXModGFyZ2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXIoR0MzRGJpdGZp
ZWxkIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+Y2xlYXIobWFzayk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiByLCBHQzNEY2xhbXBmIGcsIEdD
M0RjbGFtcGYgYiwgR0MzRGNsYW1wZiBhKQoreworICAgIG1faW50ZXJuYWwtPmNsZWFyQ29sb3Io
ciwgZywgYiwgYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyRGVwdGgoR0Mz
RGNsYW1wZiBkZXB0aCkKK3sKKyAgICBtX2ludGVybmFsLT5jbGVhckRlcHRoKGRlcHRoKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVuY2lsKEdDM0RpbnQgcykKK3sKKyAg
ICBtX2ludGVybmFsLT5jbGVhclN0ZW5jaWwocyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmNvbG9yTWFzayhHQzNEYm9vbGVhbiByZWQsIEdDM0Rib29sZWFuIGdyZWVuLCBHQzNEYm9v
bGVhbiBibHVlLCBHQzNEYm9vbGVhbiBhbHBoYSkKK3sKKyAgICBtX2ludGVybmFsLT5jb2xvck1h
c2socmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojpjb21waWxlU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIG1faW50ZXJu
YWwtPmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Y29weVRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEZW51bSBp
bnRlcm5hbGZvcm1hdCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGludCBib3JkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+Y29weVRl
eEltYWdlMkQodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHgsIHksIHdpZHRoLCBoZWln
aHQsIGJvcmRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhTdWJJbWFn
ZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4b2Zmc2V0LCBHQzNE
aW50IHlvZmZzZXQsIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+Y29weVRleFN1YkltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmN1bGxGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAgbV9p
bnRlcm5hbC0+Y3VsbEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRl
cHRoRnVuYyhHQzNEZW51bSBmdW5jKQoreworICAgIG1faW50ZXJuYWwtPmRlcHRoRnVuYyhmdW5j
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKEdDM0Rib29sZWFuIGZs
YWcpCit7CisgICAgbV9pbnRlcm5hbC0+ZGVwdGhNYXNrKGZsYWcpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZXB0aFJhbmdlKEdDM0RjbGFtcGYgek5lYXIsIEdDM0RjbGFtcGYgekZh
cikKK3sKKyAgICBtX2ludGVybmFsLT5kZXB0aFJhbmdlKHpOZWFyLCB6RmFyKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGV0YWNoU2hhZGVyKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+ZGV0YWNoU2hh
ZGVyKHByb2dyYW0sIHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRpc2Fi
bGUoR0MzRGVudW0gY2FwKQoreworICAgIG1faW50ZXJuYWwtPmRpc2FibGUoY2FwKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50
IGluZGV4KQoreworICAgIG1faW50ZXJuYWwtPmRpc2FibGVWZXJ0ZXhBdHRyaWJBcnJheShpbmRl
eCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRyYXdBcnJheXMoR0MzRGVudW0gbW9k
ZSwgR0MzRGludCBmaXJzdCwgR0MzRHNpemVpIGNvdW50KQoreworICAgIG1faW50ZXJuYWwtPmRy
YXdBcnJheXMobW9kZSwgZmlyc3QsIGNvdW50KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZHJhd0VsZW1lbnRzKEdDM0RlbnVtIG1vZGUsIEdDM0RzaXplaSBjb3VudCwgR0MzRGVudW0g
dHlwZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgbV9pbnRlcm5hbC0+ZHJhd0VsZW1lbnRz
KG1vZGUsIGNvdW50LCB0eXBlLCBvZmZzZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjplbmFibGUoR0MzRGVudW0gY2FwKQoreworICAgIG1faW50ZXJuYWwtPmVuYWJsZShjYXApOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjplbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShHQzNE
dWludCBpbmRleCkKK3sKKyAgICBtX2ludGVybmFsLT5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShp
bmRleCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZpbmlzaCgpCit7CisgICAgbV9p
bnRlcm5hbC0+ZmluaXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKCkK
K3sKKyAgICBtX2ludGVybmFsLT5mbHVzaCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFj
aG1lbnQsIEdDM0RlbnVtIHJlbmRlcmJ1ZmZlcnRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZm
ZXIpCit7CisgICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJSZW5kZXJidWZmZXIodGFyZ2V0LCBh
dHRhY2htZW50LCByZW5kZXJidWZmZXJ0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyVGV4dHVyZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gYXR0YWNobWVudCwgR0MzRGVudW0gdGV4dGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHRleHR1
cmUsIEdDM0RpbnQgbGV2ZWwpCit7CisgICAgbV9pbnRlcm5hbC0+ZnJhbWVidWZmZXJUZXh0dXJl
MkQodGFyZ2V0LCBhdHRhY2htZW50LCB0ZXh0YXJnZXQsIHRleHR1cmUsIGxldmVsKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJvbnRGYWNlKEdDM0RlbnVtIG1vZGUpCit7CisgICAg
bV9pbnRlcm5hbC0+ZnJvbnRGYWNlKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZW5lcmF0ZU1pcG1hcChHQzNEZW51bSB0YXJnZXQpCit7CisgICAgbV9pbnRlcm5hbC0+Z2Vu
ZXJhdGVNaXBtYXAodGFyZ2V0KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0
aXZlQXR0cmliKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgsIEFjdGl2
ZUluZm8mIGluZm8pCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldEFjdGl2ZUF0dHJpYihw
cm9ncmFtLCBpbmRleCwgaW5mbyk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEFj
dGl2ZVVuaWZvcm0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0
aXZlSW5mbyYgaW5mbykKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0QWN0aXZlVW5pZm9y
bShwcm9ncmFtLCBpbmRleCwgaW5mbyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEF0dGFjaGVkU2hhZGVycyhQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0RzaXplaSBtYXhD
b3VudCwgR0MzRHNpemVpKiBjb3VudCwgUGxhdGZvcm0zRE9iamVjdCogc2hhZGVycykKK3sKKyAg
ICBtX2ludGVybmFsLT5nZXRBdHRhY2hlZFNoYWRlcnMocHJvZ3JhbSwgbWF4Q291bnQsIGNvdW50
LCBzaGFkZXJzKTsKK30KKworaW50IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlv
bihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBy
ZXR1cm4gbV9pbnRlcm5hbC0+Z2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYoR0MzRGVu
dW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5nZXRCb29s
ZWFudihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRCdWZm
ZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2
YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBu
YW1lLCB2YWx1ZSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCit7CisgICAgcmV0dXJuIG1faW50ZXJu
YWwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7Cit9CisKK0dDM0RlbnVtIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRFcnJvcigpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldEVycm9yKCk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dihHQzNEZW51bSBwYXJhbU5hbWUs
IEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+Z2V0RmxvYXR2KHBhcmFtTmFt
ZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGcmFtZWJ1ZmZlckF0
dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIGF0dGFjaG1lbnQs
IEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5nZXRG
cmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQsIGF0dGFjaG1lbnQsIHBuYW1l
LCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KEdDM0Rl
bnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5nZXRJbnRlZ2Vy
dihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFt
aXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFs
dWUpCit7CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KHByb2dyYW0sIHBuYW1lLCB2YWx1
ZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbUluZm9Mb2coUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRQcm9n
cmFtSW5mb0xvZyhwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0Mz
RGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVy
aXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcG5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPmdldFNoYWRlcml2KHNoYWRlciwgcG5hbWUs
IHZhbHVlKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJJbmZvTG9n
KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRT
aGFkZXJJbmZvTG9nKHNoYWRlcik7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIHJldHVybiBtX2lu
dGVybmFsLT5nZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5h
bC0+Z2V0U3RyaW5nKG5hbWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQ
YXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQqIHZh
bHVlKQoreworICAgIG1faW50ZXJuYWwtPmdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcG5hbWUs
IHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYo
R0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAg
bV9pbnRlcm5hbC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50
ZXJuYWwtPmdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFt
LCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5n
ZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKworR0MzRGludCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRVbmlm
b3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPmdldFZlcnRleEF0
dHJpYmZ2KGluZGV4LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcG5hbWUsIEdDM0Rp
bnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPmdldFZlcnRleEF0dHJpYml2KGluZGV4LCBw
bmFtZSwgdmFsdWUpOworfQorCitsb25nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRy
aWJPZmZzZXQoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lKQoreworICAgIHJldHVybiBt
X2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBuYW1lKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6aGludChHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIG1vZGUp
Cit7CisgICAgbV9pbnRlcm5hbC0+aGludCh0YXJnZXQsIG1vZGUpOworfQorCitHQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHQzRDo6aXNCdWZmZXIoUGxhdGZvcm0zRE9iamVjdCBvYmopCit7Cisg
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzQnVmZmVyKG9iaik7Cit9CisKK0dDM0Rib29sZWFuIEdy
YXBoaWNzQ29udGV4dDNEOjppc0VuYWJsZWQoR0MzRGVudW0gY2FwKQoreworICAgIHJldHVybiBt
X2ludGVybmFsLT5pc0VuYWJsZWQoY2FwKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250
ZXh0M0Q6OmlzRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBvYmopCit7CisgICAgcmV0dXJu
IG1faW50ZXJuYWwtPmlzRnJhbWVidWZmZXIob2JqKTsKK30KKworR0MzRGJvb2xlYW4gR3JhcGhp
Y3NDb250ZXh0M0Q6OmlzUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IG9iaikKK3sKKyAgICByZXR1
cm4gbV9pbnRlcm5hbC0+aXNQcm9ncmFtKG9iaik7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNz
Q29udGV4dDNEOjppc1JlbmRlcmJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IG9iaikKK3sKKyAgICBy
ZXR1cm4gbV9pbnRlcm5hbC0+aXNSZW5kZXJidWZmZXIob2JqKTsKK30KKworR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0Q6OmlzU2hhZGVyKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQoreworICAg
IHJldHVybiBtX2ludGVybmFsLT5pc1NoYWRlcihvYmopOworfQorCitHQzNEYm9vbGVhbiBHcmFw
aGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQoreworICAgIHJl
dHVybiBtX2ludGVybmFsLT5pc1RleHR1cmUob2JqKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6bGluZVdpZHRoKEdDM0RmbG9hdCB3aWR0aCkKK3sKKyAgICBtX2ludGVybmFsLT5saW5l
V2lkdGgod2lkdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpsaW5rUHJvZ3JhbShQ
bGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+bGlua1Byb2dyYW0o
cHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBpeGVsU3RvcmVpKEdDM0Rl
bnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIG1faW50ZXJuYWwtPnBpeGVsU3RvcmVp
KHBuYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBvbHlnb25PZmZz
ZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVuaXRzKQoreworICAgIG1faW50ZXJuYWwt
PnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0Mz
RHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCB2b2lkKiBkYXRh
KQoreworICAgIG1faW50ZXJuYWwtPnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgZm9y
bWF0LCB0eXBlLCBkYXRhKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVsZWFzZVNo
YWRlckNvbXBpbGVyKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVu
dW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sK
KyAgICBtX2ludGVybmFsLT5yZW5kZXJidWZmZXJTdG9yYWdlKHRhcmdldCwgaW50ZXJuYWxmb3Jt
YXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzYW1wbGVD
b3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9vbGVhbiBpbnZlcnQpCit7CisgICAgbV9p
bnRlcm5hbC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGludmVydCk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtX2ludGVybmFsLT5zY2lzc29yKHgsIHksIHdp
ZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzaGFkZXJTb3VyY2Uo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3sKKyAgICBt
X2ludGVybmFsLT5zaGFkZXJTb3VyY2UocHJvZ3JhbSwgc3RyaW5nLnV0ZjgoKS5kYXRhKCkpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsRnVuYyhHQzNEZW51bSBmdW5jLCBH
QzNEaW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtX2ludGVybmFsLT5zdGVuY2lsRnVu
YyhmdW5jLCByZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2ls
RnVuY1NlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVmLCBH
QzNEdWludCBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPnN0ZW5jaWxGdW5jU2VwYXJhdGUoZmFj
ZSwgZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNp
bE1hc2soR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtX2ludGVybmFsLT5zdGVuY2lsTWFzayhtYXNr
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE1hc2tTZXBhcmF0ZShHQzNE
ZW51bSBmYWNlLCBHQzNEdWludCBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPnN0ZW5jaWxNYXNr
U2VwYXJhdGUoZmFjZSwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5j
aWxPcChHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCit7Cisg
ICAgbV9pbnRlcm5hbC0+c3RlbmNpbE9wKGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxPcFNlcGFyYXRlKEdDM0RlbnVtIGZhY2UsIEdDM0Rl
bnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKK3sKKyAgICBtX2ludGVy
bmFsLT5zdGVuY2lsT3BTZXBhcmF0ZShmYWNlLCBmYWlsLCB6ZmFpbCwgenBhc3MpOworfQorCiti
b29sIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGlu
dCBsZXZlbCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNp
emVpIGhlaWdodCwgR0MzRGludCBib3JkZXIsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlw
ZSwgY29uc3Qgdm9pZCogcGl4ZWxzKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT50ZXhJbWFn
ZTJEKHRhcmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCB3aWR0aCwgaGVpZ2h0LCBib3JkZXIs
IGZvcm1hdCwgdHlwZSwgcGl4ZWxzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4
UGFyYW1ldGVyZihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEZmxvYXQgcGFy
YW0pCit7CisgICAgbV9pbnRlcm5hbC0+dGV4UGFyYW1ldGVyZih0YXJnZXQsIHBuYW1lLCBwYXJh
bSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkoR0MzRGVudW0g
dGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKK3sKKyAgICBtX2ludGVybmFs
LT50ZXhQYXJhbWV0ZXJpKHRhcmdldCwgcG5hbWUsIHBhcmFtKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dGV4U3ViSW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWws
IEdDM0RpbnQgeG9mZnNldCwgR0MzRGludCB5b2Zmc2V0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0Rz
aXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgY29uc3Qgdm9pZCog
cGl4ZWxzKQoreworICAgIG1faW50ZXJuYWwtPnRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwg
eG9mZnNldCwgeW9mZnNldCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBwaXhlbHMpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWYoR0MzRGludCBsb2NhdGlvbiwg
R0MzRGZsb2F0IHgpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFmKGxvY2F0aW9uLCB4KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQqIHYsIEdDM0RzaXplaSBzaXplKQoreworICAgIG1faW50ZXJuYWwtPnVuaWZv
cm0xZnYobG9jYXRpb24sIHNpemUsIHYpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMWkoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCB4KQoreworICAgIG1faW50ZXJuYWwt
PnVuaWZvcm0xaShsb2NhdGlvbiwgeCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0xaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUpCit7
CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFpdihsb2NhdGlvbiwgc2l6ZSwgdik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxv
YXQgeCwgZmxvYXQgeSkKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMmYobG9jYXRpb24sIHgs
IHkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMmZ2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+
dW5pZm9ybTJmdihsb2NhdGlvbiwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0yaShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSkKK3sK
KyAgICBtX2ludGVybmFsLT51bmlmb3JtMmkobG9jYXRpb24sIHgsIHkpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMml2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYs
IEdDM0RzaXplaSBzaXplKQoreworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0yaXYobG9jYXRpb24s
IHNpemUsIHYpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2YoR0MzRGlu
dCBsb2NhdGlvbiwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5LCBHQzNEZmxvYXQgeikKK3sKKyAg
ICBtX2ludGVybmFsLT51bmlmb3JtM2YobG9jYXRpb24sIHgsIHksIHopOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCog
diwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTNmdihsb2NhdGlv
biwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zaShHQzNE
aW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6KQoreworICAgIG1f
aW50ZXJuYWwtPnVuaWZvcm0zaShsb2NhdGlvbiwgeCwgeSwgeik7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0Mz
RHNpemVpIHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTNpdihsb2NhdGlvbiwgc2l6
ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZihHQzNEaW50IGxv
Y2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQg
dykKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtNGYobG9jYXRpb24sIHgsIHksIHosIHcpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGZ2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9y
bTRmdihsb2NhdGlvbiwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm00aShHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRGludCB6
LCBHQzNEaW50IHcpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTRpKGxvY2F0aW9uLCB4LCB5
LCB6LCB3KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFs
LT51bmlmb3JtNGl2KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybU1hdHJpeDJmdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFu
c3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplKQoreworICAgIG1faW50ZXJu
YWwtPnVuaWZvcm1NYXRyaXgyZnYobG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KEdDM0RpbnQgbG9j
YXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVp
IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybU1hdHJpeDNmdihsb2NhdGlvbiwgc2l6
ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm1NYXRyaXg0ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNE
ZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3Jt
TWF0cml4NGZ2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6dXNlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7
CisgICAgbV9pbnRlcm5hbC0+dXNlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmFsaWRhdGVQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sK
KyAgICBtX2ludGVybmFsLT52YWxpZGF0ZVByb2dyYW0ocHJvZ3JhbSk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQg
eCkKK3sKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIxZihpbmRleCwgeCk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2YWx1ZXMpCit7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliMWZ2KGluZGV4
LCB2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZihH
QzNEdWludCBpbmRleCwgR0MzRGZsb2F0IHgsIEdDM0RmbG9hdCB5KQoreworICAgIG1faW50ZXJu
YWwtPnZlcnRleEF0dHJpYjJmKGluZGV4LCB4LCB5KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliMmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykK
K3sKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIyZnYoaW5kZXgsIHZhbHVlcyk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KQoreworICAgIG1faW50ZXJuYWwt
PnZlcnRleEF0dHJpYjNmKGluZGV4LCB4LCB5LCB6KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliM2Z2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykK
K3sKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIzZnYoaW5kZXgsIHZhbHVlcyk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKEdDM0R1aW50IGluZGV4LCBH
QzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6LCBHQzNEZmxvYXQgdykKK3sKKyAg
ICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWI0ZihpbmRleCwgeCwgeSwgeiwgdyk7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmdihHQzNEdWludCBpbmRleCwgR0Mz
RGZsb2F0KiB2YWx1ZXMpCit7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliNGZ2KGluZGV4
LCB2YWx1ZXMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWJQb2lu
dGVyKEdDM0R1aW50IGluZGV4LCBHQzNEaW50IHNpemUsIEdDM0RlbnVtIHR5cGUsIEdDM0Rib29s
ZWFuIG5vcm1hbGl6ZWQsIEdDM0RzaXplaSBzdHJpZGUsIEdDM0RpbnRwdHIgb2Zmc2V0KQorewor
ICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYlBvaW50ZXIoaW5kZXgsIHNpemUsIHR5cGUsIG5v
cm1hbGl6ZWQsIHN0cmlkZSwgb2Zmc2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
dmlld3BvcnQoR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVp
IGhlaWdodCkKK3sKKyAgICBtX2ludGVybmFsLT52aWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6cmVzaGFwZShpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6bWFya0NvbnRleHRDaGFuZ2VkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrTGF5ZXJDb21wb3NpdGVkKCkKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpsYXllckNvbXBv
c2l0ZWQoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0Nh
bnZhcyhDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBjb250ZXh0KQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK1Bhc3NSZWZQdHI8SW1hZ2VEYXRhPiBHcmFwaGljc0NvbnRleHQzRDo6cGFp
bnRSZW5kZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgUmVmUHRyPEltYWdlRGF0YT4gaW1hZ2VEYXRhID0gSW1hZ2VEYXRhOjpjcmVhdGUoSW50
U2l6ZSgxLCAxKSk7CisgICAgcmV0dXJuIGltYWdlRGF0YS5yZWxlYXNlKCk7Cit9CisKK1BsYXRm
b3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUJ1ZmZlcigpCit7CisgICAgcmV0
dXJuIG1faW50ZXJuYWwtPmNyZWF0ZUJ1ZmZlcigpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdy
YXBoaWNzQ29udGV4dDNEOjpjcmVhdGVGcmFtZWJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1faW50
ZXJuYWwtPmNyZWF0ZUZyYW1lYnVmZmVyKCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZVByb2dyYW0oKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5j
cmVhdGVQcm9ncmFtKCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6
OmNyZWF0ZVJlbmRlcmJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmNyZWF0ZVJl
bmRlcmJ1ZmZlcigpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNEOjpj
cmVhdGVTaGFkZXIoR0MzRGVudW0gdHlwZSkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3Jl
YXRlU2hhZGVyKHR5cGUpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IEdyYXBoaWNzQ29udGV4dDNE
OjpjcmVhdGVUZXh0dXJlKCkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlVGV4dHVy
ZSgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVCdWZmZXIoUGxhdGZvcm0z
RE9iamVjdCBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+ZGVsZXRlQnVmZmVyKGJ1ZmZlcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUZyYW1lYnVmZmVyKFBsYXRmb3Jt
M0RPYmplY3QgYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPmRlbGV0ZUZyYW1lYnVmZmVyKGJ1
ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVByb2dyYW0oUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1faW50ZXJuYWwtPmRlbGV0ZVByb2dyYW0ocHJv
Z3JhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVJlbmRlcmJ1ZmZlcihQ
bGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5kZWxldGVSZW5kZXJi
dWZmZXIoYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlU2hhZGVy
KFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIG1faW50ZXJuYWwtPmRlbGV0ZVNoYWRl
cihzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVUZXh0dXJlKFBs
YXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5kZWxldGVUZXh0dXJl
KHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzeW50aGVzaXplR0xFcnJv
cihHQzNEZW51bSBlcnJvcikKK3sKKyAgICBtX2ludGVybmFsLT5zeW50aGVzaXplR0xFcnJvcihl
cnJvcik7Cit9CisKK0V4dGVuc2lvbnMzRCogR3JhcGhpY3NDb250ZXh0M0Q6OmdldEV4dGVuc2lv
bnMoKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRFeHRlbnNpb25zKCk7Cit9CisKK0lu
dFNpemUgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVybmFsRnJhbWVidWZmZXJTaXplKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBJbnRTaXplKCk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnNldENvbnRleHRMb3N0Q2FsbGJhY2soUGFzc093blB0cjxDb250
ZXh0TG9zdENhbGxiYWNrPikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRJbWFnZURhdGEoSW1hZ2UqIGltYWdlLCBHQzNEZW51bSBmb3Jt
YXQsIEdDM0RlbnVtIHR5cGUsIGJvb2wgcHJlbXVsdGlwbHlBbHBoYSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sIGlnbm9yZUdhbW1hQW5kQ29sb3JQcm9maWxlLCBW
ZWN0b3I8dWludDhfdD4mIG91dHB1dFZlY3RvcikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQkdMKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98116</attachid>
            <date>2011-06-21 22:15:12 -0700</date>
            <delta_ts>2011-06-22 19:36:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62709-20110622141616.patch</filename>
            <type>text/plain</type>
            <size>32953</size>
            <attacher name="Hyowon Kim">hw1008.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzMjkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZjY0YzgxMGE0ZDllMGEw
NjIwMmJiZDUyNGJkMTE3YWM4NTZiMGJkLi41NDA5YzNmMmMyNTg3MjUzNDk3N2MxZTkyZWIwNDFi
ZmUxNjRhNDY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcwIEBACisyMDExLTA2LTIxICBIeW93
b24gS2ltICA8aHcxMDA4LmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbRUZMXSBBZGQgR3JhcGhpY3NDb250ZXh0M0RFZmwg
Zm9yIFdlYkdMIGFuZCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI3MDkKKworICAgICAgICBBZGQgR3JhcGhp
Y3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gZm9yIEVGTCBwb3J0LgorICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRCBkZWxlZ2F0ZXMgdG8gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJy
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxp
YW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Y2xlYXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xl
YXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVu
Y2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0Vs
ZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpp
c0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1By
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6cG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVu
Y2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1
bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNp
bE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNr
U2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxP
cCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKToKKwogMjAxMS0wNi0y
MCAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBlZTE2ZDdi
ZGYxYmM0NTRjMzE0ZjQyMWYzMWNkMmM0OGQwZDQzNGEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3Bw
CkBAIC0wLDAgKzEsODMzIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQor
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oIgorCisjaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitQYXNzUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNE
OjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBSZW5kZXJTdHlsZSBy
ZW5kZXJTdHlsZSkKK3sKKyAgICBib29sIHJlbmRlckRpcmVjdGx5VG9FdmFzR0xPYmplY3QgPSAo
cmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hvc3RXaW5kb3cpID8gdHJ1ZSA6IGZhbHNl
OworCisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw+IGludGVybmFsID0gYWRv
cHRQdHIobmV3IEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWwoKSk7CisgICAgaWYgKCFpbnRlcm5h
bC0+aW5pdGlhbGl6ZShhdHRycywgaG9zdFdpbmRvdywgcmVuZGVyRGlyZWN0bHlUb0V2YXNHTE9i
amVjdCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJzLCBob3N0V2lu
ZG93LCByZW5kZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0KSk7CisgICAgY29udGV4dC0+bV9pbnRl
cm5hbCA9IGludGVybmFsLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gY29udGV4dC5yZWxlYXNlKCk7
Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjpHcmFwaGljc0NvbnRleHQzRChHcmFwaGljc0NvbnRl
eHQzRDo6QXR0cmlidXRlcyBhdHRycywgSG9zdFdpbmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5k
ZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKKyAgICA6IG1fY3VycmVudFdpZHRoKDApCisgICAgLCBt
X2N1cnJlbnRIZWlnaHQoMCkKKyAgICAsIG1faXNSZXNvdXJjZVNhZmUoZmFsc2UpCit7Cit9CisK
K0dyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQoreworfQorCitQbGF0Zm9y
bUdyYXBoaWNzQ29udGV4dDNEIEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUdyYXBoaWNzQ29u
dGV4dDNEKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+cGxhdGZvcm1HcmFwaGlj
c0NvbnRleHQzRCgpOworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorUGxh
dGZvcm1MYXllciogR3JhcGhpY3NDb250ZXh0M0Q6OnBsYXRmb3JtTGF5ZXIoKSBjb25zdAorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBtX2ludGVybmFs
LT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzR0xFUzJD
b21wbGlhbnQoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YWN0aXZlVGV4dHVyZShH
QzNEZW51bSB0ZXh0dXJlKQoreworICAgIG1faW50ZXJuYWwtPmFjdGl2ZVRleHR1cmUodGV4dHVy
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmF0dGFjaFNoYWRlcihQbGF0Zm9ybTNE
T2JqZWN0IHByb2dyYW0sIFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIG1faW50ZXJu
YWwtPmF0dGFjaFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpiaW5kQXR0cmliTG9jYXRpb24oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNE
dWludCBpbmRleCwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIG1faW50ZXJuYWwtPmJpbmRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCBpbmRleCwgbmFtZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmJpbmRCdWZmZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1
ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5iaW5kQnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKEdDM0RlbnVtIHRhcmdl
dCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+YmluZEZyYW1l
YnVmZmVyKHRhcmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Ymlu
ZFJlbmRlcmJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgcmVuZGVyYnVm
ZmVyKQoreworICAgIG1faW50ZXJuYWwtPmJpbmRSZW5kZXJidWZmZXIodGFyZ2V0LCByZW5kZXJi
dWZmZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZShHQzNEZW51
bSB0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5i
aW5kVGV4dHVyZSh0YXJnZXQsIHRleHR1cmUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpibGVuZENvbG9yKEdDM0RjbGFtcGYgcmVkLCBHQzNEY2xhbXBmIGdyZWVuLCBHQzNEY2xhbXBm
IGJsdWUsIEdDM0RjbGFtcGYgYWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+YmxlbmRDb2xvcihy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJs
ZW5kRXF1YXRpb24oR0MzRGVudW0gbW9kZSkKK3sKKyAgICBtX2ludGVybmFsLT5ibGVuZEVxdWF0
aW9uKG1vZGUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9uU2Vw
YXJhdGUoR0MzRGVudW0gbW9kZVJHQiwgR0MzRGVudW0gbW9kZUFscGhhKQoreworICAgIG1faW50
ZXJuYWwtPmJsZW5kRXF1YXRpb25TZXBhcmF0ZShtb2RlUkdCLCBtb2RlQWxwaGEpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMoR0MzRGVudW0gc2ZhY3RvciwgR0MzRGVu
dW0gZGZhY3RvcikKK3sKKyAgICBtX2ludGVybmFsLT5ibGVuZEZ1bmMoc2ZhY3RvciwgZGZhY3Rv
cik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0Rl
bnVtIHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0g
ZHN0QWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBk
c3RSR0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmJ1ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0g
dXNhZ2UpCit7CisgICAgbV9pbnRlcm5hbC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIC8qIGRh
dGEgKi8gMCwgdXNhZ2UpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRh
KEdDM0RlbnVtIHRhcmdldCwgR0MzRHNpemVpcHRyIHNpemUsIGNvbnN0IHZvaWQqIGRhdGEsIEdD
M0RlbnVtIHVzYWdlKQoreworICAgIG1faW50ZXJuYWwtPmJ1ZmZlckRhdGEodGFyZ2V0LCBzaXpl
LCBkYXRhLCB1c2FnZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1ZmZlclN1YkRh
dGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50cHRyIG9mZnNldCwgR0MzRHNpemVpcHRyIHNpemUs
IGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgbV9pbnRlcm5hbC0+YnVmZmVyU3ViRGF0YSh0YXJn
ZXQsIG9mZnNldCwgc2l6ZSwgZGF0YSk7Cit9CisKK0dDM0RlbnVtIEdyYXBoaWNzQ29udGV4dDNE
OjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICByZXR1cm4g
bV9pbnRlcm5hbC0+Y2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyh0YXJnZXQpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpjbGVhcihHQzNEYml0ZmllbGQgbWFzaykKK3sKKyAgICBtX2ludGVy
bmFsLT5jbGVhcihtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJDb2xv
cihHQzNEY2xhbXBmIHIsIEdDM0RjbGFtcGYgZywgR0MzRGNsYW1wZiBiLCBHQzNEY2xhbXBmIGEp
Cit7CisgICAgbV9pbnRlcm5hbC0+Y2xlYXJDb2xvcihyLCBnLCBiLCBhKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRoKQoreworICAgIG1f
aW50ZXJuYWwtPmNsZWFyRGVwdGgoZGVwdGgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpjbGVhclN0ZW5jaWwoR0MzRGludCBzKQoreworICAgIG1faW50ZXJuYWwtPmNsZWFyU3RlbmNp
bChzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29sb3JNYXNrKEdDM0Rib29sZWFu
IHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdDM0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFs
cGhhKQoreworICAgIG1faW50ZXJuYWwtPmNvbG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+Y29tcGlsZVNoYWRlcihzaGFkZXIp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0
YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgs
IEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJv
cmRlcikKK3sKKyAgICBtX2ludGVybmFsLT5jb3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBp
bnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgYm9yZGVyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNE
aW50IGxldmVsLCBHQzNEaW50IHhvZmZzZXQsIEdDM0RpbnQgeW9mZnNldCwgR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtX2lu
dGVybmFsLT5jb3B5VGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5b2Zmc2V0
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3Vs
bEZhY2UoR0MzRGVudW0gbW9kZSkKK3sKKyAgICBtX2ludGVybmFsLT5jdWxsRmFjZShtb2RlKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCit7
CisgICAgbV9pbnRlcm5hbC0+ZGVwdGhGdW5jKGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkZXB0aE1hc2soR0MzRGJvb2xlYW4gZmxhZykKK3sKKyAgICBtX2ludGVybmFsLT5k
ZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2Uo
R0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1wZiB6RmFyKQoreworICAgIG1faW50ZXJuYWwtPmRl
cHRoUmFuZ2Uoek5lYXIsIHpGYXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXRh
Y2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRl
cikKK3sKKyAgICBtX2ludGVybmFsLT5kZXRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGlzYWJsZShHQzNEZW51bSBjYXApCit7CisgICAg
bV9pbnRlcm5hbC0+ZGlzYWJsZShjYXApOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpk
aXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0MzRHVpbnQgaW5kZXgpCit7CisgICAgbV9pbnRlcm5h
bC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6ZHJhd0FycmF5cyhHQzNEZW51bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6
ZWkgY291bnQpCit7CisgICAgbV9pbnRlcm5hbC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291
bnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkcmF3RWxlbWVudHMoR0MzRGVudW0g
bW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNEZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkK
K3sKKyAgICBtX2ludGVybmFsLT5kcmF3RWxlbWVudHMobW9kZSwgY291bnQsIHR5cGUsIG9mZnNl
dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZShHQzNEZW51bSBjYXApCit7
CisgICAgbV9pbnRlcm5hbC0+ZW5hYmxlKGNhcCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KEdDM0R1aW50IGluZGV4KQoreworICAgIG1faW50
ZXJuYWwtPmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6ZmluaXNoKCkKK3sKKyAgICBtX2ludGVybmFsLT5maW5pc2goKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1c2goKQoreworICAgIG1faW50ZXJuYWwtPmZsdXNo
KCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVy
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gYXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVm
ZmVydGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5m
cmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJnZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlcnRh
cmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJU
ZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0
ZXh0YXJnZXQsIFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgR0MzRGludCBsZXZlbCkKK3sKKyAg
ICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclRleHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRl
eHRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpm
cm9udEZhY2UoR0MzRGVudW0gbW9kZSkKK3sKKyAgICBtX2ludGVybmFsLT5mcm9udEZhY2UobW9k
ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVt
IHRhcmdldCkKK3sKKyAgICBtX2ludGVybmFsLT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOworfQor
Citib29sIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVj
dCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwgQWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICByZXR1
cm4gbV9pbnRlcm5hbC0+Z2V0QWN0aXZlQXR0cmliKHByb2dyYW0sIGluZGV4LCBpbmZvKTsKK30K
KworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2Jq
ZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIHJl
dHVybiBtX2ludGVybmFsLT5nZXRBY3RpdmVVbmlmb3JtKHByb2dyYW0sIGluZGV4LCBpbmZvKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3Jt
M0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVpIG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQ
bGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQoreworICAgIG1faW50ZXJuYWwtPmdldEF0dGFjaGVk
U2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwgY291bnQsIHNoYWRlcnMpOworfQorCitpbnQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3Jh
bSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRBdHRy
aWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0Qm9vbGVhbnYoR0MzRGVudW0gcG5hbWUsIEdDM0Rib29sZWFuKiB2YWx1ZSkKK3sKKyAgICBt
X2ludGVybmFsLT5nZXRCb29sZWFudihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRCdWZmZXJQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVt
IHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5nZXRCdWZmZXJQYXJh
bWV0ZXJpdih0YXJnZXQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK0dyYXBoaWNzQ29udGV4dDNEOjpB
dHRyaWJ1dGVzIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcygpCit7Cisg
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldENvbnRleHRBdHRyaWJ1dGVzKCk7Cit9CisKK0dDM0Rl
bnVtIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRFcnJvcigpCit7CisgICAgcmV0dXJuIG1faW50ZXJu
YWwtPmdldEVycm9yKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dihH
QzNEZW51bSBwYXJhbU5hbWUsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+
Z2V0RmxvYXR2KHBhcmFtTmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdihHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGF0dGFjaG1lbnQsIEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5nZXRGcmFtZWJ1ZmZlckF0dGFjaG1lbnRQYXJhbWV0ZXJpdih0YXJnZXQs
IGF0dGFjaG1lbnQsIHBuYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OmdldEludGVnZXJ2KEdDM0RlbnVtIHBuYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtX2lu
dGVybmFsLT5nZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpnZXRQcm9ncmFtaXYoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEZW51bSBw
bmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbWl2KHBy
b2dyYW0sIHBuYW1lLCB2YWx1ZSk7Cit9CisKK1N0cmluZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0
UHJvZ3JhbUluZm9Mb2coUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIHJldHVybiBt
X2ludGVybmFsLT5nZXRQcm9ncmFtSW5mb0xvZyhwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0UmVuZGVyYnVmZmVyUGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBwbmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+Z2V0UmVu
ZGVyYnVmZmVyUGFyYW1ldGVyaXYodGFyZ2V0LCBwbmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9ybTNET2JqZWN0IHNoYWRlciwgR0Mz
RGVudW0gcG5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPmdldFNoYWRl
cml2KHNoYWRlciwgcG5hbWUsIHZhbHVlKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRTaGFkZXJJbmZvTG9nKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQoreworICAgIHJldHVy
biBtX2ludGVybmFsLT5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7Cit9CisKK1N0cmluZyBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyU291cmNlKFBsYXRmb3JtM0RPYmplY3Qgc2hhZGVyKQor
eworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRTaGFkZXJTb3VyY2Uoc2hhZGVyKTsKK30KKwor
U3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTdHJpbmcoR0MzRGVudW0gbmFtZSkKK3sKKyAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0U3RyaW5nKG5hbWUpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdihHQzNEZW51bSB0YXJnZXQsIEdDM0RlbnVtIHBu
YW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPmdldFRleFBhcmFtZXRl
cmZ2KHRhcmdldCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0VGV4UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwbmFtZSwgR0MzRGlu
dCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+Z2V0VGV4UGFyYW1ldGVyaXYodGFyZ2V0LCBw
bmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYo
UGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZh
bHVlKQoreworICAgIG1faW50ZXJuYWwtPmdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwg
dmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxhdGZv
cm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKK3sK
KyAgICBtX2ludGVybmFsLT5nZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsK
K30KKworR0MzRGludCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRm
b3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBt
X2ludGVybmFsLT5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNE
ZW51bSBwbmFtZSwgR0MzRGZsb2F0KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5nZXRWZXJ0
ZXhBdHRyaWJmdihpbmRleCwgcG5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6Z2V0VmVydGV4QXR0cmliaXYoR0MzRHVpbnQgaW5kZXgsIEdDM0RlbnVtIHBuYW1lLCBH
QzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRl
eCwgcG5hbWUsIHZhbHVlKTsKK30KKworbG9uZyBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4
QXR0cmliT2Zmc2V0KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwbmFtZSkKK3sKKyAgICByZXR1
cm4gbV9pbnRlcm5hbC0+Z2V0VmVydGV4QXR0cmliT2Zmc2V0KGluZGV4LCBwbmFtZSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBt
b2RlKQoreworICAgIG1faW50ZXJuYWwtPmhpbnQodGFyZ2V0LCBtb2RlKTsKK30KKworR0MzRGJv
b2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQor
eworICAgIHJldHVybiBtX2ludGVybmFsLT5pc0J1ZmZlcihvYmopOworfQorCitHQzNEYm9vbGVh
biBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkKK3sKKyAgICByZXR1
cm4gbV9pbnRlcm5hbC0+aXNFbmFibGVkKGNhcCk7Cit9CisKK0dDM0Rib29sZWFuIEdyYXBoaWNz
Q29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qgb2JqKQoreworICAgIHJl
dHVybiBtX2ludGVybmFsLT5pc0ZyYW1lYnVmZmVyKG9iaik7Cit9CisKK0dDM0Rib29sZWFuIEdy
YXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBvYmopCit7CisgICAg
cmV0dXJuIG1faW50ZXJuYWwtPmlzUHJvZ3JhbShvYmopOworfQorCitHQzNEYm9vbGVhbiBHcmFw
aGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBvYmopCit7Cisg
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzUmVuZGVyYnVmZmVyKG9iaik7Cit9CisKK0dDM0Rib29s
ZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0Zm9ybTNET2JqZWN0IG9iaikKK3sK
KyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNTaGFkZXIob2JqKTsKK30KKworR0MzRGJvb2xlYW4g
R3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0IG9iaikKK3sKKyAg
ICByZXR1cm4gbV9pbnRlcm5hbC0+aXNUZXh0dXJlKG9iaik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCit7CisgICAgbV9pbnRlcm5hbC0+
bGluZVdpZHRoKHdpZHRoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6bGlua1Byb2dy
YW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1faW50ZXJuYWwtPmxpbmtQcm9n
cmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaShH
QzNEZW51bSBwbmFtZSwgR0MzRGludCBwYXJhbSkKK3sKKyAgICBtX2ludGVybmFsLT5waXhlbFN0
b3JlaShwbmFtZSwgcGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpwb2x5Z29u
T2Zmc2V0KEdDM0RmbG9hdCBmYWN0b3IsIEdDM0RmbG9hdCB1bml0cykKK3sKKyAgICBtX2ludGVy
bmFsLT5wb2x5Z29uT2Zmc2V0KGZhY3RvciwgdW5pdHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgs
IEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgdm9pZCog
ZGF0YSkKK3sKKyAgICBtX2ludGVybmFsLT5yZWFkUGl4ZWxzKHgsIHksIHdpZHRoLCBoZWlnaHQs
IGZvcm1hdCwgdHlwZSwgZGF0YSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlbGVh
c2VTaGFkZXJDb21waWxlcigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6cmVuZGVyYnVmZmVyU3RvcmFnZShHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQp
Cit7CisgICAgbV9pbnRlcm5hbC0+cmVuZGVyYnVmZmVyU3RvcmFnZSh0YXJnZXQsIGludGVybmFs
Zm9ybWF0LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2Ft
cGxlQ292ZXJhZ2UoR0MzRGNsYW1wZiB2YWx1ZSwgR0MzRGJvb2xlYW4gaW52ZXJ0KQoreworICAg
IG1faW50ZXJuYWwtPnNhbXBsZUNvdmVyYWdlKHZhbHVlLCBpbnZlcnQpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzY2lzc29yKEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEc2l6ZWkg
d2lkdGgsIEdDM0RzaXplaSBoZWlnaHQpCit7CisgICAgbV9pbnRlcm5hbC0+c2Npc3Nvcih4LCB5
LCB3aWR0aCwgaGVpZ2h0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2hhZGVyU291
cmNlKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCit7Cisg
ICAgbV9pbnRlcm5hbC0+c2hhZGVyU291cmNlKHByb2dyYW0sIHN0cmluZyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jKEdDM0RlbnVtIGZ1bmMsIEdDM0RpbnQgcmVm
LCBHQzNEdWludCBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPnN0ZW5jaWxGdW5jKGZ1bmMsIHJl
ZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxGdW5jU2VwYXJh
dGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1h
c2spCit7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbEZ1bmNTZXBhcmF0ZShmYWNlLCBmdW5jLCBy
ZWYsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFzayhHQzNE
dWludCBtYXNrKQoreworICAgIG1faW50ZXJuYWwtPnN0ZW5jaWxNYXNrKG1hc2spOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsTWFza1NlcGFyYXRlKEdDM0RlbnVtIGZhY2Us
IEdDM0R1aW50IG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNpbE1hc2tTZXBhcmF0ZShm
YWNlLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wKEdDM0Rl
bnVtIGZhaWwsIEdDM0RlbnVtIHpmYWlsLCBHQzNEZW51bSB6cGFzcykKK3sKKyAgICBtX2ludGVy
bmFsLT5zdGVuY2lsT3AoZmFpbCwgemZhaWwsIHpwYXNzKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c3RlbmNpbE9wU2VwYXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRGVudW0gZmFpbCwg
R0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpwYXNzKQoreworICAgIG1faW50ZXJuYWwtPnN0ZW5j
aWxPcFNlcGFyYXRlKGZhY2UsIGZhaWwsIHpmYWlsLCB6cGFzcyk7Cit9CisKK2Jvb2wgR3JhcGhp
Y3NDb250ZXh0M0Q6OnRleEltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBH
QzNEZW51bSBpbnRlcm5hbGZvcm1hdCwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0
LCBHQzNEaW50IGJvcmRlciwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2
b2lkKiBwaXhlbHMpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPnRleEltYWdlMkQodGFyZ2V0
LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGJvcmRlciwgZm9ybWF0LCB0
eXBlLCBwaXhlbHMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhQYXJhbWV0ZXJm
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcG5hbWUsIEdDM0RmbG9hdCBwYXJhbSkKK3sKKyAg
ICBtX2ludGVybmFsLT50ZXhQYXJhbWV0ZXJmKHRhcmdldCwgcG5hbWUsIHBhcmFtKTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dGV4UGFyYW1ldGVyaShHQzNEZW51bSB0YXJnZXQsIEdD
M0RlbnVtIHBuYW1lLCBHQzNEaW50IHBhcmFtKQoreworICAgIG1faW50ZXJuYWwtPnRleFBhcmFt
ZXRlcmkodGFyZ2V0LCBwbmFtZSwgcGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp0ZXhTdWJJbWFnZTJEKEdDM0RlbnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4
b2Zmc2V0LCBHQzNEaW50IHlvZmZzZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdo
dCwgR0MzRGVudW0gZm9ybWF0LCBHQzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7
CisgICAgbV9pbnRlcm5hbC0+dGV4U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4b2Zmc2V0LCB5
b2Zmc2V0LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQg
eCkKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMWYobG9jYXRpb24sIHgpOworfQorCit2b2lk
IEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9h
dCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFmdihsb2Nh
dGlvbiwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShH
QzNEaW50IGxvY2F0aW9uLCBHQzNEaW50IHgpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFp
KGxvY2F0aW9uLCB4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdihH
QzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtX2lu
dGVybmFsLT51bmlmb3JtMWl2KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTJmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBmbG9h
dCB5KQoreworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0yZihsb2NhdGlvbiwgeCwgeSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMmZ2
KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTJpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5KQoreworICAgIG1faW50
ZXJuYWwtPnVuaWZvcm0yaShsb2NhdGlvbiwgeCwgeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0yaXYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVp
IHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgdik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9u
LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHksIEdDM0RmbG9hdCB6KQoreworICAgIG1faW50ZXJu
YWwtPnVuaWZvcm0zZihsb2NhdGlvbiwgeCwgeSwgeik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm0zZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6
ZWkgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCB2
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRp
b24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHopCit7CisgICAgbV9pbnRlcm5hbC0+
dW5pZm9ybTNpKGxvY2F0aW9uLCB4LCB5LCB6KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6dW5pZm9ybTNpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6
ZSkKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCB2KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdD
M0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KQoreworICAg
IG1faW50ZXJuYWwtPnVuaWZvcm00Zihsb2NhdGlvbiwgeCwgeSwgeiwgdyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0
KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtNGZ2KGxvY2F0
aW9uLCBzaXplLCB2KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKEdD
M0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQg
dykKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtNGkobG9jYXRpb24sIHgsIHksIHosIHcpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQqIHYsIEdDM0RzaXplaSBzaXplKQoreworICAgIG1faW50ZXJuYWwtPnVuaWZvcm00
aXYobG9jYXRpb24sIHNpemUsIHYpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlm
b3JtTWF0cml4MmZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0Mz
RGZsb2F0KiB2YWx1ZSwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9y
bU1hdHJpeDJmdihsb2NhdGlvbiwgc2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0Mz
RGJvb2xlYW4gdHJhbnNwb3NlLCBHQzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSkKK3sK
KyAgICBtX2ludGVybmFsLT51bmlmb3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bv
c2UsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRm
dihHQzNEaW50IGxvY2F0aW9uLCBHQzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFs
dWUsIEdDM0RzaXplaSBzaXplKQoreworICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRyaXg0ZnYo
bG9jYXRpb24sIHNpemUsIHRyYW5zcG9zZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1c2VQcm9ncmFtKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBtX2lu
dGVybmFsLT51c2VQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
Ojp2YWxpZGF0ZVByb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1faW50
ZXJuYWwtPnZhbGlkYXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dmVydGV4QXR0cmliMWYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KQoreworICAg
IG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjFmKGluZGV4LCB4KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZh
bHVlcykKK3sKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHZhbHVlcyk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGlu
ZGV4LCBHQzNEZmxvYXQgeCwgR0MzRGZsb2F0IHkpCit7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4
QXR0cmliMmYoaW5kZXgsIHgsIHkpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWIyZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQoreworICAgIG1f
aW50ZXJuYWwtPnZlcnRleEF0dHJpYjJmdihpbmRleCwgdmFsdWVzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4
LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHopCit7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0
cmliM2YoaW5kZXgsIHgsIHksIHopOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0
ZXhBdHRyaWIzZnYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQoreworICAgIG1f
aW50ZXJuYWwtPnZlcnRleEF0dHJpYjNmdihpbmRleCwgdmFsdWVzKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4
LCBHQzNEZmxvYXQgeSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KQoreworICAgIG1faW50ZXJu
YWwtPnZlcnRleEF0dHJpYjRmKGluZGV4LCB4LCB5LCB6LCB3KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dmVydGV4QXR0cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZh
bHVlcykKK3sKKyAgICBtX2ludGVybmFsLT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHZhbHVlcyk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVp
bnQgaW5kZXgsIEdDM0RpbnQgc2l6ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFs
aXplZCwgR0MzRHNpemVpIHN0cmlkZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgbV9pbnRl
cm5hbC0+dmVydGV4QXR0cmliUG9pbnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwg
c3RyaWRlLCBvZmZzZXQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydChH
QzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQor
eworICAgIG1faW50ZXJuYWwtPnZpZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJr
Q29udGV4dENoYW5nZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZh
c1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
KworUGFzc1JlZlB0cjxJbWFnZURhdGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmlu
Z1Jlc3VsdHNUb0ltYWdlRGF0YSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZWZQ
dHI8SW1hZ2VEYXRhPiBpbWFnZURhdGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKDEsIDEp
KTsKKyAgICByZXR1cm4gaW1hZ2VEYXRhLnJlbGVhc2UoKTsKK30KKworUGxhdGZvcm0zRE9iamVj
dCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbV9pbnRl
cm5hbC0+Y3JlYXRlQnVmZmVyKCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250
ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3Jl
YXRlRnJhbWVidWZmZXIoKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQz
RDo6Y3JlYXRlUHJvZ3JhbSgpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmNyZWF0ZVByb2dy
YW0oKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVu
ZGVyYnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlUmVuZGVyYnVmZmVy
KCk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRl
cihHQzNEZW51bSB0eXBlKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5jcmVhdGVTaGFkZXIo
dHlwZSk7Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRl
eHR1cmUoKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5jcmVhdGVUZXh0dXJlKCk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1
ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5kZWxldGVCdWZmZXIoYnVmZmVyKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBi
dWZmZXIpCit7CisgICAgbV9pbnRlcm5hbC0+ZGVsZXRlRnJhbWVidWZmZXIoYnVmZmVyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0
IHByb2dyYW0pCit7CisgICAgbV9pbnRlcm5hbC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RP
YmplY3QgYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihidWZm
ZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIpCit7CisgICAgbV9pbnRlcm5hbC0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9i
amVjdCB0ZXh0dXJlKQoreworICAgIG1faW50ZXJuYWwtPmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVt
IGVycm9yKQoreworICAgIG1faW50ZXJuYWwtPnN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKK30K
KworRXh0ZW5zaW9uczNEKiBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCit7Cisg
ICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldEV4dGVuc2lvbnMoKTsKK30KKworSW50U2l6ZSBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0SW50ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIEludFNpemUoKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayhQYXNzT3duUHRyPENvbnRleHRMb3N0Q2Fs
bGJhY2s+KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldEltYWdlRGF0YShJbWFnZSogaW1hZ2UsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVu
dW0gdHlwZSwgYm9vbCBwcmVtdWx0aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50
OF90PiYgb3V0cHV0VmVjdG9yKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98298</attachid>
            <date>2011-06-22 19:36:39 -0700</date>
            <delta_ts>2011-09-12 20:11:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62709-20110623113632.patch</filename>
            <type>text/plain</type>
            <size>33046</size>
            <attacher name="Hyowon Kim">hw1008.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODkzMjkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ZjY0YzgxMGE0ZDllMGEw
NjIwMmJiZDUyNGJkMTE3YWM4NTZiMGJkLi45N2MwYjA5MDU2OWJiYmJlOGZiZjJkMjliYTljYjli
MjkzMGY1NTJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcwIEBACisyMDExLTA2LTIyICBIeW93
b24gS2ltICA8aHcxMDA4LmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbRUZMXSBBZGQgR3JhcGhpY3NDb250ZXh0M0RFZmwg
Zm9yIFdlYkdMIGFuZCBhY2NlbGVyYXRlZCBjb21wb3NpdGluZworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI3MDkKKworICAgICAgICBBZGQgR3JhcGhp
Y3NDb250ZXh0M0QgaW1wbGVtZW50YXRpb24gZm9yIEVGTCBwb3J0LgorICAgICAgICBHcmFwaGlj
c0NvbnRleHQzRCBkZWxlZ2F0ZXMgdG8gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQzRCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRl
eHQzRCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1MYXll
cik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6bWFrZUNvbnRleHRDdXJy
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMyQ29tcGxp
YW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphY3RpdmVUZXh0dXJl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRBdHRyaWJMb2NhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEJ1ZmZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmluZEZyYW1lYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kUmVuZGVyYnVmZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpiaW5kVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEZ1bmMpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpidWZmZXJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpidWZmZXJTdWJEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpjaGVja0ZyYW1lYnVmZmVyU3RhdHVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6Y2xlYXJDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xl
YXJEZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJTdGVu
Y2lsKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb2xvck1hc2spOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvbXBpbGVTaGFkZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNvcHlUZXhJbWFnZTJEKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjb3B5VGV4U3ViSW1hZ2UyRCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQzRDo6ZGVwdGhNYXNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpkZXB0aFJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjpkZXRhY2hTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6
OmRpc2FibGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmRpc2FibGVW
ZXJ0ZXhBdHRyaWJBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
ZHJhd0FycmF5cyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0Vs
ZW1lbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjplbmFibGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmaW5pc2gpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZsdXNoKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpmcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmZyb250RmFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2VuZXJhdGVNaXBtYXApOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEFjdGl2ZUF0dHJpYik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QWN0aXZlVW5pZm9ybSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0QXR0YWNoZWRTaGFkZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRBdHRyaWJMb2NhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZlclBhcmFtZXRlcml2KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRDb250ZXh0QXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0RXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEZsb2F0dik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6Z2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVnZXJ2KToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRQcm9ncmFtaXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U2hhZGVyaXYpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2cpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlclNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRUZXhQYXJhbWV0ZXJmdik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VGV4UGFyYW1ldGVyaXYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmdldFVuaWZvcm1mdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybWl2KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjpnZXRWZXJ0ZXhBdHRyaWJpdik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0VmVydGV4QXR0cmliT2Zmc2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpoaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjppc0J1ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRDo6aXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpp
c0ZyYW1lYnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1By
b2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmlzUmVuZGVyYnVm
ZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6aXNUZXh0dXJlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpsaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmxpbmtQcm9ncmFtKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpwaXhlbFN0b3JlaSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRDo6cG9seWdvbk9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQz
RDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6c2Npc3Nvcik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
c2hhZGVyU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpzdGVu
Y2lsRnVuYyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1
bmNTZXBhcmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNp
bE1hc2spOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNr
U2VwYXJhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxP
cCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbE9wU2VwYXJh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleEltYWdlMkQpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmYpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFBhcmFtZXRlcmkpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xZik6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQzRDo6dW5pZm9ybTFpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtMWl2KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNE
Ojp1bmlmb3JtMmYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZv
cm0yZnYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaSk6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpdik6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNmKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2Z2KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtM2kpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0M0Q6OnVuaWZvcm0zaXYpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6OnVuaWZvcm00Zik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6
dW5pZm9ybTRmdik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9y
bTRpKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtNGl2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4M2Z2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4NGZ2KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0pOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjFmKToKKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIxZnYpOgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKToKKyAgICAgICAgKFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjNmKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYjRmKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWI0ZnYpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnZpZXdwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpyZXNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDNEOjptYXJrQ29udGV4dENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0M0Q6Om1hcmtMYXllckNvbXBvc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6cGFpbnRSZW5kZXJpbmdSZXN1bHRzVG9DYW52YXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0Q6OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVmZmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVQcm9ncmFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEOjpjcmVhdGVSZW5kZXJidWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcik6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlVGV4dHVyZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVGcmFtZWJ1ZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUHJvZ3JhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUpOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDNEOjpnZXRFeHRlbnNpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDNEOjpnZXRJbnRlcm5hbEZyYW1lYnVmZmVyU2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExvc3RDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW1hZ2VEYXRhKToKKwogMjAxMS0wNi0y
MCAgRXJpYyBTZWlkZWwgIDxlcmljQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
QWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2VmbC9HcmFwaGljc0NvbnRleHQzREVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2NGQwMzkw
NGFhOTUwZGUxMjI4ZDUzODBmODc2YjIzZTYyNzUyMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwuY3Bw
CkBAIC0wLDAgKzEsODMxIEBACisvKgorICAgIENvcHlyaWdodCAoQykgMjAxMSBTYW1zdW5nIEVs
ZWN0cm9uaWNzCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAgICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAg
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
ICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQkdMKQor
CisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oIgorCisjaW5jbHVkZSAiSW1h
Z2VEYXRhLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1dGVzIGF0dHJzLCBIb3N0V2luZG93KiBo
b3N0V2luZG93LCBSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKK3sKKyAgICBib29sIHJlbmRlckRp
cmVjdGx5VG9FdmFzR0xPYmplY3QgPSAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlUb0hv
c3RXaW5kb3cpOworCisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dDNESW50ZXJuYWw+IGludGVy
bmFsID0gR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbDo6Y3JlYXRlKGF0dHJzLCBob3N0V2luZG93
LCByZW5kZXJEaXJlY3RseVRvRXZhc0dMT2JqZWN0KTsKKyAgICBpZiAoIWludGVybmFsKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIFJlZlB0cjxHcmFwaGljc0NvbnRleHQzRD4gY29udGV4dCA9
IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRycywgaG9zdFdpbmRvdywgcmVuZGVy
RGlyZWN0bHlUb0V2YXNHTE9iamVjdCkpOworICAgIGNvbnRleHQtPm1faW50ZXJuYWwgPSBpbnRl
cm5hbC5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNvbnRleHQucmVsZWFzZSgpOworfQorCitHcmFw
aGljc0NvbnRleHQzRDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJp
YnV0ZXMgYXR0cnMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIGJvb2wgcmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpCisgICAgOiBtX2N1cnJlbnRXaWR0aCgwKQorICAgICwgbV9jdXJyZW50SGVp
Z2h0KDApCisgICAgLCBtX2lzUmVzb3VyY2VTYWZlKGZhbHNlKQoreworfQorCitHcmFwaGljc0Nv
bnRleHQzRDo6fkdyYXBoaWNzQ29udGV4dDNEKCkKK3sKK30KKworUGxhdGZvcm1HcmFwaGljc0Nv
bnRleHQzRCBHcmFwaGljc0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qo
KTsKK30KKworI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKK1BsYXRmb3JtTGF5ZXIq
IEdyYXBoaWNzQ29udGV4dDNEOjpwbGF0Zm9ybUxheWVyKCkgY29uc3QKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgbV9pbnRlcm5hbC0+bWFrZUNvbnRl
eHRDdXJyZW50KCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmlzR0xFUzJDb21wbGlh
bnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2ludGVybmFsLT5pc0dMRVMyQ29tcGxpYW50KCk7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmFjdGl2ZVRleHR1cmUoR0MzRGVudW0gdGV4
dHVyZSkKK3sKKyAgICBtX2ludGVybmFsLT5hY3RpdmVUZXh0dXJlKHRleHR1cmUpOworfQorCit2
b2lkIEdyYXBoaWNzQ29udGV4dDNEOjphdHRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBwcm9n
cmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBtX2ludGVybmFsLT5hdHRhY2hT
aGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Ymlu
ZEF0dHJpYkxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHVpbnQgaW5kZXgs
IGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBtX2ludGVybmFsLT5iaW5kQXR0cmliTG9jYXRp
b24ocHJvZ3JhbSwgaW5kZXgsIG5hbWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpi
aW5kQnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7Cisg
ICAgbV9pbnRlcm5hbC0+YmluZEJ1ZmZlcih0YXJnZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3Jh
cGhpY3NDb250ZXh0M0Q6OmJpbmRGcmFtZWJ1ZmZlcihHQzNEZW51bSB0YXJnZXQsIFBsYXRmb3Jt
M0RPYmplY3QgYnVmZmVyKQoreworICAgIG1faW50ZXJuYWwtPmJpbmRGcmFtZWJ1ZmZlcih0YXJn
ZXQsIGJ1ZmZlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJpbmRSZW5kZXJidWZm
ZXIoR0MzRGVudW0gdGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0IHJlbmRlcmJ1ZmZlcikKK3sKKyAg
ICBtX2ludGVybmFsLT5iaW5kUmVuZGVyYnVmZmVyKHRhcmdldCwgcmVuZGVyYnVmZmVyKTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmluZFRleHR1cmUoR0MzRGVudW0gdGFyZ2V0LCBQ
bGF0Zm9ybTNET2JqZWN0IHRleHR1cmUpCit7CisgICAgbV9pbnRlcm5hbC0+YmluZFRleHR1cmUo
dGFyZ2V0LCB0ZXh0dXJlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRDb2xv
cihHQzNEY2xhbXBmIHJlZCwgR0MzRGNsYW1wZiBncmVlbiwgR0MzRGNsYW1wZiBibHVlLCBHQzNE
Y2xhbXBmIGFscGhhKQoreworICAgIG1faW50ZXJuYWwtPmJsZW5kQ29sb3IocmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpibGVuZEVxdWF0aW9u
KEdDM0RlbnVtIG1vZGUpCit7CisgICAgbV9pbnRlcm5hbC0+YmxlbmRFcXVhdGlvbihtb2RlKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YmxlbmRFcXVhdGlvblNlcGFyYXRlKEdDM0Rl
bnVtIG1vZGVSR0IsIEdDM0RlbnVtIG1vZGVBbHBoYSkKK3sKKyAgICBtX2ludGVybmFsLT5ibGVu
ZEVxdWF0aW9uU2VwYXJhdGUobW9kZVJHQiwgbW9kZUFscGhhKTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6YmxlbmRGdW5jKEdDM0RlbnVtIHNyY0ZhY3RvciwgR0MzRGVudW0gZHN0RmFj
dG9yKQoreworICAgIG1faW50ZXJuYWwtPmJsZW5kRnVuYyhzcmNGYWN0b3IsIGRzdEZhY3Rvcik7
Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJsZW5kRnVuY1NlcGFyYXRlKEdDM0RlbnVt
IHNyY1JHQiwgR0MzRGVudW0gZHN0UkdCLCBHQzNEZW51bSBzcmNBbHBoYSwgR0MzRGVudW0gZHN0
QWxwaGEpCit7CisgICAgbV9pbnRlcm5hbC0+YmxlbmRGdW5jU2VwYXJhdGUoc3JjUkdCLCBkc3RS
R0IsIHNyY0FscGhhLCBkc3RBbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmJ1
ZmZlckRhdGEoR0MzRGVudW0gdGFyZ2V0LCBHQzNEc2l6ZWlwdHIgc2l6ZSwgR0MzRGVudW0gdXNh
Z2UpCit7CisgICAgbV9pbnRlcm5hbC0+YnVmZmVyRGF0YSh0YXJnZXQsIHNpemUsIDAsIHVzYWdl
KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6YnVmZmVyRGF0YShHQzNEZW51bSB0YXJn
ZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhLCBHQzNEZW51bSB1c2FnZSkK
K3sKKyAgICBtX2ludGVybmFsLT5idWZmZXJEYXRhKHRhcmdldCwgc2l6ZSwgZGF0YSwgdXNhZ2Up
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpidWZmZXJTdWJEYXRhKEdDM0RlbnVtIHRh
cmdldCwgR0MzRGludHB0ciBvZmZzZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBk
YXRhKQoreworICAgIG1faW50ZXJuYWwtPmJ1ZmZlclN1YkRhdGEodGFyZ2V0LCBvZmZzZXQsIHNp
emUsIGRhdGEpOworfQorCitHQzNEZW51bSBHcmFwaGljc0NvbnRleHQzRDo6Y2hlY2tGcmFtZWJ1
ZmZlclN0YXR1cyhHQzNEZW51bSB0YXJnZXQpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXModGFyZ2V0KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Y2xlYXIoR0MzRGJpdGZpZWxkIG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+Y2xlYXIobWFz
ayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmNsZWFyQ29sb3IoR0MzRGNsYW1wZiBy
ZWQsIEdDM0RjbGFtcGYgZ3JlZW4sIEdDM0RjbGFtcGYgYmx1ZSwgR0MzRGNsYW1wZiBhbHBoYSkK
K3sKKyAgICBtX2ludGVybmFsLT5jbGVhckNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y2xlYXJEZXB0aChHQzNEY2xhbXBmIGRlcHRo
KQoreworICAgIG1faW50ZXJuYWwtPmNsZWFyRGVwdGgoZGVwdGgpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpjbGVhclN0ZW5jaWwoR0MzRGludCBjbGVhclZhbHVlKQoreworICAgIG1f
aW50ZXJuYWwtPmNsZWFyU3RlbmNpbChjbGVhclZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Y29sb3JNYXNrKEdDM0Rib29sZWFuIHJlZCwgR0MzRGJvb2xlYW4gZ3JlZW4sIEdD
M0Rib29sZWFuIGJsdWUsIEdDM0Rib29sZWFuIGFscGhhKQoreworICAgIG1faW50ZXJuYWwtPmNv
bG9yTWFzayhyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmNvbXBpbGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgbV9p
bnRlcm5hbC0+Y29tcGlsZVNoYWRlcihzaGFkZXIpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpjb3B5VGV4SW1hZ2UyRChHQzNEZW51bSB0YXJnZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0Rl
bnVtIGludGVybmFsZm9ybWF0LCBHQzNEaW50IHgsIEdDM0RpbnQgeSwgR0MzRHNpemVpIHdpZHRo
LCBHQzNEc2l6ZWkgaGVpZ2h0LCBHQzNEaW50IGJvcmRlcikKK3sKKyAgICBtX2ludGVybmFsLT5j
b3B5VGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgeCwgeSwgd2lkdGgs
IGhlaWdodCwgYm9yZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y29weVRleFN1
YkltYWdlMkQoR0MzRGVudW0gdGFyZ2V0LCBHQzNEaW50IGxldmVsLCBHQzNEaW50IHhPZmZzZXQs
IEdDM0RpbnQgeU9mZnNldCwgR0MzRGludCB4LCBHQzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwg
R0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtX2ludGVybmFsLT5jb3B5VGV4U3ViSW1hZ2UyRCh0
YXJnZXQsIGxldmVsLCB4T2Zmc2V0LCB5T2Zmc2V0LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKK30K
Kwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Y3VsbEZhY2UoR0MzRGVudW0gbW9kZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5jdWxsRmFjZShtb2RlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6ZGVwdGhGdW5jKEdDM0RlbnVtIGZ1bmMpCit7CisgICAgbV9pbnRlcm5hbC0+ZGVwdGhGdW5j
KGZ1bmMpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXB0aE1hc2soR0MzRGJvb2xl
YW4gZmxhZykKK3sKKyAgICBtX2ludGVybmFsLT5kZXB0aE1hc2soZmxhZyk7Cit9CisKK3ZvaWQg
R3JhcGhpY3NDb250ZXh0M0Q6OmRlcHRoUmFuZ2UoR0MzRGNsYW1wZiB6TmVhciwgR0MzRGNsYW1w
ZiB6RmFyKQoreworICAgIG1faW50ZXJuYWwtPmRlcHRoUmFuZ2Uoek5lYXIsIHpGYXIpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkZXRhY2hTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBQbGF0Zm9ybTNET2JqZWN0IHNoYWRlcikKK3sKKyAgICBtX2ludGVybmFsLT5kZXRh
Y2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGlzYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgbV9pbnRlcm5hbC0+ZGlzYWJsZShjYXApOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpkaXNhYmxlVmVydGV4QXR0cmliQXJyYXkoR0Mz
RHVpbnQgaW5kZXgpCit7CisgICAgbV9pbnRlcm5hbC0+ZGlzYWJsZVZlcnRleEF0dHJpYkFycmF5
KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZHJhd0FycmF5cyhHQzNEZW51
bSBtb2RlLCBHQzNEaW50IGZpcnN0LCBHQzNEc2l6ZWkgY291bnQpCit7CisgICAgbV9pbnRlcm5h
bC0+ZHJhd0FycmF5cyhtb2RlLCBmaXJzdCwgY291bnQpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjpkcmF3RWxlbWVudHMoR0MzRGVudW0gbW9kZSwgR0MzRHNpemVpIGNvdW50LCBHQzNE
ZW51bSB0eXBlLCBHQzNEaW50cHRyIG9mZnNldCkKK3sKKyAgICBtX2ludGVybmFsLT5kcmF3RWxl
bWVudHMobW9kZSwgY291bnQsIHR5cGUsIG9mZnNldCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmVuYWJsZShHQzNEZW51bSBjYXApCit7CisgICAgbV9pbnRlcm5hbC0+ZW5hYmxlKGNh
cCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmVuYWJsZVZlcnRleEF0dHJpYkFycmF5
KEdDM0R1aW50IGluZGV4KQoreworICAgIG1faW50ZXJuYWwtPmVuYWJsZVZlcnRleEF0dHJpYkFy
cmF5KGluZGV4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6ZmluaXNoKCkKK3sKKyAg
ICBtX2ludGVybmFsLT5maW5pc2goKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Zmx1
c2goKQoreworICAgIG1faW50ZXJuYWwtPmZsdXNoKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmZyYW1lYnVmZmVyUmVuZGVyYnVmZmVyKEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0g
YXR0YWNobWVudCwgR0MzRGVudW0gcmVuZGVyYnVmZmVyVGFyZ2V0LCBQbGF0Zm9ybTNET2JqZWN0
IGJ1ZmZlcikKK3sKKyAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclJlbmRlcmJ1ZmZlcih0YXJn
ZXQsIGF0dGFjaG1lbnQsIHJlbmRlcmJ1ZmZlclRhcmdldCwgYnVmZmVyKTsKK30KKwordm9pZCBH
cmFwaGljc0NvbnRleHQzRDo6ZnJhbWVidWZmZXJUZXh0dXJlMkQoR0MzRGVudW0gdGFyZ2V0LCBH
QzNEZW51bSBhdHRhY2htZW50LCBHQzNEZW51bSB0ZXhUYXJnZXQsIFBsYXRmb3JtM0RPYmplY3Qg
dGV4dHVyZSwgR0MzRGludCBsZXZlbCkKK3sKKyAgICBtX2ludGVybmFsLT5mcmFtZWJ1ZmZlclRl
eHR1cmUyRCh0YXJnZXQsIGF0dGFjaG1lbnQsIHRleFRhcmdldCwgdGV4dHVyZSwgbGV2ZWwpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpmcm9udEZhY2UoR0MzRGVudW0gbW9kZSkKK3sK
KyAgICBtX2ludGVybmFsLT5mcm9udEZhY2UobW9kZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdlbmVyYXRlTWlwbWFwKEdDM0RlbnVtIHRhcmdldCkKK3sKKyAgICBtX2ludGVybmFs
LT5nZW5lcmF0ZU1pcG1hcCh0YXJnZXQpOworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjpn
ZXRBY3RpdmVBdHRyaWIoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBHQzNEdWludCBpbmRleCwg
QWN0aXZlSW5mbyYgaW5mbykKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0QWN0aXZlQXR0
cmliKHByb2dyYW0sIGluZGV4LCBpbmZvKTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6
Z2V0QWN0aXZlVW5pZm9ybShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0R1aW50IGluZGV4
LCBBY3RpdmVJbmZvJiBpbmZvKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRBY3RpdmVV
bmlmb3JtKHByb2dyYW0sIGluZGV4LCBpbmZvKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6Z2V0QXR0YWNoZWRTaGFkZXJzKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgR0MzRHNpemVp
IG1heENvdW50LCBHQzNEc2l6ZWkqIGNvdW50LCBQbGF0Zm9ybTNET2JqZWN0KiBzaGFkZXJzKQor
eworICAgIG1faW50ZXJuYWwtPmdldEF0dGFjaGVkU2hhZGVycyhwcm9ncmFtLCBtYXhDb3VudCwg
Y291bnQsIHNoYWRlcnMpOworfQorCitpbnQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEF0dHJpYkxv
Y2F0aW9uKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCBuYW1lKTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0Qm9vbGVhbnYoR0MzRGVudW0gcGFyYW1O
YW1lLCBHQzNEYm9vbGVhbiogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+Z2V0Qm9vbGVhbnYo
cGFyYW1OYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEJ1ZmZl
clBhcmFtZXRlcml2KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50
KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5nZXRCdWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQs
IHBhcmFtTmFtZSwgdmFsdWUpOworfQorCitHcmFwaGljc0NvbnRleHQzRDo6QXR0cmlidXRlcyBH
cmFwaGljc0NvbnRleHQzRDo6Z2V0Q29udGV4dEF0dHJpYnV0ZXMoKQoreworICAgIHJldHVybiBt
X2ludGVybmFsLT5nZXRDb250ZXh0QXR0cmlidXRlcygpOworfQorCitHQzNEZW51bSBHcmFwaGlj
c0NvbnRleHQzRDo6Z2V0RXJyb3IoKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRFcnJv
cigpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRGbG9hdHYoR0MzRGVudW0gcGFy
YW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAgIG1faW50ZXJuYWwtPmdldEZsb2F0dihw
YXJhbU5hbWUsIHZhbHVlKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0RnJhbWVi
dWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBhdHRh
Y2htZW50LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQqIHZhbHVlKQoreworICAgIG1faW50
ZXJuYWwtPmdldEZyYW1lYnVmZmVyQXR0YWNobWVudFBhcmFtZXRlcml2KHRhcmdldCwgYXR0YWNo
bWVudCwgcGFyYW1OYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dEludGVnZXJ2KEdDM0RlbnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbV9p
bnRlcm5hbC0+Z2V0SW50ZWdlcnYocGFyYW1OYW1lLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OmdldFByb2dyYW1pdihQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0sIEdDM0Rl
bnVtIHBhcmFtTmFtZSwgR0MzRGludCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+Z2V0UHJv
Z3JhbWl2KHByb2dyYW0sIHBhcmFtTmFtZSwgdmFsdWUpOworfQorCitTdHJpbmcgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFByb2dyYW1JbmZvTG9nKFBsYXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sK
KyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Z2V0UHJvZ3JhbUluZm9Mb2cocHJvZ3JhbSk7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFJlbmRlcmJ1ZmZlclBhcmFtZXRlcml2KEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBt
X2ludGVybmFsLT5nZXRSZW5kZXJidWZmZXJQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwg
dmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJpdihQbGF0Zm9y
bTNET2JqZWN0IHNoYWRlciwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sK
KyAgICBtX2ludGVybmFsLT5nZXRTaGFkZXJpdihzaGFkZXIsIHBhcmFtTmFtZSwgdmFsdWUpOwor
fQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFNoYWRlckluZm9Mb2coUGxhdGZvcm0z
RE9iamVjdCBzaGFkZXIpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmdldFNoYWRlckluZm9M
b2coc2hhZGVyKTsKK30KKworU3RyaW5nIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRTaGFkZXJTb3Vy
Y2UoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmdl
dFNoYWRlclNvdXJjZShzaGFkZXIpOworfQorCitTdHJpbmcgR3JhcGhpY3NDb250ZXh0M0Q6Omdl
dFN0cmluZyhHQzNEZW51bSBuYW1lKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRTdHJp
bmcobmFtZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcmZ2
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEZmxvYXQqIHZhbHVlKQor
eworICAgIG1faW50ZXJuYWwtPmdldFRleFBhcmFtZXRlcmZ2KHRhcmdldCwgcGFyYW1OYW1lLCB2
YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFRleFBhcmFtZXRlcml2KEdD
M0RlbnVtIHRhcmdldCwgR0MzRGVudW0gcGFyYW1OYW1lLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAg
ICBtX2ludGVybmFsLT5nZXRUZXhQYXJhbWV0ZXJpdih0YXJnZXQsIHBhcmFtTmFtZSwgdmFsdWUp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtZnYoUGxhdGZvcm0zRE9i
amVjdCBwcm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQqIHZhbHVlKQoreworICAg
IG1faW50ZXJuYWwtPmdldFVuaWZvcm1mdihwcm9ncmFtLCBsb2NhdGlvbiwgdmFsdWUpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpnZXRVbmlmb3JtaXYoUGxhdGZvcm0zRE9iamVjdCBw
cm9ncmFtLCBHQzNEaW50IGxvY2F0aW9uLCBHQzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVy
bmFsLT5nZXRVbmlmb3JtaXYocHJvZ3JhbSwgbG9jYXRpb24sIHZhbHVlKTsKK30KKworR0MzRGlu
dCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0VW5pZm9ybUxvY2F0aW9uKFBsYXRmb3JtM0RPYmplY3Qg
cHJvZ3JhbSwgY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5n
ZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgbmFtZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OmdldFZlcnRleEF0dHJpYmZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZW51bSBwYXJhbU5h
bWUsIEdDM0RmbG9hdCogdmFsdWUpCit7CisgICAgbV9pbnRlcm5hbC0+Z2V0VmVydGV4QXR0cmli
ZnYoaW5kZXgsIHBhcmFtTmFtZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpnZXRWZXJ0ZXhBdHRyaWJpdihHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1lLCBH
QzNEaW50KiB2YWx1ZSkKK3sKKyAgICBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJpdihpbmRl
eCwgcGFyYW1OYW1lLCB2YWx1ZSk7Cit9CisKK2xvbmcgR3JhcGhpY3NDb250ZXh0M0Q6OmdldFZl
cnRleEF0dHJpYk9mZnNldChHQzNEdWludCBpbmRleCwgR0MzRGVudW0gcGFyYW1OYW1lKQorewor
ICAgIHJldHVybiBtX2ludGVybmFsLT5nZXRWZXJ0ZXhBdHRyaWJPZmZzZXQoaW5kZXgsIHBhcmFt
TmFtZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmhpbnQoR0MzRGVudW0gdGFyZ2V0
LCBHQzNEZW51bSBtb2RlKQoreworICAgIG1faW50ZXJuYWwtPmhpbnQodGFyZ2V0LCBtb2RlKTsK
K30KKworR0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzQnVmZmVyKFBsYXRmb3JtM0RP
YmplY3Qgb2JqKQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5pc0J1ZmZlcihvYmopOworfQor
CitHQzNEYm9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNFbmFibGVkKEdDM0RlbnVtIGNhcCkK
K3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNFbmFibGVkKGNhcCk7Cit9CisKK0dDM0Rib29s
ZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc0ZyYW1lYnVmZmVyKFBsYXRmb3JtM0RPYmplY3Qgb2Jq
KQoreworICAgIHJldHVybiBtX2ludGVybmFsLT5pc0ZyYW1lYnVmZmVyKG9iaik7Cit9CisKK0dD
M0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBv
YmopCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzUHJvZ3JhbShvYmopOworfQorCitHQzNE
Ym9vbGVhbiBHcmFwaGljc0NvbnRleHQzRDo6aXNSZW5kZXJidWZmZXIoUGxhdGZvcm0zRE9iamVj
dCBvYmopCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmlzUmVuZGVyYnVmZmVyKG9iaik7Cit9
CisKK0dDM0Rib29sZWFuIEdyYXBoaWNzQ29udGV4dDNEOjppc1NoYWRlcihQbGF0Zm9ybTNET2Jq
ZWN0IG9iaikKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNTaGFkZXIob2JqKTsKK30KKwor
R0MzRGJvb2xlYW4gR3JhcGhpY3NDb250ZXh0M0Q6OmlzVGV4dHVyZShQbGF0Zm9ybTNET2JqZWN0
IG9iaikKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+aXNUZXh0dXJlKG9iaik7Cit9CisKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmxpbmVXaWR0aChHQzNEZmxvYXQgd2lkdGgpCit7CisgICAg
bV9pbnRlcm5hbC0+bGluZVdpZHRoKHdpZHRoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6bGlua1Byb2dyYW0oUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1faW50ZXJu
YWwtPmxpbmtQcm9ncmFtKHByb2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpw
aXhlbFN0b3JlaShHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFyYW0pCit7CisgICAgbV9p
bnRlcm5hbC0+cGl4ZWxTdG9yZWkocGFyYW1OYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhp
Y3NDb250ZXh0M0Q6OnBvbHlnb25PZmZzZXQoR0MzRGZsb2F0IGZhY3RvciwgR0MzRGZsb2F0IHVu
aXRzKQoreworICAgIG1faW50ZXJuYWwtPnBvbHlnb25PZmZzZXQoZmFjdG9yLCB1bml0cyk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnJlYWRQaXhlbHMoR0MzRGludCB4LCBHQzNEaW50
IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCB2b2lkKiBkYXRhKQoreworICAgIG1faW50ZXJuYWwtPnJlYWRQaXhlbHMo
eCwgeSwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0eXBlLCBkYXRhKTsKK30KKwordm9pZCBHcmFw
aGljc0NvbnRleHQzRDo6cmVsZWFzZVNoYWRlckNvbXBpbGVyKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpyZW5kZXJidWZmZXJTdG9yYWdl
KEdDM0RlbnVtIHRhcmdldCwgR0MzRGVudW0gaW50ZXJuYWxmb3JtYXQsIEdDM0RzaXplaSB3aWR0
aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtX2ludGVybmFsLT5yZW5kZXJidWZmZXJTdG9y
YWdlKHRhcmdldCwgaW50ZXJuYWxmb3JtYXQsIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdy
YXBoaWNzQ29udGV4dDNEOjpzYW1wbGVDb3ZlcmFnZShHQzNEY2xhbXBmIHZhbHVlLCBHQzNEYm9v
bGVhbiBpbnZlcnQpCit7CisgICAgbV9pbnRlcm5hbC0+c2FtcGxlQ292ZXJhZ2UodmFsdWUsIGlu
dmVydCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNjaXNzb3IoR0MzRGludCB4LCBH
QzNEaW50IHksIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCkKK3sKKyAgICBtX2lu
dGVybmFsLT5zY2lzc29yKHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNz
Q29udGV4dDNEOjpzaGFkZXJTb3VyY2UoUGxhdGZvcm0zRE9iamVjdCBwcm9ncmFtLCBjb25zdCBT
dHJpbmcmIHN0cmluZykKK3sKKyAgICBtX2ludGVybmFsLT5zaGFkZXJTb3VyY2UocHJvZ3JhbSwg
c3RyaW5nKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c3RlbmNpbEZ1bmMoR0MzRGVu
dW0gZnVuYywgR0MzRGludCByZWYsIEdDM0R1aW50IG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+
c3RlbmNpbEZ1bmMoZnVuYywgcmVmLCBtYXNrKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQz
RDo6c3RlbmNpbEZ1bmNTZXBhcmF0ZShHQzNEZW51bSBmYWNlLCBHQzNEZW51bSBmdW5jLCBHQzNE
aW50IHJlZiwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtX2ludGVybmFsLT5zdGVuY2lsRnVuY1Nl
cGFyYXRlKGZhY2UsIGZ1bmMsIHJlZiwgbWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnN0ZW5jaWxNYXNrKEdDM0R1aW50IG1hc2spCit7CisgICAgbV9pbnRlcm5hbC0+c3RlbmNp
bE1hc2sobWFzayk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnN0ZW5jaWxNYXNrU2Vw
YXJhdGUoR0MzRGVudW0gZmFjZSwgR0MzRHVpbnQgbWFzaykKK3sKKyAgICBtX2ludGVybmFsLT5z
dGVuY2lsTWFza1NlcGFyYXRlKGZhY2UsIG1hc2spOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpzdGVuY2lsT3AoR0MzRGVudW0gZmFpbCwgR0MzRGVudW0gemZhaWwsIEdDM0RlbnVtIHpw
YXNzKQoreworICAgIG1faW50ZXJuYWwtPnN0ZW5jaWxPcChmYWlsLCB6ZmFpbCwgenBhc3MpOwor
fQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjpzdGVuY2lsT3BTZXBhcmF0ZShHQzNEZW51bSBm
YWNlLCBHQzNEZW51bSBmYWlsLCBHQzNEZW51bSB6ZmFpbCwgR0MzRGVudW0genBhc3MpCit7Cisg
ICAgbV9pbnRlcm5hbC0+c3RlbmNpbE9wU2VwYXJhdGUoZmFjZSwgZmFpbCwgemZhaWwsIHpwYXNz
KTsKK30KKworYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6dGV4SW1hZ2UyRChHQzNEZW51bSB0YXJn
ZXQsIEdDM0RpbnQgbGV2ZWwsIEdDM0RlbnVtIGludGVybmFsZm9ybWF0LCBHQzNEc2l6ZWkgd2lk
dGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RpbnQgYm9yZGVyLCBHQzNEZW51bSBmb3JtYXQsIEdD
M0RlbnVtIHR5cGUsIGNvbnN0IHZvaWQqIHBpeGVscykKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5h
bC0+dGV4SW1hZ2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgd2lkdGgsIGhlaWdo
dCwgYm9yZGVyLCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250
ZXh0M0Q6OnRleFBhcmFtZXRlcmYoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUs
IEdDM0RmbG9hdCBwYXJhbSkKK3sKKyAgICBtX2ludGVybmFsLT50ZXhQYXJhbWV0ZXJmKHRhcmdl
dCwgcGFyYW1OYW1lLCBwYXJhbSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnRleFBh
cmFtZXRlcmkoR0MzRGVudW0gdGFyZ2V0LCBHQzNEZW51bSBwYXJhbU5hbWUsIEdDM0RpbnQgcGFy
YW0pCit7CisgICAgbV9pbnRlcm5hbC0+dGV4UGFyYW1ldGVyaSh0YXJnZXQsIHBhcmFtTmFtZSwg
cGFyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp0ZXhTdWJJbWFnZTJEKEdDM0Rl
bnVtIHRhcmdldCwgR0MzRGludCBsZXZlbCwgR0MzRGludCB4T2Zmc2V0LCBHQzNEaW50IHlPZmZz
ZXQsIEdDM0RzaXplaSB3aWR0aCwgR0MzRHNpemVpIGhlaWdodCwgR0MzRGVudW0gZm9ybWF0LCBH
QzNEZW51bSB0eXBlLCBjb25zdCB2b2lkKiBwaXhlbHMpCit7CisgICAgbV9pbnRlcm5hbC0+dGV4
U3ViSW1hZ2UyRCh0YXJnZXQsIGxldmVsLCB4T2Zmc2V0LCB5T2Zmc2V0LCB3aWR0aCwgaGVpZ2h0
LCBmb3JtYXQsIHR5cGUsIHBpeGVscyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm0xZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCkKK3sKKyAgICBtX2ludGVybmFs
LT51bmlmb3JtMWYobG9jYXRpb24sIHgpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1
bmlmb3JtMWZ2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCogdiwgR0MzRHNpemVpIHNpemUp
Cit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFmdihsb2NhdGlvbiwgc2l6ZSwgdik7Cit9CisK
K3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0xaShHQzNEaW50IGxvY2F0aW9uLCBHQzNE
aW50IHgpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTFpKGxvY2F0aW9uLCB4KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTFpdihHQzNEaW50IGxvY2F0aW9uLCBHQzNE
aW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMWl2KGxv
Y2F0aW9uLCBzaXplLCB2KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJm
KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBmbG9hdCB5KQoreworICAgIG1faW50ZXJu
YWwtPnVuaWZvcm0yZihsb2NhdGlvbiwgeCwgeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OnVuaWZvcm0yZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkg
c2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtMmZ2KGxvY2F0aW9uLCBzaXplLCB2KTsK
K30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTJpKEdDM0RpbnQgbG9jYXRpb24s
IEdDM0RpbnQgeCwgR0MzRGludCB5KQoreworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0yaShsb2Nh
dGlvbiwgeCwgeSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0yaXYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGludCogdiwgR0MzRHNpemVpIHNpemUpCit7CisgICAgbV9pbnRl
cm5hbC0+dW5pZm9ybTJpdihsb2NhdGlvbiwgc2l6ZSwgdik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnVuaWZvcm0zZihHQzNEaW50IGxvY2F0aW9uLCBHQzNEZmxvYXQgeCwgR0MzRGZs
b2F0IHksIEdDM0RmbG9hdCB6KQoreworICAgIG1faW50ZXJuYWwtPnVuaWZvcm0zZihsb2NhdGlv
biwgeCwgeSwgeik7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVuaWZvcm0zZnYoR0Mz
RGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtX2lu
dGVybmFsLT51bmlmb3JtM2Z2KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKwordm9pZCBHcmFwaGlj
c0NvbnRleHQzRDo6dW5pZm9ybTNpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQgeCwgR0MzRGlu
dCB5LCBHQzNEaW50IHopCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybTNpKGxvY2F0aW9uLCB4
LCB5LCB6KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTNpdihHQzNEaW50
IGxvY2F0aW9uLCBHQzNEaW50KiB2LCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFs
LT51bmlmb3JtM2l2KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6dW5pZm9ybTRmKEdDM0RpbnQgbG9jYXRpb24sIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQg
eSwgR0MzRGZsb2F0IHosIEdDM0RmbG9hdCB3KQoreworICAgIG1faW50ZXJuYWwtPnVuaWZvcm00
Zihsb2NhdGlvbiwgeCwgeSwgeiwgdyk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm00ZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGZsb2F0KiB2LCBHQzNEc2l6ZWkgc2l6ZSkK
K3sKKyAgICBtX2ludGVybmFsLT51bmlmb3JtNGZ2KGxvY2F0aW9uLCBzaXplLCB2KTsKK30KKwor
dm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybTRpKEdDM0RpbnQgbG9jYXRpb24sIEdDM0Rp
bnQgeCwgR0MzRGludCB5LCBHQzNEaW50IHosIEdDM0RpbnQgdykKK3sKKyAgICBtX2ludGVybmFs
LT51bmlmb3JtNGkobG9jYXRpb24sIHgsIHksIHosIHcpOworfQorCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDNEOjp1bmlmb3JtNGl2KEdDM0RpbnQgbG9jYXRpb24sIEdDM0RpbnQqIHYsIEdDM0RzaXpl
aSBzaXplKQoreworICAgIG1faW50ZXJuYWwtPnVuaWZvcm00aXYobG9jYXRpb24sIHNpemUsIHYp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1bmlmb3JtTWF0cml4MmZ2KEdDM0RpbnQg
bG9jYXRpb24sIEdDM0Rib29sZWFuIHRyYW5zcG9zZSwgR0MzRGZsb2F0KiB2YWx1ZSwgR0MzRHNp
emVpIHNpemUpCit7CisgICAgbV9pbnRlcm5hbC0+dW5pZm9ybU1hdHJpeDJmdihsb2NhdGlvbiwg
c2l6ZSwgdHJhbnNwb3NlLCB2YWx1ZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnVu
aWZvcm1NYXRyaXgzZnYoR0MzRGludCBsb2NhdGlvbiwgR0MzRGJvb2xlYW4gdHJhbnNwb3NlLCBH
QzNEZmxvYXQqIHZhbHVlLCBHQzNEc2l6ZWkgc2l6ZSkKK3sKKyAgICBtX2ludGVybmFsLT51bmlm
b3JtTWF0cml4M2Z2KGxvY2F0aW9uLCBzaXplLCB0cmFuc3Bvc2UsIHZhbHVlKTsKK30KKwordm9p
ZCBHcmFwaGljc0NvbnRleHQzRDo6dW5pZm9ybU1hdHJpeDRmdihHQzNEaW50IGxvY2F0aW9uLCBH
QzNEYm9vbGVhbiB0cmFuc3Bvc2UsIEdDM0RmbG9hdCogdmFsdWUsIEdDM0RzaXplaSBzaXplKQor
eworICAgIG1faW50ZXJuYWwtPnVuaWZvcm1NYXRyaXg0ZnYobG9jYXRpb24sIHNpemUsIHRyYW5z
cG9zZSwgdmFsdWUpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp1c2VQcm9ncmFtKFBs
YXRmb3JtM0RPYmplY3QgcHJvZ3JhbSkKK3sKKyAgICBtX2ludGVybmFsLT51c2VQcm9ncmFtKHBy
b2dyYW0pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2YWxpZGF0ZVByb2dyYW0oUGxh
dGZvcm0zRE9iamVjdCBwcm9ncmFtKQoreworICAgIG1faW50ZXJuYWwtPnZhbGlkYXRlUHJvZ3Jh
bShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0cmliMWYo
R0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4KQoreworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0
dHJpYjFmKGluZGV4LCB4KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliMWZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykKK3sKKyAgICBtX2ludGVy
bmFsLT52ZXJ0ZXhBdHRyaWIxZnYoaW5kZXgsIHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnZlcnRleEF0dHJpYjJmKEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQgeCwgR0Mz
RGZsb2F0IHkpCit7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliMmYoaW5kZXgsIHgsIHkp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIyZnYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQoreworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJp
YjJmdihpbmRleCwgdmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4
QXR0cmliM2YoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZs
b2F0IHopCit7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliM2YoaW5kZXgsIHgsIHksIHop
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2ZXJ0ZXhBdHRyaWIzZnYoR0MzRHVpbnQg
aW5kZXgsIEdDM0RmbG9hdCogdmFsdWVzKQoreworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJp
YjNmdihpbmRleCwgdmFsdWVzKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4
QXR0cmliNGYoR0MzRHVpbnQgaW5kZXgsIEdDM0RmbG9hdCB4LCBHQzNEZmxvYXQgeSwgR0MzRGZs
b2F0IHosIEdDM0RmbG9hdCB3KQoreworICAgIG1faW50ZXJuYWwtPnZlcnRleEF0dHJpYjRmKGlu
ZGV4LCB4LCB5LCB6LCB3KTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6dmVydGV4QXR0
cmliNGZ2KEdDM0R1aW50IGluZGV4LCBHQzNEZmxvYXQqIHZhbHVlcykKK3sKKyAgICBtX2ludGVy
bmFsLT52ZXJ0ZXhBdHRyaWI0ZnYoaW5kZXgsIHZhbHVlcyk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnZlcnRleEF0dHJpYlBvaW50ZXIoR0MzRHVpbnQgaW5kZXgsIEdDM0RpbnQgc2l6
ZSwgR0MzRGVudW0gdHlwZSwgR0MzRGJvb2xlYW4gbm9ybWFsaXplZCwgR0MzRHNpemVpIHN0cmlk
ZSwgR0MzRGludHB0ciBvZmZzZXQpCit7CisgICAgbV9pbnRlcm5hbC0+dmVydGV4QXR0cmliUG9p
bnRlcihpbmRleCwgc2l6ZSwgdHlwZSwgbm9ybWFsaXplZCwgc3RyaWRlLCBvZmZzZXQpOworfQor
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjp2aWV3cG9ydChHQzNEaW50IHgsIEdDM0RpbnQgeSwg
R0MzRHNpemVpIHdpZHRoLCBHQzNEc2l6ZWkgaGVpZ2h0KQoreworICAgIG1faW50ZXJuYWwtPnZp
ZXdwb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNE
OjpyZXNoYXBlKGludCB3aWR0aCwgaW50IGhlaWdodCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEOjptYXJrQ29udGV4dENoYW5nZWQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6Om1hcmtM
YXllckNvbXBvc2l0ZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgR3Jh
cGhpY3NDb250ZXh0M0Q6OmxheWVyQ29tcG9zaXRlZCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6
OnBhaW50UmVuZGVyaW5nUmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNv
bnRleHQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworUGFzc1JlZlB0cjxJbWFnZURh
dGE+IEdyYXBoaWNzQ29udGV4dDNEOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFnZURh
dGEgPSBJbWFnZURhdGE6OmNyZWF0ZShJbnRTaXplKDEsIDEpKTsKKyAgICByZXR1cm4gaW1hZ2VE
YXRhLnJlbGVhc2UoKTsKK30KKworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6
Y3JlYXRlQnVmZmVyKCkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlQnVmZmVyKCk7
Cit9CisKK1BsYXRmb3JtM0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZUZyYW1lYnVm
ZmVyKCkKK3sKKyAgICByZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlRnJhbWVidWZmZXIoKTsKK30K
KworUGxhdGZvcm0zRE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUHJvZ3JhbSgpCit7
CisgICAgcmV0dXJuIG1faW50ZXJuYWwtPmNyZWF0ZVByb2dyYW0oKTsKK30KKworUGxhdGZvcm0z
RE9iamVjdCBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlUmVuZGVyYnVmZmVyKCkKK3sKKyAgICBy
ZXR1cm4gbV9pbnRlcm5hbC0+Y3JlYXRlUmVuZGVyYnVmZmVyKCk7Cit9CisKK1BsYXRmb3JtM0RP
YmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVNoYWRlcihHQzNEZW51bSB0eXBlKQorewor
ICAgIHJldHVybiBtX2ludGVybmFsLT5jcmVhdGVTaGFkZXIodHlwZSk7Cit9CisKK1BsYXRmb3Jt
M0RPYmplY3QgR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZVRleHR1cmUoKQoreworICAgIHJldHVy
biBtX2ludGVybmFsLT5jcmVhdGVUZXh0dXJlKCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0Q6OmRlbGV0ZUJ1ZmZlcihQbGF0Zm9ybTNET2JqZWN0IGJ1ZmZlcikKK3sKKyAgICBtX2ludGVy
bmFsLT5kZWxldGVCdWZmZXIoYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6
ZGVsZXRlRnJhbWVidWZmZXIoUGxhdGZvcm0zRE9iamVjdCBidWZmZXIpCit7CisgICAgbV9pbnRl
cm5hbC0+ZGVsZXRlRnJhbWVidWZmZXIoYnVmZmVyKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGVsZXRlUHJvZ3JhbShQbGF0Zm9ybTNET2JqZWN0IHByb2dyYW0pCit7CisgICAgbV9p
bnRlcm5hbC0+ZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRl
eHQzRDo6ZGVsZXRlUmVuZGVyYnVmZmVyKFBsYXRmb3JtM0RPYmplY3QgYnVmZmVyKQoreworICAg
IG1faW50ZXJuYWwtPmRlbGV0ZVJlbmRlcmJ1ZmZlcihidWZmZXIpOworfQorCit2b2lkIEdyYXBo
aWNzQ29udGV4dDNEOjpkZWxldGVTaGFkZXIoUGxhdGZvcm0zRE9iamVjdCBzaGFkZXIpCit7Cisg
ICAgbV9pbnRlcm5hbC0+ZGVsZXRlU2hhZGVyKHNoYWRlcik7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmRlbGV0ZVRleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlKQoreworICAg
IG1faW50ZXJuYWwtPmRlbGV0ZVRleHR1cmUodGV4dHVyZSk7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OnN5bnRoZXNpemVHTEVycm9yKEdDM0RlbnVtIGVycm9yKQoreworICAgIG1faW50
ZXJuYWwtPnN5bnRoZXNpemVHTEVycm9yKGVycm9yKTsKK30KKworRXh0ZW5zaW9uczNEKiBHcmFw
aGljc0NvbnRleHQzRDo6Z2V0RXh0ZW5zaW9ucygpCit7CisgICAgcmV0dXJuIG1faW50ZXJuYWwt
PmdldEV4dGVuc2lvbnMoKTsKK30KKworSW50U2l6ZSBHcmFwaGljc0NvbnRleHQzRDo6Z2V0SW50
ZXJuYWxGcmFtZWJ1ZmZlclNpemUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIEludFNpemUoKTsKK30KKwordm9pZCBHcmFwaGljc0NvbnRleHQzRDo6c2V0Q29udGV4dExv
c3RDYWxsYmFjayhQYXNzT3duUHRyPENvbnRleHRMb3N0Q2FsbGJhY2s+KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEltYWdlRGF0YShJ
bWFnZSogaW1hZ2UsIEdDM0RlbnVtIGZvcm1hdCwgR0MzRGVudW0gdHlwZSwgYm9vbCBwcmVtdWx0
aXBseUFscGhhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaWdu
b3JlR2FtbWFBbmRDb2xvclByb2ZpbGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>