<?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>63270</bug_id>
          
          <creation_ts>2011-06-23 12:07:41 -0700</creation_ts>
          <short_desc>Refactor creation of primitive values in CSSParser</short_desc>
          <delta_ts>2011-06-24 09:35:21 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tony Chang">tony</reporter>
          <assigned_to name="Tony Chang">tony</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>426341</commentid>
    <comment_count>0</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-23 12:07:41 -0700</bug_when>
    <thetext>Refactor creation of primitive values in CSSParser</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426343</commentid>
    <comment_count>1</comment_count>
      <attachid>98378</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-23 12:09:56 -0700</bug_when>
    <thetext>Created attachment 98378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426344</commentid>
    <comment_count>2</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-23 12:10:21 -0700</bug_when>
    <thetext>This is a follow up from bug 62050.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426361</commentid>
    <comment_count>3</comment_count>
      <attachid>98378</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-23 12:30:38 -0700</bug_when>
    <thetext>Comment on attachment 98378
Patch

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

&gt; Source/WebCore/css/CSSParser.cpp:716
&gt; +inline PassRefPtr&lt;CSSPrimitiveValue&gt; CSSParser::createPrimitiveNumericValue(CSSParserValue* value)
&gt; +{
&gt; +    return primitiveValueCache()-&gt;createValue(value-&gt;fValue, static_cast&lt;CSSPrimitiveValue::UnitTypes&gt;(value-&gt;unit));
&gt; +}
&gt; +
&gt; +inline PassRefPtr&lt;CSSPrimitiveValue&gt; CSSParser::createPrimitiveStringValue(const String&amp; value)
&gt; +{
&gt; +    return primitiveValueCache()-&gt;createValue(value, CSSPrimitiveValue::CSS_STRING);
&gt; +}

Since these functions are private to this .cpp file they should be marked static to give them internal linkage. Even an inline function can be either internal or external linkage, believe it or not, and external linkage is the default. Adding static is the best practice.

I don’t understand why in the case of StringValue we pass the string, but in the case of NumericValue we pass the CSSParserValue*.

A problem with createPrimitiveNumericValue is that it moves the assumption that we can get at fValue and that we can cast the unit to a CSSPrimitiveValue unit type away from the if statements that make this safe. That makes the code riskier than it was before, even though it&apos;s tidier.

Is there a way to add an assertion to createPrimitiveNumericValue that checks that the value is one where fValue is used, not iValue, string, or function? I really worry about this use of the union getting farther away from the type check that ensures it’s valid to look at that value in the union.

Is there a way to add an assertion that value-&gt;unit is one of the values that is a CSSPrimitiveValue unit type?

I think that CSSParserValue itself should probably be turned into a class that can guard against incorrect access and typecasting and use functions rather than direct access to the data members, especially the ones in the union.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426378</commentid>
    <comment_count>4</comment_count>
      <attachid>98378</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-06-23 12:50:08 -0700</bug_when>
    <thetext>Comment on attachment 98378
Patch

Wow.  That&apos;s soooo much better than the code was before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426545</commentid>
    <comment_count>5</comment_count>
      <attachid>98419</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-23 15:24:04 -0700</bug_when>
    <thetext>Created attachment 98419
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426562</commentid>
    <comment_count>6</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-23 15:47:10 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 98378 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=98378&amp;action=review
&gt; Since these functions are private to this .cpp file they should be marked static to give them internal linkage. Even an inline function can be either internal or external linkage, believe it or not, and external linkage is the default. Adding static is the best practice.

They&apos;re member functions because they use primitiveValueCache().  We could pass this in as a param, but it would make the calls much less convenient.  Do you think it&apos;s worth it to get internal linkage?

&gt; I don’t understand why in the case of StringValue we pass the string, but in the case of NumericValue we pass the CSSParserValue*.

Good point. I changed createPrimitiveStringValue to take a CSSParserValue*.

&gt; A problem with createPrimitiveNumericValue is that it moves the assumption that we can get at fValue and that we can cast the unit to a CSSPrimitiveValue unit type away from the if statements that make this safe. That makes the code riskier than it was before, even though it&apos;s tidier.
&gt; 
&gt; Is there a way to add an assertion to createPrimitiveNumericValue that checks that the value is one where fValue is used, not iValue, string, or function? I really worry about this use of the union getting farther away from the type check that ensures it’s valid to look at that value in the union.

I looked but couldn&apos;t seem to find a way to do this verification.

&gt; Is there a way to add an assertion that value-&gt;unit is one of the values that is a CSSPrimitiveValue unit type?

Done.

&gt; I think that CSSParserValue itself should probably be turned into a class that can guard against incorrect access and typecasting and use functions rather than direct access to the data members, especially the ones in the union.

Sounds like a good idea, but not something I plan on tackling in the near future.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426613</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-23 16:43:40 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; They&apos;re member functions because they use primitiveValueCache().

Oops, I missed that.

&gt; Do you think it&apos;s worth it to get internal linkage?

No.

&gt; &gt; A problem with createPrimitiveNumericValue is that it moves the assumption that we can get at fValue and that we can cast the unit to a CSSPrimitiveValue unit type away from the if statements that make this safe. That makes the code riskier than it was before, even though it&apos;s tidier.
&gt; &gt; 
&gt; &gt; Is there a way to add an assertion to createPrimitiveNumericValue that checks that the value is one where fValue is used, not iValue, string, or function? I really worry about this use of the union getting farther away from the type check that ensures it’s valid to look at that value in the union.
&gt; 
&gt; I looked but couldn&apos;t seem to find a way to do this verification.

We at least need some kind of comment. These are not safe functions to call without proper checking of the ID.

I suspect you could do the verification if you had a subset of the logic in CSSParserValue::createCSSValue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426628</commentid>
    <comment_count>8</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-23 16:54:37 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; &gt; A problem with createPrimitiveNumericValue is that it moves the assumption that we can get at fValue and that we can cast the unit to a CSSPrimitiveValue unit type away from the if statements that make this safe. That makes the code riskier than it was before, even though it&apos;s tidier.
&gt; &gt; &gt; 
&gt; &gt; &gt; Is there a way to add an assertion to createPrimitiveNumericValue that checks that the value is one where fValue is used, not iValue, string, or function? I really worry about this use of the union getting farther away from the type check that ensures it’s valid to look at that value in the union.
&gt; &gt; 
&gt; &gt; I looked but couldn&apos;t seem to find a way to do this verification.
&gt; 
&gt; We at least need some kind of comment. These are not safe functions to call without proper checking of the ID.
&gt; 
&gt; I suspect you could do the verification if you had a subset of the logic in CSSParserValue::createCSSValue.

Looking in CSSParserValue::createCSSValue, it looks like fValue should be valid in the same cases that |unit| is a valid numeric value.  That is, the assert I added in the last patch should also ensure that fValue is valid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426638</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-23 17:05:41 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Looking in CSSParserValue::createCSSValue, it looks like fValue should be valid in the same cases that |unit| is a valid numeric value.  That is, the assert I added in the last patch should also ensure that fValue is valid.

OK. Can we do a similar assert for strings?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426642</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-06-23 17:07:49 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; Looking in CSSParserValue::createCSSValue, it looks like fValue should be valid in the same cases that |unit| is a valid numeric value.  That is, the assert I added in the last patch should also ensure that fValue is valid.
&gt; 
&gt; OK. Can we do a similar assert for strings?

Looks like you did!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>426927</commentid>
    <comment_count>11</comment_count>
    <who name="Tony Chang">tony</who>
    <bug_when>2011-06-24 09:35:21 -0700</bug_when>
    <thetext>Committed r89680: &lt;http://trac.webkit.org/changeset/89680&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98378</attachid>
            <date>2011-06-23 12:09:56 -0700</date>
            <delta_ts>2011-06-23 15:24:01 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63270-20110623120936.patch</filename>
            <type>text/plain</type>
            <size>23656</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk0OTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzYmI5NzliOTZkMjk0MjU0
ZjcwYTBhNDJiNThjZDI3Zjc1NWM5YWMxLi5jYTUxMmY2ZTFmMGM3OTJhYmNmOTZhMmUwOTJmYTVj
Y2Q4YjI4MGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDYtMjMgIFRvbnkg
Q2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBjcmVhdGlvbiBvZiBwcmltaXRpdmUgdmFsdWVz
IGluIENTU1BhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjMyNzAKKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSk6IEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIG51
bWVyaWMgdmFsdWVzCisgICAgICAgICAgICB0byBrZWVwIHRoZSBjYXN0IGluIG9uZSBwbGFjZS4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUp
OiBIZWxwZXIgbWV0aG9kIGZvciBjcmVhdGluZyBzdHJpbmcgdmFsdWVzLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbGlkUHJpbWl0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBh
cnNlV0NTU0lucHV0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZVBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvblgpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvblkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlRmlsbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpw
YXJzZUFuaW1hdGlvbkRlbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VB
bmltYXRpb25EdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQW5p
bWF0aW9uSXRlcmF0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZUFuaW1hdGlvbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVRyYW5z
Zm9ybU9yaWdpblNob3J0aGFuZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNl
RGFzaGJvYXJkUmVnaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ291
bnRlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGb250KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VSZWZsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VCb3JkZXJSYWRpdXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZUNvdW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRH
cmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlTGluZWFyR3JhZGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VHcmFkaWVudENvbG9yU3RvcHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtT3JpZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VUZXh0RW1waGFzaXNTdHlsZSk6CisgICAgICAgICogY3NzL0NT
U1BhcnNlci5oOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZUNhY2hlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZUNhY2hlOjpjcmVhdGVWYWx1ZSk6IHBhc3Mg
U3RyaW5nIGJ5IGNvbnN0IHJlZmVyZW5jZQorCiAyMDExLTA2LTIyICBBbm5pZSBTdWxsaXZhbiAg
PHN1bGxpdmFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5p
d2EuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDdhNjZjMDZlYWIzMWY2YmRmMDFmNmE0
OTczNWY0NTVhNmY1YmRkZTEuLmU3YjAzNzUxMDZhZmFjMTMwZjczZmNlYWZmODI3MmFiMmYwNTZh
NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC02MDYsNyArNjA2LDYgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlTWVkaWFRdWVyeShNZWRpYUxpc3QqIHF1ZXJpZXMsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQogICAgIHJldHVybiBvazsKIH0KIAotCiB2b2lkIENTU1BhcnNlcjo6YWRkUHJv
cGVydHkoaW50IHByb3BJZCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWUsIGJvb2wgaW1wb3J0
YW50KQogewogICAgIE93blB0cjxDU1NQcm9wZXJ0eT4gcHJvcChhZG9wdFB0cihuZXcgQ1NTUHJv
cGVydHkocHJvcElkLCB2YWx1ZSwgaW1wb3J0YW50LCBtX2N1cnJlbnRTaG9ydGhhbmQsIG1faW1w
bGljaXRTaG9ydGhhbmQpKSk7CkBAIC03MDYsNiArNzA1LDE2IEBAIGJvb2wgQ1NTUGFyc2VyOjp2
YWxpZFVuaXQoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlLCBVbml0cyB1bml0ZmxhZ3MsIGJvb2wgc3Ry
aWN0KQogICAgIHJldHVybiBiOwogfQogCitpbmxpbmUgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gQ1NTUGFyc2VyOjpjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoQ1NTUGFyc2VyVmFs
dWUqIHZhbHVlKQoreworICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZh
bHVlKHZhbHVlLT5mVmFsdWUsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlw
ZXM+KHZhbHVlLT51bml0KSk7Cit9CisKK2lubGluZSBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBDU1NQYXJzZXI6OmNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKGNvbnN0IFN0cmluZyYg
dmFsdWUpCit7CisgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUo
dmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKK30KKwogc3RhdGljIGludCB1
bml0RnJvbVN0cmluZyhDU1NQYXJzZXJWYWx1ZSogdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLT51
bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQgfHwgdmFsdWUtPmlkKQpAQCAtNzg1
LDExICs3OTQsMTEgQEAgaW5saW5lIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VWYWxpZFByaW1pdGl2ZShpbnQgaWQsIENTU1BhcnNlclZhbHUKICAgICBpZiAoaWQpCiAgICAg
ICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShp
ZCk7CiAgICAgaWYgKHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5H
KQotICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1
ZS0+c3RyaW5nLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOwor
ICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWUtPnN0cmluZyk7
CiAgICAgaWYgKHZhbHVlLT51bml0ID49IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSICYm
IHZhbHVlLT51bml0IDw9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfS0haKQotICAgICAgICByZXR1
cm4gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NT
UHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOworICAgICAgICByZXR1cm4g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKICAgICBpZiAodmFsdWUtPnVuaXQg
Pj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19UVVJOICYmIHZhbHVlLT51bml0IDw9IENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfUkVNUykKLSAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUo
KS0+Y3JlYXRlVmFsdWUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlw
ZXMpIHZhbHVlLT51bml0KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSh2YWx1ZSk7CiAgICAgaWYgKHZhbHVlLT51bml0ID49IENTU1BhcnNlclZhbHVlOjpRX0VN
UykKICAgICAgICAgcmV0dXJuIENTU1F1aXJrUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZS0+
ZlZhbHVlLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUyk7CiAgICAgcmV0dXJuIDA7CkBAIC0x
NDM5LDE0ICsxNDQ4LDE0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQs
IGJvb2wgaW1wb3J0YW50KQogICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1
ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZywgbV9zdHJpY3QpOwogICAgICAgICBpZiAo
IXZhbGlkUHJpbWl0aXZlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlZFZhbHVlMSA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUo
KS0+Y3JlYXRlVmFsdWUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlw
ZXMpdmFsdWUtPnVuaXQpOworICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNl
ZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUyOwogICAgICAgICBpZiAobnVtID09
IDIpIHsKICAgICAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQg
fCBGTm9uTmVnLCBtX3N0cmljdCk7CiAgICAgICAgICAgICBpZiAoIXZhbGlkUHJpbWl0aXZlKQog
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9
IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUodmFsdWUtPmZWYWx1ZSwgKENTU1By
aW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpdmFsdWUtPnVuaXQpOworICAgICAgICAgICAgcGFyc2Vk
VmFsdWUyID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBwYXJzZWRWYWx1ZTE7CiAKQEAgLTE2MzAs
NyArMTYzOSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wg
aW1wb3J0YW50KQogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIC8vIEFjY2VwdGluZyB2YWx1
ZWxlc3MgbnVtYmVycyBpcyBhIHF1aXJrIG9mIHRoZSAtd2Via2l0IHByZWZpeGVkIHZlcnNpb24g
b2YgdGhlIHByb3BlcnR5LgogICAgICAgICAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRk51bWJl
ciB8IEZMZW5ndGggfCBGTm9uTmVnLCBtX3N0cmljdCkpIHsKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbCA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUodmFs
dWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpdmFsdWUtPnVuaXQpOwor
ICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsID0gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKHZhbHVlKTsKICAgICAgICAgICAgICAgICBpZiAodmFsKSB7CiAgICAgICAgICAg
ICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgdmFsLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsK
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDg1LDcgKzIwOTQsNyBAQCBQ
YXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkoKQog
ICAgICAgICBpbnB1dFByb3BlcnR5ID0gU3RyaW5nKHZhbHVlLT5zdHJpbmcpOwogCiAgICAgaWYg
KCFpbnB1dFByb3BlcnR5LmlzRW1wdHkoKSkKLSAgICAgICBwYXJzZWRWYWx1ZSA9IHByaW1pdGl2
ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUoaW5wdXRQcm9wZXJ0eSwgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpOworICAgICAgIHBhcnNlZFZhbHVlID0gY3JlYXRlUHJpbWl0aXZlU3Ry
aW5nVmFsdWUoaW5wdXRQcm9wZXJ0eSk7CiAKICAgICB3aGlsZSAobV92YWx1ZUxpc3QtPm5leHQo
KSkgewogICAgIC8vIHBhc3MgYWxsIG90aGVyIHZhbHVlcywgaWYgYW55LiBJZiB3ZSBkb24ndCBk
byB0aGlzLApAQCAtMjUwMSw3ICsyNTEwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUGFnZShp
bnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBw
cmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpLCBp
bXBvcnRhbnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKHZhbHVlLT5p
ZCA9PSAwICYmIHZhbHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpIHsK
LSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0
ZVZhbHVlKHZhbHVlLT5zdHJpbmcsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKSwgaW1w
b3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBjcmVhdGVQcmltaXRpdmVTdHJp
bmdWYWx1ZSh2YWx1ZS0+c3RyaW5nKSwgaW1wb3J0YW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKQEAgLTI1NzEsNyArMjU4MCw3IEBAIENTU1BhcnNl
cjo6U2l6ZVBhcmFtZXRlclR5cGUgQ1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIoQ1NTVmFs
dWVMaXN0KiBwYXJzZWRWCiAgICAgICAgIHJldHVybiBOb25lOwogICAgIGNhc2UgMDoKICAgICAg
ICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZOb25OZWcsIG1fc3RyaWN0KSAmJiAo
cHJldlBhcmFtVHlwZSA9PSBOb25lIHx8IHByZXZQYXJhbVR5cGUgPT0gTGVuZ3RoKSkgewotICAg
ICAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQocHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVh
dGVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzPih2YWx1ZS0+dW5pdCkpKTsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlcy0+YXBwZW5k
KGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSkpOwogICAgICAgICAgICAgcmV0dXJu
IExlbmd0aDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTm9uZTsKQEAgLTI2NTcsNyArMjY2
Niw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbnRlbnQoaW50IHByb3BJZCwgYm9vbCBpbXBv
cnRhbnQpCiAgICAgICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwcmltaXRpdmVWYWx1ZUNhY2hl
KCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZSh2YWwtPmlkKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfSBlbHNlIGlmICh2YWwtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcp
IHsKLSAgICAgICAgICAgIHBhcnNlZFZhbHVlID0gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVh
dGVWYWx1ZSh2YWwtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAg
ICAgICAgICAgcGFyc2VkVmFsdWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2YWwtPnN0
cmluZyk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMjczOCw4ICsyNzQ3LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFy
c2VyOjpwYXJzZUZpbGxQb3NpdGlvblgoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QKICAg
ICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUocGVyY2VudCwg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICB9CiAgICAgaWYgKHZhbGlk
VW5pdCh2YWx1ZUxpc3QtPmN1cnJlbnQoKSwgRlBlcmNlbnQgfCBGTGVuZ3RoLCBtX3N0cmljdCkp
Ci0gICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKHZhbHVl
TGlzdC0+Y3VycmVudCgpLT5mVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlTGlz
dC0+Y3VycmVudCgpLT51bml0KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZSh2YWx1ZUxpc3QtPmN1cnJlbnQoKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI3
NTUsOCArMjc2Myw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxs
UG9zaXRpb25ZKENTU1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0CiAgICAgICAgIHJldHVybiBw
cmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRSk7CiAgICAgfQogICAgIGlmICh2YWxpZFVuaXQodmFsdWVMaXN0
LT5jdXJyZW50KCksIEZQZXJjZW50IHwgRkxlbmd0aCwgbV9zdHJpY3QpKQotICAgICAgICByZXR1
cm4gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZUxpc3QtPmN1cnJlbnQo
KS0+ZlZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+
dW5pdCk7CisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVM
aXN0LT5jdXJyZW50KCkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yNzk3LDggKzI4MDQsNyBA
QCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uQ29tcG9u
ZW50KENTU1BhcnNlclZhbHVlTGlzdCogdgogICAgICAgICAgICAgaW5kaXZpZHVhbEZsYWcgPSBZ
RmlsbFBvc2l0aW9uOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZUxpc3Qt
PmN1cnJlbnQoKS0+ZlZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZUxpc3QtPmN1
cnJlbnQoKS0+dW5pdCk7CisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFs
dWUodmFsdWVMaXN0LT5jdXJyZW50KCkpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTI5
MDcsNyArMjkxMyw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxs
U2l6ZShpbnQgcHJvcElkLCBib29sJiBhbGxvd0NvbW1hKQogICAgIGVsc2UgewogICAgICAgICBp
ZiAoIXZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50LCBtX3N0cmljdCkpCiAgICAg
ICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgcGFyc2VkVmFsdWUxID0gcHJpbWl0aXZlVmFsdWVD
YWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlcyl2YWx1ZS0+dW5pdCk7CisgICAgICAgIHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CiAgICAgfQogCiAgICAgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSA9IHN0YXRpY19jYXN0PENTU1Byb3BlcnR5SUQ+KHByb3BJZCk7CkBAIC0yOTIwLDcgKzI5
MjYsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFNpemUoaW50
IHByb3BJZCwgYm9vbCYgYWxsb3dDb21tYSkKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBp
ZiAoIXZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50LCBtX3N0cmljdCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBwcmltaXRp
dmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVW
YWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0KTsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgaWYgKCFwYXJzZWRWYWx1ZTIpIHsKQEAgLTMxMDMsNyArMzEwOSw3IEBAIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25EZWxheSgpCiB7CiAgICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsaWRV
bml0KHZhbHVlLCBGVGltZSwgbV9zdHJpY3QpKQotICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFs
dWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcyl2YWx1ZS0+dW5pdCk7CisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUodmFsdWUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMTE5LDcgKzMxMjUs
NyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRHVyYXRp
b24oKQogewogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50
KCk7CiAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWUgfCBGTm9uTmVnLCBtX3N0cmljdCkp
Ci0gICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKHZhbHVl
LT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0KTsKKyAg
ICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CiAgICAgcmV0
dXJuIDA7CiB9CiAKQEAgLTMxMzcsNyArMzE0Myw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENT
U1BhcnNlcjo6cGFyc2VBbmltYXRpb25JdGVyYXRpb25Db3VudCgpCiAgICAgaWYgKHZhbHVlLT5p
ZCA9PSBDU1NWYWx1ZUluZmluaXRlKQogICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNo
ZSgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKICAgICBpZiAodmFsaWRVbml0
KHZhbHVlLCBGSW50ZWdlciB8IEZOb25OZWcsIG1fc3RyaWN0KSkKLSAgICAgICAgcmV0dXJuIHBy
aW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1p
dGl2ZVZhbHVlOjpVbml0VHlwZXMpdmFsdWUtPnVuaXQpOworICAgICAgICByZXR1cm4gY3JlYXRl
UHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzE0
OCw3ICszMTU0LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1h
dGlvbk5hbWUoKQogICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9uZSB8fCAodmFs
dWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgJiYgZXF1YWxJZ25vcmlu
Z0Nhc2UodmFsdWUtPnN0cmluZywgIm5vbmUiKSkpIHsKICAgICAgICAgICAgIHJldHVybiBwcmlt
aXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwog
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUo
KS0+Y3JlYXRlVmFsdWUodmFsdWUtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJ
TkcpOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKHZhbHVl
LT5zdHJpbmcpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAwOwpAQCAtMzE4NCw4ICsz
MTkwLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtT3JpZ2luU2hvcnRoYW5kKFJl
ZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVmUHRyPEMKICAgICAvLyBub3cgZ2V0IHoKICAgICBp
ZiAobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkgewogICAgICAgICBpZiAodmFsaWRVbml0KG1fdmFs
dWVMaXN0LT5jdXJyZW50KCksIEZMZW5ndGgsIG1fc3RyaWN0KSkgewotICAgICAgICAgICAgdmFs
dWUzID0gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZShtX3ZhbHVlTGlzdC0+Y3Vy
cmVudCgpLT5mVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyltX3ZhbHVlTGlzdC0+Y3VycmVudCgp
LT51bml0KTsKKyAgICAgICAgICAgIHZhbHVlMyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZShtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKTsKICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0
KCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMzQ5Niw3ICszNTAx
LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyhpbnQgcHJvcElkLCBi
b29sIGltcG9ydGFudCkKIAogICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gYW1vdW50ID0gYXJnLT5pZCA9PSBDU1NWYWx1ZUF1dG8gPwogICAgICAgICAgICAgICAgICAg
ICBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1
dG8pIDoKLSAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVW
YWx1ZShhcmctPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIGFyZy0+dW5p
dCk7CisgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhcmcp
OwogCiAgICAgICAgICAgICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgICAgICAgICAgcmVn
aW9uLT5zZXRUb3AoYW1vdW50KTsKQEAgLTM1MzQsMTEgKzM1MzksMTEgQEAgUGFzc1JlZlB0cjxD
U1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNvdW50ZXJDb250ZW50KENTU1BhcnNlclZhbHVlTGlz
dCogYXJncywgYm8KICAgICBDU1NQYXJzZXJWYWx1ZSogaSA9IGFyZ3MtPmN1cnJlbnQoKTsKICAg
ICBpZiAoaS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGlkZW50aWZpZXIgPSBwcmlt
aXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGktPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19TVFJJTkcpOworICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gaWRlbnRpZmll
ciA9IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKGktPnN0cmluZyk7CiAKICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHNlcGFyYXRvcjsKICAgICBpZiAoIWNvdW50ZXJzKQotICAgICAg
ICBzZXBhcmF0b3IgPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKFN0cmluZygp
LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisgICAgICAgIHNlcGFyYXRvciA9IGNy
ZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKFN0cmluZygpKTsKICAgICBlbHNlIHsKICAgICAgICAg
aSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKGktPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6
Ok9wZXJhdG9yIHx8IGktPmlWYWx1ZSAhPSAnLCcpCkBAIC0zNTQ4LDcgKzM1NTMsNyBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2Vy
VmFsdWVMaXN0KiBhcmdzLCBibwogICAgICAgICBpZiAoaS0+dW5pdCAhPSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1NUUklORykKICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgIHNlcGFy
YXRvciA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUoaS0+c3RyaW5nLCAoQ1NT
UHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgaS0+dW5pdCk7CisgICAgICAgIHNlcGFyYXRvciA9
IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKGktPnN0cmluZyk7CiAgICAgfQogCiAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBsaXN0U3R5bGU7CkBAIC0zNTk4LDcgKzM2MDMsNyBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VTaGFwZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGxlbmd0
aCA9IGEtPmlkID09IENTU1ZhbHVlQXV0byA/CiAgICAgICAgICAgICBwcmltaXRpdmVWYWx1ZUNh
Y2hlKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pIDoKLSAgICAgICAgICAg
IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUoYS0+ZlZhbHVlLCAoQ1NTUHJpbWl0
aXZlVmFsdWU6OlVuaXRUeXBlcykgYS0+dW5pdCk7CisgICAgICAgICAgICBjcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUoYSk7CiAgICAgICAgIGlmIChpID09IDApCiAgICAgICAgICAgICByZWN0
LT5zZXRUb3AobGVuZ3RoKTsKICAgICAgICAgZWxzZSBpZiAoaSA9PSAxKQpAQCAtMzcwMiw3ICsz
NzA3LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udChib29sIGltcG9ydGFudCkKICAgICBp
ZiAodmFsdWUtPmlkID49IENTU1ZhbHVlWHhTbWFsbCAmJiB2YWx1ZS0+aWQgPD0gQ1NTVmFsdWVM
YXJnZXIpCiAgICAgICAgIGZvbnQtPnNpemUgPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0
ZUlkZW50aWZpZXJWYWx1ZSh2YWx1ZS0+aWQpOwogICAgIGVsc2UgaWYgKHZhbGlkVW5pdCh2YWx1
ZSwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5vbk5lZywgbV9zdHJpY3QpKQotICAgICAgICBmb250
LT5zaXplID0gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+ZlZhbHVl
LCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOworICAgICAgICBm
b250LT5zaXplID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKICAgICB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgaWYgKCFmb250LT5zaXplIHx8ICF2YWx1ZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzcxNSw3ICszNzIwLDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRm9udChib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKHZhbHVlLT5pZCA9PSBD
U1NWYWx1ZU5vcm1hbCkgewogICAgICAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSwgbm90aGluZyB0
byBkbwogICAgICAgICB9IGVsc2UgaWYgKHZhbGlkVW5pdCh2YWx1ZSwgRk51bWJlciB8IEZMZW5n
dGggfCBGUGVyY2VudCB8IEZOb25OZWcsIG1fc3RyaWN0KSkKLSAgICAgICAgICAgIGZvbnQtPmxp
bmVIZWlnaHQgPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKHZhbHVlLT5mVmFs
dWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7CisgICAgICAg
ICAgICBmb250LT5saW5lSGVpZ2h0ID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVl
KTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB2YWx1
ZSA9IG1fdmFsdWVMaXN0LT5uZXh0KCk7CkBAIC00NzU3LDcgKzQ3NjIsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VSZWZsZWN0KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGVsc2Ug
ewogICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWwsIEZMZW5ndGggfCBGUGVyY2VudCwgbV9zdHJp
Y3QpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBvZmZzZXQgPSBwcmltaXRp
dmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKHZhbC0+ZlZhbHVlLCBzdGF0aWNfY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPih2YWwtPnVuaXQpKTsKKyAgICAgICAgb2Zmc2V0ID0g
Y3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbCk7CiAgICAgfQogCiAgICAgLy8gTm93IGZv
ciB0aGUgbWFzay4KQEAgLTUwNTgsNyArNTA2Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUJv
cmRlclJhZGl1cyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgaWYgKCF2YWxp
ZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcsIG1fc3RyaWN0KSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IHJhZGl1cyA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUodmFsdWUtPmZW
YWx1ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4odmFsdWUtPnVu
aXQpKTsKKyAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpdXMgPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwogCiAgICAgICAgIGlmICghaW5kZXhBZnRlclNs
YXNoKSB7CiAgICAgICAgICAgICByYWRpaVswXVtpXSA9IHJhZGl1czsKQEAgLTUwOTksNyArNTEw
NCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvdW50ZXIoaW50IHByb3BJZCwgaW50IGRlZmF1
bHRWYWx1ZSwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKICAgICAg
ICAgICAgIGNhc2UgSUQ6CiAgICAgICAgICAgICAgICAgaWYgKHZhbCAmJiB2YWwtPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewotICAgICAgICAgICAgICAgICAgICBjb3Vu
dGVyTmFtZSA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUodmFsLT5zdHJpbmcs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKTsKKyAgICAgICAgICAgICAgICAgICAgY291
bnRlck5hbWUgPSBjcmVhdGVQcmltaXRpdmVTdHJpbmdWYWx1ZSh2YWwtPnN0cmluZyk7CiAgICAg
ICAgICAgICAgICAgICAgIHN0YXRlID0gVkFMOwogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
TGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTUyNzUsNyAr
NTI4MCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudChSZWZQdHI8
Q1NTVmFsdWU+JiBncmFkaWVudCkKICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAg
aWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN0YXRpY19jYXN0PENTU1JhZGlhbEdyYWRp
ZW50VmFsdWUqPihyZXN1bHQuZ2V0KCkpLT5zZXRGaXJzdFJhZGl1cyhwcmltaXRpdmVWYWx1ZUNh
Y2hlKCktPmNyZWF0ZVZhbHVlKGEtPmZWYWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1C
RVIpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZSo+KHJlc3Vs
dC5nZXQoKSktPnNldEZpcnN0UmFkaXVzKGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhKSk7
CiAKICAgICAgICAgLy8gQ29tbWEgYWZ0ZXIgdGhlIGZpcnN0IHJhZGl1cy4KICAgICAgICAgYSA9
IGFyZ3MtPm5leHQoKTsKQEAgLTUzMTIsNyArNTMxNyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZURlcHJlY2F0ZWRHcmFkaWVudChSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCkKICAgICAgICAg
YSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19OVU1CRVIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IHN0YXRpY19jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWUqPihyZXN1bHQuZ2V0KCkpLT5zZXRT
ZWNvbmRSYWRpdXMocHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZShhLT5mVmFsdWUs
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7CisgICAgICAgIHN0YXRpY19jYXN0PENT
U1JhZGlhbEdyYWRpZW50VmFsdWUqPihyZXN1bHQuZ2V0KCkpLT5zZXRTZWNvbmRSYWRpdXMoY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEpKTsKICAgICB9CiAKICAgICAvLyBXZSBub3cgd2ls
bCBhY2NlcHQgYW55IG51bWJlciBvZiBzdG9wcyAoMCBvciBtb3JlKS4KQEAgLTUzODYsNyArNTM5
MSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUxpbmVhckdyYWRpZW50KFJlZlB0cjxDU1NWYWx1
ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhCiAgICAgYm9vbCBleHBlY3RDb21tYSA9IGZh
bHNlOwogICAgIC8vIExvb2sgZm9yIGFuZ2xlLgogICAgIGlmICh2YWxpZFVuaXQoYSwgRkFuZ2xl
LCB0cnVlKSkgewotICAgICAgICByZXN1bHQtPnNldEFuZ2xlKHByaW1pdGl2ZVZhbHVlQ2FjaGUo
KS0+Y3JlYXRlVmFsdWUoYS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcylh
LT51bml0KSk7CisgICAgICAgIHJlc3VsdC0+c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJp
Y1ZhbHVlKGEpKTsKICAgICAgICAgCiAgICAgICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAg
IGV4cGVjdENvbW1hID0gdHJ1ZTsKQEAgLTU1MjUsNyArNTUzMCw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVJhZGlhbEdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFk
aWVudFJlcGVhCiAKICAgICBpZiAoIXNoYXBlVmFsdWUgJiYgIXNpemVWYWx1ZSkgewogICAgICAg
ICBpZiAodmFsaWRVbml0KGEsIEZMZW5ndGggfCBGUGVyY2VudCwgbV9zdHJpY3QpKSB7Ci0gICAg
ICAgICAgICBob3Jpem9udGFsU2l6ZSA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFs
dWUoYS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgYS0+dW5pdCk7Cisg
ICAgICAgICAgICBob3Jpem9udGFsU2l6ZSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShh
KTsKICAgICAgICAgICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgICAgICBpZiAoIWEpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNTUzNCw3ICs1NTM5LDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGllbnQoUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQs
IENTU0dyYWRpZW50UmVwZWEKICAgICAgICAgfQogCiAgICAgICAgIGlmICh2YWxpZFVuaXQoYSwg
Rkxlbmd0aCB8IEZQZXJjZW50LCBtX3N0cmljdCkpIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2l6
ZSA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUoYS0+ZlZhbHVlLCAoQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgYS0+dW5pdCk7CisgICAgICAgICAgICB2ZXJ0aWNhbFNp
emUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYSk7CiAKICAgICAgICAgICAgIGEgPSBh
cmdzLT5uZXh0KCk7CiAgICAgICAgICAgICBpZiAoIWEpCkBAIC01NTgyLDcgKzU1ODcsNyBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudENvbG9yU3RvcHMoQ1NTUGFyc2VyVmFsdWVMaXN0
KiB2YWx1ZUxpc3QsIENTU0dyYWRpZQogICAgICAgICBhID0gdmFsdWVMaXN0LT5uZXh0KCk7CiAg
ICAgICAgIGlmIChhKSB7CiAgICAgICAgICAgICBpZiAodmFsaWRVbml0KGEsIEZMZW5ndGggfCBG
UGVyY2VudCwgbV9zdHJpY3QpKSB7Ci0gICAgICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0g
cHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZShhLT5mVmFsdWUsIChDU1NQcmltaXRp
dmVWYWx1ZTo6VW5pdFR5cGVzKWEtPnVuaXQpOworICAgICAgICAgICAgICAgIHN0b3AubV9wb3Np
dGlvbiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhKTsKICAgICAgICAgICAgICAgICBh
ID0gdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU4MDMs
NyArNTgwOCw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlVHJh
bnNmb3JtKCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAogICAgICAgICAgICAgLy8gQWRk
IHRoZSB2YWx1ZSB0byB0aGUgY3VycmVudCB0cmFuc2Zvcm0gb3BlcmF0aW9uLgotICAgICAgICAg
ICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZh
bHVlKGEtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIGEtPnVuaXQpKTsK
KyAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVlLT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJp
Y1ZhbHVlKGEpKTsKIAogICAgICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAg
IGlmICghYSkKQEAgLTU4NTAsNyArNTg1NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5z
Zm9ybU9yaWdpbihpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwgaW50CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblo6
IHsKICAgICAgICAgICAgIGlmICh2YWxpZFVuaXQobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwgRkxl
bmd0aCwgbV9zdHJpY3QpKQotICAgICAgICAgICAgICAgIHZhbHVlID0gcHJpbWl0aXZlVmFsdWVD
YWNoZSgpLT5jcmVhdGVWYWx1ZShtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5mVmFsdWUsIChDU1NQ
cmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKW1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQpOwor
ICAgICAgICAgICAgICAgIHZhbHVlID0gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKG1fdmFs
dWVMaXN0LT5jdXJyZW50KCkpOwogICAgICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAg
ICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTU5MDEsNyAr
NTkwNiw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRleHRFbXBoYXNpc1N0eWxlKGJvb2wgaW1w
b3J0YW50KQogICAgICAgICBpZiAodmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TVFJJTkcpIHsKICAgICAgICAgICAgIGlmIChmaWxsIHx8IHNoYXBlIHx8ICh2YWx1ZUxpc3RT
aXplICE9IDEgJiYgIWluU2hvcnRoYW5kKCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lz
U3R5bGUsIHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUodmFsdWUtPnN0cmluZywg
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpLCBpbXBvcnRhbnQpOworICAgICAgICAgICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRUZXh0RW1waGFzaXNTdHlsZSwgY3JlYXRlUHJp
bWl0aXZlU3RyaW5nVmFsdWUodmFsdWUtPnN0cmluZyksIGltcG9ydGFudCk7CiAgICAgICAgICAg
ICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCA5NDcyNmY1NGU3NTkzNmQ0NDg2MTM3YzY0NTM4
OGFjODA2ZTI4MGIzLi5jNDM1MDRlMGZmMWZhMGVjMmFhZWMzZDBiMGE1YmM4YjE4ZTQyNzU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0zNTYsNiArMzU2LDkgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiAgICAgICAgIHN0YXRpYyBib29sIHZhbGlkVW5pdChDU1NQYXJzZXJWYWx1ZSosIFVu
aXRzLCBib29sIHN0cmljdCk7CiAKKyAgICAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKENTU1BhcnNlclZhbHVlKik7CisgICAgICAg
IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVl
KGNvbnN0IFN0cmluZyYpOworCiAgICAgICAgIGZyaWVuZCBjbGFzcyBUcmFuc2Zvcm1PcGVyYXRp
b25JbmZvOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmlt
aXRpdmVWYWx1ZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVD
YWNoZS5oCmluZGV4IDQxZDc1YTdlM2E0ZWFhNmZjNGU3NmNmMDNmZDI2ZDhjMDg3MTA5OGYuLjhi
ZTNiNTI2ZjZmZTYyY2E1MmI1MGFjNDQwYjIxNDRiYzQ5YjhmMjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZUNhY2hlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUuaApAQCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlSWRlbnRpZmllclZhbHVl
KGludCBpZGVudGlmaWVyKTsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVh
dGVDb2xvclZhbHVlKHVuc2lnbmVkIHJnYlZhbHVlKTsKICAgICBQYXNzUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBjcmVhdGVWYWx1ZShkb3VibGUgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpV
bml0VHlwZXMpOwotICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVZhbHVl
KFN0cmluZyB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyB0eXBlKSB7IHJldHVy
biBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLCB0eXBlKTsgfQorICAgIFBhc3NSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVZhbHVlKGNvbnN0IFN0cmluZyYgdmFsdWUsIENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSkgeyByZXR1cm4gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZSh2YWx1ZSwgdHlwZSk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0
aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gY3JlYXRlVmFsdWUoVCB2YWx1ZSkgeyBy
ZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSk7IH0KICAgICAKIHByaXZhdGU6
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98419</attachid>
            <date>2011-06-23 15:24:04 -0700</date>
            <delta_ts>2011-06-23 17:06:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63270-20110623152344.patch</filename>
            <type>text/plain</type>
            <size>23224</size>
            <attacher name="Tony Chang">tony</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODk0OTIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzYmI5NzliOTZkMjk0MjU0
ZjcwYTBhNDJiNThjZDI3Zjc1NWM5YWMxLi5jYTUxMmY2ZTFmMGM3OTJhYmNmOTZhMmUwOTJmYTVj
Y2Q4YjI4MGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDYtMjMgIFRvbnkg
Q2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBSZWZhY3RvciBjcmVhdGlvbiBvZiBwcmltaXRpdmUgdmFsdWVz
IGluIENTU1BhcnNlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjMyNzAKKworICAgICAgICBDb3ZlcmVkIGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAg
ICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSk6IEhlbHBlciBtZXRob2QgZm9yIGNyZWF0aW5nIG51
bWVyaWMgdmFsdWVzCisgICAgICAgICAgICB0byBrZWVwIHRoZSBjYXN0IGluIG9uZSBwbGFjZS4K
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUp
OiBIZWxwZXIgbWV0aG9kIGZvciBjcmVhdGluZyBzdHJpbmcgdmFsdWVzLgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbGlkUHJpbWl0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBh
cnNlV0NTU0lucHV0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZVBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNpemVQYXJhbWV0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUNvbnRlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvblgpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvblkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvbkNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NQYXJzZXI6OnBhcnNlRmlsbFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpw
YXJzZUFuaW1hdGlvbkRlbGF5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VB
bmltYXRpb25EdXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQW5p
bWF0aW9uSXRlcmF0aW9uQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZUFuaW1hdGlvbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVRyYW5z
Zm9ybU9yaWdpblNob3J0aGFuZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNl
RGFzaGJvYXJkUmVnaW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ291
bnRlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoYXBlKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGb250KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VSZWZsZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VCb3JkZXJSYWRpdXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZUNvdW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRH
cmFkaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlTGluZWFyR3JhZGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VHcmFkaWVudENvbG9yU3RvcHMpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtT3JpZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VUZXh0RW1waGFzaXNTdHlsZSk6CisgICAgICAgICogY3NzL0NT
U1BhcnNlci5oOgorICAgICAgICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZUNhY2hlLmg6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQcmltaXRpdmVWYWx1ZUNhY2hlOjpjcmVhdGVWYWx1ZSk6IHBhc3Mg
U3RyaW5nIGJ5IGNvbnN0IHJlZmVyZW5jZQorCiAyMDExLTA2LTIyICBBbm5pZSBTdWxsaXZhbiAg
PHN1bGxpdmFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBSeW9zdWtlIE5p
d2EuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDdhNjZjMDZlYWIzMWY2YmRmMDFmNmE0
OTczNWY0NTVhNmY1YmRkZTEuLjYxOGI1MWEzNDZjY2VlMzliYjgwNjU5MmM2OGNjZmZlMTRkNmUx
MmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC02MDYsNyArNjA2LDYgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlTWVkaWFRdWVyeShNZWRpYUxpc3QqIHF1ZXJpZXMsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQogICAgIHJldHVybiBvazsKIH0KIAotCiB2b2lkIENTU1BhcnNlcjo6YWRkUHJv
cGVydHkoaW50IHByb3BJZCwgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gdmFsdWUsIGJvb2wgaW1wb3J0
YW50KQogewogICAgIE93blB0cjxDU1NQcm9wZXJ0eT4gcHJvcChhZG9wdFB0cihuZXcgQ1NTUHJv
cGVydHkocHJvcElkLCB2YWx1ZSwgaW1wb3J0YW50LCBtX2N1cnJlbnRTaG9ydGhhbmQsIG1faW1w
bGljaXRTaG9ydGhhbmQpKSk7CkBAIC03MDYsNiArNzA1LDE5IEBAIGJvb2wgQ1NTUGFyc2VyOjp2
YWxpZFVuaXQoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlLCBVbml0cyB1bml0ZmxhZ3MsIGJvb2wgc3Ry
aWN0KQogICAgIHJldHVybiBiOwogfQogCitpbmxpbmUgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVW
YWx1ZT4gQ1NTUGFyc2VyOjpjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoQ1NTUGFyc2VyVmFs
dWUqIHZhbHVlKQoreworICAgIEFTU0VSVCgodmFsdWUtPnVuaXQgPj0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19L
SFopCisgICAgICAgICAgIHx8ICh2YWx1ZS0+dW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1RVUk4gJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SRU1TKSk7Cisg
ICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUodmFsdWUtPmZWYWx1
ZSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcz4odmFsdWUtPnVuaXQp
KTsKK30KKworaW5saW5lIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6
Y3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUoQ1NTUGFyc2VyVmFsdWUqIHZhbHVlKQoreworICAg
IEFTU0VSVCh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyB8fCB2
YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKTsKKyAgICByZXR1cm4g
cHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+c3RyaW5nLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7Cit9CisKIHN0YXRpYyBpbnQgdW5pdEZyb21TdHJpbmco
Q1NTUGFyc2VyVmFsdWUqIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0lERU5UIHx8IHZhbHVlLT5pZCkKQEAgLTc4NSwxMSArNzk3LDExIEBA
IGlubGluZSBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFsaWRQcmltaXRp
dmUoaW50IGlkLCBDU1NQYXJzZXJWYWx1CiAgICAgaWYgKGlkKQogICAgICAgICByZXR1cm4gcHJp
bWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoaWQpOwogICAgIGlmICh2
YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykKLSAgICAgICAgcmV0
dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUodmFsdWUtPnN0cmluZywgKENT
U1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKHZhbHVlKTsKICAgICBpZiAodmFsdWUtPnVuaXQg
Pj0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIgJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19LSFopCi0gICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNhY2hl
KCktPmNyZWF0ZVZhbHVlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzKSB2YWx1ZS0+dW5pdCk7CisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUodmFsdWUpOwogICAgIGlmICh2YWx1ZS0+dW5pdCA+PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX1RVUk4gJiYgdmFsdWUtPnVuaXQgPD0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19SRU1TKQot
ICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+
ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgdmFsdWUtPnVuaXQpOworICAg
ICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKICAgICBpZiAo
dmFsdWUtPnVuaXQgPj0gQ1NTUGFyc2VyVmFsdWU6OlFfRU1TKQogICAgICAgICByZXR1cm4gQ1NT
UXVpcmtQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLT5mVmFsdWUsIENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfRU1TKTsKICAgICByZXR1cm4gMDsKQEAgLTE0MzksMTQgKzE0NTEsMTQgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAg
ICAgIHZhbGlkUHJpbWl0aXZlID0gdmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNlbnQg
fCBGTm9uTmVnLCBtX3N0cmljdCk7CiAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
cGFyc2VkVmFsdWUxID0gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+
ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZS0+dW5pdCk7CisgICAg
ICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VkVmFsdWUxID0gY3JlYXRlUHJpbWl0
aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKTsKICAgICAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBwYXJzZWRWYWx1ZTI7CiAgICAgICAgIGlmIChudW0gPT0gMikgewogICAgICAgICAgICAgdmFs
dWUgPSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB2
YWxpZFVuaXQodmFsdWUsIEZMZW5ndGggfCBGUGVyY2VudCB8IEZOb25OZWcsIG1fc3RyaWN0KTsK
ICAgICAgICAgICAgIGlmICghdmFsaWRQcmltaXRpdmUpCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAgICAgcGFyc2VkVmFsdWUyID0gcHJpbWl0aXZlVmFsdWVDYWNoZSgp
LT5jcmVhdGVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBl
cyl2YWx1ZS0+dW5pdCk7CisgICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBjcmVhdGVQcmltaXRp
dmVOdW1lcmljVmFsdWUodmFsdWUpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHBhcnNl
ZFZhbHVlMiA9IHBhcnNlZFZhbHVlMTsKIApAQCAtMTYzMCw3ICsxNjQyLDcgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgLy8gQWNjZXB0aW5nIHZhbHVlbGVzcyBudW1iZXJzIGlzIGEgcXVp
cmsgb2YgdGhlIC13ZWJraXQgcHJlZml4ZWQgdmVyc2lvbiBvZiB0aGUgcHJvcGVydHkuCiAgICAg
ICAgICAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZOb25OZWcs
IG1fc3RyaWN0KSkgewotICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsID0gcHJp
bWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0
aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZS0+dW5pdCk7CisgICAgICAgICAgICAgICAgUmVmUHRy
PENTU1ZhbHVlPiB2YWwgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwogICAg
ICAgICAgICAgICAgIGlmICh2YWwpIHsKICAgICAgICAgICAgICAgICAgICAgYWRkUHJvcGVydHko
cHJvcElkLCB2YWwucmVsZWFzZSgpLCBpbXBvcnRhbnQpOwogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKQEAgLTI1MDEsNyArMjUxMyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVBh
Z2UoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJ
ZCwgcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUodmFsdWUtPmlk
KSwgaW1wb3J0YW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfSBlbHNlIGlmICh2YWx1
ZS0+aWQgPT0gMCAmJiB2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5U
KSB7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5j
cmVhdGVWYWx1ZSh2YWx1ZS0+c3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyks
IGltcG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgY3JlYXRlUHJpbWl0aXZl
U3RyaW5nVmFsdWUodmFsdWUpLCBpbXBvcnRhbnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjU3MSw3ICsyNTgzLDcgQEAgQ1NTUGFyc2VyOjpT
aXplUGFyYW1ldGVyVHlwZSBDU1NQYXJzZXI6OnBhcnNlU2l6ZVBhcmFtZXRlcihDU1NWYWx1ZUxp
c3QqIHBhcnNlZFYKICAgICAgICAgcmV0dXJuIE5vbmU7CiAgICAgY2FzZSAwOgogICAgICAgICBp
ZiAodmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRk5vbk5lZywgbV9zdHJpY3QpICYmIChwcmV2
UGFyYW1UeXBlID09IE5vbmUgfHwgcHJldlBhcmFtVHlwZSA9PSBMZW5ndGgpKSB7Ci0gICAgICAg
ICAgICBwYXJzZWRWYWx1ZXMtPmFwcGVuZChwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZh
bHVlKHZhbHVlLT5mVmFsdWUsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlw
ZXM+KHZhbHVlLT51bml0KSkpOworICAgICAgICAgICAgcGFyc2VkVmFsdWVzLT5hcHBlbmQoY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKHZhbHVlKSk7CiAgICAgICAgICAgICByZXR1cm4gTGVu
Z3RoOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBOb25lOwpAQCAtMjY1Nyw3ICsyNjY5LDcg
QEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29udGVudChpbnQgcHJvcElkLCBib29sIGltcG9ydGFu
dCkKICAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+
Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbC0+aWQpOwogICAgICAgICAgICAgfQogICAgICAgICB9
IGVsc2UgaWYgKHZhbC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORykgewot
ICAgICAgICAgICAgcGFyc2VkVmFsdWUgPSBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZh
bHVlKHZhbC0+c3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisgICAgICAg
ICAgICBwYXJzZWRWYWx1ZSA9IGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKHZhbCk7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKCFwYXJzZWRWYWx1ZSkKICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MjczOCw4ICsyNzUwLDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUZp
bGxQb3NpdGlvblgoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QKICAgICAgICAgcmV0dXJu
IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUocGVyY2VudCwgQ1NTUHJpbWl0aXZl
VmFsdWU6OkNTU19QRVJDRU5UQUdFKTsKICAgICB9CiAgICAgaWYgKHZhbGlkVW5pdCh2YWx1ZUxp
c3QtPmN1cnJlbnQoKSwgRlBlcmNlbnQgfCBGTGVuZ3RoLCBtX3N0cmljdCkpCi0gICAgICAgIHJl
dHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKHZhbHVlTGlzdC0+Y3VycmVu
dCgpLT5mVmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlTGlzdC0+Y3VycmVudCgp
LT51bml0KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1
ZUxpc3QtPmN1cnJlbnQoKSk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTI3NTUsOCArMjc2Niw3
IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb25ZKENT
U1BhcnNlclZhbHVlTGlzdCogdmFsdWVMaXN0CiAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1
ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKHBlcmNlbnQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVS
Q0VOVEFHRSk7CiAgICAgfQogICAgIGlmICh2YWxpZFVuaXQodmFsdWVMaXN0LT5jdXJyZW50KCks
IEZQZXJjZW50IHwgRkxlbmd0aCwgbV9zdHJpY3QpKQotICAgICAgICByZXR1cm4gcHJpbWl0aXZl
VmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZlZhbHVlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCk7CisgICAg
ICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVMaXN0LT5jdXJyZW50
KCkpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0yNzk3LDggKzI4MDcsNyBAQCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uQ29tcG9uZW50KENTU1BhcnNl
clZhbHVlTGlzdCogdgogICAgICAgICAgICAgaW5kaXZpZHVhbEZsYWcgPSBZRmlsbFBvc2l0aW9u
OwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICByZXR1cm4g
cHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+
ZlZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1ZUxpc3QtPmN1cnJlbnQoKS0+dW5p
dCk7CisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWVMaXN0
LT5jdXJyZW50KCkpOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTI5MDcsNyArMjkxNiw3
IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsU2l6ZShpbnQgcHJv
cElkLCBib29sJiBhbGxvd0NvbW1hKQogICAgIGVsc2UgewogICAgICAgICBpZiAoIXZhbGlkVW5p
dCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50LCBtX3N0cmljdCkpCiAgICAgICAgICAgICByZXR1
cm4gMDsKLSAgICAgICAgcGFyc2VkVmFsdWUxID0gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVh
dGVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2YWx1
ZS0+dW5pdCk7CisgICAgICAgIHBhcnNlZFZhbHVlMSA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNW
YWx1ZSh2YWx1ZSk7CiAgICAgfQogCiAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSA9IHN0YXRp
Y19jYXN0PENTU1Byb3BlcnR5SUQ+KHByb3BJZCk7CkBAIC0yOTIwLDcgKzI5MjksNyBAQCBQYXNz
UmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFNpemUoaW50IHByb3BJZCwgYm9v
bCYgYWxsb3dDb21tYSkKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBpZiAoIXZhbGlkVW5p
dCh2YWx1ZSwgRkxlbmd0aCB8IEZQZXJjZW50LCBtX3N0cmljdCkpCiAgICAgICAgICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgICAgICAgICBwYXJzZWRWYWx1ZTIgPSBwcmltaXRpdmVWYWx1ZUNhY2hl
KCktPmNyZWF0ZVZhbHVlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5
cGVzKXZhbHVlLT51bml0KTsKKyAgICAgICAgICAgIHBhcnNlZFZhbHVlMiA9IGNyZWF0ZVByaW1p
dGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFwYXJz
ZWRWYWx1ZTIpIHsKQEAgLTMxMDMsNyArMzExMiw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENT
U1BhcnNlcjo6cGFyc2VBbmltYXRpb25EZWxheSgpCiB7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKICAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBG
VGltZSwgbV9zdHJpY3QpKQotICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5j
cmVhdGVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcyl2
YWx1ZS0+dW5pdCk7CisgICAgICAgIHJldHVybiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUo
dmFsdWUpOwogICAgIHJldHVybiAwOwogfQogCkBAIC0zMTE5LDcgKzMxMjgsNyBAQCBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uRHVyYXRpb24oKQogewogICAg
IENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgaWYg
KHZhbGlkVW5pdCh2YWx1ZSwgRlRpbWUgfCBGTm9uTmVnLCBtX3N0cmljdCkpCi0gICAgICAgIHJl
dHVybiBwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKHZhbHVlLT5mVmFsdWUsIChD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKXZhbHVlLT51bml0KTsKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZSh2YWx1ZSk7CiAgICAgcmV0dXJuIDA7CiB9CiAK
QEAgLTMxMzcsNyArMzE0Niw3IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFy
c2VBbmltYXRpb25JdGVyYXRpb25Db3VudCgpCiAgICAgaWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1
ZUluZmluaXRlKQogICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUodmFsdWUtPmlkKTsKICAgICBpZiAodmFsaWRVbml0KHZhbHVlLCBGSW50
ZWdlciB8IEZOb25OZWcsIG1fc3RyaWN0KSkKLSAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVl
Q2FjaGUoKS0+Y3JlYXRlVmFsdWUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZhbHVlOjpV
bml0VHlwZXMpdmFsdWUtPnVuaXQpOworICAgICAgICByZXR1cm4gY3JlYXRlUHJpbWl0aXZlTnVt
ZXJpY1ZhbHVlKHZhbHVlKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtMzE0OCw3ICszMTU3LDcg
QEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvbk5hbWUoKQog
ICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9uZSB8fCAodmFsdWUtPnVuaXQgPT0g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcgJiYgZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUt
PnN0cmluZywgIm5vbmUiKSkpIHsKICAgICAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZUNh
Y2hlKCktPmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZU5vbmUpOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFs
dWUodmFsdWUtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpOworICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZVByaW1pdGl2ZVN0cmluZ1ZhbHVlKHZhbHVlKTsKICAgICAgICAg
fQogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTMxODQsOCArMzE5Myw3IEBAIGJvb2wgQ1NTUGFy
c2VyOjpwYXJzZVRyYW5zZm9ybU9yaWdpblNob3J0aGFuZChSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1
ZTEsIFJlZlB0cjxDCiAgICAgLy8gbm93IGdldCB6CiAgICAgaWYgKG1fdmFsdWVMaXN0LT5jdXJy
ZW50KCkpIHsKICAgICAgICAgaWYgKHZhbGlkVW5pdChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLCBG
TGVuZ3RoLCBtX3N0cmljdCkpIHsKLSAgICAgICAgICAgIHZhbHVlMyA9IHByaW1pdGl2ZVZhbHVl
Q2FjaGUoKS0+Y3JlYXRlVmFsdWUobV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+ZlZhbHVlLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKENTU1ByaW1pdGl2ZVZh
bHVlOjpVbml0VHlwZXMpbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+dW5pdCk7CisgICAgICAgICAg
ICB2YWx1ZTMgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUobV92YWx1ZUxpc3QtPmN1cnJl
bnQoKSk7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTM0OTYsNyArMzUwNCw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAKICAg
ICAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGFtb3VudCA9IGFyZy0+aWQg
PT0gQ1NTVmFsdWVBdXRvID8KICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWVDYWNo
ZSgpLT5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSA6Ci0gICAgICAgICAgICAg
ICAgICAgIHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUoYXJnLT5mVmFsdWUsIChD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKSBhcmctPnVuaXQpOworICAgICAgICAgICAgICAg
ICAgICBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoYXJnKTsKIAogICAgICAgICAgICAgICAg
IGlmIChpID09IDApCiAgICAgICAgICAgICAgICAgICAgIHJlZ2lvbi0+c2V0VG9wKGFtb3VudCk7
CkBAIC0zNTM0LDcgKzM1NDIsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlQ291bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzLCBibwogICAgIENTU1Bh
cnNlclZhbHVlKiBpID0gYXJncy0+Y3VycmVudCgpOwogICAgIGlmIChpLT51bml0ICE9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCiAgICAgICAgIHJldHVybiAwOwotICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gaWRlbnRpZmllciA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3Jl
YXRlVmFsdWUoaS0+c3RyaW5nLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1NUUklORyk7CisgICAg
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBpZGVudGlmaWVyID0gY3JlYXRlUHJpbWl0aXZlU3Ry
aW5nVmFsdWUoaSk7CiAKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHNlcGFyYXRvcjsK
ICAgICBpZiAoIWNvdW50ZXJzKQpAQCAtMzU0OCw3ICszNTU2LDcgQEAgUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUNvdW50ZXJDb250ZW50KENTU1BhcnNlclZhbHVlTGlzdCog
YXJncywgYm8KICAgICAgICAgaWYgKGktPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19T
VFJJTkcpCiAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBzZXBhcmF0b3IgPSBwcmlt
aXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGktPnN0cmluZywgKENTU1ByaW1pdGl2ZVZh
bHVlOjpVbml0VHlwZXMpIGktPnVuaXQpOworICAgICAgICBzZXBhcmF0b3IgPSBjcmVhdGVQcmlt
aXRpdmVTdHJpbmdWYWx1ZShpKTsKICAgICB9CiAKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFs
dWU+IGxpc3RTdHlsZTsKQEAgLTM1OTgsNyArMzYwNiw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZVNoYXBlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbGVuZ3RoID0gYS0+aWQgPT0gQ1NTVmFs
dWVBdXRvID8KICAgICAgICAgICAgIHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlSWRlbnRp
ZmllclZhbHVlKENTU1ZhbHVlQXV0bykgOgotICAgICAgICAgICAgcHJpbWl0aXZlVmFsdWVDYWNo
ZSgpLT5jcmVhdGVWYWx1ZShhLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVz
KSBhLT51bml0KTsKKyAgICAgICAgICAgIGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhKTsK
ICAgICAgICAgaWYgKGkgPT0gMCkKICAgICAgICAgICAgIHJlY3QtPnNldFRvcChsZW5ndGgpOwog
ICAgICAgICBlbHNlIGlmIChpID09IDEpCkBAIC0zNzAyLDcgKzM3MTAsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VGb250KGJvb2wgaW1wb3J0YW50KQogICAgIGlmICh2YWx1ZS0+aWQgPj0gQ1NT
VmFsdWVYeFNtYWxsICYmIHZhbHVlLT5pZCA8PSBDU1NWYWx1ZUxhcmdlcikKICAgICAgICAgZm9u
dC0+c2l6ZSA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZh
bHVlLT5pZCk7CiAgICAgZWxzZSBpZiAodmFsaWRVbml0KHZhbHVlLCBGTGVuZ3RoIHwgRlBlcmNl
bnQgfCBGTm9uTmVnLCBtX3N0cmljdCkpCi0gICAgICAgIGZvbnQtPnNpemUgPSBwcmltaXRpdmVW
YWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKHZhbHVlLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1
ZTo6VW5pdFR5cGVzKSB2YWx1ZS0+dW5pdCk7CisgICAgICAgIGZvbnQtPnNpemUgPSBjcmVhdGVQ
cmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwogICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5l
eHQoKTsKICAgICBpZiAoIWZvbnQtPnNpemUgfHwgIXZhbHVlKQogICAgICAgICByZXR1cm4gZmFs
c2U7CkBAIC0zNzE1LDcgKzM3MjMsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250KGJvb2wg
aW1wb3J0YW50KQogICAgICAgICBpZiAodmFsdWUtPmlkID09IENTU1ZhbHVlTm9ybWFsKSB7CiAg
ICAgICAgICAgICAvLyBkZWZhdWx0IHZhbHVlLCBub3RoaW5nIHRvIGRvCiAgICAgICAgIH0gZWxz
ZSBpZiAodmFsaWRVbml0KHZhbHVlLCBGTnVtYmVyIHwgRkxlbmd0aCB8IEZQZXJjZW50IHwgRk5v
bk5lZywgbV9zdHJpY3QpKQotICAgICAgICAgICAgZm9udC0+bGluZUhlaWdodCA9IHByaW1pdGl2
ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUodmFsdWUtPmZWYWx1ZSwgKENTU1ByaW1pdGl2ZVZh
bHVlOjpVbml0VHlwZXMpIHZhbHVlLT51bml0KTsKKyAgICAgICAgICAgIGZvbnQtPmxpbmVIZWln
aHQgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUodmFsdWUpOwogICAgICAgICBlbHNlCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5l
eHQoKTsKQEAgLTQ3NTcsNyArNDc2NSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJlZmxlY3Qo
aW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgZWxzZSB7CiAgICAgICAgIGlmICghdmFs
aWRVbml0KHZhbCwgRkxlbmd0aCB8IEZQZXJjZW50LCBtX3N0cmljdCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIG9mZnNldCA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3Jl
YXRlVmFsdWUodmFsLT5mVmFsdWUsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0
VHlwZXM+KHZhbC0+dW5pdCkpOworICAgICAgICBvZmZzZXQgPSBjcmVhdGVQcmltaXRpdmVOdW1l
cmljVmFsdWUodmFsKTsKICAgICB9CiAKICAgICAvLyBOb3cgZm9yIHRoZSBtYXNrLgpAQCAtNTA1
OCw3ICs1MDY2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVyUmFkaXVzKGludCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAoIXZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0
aCB8IEZQZXJjZW50IHwgRk5vbk5lZywgbV9zdHJpY3QpKQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcmFkaXVzID0gcHJpbWl0
aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWx1ZS0+ZlZhbHVlLCBzdGF0aWNfY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzPih2YWx1ZS0+dW5pdCkpOworICAgICAgICBSZWZQ
dHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJhZGl1cyA9IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1
ZSh2YWx1ZSk7CiAKICAgICAgICAgaWYgKCFpbmRleEFmdGVyU2xhc2gpIHsKICAgICAgICAgICAg
IHJhZGlpWzBdW2ldID0gcmFkaXVzOwpAQCAtNTA5OSw3ICs1MTA3LDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlQ291bnRlcihpbnQgcHJvcElkLCBpbnQgZGVmYXVsdFZhbHVlLCBib29sIGltcG9y
dGFudCkKICAgICAgICAgc3dpdGNoIChzdGF0ZSkgewogICAgICAgICAgICAgY2FzZSBJRDoKICAg
ICAgICAgICAgICAgICBpZiAodmFsICYmIHZhbC0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0lERU5UKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvdW50ZXJOYW1lID0gcHJpbWl0aXZl
VmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZSh2YWwtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19TVFJJTkcpOworICAgICAgICAgICAgICAgICAgICBjb3VudGVyTmFtZSA9IGNyZWF0ZVBy
aW1pdGl2ZVN0cmluZ1ZhbHVlKHZhbCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gVkFM
OwogICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4dCgpOwogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTUyNzUsNyArNTI4Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZURlcHJlY2F0ZWRHcmFkaWVudChSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVudCkKICAgICAg
ICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIHN0YXRpY19jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWUqPihyZXN1bHQuZ2V0KCkpLT5z
ZXRGaXJzdFJhZGl1cyhwcmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGEtPmZWYWx1
ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
Q1NTUmFkaWFsR3JhZGllbnRWYWx1ZSo+KHJlc3VsdC5nZXQoKSktPnNldEZpcnN0UmFkaXVzKGNy
ZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhKSk7CiAKICAgICAgICAgLy8gQ29tbWEgYWZ0ZXIg
dGhlIGZpcnN0IHJhZGl1cy4KICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKQEAgLTUzMTIsNyAr
NTMyMCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudChSZWZQdHI8
Q1NTVmFsdWU+JiBncmFkaWVudCkKICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAg
aWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHN0YXRpY19jYXN0PENTU1JhZGlhbEdyYWRp
ZW50VmFsdWUqPihyZXN1bHQuZ2V0KCkpLT5zZXRTZWNvbmRSYWRpdXMocHJpbWl0aXZlVmFsdWVD
YWNoZSgpLT5jcmVhdGVWYWx1ZShhLT5mVmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVN
QkVSKSk7CisgICAgICAgIHN0YXRpY19jYXN0PENTU1JhZGlhbEdyYWRpZW50VmFsdWUqPihyZXN1
bHQuZ2V0KCkpLT5zZXRTZWNvbmRSYWRpdXMoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEp
KTsKICAgICB9CiAKICAgICAvLyBXZSBub3cgd2lsbCBhY2NlcHQgYW55IG51bWJlciBvZiBzdG9w
cyAoMCBvciBtb3JlKS4KQEAgLTUzODYsNyArNTM5NCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUxpbmVhckdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJl
cGVhCiAgICAgYm9vbCBleHBlY3RDb21tYSA9IGZhbHNlOwogICAgIC8vIExvb2sgZm9yIGFuZ2xl
LgogICAgIGlmICh2YWxpZFVuaXQoYSwgRkFuZ2xlLCB0cnVlKSkgewotICAgICAgICByZXN1bHQt
PnNldEFuZ2xlKHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUoYS0+ZlZhbHVlLCAo
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcylhLT51bml0KSk7CisgICAgICAgIHJlc3VsdC0+
c2V0QW5nbGUoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEpKTsKICAgICAgICAgCiAgICAg
ICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGV4cGVjdENvbW1hID0gdHJ1ZTsKQEAgLTU1
MjUsNyArNTUzMyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVJhZGlhbEdyYWRpZW50KFJlZlB0
cjxDU1NWYWx1ZT4mIGdyYWRpZW50LCBDU1NHcmFkaWVudFJlcGVhCiAKICAgICBpZiAoIXNoYXBl
VmFsdWUgJiYgIXNpemVWYWx1ZSkgewogICAgICAgICBpZiAodmFsaWRVbml0KGEsIEZMZW5ndGgg
fCBGUGVyY2VudCwgbV9zdHJpY3QpKSB7Ci0gICAgICAgICAgICBob3Jpem9udGFsU2l6ZSA9IHBy
aW1pdGl2ZVZhbHVlQ2FjaGUoKS0+Y3JlYXRlVmFsdWUoYS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZl
VmFsdWU6OlVuaXRUeXBlcykgYS0+dW5pdCk7CisgICAgICAgICAgICBob3Jpem9udGFsU2l6ZSA9
IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShhKTsKICAgICAgICAgICAgIGEgPSBhcmdzLT5u
ZXh0KCk7CiAgICAgICAgICAgICBpZiAoIWEpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNTUzNCw3ICs1NTQyLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlUmFkaWFsR3JhZGll
bnQoUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQsIENTU0dyYWRpZW50UmVwZWEKICAgICAgICAg
fQogCiAgICAgICAgIGlmICh2YWxpZFVuaXQoYSwgRkxlbmd0aCB8IEZQZXJjZW50LCBtX3N0cmlj
dCkpIHsKLSAgICAgICAgICAgIHZlcnRpY2FsU2l6ZSA9IHByaW1pdGl2ZVZhbHVlQ2FjaGUoKS0+
Y3JlYXRlVmFsdWUoYS0+ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgYS0+
dW5pdCk7CisgICAgICAgICAgICB2ZXJ0aWNhbFNpemUgPSBjcmVhdGVQcmltaXRpdmVOdW1lcmlj
VmFsdWUoYSk7CiAKICAgICAgICAgICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgICAgICBp
ZiAoIWEpCkBAIC01NTgyLDcgKzU1OTAsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVu
dENvbG9yU3RvcHMoQ1NTUGFyc2VyVmFsdWVMaXN0KiB2YWx1ZUxpc3QsIENTU0dyYWRpZQogICAg
ICAgICBhID0gdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgIGlmIChhKSB7CiAgICAgICAgICAg
ICBpZiAodmFsaWRVbml0KGEsIEZMZW5ndGggfCBGUGVyY2VudCwgbV9zdHJpY3QpKSB7Ci0gICAg
ICAgICAgICAgICAgc3RvcC5tX3Bvc2l0aW9uID0gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVh
dGVWYWx1ZShhLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKWEtPnVuaXQp
OworICAgICAgICAgICAgICAgIHN0b3AubV9wb3NpdGlvbiA9IGNyZWF0ZVByaW1pdGl2ZU51bWVy
aWNWYWx1ZShhKTsKICAgICAgICAgICAgICAgICBhID0gdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU4MDMsNyArNTgxMSw3IEBAIFBhc3NSZWZQdHI8Q1NT
VmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNmb3JtKCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gMDsKIAogICAgICAgICAgICAgLy8gQWRkIHRoZSB2YWx1ZSB0byB0aGUgY3VycmVudCB0
cmFuc2Zvcm0gb3BlcmF0aW9uLgotICAgICAgICAgICAgdHJhbnNmb3JtVmFsdWUtPmFwcGVuZChw
cmltaXRpdmVWYWx1ZUNhY2hlKCktPmNyZWF0ZVZhbHVlKGEtPmZWYWx1ZSwgKENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXMpIGEtPnVuaXQpKTsKKyAgICAgICAgICAgIHRyYW5zZm9ybVZhbHVl
LT5hcHBlbmQoY3JlYXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKGEpKTsKIAogICAgICAgICAgICAg
YSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgICAgIGlmICghYSkKQEAgLTU4NTAsNyArNTg1OCw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybU9yaWdpbihpbnQgcHJvcElkLCBpbnQm
IHByb3BJZDEsIGludCYgcHJvcElkMiwgaW50CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdFRyYW5zZm9ybU9yaWdpblo6IHsKICAgICAgICAgICAgIGlmICh2YWxpZFVu
aXQobV92YWx1ZUxpc3QtPmN1cnJlbnQoKSwgRkxlbmd0aCwgbV9zdHJpY3QpKQotICAgICAgICAg
ICAgICAgIHZhbHVlID0gcHJpbWl0aXZlVmFsdWVDYWNoZSgpLT5jcmVhdGVWYWx1ZShtX3ZhbHVl
TGlzdC0+Y3VycmVudCgpLT5mVmFsdWUsIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKW1f
dmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQpOworICAgICAgICAgICAgICAgIHZhbHVlID0gY3Jl
YXRlUHJpbWl0aXZlTnVtZXJpY1ZhbHVlKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpOwogICAgICAg
ICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAg
ICAgICAgICAgICBicmVhazsKQEAgLTU5MDEsNyArNTkwOSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVRleHRFbXBoYXNpc1N0eWxlKGJvb2wgaW1wb3J0YW50KQogICAgICAgICBpZiAodmFsdWUt
PnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpIHsKICAgICAgICAgICAgIGlm
IChmaWxsIHx8IHNoYXBlIHx8ICh2YWx1ZUxpc3RTaXplICE9IDEgJiYgIWluU2hvcnRoYW5kKCkp
KQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5
KENTU1Byb3BlcnR5V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUsIHByaW1pdGl2ZVZhbHVlQ2FjaGUo
KS0+Y3JlYXRlVmFsdWUodmFsdWUtPnN0cmluZywgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJ
TkcpLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJr
aXRUZXh0RW1waGFzaXNTdHlsZSwgY3JlYXRlUHJpbWl0aXZlU3RyaW5nVmFsdWUodmFsdWUpLCBp
bXBvcnRhbnQpOwogICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggOTQ3MjZm
NTRlNzU5MzZkNDQ4NjEzN2M2NDUzODhhYzgwNmUyODBiMy4uYzZmMDc4YTliOWZiZDcwZDU1Zjll
Y2Y2NjY0YjVmOTNjZWI3MjNlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
cnNlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMzU2LDYgKzM1
Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCB2YWxpZFVu
aXQoQ1NTUGFyc2VyVmFsdWUqLCBVbml0cywgYm9vbCBzdHJpY3QpOwogCisgICAgICAgIFBhc3NS
ZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVByaW1pdGl2ZU51bWVyaWNWYWx1ZShDU1NQ
YXJzZXJWYWx1ZSopOworICAgICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVh
dGVQcmltaXRpdmVTdHJpbmdWYWx1ZShDU1NQYXJzZXJWYWx1ZSopOworCiAgICAgICAgIGZyaWVu
ZCBjbGFzcyBUcmFuc2Zvcm1PcGVyYXRpb25JbmZvOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZUNhY2hlLmggYi9Tb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVDYWNoZS5oCmluZGV4IDQxZDc1YTdlM2E0ZWFhNmZjNGU3
NmNmMDNmZDI2ZDhjMDg3MTA5OGYuLjhiZTNiNTI2ZjZmZTYyY2E1MmI1MGFjNDQwYjIxNDRiYzQ5
YjhmMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZUNh
Y2hlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlQ2FjaGUuaApA
QCAtNDAsNyArNDAsNyBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1
ZT4gY3JlYXRlSWRlbnRpZmllclZhbHVlKGludCBpZGVudGlmaWVyKTsKICAgICBQYXNzUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVDb2xvclZhbHVlKHVuc2lnbmVkIHJnYlZhbHVlKTsK
ICAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVWYWx1ZShkb3VibGUgdmFs
dWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpOwotICAgIFBhc3NSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IGNyZWF0ZVZhbHVlKFN0cmluZyB2YWx1ZSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlcyB0eXBlKSB7IHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVl
LCB0eXBlKTsgfQorICAgIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGNyZWF0ZVZhbHVl
KGNvbnN0IFN0cmluZyYgdmFsdWUsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgdHlwZSkg
eyByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgdHlwZSk7IH0KICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y3JlYXRlVmFsdWUoVCB2YWx1ZSkgeyByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2
YWx1ZSk7IH0KICAgICAKIHByaXZhdGU6Cg==
</data>
<flag name="review"
          id="92639"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>