<?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>232201</bug_id>
          
          <creation_ts>2021-10-23 11:25:11 -0700</creation_ts>
          <short_desc>Allow ImageDiff to read from files</short_desc>
          <delta_ts>2021-10-24 15:35:22 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>232212</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>gsnedders</cc>
    
    <cc>jbedard</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1808091</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-23 11:25:11 -0700</bug_when>
    <thetext>Allow ImageDiff to read from files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808092</commentid>
    <comment_count>1</comment_count>
      <attachid>442267</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-23 11:26:48 -0700</bug_when>
    <thetext>Created attachment 442267
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808094</commentid>
    <comment_count>2</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-23 11:28:17 -0700</bug_when>
    <thetext>I also wonder whether we should compile ImageDiff with optimization enabled in debug builds (since that will improve its performance).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808095</commentid>
    <comment_count>3</comment_count>
      <attachid>442269</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-23 11:30:13 -0700</bug_when>
    <thetext>Created attachment 442269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808128</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2021-10-23 14:57:22 -0700</bug_when>
    <thetext>Ideally, I&apos;d love to have ImageDiff rewritten in a scripting language, so that it doesn&apos;t need to be compiled. This would avoid the need to have macOS SDK when doing iOS testing, for example.

Performance doesn&apos;t matter too much, as ImageDiff is only invoked when hashes don&apos;t match.

What happens with all this stderr printing when running from run-webkit-tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808130</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2021-10-23 15:01:09 -0700</bug_when>
    <thetext>Very sad to see naive tolerance find its way into WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808136</commentid>
    <comment_count>6</comment_count>
      <attachid>442269</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-23 15:34:01 -0700</bug_when>
    <thetext>Comment on attachment 442269
Patch

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

&gt; Tools/ImageDiff/ImageDiff.cpp:92
&gt; +    bool verbose = true;

This should be false.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808137</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-23 15:37:11 -0700</bug_when>
    <thetext>My plan is to (In reply to Alexey Proskuryakov from comment #4)
&gt; Ideally, I&apos;d love to have ImageDiff rewritten in a scripting language, so
&gt; that it doesn&apos;t need to be compiled. This would avoid the need to have macOS
&gt; SDK when doing iOS testing, for example.
&gt; 
&gt; Performance doesn&apos;t matter too much, as ImageDiff is only invoked when
&gt; hashes don&apos;t match.

We&apos;d need to invoke some library to decode a PNG into pixel data if doing it in script.

Maybe we should just commit an ImageDiff binary?

&gt; What happens with all this stderr printing when running from
&gt; run-webkit-tests?

It shows up with --debut-rwt-logging. The patch has it true by default by mistake.

&gt; Very sad to see naive tolerance find its way into WebKit

I&apos;ve discovered that the built-in tolerance is enough to fail to distinguish between rgb(0, 127, 0) and rgb(0, 128, 0), which seems really bad when testing color component rounding. I plan to experiment with removing the built-in tolerance, but implementing WPT-style tolerance and using that when necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808166</commentid>
    <comment_count>8</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-23 21:06:37 -0700</bug_when>
    <thetext>(In reply to Alexey Proskuryakov from comment #4)
&gt; Ideally, I&apos;d love to have ImageDiff rewritten in a scripting language, so
&gt; that it doesn&apos;t need to be compiled. This would avoid the need to have macOS
&gt; SDK when doing iOS testing, for example.

Turns out wpt has this already:

    def get_differences(self, screenshots, urls, page_idx=None):
        from PIL import Image, ImageChops, ImageStat

        lhs = Image.open(io.BytesIO(base64.b64decode(screenshots[0]))).convert(&quot;RGB&quot;)
        rhs = Image.open(io.BytesIO(base64.b64decode(screenshots[1]))).convert(&quot;RGB&quot;)
        self.check_if_solid_color(lhs, urls[0])
        self.check_if_solid_color(rhs, urls[1])
        diff = ImageChops.difference(lhs, rhs)
        minimal_diff = diff.crop(diff.getbbox())
        mask = minimal_diff.convert(&quot;L&quot;, dither=None)
        stat = ImageStat.Stat(minimal_diff, mask)
        per_channel = max(item[1] for item in stat.extrema)
        count = stat.count[0]

We&apos;d have to teach it about webkit-style diffing, or migrate entirely to WPT-style diffs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808172</commentid>
    <comment_count>9</comment_count>
      <attachid>442269</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-10-23 22:24:39 -0700</bug_when>
    <thetext>Comment on attachment 442269
Patch

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

&gt; Tools/ImageDiff/ImageDiff.cpp:66
&gt; +    std::unique_ptr&lt;PlatformImage&gt; diffImage = actualImage-&gt;difference(*baselineImage, difference);

auto?

&gt; Tools/ImageDiff/ImageDiff.cpp:102
&gt; +                fprintf(stderr, &quot;Failed to read numberic tolerance value from %s\n&quot;, argv[i + 1]);

Typo in “numeric” here

&gt; Tools/ImageDiff/ImageDiff.cpp:135
&gt; +            if (!strncmp(file1Path, &quot;-&quot;, 1)) {

Can check he first character just by dereferencing. Don’t need strncmp:

    If (file1Path[0] == ‘-‘)

Since it’s a null-terminated string.

&gt; Tools/ImageDiff/ImageDiff.cpp:140
&gt; +            if (!strncmp(file2Path, &quot;-&quot;, 1)) {

Ditto.

&gt; Tools/ImageDiff/ImageDiff.cpp:161
&gt; +            auto result = processImages(std::exchange(actualImage, { }), std::exchange(baselineImage, { }), tolerance);

I’d use std::move or WTFMove here. No reason we need to clear out the local variable since it’s unused. Unlike the different case below where it’s part of a loop.

&gt; Tools/ImageDiff/ImageDiff.cpp:165
&gt; +            return EXIT_SUCCESS;

Why not just return the result of processImages?

&gt; Tools/ImageDiff/ImageDiff.cpp:175
&gt; +            fprintf(stderr, &quot;ImageDiff: read %lu bytes from stdin %s&quot;, strlen(buffer), buffer);

strlen is size_t so this ought to be %zu, or something else even more portable that doesnot rely on size_t being same size as long.

&gt; Tools/ImageDiff/ImageDiff.cpp:214
&gt; +            if (result == EXIT_FAILURE)

Or if result != sucess, return result

&gt; Tools/ImageDiff/cg/PlatformImageCG.cpp:76
&gt; +    CGDataProviderRef dataProvider = CGDataProviderCreateWithFilename(filePath);

I’d use auto more and adoptCF</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808180</commentid>
    <comment_count>10</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-23 23:35:56 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; Comment on attachment 442269 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=442269&amp;action=review
&gt;
&gt; I’d use auto more and adoptCF

This code doesn&apos;t pull in any of WTF (because it gets built in weird configs like building for macOS on iOS builders), hence the manual retain/release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808187</commentid>
    <comment_count>11</comment_count>
    <who name="Sam Sneddon [:gsnedders]">gsnedders</who>
    <bug_when>2021-10-24 02:26:41 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #8)
&gt; (In reply to Alexey Proskuryakov from comment #4)
&gt; &gt; Ideally, I&apos;d love to have ImageDiff rewritten in a scripting language, so
&gt; &gt; that it doesn&apos;t need to be compiled. This would avoid the need to have macOS
&gt; &gt; SDK when doing iOS testing, for example.
&gt; 
&gt; Turns out wpt has this already:
&gt; 
&gt;     def get_differences(self, screenshots, urls, page_idx=None):
&gt;         from PIL import Image, ImageChops, ImageStat
&gt; 
&gt;         lhs =
&gt; Image.open(io.BytesIO(base64.b64decode(screenshots[0]))).convert(&quot;RGB&quot;)
&gt;         rhs =
&gt; Image.open(io.BytesIO(base64.b64decode(screenshots[1]))).convert(&quot;RGB&quot;)
&gt;         self.check_if_solid_color(lhs, urls[0])
&gt;         self.check_if_solid_color(rhs, urls[1])
&gt;         diff = ImageChops.difference(lhs, rhs)
&gt;         minimal_diff = diff.crop(diff.getbbox())
&gt;         mask = minimal_diff.convert(&quot;L&quot;, dither=None)
&gt;         stat = ImageStat.Stat(minimal_diff, mask)
&gt;         per_channel = max(item[1] for item in stat.extrema)
&gt;         count = stat.count[0]
&gt; 
&gt; We&apos;d have to teach it about webkit-style diffing, or migrate entirely to
&gt; WPT-style diffs.

Will follow up more on Monday, but there was some intention to move over to using Pillow (i.e., the PIL fork that WPT uses), though there were some (Apple-internal) blockers that I can&apos;t remember the status of.

The WebKit-style diffing is only used for pixel tests, though, right? For reftests it is always run with zero tolerance currently.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808231</commentid>
    <comment_count>12</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-10-24 11:13:35 -0700</bug_when>
    <thetext>https://trac.webkit.org/changeset/284762/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808232</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-10-24 11:14:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/84595422&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1808268</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2021-10-24 15:35:22 -0700</bug_when>
    <thetext>&gt; We&apos;d need to invoke some library to decode a PNG into pixel data if doing it in script.

Right. It&apos;s possible that python has what we need, but we haven&apos;t been able to find a nice enough path forward with that yet.

&gt; Maybe we should just commit an ImageDiff binary?

I think that on the balance, it&apos;s better do build ImageDiff on demand as we do now, but we&apos;ll need to reevaluate if we ever do run tests on machines without a functional macOS SDK.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442267</attachid>
            <date>2021-10-23 11:26:48 -0700</date>
            <delta_ts>2021-10-23 12:20:12 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232201-20211023112647.patch</filename>
            <type>text/plain</type>
            <size>12340</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NzEwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMmI3MTViNzExM2ZjODg2ZTc1NTA3M2UwMTk2YWUxNDdj
MGQyNjJmOC4uYmY2MzhhYzIzYjkyYmM3ZmEwNTBiMzg5NDE5YTE1MzBlZGYwODllNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0
IEBACisyMDIxLTEwLTIzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIEFsbG93IEltYWdlRGlmZiB0byByZWFkIGZyb20gZmlsZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjIwMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgRm9yIGltcHJvdmVk
IGhhY2thYmlsaXR5IHdoZW4gd29ya2luZyBvbiBwaXhlbCB0b2xlcmFuY2UsIGFsbG93IEltYWdl
RGlmZiB0byByZWFkIGZyb20KKyAgICAgICAgZmlsZXMgYnkgYWRkaW5nIHN1cHBvcnQgZm9yIHJl
YWRpbmcgdHdvIGZpbGUgcGF0aCBhcmd1bWVudHMuCisKKyAgICAgICAgQWxzbyBhZGQgc29tZSBu
aWNlIC0taGVscCBvdXRwdXQsIGFuZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciAtLXZlcmJvc2Uu
CisKKyAgICAgICAgKiBJbWFnZURpZmYvSW1hZ2VEaWZmLmNwcDoKKyAgICAgICAgKHByb2Nlc3NJ
bWFnZXMpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogSW1hZ2VEaWZmL1BsYXRmb3JtSW1h
Z2UuaDoKKyAgICAgICAgKiBJbWFnZURpZmYvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcDoK
KyAgICAgICAgKEltYWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6Y3JlYXRlRnJvbUZpbGUpOgorICAg
ICAgICAqIEltYWdlRGlmZi9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwOgorICAgICAgICAoSW1hZ2VE
aWZmOjpQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tRmlsZSk6CisKIDIwMjEtMTAtMjIgIFJveSBS
ZWFwb3IgIDxycmVhcG9yQGFwcGxlLmNvbT4KIAogICAgICAgICB3ZWJraXRweS9hdXRvaW5zdGFs
bGVkL3B5b2JqY19mcmFtZXdvcmtzLnB5IHNob3VsZCBpbnN0YWxsIHdoZWVsIGRpc3RyaWJ1dGlv
bgpkaWZmIC0tZ2l0IGEvVG9vbHMvSW1hZ2VEaWZmL0ltYWdlRGlmZi5jcHAgYi9Ub29scy9JbWFn
ZURpZmYvSW1hZ2VEaWZmLmNwcAppbmRleCA5ODQ5ZjZmZDVkMGIwYmU0MmNkNDZjMmQ5Yjc5ZTdi
Y2I3ZDg0MWI1Li4wNWY1ZGJmYjZmMDI0MTNhNDU3MTJiMTc0YjIyOGM0NTIwMjAxNzEyIDEwMDY0
NAotLS0gYS9Ub29scy9JbWFnZURpZmYvSW1hZ2VEaWZmLmNwcAorKysgYi9Ub29scy9JbWFnZURp
ZmYvSW1hZ2VEaWZmLmNwcApAQCAtMzQsNiArMzQsOCBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAj
aW5jbHVkZSA8c3RyaW5nLmg+CiAKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKwogI2lmZGVmIF9XSU4z
MgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8aW8uaD4KQEAgLTQ4LDYgKzUwLDM5IEBA
IHVzaW5nIG5hbWVzcGFjZSBJbWFnZURpZmY7CiAjZGVmaW5lIEZPUk1BVF9TSVpFX1QgInp1Igog
I2VuZGlmCiAKK3N0YXRpYyBpbnQgcHJvY2Vzc0ltYWdlcyhzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZv
cm1JbWFnZT4mJiBhY3R1YWxJbWFnZSwgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtSW1hZ2U+JiYg
YmFzZWxpbmVJbWFnZSwgZmxvYXQgdG9sZXJhbmNlKQoreworICAgIGlmICghYWN0dWFsSW1hZ2Ut
PmlzQ29tcGF0aWJsZSgqYmFzZWxpbmVJbWFnZSkpIHsKKyAgICAgICAgaWYgKGFjdHVhbEltYWdl
LT53aWR0aCgpICE9IGJhc2VsaW5lSW1hZ2UtPndpZHRoKCkgfHwgYWN0dWFsSW1hZ2UtPmhlaWdo
dCgpICE9IGJhc2VsaW5lSW1hZ2UtPmhlaWdodCgpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkVycm9yOiB0ZXN0IGFuZCByZWZlcmVuY2UgaW1hZ2VzIGhhdmUgZGlmZmVyZW50IHNp
emVzLiBUZXN0IGltYWdlIGlzICUiIEZPUk1BVF9TSVpFX1QgInglIiBGT1JNQVRfU0laRV9UICIs
IHJlZmVyZW5jZSBpbWFnZSBpcyAlIiBGT1JNQVRfU0laRV9UICJ4JSIgRk9STUFUX1NJWkVfVCAi
XG4iLAorICAgICAgICAgICAgICAgIGFjdHVhbEltYWdlLT53aWR0aCgpLCBhY3R1YWxJbWFnZS0+
aGVpZ2h0KCksIGJhc2VsaW5lSW1hZ2UtPndpZHRoKCksIGJhc2VsaW5lSW1hZ2UtPmhlaWdodCgp
KTsKKyAgICAgICAgfSBlbHNlIGlmIChhY3R1YWxJbWFnZS0+aGFzQWxwaGEoKSAhPSBiYXNlbGlu
ZUltYWdlLT5oYXNBbHBoYSgpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9y
OiB0ZXN0IGFuZCByZWZlcmVuY2UgaW1hZ2VzIGRpZmZlciBpbiBhbHBoYS4gVGVzdCBpbWFnZSAl
cyBhbHBoYSwgcmVmZXJlbmNlIGltYWdlICVzIGFscGhhLlxuIiwKKyAgICAgICAgICAgICAgICBh
Y3R1YWxJbWFnZS0+aGFzQWxwaGEoKSA/ICJoYXMiIDogImRvZXMgbm90IGhhdmUiLCBiYXNlbGlu
ZUltYWdlLT5oYXNBbHBoYSgpID8gImhhcyIgOiAiZG9lcyBub3QgaGF2ZSIpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICB9CisKKyAgICBmbG9hdCBkaWZm
ZXJlbmNlID0gMTAwLjBmOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUltYWdlPiBkaWZm
SW1hZ2UgPSBhY3R1YWxJbWFnZS0+ZGlmZmVyZW5jZSgqYmFzZWxpbmVJbWFnZSwgZGlmZmVyZW5j
ZSk7CisgICAgaWYgKGRpZmZlcmVuY2UgPD0gdG9sZXJhbmNlKQorICAgICAgICBkaWZmZXJlbmNl
ID0gMC4wZjsKKyAgICBlbHNlIHsKKyAgICAgICAgZGlmZmVyZW5jZSA9IHJvdW5kZihkaWZmZXJl
bmNlICogMTAwLjBmKSAvIDEwMC4wZjsKKyAgICAgICAgZGlmZmVyZW5jZSA9IHN0ZDo6bWF4PGZs
b2F0PihkaWZmZXJlbmNlLCAwLjAxZik7IC8vIHJvdW5kIHRvIDIgZGVjaW1hbCBwbGFjZXMKKyAg
ICB9CisKKyAgICBpZiAoZGlmZmVyZW5jZSA+IDAuMGYpIHsKKyAgICAgICAgaWYgKGRpZmZJbWFn
ZSkKKyAgICAgICAgICAgIGRpZmZJbWFnZS0+d3JpdGVBc1BOR1RvU3Rkb3V0KCk7CisgICAgICAg
IGZwcmludGYoc3Rkb3V0LCAiZGlmZjogJTAxLjJmJSUgZmFpbGVkXG4iLCBkaWZmZXJlbmNlKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICJkaWZmOiAlMDEuMmYlJSBwYXNz
ZWRcbiIsIGRpZmZlcmVuY2UpOworCisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKwogaW50
IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKIHsKICNpZmRlZiBfV0lOMzIKQEAg
LTU2LDE1ICs5MSw4MSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQog
I2VuZGlmCiAKICAgICBmbG9hdCB0b2xlcmFuY2UgPSAwLjBmOworICAgIGJvb2wgdmVyYm9zZSA9
IHRydWU7CiAKICAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7ICsraSkgewogICAgICAgICBp
ZiAoIXN0cmNtcChhcmd2W2ldLCAiLXQiKSB8fCAhc3RyY21wKGFyZ3ZbaV0sICItLXRvbGVyYW5j
ZSIpKSB7CiAgICAgICAgICAgICBpZiAoaSA+PSBhcmdjIC0gMSkKLSAgICAgICAgICAgICAgICBl
eGl0KDEpOwotICAgICAgICAgICAgdG9sZXJhbmNlID0gc3RydG9mKGFyZ3ZbaSArIDFdLCAwKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgICAgICAgICAgCisgICAg
ICAgICAgICBjaGFyKiByZWFkRW5kID0gTlVMTDsKKyAgICAgICAgICAgIHRvbGVyYW5jZSA9IHN0
cnRvZihhcmd2W2kgKyAxXSwgJnJlYWRFbmQpOworICAgICAgICAgICAgaWYgKHJlYWRFbmQgPT0g
YXJndltpICsgMV0pIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0
byByZWFkIG51bWJlcmljIHRvbGVyYW5jZSB2YWx1ZSBmcm9tICVzXG4iLCBhcmd2W2kgKyAxXSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICsraTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisKKyAgICAg
ICAgaWYgKCFzdHJjbXAoYXJndltpXSwgIi12IikgfHwgIXN0cmNtcChhcmd2W2ldLCAiLS12ZXJi
b3NlIikpIHsKKyAgICAgICAgICAgIHZlcmJvc2UgPSB0cnVlOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLWgiKSB8fCAh
c3RyY21wKGFyZ3ZbaV0sICItLWhlbHAiKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRvdXQs
CisgICAgICAgICAgICAgICAgInVzYWdlOiBJbWFnZURpZmYgWy1oXSBbLXQgVE9MRVJBTkNFXSBb
LXZdIChbYWN0dWFsSW1hZ2UgYmFzZWxpbmVJbWFnZV0gfCA8c3RkaW4+KVxuIiBcCisgICAgICAg
ICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIlJlYWRzIHR3byBQTkctZW5jb2RlZCBp
bWFnZXMgYW5kIGNvbXBhcmVzIHRoZW0uIElmIHR3byBmaWxlIHBhdGggYXJndW1lbnRzIGFyZSBz
dXBwbGllZCwgXG4iIFwKKyAgICAgICAgICAgICAgICAicmVhZHMgZnJvbSB0aGUgc3BlY2lmaWVk
IGZpbGVzLCBvdGhlcndpc2UgZnJvbSA8c3RkaW4+IHdoZXJlIGVhY2ggZmlsZSBpcyBwcmVjZWRl
ZCBieSBcbiIgXAorICAgICAgICAgICAgICAgICJhIFwiQ29udGVudC1MZW5ndGg6XCIgaGVhZGVy
LlxuIiBcCisgICAgICAgICAgICAgICAgIlxuIiBcCisgICAgICAgICAgICAgICAgIm9wdGlvbmFs
IGFyZ3VtZW50czpcbiIgXAorICAgICAgICAgICAgICAgICIgIC1oLCAtLWhlbHAgICAgICAgICAg
ICBzaG93IHRoaXMgaGVscCBtZXNzYWdlIGFuZCBleGl0XG4iIFwKKyAgICAgICAgICAgICAgICAi
ICAtdiwgLS12ZXJib3NlICAgICAgICAgcHJpbnQgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiB0byBz
dGRlcnJcbiIgXAorICAgICAgICAgICAgICAgICIgIC10LCAtLXRvbGVyYW5jZSBUT0xFUkFOQ0Vc
biIgXAorICAgICAgICAgICAgICAgICIgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlIHRo
ZSBpbWFnZXMgd2l0aCB0aGUgZ2l2ZW4gdG9sZXJhbmNlXG4iCisgICAgICAgICAgICApOworICAg
ICAgICAgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
IDwgYXJnYyAtIDEpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGUxUGF0aCA9IGFyZ3Zb
aV07CisgICAgICAgICAgICBjb25zdCBjaGFyKiBmaWxlMlBhdGggPSBhcmd2W2kgKyAxXTsKKwor
ICAgICAgICAgICAgaWYgKCFzdHJuY21wKGZpbGUxUGF0aCwgIi0iLCAxKSkgeworICAgICAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiQW1iaWd1b3VzIGZpbGUgcGF0aCBhcmd1bWVudCAlc1xu
IiwgZmlsZTFQYXRoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIXN0cm5jbXAoZmlsZTJQYXRoLCAiLSIsIDEp
KSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJBbWJpZ3VvdXMgZmlsZSBwYXRo
IGFyZ3VtZW50ICVzXG4iLCBmaWxlMlBhdGgpOworICAgICAgICAgICAgICAgIHJldHVybiBFWElU
X0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGF1dG8gYWN0dWFsSW1hZ2Ug
PSBQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tRmlsZShmaWxlMVBhdGgpOworICAgICAgICAgICAg
YXV0byBiYXNlbGluZUltYWdlID0gUGxhdGZvcm1JbWFnZTo6Y3JlYXRlRnJvbUZpbGUoZmlsZTJQ
YXRoKTsKKworICAgICAgICAgICAgaWYgKCFhY3R1YWxJbWFnZSkgeworICAgICAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNyZWF0ZSBpbWFnZSBmcm9tICVzXG4iLCBmaWxl
MVBhdGgpOworICAgICAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGlmICghYmFzZWxpbmVJbWFnZSkgeworICAgICAgICAgICAgICAg
IGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGNyZWF0ZSBpbWFnZSBmcm9tICVzXG4iLCBmaWxl
MlBhdGgpOworICAgICAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiQ29tcGFyaW5nIGZpbGVzIGFjdHVhbDogJXMgYW5kIGJhc2Vs
aW5lOiAlc1xuIiwgZmlsZTFQYXRoLCBmaWxlMlBhdGgpOworCisgICAgICAgICAgICBhdXRvIHJl
c3VsdCA9IHByb2Nlc3NJbWFnZXMoc3RkOjpleGNoYW5nZShhY3R1YWxJbWFnZSwgeyB9KSwgc3Rk
OjpleGNoYW5nZShiYXNlbGluZUltYWdlLCB7IH0pLCB0b2xlcmFuY2UpOworICAgICAgICAgICAg
aWYgKHJlc3VsdCA9PSBFWElUX0ZBSUxVUkUpCisgICAgICAgICAgICAgICAgcmV0dXJuIEVYSVRf
RkFJTFVSRTsKKworICAgICAgICAgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKKyAgICAgICAgfQog
ICAgIH0KIAogICAgIGNoYXIgYnVmZmVyWzIwNDhdOwpAQCAtNzIsNiArMTczLDkgQEAgaW50IG1h
aW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIqIGFyZ3ZbXSkKICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxh
dGZvcm1JbWFnZT4gYmFzZWxpbmVJbWFnZTsKIAogICAgIHdoaWxlIChmZ2V0cyhidWZmZXIsIHNp
emVvZihidWZmZXIpLCBzdGRpbikpIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkltYWdlRGlmZjogcmVhZCAlbHUgYnl0ZXMgZnJvbSBzdGRpbiAl
cyIsIHN0cmxlbihidWZmZXIpLCBidWZmZXIpOworCiAgICAgICAgIC8vIENvbnZlcnQgdGhlIGZp
cnN0IG5ld2xpbmUgaW50byBhIE5VTCBjaGFyYWN0ZXIgc28gdGhhdCBzdHJ0b2sgZG9lc24ndCBw
cm9kdWNlIGl0LgogICAgICAgICBjaGFyKiBuZXdMaW5lQ2hhcmFjdGVyID0gc3RyY2hyKGJ1ZmZl
ciwgJ1xuJyk7CiAgICAgICAgIGlmIChuZXdMaW5lQ2hhcmFjdGVyKQpAQCAtODcsMTEgKzE5MSwx
NyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBpZiAoIWFjdHVhbEltYWdlKSB7CisgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiUmVhZGluZyAl
ZCBieXRlcyBvZiBhY3R1YWwgaW1hZ2UgZGF0YVxuIiwgaW1hZ2VTaXplKTsKKwogICAgICAgICAg
ICAgICAgIGlmICghKGFjdHVhbEltYWdlID0gUGxhdGZvcm1JbWFnZTo6Y3JlYXRlRnJvbVN0ZGlu
KGltYWdlU2l6ZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJy
b3I6IGNvdWxkIG5vdCByZWFkIGFjdHVhbCBpbWFnZS5cbiIpOwogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gRVhJVF9GQUlMVVJFOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoIWJhc2VsaW5lSW1hZ2UpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
KyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJSZWFkaW5nICVkIGJ5dGVzIG9m
IGJhc2VsaW5lIGltYWdlIGRhdGFcbiIsIGltYWdlU2l6ZSk7CisKICAgICAgICAgICAgICAgICBp
ZiAoIShiYXNlbGluZUltYWdlID0gUGxhdGZvcm1JbWFnZTo6Y3JlYXRlRnJvbVN0ZGluKGltYWdl
U2l6ZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGNv
dWxkIG5vdCByZWFkIGJhc2VsaW5lIGltYWdlLlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBFWElUX0ZBSUxVUkU7CkBAIC0xMDAsMzggKzIxMCwxMiBAQCBpbnQgbWFpbihpbnQgYXJn
YywgY29uc3QgY2hhciogYXJndltdKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGFjdHVhbElt
YWdlICYmIGJhc2VsaW5lSW1hZ2UpIHsKLSAgICAgICAgICAgIGlmICghYWN0dWFsSW1hZ2UtPmlz
Q29tcGF0aWJsZSgqYmFzZWxpbmVJbWFnZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWN0dWFs
SW1hZ2UtPndpZHRoKCkgIT0gYmFzZWxpbmVJbWFnZS0+d2lkdGgoKSB8fCBhY3R1YWxJbWFnZS0+
aGVpZ2h0KCkgIT0gYmFzZWxpbmVJbWFnZS0+aGVpZ2h0KCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogdGVzdCBhbmQgcmVmZXJlbmNlIGltYWdlcyBoYXZl
IGRpZmZlcmVudCBzaXplcy4gVGVzdCBpbWFnZSBpcyAlIiBGT1JNQVRfU0laRV9UICJ4JSIgRk9S
TUFUX1NJWkVfVCAiLCByZWZlcmVuY2UgaW1hZ2UgaXMgJSIgRk9STUFUX1NJWkVfVCAieCUiIEZP
Uk1BVF9TSVpFX1QgIlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbEltYWdlLT53
aWR0aCgpLCBhY3R1YWxJbWFnZS0+aGVpZ2h0KCksIGJhc2VsaW5lSW1hZ2UtPndpZHRoKCksIGJh
c2VsaW5lSW1hZ2UtPmhlaWdodCgpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFjdHVh
bEltYWdlLT5oYXNBbHBoYSgpICE9IGJhc2VsaW5lSW1hZ2UtPmhhc0FscGhhKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogdGVzdCBhbmQgcmVmZXJlbmNl
IGltYWdlcyBkaWZmZXIgaW4gYWxwaGEuIFRlc3QgaW1hZ2UgJXMgYWxwaGEsIHJlZmVyZW5jZSBp
bWFnZSAlcyBhbHBoYS5cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhY3R1YWxJbWFnZS0+
aGFzQWxwaGEoKSA/ICJoYXMiIDogImRvZXMgbm90IGhhdmUiLCBiYXNlbGluZUltYWdlLT5oYXNB
bHBoYSgpID8gImhhcyIgOiAiZG9lcyBub3QgaGF2ZSIpOwotICAgICAgICAgICAgICAgIH0KLQor
ICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJJbWFnZURpZmY6IHByb2Nlc3NpbmcgaW1hZ2VzXG4iKTsKKyAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gcHJvY2Vzc0ltYWdlcyhzdGQ6OmV4Y2hhbmdlKGFjdHVhbEltYWdlLCB7IH0pLCBzdGQ6
OmV4Y2hhbmdlKGJhc2VsaW5lSW1hZ2UsIHsgfSksIHRvbGVyYW5jZSk7CisgICAgICAgICAgICBp
ZiAocmVzdWx0ID09IEVYSVRfRkFJTFVSRSkKICAgICAgICAgICAgICAgICByZXR1cm4gRVhJVF9G
QUlMVVJFOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmbG9hdCBkaWZmZXJlbmNlID0g
MTAwLjBmOwotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtSW1hZ2U+IGRpZmZJ
bWFnZSA9IGFjdHVhbEltYWdlLT5kaWZmZXJlbmNlKCpiYXNlbGluZUltYWdlLCBkaWZmZXJlbmNl
KTsKLSAgICAgICAgICAgIGlmIChkaWZmZXJlbmNlIDw9IHRvbGVyYW5jZSkKLSAgICAgICAgICAg
ICAgICBkaWZmZXJlbmNlID0gMC4wZjsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIGRpZmZlcmVuY2UgPSByb3VuZGYoZGlmZmVyZW5jZSAqIDEwMC4wZikgLyAxMDAuMGY7Ci0g
ICAgICAgICAgICAgICAgZGlmZmVyZW5jZSA9IHN0ZDo6bWF4PGZsb2F0PihkaWZmZXJlbmNlLCAw
LjAxZik7IC8vIHJvdW5kIHRvIDIgZGVjaW1hbCBwbGFjZXMKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKGRpZmZlcmVuY2UgPiAwLjBmKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRp
ZmZJbWFnZSkKLSAgICAgICAgICAgICAgICAgICAgZGlmZkltYWdlLT53cml0ZUFzUE5HVG9TdGRv
dXQoKTsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgImRpZmY6ICUwMS4yZiUlIGZh
aWxlZFxuIiwgZGlmZmVyZW5jZSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICBmcHJpbnRmKHN0ZG91dCwgImRpZmY6ICUwMS4yZiUlIHBhc3NlZFxuIiwgZGlmZmVyZW5jZSk7
Ci0KLSAgICAgICAgICAgIGFjdHVhbEltYWdlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGJhc2Vs
aW5lSW1hZ2UgPSBudWxscHRyOwogICAgICAgICB9Ci0KICAgICAgICAgZmZsdXNoKHN0ZG91dCk7
CiAgICAgfQogCmRpZmYgLS1naXQgYS9Ub29scy9JbWFnZURpZmYvUGxhdGZvcm1JbWFnZS5oIGIv
VG9vbHMvSW1hZ2VEaWZmL1BsYXRmb3JtSW1hZ2UuaAppbmRleCBhNjMyZjM0ZTg0NTUzODVkNzY5
NmExMzJkOTcyZjE0MDY5NzMwYjNiLi4xYzIyNGEzZDdhMmM2YzA1YzJlNGZjMjhhMGFmMTg4ZDY3
ODgzMWQ2IDEwMDY0NAotLS0gYS9Ub29scy9JbWFnZURpZmYvUGxhdGZvcm1JbWFnZS5oCisrKyBi
L1Rvb2xzL0ltYWdlRGlmZi9QbGF0Zm9ybUltYWdlLmgKQEAgLTM3LDYgKzM3LDcgQEAgbmFtZXNw
YWNlIEltYWdlRGlmZiB7CiBjbGFzcyBQbGF0Zm9ybUltYWdlIHsKIHB1YmxpYzoKICAgICBzdGF0
aWMgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtSW1hZ2U+IGNyZWF0ZUZyb21TdGRpbihzaXplX3Qp
OworICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1JbWFnZT4gY3JlYXRlRnJvbUZp
bGUoY29uc3QgY2hhciogZmlsZVBhdGgpOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UGxh
dGZvcm1JbWFnZT4gY3JlYXRlRnJvbURpZmZEYXRhKHZvaWQqLCBzaXplX3Qgd2lkdGgsIHNpemVf
dCBoZWlnaHQpOwogCiAjaWYgZGVmaW5lZChVU0VfQ0FJUk8pICYmIFVTRV9DQUlSTwpkaWZmIC0t
Z2l0IGEvVG9vbHMvSW1hZ2VEaWZmL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAgYi9Ub29s
cy9JbWFnZURpZmYvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcAppbmRleCA0YjQ4Y2NmYWU2
ZDFjY2ViYjZiZmZiNWUxMWUyM2QxM2ZlNDNlODEyLi44NzdmZTc0ODNmN2ZjODg4NjJhYmEzNGM0
MzQwZjI5NWViOTVkODExIDEwMDY0NAotLS0gYS9Ub29scy9JbWFnZURpZmYvY2Fpcm8vUGxhdGZv
cm1JbWFnZUNhaXJvLmNwcAorKysgYi9Ub29scy9JbWFnZURpZmYvY2Fpcm8vUGxhdGZvcm1JbWFn
ZUNhaXJvLmNwcApAQCAtMzEsNiArMzEsMTcgQEAKIAogbmFtZXNwYWNlIEltYWdlRGlmZiB7CiAK
K3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUltYWdlPiBQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9t
RmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCkKK3sKKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZh
Y2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mcm9tX3BuZyhmaWxlUGF0aCk7CisgICAg
aWYgKGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNT
KSB7CisgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZv
cm1JbWFnZT4oc3VyZmFjZSk7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUltYWdlPiBQ
bGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tU3RkaW4oc2l6ZV90KQogewogICAgIGNhaXJvX3N1cmZh
Y2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zyb21fcG5nX3N0cmVh
bSgKZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdlRGlmZi9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwIGIv
VG9vbHMvSW1hZ2VEaWZmL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKaW5kZXggZjAzYzM1NzkyYWQw
ZDM0NDFlZmU4NWFkZGRiZjA3ZTdjNzZmNTFkYy4uNDMyYTg5M2Y0ZWJhODg5MjNjNjRiMDhlODM4
N2Q4ZTM2MzlmZTE3YSAxMDA2NDQKLS0tIGEvVG9vbHMvSW1hZ2VEaWZmL2NnL1BsYXRmb3JtSW1h
Z2VDRy5jcHAKKysrIGIvVG9vbHMvSW1hZ2VEaWZmL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAKQEAg
LTcxLDYgKzcxLDE1IEBAIHN0YXRpYyBjb25zdCBDRlN0cmluZ1JlZiBrVVRUeXBlUE5HID0gQ0ZT
VFIoInB1YmxpYy5wbmciKTsKIAogbmFtZXNwYWNlIEltYWdlRGlmZiB7CiAKK3N0ZDo6dW5pcXVl
X3B0cjxQbGF0Zm9ybUltYWdlPiBQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tRmlsZShjb25zdCBj
aGFyKiBmaWxlUGF0aCkKK3sKKyAgICBDR0RhdGFQcm92aWRlclJlZiBkYXRhUHJvdmlkZXIgPSBD
R0RhdGFQcm92aWRlckNyZWF0ZVdpdGhGaWxlbmFtZShmaWxlUGF0aCk7CisgICAgQ0dJbWFnZVJl
ZiBpbWFnZSA9IENHSW1hZ2VDcmVhdGVXaXRoUE5HRGF0YVByb3ZpZGVyKGRhdGFQcm92aWRlciwg
MCwgZmFsc2UsIGtDR1JlbmRlcmluZ0ludGVudERlZmF1bHQpOworICAgIENHRGF0YVByb3ZpZGVy
UmVsZWFzZShkYXRhUHJvdmlkZXIpOworCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UGxh
dGZvcm1JbWFnZT4oaW1hZ2UpOworfQorCiBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1JbWFnZT4g
UGxhdGZvcm1JbWFnZTo6Y3JlYXRlRnJvbVN0ZGluKHNpemVfdCBpbWFnZVNpemUpCiB7CiAgICAg
dW5zaWduZWQgY2hhciBidWZmZXJbMjA0OF07Cg==
</data>
<flag name="commit-queue"
          id="466739"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>442269</attachid>
            <date>2021-10-23 11:30:13 -0700</date>
            <delta_ts>2021-10-23 22:24:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-232201-20211023113012.patch</filename>
            <type>text/plain</type>
            <size>12204</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg0NzEwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMmI3MTViNzExM2ZjODg2ZTc1NTA3M2UwMTk2YWUxNDdj
MGQyNjJmOC4uYmY2MzhhYzIzYjkyYmM3ZmEwNTBiMzg5NDE5YTE1MzBlZGYwODllNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0
IEBACisyMDIxLTEwLTIzICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgor
CisgICAgICAgIEFsbG93IEltYWdlRGlmZiB0byByZWFkIGZyb20gZmlsZXMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzMjIwMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgRm9yIGltcHJvdmVk
IGhhY2thYmlsaXR5IHdoZW4gd29ya2luZyBvbiBwaXhlbCB0b2xlcmFuY2UsIGFsbG93IEltYWdl
RGlmZiB0byByZWFkIGZyb20KKyAgICAgICAgZmlsZXMgYnkgYWRkaW5nIHN1cHBvcnQgZm9yIHJl
YWRpbmcgdHdvIGZpbGUgcGF0aCBhcmd1bWVudHMuCisKKyAgICAgICAgQWxzbyBhZGQgc29tZSBu
aWNlIC0taGVscCBvdXRwdXQsIGFuZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciAtLXZlcmJvc2Uu
CisKKyAgICAgICAgKiBJbWFnZURpZmYvSW1hZ2VEaWZmLmNwcDoKKyAgICAgICAgKHByb2Nlc3NJ
bWFnZXMpOgorICAgICAgICAobWFpbik6CisgICAgICAgICogSW1hZ2VEaWZmL1BsYXRmb3JtSW1h
Z2UuaDoKKyAgICAgICAgKiBJbWFnZURpZmYvY2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcDoK
KyAgICAgICAgKEltYWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6Y3JlYXRlRnJvbUZpbGUpOgorICAg
ICAgICAqIEltYWdlRGlmZi9jZy9QbGF0Zm9ybUltYWdlQ0cuY3BwOgorICAgICAgICAoSW1hZ2VE
aWZmOjpQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tRmlsZSk6CisKIDIwMjEtMTAtMjIgIFJveSBS
ZWFwb3IgIDxycmVhcG9yQGFwcGxlLmNvbT4KIAogICAgICAgICB3ZWJraXRweS9hdXRvaW5zdGFs
bGVkL3B5b2JqY19mcmFtZXdvcmtzLnB5IHNob3VsZCBpbnN0YWxsIHdoZWVsIGRpc3RyaWJ1dGlv
bgpkaWZmIC0tZ2l0IGEvVG9vbHMvSW1hZ2VEaWZmL0ltYWdlRGlmZi5jcHAgYi9Ub29scy9JbWFn
ZURpZmYvSW1hZ2VEaWZmLmNwcAppbmRleCA5ODQ5ZjZmZDVkMGIwYmU0MmNkNDZjMmQ5Yjc5ZTdi
Y2I3ZDg0MWI1Li40NTgyNTVhMDRkYTc2OTNlOGU4OTUxM2ViMDBmNDNjYWQ1YWNmNjk2IDEwMDY0
NAotLS0gYS9Ub29scy9JbWFnZURpZmYvSW1hZ2VEaWZmLmNwcAorKysgYi9Ub29scy9JbWFnZURp
ZmYvSW1hZ2VEaWZmLmNwcApAQCAtNDgsNiArNDgsMzkgQEAgdXNpbmcgbmFtZXNwYWNlIEltYWdl
RGlmZjsKICNkZWZpbmUgRk9STUFUX1NJWkVfVCAienUiCiAjZW5kaWYKIAorc3RhdGljIGludCBw
cm9jZXNzSW1hZ2VzKHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUltYWdlPiYmIGFjdHVhbEltYWdl
LCBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1JbWFnZT4mJiBiYXNlbGluZUltYWdlLCBmbG9hdCB0
b2xlcmFuY2UpCit7CisgICAgaWYgKCFhY3R1YWxJbWFnZS0+aXNDb21wYXRpYmxlKCpiYXNlbGlu
ZUltYWdlKSkgeworICAgICAgICBpZiAoYWN0dWFsSW1hZ2UtPndpZHRoKCkgIT0gYmFzZWxpbmVJ
bWFnZS0+d2lkdGgoKSB8fCBhY3R1YWxJbWFnZS0+aGVpZ2h0KCkgIT0gYmFzZWxpbmVJbWFnZS0+
aGVpZ2h0KCkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHRlc3QgYW5k
IHJlZmVyZW5jZSBpbWFnZXMgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuIFRlc3QgaW1hZ2UgaXMgJSIg
Rk9STUFUX1NJWkVfVCAieCUiIEZPUk1BVF9TSVpFX1QgIiwgcmVmZXJlbmNlIGltYWdlIGlzICUi
IEZPUk1BVF9TSVpFX1QgInglIiBGT1JNQVRfU0laRV9UICJcbiIsCisgICAgICAgICAgICAgICAg
YWN0dWFsSW1hZ2UtPndpZHRoKCksIGFjdHVhbEltYWdlLT5oZWlnaHQoKSwgYmFzZWxpbmVJbWFn
ZS0+d2lkdGgoKSwgYmFzZWxpbmVJbWFnZS0+aGVpZ2h0KCkpOworICAgICAgICB9IGVsc2UgaWYg
KGFjdHVhbEltYWdlLT5oYXNBbHBoYSgpICE9IGJhc2VsaW5lSW1hZ2UtPmhhc0FscGhhKCkpIHsK
KyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHRlc3QgYW5kIHJlZmVyZW5jZSBp
bWFnZXMgZGlmZmVyIGluIGFscGhhLiBUZXN0IGltYWdlICVzIGFscGhhLCByZWZlcmVuY2UgaW1h
Z2UgJXMgYWxwaGEuXG4iLAorICAgICAgICAgICAgICAgIGFjdHVhbEltYWdlLT5oYXNBbHBoYSgp
ID8gImhhcyIgOiAiZG9lcyBub3QgaGF2ZSIsIGJhc2VsaW5lSW1hZ2UtPmhhc0FscGhhKCkgPyAi
aGFzIiA6ICJkb2VzIG5vdCBoYXZlIik7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gRVhJ
VF9GQUlMVVJFOworICAgIH0KKworICAgIGZsb2F0IGRpZmZlcmVuY2UgPSAxMDAuMGY7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtSW1hZ2U+IGRpZmZJbWFnZSA9IGFjdHVhbEltYWdlLT5k
aWZmZXJlbmNlKCpiYXNlbGluZUltYWdlLCBkaWZmZXJlbmNlKTsKKyAgICBpZiAoZGlmZmVyZW5j
ZSA8PSB0b2xlcmFuY2UpCisgICAgICAgIGRpZmZlcmVuY2UgPSAwLjBmOworICAgIGVsc2Ugewor
ICAgICAgICBkaWZmZXJlbmNlID0gcm91bmRmKGRpZmZlcmVuY2UgKiAxMDAuMGYpIC8gMTAwLjBm
OworICAgICAgICBkaWZmZXJlbmNlID0gc3RkOjptYXg8ZmxvYXQ+KGRpZmZlcmVuY2UsIDAuMDFm
KTsgLy8gcm91bmQgdG8gMiBkZWNpbWFsIHBsYWNlcworICAgIH0KKworICAgIGlmIChkaWZmZXJl
bmNlID4gMC4wZikgeworICAgICAgICBpZiAoZGlmZkltYWdlKQorICAgICAgICAgICAgZGlmZklt
YWdlLT53cml0ZUFzUE5HVG9TdGRvdXQoKTsKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICJkaWZm
OiAlMDEuMmYlJSBmYWlsZWRcbiIsIGRpZmZlcmVuY2UpOworICAgIH0gZWxzZQorICAgICAgICBm
cHJpbnRmKHN0ZG91dCwgImRpZmY6ICUwMS4yZiUlIHBhc3NlZFxuIiwgZGlmZmVyZW5jZSk7CisK
KyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCiBpbnQgbWFpbihpbnQgYXJnYywgY29uc3Qg
Y2hhciogYXJndltdKQogewogI2lmZGVmIF9XSU4zMgpAQCAtNTYsMTUgKzg5LDgxIEBAIGludCBt
YWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10pCiAjZW5kaWYKIAogICAgIGZsb2F0IHRv
bGVyYW5jZSA9IDAuMGY7CisgICAgYm9vbCB2ZXJib3NlID0gdHJ1ZTsKIAogICAgIGZvciAoaW50
IGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7CiAgICAgICAgIGlmICghc3RyY21wKGFyZ3ZbaV0sICIt
dCIpIHx8ICFzdHJjbXAoYXJndltpXSwgIi0tdG9sZXJhbmNlIikpIHsKICAgICAgICAgICAgIGlm
IChpID49IGFyZ2MgLSAxKQotICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICB0
b2xlcmFuY2UgPSBzdHJ0b2YoYXJndltpICsgMV0sIDApOworICAgICAgICAgICAgICAgIHJldHVy
biBFWElUX0ZBSUxVUkU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGNoYXIqIHJlYWRFbmQg
PSBOVUxMOworICAgICAgICAgICAgdG9sZXJhbmNlID0gc3RydG9mKGFyZ3ZbaSArIDFdLCAmcmVh
ZEVuZCk7CisgICAgICAgICAgICBpZiAocmVhZEVuZCA9PSBhcmd2W2kgKyAxXSkgeworICAgICAg
ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHJlYWQgbnVtYmVyaWMgdG9sZXJh
bmNlIHZhbHVlIGZyb20gJXNcbiIsIGFyZ3ZbaSArIDFdKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gRVhJVF9GQUlMVVJFOworICAgICAgICAgICAgfQogICAgICAgICAgICAgKytpOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KKworICAgICAgICBpZiAoIXN0cmNtcChhcmd2W2ld
LCAiLXYiKSB8fCAhc3RyY21wKGFyZ3ZbaV0sICItLXZlcmJvc2UiKSkgeworICAgICAgICAgICAg
dmVyYm9zZSA9IHRydWU7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICghc3RyY21wKGFyZ3ZbaV0sICItaCIpIHx8ICFzdHJjbXAoYXJndltpXSwgIi0taGVs
cCIpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwKKyAgICAgICAgICAgICAgICAidXNh
Z2U6IEltYWdlRGlmZiBbLWhdIFstdCBUT0xFUkFOQ0VdIFstdl0gKFthY3R1YWxJbWFnZSBiYXNl
bGluZUltYWdlXSB8IDxzdGRpbj4pXG4iIFwKKyAgICAgICAgICAgICAgICAiXG4iIFwKKyAgICAg
ICAgICAgICAgICAiUmVhZHMgdHdvIFBORy1lbmNvZGVkIGltYWdlcyBhbmQgY29tcGFyZXMgdGhl
bS4gSWYgdHdvIGZpbGUgcGF0aCBhcmd1bWVudHMgYXJlIHN1cHBsaWVkLCBcbiIgXAorICAgICAg
ICAgICAgICAgICJyZWFkcyBmcm9tIHRoZSBzcGVjaWZpZWQgZmlsZXMsIG90aGVyd2lzZSBmcm9t
IDxzdGRpbj4gd2hlcmUgZWFjaCBmaWxlIGlzIHByZWNlZGVkIGJ5IFxuIiBcCisgICAgICAgICAg
ICAgICAgImEgXCJDb250ZW50LUxlbmd0aDpcIiBoZWFkZXIuXG4iIFwKKyAgICAgICAgICAgICAg
ICAiXG4iIFwKKyAgICAgICAgICAgICAgICAib3B0aW9uYWwgYXJndW1lbnRzOlxuIiBcCisgICAg
ICAgICAgICAgICAgIiAgLWgsIC0taGVscCAgICAgICAgICAgIHNob3cgdGhpcyBoZWxwIG1lc3Nh
Z2UgYW5kIGV4aXRcbiIgXAorICAgICAgICAgICAgICAgICIgIC12LCAtLXZlcmJvc2UgICAgICAg
ICBwcmludCBkaWFnbm9zdGljIGluZm9ybWF0aW9uIHRvIHN0ZGVyclxuIiBcCisgICAgICAgICAg
ICAgICAgIiAgLXQsIC0tdG9sZXJhbmNlIFRPTEVSQU5DRVxuIiBcCisgICAgICAgICAgICAgICAg
IiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmUgdGhlIGltYWdlcyB3aXRoIHRoZSBnaXZl
biB0b2xlcmFuY2VcbiIKKyAgICAgICAgICAgICk7CisgICAgICAgICAgICByZXR1cm4gRVhJVF9T
VUNDRVNTOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGkgPCBhcmdjIC0gMSkgeworICAgICAg
ICAgICAgY29uc3QgY2hhciogZmlsZTFQYXRoID0gYXJndltpXTsKKyAgICAgICAgICAgIGNvbnN0
IGNoYXIqIGZpbGUyUGF0aCA9IGFyZ3ZbaSArIDFdOworCisgICAgICAgICAgICBpZiAoIXN0cm5j
bXAoZmlsZTFQYXRoLCAiLSIsIDEpKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJBbWJpZ3VvdXMgZmlsZSBwYXRoIGFyZ3VtZW50ICVzXG4iLCBmaWxlMVBhdGgpOworICAgICAg
ICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghc3RybmNtcChmaWxlMlBhdGgsICItIiwgMSkpIHsKKyAgICAgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkFtYmlndW91cyBmaWxlIHBhdGggYXJndW1lbnQgJXNcbiIsIGZpbGUy
UGF0aCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYXV0byBhY3R1YWxJbWFnZSA9IFBsYXRmb3JtSW1hZ2U6OmNyZWF0
ZUZyb21GaWxlKGZpbGUxUGF0aCk7CisgICAgICAgICAgICBhdXRvIGJhc2VsaW5lSW1hZ2UgPSBQ
bGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tRmlsZShmaWxlMlBhdGgpOworCisgICAgICAgICAgICBp
ZiAoIWFjdHVhbEltYWdlKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWls
ZWQgdG8gY3JlYXRlIGltYWdlIGZyb20gJXNcbiIsIGZpbGUxUGF0aCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KCFiYXNlbGluZUltYWdlKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWls
ZWQgdG8gY3JlYXRlIGltYWdlIGZyb20gJXNcbiIsIGZpbGUyUGF0aCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJD
b21wYXJpbmcgZmlsZXMgYWN0dWFsOiAlcyBhbmQgYmFzZWxpbmU6ICVzXG4iLCBmaWxlMVBhdGgs
IGZpbGUyUGF0aCk7CisKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gcHJvY2Vzc0ltYWdlcyhz
dGQ6OmV4Y2hhbmdlKGFjdHVhbEltYWdlLCB7IH0pLCBzdGQ6OmV4Y2hhbmdlKGJhc2VsaW5lSW1h
Z2UsIHsgfSksIHRvbGVyYW5jZSk7CisgICAgICAgICAgICBpZiAocmVzdWx0ID09IEVYSVRfRkFJ
TFVSRSkKKyAgICAgICAgICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworCisgICAgICAgICAg
ICByZXR1cm4gRVhJVF9TVUNDRVNTOworICAgICAgICB9CiAgICAgfQogCiAgICAgY2hhciBidWZm
ZXJbMjA0OF07CkBAIC03Miw2ICsxNzEsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hh
ciogYXJndltdKQogICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUltYWdlPiBiYXNlbGluZUlt
YWdlOwogCiAgICAgd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKSkg
eworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW1h
Z2VEaWZmOiByZWFkICVsdSBieXRlcyBmcm9tIHN0ZGluICVzIiwgc3RybGVuKGJ1ZmZlciksIGJ1
ZmZlcik7CisKICAgICAgICAgLy8gQ29udmVydCB0aGUgZmlyc3QgbmV3bGluZSBpbnRvIGEgTlVM
IGNoYXJhY3RlciBzbyB0aGF0IHN0cnRvayBkb2Vzbid0IHByb2R1Y2UgaXQuCiAgICAgICAgIGNo
YXIqIG5ld0xpbmVDaGFyYWN0ZXIgPSBzdHJjaHIoYnVmZmVyLCAnXG4nKTsKICAgICAgICAgaWYg
KG5ld0xpbmVDaGFyYWN0ZXIpCkBAIC04NywxMSArMTg5LDE3IEBAIGludCBtYWluKGludCBhcmdj
LCBjb25zdCBjaGFyKiBhcmd2W10pCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICgh
YWN0dWFsSW1hZ2UpIHsKKyAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJSZWFkaW5nICVkIGJ5dGVzIG9mIGFjdHVhbCBpbWFn
ZSBkYXRhXG4iLCBpbWFnZVNpemUpOworCiAgICAgICAgICAgICAgICAgaWYgKCEoYWN0dWFsSW1h
Z2UgPSBQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tU3RkaW4oaW1hZ2VTaXplKSkpIHsKICAgICAg
ICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogY291bGQgbm90IHJlYWQgYWN0
dWFsIGltYWdlLlxuIik7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmICghYmFzZWxpbmVJbWFn
ZSkgeworICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIlJlYWRpbmcgJWQgYnl0ZXMgb2YgYmFzZWxpbmUgaW1hZ2UgZGF0YVxu
IiwgaW1hZ2VTaXplKTsKKwogICAgICAgICAgICAgICAgIGlmICghKGJhc2VsaW5lSW1hZ2UgPSBQ
bGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tU3RkaW4oaW1hZ2VTaXplKSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogY291bGQgbm90IHJlYWQgYmFzZWxpbmUg
aW1hZ2UuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKQEAg
LTEwMCwzOCArMjA4LDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjb25zdCBjaGFyKiBhcmd2W10p
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoYWN0dWFsSW1hZ2UgJiYgYmFzZWxpbmVJbWFnZSkg
ewotICAgICAgICAgICAgaWYgKCFhY3R1YWxJbWFnZS0+aXNDb21wYXRpYmxlKCpiYXNlbGluZUlt
YWdlKSkgewotICAgICAgICAgICAgICAgIGlmIChhY3R1YWxJbWFnZS0+d2lkdGgoKSAhPSBiYXNl
bGluZUltYWdlLT53aWR0aCgpIHx8IGFjdHVhbEltYWdlLT5oZWlnaHQoKSAhPSBiYXNlbGluZUlt
YWdlLT5oZWlnaHQoKSkgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVy
cm9yOiB0ZXN0IGFuZCByZWZlcmVuY2UgaW1hZ2VzIGhhdmUgZGlmZmVyZW50IHNpemVzLiBUZXN0
IGltYWdlIGlzICUiIEZPUk1BVF9TSVpFX1QgInglIiBGT1JNQVRfU0laRV9UICIsIHJlZmVyZW5j
ZSBpbWFnZSBpcyAlIiBGT1JNQVRfU0laRV9UICJ4JSIgRk9STUFUX1NJWkVfVCAiXG4iLAotICAg
ICAgICAgICAgICAgICAgICAgICAgYWN0dWFsSW1hZ2UtPndpZHRoKCksIGFjdHVhbEltYWdlLT5o
ZWlnaHQoKSwgYmFzZWxpbmVJbWFnZS0+d2lkdGgoKSwgYmFzZWxpbmVJbWFnZS0+aGVpZ2h0KCkp
OwotICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYWN0dWFsSW1hZ2UtPmhhc0FscGhhKCkgIT0g
YmFzZWxpbmVJbWFnZS0+aGFzQWxwaGEoKSkgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkVycm9yOiB0ZXN0IGFuZCByZWZlcmVuY2UgaW1hZ2VzIGRpZmZlciBpbiBhbHBo
YS4gVGVzdCBpbWFnZSAlcyBhbHBoYSwgcmVmZXJlbmNlIGltYWdlICVzIGFscGhhLlxuIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGFjdHVhbEltYWdlLT5oYXNBbHBoYSgpID8gImhhcyIgOiAi
ZG9lcyBub3QgaGF2ZSIsIGJhc2VsaW5lSW1hZ2UtPmhhc0FscGhhKCkgPyAiaGFzIiA6ICJkb2Vz
IG5vdCBoYXZlIik7Ci0gICAgICAgICAgICAgICAgfQotCisgICAgICAgICAgICBpZiAodmVyYm9z
ZSkKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkltYWdlRGlmZjogcHJvY2Vzc2lu
ZyBpbWFnZXNcbiIpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBwcm9jZXNzSW1hZ2VzKHN0
ZDo6ZXhjaGFuZ2UoYWN0dWFsSW1hZ2UsIHsgfSksIHN0ZDo6ZXhjaGFuZ2UoYmFzZWxpbmVJbWFn
ZSwgeyB9KSwgdG9sZXJhbmNlKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gRVhJVF9GQUlM
VVJFKQogICAgICAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGZsb2F0IGRpZmZlcmVuY2UgPSAxMDAuMGY7Ci0gICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1JbWFnZT4gZGlmZkltYWdlID0gYWN0dWFsSW1hZ2UtPmRp
ZmZlcmVuY2UoKmJhc2VsaW5lSW1hZ2UsIGRpZmZlcmVuY2UpOwotICAgICAgICAgICAgaWYgKGRp
ZmZlcmVuY2UgPD0gdG9sZXJhbmNlKQotICAgICAgICAgICAgICAgIGRpZmZlcmVuY2UgPSAwLjBm
OwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZGlmZmVyZW5jZSA9IHJvdW5k
ZihkaWZmZXJlbmNlICogMTAwLjBmKSAvIDEwMC4wZjsKLSAgICAgICAgICAgICAgICBkaWZmZXJl
bmNlID0gc3RkOjptYXg8ZmxvYXQ+KGRpZmZlcmVuY2UsIDAuMDFmKTsgLy8gcm91bmQgdG8gMiBk
ZWNpbWFsIHBsYWNlcwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZGlmZmVyZW5j
ZSA+IDAuMGYpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGlmZkltYWdlKQotICAgICAgICAgICAg
ICAgICAgICBkaWZmSW1hZ2UtPndyaXRlQXNQTkdUb1N0ZG91dCgpOwotICAgICAgICAgICAgICAg
IGZwcmludGYoc3Rkb3V0LCAiZGlmZjogJTAxLjJmJSUgZmFpbGVkXG4iLCBkaWZmZXJlbmNlKTsK
LSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiZGlm
ZjogJTAxLjJmJSUgcGFzc2VkXG4iLCBkaWZmZXJlbmNlKTsKLQotICAgICAgICAgICAgYWN0dWFs
SW1hZ2UgPSBudWxscHRyOwotICAgICAgICAgICAgYmFzZWxpbmVJbWFnZSA9IG51bGxwdHI7CiAg
ICAgICAgIH0KLQogICAgICAgICBmZmx1c2goc3Rkb3V0KTsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1Rvb2xzL0ltYWdlRGlmZi9QbGF0Zm9ybUltYWdlLmggYi9Ub29scy9JbWFnZURpZmYvUGxhdGZv
cm1JbWFnZS5oCmluZGV4IGE2MzJmMzRlODQ1NTM4NWQ3Njk2YTEzMmQ5NzJmMTQwNjk3MzBiM2Iu
LjFjMjI0YTNkN2EyYzZjMDVjMmU0ZmMyOGEwYWYxODhkNjc4ODMxZDYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0ltYWdlRGlmZi9QbGF0Zm9ybUltYWdlLmgKKysrIGIvVG9vbHMvSW1hZ2VEaWZmL1BsYXRm
b3JtSW1hZ2UuaApAQCAtMzcsNiArMzcsNyBAQCBuYW1lc3BhY2UgSW1hZ2VEaWZmIHsKIGNsYXNz
IFBsYXRmb3JtSW1hZ2UgewogcHVibGljOgogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UGxh
dGZvcm1JbWFnZT4gY3JlYXRlRnJvbVN0ZGluKHNpemVfdCk7CisgICAgc3RhdGljIHN0ZDo6dW5p
cXVlX3B0cjxQbGF0Zm9ybUltYWdlPiBjcmVhdGVGcm9tRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0
aCk7CiAgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUltYWdlPiBjcmVhdGVGcm9t
RGlmZkRhdGEodm9pZCosIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCk7CiAKICNpZiBkZWZp
bmVkKFVTRV9DQUlSTykgJiYgVVNFX0NBSVJPCmRpZmYgLS1naXQgYS9Ub29scy9JbWFnZURpZmYv
Y2Fpcm8vUGxhdGZvcm1JbWFnZUNhaXJvLmNwcCBiL1Rvb2xzL0ltYWdlRGlmZi9jYWlyby9QbGF0
Zm9ybUltYWdlQ2Fpcm8uY3BwCmluZGV4IDRiNDhjY2ZhZTZkMWNjZWJiNmJmZmI1ZTExZTIzZDEz
ZmU0M2U4MTIuLjg3N2ZlNzQ4M2Y3ZmM4ODg2MmFiYTM0YzQzNDBmMjk1ZWI5NWQ4MTEgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0ltYWdlRGlmZi9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCisrKyBi
L1Rvb2xzL0ltYWdlRGlmZi9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwCkBAIC0zMSw2ICsz
MSwxNyBAQAogCiBuYW1lc3BhY2UgSW1hZ2VEaWZmIHsKIAorc3RkOjp1bmlxdWVfcHRyPFBsYXRm
b3JtSW1hZ2U+IFBsYXRmb3JtSW1hZ2U6OmNyZWF0ZUZyb21GaWxlKGNvbnN0IGNoYXIqIGZpbGVQ
YXRoKQoreworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfY3JlYXRlX2Zyb21fcG5nKGZpbGVQYXRoKTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0
dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAgICAgY2Fpcm9fc3Vy
ZmFjZV9kZXN0cm95KHN1cmZhY2UpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisK
KyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9ybUltYWdlPihzdXJmYWNlKTsKK30K
Kwogc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtSW1hZ2U+IFBsYXRmb3JtSW1hZ2U6OmNyZWF0ZUZy
b21TdGRpbihzaXplX3QpCiB7CiAgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZnJvbV9wbmdfc3RyZWFtKApkaWZmIC0tZ2l0IGEvVG9vbHMv
SW1hZ2VEaWZmL2NnL1BsYXRmb3JtSW1hZ2VDRy5jcHAgYi9Ub29scy9JbWFnZURpZmYvY2cvUGxh
dGZvcm1JbWFnZUNHLmNwcAppbmRleCBmMDNjMzU3OTJhZDBkMzQ0MWVmZTg1YWRkZGJmMDdlN2M3
NmY1MWRjLi40MzJhODkzZjRlYmE4ODkyM2M2NGIwOGU4Mzg3ZDhlMzYzOWZlMTdhIDEwMDY0NAot
LS0gYS9Ub29scy9JbWFnZURpZmYvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcAorKysgYi9Ub29scy9J
bWFnZURpZmYvY2cvUGxhdGZvcm1JbWFnZUNHLmNwcApAQCAtNzEsNiArNzEsMTUgQEAgc3RhdGlj
IGNvbnN0IENGU3RyaW5nUmVmIGtVVFR5cGVQTkcgPSBDRlNUUigicHVibGljLnBuZyIpOwogCiBu
YW1lc3BhY2UgSW1hZ2VEaWZmIHsKIAorc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtSW1hZ2U+IFBs
YXRmb3JtSW1hZ2U6OmNyZWF0ZUZyb21GaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoKQoreworICAg
IENHRGF0YVByb3ZpZGVyUmVmIGRhdGFQcm92aWRlciA9IENHRGF0YVByb3ZpZGVyQ3JlYXRlV2l0
aEZpbGVuYW1lKGZpbGVQYXRoKTsKKyAgICBDR0ltYWdlUmVmIGltYWdlID0gQ0dJbWFnZUNyZWF0
ZVdpdGhQTkdEYXRhUHJvdmlkZXIoZGF0YVByb3ZpZGVyLCAwLCBmYWxzZSwga0NHUmVuZGVyaW5n
SW50ZW50RGVmYXVsdCk7CisgICAgQ0dEYXRhUHJvdmlkZXJSZWxlYXNlKGRhdGFQcm92aWRlcik7
CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9ybUltYWdlPihpbWFnZSk7Cit9
CisKIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUltYWdlPiBQbGF0Zm9ybUltYWdlOjpjcmVhdGVG
cm9tU3RkaW4oc2l6ZV90IGltYWdlU2l6ZSkKIHsKICAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclsy
MDQ4XTsK
</data>
<flag name="review"
          id="466737"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>