<?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>205323</bug_id>
          
          <creation_ts>2019-12-16 20:16:22 -0800</creation_ts>
          <short_desc>[JSC] 8Bit JSRopeString can contain 16Bit string in its rope</short_desc>
          <delta_ts>2020-02-06 12:42:58 -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=205355</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>
          
          <blocked>187947</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1599268</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-16 20:16:22 -0800</bug_when>
    <thetext>[JSC] 8Bit JSRopeString can contain 16Bit string in its rope</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599270</commentid>
    <comment_count>1</comment_count>
      <attachid>385850</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-16 20:23:01 -0800</bug_when>
    <thetext>Created attachment 385850
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599271</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-16 20:25:02 -0800</bug_when>
    <thetext>&lt;rdar://problem/57868328&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599272</commentid>
    <comment_count>3</comment_count>
      <attachid>385850</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-16 20:29:10 -0800</bug_when>
    <thetext>Comment on attachment 385850
Patch

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

&gt; Source/JavaScriptCore/runtime/JSString.cpp:164
&gt;          return;

This is OK. When creating substring JSRopeString, we always resolve the substringBase before creating JSRopeString. This means that we already know the flag of result JSString.
And 8Bit flag of resolved JSString never changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599464</commentid>
    <comment_count>4</comment_count>
      <attachid>385850</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2019-12-17 10:57:38 -0800</bug_when>
    <thetext>Comment on attachment 385850
Patch

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

r=me.  I wish there&apos;s a way to assert that we&apos;re not copying 16-bit chars that don&apos;t fit into 8-bit chars, but so far, I think that such an assertion is too expensive to have enabled all the time even for a debug build.  Can you file a bug to investigate options for testing this?

&gt; Source/JavaScriptCore/runtime/JSString.h:594
&gt;      void resolveRopeSlowCase8(LChar*) const;

I think this function is now deleted in the implementation.  Please remove this declaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599561</commentid>
    <comment_count>5</comment_count>
      <attachid>385850</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-17 14:04:28 -0800</bug_when>
    <thetext>Comment on attachment 385850
Patch

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

Thanks! Filed https://bugs.webkit.org/show_bug.cgi?id=205355

&gt;&gt; Source/JavaScriptCore/runtime/JSString.h:594
&gt;&gt;      void resolveRopeSlowCase8(LChar*) const;
&gt; 
&gt; I think this function is now deleted in the implementation.  Please remove this declaration.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599563</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-17 14:12:05 -0800</bug_when>
    <thetext>Committed r253648: &lt;https://trac.webkit.org/changeset/253648&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599633</commentid>
    <comment_count>7</comment_count>
      <attachid>385850</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-17 17:11:56 -0800</bug_when>
    <thetext>Comment on attachment 385850
Patch

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

&gt; Source/WTF/wtf/text/StringImpl.h:1089
&gt; -template&lt;typename CharacterType&gt; inline void StringImpl::copyCharacters(CharacterType* destination, const CharacterType* source, unsigned numCharacters)
&gt; +template&lt;typename SourceCharacterType, typename DestinationCharacterType&gt;
&gt; +inline void StringImpl::copyCharacters(DestinationCharacterType* destination, const SourceCharacterType* source, unsigned numCharacters)
&gt;  {
&gt; -    if (numCharacters == 1) {
&gt; -        *destination = *source;
&gt; -        return;
&gt; +    if constexpr (std::is_same&lt;SourceCharacterType, DestinationCharacterType&gt;::value) {
&gt; +        if (numCharacters == 1) {
&gt; +            *destination = *source;
&gt; +            return;
&gt; +        }
&gt; +        memcpy(destination, source, numCharacters * sizeof(DestinationCharacterType));
&gt; +    } else {
&gt; +        for (unsigned i = 0; i &lt; numCharacters; ++i)
&gt; +            destination[i] = source[i];
&gt;      }
&gt; -    memcpy(destination, source, numCharacters * sizeof(CharacterType));
&gt; -}
&gt; -
&gt; -ALWAYS_INLINE void StringImpl::copyCharacters(UChar* destination, const LChar* source, unsigned numCharacters)
&gt; -{
&gt; -    for (unsigned i = 0; i &lt; numCharacters; ++i)
&gt; -        destination[i] = source[i];
&gt;  }

What’s the rationale for these changes? Do they make the implementation more efficient? Or are they more elegant? I like the old version better and it seems like it generates identical code, but maybe I am missing something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599637</commentid>
    <comment_count>8</comment_count>
      <attachid>385850</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2019-12-17 17:29:59 -0800</bug_when>
    <thetext>Comment on attachment 385850
Patch

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

&gt;&gt; Source/WTF/wtf/text/StringImpl.h:1089
&gt;&gt;  }
&gt; 
&gt; What’s the rationale for these changes? Do they make the implementation more efficient? Or are they more elegant? I like the old version better and it seems like it generates identical code, but maybe I am missing something.

The rational behind this is adding `copyCharacters(LChar*, UChar*, unsigned)` version of this function, which does not exist previously.
This is necessary to implement JSRopeString&apos;s resolution fixed in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1599842</commentid>
    <comment_count>9</comment_count>
      <attachid>385850</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2019-12-18 09:28:37 -0800</bug_when>
    <thetext>Comment on attachment 385850
Patch

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

&gt;&gt;&gt; Source/WTF/wtf/text/StringImpl.h:1089
&gt;&gt;&gt;  }
&gt;&gt; 
&gt;&gt; What’s the rationale for these changes? Do they make the implementation more efficient? Or are they more elegant? I like the old version better and it seems like it generates identical code, but maybe I am missing something.
&gt; 
&gt; The rational behind this is adding `copyCharacters(LChar*, UChar*, unsigned)` version of this function, which does not exist previously.
&gt; This is necessary to implement JSRopeString&apos;s resolution fixed in this patch.

Could we have named that one differently or does it need to be an overload? I don’t think it’s great to have functions that are guaranteed correct on any data assuming the buffer sizes are correct that have the same name as a function that must only be called if the precondition on the characters is correct. It’s fine to have both functions, but I’d want the one that narrows to have a different name unless there’s a reason it shouldn’t.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1602684</commentid>
    <comment_count>10</comment_count>
      <attachid>385850</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-01-03 18:32:40 -0800</bug_when>
    <thetext>Comment on attachment 385850
Patch

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

&gt;&gt;&gt;&gt; Source/WTF/wtf/text/StringImpl.h:1089
&gt;&gt;&gt;&gt;  }
&gt;&gt;&gt; 
&gt;&gt;&gt; What’s the rationale for these changes? Do they make the implementation more efficient? Or are they more elegant? I like the old version better and it seems like it generates identical code, but maybe I am missing something.
&gt;&gt; 
&gt;&gt; The rational behind this is adding `copyCharacters(LChar*, UChar*, unsigned)` version of this function, which does not exist previously.
&gt;&gt; This is necessary to implement JSRopeString&apos;s resolution fixed in this patch.
&gt; 
&gt; Could we have named that one differently or does it need to be an overload? I don’t think it’s great to have functions that are guaranteed correct on any data assuming the buffer sizes are correct that have the same name as a function that must only be called if the precondition on the characters is correct. It’s fine to have both functions, but I’d want the one that narrows to have a different name unless there’s a reason it shouldn’t.

Make sense! I&apos;ll do it in a follow-up patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>385850</attachid>
            <date>2019-12-16 20:23:01 -0800</date>
            <delta_ts>2019-12-17 10:57:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-205323-20191216202300.patch</filename>
            <type>text/plain</type>
            <size>14365</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUzNjA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
YzQwNTI1YmVlMDEyZjgyYjJiMWRiNjA3MWU0ZmU0YmIwMzVmYTM1Li45OTQ1NDdkN2JlZjNhYjVm
YzkzN2Y5Mzk0MzcxNTZlZjdiYmY1MTY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAxOS0xMi0xNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIDhCaXQgSlNSb3BlU3RyaW5nIGNhbiBjb250YWluIDE2Qml0IHN0
cmluZyBpbiBpdHMgcm9wZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjA1MzIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgV2hlbiByZXNvbHZpbmcgSlNSb3BlU3RyaW5nLCBpdCBpcyBwb3NzaWJsZSB0aGF0
IDhCaXQgSlNSb3BlU3RyaW5nIGJlY29tZXMgMTZCaXQgcmVzb2x2ZWQgSlNTdHJpbmcuCisgICAg
ICAgIFRoaXMgaGFwcGVucyB3aGVuIHdlIGF0dGVtcHQgdG8gcmVzb2x2ZSBpdCB0byBwcm9kdWNl
IEF0b21pY1N0cmluZ0ltcGwsIGFuZCAxNkJpdCB2ZXJzaW9uIG9mIHRoZQorICAgICAgICByZXNv
bHZlZCBjb250ZW50IGlzIGFscmVhZHkgaW4gQXRvbWljU3RyaW5nVGFibGUuIFRoaXMgbWVhbnMg
dGhhdCAxNkJpdCBmbGFnIG5ldmVyIGNoYW5nZXMgYWZ0ZXIgcmVzb2x2aW5nCisgICAgICAgIEpT
U3RyaW5nLCBidXQgdGhhdCBvZiBKU1JvcGVTdHJpbmcgaXMgc29tZSBzb3J0IG9mIGhpbnQsIHdo
aWNoIGNhbiBiZSBjaGFuZ2VkLgorCisgICAgICAgIFRoaXMgbWVhbnMgdGhhdCA4Qml0IEpTUm9w
ZVN0cmluZyBjYW4gaW5jbHVkZSAxNkJpdCBKU1N0cmluZywgc2luY2Ugc29tZSBvZiBjaGlsZHJl
biBjYW4gYmUgY2hhbmdlZCBmcm9tCisgICAgICAgIDhCaXQgSlNSb3BlU3RyaW5nIHRvIHJlc29s
dmVkIDE2Qml0IEpTU3RyaW5nLiBFdmVuIGluIHRoYXQgY2FzZSwgd2UgY2FuIHN0aWxsIGVuc3Vy
ZSB0aGF0IHJlc29sdmVkIHN0cmluZworICAgICAgICBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgOEJp
dC4gTGV0J3Mgc2VlIHRoZSBleGFtcGxlLgorCisgICAgICAgICAgICBBID0+IEIgKyBDLCA4Qml0
IFJvcGUKKyAgICAgICAgICAgIEIgPT4gRCArIEUsIDhCaXQgUm9wZQorICAgICAgICAgICAgQyA9
PiA4Qml0IFN0cmluZworCisgICAgICAgIEFuZCB3aGVuIHdlIGNvbnZlcnQgQiB0byAxNkJpdCBT
dHJpbmcgc2luY2UgY29udGVudCBvZiBgRCArIEVgIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCBhcyAx
NkJpdCBTdHJpbmcgaW4gQXRvbWljU3RyaW5nVGFibGUuCisKKyAgICAgICAgICAgIEEgPT4gQiAr
IEMsIDhCaXQgUm9wZQorICAgICAgICAgICAgQiA9PiAxNkJpdCBTdHJpbmcKKyAgICAgICAgICAg
IEMgPT4gOEJpdCBTdHJpbmcKKworICAgICAgICBXaGVuIHJlc29sdmluZyBBLCBjcmVhdGluZyA4
Qml0IHN0cmluZyBidWZmZXIgaXMgdG90YWxseSBPSyBzaW5jZSB3ZSBrbm93IHRoYXQgd2hvbGUg
QSBzdHJpbmcgY2FuIGJlIHJlcHJlc2VudGVkIGluIDhCaXQuCisgICAgICAgIFdoZW4gY29weWlu
ZyB0aGUgY29udGVudCBvZiBCIGludG8gOEJpdCBidWZmZXIsIHdlIHNob3VsZCBpZ25vcmUgdXBw
ZXIgOEJpdCBzaW5jZSB0aGV5IG11c3QgYmUgemVyby4KKworICAgICAgICBJbiB0aGlzIHBhdGNo
LCB3ZSBjb21wbGV0ZWx5IHNoYXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiByZXNvbHZlUm9wZUlu
dGVybmFsTm9TdWJzdHJpbmcgYW5kIHJlc29sdmVSb3BlU2xvd0Nhc2UgaW4gOEJpdCBhbmQKKyAg
ICAgICAgMTZCaXQgY2FzZTogd2UgdGFrZSByZXN1bHQgYnVmZmVyIENoYXJhY3RlclR5cGUsIGJ1
dCB0aGUgdW5kZXJseWluZyBjb2RlIG11c3QgY2hlY2sgYGlzOEJpdCgpYCBmb3IgZWFjaCBmaWJl
ci4KKworICAgICAgICAqIHJ1bnRpbWUvSlNDSlNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkpT
VmFsdWU6OmR1bXBJbkNvbnRleHRBc3N1bWluZ1N0cnVjdHVyZSBjb25zdCk6CisgICAgICAgICog
cnVudGltZS9KU1N0cmluZy5jcHA6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2
ZVJvcGVJbnRlcm5hbDggY29uc3QpOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnJlc29s
dmVSb3BlSW50ZXJuYWwxNiBjb25zdCk6CisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVz
b2x2ZVJvcGVJbnRlcm5hbE5vU3Vic3RyaW5nIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SlNSb3Bl
U3RyaW5nOjpyZXNvbHZlUm9wZVdpdGhGdW5jdGlvbiBjb25zdCk6CisgICAgICAgIChKU0M6OkpT
Um9wZVN0cmluZzo6cmVzb2x2ZVJvcGVTbG93Q2FzZSBjb25zdCk6CisgICAgICAgIChKU0M6OkpT
Um9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJbnRlcm5hbDhOb1N1YnN0cmluZyBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJbnRlcm5hbDE2Tm9T
dWJzdHJpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OnJl
c29sdmVSb3BlU2xvd0Nhc2U4IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0pT
U3RyaW5nLmg6CisKIDIwMTktMTItMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNv
bT4KIAogICAgICAgICBBU1NFUlRJT04gRkFJTEVEOiBsZW5ndGggPD0gbWF4aW11bUxlbmd0aCBp
biBqcy1maXhlZC1hcnJheS1vdXQtb2YtbWVtb3J5LmpzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDIxNGJkMDU0YWE0N2IwYjVm
ZjQzNGUzODBmMmEzNGUxOWU3MzVkYmUuLmNkMmRlYTI1MjM2YzRjMWJhZGI2ZmNmYmY3NTg2NjI5
ZjQ3ODRhMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTktMTItMTYgIFl1c3VrZSBTdXp1a2kg
IDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSA4Qml0IEpTUm9wZVN0cmluZyBj
YW4gY29udGFpbiAxNkJpdCBzdHJpbmcgaW4gaXRzIHJvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNTMyMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd3RmL3RleHQvU3RyaW5nSW1wbC5oOgorICAg
ICAgICAoV1RGOjpTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyk6CisKIDIwMTktMTItMTYgIFl1
c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBSZW1vdmUg
QXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50U2V0CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCmluZGV4IDE1M2JiYTZiNTgwZmVkM2ZkMTY0MDVhMjRl
ODc0NjlmNzQ5NzYxN2EuLjU0ODAxMGViMWMwNzAxNjJmZDBjOTYyMzI2ZmVlMjliMTEwM2QzM2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuY3BwCkBAIC0y
NzQsNiArMjc0LDExIEBAIHZvaWQgSlNWYWx1ZTo6ZHVtcEluQ29udGV4dEFzc3VtaW5nU3RydWN0
dXJlKAogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAoc3ltYm9sKSIpOwogICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgKHVucmVzb2x2ZWQpIik7
CisgICAgICAgICAgICBpZiAoc3RyaW5nLT5pczhCaXQoKSkKKyAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoIiw4Qml0OigxKSIpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG91
dC5wcmludCgiLDhCaXQ6KDApIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIixsZW5ndGg6KCIs
IHN0cmluZy0+bGVuZ3RoKCksICIpIik7CiAgICAgICAgICAgICBvdXQucHJpbnQoIjogIiwgaW1w
bCk7CiAgICAgICAgIH0gZWxzZSBpZiAoc3RydWN0dXJlLT5jbGFzc0luZm8oKS0+aXNTdWJDbGFz
c09mKFJlZ0V4cDo6aW5mbygpKSkKICAgICAgICAgICAgIG91dC5wcmludCgiUmVnRXhwOiAiLCAq
anNDYXN0PFJlZ0V4cCo+KGFzQ2VsbCgpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5jcHAKaW5kZXggNDA5MWE2MTdjMGJhYWIxNTgwYWFkYjFmNWJlNGVhMjk4MjMy
YmE3MC4uYWFlZThlZTdhNzdlZWE2ZGVmYzc1N2E4N2QyM2IzZWNiYTg2ZjIxZiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcApAQCAtMTUzLDI2ICsxNTMsNyBA
QCB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJbnRlcm5hbDgoTENoYXIqIGJ1ZmZlcikg
Y29uc3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICByZXNvbHZlUm9wZUludGVy
bmFsOE5vU3Vic3RyaW5nKGJ1ZmZlcik7Ci19Ci0KLXZvaWQgSlNSb3BlU3RyaW5nOjpyZXNvbHZl
Um9wZUludGVybmFsOE5vU3Vic3RyaW5nKExDaGFyKiBidWZmZXIpIGNvbnN0Ci17Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBzX21heEludGVybmFsUm9wZUxlbmd0aCAmJiBmaWJlcihpKTsg
KytpKSB7Ci0gICAgICAgIGlmIChmaWJlcihpKS0+aXNSb3BlKCkpIHsKLSAgICAgICAgICAgIHJl
c29sdmVSb3BlU2xvd0Nhc2U4KGJ1ZmZlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICB9Ci0KLSAgICBMQ2hhciogcG9zaXRpb24gPSBidWZmZXI7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzX21heEludGVybmFsUm9wZUxlbmd0aCAmJiBmaWJlcihpKTsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IFN0cmluZ0ltcGwmIGZpYmVyU3RyaW5nID0gKmZpYmVyKGkpLT52YWx1
ZUludGVybmFsKCkuaW1wbCgpOwotICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBmaWJlclN0cmlu
Zy5sZW5ndGgoKTsKLSAgICAgICAgU3RyaW5nSW1wbDo6Y29weUNoYXJhY3RlcnMocG9zaXRpb24s
IGZpYmVyU3RyaW5nLmNoYXJhY3RlcnM4KCksIGxlbmd0aCk7Ci0gICAgICAgIHBvc2l0aW9uICs9
IGxlbmd0aDsKLSAgICB9Ci0gICAgQVNTRVJUKChidWZmZXIgKyBsZW5ndGgoKSkgPT0gcG9zaXRp
b24pOworICAgIHJlc29sdmVSb3BlSW50ZXJuYWxOb1N1YnN0cmluZyhidWZmZXIpOwogfQogCiB2
b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJbnRlcm5hbDE2KFVDaGFyKiBidWZmZXIpIGNv
bnN0CkBAIC0xODMsMTAgKzE2NCwxMSBAQCB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJ
bnRlcm5hbDE2KFVDaGFyKiBidWZmZXIpIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgCi0gICAgcmVzb2x2ZVJvcGVJbnRlcm5hbDE2Tm9TdWJzdHJpbmcoYnVmZmVyKTsKKyAgICBy
ZXNvbHZlUm9wZUludGVybmFsTm9TdWJzdHJpbmcoYnVmZmVyKTsKIH0KIAotdm9pZCBKU1JvcGVT
dHJpbmc6OnJlc29sdmVSb3BlSW50ZXJuYWwxNk5vU3Vic3RyaW5nKFVDaGFyKiBidWZmZXIpIGNv
bnN0Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgordm9pZCBKU1JvcGVTdHJpbmc6
OnJlc29sdmVSb3BlSW50ZXJuYWxOb1N1YnN0cmluZyhDaGFyYWN0ZXJUeXBlKiBidWZmZXIpIGNv
bnN0CiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzX21heEludGVybmFsUm9wZUxlbmd0
aCAmJiBmaWJlcihpKTsgKytpKSB7CiAgICAgICAgIGlmIChmaWJlcihpKS0+aXNSb3BlKCkpIHsK
QEAgLTE5NSw3ICsxNzcsNyBAQCB2b2lkIEpTUm9wZVN0cmluZzo6cmVzb2x2ZVJvcGVJbnRlcm5h
bDE2Tm9TdWJzdHJpbmcoVUNoYXIqIGJ1ZmZlcikgY29uc3QKICAgICAgICAgfQogICAgIH0KIAot
ICAgIFVDaGFyKiBwb3NpdGlvbiA9IGJ1ZmZlcjsKKyAgICBDaGFyYWN0ZXJUeXBlKiBwb3NpdGlv
biA9IGJ1ZmZlcjsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNfbWF4SW50ZXJuYWxSb3Bl
TGVuZ3RoICYmIGZpYmVyKGkpOyArK2kpIHsKICAgICAgICAgY29uc3QgU3RyaW5nSW1wbCYgZmli
ZXJTdHJpbmcgPSAqZmliZXIoaSktPnZhbHVlSW50ZXJuYWwoKS5pbXBsKCk7CiAgICAgICAgIHVu
c2lnbmVkIGxlbmd0aCA9IGZpYmVyU3RyaW5nLmxlbmd0aCgpOwpAQCAtMzA2LDcgKzI4OCw3IEBA
IGNvbnN0IFN0cmluZyYgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZVdpdGhGdW5jdGlvbihKU0ds
b2JhbE9iamVjdCogbnVsbE9yR2xvYmFsCiAgICAgICAgIH0KICAgICAgICAgdm0uaGVhcC5yZXBv
cnRFeHRyYU1lbW9yeUFsbG9jYXRlZChuZXdJbXBsLT5jb3N0KCkpOwogCi0gICAgICAgIHJlc29s
dmVSb3BlSW50ZXJuYWw4Tm9TdWJzdHJpbmcoYnVmZmVyKTsKKyAgICAgICAgcmVzb2x2ZVJvcGVJ
bnRlcm5hbE5vU3Vic3RyaW5nKGJ1ZmZlcik7CiAgICAgICAgIGNvbnZlcnRUb05vblJvcGUoZnVu
Y3Rpb24obmV3SW1wbC5yZWxlYXNlTm9uTnVsbCgpKSk7CiAgICAgICAgIHJldHVybiB2YWx1ZUlu
dGVybmFsKCk7CiAgICAgfQpAQCAtMzE5LDcgKzMwMSw3IEBAIGNvbnN0IFN0cmluZyYgSlNSb3Bl
U3RyaW5nOjpyZXNvbHZlUm9wZVdpdGhGdW5jdGlvbihKU0dsb2JhbE9iamVjdCogbnVsbE9yR2xv
YmFsCiAgICAgfQogICAgIHZtLmhlYXAucmVwb3J0RXh0cmFNZW1vcnlBbGxvY2F0ZWQobmV3SW1w
bC0+Y29zdCgpKTsKICAgICAKLSAgICByZXNvbHZlUm9wZUludGVybmFsMTZOb1N1YnN0cmluZyhi
dWZmZXIpOworICAgIHJlc29sdmVSb3BlSW50ZXJuYWxOb1N1YnN0cmluZyhidWZmZXIpOwogICAg
IGNvbnZlcnRUb05vblJvcGUoZnVuY3Rpb24obmV3SW1wbC5yZWxlYXNlTm9uTnVsbCgpKSk7CiAg
ICAgcmV0dXJuIHZhbHVlSW50ZXJuYWwoKTsKIH0KQEAgLTM0MSw0NSArMzIzLDEwIEBAIGNvbnN0
IFN0cmluZyYgSlNSb3BlU3RyaW5nOjpyZXNvbHZlUm9wZShKU0dsb2JhbE9iamVjdCogbnVsbE9y
R2xvYmFsT2JqZWN0Rm9yT09NCiAvLyBWZWN0b3IgYmVmb3JlIHBlcmZvcm1pbmcgYW55IGNvbmNh
dGVuYXRpb24sIGJ1dCBieSB3b3JraW5nIGJhY2t3YXJkcyB3ZSBsaWtlbHkKIC8vIG9ubHkgZmls
bCB0aGUgcXVldWUgd2l0aCB0aGUgbnVtYmVyIG9mIHN1YnN0cmluZ3MgYXQgYW55IGdpdmVuIGxl
dmVsIGluIGEKIC8vIHJvcGUtb2Ytcm9wZXMuKQotdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVS
b3BlU2xvd0Nhc2U4KExDaGFyKiBidWZmZXIpIGNvbnN0Ci17Ci0gICAgTENoYXIqIHBvc2l0aW9u
ID0gYnVmZmVyICsgbGVuZ3RoKCk7IC8vIFdlIHdpbGwgYmUgd29ya2luZyBiYWNrd2FyZHMgb3Zl
ciB0aGUgcm9wZS4KLSAgICBWZWN0b3I8SlNTdHJpbmcqLCAzMiwgVW5zYWZlVmVjdG9yT3ZlcmZs
b3c+IHdvcmtRdWV1ZTsgLy8gUHV0dGluZyBzdHJpbmdzIGludG8gYSBWZWN0b3IgaXMgb25seSBP
SyBiZWNhdXNlIHRoZXJlIGFyZSBubyBHQyBwb2ludHMgaW4gdGhpcyBtZXRob2QuCi0gICAgCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzX21heEludGVybmFsUm9wZUxlbmd0aCAmJiBmaWJl
cihpKTsgKytpKQotICAgICAgICB3b3JrUXVldWUuYXBwZW5kKGZpYmVyKGkpKTsKLQotICAgIHdo
aWxlICghd29ya1F1ZXVlLmlzRW1wdHkoKSkgewotICAgICAgICBKU1N0cmluZyogY3VycmVudEZp
YmVyID0gd29ya1F1ZXVlLmxhc3QoKTsKLSAgICAgICAgd29ya1F1ZXVlLnJlbW92ZUxhc3QoKTsK
LQotICAgICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczsKLSAgICAgICAgCi0gICAgICAgIGlm
IChjdXJyZW50RmliZXItPmlzUm9wZSgpKSB7Ci0gICAgICAgICAgICBKU1JvcGVTdHJpbmcqIGN1
cnJlbnRGaWJlckFzUm9wZSA9IHN0YXRpY19jYXN0PEpTUm9wZVN0cmluZyo+KGN1cnJlbnRGaWJl
cik7Ci0gICAgICAgICAgICBpZiAoIWN1cnJlbnRGaWJlckFzUm9wZS0+aXNTdWJzdHJpbmcoKSkg
ewotICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc19tYXhJbnRlcm5hbFJv
cGVMZW5ndGggJiYgY3VycmVudEZpYmVyQXNSb3BlLT5maWJlcihpKTsgKytpKQotICAgICAgICAg
ICAgICAgICAgICB3b3JrUXVldWUuYXBwZW5kKGN1cnJlbnRGaWJlckFzUm9wZS0+ZmliZXIoaSkp
OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
QVNTRVJUKCFjdXJyZW50RmliZXJBc1JvcGUtPnN1YnN0cmluZ0Jhc2UoKS0+aXNSb3BlKCkpOwot
ICAgICAgICAgICAgY2hhcmFjdGVycyA9Ci0gICAgICAgICAgICAgICAgY3VycmVudEZpYmVyQXNS
b3BlLT5zdWJzdHJpbmdCYXNlKCktPnZhbHVlSW50ZXJuYWwoKS5jaGFyYWN0ZXJzOCgpICsKLSAg
ICAgICAgICAgICAgICBjdXJyZW50RmliZXJBc1JvcGUtPnN1YnN0cmluZ09mZnNldCgpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNoYXJhY3RlcnMgPSBjdXJyZW50RmliZXItPnZhbHVl
SW50ZXJuYWwoKS5jaGFyYWN0ZXJzOCgpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbGVu
Z3RoID0gY3VycmVudEZpYmVyLT5sZW5ndGgoKTsKLSAgICAgICAgcG9zaXRpb24gLT0gbGVuZ3Ro
OwotICAgICAgICBTdHJpbmdJbXBsOjpjb3B5Q2hhcmFjdGVycyhwb3NpdGlvbiwgY2hhcmFjdGVy
cywgbGVuZ3RoKTsKLSAgICB9Ci0KLSAgICBBU1NFUlQoYnVmZmVyID09IHBvc2l0aW9uKTsKLX0K
LQotdm9pZCBKU1JvcGVTdHJpbmc6OnJlc29sdmVSb3BlU2xvd0Nhc2UoVUNoYXIqIGJ1ZmZlcikg
Y29uc3QKK3RlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Cit2b2lkIEpTUm9wZVN0cmlu
Zzo6cmVzb2x2ZVJvcGVTbG93Q2FzZShDaGFyYWN0ZXJUeXBlKiBidWZmZXIpIGNvbnN0CiB7Ci0g
ICAgVUNoYXIqIHBvc2l0aW9uID0gYnVmZmVyICsgbGVuZ3RoKCk7IC8vIFdlIHdpbGwgYmUgd29y
a2luZyBiYWNrd2FyZHMgb3ZlciB0aGUgcm9wZS4KKyAgICBDaGFyYWN0ZXJUeXBlKiBwb3NpdGlv
biA9IGJ1ZmZlciArIGxlbmd0aCgpOyAvLyBXZSB3aWxsIGJlIHdvcmtpbmcgYmFja3dhcmRzIG92
ZXIgdGhlIHJvcGUuCiAgICAgVmVjdG9yPEpTU3RyaW5nKiwgMzIsIFVuc2FmZVZlY3Rvck92ZXJm
bG93PiB3b3JrUXVldWU7IC8vIFRoZXNlIHN0cmluZ3MgYXJlIGtlcHQgYWxpdmUgYnkgdGhlIHBh
cmVudCByb3BlLCBzbyB1c2luZyBhIFZlY3RvciBpcyBPSy4KIAogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgc19tYXhJbnRlcm5hbFJvcGVMZW5ndGggJiYgZmliZXIoaSk7ICsraSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCmluZGV4IDA0MmE4YzllY2NlMmRkZDg4
MmFmMTljYjU0NDRhYjUzZDY1ZDc3MmMuLmRhZWYyNjBhMWE3YzA0ZmQ4MzMyYTUwYjkyMGEwYmMx
NDFkMTM2NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaApAQCAt
NTkyLDEyICs1OTIsMTEgQEAgY2xhc3MgSlNSb3BlU3RyaW5nIGZpbmFsIDogcHVibGljIEpTU3Ry
aW5nIHsKICAgICBKU19FWFBPUlRfUFJJVkFURSBBdG9tU3RyaW5nIHJlc29sdmVSb3BlVG9BdG9t
U3RyaW5nKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgUmVm
UHRyPEF0b21TdHJpbmdJbXBsPiByZXNvbHZlUm9wZVRvRXhpc3RpbmdBdG9tU3RyaW5nKEpTR2xv
YmFsT2JqZWN0KikgY29uc3Q7CiAgICAgdm9pZCByZXNvbHZlUm9wZVNsb3dDYXNlOChMQ2hhciop
IGNvbnN0OwotICAgIHZvaWQgcmVzb2x2ZVJvcGVTbG93Q2FzZShVQ2hhciopIGNvbnN0OworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+IE5FVkVSX0lOTElORSB2b2lkIHJlc29s
dmVSb3BlU2xvd0Nhc2UoQ2hhcmFjdGVyVHlwZSopIGNvbnN0OworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENoYXJhY3RlclR5cGU+IHZvaWQgcmVzb2x2ZVJvcGVJbnRlcm5hbE5vU3Vic3RyaW5nKENo
YXJhY3RlclR5cGUqKSBjb25zdDsKICAgICB2b2lkIG91dE9mTWVtb3J5KEpTR2xvYmFsT2JqZWN0
KiBudWxsT3JHbG9iYWxPYmplY3RGb3JPT00pIGNvbnN0OwogICAgIHZvaWQgcmVzb2x2ZVJvcGVJ
bnRlcm5hbDgoTENoYXIqKSBjb25zdDsKLSAgICB2b2lkIHJlc29sdmVSb3BlSW50ZXJuYWw4Tm9T
dWJzdHJpbmcoTENoYXIqKSBjb25zdDsKICAgICB2b2lkIHJlc29sdmVSb3BlSW50ZXJuYWwxNihV
Q2hhciopIGNvbnN0OwotICAgIHZvaWQgcmVzb2x2ZVJvcGVJbnRlcm5hbDE2Tm9TdWJzdHJpbmco
VUNoYXIqKSBjb25zdDsKICAgICBTdHJpbmdWaWV3IHVuc2FmZVZpZXcoSlNHbG9iYWxPYmplY3Qq
KSBjb25zdDsKICAgICBTdHJpbmdWaWV3V2l0aFVuZGVybHlpbmdTdHJpbmcgdmlld1dpdGhVbmRl
cmx5aW5nU3RyaW5nKEpTR2xvYmFsT2JqZWN0KikgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XVEYvd3RmL3RleHQvU3RyaW5nSW1wbC5oIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJpbmdJ
bXBsLmgKaW5kZXggNGI4MTgzMWRjY2M5ZTUyMGE5NDU3MWUxNjUxNTBhNTcxZDZlNDMzYi4uMTFm
NzA1N2Q1NjFjODdmMjNkZWU0NDcyMjZlMDdiOWRiN2Q0YzJmZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dURi93dGYvdGV4dC9TdHJpbmdJbXBsLmgKKysrIGIvU291cmNlL1dURi93dGYvdGV4dC9TdHJp
bmdJbXBsLmgKQEAgLTM3MCw4ICszNzAsNyBAQCBjbGFzcyBTdHJpbmdJbXBsIDogcHJpdmF0ZSBT
dHJpbmdJbXBsU2hhcGUgewogICAgIEFMV0FZU19JTkxJTkUgc3RhdGljIFN0cmluZ0ltcGwqIGVt
cHR5KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxTdHJpbmdJbXBsKj4oJnNfZW1wdHlBdG9t
U3RyaW5nKTsgfQogCiAgICAgLy8gRklYTUU6IERvZXMgdGhpcyByZWFsbHkgYmVsb25nIGluIFN0
cmluZ0ltcGw/Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4gc3RhdGljIHZv
aWQgY29weUNoYXJhY3RlcnMoQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24sIGNvbnN0IENoYXJh
Y3RlclR5cGUqIHNvdXJjZSwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycyk7Ci0gICAgc3RhdGljIHZv
aWQgY29weUNoYXJhY3RlcnMoVUNoYXIqIGRlc3RpbmF0aW9uLCBjb25zdCBMQ2hhciogc291cmNl
LCB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2VD
aGFyYWN0ZXJUeXBlLCB0eXBlbmFtZSBEZXN0aW5hdGlvbkNoYXJhY3RlclR5cGU+IHN0YXRpYyB2
b2lkIGNvcHlDaGFyYWN0ZXJzKERlc3RpbmF0aW9uQ2hhcmFjdGVyVHlwZSogZGVzdGluYXRpb24s
IGNvbnN0IFNvdXJjZUNoYXJhY3RlclR5cGUqIHNvdXJjZSwgdW5zaWduZWQgbnVtQ2hhcmFjdGVy
cyk7CiAKICAgICAvLyBTb21lIHN0cmluZyBmZWF0dXJlcywgbGlrZSByZWZlcmVuY2UgY291bnRp
bmcgYW5kIHRoZSBhdG9taWNpdHkgZmxhZywgYXJlIG5vdAogICAgIC8vIHRocmVhZC1zYWZlLiBX
ZSBhY2hpZXZlIHRocmVhZCBzYWZldHkgYnkgaXNvbGF0aW9uLCBnaXZpbmcgZWFjaCB0aHJlYWQK
QEAgLTEwNzQsMTkgKzEwNzMsMTkgQEAgaW5saW5lIHZvaWQgU3RyaW5nSW1wbDo6ZGVyZWYoKQog
ICAgIG1fcmVmQ291bnQgPSB0ZW1wUmVmQ291bnQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIENo
YXJhY3RlclR5cGU+IGlubGluZSB2b2lkIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKENoYXJh
Y3RlclR5cGUqIGRlc3RpbmF0aW9uLCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBzb3VyY2UsIHVuc2ln
bmVkIG51bUNoYXJhY3RlcnMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2VDaGFyYWN0ZXJUeXBl
LCB0eXBlbmFtZSBEZXN0aW5hdGlvbkNoYXJhY3RlclR5cGU+CitpbmxpbmUgdm9pZCBTdHJpbmdJ
bXBsOjpjb3B5Q2hhcmFjdGVycyhEZXN0aW5hdGlvbkNoYXJhY3RlclR5cGUqIGRlc3RpbmF0aW9u
LCBjb25zdCBTb3VyY2VDaGFyYWN0ZXJUeXBlKiBzb3VyY2UsIHVuc2lnbmVkIG51bUNoYXJhY3Rl
cnMpCiB7Ci0gICAgaWYgKG51bUNoYXJhY3RlcnMgPT0gMSkgewotICAgICAgICAqZGVzdGluYXRp
b24gPSAqc291cmNlOwotICAgICAgICByZXR1cm47CisgICAgaWYgY29uc3RleHByIChzdGQ6Omlz
X3NhbWU8U291cmNlQ2hhcmFjdGVyVHlwZSwgRGVzdGluYXRpb25DaGFyYWN0ZXJUeXBlPjo6dmFs
dWUpIHsKKyAgICAgICAgaWYgKG51bUNoYXJhY3RlcnMgPT0gMSkgeworICAgICAgICAgICAgKmRl
c3RpbmF0aW9uID0gKnNvdXJjZTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAg
ICAgICBtZW1jcHkoZGVzdGluYXRpb24sIHNvdXJjZSwgbnVtQ2hhcmFjdGVycyAqIHNpemVvZihE
ZXN0aW5hdGlvbkNoYXJhY3RlclR5cGUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVyczsgKytpKQorICAgICAgICAgICAgZGVzdGlu
YXRpb25baV0gPSBzb3VyY2VbaV07CiAgICAgfQotICAgIG1lbWNweShkZXN0aW5hdGlvbiwgc291
cmNlLCBudW1DaGFyYWN0ZXJzICogc2l6ZW9mKENoYXJhY3RlclR5cGUpKTsKLX0KLQotQUxXQVlT
X0lOTElORSB2b2lkIFN0cmluZ0ltcGw6OmNvcHlDaGFyYWN0ZXJzKFVDaGFyKiBkZXN0aW5hdGlv
biwgY29uc3QgTENoYXIqIHNvdXJjZSwgdW5zaWduZWQgbnVtQ2hhcmFjdGVycykKLXsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtQ2hhcmFjdGVyczsgKytpKQotICAgICAgICBkZXN0
aW5hdGlvbltpXSA9IHNvdXJjZVtpXTsKIH0KIAogaW5saW5lIFVDaGFyIFN0cmluZ0ltcGw6OmF0
KHVuc2lnbmVkIGkpIGNvbnN0CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDdjNWFmNDRiYjNjNGZjYzM3OThmYWQ0MzZjY2IxZDg4M2I1MTlm
YTEuLjA1NTVlMzc0NTFhNTc5N2IyNTQ4ZDU4YzU2MDcwMDBkN2YwMzY1NTggMTAwNjQ0Ci0tLSBh
L0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTktMTItMTYgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KKworICAg
ICAgICBbSlNDXSA4Qml0IEpTUm9wZVN0cmluZyBjYW4gY29udGFpbiAxNkJpdCBzdHJpbmcgaW4g
aXRzIHJvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIwNTMyMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogc3RyZXNzLzhiaXQtcmVzb2x2ZS1jYW4tZW5jb3VudGVyLTE2Yml0LXN0cmluZy5qczogQWRk
ZWQuCisgICAgICAgIChmb28pOgorCiAyMDE5LTEyLTEzICBZdXN1a2UgU3V6dWtpICA8eXN1enVr
aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gUmVtb3ZlIEpTRml4ZWRBcnJheSwgYW5kIHVz
ZSBKU0ltbXV0YWJsZUJ1dHRlcmZseSBpbnN0ZWFkCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVz
cy84Yml0LXJlc29sdmUtY2FuLWVuY291bnRlci0xNmJpdC1zdHJpbmcuanMgYi9KU1Rlc3RzL3N0
cmVzcy84Yml0LXJlc29sdmUtY2FuLWVuY291bnRlci0xNmJpdC1zdHJpbmcuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uZjQ4OWFjYWRlODEyNDZkODUzODg4MmEyZTE0NWUzZjI4YTY2NmU1OAotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvc3RyZXNzLzhiaXQtcmVzb2x2ZS1jYW4tZW5jb3VudGVyLTE2Yml0LXN0
cmluZy5qcwpAQCAtMCwwICsxLDExIEBACitmdW5jdGlvbiBmb28oKSB7CisgICAgY29uc3QgczAg
PSAnJy5wYWRTdGFydCgyMDQ5LCAoKT0+e30pOworICAgIGNvbnN0IHMxID0gczAucGFkU3RhcnQo
MjA1MCk7CisgICAgKDApW3MwXTsKKyAgICBzMVswXTsKK30KKworY29uc3QgczIgPSBbMTAsIGZv
b10udG9Mb2NhbGVTdHJpbmcoKTsKK2NvbnN0IHMzID0gZXZhbChzMik7CitzMygpOworZm9vKCk7
Cg==
</data>
<flag name="review"
          id="401646"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>