<?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>225377</bug_id>
          
          <creation_ts>2021-05-04 18:39:39 -0700</creation_ts>
          <short_desc>ImageBuffer with floating point logicalSize() paints into a slightly truncated destination rect</short_desc>
          <delta_ts>2022-01-07 11:49:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=227614</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=232470</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>232470</dependson>
    
    <dependson>232515</dependson>
    
    <dependson>232520</dependson>
    
    <dependson>232528</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tim Horton">thorton</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>alecflett</cc>
    
    <cc>beidson</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jsbell</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>pdr</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1756760</commentid>
    <comment_count>0</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-04 18:39:39 -0700</bug_when>
    <thetext>ImageBuffer with floating point logicalSize() paints into a slightly truncated destination rect</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756761</commentid>
    <comment_count>1</comment_count>
      <attachid>427720</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-04 18:40:25 -0700</bug_when>
    <thetext>Created attachment 427720
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756777</commentid>
    <comment_count>2</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-04 19:00:18 -0700</bug_when>
    <thetext>Of course, my find-and-replace missed some things that aren&apos;t in the Xcode project :|</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756779</commentid>
    <comment_count>3</comment_count>
      <attachid>427720</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-05-04 19:14:47 -0700</bug_when>
    <thetext>Comment on attachment 427720
Patch

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

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:830
&gt; +    auto imageLogicalSize = image-&gt;logicalSize();

I think we can inline this local variable in the call below.

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:831
&gt;      drawConsumingImageBuffer(WTFMove(image), destination, FloatRect(FloatPoint(), FloatSize(imageLogicalSize)), imagePaintingOptions);

FloatSize(imageLogicalSize) -&gt; imageLogicalSize

&gt; Source/WebCore/platform/graphics/ImageBuffer.h:87
&gt; +    virtual IntSize truncatedLogicalSize() const = 0;

Can&apos;t we use a different name instead of prefixing an existing one? I have this suggestion:

FloatSize logicalSize(); // The size in the client coordinates
IntSize imageSize();     // The size in logical pixels
IntSize backendSize();   // The size in physical (or device) pixels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756780</commentid>
    <comment_count>4</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-04 19:21:42 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #3)
&gt; Comment on attachment 427720 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427720&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:830
&gt; &gt; +    auto imageLogicalSize = image-&gt;logicalSize();
&gt; 
&gt; I think we can inline this local variable in the call below.
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:831
&gt; &gt;      drawConsumingImageBuffer(WTFMove(image), destination, FloatRect(FloatPoint(), FloatSize(imageLogicalSize)), imagePaintingOptions);
&gt; 
&gt; FloatSize(imageLogicalSize) -&gt; imageLogicalSize

All true.

&gt; &gt; Source/WebCore/platform/graphics/ImageBuffer.h:87
&gt; &gt; +    virtual IntSize truncatedLogicalSize() const = 0;
&gt; 
&gt; Can&apos;t we use a different name instead of prefixing an existing one? I have
&gt; this suggestion:
&gt; 
&gt; FloatSize logicalSize(); // The size in the client coordinates
&gt; IntSize imageSize();     // The size in logical pixels
&gt; IntSize backendSize();   // The size in physical (or device) pixels.

I don&apos;t think so. The &quot;truncated-&quot; was there sort of in the spirit of &quot;deprecated-&quot;: as a message that you&apos;re probably doing something wrong. Your name doesn&apos;t give me the uneasy feeling that I was going for :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756782</commentid>
    <comment_count>5</comment_count>
      <attachid>427720</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-05-04 19:30:49 -0700</bug_when>
    <thetext>Comment on attachment 427720
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.h:87
&gt;&gt;&gt; +    virtual IntSize truncatedLogicalSize() const = 0;
&gt;&gt; 
&gt;&gt; Can&apos;t we use a different name instead of prefixing an existing one? I have this suggestion:
&gt;&gt; 
&gt;&gt; FloatSize logicalSize(); // The size in the client coordinates
&gt;&gt; IntSize imageSize();     // The size in logical pixels
&gt;&gt; IntSize backendSize();   // The size in physical (or device) pixels.
&gt; 
&gt; I don&apos;t think so. The &quot;truncated-&quot; was there sort of in the spirit of &quot;deprecated-&quot;: as a message that you&apos;re probably doing something wrong. Your name doesn&apos;t give me the uneasy feeling that I was going for :)

&quot;deprecated-&quot;? I think we need both. When you deal with the ImageBuffer internally, e.g. getImageData() and putImageData(), you need the IntSize. And when you draw the ImageBuffer itself in the client context you need the FloatSize. So I do not think we can get it rid of the IntSize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1756784</commentid>
    <comment_count>6</comment_count>
    <who name="Tim Horton">thorton</who>
    <bug_when>2021-05-04 19:36:58 -0700</bug_when>
    <thetext>(In reply to Said Abou-Hallawa from comment #5)
&gt; Comment on attachment 427720 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=427720&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.h:87
&gt; &gt;&gt;&gt; +    virtual IntSize truncatedLogicalSize() const = 0;
&gt; &gt;&gt; 
&gt; &gt;&gt; Can&apos;t we use a different name instead of prefixing an existing one? I have this suggestion:
&gt; &gt;&gt; 
&gt; &gt;&gt; FloatSize logicalSize(); // The size in the client coordinates
&gt; &gt;&gt; IntSize imageSize();     // The size in logical pixels
&gt; &gt;&gt; IntSize backendSize();   // The size in physical (or device) pixels.
&gt; &gt; 
&gt; &gt; I don&apos;t think so. The &quot;truncated-&quot; was there sort of in the spirit of &quot;deprecated-&quot;: as a message that you&apos;re probably doing something wrong. Your name doesn&apos;t give me the uneasy feeling that I was going for :)
&gt; 
&gt; &quot;deprecated-&quot;? I think we need both. When you deal with the ImageBuffer
&gt; internally, e.g. getImageData() and putImageData(), you need the IntSize.
&gt; And when you draw the ImageBuffer itself in the client context you need the
&gt; FloatSize. So I do not think we can get it rid of the IntSize.

Maybe the few callers who rightfully need truncation do it themselves? I&apos;m not sure :)

It&apos;s definitely wrong *most* of the time, so having something attractively named &quot;imageSize&quot; that does the *mostly wrong* thing is bad, right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1757639</commentid>
    <comment_count>7</comment_count>
      <attachid>427720</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2021-05-06 14:17:45 -0700</bug_when>
    <thetext>Comment on attachment 427720
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.h:87
&gt;&gt;&gt;&gt;&gt; +    virtual IntSize truncatedLogicalSize() const = 0;
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; Can&apos;t we use a different name instead of prefixing an existing one? I have this suggestion:
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; FloatSize logicalSize(); // The size in the client coordinates
&gt;&gt;&gt;&gt; IntSize imageSize();     // The size in logical pixels
&gt;&gt;&gt;&gt; IntSize backendSize();   // The size in physical (or device) pixels.
&gt;&gt;&gt; 
&gt;&gt;&gt; I don&apos;t think so. The &quot;truncated-&quot; was there sort of in the spirit of &quot;deprecated-&quot;: as a message that you&apos;re probably doing something wrong. Your name doesn&apos;t give me the uneasy feeling that I was going for :)
&gt;&gt; 
&gt;&gt; &quot;deprecated-&quot;? I think we need both. When you deal with the ImageBuffer internally, e.g. getImageData() and putImageData(), you need the IntSize. And when you draw the ImageBuffer itself in the client context you need the FloatSize. So I do not think we can get it rid of the IntSize.
&gt; 
&gt; Maybe the few callers who rightfully need truncation do it themselves? I&apos;m not sure :)
&gt; 
&gt; It&apos;s definitely wrong *most* of the time, so having something attractively named &quot;imageSize&quot; that does the *mostly wrong* thing is bad, right?

Okay I think this is fine. Maybe later we can remove truncatedLogicalSize() and let the callers does the conversion from FloatSize to IntSize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1759133</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-11 18:40:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/77874483&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810221</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-10-29 13:50:23 -0700</bug_when>
    <thetext>This patch now has lots of conflicts and can no longer be landed. I&apos;m going to take this over as a part of https://bugs.webkit.org/show_bug.cgi?id=232470</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810223</commentid>
    <comment_count>10</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-10-29 13:50:39 -0700</bug_when>
    <thetext>*** Bug 232470 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1810230</commentid>
    <comment_count>11</comment_count>
      <attachid>427720</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-10-29 14:05:28 -0700</bug_when>
    <thetext>Comment on attachment 427720
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/ImageBuffer.h:87
&gt;&gt;&gt;&gt;&gt;&gt; +    virtual IntSize truncatedLogicalSize() const = 0;
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; Can&apos;t we use a different name instead of prefixing an existing one? I have this suggestion:
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; FloatSize logicalSize(); // The size in the client coordinates
&gt;&gt;&gt;&gt;&gt; IntSize imageSize();     // The size in logical pixels
&gt;&gt;&gt;&gt;&gt; IntSize backendSize();   // The size in physical (or device) pixels.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I don&apos;t think so. The &quot;truncated-&quot; was there sort of in the spirit of &quot;deprecated-&quot;: as a message that you&apos;re probably doing something wrong. Your name doesn&apos;t give me the uneasy feeling that I was going for :)
&gt;&gt;&gt; 
&gt;&gt;&gt; &quot;deprecated-&quot;? I think we need both. When you deal with the ImageBuffer internally, e.g. getImageData() and putImageData(), you need the IntSize. And when you draw the ImageBuffer itself in the client context you need the FloatSize. So I do not think we can get it rid of the IntSize.
&gt;&gt; 
&gt;&gt; Maybe the few callers who rightfully need truncation do it themselves? I&apos;m not sure :)
&gt;&gt; 
&gt;&gt; It&apos;s definitely wrong *most* of the time, so having something attractively named &quot;imageSize&quot; that does the *mostly wrong* thing is bad, right?
&gt; 
&gt; Okay I think this is fine. Maybe later we can remove truncatedLogicalSize() and let the callers does the conversion from FloatSize to IntSize.

I know I&apos;m 6 months too late here, but there is no situation where truncating the logical size is meaningful. There should be a helper function `physicalSize()` which multiplies the logical size by the resolution scale, and rounds up. That&apos;s what getImageData() and putImageData() should be using.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828495</commentid>
    <comment_count>12</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-01-05 19:26:33 -0800</bug_when>
    <thetext>I&apos;m going to treat this bug as the second half of https://bugs.webkit.org/show_bug.cgi?id=232470</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1828511</commentid>
    <comment_count>13</comment_count>
      <attachid>448468</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-01-05 23:21:06 -0800</bug_when>
    <thetext>Created attachment 448468
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1829015</commentid>
    <comment_count>14</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-01-07 11:49:11 -0800</bug_when>
    <thetext>Committed r287774 (245834@trunk): &lt;https://commits.webkit.org/245834@trunk&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>427720</attachid>
            <date>2021-05-04 18:40:25 -0700</date>
            <delta_ts>2021-10-30 00:42:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225377-20210504184025.patch</filename>
            <type>text/plain</type>
            <size>29636</size>
            <attacher name="Tim Horton">thorton</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2OTQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTUwNjUwNDlkZWZhMjY2
OTJiZGVmMTg2ZDYwZTg2OGVhYTQ2Y2I3Ny4uZjhiOGE0ODZhMWViY2JhOTBmZWQwZGE3NmU3ZTkz
ODVkN2Q0YWVhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY5IEBACisyMDIxLTA1LTA0ICBUaW0g
SG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgorCisgICAgICAgIEltYWdlQnVmZmVy
IHdpdGggZmxvYXRpbmcgcG9pbnQgbG9naWNhbFNpemUoKSBwYWludHMgaW50byBhIHNsaWdodGx5
IHRydW5jYXRlZCBkZXN0aW5hdGlvbiByZWN0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjUzNzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHM7IHRoZSBiZWhhdmlvciBjaGFuZ2UgaXMg
Y292ZXJlZCBieQorICAgICAgICBmYXN0L2JhY2tncm91bmRzL2hpZHBpLWJpdG1hcC1iYWNrZ3Jv
dW5kLW9yaWdpbi1vbi1zdWJwaXhlbC1wb3NpdGlvbi5odG1sCisgICAgICAgIHNpbmNlIEkgcmV2
ZXJ0ZWQgdGhlIHdvcmthcm91bmQgZm9yIHRoaXMgYnVnIHRoYXQgSSBsYW5kZWQgaW4gcjI3Njk0
NS4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6OmR1bXBJbWFnZUJpdG1hcCk6CisgICAg
ICAgICogaHRtbC9DYW52YXNCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc0Jhc2U6
OnNldEltYWdlQnVmZmVyIGNvbnN0KToKKyAgICAgICAgKiBodG1sL0ltYWdlQml0bWFwLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFwOjpjcmVhdGVQcm9taXNlKToKKyAgICAgICAg
KiBodG1sL0ltYWdlQml0bWFwQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJp
dG1hcEJhY2tpbmc6OndpZHRoIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQml0bWFw
QmFja2luZzo6aGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBodG1sL09mZnNjcmVlbkNhbnZhcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpPZmZzY3JlZW5DYW52YXM6OmNvbW1pdFRvUGxhY2Vob2xk
ZXJDYW52YXMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQmFz
ZTo6cHV0SW1hZ2VEYXRhKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2U6OkxSVUltYWdlQnVmZmVyQ2FjaGU6OmltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0ltYWdlQnVmZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9JbWFnZUJ1ZmZlci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVy
QmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckJhY2tlbmQ6OmNvbnZl
cnRUb0x1bWluYW5jZU1hc2spOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJCYWNrZW5k
Ojp0b0JHUkFEYXRhIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1
ZmZlckJhY2tlbmQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyQmFja2VuZDo6dHJ1
bmNhdGVkTG9naWNhbFNpemUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJC
YWNrZW5kOjpsb2dpY2FsU2l6ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckJhY2tlbmQ6OnRydW5jYXRlZExvZ2ljYWxSZWN0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkltYWdlQnVmZmVyQmFja2VuZDo6bG9naWNhbFJlY3QgY29uc3QpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyYXRjaEJ1
ZmZlcjo6Z2V0U2NyYXRjaEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cv
SW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXJD
R0JhY2tlbmQ6OmNvcHlJbWFnZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6c2lua0ludG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZl
ckNHQmFja2VuZDo6dG9DRkRhdGEgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2ZpbHRlcnMvRkVCbGVuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUJsZW5kOjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b2xvck1hdHJpeC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGRUNvbG9yTWF0cml4OjpwbGF0Zm9y
bUFwcGx5U29mdHdhcmUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVDb21wb3NpdGU6OnBsYXRmb3JtQXBw
bHlTb2Z0d2FyZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRURyb3BT
aGFkb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RkVEcm9wU2hhZG93OjpwbGF0Zm9ybUFwcGx5
U29mdHdhcmUpOgorICAgICAgICAqIHJlbmRlcmluZy9DU1NGaWx0ZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTRmlsdGVyOjphbGxvY2F0ZUJhY2tpbmdTdG9yZUlmTmVlZGVkKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJTVkdSZXNvdXJjZVBhdHRlcm46OmJ1aWxkUGF0dGVybik6CisgICAg
ICAgIFJlbmFtZSBsb2dpY2FsU2l6ZSgpIHRoYXQgcmV0dXJucyBhIHRydW5jYXRlZCBJbnRTaXpl
IHRvIHRydW5jYXRlZExvZ2ljYWxTaXplKCkKKyAgICAgICAgYW5kIG1ha2UgbG9naWNhbFNpemUo
KSByZXR1cm4gYSBGbG9hdFNpemUsIGxpa2UgaXQgd2FzIHBhc3NlZCBpbnRvIEltYWdlQnVmZmVy
LgorICAgICAgICBEbyB0aGUgc2FtZSBmb3IgbG9naWNhbFJlY3QuCisgICAgICAgIEZvciBub3cs
IGFkb3B0IHRydW5jYXRlZExvZ2ljYWxTaXplL1JlY3QgaW4gYWxsIHBsYWNlcyB0byBtYWludGFp
biBiZWhhdmlvciwKKyAgICAgICAgZXhjZXB0IHRoZSBmZXcgcGxhY2VzIHdoZXJlIGl0IGlzIGNs
ZWFybHkgYW4gaW1wcm92ZW1lbnQgKGxpa2UgZHJhd0ltYWdlQnVmZmVyKS4KKyAgICAgICAgTG9u
Zy10ZXJtLCBjYWxsZXJzIHNob3VsZCBsaWtlbHkgbWlncmF0ZSBvZmYgb2YgdHJ1bmNhdGVkTG9n
aWNhbFNpemUoKQorICAgICAgICAod2hlbiBpcyB0cnVuY2F0aW9uIGV2ZXIgcmlnaHQ/ISkgLS0g
ZWl0aGVyIHRvIGxvZ2ljYWxTaXplLCBvciBiYWNrZW5kU2l6ZSAtLQorICAgICAgICBidXQgdGhh
dCB3aWxsIHJlcXVpcmUgY2FyZWZ1bCBpbnZlc3RpZ2F0aW9uIG9mIGVhY2ggY2FsbGVyLgorCiAy
MDIxLTA1LTAzICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CiAKICAgICAgICAgUmVt
b3ZlIHRoZSBxdWlyayB0byBkaXNhYmxlICJyZXR1cm4gdG8gZWxlbWVudCBmdWxsc2NyZWVuIGZy
b20gcGljdHVyZS1pbi1waWN0dXJlIiBmb3Igd293aGVhZC5jb20KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggMjlhMGNh
NzJmNDBlYTIwZjU2MWYyNjZhMGQzOWY4Mjk0MWJkNzgyYS4uOTJkYjViNmQ5MmVjMThiZGEyOTZi
YTg4NmMwY2I0ZWQyMTE1ZjdkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNiBAQAorMjAyMS0wNS0w
NCAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KKworICAgICAgICBJbWFn
ZUJ1ZmZlciB3aXRoIGZsb2F0aW5nIHBvaW50IGxvZ2ljYWxTaXplKCkgcGFpbnRzIGludG8gYSBz
bGlnaHRseSB0cnVuY2F0ZWQgZGVzdGluYXRpb24gcmVjdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI1Mzc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJl
bmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kOjpnZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcik6CisgICAgICAgICogU2hhcmVk
L1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlTGF5ZXJCYWNraW5nU3RvcmU6OmRpc3BsYXkpOgorICAgICAgICBSZXZlcnQg
dGhlIHdvcmthcm91bmQgZm9yIHRoaXMgYnVnIHRoYXQgSSBsYW5kZWQgaW4gcjI3Njk0NS4KKwog
MjAyMS0wNS0wMyAgVGltIEhvcnRvbiAgPHRpbW90aHlfaG9ydG9uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBVc2UgSW1hZ2VCdWZmZXIgc2NhbGluZyBpbiBSZW1vdGVMYXllckJhY2tpbmdTdG9yZSwg
cmF0aGVyIHRoYW4gaGFuZGxpbmcgc2NhbGUgaW4gdGhlIGNsYXNzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAppbmRleCAzYjYw
ZWU5NTAwNGRjMWY3YmVlNGQ2ZmNhZWRkZTZkYjcxYjMyYWMzLi40NGU2ZTMyYWIyMDgxZmJjYWQ5
ODhlY2Q5YjZjMTZiMDFhZjQ2MWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAKQEAgLTEwNzUsNyArMTA3NSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBjb25zdCBJ
bnRTaXplJiBsb2dpY2FsU2l6ZSA9IGJ1ZmZlci0+bG9naWNhbFNpemUoKTsKKyAgICAgICAgY29u
c3QgSW50U2l6ZSYgbG9naWNhbFNpemUgPSBidWZmZXItPnRydW5jYXRlZExvZ2ljYWxTaXplKCk7
CiAgICAgICAgIGF1dG8gaW1hZ2VEYXRhID0gYnVmZmVyLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgeyBJbnRQb2ludDo6emVybygpLCBsb2dpY2Fs
U2l6ZSB9KTsKICAgICAgICAgaWYgKCFpbWFnZURhdGEpIHsKICAgICAgICAgICAgIGNvZGUgPSBT
ZXJpYWxpemF0aW9uUmV0dXJuQ29kZTo6VmFsaWRhdGlvbkVycm9yOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2Fu
dmFzQmFzZS5jcHAKaW5kZXggM2U0MjQ5YzBhOTVjNTYxYmUzOGQzMTEyYzMzYmU0MzQzM2M2MGUy
MS4uYjFhMDRlN2I5YzA4OTdmMDQzYzc1ZDY3NWViZTc3MTIxZDJmNGEwNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9DYW52YXNCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0NhbnZhc0Jhc2UuY3BwCkBAIC0xOTMsOCArMTkzLDggQEAgUmVmUHRyPEltYWdlQnVmZmVy
PiBDYW52YXNCYXNlOjpzZXRJbWFnZUJ1ZmZlcihSZWZQdHI8SW1hZ2VCdWZmZXI+JiYgYnVmZmVy
KSBjb24KICAgICAgICAgcmV0dXJuQnVmZmVyID0gc3RkOjpleGNoYW5nZShtX2ltYWdlQnVmZmVy
LCBXVEZNb3ZlKGJ1ZmZlcikpOwogICAgIH0KIAotICAgIGlmIChtX2ltYWdlQnVmZmVyICYmIG1f
c2l6ZSAhPSBtX2ltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpKQotICAgICAgICBtX3NpemUgPSBt
X2ltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpOworICAgIGlmIChtX2ltYWdlQnVmZmVyICYmIG1f
c2l6ZSAhPSBtX2ltYWdlQnVmZmVyLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKQorICAgICAgICBt
X3NpemUgPSBtX2ltYWdlQnVmZmVyLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpOwogCiAgICAgc2l6
ZV90IHByZXZpb3VzTWVtb3J5Q29zdCA9IG1faW1hZ2VCdWZmZXJDb3N0OwogICAgIG1faW1hZ2VC
dWZmZXJDb3N0ID0gbWVtb3J5Q29zdCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9JbWFnZUJpdG1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwLmNwcApp
bmRleCBkOWE5NzhmZWVjMDc3ZGIwODAzNjkzNDJkY2U2NjdmYThkZjEwYTNlLi42MDk4ZDA2ZTk5
MzZlYzRjMGE4MTY2MzFlM2YzMGNiN2MxMWY5ZjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL0ltYWdlQml0bWFwLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0
bWFwLmNwcApAQCAtNTYwLDcgKzU2MCw3IEBAIHZvaWQgSW1hZ2VCaXRtYXA6OmNyZWF0ZVByb21p
c2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgc2NyaXB0RXhlY3V0aW9uQ29udGV4dCwKIAogICAg
IC8vIDQuIExldCB0aGUgSW1hZ2VCaXRtYXAgb2JqZWN0J3MgYml0bWFwIGRhdGEgYmUgYSBjb3B5
IG9mIHRoZSBpbWFnZSBhcmd1bWVudCdzCiAgICAgLy8gICAgYml0bWFwIGRhdGEsIGNyb3BwZWQg
dG8gdGhlIHNvdXJjZSByZWN0YW5nbGUgd2l0aCBmb3JtYXR0aW5nLgotICAgIGF1dG8gc291cmNl
UmVjdGFuZ2xlID0gY3JvcHBlZFNvdXJjZVJlY3RhbmdsZVdpdGhGb3JtYXR0aW5nKGV4aXN0aW5n
SW1hZ2VCaXRtYXAtPmJ1ZmZlcigpLT5sb2dpY2FsU2l6ZSgpLCBvcHRpb25zLCBXVEZNb3ZlKHJl
Y3QpKTsKKyAgICBhdXRvIHNvdXJjZVJlY3RhbmdsZSA9IGNyb3BwZWRTb3VyY2VSZWN0YW5nbGVX
aXRoRm9ybWF0dGluZyhleGlzdGluZ0ltYWdlQml0bWFwLT5idWZmZXIoKS0+dHJ1bmNhdGVkTG9n
aWNhbFNpemUoKSwgb3B0aW9ucywgV1RGTW92ZShyZWN0KSk7CiAgICAgaWYgKHNvdXJjZVJlY3Rh
bmdsZS5oYXNFeGNlcHRpb24oKSkgewogICAgICAgICBwcm9taXNlLnJlamVjdChzb3VyY2VSZWN0
YW5nbGUucmVsZWFzZUV4Y2VwdGlvbigpKTsKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9JbWFnZUJpdG1hcEJhY2tpbmcuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9JbWFnZUJpdG1hcEJhY2tpbmcuY3BwCmluZGV4IDkzYzVmZWE1Mjc0YmE4ODMyYTMw
NTY3YjQ0NTRhZTVjNzFjNWE2NDYuLjNmZWE2YTZmYzdlMzZkOThhODc2ODkzY2NhNTJmMzlkYTU3
OWE2NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSW1hZ2VCaXRtYXBCYWNraW5n
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0ltYWdlQml0bWFwQmFja2luZy5jcHAKQEAg
LTQ4LDEzICs0OCwxMyBAQCBSZWZQdHI8SW1hZ2VCdWZmZXI+IEltYWdlQml0bWFwQmFja2luZzo6
dGFrZUltYWdlQnVmZmVyKCkKIHVuc2lnbmVkIEltYWdlQml0bWFwQmFja2luZzo6d2lkdGgoKSBj
b25zdAogewogICAgIC8vIEZJWE1FOiBJcyB0aGlzIHRoZSByaWdodCB3aWR0aD8KLSAgICByZXR1
cm4gbV9iaXRtYXBEYXRhID8gbV9iaXRtYXBEYXRhLT5sb2dpY2FsU2l6ZSgpLndpZHRoKCkgOiAw
OworICAgIHJldHVybiBtX2JpdG1hcERhdGEgPyBtX2JpdG1hcERhdGEtPnRydW5jYXRlZExvZ2lj
YWxTaXplKCkud2lkdGgoKSA6IDA7CiB9CiAKIHVuc2lnbmVkIEltYWdlQml0bWFwQmFja2luZzo6
aGVpZ2h0KCkgY29uc3QKIHsKICAgICAvLyBGSVhNRTogSXMgdGhpcyB0aGUgcmlnaHQgaGVpZ2h0
PwotICAgIHJldHVybiBtX2JpdG1hcERhdGEgPyBtX2JpdG1hcERhdGEtPmxvZ2ljYWxTaXplKCku
aGVpZ2h0KCkgOiAwOworICAgIHJldHVybiBtX2JpdG1hcERhdGEgPyBtX2JpdG1hcERhdGEtPnRy
dW5jYXRlZExvZ2ljYWxTaXplKCkuaGVpZ2h0KCkgOiAwOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL09mZnNjcmVlbkNhbnZhcy5jcHAKaW5kZXggMzk2M2Vj
N2ZkOTAzOTM2YTYzNDcyZDBlN2ViYjBiMmYwYjJjNmU5Yi4uNDdlNjY1MDYyYjVkZWRiNjhiYmI1
ODFlYWU4ODkyODJlODgwMTQyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9PZmZz
Y3JlZW5DYW52YXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvT2Zmc2NyZWVuQ2FudmFz
LmNwcApAQCAtNDMyLDE0ICs0MzIsMTQgQEAgdm9pZCBPZmZzY3JlZW5DYW52YXM6OmNvbW1pdFRv
UGxhY2Vob2xkZXJDYW52YXMoKQogICAgICAgICBtX2NvbnRleHQtPnBhaW50UmVuZGVyaW5nUmVz
dWx0c1RvQ2FudmFzKCk7CiAKICAgICBpZiAobV9wbGFjZWhvbGRlckRhdGEtPmJ1ZmZlclBpcGVT
b3VyY2UpIHsKLSAgICAgICAgYXV0byBidWZmZXJDb3B5ID0gaW1hZ2VCdWZmZXItPmNvcHlSZWN0
VG9CdWZmZXIoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXpl
KCkpLCBEZXN0aW5hdGlvbkNvbG9yU3BhY2U6OlNSR0IsIGltYWdlQnVmZmVyLT5jb250ZXh0KCkp
OworICAgICAgICBhdXRvIGJ1ZmZlckNvcHkgPSBpbWFnZUJ1ZmZlci0+Y29weVJlY3RUb0J1ZmZl
cihGbG9hdFJlY3QoRmxvYXRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+dHJ1bmNhdGVkTG9naWNhbFNp
emUoKSksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgaW1hZ2VCdWZmZXItPmNvbnRleHQo
KSk7CiAgICAgICAgIGlmIChidWZmZXJDb3B5KQogICAgICAgICAgICAgbV9wbGFjZWhvbGRlckRh
dGEtPmJ1ZmZlclBpcGVTb3VyY2UtPmhhbmRsZShXVEZNb3ZlKGJ1ZmZlckNvcHkpKTsKICAgICB9
CiAKICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fcGxhY2Vob2xkZXJEYXRhLT5idWZmZXJM
b2NrKTsKICAgICBib29sIHNob3VsZFB1c2hCdWZmZXIgPSAhbV9wbGFjZWhvbGRlckRhdGEtPnBl
bmRpbmdDb21taXRCdWZmZXI7Ci0gICAgbV9wbGFjZWhvbGRlckRhdGEtPnBlbmRpbmdDb21taXRC
dWZmZXIgPSBpbWFnZUJ1ZmZlci0+Y29weVJlY3RUb0J1ZmZlcihGbG9hdFJlY3QoRmxvYXRQb2lu
dCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIERlc3RpbmF0aW9uQ29sb3JTcGFjZTo6
U1JHQiwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CisgICAgbV9wbGFjZWhvbGRlckRhdGEtPnBl
bmRpbmdDb21taXRCdWZmZXIgPSBpbWFnZUJ1ZmZlci0+Y29weVJlY3RUb0J1ZmZlcihGbG9hdFJl
Y3QoRmxvYXRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+dHJ1bmNhdGVkTG9naWNhbFNpemUoKSksIERl
c3RpbmF0aW9uQ29sb3JTcGFjZTo6U1JHQiwgaW1hZ2VCdWZmZXItPmNvbnRleHQoKSk7CiAgICAg
aWYgKG1fcGxhY2Vob2xkZXJEYXRhLT5wZW5kaW5nQ29tbWl0QnVmZmVyICYmIHNob3VsZFB1c2hC
dWZmZXIpCiAgICAgICAgIHB1c2hCdWZmZXJUb1BsYWNlaG9sZGVyKCk7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkRCYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCmluZGV4IGM3ODNhMjNiM2RmYzlkMWI1ZDFlOGQ0ZDU4ZjhmNzZmMmI5YTQwYzUu
LjBkMzc5NDdkZmZjNWRhYWRkZjI1Y2I4YWRhOTJjMmFmZWU3OWQ3M2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyREJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQy
REJhc2UuY3BwCkBAIC0yMjM4LDcgKzIyMzgsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyREJhc2U6OnB1dEltYWdlRGF0YShJbWFnZURhdGEmIGRhdGEsIGludCBkeCwgaW50IGR5LAog
ICAgIEludFNpemUgZGVzdE9mZnNldCB7IGR4LCBkeSB9OwogICAgIEludFJlY3QgZGVzdFJlY3Qg
PSBjbGlwUmVjdDsKICAgICBkZXN0UmVjdC5tb3ZlKGRlc3RPZmZzZXQpOwotICAgIGRlc3RSZWN0
LmludGVyc2VjdChJbnRSZWN0IHsgeyB9LCBidWZmZXItPmxvZ2ljYWxTaXplKCkgfSk7CisgICAg
ZGVzdFJlY3QuaW50ZXJzZWN0KEludFJlY3QgeyB7IH0sIGJ1ZmZlci0+dHJ1bmNhdGVkTG9naWNh
bFNpemUoKSB9KTsKICAgICBpZiAoZGVzdFJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47
CiAgICAgSW50UmVjdCBzb3VyY2VSZWN0IHsgZGVzdFJlY3QgfTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKaW5k
ZXggNTNjNTZmM2IxZTg1MmE3OWRiMGRlMmU0MmU3MTY0ZTkyZWU1ODc2Yi4uMTY3MjY4ZjBhM2I0
YmY3ZGRhMmIxMzE0YmQ1ZDZlZmNhYWEzZDIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKQEAgLTc2MTUs
NyArNzYxNSw3IEBAIEltYWdlQnVmZmVyKiBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpMUlVJ
bWFnZUJ1ZmZlckNhY2hlOjppbWFnZUJ1ZmZlcihjb25zdCBJCiAgICAgICAgIEltYWdlQnVmZmVy
KiBidWYgPSBtX2J1ZmZlcnNbaV0uZ2V0KCk7CiAgICAgICAgIGlmICghYnVmKQogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGlmIChidWYtPmxvZ2ljYWxTaXplKCkgIT0gc2l6ZSkKKyAgICAg
ICAgaWYgKGJ1Zi0+dHJ1bmNhdGVkTG9naWNhbFNpemUoKSAhPSBzaXplKQogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIGJ1YmJsZVRvRnJvbnQoaSk7CiAgICAgICAgIGJ1Zi0+Y29udGV4
dCgpLmNsZWFyUmVjdChGbG9hdFJlY3QoeyB9LCBGbG9hdFNpemUoc2l6ZSkpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbmNyZXRlSW1hZ2VCdWZmZXIu
aAppbmRleCBkMGYwMGVjYzkyYTBlODdlYThmYjkxNzJlNDg5YTc5NmFkMDFiMjIzLi5iMGE4YzNi
MTg5NjYwZTIwNDJiNjIxNzliMjliZjRkNThkN2YyNzEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db25jcmV0ZUltYWdlQnVmZmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29uY3JldGVJbWFnZUJ1ZmZlci5oCkBAIC04OSw3
ICs4OSw4IEBAIHByb3RlY3RlZDoKICAgICAgICAgfQogICAgIH0KIAotICAgIEludFNpemUgbG9n
aWNhbFNpemUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBJbnRTaXplKG1fcGFyYW1ldGVycy5s
b2dpY2FsU2l6ZSk7IH0KKyAgICBJbnRTaXplIHRydW5jYXRlZExvZ2ljYWxTaXplKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gSW50U2l6ZShtX3BhcmFtZXRlcnMubG9naWNhbFNpemUpOyB9Cisg
ICAgRmxvYXRTaXplIGxvZ2ljYWxTaXplKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9wYXJh
bWV0ZXJzLmxvZ2ljYWxTaXplOyB9CiAgICAgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLnJlc29sdXRpb25TY2FsZTsgfQogICAgIERl
c3RpbmF0aW9uQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
bV9wYXJhbWV0ZXJzLmNvbG9yU3BhY2U7IH0KICAgICBQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fcGFyYW1ldGVycy5waXhlbEZvcm1hdDsgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAKaW5kZXggODk0YjVjY2U0MjExZGIxZGZlMmQ0NmNhZjBmNjVjNDQyMWE1MWE0ZC4uZWNiOTZm
NTkzNjUzMzRkZWI0MWE2MjMzMjY1MDkwZDcwMTMxZjY1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCkBAIC03OTgsNyAr
Nzk4LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZl
ciYgaW1hZ2UsIGNvbnN0IEZsb2F0UG9pbnQmIGRlc3QKIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdJbWFnZUJ1ZmZlcihJbWFnZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVz
dGluYXRpb24sIGNvbnN0IEltYWdlUGFpbnRpbmdPcHRpb25zJiBpbWFnZVBhaW50aW5nT3B0aW9u
cykKIHsKLSAgICBkcmF3SW1hZ2VCdWZmZXIoaW1hZ2UsIGRlc3RpbmF0aW9uLCBGbG9hdFJlY3Qo
RmxvYXRQb2ludCgpLCBGbG9hdFNpemUoaW1hZ2UubG9naWNhbFNpemUoKSkpLCBpbWFnZVBhaW50
aW5nT3B0aW9ucyk7CisgICAgZHJhd0ltYWdlQnVmZmVyKGltYWdlLCBkZXN0aW5hdGlvbiwgRmxv
YXRSZWN0KEZsb2F0UG9pbnQoKSwgaW1hZ2UubG9naWNhbFNpemUoKSksIGltYWdlUGFpbnRpbmdP
cHRpb25zKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdJbWFnZUJ1ZmZlcihJbWFn
ZUJ1ZmZlciYgaW1hZ2UsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdGluYXRpb24sIGNvbnN0IEZsb2F0
UmVjdCYgc291cmNlLCBjb25zdCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKQEAgLTgx
OSw3ICs4MTksNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnN1bWluZ0ltYWdlQnVm
ZmVyKFJlZlB0cjxJbWFnZUJ1ZmZlcj4gaW1hZ2UsIGNvbnN0CiB7CiAgICAgaWYgKCFpbWFnZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIEludFNpemUgaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5s
b2dpY2FsU2l6ZSgpOworICAgIGF1dG8gaW1hZ2VMb2dpY2FsU2l6ZSA9IGltYWdlLT5sb2dpY2Fs
U2l6ZSgpOwogICAgIGRyYXdDb25zdW1pbmdJbWFnZUJ1ZmZlcihXVEZNb3ZlKGltYWdlKSwgRmxv
YXRSZWN0KGRlc3RpbmF0aW9uLCBpbWFnZUxvZ2ljYWxTaXplKSwgRmxvYXRSZWN0KEZsb2F0UG9p
bnQoKSwgaW1hZ2VMb2dpY2FsU2l6ZSksIGltYWdlUGFpbnRpbmdPcHRpb25zKTsKIH0KIApAQCAt
ODI3LDcgKzgyNyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Q29uc3VtaW5nSW1hZ2VC
dWZmZXIoUmVmUHRyPEltYWdlQnVmZmVyPiBpbWFnZSwgY29uc3QKIHsKICAgICBpZiAoIWltYWdl
KQogICAgICAgICByZXR1cm47Ci0gICAgSW50U2l6ZSBpbWFnZUxvZ2ljYWxTaXplID0gaW1hZ2Ut
PmxvZ2ljYWxTaXplKCk7CisgICAgYXV0byBpbWFnZUxvZ2ljYWxTaXplID0gaW1hZ2UtPmxvZ2lj
YWxTaXplKCk7CiAgICAgZHJhd0NvbnN1bWluZ0ltYWdlQnVmZmVyKFdURk1vdmUoaW1hZ2UpLCBk
ZXN0aW5hdGlvbiwgRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgRmxvYXRTaXplKGltYWdlTG9naWNh
bFNpemUpKSwgaW1hZ2VQYWludGluZ09wdGlvbnMpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXIuaAppbmRleCAxZjgwMTU1YWNkNmEzNTJjZGRi
NzQ4MGMxZmY2NTQ4OWQ4ZGM0ZmQyLi41Yjk4OGYzN2RkZDRiYTgyMzYzODFkZTAxMDhkNjgyZjU5
YzlmMzQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFn
ZUJ1ZmZlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVm
ZmVyLmgKQEAgLTg0LDcgKzg0LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBjaGFuZ2VE
ZXN0aW5hdGlvbkltYWdlQnVmZmVyKFJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgeyB9CiAg
ICAgdmlydHVhbCB2b2lkIHByZXBhcmVUb0FwcGVuZERpc3BsYXlMaXN0SXRlbXMoRGlzcGxheUxp
c3Q6Okl0ZW1CdWZmZXJIYW5kbGUmJikgeyB9CiAKLSAgICB2aXJ0dWFsIEludFNpemUgbG9naWNh
bFNpemUoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBJbnRTaXplIHRydW5jYXRlZExvZ2ljYWxT
aXplKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgRmxvYXRTaXplIGxvZ2ljYWxTaXplKCkgY29u
c3QgPSAwOwogICAgIHZpcnR1YWwgZmxvYXQgcmVzb2x1dGlvblNjYWxlKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2UoKSBjb25zdCA9IDA7
CiAgICAgdmlydHVhbCBQaXhlbEZvcm1hdCBwaXhlbEZvcm1hdCgpIGNvbnN0ID0gMDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9JbWFnZUJ1ZmZlckJhY2tl
bmQuY3BwCmluZGV4IDJlNjY2NTBmOTZhZjI3MzgzMjdlYTkyMjFlOTQzNjQ2MzkyYjlhMzcuLjNk
NDMzNmFlNTMyMWY5NTlmOTJhMGUwZmNmZmQxNTg1OWUwYzc5NDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmNwcApA
QCAtNjksNyArNjksNyBAQCB2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6ZHJhd0NvbnN1bWluZyhH
cmFwaGljc0NvbnRleHQmIGRlc3RDb250ZXh0LCBjb25zdCBGbG9hdAogCiB2b2lkIEltYWdlQnVm
ZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygpCiB7Ci0gICAgYXV0byBpbWFnZURh
dGEgPSBnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVk
LCBsb2dpY2FsUmVjdCgpKTsKKyAgICBhdXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsIHRydW5jYXRlZExvZ2ljYWxSZWN0
KCkpOwogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CiAKQEAgLTg3LDIwICs4
NywyMCBAQCB2b2lkIEltYWdlQnVmZmVyQmFja2VuZDo6Y29udmVydFRvTHVtaW5hbmNlTWFzaygp
CiAgICAgICAgIHNyY1BpeGVsQXJyYXktPnNldChwaXhlbE9mZnNldCArIDMsIGx1bWEpOwogICAg
IH0KIAotICAgIHB1dEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRp
cGxpZWQsICppbWFnZURhdGEsIGxvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFscGhh
UHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQpOworICAgIHB1dEltYWdlRGF0YShBbHBo
YVByZW11bHRpcGxpY2F0aW9uOjpVbnByZW11bHRpcGxpZWQsICppbWFnZURhdGEsIHRydW5jYXRl
ZExvZ2ljYWxSZWN0KCksIEludFBvaW50Ojp6ZXJvKCksIEFscGhhUHJlbXVsdGlwbGljYXRpb246
OlByZW11bHRpcGxpZWQpOwogfQogCiBWZWN0b3I8dWludDhfdD4gSW1hZ2VCdWZmZXJCYWNrZW5k
Ojp0b0JHUkFEYXRhKHZvaWQqIGRhdGEpIGNvbnN0CiB7Ci0gICAgVmVjdG9yPHVpbnQ4X3Q+IHJl
c3VsdCg0ICogbG9naWNhbFNpemUoKS5hcmVhKCkudW5zYWZlR2V0KCkpOwotICAgIHNpemVfdCBk
ZXN0Qnl0ZXNQZXJSb3cgPSBsb2dpY2FsU2l6ZSgpLndpZHRoKCkgKiA0OworICAgIFZlY3Rvcjx1
aW50OF90PiByZXN1bHQoNCAqIHRydW5jYXRlZExvZ2ljYWxTaXplKCkuYXJlYSgpLnVuc2FmZUdl
dCgpKTsKKyAgICBzaXplX3QgZGVzdEJ5dGVzUGVyUm93ID0gdHJ1bmNhdGVkTG9naWNhbFNpemUo
KS53aWR0aCgpICogNDsKICAgICBzaXplX3Qgc3JjQnl0ZXNQZXJSb3cgPSBieXRlc1BlclJvdygp
OwogCiAgICAgdWludDhfdCogc3JjUm93cyA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KGRh
dGEpOwogCiAgICAgY29weUltYWdlUGl4ZWxzKAogICAgICAgICBBbHBoYVByZW11bHRpcGxpY2F0
aW9uOjpQcmVtdWx0aXBsaWVkLCBwaXhlbEZvcm1hdCgpLCBzcmNCeXRlc1BlclJvdywgc3JjUm93
cywKLSAgICAgICAgQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVtdWx0aXBsaWVkLCBQaXhl
bEZvcm1hdDo6QkdSQTgsIGRlc3RCeXRlc1BlclJvdywgcmVzdWx0LmRhdGEoKSwgbG9naWNhbFNp
emUoKSk7CisgICAgICAgIEFscGhhUHJlbXVsdGlwbGljYXRpb246OlVucHJlbXVsdGlwbGllZCwg
UGl4ZWxGb3JtYXQ6OkJHUkE4LCBkZXN0Qnl0ZXNQZXJSb3csIHJlc3VsdC5kYXRhKCksIHRydW5j
YXRlZExvZ2ljYWxTaXplKCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ltYWdlQnVmZmVyQmFja2VuZC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKaW5k
ZXggYWVhZjkxNGQ5YTgyZDY5NDczOWE4Mzk4MzAxYjM3YjIxYzQ0Yjk3Ny4uZjI2ZGQ5Mjk3MDVh
NWI0YWI3ZDcxZWJjZWQwOThkOGQ1ZWRkNmE0YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW1hZ2VCdWZmZXJCYWNrZW5kLmgKQEAgLTE0MCwxMiArMTQw
LDE0IEBAIHByb3RlY3RlZDoKICAgICAgICAgcmV0dXJuIHQ7CiAgICAgfQogCi0gICAgSW50U2l6
ZSBsb2dpY2FsU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIEludFNpemUobV9wYXJhbWV0ZXJzLmxvZ2lj
YWxTaXplKTsgfQorICAgIEludFNpemUgdHJ1bmNhdGVkTG9naWNhbFNpemUoKSBjb25zdCB7IHJl
dHVybiBJbnRTaXplKG1fcGFyYW1ldGVycy5sb2dpY2FsU2l6ZSk7IH0KKyAgICBGbG9hdFNpemUg
bG9naWNhbFNpemUoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMubG9naWNhbFNpemU7IH0K
ICAgICBmbG9hdCByZXNvbHV0aW9uU2NhbGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMu
cmVzb2x1dGlvblNjYWxlOyB9CiAgICAgRGVzdGluYXRpb25Db2xvclNwYWNlIGNvbG9yU3BhY2Uo
KSBjb25zdCB7IHJldHVybiBtX3BhcmFtZXRlcnMuY29sb3JTcGFjZTsgfQogICAgIFBpeGVsRm9y
bWF0IHBpeGVsRm9ybWF0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLnBpeGVsRm9ybWF0
OyB9CiAKLSAgICBJbnRSZWN0IGxvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdChJ
bnRQb2ludDo6emVybygpLCBsb2dpY2FsU2l6ZSgpKTsgfTsKKyAgICBJbnRSZWN0IHRydW5jYXRl
ZExvZ2ljYWxSZWN0KCkgY29uc3QgeyByZXR1cm4geyB7IH0sIHRydW5jYXRlZExvZ2ljYWxTaXpl
KCkgfTsgfTsKKyAgICBGbG9hdFJlY3QgbG9naWNhbFJlY3QoKSBjb25zdCB7IHJldHVybiB7IHsg
fSwgbG9naWNhbFNpemUoKSB9OyB9OwogICAgIEludFJlY3QgYmFja2VuZFJlY3QoKSBjb25zdCB7
IHJldHVybiBJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIGJhY2tlbmRTaXplKCkpOyB9OwogCiAg
ICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIGNvcHlJbWFnZVBpeGVscygKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NoYWRvd0JsdXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKaW5kZXggMDdkMGYw
OTFkNTRjMWVjNWMyNDBlYTM4Y2FhM2Y3NzQ5NmJlZDAyYi4uMmMzMjk3NjlhZWUxNGI4MmQ4ZTJm
MzBjMTU5Y2FiYzAzZjU1YzBkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2hhZG93Qmx1ci5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgcHVibGljOgogICAgICAgICB9
KTsKIAogICAgICAgICAvLyBXZSBkbyBub3QgbmVlZCB0byByZWNyZWF0ZSB0aGUgYnVmZmVyIGlm
IHRoZSBjdXJyZW50IGJ1ZmZlciBpcyBsYXJnZSBlbm91Z2guCi0gICAgICAgIGlmIChtX2ltYWdl
QnVmZmVyICYmIG1faW1hZ2VCdWZmZXItPmxvZ2ljYWxTaXplKCkud2lkdGgoKSA+PSBzaXplLndp
ZHRoKCkgJiYgbV9pbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKS5oZWlnaHQoKSA+PSBzaXplLmhl
aWdodCgpKQorICAgICAgICBpZiAobV9pbWFnZUJ1ZmZlciAmJiBtX2ltYWdlQnVmZmVyLT50cnVu
Y2F0ZWRMb2dpY2FsU2l6ZSgpLndpZHRoKCkgPj0gc2l6ZS53aWR0aCgpICYmIG1faW1hZ2VCdWZm
ZXItPnRydW5jYXRlZExvZ2ljYWxTaXplKCkuaGVpZ2h0KCkgPj0gc2l6ZS5oZWlnaHQoKSkKICAg
ICAgICAgICAgIHJldHVybiBtX2ltYWdlQnVmZmVyOwogCiAgICAgICAgIC8vIFJvdW5kIHRvIHRo
ZSBuZWFyZXN0IDMyIHBpeGVscyBzbyB3ZSBkbyBub3QgZ3JvdyB0aGUgYnVmZmVyIGZvciBzaW1p
bGFyIHNpemVkIHJlcXVlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VCdWZmZXJDR0JhY2tlbmQuY3BwCmluZGV4IDlhOTEwZmRi
NWQ0N2U3NTk4Njg3NDQ0ZjExOTA1MWI2MjRmNzJlYjkuLjRlYWNhZDRhMmFiN2JiYzFmMDFmZTA1
ODFiZWY0MjY4MzRiODFiN2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NnL0ltYWdlQnVmZmVyQ0dCYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUJ1ZmZlckNHQmFja2VuZC5jcHAKQEAgLTEyNywxNCAr
MTI3LDE0IEBAIFJlZlB0cjxJbWFnZT4gSW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmNvcHlJbWFnZShC
YWNraW5nU3RvcmVDb3B5IGNvcHlCZWhhdmlvciwgUHJlCiAgICAgICAgIGltYWdlID0gY29weU5h
dGl2ZUltYWdlKGNvcHlCZWhhdmlvcik7CiAgICAgZWxzZQogICAgICAgICBpbWFnZSA9IGNvcHlO
YXRpdmVJbWFnZShEb250Q29weUJhY2tpbmdTdG9yZSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUJpdG1h
cEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoV1RGTW92ZShpbWFnZSksIGxvZ2ljYWxTaXplKCks
IGJhY2tlbmRTaXplKCksIHJlc29sdXRpb25TY2FsZSgpLCBwcmVzZXJ2ZVJlc29sdXRpb24pOwor
ICAgIHJldHVybiBjcmVhdGVCaXRtYXBJbWFnZUFmdGVyU2NhbGluZ0lmTmVlZGVkKFdURk1vdmUo
aW1hZ2UpLCB0cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpLCBiYWNrZW5kU2l6ZSgpLCByZXNvbHV0aW9u
U2NhbGUoKSwgcHJlc2VydmVSZXNvbHV0aW9uKTsKIH0KIAogUmVmUHRyPEltYWdlPiBJbWFnZUJ1
ZmZlckNHQmFja2VuZDo6c2lua0ludG9JbWFnZShQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVS
ZXNvbHV0aW9uKQogewogICAgIC8vIEdldCB0aGUgYmFja2VuZCBzaXplIGJlZm9yZSBzaW5raW5n
IHRoZSBpdCBpbnRvIGEgTmF0aXZlSW1hZ2UuIHNpbmtJbnRvTmF0aXZlSW1hZ2UoKSBzZXRzIHRo
ZSBJT1N1cmZhY2UgdG8gbnVsbCBpZiBpdCdzIGFuIGFjY2VsZXJhdGVkIGJhY2tlbmQuCiAgICAg
YXV0byBiYWNrZW5kU2l6ZSA9IHRoaXMtPmJhY2tlbmRTaXplKCk7Ci0gICAgcmV0dXJuIGNyZWF0
ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVkZWQoc2lua0ludG9OYXRpdmVJbWFnZSgpLCBs
b2dpY2FsU2l6ZSgpLCBiYWNrZW5kU2l6ZSwgcmVzb2x1dGlvblNjYWxlKCksIHByZXNlcnZlUmVz
b2x1dGlvbik7CisgICAgcmV0dXJuIGNyZWF0ZUJpdG1hcEltYWdlQWZ0ZXJTY2FsaW5nSWZOZWVk
ZWQoc2lua0ludG9OYXRpdmVJbWFnZSgpLCB0cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpLCBiYWNrZW5k
U2l6ZSwgcmVzb2x1dGlvblNjYWxlKCksIHByZXNlcnZlUmVzb2x1dGlvbik7CiB9CiAKIHZvaWQg
SW1hZ2VCdWZmZXJDR0JhY2tlbmQ6OmRyYXcoR3JhcGhpY3NDb250ZXh0JiBkZXN0Q29udGV4dCwg
Y29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBjb25z
dCBJbWFnZVBhaW50aW5nT3B0aW9ucyYgb3B0aW9ucykKQEAgLTE4OCw3ICsxODgsNyBAQCBSZXRh
aW5QdHI8Q0ZEYXRhUmVmPiBJbWFnZUJ1ZmZlckNHQmFja2VuZDo6dG9DRkRhdGEoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSwgT3B0aQogCiAgICAgaWYgKENGRXF1YWwodXRpLmdldCgpLCBqcGVnVVRJ
KCkpKSB7CiAgICAgICAgIC8vIEpQRUdzIGRvbid0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCwgc28g
d2UgaGF2ZSB0byBtYW51YWxseSBjb21wb3NpdGUgb24gdG9wIG9mIGJsYWNrLgotICAgICAgICBh
dXRvIGltYWdlRGF0YSA9IGdldEltYWdlRGF0YShBbHBoYVByZW11bHRpcGxpY2F0aW9uOjpQcmVt
dWx0aXBsaWVkLCBsb2dpY2FsUmVjdCgpKTsKKyAgICAgICAgYXV0byBpbWFnZURhdGEgPSBnZXRJ
bWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6UHJlbXVsdGlwbGllZCwgdHJ1bmNhdGVk
TG9naWNhbFJlY3QoKSk7CiAgICAgICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2ZpbHRlcnMvRkVCbGVuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9maWx0ZXJzL0ZFQmxlbmQuY3BwCmluZGV4IGNkZWFhNjVlNjcwNGNkNjdmYjBhN2FmZTlhZjE4
ZmJiNjJjMmNlZDkuLmNiODNhODYxMDMzMzM2NGE1ODUwMGUxOTMwNmMzM2NiZjdiNmFiMTUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVCbGVu
ZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUJs
ZW5kLmNwcApAQCAtNzAsNyArNzAsNyBAQCB2b2lkIEZFQmxlbmQ6OnBsYXRmb3JtQXBwbHlTb2Z0
d2FyZSgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVm
ZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0
ZVBhaW50UmVjdCgpKSk7Ci0gICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIHsgQ29t
cG9zaXRlT3BlcmF0b3I6OlNvdXJjZU92ZXIsIG1fbW9kZSB9KTsKKyAgICBmaWx0ZXJDb250ZXh0
LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2Uo
aW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVy
LT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKSwgeyBDb21wb3NpdGVPcGVyYXRvcjo6U291cmNlT3Zl
ciwgbV9tb2RlIH0pOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFQ29sb3JNYXRyaXguY3BwCmluZGV4IGUxM2Q0
MzdiYWUwYzg5NzYzOTE1NWRlMjQyNmRhOWIyOWZiY2IxNDYuLjc5NTkyYzY3MmUxOGFmYzQyZmM3
ZmJiNWY1YTdlNTE3ZmM0YzlmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2ZpbHRlcnMvRkVDb2xvck1hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9GRUNvbG9yTWF0cml4LmNwcApAQCAtMjg1LDcgKzI4
NSw3IEBAIHZvaWQgRkVDb2xvck1hdHJpeDo6cGxhdGZvcm1BcHBseVNvZnR3YXJlKCkKICAgICBp
ZiAoaW5CdWZmZXIpCiAgICAgICAgIHJlc3VsdEltYWdlLT5jb250ZXh0KCkuZHJhd0ltYWdlQnVm
ZmVyKCppbkJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWlu
dFJlY3QoKSkpOwogCi0gICAgSW50UmVjdCBpbWFnZVJlY3QoSW50UG9pbnQoKSwgcmVzdWx0SW1h
Z2UtPmxvZ2ljYWxTaXplKCkpOworICAgIEludFJlY3QgaW1hZ2VSZWN0KEludFBvaW50KCksIHJl
c3VsdEltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKTsKICAgICBhdXRvIGltYWdlRGF0YSA9
IHJlc3VsdEltYWdlLT5nZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGlvbjo6VW5wcmVt
dWx0aXBsaWVkLCBpbWFnZVJlY3QpOwogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1
cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJz
L0ZFQ29tcG9zaXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVDb21wb3NpdGUuY3BwCmluZGV4IDRkMjI4ZjkwNWIyMGZiOTEzYWRkZmJkYmQyOTg5OWI0
ODgxZjZkYTkuLjY5ZmJmOGRiNmUzZTdiZjM3MTJmNTE5OGZjZjU4NzhhYzVjZmU0MDYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVDb21wb3Np
dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMvRkVD
b21wb3NpdGUuY3BwCkBAIC0yNzcsMTkgKzI3NywxOSBAQCB2b2lkIEZFQ29tcG9zaXRlOjpwbGF0
Zm9ybUFwcGx5U29mdHdhcmUoKQogICAgIH0KICAgICBjYXNlIEZFQ09NUE9TSVRFX09QRVJBVE9S
X09VVDoKICAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVy
LCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSk7Ci0g
ICAgICAgIGZpbHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlcjIsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4yLT5hYnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJ
bnRQb2ludCgpLCBpbWFnZUJ1ZmZlcjItPmxvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRv
cjo6RGVzdGluYXRpb25PdXQpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQ
YWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VCdWZmZXIyLT50cnVuY2F0ZWRM
b2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OkRlc3RpbmF0aW9uT3V0KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBGRUNPTVBPU0lURV9PUEVSQVRPUl9BVE9QOgogICAgICAgICBm
aWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIyLCBkcmF3aW5nUmVnaW9u
T2ZJbnB1dEltYWdlKGluMi0+YWJzb2x1dGVQYWludFJlY3QoKSkpOwotICAgICAgICBmaWx0ZXJD
b250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0
SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdl
QnVmZmVyLT5sb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlNvdXJjZUF0b3ApOwor
ICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqaW1hZ2VCdWZmZXIsIGRyYXdp
bmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFpbnRSZWN0KCkpLCBJbnRSZWN0KElu
dFBvaW50KCksIGltYWdlQnVmZmVyLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpKSwgQ29tcG9zaXRl
T3BlcmF0b3I6OlNvdXJjZUF0b3ApOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEZFQ09NUE9T
SVRFX09QRVJBVE9SX1hPUjoKICAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIo
KmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFnZShpbjItPmFic29sdXRlUGFp
bnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdl
QnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5hYnNvbHV0ZVBhaW50UmVjdCgp
KSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9naWNhbFNpemUoKSksIENvbXBv
c2l0ZU9wZXJhdG9yOjpYT1IpOworICAgICAgICBmaWx0ZXJDb250ZXh0LmRyYXdJbWFnZUJ1ZmZl
cigqaW1hZ2VCdWZmZXIsIGRyYXdpbmdSZWdpb25PZklucHV0SW1hZ2UoaW4tPmFic29sdXRlUGFp
bnRSZWN0KCkpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlQnVmZmVyLT50cnVuY2F0ZWRMb2dp
Y2FsU2l6ZSgpKSwgQ29tcG9zaXRlT3BlcmF0b3I6OlhPUik7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgRkVDT01QT1NJVEVfT1BFUkFUT1JfTElHSFRFUjoKICAgICAgICAgZmlsdGVyQ29udGV4
dC5kcmF3SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyMiwgZHJhd2luZ1JlZ2lvbk9mSW5wdXRJbWFn
ZShpbjItPmFic29sdXRlUGFpbnRSZWN0KCkpKTsKLSAgICAgICAgZmlsdGVyQ29udGV4dC5kcmF3
SW1hZ2VCdWZmZXIoKmltYWdlQnVmZmVyLCBkcmF3aW5nUmVnaW9uT2ZJbnB1dEltYWdlKGluLT5h
YnNvbHV0ZVBhaW50UmVjdCgpKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZUJ1ZmZlci0+bG9n
aWNhbFNpemUoKSksIENvbXBvc2l0ZU9wZXJhdG9yOjpQbHVzTGlnaHRlcik7CisgICAgICAgIGZp
bHRlckNvbnRleHQuZHJhd0ltYWdlQnVmZmVyKCppbWFnZUJ1ZmZlciwgZHJhd2luZ1JlZ2lvbk9m
SW5wdXRJbWFnZShpbi0+YWJzb2x1dGVQYWludFJlY3QoKSksIEludFJlY3QoSW50UG9pbnQoKSwg
aW1hZ2VCdWZmZXItPnRydW5jYXRlZExvZ2ljYWxTaXplKCkpLCBDb21wb3NpdGVPcGVyYXRvcjo6
UGx1c0xpZ2h0ZXIpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVh
azsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRlcnMv
RkVEcm9wU2hhZG93LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZpbHRl
cnMvRkVEcm9wU2hhZG93LmNwcAppbmRleCAyMmI3NDQ1NmQ4ZGU4ZWNhMmM0ZDFiYTZmMmU1YzJm
MTEwNDk3ODI2Li42ZjRiYjI5MTZhZDAzOTMwZGI2MWQ5NzFjMjg4ZWExODkxODMzMTdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFRHJvcFNo
YWRvdy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZmlsdGVycy9G
RURyb3BTaGFkb3cuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBGRURyb3BTaGFkb3c6OnBs
YXRmb3JtQXBwbHlTb2Z0d2FyZSgpCiAgICAgU2hhZG93Qmx1ciBjb250ZXh0U2hhZG93KGJsdXJS
YWRpdXMsIG9mZnNldCwgbV9zaGFkb3dDb2xvcik7CiAKICAgICAvLyBUT0RPOiBEaXJlY3QgcGl4
ZWwgYWNjZXNzIHRvIEltYWdlQnVmZmVyIHdvdWxkIGF2b2lkIGNvcHlpbmcgdGhlIEltYWdlRGF0
YS4KLSAgICBJbnRSZWN0IHNoYWRvd0FyZWEoSW50UG9pbnQoKSwgcmVzdWx0SW1hZ2UtPmxvZ2lj
YWxTaXplKCkpOworICAgIEludFJlY3Qgc2hhZG93QXJlYShJbnRQb2ludCgpLCByZXN1bHRJbWFn
ZS0+dHJ1bmNhdGVkTG9naWNhbFNpemUoKSk7CiAgICAgYXV0byBpbWFnZURhdGEgPSByZXN1bHRJ
bWFnZS0+Z2V0SW1hZ2VEYXRhKEFscGhhUHJlbXVsdGlwbGljYXRpb246OlByZW11bHRpcGxpZWQs
IHNoYWRvd0FyZWEpOwogICAgIGlmICghaW1hZ2VEYXRhKQogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ1NTRmlsdGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCmluZGV4IGY4ZjI1Njc5ZDQ4MjhjMGMzY2Ey
NmZjMDM4YjYzZTZmOWY1MWRkNTAuLmI4ODNkZGFiMGViNGYxMTMwYTQyM2M5NWFmMDY3MTc3NGRi
NzYzZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9DU1NGaWx0ZXIuY3BwCkBAIC0zNDIsNyAr
MzQyLDcgQEAgdm9pZCBDU1NGaWx0ZXI6OmFsbG9jYXRlQmFja2luZ1N0b3JlSWZOZWVkZWQoY29u
c3QgR3JhcGhpY3NDb250ZXh0JiB0YXJnZXRDb250ZXgKICAgICAgICAgcmV0dXJuOwogCiAgICAg
SW50U2l6ZSBsb2dpY2FsU2l6ZSB7IG1fc291cmNlRHJhd2luZ1JlZ2lvbi5zaXplKCkgfTsKLSAg
ICBpZiAoIXNvdXJjZUltYWdlKCkgfHwgc291cmNlSW1hZ2UoKS0+bG9naWNhbFNpemUoKSAhPSBs
b2dpY2FsU2l6ZSkgeworICAgIGlmICghc291cmNlSW1hZ2UoKSB8fCBzb3VyY2VJbWFnZSgpLT50
cnVuY2F0ZWRMb2dpY2FsU2l6ZSgpICE9IGxvZ2ljYWxTaXplKSB7CiAjaWYgVVNFKERJUkVDVDJE
KQogICAgICAgICBzZXRTb3VyY2VJbWFnZShJbWFnZUJ1ZmZlcjo6Y3JlYXRlKGxvZ2ljYWxTaXpl
LCByZW5kZXJpbmdNb2RlKCksICZ0YXJnZXRDb250ZXh0LCBmaWx0ZXJTY2FsZSgpLCBEZXN0aW5h
dGlvbkNvbG9yU3BhY2U6OlNSR0IsIFBpeGVsRm9ybWF0OjpCR1JBOCkpOwogI2Vsc2UKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQYXR0
ZXJuLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUmVzb3VyY2VQ
YXR0ZXJuLmNwcAppbmRleCA5NGMyOWQzYjY0ODA2M2ExYjdlMWNhODk3N2Q5NGUzYWM2ODYwMmRi
Li4wODU2YjFjOTdiOWEwZGY0YjRjMDc0MWNhMzhmYjVlNzc5MzE0OWZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Jlc291cmNlUGF0dGVybi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdSZXNvdXJjZVBhdHRl
cm4uY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgUGF0dGVybkRhdGEqIFJlbmRlclNWR1Jlc291cmNl
UGF0dGVybjo6YnVpbGRQYXR0ZXJuKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBPcHQKICAgICBp
ZiAoIXRpbGVJbWFnZSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBjb25zdCBJbnRT
aXplIHRpbGVJbWFnZVNpemUgPSB0aWxlSW1hZ2UtPmxvZ2ljYWxTaXplKCk7CisgICAgY29uc3Qg
SW50U2l6ZSB0aWxlSW1hZ2VTaXplID0gdGlsZUltYWdlLT50cnVuY2F0ZWRMb2dpY2FsU2l6ZSgp
OwogCiAgICAgYXV0byBjb3BpZWRJbWFnZSA9IEltYWdlQnVmZmVyOjpzaW5rSW50b05hdGl2ZUlt
YWdlKFdURk1vdmUodGlsZUltYWdlKSk7CiAgICAgaWYgKCFjb3BpZWRJbWFnZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kLmNwcAppbmRleCA1YzAxMzY5ZWFjMzQ3NWM0NTgyOTk5YThkNWY3YjFiZTFhZjM5
YmNjLi4zZGM4YzdkZjAzOGViZTA5OWEwODUzMzJlNWJkYmYwOTAzOWI3NTZlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2Vu
ZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRl
cmluZ0JhY2tlbmQuY3BwCkBAIC00MTksNyArNDE5LDcgQEAgdm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kOjpnZXRTaGFyZWFibGVCaXRtYXBGb3JJbWFnZUJ1ZmZlcihXZWJDb3JlOjpSZW5kZXJp
bmcKICAgICAgICAgaWYgKCFpbWFnZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYXV0
byBiYWNrZW5kU2l6ZSA9IGltYWdlQnVmZmVyLT5iYWNrZW5kU2l6ZSgpOwotICAgICAgICBhdXRv
IHJlc3VsdFNpemUgPSBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gV2ViQ29yZTo6UHJlc2VydmVSZXNv
bHV0aW9uOjpZZXMgPyBiYWNrZW5kU2l6ZSA6IGltYWdlQnVmZmVyLT5sb2dpY2FsU2l6ZSgpOwor
ICAgICAgICBhdXRvIHJlc3VsdFNpemUgPSBwcmVzZXJ2ZVJlc29sdXRpb24gPT0gV2ViQ29yZTo6
UHJlc2VydmVSZXNvbHV0aW9uOjpZZXMgPyBiYWNrZW5kU2l6ZSA6IGltYWdlQnVmZmVyLT50cnVu
Y2F0ZWRMb2dpY2FsU2l6ZSgpOwogICAgICAgICBhdXRvIGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlU2hhcmVhYmxlKHJlc3VsdFNpemUsIHsgfSk7CiAgICAgICAgIGlmICghYml0bWFw
KQogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQv
UmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tIGIvU291cmNlL1dlYktp
dC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tCmluZGV4
IDhhMTBmMTVhMWRmYmUwNzAyMzBkMjBjNjMwMzlkMWIwNTIyMjlmNzIuLjliOTQwMTg2YzVhZDg1
ODc4NDA3NjgwOTNjMzBmOGQzMWE3NmRkZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvU2hh
cmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUu
bW0KQEAgLTI1Myw3ICsyNTMsNyBAQCBib29sIFJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpkaXNw
bGF5KCkKIAogICAgIGlmICghbV9kaXJ0eVJlZ2lvbi5jb250YWlucyhsYXllckJvdW5kcykpIHsK
ICAgICAgICAgQVNTRVJUKG1fYmFja0J1ZmZlci5pbWFnZUJ1ZmZlcik7Ci0gICAgICAgIGNvbnRl
eHQuZHJhd0ltYWdlQnVmZmVyKCptX2JhY2tCdWZmZXIuaW1hZ2VCdWZmZXIsIHsgezAsIDB9LCBt
X3NpemUgfSwgeyB7MCwgMH0sIG1fc2l6ZSB9LCB7IFdlYkNvcmU6OkNvbXBvc2l0ZU9wZXJhdG9y
OjpDb3B5IH0pOworICAgICAgICBjb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqbV9iYWNrQnVmZmVy
LmltYWdlQnVmZmVyLCB7IDAsIDAgfSwgeyBXZWJDb3JlOjpDb21wb3NpdGVPcGVyYXRvcjo6Q29w
eSB9KTsKICAgICB9CiAKICAgICBpZiAobV9wYWludGluZ1JlY3RzLnNpemUoKSA9PSAxKQo=
</data>
<flag name="review"
          id="448417"
          type_id="1"
          status="+"
          setter="sabouhallawa"
    />
    <flag name="commit-queue"
          id="448420"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>448468</attachid>
            <date>2022-01-05 23:21:06 -0800</date>
            <delta_ts>2022-01-07 11:46:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-225377-20220105232105.patch</filename>
            <type>text/plain</type>
            <size>3440</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg3NjczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZkMzNhZjdhODI5MDNiMDMx
MzA1YmY5ZjM2ODNkMDY0NWU5Y2MxNWIuLjhhNDIxY2ZkOGI2ZGRhZWVkMjM5Y2RjZTZiYWQwYmY4
NjI5MDEyYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjItMDEtMDUgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBJbWFnZUJ1ZmZlciB3
aXRoIGZsb2F0aW5nIHBvaW50IGxvZ2ljYWxTaXplKCkgcGFpbnRzIGludG8gYSBzbGlnaHRseSB0
cnVuY2F0ZWQgZGVzdGluYXRpb24gcmVjdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI1Mzc3CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVGhpcyBpcyB0aGUgcmVzdCBvZiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjMyNDcwLgorCisgICAgICAgIE5vIG5ldyB0ZXN0czsgdGhl
IGJlaGF2aW9yIGNoYW5nZSBpcyBjb3ZlcmVkIGJ5CisgICAgICAgIGZhc3QvYmFja2dyb3VuZHMv
aGlkcGktYml0bWFwLWJhY2tncm91bmQtb3JpZ2luLW9uLXN1YnBpeGVsLXBvc2l0aW9uLmh0bWwK
KyAgICAgICAgc2luY2UgVGltIEhvcnRvbiByZXZlcnRlZCB0aGUgd29ya2Fyb3VuZCBmb3IgdGhp
cyBidWcgdGhhdCBoZSBsYW5kZWQgaW4gcjI3Njk0NS4KKworICAgICAgICAqIFNoYXJlZC9SZW1v
dGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5nU3RvcmUubW06CisgICAgICAgIChXZWJLaXQ6
OlJlbW90ZUxheWVyQmFja2luZ1N0b3JlOjpkcmF3SW5Db250ZXh0KToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHk6OmNyZWF0ZVJlbW90ZUlt
YWdlQnVmZmVyKToKKwogMjAyMS0xMC0zMCAgTXlsZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRA
YXBwbGUuY29tPgogCiAgICAgICAgIFtHUFUgUHJvY2Vzc10gU21hbGwgSW1hZ2VCdWZmZXJzIGNh
dXNlIHRoZSB3ZWIgcHJvY2VzcyB0byBjcmFzaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9T
aGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1tIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyQmFja2luZ1N0b3JlLm1t
CmluZGV4IDg3MWI4ZjNkYjQwZWFlNGQ0Y2RmNzI2MGNlNzY3ZDZhZWZiOTNmYTAuLjA5MDM4MzRh
YWIxYzdmZGJjNWRhMDRiYmZmYmFjNWZmZWM4NmFmNmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllckJhY2tpbmdTdG9yZS5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJCYWNraW5n
U3RvcmUubW0KQEAgLTM3MSw3ICszNzEsNyBAQCB2b2lkIFJlbW90ZUxheWVyQmFja2luZ1N0b3Jl
OjpkcmF3SW5Db250ZXh0KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKICAgICBX
ZWJDb3JlOjpJbnRSZWN0IGxheWVyQm91bmRzKFdlYkNvcmU6OkludFBvaW50KCksIFdlYkNvcmU6
OmV4cGFuZGVkSW50U2l6ZShtX3NpemUpKTsKICAgICBpZiAoIW1fZGlydHlSZWdpb24uY29udGFp
bnMobGF5ZXJCb3VuZHMpKSB7CiAgICAgICAgIEFTU0VSVChtX2JhY2tCdWZmZXIuaW1hZ2VCdWZm
ZXIpOwotICAgICAgICBjb250ZXh0LmRyYXdJbWFnZUJ1ZmZlcigqbV9iYWNrQnVmZmVyLmltYWdl
QnVmZmVyLCB7IHswLCAwfSwgbV9zaXplIH0sIHsgezAsIDB9LCBtX3NpemUgfSwgeyBXZWJDb3Jl
OjpDb21wb3NpdGVPcGVyYXRvcjo6Q29weSB9KTsKKyAgICAgICAgY29udGV4dC5kcmF3SW1hZ2VC
dWZmZXIoKm1fYmFja0J1ZmZlci5pbWFnZUJ1ZmZlciwgeyAwLCAwIH0sIHsgV2ViQ29yZTo6Q29t
cG9zaXRlT3BlcmF0b3I6OkNvcHkgfSk7CiAgICAgfQogCiAgICAgaWYgKG1fcGFpbnRpbmdSZWN0
cy5zaXplKCkgPT0gMSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcApp
bmRleCBhMmJiMWVkYTA0YzhkZTA0MGM1MjRhMTMyNDIwMmNlNDYxOTI5YmU2Li4zNDBkZTlmZGNj
NzE4ZGJiOWMzNmY5NTQwYmNkZjRiNjg3ZTE5MzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVSZW5kZXJp
bmdCYWNrZW5kUHJveHkuY3BwCkBAIC0xMjgsMTEgKzEyOCw2IEBAIGJvb2wgUmVtb3RlUmVuZGVy
aW5nQmFja2VuZFByb3h5Ojp3YWl0Rm9yRGlkRmx1c2goKQogdm9pZCBSZW1vdGVSZW5kZXJpbmdC
YWNrZW5kUHJveHk6OmNyZWF0ZVJlbW90ZUltYWdlQnVmZmVyKEltYWdlQnVmZmVyJiBpbWFnZUJ1
ZmZlcikKIHsKICAgICBhdXRvIGxvZ2ljYWxTaXplID0gaW1hZ2VCdWZmZXIubG9naWNhbFNpemUo
KTsKLSAgICBpZiAobG9naWNhbFNpemUud2lkdGgoKSA+IDEgfHwgbG9naWNhbFNpemUuaGVpZ2h0
KCkgPiAxKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjI1Mzc3IElmIHdlIHVuY29uZGl0aW9uYWxseSB1c2UgaW1hZ2VCdWZmZXIu
bG9naWNhbFNpemUoKSBoZXJlIGluc3RlYWQgb2YgaW1hZ2VCdWZmZXIudHJ1bmNhdGVkTG9naWNh
bFNpemUoKSwKLSAgICAgICAgLy8gdGhlcmUgbWF5IGJlIGEgbWVtb3J5IHJlZ3Jlc3Npb24uIFNl
ZSBodHRwczovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMjg3MzU4L3dlYmtpdAotICAgICAg
ICBsb2dpY2FsU2l6ZSA9IGltYWdlQnVmZmVyLnRydW5jYXRlZExvZ2ljYWxTaXplKCk7Ci0gICAg
fQogICAgIHNlbmRUb1N0cmVhbShNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6Q3Jl
YXRlSW1hZ2VCdWZmZXIobG9naWNhbFNpemUsIGltYWdlQnVmZmVyLnJlbmRlcmluZ01vZGUoKSwg
aW1hZ2VCdWZmZXIucmVzb2x1dGlvblNjYWxlKCksIGltYWdlQnVmZmVyLmNvbG9yU3BhY2UoKSwg
aW1hZ2VCdWZmZXIucGl4ZWxGb3JtYXQoKSwgaW1hZ2VCdWZmZXIucmVuZGVyaW5nUmVzb3VyY2VJ
ZGVudGlmaWVyKCkpKTsKIH0KIAo=
</data>
<flag name="review"
          id="474525"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>