<?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>10557</bug_id>
          
          <creation_ts>2006-08-25 00:54:38 -0700</creation_ts>
          <short_desc>KCanvasPath should be replace by platform/Path</short_desc>
          <delta_ts>2006-08-28 00:11:40 -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>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Rob Buis">rwlbuis</reporter>
          <assigned_to name="Rob Buis">rwlbuis</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>53500</commentid>
    <comment_count>0</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-08-25 00:54:38 -0700</bug_when>
    <thetext>KCanvasPath does basically the same as platform/Path, so is redundant, especially
since kcanvas code needs to be merged into GraphicsContext and friends.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53507</commentid>
    <comment_count>1</comment_count>
      <attachid>10212</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-08-25 01:12:31 -0700</bug_when>
    <thetext>Created attachment 10212
Initial patch

This patch is not yet in review shape, for instance it needs qt additions I think. Also
not all methods are converted. Nevertheless, if anyone wants to give feedback, go ahead :)
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53701</commentid>
    <comment_count>2</comment_count>
      <attachid>10231</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-08-25 14:36:39 -0700</bug_when>
    <thetext>Created attachment 10231
General KCanvasPath removal

This patch has all the non-platform specific removal of KCanvasPath. 
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53702</commentid>
    <comment_count>3</comment_count>
      <attachid>10232</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-08-25 14:37:50 -0700</bug_when>
    <thetext>Created attachment 10232
Quartz specific KCanvasPath removal

This contains quartz specific KCanvasPath removal.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53749</commentid>
    <comment_count>4</comment_count>
      <attachid>10231</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-26 02:34:29 -0700</bug_when>
    <thetext>Comment on attachment 10231
General KCanvasPath removal

If you&apos;re going to change to FloatRect, you might as well change to use FloatSize as well here:

+Path KCanvasCreator::createRoundedRectangle(const FloatRect&amp; box, float rx, float ry) const

const FloatSize&amp; roundingRadii

&amp; could be moved here:
+const RenderPathList &amp;KCanvasResource::clients() const

I don&apos;t think this needs to be a list here:
+typedef DeprecatedValueList&lt;const RenderPath *&gt; RenderPathList;

A vector would probably be better.

Can&apos;t this be an enum?
+    unsigned m_windRule : 1; // WindRule

Again, probably should be a vector:
+class KCClipDataList : public DeprecatedValueList&lt;KCClipData&gt;

I don&apos;t like these type of casts:
+                m_clipper-&gt;addClipData(pathData, (WindRule) pathStyle-&gt;svgStyle()-&gt;clipRule(), bbox);
Ideally they should just use the same enum.  No sense in having a separate one for kcanvas anymore.

+        DeprecatedString debugString() const;

should use use String.

So this patch looks great, but it could be better with a bit more tweaking.

There is really nothing in my review which would fully justify an r-.  It would be really nice to get rid of the &quot;List&quot; classes and use Vectors instead before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53750</commentid>
    <comment_count>5</comment_count>
      <attachid>10232</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-26 02:39:50 -0700</bug_when>
    <thetext>Comment on attachment 10232
Quartz specific KCanvasPath removal

No real need to use intermediates here:

+    CGMutablePathRef cgPath = path().platformPath();
+    return pathContainsPoint(cgPath, point, kCGPathStroke);

but you can if you want.  Just adds a line of extra code to the file.

Should probably correct my old spelling error while you&apos;re in there:

+    // perhaps it would be sufficien to just outset the fill bbox by

Too tired to think straight.  I&apos;ll look at this again later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53793</commentid>
    <comment_count>6</comment_count>
      <attachid>10232</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-26 12:31:26 -0700</bug_when>
    <thetext>Comment on attachment 10232
Quartz specific KCanvasPath removal

This looks fine.  As long as all the tests pass, this is good to land. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53913</commentid>
    <comment_count>7</comment_count>
      <attachid>10250</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-08-27 00:41:11 -0700</bug_when>
    <thetext>Created attachment 10250
Qt specific KCanvasPath removal

The qt part of the patch.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>53923</commentid>
    <comment_count>8</comment_count>
      <attachid>10250</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-27 02:19:55 -0700</bug_when>
    <thetext>Comment on attachment 10250
Qt specific KCanvasPath removal

My only two comments:
+    if(dashLength)
+    {
and similar minor style issues.

Make sure the copyrights are all up-to-date.

Otherwise looks great. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54008</commentid>
    <comment_count>9</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2006-08-28 00:11:40 -0700</bug_when>
    <thetext>Landed in r16054.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10212</attachid>
            <date>2006-08-25 01:12:31 -0700</date>
            <delta_ts>2006-08-25 14:36:39 -0700</delta_ts>
            <desc>Initial patch</desc>
            <filename>10557.diff</filename>
            <type>text/plain</type>
            <size>72247</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjAzMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTAzIEBACisyMDA2LTA4LTI1ICBSb2IgQnVpcyAgPGJ1aXNAa2RlLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwOi8vYnVn
emlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTU3CisgICAgICAgIEtDYW52
YXNQYXRoIHNob3VsZCBiZSByZXBsYWNlIGJ5IHBsYXRmb3JtL1BhdGgKKworICAgICAgICBSZWZh
Y3RvcmluZyBvdXQgdGhlIEtDYW52YXNQYXRoIGNsYXNzLgorCisgICAgICAgIFdBUk5JTkc6IE5P
IFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6S0NhbnZhc0NyZWF0b3I6OmNyZWF0ZVJvdW5kZWRSZWN0YW5n
bGUpOgorICAgICAgICAoV2ViQ29yZTo6S0NhbnZhc0NyZWF0b3I6OmNyZWF0ZVJlY3RhbmdsZSk6
CisgICAgICAgIChXZWJDb3JlOjpLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlRWxsaXBzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlQ2lyY2xlKToKKyAgICAgICAgKFdl
YkNvcmU6OktDYW52YXNDcmVhdG9yOjpjcmVhdGVMaW5lKToKKyAgICAgICAgKiBrY2FudmFzL0tD
YW52YXNDcmVhdG9yLmg6CisgICAgICAgICoga2NhbnZhcy9LQ2FudmFzUGF0aC5jcHA6IFJlbW92
ZWQuCisgICAgICAgICoga2NhbnZhcy9LQ2FudmFzUGF0aC5oOiBSZW1vdmVkLgorICAgICAgICAq
IGtjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cjw8KToKKyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNDbGlwcGVyOjphZGRDbGlwRGF0YSk6Cisg
ICAgICAgICoga2NhbnZhcy9LQ2FudmFzUmVzb3VyY2VzLmg6CisgICAgICAgIChXZWJDb3JlOjpL
Q0NsaXBEYXRhOjp3aW5kUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpLQ0NsaXBEYXRhTGlzdDo6
S0NDbGlwRGF0YUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6S0NDbGlwRGF0YUxpc3Q6OmFkZFBh
dGgpOgorICAgICAgICAqIGtjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBrY2FudmFzL1JlbmRlclBhdGguY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6ZmlsbENvbnRhaW5zKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclBhdGg6OnN0cm9rZUNvbnRhaW5zKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlclBhdGg6OnJlbGF0aXZlQkJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpz
ZXRQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6OnBhdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUGF0aDo6cGFpbnQpOgorICAgICAgICAqIGtjYW52YXMvUmVuZGVyUGF0
aC5oOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaDoKKyAgICAg
ICAgKiBrY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6S1JlbmRlcmluZ0ZpbGxQYWludGVyOjpmaWxsUnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpLUmVuZGVyaW5nRmlsbFBhaW50ZXI6OnNldEZpbGxSdWxlKToKKyAgICAgICAgKiBrY2Fu
dmFzL2RldmljZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuaDoKKyAgICAgICAgKiBrY2FudmFzL2Rl
dmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHouaDoKKyAgICAgICAgKiBrY2FudmFzL2Rldmlj
ZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHoubW06CisgICAgICAgIChXZWJDb3JlOjpLQ2FudmFz
SXRlbVF1YXJ0ejo6ZHJhd01hcmtlcnNJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpLQ2Fu
dmFzSXRlbVF1YXJ0ejo6c3Ryb2tlQkJveCk6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVh
cnR6L0tDYW52YXNQYXRoUXVhcnR6Lmg6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6
L0tDYW52YXNSZXNvdXJjZXNRdWFydHoubW06CisgICAgICAgIChXZWJDb3JlOjpLQ2FudmFzQ2xp
cHBlclF1YXJ0ejo6YXBwbHlDbGlwKToKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdWFydHov
S1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmlu
Z0RldmljZUNvbnRleHRRdWFydHo6OmFkZFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRl
cmluZ0RldmljZVF1YXJ0ejo6Y3JlYXRlSXRlbSk6CisgICAgICAgICoga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L1F1YXJ0elN1cHBvcnQuaDoKKyAgICAgICAgKiBrY2FudmFzL2RldmljZS9xdWFydHov
UXVhcnR6U3VwcG9ydC5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmF0Y2hDb250ZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OnN0cm9rZUJvdW5kaW5nQm94KToKKyAgICAgICAgKiBrc3ZnMi9taXNj
L0tDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NpcmNs
ZUVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHQ2lyY2xlRWxlbWVudDo6dG9QYXRoRGF0YSk6Cisg
ICAgICAgICoga3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0NsaXBQYXRoRWxlbWVudDo6
Y2FudmFzUmVzb3VyY2UpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNlRWxlbWVudDo6dG9QYXRoRGF0YSk6Cisg
ICAgICAgICoga3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR0ltYWdlRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xpbmVFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0
aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnRvUGF0aERh
dGEpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5oOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHA6CisgICAgICAgIChTVkdQb2x5Z29uRWxlbWVu
dDo6dG9QYXRoRGF0YSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BvbHlnb25FbGVtZW50Lmg6
CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHA6CisgICAgICAgIChT
VkdQb2x5bGluZUVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQ
b2x5bGluZUVsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUmVjdEVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAg
ICAqIGtzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdT
dHlsZWRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZEVsZW1lbnQ6OmNy
ZWF0ZVJlbmRlcmVyKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHU3R5bGVkRWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAg
ICoga3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1RleHRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9QYXRoLmg6CisgICAg
ICAgIChXZWJDb3JlOjopOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6c2V0V2luZGluZ1J1bGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6d2luZGluZ1J1bGUpOgorICAgICAgICAqIHBsYXRm
b3JtL2NnL1BhdGhDRy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXRoOjpjb250YWlucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpQYXRoOjppc0VtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNHUGF0
aFRvQ0ZTdHJpbmdBcHBsaWVyRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0ZTdHJpbmdG
cm9tQ0dQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6OmRlYnVnU3RyaW5nKToKKwogMjAw
Ni0wOC0yNCAgRGF2aWQgSGFycmlzb24gIDxoYXJyaXNvbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgSnVzdGluLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE2MDMyKQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTk2OSw4ICs5NjksNiBAQAogCQlB
ODhBRDNCNDA5NTI0ODZFMDAxREQxOTYgLyogS1JlbmRlcmluZ1BhaW50U2VydmVyUXVhcnR6Lm1t
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCNzUw
ODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdQYWludFNlcnZlclF1YXJ0ei5tbSAqLzsgfTsK
IAkJQTg4QUQzQjUwOTUyNDg2RTAwMUREMTk2IC8qIFF1YXJ0elN1cHBvcnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjc2MDg5NzAxRjgwMEJB
NTExNCAvKiBRdWFydHpTdXBwb3J0LmggKi87IH07CiAJCUE4OEFEM0I2MDk1MjQ4NkUwMDFERDE5
NiAvKiBRdWFydHpTdXBwb3J0Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gQThDMEZCNzcwODk3MDFGODAwQkE1MTE0IC8qIFF1YXJ0elN1cHBvcnQubW0g
Ki87IH07Ci0JCUE4OEFEM0I3MDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzUGF0aFF1YXJ0ei5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThBQkM5OTkw
OTQ0NUVDMDAwMTM5NDVGIC8qIEtDYW52YXNQYXRoUXVhcnR6LmggKi87IH07Ci0JCUE4OEFEM0I4
MDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzUGF0aFF1YXJ0ei5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QUJDOTlBMDk0NDVFQzAwMDEzOTQ1RiAv
KiBLQ2FudmFzUGF0aFF1YXJ0ei5tbSAqLzsgfTsKIAkJQTg4QUQzQjkwOTUyNDg2RTAwMUREMTk2
IC8qIFJlbmRlclNWR0NvbnRhaW5lci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3QTA4OTcwMUY4MDBCQTUxMTQgLyogUmVuZGVyU1ZHQ29u
dGFpbmVyLmNwcCAqLzsgfTsKIAkJQTg4QUQzQkEwOTUyNDg2RTAwMUREMTk2IC8qIFJlbmRlclNW
R0NvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThDMEZCN0IwODk3MDFGODAwQkE1MTE0IC8qIFJlbmRlclNWR0NvbnRhaW5lci5oICovOyB9
OwogCQlBODhBRDNCQjA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc0NyZWF0b3IuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCN0MwODk3MDFG
ODAwQkE1MTE0IC8qIEtDYW52YXNDcmVhdG9yLmNwcCAqLzsgfTsKQEAgLTk4MCw4ICs5NzgsNiBA
QAogCQlBODhBRDNDMDA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc0ltYWdlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI4MTA4OTcwMUY4MDBC
QTUxMTQgLyogS0NhbnZhc0ltYWdlLmggKi87IH07CiAJCUE4OEFEM0MxMDk1MjQ4NkUwMDFERDE5
NiAvKiBSZW5kZXJQYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QzBGQjgyMDg5NzAxRjgwMEJBNTExNCAvKiBSZW5kZXJQYXRoLmNwcCAqLzsg
fTsKIAkJQTg4QUQzQzIwOTUyNDg2RTAwMUREMTk2IC8qIFJlbmRlclBhdGguaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjgzMDg5NzAxRjgwMEJB
NTExNCAvKiBSZW5kZXJQYXRoLmggKi87IH07Ci0JCUE4OEFEM0M1MDk1MjQ4NkUwMDFERDE5NiAv
KiBLQ2FudmFzUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQThDMEZCODYwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNQYXRoLmggKi87IH07Ci0J
CUE4OEFEM0M2MDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzUGF0aC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0NzU4QzQ0MzA4QzVGMjE3MDA5QkFG
MDUgLyogS0NhbnZhc1BhdGguY3BwICovOyB9OwogCQlBODhBRDNDNzA5NTI0ODZFMDAxREQxOTYg
LyogS0NhbnZhc1Jlc291cmNlTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjg5MDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzUmVz
b3VyY2VMaXN0ZW5lci5oICovOyB9OwogCQlBODhBRDNDODA5NTI0ODZFMDAxREQxOTYgLyogS0Nh
bnZhc1Jlc291cmNlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBOEMwRkI4QTA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc1Jlc291cmNlcy5jcHAg
Ki87IH07CiAJCUE4OEFEM0M5MDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzUmVzb3VyY2VzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI4QjA4
OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc1Jlc291cmNlcy5oICovOyB9OwpAQCAtMTg0Miw3ICsx
ODM4LDYgQEAKIAkJNDQ4QTI5QkQwQTQ2RDlDQjAwMzA3NTlGIC8qIEpTSFRNTE9wdGlvbnNDb2xs
ZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0hUTUxPcHRpb25z
Q29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0NDhBMjlCRTBBNDZE
OUNCMDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDQ4QUQyN0EwQTQ4MTM3OTAwMjNEMTc5IC8qIEpT
SFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uQ3VzdG9tLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDc1OEM0NDMwOEM1RjIxNzAwOUJBRjA1IC8qIEtDYW52YXNQ
YXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBp
bmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gS0NhbnZhc1BhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9
IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJNEUxOTU5MUYwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlh
RmVhdHVyZU5hbWVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBN
ZWRpYUZlYXR1cmVOYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRFMTk1
OTIwMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZlYXR1cmVOYW1lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFGZWF0dXJlTmFtZXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNEUxOTU5MjMwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnkuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhUXVlcnkuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjY5Miw4ICsyNjg3LDYgQEAKIAkJQTg5MERG
MUMwOTMwOTc0ODAwNTEzRjg4IC8qIFNWR1N0eWxlZFRyYW5zZm9ybWFibGVFbGVtZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZH
U3R5bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0
YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQTg5MERGMUQwOTMwOTc0ODAwNTEzRjg4
IC8qIFNWR1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdTdHlsZWRMb2NhdGFibGVFbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlB
ODkwREYxRTA5MzA5NzQ4MDA1MTNGODggLyogU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNW
R1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKLQkJQThBQkM5OTkwOTQ0NUVDMDAwMTM5NDVGIC8q
IEtDYW52YXNQYXRoUXVhcnR6LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gS0NhbnZhc1BhdGhRdWFydHouaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUE4QUJDOTlBMDk0NDVFQzAwMDEz
OTQ1RiAvKiBLQ2FudmFzUGF0aFF1YXJ0ei5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gS0NhbnZhc1BhdGhRdWFydHoubW07IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBOEMw
RjZFQjA4OTcwMUYxMDBCQTUxMTQgLyogS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS0NhbnZhc1Jl
bmRlcmluZ1N0eWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGNkVDMDg5NzAxRjEwMEJBNTExNCAvKiBLQ2FudmFzUmVu
ZGVyaW5nU3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGNkVGMDg5NzAxRjEwMEJBNTEx
NCAvKiBLU1ZHVGltZVNjaGVkdWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtTVkdUaW1lU2NoZWR1bGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC0yOTc2LDcg
KzI5NjksNiBAQAogCQlBOEMwRkI4MTA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0ltYWdlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lk
dGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS0NhbnZh
c0ltYWdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMg
PSAwOyB9OwogCQlBOEMwRkI4MjA4OTcwMUY4MDBCQTUxMTQgLyogUmVuZGVyUGF0aC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRl
clBhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJz
ID0gMDsgfTsKIAkJQThDMEZCODMwODk3MDFGODAwQkE1MTE0IC8qIFJlbmRlclBhdGguaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJQYXRo
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwotCQlBOEMwRkI4NjA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc1BhdGguaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzUGF0aC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJ
QThDMEZCODkwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNSZXNvdXJjZUxpc3RlbmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGgg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS0NhbnZhc1Jl
c291cmNlTGlzdGVuZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1
c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGQjhBMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzUmVz
b3VyY2VzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gS0NhbnZhc1Jlc291cmNlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRh
YldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBOEMwRkI4QjA4OTcwMUY4MDBCQTUxMTQg
LyogS0NhbnZhc1Jlc291cmNlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEtDYW52YXNSZXNvdXJjZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CkBAIC00ODE4LDggKzQ4MTAsNiBAQAog
CQkJCUE4QzBGQjdFMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzRmlsdGVycy5jcHAgKi8sCiAJ
CQkJQThDMEZCN0YwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNGaWx0ZXJzLmggKi8sCiAJCQkJ
QThDMEZCODEwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNJbWFnZS5oICovLAotCQkJCTQ3NThD
NDQzMDhDNUYyMTcwMDlCQUYwNSAvKiBLQ2FudmFzUGF0aC5jcHAgKi8sCi0JCQkJQThDMEZCODYw
ODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNQYXRoLmggKi8sCiAJCQkJQThDMEZCODkwODk3MDFG
ODAwQkE1MTE0IC8qIEtDYW52YXNSZXNvdXJjZUxpc3RlbmVyLmggKi8sCiAJCQkJQThDMEZCOEEw
ODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNSZXNvdXJjZXMuY3BwICovLAogCQkJCUE4QzBGQjhC
MDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzUmVzb3VyY2VzLmggKi8sCkBAIC00ODY4LDggKzQ4
NTgsNiBAQAogCQkJCUE4QzBGQjZDMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzSXRlbVF1YXJ0
ei5tbSAqLywKIAkJCQlBODE2NTVEMjA5NkJCRUFDMDA2MDEwNTggLyogS0NhbnZhc01hc2tlclF1
YXJ0ei5oICovLAogCQkJCUE4MTY1NUQzMDk2QkJFQUMwMDYwMTA1OCAvKiBLQ2FudmFzTWFza2Vy
UXVhcnR6Lm1tICovLAotCQkJCUE4QUJDOTk5MDk0NDVFQzAwMDEzOTQ1RiAvKiBLQ2FudmFzUGF0
aFF1YXJ0ei5oICovLAotCQkJCUE4QUJDOTlBMDk0NDVFQzAwMDEzOTQ1RiAvKiBLQ2FudmFzUGF0
aFF1YXJ0ei5tbSAqLywKIAkJCQlBOEMwRkI2RDA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc1Jl
c291cmNlc1F1YXJ0ei5oICovLAogCQkJCUE4QzBGQjZFMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2Fu
dmFzUmVzb3VyY2VzUXVhcnR6Lm1tICovLAogCQkJCUE4QzBGQjcxMDg5NzAxRjgwMEJBNTExNCAv
KiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmggKi8sCkBAIC01NzE4LDcgKzU3MDYsNiBAQAogCQkJ
CUE4OEFEM0JFMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzRmlsdGVycy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTg4QUQzQzAwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52YXNJbWFnZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTg4QUQzQzIwOTUyNDg2RTAwMUREMTk2IC8qIFJlbmRlclBhdGguaCBp
biBIZWFkZXJzICovLAotCQkJCUE4OEFEM0M1MDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzUGF0
aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQzQzcwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52
YXNSZXNvdXJjZUxpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDNDOTA5NTI0ODZF
MDAxREQxOTYgLyogS0NhbnZhc1Jlc291cmNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTg4QUQz
Q0IwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52YXNUcmVlRGVidWcuaCBpbiBIZWFkZXJzICovLApA
QCAtNjY0MSw3ICs2NjI4LDYgQEAKIAkJCQlBODhBRDNCQjA5NTI0ODZFMDAxREQxOTYgLyogS0Nh
bnZhc0NyZWF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQzQkQwOTUyNDg2RTAwMURE
MTk2IC8qIEtDYW52YXNGaWx0ZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEM0MxMDk1
MjQ4NkUwMDFERDE5NiAvKiBSZW5kZXJQYXRoLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCUE4OEFE
M0M2MDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzUGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBODhBRDNDODA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc1Jlc291cmNlcy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBODhBRDNDQzA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc1RyZWVEZWJ1
Zy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODhBRDQwMTA5NTI0OEYwMDAxREQxOTYgLyogU1ZH
UmVuZGVyU3R5bGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBXZWJDb3JlL2tjYW52YXMvS0Nh
bnZhc0NyZWF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzQ3Jl
YXRvci5jcHAJKHJldmlzaW9uIDE2MDMyKQorKysgV2ViQ29yZS9rY2FudmFzL0tDYW52YXNDcmVh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogCiAjaW5jbHVkZSAiS1Jl
bmRlcmluZ0RldmljZS5oIgogI2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgorI2luY2x1
ZGUgIlBhdGguaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00OSwxMSArNTAsMTQgQEAg
S0NhbnZhc0NyZWF0b3IgKktDYW52YXNDcmVhdG9yOjpzZWxmKCkKICAgICByZXR1cm4gc19jcmVh
dG9yOwogfQogCi1LQ2FudmFzUGF0aCogS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZVJvdW5kZWRSZWN0
YW5nbGUoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCwgZmxvYXQg
cngsIGZsb2F0IHJ5KSBjb25zdAorUGF0aCBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlUm91bmRlZFJl
Y3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIGJveCwgZmxvYXQgcngsIGZsb2F0IHJ5KSBjb25zdAog
ewotICAgIEtDYW52YXNQYXRoKiBwYXRoID0gcmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVBhdGgo
KTsKLQotICAgIGlmICh3aWR0aCA8PSAwLjBmIHx8IGhlaWdodCA8PSAwLjBmIHx8ICFwYXRoKQor
ICAgIFBhdGggcGF0aDsKKyAgICBmbG9hdCB4ID0gYm94LngoKTsKKyAgICBmbG9hdCB5ID0gYm94
LnkoKTsKKyAgICBmbG9hdCB3aWR0aCA9IGJveC53aWR0aCgpOworICAgIGZsb2F0IGhlaWdodCA9
IGJveC5oZWlnaHQoKTsKKyAgICBpZiAod2lkdGggPD0gMC4wZiB8fCBoZWlnaHQgPD0gMC4wZikK
ICAgICAgICAgcmV0dXJuIHBhdGg7CiAKICAgICBkb3VibGUgbnJ4ID0gcngsIG5yeSA9IHJ5OwpA
QCAtNjcsNTIgKzcxLDU4IEBAIEtDYW52YXNQYXRoKiBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlUm91
bmQKICAgICBpZiAobnJ5ID4gaGVpZ2h0IC8gMikKICAgICAgICAgbnJ5ID0gaGVpZ2h0IC8gMjsK
IAotICAgIHBhdGgtPm1vdmVUbyh4ICsgbnJ4LCB5KTsKKyAgICBwYXRoLm1vdmVUbyhGbG9hdFBv
aW50KHggKyBucngsIHkpKTsKIAogICAgIGlmIChucnggPCB3aWR0aCAvIDIpCi0gICAgICAgIHBh
dGgtPmxpbmVUbyh4ICsgd2lkdGggLSByeCwgeSk7CisgICAgICAgIHBhdGguYWRkTGluZVRvKEZs
b2F0UG9pbnQoeCArIHdpZHRoIC0gcngsIHkpKTsKIAotICAgIHBhdGgtPmN1cnZlVG8oeCArIHdp
ZHRoIC0gbnJ4ICogKDEgLSAwLjU1MiksIHksIHggKyB3aWR0aCwgeSArIG5yeSAqICgxIC0gMC41
NTIpLCB4ICsgd2lkdGgsIHkgKyBucnkpOworICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9h
dFBvaW50KHggKyB3aWR0aCAtIG5yeCAqICgxIC0gMC41NTIpLCB5KSwgRmxvYXRQb2ludCh4ICsg
d2lkdGgsIHkgKyBucnkgKiAoMSAtIDAuNTUyKSksIEZsb2F0UG9pbnQoeCArIHdpZHRoLCB5ICsg
bnJ5KSk7CiAKICAgICBpZiAobnJ5IDwgaGVpZ2h0IC8gMikKLSAgICAgICAgcGF0aC0+bGluZVRv
KHggKyB3aWR0aCwgeSArIGhlaWdodCAtIG5yeSk7CisgICAgICAgIHBhdGguYWRkTGluZVRvKEZs
b2F0UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gbnJ5KSk7CiAKLSAgICBwYXRoLT5jdXJ2
ZVRvKHggKyB3aWR0aCwgeSArIGhlaWdodCAtIG5yeSAqICgxIC0gMC41NTIpLCB4ICsgd2lkdGgg
LSBucnggKiAoMSAtIDAuNTUyKSwgeSArIGhlaWdodCwgeCArIHdpZHRoIC0gbnJ4LCB5ICsgaGVp
Z2h0KTsKKyAgICBwYXRoLmFkZEJlemllckN1cnZlVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkg
KyBoZWlnaHQgLSBucnkgKiAoMSAtIDAuNTUyKSksIEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gbnJ4
ICogKDEgLSAwLjU1MiksIHkgKyBoZWlnaHQpLCBGbG9hdFBvaW50KHggKyB3aWR0aCAtIG5yeCwg
eSArIGhlaWdodCkpOwogCiAgICAgaWYgKG5yeCA8IHdpZHRoIC8gMikKLSAgICAgICAgcGF0aC0+
bGluZVRvKHggKyBucngsIHkgKyBoZWlnaHQpOworICAgICAgICBwYXRoLmFkZExpbmVUbyhGbG9h
dFBvaW50KHggKyBucngsIHkgKyBoZWlnaHQpKTsKIAotICAgIHBhdGgtPmN1cnZlVG8oeCArIG5y
eCAqICgxIC0gMC41NTIpLCB5ICsgaGVpZ2h0LCB4LCB5ICsgaGVpZ2h0IC0gbnJ5ICogKDEgLSAw
LjU1MiksIHgsIHkgKyBoZWlnaHQgLSBucnkpOworICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhG
bG9hdFBvaW50KHggKyBucnggKiAoMSAtIDAuNTUyKSwgeSArIGhlaWdodCksIEZsb2F0UG9pbnQo
eCwgeSArIGhlaWdodCAtIG5yeSAqICgxIC0gMC41NTIpKSwgRmxvYXRQb2ludCh4LCB5ICsgaGVp
Z2h0IC0gbnJ5KSk7CiAKICAgICBpZiAobnJ5IDwgaGVpZ2h0IC8gMikKLSAgICAgICAgcGF0aC0+
bGluZVRvKHgsIHkgKyBucnkpOworICAgICAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHgs
IHkgKyBucnkpKTsKKworICAgIHBhdGguYWRkQmV6aWVyQ3VydmVUbyhGbG9hdFBvaW50KHgsIHkg
KyBucnkgKiAoMSAtIDAuNTUyKSksIEZsb2F0UG9pbnQoeCArIG5yeCAqICgxIC0gMC41NTIpLCB5
KSwgRmxvYXRQb2ludCh4ICsgbnJ4LCB5KSk7CiAKLSAgICBwYXRoLT5jdXJ2ZVRvKHgsIHkgKyBu
cnkgKiAoMSAtIDAuNTUyKSwgeCArIG5yeCAqICgxIC0gMC41NTIpLCB5LCB4ICsgbnJ4LCB5KTsK
KyAgICBwYXRoLmNsb3NlU3VicGF0aCgpOwogCi0gICAgcGF0aC0+Y2xvc2VTdWJwYXRoKCk7CiAg
ICAgcmV0dXJuIHBhdGg7CiB9CiAKLUtDYW52YXNQYXRoKiBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRl
UmVjdGFuZ2xlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQpIGNv
bnN0CitQYXRoIEtDYW52YXNDcmVhdG9yOjpjcmVhdGVSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0
JiBib3gpIGNvbnN0CiB7Ci0gICAgS0NhbnZhc1BhdGgqIHBhdGggPSByZW5kZXJpbmdEZXZpY2Uo
KS0+Y3JlYXRlUGF0aCgpOwotICAgIAotICAgIGlmICh3aWR0aCA8PSAwLjBmIHx8IGhlaWdodCA8
PSAwLjBmIHx8ICFwYXRoKQorICAgIFBhdGggcGF0aDsKKyAgICBmbG9hdCB4ID0gYm94LngoKTsK
KyAgICBmbG9hdCB5ID0gYm94LnkoKTsKKyAgICBmbG9hdCB3aWR0aCA9IGJveC53aWR0aCgpOwor
ICAgIGZsb2F0IGhlaWdodCA9IGJveC5oZWlnaHQoKTsKKyAgICBpZiAod2lkdGggPCAwLjBmIHx8
IGhlaWdodCA8IDAuMGYpCiAgICAgICAgIHJldHVybiBwYXRoOwogICAgIAotICAgIHBhdGgtPm1v
dmVUbyh4LCB5KTsKLSAgICBwYXRoLT5saW5lVG8oeCArIHdpZHRoLCB5KTsKLSAgICBwYXRoLT5s
aW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0KTsKLSAgICBwYXRoLT5saW5lVG8oeCwgeSArIGhl
aWdodCk7Ci0gICAgcGF0aC0+Y2xvc2VTdWJwYXRoKCk7CisgICAgcGF0aC5tb3ZlVG8oRmxvYXRQ
b2ludCh4LCB5KSk7CisgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkp
KTsKKyAgICBwYXRoLmFkZExpbmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCkp
OworICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwgeSArIGhlaWdodCkpOworICAgIHBh
dGguY2xvc2VTdWJwYXRoKCk7CisKICAgICByZXR1cm4gcGF0aDsKIH0KIAotS0NhbnZhc1BhdGgq
IEtDYW52YXNDcmVhdG9yOjpjcmVhdGVFbGxpcHNlKGZsb2F0IGN4LCBmbG9hdCBjeSwgZmxvYXQg
cngsIGZsb2F0IHJ5KSBjb25zdAorUGF0aCBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlRWxsaXBzZShj
b25zdCBGbG9hdFBvaW50JmMsIGZsb2F0IHJ4LCBmbG9hdCByeSkgY29uc3QKIHsKLSAgICBLQ2Fu
dmFzUGF0aCogcGF0aCA9IHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYXRoKCk7Ci0KLSAgICBp
ZiAocnggPD0gMC4wZiB8fCByeSA8PSAwLjBmIHx8ICFwYXRoKQorICAgIGZsb2F0IGN4ID0gYy54
KCk7CisgICAgZmxvYXQgY3kgPSBjLnkoKTsKKyAgICBQYXRoIHBhdGg7CisgICAgaWYgKHJ4IDw9
IDAuMGYgfHwgcnkgPD0gMC4wZikKICAgICAgICAgcmV0dXJuIHBhdGg7CiAKICAgICAvLyBFbGxp
cHNlIGNyZWF0aW9uIC0gbmljZSAmIGNsZWFuIGFnZzIgY29kZQpAQCAtMTM0LDI5ICsxNDQsMzAg
QEAgS0NhbnZhc1BhdGgqIEtDYW52YXNDcmVhdG9yOjpjcmVhdGVFbGxpcAogCiAgICAgICAgIHN0
ZXArKzsKICAgICAgICAgaWYoc3RlcCA9PSAxKQotICAgICAgICAgICAgcGF0aC0+bW92ZVRvKHgs
IHkpOworICAgICAgICAgICAgcGF0aC5tb3ZlVG8oRmxvYXRQb2ludCh4LCB5KSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHBhdGgtPmxpbmVUbyh4LCB5KTsKKyAgICAgICAgICAgIHBhdGgu
YWRkTGluZVRvKEZsb2F0UG9pbnQoeCwgeSkpOwogICAgIH0KIAotICAgIHBhdGgtPmNsb3NlU3Vi
cGF0aCgpOworICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7CisKICAgICByZXR1cm4gcGF0aDsKIH0K
IAotS0NhbnZhc1BhdGgqIEtDYW52YXNDcmVhdG9yOjpjcmVhdGVDaXJjbGUoZmxvYXQgY3gsIGZs
b2F0IGN5LCBmbG9hdCByKSBjb25zdAorUGF0aCBLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlQ2lyY2xl
KGNvbnN0IEZsb2F0UG9pbnQmIGMsIGZsb2F0IHIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUVsbGlwc2UoY3gsIGN5LCByLCByKTsKKyAgICByZXR1cm4gY3JlYXRlRWxsaXBzZShjLCByLCBy
KTsKIH0KIAotS0NhbnZhc1BhdGgqIEtDYW52YXNDcmVhdG9yOjpjcmVhdGVMaW5lKGZsb2F0IHgx
LCBmbG9hdCB5MSwgZmxvYXQgeDIsIGZsb2F0IHkyKSBjb25zdAorUGF0aCBLQ2FudmFzQ3JlYXRv
cjo6Y3JlYXRlTGluZShjb25zdCBGbG9hdFBvaW50JiBzdGFydCwgY29uc3QgRmxvYXRQb2ludCYg
ZW5kKSBjb25zdAogewotICAgIEtDYW52YXNQYXRoKiBwYXRoID0gcmVuZGVyaW5nRGV2aWNlKCkt
PmNyZWF0ZVBhdGgoKTsKLSAgICAKLSAgICBpZiAoKHgxID09IHgyICYmIHkxID09IHkyKSB8fCAh
cGF0aCkKKyAgICBQYXRoIHBhdGg7CisgICAgaWYgKHN0YXJ0LngoKSA9PSBlbmQueCgpICYmIHN0
YXJ0LnkoKSA9PSBlbmQueSgpKQogICAgICAgICByZXR1cm4gcGF0aDsKIAotICAgIHBhdGgtPm1v
dmVUbyh4MSwgeTEpOwotICAgIHBhdGgtPmxpbmVUbyh4MiwgeTIpOworICAgIHBhdGgubW92ZVRv
KHN0YXJ0KTsKKyAgICBwYXRoLmFkZExpbmVUbyhlbmQpOworCiAgICAgcmV0dXJuIHBhdGg7CiB9
CiAKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oCShyZXZpc2lvbiAxNjAzMikKKysrIFdl
YkNvcmUva2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMCAr
MjQsMTIgQEAKICNkZWZpbmUgS0NhbnZhc0NyZWF0b3JfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAK
LSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNQYXRoLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgUGF0aDsKK2NsYXNzIEZsb2F0UG9pbnQ7CitjbGFzcyBGbG9hdFJlY3Q7CisKIGNs
YXNzIEtDYW52YXNDcmVhdG9yCiB7CiBwdWJsaWM6CkBAIC0zNywxMSArMzksMTEgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBLQ2FudmFzQ3JlYXRvciAqc2VsZigpOwogCiAgICAgLy8gQ2FudmFzIHBh
dGggY3JlYXRpb24KLSAgICBLQ2FudmFzUGF0aCogY3JlYXRlUm91bmRlZFJlY3RhbmdsZShmbG9h
dCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCByeCwgZmxvYXQg
cnkpIGNvbnN0OwotICAgIEtDYW52YXNQYXRoKiBjcmVhdGVSZWN0YW5nbGUoZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgY29uc3Q7Ci0gICAgS0NhbnZhc1BhdGgq
IGNyZWF0ZUVsbGlwc2UoZmxvYXQgY3gsIGZsb2F0IGN5LCBmbG9hdCByeCwgZmxvYXQgcnkpIGNv
bnN0OwotICAgIEtDYW52YXNQYXRoKiBjcmVhdGVDaXJjbGUoZmxvYXQgY3gsIGZsb2F0IGN5LCBm
bG9hdCByKSBjb25zdDsKLSAgICBLQ2FudmFzUGF0aCogY3JlYXRlTGluZShmbG9hdCB4MSwgZmxv
YXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5MikgY29uc3Q7CisgICAgUGF0aCBjcmVhdGVSb3VuZGVk
UmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0IHJ4LCBmbG9hdCByeSkgY29uc3Q7Cisg
ICAgUGF0aCBjcmVhdGVSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0JikgY29uc3Q7CisgICAgUGF0
aCBjcmVhdGVFbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCByeCwgZmxvYXQgcnkpIGNv
bnN0OworICAgIFBhdGggY3JlYXRlQ2lyY2xlKGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCByKSBj
b25zdDsKKyAgICBQYXRoIGNyZWF0ZUxpbmUoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
UG9pbnQmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgS0NhbnZhc0NyZWF0b3IgKnNf
Y3JlYXRvcjsKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzUGF0aC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rY2FudmFzL0tDYW52YXNQYXRoLmNwcAkocmV2aXNpb24gMTYwMzIpCisr
KyBXZWJDb3JlL2tjYW52YXMvS0NhbnZhc1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYy
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgS2ltbW8gS2lubnVuZW4gPGtpbW1v
LnQua2lubnVuZW5Abm9raWEuY29tPi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aWZkZWYgU1ZHX1NVUFBPUlQKLQotI2luY2x1ZGUgIlRleHRTdHJlYW0uaCIKLQotI2luY2x1ZGUg
IktDYW52YXNQYXRoLmgiCi0jaW5jbHVkZSAiS0NhbnZhc1RyZWVEZWJ1Zy5oIgotI2luY2x1ZGUg
IktSZW5kZXJpbmdEZXZpY2UuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vL0tDV2luZFJ1
bGUKLVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbSAmdHMsIEtDV2luZFJ1bGUgcnVs
ZSkKLXsKLSAgICBzd2l0Y2ggKHJ1bGUpIAotICAgIHsKLSAgICAgICAgY2FzZSBSVUxFX05PTlpF
Uk86Ci0gICAgICAgICAgICB0cyA8PCAiTk9OLVpFUk8iOyBicmVhazsKLSAgICAgICAgY2FzZSBS
VUxFX0VWRU5PREQ6Ci0gICAgICAgICAgICB0cyA8PCAiRVZFTi1PREQiOyBicmVhazsKLSAgICB9
Ci0gICAgcmV0dXJuIHRzOwotfQotCi0vL0tDQ2xpcERhdGEKLVRleHRTdHJlYW0gJm9wZXJhdG9y
PDwoVGV4dFN0cmVhbSAmdHMsIGNvbnN0IEtDQ2xpcERhdGEgJmQpCi17Ci0gICAgdHMgPDwgIlt3
aW5kaW5nPSIgPDwgZC53aW5kUnVsZSgpIDw8ICJdIjsKLSAgICBpZiAoZC5iYm94VW5pdHMpCi0g
ICAgICAgIHRzIDw8ICIgW2JvdW5kaW5nIGJveCBtb2RlPSIgPDwgZC5iYm94VW5pdHMgIDw8ICJd
IjsgICAgCi0gICAgdHMgPDwgIiBbcGF0aD0iIDw8IHJlbmRlcmluZ0RldmljZSgpLT5zdHJpbmdG
b3JQYXRoKGQucGF0aC5nZXQoKSkgPDwgIl0iOwotICAgIHJldHVybiB0czsKLX0KLQotfQotCi0j
ZW5kaWYgLy8gU1ZHX1NVUFBPUlQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzUGF0aC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzUGF0aC5oCShyZXZpc2lvbiAx
NjAzMikKKysrIFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDEwNCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwNSBBcHBsZSBDb21wdXRl
ciwgSW5jLgotICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSBOaWtvbGFzIFppbW1lcm1hbm4g
PHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIwMDUgUm9iIEJ1aXMg
PGJ1aXNAa2RlLm9yZz4KLQotICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVj
dAotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFpbnQg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUg
UGxhY2UgLSBTdWl0ZSAzMzAsCi0gICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuCi0qLwot
Ci0jaWZuZGVmIEtDYW52YXNQYXRoX0gKLSNkZWZpbmUgS0NhbnZhc1BhdGhfSAotI2lmZGVmIFNW
R19TVVBQT1JUCi0KLSNpbmNsdWRlICJEZXByZWNhdGVkVmFsdWVMaXN0LmgiCi0jaW5jbHVkZSA8
d3RmL0Fzc2VydGlvbnMuaD4KLSNpbmNsdWRlICJTaGFyZWQuaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBLUmVuZGVyaW5nU3Ryb2tlUGFp
bnRlcjsKLWNsYXNzIFJlbmRlclN0eWxlOwotY2xhc3MgVGV4dFN0cmVhbTsKLQotZW51bSBLQ1dp
bmRSdWxlIHsKLSAgICBSVUxFX05PTlpFUk8gPSAwLAotICAgIFJVTEVfRVZFTk9ERCA9IDEKLX07
Ci0KLS8vIFBhdGggcmVsYXRlZCBkYXRhIHN0cnVjdHVyZXMKLXR5cGVkZWYgZW51bQotewotICAg
IENNRF9NT1ZFID0gMCwKLSAgICBDTURfTElORSA9IDEsCi0gICAgQ01EX0NVUlZFID0gMiwKLSAg
ICBDTURfQ0xPU0VfU1VCUEFUSCA9IDMKLX0gS0NQYXRoQ29tbWFuZDsKLQotY2xhc3MgS0NhbnZh
c1BhdGggOiBwdWJsaWMgU2hhcmVkPEtDYW52YXNQYXRoPgotewotcHVibGljOgotICAgIHZpcnR1
YWwgfktDYW52YXNQYXRoKCkgeyB9Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBj
b25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGZsb2F0IHgsIGZsb2F0IHkpID0g
MDsKLSAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGZsb2F0IHgsIGZsb2F0IHkpID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgY3VydmVUbyhmbG9hdCB4MSwgZmxvYXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5
MiwgZmxvYXQgeDMsIGZsb2F0IHkzKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlU3VicGF0
aCgpID0gMDsKLQotICAgIHZpcnR1YWwgRmxvYXRSZWN0IGJvdW5kaW5nQm94KCkgPSAwOwotICAg
IHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KGNvbnN0IEtSZW5kZXJpbmdTdHJv
a2VQYWludGVyJikgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBzdHJva2VDb250YWluc1BvaW50KGNv
bnN0IEZsb2F0UG9pbnQmKSA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNvbnRhaW5zUG9pbnQoY29u
c3QgRmxvYXRQb2ludCYsIEtDV2luZFJ1bGUpID0gMDsKLX07Ci0KLS8vIENsaXBwaW5nIHBhdGhz
Ci1zdHJ1Y3QgS0NDbGlwRGF0YQotewotICAgIEtDV2luZFJ1bGUgd2luZFJ1bGUoKSBjb25zdCB7
IHJldHVybiBzdGF0aWNfY2FzdDxLQ1dpbmRSdWxlPihtX3dpbmRSdWxlKTsgfQotICAgIHVuc2ln
bmVkIG1fd2luZFJ1bGUgOiAxOyAvLyBLQ1dpbmRSdWxlCi0gICAgYm9vbCBiYm94VW5pdHMgOiAx
OwotICAgIFJlZlB0cjxLQ2FudmFzUGF0aD4gcGF0aDsKLX07Ci0KLWNsYXNzIEtDQ2xpcERhdGFM
aXN0IDogcHVibGljIERlcHJlY2F0ZWRWYWx1ZUxpc3Q8S0NDbGlwRGF0YT4KLXsKLXB1YmxpYzoK
LSAgICBLQ0NsaXBEYXRhTGlzdCgpIHsgfQotCi0gICAgaW5saW5lIHZvaWQgYWRkUGF0aChLQ2Fu
dmFzUGF0aCAqcGF0aERhdGEsIEtDV2luZFJ1bGUgd2luZFJ1bGUsIGJvb2wgYmJveFVuaXRzKQot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHBhdGhEYXRhKTsKLSAgICAgICAgS0NDbGlwRGF0YSBjbGlw
RGF0YTsKLSAgICAgICAgY2xpcERhdGEubV93aW5kUnVsZSA9IHdpbmRSdWxlOwotICAgICAgICBj
bGlwRGF0YS5iYm94VW5pdHMgPSBiYm94VW5pdHM7Ci0gICAgICAgIGNsaXBEYXRhLnBhdGggPSBw
YXRoRGF0YTsKLSAgICAgICAgYXBwZW5kKGNsaXBEYXRhKTsKLSAgICB9Ci19OwotCi1UZXh0U3Ry
ZWFtICZvcGVyYXRvcjw8KFRleHRTdHJlYW0gJnRzLCBLQ1dpbmRSdWxlIHJ1bGUpOwotVGV4dFN0
cmVhbSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtICZ0cywgY29uc3QgS0NDbGlwRGF0YSAmZCk7Ci0K
LX0KLQotI2VuZGlmIC8vIFNWR19TVVBQT1JUCi0jZW5kaWYKLQotLy8gdmltOnRzPTQ6bm9ldApJ
bmRleDogV2ViQ29yZS9rY2FudmFzL0tDYW52YXNSZXNvdXJjZXMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzUmVzb3VyY2VzLmNwcAkocmV2aXNpb24gMTYwMzIpCisr
KyBXZWJDb3JlL2tjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDYgKzQyLDI5IEBAIFRleHRTdHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGMK
ICAgICByZXR1cm4gci5leHRlcm5hbFJlcHJlc2VudGF0aW9uKHRzKTsgCiB9CiAKKy8vV2luZFJ1
bGUKK1RleHRTdHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbSAmdHMsIFdpbmRSdWxlIHJ1bGUp
Cit7CisgICAgc3dpdGNoIChydWxlKSAKKyAgICB7CisgICAgICAgIGNhc2UgUlVMRV9OT05aRVJP
OgorICAgICAgICAgICAgdHMgPDwgIk5PTi1aRVJPIjsgYnJlYWs7CisgICAgICAgIGNhc2UgUlVM
RV9FVkVOT0REOgorICAgICAgICAgICAgdHMgPDwgIkVWRU4tT0REIjsgYnJlYWs7CisgICAgfQor
ICAgIHJldHVybiB0czsKK30KKworLy9LQ0NsaXBEYXRhCitUZXh0U3RyZWFtICZvcGVyYXRvcjw8
KFRleHRTdHJlYW0gJnRzLCBjb25zdCBLQ0NsaXBEYXRhICZkKQoreworICAgIHRzIDw8ICJbd2lu
ZGluZz0iIDw8IGQud2luZFJ1bGUoKSA8PCAiXSI7CisgICAgaWYgKGQuYmJveFVuaXRzKQorICAg
ICAgICB0cyA8PCAiIFtib3VuZGluZyBib3ggbW9kZT0iIDw8IGQuYmJveFVuaXRzICA8PCAiXSI7
ICAgIAorICAgIHRzIDw8ICIgW3BhdGg9IiA8PCBkLnBhdGguZGVidWdTdHJpbmcoKSA8PCAiXSI7
CisgICAgcmV0dXJuIHRzOworfQorCiAvLyBLQ2FudmFzUmVzb3VyY2UKIEtDYW52YXNSZXNvdXJj
ZTo6S0NhbnZhc1Jlc291cmNlKCkKIHsKQEAgLTEwMiw3ICsxMjUsNyBAQCB2b2lkIEtDYW52YXND
bGlwcGVyOjpyZXNldENsaXBEYXRhKCkKICAgICBtX2NsaXBEYXRhLmNsZWFyKCk7CiB9CiAKLXZv
aWQgS0NhbnZhc0NsaXBwZXI6OmFkZENsaXBEYXRhKEtDYW52YXNQYXRoKiBwYXRoLCBLQ1dpbmRS
dWxlIHJ1bGUsIGJvb2wgYmJveFVuaXRzKQordm9pZCBLQ2FudmFzQ2xpcHBlcjo6YWRkQ2xpcERh
dGEoY29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSwgYm9vbCBiYm94VW5pdHMpCiB7CiAg
ICAgbV9jbGlwRGF0YS5hZGRQYXRoKHBhdGgsIHJ1bGUsIGJib3hVbml0cyk7CiB9CkluZGV4OiBX
ZWJDb3JlL2tjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a2NhbnZhcy9LQ2FudmFzUmVzb3VyY2VzLmgJKHJldmlzaW9uIDE2MDMyKQorKysgV2ViQ29yZS9r
Y2FudmFzL0tDYW52YXNSZXNvdXJjZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsOCArMjQsOSBA
QAogI2RlZmluZSBLQ2FudmFzUmVzb3VyY2VzX0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCi0jaW5j
bHVkZSA8a2NhbnZhcy9SZW5kZXJQYXRoLmg+Ci0jaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzUGF0
aC5oPgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRWYWx1ZUxpc3QuaCIKKyNpbmNsdWRlICJQYXRoLmgi
CisjaW5jbHVkZSAiUmVuZGVyUGF0aC5oIgogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1Jlc291
cmNlTGlzdGVuZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNzEsNiArNzIsMzAgQEAg
cHJpdmF0ZToKICAgICBEZXByZWNhdGVkU3RyaW5nIHJlZ2lzdHJ5SWQ7CiB9OwogCisvLyBDbGlw
cGluZyBwYXRocworc3RydWN0IEtDQ2xpcERhdGEKK3sKKyAgICBXaW5kUnVsZSB3aW5kUnVsZSgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFdpbmRSdWxlPihtX3dpbmRSdWxlKTsgfQorICAg
IHVuc2lnbmVkIG1fd2luZFJ1bGUgOiAxOyAvLyBXaW5kUnVsZQorICAgIGJvb2wgYmJveFVuaXRz
IDogMTsKKyAgICBQYXRoIHBhdGg7Cit9OworCitjbGFzcyBLQ0NsaXBEYXRhTGlzdCA6IHB1Ymxp
YyBEZXByZWNhdGVkVmFsdWVMaXN0PEtDQ2xpcERhdGE+Cit7CitwdWJsaWM6CisgICAgS0NDbGlw
RGF0YUxpc3QoKSB7IH0KKworICAgIGlubGluZSB2b2lkIGFkZFBhdGgoY29uc3QgUGF0aCYgcGF0
aERhdGEsIFdpbmRSdWxlIHdpbmRSdWxlLCBib29sIGJib3hVbml0cykKKyAgICB7CisgICAgICAg
IEtDQ2xpcERhdGEgY2xpcERhdGE7CisgICAgICAgIGNsaXBEYXRhLmJib3hVbml0cyA9IGJib3hV
bml0czsKKyAgICAgICAgY2xpcERhdGEubV93aW5kUnVsZSA9IHdpbmRSdWxlOworICAgICAgICBj
bGlwRGF0YS5wYXRoID0gcGF0aERhdGE7CisgICAgICAgIGFwcGVuZChjbGlwRGF0YSk7CisgICAg
fQorfTsKKwogY2xhc3MgS0NhbnZhc0NsaXBwZXIgOiBwdWJsaWMgS0NhbnZhc1Jlc291cmNlCiB7
CiBwdWJsaWM6CkBAIC04MCw3ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGlz
Q2xpcHBlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHZvaWQgcmVzZXRDbGlwRGF0
YSgpOwotICAgIHZvaWQgYWRkQ2xpcERhdGEoS0NhbnZhc1BhdGggKnBhdGgsIEtDV2luZFJ1bGUg
cnVsZSwgYm9vbCBiYm94VW5pdHMpOworICAgIHZvaWQgYWRkQ2xpcERhdGEoY29uc3QgUGF0aCYg
cGF0aCwgV2luZFJ1bGUgcnVsZSwgYm9vbCBiYm94VW5pdHMpOwogICAgIAogICAgIHZpcnR1YWwg
dm9pZCBhcHBseUNsaXAoY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkgY29uc3QgPSAwOwog
CkBAIC0xNDYsNiArMTcxLDggQEAgcHJpdmF0ZToKICAgICBib29sIG1fdXNlU3Ryb2tlV2lkdGg7
CiB9OwogCisKKwogS0NhbnZhc1Jlc291cmNlICpnZXRSZXNvdXJjZUJ5SWQoRG9jdW1lbnQgKmRv
Y3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcgJmlkKTsKIEtDYW52YXNNYXJrZXIgKmdldE1hcmtl
ckJ5SWQoRG9jdW1lbnQgKmRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcgJmlkKTsKIEtDYW52
YXNDbGlwcGVyICpnZXRDbGlwcGVyQnlJZChEb2N1bWVudCAqZG9jdW1lbnQsIGNvbnN0IEF0b21p
Y1N0cmluZyAmaWQpOwpAQCAtMTUzLDYgKzE4MCw4IEBAIEtDYW52YXNNYXNrZXIgKmdldE1hc2tl
ckJ5SWQoRG9jdW1lbnQgKmQKIEtSZW5kZXJpbmdQYWludFNlcnZlciAqZ2V0UGFpbnRTZXJ2ZXJC
eUlkKERvY3VtZW50ICpkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nICZpZCk7CiAKIFRleHRT
dHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbSAmdHMsIGNvbnN0IEtDYW52YXNSZXNvdXJjZSAm
cik7CitUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFRleHRTdHJlYW0gJnRzLCBXaW5kUnVsZSBydWxl
KTsKK1RleHRTdHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbSAmdHMsIGNvbnN0IEtDQ2xpcERh
dGEgJmQpOwogCiB9CiAKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAJKHJl
dmlzaW9uIDE2MDMyKQorKysgV2ViQ29yZS9rY2FudmFzL0tDYW52YXNUcmVlRGVidWcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yOTEsNyArMjkxLDcgQEAgc3RhdGljIFRleHRTdHJlYW0gJm9wZXJh
dG9yPDwoVGV4dFN0cmVhbQogICAgIAogICAgIHdyaXRlU3R5bGUodHMsIG8pOwogICAgIAotICAg
IHRzIDw8ICIgW2RhdGE9XCIiIDw8IHJlbmRlcmluZ0RldmljZSgpLT5zdHJpbmdGb3JQYXRoKG8u
cGF0aCgpKSA8PCAiXCJdIjsKKyAgICB0cyA8PCAiIFtkYXRhPVwiIiA8PCBvLnBhdGgoKS5kZWJ1
Z1N0cmluZygpIDw8ICJcIl0iOwogICAgIAogICAgIHJldHVybiB0czsKIH0KSW5kZXg6IFdlYkNv
cmUva2NhbnZhcy9SZW5kZXJQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMv
UmVuZGVyUGF0aC5jcHAJKHJldmlzaW9uIDE2MDMyKQorKysgV2ViQ29yZS9rY2FudmFzL1JlbmRl
clBhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogY2xhc3MgUmVuZGVyUGF0aDo6UHJpdmF0ZSB7CiBwdWJsaWM6Ci0gICAgUmVmUHRy
PEtDYW52YXNQYXRoPiBwYXRoOworICAgIFBhdGggcGF0aDsKIAogICAgIEZsb2F0UmVjdCBmaWxs
QkJveDsKICAgICBGbG9hdFJlY3Qgc3Ryb2tlQmJveDsKQEAgLTgwLDQwICs4MCwzMCBAQCBGbG9h
dFBvaW50IFJlbmRlclBhdGg6Om1hcEFic29sdXRlUG9pbnRUCiAKIGJvb2wgUmVuZGVyUGF0aDo6
ZmlsbENvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAogewotICAgIGlmICgh
ZC0+cGF0aCkKKyAgICBpZiAoZC0+cGF0aC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmICghS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRTZXJ2ZXIoc3R5bGUo
KSwgdGhpcykpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBwYXRoKCktPmNv
bnRhaW5zUG9pbnQobWFwQWJzb2x1dGVQb2ludFRvTG9jYWwocG9pbnQpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgS1NWR1BhaW50ZXJGYWN0b3J5OjpmaWxsUGFpbnRlcihzdHls
ZSgpLCB0aGlzKS5maWxsUnVsZSgpKTsKKyAgICByZXR1cm4gcGF0aCgpLmNvbnRhaW5zKG1hcEFi
c29sdXRlUG9pbnRUb0xvY2FsKHBvaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEtT
VkdQYWludGVyRmFjdG9yeTo6ZmlsbFBhaW50ZXIoc3R5bGUoKSwgdGhpcykuZmlsbFJ1bGUoKSk7
CiB9CiAKIGJvb2wgUmVuZGVyUGF0aDo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFkLT5wYXRoKQorICAgIGlmIChkLT5wYXRoLmlzRW1w
dHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCFLU1ZHUGFpbnRlckZhY3Rv
cnk6OnN0cm9rZVBhaW50U2VydmVyKHN0eWxlKCksIHRoaXMpKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICByZXR1cm4gcGF0aCgpLT5zdHJva2VDb250YWluc1BvaW50KG1hcEFic29sdXRl
UG9pbnRUb0xvY2FsKHBvaW50KSk7Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJQYXRoOjpzdHJva2VC
Qm94KCkgY29uc3QKLXsKLSAgICBpZiAoS1NWR1BhaW50ZXJGYWN0b3J5Ojppc1N0cm9rZWQoc3R5
bGUoKSkpIHsKLSAgICAgICAgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgc3Ryb2tlUGFpbnRlciA9
IEtTVkdQYWludGVyRmFjdG9yeTo6c3Ryb2tlUGFpbnRlcihzdHlsZSgpLCB0aGlzKTsKLSAgICAg
ICAgcmV0dXJuIHBhdGgoKS0+c3Ryb2tlQm91bmRpbmdCb3goc3Ryb2tlUGFpbnRlcik7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHBhdGgoKS0+Ym91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gZmFsc2U7
Ly9wYXRoKCkuc3Ryb2tlQ29udGFpbnNQb2ludChtYXBBYnNvbHV0ZVBvaW50VG9Mb2NhbChwb2lu
dCkpOwogfQogCiBGbG9hdFJlY3QgUmVuZGVyUGF0aDo6cmVsYXRpdmVCQm94KGJvb2wgaW5jbHVk
ZVN0cm9rZSkgY29uc3QKIHsKLSAgICBpZiAoIWQtPnBhdGgpCisgICAgaWYgKGQtPnBhdGguaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CiAKICAgICBpZiAoaW5jbHVkZVN0
cm9rZSkgewpAQCAtMTIzLDIwICsxMTMsMjAgQEAgRmxvYXRSZWN0IFJlbmRlclBhdGg6OnJlbGF0
aXZlQkJveChib29sIAogICAgIH0KIAogICAgIGlmIChkLT5maWxsQkJveC5pc0VtcHR5KCkpCi0g
ICAgICAgIGQtPmZpbGxCQm94ID0gcGF0aCgpLT5ib3VuZGluZ0JveCgpOworICAgICAgICBkLT5m
aWxsQkJveCA9IHBhdGgoKS5ib3VuZGluZ1JlY3QoKTsKICAgICByZXR1cm4gZC0+ZmlsbEJCb3g7
CiB9CiAKLXZvaWQgUmVuZGVyUGF0aDo6c2V0UGF0aChLQ2FudmFzUGF0aCogbmV3UGF0aCkKK3Zv
aWQgUmVuZGVyUGF0aDo6c2V0UGF0aChjb25zdCBQYXRoJiBuZXdQYXRoKQogewogICAgIGQtPnBh
dGggPSBuZXdQYXRoOwogICAgIGQtPnN0cm9rZUJib3ggPSBGbG9hdFJlY3QoKTsKICAgICBkLT5m
aWxsQkJveCA9IEZsb2F0UmVjdCgpOwogfQogCi1LQ2FudmFzUGF0aCogUmVuZGVyUGF0aDo6cGF0
aCgpIGNvbnN0Citjb25zdCBQYXRoJiBSZW5kZXJQYXRoOjpwYXRoKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gZC0+cGF0aC5nZXQoKTsKKyAgICByZXR1cm4gZC0+cGF0aDsKIH0KIAogdm9pZCBSZW5k
ZXJQYXRoOjpsYXlvdXQoKQpAQCAtMTk4LDcgKzE4OCw3IEBAIHZvaWQgUmVuZGVyUGF0aDo6cGFp
bnQoUGFpbnRJbmZvICZwYWludEkKICAgICAvL0FTU0VSVChwYXJlbnRYID09IDApOwogICAgIC8v
QVNTRVJUKHBhcmVudFkgPT0gMCk7CiAKLSAgICBpZiAocGFpbnRJbmZvLnAtPnBhaW50aW5nRGlz
YWJsZWQoKSB8fCAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3JlZ3JvdW5kKSB8fCBz
dHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8ICFwYXRoKCkpCisgICAgaWYgKHBhaW50
SW5mby5wLT5wYWludGluZ0Rpc2FibGVkKCkgfHwgKHBhaW50SW5mby5waGFzZSAhPSBQYWludFBo
YXNlRm9yZWdyb3VuZCkgfHwgc3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IEhJRERFTiB8fCBwYXRo
KCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgCiAgICAgS1JlbmRlcmluZ0Rldmlj
ZSogZGV2aWNlID0gcmVuZGVyaW5nRGV2aWNlKCk7CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvUmVu
ZGVyUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJQYXRoLmgJKHJl
dmlzaW9uIDE2MDMyKQorKysgV2ViQ29yZS9rY2FudmFzL1JlbmRlclBhdGguaAkod29ya2luZyBj
b3B5KQpAQCAtMzYsNyArMzYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBGbG9hdFBv
aW50OwogY2xhc3MgU1ZHU3R5bGVkRWxlbWVudDsKIAotY2xhc3MgS0NhbnZhc1BhdGg7CitjbGFz
cyBQYXRoOwogY2xhc3MgUmVuZGVyU1ZHQ29udGFpbmVyOwogCiBjbGFzcyBSZW5kZXJQYXRoIDog
cHVibGljIFJlbmRlck9iamVjdApAQCAtNTIsOCArNTIsOCBAQCBwdWJsaWM6CiAgICAgLy8gUmV0
dXJucyBhbiB1bnNjYWxlZCBib3VuZGluZyBib3ggKG5vdCBldmVuIGluY2x1ZGluZyBsb2NhbFRy
YW5zZm9ybSgpKSBmb3IgdGhpcyB2ZWN0b3IgcGF0aAogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHJl
bGF0aXZlQkJveChib29sIGluY2x1ZGVTdHJva2UgPSB0cnVlKSBjb25zdDsKIAotICAgIHZvaWQg
c2V0UGF0aChLQ2FudmFzUGF0aCogbmV3UGF0aCk7Ci0gICAgS0NhbnZhc1BhdGgqIHBhdGgoKSBj
b25zdDsKKyAgICB2b2lkIHNldFBhdGgoY29uc3QgUGF0aCYgbmV3UGF0aCk7CisgICAgY29uc3Qg
UGF0aCYgcGF0aCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyUGF0aCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKnJlbmRlck5hbWUo
KSBjb25zdCB7IHJldHVybiAiS0NhbnZhc0l0ZW0iOyB9CkBAIC03MywxMCArNzMsMTAgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChOb2RlSW5mbyYsIGludCB4LCBpbnQg
eSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwogCiBwcm90ZWN0ZWQ6Ci0gICAgdmly
dHVhbCB2b2lkIGRyYXdNYXJrZXJzSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxv
YXRSZWN0JiwgY29uc3QgS0NhbnZhc1BhdGgqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRyYXdNYXJrZXJzSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0Jiwg
Y29uc3QgUGF0aCYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCQm94
KCkgY29uc3QgPSAwOwogCiBwcml2YXRlOgotICAgIEZsb2F0UmVjdCBzdHJva2VCQm94KCkgY29u
c3Q7CiAgICAgRmxvYXRQb2ludCBtYXBBYnNvbHV0ZVBvaW50VG9Mb2NhbChjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkgY29uc3Q7CiAKICAgICBjbGFzcyBQcml2YXRlOwpJbmRleDogV2ViQ29yZS9r
Y2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
Y2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmgJKHJldmlzaW9uIDE2MDMyKQorKysgV2Vi
Q29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5nRGV2aWNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtIGN0bSgp
IGNvbnN0ID0gMDsKICAgICAgICAgCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyUGF0aCgpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgYWRkUGF0aChjb25zdCBLQ2FudmFzUGF0aCopID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRkUGF0aChjb25zdCBQYXRoJikgPSAwOwogCiAgICAgdmlydHVhbCBHcmFw
aGljc0NvbnRleHQqIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpID0gMDsKIH07CkBAIC02NCwxNiAr
NjQsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwdXNoQ29udGV4dChLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCAqY29udGV4dCk7CiAgICAgCiAgICAgdmlydHVhbCBLUmVuZGVyaW5nRGV2
aWNlQ29udGV4dCAqY29udGV4dEZvckltYWdlKEtDYW52YXNJbWFnZSAqaW1hZ2UpIGNvbnN0ID0g
MDsKLSAgICAKLSAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgc3RyaW5nRm9yUGF0aChjb25z
dCBLQ2FudmFzUGF0aCogcGF0aCkgPSAwOwogCiAgICAgLy8gQ3JlYXRpb24gdG9vbHMKICAgICB2
aXJ0dWFsIEtDYW52YXNSZXNvdXJjZSAqY3JlYXRlUmVzb3VyY2UoY29uc3QgS0NSZXNvdXJjZVR5
cGUgJnR5cGUpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIEtDYW52YXNGaWx0ZXJFZmZlY3QgKmNy
ZWF0ZUZpbHRlckVmZmVjdChjb25zdCBLQ0ZpbHRlckVmZmVjdFR5cGUgJnR5cGUpIGNvbnN0ID0g
MDsKICAgICB2aXJ0dWFsIEtSZW5kZXJpbmdQYWludFNlcnZlciAqY3JlYXRlUGFpbnRTZXJ2ZXIo
Y29uc3QgS0NQYWludFNlcnZlclR5cGUgJnR5cGUpIGNvbnN0ID0gMDsKIAotICAgIHZpcnR1YWwg
UmVuZGVyUGF0aCAqY3JlYXRlSXRlbShSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpz
dHlsZSwgU1ZHU3R5bGVkRWxlbWVudCAqbm9kZSwgS0NhbnZhc1BhdGgqIHBhdGgpIGNvbnN0ID0g
MDsKLSAgICB2aXJ0dWFsIEtDYW52YXNQYXRoKiBjcmVhdGVQYXRoKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgUmVuZGVyUGF0aCAqY3JlYXRlSXRlbShSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRl
clN0eWxlICpzdHlsZSwgU1ZHU3R5bGVkRWxlbWVudCAqbm9kZSwgY29uc3QgUGF0aCYgcGF0aCkg
Y29uc3QgPSAwOwogCiBwcml2YXRlOgogICAgIFZlY3RvcjxLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCo+IG1fY29udGV4dFN0YWNrOwpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVy
aW5nRmlsbFBhaW50ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
S1JlbmRlcmluZ0ZpbGxQYWludGVyLmNwcAkocmV2aXNpb24gMTYwMzIpCisrKyBXZWJDb3JlL2tj
YW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFpbnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM4LDcgKzM4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIGZsb2F0IG9wYWNpdHk7Ci0gICAg
S0NXaW5kUnVsZSBmaWxsUnVsZTsKKyAgICBXaW5kUnVsZSBmaWxsUnVsZTsKIH07CiAKIEtSZW5k
ZXJpbmdGaWxsUGFpbnRlcjo6S1JlbmRlcmluZ0ZpbGxQYWludGVyKCkgOiBkKG5ldyBQcml2YXRl
KCkpCkBAIC01MCwxMiArNTAsMTIgQEAgS1JlbmRlcmluZ0ZpbGxQYWludGVyOjp+S1JlbmRlcmlu
Z0ZpbGxQYQogICAgIGRlbGV0ZSBkOwogfQogCi1LQ1dpbmRSdWxlIEtSZW5kZXJpbmdGaWxsUGFp
bnRlcjo6ZmlsbFJ1bGUoKSBjb25zdAorV2luZFJ1bGUgS1JlbmRlcmluZ0ZpbGxQYWludGVyOjpm
aWxsUnVsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGQtPmZpbGxSdWxlOwogfQogCi12b2lkIEtS
ZW5kZXJpbmdGaWxsUGFpbnRlcjo6c2V0RmlsbFJ1bGUoS0NXaW5kUnVsZSBydWxlKQordm9pZCBL
UmVuZGVyaW5nRmlsbFBhaW50ZXI6OnNldEZpbGxSdWxlKFdpbmRSdWxlIHJ1bGUpCiB7CiAgICAg
ZC0+ZmlsbFJ1bGUgPSBydWxlOwogfQpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nRmlsbFBhaW50ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNl
L0tSZW5kZXJpbmdGaWxsUGFpbnRlci5oCShyZXZpc2lvbiAxNjAzMikKKysrIFdlYkNvcmUva2Nh
bnZhcy9kZXZpY2UvS1JlbmRlcmluZ0ZpbGxQYWludGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0
LDcgKzI0LDcgQEAKICNkZWZpbmUgS1JlbmRlcmluZ0ZpbGxQYWludGVyX0gKICNpZmRlZiBTVkdf
U1VQUE9SVAogCi0jaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzUGF0aC5oPgorI2luY2x1ZGUgIlBh
dGguaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNiw4ICszNiw4IEBAIHB1YmxpYzoK
ICAgICBLUmVuZGVyaW5nRmlsbFBhaW50ZXIoKTsKICAgICB2aXJ0dWFsIH5LUmVuZGVyaW5nRmls
bFBhaW50ZXIoKTsKIAotICAgIEtDV2luZFJ1bGUgZmlsbFJ1bGUoKSBjb25zdDsKLSAgICB2b2lk
IHNldEZpbGxSdWxlKEtDV2luZFJ1bGUgcnVsZSk7CisgICAgV2luZFJ1bGUgZmlsbFJ1bGUoKSBj
b25zdDsKKyAgICB2b2lkIHNldEZpbGxSdWxlKFdpbmRSdWxlIHJ1bGUpOwogCiAgICAgZmxvYXQg
b3BhY2l0eSgpIGNvbnN0OwogICAgIHZvaWQgc2V0T3BhY2l0eShmbG9hdCBvcGFjaXR5KTsKSW5k
ZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc0l0ZW1RdWFy
dHouaAkocmV2aXNpb24gMTYwMzIpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9L
Q2FudmFzSXRlbVF1YXJ0ei5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw4IEBAIHB1Ymxp
YzoKICAgICBLQ2FudmFzSXRlbVF1YXJ0eihSZW5kZXJTdHlsZSosIFNWR1N0eWxlZEVsZW1lbnQq
KTsKICAgICB2aXJ0dWFsIH5LQ2FudmFzSXRlbVF1YXJ0eigpIHsgfQogICAgIAotICAgIHZpcnR1
YWwgdm9pZCBkcmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UmVjdCYsIGNvbnN0IEtDYW52YXNQYXRoKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRyYXdN
YXJrZXJzSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
UGF0aCYpIGNvbnN0OworICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJCb3goKSBjb25zdDsK
IH07CiAKIH0KSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVt
UXVhcnR6Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tD
YW52YXNJdGVtUXVhcnR6Lm1tCShyZXZpc2lvbiAxNjAzMikKKysrIFdlYkNvcmUva2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMs
NyArMTYzLDcgQEAgc3RhdGljIHZvaWQgZHJhd1N0YXJ0QW5kTWlkTWFya2Vycyh2b2lkIAogICAg
IGRhdGEuZWxlbWVudEluZGV4Kys7CiB9CiAKLXZvaWQgS0NhbnZhc0l0ZW1RdWFydHo6OmRyYXdN
YXJrZXJzSWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3Qm
IHJlY3QsIGNvbnN0IEtDYW52YXNQYXRoICpwYXRoKSBjb25zdAordm9pZCBLQ2FudmFzSXRlbVF1
YXJ0ejo6ZHJhd01hcmtlcnNJZk5lZWRlZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgUGF0aCYgcGF0aCkgY29uc3QKIHsKICAgICBEb2N1bWVu
dCAqZG9jID0gZG9jdW1lbnQoKTsKICAgICBjb25zdCBTVkdSZW5kZXJTdHlsZSAqc3ZnU3R5bGUg
PSBzdHlsZSgpLT5zdmdTdHlsZSgpOwpAQCAtMTc5LDcgKzE3OSw3IEBAIHZvaWQgS0NhbnZhc0l0
ZW1RdWFydHo6OmRyYXdNYXJrZXJzSWZOZWUKIAogICAgIERyYXdNYXJrZXJzRGF0YSBkYXRhKGNv
bnRleHQsIHN0YXJ0TWFya2VyLCBtaWRNYXJrZXIsIHN0cm9rZVdpZHRoKTsKIAotICAgIENHUGF0
aFJlZiBjZ1BhdGggPSBzdGF0aWNfY2FzdDxjb25zdCBLQ2FudmFzUGF0aFF1YXJ0eio+KHBhdGgp
LT5jZ1BhdGgoKTsKKyAgICBDR1BhdGhSZWYgY2dQYXRoID0gcGF0aC5wbGF0Zm9ybVBhdGgoKTsK
ICAgICBDR1BhdGhBcHBseShjZ1BhdGgsICZkYXRhLCBkcmF3U3RhcnRBbmRNaWRNYXJrZXJzKTsK
IAogICAgIGRhdGEucHJldmlvdXNNYXJrZXJEYXRhLm1hcmtlciA9IGVuZE1hcmtlcjsKQEAgLTE4
Nyw2ICsxODcsMTcgQEAgdm9pZCBLQ2FudmFzSXRlbVF1YXJ0ejo6ZHJhd01hcmtlcnNJZk5lZQog
ICAgIGRyYXdNYXJrZXJXaXRoRGF0YShjb250ZXh0LCBkYXRhLnByZXZpb3VzTWFya2VyRGF0YSk7
CiB9CiAKK0Zsb2F0UmVjdCBLQ2FudmFzSXRlbVF1YXJ0ejo6c3Ryb2tlQkJveCgpIGNvbnN0Cit7
CisgICAgaWYgKEtTVkdQYWludGVyRmFjdG9yeTo6aXNTdHJva2VkKHN0eWxlKCkpKSB7CisgICAg
ICAgIEtSZW5kZXJpbmdTdHJva2VQYWludGVyIHN0cm9rZVBhaW50ZXIgPSBLU1ZHUGFpbnRlckZh
Y3Rvcnk6OnN0cm9rZVBhaW50ZXIoc3R5bGUoKSwgdGhpcyk7CisgICAgICAgIHJldHVybiBzdHJv
a2VCb3VuZGluZ0JveChwYXRoKCksIHN0cm9rZVBhaW50ZXIpOworICAgIH0KKworICAgIHJldHVy
biBwYXRoKCkuYm91bmRpbmdSZWN0KCk7Cit9CisKKwogfQogCiAjZW5kaWYgLy8gU1ZHX1NVUFBP
UlQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNQYXRoUXVhcnR6
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS0NhbnZhc1Bh
dGhRdWFydHouaAkocmV2aXNpb24gMTYwMzIpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1
YXJ0ei9LQ2FudmFzUGF0aFF1YXJ0ei5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgS0NhbnZhc1BhdGhRdWFydHpfaAotI2RlZmlu
ZSBLQ2FudmFzUGF0aFF1YXJ0el9oCi0KLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNQYXRoLmg+
Ci0KLXR5cGVkZWYgc3RydWN0IENHUGF0aCAqQ0dNdXRhYmxlUGF0aFJlZjsKLXR5cGVkZWYgY29u
c3Qgc3RydWN0IENHUGF0aCAqQ0dQYXRoUmVmOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNs
YXNzIEtDYW52YXNQYXRoUXVhcnR6IDogcHVibGljIEtDYW52YXNQYXRoIHsKLXB1YmxpYzoKLSAg
ICBLQ2FudmFzUGF0aFF1YXJ0eigpOwotICAgIHZpcnR1YWwgfktDYW52YXNQYXRoUXVhcnR6KCk7
Ci0gICAgCi0gICAgdmlydHVhbCBib29sIGlzRW1wdHkoKSBjb25zdDsKLQotICAgIHZpcnR1YWwg
dm9pZCBtb3ZlVG8oZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdmlydHVhbCB2b2lkIGxpbmVUbyhm
bG9hdCB4LCBmbG9hdCB5KTsKLSAgICB2aXJ0dWFsIHZvaWQgY3VydmVUbyhmbG9hdCB4MSwgZmxv
YXQgeTEsIGZsb2F0IHgyLCBmbG9hdCB5MiwgZmxvYXQgeDMsIGZsb2F0IHkzKTsKLSAgICB2aXJ0
dWFsIHZvaWQgY2xvc2VTdWJwYXRoKCk7Ci0KLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBib3VuZGlu
Z0JveCgpOwotICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KGNvbnN0IEtS
ZW5kZXJpbmdTdHJva2VQYWludGVyJik7Ci0gICAgdmlydHVhbCBib29sIGNvbnRhaW5zUG9pbnQo
Y29uc3QgRmxvYXRQb2ludCYsIEtDV2luZFJ1bGUpOwotICAgIHZpcnR1YWwgYm9vbCBzdHJva2VD
b250YWluc1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmKTsKLSAgICAKLSAgICBDR1BhdGhSZWYgY2dQ
YXRoKCkgY29uc3QgeyByZXR1cm4gbV9jZ1BhdGg7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgQ0dN
dXRhYmxlUGF0aFJlZiBtX2NnUGF0aDsKLX07Ci0KLX0KLQotI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzUmVzb3VyY2VzUXVhcnR6Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNSZXNvdXJjZXNRdWFy
dHoubW0JKHJldmlzaW9uIDE2MDMyKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHov
S0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBA
QAogI2ltcG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJLQ2FudmFzRmlsdGVyUXVh
cnR6LmgiCiAjaW1wb3J0ICJLQ2FudmFzTWFza2VyUXVhcnR6LmgiCi0jaW1wb3J0ICJLQ2FudmFz
UGF0aFF1YXJ0ei5oIgogI2ltcG9ydCAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgogI2ltcG9y
dCAiUXVhcnR6U3VwcG9ydC5oIgogCkBAIC00Niw3ICs0NSw3IEBAIHZvaWQgS0NhbnZhc0NsaXBw
ZXJRdWFydHo6OmFwcGx5Q2xpcChjb24KICAgICAgICAgcmV0dXJuOwogCiAgICAgQk9PTCBoZXRl
cm9nZW5vdXNDbGlwUnVsZXMgPSBOTzsKLSAgICBLQ1dpbmRSdWxlIGNsaXBSdWxlID0gbV9jbGlw
RGF0YVswXS53aW5kUnVsZSgpOworICAgIFdpbmRSdWxlIGNsaXBSdWxlID0gbV9jbGlwRGF0YVsw
XS53aW5kUnVsZSgpOwogCiAgICAgY29udGV4dC0+Y2xlYXJQYXRoKCk7CiAKQEAgLTU3LDggKzU2
LDcgQEAgdm9pZCBLQ2FudmFzQ2xpcHBlclF1YXJ0ejo6YXBwbHlDbGlwKGNvbgogICAgICAgICBp
ZiAoZGF0YS53aW5kUnVsZSgpICE9IGNsaXBSdWxlKQogICAgICAgICAgICAgaGV0ZXJvZ2Vub3Vz
Q2xpcFJ1bGVzID0gWUVTOwogICAgICAgICAKLSAgICAgICAgS0NhbnZhc1BhdGhRdWFydHogKnBh
dGggPSBzdGF0aWNfY2FzdDxLQ2FudmFzUGF0aFF1YXJ0eio+KGRhdGEucGF0aC5nZXQoKSk7ICAg
ICAgICAKLSAgICAgICAgQ0dQYXRoUmVmIGNsaXBQYXRoID0gc3RhdGljX2Nhc3Q8S0NhbnZhc1Bh
dGhRdWFydHoqPihwYXRoKS0+Y2dQYXRoKCk7CisgICAgICAgIENHUGF0aFJlZiBjbGlwUGF0aCA9
IGRhdGEucGF0aC5wbGF0Zm9ybVBhdGgoKTsKIAogICAgICAgICBpZiAoZGF0YS5iYm94VW5pdHMp
IHsKICAgICAgICAgICAgIENHTXV0YWJsZVBhdGhSZWYgdHJhbnNmb3JtZWRQYXRoID0gQ0dQYXRo
Q3JlYXRlTXV0YWJsZSgpOwpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ei5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAkocmV2aXNpb24gMTYwMzIpCisrKyBX
ZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgJKHdv
cmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgQWZmaW5l
VHJhbnNmb3JtIGN0bSgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhdGgo
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkUGF0aChjb25zdCBLQ2FudmFzUGF0aCopOworICAgIHZp
cnR1YWwgdm9pZCBhZGRQYXRoKGNvbnN0IFBhdGgmKTsKIAogICAgIHZpcnR1YWwgR3JhcGhpY3ND
b250ZXh0KiBjcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKICAgICAKQEAgLTc4LDE2ICs3OCwxMyBA
QCBwdWJsaWM6CiAgICAgQ0dDb250ZXh0UmVmIGN1cnJlbnRDR0NvbnRleHQoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0Rm9ySW1hZ2UoS0NhbnZh
c0ltYWdlICopIGNvbnN0OwogCi0gICAgdmlydHVhbCBEZXByZWNhdGVkU3RyaW5nIHN0cmluZ0Zv
clBhdGgoY29uc3QgS0NhbnZhc1BhdGgqIHBhdGgpOwotCiAgICAgLy8gUmVzb3VyY2UgY3JlYXRp
b24KICAgICB2aXJ0dWFsIEtDYW52YXNSZXNvdXJjZSAqY3JlYXRlUmVzb3VyY2UoY29uc3QgS0NS
ZXNvdXJjZVR5cGUgJnR5cGUpIGNvbnN0OwogICAgIHZpcnR1YWwgS1JlbmRlcmluZ1BhaW50U2Vy
dmVyICpjcmVhdGVQYWludFNlcnZlcihjb25zdCBLQ1BhaW50U2VydmVyVHlwZSAmdHlwZSkgY29u
c3Q7CiAgICAgdmlydHVhbCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpjcmVhdGVGaWx0ZXJFZmZlY3Qo
Y29uc3QgS0NGaWx0ZXJFZmZlY3RUeXBlICZ0eXBlKSBjb25zdDsKLSAgICB2aXJ0dWFsIEtDYW52
YXNQYXRoKiBjcmVhdGVQYXRoKCkgY29uc3Q7CiAgICAgCiAgICAgLy8gaXRlbSBjcmVhdGlvbgot
ICAgIHZpcnR1YWwgUmVuZGVyUGF0aCAqY3JlYXRlSXRlbShSZW5kZXJBcmVuYSAqYXJlbmEsIFJl
bmRlclN0eWxlICpzdHlsZSwgU1ZHU3R5bGVkRWxlbWVudCAqbm9kZSwgS0NhbnZhc1BhdGgqIHBh
dGgpIGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVyUGF0aCAqY3JlYXRlSXRlbShSZW5kZXJBcmVu
YSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSwgU1ZHU3R5bGVkRWxlbWVudCAqbm9kZSwgY29u
c3QgUGF0aCYgcGF0aCkgY29uc3Q7CiAKICAgICAvLyBmaWx0ZXJzIChtb3N0bHkgZGVidWdnaW5n
KQogICAgIHN0YXRpYyBib29sIGZpbHRlcnNFbmFibGVkKCk7CkluZGV4OiBXZWJDb3JlL2tjYW52
YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0J
KHJldmlzaW9uIDE2MDMyKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRl
cmluZ0RldmljZVF1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsOSBAQCB2b2lk
IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6OjpjbGVhCiAgICAgQ0dDb250ZXh0QmVnaW5Q
YXRoKG1fY2dDb250ZXh0KTsKIH0KIAotdm9pZCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0
ejo6YWRkUGF0aChjb25zdCBLQ2FudmFzUGF0aCAqcGF0aCkKK3ZvaWQgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRRdWFydHo6OmFkZFBhdGgoY29uc3QgUGF0aCYgcGF0aCkKIHsKLSAgICBDR0NvbnRl
eHRBZGRQYXRoKG1fY2dDb250ZXh0LCBzdGF0aWNfY2FzdDxjb25zdCBLQ2FudmFzUGF0aFF1YXJ0
eio+KHBhdGgpLT5jZ1BhdGgoKSk7CisgICAgQ0dDb250ZXh0QWRkUGF0aChtX2NnQ29udGV4dCwg
cGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiB9CiAKIE5TR3JhcGhpY3NDb250ZXh0ICpLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dFF1YXJ0ejo6bnNHcmFwaGljc0NvbnRleHQoKQpAQCAtMTYzLDI2ICsxNjMs
NiBAQCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqS1JlbmRlcmluZ0RldmljCiB9CiAKICNwcmFn
bWEgbWFyayAtCi0jcHJhZ21hIG1hcmsgUGF0aCBNYW5hZ2VtZW50Ci0KLUtDYW52YXNQYXRoKiBL
UmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpjcmVhdGVQYXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bmV3IEtDYW52YXNQYXRoUXVhcnR6KCk7Ci19Ci0KLURlcHJlY2F0ZWRTdHJpbmcgS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ejo6c3RyaW5nRm9yUGF0aChjb25zdCBLQ2FudmFzUGF0aCAqcGF0aCkKLXsK
LSAgICBEZXByZWNhdGVkU3RyaW5nIHJlc3VsdDsKLSAgICBpZiAocGF0aCkgewotICAgICAgICBD
R1BhdGhSZWYgY2dQYXRoID0gc3RhdGljX2Nhc3Q8Y29uc3QgS0NhbnZhc1BhdGhRdWFydHogKj4o
cGF0aCktPmNnUGF0aCgpOwotICAgICAgICBDRlN0cmluZ1JlZiBwYXRoU3RyaW5nID0gQ0ZTdHJp
bmdGcm9tQ0dQYXRoKGNnUGF0aCk7Ci0gICAgICAgIHJlc3VsdCA9IERlcHJlY2F0ZWRTdHJpbmc6
OmZyb21DRlN0cmluZyhwYXRoU3RyaW5nKTsKLSAgICAgICAgQ0ZSZWxlYXNlKHBhdGhTdHJpbmcp
OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jcHJhZ21hIG1hcmsgLQogI3ByYWdt
YSBtYXJrIFJlc291cmNlIENyZWF0aW9uCiAKIEtSZW5kZXJpbmdQYWludFNlcnZlciAqS1JlbmRl
cmluZ0RldmljZVF1YXJ0ejo6Y3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgS0NQYWludFNlcnZlclR5
cGUgJnR5cGUpIGNvbnN0CkBAIC0yMDUsNyArMTg1LDcgQEAgS1JlbmRlcmluZ1BhaW50U2VydmVy
ICpLUmVuZGVyaW5nRGV2aWNlUQogICAgIHJldHVybiBuZXdTZXJ2ZXI7CiB9CiAKLVJlbmRlclBh
dGggKktSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmNyZWF0ZUl0ZW0oUmVuZGVyQXJlbmEgKmFyZW5h
LCBSZW5kZXJTdHlsZSAqc3R5bGUsIFNWR1N0eWxlZEVsZW1lbnQgKm5vZGUsIEtDYW52YXNQYXRo
KiBwYXRoKSBjb25zdAorUmVuZGVyUGF0aCAqS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6Y3JlYXRl
SXRlbShSZW5kZXJBcmVuYSAqYXJlbmEsIFJlbmRlclN0eWxlICpzdHlsZSwgU1ZHU3R5bGVkRWxl
bWVudCAqbm9kZSwgY29uc3QgUGF0aCYgcGF0aCkgY29uc3QKIHsKICAgICBSZW5kZXJQYXRoICpp
dGVtID0gbmV3IChhcmVuYSkgS0NhbnZhc0l0ZW1RdWFydHooc3R5bGUsIG5vZGUpOwogICAgIGl0
ZW0tPnNldFBhdGgocGF0aCk7CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9R
dWFydHpTdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFy
dHovUXVhcnR6U3VwcG9ydC5oCShyZXZpc2lvbiAxNjAzMikKKysrIFdlYkNvcmUva2NhbnZhcy9k
ZXZpY2UvcXVhcnR6L1F1YXJ0elN1cHBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjksOSArMjks
MTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBQYXRoOwogY2xhc3MgSW50UmVj
dDsKK2NsYXNzIEZsb2F0UmVjdDsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgUmVuZGVyT2Jq
ZWN0OworY2xhc3MgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXI7CiAKICNpZm5kZWYgTkRFQlVHCiB2
b2lkIGRlYnVnRHVtcENHSW1hZ2VUb0ZpbGUoTlNTdHJpbmcgKmZpbGVuYW1lLCBDR0ltYWdlUmVm
IGltYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpOwpAQCAtNDYsNiArNDksOCBAQCBDR0FmZmlu
ZVRyYW5zZm9ybSBDR0FmZmluZVRyYW5zZm9ybU1ha2VNCiB2b2lkIGFwcGx5U3Ryb2tlU3R5bGVU
b0NvbnRleHQoQ0dDb250ZXh0UmVmLCBjb25zdCBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciYpOwog
dm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KENHQ29udGV4dFJlZiwgUmVuZGVyU3R5bGUq
LCBjb25zdCBSZW5kZXJPYmplY3QqKTsKIAorRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KGNv
bnN0IFBhdGgmIHBhdGgsIGNvbnN0IEtSZW5kZXJpbmdTdHJva2VQYWludGVyJiBzdHJva2VQYWlu
dGVyKTsKKwogc3RhdGljIGlubGluZSBDR0xpbmVDYXAgQ0dMaW5lQ2FwRnJvbUtDKEtDQ2FwU3R5
bGUgY2FwKQogewogICAgIGlmIChjYXAgPT0gQ0FQX0JVVFQpCkluZGV4OiBXZWJDb3JlL2tjYW52
YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a2NhbnZhcy9kZXZpY2UvcXVhcnR6L1F1YXJ0elN1cHBvcnQubW0JKHJldmlzaW9uIDE2MDMyKQor
KysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMTI1LDQxICsxMjUsNDggQEAgdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250
ZXh0KENHQ29udGV4dAogICAgIGFwcGx5U3Ryb2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3Ry
b2tlUGFpbnRlcik7CiB9CiAKLXZvaWQgQ0dQYXRoVG9DRlN0cmluZ0FwcGxpZXJGdW5jdGlvbih2
b2lkICppbmZvLCBjb25zdCBDR1BhdGhFbGVtZW50ICplbGVtZW50KQorQ0dDb250ZXh0UmVmIHNj
cmF0Y2hDb250ZXh0KCkKIHsKLSAgICBDRk11dGFibGVTdHJpbmdSZWYgc3RyaW5nID0gKENGTXV0
YWJsZVN0cmluZ1JlZilpbmZvOwotICAgIENGU3RyaW5nUmVmIHR5cGVTdHJpbmcgPSBDRlNUUigi
Iik7Ci0gICAgQ0dQb2ludCAqcG9pbnRzID0gZWxlbWVudC0+cG9pbnRzOwotICAgIHN3aXRjaChl
bGVtZW50LT50eXBlKSB7Ci0gICAgY2FzZSBrQ0dQYXRoRWxlbWVudE1vdmVUb1BvaW50OgotICAg
ICAgICBDRlN0cmluZ0FwcGVuZEZvcm1hdChzdHJpbmcsIDAsIENGU1RSKCJNJS4yZiwlLjJmIiks
IHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Uga0NH
UGF0aEVsZW1lbnRBZGRMaW5lVG9Qb2ludDoKLSAgICAgICAgQ0ZTdHJpbmdBcHBlbmRGb3JtYXQo
c3RyaW5nLCAwLCBDRlNUUigiTCUuMmYsJS4yZiIpLCBwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkp
OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIGtDR1BhdGhFbGVtZW50QWRkUXVhZEN1cnZlVG9Q
b2ludDoKLSAgICAgICAgQ0ZTdHJpbmdBcHBlbmRGb3JtYXQoc3RyaW5nLCAwLCBDRlNUUigiUSUu
MmYsJS4yZiwlLjJmLCUuMmYiKSwKLSAgICAgICAgICAgICAgICBwb2ludHNbMF0ueCwgcG9pbnRz
WzBdLnksIHBvaW50c1sxXS54LCBwb2ludHNbMV0ueSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2Uga0NHUGF0aEVsZW1lbnRBZGRDdXJ2ZVRvUG9pbnQ6Ci0gICAgICAgIENGU3RyaW5nQXBwZW5k
Rm9ybWF0KHN0cmluZywgMCwgQ0ZTVFIoIkMlLjJmLCUuMmYsJS4yZiwlLjJmLCUuMmYsJS4yZiIp
LAotICAgICAgICAgICAgICAgIHBvaW50c1swXS54LCBwb2ludHNbMF0ueSwgcG9pbnRzWzFdLngs
IHBvaW50c1sxXS55LAotICAgICAgICAgICAgICAgIHBvaW50c1syXS54LCBwb2ludHNbMl0ueSk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRDbG9zZVN1YnBhdGg6Ci0g
ICAgICAgIHR5cGVTdHJpbmcgPSBDRlNUUigiWCIpOyBicmVhazsKLSAgICB9CisgICAgc3RhdGlj
IENHQ29udGV4dFJlZiBzY3JhdGNoID0gMDsKKyAgICBpZiAoIXNjcmF0Y2gpIHsKKyAgICAgICAg
Q0ZNdXRhYmxlRGF0YVJlZiBlbXB0eSA9IENGRGF0YUNyZWF0ZU11dGFibGUoTlVMTCwgMCk7Cisg
ICAgICAgIENHRGF0YUNvbnN1bWVyUmVmIGNvbnN1bWVyID0gQ0dEYXRhQ29uc3VtZXJDcmVhdGVX
aXRoQ0ZEYXRhKGVtcHR5KTsKKyAgICAgICAgc2NyYXRjaCA9IENHUERGQ29udGV4dENyZWF0ZShj
b25zdW1lciwgTlVMTCwgTlVMTCk7CisgICAgICAgIENHRGF0YUNvbnN1bWVyUmVsZWFzZShjb25z
dW1lcik7CisgICAgICAgIENGUmVsZWFzZShlbXB0eSk7CisKKyAgICAgICAgQ0dGbG9hdCBibGFj
a1s0XSA9IHswLCAwLCAwLCAxfTsKKyAgICAgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yKHNjcmF0
Y2gsIGJsYWNrKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3Ioc2NyYXRjaCwgYmxh
Y2spOworICAgICB9CisgICAgcmV0dXJuIHNjcmF0Y2g7CiB9CiAKLUNGU3RyaW5nUmVmIENGU3Ry
aW5nRnJvbUNHUGF0aChDR1BhdGhSZWYgcGF0aCkKLXsKLSAgICBpZiAoIXBhdGgpCi0gICAgICAg
IHJldHVybiAwOworRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KGNvbnN0IFBhdGgmIHBhdGgs
IGNvbnN0IEtSZW5kZXJpbmdTdHJva2VQYWludGVyJiBzdHJva2VQYWludGVyKQorIHsKKyAgICAv
LyB0aGUgYmJveCBtaWdodCBncm93IGlmIHRoZSBwYXRoIGlzIHN0cm9rZWQuCisgICAgLy8gYW5k
IENHUGF0aEdldEJvdW5kaW5nQm94IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0LCBzbyB3ZSdsbCBoYXZl
CisgICAgLy8gdG8gbWFrZSBhbiBhbHRlcm5hdGl2ZSBjYWxsLi4uCisgCisgICAgLy8gRklYTUU6
IHNpbmNlIHRoaXMgaXMgbWFpbmx5IHVzZWQgdG8gZGVjaWRlIHdoYXQgdG8gcmVwYWludCwKKyAg
ICAvLyBwZXJoYXBzIGl0IHdvdWxkIGJlIHN1ZmZpY2llbiB0byBqdXN0IG91dHNldCB0aGUgZmls
bCBiYm94IGJ5CisgICAgLy8gdGhlIHN0cm9rZSB3aWR0aCAtIHRoYXQgc2hvdWxkIGJlIHdheSBj
aGVhcGVyIGFuZCBzaW1wbGVyIHRoYW4KKyAgICAvLyB3aGF0IHdlIGRvIGhlcmUuCisgCisgICAg
Q0dQYXRoUmVmIGNnUGF0aCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7CisKKyAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IHNjcmF0Y2hDb250ZXh0KCk7CisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShj
b250ZXh0KTsKIAotICAgIENGTXV0YWJsZVN0cmluZ1JlZiBzdHJpbmcgPSBDRlN0cmluZ0NyZWF0
ZU11dGFibGUoTlVMTCwgMCk7Ci0gICAgQ0dQYXRoQXBwbHkocGF0aCwgc3RyaW5nLCBDR1BhdGhU
b0NGU3RyaW5nQXBwbGllckZ1bmN0aW9uKTsKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4
dCk7CisgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBjZ1BhdGgpOworICAgIGFwcGx5U3Ry
b2tlU3R5bGVUb0NvbnRleHQoY29udGV4dCwgc3Ryb2tlUGFpbnRlcik7CisgICAgQ0dDb250ZXh0
UmVwbGFjZVBhdGhXaXRoU3Ryb2tlZFBhdGgoY29udGV4dCk7CisgICAgQ0dSZWN0IGJveCA9IENH
Q29udGV4dEdldFBhdGhCb3VuZGluZ0JveChjb250ZXh0KTsKKyAgICAgICAgCisgICAgQ0dDb250
ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIAotICAgIHJldHVybiBzdHJpbmc7CisgICAgcmV0
dXJuIEZsb2F0UmVjdChib3gpOwogfQogCiB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL21pc2MvS0Nh
bnZhc1JlbmRlcmluZ1N0eWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL21pc2Mv
S0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcAkocmV2aXNpb24gMTYwMzIpCisrKyBXZWJDb3JlL2tz
dmcyL21pc2MvS0NhbnZhc1JlbmRlcmluZ1N0eWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNiBAQAogCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJLQ2FudmFzUGF0aC5oIgogI2luY2x1ZGUgIktDYW52YXNSZW5kZXJp
bmdTdHlsZS5oIgogI2luY2x1ZGUgIktSZW5kZXJpbmdEZXZpY2UuaCIKICNpbmNsdWRlICJLUmVu
ZGVyaW5nRmlsbFBhaW50ZXIuaCIKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NpcmNsZUVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNjAzMikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NpcmNsZUVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw4IEBACiAjaWZkZWYgU1ZHX1NV
UFBPUlQKICNpbmNsdWRlICJBdHRyLmgiCiAKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKICNp
bmNsdWRlICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNW
R0NpcmNsZUVsZW1lbnQuaCIKQEAgLTc1LDEyICs3NywxMiBAQCB2b2lkIFNWR0NpcmNsZUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgfQogfQogCi1LQ2FudmFzUGF0aCogU1ZHQ2lyY2xl
RWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0CitQYXRoIFNWR0NpcmNsZUVsZW1lbnQ6OnRvUGF0
aERhdGEoKSBjb25zdAogewogICAgIGZsb2F0IF9jeCA9IGN4KCktPmJhc2VWYWwoKS0+dmFsdWUo
KSwgX2N5ID0gY3koKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogICAgIGZsb2F0IF9yID0gcigpLT5i
YXNlVmFsKCktPnZhbHVlKCk7CiAKLSAgICByZXR1cm4gS0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+
Y3JlYXRlQ2lyY2xlKF9jeCwgX2N5LCBfcik7CisgICAgcmV0dXJuIEtDYW52YXNDcmVhdG9yOjpz
ZWxmKCktPmNyZWF0ZUNpcmNsZShGbG9hdFBvaW50KF9jeCwgX2N5KSwgX3IpOwogfQogCiBjb25z
dCBTVkdTdHlsZWRFbGVtZW50ICpTVkdDaXJjbGVFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4
dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQpJbmRleDogV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHQ2lyY2xlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0NpcmNsZUVsZW1lbnQuaAkocmV2aXNpb24gMTYwMzIpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdDaXJjbGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNO
ZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJl
cklzTmVlZGVkKHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFsIEtDYW52YXNQYXRoKiB0b1BhdGhE
YXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CiAK
ICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpwdXNoQXR0cmlidXRlQ29u
dGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKIApJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjAzMikKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2
LDggKzk2LDkgQEAgS0NhbnZhc0NsaXBwZXIgKlNWR0NsaXBQYXRoRWxlbWVudDo6Y2FudgogICAg
ICAgICBpZiAoZSAmJiBlLT5pc1N0eWxlZCgpKSB7CiAgICAgICAgICAgICBTVkdTdHlsZWRFbGVt
ZW50ICpzdHlsZWQgPSBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50ICo+KGUpOwogICAgICAg
ICAgICAgUmVuZGVyU3R5bGUgKnBhdGhTdHlsZSA9IGRvY3VtZW50KCktPnN0eWxlU2VsZWN0b3Io
KS0+c3R5bGVGb3JFbGVtZW50KHN0eWxlZCwgY2xpcFBhdGhTdHlsZSk7Ci0gICAgICAgICAgICBp
ZiAoS0NhbnZhc1BhdGgqIHBhdGhEYXRhID0gc3R5bGVkLT50b1BhdGhEYXRhKCkpCi0gICAgICAg
ICAgICAgICAgbV9jbGlwcGVyLT5hZGRDbGlwRGF0YShwYXRoRGF0YSwgKEtDV2luZFJ1bGUpIHBh
dGhTdHlsZS0+c3ZnU3R5bGUoKS0+Y2xpcFJ1bGUoKSwgYmJveCk7CisgICAgICAgICAgICBQYXRo
IHBhdGhEYXRhID0gc3R5bGVkLT50b1BhdGhEYXRhKCk7CisgICAgICAgICAgICBpZiAoIXBhdGhE
YXRhLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBtX2NsaXBwZXItPmFkZENsaXBEYXRhKHBh
dGhEYXRhLCAoV2luZFJ1bGUpIHBhdGhTdHlsZS0+c3ZnU3R5bGUoKS0+Y2xpcFJ1bGUoKSwgYmJv
eCk7CiAgICAgICAgICAgICBwYXRoU3R5bGUtPmRlcmVmKHZpZXcoKS0+cmVuZGVyQXJlbmEoKSk7
CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGxpcHNlRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1l
bnQuY3BwCShyZXZpc2lvbiAxNjAzMikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsbGlwc2VF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsOCBAQAogI2lmZGVmIFNWR19T
VVBQT1JUCiAjaW5jbHVkZSAiQXR0ci5oIgogCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorCiAj
aW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJT
VkdFbGxpcHNlRWxlbWVudC5oIgpAQCAtODIsMTIgKzg0LDEyIEBAIHZvaWQgU1ZHRWxsaXBzZUVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICB9CiB9CiAKLUtDYW52YXNQYXRoKiBTVkdFbGxp
cHNlRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0CitQYXRoIFNWR0VsbGlwc2VFbGVtZW50Ojp0
b1BhdGhEYXRhKCkgY29uc3QKIHsKICAgICBmbG9hdCBfY3ggPSBjeCgpLT5iYXNlVmFsKCktPnZh
bHVlKCksIF9jeSA9IGN5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKICAgICBmbG9hdCBfcnggPSBy
eCgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF9yeSA9IHJ5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsK
IAotICAgIHJldHVybiBLQ2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVhdGVFbGxpcHNlKF9jeCwg
X2N5LCBfcngsIF9yeSk7CisgICAgcmV0dXJuIEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0
ZUVsbGlwc2UoRmxvYXRQb2ludChfY3gsIF9jeSksIF9yeCwgX3J5KTsKIH0KIAogY29uc3QgU1ZH
U3R5bGVkRWxlbWVudCAqU1ZHRWxsaXBzZUVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNv
bnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdFbGxpcHNlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0Vs
bGlwc2VFbGVtZW50LmgJKHJldmlzaW9uIDE2MDMyKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
RWxsaXBzZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05l
ZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVy
SXNOZWVkZWQoc3R5bGUpOyB9Ci0gICAgICAgIHZpcnR1YWwgS0NhbnZhc1BhdGgqIHRvUGF0aERh
dGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdDsKIAog
ICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnB1c2hBdHRyaWJ1dGVDb250
ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpOwogCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDMyKQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNiBA
QAogI2luY2x1ZGUgPGtjYW52YXMvUmVuZGVyU1ZHQ29udGFpbmVyLmg+CiAjaW5jbHVkZSA8a2Nh
bnZhcy9LQ2FudmFzQ3JlYXRvci5oPgogI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0ltYWdlLmg+
Ci0jaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzUGF0aC5oPgogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHTGluZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0xpbmVFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwMzIpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdMaW5lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0LDggQEAKICNpZmRl
ZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIkF0dHIuaCIKIAorI2luY2x1ZGUgIkZsb2F0UG9pbnQu
aCIKKwogI2luY2x1ZGUgIlNWR05hbWVzLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgiCiAjaW5j
bHVkZSAiU1ZHTGluZUVsZW1lbnQuaCIKQEAgLTgyLDEyICs4NCwxMiBAQCB2b2lkIFNWR0xpbmVF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0CiAgICAgfQogfQogCi1LQ2FudmFzUGF0aCogU1ZH
TGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAorUGF0aCBTVkdMaW5lRWxlbWVudDo6dG9Q
YXRoRGF0YSgpIGNvbnN0CiB7CiAgICAgZmxvYXQgX3gxID0geDEoKS0+YmFzZVZhbCgpLT52YWx1
ZSgpLCBfeTEgPSB5MSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAgICAgZmxvYXQgX3gyID0geDIo
KS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfeTIgPSB5MigpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAK
LSAgICByZXR1cm4gS0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlTGluZShfeDEsIF95MSwg
X3gyLCBfeTIpOworICAgIHJldHVybiBLQ2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVhdGVMaW5l
KEZsb2F0UG9pbnQoX3gxLCBfeTEpLCBGbG9hdFBvaW50KF94MiwgX3kyKSk7CiB9CiAKIGNvbnN0
IFNWR1N0eWxlZEVsZW1lbnQgKlNWR0xpbmVFbGVtZW50OjpwdXNoQXR0cmlidXRlQ29udGV4dChj
b25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHTGluZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5l
RWxlbWVudC5oCShyZXZpc2lvbiAxNjAzMikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVF
bGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBib29sIHJlbmRlcmVySXNOZWVkZWQoUmVu
ZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFsIEtDYW52YXNQYXRoKiB0b1BhdGhEYXRhKCkgY29u
c3Q7CisgICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CiAKICAgICAgICAg
dmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpwdXNoQXR0cmlidXRlQ29udGV4dChjb25z
dCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Bh
dGhFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwMzIpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQ
YXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3OSwxNCArMzc5LDE0IEBAIFNWR1Bh
dGhTZWdMaXN0ICpTVkdQYXRoRWxlbWVudDo6YW5pbWF0ZWQKIH0KIAogLy8gRklYTUU6IFRoaXMg
cHJvYmFibHkgYmVsb25ncyBvbiBTVkdQYXRoU2VnTGlzdCBpbnN0ZWFkLiAtLSBlY3MgMTIvNS8w
NQotS0NhbnZhc1BhdGgqIFNWR1BhdGhFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK1BhdGgg
U1ZHUGF0aEVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAogeworICAgIFBhdGggcGF0aERhdGE7
CiAgICAgLy8gVE9ETyA6IGFsc28gc3VwcG9ydCBub24tbm9ybWFsaXplZCBtb2RlLCBhdCBsZWFz
dCBpbiBkb20gc3RydWN0dXJlCiAgICAgaW50IGxlbiA9IHBhdGhTZWdMaXN0KCktPm51bWJlck9m
SXRlbXMoKTsKICAgICBpZihsZW4gPCAxKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0
dXJuIHBhdGhEYXRhOwogCi0gICAgS0NhbnZhc1BhdGgqIHBhdGhEYXRhID0gcmVuZGVyaW5nRGV2
aWNlKCktPmNyZWF0ZVBhdGgoKTsKICAgICBmb3IoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpCiAg
ICAgewogICAgICAgICBTVkdQYXRoU2VnICpwID0gcGF0aFNlZ0xpc3QoKS0+Z2V0SXRlbShpKTsK
QEAgLTM5NSwyNSArMzk1LDI1IEBAIEtDYW52YXNQYXRoKiBTVkdQYXRoRWxlbWVudDo6dG9QYXRo
RGF0YSgKICAgICAgICAgICAgIGNhc2UgUEFUSFNFR19NT1ZFVE9fQUJTOgogICAgICAgICAgICAg
ewogICAgICAgICAgICAgICAgIFNWR1BhdGhTZWdNb3ZldG9BYnMgKm1vdmVUbyA9IHN0YXRpY19j
YXN0PFNWR1BhdGhTZWdNb3ZldG9BYnMgKj4ocCk7Ci0gICAgICAgICAgICAgICAgcGF0aERhdGEt
Pm1vdmVUbyhtb3ZlVG8tPngoKSwgbW92ZVRvLT55KCkpOworICAgICAgICAgICAgICAgIHBhdGhE
YXRhLm1vdmVUbyhGbG9hdFBvaW50KG1vdmVUby0+eCgpLCBtb3ZlVG8tPnkoKSkpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQQVRIU0VH
X0xJTkVUT19BQlM6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgU1ZHUGF0aFNlZ0xp
bmV0b0FicyAqbGluZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b0FicyAqPihwKTsK
LSAgICAgICAgICAgICAgICBwYXRoRGF0YS0+bGluZVRvKGxpbmVUby0+eCgpLCBsaW5lVG8tPnko
KSk7CisgICAgICAgICAgICAgICAgcGF0aERhdGEuYWRkTGluZVRvKEZsb2F0UG9pbnQobGluZVRv
LT54KCksIGxpbmVUby0+eSgpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBjYXNlIFBBVEhTRUdfQ1VSVkVUT19DVUJJQ19BQlM6CiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgU1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0FicyAqY3VydmVU
byA9IHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNBYnMgKj4ocCk7Ci0gICAgICAg
ICAgICAgICAgcGF0aERhdGEtPmN1cnZlVG8oY3VydmVUby0+eDEoKSwgY3VydmVUby0+eTEoKSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnZlVG8tPngyKCksIGN1cnZlVG8t
PnkyKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJ2ZVRvLT54KCksIGN1
cnZlVG8tPnkoKSk7CisgICAgICAgICAgICAgICAgcGF0aERhdGEuYWRkQmV6aWVyQ3VydmVUbyhG
bG9hdFBvaW50KGN1cnZlVG8tPngxKCksIGN1cnZlVG8tPnkxKCkpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgRmxvYXRQb2ludChjdXJ2ZVRvLT54MigpLCBjdXJ2ZVRvLT55Migp
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZsb2F0UG9pbnQoY3VydmVUby0+
eCgpLCBjdXJ2ZVRvLT55KCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGNhc2UgUEFUSFNFR19DTE9TRVBBVEg6Ci0gICAgICAgICAgICAgICAg
cGF0aERhdGEtPmNsb3NlU3VicGF0aCgpOworICAgICAgICAgICAgICAgIHBhdGhEYXRhLmNsb3Nl
U3VicGF0aCgpOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5oCShyZXZpc2lvbiAx
NjAzMikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwMSw3ICsxMDEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAg
ICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsg
cmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9Ci0gICAgICAg
IHZpcnR1YWwgS0NhbnZhc1BhdGgqIHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVh
bCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdDsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIG11dGFi
bGUgUmVmUHRyPFNWR1BhdGhTZWdMaXN0PiBtX3BhdGhTZWdMaXN0OwpJbmRleDogV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmNwcAkocmV2aXNpb24gMTYwMzIpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDIw
ICszOSwyMSBAQCBTVkdQb2x5Z29uRWxlbWVudDo6flNWR1BvbHlnb25FbGVtZW50KCkKIHsKIH0K
IAotS0NhbnZhc1BhdGgqIFNWR1BvbHlnb25FbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK1Bh
dGggU1ZHUG9seWdvbkVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAogeworICAgIFBhdGggcG9s
eURhdGE7CiAgICAgaW50IGxlbiA9IHBvaW50cygpLT5udW1iZXJPZkl0ZW1zKCk7CiAgICAgaWYo
bGVuIDwgMSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBwb2x5RGF0YTsKICAg
ICAKLSAgICBLQ2FudmFzUGF0aCogcG9seURhdGEgPSByZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRl
UGF0aCgpOwotICAgIHBvbHlEYXRhLT5tb3ZlVG8ocG9pbnRzKCktPmdldEl0ZW0oMCktPngoKSwg
cG9pbnRzKCktPmdldEl0ZW0oMCktPnkoKSk7CisgICAgcG9seURhdGEubW92ZVRvKEZsb2F0UG9p
bnQocG9pbnRzKCktPmdldEl0ZW0oMCktPngoKSwgcG9pbnRzKCktPmdldEl0ZW0oMCktPnkoKSkp
OwogICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICAgU1ZHUG9pbnQg
KnAgPSBwb2ludHMoKS0+Z2V0SXRlbShpKTsKLSAgICAgICAgcG9seURhdGEtPmxpbmVUbyhwLT54
KCksIHAtPnkoKSk7CisgICAgICAgIHBvbHlEYXRhLmFkZExpbmVUbyhGbG9hdFBvaW50KHAtPngo
KSwgcC0+eSgpKSk7CiAgICAgfQogCi0gICAgcG9seURhdGEtPmNsb3NlU3VicGF0aCgpOworICAg
IHBvbHlEYXRhLmNsb3NlU3VicGF0aCgpOworCiAgICAgcmV0dXJuIHBvbHlEYXRhOwogfQogCklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlnb25FbGVtZW50LmgJKHJldmlzaW9uIDE2MDMyKQor
KysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICBTVkdQb2x5Z29uRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAgICAgdmlydHVhbCB+
U1ZHUG9seWdvbkVsZW1lbnQoKTsKIAotICAgICAgICB2aXJ0dWFsIEtDYW52YXNQYXRoKiB0b1Bh
dGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHUG9seWxpbmVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdQb2x5bGluZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjAzMikKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE5ICsz
OSwxOCBAQCBTVkdQb2x5bGluZUVsZW1lbnQ6On5TVkdQb2x5bGluZUVsZW1lbnQoCiB7CiB9CiAK
LUtDYW52YXNQYXRoKiBTVkdQb2x5bGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAorUGF0
aCBTVkdQb2x5bGluZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAogeworICAgIFBhdGggcG9s
eURhdGE7CiAgICAgaW50IGxlbiA9IHBvaW50cygpLT5udW1iZXJPZkl0ZW1zKCk7CiAgICAgaWYo
bGVuIDwgMSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBwb2x5RGF0YTsKIAot
ICAgIEtDYW52YXNQYXRoKiBwb2x5RGF0YSA9IHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYXRo
KCk7Ci0gICAgcG9seURhdGEtPm1vdmVUbyhwb2ludHMoKS0+Z2V0SXRlbSgwKS0+eCgpLCBwb2lu
dHMoKS0+Z2V0SXRlbSgwKS0+eSgpKTsKKyAgICBwb2x5RGF0YS5tb3ZlVG8oRmxvYXRQb2ludChw
b2ludHMoKS0+Z2V0SXRlbSgwKS0+eCgpLCBwb2ludHMoKS0+Z2V0SXRlbSgwKS0+eSgpKSk7CiAg
ICAgZm9yIChpbnQgaSA9IDE7IGkgPCBsZW47ICsraSkgewogICAgICAgICBTVkdQb2ludCAqcCA9
IHBvaW50cygpLT5nZXRJdGVtKGkpOwotICAgICAgICBwb2x5RGF0YS0+bGluZVRvKHAtPngoKSwg
cC0+eSgpKTsKKyAgICAgICAgcG9seURhdGEuYWRkTGluZVRvKEZsb2F0UG9pbnQocC0+eCgpLCBw
LT55KCkpKTsKICAgICB9Ci0KICAgICByZXR1cm4gcG9seURhdGE7CiB9CiAKSW5kZXg6IFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oCShyZXZpc2lvbiAxNjAzMikKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIFNWR1BvbHlsaW5lRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAgICAgdmlydHVhbCB+U1ZHUG9s
eWxpbmVFbGVtZW50KCk7CiAKLSAgICAgICAgdmlydHVhbCBLQ2FudmFzUGF0aCogdG9QYXRoRGF0
YSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0OwogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1JlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSZWN0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDMyKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVj
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBTVkdS
ZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dAogICAgIH0KIH0KIAotS0NhbnZhc1BhdGgq
IFNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK1BhdGggU1ZHUmVjdEVsZW1lbnQ6
OnRvUGF0aERhdGEoKSBjb25zdAogewogICAgIGZsb2F0IF94ID0geCgpLT5iYXNlVmFsKCktPnZh
bHVlKCksIF95ID0geSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAgICAgZmxvYXQgX3dpZHRoID0g
d2lkdGgoKS0+YmFzZVZhbCgpLT52YWx1ZSgpLCBfaGVpZ2h0ID0gaGVpZ2h0KCktPmJhc2VWYWwo
KS0+dmFsdWUoKTsKQEAgLTExMSwxMCArMTExLDEwIEBAIEtDYW52YXNQYXRoKiBTVkdSZWN0RWxl
bWVudDo6dG9QYXRoRGF0YSgKICAgICB7CiAgICAgICAgIGZsb2F0IF9yeCA9IGhhc1J4ID8gcngo
KS0+YmFzZVZhbCgpLT52YWx1ZSgpIDogcnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogICAgICAg
ICBmbG9hdCBfcnkgPSBoYXNSeSA/IHJ5KCktPmJhc2VWYWwoKS0+dmFsdWUoKSA6IHJ4KCktPmJh
c2VWYWwoKS0+dmFsdWUoKTsKLSAgICAgICAgcmV0dXJuIEtDYW52YXNDcmVhdG9yOjpzZWxmKCkt
PmNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQsIF9yeCwgX3J5
KTsKKyAgICAgICAgcmV0dXJuIEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZVJvdW5kZWRS
ZWN0YW5nbGUoRmxvYXRSZWN0KF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0KSwgX3J4LCBfcnkpOwog
ICAgIH0KIAotICAgIHJldHVybiBLQ2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVhdGVSZWN0YW5n
bGUoX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpOworICAgIHJldHVybiBLQ2FudmFzQ3JlYXRvcjo6
c2VsZigpLT5jcmVhdGVSZWN0YW5nbGUoRmxvYXRSZWN0KF94LCBfeSwgX3dpZHRoLCBfaGVpZ2h0
KSk7CiB9CiAKIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKlNWR1JlY3RFbGVtZW50OjpwdXNoQXR0
cmlidXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KQpJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5oCShyZXZpc2lvbiAxNjAzMikKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cik7CiAKICAgICAgICAgdmlydHVhbCBib29sIHJlbmRl
cmVySXNOZWVkZWQoUmVuZGVyU3R5bGUgKnN0eWxlKSB7IHJldHVybiBTdHlsZWRFbGVtZW50Ojpy
ZW5kZXJlcklzTmVlZGVkKHN0eWxlKTsgfQotICAgICAgICB2aXJ0dWFsIEtDYW52YXNQYXRoKiB0
b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29u
c3Q7CiAKICAgICAgICAgdmlydHVhbCBjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpwdXNoQXR0cmli
dXRlQ29udGV4dChjb25zdCBTVkdTdHlsZWRFbGVtZW50ICpjb250ZXh0KTsKIApJbmRleDogV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDMyKQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDEwICs2OCwxMCBAQCBTVkdBbmltYXRlZFN0cmluZyogU1ZHU3R5bGVkRWxlbWVudDo6Y2xhCiAK
IFJlbmRlck9iamVjdCogU1ZHU3R5bGVkRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqIGFyZW5hLCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7Ci0gICAgUmVmUHRyPEtDYW52YXNQYXRo
PiBwYXRoRGF0YSA9IHRvUGF0aERhdGEoKTsKLSAgICBpZiAoIXBhdGhEYXRhKQorICAgIFBhdGgg
cGF0aERhdGEgPSB0b1BhdGhEYXRhKCk7CisgICAgaWYgKHBhdGhEYXRhLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVJdGVt
KGFyZW5hLCBzdHlsZSwgdGhpcywgcGF0aERhdGEuZ2V0KCkpOworICAgIHJldHVybiByZW5kZXJp
bmdEZXZpY2UoKS0+Y3JlYXRlSXRlbShhcmVuYSwgc3R5bGUsIHRoaXMsIHBhdGhEYXRhKTsKIH0K
IAogdm9pZCBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqIGF0dHIpCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCShyZXZp
c2lvbiAxNjAzMikKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAkod29y
a2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAj
aW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNWR1N0eWxhYmxlLmgiCi0jaW5jbHVk
ZSA8a2NhbnZhcy9LQ2FudmFzUGF0aC5oPgorI2luY2x1ZGUgIlBhdGguaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC01MSw3ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAg
ICAgICAvLyBUaGVzZSBuZWVkIHRvIGJlIGltcGxlbWVudGVkLgogICAgICAgICB2aXJ0dWFsIGJv
b2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSopIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
ICAgIHZpcnR1YWwgS0NhbnZhc1BhdGgqIHRvUGF0aERhdGEoKSBjb25zdCB7IHJldHVybiAwOyB9
CisgICAgICAgIHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3QgeyByZXR1cm4gUGF0aCgp
OyB9CiAgICAgICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSosIFJlbmRlclN0eWxlKik7CiAgICAgICAgIHZpcnR1YWwgS0NhbnZhc1Jlc291cmNlKiBj
YW52YXNSZXNvdXJjZSgpIHsgcmV0dXJuIDA7IH0KICAgICAgICAgCkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDMyKQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgIlNWR1RleHRDb250ZW50RWxlbWVudC5oIgog
I2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0ZWRFbnVt
ZXJhdGlvbi5oIgorI2luY2x1ZGUgIkZsb2F0UG9pbnQuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3Qu
aCIKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1RleHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdU
ZXh0RWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MDMyKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
VGV4dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+CiAj
aW5jbHVkZSA8a2NhbnZhcy9SZW5kZXJTVkdUZXh0Lmg+CisjaW5jbHVkZSAiRmxvYXRSZWN0Lmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9QYXRoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9QYXRoLmgJKHJldmlzaW9uIDE2MDMyKQor
KysgV2ViQ29yZS9wbGF0Zm9ybS9QYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBA
CiAvKgogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICAgICAgICAyMDA2IFJvYiBCdWlz
IDxidWlzQGtkZS5vcmc+CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM3LDkg
KzM4LDE1IEBAIHR5cGVkZWYgdm9pZCBQbGF0Zm9ybVBhdGg7CiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAorICAgIGVudW0gV2luZFJ1bGUgeworICAgICAgICBSVUxFX05PTlpFUk8gPSAwLAorICAg
ICAgICBSVUxFX0VWRU5PREQgPSAxCisgICAgfTsKKwogICAgIGNsYXNzIEZsb2F0UG9pbnQ7CiAg
ICAgY2xhc3MgRmxvYXRTaXplOwogICAgIGNsYXNzIEZsb2F0UmVjdDsKKyAgICBjbGFzcyBEZXBy
ZWNhdGVkU3RyaW5nOwogCiAgICAgY2xhc3MgUGF0aCB7CiAgICAgcHVibGljOgpAQCAtNDksMTAg
KzU2LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgUGF0aChjb25zdCBQYXRoJik7
CiAgICAgICAgIFBhdGgmIG9wZXJhdG9yPShjb25zdCBQYXRoJik7CiAKLSAgICAgICAgYm9vbCBj
b250YWlucyhjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgICAgIGJvb2wgY29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYsIFdpbmRSdWxlIHJ1bGUgPSBSVUxFX05PTlpFUk8pIGNvbnN0Owog
ICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0KCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBj
bGVhcigpOworICAgICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsKIAogICAgICAgICB2b2lkIG1v
dmVUbyhjb25zdCBGbG9hdFBvaW50Jik7CiAgICAgICAgIHZvaWQgYWRkTGluZVRvKGNvbnN0IEZs
b2F0UG9pbnQmKTsKQEAgLTY3LDEwICs3NSwxNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICAg
ICAgICAgdm9pZCB0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJik7CiAKKyAgICAgICAgdm9pZCBz
ZXRXaW5kaW5nUnVsZShXaW5kUnVsZSBydWxlKSB7IG1fcnVsZSA9IHJ1bGU7IH0KKyAgICAgICAg
V2luZFJ1bGUgd2luZGluZ1J1bGUoKSBjb25zdCB7IHJldHVybiBtX3J1bGU7IH0KKworICAgICAg
ICBEZXByZWNhdGVkU3RyaW5nIGRlYnVnU3RyaW5nKCkgY29uc3Q7CisKICAgICAgICAgUGxhdGZv
cm1QYXRoKiBwbGF0Zm9ybVBhdGgoKSBjb25zdCB7IHJldHVybiBtX3BhdGg7IH0KIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIFBsYXRmb3JtUGF0aCogbV9wYXRoOworICAgICAgICBXaW5kUnVsZSBt
X3J1bGU7CiAgICAgfTsKIAogfQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9jZy9QYXRoQ0cuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2cvUGF0aENHLmNwcAkocmV2aXNpb24g
MTYwMzIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2NnL1BhdGhDRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5LDYgKzI5LDcgQEAKICNpZiBQTEFURk9STShDRykKIAogI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKICNpbmNsdWRlIDxBcHBsaWNhdGlv
blNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpA
QCAtNTYsOSArNTcsOSBAQCBQYXRoJiBQYXRoOjpvcGVyYXRvcj0oY29uc3QgUGF0aCYgb3RoZXIp
CiAgICAgcmV0dXJuICp0aGlzOwogfQogCi1ib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50KSBjb25zdAorYm9vbCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50
ICZwb2ludCwgV2luZFJ1bGUgcnVsZSkgY29uc3QKIHsKLSAgICByZXR1cm4gQ0dQYXRoQ29udGFp
bnNQb2ludChtX3BhdGgsIDAsIHBvaW50LCBmYWxzZSk7CisgICAgcmV0dXJuIENHUGF0aENvbnRh
aW5zUG9pbnQobV9wYXRoLCAwLCBwb2ludCwgcnVsZSA9PSBSVUxFX0VWRU5PREQgPyB0cnVlIDog
ZmFsc2UpOwogfQogCiB2b2lkIFBhdGg6OnRyYW5zbGF0ZShjb25zdCBGbG9hdFNpemUmIHNpemUp
CkBAIC0xMjYsNiArMTI3LDYzIEBAIHZvaWQgUGF0aDo6Y2xlYXIoKQogICAgIG1fcGF0aCA9IENH
UGF0aENyZWF0ZU11dGFibGUoKTsKIH0KIAorYm9vbCBQYXRoOjppc0VtcHR5KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gQ0dQYXRoSXNFbXB0eShtX3BhdGgpOworIH0KKwordm9pZCBDR1BhdGhUb0NG
U3RyaW5nQXBwbGllckZ1bmN0aW9uKHZvaWQgKmluZm8sIGNvbnN0IENHUGF0aEVsZW1lbnQgKmVs
ZW1lbnQpCit7CisgICAgQ0ZNdXRhYmxlU3RyaW5nUmVmIHN0cmluZyA9IChDRk11dGFibGVTdHJp
bmdSZWYpaW5mbzsKKyAgICBDRlN0cmluZ1JlZiB0eXBlU3RyaW5nID0gQ0ZTVFIoIiIpOworICAg
IENHUG9pbnQgKnBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKKyAgICBzd2l0Y2goZWxlbWVudC0+
dHlwZSkgeworICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDoKKyAgICAgICAgQ0ZT
dHJpbmdBcHBlbmRGb3JtYXQoc3RyaW5nLCAwLCBDRlNUUigiTSUuMmYsJS4yZiIpLCBwb2ludHNb
MF0ueCwgcG9pbnRzWzBdLnkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVt
ZW50QWRkTGluZVRvUG9pbnQ6CisgICAgICAgIENGU3RyaW5nQXBwZW5kRm9ybWF0KHN0cmluZywg
MCwgQ0ZTVFIoIkwlLjJmLCUuMmYiKSwgcG9pbnRzWzBdLngsIHBvaW50c1swXS55KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBrQ0dQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRvUG9pbnQ6Cisg
ICAgICAgIENGU3RyaW5nQXBwZW5kRm9ybWF0KHN0cmluZywgMCwgQ0ZTVFIoIlElLjJmLCUuMmYs
JS4yZiwlLjJmIiksCisgICAgICAgICAgICAgICAgcG9pbnRzWzBdLngsIHBvaW50c1swXS55LCBw
b2ludHNbMV0ueCwgcG9pbnRzWzFdLnkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1Bh
dGhFbGVtZW50QWRkQ3VydmVUb1BvaW50OgorICAgICAgICBDRlN0cmluZ0FwcGVuZEZvcm1hdChz
dHJpbmcsIDAsIENGU1RSKCJDJS4yZiwlLjJmLCUuMmYsJS4yZiwlLjJmLCUuMmYiKSwKKyAgICAg
ICAgICAgICAgICBwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnksIHBvaW50c1sxXS54LCBwb2ludHNb
MV0ueSwKKyAgICAgICAgICAgICAgICBwb2ludHNbMl0ueCwgcG9pbnRzWzJdLnkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOgorICAgICAgICB0
eXBlU3RyaW5nID0gQ0ZTVFIoIlgiKTsgYnJlYWs7CisgICAgfQorfQorCitDRlN0cmluZ1JlZiBD
RlN0cmluZ0Zyb21DR1BhdGgoQ0dQYXRoUmVmIHBhdGgpCit7CisgICAgaWYgKCFwYXRoKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIENGTXV0YWJsZVN0cmluZ1JlZiBzdHJpbmcgPSBDRlN0cmlu
Z0NyZWF0ZU11dGFibGUoTlVMTCwgMCk7CisgICAgQ0dQYXRoQXBwbHkocGF0aCwgc3RyaW5nLCBD
R1BhdGhUb0NGU3RyaW5nQXBwbGllckZ1bmN0aW9uKTsKKworICAgIHJldHVybiBzdHJpbmc7Cit9
CisKKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBQYXRoIE1hbmFnZW1lbnQKKworRGVw
cmVjYXRlZFN0cmluZyBQYXRoOjpkZWJ1Z1N0cmluZygpIGNvbnN0Cit7CisgICAgRGVwcmVjYXRl
ZFN0cmluZyByZXN1bHQ7CisgICAgaWYgKCFpc0VtcHR5KCkpIHsKKyAgICAgICAgQ0ZTdHJpbmdS
ZWYgcGF0aFN0cmluZyA9IENGU3RyaW5nRnJvbUNHUGF0aChtX3BhdGgpOworICAgICAgICByZXN1
bHQgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tQ0ZTdHJpbmcocGF0aFN0cmluZyk7CisgICAgICAg
IENGUmVsZWFzZShwYXRoU3RyaW5nKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwog
fQogCiAjZW5kaWYgLy8gUExBVEZPUk0oQ0cpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10231</attachid>
            <date>2006-08-25 14:36:39 -0700</date>
            <delta_ts>2006-08-26 02:34:29 -0700</delta_ts>
            <desc>General KCanvasPath removal</desc>
            <filename>removal.diff</filename>
            <type>text/plain</type>
            <size>60136</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjA0MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTExIEBACisyMDA2LTA4LTI1ICBSb2IgQnVpcyAgPGJ1aXNAa2RlLm9yZz4KKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwOi8vYnVn
emlsbGEub3BlbmRhcndpbi5vcmcvc2hvd19idWcuY2dpP2lkPTEwNTU3CisgICAgICAgIEtDYW52
YXNQYXRoIHNob3VsZCBiZSByZXBsYWNlIGJ5IHBsYXRmb3JtL1BhdGgKKworICAgICAgICBSZWZh
Y3RvcmluZyBvdXQgdGhlIEtDYW52YXNQYXRoIGNsYXNzLgorCisgICAgICAgIFdBUk5JTkc6IE5P
IFRFU1QgQ0FTRVMgQURERUQgT1IgQ0hBTkdFRAorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6S0NhbnZhc0NyZWF0b3I6OmNyZWF0ZVJvdW5kZWRSZWN0YW5n
bGUpOgorICAgICAgICAoV2ViQ29yZTo6S0NhbnZhc0NyZWF0b3I6OmNyZWF0ZVJlY3RhbmdsZSk6
CisgICAgICAgIChXZWJDb3JlOjpLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlRWxsaXBzZSk6CisgICAg
ICAgIChXZWJDb3JlOjpLQ2FudmFzQ3JlYXRvcjo6Y3JlYXRlQ2lyY2xlKToKKyAgICAgICAgKFdl
YkNvcmU6OktDYW52YXNDcmVhdG9yOjpjcmVhdGVMaW5lKToKKyAgICAgICAgKiBrY2FudmFzL0tD
YW52YXNDcmVhdG9yLmg6CisgICAgICAgICoga2NhbnZhcy9LQ2FudmFzUGF0aC5jcHA6CisgICAg
ICAgICoga2NhbnZhcy9LQ2FudmFzUGF0aC5oOgorICAgICAgICAqIGtjYW52YXMvS0NhbnZhc1Jl
c291cmNlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFdl
YkNvcmU6OktDYW52YXNSZXNvdXJjZTo6Y2xpZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpLQ2Fu
dmFzUmVzb3VyY2U6OmludmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6S0NhbnZhc0NsaXBw
ZXI6OmFkZENsaXBEYXRhKToKKyAgICAgICAgKiBrY2FudmFzL0tDYW52YXNSZXNvdXJjZXMuaDoK
KyAgICAgICAgKFdlYkNvcmU6OktDQ2xpcERhdGE6OndpbmRSdWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OktDQ2xpcERhdGFMaXN0OjpLQ0NsaXBEYXRhTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpL
Q0NsaXBEYXRhTGlzdDo6YWRkUGF0aCk6CisgICAgICAgICoga2NhbnZhcy9LQ2FudmFzVHJlZURl
YnVnLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIGtjYW52
YXMvUmVuZGVyUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpmaWxsQ29u
dGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyUGF0aDo6cmVsYXRpdmVCQm94KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclBhdGg6OnNldFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyUGF0aDo6cGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXRoOjpwYWludCk6
CisgICAgICAgICoga2NhbnZhcy9SZW5kZXJQYXRoLmg6CisgICAgICAgICoga2NhbnZhcy9kZXZp
Y2UvS1JlbmRlcmluZ0RldmljZS5oOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJp
bmdGaWxsUGFpbnRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nRmlsbFBhaW50
ZXI6OmZpbGxSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdGaWxsUGFpbnRlcjo6
c2V0RmlsbFJ1bGUpOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFp
bnRlci5oOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0
ei5oOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0ei5t
bToKKyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNJdGVtUXVhcnR6OjpkcmF3TWFya2Vyc0lmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNJdGVtUXVhcnR6OjpzdHJva2VCQm94KToK
KyAgICAgICAgKFdlYkNvcmU6OktDYW52YXNJdGVtUXVhcnR6OjpzdHJva2VDb250YWlucyk6Cisg
ICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNQYXRoUXVhcnR6Lmg6CisgICAg
ICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNSZXNvdXJjZXNRdWFydHoubW06Cisg
ICAgICAgIChXZWJDb3JlOjpLQ2FudmFzQ2xpcHBlclF1YXJ0ejo6YXBwbHlDbGlwKToKKyAgICAg
ICAgKiBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oOgorICAg
ICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tOgor
ICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6OmFkZFBhdGgp
OgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6Y3JlYXRlSXRlbSk6
CisgICAgICAgICoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L1F1YXJ0elN1cHBvcnQuaDoKKyAgICAg
ICAgKiBrY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6U3VwcG9ydC5tbToKKyAgICAgICAgKFdl
YkNvcmU6OnNjcmF0Y2hDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0cm9rZUJvdW5kaW5n
Qm94KToKKyAgICAgICAgKFdlYkNvcmU6OnBhdGhDb250YWluc1BvaW50KToKKyAgICAgICAgKiBr
c3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHA6CisgICAgICAgICoga3N2ZzIvc3Zn
L1NWR0NpcmNsZUVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHQ2lyY2xlRWxlbWVudDo6dG9QYXRo
RGF0YSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaDoKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcDoKKyAgICAgICAgKFNWR0NsaXBQYXRo
RWxlbWVudDo6Y2FudmFzUmVzb3VyY2UpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdFbGxpcHNl
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNlRWxlbWVudDo6dG9QYXRo
RGF0YSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50Lmg6CisgICAgICAg
ICoga3N2ZzIvc3ZnL1NWR0dyYWRpZW50RWxlbWVudC5jcHA6CisgICAgICAgIChTVkdHcmFkaWVu
dEVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZUNoYW5nZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R0ltYWdlRWxlbWVudC5jcHA6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmNw
cDoKKyAgICAgICAgKFNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHTGluZUVsZW1lbnQuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHTWFza0VsZW1l
bnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6dG9QYXRoRGF0YSk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1BhdGhFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdHRlcm5FbGVtZW50Ojpub3RpZnlDbGll
bnRzVG9SZXBhaW50KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUG9seWdvbkVsZW1lbnQuY3Bw
OgorICAgICAgICAoU1ZHUG9seWdvbkVsZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdQb2x5Z29uRWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQb2x5
bGluZUVsZW1lbnQuY3BwOgorICAgICAgICAoU1ZHUG9seWxpbmVFbGVtZW50Ojp0b1BhdGhEYXRh
KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUG9seWxpbmVFbGVtZW50Lmg6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JlY3RF
bGVtZW50Ojp0b1BhdGhEYXRhKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQu
aDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdTdHlsZWRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcik6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1N0eWxlZEVs
ZW1lbnQ6OnRvUGF0aERhdGEpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVs
ZW1lbnQuY3BwOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHA6CisgICAg
ICAgICogcGxhdGZvcm0vUGF0aC5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKFdl
YkNvcmU6OlBhdGg6OnNldFdpbmRpbmdSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhdGg6Ondp
bmRpbmdSdWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jZy9QYXRoQ0cuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGF0aDo6Y29udGFpbnMpOgorICAgICAgICAoV2ViQ29yZTo6UGF0aDo6aXNFbXB0
eSk6CisgICAgICAgIChXZWJDb3JlOjpDR1BhdGhUb0NGU3RyaW5nQXBwbGllckZ1bmN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNGU3RyaW5nRnJvbUNHUGF0aCk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXRoOjpkZWJ1Z1N0cmluZyk6CisKIDIwMDYtMDgtMjUgIEJyYWR5IEVpZHNvbiAgPGJlaWRz
b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRpbSBIYXRjaGVyCkluZGV4OiBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTYwMzgp
CisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBj
b3B5KQpAQCAtOTY5LDggKzk2OSw2IEBACiAJCUE4OEFEM0I0MDk1MjQ4NkUwMDFERDE5NiAvKiBL
UmVuZGVyaW5nUGFpbnRTZXJ2ZXJRdWFydHoubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3NTA4OTcwMUY4MDBCQTUxMTQgLyogS1JlbmRlcmlu
Z1BhaW50U2VydmVyUXVhcnR6Lm1tICovOyB9OwogCQlBODhBRDNCNTA5NTI0ODZFMDAxREQxOTYg
LyogUXVhcnR6U3VwcG9ydC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThDMEZCNzYwODk3MDFGODAwQkE1MTE0IC8qIFF1YXJ0elN1cHBvcnQuaCAqLzsg
fTsKIAkJQTg4QUQzQjYwOTUyNDg2RTAwMUREMTk2IC8qIFF1YXJ0elN1cHBvcnQubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3NzA4OTcwMUY4
MDBCQTUxMTQgLyogUXVhcnR6U3VwcG9ydC5tbSAqLzsgfTsKLQkJQTg4QUQzQjcwOTUyNDg2RTAw
MUREMTk2IC8qIEtDYW52YXNQYXRoUXVhcnR6LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBBOEFCQzk5OTA5NDQ1RUMwMDAxMzk0NUYgLyogS0NhbnZhc1Bh
dGhRdWFydHouaCAqLzsgfTsKLQkJQTg4QUQzQjgwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52YXNQ
YXRoUXVhcnR6Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQThBQkM5OUEwOTQ0NUVDMDAwMTM5NDVGIC8qIEtDYW52YXNQYXRoUXVhcnR6Lm1tICovOyB9
OwogCQlBODhBRDNCOTA5NTI0ODZFMDAxREQxOTYgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjdBMDg5
NzAxRjgwMEJBNTExNCAvKiBSZW5kZXJTVkdDb250YWluZXIuY3BwICovOyB9OwogCQlBODhBRDNC
QTA5NTI0ODZFMDAxREQxOTYgLyogUmVuZGVyU1ZHQ29udGFpbmVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI3QjA4OTcwMUY4MDBCQTUxMTQg
LyogUmVuZGVyU1ZHQ29udGFpbmVyLmggKi87IH07CiAJCUE4OEFEM0JCMDk1MjQ4NkUwMDFERDE5
NiAvKiBLQ2FudmFzQ3JlYXRvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBBOEMwRkI3QzA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc0NyZWF0b3Iu
Y3BwICovOyB9OwpAQCAtOTgwLDggKzk3OCw2IEBACiAJCUE4OEFEM0MwMDk1MjQ4NkUwMDFERDE5
NiAvKiBLQ2FudmFzSW1hZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4QzBGQjgxMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzSW1hZ2UuaCAqLzsg
fTsKIAkJQTg4QUQzQzEwOTUyNDg2RTAwMUREMTk2IC8qIFJlbmRlclBhdGguY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCODIwODk3MDFGODAw
QkE1MTE0IC8qIFJlbmRlclBhdGguY3BwICovOyB9OwogCQlBODhBRDNDMjA5NTI0ODZFMDAxREQx
OTYgLyogUmVuZGVyUGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQThDMEZCODMwODk3MDFGODAwQkE1MTE0IC8qIFJlbmRlclBhdGguaCAqLzsgfTsK
LQkJQTg4QUQzQzUwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52YXNQYXRoLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEMwRkI4NjA4OTcwMUY4MDBCQTUx
MTQgLyogS0NhbnZhc1BhdGguaCAqLzsgfTsKLQkJQTg4QUQzQzYwOTUyNDg2RTAwMUREMTk2IC8q
IEtDYW52YXNQYXRoLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDQ3NThDNDQzMDhDNUYyMTcwMDlCQUYwNSAvKiBLQ2FudmFzUGF0aC5jcHAgKi87IH07
CiAJCUE4OEFEM0M3MDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzUmVzb3VyY2VMaXN0ZW5lci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQThDMEZCODkw
ODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNSZXNvdXJjZUxpc3RlbmVyLmggKi87IH07CiAJCUE4
OEFEM0M4MDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzUmVzb3VyY2VzLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjhBMDg5NzAxRjgwMEJB
NTExNCAvKiBLQ2FudmFzUmVzb3VyY2VzLmNwcCAqLzsgfTsKIAkJQTg4QUQzQzkwOTUyNDg2RTAw
MUREMTk2IC8qIEtDYW52YXNSZXNvdXJjZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGQjhCMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzUmVz
b3VyY2VzLmggKi87IH07CkBAIC0xODQyLDcgKzE4MzgsNiBAQAogCQk0NDhBMjlCRDBBNDZEOUNC
MDAzMDc1OUYgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTSFRNTE9wdGlvbnNDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTQ0OEEyOUJFMEE0NkQ5Q0IwMDMwNzU5RiAvKiBKU0hUTUxPcHRpb25z
Q29sbGVjdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNI
VE1MT3B0aW9uc0NvbGxlY3Rpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
NDhBRDI3QTBBNDgxMzc5MDAyM0QxNzkgLyogSlNIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNIVE1MT3B0aW9uc0Nv
bGxlY3Rpb25DdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0NzU4QzQ0
MzA4QzVGMjE3MDA5QkFGMDUgLyogS0NhbnZhc1BhdGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLQ2FudmFzUGF0aC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQk0RTE5
NTkxRjBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRmVhdHVyZU5hbWVzLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUxOTU5MjAwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlh
RmVhdHVyZU5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYUZl
YXR1cmVOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RTE5NTkyMzBBMzlE
QUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWVkaWFRdWVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC0yNjkyLDggKzI2ODcsNiBAQAogCQlBODkwREYxQzA5MzA5NzQ4MDA1MTNGODggLyogU1ZHU3R5
bGVkVHJhbnNmb3JtYWJsZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTVkdTdHlsZWRUcmFuc2Zvcm1hYmxlRWxlbWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9
OwogCQlBODkwREYxRDA5MzA5NzQ4MDA1MTNGODggLyogU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R1N0eWxlZExvY2F0YWJsZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lk
dGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4OTBERjFFMDkzMDk3NDgwMDUxM0Y4OCAvKiBT
VkdTdHlsZWRMb2NhdGFibGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHU3R5bGVkTG9jYXRhYmxlRWxlbWVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9Owot
CQlBOEFCQzk5OTA5NDQ1RUMwMDAxMzk0NUYgLyogS0NhbnZhc1BhdGhRdWFydHouaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzUGF0aFF1
YXJ0ei5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKLQkJQThBQkM5OUEwOTQ0NUVDMDAwMTM5NDVGIC8qIEtDYW52YXNQYXRoUXVhcnR6Lm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBLQ2FudmFzUGF0aFF1YXJ0ei5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGgg
PSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGNkVCMDg5NzAxRjEwMEJBNTExNCAvKiBLQ2Fu
dmFzUmVuZGVyaW5nU3R5bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBLQ2FudmFzUmVuZGVyaW5nU3R5bGUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQThDMEY2RUMw
ODk3MDFGMTAwQkE1MTE0IC8qIEtDYW52YXNSZW5kZXJpbmdTdHlsZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtDYW52YXNSZW5kZXJpbmdTdHls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsg
fTsKIAkJQThDMEY2RUYwODk3MDFGMTAwQkE1MTE0IC8qIEtTVkdUaW1lU2NoZWR1bGVyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0
aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS1NW
R1RpbWVTY2hlZHVsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7
IHVzZXNUYWJzID0gMDsgfTsKQEAgLTI5NzYsNyArMjk2OSw2IEBACiAJCUE4QzBGQjgxMDg5NzAx
RjgwMEJBNTExNCAvKiBLQ2FudmFzSW1hZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzSW1hZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCUE4QzBGQjgyMDg5NzAxRjgw
MEJBNTExNCAvKiBSZW5kZXJQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUmVuZGVyUGF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBOEMwRkI4MzA4OTcwMUY4
MDBCQTUxMTQgLyogUmVuZGVyUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclBhdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
dGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07Ci0JCUE4QzBGQjg2MDg5NzAxRjgwMEJBNTEx
NCAvKiBLQ2FudmFzUGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEtDYW52YXNQYXRoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldp
ZHRoID0gODsgdXNlc1RhYnMgPSAwOyB9OwogCQlBOEMwRkI4OTA4OTcwMUY4MDBCQTUxMTQgLyog
S0NhbnZhc1Jlc291cmNlTGlzdGVuZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBLQ2FudmFzUmVzb3VyY2VMaXN0ZW5lci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJQThDMEZCOEEw
ODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNSZXNvdXJjZXMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLQ2FudmFzUmVzb3VyY2VzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07
CiAJCUE4QzBGQjhCMDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzUmVzb3VyY2VzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gS0NhbnZhc1Jlc291
cmNlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0g
MDsgfTsKQEAgLTQ4MTgsOCArNDgxMCw2IEBACiAJCQkJQThDMEZCN0UwODk3MDFGODAwQkE1MTE0
IC8qIEtDYW52YXNGaWx0ZXJzLmNwcCAqLywKIAkJCQlBOEMwRkI3RjA4OTcwMUY4MDBCQTUxMTQg
LyogS0NhbnZhc0ZpbHRlcnMuaCAqLywKIAkJCQlBOEMwRkI4MTA4OTcwMUY4MDBCQTUxMTQgLyog
S0NhbnZhc0ltYWdlLmggKi8sCi0JCQkJNDc1OEM0NDMwOEM1RjIxNzAwOUJBRjA1IC8qIEtDYW52
YXNQYXRoLmNwcCAqLywKLQkJCQlBOEMwRkI4NjA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc1Bh
dGguaCAqLywKIAkJCQlBOEMwRkI4OTA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc1Jlc291cmNl
TGlzdGVuZXIuaCAqLywKIAkJCQlBOEMwRkI4QTA4OTcwMUY4MDBCQTUxMTQgLyogS0NhbnZhc1Jl
c291cmNlcy5jcHAgKi8sCiAJCQkJQThDMEZCOEIwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNS
ZXNvdXJjZXMuaCAqLywKQEAgLTQ4NjgsOCArNDg1OCw2IEBACiAJCQkJQThDMEZCNkMwODk3MDFG
ODAwQkE1MTE0IC8qIEtDYW52YXNJdGVtUXVhcnR6Lm1tICovLAogCQkJCUE4MTY1NUQyMDk2QkJF
QUMwMDYwMTA1OCAvKiBLQ2FudmFzTWFza2VyUXVhcnR6LmggKi8sCiAJCQkJQTgxNjU1RDMwOTZC
QkVBQzAwNjAxMDU4IC8qIEtDYW52YXNNYXNrZXJRdWFydHoubW0gKi8sCi0JCQkJQThBQkM5OTkw
OTQ0NUVDMDAwMTM5NDVGIC8qIEtDYW52YXNQYXRoUXVhcnR6LmggKi8sCi0JCQkJQThBQkM5OUEw
OTQ0NUVDMDAwMTM5NDVGIC8qIEtDYW52YXNQYXRoUXVhcnR6Lm1tICovLAogCQkJCUE4QzBGQjZE
MDg5NzAxRjgwMEJBNTExNCAvKiBLQ2FudmFzUmVzb3VyY2VzUXVhcnR6LmggKi8sCiAJCQkJQThD
MEZCNkUwODk3MDFGODAwQkE1MTE0IC8qIEtDYW52YXNSZXNvdXJjZXNRdWFydHoubW0gKi8sCiAJ
CQkJQThDMEZCNzEwODk3MDFGODAwQkE1MTE0IC8qIEtSZW5kZXJpbmdEZXZpY2VRdWFydHouaCAq
LywKQEAgLTU3MTgsNyArNTcwNiw2IEBACiAJCQkJQTg4QUQzQkUwOTUyNDg2RTAwMUREMTk2IC8q
IEtDYW52YXNGaWx0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDNDMDA5NTI0ODZFMDAx
REQxOTYgLyogS0NhbnZhc0ltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDNDMjA5NTI0
ODZFMDAxREQxOTYgLyogUmVuZGVyUGF0aC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJQTg4QUQzQzUw
OTUyNDg2RTAwMUREMTk2IC8qIEtDYW52YXNQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhB
RDNDNzA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc1Jlc291cmNlTGlzdGVuZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4OEFEM0M5MDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzUmVzb3VyY2Vz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBODhBRDNDQjA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZh
c1RyZWVEZWJ1Zy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjQxLDcgKzY2MjgsNiBAQAogCQkJCUE4
OEFEM0JCMDk1MjQ4NkUwMDFERDE5NiAvKiBLQ2FudmFzQ3JlYXRvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBODhBRDNCRDA5NTI0ODZFMDAxREQxOTYgLyogS0NhbnZhc0ZpbHRlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTg4QUQzQzEwOTUyNDg2RTAwMUREMTk2IC8qIFJlbmRlclBhdGgu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJQTg4QUQzQzYwOTUyNDg2RTAwMUREMTk2IC8qIEtDYW52
YXNQYXRoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEM0M4MDk1MjQ4NkUwMDFERDE5NiAv
KiBLQ2FudmFzUmVzb3VyY2VzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4OEFEM0NDMDk1MjQ4
NkUwMDFERDE5NiAvKiBLQ2FudmFzVHJlZURlYnVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE4
OEFENDAxMDk1MjQ4RjAwMDFERDE5NiAvKiBTVkdSZW5kZXJTdHlsZS5jcHAgaW4gU291cmNlcyAq
LywKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzQ3JlYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rY2FudmFzL0tDYW52YXNDcmVhdG9yLmNwcAkocmV2aXNpb24gMTYwMzgpCisr
KyBXZWJDb3JlL2tjYW52YXMvS0NhbnZhc0NyZWF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
OCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgiCiAjaW5jbHVkZSAi
UmVuZGVyU1ZHQ29udGFpbmVyLmgiCisjaW5jbHVkZSAiUGF0aC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQ5LDExICs1MCwxNCBAQCBLQ2FudmFzQ3JlYXRvciAqS0NhbnZhc0NyZWF0
b3I6OnNlbGYoKQogICAgIHJldHVybiBzX2NyZWF0b3I7CiB9CiAKLUtDYW52YXNQYXRoKiBLQ2Fu
dmFzQ3JlYXRvcjo6Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCByeCwgZmxvYXQgcnkpIGNvbnN0CitQYXRoIEtD
YW52YXNDcmVhdG9yOjpjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGNvbnN0IEZsb2F0UmVjdCYgYm94
LCBmbG9hdCByeCwgZmxvYXQgcnkpIGNvbnN0CiB7Ci0gICAgS0NhbnZhc1BhdGgqIHBhdGggPSBy
ZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUGF0aCgpOwotCi0gICAgaWYgKHdpZHRoIDw9IDAuMGYg
fHwgaGVpZ2h0IDw9IDAuMGYgfHwgIXBhdGgpCisgICAgUGF0aCBwYXRoOworICAgIGZsb2F0IHgg
PSBib3gueCgpOworICAgIGZsb2F0IHkgPSBib3gueSgpOworICAgIGZsb2F0IHdpZHRoID0gYm94
LndpZHRoKCk7CisgICAgZmxvYXQgaGVpZ2h0ID0gYm94LmhlaWdodCgpOworICAgIGlmICh3aWR0
aCA8PSAwLjBmIHx8IGhlaWdodCA8PSAwLjBmKQogICAgICAgICByZXR1cm4gcGF0aDsKIAogICAg
IGRvdWJsZSBucnggPSByeCwgbnJ5ID0gcnk7CkBAIC02Nyw1MiArNzEsNTggQEAgS0NhbnZhc1Bh
dGgqIEtDYW52YXNDcmVhdG9yOjpjcmVhdGVSb3VuZAogICAgIGlmIChucnkgPiBoZWlnaHQgLyAy
KQogICAgICAgICBucnkgPSBoZWlnaHQgLyAyOwogCi0gICAgcGF0aC0+bW92ZVRvKHggKyBucngs
IHkpOworICAgIHBhdGgubW92ZVRvKEZsb2F0UG9pbnQoeCArIG5yeCwgeSkpOwogCiAgICAgaWYg
KG5yeCA8IHdpZHRoIC8gMikKLSAgICAgICAgcGF0aC0+bGluZVRvKHggKyB3aWR0aCAtIHJ4LCB5
KTsKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGggLSByeCwgeSkp
OwogCi0gICAgcGF0aC0+Y3VydmVUbyh4ICsgd2lkdGggLSBucnggKiAoMSAtIDAuNTUyKSwgeSwg
eCArIHdpZHRoLCB5ICsgbnJ5ICogKDEgLSAwLjU1MiksIHggKyB3aWR0aCwgeSArIG5yeSk7Cisg
ICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gbnJ4ICogKDEg
LSAwLjU1MiksIHkpLCBGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIG5yeSAqICgxIC0gMC41NTIp
KSwgRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBucnkpKTsKIAogICAgIGlmIChucnkgPCBoZWln
aHQgLyAyKQotICAgICAgICBwYXRoLT5saW5lVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0gbnJ5
KTsKKyAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4ICsgd2lkdGgsIHkgKyBoZWln
aHQgLSBucnkpKTsKIAotICAgIHBhdGgtPmN1cnZlVG8oeCArIHdpZHRoLCB5ICsgaGVpZ2h0IC0g
bnJ5ICogKDEgLSAwLjU1MiksIHggKyB3aWR0aCAtIG5yeCAqICgxIC0gMC41NTIpLCB5ICsgaGVp
Z2h0LCB4ICsgd2lkdGggLSBucngsIHkgKyBoZWlnaHQpOworICAgIHBhdGguYWRkQmV6aWVyQ3Vy
dmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSArIGhlaWdodCAtIG5yeSAqICgxIC0gMC41NTIp
KSwgRmxvYXRQb2ludCh4ICsgd2lkdGggLSBucnggKiAoMSAtIDAuNTUyKSwgeSArIGhlaWdodCks
IEZsb2F0UG9pbnQoeCArIHdpZHRoIC0gbnJ4LCB5ICsgaGVpZ2h0KSk7CiAKICAgICBpZiAobnJ4
IDwgd2lkdGggLyAyKQotICAgICAgICBwYXRoLT5saW5lVG8oeCArIG5yeCwgeSArIGhlaWdodCk7
CisgICAgICAgIHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCArIG5yeCwgeSArIGhlaWdodCkp
OwogCi0gICAgcGF0aC0+Y3VydmVUbyh4ICsgbnJ4ICogKDEgLSAwLjU1MiksIHkgKyBoZWlnaHQs
IHgsIHkgKyBoZWlnaHQgLSBucnkgKiAoMSAtIDAuNTUyKSwgeCwgeSArIGhlaWdodCAtIG5yeSk7
CisgICAgcGF0aC5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCArIG5yeCAqICgxIC0gMC41
NTIpLCB5ICsgaGVpZ2h0KSwgRmxvYXRQb2ludCh4LCB5ICsgaGVpZ2h0IC0gbnJ5ICogKDEgLSAw
LjU1MikpLCBGbG9hdFBvaW50KHgsIHkgKyBoZWlnaHQgLSBucnkpKTsKIAogICAgIGlmIChucnkg
PCBoZWlnaHQgLyAyKQotICAgICAgICBwYXRoLT5saW5lVG8oeCwgeSArIG5yeSk7CisgICAgICAg
IHBhdGguYWRkTGluZVRvKEZsb2F0UG9pbnQoeCwgeSArIG5yeSkpOworCisgICAgcGF0aC5hZGRC
ZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoeCwgeSArIG5yeSAqICgxIC0gMC41NTIpKSwgRmxvYXRQ
b2ludCh4ICsgbnJ4ICogKDEgLSAwLjU1MiksIHkpLCBGbG9hdFBvaW50KHggKyBucngsIHkpKTsK
IAotICAgIHBhdGgtPmN1cnZlVG8oeCwgeSArIG5yeSAqICgxIC0gMC41NTIpLCB4ICsgbnJ4ICog
KDEgLSAwLjU1MiksIHksIHggKyBucngsIHkpOworICAgIHBhdGguY2xvc2VTdWJwYXRoKCk7CiAK
LSAgICBwYXRoLT5jbG9zZVN1YnBhdGgoKTsKICAgICByZXR1cm4gcGF0aDsKIH0KIAotS0NhbnZh
c1BhdGgqIEtDYW52YXNDcmVhdG9yOjpjcmVhdGVSZWN0YW5nbGUoZmxvYXQgeCwgZmxvYXQgeSwg
ZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkgY29uc3QKK1BhdGggS0NhbnZhc0NyZWF0b3I6OmNy
ZWF0ZVJlY3RhbmdsZShjb25zdCBGbG9hdFJlY3QmIGJveCkgY29uc3QKIHsKLSAgICBLQ2FudmFz
UGF0aCogcGF0aCA9IHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYXRoKCk7Ci0gICAgCi0gICAg
aWYgKHdpZHRoIDw9IDAuMGYgfHwgaGVpZ2h0IDw9IDAuMGYgfHwgIXBhdGgpCisgICAgUGF0aCBw
YXRoOworICAgIGZsb2F0IHggPSBib3gueCgpOworICAgIGZsb2F0IHkgPSBib3gueSgpOworICAg
IGZsb2F0IHdpZHRoID0gYm94LndpZHRoKCk7CisgICAgZmxvYXQgaGVpZ2h0ID0gYm94LmhlaWdo
dCgpOworICAgIGlmICh3aWR0aCA8IDAuMGYgfHwgaGVpZ2h0IDwgMC4wZikKICAgICAgICAgcmV0
dXJuIHBhdGg7CiAgICAgCi0gICAgcGF0aC0+bW92ZVRvKHgsIHkpOwotICAgIHBhdGgtPmxpbmVU
byh4ICsgd2lkdGgsIHkpOwotICAgIHBhdGgtPmxpbmVUbyh4ICsgd2lkdGgsIHkgKyBoZWlnaHQp
OwotICAgIHBhdGgtPmxpbmVUbyh4LCB5ICsgaGVpZ2h0KTsKLSAgICBwYXRoLT5jbG9zZVN1YnBh
dGgoKTsKKyAgICBwYXRoLm1vdmVUbyhGbG9hdFBvaW50KHgsIHkpKTsKKyAgICBwYXRoLmFkZExp
bmVUbyhGbG9hdFBvaW50KHggKyB3aWR0aCwgeSkpOworICAgIHBhdGguYWRkTGluZVRvKEZsb2F0
UG9pbnQoeCArIHdpZHRoLCB5ICsgaGVpZ2h0KSk7CisgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQ
b2ludCh4LCB5ICsgaGVpZ2h0KSk7CisgICAgcGF0aC5jbG9zZVN1YnBhdGgoKTsKKwogICAgIHJl
dHVybiBwYXRoOwogfQogCi1LQ2FudmFzUGF0aCogS0NhbnZhc0NyZWF0b3I6OmNyZWF0ZUVsbGlw
c2UoZmxvYXQgY3gsIGZsb2F0IGN5LCBmbG9hdCByeCwgZmxvYXQgcnkpIGNvbnN0CitQYXRoIEtD
YW52YXNDcmVhdG9yOjpjcmVhdGVFbGxpcHNlKGNvbnN0IEZsb2F0UG9pbnQmYywgZmxvYXQgcngs
IGZsb2F0IHJ5KSBjb25zdAogewotICAgIEtDYW52YXNQYXRoKiBwYXRoID0gcmVuZGVyaW5nRGV2
aWNlKCktPmNyZWF0ZVBhdGgoKTsKLQotICAgIGlmIChyeCA8PSAwLjBmIHx8IHJ5IDw9IDAuMGYg
fHwgIXBhdGgpCisgICAgZmxvYXQgY3ggPSBjLngoKTsKKyAgICBmbG9hdCBjeSA9IGMueSgpOwor
ICAgIFBhdGggcGF0aDsKKyAgICBpZiAocnggPD0gMC4wZiB8fCByeSA8PSAwLjBmKQogICAgICAg
ICByZXR1cm4gcGF0aDsKIAogICAgIC8vIEVsbGlwc2UgY3JlYXRpb24gLSBuaWNlICYgY2xlYW4g
YWdnMiBjb2RlCkBAIC0xMzQsMjkgKzE0NCwzMCBAQCBLQ2FudmFzUGF0aCogS0NhbnZhc0NyZWF0
b3I6OmNyZWF0ZUVsbGlwCiAKICAgICAgICAgc3RlcCsrOwogICAgICAgICBpZihzdGVwID09IDEp
Ci0gICAgICAgICAgICBwYXRoLT5tb3ZlVG8oeCwgeSk7CisgICAgICAgICAgICBwYXRoLm1vdmVU
byhGbG9hdFBvaW50KHgsIHkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcGF0aC0+bGlu
ZVRvKHgsIHkpOworICAgICAgICAgICAgcGF0aC5hZGRMaW5lVG8oRmxvYXRQb2ludCh4LCB5KSk7
CiAgICAgfQogCi0gICAgcGF0aC0+Y2xvc2VTdWJwYXRoKCk7CisgICAgcGF0aC5jbG9zZVN1YnBh
dGgoKTsKKwogICAgIHJldHVybiBwYXRoOwogfQogCi1LQ2FudmFzUGF0aCogS0NhbnZhc0NyZWF0
b3I6OmNyZWF0ZUNpcmNsZShmbG9hdCBjeCwgZmxvYXQgY3ksIGZsb2F0IHIpIGNvbnN0CitQYXRo
IEtDYW52YXNDcmVhdG9yOjpjcmVhdGVDaXJjbGUoY29uc3QgRmxvYXRQb2ludCYgYywgZmxvYXQg
cikgY29uc3QKIHsKLSAgICByZXR1cm4gY3JlYXRlRWxsaXBzZShjeCwgY3ksIHIsIHIpOworICAg
IHJldHVybiBjcmVhdGVFbGxpcHNlKGMsIHIsIHIpOwogfQogCi1LQ2FudmFzUGF0aCogS0NhbnZh
c0NyZWF0b3I6OmNyZWF0ZUxpbmUoZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQg
eTIpIGNvbnN0CitQYXRoIEtDYW52YXNDcmVhdG9yOjpjcmVhdGVMaW5lKGNvbnN0IEZsb2F0UG9p
bnQmIHN0YXJ0LCBjb25zdCBGbG9hdFBvaW50JiBlbmQpIGNvbnN0CiB7Ci0gICAgS0NhbnZhc1Bh
dGgqIHBhdGggPSByZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUGF0aCgpOwotICAgIAotICAgIGlm
ICgoeDEgPT0geDIgJiYgeTEgPT0geTIpIHx8ICFwYXRoKQorICAgIFBhdGggcGF0aDsKKyAgICBp
ZiAoc3RhcnQueCgpID09IGVuZC54KCkgJiYgc3RhcnQueSgpID09IGVuZC55KCkpCiAgICAgICAg
IHJldHVybiBwYXRoOwogCi0gICAgcGF0aC0+bW92ZVRvKHgxLCB5MSk7Ci0gICAgcGF0aC0+bGlu
ZVRvKHgyLCB5Mik7CisgICAgcGF0aC5tb3ZlVG8oc3RhcnQpOworICAgIHBhdGguYWRkTGluZVRv
KGVuZCk7CisKICAgICByZXR1cm4gcGF0aDsKIH0KIApJbmRleDogV2ViQ29yZS9rY2FudmFzL0tD
YW52YXNDcmVhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL0tDYW52YXNDcmVh
dG9yLmgJKHJldmlzaW9uIDE2MDM4KQorKysgV2ViQ29yZS9rY2FudmFzL0tDYW52YXNDcmVhdG9y
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEwICsyNCwxMiBAQAogI2RlZmluZSBLQ2FudmFzQ3Jl
YXRvcl9ICiAjaWZkZWYgU1ZHX1NVUFBPUlQKIAotI2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc1Bh
dGguaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBQYXRoOworY2xhc3MgRmxvYXRQ
b2ludDsKK2NsYXNzIEZsb2F0UmVjdDsKKwogY2xhc3MgS0NhbnZhc0NyZWF0b3IKIHsKIHB1Ymxp
YzoKQEAgLTM3LDExICszOSwxMSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIEtDYW52YXNDcmVhdG9y
ICpzZWxmKCk7CiAKICAgICAvLyBDYW52YXMgcGF0aCBjcmVhdGlvbgotICAgIEtDYW52YXNQYXRo
KiBjcmVhdGVSb3VuZGVkUmVjdGFuZ2xlKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0IHdpZHRoLCBm
bG9hdCBoZWlnaHQsIGZsb2F0IHJ4LCBmbG9hdCByeSkgY29uc3Q7Ci0gICAgS0NhbnZhc1BhdGgq
IGNyZWF0ZVJlY3RhbmdsZShmbG9hdCB4LCBmbG9hdCB5LCBmbG9hdCB3aWR0aCwgZmxvYXQgaGVp
Z2h0KSBjb25zdDsKLSAgICBLQ2FudmFzUGF0aCogY3JlYXRlRWxsaXBzZShmbG9hdCBjeCwgZmxv
YXQgY3ksIGZsb2F0IHJ4LCBmbG9hdCByeSkgY29uc3Q7Ci0gICAgS0NhbnZhc1BhdGgqIGNyZWF0
ZUNpcmNsZShmbG9hdCBjeCwgZmxvYXQgY3ksIGZsb2F0IHIpIGNvbnN0OwotICAgIEtDYW52YXNQ
YXRoKiBjcmVhdGVMaW5lKGZsb2F0IHgxLCBmbG9hdCB5MSwgZmxvYXQgeDIsIGZsb2F0IHkyKSBj
b25zdDsKKyAgICBQYXRoIGNyZWF0ZVJvdW5kZWRSZWN0YW5nbGUoY29uc3QgRmxvYXRSZWN0Jiwg
ZmxvYXQgcngsIGZsb2F0IHJ5KSBjb25zdDsKKyAgICBQYXRoIGNyZWF0ZVJlY3RhbmdsZShjb25z
dCBGbG9hdFJlY3QmKSBjb25zdDsKKyAgICBQYXRoIGNyZWF0ZUVsbGlwc2UoY29uc3QgRmxvYXRQ
b2ludCYsIGZsb2F0IHJ4LCBmbG9hdCByeSkgY29uc3Q7CisgICAgUGF0aCBjcmVhdGVDaXJjbGUo
Y29uc3QgRmxvYXRQb2ludCYsIGZsb2F0IHIpIGNvbnN0OworICAgIFBhdGggY3JlYXRlTGluZShj
b25zdCBGbG9hdFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwogCiBwcml2YXRlOgog
ICAgIHN0YXRpYyBLQ2FudmFzQ3JlYXRvciAqc19jcmVhdG9yOwpJbmRleDogV2ViQ29yZS9rY2Fu
dmFzL0tDYW52YXNQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvS0NhbnZh
c1BhdGguY3BwCShyZXZpc2lvbiAxNjAzOSkKKysrIFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzUGF0
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNSBLaW1tbyBLaW5udW5lbiA8a2ltbW8udC5raW5udW5lbkBub2tpYS5jb20+LiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpZmRlZiBTVkdfU1VQUE9SVAotCi0jaW5jbHVk
ZSAiVGV4dFN0cmVhbS5oIgotCi0jaW5jbHVkZSAiS0NhbnZhc1BhdGguaCIKLSNpbmNsdWRlICJL
Q2FudmFzVHJlZURlYnVnLmgiCi0jaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLS8vS0NXaW5kUnVsZQotVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChU
ZXh0U3RyZWFtICZ0cywgS0NXaW5kUnVsZSBydWxlKQotewotICAgIHN3aXRjaCAocnVsZSkgCi0g
ICAgewotICAgICAgICBjYXNlIFJVTEVfTk9OWkVSTzoKLSAgICAgICAgICAgIHRzIDw8ICJOT04t
WkVSTyI7IGJyZWFrOwotICAgICAgICBjYXNlIFJVTEVfRVZFTk9ERDoKLSAgICAgICAgICAgIHRz
IDw8ICJFVkVOLU9ERCI7IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLS8vS0ND
bGlwRGF0YQotVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtICZ0cywgY29uc3QgS0ND
bGlwRGF0YSAmZCkKLXsKLSAgICB0cyA8PCAiW3dpbmRpbmc9IiA8PCBkLndpbmRSdWxlKCkgPDwg
Il0iOwotICAgIGlmIChkLmJib3hVbml0cykKLSAgICAgICAgdHMgPDwgIiBbYm91bmRpbmcgYm94
IG1vZGU9IiA8PCBkLmJib3hVbml0cyAgPDwgIl0iOyAgICAKLSAgICB0cyA8PCAiIFtwYXRoPSIg
PDwgcmVuZGVyaW5nRGV2aWNlKCktPnN0cmluZ0ZvclBhdGgoZC5wYXRoLmdldCgpKSA8PCAiXSI7
Ci0gICAgcmV0dXJuIHRzOwotfQotCi19Ci0KLSNlbmRpZiAvLyBTVkdfU1VQUE9SVApJbmRleDog
V2ViQ29yZS9rY2FudmFzL0tDYW52YXNQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2Fu
dmFzL0tDYW52YXNQYXRoLmgJKHJldmlzaW9uIDE2MDM5KQorKysgV2ViQ29yZS9rY2FudmFzL0tD
YW52YXNQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gICAgQ29w
eXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuCi0gICAgQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1IE5pa29sYXMgWmltbWVybWFubiA8d2lsZGZveEBrZGUub3JnPgotICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgotCi0gICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0Ci0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0g
ICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAg
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWludCB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSAtIFN1aXRlIDMzMCwKLSAgICBCb3N0
b24sIE1BIDAyMTExLTEzMDcsIFVTQS4KLSovCi0KLSNpZm5kZWYgS0NhbnZhc1BhdGhfSAotI2Rl
ZmluZSBLQ2FudmFzUGF0aF9ICi0jaWZkZWYgU1ZHX1NVUFBPUlQKLQotI2luY2x1ZGUgIkRlcHJl
Y2F0ZWRWYWx1ZUxpc3QuaCIKLSNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgotI2luY2x1ZGUg
IlNoYXJlZC5oIgotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLWNsYXNzIEtSZW5kZXJpbmdTdHJva2VQYWludGVyOwotY2xhc3MgUmVuZGVyU3R5bGU7Ci1j
bGFzcyBUZXh0U3RyZWFtOwotCi1lbnVtIEtDV2luZFJ1bGUgewotICAgIFJVTEVfTk9OWkVSTyA9
IDAsCi0gICAgUlVMRV9FVkVOT0REID0gMQotfTsKLQotLy8gUGF0aCByZWxhdGVkIGRhdGEgc3Ry
dWN0dXJlcwotdHlwZWRlZiBlbnVtCi17Ci0gICAgQ01EX01PVkUgPSAwLAotICAgIENNRF9MSU5F
ID0gMSwKLSAgICBDTURfQ1VSVkUgPSAyLAotICAgIENNRF9DTE9TRV9TVUJQQVRIID0gMwotfSBL
Q1BhdGhDb21tYW5kOwotCi1jbGFzcyBLQ2FudmFzUGF0aCA6IHB1YmxpYyBTaGFyZWQ8S0NhbnZh
c1BhdGg+Ci17Ci1wdWJsaWM6Ci0gICAgdmlydHVhbCB+S0NhbnZhc1BhdGgoKSB7IH0KLSAgICAK
LSAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgdm9p
ZCBtb3ZlVG8oZmxvYXQgeCwgZmxvYXQgeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8o
ZmxvYXQgeCwgZmxvYXQgeSkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvKGZsb2F0IHgx
LCBmbG9hdCB5MSwgZmxvYXQgeDIsIGZsb2F0IHkyLCBmbG9hdCB4MywgZmxvYXQgeTMpID0gMDsK
LSAgICB2aXJ0dWFsIHZvaWQgY2xvc2VTdWJwYXRoKCkgPSAwOwotCi0gICAgdmlydHVhbCBGbG9h
dFJlY3QgYm91bmRpbmdCb3goKSA9IDA7Ci0gICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQm91
bmRpbmdCb3goY29uc3QgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXImKSA9IDA7Ci0gICAgdmlydHVh
bCBib29sIHN0cm9rZUNvbnRhaW5zUG9pbnQoY29uc3QgRmxvYXRQb2ludCYpID0gMDsKLSAgICB2
aXJ0dWFsIGJvb2wgY29udGFpbnNQb2ludChjb25zdCBGbG9hdFBvaW50JiwgS0NXaW5kUnVsZSkg
PSAwOwotfTsKLQotLy8gQ2xpcHBpbmcgcGF0aHMKLXN0cnVjdCBLQ0NsaXBEYXRhCi17Ci0gICAg
S0NXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PEtDV2luZFJ1
bGU+KG1fd2luZFJ1bGUpOyB9Ci0gICAgdW5zaWduZWQgbV93aW5kUnVsZSA6IDE7IC8vIEtDV2lu
ZFJ1bGUKLSAgICBib29sIGJib3hVbml0cyA6IDE7Ci0gICAgUmVmUHRyPEtDYW52YXNQYXRoPiBw
YXRoOwotfTsKLQotY2xhc3MgS0NDbGlwRGF0YUxpc3QgOiBwdWJsaWMgRGVwcmVjYXRlZFZhbHVl
TGlzdDxLQ0NsaXBEYXRhPgotewotcHVibGljOgotICAgIEtDQ2xpcERhdGFMaXN0KCkgeyB9Ci0K
LSAgICBpbmxpbmUgdm9pZCBhZGRQYXRoKEtDYW52YXNQYXRoICpwYXRoRGF0YSwgS0NXaW5kUnVs
ZSB3aW5kUnVsZSwgYm9vbCBiYm94VW5pdHMpCi0gICAgewotICAgICAgICBBU1NFUlQocGF0aERh
dGEpOwotICAgICAgICBLQ0NsaXBEYXRhIGNsaXBEYXRhOwotICAgICAgICBjbGlwRGF0YS5tX3dp
bmRSdWxlID0gd2luZFJ1bGU7Ci0gICAgICAgIGNsaXBEYXRhLmJib3hVbml0cyA9IGJib3hVbml0
czsKLSAgICAgICAgY2xpcERhdGEucGF0aCA9IHBhdGhEYXRhOwotICAgICAgICBhcHBlbmQoY2xp
cERhdGEpOwotICAgIH0KLX07Ci0KLVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbSAm
dHMsIEtDV2luZFJ1bGUgcnVsZSk7Ci1UZXh0U3RyZWFtICZvcGVyYXRvcjw8KFRleHRTdHJlYW0g
JnRzLCBjb25zdCBLQ0NsaXBEYXRhICZkKTsKLQotfQotCi0jZW5kaWYgLy8gU1ZHX1NVUFBPUlQK
LSNlbmRpZgotCi0vLyB2aW06dHM9NDpub2V0CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvS0NhbnZh
c1Jlc291cmNlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL0tDYW52YXNSZXNv
dXJjZXMuY3BwCShyZXZpc2lvbiAxNjAzOCkKKysrIFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzUmVz
b3VyY2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMjkgQEAgVGV4dFN0cmVhbSAm
b3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgYwogICAgIHJldHVybiByLmV4dGVybmFsUmVwcmVz
ZW50YXRpb24odHMpOyAKIH0KIAorLy9XaW5kUnVsZQorVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChU
ZXh0U3RyZWFtICZ0cywgV2luZFJ1bGUgcnVsZSkKK3sKKyAgICBzd2l0Y2ggKHJ1bGUpIAorICAg
IHsKKyAgICAgICAgY2FzZSBSVUxFX05PTlpFUk86CisgICAgICAgICAgICB0cyA8PCAiTk9OLVpF
Uk8iOyBicmVhazsKKyAgICAgICAgY2FzZSBSVUxFX0VWRU5PREQ6CisgICAgICAgICAgICB0cyA8
PCAiRVZFTi1PREQiOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCisvL0tDQ2xp
cERhdGEKK1RleHRTdHJlYW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbSAmdHMsIGNvbnN0IEtDQ2xp
cERhdGEgJmQpCit7CisgICAgdHMgPDwgIlt3aW5kaW5nPSIgPDwgZC53aW5kUnVsZSgpIDw8ICJd
IjsKKyAgICBpZiAoZC5iYm94VW5pdHMpCisgICAgICAgIHRzIDw8ICIgW2JvdW5kaW5nIGJveCBt
b2RlPSIgPDwgZC5iYm94VW5pdHMgIDw8ICJdIjsgICAgCisgICAgdHMgPDwgIiBbcGF0aD0iIDw8
IGQucGF0aC5kZWJ1Z1N0cmluZygpIDw8ICJdIjsKKyAgICByZXR1cm4gdHM7Cit9CisKIC8vIEtD
YW52YXNSZXNvdXJjZQogS0NhbnZhc1Jlc291cmNlOjpLQ2FudmFzUmVzb3VyY2UoKQogewpAQCAt
NTksMTUgKzgyLDE1IEBAIHZvaWQgS0NhbnZhc1Jlc291cmNlOjphZGRDbGllbnQoY29uc3QgUmUK
ICAgICBtX2NsaWVudHMuYXBwZW5kKGl0ZW0pOwogfQogCi1jb25zdCBLQ2FudmFzSXRlbUxpc3Qg
JktDYW52YXNSZXNvdXJjZTo6Y2xpZW50cygpIGNvbnN0Citjb25zdCBSZW5kZXJQYXRoTGlzdCAm
S0NhbnZhc1Jlc291cmNlOjpjbGllbnRzKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jbGllbnRz
OwogfQogCiB2b2lkIEtDYW52YXNSZXNvdXJjZTo6aW52YWxpZGF0ZSgpCiB7Ci0gICAgS0NhbnZh
c0l0ZW1MaXN0OjpDb25zdEl0ZXJhdG9yIGl0ID0gbV9jbGllbnRzLmJlZ2luKCk7Ci0gICAgS0Nh
bnZhc0l0ZW1MaXN0OjpDb25zdEl0ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsKKyAgICBS
ZW5kZXJQYXRoTGlzdDo6Q29uc3RJdGVyYXRvciBpdCA9IG1fY2xpZW50cy5iZWdpbigpOworICAg
IFJlbmRlclBhdGhMaXN0OjpDb25zdEl0ZXJhdG9yIGVuZCA9IG1fY2xpZW50cy5lbmQoKTsKIAog
ICAgIGZvcig7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJQYXRo
ICo+KCppdCktPnJlcGFpbnQoKTsKQEAgLTEwMiw3ICsxMjUsNyBAQCB2b2lkIEtDYW52YXNDbGlw
cGVyOjpyZXNldENsaXBEYXRhKCkKICAgICBtX2NsaXBEYXRhLmNsZWFyKCk7CiB9CiAKLXZvaWQg
S0NhbnZhc0NsaXBwZXI6OmFkZENsaXBEYXRhKEtDYW52YXNQYXRoKiBwYXRoLCBLQ1dpbmRSdWxl
IHJ1bGUsIGJvb2wgYmJveFVuaXRzKQordm9pZCBLQ2FudmFzQ2xpcHBlcjo6YWRkQ2xpcERhdGEo
Y29uc3QgUGF0aCYgcGF0aCwgV2luZFJ1bGUgcnVsZSwgYm9vbCBiYm94VW5pdHMpCiB7CiAgICAg
bV9jbGlwRGF0YS5hZGRQYXRoKHBhdGgsIHJ1bGUsIGJib3hVbml0cyk7CiB9CkluZGV4OiBXZWJD
b3JlL2tjYW52YXMvS0NhbnZhc1Jlc291cmNlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2Nh
bnZhcy9LQ2FudmFzUmVzb3VyY2VzLmgJKHJldmlzaW9uIDE2MDM4KQorKysgV2ViQ29yZS9rY2Fu
dmFzL0tDYW52YXNSZXNvdXJjZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTIgKzI0LDE1IEBA
CiAjZGVmaW5lIEtDYW52YXNSZXNvdXJjZXNfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKLSNpbmNs
dWRlIDxrY2FudmFzL1JlbmRlclBhdGguaD4KLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNQYXRo
Lmg+CisjaW5jbHVkZSAiRGVwcmVjYXRlZFZhbHVlTGlzdC5oIgorI2luY2x1ZGUgIlBhdGguaCIK
KyNpbmNsdWRlICJSZW5kZXJQYXRoLmgiCiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzUmVzb3Vy
Y2VMaXN0ZW5lci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK3R5cGVkZWYgRGVwcmVjYXRl
ZFZhbHVlTGlzdDxjb25zdCBSZW5kZXJQYXRoICo+IFJlbmRlclBhdGhMaXN0OworCiBjbGFzcyBU
ZXh0U3RyZWFtOwogCiAvLyBFbnVtZXJhdGlvbnMKQEAgLTU0LDcgKzU3LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgdm9pZCBpbnZhbGlkYXRlKCk7CiAgICAgdm9pZCBhZGRDbGllbnQoY29uc3Qg
UmVuZGVyUGF0aCAqaXRlbSk7CiAKLSAgICBjb25zdCBLQ2FudmFzSXRlbUxpc3QgJmNsaWVudHMo
KSBjb25zdDsKKyAgICBjb25zdCBSZW5kZXJQYXRoTGlzdCAmY2xpZW50cygpIGNvbnN0OwogICAg
IAogICAgIERlcHJlY2F0ZWRTdHJpbmcgaWRJblJlZ2lzdHJ5KCkgY29uc3Q7CiAgICAgdm9pZCBz
ZXRJZEluUmVnaXN0cnkoY29uc3QgRGVwcmVjYXRlZFN0cmluZyYgbmV3SWQpOwpAQCAtNjcsMTAg
KzcwLDM0IEBAIHB1YmxpYzoKICAgICAKICAgICB2aXJ0dWFsIFRleHRTdHJlYW0mIGV4dGVybmFs
UmVwcmVzZW50YXRpb24oVGV4dFN0cmVhbSAmKSBjb25zdDsgCiBwcml2YXRlOgotICAgIEtDYW52
YXNJdGVtTGlzdCBtX2NsaWVudHM7CisgICAgUmVuZGVyUGF0aExpc3QgbV9jbGllbnRzOwogICAg
IERlcHJlY2F0ZWRTdHJpbmcgcmVnaXN0cnlJZDsKIH07CiAKKy8vIENsaXBwaW5nIHBhdGhzCitz
dHJ1Y3QgS0NDbGlwRGF0YQoreworICAgIFdpbmRSdWxlIHdpbmRSdWxlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8V2luZFJ1bGU+KG1fd2luZFJ1bGUpOyB9CisgICAgdW5zaWduZWQgbV93
aW5kUnVsZSA6IDE7IC8vIFdpbmRSdWxlCisgICAgYm9vbCBiYm94VW5pdHMgOiAxOworICAgIFBh
dGggcGF0aDsKK307CisKK2NsYXNzIEtDQ2xpcERhdGFMaXN0IDogcHVibGljIERlcHJlY2F0ZWRW
YWx1ZUxpc3Q8S0NDbGlwRGF0YT4KK3sKK3B1YmxpYzoKKyAgICBLQ0NsaXBEYXRhTGlzdCgpIHsg
fQorCisgICAgaW5saW5lIHZvaWQgYWRkUGF0aChjb25zdCBQYXRoJiBwYXRoRGF0YSwgV2luZFJ1
bGUgd2luZFJ1bGUsIGJvb2wgYmJveFVuaXRzKQorICAgIHsKKyAgICAgICAgS0NDbGlwRGF0YSBj
bGlwRGF0YTsKKyAgICAgICAgY2xpcERhdGEuYmJveFVuaXRzID0gYmJveFVuaXRzOworICAgICAg
ICBjbGlwRGF0YS5tX3dpbmRSdWxlID0gd2luZFJ1bGU7CisgICAgICAgIGNsaXBEYXRhLnBhdGgg
PSBwYXRoRGF0YTsKKyAgICAgICAgYXBwZW5kKGNsaXBEYXRhKTsKKyAgICB9Cit9OworCiBjbGFz
cyBLQ2FudmFzQ2xpcHBlciA6IHB1YmxpYyBLQ2FudmFzUmVzb3VyY2UKIHsKIHB1YmxpYzoKQEAg
LTgwLDcgKzEwNyw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNDbGlwcGVyKCkgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgdm9pZCByZXNldENsaXBEYXRhKCk7Ci0gICAgdm9p
ZCBhZGRDbGlwRGF0YShLQ2FudmFzUGF0aCAqcGF0aCwgS0NXaW5kUnVsZSBydWxlLCBib29sIGJi
b3hVbml0cyk7CisgICAgdm9pZCBhZGRDbGlwRGF0YShjb25zdCBQYXRoJiBwYXRoLCBXaW5kUnVs
ZSBydWxlLCBib29sIGJib3hVbml0cyk7CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIGFwcGx5Q2xp
cChjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KSBjb25zdCA9IDA7CiAKQEAgLTE0Niw2ICsx
NzMsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgbV91c2VTdHJva2VXaWR0aDsKIH07CiAKKworCiBL
Q2FudmFzUmVzb3VyY2UgKmdldFJlc291cmNlQnlJZChEb2N1bWVudCAqZG9jdW1lbnQsIGNvbnN0
IEF0b21pY1N0cmluZyAmaWQpOwogS0NhbnZhc01hcmtlciAqZ2V0TWFya2VyQnlJZChEb2N1bWVu
dCAqZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyAmaWQpOwogS0NhbnZhc0NsaXBwZXIgKmdl
dENsaXBwZXJCeUlkKERvY3VtZW50ICpkb2N1bWVudCwgY29uc3QgQXRvbWljU3RyaW5nICZpZCk7
CkBAIC0xNTMsNiArMTgyLDggQEAgS0NhbnZhc01hc2tlciAqZ2V0TWFza2VyQnlJZChEb2N1bWVu
dCAqZAogS1JlbmRlcmluZ1BhaW50U2VydmVyICpnZXRQYWludFNlcnZlckJ5SWQoRG9jdW1lbnQg
KmRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpbmcgJmlkKTsKIAogVGV4dFN0cmVhbSAmb3BlcmF0
b3I8PChUZXh0U3RyZWFtICZ0cywgY29uc3QgS0NhbnZhc1Jlc291cmNlICZyKTsKK1RleHRTdHJl
YW0gJm9wZXJhdG9yPDwoVGV4dFN0cmVhbSAmdHMsIFdpbmRSdWxlIHJ1bGUpOworVGV4dFN0cmVh
bSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtICZ0cywgY29uc3QgS0NDbGlwRGF0YSAmZCk7CiAKIH0K
IApJbmRleDogV2ViQ29yZS9rY2FudmFzL0tDYW52YXNUcmVlRGVidWcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUva2NhbnZhcy9LQ2FudmFzVHJlZURlYnVnLmNwcAkocmV2aXNpb24gMTYwMzgp
CisrKyBXZWJDb3JlL2tjYW52YXMvS0NhbnZhc1RyZWVEZWJ1Zy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5MSw3ICsyOTEsNyBAQCBzdGF0aWMgVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtCiAgICAgCiAgICAgd3JpdGVTdHlsZSh0cywgbyk7CiAgICAgCi0gICAgdHMgPDwgIiBbZGF0
YT1cIiIgPDwgcmVuZGVyaW5nRGV2aWNlKCktPnN0cmluZ0ZvclBhdGgoby5wYXRoKCkpIDw8ICJc
Il0iOworICAgIHRzIDw8ICIgW2RhdGE9XCIiIDw8IG8ucGF0aCgpLmRlYnVnU3RyaW5nKCkgPDwg
IlwiXSI7CiAgICAgCiAgICAgcmV0dXJuIHRzOwogfQpJbmRleDogV2ViQ29yZS9rY2FudmFzL1Jl
bmRlclBhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9SZW5kZXJQYXRoLmNw
cAkocmV2aXNpb24gMTYwMzgpCisrKyBXZWJDb3JlL2tjYW52YXMvUmVuZGVyUGF0aC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBSZW5kZXJQYXRoOjpQcml2YXRlIHsKIHB1YmxpYzoKLSAgICBSZWZQdHI8S0NhbnZhc1BhdGg+
IHBhdGg7CisgICAgUGF0aCBwYXRoOwogCiAgICAgRmxvYXRSZWN0IGZpbGxCQm94OwogICAgIEZs
b2F0UmVjdCBzdHJva2VCYm94OwpAQCAtODAsNDAgKzgwLDE5IEBAIEZsb2F0UG9pbnQgUmVuZGVy
UGF0aDo6bWFwQWJzb2x1dGVQb2ludFQKIAogYm9vbCBSZW5kZXJQYXRoOjpmaWxsQ29udGFpbnMo
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7Ci0gICAgaWYgKCFkLT5wYXRoKQorICAg
IGlmIChkLT5wYXRoLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KCFLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludFNlcnZlcihzdHlsZSgpLCB0aGlzKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIHBhdGgoKS0+Y29udGFpbnNQb2ludCht
YXBBYnNvbHV0ZVBvaW50VG9Mb2NhbChwb2ludCksCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBLU1ZHUGFpbnRlckZhY3Rvcnk6OmZpbGxQYWludGVyKHN0eWxlKCksIHRoaXMpLmZp
bGxSdWxlKCkpOwotfQotCi1ib29sIFJlbmRlclBhdGg6OnN0cm9rZUNvbnRhaW5zKGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50KSBjb25zdAotewotICAgIGlmICghZC0+cGF0aCkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCFLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50U2Vy
dmVyKHN0eWxlKCksIHRoaXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4g
cGF0aCgpLT5zdHJva2VDb250YWluc1BvaW50KG1hcEFic29sdXRlUG9pbnRUb0xvY2FsKHBvaW50
KSk7Ci19Ci0KLUZsb2F0UmVjdCBSZW5kZXJQYXRoOjpzdHJva2VCQm94KCkgY29uc3QKLXsKLSAg
ICBpZiAoS1NWR1BhaW50ZXJGYWN0b3J5Ojppc1N0cm9rZWQoc3R5bGUoKSkpIHsKLSAgICAgICAg
S1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIgc3Ryb2tlUGFpbnRlciA9IEtTVkdQYWludGVyRmFjdG9y
eTo6c3Ryb2tlUGFpbnRlcihzdHlsZSgpLCB0aGlzKTsKLSAgICAgICAgcmV0dXJuIHBhdGgoKS0+
c3Ryb2tlQm91bmRpbmdCb3goc3Ryb2tlUGFpbnRlcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBh
dGgoKS0+Ym91bmRpbmdCb3goKTsKKyAgICByZXR1cm4gcGF0aCgpLmNvbnRhaW5zKG1hcEFic29s
dXRlUG9pbnRUb0xvY2FsKHBvaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEtTVkdQ
YWludGVyRmFjdG9yeTo6ZmlsbFBhaW50ZXIoc3R5bGUoKSwgdGhpcykuZmlsbFJ1bGUoKSk7CiB9
CiAKIEZsb2F0UmVjdCBSZW5kZXJQYXRoOjpyZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ryb2tl
KSBjb25zdAogewotICAgIGlmICghZC0+cGF0aCkKKyAgICBpZiAoZC0+cGF0aC5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKIAogICAgIGlmIChpbmNsdWRlU3Ryb2tlKSB7
CkBAIC0xMjMsMjAgKzEwMiwyMCBAQCBGbG9hdFJlY3QgUmVuZGVyUGF0aDo6cmVsYXRpdmVCQm94
KGJvb2wgCiAgICAgfQogCiAgICAgaWYgKGQtPmZpbGxCQm94LmlzRW1wdHkoKSkKLSAgICAgICAg
ZC0+ZmlsbEJCb3ggPSBwYXRoKCktPmJvdW5kaW5nQm94KCk7CisgICAgICAgIGQtPmZpbGxCQm94
ID0gcGF0aCgpLmJvdW5kaW5nUmVjdCgpOwogICAgIHJldHVybiBkLT5maWxsQkJveDsKIH0KIAot
dm9pZCBSZW5kZXJQYXRoOjpzZXRQYXRoKEtDYW52YXNQYXRoKiBuZXdQYXRoKQordm9pZCBSZW5k
ZXJQYXRoOjpzZXRQYXRoKGNvbnN0IFBhdGgmIG5ld1BhdGgpCiB7CiAgICAgZC0+cGF0aCA9IG5l
d1BhdGg7CiAgICAgZC0+c3Ryb2tlQmJveCA9IEZsb2F0UmVjdCgpOwogICAgIGQtPmZpbGxCQm94
ID0gRmxvYXRSZWN0KCk7CiB9CiAKLUtDYW52YXNQYXRoKiBSZW5kZXJQYXRoOjpwYXRoKCkgY29u
c3QKK2NvbnN0IFBhdGgmIFJlbmRlclBhdGg6OnBhdGgoKSBjb25zdAogewotICAgIHJldHVybiBk
LT5wYXRoLmdldCgpOworICAgIHJldHVybiBkLT5wYXRoOwogfQogCiB2b2lkIFJlbmRlclBhdGg6
OmxheW91dCgpCkBAIC0xOTgsNyArMTc3LDcgQEAgdm9pZCBSZW5kZXJQYXRoOjpwYWludChQYWlu
dEluZm8gJnBhaW50SQogICAgIC8vQVNTRVJUKHBhcmVudFggPT0gMCk7CiAgICAgLy9BU1NFUlQo
cGFyZW50WSA9PSAwKTsKIAotICAgIGlmIChwYWludEluZm8ucC0+cGFpbnRpbmdEaXNhYmxlZCgp
IHx8IChwYWludEluZm8ucGhhc2UgIT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHx8IHN0eWxlKCkt
PnZpc2liaWxpdHkoKSA9PSBISURERU4gfHwgIXBhdGgoKSkKKyAgICBpZiAocGFpbnRJbmZvLnAt
PnBhaW50aW5nRGlzYWJsZWQoKSB8fCAocGFpbnRJbmZvLnBoYXNlICE9IFBhaW50UGhhc2VGb3Jl
Z3JvdW5kKSB8fCBzdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gSElEREVOIHx8IHBhdGgoKS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBLUmVuZGVyaW5nRGV2aWNlKiBkZXZp
Y2UgPSByZW5kZXJpbmdEZXZpY2UoKTsKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9SZW5kZXJQYXRo
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL1JlbmRlclBhdGguaAkocmV2aXNpb24g
MTYwMzgpCisrKyBXZWJDb3JlL2tjYW52YXMvUmVuZGVyUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZsb2F0UG9pbnQ7CiBj
bGFzcyBTVkdTdHlsZWRFbGVtZW50OwogCi1jbGFzcyBLQ2FudmFzUGF0aDsKK2NsYXNzIFBhdGg7
CiBjbGFzcyBSZW5kZXJTVkdDb250YWluZXI7CiAKIGNsYXNzIFJlbmRlclBhdGggOiBwdWJsaWMg
UmVuZGVyT2JqZWN0CkBAIC00NywxMyArNDcsMTMgQEAgcHVibGljOgogCiAgICAgLy8gSGl0LWRl
dGVjdGlvbiBzZXBlcmF0ZWQgZm9yIHRoZSBmaWxsIGFuZCB0aGUgc3Ryb2tlCiAgICAgdmlydHVh
bCBib29sIGZpbGxDb250YWlucyhjb25zdCBGbG9hdFBvaW50ICZwKSBjb25zdDsKLSAgICB2aXJ0
dWFsIGJvb2wgc3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCAmcCkgY29uc3Q7CisgICAg
dmlydHVhbCBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQgJnApIGNvbnN0ID0g
MDsKIAogICAgIC8vIFJldHVybnMgYW4gdW5zY2FsZWQgYm91bmRpbmcgYm94IChub3QgZXZlbiBp
bmNsdWRpbmcgbG9jYWxUcmFuc2Zvcm0oKSkgZm9yIHRoaXMgdmVjdG9yIHBhdGgKICAgICB2aXJ0
dWFsIEZsb2F0UmVjdCByZWxhdGl2ZUJCb3goYm9vbCBpbmNsdWRlU3Ryb2tlID0gdHJ1ZSkgY29u
c3Q7CiAKLSAgICB2b2lkIHNldFBhdGgoS0NhbnZhc1BhdGgqIG5ld1BhdGgpOwotICAgIEtDYW52
YXNQYXRoKiBwYXRoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRQYXRoKGNvbnN0IFBhdGgmIG5ld1Bh
dGgpOworICAgIGNvbnN0IFBhdGgmIHBhdGgoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBp
c1JlbmRlclBhdGgoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVhbCBjb25zdCBj
aGFyICpyZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4gIktDYW52YXNJdGVtIjsgfQpAQCAtNzMs
MTkgKzczLDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoTm9kZUlu
Zm8mLCBpbnQgeCwgaW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAogcHJv
dGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBkcmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEtDYW52YXNQYXRoKikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkcmF3TWFya2Vyc0lmTmVlZGVkKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEZsb2F0UmVjdCYsIGNvbnN0IFBhdGgmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBGbG9h
dFJlY3Qgc3Ryb2tlQkJveCgpIGNvbnN0ID0gMDsKIAogcHJpdmF0ZToKLSAgICBGbG9hdFJlY3Qg
c3Ryb2tlQkJveCgpIGNvbnN0OwogICAgIEZsb2F0UG9pbnQgbWFwQWJzb2x1dGVQb2ludFRvTG9j
YWwoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0OwogCiAgICAgY2xhc3MgUHJpdmF0ZTsK
ICAgICBQcml2YXRlICpkOwogfTsKIAotLy8gSGVscGVyIGRhdGEgc3RydWN0dXJlCi10eXBlZGVm
IERlcHJlY2F0ZWRWYWx1ZUxpc3Q8Y29uc3QgUmVuZGVyUGF0aCAqPiBLQ2FudmFzSXRlbUxpc3Q7
Ci0KIH0KIAogI2VuZGlmIC8vIFNWR19TVVBQT1JUCkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2
aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2
aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAkocmV2aXNpb24gMTYwMzgpCisrKyBXZWJDb3JlL2tjYW52
YXMvZGV2aWNlL0tSZW5kZXJpbmdEZXZpY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0gY3RtKCkgY29uc3QgPSAw
OwogICAgICAgICAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXRoKCkgPSAwOwotICAgIHZpcnR1
YWwgdm9pZCBhZGRQYXRoKGNvbnN0IEtDYW52YXNQYXRoKikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBhZGRQYXRoKGNvbnN0IFBhdGgmKSA9IDA7CiAKICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4
dCogY3JlYXRlR3JhcGhpY3NDb250ZXh0KCkgPSAwOwogfTsKQEAgLTY0LDE2ICs2NCwxMyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHB1c2hDb250ZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250
ZXh0ICpjb250ZXh0KTsKICAgICAKICAgICB2aXJ0dWFsIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
ICpjb250ZXh0Rm9ySW1hZ2UoS0NhbnZhc0ltYWdlICppbWFnZSkgY29uc3QgPSAwOwotICAgIAot
ICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyBzdHJpbmdGb3JQYXRoKGNvbnN0IEtDYW52YXNQ
YXRoKiBwYXRoKSA9IDA7CiAKICAgICAvLyBDcmVhdGlvbiB0b29scwogICAgIHZpcnR1YWwgS0Nh
bnZhc1Jlc291cmNlICpjcmVhdGVSZXNvdXJjZShjb25zdCBLQ1Jlc291cmNlVHlwZSAmdHlwZSkg
Y29uc3QgPSAwOwogICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRlckVmZmVjdCAqY3JlYXRlRmlsdGVy
RWZmZWN0KGNvbnN0IEtDRmlsdGVyRWZmZWN0VHlwZSAmdHlwZSkgY29uc3QgPSAwOwogICAgIHZp
cnR1YWwgS1JlbmRlcmluZ1BhaW50U2VydmVyICpjcmVhdGVQYWludFNlcnZlcihjb25zdCBLQ1Bh
aW50U2VydmVyVHlwZSAmdHlwZSkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBSZW5kZXJQYXRo
ICpjcmVhdGVJdGVtKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0eWxlLCBTVkdT
dHlsZWRFbGVtZW50ICpub2RlLCBLQ2FudmFzUGF0aCogcGF0aCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgS0NhbnZhc1BhdGgqIGNyZWF0ZVBhdGgoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBS
ZW5kZXJQYXRoICpjcmVhdGVJdGVtKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUgKnN0
eWxlLCBTVkdTdHlsZWRFbGVtZW50ICpub2RlLCBjb25zdCBQYXRoJiBwYXRoKSBjb25zdCA9IDA7
CiAKIHByaXZhdGU6CiAgICAgVmVjdG9yPEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0Kj4gbV9jb250
ZXh0U3RhY2s7CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxsUGFp
bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9LUmVuZGVyaW5n
RmlsbFBhaW50ZXIuY3BwCShyZXZpc2lvbiAxNjAzOCkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZp
Y2UvS1JlbmRlcmluZ0ZpbGxQYWludGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNyArMzgs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgZmxvYXQgb3BhY2l0eTsKLSAgICBLQ1dpbmRSdWxl
IGZpbGxSdWxlOworICAgIFdpbmRSdWxlIGZpbGxSdWxlOwogfTsKIAogS1JlbmRlcmluZ0ZpbGxQ
YWludGVyOjpLUmVuZGVyaW5nRmlsbFBhaW50ZXIoKSA6IGQobmV3IFByaXZhdGUoKSkKQEAgLTUw
LDEyICs1MCwxMiBAQCBLUmVuZGVyaW5nRmlsbFBhaW50ZXI6On5LUmVuZGVyaW5nRmlsbFBhCiAg
ICAgZGVsZXRlIGQ7CiB9CiAKLUtDV2luZFJ1bGUgS1JlbmRlcmluZ0ZpbGxQYWludGVyOjpmaWxs
UnVsZSgpIGNvbnN0CitXaW5kUnVsZSBLUmVuZGVyaW5nRmlsbFBhaW50ZXI6OmZpbGxSdWxlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gZC0+ZmlsbFJ1bGU7CiB9CiAKLXZvaWQgS1JlbmRlcmluZ0Zp
bGxQYWludGVyOjpzZXRGaWxsUnVsZShLQ1dpbmRSdWxlIHJ1bGUpCit2b2lkIEtSZW5kZXJpbmdG
aWxsUGFpbnRlcjo6c2V0RmlsbFJ1bGUoV2luZFJ1bGUgcnVsZSkKIHsKICAgICBkLT5maWxsUnVs
ZSA9IHJ1bGU7CiB9CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL0tSZW5kZXJpbmdGaWxs
UGFpbnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvS1JlbmRlcmlu
Z0ZpbGxQYWludGVyLmgJKHJldmlzaW9uIDE2MDM4KQorKysgV2ViQ29yZS9rY2FudmFzL2Rldmlj
ZS9LUmVuZGVyaW5nRmlsbFBhaW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBA
QAogI2RlZmluZSBLUmVuZGVyaW5nRmlsbFBhaW50ZXJfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAK
LSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNQYXRoLmg+CisjaW5jbHVkZSAiUGF0aC5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM2LDggKzM2LDggQEAgcHVibGljOgogICAgIEtSZW5k
ZXJpbmdGaWxsUGFpbnRlcigpOwogICAgIHZpcnR1YWwgfktSZW5kZXJpbmdGaWxsUGFpbnRlcigp
OwogCi0gICAgS0NXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0RmlsbFJ1
bGUoS0NXaW5kUnVsZSBydWxlKTsKKyAgICBXaW5kUnVsZSBmaWxsUnVsZSgpIGNvbnN0OworICAg
IHZvaWQgc2V0RmlsbFJ1bGUoV2luZFJ1bGUgcnVsZSk7CiAKICAgICBmbG9hdCBvcGFjaXR5KCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRPcGFjaXR5KGZsb2F0IG9wYWNpdHkpOwpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDE2MDM4
KQorKysgV2ViQ29yZS9rc3ZnMi9taXNjL0tDYW52YXNSZW5kZXJpbmdTdHlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI2LDcgKzI2LDYgQEAKIAogI2luY2x1ZGUgIkNTU1ZhbHVlTGlzdC5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiS0NhbnZhc1BhdGguaCIKICNpbmNsdWRl
ICJLQ2FudmFzUmVuZGVyaW5nU3R5bGUuaCIKICNpbmNsdWRlICJLUmVuZGVyaW5nRGV2aWNlLmgi
CiAjaW5jbHVkZSAiS1JlbmRlcmluZ0ZpbGxQYWludGVyLmgiCkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwMzgpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsOCBA
QAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiQXR0ci5oIgogCisjaW5jbHVkZSAiRmxv
YXRQb2ludC5oIgorCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIu
aCIKICNpbmNsdWRlICJTVkdDaXJjbGVFbGVtZW50LmgiCkBAIC03NSwxMiArNzcsMTIgQEAgdm9p
ZCBTVkdDaXJjbGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYgogICAgIH0KIH0KIAotS0NhbnZh
c1BhdGgqIFNWR0NpcmNsZUVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAorUGF0aCBTVkdDaXJj
bGVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKIHsKICAgICBmbG9hdCBfY3ggPSBjeCgpLT5i
YXNlVmFsKCktPnZhbHVlKCksIF9jeSA9IGN5KCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKICAgICBm
bG9hdCBfciA9IHIoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogCi0gICAgcmV0dXJuIEtDYW52YXND
cmVhdG9yOjpzZWxmKCktPmNyZWF0ZUNpcmNsZShfY3gsIF9jeSwgX3IpOworICAgIHJldHVybiBL
Q2FudmFzQ3JlYXRvcjo6c2VsZigpLT5jcmVhdGVDaXJjbGUoRmxvYXRQb2ludChfY3gsIF9jeSks
IF9yKTsKIH0KIAogY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZHQ2lyY2xlRWxlbWVudDo6cHVz
aEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCkKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmgJKHJldmlzaW9uIDE2MDM4KQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3
ICs1MSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwg
Ym9vbCByZW5kZXJlcklzTmVlZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVk
RWxlbWVudDo6cmVuZGVyZXJJc05lZWRlZChzdHlsZSk7IH0KLSAgICAgICAgdmlydHVhbCBLQ2Fu
dmFzUGF0aCogdG9QYXRoRGF0YSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRo
RGF0YSgpIGNvbnN0OwogCiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAq
cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCk7CiAK
SW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NsaXBQYXRoRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2xpcFBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24g
MTYwMzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdDbGlwUGF0aEVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiU1ZHUmVuZGVyU3R5bGUuaCIK
ICNpbmNsdWRlICJjc3NzdHlsZXNlbGVjdG9yLmgiCiAjaW5jbHVkZSAia3N2Zy5oIgotI2luY2x1
ZGUgPGtjYW52YXMvS0NhbnZhc1BhdGguaD4KICNpbmNsdWRlIDxrY2FudmFzL2RldmljZS9LUmVu
ZGVyaW5nRGV2aWNlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtOTYsOCArOTUs
OSBAQCBLQ2FudmFzQ2xpcHBlciAqU1ZHQ2xpcFBhdGhFbGVtZW50OjpjYW52CiAgICAgICAgIGlm
IChlICYmIGUtPmlzU3R5bGVkKCkpIHsKICAgICAgICAgICAgIFNWR1N0eWxlZEVsZW1lbnQgKnN0
eWxlZCA9IHN0YXRpY19jYXN0PFNWR1N0eWxlZEVsZW1lbnQgKj4oZSk7CiAgICAgICAgICAgICBS
ZW5kZXJTdHlsZSAqcGF0aFN0eWxlID0gZG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpLT5zdHls
ZUZvckVsZW1lbnQoc3R5bGVkLCBjbGlwUGF0aFN0eWxlKTsKLSAgICAgICAgICAgIGlmIChLQ2Fu
dmFzUGF0aCogcGF0aERhdGEgPSBzdHlsZWQtPnRvUGF0aERhdGEoKSkKLSAgICAgICAgICAgICAg
ICBtX2NsaXBwZXItPmFkZENsaXBEYXRhKHBhdGhEYXRhLCAoS0NXaW5kUnVsZSkgcGF0aFN0eWxl
LT5zdmdTdHlsZSgpLT5jbGlwUnVsZSgpLCBiYm94KTsKKyAgICAgICAgICAgIFBhdGggcGF0aERh
dGEgPSBzdHlsZWQtPnRvUGF0aERhdGEoKTsKKyAgICAgICAgICAgIGlmICghcGF0aERhdGEuaXNF
bXB0eSgpKQorICAgICAgICAgICAgICAgIG1fY2xpcHBlci0+YWRkQ2xpcERhdGEocGF0aERhdGEs
IChXaW5kUnVsZSkgcGF0aFN0eWxlLT5zdmdTdHlsZSgpLT5jbGlwUnVsZSgpLCBiYm94KTsKICAg
ICAgICAgICAgIHBhdGhTdHlsZS0+ZGVyZWYodmlldygpLT5yZW5kZXJBcmVuYSgpKTsKICAgICAg
ICAgfQogICAgIH0KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE2MDM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw4IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQK
ICNpbmNsdWRlICJBdHRyLmgiCiAKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisKICNpbmNsdWRl
ICJTVkdOYW1lcy5oIgogI2luY2x1ZGUgIlNWR0hlbHBlci5oIgogI2luY2x1ZGUgIlNWR0VsbGlw
c2VFbGVtZW50LmgiCkBAIC04MiwxMiArODQsMTIgQEAgdm9pZCBTVkdFbGxpcHNlRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaQogICAgIH0KIH0KIAotS0NhbnZhc1BhdGgqIFNWR0VsbGlwc2VFbGVt
ZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKK1BhdGggU1ZHRWxsaXBzZUVsZW1lbnQ6OnRvUGF0aERh
dGEoKSBjb25zdAogewogICAgIGZsb2F0IF9jeCA9IGN4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwg
X2N5ID0gY3koKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogICAgIGZsb2F0IF9yeCA9IHJ4KCktPmJh
c2VWYWwoKS0+dmFsdWUoKSwgX3J5ID0gcnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwogCi0gICAg
cmV0dXJuIEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZUVsbGlwc2UoX2N4LCBfY3ksIF9y
eCwgX3J5KTsKKyAgICByZXR1cm4gS0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlRWxsaXBz
ZShGbG9hdFBvaW50KF9jeCwgX2N5KSwgX3J4LCBfcnkpOwogfQogCiBjb25zdCBTVkdTdHlsZWRF
bGVtZW50ICpTVkdFbGxpcHNlRWxlbWVudDo6cHVzaEF0dHJpYnV0ZUNvbnRleHQoY29uc3QgU1ZH
U3R5bGVkRWxlbWVudCAqY29udGV4dCkKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsbGlw
c2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVs
ZW1lbnQuaAkocmV2aXNpb24gMTYwMzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGxpcHNl
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVkKFJl
bmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJc05lZWRl
ZChzdHlsZSk7IH0KLSAgICAgICAgdmlydHVhbCBLQ2FudmFzUGF0aCogdG9QYXRoRGF0YSgpIGNv
bnN0OworICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0OwogCiAgICAgICAg
IHZpcnR1YWwgY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqcHVzaEF0dHJpYnV0ZUNvbnRleHQoY29u
c3QgU1ZHU3R5bGVkRWxlbWVudCAqY29udGV4dCk7CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0dyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwMzgpCisrKyBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTEsOCArMTEx
LDggQEAgdm9pZCBTVkdHcmFkaWVudEVsZW1lbnQ6Om5vdGlmeUF0dHJpYnV0ZQogICAgIAogICAg
IG1fcmVzb3VyY2UtPmludmFsaWRhdGUoKTsgIC8vIHNob3VsZCB0aGlzIGJlIGFkZGVkIHRvIGJ1
aWxkIGdyYWRpZW50PwogICAgIAotICAgIGNvbnN0IEtDYW52YXNJdGVtTGlzdCAmY2xpZW50cyA9
IG1fcmVzb3VyY2UtPmNsaWVudHMoKTsKLSAgICBmb3IoS0NhbnZhc0l0ZW1MaXN0OjpDb25zdEl0
ZXJhdG9yIGl0ID0gY2xpZW50cy5iZWdpbigpOyBpdCAhPSBjbGllbnRzLmVuZCgpOyArK2l0KQor
ICAgIGNvbnN0IFJlbmRlclBhdGhMaXN0ICZjbGllbnRzID0gbV9yZXNvdXJjZS0+Y2xpZW50cygp
OworICAgIGZvcihSZW5kZXJQYXRoTGlzdDo6Q29uc3RJdGVyYXRvciBpdCA9IGNsaWVudHMuYmVn
aW4oKTsgaXQgIT0gY2xpZW50cy5lbmQoKTsgKytpdCkKICAgICB7CiAgICAgICAgIGNvbnN0IFJl
bmRlclBhdGggKmN1cnJlbnQgPSAoKml0KTsKICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudCAqc3R5
bGVkID0gKGN1cnJlbnQgPyBzdGF0aWNfY2FzdDxTVkdTdHlsZWRFbGVtZW50ICo+KGN1cnJlbnQt
PmVsZW1lbnQoKSkgOiAwKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNw
cAkocmV2aXNpb24gMTYwMzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw2IEBACiAjaW5jbHVkZSA8a2NhbnZhcy9S
ZW5kZXJTVkdDb250YWluZXIuaD4KICNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNDcmVhdG9yLmg+
CiAjaW5jbHVkZSA8a2NhbnZhcy9LQ2FudmFzSW1hZ2UuaD4KLSNpbmNsdWRlIDxrY2FudmFzL0tD
YW52YXNQYXRoLmg+CiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIAogdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxNjAzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNiArMjQsOCBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVk
ZSAiQXR0ci5oIgogCisjaW5jbHVkZSAiRmxvYXRQb2ludC5oIgorCiAjaW5jbHVkZSAiU1ZHTmFt
ZXMuaCIKICNpbmNsdWRlICJTVkdIZWxwZXIuaCIKICNpbmNsdWRlICJTVkdMaW5lRWxlbWVudC5o
IgpAQCAtODIsMTIgKzg0LDEyIEBAIHZvaWQgU1ZHTGluZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXQKICAgICB9CiB9CiAKLUtDYW52YXNQYXRoKiBTVkdMaW5lRWxlbWVudDo6dG9QYXRoRGF0
YSgpIGNvbnN0CitQYXRoIFNWR0xpbmVFbGVtZW50Ojp0b1BhdGhEYXRhKCkgY29uc3QKIHsKICAg
ICBmbG9hdCBfeDEgPSB4MSgpLT5iYXNlVmFsKCktPnZhbHVlKCksIF95MSA9IHkxKCktPmJhc2VW
YWwoKS0+dmFsdWUoKTsKICAgICBmbG9hdCBfeDIgPSB4MigpLT5iYXNlVmFsKCktPnZhbHVlKCks
IF95MiA9IHkyKCktPmJhc2VWYWwoKS0+dmFsdWUoKTsKIAotICAgIHJldHVybiBLQ2FudmFzQ3Jl
YXRvcjo6c2VsZigpLT5jcmVhdGVMaW5lKF94MSwgX3kxLCBfeDIsIF95Mik7CisgICAgcmV0dXJu
IEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZUxpbmUoRmxvYXRQb2ludChfeDEsIF95MSks
IEZsb2F0UG9pbnQoX3gyLCBfeTIpKTsKIH0KIAogY29uc3QgU1ZHU3R5bGVkRWxlbWVudCAqU1ZH
TGluZUVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQg
KmNvbnRleHQpCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdMaW5lRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0xpbmVFbGVtZW50LmgJKHJldmlzaW9uIDE2
MDM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTGluZUVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTIsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQogICAgICAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKTsKIAogICAgICAg
ICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJTdHlsZSAqc3R5bGUpIHsgcmV0
dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5bGUpOyB9Ci0gICAgICAgIHZp
cnR1YWwgS0NhbnZhc1BhdGgqIHRvUGF0aERhdGEoKSBjb25zdDsKKyAgICAgICAgdmlydHVhbCBQ
YXRoIHRvUGF0aERhdGEoKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIGNvbnN0IFNWR1N0eWxl
ZEVsZW1lbnQgKnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKmNv
bnRleHQpOwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXNrRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHTWFza0VsZW1lbnQuY3BwCShyZXZpc2lv
biAxNjAzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR01hc2tFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgog
I2luY2x1ZGUgIlJlbmRlclNWR0NvbnRhaW5lci5oIgogI2luY2x1ZGUgIktDYW52YXNJbWFnZS5o
IgotI2luY2x1ZGUgIktDYW52YXNQYXRoLmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZS5o
IgogI2luY2x1ZGUgIlNWR0FuaW1hdGVkTGVuZ3RoLmgiCiAjaW5jbHVkZSAiU1ZHSGVscGVyLmgi
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjAzOCkK
KysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzc5LDE0ICszNzksMTQgQEAgU1ZHUGF0aFNlZ0xpc3QgKlNWR1BhdGhFbGVtZW50Ojphbmlt
YXRlZAogfQogCiAvLyBGSVhNRTogVGhpcyBwcm9iYWJseSBiZWxvbmdzIG9uIFNWR1BhdGhTZWdM
aXN0IGluc3RlYWQuIC0tIGVjcyAxMi81LzA1Ci1LQ2FudmFzUGF0aCogU1ZHUGF0aEVsZW1lbnQ6
OnRvUGF0aERhdGEoKSBjb25zdAorUGF0aCBTVkdQYXRoRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNv
bnN0CiB7CisgICAgUGF0aCBwYXRoRGF0YTsKICAgICAvLyBUT0RPIDogYWxzbyBzdXBwb3J0IG5v
bi1ub3JtYWxpemVkIG1vZGUsIGF0IGxlYXN0IGluIGRvbSBzdHJ1Y3R1cmUKICAgICBpbnQgbGVu
ID0gcGF0aFNlZ0xpc3QoKS0+bnVtYmVyT2ZJdGVtcygpOwogICAgIGlmKGxlbiA8IDEpCi0gICAg
ICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gcGF0aERhdGE7CiAKLSAgICBLQ2FudmFzUGF0
aCogcGF0aERhdGEgPSByZW5kZXJpbmdEZXZpY2UoKS0+Y3JlYXRlUGF0aCgpOwogICAgIGZvcihp
bnQgaSA9IDA7IGkgPCBsZW47ICsraSkKICAgICB7CiAgICAgICAgIFNWR1BhdGhTZWcgKnAgPSBw
YXRoU2VnTGlzdCgpLT5nZXRJdGVtKGkpOwpAQCAtMzk1LDI1ICszOTUsMjUgQEAgS0NhbnZhc1Bh
dGgqIFNWR1BhdGhFbGVtZW50Ojp0b1BhdGhEYXRhKAogICAgICAgICAgICAgY2FzZSBQQVRIU0VH
X01PVkVUT19BQlM6CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgU1ZHUGF0aFNlZ01v
dmV0b0FicyAqbW92ZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ01vdmV0b0FicyAqPihwKTsK
LSAgICAgICAgICAgICAgICBwYXRoRGF0YS0+bW92ZVRvKG1vdmVUby0+eCgpLCBtb3ZlVG8tPnko
KSk7CisgICAgICAgICAgICAgICAgcGF0aERhdGEubW92ZVRvKEZsb2F0UG9pbnQobW92ZVRvLT54
KCksIG1vdmVUby0+eSgpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBjYXNlIFBBVEhTRUdfTElORVRPX0FCUzoKICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICBTVkdQYXRoU2VnTGluZXRvQWJzICpsaW5lVG8gPSBzdGF0aWNfY2FzdDxT
VkdQYXRoU2VnTGluZXRvQWJzICo+KHApOwotICAgICAgICAgICAgICAgIHBhdGhEYXRhLT5saW5l
VG8obGluZVRvLT54KCksIGxpbmVUby0+eSgpKTsKKyAgICAgICAgICAgICAgICBwYXRoRGF0YS5h
ZGRMaW5lVG8oRmxvYXRQb2ludChsaW5lVG8tPngoKSwgbGluZVRvLT55KCkpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgUEFUSFNFR19D
VVJWRVRPX0NVQklDX0FCUzoKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBTVkdQYXRo
U2VnQ3VydmV0b0N1YmljQWJzICpjdXJ2ZVRvID0gc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZl
dG9DdWJpY0FicyAqPihwKTsKLSAgICAgICAgICAgICAgICBwYXRoRGF0YS0+Y3VydmVUbyhjdXJ2
ZVRvLT54MSgpLCBjdXJ2ZVRvLT55MSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY3VydmVUby0+eDIoKSwgY3VydmVUby0+eTIoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGN1cnZlVG8tPngoKSwgY3VydmVUby0+eSgpKTsKKyAgICAgICAgICAgICAgICBw
YXRoRGF0YS5hZGRCZXppZXJDdXJ2ZVRvKEZsb2F0UG9pbnQoY3VydmVUby0+eDEoKSwgY3VydmVU
by0+eTEoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbG9hdFBvaW50KGN1
cnZlVG8tPngyKCksIGN1cnZlVG8tPnkyKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgRmxvYXRQb2ludChjdXJ2ZVRvLT54KCksIGN1cnZlVG8tPnkoKSkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBQQVRIU0VHX0NM
T1NFUEFUSDoKLSAgICAgICAgICAgICAgICBwYXRoRGF0YS0+Y2xvc2VTdWJwYXRoKCk7CisgICAg
ICAgICAgICAgICAgcGF0aERhdGEuY2xvc2VTdWJwYXRoKCk7CiAgICAgICAgICAgICBkZWZhdWx0
OgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkluZGV4OiBXZWJDb3JlL2tzdmcy
L3N2Zy9TVkdQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1BhdGhFbGVtZW50LmgJKHJldmlzaW9uIDE2MDM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
UGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTAxLDcgKzEwMSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlCiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUgKmF0dHIpOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVl
ZGVkKFJlbmRlclN0eWxlICpzdHlsZSkgeyByZXR1cm4gU3R5bGVkRWxlbWVudDo6cmVuZGVyZXJJ
c05lZWRlZChzdHlsZSk7IH0KLSAgICAgICAgdmlydHVhbCBLQ2FudmFzUGF0aCogdG9QYXRoRGF0
YSgpIGNvbnN0OworICAgICAgICB2aXJ0dWFsIFBhdGggdG9QYXRoRGF0YSgpIGNvbnN0OwogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgbXV0YWJsZSBSZWZQdHI8U1ZHUGF0aFNlZ0xpc3Q+IG1fcGF0
aFNlZ0xpc3Q7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjAzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDEwICsyODcsMTAgQEAgdm9pZCBTVkdQYXR0ZXJuRWxl
bWVudDo6ZHJhd1BhdHRlcm5Db250ZQogCiB2b2lkIFNWR1BhdHRlcm5FbGVtZW50Ojpub3RpZnlD
bGllbnRzVG9SZXBhaW50KCkgY29uc3QKIHsKLSAgICBjb25zdCBLQ2FudmFzSXRlbUxpc3QgJmNs
aWVudHMgPSBtX3BhaW50U2VydmVyLT5jbGllbnRzKCk7CisgICAgY29uc3QgUmVuZGVyUGF0aExp
c3QgJmNsaWVudHMgPSBtX3BhaW50U2VydmVyLT5jbGllbnRzKCk7CiAKLSAgICBLQ2FudmFzSXRl
bUxpc3Q6OkNvbnN0SXRlcmF0b3IgaXQgPSBjbGllbnRzLmJlZ2luKCk7Ci0gICAgS0NhbnZhc0l0
ZW1MaXN0OjpDb25zdEl0ZXJhdG9yIGVuZCA9IGNsaWVudHMuZW5kKCk7CisgICAgUmVuZGVyUGF0
aExpc3Q6OkNvbnN0SXRlcmF0b3IgaXQgPSBjbGllbnRzLmJlZ2luKCk7CisgICAgUmVuZGVyUGF0
aExpc3Q6OkNvbnN0SXRlcmF0b3IgZW5kID0gY2xpZW50cy5lbmQoKTsKIAogICAgIGZvcig7IGl0
ICE9IGVuZDsgKytpdCkKICAgICB7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5Z29u
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seWdvbkVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxNjAzOCkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHln
b25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMjAgKzM5LDIxIEBAIFNWR1BvbHln
b25FbGVtZW50Ojp+U1ZHUG9seWdvbkVsZW1lbnQoKQogewogfQogCi1LQ2FudmFzUGF0aCogU1ZH
UG9seWdvbkVsZW1lbnQ6OnRvUGF0aERhdGEoKSBjb25zdAorUGF0aCBTVkdQb2x5Z29uRWxlbWVu
dDo6dG9QYXRoRGF0YSgpIGNvbnN0CiB7CisgICAgUGF0aCBwb2x5RGF0YTsKICAgICBpbnQgbGVu
ID0gcG9pbnRzKCktPm51bWJlck9mSXRlbXMoKTsKICAgICBpZihsZW4gPCAxKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHBvbHlEYXRhOwogICAgIAotICAgIEtDYW52YXNQYXRo
KiBwb2x5RGF0YSA9IHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVQYXRoKCk7Ci0gICAgcG9seURh
dGEtPm1vdmVUbyhwb2ludHMoKS0+Z2V0SXRlbSgwKS0+eCgpLCBwb2ludHMoKS0+Z2V0SXRlbSgw
KS0+eSgpKTsKKyAgICBwb2x5RGF0YS5tb3ZlVG8oRmxvYXRQb2ludChwb2ludHMoKS0+Z2V0SXRl
bSgwKS0+eCgpLCBwb2ludHMoKS0+Z2V0SXRlbSgwKS0+eSgpKSk7CiAgICAgZm9yIChpbnQgaSA9
IDE7IGkgPCBsZW47ICsraSkgewogICAgICAgICBTVkdQb2ludCAqcCA9IHBvaW50cygpLT5nZXRJ
dGVtKGkpOwotICAgICAgICBwb2x5RGF0YS0+bGluZVRvKHAtPngoKSwgcC0+eSgpKTsKKyAgICAg
ICAgcG9seURhdGEuYWRkTGluZVRvKEZsb2F0UG9pbnQocC0+eCgpLCBwLT55KCkpKTsKICAgICB9
CiAKLSAgICBwb2x5RGF0YS0+Y2xvc2VTdWJwYXRoKCk7CisgICAgcG9seURhdGEuY2xvc2VTdWJw
YXRoKCk7CisKICAgICByZXR1cm4gcG9seURhdGE7CiB9CiAKSW5kZXg6IFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1BvbHlnb25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHUG9seWdvbkVsZW1lbnQuaAkocmV2aXNpb24gMTYwMzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdQb2x5Z29uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlCiAgICAgICAgIFNWR1BvbHlnb25FbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOwogICAgICAgICB2aXJ0dWFsIH5TVkdQb2x5Z29uRWxlbWVudCgp
OwogCi0gICAgICAgIHZpcnR1YWwgS0NhbnZhc1BhdGgqIHRvUGF0aERhdGEoKSBjb25zdDsKKyAg
ICAgICAgdmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdDsKICAgICB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5bGluZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlsaW5lRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDE2MDM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seWxpbmVF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksMTkgKzM5LDE4IEBAIFNWR1BvbHlsaW5l
RWxlbWVudDo6flNWR1BvbHlsaW5lRWxlbWVudCgKIHsKIH0KIAotS0NhbnZhc1BhdGgqIFNWR1Bv
bHlsaW5lRWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0CitQYXRoIFNWR1BvbHlsaW5lRWxlbWVu
dDo6dG9QYXRoRGF0YSgpIGNvbnN0CiB7CisgICAgUGF0aCBwb2x5RGF0YTsKICAgICBpbnQgbGVu
ID0gcG9pbnRzKCktPm51bWJlck9mSXRlbXMoKTsKICAgICBpZihsZW4gPCAxKQotICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIHBvbHlEYXRhOwogCi0gICAgS0NhbnZhc1BhdGgqIHBv
bHlEYXRhID0gcmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZVBhdGgoKTsKLSAgICBwb2x5RGF0YS0+
bW92ZVRvKHBvaW50cygpLT5nZXRJdGVtKDApLT54KCksIHBvaW50cygpLT5nZXRJdGVtKDApLT55
KCkpOworICAgIHBvbHlEYXRhLm1vdmVUbyhGbG9hdFBvaW50KHBvaW50cygpLT5nZXRJdGVtKDAp
LT54KCksIHBvaW50cygpLT5nZXRJdGVtKDApLT55KCkpKTsKICAgICBmb3IgKGludCBpID0gMTsg
aSA8IGxlbjsgKytpKSB7CiAgICAgICAgIFNWR1BvaW50ICpwID0gcG9pbnRzKCktPmdldEl0ZW0o
aSk7Ci0gICAgICAgIHBvbHlEYXRhLT5saW5lVG8ocC0+eCgpLCBwLT55KCkpOworICAgICAgICBw
b2x5RGF0YS5hZGRMaW5lVG8oRmxvYXRQb2ludChwLT54KCksIHAtPnkoKSkpOwogICAgIH0KLQog
ICAgIHJldHVybiBwb2x5RGF0YTsKIH0KIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9s
eWxpbmVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seWxp
bmVFbGVtZW50LmgJKHJldmlzaW9uIDE2MDM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9s
eWxpbmVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUKICAgICAgICAgU1ZHUG9seWxpbmVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBEb2N1bWVudCopOwogICAgICAgICB2aXJ0dWFsIH5TVkdQb2x5bGluZUVsZW1lbnQoKTsKIAot
ICAgICAgICB2aXJ0dWFsIEtDYW52YXNQYXRoKiB0b1BhdGhEYXRhKCkgY29uc3Q7CisgICAgICAg
IHZpcnR1YWwgUGF0aCB0b1BhdGhEYXRhKCkgY29uc3Q7CiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAkocmV2aXNp
b24gMTYwMzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIFNWR1JlY3RFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0CiAgICAgfQogfQogCi1LQ2FudmFzUGF0aCogU1ZHUmVjdEVsZW1lbnQ6OnRv
UGF0aERhdGEoKSBjb25zdAorUGF0aCBTVkdSZWN0RWxlbWVudDo6dG9QYXRoRGF0YSgpIGNvbnN0
CiB7CiAgICAgZmxvYXQgX3ggPSB4KCktPmJhc2VWYWwoKS0+dmFsdWUoKSwgX3kgPSB5KCktPmJh
c2VWYWwoKS0+dmFsdWUoKTsKICAgICBmbG9hdCBfd2lkdGggPSB3aWR0aCgpLT5iYXNlVmFsKCkt
PnZhbHVlKCksIF9oZWlnaHQgPSBoZWlnaHQoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwpAQCAtMTEx
LDEwICsxMTEsMTAgQEAgS0NhbnZhc1BhdGgqIFNWR1JlY3RFbGVtZW50Ojp0b1BhdGhEYXRhKAog
ICAgIHsKICAgICAgICAgZmxvYXQgX3J4ID0gaGFzUnggPyByeCgpLT5iYXNlVmFsKCktPnZhbHVl
KCkgOiByeSgpLT5iYXNlVmFsKCktPnZhbHVlKCk7CiAgICAgICAgIGZsb2F0IF9yeSA9IGhhc1J5
ID8gcnkoKS0+YmFzZVZhbCgpLT52YWx1ZSgpIDogcngoKS0+YmFzZVZhbCgpLT52YWx1ZSgpOwot
ICAgICAgICByZXR1cm4gS0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlUm91bmRlZFJlY3Rh
bmdsZShfeCwgX3ksIF93aWR0aCwgX2hlaWdodCwgX3J4LCBfcnkpOworICAgICAgICByZXR1cm4g
S0NhbnZhc0NyZWF0b3I6OnNlbGYoKS0+Y3JlYXRlUm91bmRlZFJlY3RhbmdsZShGbG9hdFJlY3Qo
X3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpLCBfcngsIF9yeSk7CiAgICAgfQogCi0gICAgcmV0dXJu
IEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZVJlY3RhbmdsZShfeCwgX3ksIF93aWR0aCwg
X2hlaWdodCk7CisgICAgcmV0dXJuIEtDYW52YXNDcmVhdG9yOjpzZWxmKCktPmNyZWF0ZVJlY3Rh
bmdsZShGbG9hdFJlY3QoX3gsIF95LCBfd2lkdGgsIF9oZWlnaHQpKTsKIH0KIAogY29uc3QgU1ZH
U3R5bGVkRWxlbWVudCAqU1ZHUmVjdEVsZW1lbnQ6OnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0
IFNWR1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdS
ZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JlY3RFbGVt
ZW50LmgJKHJldmlzaW9uIDE2MDM4KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVjdEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZQog
ICAgICAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
ICphdHRyKTsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgcmVuZGVyZXJJc05lZWRlZChSZW5kZXJT
dHlsZSAqc3R5bGUpIHsgcmV0dXJuIFN0eWxlZEVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoc3R5
bGUpOyB9Ci0gICAgICAgIHZpcnR1YWwgS0NhbnZhc1BhdGgqIHRvUGF0aERhdGEoKSBjb25zdDsK
KyAgICAgICAgdmlydHVhbCBQYXRoIHRvUGF0aERhdGEoKSBjb25zdDsKIAogICAgICAgICB2aXJ0
dWFsIGNvbnN0IFNWR1N0eWxlZEVsZW1lbnQgKnB1c2hBdHRyaWJ1dGVDb250ZXh0KGNvbnN0IFNW
R1N0eWxlZEVsZW1lbnQgKmNvbnRleHQpOwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdT
dHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTdHls
ZWRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwMzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdT
dHlsZWRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsMTAgKzY4LDEwIEBAIFNWR0Fu
aW1hdGVkU3RyaW5nKiBTVkdTdHlsZWRFbGVtZW50OjpjbGEKIAogUmVuZGVyT2JqZWN0KiBTVkdT
dHlsZWRFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0
eWxlKiBzdHlsZSkKIHsKLSAgICBSZWZQdHI8S0NhbnZhc1BhdGg+IHBhdGhEYXRhID0gdG9QYXRo
RGF0YSgpOwotICAgIGlmICghcGF0aERhdGEpCisgICAgUGF0aCBwYXRoRGF0YSA9IHRvUGF0aERh
dGEoKTsKKyAgICBpZiAocGF0aERhdGEuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gcmVuZGVyaW5nRGV2aWNlKCktPmNyZWF0ZUl0ZW0oYXJlbmEsIHN0eWxlLCB0aGlz
LCBwYXRoRGF0YS5nZXQoKSk7CisgICAgcmV0dXJuIHJlbmRlcmluZ0RldmljZSgpLT5jcmVhdGVJ
dGVtKGFyZW5hLCBzdHlsZSwgdGhpcywgcGF0aERhdGEpOwogfQogCiB2b2lkIFNWR1N0eWxlZEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N0eWxlZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdTdHlsZWRFbGVtZW50LmgJKHJldmlzaW9uIDE2MDM4KQorKysgV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHU3R5bGVkRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw3IEBACiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50
LmgiCiAjaW5jbHVkZSAiU1ZHU3R5bGFibGUuaCIKLSNpbmNsdWRlIDxrY2FudmFzL0tDYW52YXNQ
YXRoLmg+CisjaW5jbHVkZSAiUGF0aC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUx
LDcgKzUxLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIC8vIFRoZXNlIG5lZWQg
dG8gYmUgaW1wbGVtZW50ZWQuCiAgICAgICAgIHZpcnR1YWwgYm9vbCByZW5kZXJlcklzTmVlZGVk
KFJlbmRlclN0eWxlKikgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAgICAgdmlydHVhbCBLQ2FudmFz
UGF0aCogdG9QYXRoRGF0YSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAgICAgICAgdmlydHVhbCBQ
YXRoIHRvUGF0aERhdGEoKSBjb25zdCB7IHJldHVybiBQYXRoKCk7IH0KICAgICAgICAgdmlydHVh
bCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUq
KTsKICAgICAgICAgdmlydHVhbCBLQ2FudmFzUmVzb3VyY2UqIGNhbnZhc1Jlc291cmNlKCkgeyBy
ZXR1cm4gMDsgfQogICAgICAgICAKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRDb250
ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENv
bnRlbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTYwMzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBA
CiAjaW5jbHVkZSAiU1ZHVGV4dENvbnRlbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHQW5pbWF0
ZWRMZW5ndGguaCIKICNpbmNsdWRlICJTVkdBbmltYXRlZEVudW1lcmF0aW9uLmgiCisjaW5jbHVk
ZSAiRmxvYXRQb2ludC5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogCiB1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRFbGVtZW50LmNwcAkocmV2
aXNpb24gMTYwMzgpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgog
I2luY2x1ZGUgPGtjYW52YXMvS0NhbnZhc0NyZWF0b3IuaD4KICNpbmNsdWRlIDxrY2FudmFzL1Jl
bmRlclNWR1RleHQuaD4KKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL1BhdGguaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3BsYXRmb3JtL1BhdGguaAkocmV2aXNpb24gMTYwMzgpCisrKyBXZWJDb3JlL3BsYXRmb3Jt
L1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDMsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgICAgICAgICAgICAgICAgICAgIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KICAq
CiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzcsOSArMzgsMTUgQEAgdHlwZWRlZiB2
b2lkIFBsYXRmb3JtUGF0aDsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCisgICAgZW51bSBXaW5k
UnVsZSB7CisgICAgICAgIFJVTEVfTk9OWkVSTyA9IDAsCisgICAgICAgIFJVTEVfRVZFTk9ERCA9
IDEKKyAgICB9OworCiAgICAgY2xhc3MgRmxvYXRQb2ludDsKICAgICBjbGFzcyBGbG9hdFNpemU7
CiAgICAgY2xhc3MgRmxvYXRSZWN0OworICAgIGNsYXNzIERlcHJlY2F0ZWRTdHJpbmc7CiAKICAg
ICBjbGFzcyBQYXRoIHsKICAgICBwdWJsaWM6CkBAIC00OSwxMCArNTYsMTEgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICBQYXRoKGNvbnN0IFBhdGgmKTsKICAgICAgICAgUGF0aCYgb3Bl
cmF0b3I9KGNvbnN0IFBhdGgmKTsKIAotICAgICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEZsb2F0
UG9pbnQmKSBjb25zdDsKKyAgICAgICAgYm9vbCBjb250YWlucyhjb25zdCBGbG9hdFBvaW50Jiwg
V2luZFJ1bGUgcnVsZSA9IFJVTEVfTk9OWkVSTykgY29uc3Q7CiAgICAgICAgIEZsb2F0UmVjdCBi
b3VuZGluZ1JlY3QoKSBjb25zdDsKIAogICAgICAgICB2b2lkIGNsZWFyKCk7CisgICAgICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0OwogCiAgICAgICAgIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9p
bnQmKTsKICAgICAgICAgdm9pZCBhZGRMaW5lVG8oY29uc3QgRmxvYXRQb2ludCYpOwpAQCAtNjcs
MTAgKzc1LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICB2b2lkIHRyYW5zbGF0
ZShjb25zdCBGbG9hdFNpemUmKTsKIAorICAgICAgICB2b2lkIHNldFdpbmRpbmdSdWxlKFdpbmRS
dWxlIHJ1bGUpIHsgbV9ydWxlID0gcnVsZTsgfQorICAgICAgICBXaW5kUnVsZSB3aW5kaW5nUnVs
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVsZTsgfQorCisgICAgICAgIERlcHJlY2F0ZWRTdHJpbmcg
ZGVidWdTdHJpbmcoKSBjb25zdDsKKwogICAgICAgICBQbGF0Zm9ybVBhdGgqIHBsYXRmb3JtUGF0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0aDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUGxh
dGZvcm1QYXRoKiBtX3BhdGg7CisgICAgICAgIFdpbmRSdWxlIG1fcnVsZTsKICAgICB9OwogCiB9
Cg==
</data>
<flag name="review"
          id="3222"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10232</attachid>
            <date>2006-08-25 14:37:50 -0700</date>
            <delta_ts>2006-08-26 12:31:26 -0700</delta_ts>
            <desc>Quartz specific KCanvasPath removal</desc>
            <filename>removal-quartz.diff</filename>
            <type>text/plain</type>
            <size>16453</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IC9Vc2Vycy9yd2xidWlzL3F1YXJ0ei9LQ2FudmFzSXRlbVF1YXJ0ei5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSAvVXNlcnMvcndsYnVpcy9xdWFydHovS0NhbnZhc0l0ZW1RdWFydHoubW0JKHJldmlz
aW9uIDE2MDM4KQorKysgL1VzZXJzL3J3bGJ1aXMvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6Lm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAKICAgICBkYXRhLmVsZW1lbnRJbmRl
eCsrOwogfQogCi12b2lkIEtDYW52YXNJdGVtUXVhcnR6OjpkcmF3TWFya2Vyc0lmTmVlZGVkKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBjb25zdCBLQ2Fu
dmFzUGF0aCAqcGF0aCkgY29uc3QKK3ZvaWQgS0NhbnZhc0l0ZW1RdWFydHo6OmRyYXdNYXJrZXJz
SWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3Qs
IGNvbnN0IFBhdGgmIHBhdGgpIGNvbnN0CiB7CiAgICAgRG9jdW1lbnQgKmRvYyA9IGRvY3VtZW50
KCk7CiAgICAgY29uc3QgU1ZHUmVuZGVyU3R5bGUgKnN2Z1N0eWxlID0gc3R5bGUoKS0+c3ZnU3R5
bGUoKTsKQEAgLTE3OSw3ICsxNzksNyBAQAogCiAgICAgRHJhd01hcmtlcnNEYXRhIGRhdGEoY29u
dGV4dCwgc3RhcnRNYXJrZXIsIG1pZE1hcmtlciwgc3Ryb2tlV2lkdGgpOwogCi0gICAgQ0dQYXRo
UmVmIGNnUGF0aCA9IHN0YXRpY19jYXN0PGNvbnN0IEtDYW52YXNQYXRoUXVhcnR6Kj4ocGF0aCkt
PmNnUGF0aCgpOworICAgIENHUGF0aFJlZiBjZ1BhdGggPSBwYXRoLnBsYXRmb3JtUGF0aCgpOwog
ICAgIENHUGF0aEFwcGx5KGNnUGF0aCwgJmRhdGEsIGRyYXdTdGFydEFuZE1pZE1hcmtlcnMpOwog
CiAgICAgZGF0YS5wcmV2aW91c01hcmtlckRhdGEubWFya2VyID0gZW5kTWFya2VyOwpAQCAtMTg3
LDYgKzE4NywyOSBAQAogICAgIGRyYXdNYXJrZXJXaXRoRGF0YShjb250ZXh0LCBkYXRhLnByZXZp
b3VzTWFya2VyRGF0YSk7CiB9CiAKK0Zsb2F0UmVjdCBLQ2FudmFzSXRlbVF1YXJ0ejo6c3Ryb2tl
QkJveCgpIGNvbnN0Cit7CisgICAgaWYgKEtTVkdQYWludGVyRmFjdG9yeTo6aXNTdHJva2VkKHN0
eWxlKCkpKSB7CisgICAgICAgIEtSZW5kZXJpbmdTdHJva2VQYWludGVyIHN0cm9rZVBhaW50ZXIg
PSBLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50ZXIoc3R5bGUoKSwgdGhpcyk7CisgICAg
ICAgIHJldHVybiBzdHJva2VCb3VuZGluZ0JveChwYXRoKCksIHN0cm9rZVBhaW50ZXIpOworICAg
IH0KKworICAgIHJldHVybiBwYXRoKCkuYm91bmRpbmdSZWN0KCk7CiB9CiAKKworYm9vbCBLQ2Fu
dmFzSXRlbVF1YXJ0ejo6c3Ryb2tlQ29udGFpbnMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNv
bnN0Cit7CisgICAgaWYgKHBhdGgoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJva2VQYWludFNlcnZlcihzdHlsZSgp
LCB0aGlzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQ0dNdXRhYmxlUGF0aFJlZiBj
Z1BhdGggPSBwYXRoKCkucGxhdGZvcm1QYXRoKCk7CisgICAgcmV0dXJuIHBhdGhDb250YWluc1Bv
aW50KGNnUGF0aCwgcG9pbnQsIGtDR1BhdGhTdHJva2UpOworfQorCit9CisKICNlbmRpZiAvLyBT
VkdfU1VQUE9SVApJbmRleDogL1VzZXJzL3J3bGJ1aXMvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VR
dWFydHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gL1VzZXJzL3J3bGJ1aXMvcXVhcnR6L0tSZW5kZXJpbmdE
ZXZpY2VRdWFydHoubW0JKHJldmlzaW9uIDE2MDM4KQorKysgL1VzZXJzL3J3bGJ1aXMvcXVhcnR6
L0tSZW5kZXJpbmdEZXZpY2VRdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDkg
QEAKICAgICBDR0NvbnRleHRCZWdpblBhdGgobV9jZ0NvbnRleHQpOwogfQogCi12b2lkIEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6OjphZGRQYXRoKGNvbnN0IEtDYW52YXNQYXRoICpwYXRo
KQordm9pZCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6YWRkUGF0aChjb25zdCBQYXRo
JiBwYXRoKQogewotICAgIENHQ29udGV4dEFkZFBhdGgobV9jZ0NvbnRleHQsIHN0YXRpY19jYXN0
PGNvbnN0IEtDYW52YXNQYXRoUXVhcnR6Kj4ocGF0aCktPmNnUGF0aCgpKTsKKyAgICBDR0NvbnRl
eHRBZGRQYXRoKG1fY2dDb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKIH0KIAogTlNHcmFw
aGljc0NvbnRleHQgKktSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Ojpuc0dyYXBoaWNzQ29u
dGV4dCgpCkBAIC0xNjMsMjYgKzE2Myw2IEBACiB9CiAKICNwcmFnbWEgbWFyayAtCi0jcHJhZ21h
IG1hcmsgUGF0aCBNYW5hZ2VtZW50Ci0KLUtDYW52YXNQYXRoKiBLUmVuZGVyaW5nRGV2aWNlUXVh
cnR6OjpjcmVhdGVQYXRoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbmV3IEtDYW52YXNQYXRoUXVh
cnR6KCk7Ci19Ci0KLURlcHJlY2F0ZWRTdHJpbmcgS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6c3Ry
aW5nRm9yUGF0aChjb25zdCBLQ2FudmFzUGF0aCAqcGF0aCkKLXsKLSAgICBEZXByZWNhdGVkU3Ry
aW5nIHJlc3VsdDsKLSAgICBpZiAocGF0aCkgewotICAgICAgICBDR1BhdGhSZWYgY2dQYXRoID0g
c3RhdGljX2Nhc3Q8Y29uc3QgS0NhbnZhc1BhdGhRdWFydHogKj4ocGF0aCktPmNnUGF0aCgpOwot
ICAgICAgICBDRlN0cmluZ1JlZiBwYXRoU3RyaW5nID0gQ0ZTdHJpbmdGcm9tQ0dQYXRoKGNnUGF0
aCk7Ci0gICAgICAgIHJlc3VsdCA9IERlcHJlY2F0ZWRTdHJpbmc6OmZyb21DRlN0cmluZyhwYXRo
U3RyaW5nKTsKLSAgICAgICAgQ0ZSZWxlYXNlKHBhdGhTdHJpbmcpOwotICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi0jcHJhZ21hIG1hcmsgLQogI3ByYWdtYSBtYXJrIFJlc291cmNlIENy
ZWF0aW9uCiAKIEtSZW5kZXJpbmdQYWludFNlcnZlciAqS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6
Y3JlYXRlUGFpbnRTZXJ2ZXIoY29uc3QgS0NQYWludFNlcnZlclR5cGUgJnR5cGUpIGNvbnN0CkBA
IC0yMDUsNyArMTg1LDcgQEAKICAgICByZXR1cm4gbmV3U2VydmVyOwogfQogCi1SZW5kZXJQYXRo
ICpLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpjcmVhdGVJdGVtKFJlbmRlckFyZW5hICphcmVuYSwg
UmVuZGVyU3R5bGUgKnN0eWxlLCBTVkdTdHlsZWRFbGVtZW50ICpub2RlLCBLQ2FudmFzUGF0aCog
cGF0aCkgY29uc3QKK1JlbmRlclBhdGggKktSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmNyZWF0ZUl0
ZW0oUmVuZGVyQXJlbmEgKmFyZW5hLCBSZW5kZXJTdHlsZSAqc3R5bGUsIFNWR1N0eWxlZEVsZW1l
bnQgKm5vZGUsIGNvbnN0IFBhdGgmIHBhdGgpIGNvbnN0CiB7CiAgICAgUmVuZGVyUGF0aCAqaXRl
bSA9IG5ldyAoYXJlbmEpIEtDYW52YXNJdGVtUXVhcnR6KHN0eWxlLCBub2RlKTsKICAgICBpdGVt
LT5zZXRQYXRoKHBhdGgpOwpJbmRleDogL1VzZXJzL3J3bGJ1aXMvcXVhcnR6L1F1YXJ0elN1cHBv
cnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gL1VzZXJzL3J3bGJ1aXMvcXVhcnR6L1F1YXJ0elN1cHBvcnQu
bW0JKHJldmlzaW9uIDE2MDM4KQorKysgL1VzZXJzL3J3bGJ1aXMvcXVhcnR6L1F1YXJ0elN1cHBv
cnQubW0JKHdvcmtpbmcgY29weSkKQEAgLTEyNSw0MSArMTI1LDYyIEBACiAgICAgYXBwbHlTdHJv
a2VTdHlsZVRvQ29udGV4dChjb250ZXh0LCBzdHJva2VQYWludGVyKTsKIH0KIAotdm9pZCBDR1Bh
dGhUb0NGU3RyaW5nQXBwbGllckZ1bmN0aW9uKHZvaWQgKmluZm8sIGNvbnN0IENHUGF0aEVsZW1l
bnQgKmVsZW1lbnQpCitDR0NvbnRleHRSZWYgc2NyYXRjaENvbnRleHQoKQogewotICAgIENGTXV0
YWJsZVN0cmluZ1JlZiBzdHJpbmcgPSAoQ0ZNdXRhYmxlU3RyaW5nUmVmKWluZm87Ci0gICAgQ0ZT
dHJpbmdSZWYgdHlwZVN0cmluZyA9IENGU1RSKCIiKTsKLSAgICBDR1BvaW50ICpwb2ludHMgPSBl
bGVtZW50LT5wb2ludHM7Ci0gICAgc3dpdGNoKGVsZW1lbnQtPnR5cGUpIHsKLSAgICBjYXNlIGtD
R1BhdGhFbGVtZW50TW92ZVRvUG9pbnQ6Ci0gICAgICAgIENGU3RyaW5nQXBwZW5kRm9ybWF0KHN0
cmluZywgMCwgQ0ZTVFIoIk0lLjJmLCUuMmYiKSwgcG9pbnRzWzBdLngsIHBvaW50c1swXS55KTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrQ0dQYXRoRWxlbWVudEFkZExpbmVUb1BvaW50Ogot
ICAgICAgICBDRlN0cmluZ0FwcGVuZEZvcm1hdChzdHJpbmcsIDAsIENGU1RSKCJMJS4yZiwlLjJm
IiksIHBvaW50c1swXS54LCBwb2ludHNbMF0ueSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
a0NHUGF0aEVsZW1lbnRBZGRRdWFkQ3VydmVUb1BvaW50OgotICAgICAgICBDRlN0cmluZ0FwcGVu
ZEZvcm1hdChzdHJpbmcsIDAsIENGU1RSKCJRJS4yZiwlLjJmLCUuMmYsJS4yZiIpLAotICAgICAg
ICAgICAgICAgIHBvaW50c1swXS54LCBwb2ludHNbMF0ueSwgcG9pbnRzWzFdLngsIHBvaW50c1sx
XS55KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBrQ0dQYXRoRWxlbWVudEFkZEN1cnZlVG9Q
b2ludDoKLSAgICAgICAgQ0ZTdHJpbmdBcHBlbmRGb3JtYXQoc3RyaW5nLCAwLCBDRlNUUigiQyUu
MmYsJS4yZiwlLjJmLCUuMmYsJS4yZiwlLjJmIiksCi0gICAgICAgICAgICAgICAgcG9pbnRzWzBd
LngsIHBvaW50c1swXS55LCBwb2ludHNbMV0ueCwgcG9pbnRzWzFdLnksCi0gICAgICAgICAgICAg
ICAgcG9pbnRzWzJdLngsIHBvaW50c1syXS55KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBr
Q0dQYXRoRWxlbWVudENsb3NlU3VicGF0aDoKLSAgICAgICAgdHlwZVN0cmluZyA9IENGU1RSKCJY
Iik7IGJyZWFrOwotICAgIH0KKyAgICBzdGF0aWMgQ0dDb250ZXh0UmVmIHNjcmF0Y2ggPSAwOwor
ICAgIGlmICghc2NyYXRjaCkgeworICAgICAgICBDRk11dGFibGVEYXRhUmVmIGVtcHR5ID0gQ0ZE
YXRhQ3JlYXRlTXV0YWJsZShOVUxMLCAwKTsKKyAgICAgICAgQ0dEYXRhQ29uc3VtZXJSZWYgY29u
c3VtZXIgPSBDR0RhdGFDb25zdW1lckNyZWF0ZVdpdGhDRkRhdGEoZW1wdHkpOworICAgICAgICBz
Y3JhdGNoID0gQ0dQREZDb250ZXh0Q3JlYXRlKGNvbnN1bWVyLCBOVUxMLCBOVUxMKTsKKyAgICAg
ICAgQ0dEYXRhQ29uc3VtZXJSZWxlYXNlKGNvbnN1bWVyKTsKKyAgICAgICAgQ0ZSZWxlYXNlKGVt
cHR5KTsKKworICAgICAgICBDR0Zsb2F0IGJsYWNrWzRdID0gezAsIDAsIDAsIDF9OworICAgICAg
ICBDR0NvbnRleHRTZXRGaWxsQ29sb3Ioc2NyYXRjaCwgYmxhY2spOworICAgICAgICBDR0NvbnRl
eHRTZXRTdHJva2VDb2xvcihzY3JhdGNoLCBibGFjayk7CisgICAgIH0KKyAgICByZXR1cm4gc2Ny
YXRjaDsKIH0KIAotQ0ZTdHJpbmdSZWYgQ0ZTdHJpbmdGcm9tQ0dQYXRoKENHUGF0aFJlZiBwYXRo
KQorRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IEtS
ZW5kZXJpbmdTdHJva2VQYWludGVyJiBzdHJva2VQYWludGVyKQorIHsKKyAgICAvLyB0aGUgYmJv
eCBtaWdodCBncm93IGlmIHRoZSBwYXRoIGlzIHN0cm9rZWQuCisgICAgLy8gYW5kIENHUGF0aEdl
dEJvdW5kaW5nQm94IGRvZXNuJ3Qgc3VwcG9ydCB0aGF0LCBzbyB3ZSdsbCBoYXZlCisgICAgLy8g
dG8gbWFrZSBhbiBhbHRlcm5hdGl2ZSBjYWxsLi4uCisgCisgICAgLy8gRklYTUU6IHNpbmNlIHRo
aXMgaXMgbWFpbmx5IHVzZWQgdG8gZGVjaWRlIHdoYXQgdG8gcmVwYWludCwKKyAgICAvLyBwZXJo
YXBzIGl0IHdvdWxkIGJlIHN1ZmZpY2llbiB0byBqdXN0IG91dHNldCB0aGUgZmlsbCBiYm94IGJ5
CisgICAgLy8gdGhlIHN0cm9rZSB3aWR0aCAtIHRoYXQgc2hvdWxkIGJlIHdheSBjaGVhcGVyIGFu
ZCBzaW1wbGVyIHRoYW4KKyAgICAvLyB3aGF0IHdlIGRvIGhlcmUuCisgCisgICAgQ0dQYXRoUmVm
IGNnUGF0aCA9IHBhdGgucGxhdGZvcm1QYXRoKCk7CisKKyAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IHNjcmF0Y2hDb250ZXh0KCk7CisgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsK
KworICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKKyAgICBDR0NvbnRleHRBZGRQYXRo
KGNvbnRleHQsIGNnUGF0aCk7CisgICAgYXBwbHlTdHJva2VTdHlsZVRvQ29udGV4dChjb250ZXh0
LCBzdHJva2VQYWludGVyKTsKKyAgICBDR0NvbnRleHRSZXBsYWNlUGF0aFdpdGhTdHJva2VkUGF0
aChjb250ZXh0KTsKKyAgICBDR1JlY3QgYm94ID0gQ0dDb250ZXh0R2V0UGF0aEJvdW5kaW5nQm94
KGNvbnRleHQpOworICAgICAgICAKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQp
OworCisgICAgcmV0dXJuIEZsb2F0UmVjdChib3gpOworfQorCitib29sIHBhdGhDb250YWluc1Bv
aW50KENHTXV0YWJsZVBhdGhSZWYgY2dQYXRoLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgQ0dQ
YXRoRHJhd2luZ01vZGUgZHJhd01vZGUpCiB7Ci0gICAgaWYgKCFwYXRoKQotICAgICAgICByZXR1
cm4gMDsKKyAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gc2NyYXRjaENvbnRleHQoKTsKKyAgIENH
Q29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisgICAKKyAgIENHQ29udGV4dEJlZ2luUGF0aChj
b250ZXh0KTsKKyAgIENHQ29udGV4dEFkZFBhdGgoY29udGV4dCwgY2dQYXRoKTsKKyAgIGJvb2wg
aGl0U3VjY2VzcyA9IENHQ29udGV4dFBhdGhDb250YWluc1BvaW50KGNvbnRleHQsIHBvaW50LCBk
cmF3TW9kZSk7CiAKLSAgICBDRk11dGFibGVTdHJpbmdSZWYgc3RyaW5nID0gQ0ZTdHJpbmdDcmVh
dGVNdXRhYmxlKE5VTEwsIDApOwotICAgIENHUGF0aEFwcGx5KHBhdGgsIHN0cmluZywgQ0dQYXRo
VG9DRlN0cmluZ0FwcGxpZXJGdW5jdGlvbik7CisgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNv
bnRleHQpOwogCi0gICAgcmV0dXJuIHN0cmluZzsKKyAgIHJldHVybiBoaXRTdWNjZXNzOwogfQog
CiB9CkluZGV4OiAvVXNlcnMvcndsYnVpcy9xdWFydHovS0NhbnZhc1Jlc291cmNlc1F1YXJ0ei5t
bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSAvVXNlcnMvcndsYnVpcy9xdWFydHovS0NhbnZhc1Jlc291cmNlc1F1
YXJ0ei5tbQkocmV2aXNpb24gMTYwMzgpCisrKyAvVXNlcnMvcndsYnVpcy9xdWFydHovS0NhbnZh
c1Jlc291cmNlc1F1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNiBAQAogI2lt
cG9ydCAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW1wb3J0ICJLQ2FudmFzRmlsdGVyUXVhcnR6Lmgi
CiAjaW1wb3J0ICJLQ2FudmFzTWFza2VyUXVhcnR6LmgiCi0jaW1wb3J0ICJLQ2FudmFzUGF0aFF1
YXJ0ei5oIgogI2ltcG9ydCAiS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oIgogI2ltcG9ydCAiUXVh
cnR6U3VwcG9ydC5oIgogCkBAIC00Niw3ICs0NSw3IEBACiAgICAgICAgIHJldHVybjsKIAogICAg
IEJPT0wgaGV0ZXJvZ2Vub3VzQ2xpcFJ1bGVzID0gTk87Ci0gICAgS0NXaW5kUnVsZSBjbGlwUnVs
ZSA9IG1fY2xpcERhdGFbMF0ud2luZFJ1bGUoKTsKKyAgICBXaW5kUnVsZSBjbGlwUnVsZSA9IG1f
Y2xpcERhdGFbMF0ud2luZFJ1bGUoKTsKIAogICAgIGNvbnRleHQtPmNsZWFyUGF0aCgpOwogCkBA
IC01Nyw4ICs1Niw3IEBACiAgICAgICAgIGlmIChkYXRhLndpbmRSdWxlKCkgIT0gY2xpcFJ1bGUp
CiAgICAgICAgICAgICBoZXRlcm9nZW5vdXNDbGlwUnVsZXMgPSBZRVM7CiAgICAgICAgIAotICAg
ICAgICBLQ2FudmFzUGF0aFF1YXJ0eiAqcGF0aCA9IHN0YXRpY19jYXN0PEtDYW52YXNQYXRoUXVh
cnR6Kj4oZGF0YS5wYXRoLmdldCgpKTsgICAgICAgIAotICAgICAgICBDR1BhdGhSZWYgY2xpcFBh
dGggPSBzdGF0aWNfY2FzdDxLQ2FudmFzUGF0aFF1YXJ0eio+KHBhdGgpLT5jZ1BhdGgoKTsKKyAg
ICAgICAgQ0dQYXRoUmVmIGNsaXBQYXRoID0gZGF0YS5wYXRoLnBsYXRmb3JtUGF0aCgpOwogCiAg
ICAgICAgIGlmIChkYXRhLmJib3hVbml0cykgewogICAgICAgICAgICAgQ0dNdXRhYmxlUGF0aFJl
ZiB0cmFuc2Zvcm1lZFBhdGggPSBDR1BhdGhDcmVhdGVNdXRhYmxlKCk7CkluZGV4OiAvVXNlcnMv
cndsYnVpcy9xdWFydHovS0NhbnZhc1BhdGhRdWFydHouaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvVXNlcnMv
cndsYnVpcy9xdWFydHovS0NhbnZhc1BhdGhRdWFydHouaAkocmV2aXNpb24gMTYwMzgpCisrKyAv
VXNlcnMvcndsYnVpcy9xdWFydHovS0NhbnZhc1BhdGhRdWFydHouaAkod29ya2luZyBjb3B5KQpA
QCAtMSw2MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA1IEFwcGxlIENvbXB1dGVy
LCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
LSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEtDYW52YXNQYXRo
UXVhcnR6X2gKLSNkZWZpbmUgS0NhbnZhc1BhdGhRdWFydHpfaAotCi0jaW5jbHVkZSA8a2NhbnZh
cy9LQ2FudmFzUGF0aC5oPgotCi10eXBlZGVmIHN0cnVjdCBDR1BhdGggKkNHTXV0YWJsZVBhdGhS
ZWY7Ci10eXBlZGVmIGNvbnN0IHN0cnVjdCBDR1BhdGggKkNHUGF0aFJlZjsKLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBLQ2FudmFzUGF0aFF1YXJ0eiA6IHB1YmxpYyBLQ2FudmFzUGF0
aCB7Ci1wdWJsaWM6Ci0gICAgS0NhbnZhc1BhdGhRdWFydHooKTsKLSAgICB2aXJ0dWFsIH5LQ2Fu
dmFzUGF0aFF1YXJ0eigpOwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3Q7
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGZsb2F0IHgsIGZsb2F0IHkpOwotICAgIHZpcnR1
YWwgdm9pZCBsaW5lVG8oZmxvYXQgeCwgZmxvYXQgeSk7Ci0gICAgdmlydHVhbCB2b2lkIGN1cnZl
VG8oZmxvYXQgeDEsIGZsb2F0IHkxLCBmbG9hdCB4MiwgZmxvYXQgeTIsIGZsb2F0IHgzLCBmbG9h
dCB5Myk7Ci0gICAgdmlydHVhbCB2b2lkIGNsb3NlU3VicGF0aCgpOwotCi0gICAgdmlydHVhbCBG
bG9hdFJlY3QgYm91bmRpbmdCb3goKTsKLSAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3Vu
ZGluZ0JveChjb25zdCBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlciYpOwotICAgIHZpcnR1YWwgYm9v
bCBjb250YWluc1BvaW50KGNvbnN0IEZsb2F0UG9pbnQmLCBLQ1dpbmRSdWxlKTsKLSAgICB2aXJ0
dWFsIGJvb2wgc3Ryb2tlQ29udGFpbnNQb2ludChjb25zdCBGbG9hdFBvaW50Jik7Ci0gICAgCi0g
ICAgQ0dQYXRoUmVmIGNnUGF0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2dQYXRoOyB9Ci0gICAgCi1w
cml2YXRlOgotICAgIENHTXV0YWJsZVBhdGhSZWYgbV9jZ1BhdGg7Ci19OwotCi19Ci0KLSNlbmRp
ZgpJbmRleDogL1VzZXJzL3J3bGJ1aXMvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gL1VzZXJzL3J3bGJ1aXMvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6LmgJKHJldmlz
aW9uIDE2MDM4KQorKysgL1VzZXJzL3J3bGJ1aXMvcXVhcnR6L0tDYW52YXNJdGVtUXVhcnR6LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDkgQEAKICAgICBLQ2FudmFzSXRlbVF1YXJ0eihS
ZW5kZXJTdHlsZSosIFNWR1N0eWxlZEVsZW1lbnQqKTsKICAgICB2aXJ0dWFsIH5LQ2FudmFzSXRl
bVF1YXJ0eigpIHsgfQogICAgIAotICAgIHZpcnR1YWwgdm9pZCBkcmF3TWFya2Vyc0lmTmVlZGVk
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEtDYW52YXNQYXRoKikg
Y29uc3Q7CisgICAgdmlydHVhbCBib29sIHN0cm9rZUNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd01hcmtlcnNJZk5lZWRlZChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBQYXRoJikgY29uc3Q7CisgICAg
dmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tlQkJveCgpIGNvbnN0OwogfTsKIAogfQpJbmRleDogL1Vz
ZXJzL3J3bGJ1aXMvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSAvVXNlcnMvcndsYnVpcy9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oCShyZXZpc2lv
biAxNjAzOCkKKysrIC9Vc2Vycy9yd2xidWlzL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAKICAgICB2aXJ0dWFsIEFmZmluZVRy
YW5zZm9ybSBjdG0oKSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXRoKCk7
Ci0gICAgdmlydHVhbCB2b2lkIGFkZFBhdGgoY29uc3QgS0NhbnZhc1BhdGgqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkUGF0aChjb25zdCBQYXRoJik7CiAKICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29u
dGV4dCogY3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CiAgICAgCkBAIC03OCwxNiArNzgsMTMgQEAK
ICAgICBDR0NvbnRleHRSZWYgY3VycmVudENHQ29udGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwg
S1JlbmRlcmluZ0RldmljZUNvbnRleHQgKmNvbnRleHRGb3JJbWFnZShLQ2FudmFzSW1hZ2UgKikg
Y29uc3Q7CiAKLSAgICB2aXJ0dWFsIERlcHJlY2F0ZWRTdHJpbmcgc3RyaW5nRm9yUGF0aChjb25z
dCBLQ2FudmFzUGF0aCogcGF0aCk7Ci0KICAgICAvLyBSZXNvdXJjZSBjcmVhdGlvbgogICAgIHZp
cnR1YWwgS0NhbnZhc1Jlc291cmNlICpjcmVhdGVSZXNvdXJjZShjb25zdCBLQ1Jlc291cmNlVHlw
ZSAmdHlwZSkgY29uc3Q7CiAgICAgdmlydHVhbCBLUmVuZGVyaW5nUGFpbnRTZXJ2ZXIgKmNyZWF0
ZVBhaW50U2VydmVyKGNvbnN0IEtDUGFpbnRTZXJ2ZXJUeXBlICZ0eXBlKSBjb25zdDsKICAgICB2
aXJ0dWFsIEtDYW52YXNGaWx0ZXJFZmZlY3QgKmNyZWF0ZUZpbHRlckVmZmVjdChjb25zdCBLQ0Zp
bHRlckVmZmVjdFR5cGUgJnR5cGUpIGNvbnN0OwotICAgIHZpcnR1YWwgS0NhbnZhc1BhdGgqIGNy
ZWF0ZVBhdGgoKSBjb25zdDsKICAgICAKICAgICAvLyBpdGVtIGNyZWF0aW9uCi0gICAgdmlydHVh
bCBSZW5kZXJQYXRoICpjcmVhdGVJdGVtKFJlbmRlckFyZW5hICphcmVuYSwgUmVuZGVyU3R5bGUg
KnN0eWxlLCBTVkdTdHlsZWRFbGVtZW50ICpub2RlLCBLQ2FudmFzUGF0aCogcGF0aCkgY29uc3Q7
CisgICAgdmlydHVhbCBSZW5kZXJQYXRoICpjcmVhdGVJdGVtKFJlbmRlckFyZW5hICphcmVuYSwg
UmVuZGVyU3R5bGUgKnN0eWxlLCBTVkdTdHlsZWRFbGVtZW50ICpub2RlLCBjb25zdCBQYXRoJiBw
YXRoKSBjb25zdDsKIAogICAgIC8vIGZpbHRlcnMgKG1vc3RseSBkZWJ1Z2dpbmcpCiAgICAgc3Rh
dGljIGJvb2wgZmlsdGVyc0VuYWJsZWQoKTsKSW5kZXg6IC9Vc2Vycy9yd2xidWlzL3F1YXJ0ei9R
dWFydHpTdXBwb3J0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gL1VzZXJzL3J3bGJ1aXMvcXVhcnR6L1F1YXJ0
elN1cHBvcnQuaAkocmV2aXNpb24gMTYwMzgpCisrKyAvVXNlcnMvcndsYnVpcy9xdWFydHovUXVh
cnR6U3VwcG9ydC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw5ICsyOSwxNSBAQAogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK3R5cGVkZWYgc3RydWN0IENHUGF0aCAqQ0dNdXRhYmxlUGF0aFJlZjsK
KworY2xhc3MgUGF0aDsKIGNsYXNzIEludFJlY3Q7CitjbGFzcyBGbG9hdFJlY3Q7CitjbGFzcyBG
bG9hdFBvaW50OwogY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CitjbGFz
cyBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRlcjsKIAogI2lmbmRlZiBOREVCVUcKIHZvaWQgZGVidWdE
dW1wQ0dJbWFnZVRvRmlsZShOU1N0cmluZyAqZmlsZW5hbWUsIENHSW1hZ2VSZWYgaW1hZ2UsIGlu
dCB3aWR0aCwgaW50IGhlaWdodCk7CkBAIC00Niw2ICs1Miw5IEBACiB2b2lkIGFwcGx5U3Ryb2tl
U3R5bGVUb0NvbnRleHQoQ0dDb250ZXh0UmVmLCBjb25zdCBLUmVuZGVyaW5nU3Ryb2tlUGFpbnRl
ciYpOwogdm9pZCBhcHBseVN0cm9rZVN0eWxlVG9Db250ZXh0KENHQ29udGV4dFJlZiwgUmVuZGVy
U3R5bGUqLCBjb25zdCBSZW5kZXJPYmplY3QqKTsKIAorRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5n
Qm94KGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IEtSZW5kZXJpbmdTdHJva2VQYWludGVyJiBzdHJv
a2VQYWludGVyKTsKK2Jvb2wgcGF0aENvbnRhaW5zUG9pbnQoQ0dNdXRhYmxlUGF0aFJlZiBjZ1Bh
dGgsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBDR1BhdGhEcmF3aW5nTW9kZSBkcmF3TW9kZSk7
CisKIHN0YXRpYyBpbmxpbmUgQ0dMaW5lQ2FwIENHTGluZUNhcEZyb21LQyhLQ0NhcFN0eWxlIGNh
cCkKIHsKICAgICBpZiAoY2FwID09IENBUF9CVVRUKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9j
Zy9QYXRoQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vY2cvUGF0aENHLmNw
cAkocmV2aXNpb24gMTYwMzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2NnL1BhdGhDRy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBQTEFURk9STShDRykKIAogI2luY2x1
ZGUgIkZsb2F0UmVjdC5oIgorI2luY2x1ZGUgIkRlcHJlY2F0ZWRTdHJpbmcuaCIKICNpbmNsdWRl
IDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNTYsOSArNTcsOSBAQAogICAgIHJldHVybiAqdGhpczsKIH0KIAotYm9v
bCBQYXRoOjpjb250YWlucyhjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKK2Jvb2wgUGF0
aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2ludCAmcG9pbnQsIFdpbmRSdWxlIHJ1bGUpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIENHUGF0aENvbnRhaW5zUG9pbnQobV9wYXRoLCAwLCBwb2ludCwgZmFs
c2UpOworICAgIHJldHVybiBDR1BhdGhDb250YWluc1BvaW50KG1fcGF0aCwgMCwgcG9pbnQsIHJ1
bGUgPT0gUlVMRV9FVkVOT0REID8gdHJ1ZSA6IGZhbHNlKTsKIH0KIAogdm9pZCBQYXRoOjp0cmFu
c2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQpAQCAtMTI2LDYgKzEyNyw2MyBAQAogICAgIG1f
cGF0aCA9IENHUGF0aENyZWF0ZU11dGFibGUoKTsKIH0KIAorYm9vbCBQYXRoOjppc0VtcHR5KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gQ0dQYXRoSXNFbXB0eShtX3BhdGgpOworIH0KKwordm9pZCBD
R1BhdGhUb0NGU3RyaW5nQXBwbGllckZ1bmN0aW9uKHZvaWQgKmluZm8sIGNvbnN0IENHUGF0aEVs
ZW1lbnQgKmVsZW1lbnQpCit7CisgICAgQ0ZNdXRhYmxlU3RyaW5nUmVmIHN0cmluZyA9IChDRk11
dGFibGVTdHJpbmdSZWYpaW5mbzsKKyAgICBDRlN0cmluZ1JlZiB0eXBlU3RyaW5nID0gQ0ZTVFIo
IiIpOworICAgIENHUG9pbnQgKnBvaW50cyA9IGVsZW1lbnQtPnBvaW50czsKKyAgICBzd2l0Y2go
ZWxlbWVudC0+dHlwZSkgeworICAgIGNhc2Uga0NHUGF0aEVsZW1lbnRNb3ZlVG9Qb2ludDoKKyAg
ICAgICAgQ0ZTdHJpbmdBcHBlbmRGb3JtYXQoc3RyaW5nLCAwLCBDRlNUUigiTSUuMmYsJS4yZiIp
LCBwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtD
R1BhdGhFbGVtZW50QWRkTGluZVRvUG9pbnQ6CisgICAgICAgIENGU3RyaW5nQXBwZW5kRm9ybWF0
KHN0cmluZywgMCwgQ0ZTVFIoIkwlLjJmLCUuMmYiKSwgcG9pbnRzWzBdLngsIHBvaW50c1swXS55
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBrQ0dQYXRoRWxlbWVudEFkZFF1YWRDdXJ2ZVRv
UG9pbnQ6CisgICAgICAgIENGU3RyaW5nQXBwZW5kRm9ybWF0KHN0cmluZywgMCwgQ0ZTVFIoIlEl
LjJmLCUuMmYsJS4yZiwlLjJmIiksCisgICAgICAgICAgICAgICAgcG9pbnRzWzBdLngsIHBvaW50
c1swXS55LCBwb2ludHNbMV0ueCwgcG9pbnRzWzFdLnkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIGtDR1BhdGhFbGVtZW50QWRkQ3VydmVUb1BvaW50OgorICAgICAgICBDRlN0cmluZ0FwcGVu
ZEZvcm1hdChzdHJpbmcsIDAsIENGU1RSKCJDJS4yZiwlLjJmLCUuMmYsJS4yZiwlLjJmLCUuMmYi
KSwKKyAgICAgICAgICAgICAgICBwb2ludHNbMF0ueCwgcG9pbnRzWzBdLnksIHBvaW50c1sxXS54
LCBwb2ludHNbMV0ueSwKKyAgICAgICAgICAgICAgICBwb2ludHNbMl0ueCwgcG9pbnRzWzJdLnkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIGtDR1BhdGhFbGVtZW50Q2xvc2VTdWJwYXRoOgor
ICAgICAgICB0eXBlU3RyaW5nID0gQ0ZTVFIoIlgiKTsgYnJlYWs7CisgICAgfQogfQogCitDRlN0
cmluZ1JlZiBDRlN0cmluZ0Zyb21DR1BhdGgoQ0dQYXRoUmVmIHBhdGgpCit7CisgICAgaWYgKCFw
YXRoKQorICAgICAgICByZXR1cm4gMDsKKworICAgIENGTXV0YWJsZVN0cmluZ1JlZiBzdHJpbmcg
PSBDRlN0cmluZ0NyZWF0ZU11dGFibGUoTlVMTCwgMCk7CisgICAgQ0dQYXRoQXBwbHkocGF0aCwg
c3RyaW5nLCBDR1BhdGhUb0NGU3RyaW5nQXBwbGllckZ1bmN0aW9uKTsKKworICAgIHJldHVybiBz
dHJpbmc7Cit9CisKKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayBQYXRoIE1hbmFnZW1l
bnQKKworRGVwcmVjYXRlZFN0cmluZyBQYXRoOjpkZWJ1Z1N0cmluZygpIGNvbnN0Cit7CisgICAg
RGVwcmVjYXRlZFN0cmluZyByZXN1bHQ7CisgICAgaWYgKCFpc0VtcHR5KCkpIHsKKyAgICAgICAg
Q0ZTdHJpbmdSZWYgcGF0aFN0cmluZyA9IENGU3RyaW5nRnJvbUNHUGF0aChtX3BhdGgpOworICAg
ICAgICByZXN1bHQgPSBEZXByZWNhdGVkU3RyaW5nOjpmcm9tQ0ZTdHJpbmcocGF0aFN0cmluZyk7
CisgICAgICAgIENGUmVsZWFzZShwYXRoU3RyaW5nKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworfQorCiAjZW5kaWYgLy8gUExBVEZPUk0oQ0cpCg==
</data>
<flag name="review"
          id="3223"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10250</attachid>
            <date>2006-08-27 00:41:11 -0700</date>
            <delta_ts>2006-08-27 02:19:55 -0700</delta_ts>
            <desc>Qt specific KCanvasPath removal</desc>
            <filename>removal-qt.diff</filename>
            <type>text/plain</type>
            <size>11972</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS0NhbnZhc0NsaXBwZXJRdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LQ2FudmFzQ2xpcHBlclF0LmNw
cAkocmV2aXNpb24gMTYwNTMpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tDYW52YXND
bGlwcGVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw3ICsyMyw2IEBACiAKICNpbmNsdWRl
ICJjb25maWcuaCIKIAotI2luY2x1ZGUgIktDYW52YXNQYXRoUXQuaCIKICNpbmNsdWRlICJLQ2Fu
dmFzQ2xpcHBlclF0LmgiCiAjaW5jbHVkZSAiS1JlbmRlcmluZ0RldmljZVF0LmgiCiAKQEAgLTQx
LDE0ICs0MCwxNCBAQCB2b2lkIEtDYW52YXNDbGlwcGVyUXQ6OmFwcGx5Q2xpcChjb25zdCBGCiAg
ICAgUVBhaW50ZXJQYXRoIG5ld1BhdGg7CiAKICAgICBib29sIGhldGVyb2dlbm91c0NsaXBSdWxl
cyA9IGZhbHNlOwotICAgIEtDV2luZFJ1bGUgY2xpcFJ1bGUgPSBtX2NsaXBEYXRhWzBdLndpbmRS
dWxlKCk7CisgICAgV2luZFJ1bGUgY2xpcFJ1bGUgPSBtX2NsaXBEYXRhWzBdLndpbmRSdWxlKCk7
CiAKICAgICBmb3IgKHVuc2lnbmVkIGludCB4ID0gMDsgeCA8IG1fY2xpcERhdGEuY291bnQoKTsg
eCsrKSB7CiAgICAgICAgIEtDQ2xpcERhdGEgY2xpcERhdGEgPSBtX2NsaXBEYXRhW3hdOwogICAg
ICAgICBpZiAoY2xpcERhdGEud2luZFJ1bGUoKSAhPSBjbGlwUnVsZSkKICAgICAgICAgICAgIGhl
dGVyb2dlbm91c0NsaXBSdWxlcyA9IHRydWU7CiAgICAgICAgCi0gICAgICAgIFFQYWludGVyUGF0
aCBwYXRoID0gc3RhdGljX2Nhc3Q8S0NhbnZhc1BhdGhRdCo+KGNsaXBEYXRhLnBhdGguZ2V0KCkp
LT5xdFBhdGgoKTsgCisgICAgICAgIFFQYWludGVyUGF0aCBwYXRoID0gKihjbGlwRGF0YS5wYXRo
LnBsYXRmb3JtUGF0aCgpKTsKICAgICAgICAgaWYgKHBhdGguaXNFbXB0eSgpKQogICAgICAgICAg
ICAgY29udGludWU7CiAKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS0NhbnZhc1Bh
dGhRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LQ2FudmFz
UGF0aFF0LmNwcAkocmV2aXNpb24gMTYwNTMpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0
L0tDYW52YXNQYXRoUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCwxMCArNjQsNDIgQEAgRmxv
YXRSZWN0IEtDYW52YXNQYXRoUXQ6OmJvdW5kaW5nQm94KCkKICAgICByZXR1cm4gRmxvYXRSZWN0
KG1fcGF0aC5ib3VuZGluZ1JlY3QoKSk7CiB9CiAKK3N0YXRpYyBRUGFpbnRlclBhdGggZ2V0UGF0
aFN0cm9rZShjb25zdCBRUGFpbnRlclBhdGggJnBhdGgsIGNvbnN0IEtSZW5kZXJpbmdTdHJva2VQ
YWludGVyICZzdHJva2VQYWludGVyKQoreworICAgIFFQYWludGVyUGF0aFN0cm9rZXIgczsKKyAg
ICBzLnNldFdpZHRoKHN0cm9rZVBhaW50ZXIuc3Ryb2tlV2lkdGgoKSk7CisgICAgaWYoc3Ryb2tl
UGFpbnRlci5zdHJva2VDYXBTdHlsZSgpID09IENBUF9CVVRUKQorICAgICAgICBzLnNldENhcFN0
eWxlKFF0OjpGbGF0Q2FwKTsKKyAgICBlbHNlIGlmKHN0cm9rZVBhaW50ZXIuc3Ryb2tlQ2FwU3R5
bGUoKSA9PSBDQVBfUk9VTkQpCisgICAgICAgIHMuc2V0Q2FwU3R5bGUoUXQ6OlJvdW5kQ2FwKTsK
KworICAgIGlmKHN0cm9rZVBhaW50ZXIuc3Ryb2tlSm9pblN0eWxlKCkgPT0gSk9JTl9NSVRFUikg
eworICAgICAgICBzLnNldEpvaW5TdHlsZShRdDo6TWl0ZXJKb2luKTsKKyAgICAgICAgcy5zZXRN
aXRlckxpbWl0KChxcmVhbClzdHJva2VQYWludGVyLnN0cm9rZU1pdGVyTGltaXQoKSk7CisgICAg
fSBlbHNlIGlmKHN0cm9rZVBhaW50ZXIuc3Ryb2tlSm9pblN0eWxlKCkgPT0gSk9JTl9ST1VORCkK
KyAgICAgICAgcy5zZXRKb2luU3R5bGUoUXQ6OlJvdW5kSm9pbik7CisKKyAgICBLQ0Rhc2hBcnJh
eSBkYXNoZXMgPSBzdHJva2VQYWludGVyLmRhc2hBcnJheSgpOworICAgIHVuc2lnbmVkIGludCBk
YXNoTGVuZ3RoID0gIWRhc2hlcy5pc0VtcHR5KCkgPyBkYXNoZXMuY291bnQoKSA6IDA7CisgICAg
aWYoZGFzaExlbmd0aCkKKyAgICB7CisgICAgICAgIFFWZWN0b3I8cXJlYWw+IHBhdHRlcm47Cisg
ICAgICAgIHVuc2lnbmVkIGludCBjb3VudCA9IChkYXNoTGVuZ3RoICUgMikgPT0gMCA/IGRhc2hM
ZW5ndGggOiBkYXNoTGVuZ3RoICogMjsKKworICAgICAgICBmb3IodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKykKKyAgICAgICAgICAgIHBhdHRlcm4uYXBwZW5kKGRhc2hlc1tpICUg
ZGFzaExlbmd0aF0gLyAoZmxvYXQpcy53aWR0aCgpKTsKKworICAgICAgICBzLnNldERhc2hQYXR0
ZXJuKHBhdHRlcm4pOworICAgICAgICAvLyBUT0RPOiBkYXNoLW9mZnNldCwgZG9lcy93aWxsIHF0
NCBBUEkgYWxsb3cgaXQ/IChSb2IpCisgICAgfQorCisgICAgcmV0dXJuIHMuY3JlYXRlU3Ryb2tl
KHBhdGgpOworfQorCiBGbG9hdFJlY3QgS0NhbnZhc1BhdGhRdDo6c3Ryb2tlQm91bmRpbmdCb3go
Y29uc3QgS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXImIHN0cm9rZVBhaW50ZXIpCiB7Ci0gICAgcURl
YnVnKCJLQ2FudmFzUGF0aFF0OjpzdHJva2VCb3VuZGluZ0JveCgpIFRPRE8hIik7Ci0gICAgcmV0
dXJuIGJvdW5kaW5nQm94KCk7CisgICAgUVBhaW50ZXJQYXRoIG91dGxpbmUgPSBnZXRQYXRoU3Ry
b2tlKG1fcGF0aCwgc3Ryb2tlUGFpbnRlcik7CisgICAgcmV0dXJuIG91dGxpbmUuYm91bmRpbmdS
ZWN0KCk7CiB9CiAKIGJvb2wgS0NhbnZhc1BhdGhRdDo6c3Ryb2tlQ29udGFpbnNQb2ludChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvS1Jl
bmRlcmluZ0RldmljZVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNl
L3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5jcHAJKHJldmlzaW9uIDE2MDUzKQorKysgV2ViQ29yZS9r
Y2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw3ICsyNCw2IEBACiAKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVy
UGF0aFF0LmgiCi0jaW5jbHVkZSAiS0NhbnZhc1BhdGhRdC5oIgogI2luY2x1ZGUgIkFmZmluZVRy
YW5zZm9ybS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIktDYW52
YXNDbGlwcGVyUXQuaCIKQEAgLTczLDkgKzcyLDkgQEAgdm9pZCBLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dFF0OjpjbGVhclBhdAogICAgIG1fcGF0aCA9IFFQYWludGVyUGF0aCgpOwogfQogCi12b2lk
IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6OmFkZFBhdGgoY29uc3QgS0NhbnZhc1BhdGgqIHBh
dGgpCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6OmFkZFBhdGgoY29uc3QgUGF0aCYg
cGF0aCkKIHsKLSAgICBtX3BhdGguYWRkUGF0aChzdGF0aWNfY2FzdDxjb25zdCBLQ2FudmFzUGF0
aFF0Kj4ocGF0aCktPnF0UGF0aCgpKTsKKyAgICBtX3BhdGguYWRkUGF0aCgqKHBhdGgucGxhdGZv
cm1QYXRoKCkpKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0KiBLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dFF0OjpjcmVhdGVHcmFwaGljc0NvbnRleHQoKQpAQCAtOTMsNyArOTIsNyBAQCBRUmVjdEYgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHRRdDo6cGF0aEJCCiAgICAgcmV0dXJuIG1fcGF0aC5ib3VuZGlu
Z1JlY3QoKTsKIH0KIAotdm9pZCBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF0OjpzZXRGaWxsUnVs
ZShLQ1dpbmRSdWxlIHJ1bGUpCit2b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXQ6OnNldEZp
bGxSdWxlKFdpbmRSdWxlIHJ1bGUpCiB7CiAgICAgbV9wYXRoLnNldEZpbGxSdWxlKHJ1bGUgPT0g
UlVMRV9FVkVOT0REID8gUXQ6Ok9kZEV2ZW5GaWxsIDogUXQ6OldpbmRpbmdGaWxsKTsKIH0KQEAg
LTE0MSwxMiArMTQwLDYgQEAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIEtSZW5kZXJpbmdEZXZp
YwogICAgIHJldHVybiAwOwogfQogCi1EZXByZWNhdGVkU3RyaW5nIEtSZW5kZXJpbmdEZXZpY2VR
dDo6c3RyaW5nRm9yUGF0aChjb25zdCBLQ2FudmFzUGF0aCogcGF0aCkKLXsKLSAgICBxRGVidWco
IktSZW5kZXJpbmdEZXZpY2VRdDo6c3RyaW5nRm9yUGF0aCgpIFRPRE8hIik7Ci0gICAgcmV0dXJu
IDA7Ci19Ci0KIC8vIFJlc291cmNlIGNyZWF0aW9uCiBLQ2FudmFzUmVzb3VyY2UqIEtSZW5kZXJp
bmdEZXZpY2VRdDo6Y3JlYXRlUmVzb3VyY2UoY29uc3QgS0NSZXNvdXJjZVR5cGUmIHR5cGUpIGNv
bnN0CiB7CkBAIC0xOTAsMTMgKzE4Myw4IEBAIEtDYW52YXNGaWx0ZXJFZmZlY3QqIEtSZW5kZXJp
bmdEZXZpY2VRdDoKICAgICByZXR1cm4gMDsKIH0KIAotS0NhbnZhc1BhdGgqIEtSZW5kZXJpbmdE
ZXZpY2VRdDo6Y3JlYXRlUGF0aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG5ldyBLQ2FudmFzUGF0
aFF0KCk7Ci19Ci0KIC8vIGl0ZW0gY3JlYXRpb24KLVJlbmRlclBhdGgqIEtSZW5kZXJpbmdEZXZp
Y2VRdDo6Y3JlYXRlSXRlbShSZW5kZXJBcmVuYSogYXJlbmEsIFJlbmRlclN0eWxlKiBzdHlsZSwg
U1ZHU3R5bGVkRWxlbWVudCogbm9kZSwgS0NhbnZhc1BhdGgqIHBhdGgpIGNvbnN0CitSZW5kZXJQ
YXRoKiBLUmVuZGVyaW5nRGV2aWNlUXQ6OmNyZWF0ZUl0ZW0oUmVuZGVyQXJlbmEqIGFyZW5hLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIFNWR1N0eWxlZEVsZW1lbnQqIG5vZGUsIGNvbnN0IFBhdGgmIHBh
dGgpIGNvbnN0CiB7CiAgICAgUmVuZGVyUGF0aCogaXRlbSA9IG5ldyAoYXJlbmEpIFJlbmRlclBh
dGhRdChzdHlsZSwgbm9kZSk7CiAgICAgaXRlbS0+c2V0UGF0aChwYXRoKTsKSW5kZXg6IFdlYkNv
cmUva2NhbnZhcy9kZXZpY2UvcXQvS1JlbmRlcmluZ0RldmljZVF0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9LUmVuZGVyaW5nRGV2aWNlUXQuaAkocmV2aXNpb24g
MTYwNTMpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L0tSZW5kZXJpbmdEZXZpY2VRdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0Myw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIElu
dFJlY3QgbWFwVG9WaXN1YWwoY29uc3QgSW50UmVjdCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyUGF0aCgpOwotICAgIHZpcnR1YWwgdm9pZCBhZGRQYXRoKGNvbnN0IEtDYW52YXNQYXRoKik7
CisgICAgdmlydHVhbCB2b2lkIGFkZFBhdGgoY29uc3QgUGF0aCYpOwogCiAgICAgdmlydHVhbCBH
cmFwaGljc0NvbnRleHQqIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwogICAgIApAQCAtNTEsNyAr
NTEsNyBAQCBwdWJsaWM6CiAgICAgUVBhaW50ZXImIHBhaW50ZXIoKTsKICAgICBRUmVjdEYgcGF0
aEJCb3goKSBjb25zdDsKIAotICAgIHZvaWQgc2V0RmlsbFJ1bGUoS0NXaW5kUnVsZSk7CisgICAg
dm9pZCBzZXRGaWxsUnVsZShXaW5kUnVsZSk7CiAKICAgICB2b2lkIGZpbGxQYXRoKCk7CiAgICAg
dm9pZCBzdHJva2VQYXRoKCk7CkBAIC03NiwxNiArNzYsMTMgQEAgcHVibGljOgogICAgIEtSZW5k
ZXJpbmdEZXZpY2VDb250ZXh0UXQqIHF0Q29udGV4dCgpIGNvbnN0OwogICAgIHZpcnR1YWwgS1Jl
bmRlcmluZ0RldmljZUNvbnRleHQqIGNvbnRleHRGb3JJbWFnZShLQ2FudmFzSW1hZ2UqKSBjb25z
dDsKIAotICAgIHZpcnR1YWwgRGVwcmVjYXRlZFN0cmluZyBzdHJpbmdGb3JQYXRoKGNvbnN0IEtD
YW52YXNQYXRoKik7Ci0KICAgICAvLyBSZXNvdXJjZSBjcmVhdGlvbgogICAgIHZpcnR1YWwgS0Nh
bnZhc1Jlc291cmNlKiBjcmVhdGVSZXNvdXJjZShjb25zdCBLQ1Jlc291cmNlVHlwZSYpIGNvbnN0
OwogICAgIHZpcnR1YWwgS1JlbmRlcmluZ1BhaW50U2VydmVyKiBjcmVhdGVQYWludFNlcnZlcihj
b25zdCBLQ1BhaW50U2VydmVyVHlwZSYpIGNvbnN0OwogICAgIHZpcnR1YWwgS0NhbnZhc0ZpbHRl
ckVmZmVjdCogY3JlYXRlRmlsdGVyRWZmZWN0KGNvbnN0IEtDRmlsdGVyRWZmZWN0VHlwZSYpIGNv
bnN0OwotICAgIHZpcnR1YWwgS0NhbnZhc1BhdGgqIGNyZWF0ZVBhdGgoKSBjb25zdDsKIAogICAg
IC8vIGl0ZW0gY3JlYXRpb24KLSAgICB2aXJ0dWFsIFJlbmRlclBhdGgqIGNyZWF0ZUl0ZW0oUmVu
ZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSosIFNWR1N0eWxlZEVsZW1lbnQqLCBLQ2FudmFzUGF0aCop
IGNvbnN0OworICAgIHZpcnR1YWwgUmVuZGVyUGF0aCogY3JlYXRlSXRlbShSZW5kZXJBcmVuYSos
IFJlbmRlclN0eWxlKiwgU1ZHU3R5bGVkRWxlbWVudCosIGNvbnN0IFBhdGgmKSBjb25zdDsKIH07
CiAKIH0KSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvUmVuZGVyUGF0aFF0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L1JlbmRlclBhdGhRdC5jcHAJ
KHJldmlzaW9uIDE2MDUzKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRo
UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMywxMSBAQAogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyUGF0aFF0LmgiCisjaW5jbHVkZSAiS0NhbnZhc1JlbmRl
cmluZ1N0eWxlLmgiCisjaW5jbHVkZSAiS1JlbmRlcmluZ1N0cm9rZVBhaW50ZXIuaCIKIAogI2lu
Y2x1ZGUgPFFEZWJ1Zz4KKyNpbmNsdWRlIDxRUGFpbnRlclBhdGhTdHJva2VyPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgCkBAIC0zMywxMSArMzYsNjEgQEAgUmVuZGVyUGF0aFF0OjpSZW5k
ZXJQYXRoUXQoUmVuZGVyU3R5bGUqIAogewogfQogCi12b2lkIFJlbmRlclBhdGhRdDo6ZHJhd01h
cmtlcnNJZk5lZWRlZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBL
Q2FudmFzUGF0aCopIGNvbnN0Cit2b2lkIFJlbmRlclBhdGhRdDo6ZHJhd01hcmtlcnNJZk5lZWRl
ZChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBQYXRoJikgY29uc3QK
IHsKICAgICBxRGVidWcoIlJlbmRlclBhdGhRdDo6ZHJhd01hcmtlcnNJZk5lZWRlZCgpIFRPRE8h
Iik7CiB9CiAKK2Jvb2wgUmVuZGVyUGF0aFF0OjpzdHJva2VDb250YWlucyhjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBpZiAocGF0aCgpLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFLU1ZHUGFpbnRlckZhY3Rvcnk6OnN0cm9rZVBhaW50
U2VydmVyKHN0eWxlKCksIHRoaXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBRUGFpbnRlclBhdGggZ2V0UGF0aFN0cm9rZShjb25zdCBR
UGFpbnRlclBhdGggJnBhdGgsIGNvbnN0IEtSZW5kZXJpbmdTdHJva2VQYWludGVyICZzdHJva2VQ
YWludGVyKQoreworICAgIFFQYWludGVyUGF0aFN0cm9rZXIgczsKKyAgICBzLnNldFdpZHRoKHN0
cm9rZVBhaW50ZXIuc3Ryb2tlV2lkdGgoKSk7CisgICAgaWYoc3Ryb2tlUGFpbnRlci5zdHJva2VD
YXBTdHlsZSgpID09IENBUF9CVVRUKQorICAgICAgICBzLnNldENhcFN0eWxlKFF0OjpGbGF0Q2Fw
KTsKKyAgICBlbHNlIGlmKHN0cm9rZVBhaW50ZXIuc3Ryb2tlQ2FwU3R5bGUoKSA9PSBDQVBfUk9V
TkQpCisgICAgICAgIHMuc2V0Q2FwU3R5bGUoUXQ6OlJvdW5kQ2FwKTsKKworICAgIGlmKHN0cm9r
ZVBhaW50ZXIuc3Ryb2tlSm9pblN0eWxlKCkgPT0gSk9JTl9NSVRFUikgeworICAgICAgICBzLnNl
dEpvaW5TdHlsZShRdDo6TWl0ZXJKb2luKTsKKyAgICAgICAgcy5zZXRNaXRlckxpbWl0KChxcmVh
bClzdHJva2VQYWludGVyLnN0cm9rZU1pdGVyTGltaXQoKSk7CisgICAgfSBlbHNlIGlmKHN0cm9r
ZVBhaW50ZXIuc3Ryb2tlSm9pblN0eWxlKCkgPT0gSk9JTl9ST1VORCkKKyAgICAgICAgcy5zZXRK
b2luU3R5bGUoUXQ6OlJvdW5kSm9pbik7CisKKyAgICBLQ0Rhc2hBcnJheSBkYXNoZXMgPSBzdHJv
a2VQYWludGVyLmRhc2hBcnJheSgpOworICAgIHVuc2lnbmVkIGludCBkYXNoTGVuZ3RoID0gIWRh
c2hlcy5pc0VtcHR5KCkgPyBkYXNoZXMuY291bnQoKSA6IDA7CisgICAgaWYoZGFzaExlbmd0aCkK
KyAgICB7CisgICAgICAgIFFWZWN0b3I8cXJlYWw+IHBhdHRlcm47CisgICAgICAgIHVuc2lnbmVk
IGludCBjb3VudCA9IChkYXNoTGVuZ3RoICUgMikgPT0gMCA/IGRhc2hMZW5ndGggOiBkYXNoTGVu
Z3RoICogMjsKKworICAgICAgICBmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KykKKyAgICAgICAgICAgIHBhdHRlcm4uYXBwZW5kKGRhc2hlc1tpICUgZGFzaExlbmd0aF0gLyAo
ZmxvYXQpcy53aWR0aCgpKTsKKworICAgICAgICBzLnNldERhc2hQYXR0ZXJuKHBhdHRlcm4pOwor
ICAgICAgICAvLyBUT0RPOiBkYXNoLW9mZnNldCwgZG9lcy93aWxsIHF0NCBBUEkgYWxsb3cgaXQ/
IChSb2IpCisgICAgfQorCisgICAgcmV0dXJuIHMuY3JlYXRlU3Ryb2tlKHBhdGgpOworfQorCitG
bG9hdFJlY3QgUmVuZGVyUGF0aFF0OjpzdHJva2VCQm94KCkgY29uc3QKK3sKKyAgICBLUmVuZGVy
aW5nU3Ryb2tlUGFpbnRlciBzdHJva2VQYWludGVyID0gS1NWR1BhaW50ZXJGYWN0b3J5OjpzdHJv
a2VQYWludGVyKHN0eWxlKCksIHRoaXMpOworICAgIFFQYWludGVyUGF0aCBvdXRsaW5lID0gZ2V0
UGF0aFN0cm9rZSgqKHBhdGgoKS5wbGF0Zm9ybVBhdGgoKSksIHN0cm9rZVBhaW50ZXIpOworICAg
IHJldHVybiBvdXRsaW5lLmJvdW5kaW5nUmVjdCgpOworfQorCiB9CiAKIC8vIHZpbTp0cz00Om5v
ZXQKSW5kZXg6IFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXQvUmVuZGVyUGF0aFF0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdC9SZW5kZXJQYXRoUXQuaAkocmV2aXNp
b24gMTYwNTMpCisrKyBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F0L1JlbmRlclBhdGhRdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMywxMSBAQCBjbGFzcyBSZW5kZXJQYXRoUXQgOiBwdWJs
aWMgUmVuZGVyUGF0aAogcHVibGljOgogICAgIFJlbmRlclBhdGhRdChSZW5kZXJTdHlsZSosIFNW
R1N0eWxlZEVsZW1lbnQqKTsKIAorICAgIHZpcnR1YWwgYm9vbCBzdHJva2VDb250YWlucyhjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3Q7CisgICAgdmlydHVhbCBGbG9hdFJlY3Qgc3Ryb2tl
QkJveCgpIGNvbnN0OworCiBwcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIGRyYXdNYXJrZXJz
SWZOZWVkZWQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3QgS0NhbnZh
c1BhdGgqKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZHJhd01hcmtlcnNJZk5lZWRlZChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFJlY3QmLCBjb25zdCBQYXRoJikgY29uc3Q7CiB9Owog
CiB9CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L1BhdGhRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXRoUXQuY3BwCShyZXZpc2lvbiAxNjA1MykKKysrIFdlYkNv
cmUvcGxhdGZvcm0vcXQvUGF0aFF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksOCArMjksMTAg
QEAKICNpbmNsdWRlICJQYXRoLmgiCiAKICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgPFFQYWludGVyUGF0aD4KICNpbmNsdWRlIDxR
TWF0cml4PgorI2luY2x1ZGUgPFFTdHJpbmc+CiAKICNpbmNsdWRlIDxtYXRoLmg+CiAKQEAgLTYx
LDkgKzYzLDE1IEBAIFBhdGgmIFBhdGg6Om9wZXJhdG9yPShjb25zdCBQYXRoJiBvdGhlcikKICAg
ICByZXR1cm4gKnRoaXM7CiB9CiAKLWJvb2wgUGF0aDo6Y29udGFpbnMoY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpIGNvbnN0Citib29sIFBhdGg6OmNvbnRhaW5zKGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBXaW5kUnVsZSBydWxlKSBjb25zdAogewotICAgIHJldHVybiBtX3BhdGgtPmNvbnRhaW5z
KHBvaW50KTsKKyAgICBRdDo6RmlsbFJ1bGUgc2F2ZWRSdWxlID0gbV9wYXRoLT5maWxsUnVsZSgp
OworICAgIG1fcGF0aC0+c2V0RmlsbFJ1bGUocnVsZSA9PSBSVUxFX0VWRU5PREQgPyBRdDo6T2Rk
RXZlbkZpbGwgOiBRdDo6V2luZGluZ0ZpbGwpOworCisgICAgYm9vbCBjb250YWlucyA9IG1fcGF0
aC0+Y29udGFpbnMocG9pbnQpOworCisgICAgbV9wYXRoLT5zZXRGaWxsUnVsZShzYXZlZFJ1bGUp
OworICAgIHJldHVybiBjb250YWluczsKIH0KIAogdm9pZCBQYXRoOjp0cmFuc2xhdGUoY29uc3Qg
RmxvYXRTaXplJiBzaXplKQpAQCAtMTcwLDYgKzE3OCw0NiBAQCB2b2lkIFBhdGg6OmNsZWFyKCkK
ICAgICAqbV9wYXRoID0gUVBhaW50ZXJQYXRoKCk7CiB9CiAKK2Jvb2wgUGF0aDo6aXNFbXB0eSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcGF0aC0+aXNFbXB0eSgpOworfQorCitTdHJpbmcgUGF0
aDo6ZGVidWdTdHJpbmcoKSBjb25zdAoreworICAgIFFTdHJpbmcgcmV0OworICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbV9wYXRoLT5lbGVtZW50Q291bnQoKTsgKytpKSB7CisgICAgICAgIGNvbnN0
IFFQYWludGVyUGF0aDo6RWxlbWVudCAmY3VyID0gbV9wYXRoLT5lbGVtZW50QXQoaSk7CisKKyAg
ICAgICAgc3dpdGNoIChjdXIudHlwZSkgeworICAgICAgICAgICAgY2FzZSBRUGFpbnRlclBhdGg6
Ok1vdmVUb0VsZW1lbnQ6CisgICAgICAgICAgICAgICAgcmV0ICs9IFFTdHJpbmcoIk0gJTEgJTIi
KS5hcmcoY3VyLngpLmFyZyhjdXIueSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIFFQYWludGVyUGF0aDo6TGluZVRvRWxlbWVudDoKKyAgICAgICAgICAgICAgICBy
ZXQgKz0gUVN0cmluZygiTCAlMSAlMiIpLmFyZyhjdXIueCkuYXJnKGN1ci55KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUVBhaW50ZXJQYXRoOjpDdXJ2ZVRvRWxl
bWVudDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBRUGFpbnRlclBhdGg6
OkVsZW1lbnQgJmMxID0gbV9wYXRoLT5lbGVtZW50QXQoaSArIDEpOworICAgICAgICAgICAgICAg
IGNvbnN0IFFQYWludGVyUGF0aDo6RWxlbWVudCAmYzIgPSBtX3BhdGgtPmVsZW1lbnRBdChpICsg
Mik7CisKKyAgICAgICAgICAgICAgICBRX0FTU0VSVChjMS50eXBlID09IFFQYWludGVyUGF0aDo6
Q3VydmVUb0RhdGFFbGVtZW50KTsKKyAgICAgICAgICAgICAgICBRX0FTU0VSVChjMi50eXBlID09
IFFQYWludGVyUGF0aDo6Q3VydmVUb0RhdGFFbGVtZW50KTsKKworICAgICAgICAgICAgICAgIHJl
dCArPSBRU3RyaW5nKCJDICUxICUyICUzICU0ICU1ICU2IikuYXJnKGN1ci54KS5hcmcoY3VyLnkp
LmFyZyhjMS54KS5hcmcoYzEueSkuYXJnKGMyLngpLmFyZyhjMi55KTsKKworICAgICAgICAgICAg
ICAgIGkgKz0gMjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGNhc2UgUVBhaW50ZXJQYXRoOjpDdXJ2ZVRvRGF0YUVsZW1lbnQ6CisgICAgICAgICAg
ICAgICAgUV9BU1NFUlQoZmFsc2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIHJldDsKK30KKwogfQogCiAvLyB2aW06IHRzPTQgc3c9NCBl
dAo=
</data>
<flag name="review"
          id="3229"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>