<?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>5689</bug_id>
          
          <creation_ts>2005-11-09 09:03:11 -0800</creation_ts>
          <short_desc>add support for CSS &quot;custom cursors&quot; (cursor images)</short_desc>
          <delta_ts>2005-12-08 00:39:20 -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>CSS</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>23872</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-11-09 09:03:11 -0800</bug_when>
    <thetext> </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23873</commentid>
    <comment_count>1</comment_count>
      <attachid>4652</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-11-09 09:05:17 -0800</bug_when>
    <thetext>Created attachment 4652
adds custom cursor support, fixes some image renderer issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25457</commentid>
    <comment_count>2</comment_count>
      <attachid>4652</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-03 14:42:09 -0800</bug_when>
    <thetext>Comment on attachment 4652
adds custom cursor support, fixes some image renderer issues

Wow, what a great cleanup.

I will warn you, this change is great:
+	 if (style-&gt;cursorImage())
+	     return new CSSPrimitiveValueImpl(style-&gt;cursorImage()-&gt;url(),
CSSPrimitiveValue::CSS_URI);
+	 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO + style-&gt;cursor() -
CURSOR_AUTO);

but I just had to go through and remove a bunch of those same assumptions from
KSVG2 (going the other way, during css parsing) when landing on top of our DOM.
 Best IMO would be to add some sort of ASSERT like:
ASSERT((style-&gt;cursor() &gt; CSS_AUTO) &amp;&amp; (style-&gt;cursor() &lt; CURSOR_HELP))
Whenever such assumptions are made when converting back and forth from ints to
enums.

Should this:
+		 parsedValue = new
CSSImageValueImpl(DOMString(KURL(styleElement-&gt;baseURL().qstring(),
uri.qstring()).url()), styleElement);

be:
parsedValue = new
CSSImageValueImpl(styleElement.getDocument().completeURL(uri), styleElement);

instead?

Shouldn&apos;t this:

+	 if (isInherit) {
+	     style-&gt;setCursor(parentStyle-&gt;cursor());
+	     style-&gt;setCursorImage(parentStyle-&gt;cursorImage());
+	     return;
+	 }
+	 if (isInitial) {
+	     style-&gt;setCursor(RenderStyle::initialCursor());
+	     style-&gt;setCursorImage(0);
+	     return;
+	 }

just be:

HANDLE_INHERIT_AND_INITIAL(cursor, Cursor)
HANDLE_INHERIT_AND_INITIAL(cursorImage, CursorImage)

?  Seems easier to add RenderStyle::initialCursorImage() if that was the
blocking factor.

Is this to avoid the obj-c message dispatch?
+    return m_imageRenderer == nil || [m_imageRenderer isNull];
Possibly unnecessary.

QSize will take an NSSize (and CGSize) directly, instead of:
+    NSSize sz = [m_imageRenderer size];
     return QSize((int)sz.width, (int)sz.height);

What an awful method name: QPixmap::xForm()


I&apos;m not sure I understand why you have this:
+	     if ([view respondsToSelector:@selector(documentCursor)] &amp;&amp;
cur.handle() == [view documentCursor])
+		 break;

Is that to work around a bug in AppKit where setting the same cursor twice does
extra work?

So the patch looks fine.  IMO It doesn&apos;t need another round of review assuming
you respond to comments above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25458</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-03 14:43:18 -0800</bug_when>
    <thetext>Also, just FYI, SVG uses the same exact cursor property, and allow you to specify an arbitrary URI (just like 
your patch adds):
http://www.w3.org/TR/SVG/interact.html#CursorProperty
One difference is this uri might point to an SVG (or &lt;cursor&gt; element) which we&apos;ll need to convert into a 
pixmap and set as the cursorImage.  I will probably just need to extend CSSImageValueImpl (or the 
imaging system below CSSImageValueImpl).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25466</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-03 16:33:41 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; I will warn you, this change is great:
&gt; +	 if (style-&gt;cursorImage())
&gt; +	     return new CSSPrimitiveValueImpl(style-&gt;cursorImage()-&gt;url(),
&gt; CSSPrimitiveValue::CSS_URI);
&gt; +	 return new CSSPrimitiveValueImpl(CSS_VAL_AUTO + style-&gt;cursor() -
&gt; CURSOR_AUTO);
&gt; 
&gt; but I just had to go through and remove a bunch of those same assumptions from
&gt; KSVG2 (going the other way, during css parsing) when landing on top of our DOM.
&gt; Best IMO would be to add some sort of ASSERT like:
&gt; ASSERT((style-&gt;cursor() &gt; CSS_AUTO) &amp;&amp; (style-&gt;cursor() &lt; CURSOR_HELP))
&gt; Whenever such assumptions are made when converting back and forth from ints to
&gt; enums.

I think we need a compile time check, not just a runtime assert. I think I&apos;ll just leave that part of the code as-is. What bothered me was 
that some code was making the assumption about the constants and other code was not.

&gt; Should this:
&gt; +		 parsedValue = new
&gt; CSSImageValueImpl(DOMString(KURL(styleElement-&gt;baseURL().qstring(),
&gt; uri.qstring()).url()), styleElement);
&gt; 
&gt; be:
&gt; parsedValue = new
&gt; CSSImageValueImpl(styleElement.getDocument().completeURL(uri), styleElement);
&gt; 
&gt; instead?

Maybe. I copied that code from CSS_PROP_LIST_STYLE_IMAGE, so we should make it the same in both places.

&gt; Shouldn&apos;t this:
&gt; 
&gt; +	 if (isInherit) {
&gt; +	     style-&gt;setCursor(parentStyle-&gt;cursor());
&gt; +	     style-&gt;setCursorImage(parentStyle-&gt;cursorImage());
&gt; +	     return;
&gt; +	 }
&gt; +	 if (isInitial) {
&gt; +	     style-&gt;setCursor(RenderStyle::initialCursor());
&gt; +	     style-&gt;setCursorImage(0);
&gt; +	     return;
&gt; +	 }
&gt; 
&gt; just be:
&gt; 
&gt; HANDLE_INHERIT_AND_INITIAL(cursor, Cursor)
&gt; HANDLE_INHERIT_AND_INITIAL(cursorImage, CursorImage)
&gt;
&gt; ?

No, because if the style is inherit or initial, the first macro will return and the second macro won&apos;t do anything at all.

&gt; Is this to avoid the obj-c message dispatch?
&gt; +    return m_imageRenderer == nil || [m_imageRenderer isNull];
&gt; Possibly unnecessary.

No. If the renderer is nil, then isNull will return false. We need to check for both.

&gt; QSize will take an NSSize (and CGSize) directly, instead of:
&gt; +    NSSize sz = [m_imageRenderer size];
&gt;      return QSize((int)sz.width, (int)sz.height);

You&apos;re right. I believe i was the one who added the constructor to make a QSize from an NSSize, in fact, but that was after this code was 
written. I&apos;m not sure it&apos;s mandatory to do that cleanup at this time, but maybe I&apos;ll do it.

&gt; I&apos;m not sure I understand why you have this:
&gt; +	     if ([view respondsToSelector:@selector(documentCursor)] &amp;&amp;
&gt; cur.handle() == [view documentCursor])
&gt; +		 break;
&gt; 
&gt; Is that to work around a bug in AppKit where setting the same cursor twice does
&gt; extra work?

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25649</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-06 23:51:31 -0800</bug_when>
    <thetext>I&apos;ve read your comments.  The only action item remaining is the completeURL call change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25691</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-08 00:05:05 -0800</bug_when>
    <thetext>Turns out the completeURL change would be wrong. The URL is relative to the style sheet, not the 
document the style sheet is attached to.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25692</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-08 00:14:14 -0800</bug_when>
    <thetext>Good to know.  Thanks for looking into this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4652</attachid>
            <date>2005-11-09 09:05:17 -0800</date>
            <delta_ts>2005-12-03 14:42:09 -0800</delta_ts>
            <desc>adds custom cursor support, fixes some image renderer issues</desc>
            <filename>CustomCursorPatch.txt</filename>
            <type>text/plain</type>
            <size>44865</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUva2h0bWwva2h0bWx2aWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAv
Y3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9raHRtbHZpZXcuY3BwLHYKcmV0cmlldmluZyByZXZpc2lv
biAxLjE1MApkaWZmIC1wIC11IC1yMS4xNTAgV2ViQ29yZS9raHRtbC9raHRtbHZpZXcuY3BwCi0t
LSBXZWJDb3JlL2todG1sL2todG1sdmlldy5jcHAJMjUgT2N0IDIwMDUgMjE6MTQ6MzYgLTAwMDAJ
MS4xNTAKKysrIFdlYkNvcmUva2h0bWwva2h0bWx2aWV3LmNwcAkzMCBPY3QgMjAwNSAyMjozMjo0
NiAtMDAwMApAQCAtODgwLDYgKzg4MCw2MCBAQCBzdGF0aWMgYm9vbCBpc1N1Ym1pdEltYWdlKERP
TTo6Tm9kZUltcGwgCiAgICAgcmV0dXJuIG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShpbnB1dFRh
ZykgJiYgc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudEltcGwqPihub2RlKS0+aW5wdXRUeXBl
KCkgPT0gSFRNTElucHV0RWxlbWVudEltcGw6OklNQUdFOwogfQogCitzdGF0aWMgUUN1cnNvciBz
ZWxlY3RDdXJzb3IoY29uc3QgTm9kZUltcGw6Ok1vdXNlRXZlbnQgJmV2ZW50LCBLSFRNTFBhcnQg
KnBhcnQsIGJvb2wgbW91c2VQcmVzc2VkKQoreworICAgIC8vIER1cmluZyBzZWxlY3Rpb24sIHVz
ZSBhbiBJLWJlYW0gbm8gbWF0dGVyIHdoYXQgd2UncmUgb3ZlcgorICAgIGlmIChtb3VzZVByZXNz
ZWQgJiYgcGFydC0+aGFzU2VsZWN0aW9uKCkpCisgICAgICAgIHJldHVybiBLQ3Vyc29yOjppYmVh
bUN1cnNvcigpOworCisgICAgTm9kZUltcGwgKm5vZGUgPSBldmVudC5pbm5lck5vZGUuZ2V0KCk7
CisgICAgUmVuZGVyT2JqZWN0ICpyZW5kZXJlciA9IG5vZGUgPyBub2RlLT5yZW5kZXJlcigpIDog
MDsKKyAgICBSZW5kZXJTdHlsZSAqc3R5bGUgPSByZW5kZXJlciA/IHJlbmRlcmVyLT5zdHlsZSgp
IDogMDsKKworICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+Y3Vyc29ySW1hZ2UoKSAmJiAhc3R5bGUt
PmN1cnNvckltYWdlKCktPnBpeG1hcCgpLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gUUN1cnNv
cihzdHlsZS0+Y3Vyc29ySW1hZ2UoKS0+cGl4bWFwKCkpOworCisgICAgc3dpdGNoIChzdHlsZSA/
IHN0eWxlLT5jdXJzb3IoKSA6IENVUlNPUl9BVVRPKSB7CisgICAgICAgIGNhc2UgQ1VSU09SX0FV
VE86CisgICAgICAgICAgICBpZiAoIWV2ZW50LnVybC5pc051bGwoKSB8fCBpc1N1Ym1pdEltYWdl
KG5vZGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBwYXJ0LT51cmxDdXJzb3IoKTsKKyAgICAg
ICAgICAgIGlmICgobm9kZSAmJiBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB8fCAocmVuZGVy
ZXIgJiYgcmVuZGVyZXItPmlzVGV4dCgpICYmIHJlbmRlcmVyLT5jYW5TZWxlY3QoKSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIEtDdXJzb3I6OmliZWFtQ3Vyc29yKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBDVVJTT1JfQ1JPU1M6CisgICAgICAgICAgICByZXR1cm4gS0N1
cnNvcjo6Y3Jvc3NDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDVVJTT1JfUE9JTlRFUjoKKyAgICAg
ICAgICAgIHJldHVybiBwYXJ0LT51cmxDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDVVJTT1JfTU9W
RToKKyAgICAgICAgICAgIHJldHVybiBLQ3Vyc29yOjpzaXplQWxsQ3Vyc29yKCk7CisgICAgICAg
IGNhc2UgQ1VSU09SX0VfUkVTSVpFOgorICAgICAgICAgICAgcmV0dXJuIEtDdXJzb3I6OmVhc3RS
ZXNpemVDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDVVJTT1JfV19SRVNJWkU6CisgICAgICAgICAg
ICByZXR1cm4gS0N1cnNvcjo6d2VzdFJlc2l6ZUN1cnNvcigpOworICAgICAgICBjYXNlIENVUlNP
Ul9OX1JFU0laRToKKyAgICAgICAgICAgIHJldHVybiBLQ3Vyc29yOjpub3J0aFJlc2l6ZUN1cnNv
cigpOworICAgICAgICBjYXNlIENVUlNPUl9TX1JFU0laRToKKyAgICAgICAgICAgIHJldHVybiBL
Q3Vyc29yOjpzb3V0aFJlc2l6ZUN1cnNvcigpOworICAgICAgICBjYXNlIENVUlNPUl9ORV9SRVNJ
WkU6CisgICAgICAgICAgICByZXR1cm4gS0N1cnNvcjo6bm9ydGhFYXN0UmVzaXplQ3Vyc29yKCk7
CisgICAgICAgIGNhc2UgQ1VSU09SX1NXX1JFU0laRToKKyAgICAgICAgICAgIHJldHVybiBLQ3Vy
c29yOjpzb3V0aFdlc3RSZXNpemVDdXJzb3IoKTsKKyAgICAgICAgY2FzZSBDVVJTT1JfTldfUkVT
SVpFOgorICAgICAgICAgICAgcmV0dXJuIEtDdXJzb3I6Om5vcnRoV2VzdFJlc2l6ZUN1cnNvcigp
OworICAgICAgICBjYXNlIENVUlNPUl9TRV9SRVNJWkU6CisgICAgICAgICAgICByZXR1cm4gS0N1
cnNvcjo6c291dGhFYXN0UmVzaXplQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ1VSU09SX1RFWFQ6
CisgICAgICAgICAgICByZXR1cm4gS0N1cnNvcjo6aWJlYW1DdXJzb3IoKTsKKyAgICAgICAgY2Fz
ZSBDVVJTT1JfV0FJVDoKKyAgICAgICAgICAgIHJldHVybiBLQ3Vyc29yOjp3YWl0Q3Vyc29yKCk7
CisgICAgICAgIGNhc2UgQ1VSU09SX0hFTFA6CisgICAgICAgICAgICByZXR1cm4gS0N1cnNvcjo6
d2hhdHNUaGlzQ3Vyc29yKCk7CisgICAgICAgIGNhc2UgQ1VSU09SX0RFRkFVTFQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFFDdXJzb3IoKTsKK30KKwogdm9pZCBLSFRN
TFZpZXc6OnZpZXdwb3J0TW91c2VNb3ZlRXZlbnQoIFFNb3VzZUV2ZW50ICogX21vdXNlICkKIHsK
ICAgICAvLyBpbiBSYWRhciAzNzAzNzY4IHdlIHNhdyBmcmVxdWVudCBjcmFzaGVzIGFwcGFyZW50
bHkgZHVlIHRvIHRoZQpAQCAtOTE2LDEyNCArOTcwLDE3IEBAIHZvaWQgS0hUTUxWaWV3Ojp2aWV3
cG9ydE1vdXNlTW92ZUV2ZW50KCAKICAgICAvLyBleGVjdXRlIHRoZSBzY2hlZHVsZWQgc2NyaXB0
LiBUaGlzIGlzIHRvIG1ha2Ugc3VyZSB0aGUgbW91c2VvdmVyIGV2ZW50cyBjb21lIGFmdGVyIHRo
ZSBtb3VzZW91dCBldmVudHMKICAgICBtX3BhcnQtPmV4ZWN1dGVTY2hlZHVsZWRTY3JpcHQoKTsK
IAotICAgIE5vZGVJbXBsICpub2RlID0gbWV2LmlubmVyTm9kZS5nZXQoKTsKLSAgICBSZW5kZXJP
YmplY3QgKnJlbmRlcmVyID0gbm9kZSA/IG5vZGUtPnJlbmRlcmVyKCkgOiAwOwotICAgIFJlbmRl
clN0eWxlICpzdHlsZSA9IHJlbmRlcmVyID8gcmVuZGVyZXItPnN0eWxlKCkgOiAwOwotCi0gICAg
UUN1cnNvciBjOwotICAgIGlmIChzdHlsZSAmJiBzdHlsZS0+Y3Vyc29yKCkgPT0gQ1VSU09SX0FV
VE8gJiYgc3R5bGUtPmN1cnNvckltYWdlKCkKLSAgICAgICAgJiYgIShzdHlsZS0+Y3Vyc29ySW1h
Z2UoKS0+cGl4bWFwKCkuaXNOdWxsKCkpKSB7Ci0gICAgICAgIC8qIEZpcnN0IG9mIGFsbCBpdCB3
b3JrczogQ2hlY2sgb3V0IGh0dHA6Ly93d3cuaWFtLnVuaWJlLmNoL35zY2hscGJjaC9jdXJzb3Iu
aHRtbAotICAgICAgICAgKgotICAgICAgICAgKiBCdXQsIEkgZG9uJ3Qga25vdyB3aGF0IGV4YWN0
bHkgd2UgaGF2ZSB0byBkbyBoZXJlOiByZXNjYWxlIHRvIDMyKjMyLCBjaGFuZ2UgdG8gbW9ub2No
cm9tZS4uCi0gICAgICAgICAqLwotICAgICAgICAvL2tkRGVidWcoIDYwMDAgKSA8PCAidXNpbmcg
Y3VzdG9tIGN1cnNvciIgPDwgZW5kbDsKLSAgICAgICAgY29uc3QgUVBpeG1hcCBwID0gc3R5bGUt
PmN1cnNvckltYWdlKCktPnBpeG1hcCgpOwotICAgICAgICAvLyAjIyMgZml4Ci0gICAgICAgIGMg
PSBRQ3Vyc29yKHApOwotICAgIH0KLQotICAgIHN3aXRjaCAoIHN0eWxlID8gc3R5bGUtPmN1cnNv
cigpIDogQ1VSU09SX0FVVE8gKSB7Ci0gICAgY2FzZSBDVVJTT1JfQVVUTzoKLSAgICAgICAgaWYg
KCBkLT5tb3VzZVByZXNzZWQgJiYgbV9wYXJ0LT5oYXNTZWxlY3Rpb24oKSApCi0JICAgIC8vIGR1
cmluZyBzZWxlY3Rpb24sIHVzZSBhbiBJQmVhbSBubyBtYXR0ZXIgd2hhdCB3ZSdyZSBvdmVyCi0J
ICAgIGMgPSBLQ3Vyc29yOjppYmVhbUN1cnNvcigpOwotICAgICAgICBlbHNlIGlmICggKCFtZXYu
dXJsLmlzTnVsbCgpIHx8IGlzU3VibWl0SW1hZ2Uobm9kZSkpICYmIG1fcGFydC0+c2V0dGluZ3Mo
KS0+Y2hhbmdlQ3Vyc29yKCkgKQotICAgICAgICAgICAgYyA9IG1fcGFydC0+dXJsQ3Vyc29yKCk7
Ci0gICAgICAgIGVsc2UgaWYgKCAobm9kZSAmJiBub2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKSB8
fCAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzVGV4dCgpICYmIHJlbmRlcmVyLT5jYW5TZWxlY3Qo
KSkgKQotICAgICAgICAgICAgYyA9IEtDdXJzb3I6OmliZWFtQ3Vyc29yKCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIGNhc2UgQ1VSU09SX0NST1NTOgotICAgICAgICBjID0gS0N1cnNvcjo6Y3Jvc3ND
dXJzb3IoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDVVJTT1JfUE9JTlRFUjoKLSAgICAg
ICAgYyA9IG1fcGFydC0+dXJsQ3Vyc29yKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1VS
U09SX01PVkU6Ci0gICAgICAgIGMgPSBLQ3Vyc29yOjpzaXplQWxsQ3Vyc29yKCk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1VSU09SX0VfUkVTSVpFOgotI2lmIEFQUExFX0NIQU5HRVMKLSAg
ICAgICAgYyA9IEtDdXJzb3I6OmVhc3RSZXNpemVDdXJzb3IoKTsKLSAgICAgICAgYnJlYWs7Ci0j
ZW5kaWYKLSAgICBjYXNlIENVUlNPUl9XX1JFU0laRToKLSNpZiBBUFBMRV9DSEFOR0VTCi0gICAg
ICAgIGMgPSBLQ3Vyc29yOjp3ZXN0UmVzaXplQ3Vyc29yKCk7Ci0jZWxzZQotICAgICAgICBjID0g
S0N1cnNvcjo6c2l6ZUhvckN1cnNvcigpOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1VSU09SX05fUkVTSVpFOgotI2lmIEFQUExFX0NIQU5HRVMKLSAgICAgICAgYyA9IEtDdXJz
b3I6Om5vcnRoUmVzaXplQ3Vyc29yKCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2Fz
ZSBDVVJTT1JfU19SRVNJWkU6Ci0jaWYgQVBQTEVfQ0hBTkdFUwotICAgICAgICBjID0gS0N1cnNv
cjo6c291dGhSZXNpemVDdXJzb3IoKTsKLSNlbHNlCi0gICAgICAgIGMgPSBLQ3Vyc29yOjpzaXpl
VmVyQ3Vyc29yKCk7Ci0jZW5kaWYKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDVVJTT1JfTkVf
UkVTSVpFOgotI2lmIEFQUExFX0NIQU5HRVMKLSAgICAgICAgYyA9IEtDdXJzb3I6Om5vcnRoRWFz
dFJlc2l6ZUN1cnNvcigpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ1VSU09S
X1NXX1JFU0laRToKLSNpZiBBUFBMRV9DSEFOR0VTCi0gICAgICAgIGMgPSBLQ3Vyc29yOjpzb3V0
aFdlc3RSZXNpemVDdXJzb3IoKTsKLSNlbHNlCi0gICAgICAgIGMgPSBLQ3Vyc29yOjpzaXplQkRp
YWdDdXJzb3IoKTsKLSNlbmRpZgotICAgICAgICBicmVhazsKLSAgICBjYXNlIENVUlNPUl9OV19S
RVNJWkU6Ci0jaWYgQVBQTEVfQ0hBTkdFUwotICAgICAgICBjID0gS0N1cnNvcjo6bm9ydGhXZXN0
UmVzaXplQ3Vyc29yKCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDVVJTT1Jf
U0VfUkVTSVpFOgotI2lmIEFQUExFX0NIQU5HRVMKLSAgICAgICAgYyA9IEtDdXJzb3I6OnNvdXRo
RWFzdFJlc2l6ZUN1cnNvcigpOwotI2Vsc2UKLSAgICAgICAgYyA9IEtDdXJzb3I6OnNpemVGRGlh
Z0N1cnNvcigpOwotI2VuZGlmCi0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1VSU09SX1RFWFQ6
Ci0gICAgICAgIGMgPSBLQ3Vyc29yOjppYmVhbUN1cnNvcigpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENVUlNPUl9XQUlUOgotICAgICAgICBjID0gS0N1cnNvcjo6d2FpdEN1cnNvcigpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENVUlNPUl9IRUxQOgotICAgICAgICBjID0gS0N1cnNv
cjo6d2hhdHNUaGlzQ3Vyc29yKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1VSU09SX0RF
RkFVTFQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KKyAgICB2aWV3cG9ydCgpLT5zZXRDdXJzb3Io
c2VsZWN0Q3Vyc29yKG1ldiwgbV9wYXJ0LCBkLT5tb3VzZVByZXNzZWQpKTsKIAotICAgIFFXaWRn
ZXQgKnZwID0gdmlld3BvcnQoKTsKLSAgICBpZiAoIHZwLT5jdXJzb3IoKS5oYW5kbGUoKSAhPSBj
LmhhbmRsZSgpICkgewotICAgICAgICBpZiggYy5oYW5kbGUoKSA9PSBLQ3Vyc29yOjphcnJvd0N1
cnNvcigpLmhhbmRsZSgpKQotICAgICAgICAgICAgdnAtPnVuc2V0Q3Vyc29yKCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHZwLT5zZXRDdXJzb3IoIGMgKTsKLSAgICB9CiAgICAgZC0+cHJl
dk1vdXNlWCA9IHhtOwogICAgIGQtPnByZXZNb3VzZVkgPSB5bTsKIAogICAgIGlmICghc3dhbGxv
d0V2ZW50KSB7Ci0gICAgICAgIGtodG1sOjpNb3VzZU1vdmVFdmVudCBldmVudCggX21vdXNlLCB4
bSwgeW0sIG1ldi51cmwsIG1ldi50YXJnZXQsIG1ldi5pbm5lck5vZGUuZ2V0KCkgKTsKLSAgICAg
ICAgUUFwcGxpY2F0aW9uOjpzZW5kRXZlbnQoIG1fcGFydCwgJmV2ZW50ICk7CisgICAgICAgIGto
dG1sOjpNb3VzZU1vdmVFdmVudCBldmVudChfbW91c2UsIHhtLCB5bSwgbWV2LnVybCwgbWV2LnRh
cmdldCwgbWV2LmlubmVyTm9kZS5nZXQoKSk7CisgICAgICAgIFFBcHBsaWNhdGlvbjo6c2VuZEV2
ZW50KG1fcGFydCwgJmV2ZW50KTsKICAgICB9CiB9CiAKLXZvaWQgS0hUTUxWaWV3OjpyZXNldEN1
cnNvcigpCi17Ci0gICAgdmlld3BvcnQoKS0+dW5zZXRDdXJzb3IoKTsKLX0KLQogdm9pZCBLSFRN
TFZpZXc6OmludmFsaWRhdGVDbGljaygpCiB7CiAgICAgZC0+Y2xpY2tDb3VudCA9IDA7CkluZGV4
OiBXZWJDb3JlL2todG1sL2Nzcy9jc3NfY29tcHV0ZWRzdHlsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc19jb21wdXRlZHN0eWxlLmNwcCx2
CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zOApkaWZmIC1wIC11IC1yMS4zOCBXZWJDb3JlL2todG1s
L2Nzcy9jc3NfY29tcHV0ZWRzdHlsZS5jcHAKLS0tIFdlYkNvcmUva2h0bWwvY3NzL2Nzc19jb21w
dXRlZHN0eWxlLmNwcAkzIE9jdCAyMDA1IDIxOjEyOjA2IC0wMDAwCTEuMzgKKysrIFdlYkNvcmUv
a2h0bWwvY3NzL2Nzc19jb21wdXRlZHN0eWxlLmNwcAkzMCBPY3QgMjAwNSAyMjozMjo0NyAtMDAw
MApAQCAtMiw3ICsyLDcgQEAKICAqIGNzc19jb21wdXRlZHN0eWxlLmNwcAogICoKICAqIENvcHly
aWdodCAoQykgIDIwMDQgIFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAo
QykgMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1
IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMzQsMjMgKzM0LDkg
QEAKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX3N0eWxlLmgiCiAjaW5jbHVkZSAicmVuZGVy
aW5nL3JlbmRlcl9vYmplY3QuaCIKIAotI2lmIEFQUExFX0NIQU5HRVMKICNpbXBvcnQgPGt4bWxj
b3JlL0Fzc2VydGlvbnMuaD4KLSNpbXBvcnQgIktXUUZvbnRGYW1pbHkuaCIKLSNpbXBvcnQgIktX
UUxvZ2dpbmcuaCIKLSNlbmRpZgogCi11c2luZyBraHRtbDo6RUJhY2tncm91bmRCb3g7Ci11c2lu
ZyBraHRtbDo6RUJvcmRlclN0eWxlOwotdXNpbmcga2h0bWw6OkVUZXh0QWxpZ247Ci11c2luZyBr
aHRtbDo6Rm9udDsKLXVzaW5nIGtodG1sOjpGb250RGVmOwotdXNpbmcga2h0bWw6Okxlbmd0aDsK
LXVzaW5nIGtodG1sOjpMZW5ndGhCb3g7Ci11c2luZyBraHRtbDo6UmVuZGVyT2JqZWN0OwotdXNp
bmcga2h0bWw6OlJlbmRlclN0eWxlOwotdXNpbmcga2h0bWw6OlNoYWRvd0RhdGE7Ci11c2luZyBr
aHRtbDo6U3R5bGVEYXNoYm9hcmRSZWdpb247Cit1c2luZyBuYW1lc3BhY2Uga2h0bWw7CiAKIGV4
dGVybiBET006OkRPTVN0cmluZyBnZXRQcm9wZXJ0eU5hbWUodW5zaWduZWQgc2hvcnQgaWQpOwog
CkBAIC01NTAsNDIgKzUzNiw5IEBAIENTU1ZhbHVlSW1wbCAqQ1NTQ29tcHV0ZWRTdHlsZURlY2xh
cmF0aW8KICAgICAgICAgLy8gRklYTUU6IHVuaW1wbGVtZW50ZWQKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBDU1NfUFJPUF9DVVJTT1I6Ci0gICAgICAgIHN3aXRjaCAoc3R5bGUtPmN1cnNvcigp
KSB7Ci0gICAgICAgICAgICBjYXNlIGtodG1sOjpDVVJTT1JfQVVUTzoKLSAgICAgICAgICAgICAg
ICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlSW1wbChDU1NfVkFMX0FVVE8pOwotICAgICAg
ICAgICAgY2FzZSBraHRtbDo6Q1VSU09SX0NST1NTOgotICAgICAgICAgICAgICAgIHJldHVybiBu
ZXcgQ1NTUHJpbWl0aXZlVmFsdWVJbXBsKENTU19WQUxfQ1JPU1NIQUlSKTsKLSAgICAgICAgICAg
IGNhc2Uga2h0bWw6OkNVUlNPUl9ERUZBVUxUOgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcg
Q1NTUHJpbWl0aXZlVmFsdWVJbXBsKENTU19WQUxfREVGQVVMVCk7Ci0gICAgICAgICAgICBjYXNl
IGtodG1sOjpDVVJTT1JfUE9JTlRFUjoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1By
aW1pdGl2ZVZhbHVlSW1wbChDU1NfVkFMX1BPSU5URVIpOwotICAgICAgICAgICAgY2FzZSBraHRt
bDo6Q1VSU09SX01PVkU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVW
YWx1ZUltcGwoQ1NTX1ZBTF9NT1ZFKTsKLSAgICAgICAgICAgIGNhc2Uga2h0bWw6OkNVUlNPUl9F
X1JFU0laRToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlSW1w
bChDU1NfVkFMX0VfUkVTSVpFKTsKLSAgICAgICAgICAgIGNhc2Uga2h0bWw6OkNVUlNPUl9ORV9S
RVNJWkU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZUltcGwo
Q1NTX1ZBTF9ORV9SRVNJWkUpOwotICAgICAgICAgICAgY2FzZSBraHRtbDo6Q1VSU09SX05XX1JF
U0laRToKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1ByaW1pdGl2ZVZhbHVlSW1wbChD
U1NfVkFMX05XX1JFU0laRSk7Ci0gICAgICAgICAgICBjYXNlIGtodG1sOjpDVVJTT1JfTl9SRVNJ
WkU6Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZUltcGwoQ1NT
X1ZBTF9OX1JFU0laRSk7Ci0gICAgICAgICAgICBjYXNlIGtodG1sOjpDVVJTT1JfU0VfUkVTSVpF
OgotICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWVJbXBsKENTU19W
QUxfU0VfUkVTSVpFKTsKLSAgICAgICAgICAgIGNhc2Uga2h0bWw6OkNVUlNPUl9TV19SRVNJWkU6
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZUltcGwoQ1NTX1ZB
TF9TV19SRVNJWkUpOwotICAgICAgICAgICAgY2FzZSBraHRtbDo6Q1VSU09SX1NfUkVTSVpFOgot
ICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWVJbXBsKENTU19WQUxf
U19SRVNJWkUpOwotICAgICAgICAgICAgY2FzZSBraHRtbDo6Q1VSU09SX1dfUkVTSVpFOgotICAg
ICAgICAgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWVJbXBsKENTU19WQUxfV19S
RVNJWkUpOwotICAgICAgICAgICAgY2FzZSBraHRtbDo6Q1VSU09SX1RFWFQ6Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZUltcGwoQ1NTX1ZBTF9URVhUKTsKLSAg
ICAgICAgICAgIGNhc2Uga2h0bWw6OkNVUlNPUl9XQUlUOgotICAgICAgICAgICAgICAgIHJldHVy
biBuZXcgQ1NTUHJpbWl0aXZlVmFsdWVJbXBsKENTU19WQUxfV0FJVCk7Ci0gICAgICAgICAgICBj
YXNlIGtodG1sOjpDVVJTT1JfSEVMUDoKLSAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENTU1By
aW1pdGl2ZVZhbHVlSW1wbChDU1NfVkFMX0hFTFApOwotICAgICAgICB9Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKHN0eWxlLT5j
dXJzb3JJbWFnZSgpKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDU1NQcmltaXRpdmVWYWx1ZUlt
cGwoc3R5bGUtPmN1cnNvckltYWdlKCktPnVybCgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VS
SSk7CisgICAgICAgIHJldHVybiBuZXcgQ1NTUHJpbWl0aXZlVmFsdWVJbXBsKENTU19WQUxfQVVU
TyArIHN0eWxlLT5jdXJzb3IoKSAtIENVUlNPUl9BVVRPKTsKICAgICBjYXNlIENTU19QUk9QX0RJ
UkVDVElPTjoKICAgICAgICAgc3dpdGNoIChzdHlsZS0+ZGlyZWN0aW9uKCkpIHsKICAgICAgICAg
ICAgIGNhc2Uga2h0bWw6OkxUUjoKSW5kZXg6IFdlYkNvcmUva2h0bWwvY3NzL2Nzc3BhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvY3NzL2Nzc3Bh
cnNlci5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA4CmRpZmYgLXAgLXUgLXIxLjEwOCBX
ZWJDb3JlL2todG1sL2Nzcy9jc3NwYXJzZXIuY3BwCi0tLSBXZWJDb3JlL2todG1sL2Nzcy9jc3Nw
YXJzZXIuY3BwCTMgT2N0IDIwMDUgMjE6MTI6MDcgLTAwMDAJMS4xMDgKKysrIFdlYkNvcmUva2h0
bWwvY3NzL2Nzc3BhcnNlci5jcHAJMzAgT2N0IDIwMDUgMjI6MzI6NDkgLTAwMDAKQEAgLTQyLDkg
KzQyLDcgQEAgdXNpbmcgbmFtZXNwYWNlIERPTTsKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0j
aWYgQVBQTEVfQ0hBTkdFUwotdm9pZCBxRmF0YWwgKCBjb25zdCBjaGFyICogbXNnICkge30KLSNl
bmRpZgordXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCiBWYWx1ZUxpc3Q6OlZhbHVlTGlzdCgpCiB7
CkBAIC02ODksMTIgKzY4NywxOCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZSggaW50IHBy
b3BJZCwgCiAJLy8gIFsgYXV0byB8IGNyb3NzaGFpciB8IGRlZmF1bHQgfCBwb2ludGVyIHwgcHJv
Z3Jlc3MgfCBtb3ZlIHwgZS1yZXNpemUgfCBuZS1yZXNpemUgfAogCS8vIG53LXJlc2l6ZSB8IG4t
cmVzaXplIHwgc2UtcmVzaXplIHwgc3ctcmVzaXplIHwgcy1yZXNpemUgfCB3LXJlc2l6ZSB8IHRl
eHQgfAogCS8vIHdhaXQgfCBoZWxwIF0gXSB8IGluaGVyaXQKLSAgICAvLyBNU0lFIDUgY29tcGF0
aWJpbGl0eSA6LwotICAgICAgICBpZiAoICFzdHJpY3QgJiYgaWQgPT0gQ1NTX1ZBTF9IQU5EICkg
eworICAgICAgICBpZiAoIXN0cmljdCAmJiBpZCA9PSBDU1NfVkFMX0hBTkQpIHsgLy8gTVNJRSA1
IGNvbXBhdGliaWxpdHkgOi8KICAgICAgICAgICAgIGlkID0gQ1NTX1ZBTF9QT0lOVEVSOwogCSAg
ICB2YWxpZF9wcmltaXRpdmUgPSB0cnVlOwotICAgICAgICB9IGVsc2UgaWYgKCBpZCA+PSBDU1Nf
VkFMX0FVVE8gJiYgaWQgPD0gQ1NTX1ZBTF9IRUxQICkKKyAgICAgICAgfSBlbHNlIGlmIChpZCA+
PSBDU1NfVkFMX0FVVE8gJiYgaWQgPD0gQ1NTX1ZBTF9IRUxQKQogCSAgICB2YWxpZF9wcmltaXRp
dmUgPSB0cnVlOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1VSSSkgeworICAgICAgICAgICAgRE9NU3RyaW5nIHVyaSA9IHBhcnNlVVJMKGRv
bVN0cmluZyh2YWx1ZS0+c3RyaW5nKSk7CisgICAgICAgICAgICBpZiAoIXVyaS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICBwYXJzZWRWYWx1ZSA9IG5ldyBDU1NJbWFnZVZhbHVlSW1wbChE
T01TdHJpbmcoS1VSTChzdHlsZUVsZW1lbnQtPmJhc2VVUkwoKS5xc3RyaW5nKCksIHVyaS5xc3Ry
aW5nKCkpLnVybCgpKSwgc3R5bGVFbGVtZW50KTsKKyAgICAgICAgICAgICAgICB2YWx1ZUxpc3Qt
Pm5leHQoKTsKKyAgICAgICAgICAgIH0KKwl9CiAJYnJlYWs7CiAKICAgICBjYXNlIENTU19QUk9Q
X0JBQ0tHUk9VTkRfQVRUQUNITUVOVDoKQEAgLTI4NzMsMTIgKzI4NzcsMTIgQEAgdHlwZWRlZiB1
bnNpZ25lZCBpbnQgWVlfQ0hBUjsKIAkqeXlfY3AgPSAwOyBcCiAJeXlfY19idWZfcCA9IHl5X2Nw
OwogI2RlZmluZSBZWV9CUkVBSyBicmVhazsKLSNkZWZpbmUgRUNITyBxRGVidWcoICIlcyIsIFFT
dHJpbmcoIChRQ2hhciAqKXl5dGV4dCwgeXlsZW5nICkubGF0aW4xKCkgKQorI2RlZmluZSBFQ0hP
CiAjZGVmaW5lIFlZX1JVTEVfU0VUVVAKICNkZWZpbmUgSU5JVElBTCAwCiAjZGVmaW5lIFlZX1NU
QVRFX0VPRihzdGF0ZSkgKFlZX0VORF9PRl9CVUZGRVIgKyBzdGF0ZSArIDEpCiAjZGVmaW5lIHl5
dGVybWluYXRlKCkgeXlUb2sgPSBFTkQ7IHJldHVybiB5eVRvawotI2RlZmluZSBZWV9GQVRBTF9F
UlJPUihhKSBxRmF0YWwoYSkKKyNkZWZpbmUgWVlfRkFUQUxfRVJST1IoYSkKICNkZWZpbmUgQkVH
SU4geXlfc3RhcnQgPSAxICsgMiAqCiAjZGVmaW5lIENPTU1FTlQgMQogCkluZGV4OiBXZWJDb3Jl
L2todG1sL2Nzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHAsdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuMjE5CmRpZmYgLXAgLXUgLXIxLjIxOSBXZWJDb3JlL2todG1sL2Nzcy9jc3Nz
dHlsZXNlbGVjdG9yLmNwcAotLS0gV2ViQ29yZS9raHRtbC9jc3MvY3Nzc3R5bGVzZWxlY3Rvci5j
cHAJMzAgT2N0IDIwMDUgMDU6MjY6MjUgLTAwMDAJMS4yMTkKKysrIFdlYkNvcmUva2h0bWwvY3Nz
L2Nzc3N0eWxlc2VsZWN0b3IuY3BwCTMwIE9jdCAyMDA1IDIyOjMyOjUzIC0wMDAwCkBAIC03NCwy
NCArNzQsMjEgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIC8vICNkZWZpbmUgU1RZTEVf
U0hBUklOR19TVEFUUyAxCiAKICNkZWZpbmUgSEFORExFX0lOSEVSSVQocHJvcCwgUHJvcCkgXAot
aWYgKGlzSW5oZXJpdCkgXAote1wKLSAgICBzdHlsZS0+c2V0IyNQcm9wKHBhcmVudFN0eWxlLT5w
cm9wKCkpO1wKLSAgICByZXR1cm47XAoraWYgKGlzSW5oZXJpdCkgeyBcCisgICAgc3R5bGUtPnNl
dCMjUHJvcChwYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAorICAgIHJldHVybjsgXAogfQogCiAjZGVm
aW5lIEhBTkRMRV9JTkhFUklUX0FORF9JTklUSUFMKHByb3AsIFByb3ApIFwKIEhBTkRMRV9JTkhF
UklUKHByb3AsIFByb3ApIFwKLWVsc2UgaWYgKGlzSW5pdGlhbCkgXAote1wKLSAgICBzdHlsZS0+
c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkpO1wKLSAgICByZXR1cm47XAor
aWYgKGlzSW5pdGlhbCkgeyBcCisgICAgc3R5bGUtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5p
dGlhbCMjUHJvcCgpKTsgXAorICAgIHJldHVybjsgXAogfQogCiAjZGVmaW5lIEhBTkRMRV9JTkhF
UklUX0FORF9JTklUSUFMX1dJVEhfVkFMVUUocHJvcCwgUHJvcCwgVmFsdWUpIFwKIEhBTkRMRV9J
TkhFUklUKHByb3AsIFByb3ApIFwKLWVsc2UgaWYgKGlzSW5pdGlhbCkgXAote1wKK2lmIChpc0lu
aXRpYWwpIHsgXAogICAgIHN0eWxlLT5zZXQjI1Byb3AoUmVuZGVyU3R5bGU6OmluaXRpYWwjI1Zh
bHVlKCkpO1wKICAgICByZXR1cm47XAogfQpAQCAtMTU5LDI0ICsxNTYsMjEgQEAgd2hpbGUgKGN1
cnJDaGlsZCkgeyBcCiB9IH0KIAogI2RlZmluZSBIQU5ETEVfSU5IRVJJVF9DT05EKHByb3BJRCwg
cHJvcCwgUHJvcCkgXAotaWYgKGlkID09IHByb3BJRCkgXAote1wKLSAgICBzdHlsZS0+c2V0IyNQ
cm9wKHBhcmVudFN0eWxlLT5wcm9wKCkpO1wKLSAgICByZXR1cm47XAoraWYgKGlkID09IHByb3BJ
RCkgeyBcCisgICAgc3R5bGUtPnNldCMjUHJvcChwYXJlbnRTdHlsZS0+cHJvcCgpKTsgXAorICAg
IHJldHVybjsgXAogfQogCiAjZGVmaW5lIEhBTkRMRV9JTklUSUFMX0NPTkQocHJvcElELCBQcm9w
KSBcCi1pZiAoaWQgPT0gcHJvcElEKSBcCi17XAotICAgIHN0eWxlLT5zZXQjI1Byb3AoUmVuZGVy
U3R5bGU6OmluaXRpYWwjI1Byb3AoKSk7XAotICAgIHJldHVybjtcCitpZiAoaWQgPT0gcHJvcElE
KSB7IFwKKyAgICBzdHlsZS0+c2V0IyNQcm9wKFJlbmRlclN0eWxlOjppbml0aWFsIyNQcm9wKCkp
OyBcCisgICAgcmV0dXJuOyBcCiB9CiAKICNkZWZpbmUgSEFORExFX0lOSVRJQUxfQ09ORF9XSVRI
X1ZBTFVFKHByb3BJRCwgUHJvcCwgVmFsdWUpIFwKLWlmIChpZCA9PSBwcm9wSUQpIFwKLXtcCi0g
ICAgc3R5bGUtPnNldCMjUHJvcChSZW5kZXJTdHlsZTo6aW5pdGlhbCMjVmFsdWUoKSk7XAotICAg
IHJldHVybjtcCitpZiAoaWQgPT0gcHJvcElEKSB7IFwKKyAgICBzdHlsZS0+c2V0IyNQcm9wKFJl
bmRlclN0eWxlOjppbml0aWFsIyNWYWx1ZSgpKTsgXAorICAgIHJldHVybjsgXAogfQogCiBuYW1l
c3BhY2Uga2h0bWwgewpAQCAtMjQ0MSwxMCArMjQzNSwyOCBAQCB2b2lkIENTU1N0eWxlU2VsZWN0
b3I6OmFwcGx5UHJvcGVydHkoIGluCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENT
U19QUk9QX0NVUlNPUjoKLSAgICAgICAgSEFORExFX0lOSEVSSVRfQU5EX0lOSVRJQUwoY3Vyc29y
LCBDdXJzb3IpCi0gICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZSkKLSAgICAgICAgICAgIHN0eWxl
LT5zZXRDdXJzb3IoIChFQ3Vyc29yKSAocHJpbWl0aXZlVmFsdWUtPmdldElkZW50KCkgLSBDU1Nf
VkFMX0FVVE8pICk7Ci0gICAgICAgIGJyZWFrOyAgICAgICAgCisgICAgICAgIGlmIChpc0luaGVy
aXQpIHsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRDdXJzb3IocGFyZW50U3R5bGUtPmN1cnNvcigp
KTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRDdXJzb3JJbWFnZShwYXJlbnRTdHlsZS0+Y3Vyc29y
SW1hZ2UoKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlz
SW5pdGlhbCkgeworICAgICAgICAgICAgc3R5bGUtPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5p
dGlhbEN1cnNvcigpKTsKKyAgICAgICAgICAgIHN0eWxlLT5zZXRDdXJzb3JJbWFnZSgwKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUp
IHsKKyAgICAgICAgICAgIGludCB0eXBlID0gcHJpbWl0aXZlVmFsdWUtPnByaW1pdGl2ZVR5cGUo
KTsKKyAgICAgICAgICAgIGlmICh0eXBlID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQp
IHsKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Q3Vyc29yKChFQ3Vyc29yKShwcmltaXRpdmVW
YWx1ZS0+Z2V0SWRlbnQoKSAtIENTU19WQUxfQVVUTykpOworICAgICAgICAgICAgICAgIHN0eWxl
LT5zZXRDdXJzb3JJbWFnZSgwKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1VSSSkgeworICAgICAgICAgICAgICAgIENTU0ltYWdlVmFsdWVJ
bXBsICppbWFnZSA9IHN0YXRpY19jYXN0PENTU0ltYWdlVmFsdWVJbXBsICo+KHByaW1pdGl2ZVZh
bHVlKTsKKyAgICAgICAgICAgICAgICBzdHlsZS0+c2V0Q3Vyc29yKENVUlNPUl9BVVRPKTsKKyAg
ICAgICAgICAgICAgICBzdHlsZS0+c2V0Q3Vyc29ySW1hZ2UoaW1hZ2UtPmltYWdlKGVsZW1lbnQt
PmdldERvY3VtZW50KCktPmRvY0xvYWRlcigpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgYnJlYWs7CiAvLyBjb2xvcnMgfHwgaW5oZXJpdAogICAgIGNhc2UgQ1NTX1BST1Bf
QkFDS0dST1VORF9DT0xPUjoKICAgICBjYXNlIENTU19QUk9QX0JPUkRFUl9UT1BfQ09MT1I6Cklu
ZGV4OiBXZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2VjbWEva2pzX2h0bWwuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjE0MwpkaWZmIC1wIC11IC1yMS4xNDMgV2ViQ29yZS9raHRtbC9lY21hL2tqc19o
dG1sLmNwcAotLS0gV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAkyNyBPY3QgMjAwNSAy
MzoxNDo1OSAtMDAwMAkxLjE0MworKysgV2ViQ29yZS9raHRtbC9lY21hL2tqc19odG1sLmNwcAkz
MCBPY3QgMjAwNSAyMjozMjo1OCAtMDAwMApAQCAtNDMzOSw3ICs0MzM5LDcgQEAgVmFsdWVJbXAg
KktKUzo6Q29udGV4dDJERnVuY3Rpb246OmNhbGxBcwogICAgICAgICAgICAgaWYgKCFzb3VyY2VD
b250ZXh0KSB7CiAgICAgICAgICAgICAgICAgUVBhaW50ZXIgcDsKICAgICAgICAgICAgICAgICBw
LmRyYXdGbG9hdFBpeG1hcCAoZHgsIGR5LCBkdywgZGgsIHBpeG1hcCwgc3gsIHN5LCBzdywgc2gs
IAotICAgICAgICAgICAgICAgICAgICBRUGFpbnRlcjo6Y29tcG9zaXRlT3BlcmF0b3JGcm9tU3Ry
aW5nKGNvbnRleHRPYmplY3QtPl9nbG9iYWxDb21wb3NpdGUtPnRvU3RyaW5nKGV4ZWMpLnFzdHJp
bmcoKS5sb3dlcigpKSwgZHJhd2luZ0NvbnRleHQpOworICAgICAgICAgICAgICAgICAgICBRUGFp
bnRlcjo6Y29tcG9zaXRlT3BlcmF0b3JGcm9tU3RyaW5nKGNvbnRleHRPYmplY3QtPl9nbG9iYWxD
b21wb3NpdGUtPnRvU3RyaW5nKGV4ZWMpLnFzdHJpbmcoKSksIGRyYXdpbmdDb250ZXh0KTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIC8vIENoZWFw
LCBiZWNhdXNlIHRoZSBpbWFnZSBpcyBiYWNrZWQgYnkgY29weS1vbi13cml0ZSBtZW1vcnksIGFu
ZCB3ZSdyZQpAQCAtNTI0Miw3ICs1MjQyLDcgQEAgc3RhdGljIHZvaWQgZHJhd1BhdHRlcm4gKHZv
aWQgKiBpbmZvLCBDRwogICAgIH0KICAgICBlbHNlCiAgICAgICAgIHAuZHJhd0Zsb2F0UGl4bWFw
ICgwLCAwLCB3LCBoLCBwaXhtYXAsIDAuZiwgMC5mLCB3LCBoLCAKLSAgICAgICAgICAgIFFQYWlu
dGVyOjpjb21wb3NpdGVPcGVyYXRvckZyb21TdHJpbmcoUVN0cmluZygic291cmNlLW92ZXIiKSks
IGNvbnRleHQpOworICAgICAgICAgICAgUVBhaW50ZXI6OmNvbXBvc2l0ZU9wZXJhdG9yRnJvbVN0
cmluZygic291cmNlLW92ZXIiKSwgY29udGV4dCk7CiB9CiAKIENHUGF0dGVybkNhbGxiYWNrcyBw
YXR0ZXJuQ2FsbGJhY2tzID0geyAwLCBkcmF3UGF0dGVybiwgTlVMTCB9OwpJbmRleDogV2ViQ29y
ZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcCx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS41MwpkaWZmIC1wIC11IC1yMS41MyBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9p
bWFnZWltcGwuY3BwCi0tLSBXZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTYg
T2N0IDIwMDUgMDQ6MTM6MTIgLTAwMDAJMS41MworKysgV2ViQ29yZS9raHRtbC9odG1sL2h0bWxf
aW1hZ2VpbXBsLmNwcAkzMCBPY3QgMjAwNSAyMjozMjo1OSAtMDAwMApAQCAtMzQ1LDYgKzM0NSw4
IEBAIGludCBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6aGVpZ2h0KGJvb2wgaWcKICAgICByZXR1cm4g
bV9yZW5kZXItPmNvbnRlbnRIZWlnaHQoKTsKIH0KIAorI2lmICFBUFBMRV9DSEFOR0VTCisKIFFJ
bWFnZSBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6Y3VycmVudEltYWdlKCkgY29uc3QKIHsKICAgICBS
ZW5kZXJJbWFnZSAqciA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlKj4ocmVuZGVyZXIoKSk7CkBA
IC0zNTMsNiArMzU1LDggQEAgUUltYWdlIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpjdXJyZW50SW1h
ZwogICAgIHJldHVybiBRSW1hZ2UoKTsKIH0KIAorI2VuZGlmCisKIGJvb2wgSFRNTEltYWdlRWxl
bWVudEltcGw6OmlzVVJMQXR0cmlidXRlKEF0dHJpYnV0ZUltcGwgKmF0dHIpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIChhdHRyLT5uYW1lKCkgPT0gc3JjQXR0ciB8fCAoYXR0ci0+bmFtZSgpID09IHVz
ZW1hcEF0dHIgJiYgYXR0ci0+dmFsdWUoKS5kb21TdHJpbmcoKVswXSAhPSAnIycpKTsKSW5kZXg6
IFdlYkNvcmUva2h0bWwvaHRtbC9odG1sX2lubGluZWltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcCx2CnJl
dHJpZXZpbmcgcmV2aXNpb24gMS41MgpkaWZmIC1wIC11IC1yMS41MiBXZWJDb3JlL2todG1sL2h0
bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAotLS0gV2ViQ29yZS9raHRtbC9odG1sL2h0bWxfaW5saW5l
aW1wbC5jcHAJMyBPY3QgMjAwNSAyMToxMjoyOSAtMDAwMAkxLjUyCisrKyBXZWJDb3JlL2todG1s
L2h0bWwvaHRtbF9pbmxpbmVpbXBsLmNwcAkzMCBPY3QgMjAwNSAyMjozMjo1OSAtMDAwMApAQCAt
MjA4LDcgKzIwOCw2IEBAIHZvaWQgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpkZWZhdWx0RXZlbnQK
IAkgICAgfQogCiAgICAgICAgICAgICBpZiAoZ2V0RG9jdW1lbnQoKSAmJiBnZXREb2N1bWVudCgp
LT52aWV3KCkgJiYgZ2V0RG9jdW1lbnQoKS0+cGFydCgpKSB7Ci0gICAgICAgICAgICAgICAgZ2V0
RG9jdW1lbnQoKS0+dmlldygpLT5yZXNldEN1cnNvcigpOwogICAgICAgICAgICAgICAgIGdldERv
Y3VtZW50KCktPnBhcnQoKS0+CiAgICAgICAgICAgICAgICAgICAgIHVybFNlbGVjdGVkKCB1cmws
IGJ1dHRvbiwgc3RhdGUsIHV0YXJnZXQgKTsKICAgICAgICAgICAgIH0KSW5kZXg6IFdlYkNvcmUv
a3dxL0tXUUNsaXBib2FyZC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9rd3EvS1dRQ2xpcGJvYXJkLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE5CmRpZmYgLXAg
LXUgLXIxLjE5IFdlYkNvcmUva3dxL0tXUUNsaXBib2FyZC5tbQotLS0gV2ViQ29yZS9rd3EvS1dR
Q2xpcGJvYXJkLm1tCTMgT2N0IDIwMDUgMjE6MTM6MDEgLTAwMDAJMS4xOQorKysgV2ViQ29yZS9r
d3EvS1dRQ2xpcGJvYXJkLm1tCTMwIE9jdCAyMDA1IDIyOjMyOjU5IC0wMDAwCkBAIC0zNDUsOSAr
MzQ1LDkgQEAgTlNJbWFnZSAqS1dRQ2xpcGJvYXJkOjpkcmFnTlNJbWFnZShOU1BvaQogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVzdWx0ID0gKE5TSW1h
Z2UgKikobV9kcmFnSW1hZ2UuaW1hZ2UoKSk7CisgICAgICAgIHJlc3VsdCA9IFttX2RyYWdJbWFn
ZS5pbWFnZVJlbmRlcmVyKCkgaW1hZ2VdOwogICAgICAgICBpZiAobG9jKSB7Ci0gICAgICAgICAg
ICAqbG9jID0gTlNQb2ludChtX2RyYWdMb2MpOworICAgICAgICAgICAgKmxvYyA9IG1fZHJhZ0xv
YzsKICAgICAgICAgICAgIGxvYy0+eSA9IFtyZXN1bHQgc2l6ZV0uaGVpZ2h0IC0gbG9jLT55Owog
ICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9rd3EvS1dRQ3Vyc29yLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2t3cS9LV1FDdXJzb3IubW0sdgpyZXRyaWV2
aW5nIHJldmlzaW9uIDEuMjMKZGlmZiAtcCAtdSAtcjEuMjMgV2ViQ29yZS9rd3EvS1dRQ3Vyc29y
Lm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FDdXJzb3IubW0JMyBPY3QgMjAwNSAyMToxMzowMiAtMDAw
MAkxLjIzCisrKyBXZWJDb3JlL2t3cS9LV1FDdXJzb3IubW0JMzAgT2N0IDIwMDUgMjI6MzM6MDAg
LTAwMDAKQEAgLTIzLDI2ICsyMywzMSBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2luY2x1
ZGUgImNvbmZpZy5oIgorI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJLV1FDdXJzb3IuaCIK
LSNpbXBvcnQgIktXUUxvZ2dpbmcuaCIKKwogI2ltcG9ydCAiS1dRRm91bmRhdGlvbkV4dHJhcy5o
IgorI2ltcG9ydCAiV2ViQ29yZUltYWdlUmVuZGVyZXIuaCIKIAotLy8gVGhlIE5TQ3Vyc29yIGNv
Y29hIGNhbGxzIGhlcmUgY2FuJ3QgZmFpbCwgc28gbm8gbmVlZCB0byBibG9jayBDb2NvYSBleGNl
cHRpb25zCitzdGF0aWMgTlNDdXJzb3IgKmNyZWF0ZUN1c3RvbUN1cnNvcihjb25zdCBRUGl4bWFw
JiBwaXhtYXApCit7CisgICAgTlNJbWFnZSAqaW1hZ2UgPSBbcGl4bWFwLmltYWdlUmVuZGVyZXIo
KSBpbWFnZV07CisgICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1
cm4gW1tOU0N1cnNvciBhbGxvY10gaW5pdFdpdGhJbWFnZTppbWFnZSBob3RTcG90Ok5TWmVyb1Bv
aW50XTsKK30KIAogUUN1cnNvcjo6UUN1cnNvcigpCiAgICAgOiBjdXJzb3IobmlsKQogewogfQog
Ci1RQ3Vyc29yOjpRQ3Vyc29yKGNvbnN0IFFQaXhtYXAgJnBpeG1hcCkKLSAgICA6IGN1cnNvcihu
aWwpCitRQ3Vyc29yOjpRQ3Vyc29yKGNvbnN0IFFQaXhtYXAmIHBpeG1hcCkKKyAgICA6IGN1cnNv
cihjcmVhdGVDdXN0b21DdXJzb3IocGl4bWFwKSkKIHsKLSAgICAvLyBOZWVkZWQgZm9yIGN1c3Rv
bSBjdXJzb3JzLgotICAgIEVSUk9SKCJub3QgeWV0IGltcGxlbWVudGVkIik7CiB9CiAKLVFDdXJz
b3I6OlFDdXJzb3IoY29uc3QgUUN1cnNvciAmb3RoZXIpCitRQ3Vyc29yOjpRQ3Vyc29yKGNvbnN0
IFFDdXJzb3ImIG90aGVyKQogICAgIDogY3Vyc29yKEtXUVJldGFpbihvdGhlci5jdXJzb3IpKQog
ewogfQpAQCAtNTksNyArNjQsNyBAQCBRQ3Vyc29yIFFDdXJzb3I6Om1ha2VXaXRoTlNDdXJzb3Io
TlNDdXJzCiAgICAgcmV0dXJuIHE7CiB9CiAgICAgICAKLVFDdXJzb3IgJlFDdXJzb3I6Om9wZXJh
dG9yPShjb25zdCBRQ3Vyc29yICZvdGhlcikKK1FDdXJzb3ImIFFDdXJzb3I6Om9wZXJhdG9yPShj
b25zdCBRQ3Vyc29yJiBvdGhlcikKIHsKICAgICBLV1FSZXRhaW4ob3RoZXIuY3Vyc29yKTsKICAg
ICBLV1FSZWxlYXNlKGN1cnNvcik7CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUUtIVE1MUGFydC5t
bSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42ODAKZGlmZiAtcCAtdSAtcjEuNjgwIFdlYkNvcmUv
a3dxL0tXUUtIVE1MUGFydC5tbQotLS0gV2ViQ29yZS9rd3EvS1dRS0hUTUxQYXJ0Lm1tCTI2IE9j
dCAyMDA1IDIxOjQ3OjM4IC0wMDAwCTEuNjgwCisrKyBXZWJDb3JlL2t3cS9LV1FLSFRNTFBhcnQu
bW0JMzAgT2N0IDIwMDUgMjI6MzM6MDMgLTAwMDAKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDA0IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yMzU3
LDcgKzIzNTcsNyBAQCB2b2lkIEtXUUtIVE1MUGFydDo6a2h0bWxNb3VzZU1vdmVFdmVudChNCiAK
ICAgICAgICAgaWYgKF9tb3VzZURvd25NYXlTdGFydERyYWcpIHsKICAgICAgICAgICAgIC8vIFdl
IGFyZSBzdGFydGluZyBhIHRleHQvaW1hZ2UvdXJsIGRyYWcsIHNvIHRoZSBjdXJzb3Igc2hvdWxk
IGJlIGFuIGFycm93Ci0gICAgICAgICAgICBkLT5tX3ZpZXctPnJlc2V0Q3Vyc29yKCk7CisgICAg
ICAgICAgICBkLT5tX3ZpZXctPnZpZXdwb3J0KCktPnNldEN1cnNvcihRQ3Vyc29yKCkpOwogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBOU1BvaW50IGRyYWdMb2NhdGlvbiA9IFtfY3VycmVudEV2
ZW50IGxvY2F0aW9uSW5XaW5kb3ddOwogICAgICAgICAgICAgaWYgKGRyYWdIeXN0ZXJlc2lzRXhj
ZWVkZWQoZHJhZ0xvY2F0aW9uLngsIGRyYWdMb2NhdGlvbi55KSkgewpAQCAtMjg4NCwyMiArMjg4
NCwyMiBAQCBOU0ZpbGVXcmFwcGVyICpLV1FLSFRNTFBhcnQ6OmZpbGVXcmFwcGVyCiAgICAgCiAg
ICAgTlNGaWxlV3JhcHBlciAqd3JhcHBlciA9IG5pbDsKIAotICAgIEF0b21pY1N0cmluZyBhdHRy
ID0gZS0+Z2V0QXR0cmlidXRlKHNyY0F0dHIpOworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0
ciA9IGUtPmdldEF0dHJpYnV0ZShzcmNBdHRyKTsKICAgICBpZiAoIWF0dHIuaXNFbXB0eSgpKSB7
CiAgICAgICAgIE5TVVJMICpVUkwgPSBjb21wbGV0ZVVSTChhdHRyLnFzdHJpbmcoKSkuZ2V0TlNV
UkwoKTsKICAgICAgICAgd3JhcHBlciA9IFtfYnJpZGdlIGZpbGVXcmFwcGVyRm9yVVJMOlVSTF07
CiAgICAgfSAgICAKICAgICBpZiAoIXdyYXBwZXIpIHsKICAgICAgICAgUmVuZGVySW1hZ2UgKnJl
bmRlcmVyID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UgKj4oZS0+cmVuZGVyZXIoKSk7Ci0gICAg
ICAgIE5TSW1hZ2UgKiBpbWFnZSA9IChOU0ltYWdlICopKHJlbmRlcmVyLT5waXhtYXAoKS5pbWFn
ZSgpKTsKLSAgICAgICAgTlNEYXRhICp0aWZmRGF0YSA9IFtpbWFnZSBUSUZGUmVwcmVzZW50YXRp
b25Vc2luZ0NvbXByZXNzaW9uOk5TVElGRkNvbXByZXNzaW9uTFpXIGZhY3RvcjowLjBdOwotICAg
ICAgICB3cmFwcGVyID0gW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRo
Q29udGVudHM6dGlmZkRhdGFdOwotICAgICAgICBbd3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFt
ZTpAImltYWdlLnRpZmYiXTsKLSAgICAgICAgW3dyYXBwZXIgYXV0b3JlbGVhc2VdOworICAgICAg
ICBpZiAocmVuZGVyZXItPmlzSW1hZ2UoKSkgeworICAgICAgICAgICAgd3JhcHBlciA9IFtbTlNG
aWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOltyZW5kZXJlci0+
cGl4bWFwKCkuaW1hZ2VSZW5kZXJlcigpIFRJRkZSZXByZXNlbnRhdGlvbl1dOworICAgICAgICAg
ICAgW3dyYXBwZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6QCJpbWFnZS50aWZmIl07CisgICAgICAg
ICAgICBbd3JhcHBlciBhdXRvcmVsZWFzZV07CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1
cm4gd3JhcHBlcjsKLSAgICAKKwogICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CiAKICAgICBy
ZXR1cm4gbmlsOwpJbmRleDogV2ViQ29yZS9rd3EvS1dRUGFpbnRlci5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJD
UyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dRUGFpbnRlci5tbSx2CnJldHJpZXZpbmcg
cmV2aXNpb24gMS4xNDYKZGlmZiAtcCAtdSAtcjEuMTQ2IFdlYkNvcmUva3dxL0tXUVBhaW50ZXIu
bW0KLS0tIFdlYkNvcmUva3dxL0tXUVBhaW50ZXIubW0JMjAgT2N0IDIwMDUgMDY6MDI6MjcgLTAw
MDAJMS4xNDYKKysrIFdlYkNvcmUva3dxL0tXUVBhaW50ZXIubW0JMzAgT2N0IDIwMDUgMjI6MzM6
MDQgLTAwMDAKQEAgLTU2Niw4ICs1NjYsOCBAQCB2b2lkIFFQYWludGVyOjpkcmF3RmxvYXRQaXht
YXAoIGZsb2F0IHgsCiAgICAgTlNSZWN0IGluUmVjdCA9IE5TTWFrZVJlY3QoeCwgeSwgdHcsIHRo
KTsKICAgICBOU1JlY3QgZnJvbVJlY3QgPSBOU01ha2VSZWN0KHN4LCBzeSwgdHN3LCB0c2gpOwog
ICAgIAotICAgIFtwaXhtYXAuaW1hZ2VSZW5kZXJlciBkcmF3SW1hZ2VJblJlY3Q6aW5SZWN0Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21SZWN0OmZyb21SZWN0IGNv
bXBvc2l0ZU9wZXJhdG9yOihOU0NvbXBvc2l0aW5nT3BlcmF0aW9uKWNvbXBvc2l0ZU9wZXJhdG9y
IGNvbnRleHQ6Y29udGV4dF07CisgICAgW3BpeG1hcC5pbWFnZVJlbmRlcmVyKCkgZHJhd0ltYWdl
SW5SZWN0OmluUmVjdCBmcm9tUmVjdDpmcm9tUmVjdCBjb21wb3NpdGVPcGVyYXRvcjooTlNDb21w
b3NpdGluZ09wZXJhdGlvbiljb21wb3NpdGVPcGVyYXRvciBjb250ZXh0OmNvbnRleHRdOworCiAg
ICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KIApAQCAtNTgwLDcgKzU4MCw3IEBAIHZvaWQg
UVBhaW50ZXI6OmRyYXdUaWxlZFBpeG1hcCggaW50IHgsIGkKICAgICBLV1FfQkxPQ0tfRVhDRVBU
SU9OUzsKICAgICBOU1JlY3QgdGVtcFJlY3QgPSB7IHt4LCB5fSwge3csIGh9IH07IC8vIHdvcmth
cm91bmQgZm9yIDQyMTMzMTQKICAgICBOU1BvaW50IHRlbXBQb2ludCA9IHsgc3gsIHN5IH07Ci0g
ICAgW3BpeG1hcC5pbWFnZVJlbmRlcmVyIHRpbGVJblJlY3Q6dGVtcFJlY3QgZnJvbVBvaW50OnRl
bXBQb2ludCBjb250ZXh0OmNvbnRleHRdOworICAgIFtwaXhtYXAuaW1hZ2VSZW5kZXJlcigpIHRp
bGVJblJlY3Q6dGVtcFJlY3QgZnJvbVBvaW50OnRlbXBQb2ludCBjb250ZXh0OmNvbnRleHRdOwog
ICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7CiB9CiAKQEAgLTU5NSw4ICs1OTUsOCBAQCB2b2lk
IFFQYWludGVyOjpkcmF3U2NhbGVkQW5kVGlsZWRQaXhtYXAoCiAgICAgICAgIHJldHVybiBkcmF3
UGl4bWFwKHgsIHksIHcsIGgsIHBpeG1hcCwgc3gsIHN5LCBzdywgc2gsIC0xLCBjb250ZXh0KTsK
IAogICAgIEtXUV9CTE9DS19FWENFUFRJT05TOwotICAgIFtwaXhtYXAuaW1hZ2VSZW5kZXJlciBz
Y2FsZUFuZFRpbGVJblJlY3Q6TlNNYWtlUmVjdCh4LCB5LCB3LCBoKSBmcm9tUmVjdDpOU01ha2VS
ZWN0KHN4LCBzeSwgc3csIHNoKSAKLSAgICAgICAgICAgICAgICAgICAgICB3aXRoSG9yaXpvbnRh
bFRpbGVSdWxlOihXZWJJbWFnZVRpbGVSdWxlKWhSdWxlIHdpdGhWZXJ0aWNhbFRpbGVSdWxlOihX
ZWJJbWFnZVRpbGVSdWxlKXZSdWxlIGNvbnRleHQ6Y29udGV4dF07CisgICAgW3BpeG1hcC5pbWFn
ZVJlbmRlcmVyKCkgc2NhbGVBbmRUaWxlSW5SZWN0Ok5TTWFrZVJlY3QoeCwgeSwgdywgaCkgZnJv
bVJlY3Q6TlNNYWtlUmVjdChzeCwgc3ksIHN3LCBzaCkgCisgICAgICAgICAgICAgICAgICAgICAg
ICB3aXRoSG9yaXpvbnRhbFRpbGVSdWxlOihXZWJJbWFnZVRpbGVSdWxlKWhSdWxlIHdpdGhWZXJ0
aWNhbFRpbGVSdWxlOihXZWJJbWFnZVRpbGVSdWxlKXZSdWxlIGNvbnRleHQ6Y29udGV4dF07CiAg
ICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KIApJbmRleDogV2ViQ29yZS9rd3EvS1dRUGl4
bWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVBpeG1h
cC5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQzCmRpZmYgLXAgLXUgLXIxLjQzIFdlYkNvcmUv
a3dxL0tXUVBpeG1hcC5oCi0tLSBXZWJDb3JlL2t3cS9LV1FQaXhtYXAuaAkzMCBBdWcgMjAwNSAw
OTozMDoyNCAtMDAwMAkxLjQzCisrKyBXZWJDb3JlL2t3cS9LV1FQaXhtYXAuaAkzMCBPY3QgMjAw
NSAyMjozMzowNCAtMDAwMApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDQgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2LDEzICsyNiw5IEBACiAj
aWZuZGVmIFFQSVhNQVBfSF8KICNkZWZpbmUgUVBJWE1BUF9IXwogCisjaW5jbHVkZSAiS1dRTmFt
ZXNwYWNlLmgiCiAjaW5jbHVkZSAiS1dRUGFpbnREZXZpY2UuaCIKLSNpbmNsdWRlICJLV1FDb2xv
ci5oIgogI2luY2x1ZGUgIktXUVN0cmluZy5oIgotI2luY2x1ZGUgIktXUU5hbWVzcGFjZS5oIgot
I2luY2x1ZGUgIktXUUltYWdlLmgiCi0jaW5jbHVkZSAiS1dRU2l6ZS5oIgotI2luY2x1ZGUgIktX
UVJlY3QuaCIKIAogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2
aWNlcy5oPgogCkBAIC00OSw5ICs0NSwxMCBAQCBjbGFzcyBOU1N0cmluZzsKIGNsYXNzIFFXTWF0
cml4OwogY2xhc3MgUVBhaW50ZXI7CiBjbGFzcyBRUGl4bWFwOworY2xhc3MgUVJlY3Q7CitjbGFz
cyBRU2l6ZTsKIAotbmFtZXNwYWNlIGtodG1sCi17CituYW1lc3BhY2Uga2h0bWwgewogICAgIGNs
YXNzIENhY2hlZEltYWdlQ2FsbGJhY2s7CiB9CiAKQEAgLTgwLDcgKzc3LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgcmVzaXplKGludCwgaW50KTsKIAogICAgIFFQaXhtYXAgeEZvcm0oY29uc3QgUVdN
YXRyaXggJikgY29uc3Q7Ci0gICAgUUltYWdlIGNvbnZlcnRUb0ltYWdlKCkgY29uc3QgeyByZXR1
cm4gUUltYWdlKCk7IH0KICAgICAKICAgICBib29sIG1hc2soKSBjb25zdDsKIApAQCAtODksMTQg
Kzg1LDE0IEBAIHB1YmxpYzoKICAgICBib29sIHJlY2VpdmVkRGF0YShjb25zdCBRQnl0ZUFycmF5
ICZieXRlcywgYm9vbCBpc0NvbXBsZXRlLCBraHRtbDo6Q2FjaGVkSW1hZ2VDYWxsYmFjayAqZGVj
b2RlckNhbGxiYWNrKTsKICAgICB2b2lkIHN0b3BBbmltYXRpb25zKCk7CiAKLSAgICBXZWJDb3Jl
SW1hZ2VSZW5kZXJlclB0ciBpbWFnZSgpIHsgcmV0dXJuIGltYWdlUmVuZGVyZXI7IH07CisgICAg
V2ViQ29yZUltYWdlUmVuZGVyZXJQdHIgaW1hZ2VSZW5kZXJlcigpIGNvbnN0IHsgcmV0dXJuIG1f
aW1hZ2VSZW5kZXJlcjsgfQogCiAgICAgdm9pZCBpbmNyZWFzZVVzZUNvdW50KCkgY29uc3Q7CiAg
ICAgdm9pZCBkZWNyZWFzZVVzZUNvdW50KCkgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBmbHVzaFJh
c3RlckNhY2hlKCk7CiAgICAgCi0gICAgQ0dJbWFnZVJlZiBpbWFnZVJlZigpOworICAgIENHSW1h
Z2VSZWYgaW1hZ2VSZWYoKSBjb25zdDsKICAgICAKICAgICBzdGF0aWMgYm9vbCBzaG91bGRVc2VU
aHJlYWRlZERlY29kaW5nKCk7CiAKQEAgLTEwNCwxMiArMTAwLDkgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0QW5pbWF0aW9uUmVjdChjb25zdCBRUmVjdCYpIGNvbnN0OwogCiBwcml2YXRlOgotCi0g
ICAgV2ViQ29yZUltYWdlUmVuZGVyZXJQdHIgaW1hZ2VSZW5kZXJlcjsKLSAgICAgICAgCi0gICAg
bXV0YWJsZSBib29sIG5lZWRDb3B5T25Xcml0ZTsKLSAgICAKLSAgICBOU1N0cmluZyAqTUlNRVR5
cGU7CisgICAgV2ViQ29yZUltYWdlUmVuZGVyZXJQdHIgbV9pbWFnZVJlbmRlcmVyOworICAgIG11
dGFibGUgYm9vbCBtX25lZWRDb3B5T25Xcml0ZTsKKyAgICBOU1N0cmluZyAqbV9NSU1FVHlwZTsK
ICAgICAKICAgICBmcmllbmQgY2xhc3MgUVBhaW50ZXI7CiAKSW5kZXg6IFdlYkNvcmUva3dxL0tX
UVBpeG1hcC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvS1dR
UGl4bWFwLm1tLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUxCmRpZmYgLXAgLXUgLXIxLjUxIFdl
YkNvcmUva3dxL0tXUVBpeG1hcC5tbQotLS0gV2ViQ29yZS9rd3EvS1dRUGl4bWFwLm1tCTMgT2N0
IDIwMDUgMjE6MTM6MDcgLTAwMDAJMS41MQorKysgV2ViQ29yZS9rd3EvS1dRUGl4bWFwLm1tCTMw
IE9jdCAyMDA1IDIyOjMzOjA0IC0wMDAwCkBAIC0yMiwxMiArMjIsMTIgQEAKICAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbXBvcnQg
ImxvYWRlci5oIgogCisjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW1wb3J0ICJLV1FQaXhtYXAuaCIK
LSNpbXBvcnQgIktXUUZvdW5kYXRpb25FeHRyYXMuaCIKIAorI2ltcG9ydCAibG9hZGVyLmgiCisj
aW1wb3J0ICJLV1FGb3VuZGF0aW9uRXh0cmFzLmgiCiAjaW1wb3J0ICJXZWJDb3JlSW1hZ2VSZW5k
ZXJlci5oIgogI2ltcG9ydCAiV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5LmgiCiAKQEAgLTM3
LDg4ICszNyw4NyBAQCBRUGl4bWFwICpLV1FMb2FkUGl4bWFwKGNvbnN0IGNoYXIgKm5hbWUpCiAg
ICAgcmV0dXJuIHA7CiB9CiAKLWJvb2wgY2FuUmVuZGVySW1hZ2VUeXBlKGNvbnN0IFFTdHJpbmcg
JnR5cGUpCitib29sIGNhblJlbmRlckltYWdlVHlwZShjb25zdCBRU3RyaW5nJiB0eXBlKQogewog
ICAgIHJldHVybiBbW1tXZWJDb3JlSW1hZ2VSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0g
c3VwcG9ydGVkTUlNRVR5cGVzXSBjb250YWluc09iamVjdDp0eXBlLmdldE5TU3RyaW5nKCldOwog
fQogCiBRUGl4bWFwOjpRUGl4bWFwKCkKIHsKLSAgICBpbWFnZVJlbmRlcmVyID0gbmlsOwotICAg
IE1JTUVUeXBlID0gbmlsOwotICAgIG5lZWRDb3B5T25Xcml0ZSA9IGZhbHNlOworICAgIG1faW1h
Z2VSZW5kZXJlciA9IG5pbDsKKyAgICBtX01JTUVUeXBlID0gbmlsOworICAgIG1fbmVlZENvcHlP
bldyaXRlID0gZmFsc2U7CiB9CiAKIFFQaXhtYXA6OlFQaXhtYXAoV2ViQ29yZUltYWdlUmVuZGVy
ZXJQdHIgcikKIHsKLSAgICBpbWFnZVJlbmRlcmVyID0gS1dRUmV0YWluKHIpOwotICAgIE1JTUVU
eXBlID0gbmlsOwotICAgIG5lZWRDb3B5T25Xcml0ZSA9IGZhbHNlOworICAgIG1faW1hZ2VSZW5k
ZXJlciA9IEtXUVJldGFpbihyKTsKKyAgICBtX01JTUVUeXBlID0gbmlsOworICAgIG1fbmVlZENv
cHlPbldyaXRlID0gZmFsc2U7CiB9CiAKIFFQaXhtYXA6OlFQaXhtYXAodm9pZCAqTUlNRSkKIHsK
LSAgICBpbWFnZVJlbmRlcmVyID0gbmlsOwotICAgIE1JTUVUeXBlID0gS1dRUmV0YWluTlNSZWxl
YXNlKFsoTlNTdHJpbmcgKilNSU1FIGNvcHldKTsKLSAgICBuZWVkQ29weU9uV3JpdGUgPSBmYWxz
ZTsKKyAgICBtX2ltYWdlUmVuZGVyZXIgPSBuaWw7CisgICAgbV9NSU1FVHlwZSA9IEtXUVJldGFp
bk5TUmVsZWFzZShbKE5TU3RyaW5nICopTUlNRSBjb3B5XSk7CisgICAgbV9uZWVkQ29weU9uV3Jp
dGUgPSBmYWxzZTsKIH0KIAotUVBpeG1hcDo6UVBpeG1hcChjb25zdCBRU2l6ZSAmc3opCitRUGl4
bWFwOjpRUGl4bWFwKGNvbnN0IFFTaXplJiBzeikKIHsKLSAgICBpbWFnZVJlbmRlcmVyID0gS1dR
UmV0YWluKFtbV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldIGltYWdl
UmVuZGVyZXJXaXRoU2l6ZTpOU01ha2VTaXplKHN6LndpZHRoKCksIHN6LmhlaWdodCgpKV0pOwot
ICAgIE1JTUVUeXBlID0gbmlsOwotICAgIG5lZWRDb3B5T25Xcml0ZSA9IGZhbHNlOworICAgIG1f
aW1hZ2VSZW5kZXJlciA9IEtXUVJldGFpbihbW1dlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9yeSBz
aGFyZWRGYWN0b3J5XSBpbWFnZVJlbmRlcmVyV2l0aFNpemU6TlNNYWtlU2l6ZShzei53aWR0aCgp
LCBzei5oZWlnaHQoKSldKTsKKyAgICBtX01JTUVUeXBlID0gbmlsOworICAgIG1fbmVlZENvcHlP
bldyaXRlID0gZmFsc2U7CiB9CiAKLVFQaXhtYXA6OlFQaXhtYXAoY29uc3QgUUJ5dGVBcnJheSAm
Ynl0ZXMpCitRUGl4bWFwOjpRUGl4bWFwKGNvbnN0IFFCeXRlQXJyYXkmIGJ5dGVzKQogewotICAg
IGltYWdlUmVuZGVyZXIgPSBLV1FSZXRhaW4oW1tXZWJDb3JlSW1hZ2VSZW5kZXJlckZhY3Rvcnkg
c2hhcmVkRmFjdG9yeV0gaW1hZ2VSZW5kZXJlcldpdGhCeXRlczpieXRlcy5kYXRhKCkgbGVuZ3Ro
OmJ5dGVzLnNpemUoKV0pOwotICAgIE1JTUVUeXBlID0gbmlsOwotICAgIG5lZWRDb3B5T25Xcml0
ZSA9IGZhbHNlOworICAgIG1faW1hZ2VSZW5kZXJlciA9IEtXUVJldGFpbihbW1dlYkNvcmVJbWFn
ZVJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBpbWFnZVJlbmRlcmVyV2l0aEJ5dGVzOmJ5
dGVzLmRhdGEoKSBsZW5ndGg6Ynl0ZXMuc2l6ZSgpXSk7CisgICAgbV9NSU1FVHlwZSA9IG5pbDsK
KyAgICBtX25lZWRDb3B5T25Xcml0ZSA9IGZhbHNlOwogfQogCi1RUGl4bWFwOjpRUGl4bWFwKGNv
bnN0IFFCeXRlQXJyYXkgJmJ5dGVzLCBOU1N0cmluZyAqTUlNRSkKK1FQaXhtYXA6OlFQaXhtYXAo
Y29uc3QgUUJ5dGVBcnJheSYgYnl0ZXMsIE5TU3RyaW5nICpNSU1FKQogewotICAgIE1JTUVUeXBl
ID0gS1dRUmV0YWluTlNSZWxlYXNlKFtNSU1FIGNvcHldKTsKLSAgICBpbWFnZVJlbmRlcmVyID0g
S1dRUmV0YWluKFtbV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldIGlt
YWdlUmVuZGVyZXJXaXRoQnl0ZXM6Ynl0ZXMuZGF0YSgpIGxlbmd0aDpieXRlcy5zaXplKCkgTUlN
RVR5cGU6TUlNRVR5cGVdKTsKLSAgICBuZWVkQ29weU9uV3JpdGUgPSBmYWxzZTsKKyAgICBtX01J
TUVUeXBlID0gS1dRUmV0YWluTlNSZWxlYXNlKFtNSU1FIGNvcHldKTsKKyAgICBtX2ltYWdlUmVu
ZGVyZXIgPSBLV1FSZXRhaW4oW1tXZWJDb3JlSW1hZ2VSZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFj
dG9yeV0gaW1hZ2VSZW5kZXJlcldpdGhCeXRlczpieXRlcy5kYXRhKCkgbGVuZ3RoOmJ5dGVzLnNp
emUoKSBNSU1FVHlwZTptX01JTUVUeXBlXSk7CisgICAgbV9uZWVkQ29weU9uV3JpdGUgPSBmYWxz
ZTsKIH0KIAogUVBpeG1hcDo6UVBpeG1hcChpbnQgdywgaW50IGgpCiB7Ci0gICAgaW1hZ2VSZW5k
ZXJlciA9IEtXUVJldGFpbihbW1dlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0
b3J5XSBpbWFnZVJlbmRlcmVyV2l0aFNpemU6TlNNYWtlU2l6ZSh3LCBoKV0pOwotICAgIE1JTUVU
eXBlID0gbmlsOwotICAgIG5lZWRDb3B5T25Xcml0ZSA9IGZhbHNlOworICAgIG1faW1hZ2VSZW5k
ZXJlciA9IEtXUVJldGFpbihbW1dlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0
b3J5XSBpbWFnZVJlbmRlcmVyV2l0aFNpemU6TlNNYWtlU2l6ZSh3LCBoKV0pOworICAgIG1fTUlN
RVR5cGUgPSBuaWw7CisgICAgbV9uZWVkQ29weU9uV3JpdGUgPSBmYWxzZTsKIH0KIAotUVBpeG1h
cDo6UVBpeG1hcChjb25zdCBRUGl4bWFwICZjb3B5RnJvbSkgOiBRUGFpbnREZXZpY2UoY29weUZy
b20pCitRUGl4bWFwOjpRUGl4bWFwKGNvbnN0IFFQaXhtYXAmIGNvcHlGcm9tKSA6IFFQYWludERl
dmljZShjb3B5RnJvbSkKIHsKLSAgICBpbWFnZVJlbmRlcmVyID0gS1dRUmV0YWluTlNSZWxlYXNl
KFtjb3B5RnJvbS5pbWFnZVJlbmRlcmVyIGNvcHlXaXRoWm9uZTpOVUxMXSk7OwotICAgIG5lZWRD
b3B5T25Xcml0ZSA9IGZhbHNlOwotICAgIE1JTUVUeXBlID0gS1dRUmV0YWluTlNSZWxlYXNlKFtj
b3B5RnJvbS5NSU1FVHlwZSBjb3B5XSk7CisgICAgbV9pbWFnZVJlbmRlcmVyID0gS1dRUmV0YWlu
TlNSZWxlYXNlKFtjb3B5RnJvbS5tX2ltYWdlUmVuZGVyZXIgY29weVdpdGhab25lOk5VTExdKTs7
CisgICAgbV9uZWVkQ29weU9uV3JpdGUgPSBmYWxzZTsKKyAgICBtX01JTUVUeXBlID0gS1dRUmV0
YWluTlNSZWxlYXNlKFtjb3B5RnJvbS5tX01JTUVUeXBlIGNvcHldKTsKIH0KIAogUVBpeG1hcDo6
flFQaXhtYXAoKQogewotICAgIEtXUVJlbGVhc2UoTUlNRVR5cGUpOwotICAgIEtXUVJlbGVhc2Uo
aW1hZ2VSZW5kZXJlcik7CisgICAgS1dRUmVsZWFzZShtX01JTUVUeXBlKTsKKyAgICBLV1FSZWxl
YXNlKG1faW1hZ2VSZW5kZXJlcik7CiB9CiAKLUNHSW1hZ2VSZWYgUVBpeG1hcDo6aW1hZ2VSZWYo
KQorQ0dJbWFnZVJlZiBRUGl4bWFwOjppbWFnZVJlZigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFtp
bWFnZVJlbmRlcmVyIGltYWdlUmVmXTsKKyAgICByZXR1cm4gW21faW1hZ2VSZW5kZXJlciBpbWFn
ZVJlZl07CiB9CiAKIHZvaWQgUVBpeG1hcDo6cmVzZXRBbmltYXRpb24oKQogewotICAgIGlmIChp
bWFnZVJlbmRlcmVyKSB7Ci0gICAgICAgIFtpbWFnZVJlbmRlcmVyIHJlc2V0QW5pbWF0aW9uXTsK
LSAgICB9CisgICAgaWYgKG1faW1hZ2VSZW5kZXJlcikKKyAgICAgICAgW21faW1hZ2VSZW5kZXJl
ciByZXNldEFuaW1hdGlvbl07CiB9CiAKIHZvaWQgUVBpeG1hcDo6c2V0QW5pbWF0aW9uUmVjdChj
b25zdCBRUmVjdCYgcmVjdCkgY29uc3QKIHsKLSAgICBbaW1hZ2VSZW5kZXJlciBzZXRBbmltYXRp
b25SZWN0Ok5TTWFrZVJlY3QocmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpXTsKKyAgICBbbV9pbWFnZVJlbmRlcmVyIHNldEFuaW1hdGlvblJlY3Q6TlNNYWtl
UmVjdChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSldOwog
fQogCiBAaW50ZXJmYWNlIFdlYkltYWdlQ2FsbGJhY2sgOiBOU09iamVjdApAQCAtMTg2LDE3ICsx
ODUsMTYgQEAgYm9vbCBRUGl4bWFwOjpzaG91bGRVc2VUaHJlYWRlZERlY29kaW5nKAogICAgIHJl
dHVybiBbV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5IHNob3VsZFVzZVRocmVhZGVkRGVjb2Rp
bmddID8gdHJ1ZSA6IGZhbHNlOwogfQogCi1ib29sIFFQaXhtYXA6OnJlY2VpdmVkRGF0YShjb25z
dCBRQnl0ZUFycmF5ICZieXRlcywgYm9vbCBpc0NvbXBsZXRlLCBraHRtbDo6Q2FjaGVkSW1hZ2VD
YWxsYmFjayAqZGVjb2RlckNhbGxiYWNrKQorYm9vbCBRUGl4bWFwOjpyZWNlaXZlZERhdGEoY29u
c3QgUUJ5dGVBcnJheSYgYnl0ZXMsIGJvb2wgaXNDb21wbGV0ZSwga2h0bWw6OkNhY2hlZEltYWdl
Q2FsbGJhY2sgKmRlY29kZXJDYWxsYmFjaykKIHsKLSAgICBpZiAoaW1hZ2VSZW5kZXJlciA9PSBu
aWwpIHsKLSAgICAgICAgaW1hZ2VSZW5kZXJlciA9IEtXUVJldGFpbihbW1dlYkNvcmVJbWFnZVJl
bmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBpbWFnZVJlbmRlcmVyV2l0aE1JTUVUeXBlOk1J
TUVUeXBlXSk7Ci0gICAgfQorICAgIGlmICghbV9pbWFnZVJlbmRlcmVyKQorICAgICAgICBtX2lt
YWdlUmVuZGVyZXIgPSBLV1FSZXRhaW4oW1tXZWJDb3JlSW1hZ2VSZW5kZXJlckZhY3Rvcnkgc2hh
cmVkRmFjdG9yeV0gaW1hZ2VSZW5kZXJlcldpdGhNSU1FVHlwZTptX01JTUVUeXBlXSk7CiAgICAg
CiAgICAgV2ViSW1hZ2VDYWxsYmFjayAqY2FsbGJhY2tXcmFwcGVyID0gbmlsOwogICAgIGlmIChk
ZWNvZGVyQ2FsbGJhY2spCiAgICAgICAgIGNhbGxiYWNrV3JhcHBlciA9IFtbV2ViSW1hZ2VDYWxs
YmFjayBhbGxvY10gaW5pdFdpdGhDYWxsYmFjazpkZWNvZGVyQ2FsbGJhY2tdOwogCi0gICAgYm9v
bCByZXN1bHQgPSBbaW1hZ2VSZW5kZXJlciBpbmNyZW1lbnRhbExvYWRXaXRoQnl0ZXM6Ynl0ZXMu
ZGF0YSgpIGxlbmd0aDpieXRlcy5zaXplKCkgY29tcGxldGU6aXNDb21wbGV0ZSBjYWxsYmFjazpj
YWxsYmFja1dyYXBwZXJdOworICAgIGJvb2wgcmVzdWx0ID0gW21faW1hZ2VSZW5kZXJlciBpbmNy
ZW1lbnRhbExvYWRXaXRoQnl0ZXM6Ynl0ZXMuZGF0YSgpIGxlbmd0aDpieXRlcy5zaXplKCkgY29t
cGxldGU6aXNDb21wbGV0ZSBjYWxsYmFjazpjYWxsYmFja1dyYXBwZXJdOwogCiAgICAgW2NhbGxi
YWNrV3JhcHBlciByZWxlYXNlXTsKICAgICAKQEAgLTIxMCw2MCArMjA4LDU2IEBAIGJvb2wgUVBp
eG1hcDo6bWFzaygpIGNvbnN0CiAKIGJvb2wgUVBpeG1hcDo6aXNOdWxsKCkgY29uc3QKIHsKLSAg
ICByZXR1cm4gaW1hZ2VSZW5kZXJlciA9PSBuaWwgfHwgW2ltYWdlUmVuZGVyZXIgaXNOdWxsXTsK
KyAgICByZXR1cm4gbV9pbWFnZVJlbmRlcmVyID09IG5pbCB8fCBbbV9pbWFnZVJlbmRlcmVyIGlz
TnVsbF07CiB9CiAKIFFTaXplIFFQaXhtYXA6OnNpemUoKSBjb25zdAogewotICAgIGlmIChpbWFn
ZVJlbmRlcmVyID09IG5pbCkgeworICAgIGlmICghbV9pbWFnZVJlbmRlcmVyKQogICAgICAgICBy
ZXR1cm4gUVNpemUoMCwgMCk7Ci0gICAgfQotICAgIE5TU2l6ZSBzeiA9IFtpbWFnZVJlbmRlcmVy
IHNpemVdOworICAgIE5TU2l6ZSBzeiA9IFttX2ltYWdlUmVuZGVyZXIgc2l6ZV07CiAgICAgcmV0
dXJuIFFTaXplKChpbnQpc3oud2lkdGgsIChpbnQpc3ouaGVpZ2h0KTsKIH0KIAogUVJlY3QgUVBp
eG1hcDo6cmVjdCgpIGNvbnN0CiB7Ci0gICAgaWYgKGltYWdlUmVuZGVyZXIgPT0gbmlsKSB7Cisg
ICAgaWYgKG1faW1hZ2VSZW5kZXJlciA9PSBuaWwpCiAgICAgICAgIHJldHVybiBRUmVjdCgwLCAw
LCAwLCAwKTsKLSAgICB9Ci0gICAgTlNTaXplIHN6ID0gW2ltYWdlUmVuZGVyZXIgc2l6ZV07Cisg
ICAgTlNTaXplIHN6ID0gW21faW1hZ2VSZW5kZXJlciBzaXplXTsKICAgICByZXR1cm4gUVJlY3Qo
MCwgMCwgKGludClzei53aWR0aCwgKGludClzei5oZWlnaHQpOwogfQogCiBpbnQgUVBpeG1hcDo6
d2lkdGgoKSBjb25zdAogewotICAgIGlmIChpbWFnZVJlbmRlcmVyID09IG5pbCkgeworICAgIGlm
IChtX2ltYWdlUmVuZGVyZXIgPT0gbmlsKQogICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAg
cmV0dXJuIChpbnQpW2ltYWdlUmVuZGVyZXIgc2l6ZV0ud2lkdGg7CisgICAgcmV0dXJuIChpbnQp
W21faW1hZ2VSZW5kZXJlciBzaXplXS53aWR0aDsKIH0KIAogaW50IFFQaXhtYXA6OmhlaWdodCgp
IGNvbnN0CiB7Ci0gICAgaWYgKGltYWdlUmVuZGVyZXIgPT0gbmlsKSB7CisgICAgaWYgKG1faW1h
Z2VSZW5kZXJlciA9PSBuaWwpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4g
KGludClbaW1hZ2VSZW5kZXJlciBzaXplXS5oZWlnaHQ7CisgICAgcmV0dXJuIChpbnQpW21faW1h
Z2VSZW5kZXJlciBzaXplXS5oZWlnaHQ7CiB9CiAKLXZvaWQgUVBpeG1hcDo6cmVzaXplKGNvbnN0
IFFTaXplICZzeikKK3ZvaWQgUVBpeG1hcDo6cmVzaXplKGNvbnN0IFFTaXplJiBzeikKIHsKICAg
ICByZXNpemUoc3oud2lkdGgoKSwgc3ouaGVpZ2h0KCkpOwogfQogCiB2b2lkIFFQaXhtYXA6OnJl
c2l6ZShpbnQgdywgaW50IGgpCiB7Ci0gICAgaWYgKG5lZWRDb3B5T25Xcml0ZSkgewotICAgICAg
ICBpZCA8V2ViQ29yZUltYWdlUmVuZGVyZXI+IG5ld0ltYWdlUmVuZGVyZXIgPSBLV1FSZXRhaW5O
U1JlbGVhc2UoW2ltYWdlUmVuZGVyZXIgY29weVdpdGhab25lOk5VTExdKTsKLSAgICAgICAgS1dR
UmVsZWFzZShpbWFnZVJlbmRlcmVyKTsKLSAgICAgICAgaW1hZ2VSZW5kZXJlciA9IG5ld0ltYWdl
UmVuZGVyZXI7Ci0gICAgICAgIG5lZWRDb3B5T25Xcml0ZSA9IGZhbHNlOworICAgIGlmIChtX25l
ZWRDb3B5T25Xcml0ZSkgeworICAgICAgICBpZCA8V2ViQ29yZUltYWdlUmVuZGVyZXI+IG5ld0lt
YWdlUmVuZGVyZXIgPSBLV1FSZXRhaW5OU1JlbGVhc2UoW21faW1hZ2VSZW5kZXJlciBjb3B5V2l0
aFpvbmU6TlVMTF0pOworICAgICAgICBLV1FSZWxlYXNlKG1faW1hZ2VSZW5kZXJlcik7CisgICAg
ICAgIG1faW1hZ2VSZW5kZXJlciA9IG5ld0ltYWdlUmVuZGVyZXI7CisgICAgICAgIG1fbmVlZENv
cHlPbldyaXRlID0gZmFsc2U7CiAgICAgfQotICAgIFtpbWFnZVJlbmRlcmVyIHJlc2l6ZTpOU01h
a2VTaXplKHcsIGgpXTsKKyAgICBbbV9pbWFnZVJlbmRlcmVyIHJlc2l6ZTpOU01ha2VTaXplKHcs
IGgpXTsKIH0KIAotUVBpeG1hcCBRUGl4bWFwOjp4Rm9ybShjb25zdCBRV01hdHJpeCAmeG1hdHJp
eCkgY29uc3QKK1FQaXhtYXAgUVBpeG1hcDo6eEZvcm0oY29uc3QgUVdNYXRyaXgmIHhtYXRyaXgp
IGNvbnN0CiB7CiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGNhbGxlZCB3aGVuIGFuIGlt
YWdlIG5lZWRzIHRvIGJlIHNjYWxlZC4gIAogICAgIC8vIFdlIGNhbiBkZXBlbmQgb24gcmVuZGVy
X2ltYWdlLmNwcCB0byBjYWxsIHJlc2l6ZSBBRlRFUgpAQCAtMjc0LDM1ICsyNjgsMzUgQEAgUVBp
eG1hcCBRUGl4bWFwOjp4Rm9ybShjb25zdCBRV01hdHJpeCAmeAogICAgIHJldHVybiAqdGhpczsK
IH0KIAotUVBpeG1hcCAmUVBpeG1hcDo6b3BlcmF0b3I9KGNvbnN0IFFQaXhtYXAgJmFzc2lnbkZy
b20pCitRUGl4bWFwJiBRUGl4bWFwOjpvcGVyYXRvcj0oY29uc3QgUVBpeG1hcCYgYXNzaWduRnJv
bSkKIHsKLSAgICBpZCA8V2ViQ29yZUltYWdlUmVuZGVyZXI+IG9sZEltYWdlUmVuZGVyZXIgPSBp
bWFnZVJlbmRlcmVyOwotICAgIGltYWdlUmVuZGVyZXIgPSBLV1FSZXRhaW5OU1JlbGVhc2UoW2Fz
c2lnbkZyb20uaW1hZ2VSZW5kZXJlciByZXRhaW5PckNvcHlJZk5lZWRlZF0pOworICAgIGlkIDxX
ZWJDb3JlSW1hZ2VSZW5kZXJlcj4gb2xkSW1hZ2VSZW5kZXJlciA9IG1faW1hZ2VSZW5kZXJlcjsK
KyAgICBtX2ltYWdlUmVuZGVyZXIgPSBLV1FSZXRhaW5OU1JlbGVhc2UoW2Fzc2lnbkZyb20ubV9p
bWFnZVJlbmRlcmVyIHJldGFpbk9yQ29weUlmTmVlZGVkXSk7CiAgICAgS1dRUmVsZWFzZShvbGRJ
bWFnZVJlbmRlcmVyKTsKLSAgICBOU1N0cmluZyAqbmV3TUlNRVR5cGUgPSBLV1FSZXRhaW5OU1Jl
bGVhc2UoW2Fzc2lnbkZyb20uTUlNRVR5cGUgY29weV0pOwotICAgIEtXUVJlbGVhc2UoTUlNRVR5
cGUpOwotICAgIE1JTUVUeXBlID0gbmV3TUlNRVR5cGU7Ci0gICAgYXNzaWduRnJvbS5uZWVkQ29w
eU9uV3JpdGUgPSB0cnVlOwotICAgIG5lZWRDb3B5T25Xcml0ZSA9IHRydWU7CisgICAgTlNTdHJp
bmcgKm5ld01JTUVUeXBlID0gS1dRUmV0YWluTlNSZWxlYXNlKFthc3NpZ25Gcm9tLm1fTUlNRVR5
cGUgY29weV0pOworICAgIEtXUVJlbGVhc2UobV9NSU1FVHlwZSk7CisgICAgbV9NSU1FVHlwZSA9
IG5ld01JTUVUeXBlOworICAgIGFzc2lnbkZyb20ubV9uZWVkQ29weU9uV3JpdGUgPSB0cnVlOwor
ICAgIG1fbmVlZENvcHlPbldyaXRlID0gdHJ1ZTsKICAgICByZXR1cm4gKnRoaXM7CiB9CiAKIHZv
aWQgUVBpeG1hcDo6aW5jcmVhc2VVc2VDb3VudCgpIGNvbnN0CiB7Ci0gICAgW2ltYWdlUmVuZGVy
ZXIgaW5jcmVhc2VVc2VDb3VudF07CisgICAgW21faW1hZ2VSZW5kZXJlciBpbmNyZWFzZVVzZUNv
dW50XTsKIH0KIAogdm9pZCBRUGl4bWFwOjpkZWNyZWFzZVVzZUNvdW50KCkgY29uc3QKIHsKLSAg
ICBbaW1hZ2VSZW5kZXJlciBkZWNyZWFzZVVzZUNvdW50XTsKKyAgICBbbV9pbWFnZVJlbmRlcmVy
IGRlY3JlYXNlVXNlQ291bnRdOwogfQogCiB2b2lkIFFQaXhtYXA6OnN0b3BBbmltYXRpb25zKCkK
IHsKLSAgICBbaW1hZ2VSZW5kZXJlciBzdG9wQW5pbWF0aW9uXTsKKyAgICBbbV9pbWFnZVJlbmRl
cmVyIHN0b3BBbmltYXRpb25dOwogfQogCiB2b2lkIFFQaXhtYXA6OmZsdXNoUmFzdGVyQ2FjaGUo
KQogewotICAgIFtpbWFnZVJlbmRlcmVyIGZsdXNoUmFzdGVyQ2FjaGVdOworICAgIFttX2ltYWdl
UmVuZGVyZXIgZmx1c2hSYXN0ZXJDYWNoZV07CiB9CkluZGV4OiBXZWJDb3JlL2t3cS9LV1FXaWRn
ZXQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL0tXUVdpZGdl
dC5tbSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMTMKZGlmZiAtcCAtdSAtcjEuMTEzIFdlYkNv
cmUva3dxL0tXUVdpZGdldC5tbQotLS0gV2ViQ29yZS9rd3EvS1dRV2lkZ2V0Lm1tCTExIE9jdCAy
MDA1IDE5OjE2OjQ1IC0wMDAwCTEuMTEzCisrKyBXZWJDb3JlL2t3cS9LV1FXaWRnZXQubW0JMzAg
T2N0IDIwMDUgMjI6MzM6MDQgLTAwMDAKQEAgLTM2MSw0MCArMzYxLDE1IEBAIGJvb2wgUVdpZGdl
dDo6aXNWaXNpYmxlKCkgY29uc3QKIHZvaWQgUVdpZGdldDo6c2V0Q3Vyc29yKGNvbnN0IFFDdXJz
b3IgJmN1cikKIHsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUzsKLSAgICBpZCB2aWV3ID0gZGF0
YS0+dmlldzsKLSAgICB3aGlsZSAodmlldykgeworICAgIGZvciAoaWQgdmlldyA9IGRhdGEtPnZp
ZXc7IHZpZXc7IHZpZXcgPSBbdmlldyBzdXBlcnZpZXddKSB7CiAgICAgICAgIGlmIChbdmlldyBy
ZXNwb25kc1RvU2VsZWN0b3I6QHNlbGVjdG9yKHNldERvY3VtZW50Q3Vyc29yOildKSB7CisgICAg
ICAgICAgICBpZiAoW3ZpZXcgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3Rvcihkb2N1bWVudEN1
cnNvcildICYmIGN1ci5oYW5kbGUoKSA9PSBbdmlldyBkb2N1bWVudEN1cnNvcl0pCisgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBbdmlldyBzZXREb2N1bWVudEN1cnNvcjpjdXIu
aGFuZGxlKCldOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgdmlldyA9
IFt2aWV3IHN1cGVydmlld107Ci0gICAgfQotICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci19
Ci0KLVFDdXJzb3IgUVdpZGdldDo6Y3Vyc29yKCkKLXsKLSAgICBLV1FfQkxPQ0tfRVhDRVBUSU9O
UzsKLSAgICBRQ3Vyc29yIGN1cnNvcjsKLQotICAgIGlkIHZpZXcgPSBkYXRhLT52aWV3OwotICAg
IHdoaWxlICh2aWV3KSB7Ci0gICAgICAgIGlmIChbdmlldyByZXNwb25kc1RvU2VsZWN0b3I6QHNl
bGVjdG9yKGRvY3VtZW50Q3Vyc29yKV0pIHsgCi0gICAgICAgICAgICBjdXJzb3IgPSBRQ3Vyc29y
OjptYWtlV2l0aE5TQ3Vyc29yKFt2aWV3IGRvY3VtZW50Q3Vyc29yXSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICB2aWV3ID0gW3ZpZXcgc3VwZXJ2aWV3XTsKICAgICB9
Ci0KLSAgICByZXR1cm4gY3Vyc29yOwogICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlM7Ci0KLSAg
ICByZXR1cm4gUUN1cnNvcigpOwotfQotCi12b2lkIFFXaWRnZXQ6OnVuc2V0Q3Vyc29yKCkKLXsK
LSAgICBzZXRDdXJzb3IoUUN1cnNvcigpKTsKIH0KIAogYm9vbCBRV2lkZ2V0OjpldmVudChRRXZl
bnQgKikKSW5kZXg6IFdlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva3dxL1dlYkNvcmVCcmlkZ2UubW0sdgpyZXRyaWV2aW5n
IHJldmlzaW9uIDEuNDIyCmRpZmYgLXAgLXUgLXIxLjQyMiBXZWJDb3JlL2t3cS9XZWJDb3JlQnJp
ZGdlLm1tCi0tLSBXZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLm1tCTI4IE9jdCAyMDA1IDE3OjM1
OjQzIC0wMDAwCTEuNDIyCisrKyBXZWJDb3JlL2t3cS9XZWJDb3JlQnJpZGdlLm1tCTMwIE9jdCAy
MDA1IDIyOjMzOjA2IC0wMDAwCkBAIC0xMDg1LDIwICsxMDg1LDIyIEBAIHN0YXRpYyBIVE1MRm9y
bUVsZW1lbnRJbXBsICpmb3JtRWxlbWVudEYKICAgICBpZiAobm9kZSkgewogICAgICAgICBbZWxl
bWVudCBzZXRPYmplY3Q6W0RPTU5vZGUgX25vZGVXaXRoSW1wbDpub2RlXSBmb3JLZXk6V2ViQ29y
ZUVsZW1lbnRET01Ob2RlS2V5XTsKICAgICAKKyAgICAgICAgLy8gT25seSByZXR1cm4gaW1hZ2Ug
aW5mb3JtYXRpb24gaWYgdGhlcmUgaXMgYW4gaW1hZ2UuCiAgICAgICAgIGlmIChub2RlLT5yZW5k
ZXJlcigpICYmIG5vZGUtPnJlbmRlcmVyKCktPmlzSW1hZ2UoKSkgewogICAgICAgICAgICAgUmVu
ZGVySW1hZ2UgKnIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSAqPihub2RlLT5yZW5kZXJlcigp
KTsKLSAgICAgICAgICAgIE5TSW1hZ2UgKiBpbWFnZSA9IChOU0ltYWdlICopKHItPnBpeG1hcCgp
LmltYWdlKCkpOwotICAgICAgICAgICAgLy8gT25seSByZXR1cm4gaW1hZ2UgaW5mb3JtYXRpb24g
aWYgdGhlcmUgaXMgYW4gaW1hZ2UuCi0gICAgICAgICAgICBpZiAoaW1hZ2UgJiYgIXItPmlzRGlz
cGxheWluZ0Vycm9yKCkpIHsKLSAgICAgICAgICAgICAgICBbZWxlbWVudCBzZXRPYmplY3Q6ci0+
cGl4bWFwKCkuaW1hZ2UoKSBmb3JLZXk6V2ViQ29yZUVsZW1lbnRJbWFnZUtleV07CisgICAgICAg
ICAgICBpZiAoIXItPmlzRGlzcGxheWluZ0Vycm9yKCkpIHsKKyAgICAgICAgICAgICAgICBRUGl4
bWFwIHAgPSByLT5waXhtYXAoKTsKKyAgICAgICAgICAgICAgICBOU0ltYWdlICppbWFnZSA9IFtw
LmltYWdlUmVuZGVyZXIoKSBpbWFnZV07CisgICAgICAgICAgICAgICAgaWYgKGltYWdlKQorICAg
ICAgICAgICAgICAgICAgICBbZWxlbWVudCBzZXRPYmplY3Q6aW1hZ2UgZm9yS2V5OldlYkNvcmVF
bGVtZW50SW1hZ2VLZXldOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAorCiAgICAg
ICAgICAgICBpbnQgeCwgeTsKICAgICAgICAgICAgIGlmIChyLT5hYnNvbHV0ZVBvc2l0aW9uKHgs
IHkpKSB7CiAgICAgICAgICAgICAgICAgTlNWYWx1ZSAqcmVjdCA9IFtOU1ZhbHVlIHZhbHVlV2l0
aFJlY3Q6TlNNYWtlUmVjdCh4LCB5LCByLT5jb250ZW50V2lkdGgoKSwgci0+Y29udGVudEhlaWdo
dCgpKV07CiAgICAgICAgICAgICAgICAgW2VsZW1lbnQgc2V0T2JqZWN0OnJlY3QgZm9yS2V5Oldl
YkNvcmVFbGVtZW50SW1hZ2VSZWN0S2V5XTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAKKwogICAgICAgICAgICAgRWxlbWVudEltcGwgKmkgPSBzdGF0aWNfY2FzdDxFbGVtZW50SW1w
bCo+KG5vZGUpOwogICAgIAogICAgICAgICAgICAgLy8gRklYTUU6IENvZGUgY29waWVkIGZyb20g
UmVuZGVySW1hZ2U6OnVwZGF0ZUZyb21FbGVtZW50OyBzaG91bGQgc2hhcmUuCkluZGV4OiBXZWJD
b3JlL2t3cS9XZWJDb3JlSW1hZ2VSZW5kZXJlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2t3cS9XZWJDb3JlSW1hZ2VSZW5kZXJlci5oLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjE2CmRpZmYgLXAgLXUgLXIxLjE2IFdlYkNvcmUva3dxL1dlYkNvcmVJbWFnZVJlbmRl
cmVyLmgKLS0tIFdlYkNvcmUva3dxL1dlYkNvcmVJbWFnZVJlbmRlcmVyLmgJMjcgQXVnIDIwMDUg
MDA6MTQ6MjIgLTAwMDAJMS4xNgorKysgV2ViQ29yZS9rd3EvV2ViQ29yZUltYWdlUmVuZGVyZXIu
aAkzMCBPY3QgMjAwNSAyMjozMzowNiAtMDAwMApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDUgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ3LDcg
KzQ3LDExIEBAIHR5cGVkZWYgZW51bSB7CiAtICh2b2lkKWluY3JlYXNlVXNlQ291bnQ7CiAtICh2
b2lkKWRlY3JlYXNlVXNlQ291bnQ7CiAtICh2b2lkKWZsdXNoUmFzdGVyQ2FjaGU7Ci0tIChDR0lt
YWdlUmVmKWltYWdlUmVmOwogLSAodm9pZClyZXNldEFuaW1hdGlvbjsKIC0gKHZvaWQpc2V0QW5p
bWF0aW9uUmVjdDooTlNSZWN0KXI7CisKKy0gKENHSW1hZ2VSZWYpaW1hZ2VSZWY7CistIChOU0lt
YWdlICopaW1hZ2U7CistIChOU0RhdGEgKilUSUZGUmVwcmVzZW50YXRpb247CisKIEBlbmQKSW5k
ZXg6IFdlYktpdC9NaXNjLnN1YnByb2ovV2ViTlNQYXN0ZWJvYXJkRXh0cmFzLm0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYktpdC9NaXNjLnN1YnByb2ovV2ViTlNQYXN0ZWJvYXJk
RXh0cmFzLm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNDkKZGlmZiAtcCAtdSAtcjEuNDkgV2Vi
S2l0L01pc2Muc3VicHJvai9XZWJOU1Bhc3RlYm9hcmRFeHRyYXMubQotLS0gV2ViS2l0L01pc2Mu
c3VicHJvai9XZWJOU1Bhc3RlYm9hcmRFeHRyYXMubQkxNCBPY3QgMjAwNSAyMDozMTo0NiAtMDAw
MAkxLjQ5CisrKyBXZWJLaXQvTWlzYy5zdWJwcm9qL1dlYk5TUGFzdGVib2FyZEV4dHJhcy5tCTMw
IE9jdCAyMDA1IDIyOjMzOjI0IC0wMDAwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbXBvcnQgPFdl
YktpdC9XZWJOU1Bhc3RlYm9hcmRFeHRyYXMuaD4KIAorI2ltcG9ydCA8V2ViQ29yZS9XZWJDb3Jl
SW1hZ2VSZW5kZXJlci5oPgogI2ltcG9ydCA8V2ViS2l0L1dlYkFyY2hpdmUuaD4KICNpbXBvcnQg
PFdlYktpdC9XZWJBc3NlcnRpb25zLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViSW1hZ2VSZW5kZXJl
ci5oPgpJbmRleDogV2ViS2l0L01pc2Muc3VicHJvai9XZWJOU1ZpZXdFeHRyYXMubQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L01pc2Muc3VicHJvai9XZWJOU1ZpZXdFeHRy
YXMubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS42MQpkaWZmIC1wIC11IC1yMS42MSBXZWJLaXQv
TWlzYy5zdWJwcm9qL1dlYk5TVmlld0V4dHJhcy5tCi0tLSBXZWJLaXQvTWlzYy5zdWJwcm9qL1dl
Yk5TVmlld0V4dHJhcy5tCTYgSnVuIDIwMDUgMDA6MTU6MDggLTAwMDAJMS42MQorKysgV2ViS2l0
L01pc2Muc3VicHJvai9XZWJOU1ZpZXdFeHRyYXMubQkzMCBPY3QgMjAwNSAyMjozMzoyNCAtMDAw
MApAQCAtMjgsNiArMjgsNyBAQAogCiAjaW1wb3J0IDxXZWJLaXQvV2ViTlNWaWV3RXh0cmFzLmg+
CiAKKyNpbXBvcnQgPFdlYkNvcmUvV2ViQ29yZUltYWdlUmVuZGVyZXIuaD4KICNpbXBvcnQgPFdl
YktpdC9XZWJEYXRhU291cmNlLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVQcml2YXRlLmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViRnJhbWVWaWV3SW50ZXJuYWwuaD4KQEAgLTIwOSw5ICsyMTAs
OCBAQAogICAgIE5TUG9pbnQgbW91c2VEb3duUG9pbnQgPSBbc2VsZiBjb252ZXJ0UG9pbnQ6W2V2
ZW50IGxvY2F0aW9uSW5XaW5kb3ddIGZyb21WaWV3Om5pbF07CiAgICAgTlNJbWFnZSAqZHJhZ0lt
YWdlOwogICAgIE5TUG9pbnQgb3JpZ2luOwotICAgIE5TSW1hZ2UgKmltYWdlOwotICAgIAotICAg
IGltYWdlID0gW3dpciBpbWFnZV07CisKKyAgICBOU0ltYWdlICppbWFnZSA9IFt3aXIgaW1hZ2Vd
OwogICAgIGlmIChpbWFnZSAhPSBuaWwgJiYgW2ltYWdlIHNpemVdLmhlaWdodCAqIFtpbWFnZSBz
aXplXS53aWR0aCA8PSBXZWJNYXhPcmlnaW5hbEltYWdlQXJlYSkgewogICAgICAgICBOU1NpemUg
b3JpZ2luYWxTaXplID0gcmVjdC5zaXplOwogICAgICAgICBvcmlnaW4gPSByZWN0Lm9yaWdpbjsK
SW5kZXg6IFdlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYkltYWdlUmVuZGVyZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnBy
b2ovV2ViSW1hZ2VSZW5kZXJlci5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjMzCmRpZmYgLXAg
LXUgLXIxLjMzIFdlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYkltYWdlUmVuZGVyZXIu
aAotLS0gV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViSW1hZ2VSZW5kZXJlci5oCTE2
IEF1ZyAyMDA1IDE3OjM2OjM3IC0wMDAwCTEuMzMKKysrIFdlYktpdC9XZWJDb3JlU3VwcG9ydC5z
dWJwcm9qL1dlYkltYWdlUmVuZGVyZXIuaAkzMCBPY3QgMjAwNSAyMjozMzoyNCAtMDAwMApAQCAt
NTYsOCArNTYsNiBAQAogLSAoTlNSZWN0KXRhcmdldEFuaW1hdGlvblJlY3Q7CiAtICh2b2lkKXJl
c2l6ZTooTlNTaXplKXM7CiAtIChOU1NpemUpc2l6ZTsKLS0gKE5TRGF0YSAqKVRJRkZSZXByZXNl
bnRhdGlvbjsKLS0gKE5TSW1hZ2UgKilpbWFnZTsKIAogQGVuZAogCkluZGV4OiBXZWJLaXQvV2Vi
Q29yZVN1cHBvcnQuc3VicHJvai9XZWJJbWFnZVJlbmRlcmVyLm0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls
ZTogL2N2cy9yb290L1dlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYkltYWdlUmVuZGVy
ZXIubSx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xMDgKZGlmZiAtcCAtdSAtcjEuMTA4IFdlYktp
dC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYkltYWdlUmVuZGVyZXIubQotLS0gV2ViS2l0L1dl
YkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViSW1hZ2VSZW5kZXJlci5tCTEwIFNlcCAyMDA1IDE3OjM2
OjA5IC0wMDAwCTEuMTA4CisrKyBXZWJLaXQvV2ViQ29yZVN1cHBvcnQuc3VicHJvai9XZWJJbWFn
ZVJlbmRlcmVyLm0JMzAgT2N0IDIwMDUgMjI6MzM6MjQgLTAwMDAKQEAgLTI4LDE4ICsyOCwxNiBA
QAogCiAjaW1wb3J0IDxXZWJLaXQvV2ViSW1hZ2VSZW5kZXJlci5oPgogCisjaW1wb3J0IDxXZWJD
b3JlL1dlYkNvcmVJbWFnZVJlbmRlcmVyLmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViQXNzZXJ0aW9u
cy5oPgotI2ltcG9ydCA8V2ViS2l0L1dlYkltYWdlUmVuZGVyZXJGYWN0b3J5Lmg+CiAjaW1wb3J0
IDxXZWJLaXQvV2ViR3JhcGhpY3NCcmlkZ2UuaD4KICNpbXBvcnQgPFdlYktpdC9XZWJIVE1MVmll
dy5oPgorI2ltcG9ydCA8V2ViS2l0L1dlYkltYWdlRGF0YS5oPgorI2ltcG9ydCA8V2ViS2l0L1dl
YkltYWdlUmVuZGVyZXJGYWN0b3J5Lmg+CiAjaW1wb3J0IDxXZWJLaXQvV2ViSW1hZ2VWaWV3Lmg+
CiAjaW1wb3J0IDxXZWJLaXQvV2ViTlNPYmplY3RFeHRyYXMuaD4KICNpbXBvcnQgPFdlYktpdFN5
c3RlbUludGVyZmFjZS5oPgogCi0jaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVJbWFnZVJlbmRlcmVy
Lmg+Ci0KLSNpbXBvcnQgPFdlYktpdC9XZWJJbWFnZURhdGEuaD4KLQogLy8gRm9yd2FyZCBkZWNs
YXJhdGlvbnMgb2YgaW50ZXJuYWwgbWV0aG9kcy4KIEBpbnRlcmZhY2UgV2ViSW1hZ2VSZW5kZXJl
ciAoV2ViSW50ZXJuYWwpCiAtICh2b2lkKV9zdGFydE9yQ29udGludWVBbmltYXRpb25JZk5lY2Vz
c2FyeTsK
</data>
<flag name="review"
          id="844"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>