<?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>5172</bug_id>
          
          <creation_ts>2005-09-28 14:07:48 -0700</creation_ts>
          <short_desc>Bidi algorithm not applied correctly across line breaks</short_desc>
          <delta_ts>2005-11-28 08:24:49 -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>Layout and Rendering</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>VERIFIED</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>
          <dependson>5532</dependson>
          <blocked>5840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>20851</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2005-09-28 14:07:48 -0700</bug_when>
    <thetext>Summary: WebKit sometimes assigns incorrect bidi embedding levels to text runs immediately before 
or immediately after a line break, resulting in incorrect line order.

To reproduce: Open the testcase in Safari.

Expected: the Test column to match the Reference column. Firefox 1.0.4 behaves as expected.

Actual: in rows 2, 4 and 10, the columns mismatch.

Analysis: When a line ends, it is sometimes impossible to know the embedding level for the last run in 
the line without looking ahead into the next line. When a line begins, the embedding level of the first 
run may depend on the last run in the previous line. Currently, WebKit treats each line essentially as a 
separate paragraph, using the embedding direction for sor and eor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>20853</commentid>
    <comment_count>1</comment_count>
      <attachid>4083</attachid>
    <who name="">mitz</who>
    <bug_when>2005-09-28 14:08:19 -0700</bug_when>
    <thetext>Created attachment 4083
testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21028</commentid>
    <comment_count>2</comment_count>
    <who name="">mitz</who>
    <bug_when>2005-09-30 16:07:37 -0700</bug_when>
    <thetext>Using &lt;br/&gt; to force line breaks in the testcase was a bad idea, since IE and NSTextView actually treat line 
separators like paragraph separators in terms of the bidi algorithm. Firefox treats them as whitespace 
(which is according to spec). WebKit should probably match IE and the rest of OS X. I should make a 
testcase where lines wrap naturally.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21029</commentid>
    <comment_count>3</comment_count>
      <attachid>4121</attachid>
    <who name="">mitz</who>
    <bug_when>2005-09-30 16:21:16 -0700</bug_when>
    <thetext>Created attachment 4121
better testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23699</commentid>
    <comment_count>4</comment_count>
      <attachid>4593</attachid>
    <who name="">mitz</who>
    <bug_when>2005-11-04 08:24:58 -0800</bug_when>
    <thetext>Created attachment 4593
work in progress

This doesn&apos;t address partial relayout (the bidi status and context at the end
of each line need to be cached for that to work) and currently treats &lt;br&gt; as
whitespace.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23762</commentid>
    <comment_count>5</comment_count>
      <attachid>4607</attachid>
    <who name="">mitz</who>
    <bug_when>2005-11-05 09:40:01 -0800</bug_when>
    <thetext>Created attachment 4607
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23763</commentid>
    <comment_count>6</comment_count>
      <attachid>4608</attachid>
    <who name="">mitz</who>
    <bug_when>2005-11-05 10:11:47 -0800</bug_when>
    <thetext>Created attachment 4608
Alternative patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23766</commentid>
    <comment_count>7</comment_count>
      <attachid>4608</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-11-05 17:22:09 -0800</bug_when>
    <thetext>Comment on attachment 4608
Alternative patch

I would suggest using SharedPtr for m_lineBreakContext and for the context
field of BidiState.

This patch looks greate otherwise, although I think the real proof is in the
test cases, r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23781</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-11-06 13:51:48 -0800</bug_when>
    <thetext>+inline bool operator!=(const BidiStatus&amp; status1, const BidiStatus&amp; status2)
+{
+    return status1.eor != status2.eor || status1.last != status2.last || status1.lastStrong != 
status2.lastStrong;
+}
+

Couldn&apos;t this just be implemented in terms of the == operator?

Also, this patch increases the size of all root lines by 4 bytes.  Is there any way to avoid this?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23782</commentid>
    <comment_count>9</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-11-06 13:53:48 -0800</bug_when>
    <thetext>+            if (previousLineBrokeCleanly) {
+                // A deviation from the Unicode Bidi Algorithm in order to match
+                // Mac OS X text and WinIE: a hard line break resets bidi state.

Did you verify this with both preformatted text newlines as well as brs?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23783</commentid>
    <comment_count>10</comment_count>
    <who name="">mitz</who>
    <bug_when>2005-11-06 14:03:16 -0800</bug_when>
    <thetext>(In reply to comment #8)

&gt; Couldn&apos;t this just be implemented in terms of the == operator?

Not when partial relayout takes place: you pick up the context from the last clean line and during 
relayout of subsequent lines you need to push a new context onto the stack, then you reach the first 
clean line with a context that&apos;s different pointer-wise from the saved context for that line, but it&apos;s 
actually the same. The &quot;Proposed patch&quot; uses pointer comparison (that&apos;s the only difference between it 
and the alternative). It might save a little on the comparisons but cost more in doing unnecessary 
relayout of all the lines up to the end of the block.

&gt;  Also, this patch increases the size of all root lines by 4 bytes.  Is there any way to avoid this?

I counted more than 4 bytes (the BidiContext* and the BidiStatus which is at least 3 bytes). As far as I 
can tell, all of this is necessary if you want to start relayout in the middle.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23784</commentid>
    <comment_count>11</comment_count>
    <who name="">mitz</who>
    <bug_when>2005-11-06 14:13:08 -0800</bug_when>
    <thetext>(In reply to comment #9)

&gt; Did you verify this with both preformatted text newlines as well as brs?

Oops, WinIE does that with preformatted text newlines but the patch doesn&apos;t. I expected 
previousLineBrokeCleanly to be true in that case as well but it&apos;s not :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23785</commentid>
    <comment_count>12</comment_count>
    <who name="">mitz</who>
    <bug_when>2005-11-06 14:35:51 -0800</bug_when>
    <thetext>(In reply to comment #8)

Oops again! In comment #10 I answered a totally different question from what I was asked!

Yes, != can be implemented in terms of ==. I just followed the BidiIterator != example.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23787</commentid>
    <comment_count>13</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-11-06 15:57:21 -0800</bug_when>
    <thetext>Can you not infer the appropriate information based off the cached line break object?  Does that not give 
you enough information to effectively recover the bidi state?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23788</commentid>
    <comment_count>14</comment_count>
    <who name="">mitz</who>
    <bug_when>2005-11-06 16:14:33 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Can you not infer the appropriate information based off the cached line break object?  Does that not 
give 
&gt; you enough information to effectively recover the bidi state?

No. The stack of embedding levels at the end of the line depends on all the embedding changes prior to 
that point. Also, the last strong character may have appeared before the last object on the line, and the 
direction at eor may not be possible to determine based on that object alone.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23789</commentid>
    <comment_count>15</comment_count>
      <attachid>4616</attachid>
    <who name="">mitz</who>
    <bug_when>2005-11-06 16:29:07 -0800</bug_when>
    <thetext>Created attachment 4616
Revised patch

Changed to treat newlines in preformatted text like brs, redefined != using ==,
and changed to use SharedPointer where Darin has suggested doing so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23790</commentid>
    <comment_count>16</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-11-06 17:22:36 -0800</bug_when>
    <thetext>Hmmm, actually I&apos;m a bit surprised I didn&apos;t set &quot;previousLineBrokeCleanly&quot; in the preformatted text case.  
That is probably worth investigating.  The variable name certainly sounds like something you&apos;d expect to 
be set in the preformatted text case as well.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>23826</commentid>
    <comment_count>17</comment_count>
      <attachid>4616</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-11-08 15:17:06 -0800</bug_when>
    <thetext>Comment on attachment 4616
Revised patch

r=me, i encourage you to test with all five white-space values and with br and
\n (so 10 total combinations).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24634</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-27 13:28:12 -0800</bug_when>
    <thetext>*** Bug 5840 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>4083</attachid>
            <date>2005-09-28 14:08:19 -0700</date>
            <delta_ts>2005-09-30 16:21:16 -0700</delta_ts>
            <desc>testcase</desc>
            <filename>bidiLineBreaks.html</filename>
            <type>text/html</type>
            <size>2251</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs
Ly9FTiIgCiJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgo8aHRtbD4KPGhl
YWQ+Cjx0aXRsZT5CaWRpIGxheW91dCBhY3Jvc3MgbGluZSBicmVhazwvdGl0bGU+CjxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyI+CiAgICB0ZCBwIHsgbWFyZ2luOjA7IH0KICAgIC5vdmVycmlkZSBwIHsg
dW5pY29kZS1iaWRpOmJpZGktb3ZlcnJpZGU7IGRpcmVjdGlvbjpsdHI7IH0KICAgIHRkIHsgYm9y
ZGVyOiAxcHggc29saWQgZ3JlZW47IHBhZGRpbmc6MnB4OyB9Cjwvc3R5bGU+PC9oZWFkPgo8Ym9k
eT4KPHA+ClRoZSBUZXN0IGNvbHVtbiBzaG91bGQgbWF0Y2ggdGhlIFJlZmVyZW5jZSBjb2x1bW4u
CjwvcD4KPHRhYmxlIHN0eWxlPSJib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ij4KPHRyPgogICAg
PHRkIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7IGJvcmRlci1sZWZ0Om5vbmU7Ij48L3RkPgogICAg
PHRkIHN0eWxlPSJ3aWR0aDo0LjVlbTsiPlRlc3Q8L3RkPgogICAgPHRkIHN0eWxlPSJ3aWR0aDo0
LjVlbTsiPlJlZmVyZW5jZTwvdGQ+CjwvdHI+Cjx0cj4KICAgIDx0ZD4xPC90ZD4KICAgIDx0ZCBz
dHlsZT0iZGlyZWN0aW9uOmx0ciI+CiAgICAmI3gwNWQwOy48YnIvPmIKICAgIDwvdGQ+CiAgICA8
dGQgY2xhc3M9Im92ZXJyaWRlIj4KICAgIDxwPiYjeDA1ZDA7LjwvcD4KICAgIDxwPmI8L3A+CiAg
ICA8L3RkPgo8L3RyPgo8dHI+CiAgICA8dGQ+MjwvdGQ+CiAgICA8dGQgc3R5bGU9ImRpcmVjdGlv
bjpsdHIiPgogICAgJiN4MDVkMDsuPGJyLz4mI3gwNWQxOwogICAgPC90ZD4KICAgIDx0ZCBjbGFz
cz0ib3ZlcnJpZGUiPgogICAgPHA+LiYjeDA1ZDA7PC9wPgogICAgPHA+JiN4MDVkMTs8L3A+CiAg
ICA8L3RkPgo8L3RyPgo8dHI+CiAgICA8dGQ+MzwvdGQ+CiAgICA8dGQgc3R5bGU9ImRpcmVjdGlv
bjpydGw7IHRleHQtYWxpZ246bGVmdCI+CiAgICAmI3gwNWQwOzxici8+MSBiCiAgICA8L3RkPgog
ICAgPHRkIGNsYXNzPSJvdmVycmlkZSI+CiAgICA8cD4mI3gwNWQwOzwvcD4KICAgIDxwPmIgMTwv
cD4KICAgIDwvdGQ+CjwvdHI+Cjx0cj4KICAgIDx0ZD40PC90ZD4KICAgIDx0ZCBzdHlsZT0iZGly
ZWN0aW9uOnJ0bDsgdGV4dC1hbGlnbjpsZWZ0Ij4KICAgIGE8YnIvPjEgYgogICAgPC90ZD4KICAg
IDx0ZCBjbGFzcz0ib3ZlcnJpZGUiPgogICAgPHA+YTwvcD4KICAgIDxwPjEgYjwvcD4KICAgIDwv
dGQ+CjwvdHI+Cjx0cj4KICAgIDx0ZD41PC90ZD4KICAgIDx0ZCBzdHlsZT0iZGlyZWN0aW9uOnJ0
bDsgdGV4dC1hbGlnbjpsZWZ0Ij4KICAgICYjeDA1ZDA7PGJyLz4xICYjeDA1ZDE7CiAgICA8L3Rk
PgogICAgPHRkIGNsYXNzPSJvdmVycmlkZSI+CiAgICA8cD4mI3gwNWQwOzwvcD4KICAgIDxwPiYj
eDA1ZDE7IDE8L3A+CiAgICA8L3RkPgo8L3RyPgo8dHI+CiAgICA8dGQ+NjwvdGQ+CiAgICA8dGQg
c3R5bGU9ImRpcmVjdGlvbjpydGw7IHRleHQtYWxpZ246bGVmdCI+CiAgICBhPGJyLz4xICYjeDA1
ZDE7CiAgICA8L3RkPgogICAgPHRkIGNsYXNzPSJvdmVycmlkZSI+CiAgICA8cD5hPC9wPgogICAg
PHA+JiN4MDVkMTsgMTwvcD4KICAgIDwvdGQ+CjwvdHI+Cjx0cj4KICAgIDx0ZD43PC90ZD4KICAg
IDx0ZCBzdHlsZT0iZGlyZWN0aW9uOmx0ciI+CmEgKDxici8+XSBiCiAgICA8L3RkPgogICAgPHRk
IGNsYXNzPSJvdmVycmlkZSI+CjxwPmEgKDwvcD4KPHA+XSBiPC9wPgogICAgPC90ZD4KPC90cj4K
PHRyPgogICAgPHRkPjg8L3RkPgogICAgPHRkIHN0eWxlPSJkaXJlY3Rpb246bHRyIj4KJiN4MDVk
MDsgKDxici8+XSBiCiAgICA8L3RkPgogICAgPHRkIGNsYXNzPSJvdmVycmlkZSI+CjxwPiYjeDA1
ZDA7ICg8L3A+CjxwPl0gYjwvcD4KICAgIDwvdGQ+CjwvdHI+Cjx0cj4KICAgIDx0ZD45PC90ZD4K
ICAgIDx0ZCBzdHlsZT0iZGlyZWN0aW9uOmx0ciI+CmEgKDxici8+XSAmI3gwNWQxOwogICAgPC90
ZD4KICAgIDx0ZCBjbGFzcz0ib3ZlcnJpZGUiPgo8cD5hICg8L3A+CjxwPl0gJiN4MDVkMTs8L3A+
CiAgICA8L3RkPgo8L3RyPgo8dHI+CiAgICA8dGQ+MTA8L3RkPgogICAgPHRkIHN0eWxlPSJkaXJl
Y3Rpb246bHRyIj4KJiN4MDVkMDsgKDxici8+XSAmI3gwNWQxOwogICAgPC90ZD4KICAgIDx0ZCBj
bGFzcz0ib3ZlcnJpZGUiPgo8cD4pICYjeDA1ZDA7PC9wPgo8cD4mI3gwNWQxOyBbPC9wPgogICAg
PC90ZD4KPC90cj4KPC90YWJsZT4KPC9ib2R5Pg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>4121</attachid>
            <date>2005-09-30 16:21:16 -0700</date>
            <delta_ts>2005-09-30 16:21:56 -0700</delta_ts>
            <desc>better testcase</desc>
            <filename>bidiLineBreaksSoft.html</filename>
            <type>text/html</type>
            <size>3062</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs
Ly9FTiIgCiJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPgo8aHRtbD4KPGhl
YWQ+Cjx0aXRsZT5CaWRpIGxheW91dCBhY3Jvc3MgbGluZSBicmVhazwvdGl0bGU+CjxzdHlsZSB0
eXBlPSJ0ZXh0L2NzcyI+CiAgICB0ZCBwIHsgbWFyZ2luOjA7IH0KICAgIC5vdmVycmlkZSBwIHsg
dW5pY29kZS1iaWRpOmJpZGktb3ZlcnJpZGU7IGRpcmVjdGlvbjpsdHI7IH0KICAgIHRkIHsgYm9y
ZGVyOiAxcHggc29saWQgZ3JlZW47IHBhZGRpbmc6MnB4OyB9Cjwvc3R5bGU+PC9oZWFkPgo8Ym9k
eT4KPHA+ClRoZSBUIGNvbHVtbiBzaG91bGQgbWF0Y2ggdGhlIFIgY29sdW1uLiBUaGUgSCBjb2x1
bW5zIHVzZXMgJmx0O2JyLyZndDsgdG8gZm9yY2UgbGluZSBicmVha3MuCjwvcD4KPHRhYmxlIHN0
eWxlPSJib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7IGZvbnQtZmFtaWx5OidMdWNpZGEgR3JhbmRl
JzsgZm9udC1zaXplOjE2cHg7Ij4KPHRyPgogICAgPHRkIHN0eWxlPSJib3JkZXItdG9wOm5vbmU7
IGJvcmRlci1sZWZ0Om5vbmU7Ij48L3RkPgogICAgPHRkIHN0eWxlPSJ3aWR0aDoyLjVlbTsiPkg8
L3RkPgogICAgPHRkIHN0eWxlPSJ3aWR0aDoxLjhlbTsiPlQ8L3RkPgogICAgPHRkIHN0eWxlPSJ3
aWR0aDoyLjVlbTsiPlI8L3RkPgo8L3RyPgo8dHI+CiAgICA8dGQ+MTwvdGQ+CiAgICA8dGQgc3R5
bGU9ImRpcmVjdGlvbjpsdHIiPgogICAgJiN4MDVkMDsuPGJyLz5iCiAgICA8L3RkPgogICAgPHRk
IHN0eWxlPSJkaXJlY3Rpb246bHRyIj4KICAgICYjeDA1ZDA7LiBiCiAgICA8L3RkPgogICAgPHRk
IGNsYXNzPSJvdmVycmlkZSI+CiAgICA8cD4mI3gwNWQwOy48L3A+CiAgICA8cD5iPC9wPgogICAg
PC90ZD4KPC90cj4KPHRyPgogICAgPHRkPjI8L3RkPgogICAgPHRkIHN0eWxlPSJkaXJlY3Rpb246
bHRyIj4KICAgICYjeDA1ZDA7Ljxici8+JiN4MDVkMTsKICAgIDwvdGQ+CiAgICA8dGQgc3R5bGU9
ImRpcmVjdGlvbjpsdHIiPgogICAgJiN4MDVkMDsuICYjeDA1ZDE7CiAgICA8L3RkPgogICAgPHRk
IGNsYXNzPSJvdmVycmlkZSI+CiAgICA8cD4uJiN4MDVkMDs8L3A+CiAgICA8cD4mI3gwNWQxOzwv
cD4KICAgIDwvdGQ+CjwvdHI+Cjx0cj4KICAgIDx0ZD4zPC90ZD4KICAgIDx0ZCBzdHlsZT0iZGly
ZWN0aW9uOnJ0bDsgdGV4dC1hbGlnbjpsZWZ0Ij4KICAgICYjeDA1ZDA7JiN4MDVkMDs8YnIvPjEg
YgogICAgPC90ZD4KICAgIDx0ZCBzdHlsZT0iZGlyZWN0aW9uOnJ0bDsgdGV4dC1hbGlnbjpsZWZ0
Ij4KICAgICYjeDA1ZDA7JiN4MDVkMDsgMSBiCiAgICA8L3RkPgogICAgPHRkIGNsYXNzPSJvdmVy
cmlkZSI+CiAgICA8cD4mI3gwNWQwOyYjeDA1ZDA7PC9wPgogICAgPHA+YiAxPC9wPgogICAgPC90
ZD4KPC90cj4KPHRyPgogICAgPHRkPjQ8L3RkPgogICAgPHRkIHN0eWxlPSJkaXJlY3Rpb246cnRs
OyB0ZXh0LWFsaWduOmxlZnQiPgogICAgYWE8YnIvPjEgYgogICAgPC90ZD4KICAgIDx0ZCBzdHls
ZT0iZGlyZWN0aW9uOnJ0bDsgdGV4dC1hbGlnbjpsZWZ0Ij4KICAgIGFhIDEgYgogICAgPC90ZD4K
ICAgIDx0ZCBjbGFzcz0ib3ZlcnJpZGUiPgogICAgPHA+YWE8L3A+CiAgICA8cD4xIGI8L3A+CiAg
ICA8L3RkPgo8L3RyPgo8dHI+CiAgICA8dGQ+NTwvdGQ+CiAgICA8dGQgc3R5bGU9ImRpcmVjdGlv
bjpydGw7IHRleHQtYWxpZ246bGVmdCI+CiAgICAmI3gwNWQwOyYjeDA1ZDA7PGJyLz4xICYjeDA1
ZDE7CiAgICA8L3RkPgogICAgPHRkIHN0eWxlPSJkaXJlY3Rpb246cnRsOyB0ZXh0LWFsaWduOmxl
ZnQiPgogICAgJiN4MDVkMDsmI3gwNWQwOyAxICYjeDA1ZDE7CiAgICA8L3RkPgogICAgPHRkIGNs
YXNzPSJvdmVycmlkZSI+CiAgICA8cD4mI3gwNWQwOyYjeDA1ZDA7PC9wPgogICAgPHA+JiN4MDVk
MTsgMTwvcD4KICAgIDwvdGQ+CjwvdHI+Cjx0cj4KICAgIDx0ZD42PC90ZD4KICAgIDx0ZCBzdHls
ZT0iZGlyZWN0aW9uOnJ0bDsgdGV4dC1hbGlnbjpsZWZ0Ij4KICAgIGFhPGJyLz4xICYjeDA1ZDE7
CiAgICA8L3RkPgogICAgPHRkIHN0eWxlPSJkaXJlY3Rpb246cnRsOyB0ZXh0LWFsaWduOmxlZnQi
PgogICAgYWEgMSAmI3gwNWQxOwogICAgPC90ZD4KICAgIDx0ZCBjbGFzcz0ib3ZlcnJpZGUiPgog
ICAgPHA+YWE8L3A+CiAgICA8cD4mI3gwNWQxOyAxPC9wPgogICAgPC90ZD4KPC90cj4KPHRyPgog
ICAgPHRkPjc8L3RkPgogICAgPHRkIHN0eWxlPSJkaXJlY3Rpb246bHRyIj4KYSAoPGJyLz5dIGIK
ICAgIDwvdGQ+CiAgICA8dGQgc3R5bGU9ImRpcmVjdGlvbjpsdHIiPgphICggXSBiCiAgICA8L3Rk
PgogICAgPHRkIGNsYXNzPSJvdmVycmlkZSI+CjxwPmEgKDwvcD4KPHA+XSBiPC9wPgogICAgPC90
ZD4KPC90cj4KPHRyPgogICAgPHRkPjg8L3RkPgogICAgPHRkIHN0eWxlPSJkaXJlY3Rpb246bHRy
Ij4KJiN4MDVkMDsgKDxici8+XSBiCiAgICA8L3RkPgogICAgPHRkIHN0eWxlPSJkaXJlY3Rpb246
bHRyIj4KJiN4MDVkMDsgKCBdIGIKICAgIDwvdGQ+CiAgICA8dGQgY2xhc3M9Im92ZXJyaWRlIj4K
PHA+JiN4MDVkMDsgKDwvcD4KPHA+XSBiPC9wPgogICAgPC90ZD4KPC90cj4KPHRyPgogICAgPHRk
Pjk8L3RkPgogICAgPHRkIHN0eWxlPSJkaXJlY3Rpb246bHRyIj4KYSAoPGJyLz5dICYjeDA1ZDE7
CiAgICA8L3RkPgogICAgPHRkIHN0eWxlPSJkaXJlY3Rpb246bHRyIj4KYSAoIF0gJiN4MDVkMTsK
ICAgIDwvdGQ+CiAgICA8dGQgY2xhc3M9Im92ZXJyaWRlIj4KPHA+YSAoPC9wPgo8cD5dICYjeDA1
ZDE7PC9wPgogICAgPC90ZD4KPC90cj4KPHRyPgogICAgPHRkPjEwPC90ZD4KICAgIDx0ZCBzdHls
ZT0iZGlyZWN0aW9uOmx0ciI+CiYjeDA1ZDA7ICg8YnIvPl0gJiN4MDVkMTsKICAgIDwvdGQ+CiAg
ICA8dGQgc3R5bGU9ImRpcmVjdGlvbjpsdHIiPgomI3gwNWQwOyAoIF0gJiN4MDVkMTsKICAgIDwv
dGQ+CiAgICA8dGQgY2xhc3M9Im92ZXJyaWRlIj4KPHA+KSAmI3gwNWQwOzwvcD4KPHA+JiN4MDVk
MTsgWzwvcD4KICAgIDwvdGQ+CjwvdHI+CjwvdGFibGU+CjwvYm9keT4=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4593</attachid>
            <date>2005-11-04 08:24:58 -0800</date>
            <delta_ts>2005-11-05 09:40:01 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>5172_r1.patch</filename>
            <type>text/plain</type>
            <size>23305</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpZGkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2to
dG1sL3JlbmRlcmluZy9iaWRpLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNTYKZGlmZiAt
cCAtdSAtcjEuMTU2IGJpZGkuY3BwCi0tLSBiaWRpLmNwcAkzIE5vdiAyMDA1IDIzOjUzOjU3IC0w
MDAwCTEuMTU2CisrKyBiaWRpLmNwcAk0IE5vdiAyMDA1IDE2OjE0OjM4IC0wMDAwCkBAIC02Niw3
ICs2Niw3IEBAIHN0cnVjdCBCaWRpU3RhdHVzIHsKIH07CiAgICAgCiBzdHJ1Y3QgQmlkaVN0YXRl
IHsKLSAgICBCaWRpU3RhdGUoKSA6IGNvbnRleHQoMCksIGRpcihRQ2hhcjo6RGlyT04pLCBhZGp1
c3RFbWJlZGRpbmcoZmFsc2UpIHt9CisgICAgQmlkaVN0YXRlKCkgOiBjb250ZXh0KDApLCBkaXIo
UUNoYXI6OkRpck9OKSwgYWRqdXN0RW1iZWRkaW5nKGZhbHNlKSwgcmVhY2hlZEVuZE9mTGluZShm
YWxzZSkge30KICAgICAKICAgICBCaWRpSXRlcmF0b3Igc29yOwogICAgIEJpZGlJdGVyYXRvciBl
b3I7CkBAIC03Niw2ICs3Niw4IEBAIHN0cnVjdCBCaWRpU3RhdGUgewogICAgIEJpZGlTdGF0dXMg
c3RhdHVzOwogICAgIFFDaGFyOjpEaXJlY3Rpb24gZGlyOwogICAgIGJvb2wgYWRqdXN0RW1iZWRk
aW5nOworICAgIEJpZGlJdGVyYXRvciBlbmRPZkxpbmU7CisgICAgYm9vbCByZWFjaGVkRW5kT2ZM
aW5lOwogfTsKIAogLy8gVXNlZCB0byB0cmFjayBhIGxpc3Qgb2YgY2hhaW5lZCBiaWRpIHJ1bnMu
CkBAIC0zMjksNyArMzMxLDcgQEAgaW5saW5lIHZvaWQgQmlkaUl0ZXJhdG9yOjppbmNyZW1lbnQo
QmlkaQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG9iai0+aXNUZXh0KCkpIHsKICAgICAgICAg
cG9zKys7Ci0gICAgICAgIGlmKHBvcyA+PSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG9iaikt
PnN0cmluZ0xlbmd0aCgpKSB7CisgICAgICAgIGlmIChwb3MgPj0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dCAqPihvYmopLT5zdHJpbmdMZW5ndGgoKSkgewogICAgICAgICAgICAgb2JqID0gYmlkaU5l
eHQoYmxvY2ssIG9iaiwgYmlkaSk7CiAgICAgICAgICAgICBwb3MgPSAwOwogICAgICAgICB9CkBA
IC01NjUsMTQgKzU2NywxOSBAQCBzdGF0aWMgdm9pZCBhcHBlbmRSdW4oQmlkaVN0YXRlICZiaWRp
KQogCiAgICAgaW50IHN0YXJ0ID0gYmlkaS5zb3IucG9zOwogICAgIFJlbmRlck9iamVjdCAqb2Jq
ID0gYmlkaS5zb3Iub2JqOwotICAgIHdoaWxlIChvYmogJiYgb2JqICE9IGJpZGkuZW9yLm9iaikg
eworICAgIHdoaWxlIChvYmogJiYgb2JqICE9IGJpZGkuZW9yLm9iaiAmJiBvYmogIT0gYmlkaS5l
bmRPZkxpbmUub2JqKSB7CiAgICAgICAgIGFwcGVuZFJ1bnNGb3JPYmplY3Qoc3RhcnQsIG9iai0+
bGVuZ3RoKCksIG9iaiwgYmlkaSk7ICAgICAgICAKICAgICAgICAgc3RhcnQgPSAwOwogICAgICAg
ICBvYmogPSBiaWRpTmV4dChiaWRpLnNvci5ibG9jaywgb2JqLCBiaWRpKTsKICAgICB9CiAgICAg
aWYgKG9iaikgeworICAgICAgICB1bnNpZ25lZCBwb3MgPSBvYmogPT0gYmlkaS5lb3Iub2JqID8g
YmlkaS5lb3IucG9zIDogVUlOVF9NQVg7CisgICAgICAgIGlmIChvYmogPT0gYmlkaS5lbmRPZkxp
bmUub2JqICYmIGJpZGkuZW5kT2ZMaW5lLnBvcyA8PSBwb3MpIHsKKyAgICAgICAgICAgIGJpZGku
cmVhY2hlZEVuZE9mTGluZSA9IHRydWU7CisgICAgICAgICAgICBwb3MgPSBiaWRpLmVuZE9mTGlu
ZS5wb3M7CisgICAgICAgIH0KICAgICAgICAgLy8gSXQncyBPSyB0byBhZGQgcnVucyBmb3IgemVy
by1sZW5ndGggUmVuZGVyT2JqZWN0cywganVzdCBkb24ndCBtYWtlIHRoZSBydW4gbGFyZ2VyIHRo
YW4gaXQgc2hvdWxkIGJlCi0gICAgICAgIGludCBlbmQgPSBvYmotPmxlbmd0aCgpID8gYmlkaS5l
b3IucG9zICsgMSA6IDA7CisgICAgICAgIGludCBlbmQgPSBvYmotPmxlbmd0aCgpID8gcG9zKzEg
OiAwOwogICAgICAgICBhcHBlbmRSdW5zRm9yT2JqZWN0KHN0YXJ0LCBlbmQsIG9iaiwgYmlkaSk7
CiAgICAgfQogICAgIApAQCAtODczLDcgKzg4MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1
dGVIb3Jpem9udGFsUG9zaXQKICAgICAgICAgY2FzZSBDRU5URVI6CiAgICAgICAgIGNhc2UgS0hU
TUxfQ0VOVEVSOgogICAgICAgICAgICAgaW50IHhkID0gKGF2YWlsYWJsZVdpZHRoIC0gdG90V2lk
dGgpLzI7Ci0gICAgICAgICAgICB4ICs9IHhkID4wID8geGQgOiAwOworICAgICAgICAgICAgeCAr
PSB4ZCA+IDAgPyB4ZCA6IDA7CiAgICAgICAgICAgICBudW1TcGFjZXMgPSAwOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQpAQCAtOTI2LDcgKzkzMyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNv
bXB1dGVWZXJ0aWNhbFBvc2l0aW8KICAgICAgICAgCiAgICAgLy8gTm93IG1ha2Ugc3VyZSB3ZSBw
bGFjZSByZXBsYWNlZCByZW5kZXIgb2JqZWN0cyBjb3JyZWN0bHkuCiAgICAgZm9yIChCaWRpUnVu
KiByID0gc0ZpcnN0QmlkaVJ1bjsgcjsgciA9IHItPm5leHRSdW4pIHsKLSAgICAgICAgaWYgKCFy
LT5ib3gpIGNvbnRpbnVlOyAvLyBTa2lwIHJ1bnMgd2l0aCBubyBsaW5lIGJveGVzLgorICAgICAg
ICBpZiAoIXItPmJveCkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBTa2lwIHJ1bnMgd2l0aCBu
byBsaW5lIGJveGVzLgogCiAgICAgICAgIC8vIEFsaWduIHBvc2l0aW9uZWQgYm94ZXMgd2l0aCB0
aGUgdG9wIG9mIHRoZSBsaW5lIGJveC4gIFRoaXMgaXMKICAgICAgICAgLy8gYSByZWFzb25hYmxl
IGFwcHJveGltYXRpb24gb2YgYW4gYXBwcm9wcmlhdGUgeSBwb3NpdGlvbi4KQEAgLTk1MiwyNSAr
OTYwLDI2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAKICAgICBz
TGFzdEJpZGlSdW4gPSAwOwogICAgIHNCaWRpUnVuQ291bnQgPSAwOwogCisgICAgYXNzZXJ0KGJp
ZGkuZGlyID09IFFDaGFyOjpEaXJPTik7CisKICAgICBlbXB0eVJ1biA9IHRydWU7Ci0gICAgYmlk
aS5kaXIgPSBRQ2hhcjo6RGlyT047Ci0gICAgYmlkaS5zdGF0dXMuZW9yID0gYmlkaS5jb250ZXh0
LT5kaXI7CisKICAgICBiaWRpLmVvci5vYmogPSAwOwogCiAgICAgbnVtU3BhY2VzID0gMDsKIAog
ICAgIGJpZGkuY3VycmVudCA9IHN0YXJ0OwogICAgIGJpZGkubGFzdCA9IGJpZGkuY3VycmVudDsK
LSAgICBib29sIGF0RW5kID0gZmFsc2U7CisgICAgYm9vbCBwYXN0RW5kID0gZmFsc2U7CisgICAg
QmlkaVN0YXRlIHN0YXRlQXRFbmQ7CiAKICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICBRQ2hh
cjo6RGlyZWN0aW9uIGRpckN1cnJlbnQ7Ci0gICAgICAgIGlmIChhdEVuZCkgeworICAgICAgICBp
ZiAocGFzdEVuZCAmJiBiaWRpLmN1cnJlbnQuYXRFbmQoKSkgewogICAgICAgICAgICAgLy9rZERl
YnVnKDYwNDEpIDw8ICJhdEVuZCIgPDwgZW5kbDsKICAgICAgICAgICAgIEJpZGlDb250ZXh0ICpj
ID0gYmlkaS5jb250ZXh0OwotICAgICAgICAgICAgaWYgKCBiaWRpLmN1cnJlbnQuYXRFbmQoKSkK
LSAgICAgICAgICAgICAgICB3aGlsZSAoIGMtPnBhcmVudCApCi0gICAgICAgICAgICAgICAgICAg
IGMgPSBjLT5wYXJlbnQ7CisgICAgICAgICAgICB3aGlsZSAoYy0+cGFyZW50KQorICAgICAgICAg
ICAgICAgIGMgPSBjLT5wYXJlbnQ7CiAgICAgICAgICAgICBkaXJDdXJyZW50ID0gYy0+ZGlyOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZGlyQ3VycmVudCA9IGJpZGkuY3VycmVudC5k
aXJlY3Rpb24oKTsKQEAgLTEwMDEsMTEgKzEwMTAsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRp
UmVvcmRlckxpbmUoY29uc3QgCiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQU46CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5sYXN0ICE9IFFDaGFyOjpEaXJFTiB8
fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFFDaGFyOjpEaXJMKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9
IFFDaGFyOjpEaXJMOwotICAgICAgICAgICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyTDoK
LSAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7Ci0gICAgICAgICAg
ICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFFDaGFyOjpEaXJMOwogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFUzoKICAgICAgICAg
ICAgICAgICBjYXNlIFFDaGFyOjpEaXJFVDoKQEAgLTEwMzcsMzQgKzEwNDMsMzEgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpclI7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGlyTCkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGFzdCBzdHVmZiB0YWtlcyBlbWJlZGRpbmcgZGly
Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIgPT0gUUNoYXI6
OkRpckwgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGlyTCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFy
OjpEaXJSOyAKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKGJpZGkuc3RhdHVzLmVvciAh
PSBRQ2hhcjo6RGlyTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9sYXN0IHN0dWZmIHRh
a2VzIGVtYmVkZGluZyBkaXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRl
eHQtPmRpciAhPSBRQ2hhcjo6RGlyTCAmJiBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFFDaGFy
OjpEaXJMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxh
c3Q7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyUjsgCiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlk
aSk7IAogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJpZGkuZW9y
ID0gYmlkaS5jdXJyZW50OwotICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBR
Q2hhcjo6RGlyTDsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi
aWRpLmVvciA9IGJpZGkuY3VycmVudDsKKyAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFFD
aGFyOjpEaXJMOwogICAgICAgICAgICAgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9IFFDaGFyOjpE
aXJMOwogICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyTDsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTDoKICAgICAgICAgY2FzZSBRQ2hhcjo6RGly
UjoKLSAgICAgICAgICAgIHN3aXRjaChiaWRpLnN0YXR1cy5sYXN0KSB7CisgICAgICAgICAgICBz
d2l0Y2ggKGJpZGkuc3RhdHVzLmxhc3QpIHsKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpE
aXJMOgogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVOOgogICAgICAgICAgICAgICAg
IGNhc2UgUUNoYXI6OkRpckFOOgogICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7
CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyUjoKICAgICAgICAgICAgICAgICBjYXNl
IFFDaGFyOjpEaXJBTDoKLSAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJl
bnQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUUNo
YXI6OkRpckVTOgogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVUOgpAQCAtMTA3Niwy
MCArMTA3OSwxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAg
ICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyT046CiAgICAgICAgICAgICAgICAgICAgIGlm
IChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpclIgJiYgYmlkaS5zdGF0dXMuZW9yICE9IFFD
aGFyOjpEaXJBTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy9sYXN0IHN0dWZmIHRha2Vz
IGVtYmVkZGluZyBkaXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJpZGkuY29udGV4dC0+
ZGlyID09IFFDaGFyOjpEaXJSIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNoYXI6OkRp
clIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9u
ZyA9PSBRQ2hhcjo6RGlyQUwpIHsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKGJpZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5j
dXJyZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJMOyAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpciAhPSBRQ2hhcjo6RGlyUiAmJiBiaWRpLnN0YXR1
cy5sYXN0U3Ryb25nICE9IFFDaGFyOjpEaXJSIAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gUUNoYXI6OkRpckFMKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJpZGkuZGlyID0gUUNoYXI6OkRpckw7IAogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9y
ID0gYmlkaS5jdXJyZW50OworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkp
OworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7CiAgICAgICAgICAgICBiaWRpLnN0
YXR1cy5lb3IgPSBRQ2hhcjo6RGlyUjsKICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3RTdHJv
bmcgPSBkaXJDdXJyZW50OwogICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyUjsKQEAg
LTEwOTgsODcgKzEwOTgsNzUgQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJMaW5lKGNv
bnN0IAogICAgICAgICAgICAgLy8gd2VhayB0eXBlczoKIAogICAgICAgICBjYXNlIFFDaGFyOjpE
aXJFTjoKLSAgICAgICAgICAgIGlmICghKGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNoYXI6
OkRpckFMKSkgeworICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gUUNo
YXI6OkRpckFMKSB7CiAgICAgICAgICAgICAgICAgLy8gaWYgbGFzdCBzdHJvbmcgd2FzIEFMIGNo
YW5nZSBFTiB0byBBTgogICAgICAgICAgICAgICAgIHN3aXRjaCAoYmlkaS5zdGF0dXMubGFzdCkg
ewogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFVDoKLQkJCWlmIChiaWRpLnN0
YXR1cy5sYXN0U3Ryb25nID09IFFDaGFyOjpEaXJSIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcg
PT0gUUNoYXI6OkRpckFMKSB7Ci0JCQkgICAgYXBwZW5kUnVuKGJpZGkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNoYXI6OkRpclIgfHwg
YmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGlyQUwpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyRU47Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpckVOOwogCQkJfQogCQkJLy8gZmFsbCB0aHJvdWdo
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVOOgogICAgICAgICAgICAgICAg
ICAgICBjYXNlIFFDaGFyOjpEaXJMOgotICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3Ig
PSBiaWRpLmN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3Ig
PSBkaXJDdXJyZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIGNhc2UgUUNoYXI6OkRpclI6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUUNo
YXI6OkRpckFMOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTjoKICAgICAg
ICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwogICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5l
b3IgPSBiaWRpLmN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5l
b3IgPSBRQ2hhcjo6RGlyRU47CiAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFD
aGFyOjpEaXJFTjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBjYXNlIFFDaGFyOjpEaXJFUzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hh
cjo6RGlyQ1M6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yID09
IFFDaGFyOjpEaXJFTikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJp
ZGkuY3VycmVudDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckJOOgogICAgICAgICAgICAgICAgICAg
ICBjYXNlIFFDaGFyOjpEaXJCOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJT
OgogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJXUzoKICAgICAgICAgICAgICAg
ICAgICAgY2FzZSBRQ2hhcjo6RGlyT046Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihiaWRp
LnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRpclIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRpclIpIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBuZXV0cmFscyBnbyB0byBSCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaS5lb3IgPSBiaWRpLmxhc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6
OkRpckVOOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFFD
aGFyOjpEaXJFTjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0
dXMuZW9yID09IFFDaGFyOjpEaXJMIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoYmlkaS5zdGF0dXMuZW9yID09IFFDaGFyOjpEaXJFTiAmJiBiaWRpLnN0YXR1cy5sYXN0U3Ry
b25nID09IFFDaGFyOjpEaXJMKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGku
ZW9yID0gYmlkaS5jdXJyZW50OyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLnN0
YXR1cy5lb3IgPSBkaXJDdXJyZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0dXMuZW9yICE9IFFD
aGFyOjpEaXJMICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmlkaS5zdGF0
dXMuZW9yICE9IFFDaGFyOjpEaXJFTiB8fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFFDaGFy
OjpEaXJMKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgIT0g
UUNoYXI6OkRpckwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1iZXJzIG9u
IGJvdGggc2lkZXMsIG5ldXRyYWxzIGdldCByaWdodCB0byBsZWZ0IGRpcmVjdGlvbgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmRpciAhPSBRQ2hhcjo6RGlyTCkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJSOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckVOOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyRU47Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OyBiaWRpLnN0YXR1cy5lb3IgPSBkaXJDdXJyZW50Owor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJSOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRp
LmRpciA9IFFDaGFyOjpEaXJFTjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJp
ZGkuZW9yID0gYmlkaS5jdXJyZW50OworICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9
IFFDaGFyOjpEaXJFTjsKICAgICAgICAgICAgICAgICBpZiAoYmlkaS5kaXIgPT0gUUNoYXI6OkRp
ck9OKQogICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJMOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICBjYXNlIFFDaGFyOjpEaXJB
TjoKICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBRQ2hhcjo6RGlyQU47Ci0gICAgICAgICAgICBz
d2l0Y2goYmlkaS5zdGF0dXMubGFzdCkgeworICAgICAgICAgICAgc3dpdGNoIChiaWRpLnN0YXR1
cy5sYXN0KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyTDoKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGlyID09IFFDaGFyOjpEaXJMKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgIGNhc2UgUUNo
YXI6OkRpckFOOgotICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsg
YmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpckFOOyBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyUjoKICAgICAgICAgICAg
ICAgICBjYXNlIFFDaGFyOjpEaXJBTDoKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJF
TjoKICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7CiAgICAgICAgICAg
ICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3Ig
PSBiaWRpLmN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFFD
aGFyOjpEaXJBTjsKLSAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyQU47
CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6
OkRpckNTOgogICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yID09IFFDaGFy
OjpEaXJBTikKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50
OyAKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFUzoKICAgICAgICAgICAgICAg
ICBjYXNlIFFDaGFyOjpEaXJFVDoKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJCTjoK
QEAgLTExOTQsMjcgKzExODIsMjAgQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJMaW5l
KGNvbnN0IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsb3NlIHRoZSBMIHJ1bgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBuZXV0cmFscyBiZWNvbWUgYW4gUiBydW4KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJSOwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRp
LmVvciA9IGJpZGkuY3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24gaXMg
TAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFwcGVuZCBuZXV0cmFscyB0byB0aGUg
TCBydW4gYW5kIGNsb3NlIGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIg
PSBRQ2hhcjo6RGlyTDsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBi
aWRpLmxhc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBi
aWRpLmVvciA9IGJpZGkuY3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJBTjsKLSAgICAgICAgICAgICAgICAgICAg
YmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpckFOOworICAgICAgICAgICAgICAgICAgICBiaWRp
LmVvciA9IGJpZGkubGFzdDsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwog
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7CisgICAgICAg
ICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyQU47CiAgICAgICAgICAgICBpZiAoYmlk
aS5kaXIgPT0gUUNoYXI6OkRpck9OKQogICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6
OkRpckFOOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMjYxLDggKzEyNDIsMzAgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IAogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KIAotICAgICAgICBpZiAoYmlkaS5jdXJyZW50LmF0RW5kKCkpCi0gICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgaWYgKHBhc3RFbmQpIHsKKyAgICAgICAgICAgIGlmIChiaWRpLmVv
ciA9PSBiaWRpLmN1cnJlbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWJpZGkucmVhY2hlZEVu
ZE9mTGluZSkgeworICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuZW5kT2ZMaW5l
OworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJpZGkuc3RhdHVzLmVvcikgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyTDoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgUUNoYXI6OkRpclI6CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFy
OjpEaXJBTjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IGJpZGkuc3Rh
dHVzLmVvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVOOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJpZGkuZGlyID0gYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGlyTCA/IFFD
aGFyOjpEaXJMIDogUUNoYXI6OkRpckVOOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhc3NlcnQoZmFsc2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYmlkaS5jb250ZXh0LT5kZXJlZigpOworICAgICAgICAgICAgICAgIGJpZGkgPSBz
dGF0ZUF0RW5kOworICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpck9OOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAKICAgICAgICAg
Ly8gc2V0IHN0YXR1cy5sYXN0IGFzIG5lZWRlZC4KICAgICAgICAgc3dpdGNoIChkaXJDdXJyZW50
KSB7CkBAIC0xMzAyLDggKzEzMDUsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxp
bmUoY29uc3QgCiAgICAgICAgICAgICAgICAgYmlkaS5zdGF0dXMubGFzdCA9IGRpckN1cnJlbnQ7
CiAgICAgICAgIH0KIAotCWlmIChhdEVuZCkKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBi
aWRpLmxhc3QgPSBiaWRpLmN1cnJlbnQ7CiAKIAlpZiAoZW1wdHlSdW4gJiYgIShkaXJDdXJyZW50
ID09IFFDaGFyOjpEaXJSTEUgfHwgZGlyQ3VycmVudCA9PSBRQ2hhcjo6RGlyTFJFIHx8IGRpckN1
cnJlbnQgPT0gUUNoYXI6OkRpclJMTyB8fCBkaXJDdXJyZW50ID09IFFDaGFyOjpEaXJMUk8gfHwg
ZGlyQ3VycmVudCA9PSBRQ2hhcjo6RGlyUERGKSkgewpAQCAtMTMyMyw0NCArMTMyNCw0MiBAQCB2
b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAgICAgICAgICAgICBiaWRp
LnNvciA9IGJpZGkuY3VycmVudDsKICAgICAgICAgfQogCi0JaWYgKGJpZGkuY3VycmVudCA9PSBl
bmQpIHsKLQkgICAgaWYgKGVtcHR5UnVuKQotCQlicmVhazsKLQkgICAgYXRFbmQgPSB0cnVlOwot
CX0KLSAgICB9Ci0KLSAgICBpZiAoIWVtcHR5UnVuICYmIGJpZGkuc29yICE9IGJpZGkuY3VycmVu
dCkgewotICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKLSAgICAgICAgYXBwZW5kUnVuKGJp
ZGkpOworICAgICAgICBpZiAoIXBhc3RFbmQgJiYgKGJpZGkuY3VycmVudCA9PSBlbmQgfHwgYmlk
aS5jdXJyZW50LmF0RW5kKCkpKSB7CisgICAgICAgICAgICBpZiAoZW1wdHlSdW4pCisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBzdGF0ZUF0RW5kID0gYmlkaTsKKyAgICAgICAg
ICAgIHN0YXRlQXRFbmQuY29udGV4dC0+cmVmKCk7CisgICAgICAgICAgICBiaWRpLmVuZE9mTGlu
ZSA9IGJpZGkubGFzdDsKKyAgICAgICAgICAgIHBhc3RFbmQgPSB0cnVlOworICAgICAgICB9CiAg
ICAgfQogCiAgICAgLy8gcmVvcmRlciBsaW5lIGFjY29yZGluZyB0byBydW4gc3RydWN0dXJlLi4u
CisgICAgLy8gZG8gbm90IHJldmVyc2UgZm9yIHZpc3VhbGx5IG9yZGVyZWQgd2ViIHNpdGVzCisg
ICAgaWYgKCFzdHlsZSgpLT52aXN1YWxseU9yZGVyZWQoKSkgewogCi0gICAgLy8gZmlyc3QgZmlu
ZCBoaWdoZXN0IGFuZCBsb3dlc3QgbGV2ZWxzCi0gICAgdWNoYXIgbGV2ZWxMb3cgPSAxMjg7Ci0g
ICAgdWNoYXIgbGV2ZWxIaWdoID0gMDsKLSAgICBCaWRpUnVuKiByID0gc0ZpcnN0QmlkaVJ1bjsK
LSAgICB3aGlsZSAocikgewotICAgICAgICBpZiAoci0+bGV2ZWwgPiBsZXZlbEhpZ2gpCi0gICAg
ICAgICAgICBsZXZlbEhpZ2ggPSByLT5sZXZlbDsKLSAgICAgICAgaWYgKHItPmxldmVsIDwgbGV2
ZWxMb3cpCi0gICAgICAgICAgICBsZXZlbExvdyA9IHItPmxldmVsOwotICAgICAgICByID0gci0+
bmV4dFJ1bjsKLSAgICB9Ci0KLSAgICAvLyBpbXBsZW1lbnRzIHJlb3JkZXJpbmcgb2YgdGhlIGxp
bmUgKEwyIGFjY29yZGluZyB0byBCaWRpIHNwZWMpOgotICAgIC8vIEwyLiBGcm9tIHRoZSBoaWdo
ZXN0IGxldmVsIGZvdW5kIGluIHRoZSB0ZXh0IHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsIG9uIGVh
Y2ggbGluZSwKLSAgICAvLyByZXZlcnNlIGFueSBjb250aWd1b3VzIHNlcXVlbmNlIG9mIGNoYXJh
Y3RlcnMgdGhhdCBhcmUgYXQgdGhhdCBsZXZlbCBvciBoaWdoZXIuCi0KLSAgICAvLyByZXZlcnNp
bmcgaXMgb25seSBkb25lIHVwIHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsCi0gICAgaWYgKCEobGV2
ZWxMb3clMikpCi0gICAgICAgIGxldmVsTG93Kys7CisgICAgICAgIC8vIGZpcnN0IGZpbmQgaGln
aGVzdCBhbmQgbG93ZXN0IGxldmVscworICAgICAgICB1Y2hhciBsZXZlbExvdyA9IDEyODsKKyAg
ICAgICAgdWNoYXIgbGV2ZWxIaWdoID0gMDsKKyAgICAgICAgQmlkaVJ1biogciA9IHNGaXJzdEJp
ZGlSdW47CisgICAgICAgIHdoaWxlIChyKSB7CisgICAgICAgICAgICBpZiAoci0+bGV2ZWwgPiBs
ZXZlbEhpZ2gpCisgICAgICAgICAgICAgICAgbGV2ZWxIaWdoID0gci0+bGV2ZWw7CisgICAgICAg
ICAgICBpZiAoci0+bGV2ZWwgPCBsZXZlbExvdykKKyAgICAgICAgICAgICAgICBsZXZlbExvdyA9
IHItPmxldmVsOworICAgICAgICAgICAgciA9IHItPm5leHRSdW47CisgICAgICAgIH0KKworICAg
ICAgICAvLyBpbXBsZW1lbnRzIHJlb3JkZXJpbmcgb2YgdGhlIGxpbmUgKEwyIGFjY29yZGluZyB0
byBCaWRpIHNwZWMpOgorICAgICAgICAvLyBMMi4gRnJvbSB0aGUgaGlnaGVzdCBsZXZlbCBmb3Vu
ZCBpbiB0aGUgdGV4dCB0byB0aGUgbG93ZXN0IG9kZCBsZXZlbCBvbiBlYWNoIGxpbmUsCisgICAg
ICAgIC8vIHJldmVyc2UgYW55IGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0
IGFyZSBhdCB0aGF0IGxldmVsIG9yIGhpZ2hlci4KKworICAgICAgICAvLyByZXZlcnNpbmcgaXMg
b25seSBkb25lIHVwIHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsCisgICAgICAgIGlmICghKGxldmVs
TG93JTIpKQorICAgICAgICAgICAgbGV2ZWxMb3crKzsKIAotICAgIGludCBjb3VudCA9IHNCaWRp
UnVuQ291bnQgLSAxOworICAgICAgICBpbnQgY291bnQgPSBzQmlkaVJ1bkNvdW50IC0gMTsKIAot
ICAgIC8vIGRvIG5vdCByZXZlcnNlIGZvciB2aXN1YWxseSBvcmRlcmVkIHdlYiBzaXRlcwotICAg
IGlmICghc3R5bGUoKS0+dmlzdWFsbHlPcmRlcmVkKCkpIHsKICAgICAgICAgd2hpbGUgKGxldmVs
SGlnaCA+PSBsZXZlbExvdykgewogICAgICAgICAgICAgaW50IGkgPSAwOwogICAgICAgICAgICAg
QmlkaVJ1biogY3VyclJ1biA9IHNGaXJzdEJpZGlSdW47CkBAIC0xMzgwLDYgKzEzNzksNyBAQCB2
b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAgICAgICAgICAgICBsZXZl
bEhpZ2gtLTsKICAgICAgICAgfQogICAgIH0KKyAgICBiaWRpLmVuZE9mTGluZS5vYmogPSAwOwog
fQogCiBzdGF0aWMgdm9pZCBidWlsZENvbXBhY3RSdW5zKFJlbmRlck9iamVjdCogY29tcGFjdE9i
aiwgQmlkaVN0YXRlJiBiaWRpKQpAQCAtMTUxMSw3ICsxNTExLDkgQEAgUVJlY3QgUmVuZGVyQmxv
Y2s6OmxheW91dElubGluZUNoaWxkcmVuKAogCiAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3RTdHJv
bmcgPSBzdGFydEVtYmVkLT5kaXI7CiAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3QgPSBzdGFydEVt
YmVkLT5kaXI7CisgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IHN0YXJ0RW1iZWQtPmRpcjsKICAg
ICAgICAgYmlkaS5jb250ZXh0ID0gc3RhcnRFbWJlZDsKKyAgICAgICAgYmlkaS5kaXIgPSBRQ2hh
cjo6RGlyT047CiAgICAgICAgIAogICAgICAgICBpZiAoIXNtaWRwb2ludHMpCiAgICAgICAgICAg
ICBzbWlkcG9pbnRzID0gbmV3IFFNZW1BcnJheTxCaWRpSXRlcmF0b3I+OwpAQCAtMTU2MSw3ICsx
NTYzLDggQEAgUVJlY3QgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKAogICAgICAg
ICAgICAgICAgIGVuZCA9IHN0YXJ0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZW5kID0g
ZmluZE5leHRMaW5lQnJlYWsoc3RhcnQsIGJpZGkpOwotICAgICAgICAgICAgaWYoIHN0YXJ0LmF0
RW5kKCkgKSBicmVhazsKKyAgICAgICAgICAgIGlmIChzdGFydC5hdEVuZCgpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKCFpc0xpbmVFbXB0eSkgewogICAgICAgICAg
ICAgICAgIGJpZGlSZW9yZGVyTGluZShzdGFydCwgZW5kLCBiaWRpKTsKIApAQCAtMTcxNiw4ICsx
NzE5LDcgQEAgUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZVN0YQogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgS0hUTUxBc3NlcnQoIW1fZmlyc3RMaW5lQm94ICYmICFtX2xh
c3RMaW5lQm94KTsKICAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIHsKKyAgICB9IGVsc2Ugewog
ICAgICAgICBmb3IgKGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3VyciAmJiAhY3Vyci0+aXNEaXJ0
eSgpOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSk7CiAgICAgICAgIGlmIChjdXJyKSB7CiAg
ICAgICAgICAgICAvLyBXZSBoYXZlIGEgZGlydHkgbGluZS4KQEAgLTE3MjYsOCArMTcyOCw3IEBA
IFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGEKICAgICAgICAgICAgICAg
ICBpZiAoIWN1cnItPnByZXZSb290Qm94KCktPmVuZHNXaXRoQnJlYWsoKSkKICAgICAgICAgICAg
ICAgICAgICAgY3VyciA9IGN1cnItPnByZXZSb290Qm94KCk7ICAvLyBUaGUgcHJldmlvdXMgbGlu
ZSBkaWRuJ3QgYnJlYWsgY2xlYW5seSwgc28gdHJlYXQgaXQgYXMgZGlydHkgYWxzby4KICAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgIC8vIE5vIGRpcnR5IGxpbmVzIHdlcmUgZm91bmQuCiAgICAgICAgICAgICAvLyBJ
ZiB0aGUgbGFzdCBsaW5lIGRpZG4ndCBicmVhayBjbGVhbmx5LCB0cmVhdCBpdCBhcyBkaXJ0eS4K
ICAgICAgICAgICAgIGlmIChsYXN0Um9vdEJveCgpICYmICFsYXN0Um9vdEJveCgpLT5lbmRzV2l0
aEJyZWFrKCkpCkBAIC0xNzQ3LDggKzE3NDgsNyBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9j
azo6ZGV0ZXJtaW5lU3RhCiAgICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gYm90dG9tT2ZM
aW5lOwogICAgICAgICBzdGFydE9iaiA9IGxhc3QtPmxpbmVCcmVha09iaigpOwogICAgICAgICBw
b3MgPSBsYXN0LT5saW5lQnJlYWtQb3MoKTsKLSAgICB9Ci0gICAgZWxzZQorICAgIH0gZWxzZQog
ICAgICAgICBzdGFydE9iaiA9IGJpZGlGaXJzdCh0aGlzLCBiaWRpLCAwKTsKICAgICAgICAgCiAg
ICAgYmlkaS5hZGp1c3RFbWJlZGRpbmcgPSB0cnVlOwpAQCAtMTk1MSw3ICsxOTUxLDcgQEAgQmlk
aUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExpbmVCcgogICAgICAgICAgICAgICAgIGlm
ICghaXNMaW5lRW1wdHkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gb25seSBjaGVjayB0aGUg
Y2xlYXIgc3RhdHVzIGZvciBub24tZW1wdHkgbGluZXMuCiAgICAgICAgICAgICAgICAgICAgIEVD
bGVhciBjbGVhciA9IG8tPnN0eWxlKCktPmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
KGNsZWFyICE9IENOT05FKQorICAgICAgICAgICAgICAgICAgICBpZiAoY2xlYXIgIT0gQ05PTkUp
CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2NsZWFyU3RhdHVzID0gKEVDbGVhcikgKG1fY2xl
YXJTdGF0dXMgfCBjbGVhcik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQpAQCAt
MjA2NywxMyArMjA2NywxMyBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGlu
ZUJyCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIG8tPmlzVGV4dCgpICkgeworICAgICAgICB9IGVsc2Ug
aWYgKG8tPmlzVGV4dCgpKSB7CiAgICAgICAgICAgICBSZW5kZXJUZXh0ICp0ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyVGV4dCAqPihvKTsKICAgICAgICAgICAgIGludCBzdHJsZW4gPSB0LT5zdHJpbmdM
ZW5ndGgoKTsKICAgICAgICAgICAgIGludCBsZW4gPSBzdHJsZW4gLSBwb3M7CiAgICAgICAgICAg
ICBRQ2hhciAqc3RyID0gdC0+dGV4dCgpOwogCi0gICAgICAgICAgICBjb25zdCBGb250ICpmID0g
dC0+aHRtbEZvbnQoIG1fZmlyc3RMaW5lICk7CisgICAgICAgICAgICBjb25zdCBGb250ICpmID0g
dC0+aHRtbEZvbnQobV9maXJzdExpbmUpOwogICAgICAgICAgICAgLy8gcHJvcG9ydGlvbmFsIGZv
bnQsIG5lZWRzIGEgYml0IG1vcmUgd29yay4KICAgICAgICAgICAgIGludCBsYXN0U3BhY2UgPSBw
b3M7CiAgICAgICAgICAgICBpbnQgd29yZFNwYWNpbmcgPSBvLT5zdHlsZSgpLT53b3JkU3BhY2lu
ZygpOwpAQCAtMjIwMSwxMyArMjIwMSwxMiBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZp
bmROZXh0TGluZUJyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBl
bmQ7IC8vIERpZG4ndCBmaXQuIEp1bXAgdG8gdGhlIGVuZC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBvcyA+IDAgJiYgc3RyW3Bv
cy0xXS51bmljb2RlKCkgPT0gU09GVF9IWVBIRU4pCisgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHBvcyA+IDAgJiYgc3RyW3Bvcy0xXS51bmljb2RlKCkgPT0gU09GVF9IWVBIRU4p
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgdGhlIHdpZHRoIG9mIHRo
ZSBzb2Z0IGh5cGhlbiBvdXQgc2luY2Ugd2UgZml0IG9uIGEgbGluZS4KICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0bXBXIC09IHQtPndpZHRoKHBvcy0xLCAxLCBmLCB3K3RtcFcpOwogICAg
ICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICAgICAgaWYoICooc3RyK3Bvcykg
PT0gJ1xuJyAmJiBvLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoKihzdHIrcG9zKSA9PSAnXG4nICYmIG8tPnN0eWxlKCktPnByZXNlcnZlTmV3
bGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBsQnJlYWsub2JqID0gbzsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGxCcmVhay5wb3MgPSBwb3M7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbEJyZWFrOwpAQCAtMjIzOSwxMyArMjIzOCwxMiBAQCBCaWRpSXRlcmF0b3Ig
UmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bGFzdFNwYWNlID0gcG9zOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGln
bm9yaW5nU3BhY2VzKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpZ25vcmluZ1NwYWNl
cykgewogICAgICAgICAgICAgICAgICAgICAvLyBTdG9wIGlnbm9yaW5nIHNwYWNlcyBhbmQgYmVn
aW4gYXQgdGhpcwogICAgICAgICAgICAgICAgICAgICAvLyBuZXcgcG9pbnQuCiAgICAgICAgICAg
ICAgICAgICAgIGlnbm9yaW5nU3BhY2VzID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGxh
c3RTcGFjZSA9IHBvczsgLy8gZS5nLiwgIkZvbyAgICBnb28iLCBkb24ndCBhZGQgaW4gYW55IG9m
IHRoZSBpZ25vcmVkIHNwYWNlcy4KLSAgICAgICAgICAgICAgICAgICAgQmlkaUl0ZXJhdG9yIHN0
YXJ0TWlkICggMCwgbywgcG9zICk7CisgICAgICAgICAgICAgICAgICAgIEJpZGlJdGVyYXRvciBz
dGFydE1pZCgwLCBvLCBwb3MpOwogICAgICAgICAgICAgICAgICAgICBhZGRNaWRwb2ludChzdGFy
dE1pZCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0yNDE2LDcgKzI0MTQsNyBAQCBCaWRpSXRl
cmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyCiAgICAgICAgICAgICAvLyBBZGQgYSBu
ZXcgZW5kIG1pZHBvaW50IHRoYXQgc3RvcHMgcmlnaHQgYXQgdGhlIHZlcnkgZW5kLgogICAgICAg
ICAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4odHJhaWxp
bmdTcGFjZU9iamVjdCk7CiAgICAgICAgICAgICB1bnNpZ25lZCBwb3MgPSB0ZXh0LT5sZW5ndGgo
KSA+PTIgPyB0ZXh0LT5sZW5ndGgoKSAtIDIgOiBVSU5UX01BWDsKLSAgICAgICAgICAgIEJpZGlJ
dGVyYXRvciBlbmRNaWQgKCAwLCB0cmFpbGluZ1NwYWNlT2JqZWN0LCBwb3MgKTsKKyAgICAgICAg
ICAgIEJpZGlJdGVyYXRvciBlbmRNaWQoMCwgdHJhaWxpbmdTcGFjZU9iamVjdCwgcG9zKTsKICAg
ICAgICAgICAgIGFkZE1pZHBvaW50KGVuZE1pZCk7CiAgICAgICAgIH0KICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4607</attachid>
            <date>2005-11-05 09:40:01 -0800</date>
            <delta_ts>2005-11-05 09:40:01 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>5172_r3.patch</filename>
            <type>text/plain</type>
            <size>36823</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpZGkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9yZW5kZXJpbmcvYmlkaS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE3CmRpZmYgLXAgLXUg
LXIxLjE3IGJpZGkuaAotLS0gYmlkaS5oCTYgT2N0IDIwMDUgMDA6NTM6NTUgLTAwMDAJMS4xNwor
KysgYmlkaS5oCTUgTm92IDIwMDUgMTc6Mzk6MDUgLTAwMDAKQEAgLTMyLDYgKzMyLDE0IEBAIG5h
bWVzcGFjZSBraHRtbCB7CiAgICAgY2xhc3MgUmVuZGVyT2JqZWN0OwogICAgIGNsYXNzIElubGlu
ZUJveDsKIAorICAgIHN0cnVjdCBCaWRpU3RhdHVzIHsKKyAgICAgICAgQmlkaVN0YXR1cygpIDog
ZW9yKFFDaGFyOjpEaXJPTiksIGxhc3RTdHJvbmcoUUNoYXI6OkRpck9OKSwgbGFzdChRQ2hhcjo6
RGlyT04pIHt9CisgICAgICAgIAorICAgICAgICBRQ2hhcjo6RGlyZWN0aW9uIGVvcjsKKyAgICAg
ICAgUUNoYXI6OkRpcmVjdGlvbiBsYXN0U3Ryb25nOworICAgICAgICBRQ2hhcjo6RGlyZWN0aW9u
IGxhc3Q7CisgICAgfTsKKyAgICAgICAgCiAgICAgY2xhc3MgQmlkaUNvbnRleHQgewogICAgIHB1
YmxpYzoKIAlCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxldmVsLCBRQ2hhcjo6RGlyZWN0aW9u
IGVtYmVkZGluZywgQmlkaUNvbnRleHQgKnBhcmVudCA9IDAsIGJvb2wgb3ZlcnJpZGUgPSBmYWxz
ZSk7CkluZGV4OiBiaWRpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9yZW5kZXJpbmcvYmlkaS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTU2CmRp
ZmYgLXAgLXUgLXIxLjE1NiBiaWRpLmNwcAotLS0gYmlkaS5jcHAJMyBOb3YgMjAwNSAyMzo1Mzo1
NyAtMDAwMAkxLjE1NgorKysgYmlkaS5jcHAJNSBOb3YgMjAwNSAxNzozOTowNyAtMDAwMApAQCAt
NTcsMTYgKzU3LDggQEAgc3RydWN0IEJpZGlJdGVyYXRvcgogICAgIHVuc2lnbmVkIGludCBwb3M7
CiB9OwogCi1zdHJ1Y3QgQmlkaVN0YXR1cyB7Ci0gICAgQmlkaVN0YXR1cygpIDogZW9yKFFDaGFy
OjpEaXJPTiksIGxhc3RTdHJvbmcoUUNoYXI6OkRpck9OKSwgbGFzdChRQ2hhcjo6RGlyT04pIHt9
Ci0gICAgCi0gICAgUUNoYXI6OkRpcmVjdGlvbiBlb3I7Ci0gICAgUUNoYXI6OkRpcmVjdGlvbiBs
YXN0U3Ryb25nOwotICAgIFFDaGFyOjpEaXJlY3Rpb24gbGFzdDsKLX07Ci0gICAgCiBzdHJ1Y3Qg
QmlkaVN0YXRlIHsKLSAgICBCaWRpU3RhdGUoKSA6IGNvbnRleHQoMCksIGRpcihRQ2hhcjo6RGly
T04pLCBhZGp1c3RFbWJlZGRpbmcoZmFsc2UpIHt9CisgICAgQmlkaVN0YXRlKCkgOiBjb250ZXh0
KDApLCBkaXIoUUNoYXI6OkRpck9OKSwgYWRqdXN0RW1iZWRkaW5nKGZhbHNlKSwgcmVhY2hlZEVu
ZE9mTGluZShmYWxzZSkge30KICAgICAKICAgICBCaWRpSXRlcmF0b3Igc29yOwogICAgIEJpZGlJ
dGVyYXRvciBlb3I7CkBAIC03Niw4ICs2OCwyMCBAQCBzdHJ1Y3QgQmlkaVN0YXRlIHsKICAgICBC
aWRpU3RhdHVzIHN0YXR1czsKICAgICBRQ2hhcjo6RGlyZWN0aW9uIGRpcjsKICAgICBib29sIGFk
anVzdEVtYmVkZGluZzsKKyAgICBCaWRpSXRlcmF0b3IgZW5kT2ZMaW5lOworICAgIGJvb2wgcmVh
Y2hlZEVuZE9mTGluZTsKIH07CiAKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQmlkaVN0
YXR1cyYgc3RhdHVzMSwgY29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzMikKK3sKKyAgICByZXR1cm4g
c3RhdHVzMS5lb3IgPT0gc3RhdHVzMi5lb3IgJiYgc3RhdHVzMS5sYXN0ID09IHN0YXR1czIubGFz
dCAmJiBzdGF0dXMxLmxhc3RTdHJvbmcgPT0gc3RhdHVzMi5sYXN0U3Ryb25nOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czEsIGNvbnN0IEJpZGlT
dGF0dXMmIHN0YXR1czIpCit7CisgICAgcmV0dXJuIHN0YXR1czEuZW9yICE9IHN0YXR1czIuZW9y
IHx8IHN0YXR1czEubGFzdCAhPSBzdGF0dXMyLmxhc3QgfHwgc3RhdHVzMS5sYXN0U3Ryb25nICE9
IHN0YXR1czIubGFzdFN0cm9uZzsKK30KKwogLy8gVXNlZCB0byB0cmFjayBhIGxpc3Qgb2YgY2hh
aW5lZCBiaWRpIHJ1bnMuCiBzdGF0aWMgQmlkaVJ1biogc0ZpcnN0QmlkaVJ1bjsKIHN0YXRpYyBC
aWRpUnVuKiBzTGFzdEJpZGlSdW47CkBAIC0zMjksNyArMzMzLDcgQEAgaW5saW5lIHZvaWQgQmlk
aUl0ZXJhdG9yOjppbmNyZW1lbnQoQmlkaQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG9iai0+
aXNUZXh0KCkpIHsKICAgICAgICAgcG9zKys7Ci0gICAgICAgIGlmKHBvcyA+PSBzdGF0aWNfY2Fz
dDxSZW5kZXJUZXh0ICo+KG9iaiktPnN0cmluZ0xlbmd0aCgpKSB7CisgICAgICAgIGlmIChwb3Mg
Pj0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvYmopLT5zdHJpbmdMZW5ndGgoKSkgewogICAg
ICAgICAgICAgb2JqID0gYmlkaU5leHQoYmxvY2ssIG9iaiwgYmlkaSk7CiAgICAgICAgICAgICBw
b3MgPSAwOwogICAgICAgICB9CkBAIC01NjUsMTQgKzU2OSwxOSBAQCBzdGF0aWMgdm9pZCBhcHBl
bmRSdW4oQmlkaVN0YXRlICZiaWRpKQogCiAgICAgaW50IHN0YXJ0ID0gYmlkaS5zb3IucG9zOwog
ICAgIFJlbmRlck9iamVjdCAqb2JqID0gYmlkaS5zb3Iub2JqOwotICAgIHdoaWxlIChvYmogJiYg
b2JqICE9IGJpZGkuZW9yLm9iaikgeworICAgIHdoaWxlIChvYmogJiYgb2JqICE9IGJpZGkuZW9y
Lm9iaiAmJiBvYmogIT0gYmlkaS5lbmRPZkxpbmUub2JqKSB7CiAgICAgICAgIGFwcGVuZFJ1bnNG
b3JPYmplY3Qoc3RhcnQsIG9iai0+bGVuZ3RoKCksIG9iaiwgYmlkaSk7ICAgICAgICAKICAgICAg
ICAgc3RhcnQgPSAwOwogICAgICAgICBvYmogPSBiaWRpTmV4dChiaWRpLnNvci5ibG9jaywgb2Jq
LCBiaWRpKTsKICAgICB9CiAgICAgaWYgKG9iaikgeworICAgICAgICB1bnNpZ25lZCBwb3MgPSBv
YmogPT0gYmlkaS5lb3Iub2JqID8gYmlkaS5lb3IucG9zIDogVUlOVF9NQVg7CisgICAgICAgIGlm
IChvYmogPT0gYmlkaS5lbmRPZkxpbmUub2JqICYmIGJpZGkuZW5kT2ZMaW5lLnBvcyA8PSBwb3Mp
IHsKKyAgICAgICAgICAgIGJpZGkucmVhY2hlZEVuZE9mTGluZSA9IHRydWU7CisgICAgICAgICAg
ICBwb3MgPSBiaWRpLmVuZE9mTGluZS5wb3M7CisgICAgICAgIH0KICAgICAgICAgLy8gSXQncyBP
SyB0byBhZGQgcnVucyBmb3IgemVyby1sZW5ndGggUmVuZGVyT2JqZWN0cywganVzdCBkb24ndCBt
YWtlIHRoZSBydW4gbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlCi0gICAgICAgIGludCBlbmQgPSBv
YmotPmxlbmd0aCgpID8gYmlkaS5lb3IucG9zICsgMSA6IDA7CisgICAgICAgIGludCBlbmQgPSBv
YmotPmxlbmd0aCgpID8gcG9zKzEgOiAwOwogICAgICAgICBhcHBlbmRSdW5zRm9yT2JqZWN0KHN0
YXJ0LCBlbmQsIG9iaiwgYmlkaSk7CiAgICAgfQogICAgIApAQCAtNjE3LDYgKzYyNiw3IEBAIHN0
YXRpYyB2b2lkIGVtYmVkKFFDaGFyOjpEaXJlY3Rpb24gZCwgQmkKICAgICAgICAgICAgIC8vIHNv
ciBmb3IgdGhlIG5ldyBydW4gaXMgZGV0ZXJtaW5lZCBieSB0aGUgaGlnaGVyIGxldmVsIChydWxl
IFgxMCkKIAkgICAgYmlkaS5zdGF0dXMubGFzdCA9IGJpZGkuY29udGV4dC0+ZGlyOwogCSAgICBi
aWRpLnN0YXR1cy5sYXN0U3Ryb25nID0gYmlkaS5jb250ZXh0LT5kaXI7CisgICAgICAgICAgICBj
LT5yZWYoKTsKIAkgICAgYmlkaS5jb250ZXh0LT5kZXJlZigpOwogCSAgICBiaWRpLmNvbnRleHQg
PSBjOwogICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gYmlkaS5jb250ZXh0LT5kaXI7CkBA
IC02ODYsNiArNjk2LDcgQEAgc3RhdGljIHZvaWQgZW1iZWQoUUNoYXI6OkRpcmVjdGlvbiBkLCBC
aQogICAgICAgICAgICAgZW1wdHlSdW4gPSB0cnVlOwogICAgICAgICAgICAgYmlkaS5jb250ZXh0
ID0gbmV3IEJpZGlDb250ZXh0KGxldmVsLCBydW5EaXIsIGJpZGkuY29udGV4dCwgb3ZlcnJpZGUp
OwogICAgICAgICAgICAgYmlkaS5jb250ZXh0LT5yZWYoKTsKKyAgICAgICAgICAgIGJpZGkuY29u
dGV4dC0+cGFyZW50LT5kZXJlZigpOwogICAgICAgICAgICAgYmlkaS5zdGF0dXMubGFzdCA9IHJ1
bkRpcjsKICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPSBydW5EaXI7CiAgICAg
ICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBydW5EaXI7CkBAIC04NzMsNyArODg0LDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUhvcml6b250YWxQb3NpdAogICAgICAgICBjYXNlIENFTlRF
UjoKICAgICAgICAgY2FzZSBLSFRNTF9DRU5URVI6CiAgICAgICAgICAgICBpbnQgeGQgPSAoYXZh
aWxhYmxlV2lkdGggLSB0b3RXaWR0aCkvMjsKLSAgICAgICAgICAgIHggKz0geGQgPjAgPyB4ZCA6
IDA7CisgICAgICAgICAgICB4ICs9IHhkID4gMCA/IHhkIDogMDsKICAgICAgICAgICAgIG51bVNw
YWNlcyA9IDA7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC05MjYsNyArOTM3LDggQEAg
dm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZVZlcnRpY2FsUG9zaXRpbwogICAgICAgICAKICAgICAv
LyBOb3cgbWFrZSBzdXJlIHdlIHBsYWNlIHJlcGxhY2VkIHJlbmRlciBvYmplY3RzIGNvcnJlY3Rs
eS4KICAgICBmb3IgKEJpZGlSdW4qIHIgPSBzRmlyc3RCaWRpUnVuOyByOyByID0gci0+bmV4dFJ1
bikgewotICAgICAgICBpZiAoIXItPmJveCkgY29udGludWU7IC8vIFNraXAgcnVucyB3aXRoIG5v
IGxpbmUgYm94ZXMuCisgICAgICAgIGlmICghci0+Ym94KQorICAgICAgICAgICAgY29udGludWU7
IC8vIFNraXAgcnVucyB3aXRoIG5vIGxpbmUgYm94ZXMuCiAKICAgICAgICAgLy8gQWxpZ24gcG9z
aXRpb25lZCBib3hlcyB3aXRoIHRoZSB0b3Agb2YgdGhlIGxpbmUgYm94LiAgVGhpcyBpcwogICAg
ICAgICAvLyBhIHJlYXNvbmFibGUgYXBwcm94aW1hdGlvbiBvZiBhbiBhcHByb3ByaWF0ZSB5IHBv
c2l0aW9uLgpAQCAtOTUyLDI2ICs5NjQsMzcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3Jk
ZXJMaW5lKGNvbnN0IAogICAgIHNMYXN0QmlkaVJ1biA9IDA7CiAgICAgc0JpZGlSdW5Db3VudCA9
IDA7CiAKKyAgICBhc3NlcnQoYmlkaS5kaXIgPT0gUUNoYXI6OkRpck9OKTsKKwogICAgIGVtcHR5
UnVuID0gdHJ1ZTsKLSAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJPTjsKLSAgICBiaWRpLnN0YXR1
cy5lb3IgPSBiaWRpLmNvbnRleHQtPmRpcjsKKwogICAgIGJpZGkuZW9yLm9iaiA9IDA7CiAKICAg
ICBudW1TcGFjZXMgPSAwOwogCiAgICAgYmlkaS5jdXJyZW50ID0gc3RhcnQ7CiAgICAgYmlkaS5s
YXN0ID0gYmlkaS5jdXJyZW50OwotICAgIGJvb2wgYXRFbmQgPSBmYWxzZTsKKyAgICBib29sIHBh
c3RFbmQgPSBmYWxzZTsKKyAgICBCaWRpU3RhdGUgc3RhdGVBdEVuZDsKIAogICAgIHdoaWxlICh0
cnVlKSB7CiAgICAgICAgIFFDaGFyOjpEaXJlY3Rpb24gZGlyQ3VycmVudDsKLSAgICAgICAgaWYg
KGF0RW5kKSB7CisgICAgICAgIGlmIChwYXN0RW5kICYmIChwcmV2aW91c0xpbmVCcm9rZUNsZWFu
bHkgfHwgYmlkaS5jdXJyZW50LmF0RW5kKCkpKSB7CiAgICAgICAgICAgICAvL2tkRGVidWcoNjA0
MSkgPDwgImF0RW5kIiA8PCBlbmRsOwogICAgICAgICAgICAgQmlkaUNvbnRleHQgKmMgPSBiaWRp
LmNvbnRleHQ7Ci0gICAgICAgICAgICBpZiAoIGJpZGkuY3VycmVudC5hdEVuZCgpKQotICAgICAg
ICAgICAgICAgIHdoaWxlICggYy0+cGFyZW50ICkKLSAgICAgICAgICAgICAgICAgICAgYyA9IGMt
PnBhcmVudDsKKyAgICAgICAgICAgIHdoaWxlIChjLT5wYXJlbnQpCisgICAgICAgICAgICAgICAg
YyA9IGMtPnBhcmVudDsKICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBjLT5kaXI7CisgICAgICAg
ICAgICBpZiAocHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KSB7CisgICAgICAgICAgICAgICAgLy8g
QSBkZXZpYXRpb24gZnJvbSB0aGUgVW5pY29kZSBCaWRpIEFsZ29yaXRobSBpbiBvcmRlciB0byBt
YXRjaAorICAgICAgICAgICAgICAgIC8vIE1hYyBPUyBYIHRleHQgYW5kIFdpbklFOiBhIGhhcmQg
bGluZSBicmVhayByZXNldHMgYmlkaSBzdGF0ZS4KKyAgICAgICAgICAgICAgICBjLT5yZWYoKTsK
KyAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLmNvbnRleHQtPmRlcmVmKCk7CisgICAgICAgICAg
ICAgICAgc3RhdGVBdEVuZC5jb250ZXh0ID0gYzsKKyAgICAgICAgICAgICAgICBzdGF0ZUF0RW5k
LnN0YXR1cy5lb3IgPSBkaXJDdXJyZW50OworICAgICAgICAgICAgICAgIHN0YXRlQXRFbmQuc3Rh
dHVzLmxhc3QgPSBkaXJDdXJyZW50OworICAgICAgICAgICAgICAgIHN0YXRlQXRFbmQuc3RhdHVz
Lmxhc3RTdHJvbmcgPSBkaXJDdXJyZW50OworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgZGlyQ3VycmVudCA9IGJpZGkuY3VycmVudC5kaXJlY3Rpb24oKTsKICAg
ICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPm92ZXJyaWRlICYmIGRpckN1cnJlbnQgIT0gUUNo
YXI6OkRpclJMRSAmJiBkaXJDdXJyZW50ICE9IFFDaGFyOjpEaXJMUkUgJiYgZGlyQ3VycmVudCAh
PSBRQ2hhcjo6RGlyUkxPICYmIGRpckN1cnJlbnQgIT0gUUNoYXI6OkRpckxSTyAmJiBkaXJDdXJy
ZW50ICE9IFFDaGFyOjpEaXJQREYpCkBAIC0xMDAxLDExICsxMDI0LDggQEAgdm9pZCBSZW5kZXJC
bG9jazo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IAogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6
OkRpckFOOgogICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMubGFzdCAhPSBRQ2hh
cjo6RGlyRU4gfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBRQ2hhcjo6RGlyTCkKICAgICAg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAg
YmlkaS5kaXIgPSBRQ2hhcjo6RGlyTDsKLSAgICAgICAgICAgICAgICAgICAgLy8gZmFsbCB0aHJv
dWdoCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUUNo
YXI6OkRpckw6Ci0gICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50Owot
ICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyTDsKICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRVM6
CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRVQ6CkBAIC0xMDM3LDM0ICsxMDU3LDMx
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJSOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6
OkRpckwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxhc3Qgc3R1ZmYgdGFrZXMgZW1i
ZWRkaW5nIGRpcgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuY29udGV4dC0+ZGly
ID09IFFDaGFyOjpEaXJMIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNoYXI6OkRpckwp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5k
aXIgPSBRQ2hhcjo6RGlyUjsgCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZihiaWRpLnN0
YXR1cy5lb3IgIT0gUUNoYXI6OkRpckwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vbGFz
dCBzdHVmZiB0YWtlcyBlbWJlZGRpbmcgZGlyCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
YmlkaS5jb250ZXh0LT5kaXIgIT0gUUNoYXI6OkRpckwgJiYgYmlkaS5zdGF0dXMubGFzdFN0cm9u
ZyAhPSBRQ2hhcjo6RGlyTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9y
ID0gYmlkaS5sYXN0OyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlk
aSk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpclI7
IAogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kUnVuKGJpZGkpOyAKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAg
ICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKLSAgICAgICAgICAgICAgICAgICAgYmlkaS5zdGF0
dXMuZW9yID0gUUNoYXI6OkRpckw7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7CisgICAgICAgICAgICBiaWRpLnN0YXR1
cy5lb3IgPSBRQ2hhcjo6RGlyTDsKICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcg
PSBRQ2hhcjo6RGlyTDsKICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckw7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQUw6CiAgICAgICAgIGNhc2Ug
UUNoYXI6OkRpclI6Ci0gICAgICAgICAgICBzd2l0Y2goYmlkaS5zdGF0dXMubGFzdCkgeworICAg
ICAgICAgICAgc3dpdGNoIChiaWRpLnN0YXR1cy5sYXN0KSB7CiAgICAgICAgICAgICAgICAgY2Fz
ZSBRQ2hhcjo6RGlyTDoKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFTjoKICAgICAg
ICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTjoKICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKGJpZGkpOwogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpclI6CiAgICAgICAgICAg
ICAgICAgY2FzZSBRQ2hhcjo6RGlyQUw6Ci0gICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0g
YmlkaS5jdXJyZW50OwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAg
ICBjYXNlIFFDaGFyOjpEaXJFUzoKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFVDoK
QEAgLTEwNzYsMjAgKzEwOTMsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJMaW5l
KGNvbnN0IAogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpck9OOgogICAgICAgICAgICAg
ICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yICE9IFFDaGFyOjpEaXJSICYmIGJpZGkuc3RhdHVz
LmVvciAhPSBRQ2hhcjo6RGlyQUwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8vbGFzdCBz
dHVmZiB0YWtlcyBlbWJlZGRpbmcgZGlyCi0gICAgICAgICAgICAgICAgICAgICAgICBpZihiaWRp
LmNvbnRleHQtPmRpciA9PSBRQ2hhcjo6RGlyUiB8fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID09
IFFDaGFyOjpEaXJSIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGJpZGkuc3RhdHVz
Lmxhc3RTdHJvbmcgPT0gUUNoYXI6OkRpckFMKSB7IAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVv
ciA9IGJpZGkuY3VycmVudDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyTDsgCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIgIT0gUUNoYXI6OkRpclIgJiYg
YmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBRQ2hhcjo6RGlyUiAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFFDaGFyOjpEaXJBTCkgewog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJMOyAKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVu
ZFJ1bihiaWRpKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwogICAgICAgICAg
ICAgYmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpclI7CiAgICAgICAgICAgICBiaWRpLnN0YXR1
cy5sYXN0U3Ryb25nID0gZGlyQ3VycmVudDsKICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6
OkRpclI7CkBAIC0xMDk4LDg3ICsxMTEyLDczIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9y
ZGVyTGluZShjb25zdCAKICAgICAgICAgICAgIC8vIHdlYWsgdHlwZXM6CiAKICAgICAgICAgY2Fz
ZSBRQ2hhcjo6RGlyRU46Ci0gICAgICAgICAgICBpZiAoIShiaWRpLnN0YXR1cy5sYXN0U3Ryb25n
ID09IFFDaGFyOjpEaXJBTCkpIHsKKyAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5sYXN0U3Ry
b25nICE9IFFDaGFyOjpEaXJBTCkgewogICAgICAgICAgICAgICAgIC8vIGlmIGxhc3Qgc3Ryb25n
IHdhcyBBTCBjaGFuZ2UgRU4gdG8gQU4KICAgICAgICAgICAgICAgICBzd2l0Y2ggKGJpZGkuc3Rh
dHVzLmxhc3QpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRVQ6Ci0JCQlp
ZiAoYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGlyUiB8fCBiaWRpLnN0YXR1cy5s
YXN0U3Ryb25nID09IFFDaGFyOjpEaXJBTCkgewotCQkJICAgIGFwcGVuZFJ1bihiaWRpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID09IFFDaGFy
OjpEaXJSIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNoYXI6OkRpckFMKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckVOOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFFDaGFyOjpEaXJFTjsKIAkJCX0KIAkJCS8vIGZh
bGwgdGhyb3VnaAogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFTjoKICAgICAg
ICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyTDoKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5z
dGF0dXMuZW9yID0gZGlyQ3VycmVudDsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJSOgogICAgICAgICAgICAgICAgICAg
ICBjYXNlIFFDaGFyOjpEaXJBTDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGly
QU46CiAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKICAgICAg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgYmlk
aS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpckVOOwogICAgICAgICAgICAgICAgICAgICAgICAgYmlk
aS5kaXIgPSBRQ2hhcjo6RGlyRU47CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRVM6CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgUUNoYXI6OkRpckNTOgogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3Rh
dHVzLmVvciA9PSBRQ2hhcjo6RGlyRU4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlk
aS5lb3IgPSBiaWRpLmN1cnJlbnQ7IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJCTjoKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQjoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBR
Q2hhcjo6RGlyUzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyV1M6CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpck9OOgotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYoYmlkaS5zdGF0dXMuZW9yID09IFFDaGFyOjpEaXJSKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yID09IFFDaGFyOjpEaXJSKSB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gbmV1dHJhbHMgZ28gdG8gUgogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRp
ciA9IFFDaGFyOjpEaXJFTjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1
cy5lb3IgPSBRQ2hhcjo6RGlyRU47Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGJpZGkuc3RhdHVzLmVvciA9PSBRQ2hhcjo6RGlyTCB8fAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKGJpZGkuc3RhdHVzLmVvciA9PSBRQ2hhcjo6RGlyRU4gJiYgYmlkaS5zdGF0
dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGlyTCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsgCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYmlkaS5zdGF0dXMuZW9yID0gZGlyQ3VycmVudDsKLSAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVz
LmVvciAhPSBRQ2hhcjo6RGlyTCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGlyRU4gfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9u
ZyAhPSBRQ2hhcjo6RGlyTCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJp
ZGkuZGlyICE9IFFDaGFyOjpEaXJMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
bnVtYmVycyBvbiBib3RoIHNpZGVzLCBuZXV0cmFscyBnZXQgcmlnaHQgdG8gbGVmdCBkaXJlY3Rp
b24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5kaXIgIT0gUUNoYXI6OkRp
ckwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyUjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJFTjsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpckVOOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsgYmlkaS5zdGF0dXMuZW9yID0gZGly
Q3VycmVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyUjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyRU47CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKKyAgICAgICAgICAgICAgICBiaWRpLnN0
YXR1cy5lb3IgPSBRQ2hhcjo6RGlyRU47CiAgICAgICAgICAgICAgICAgaWYgKGJpZGkuZGlyID09
IFFDaGFyOjpEaXJPTikKICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGly
TDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgY2FzZSBR
Q2hhcjo6RGlyQU46CiAgICAgICAgICAgICBkaXJDdXJyZW50ID0gUUNoYXI6OkRpckFOOwotICAg
ICAgICAgICAgc3dpdGNoKGJpZGkuc3RhdHVzLmxhc3QpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
YmlkaS5zdGF0dXMubGFzdCkgewogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckw6CiAg
ICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQU46Ci0gICAgICAgICAgICAgICAgICAgIGJp
ZGkuZW9yID0gYmlkaS5jdXJyZW50OyBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyQU47IGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFFD
aGFyOjpEaXJSOgogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckFMOgogICAgICAgICAg
ICAgICAgIGNhc2UgUUNoYXI6OkRpckVOOgogICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9
IGJpZGkubGFzdDsKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAg
ICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKLSAgICAgICAgICAgICAgICAg
ICAgYmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpckFOOwotICAgICAgICAgICAgICAgICAgICBi
aWRpLmRpciA9IFFDaGFyOjpEaXJBTjsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQ1M6CiAgICAgICAgICAgICAgICAgICAgIGlmIChi
aWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRpckFOKQotICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7IAotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6
OkRpckVTOgogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVUOgogICAgICAgICAgICAg
ICAgIGNhc2UgUUNoYXI6OkRpckJOOgpAQCAtMTE5NCwyNyArMTE5NCwyMCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gY2xvc2UgdGhlIEwgcnVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG5ldXRyYWxzIGJlY29t
ZSBhbiBSIHJ1bgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5s
YXN0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpclI7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwogICAgICAgICAgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUg
ZW1iZWRkaW5nIGRpcmVjdGlvbiBpcyBMCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
YXBwZW5kIG5ldXRyYWxzIHRvIHRoZSBMIHJ1biBhbmQgY2xvc2UgaXQKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJMOyAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9
IGJpZGkubGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwogICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckFO
OwotICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyQU47Cisg
ICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OworICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBiaWRpLmVvciA9
IGJpZGkuY3VycmVudDsKKyAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFFDaGFyOjpEaXJB
TjsKICAgICAgICAgICAgIGlmIChiaWRpLmRpciA9PSBRQ2hhcjo6RGlyT04pCiAgICAgICAgICAg
ICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyQU47CiAgICAgICAgICAgICBicmVhazsKQEAgLTEy
NjEsOCArMTI1NCwzMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3Qg
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChiaWRpLmN1cnJl
bnQuYXRFbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAocGFzdEVuZCkgewor
ICAgICAgICAgICAgaWYgKGJpZGkuZW9yID09IGJpZGkuY3VycmVudCkgeworICAgICAgICAgICAg
ICAgIGlmICghYmlkaS5yZWFjaGVkRW5kT2ZMaW5lKSB7CisgICAgICAgICAgICAgICAgICAgIGJp
ZGkuZW9yID0gYmlkaS5lbmRPZkxpbmU7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYmlk
aS5zdGF0dXMuZW9yKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJM
OgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyUjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckFOOgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJpZGkuZGlyID0gYmlkaS5zdGF0dXMuZW9yOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRU46Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBiaWRpLnN0YXR1cy5sYXN0U3Ry
b25nID09IFFDaGFyOjpEaXJMID8gUUNoYXI6OkRpckwgOiBRQ2hhcjo6RGlyRU47CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChmYWxzZSk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBiaWRpLmNvbnRleHQtPmRlcmVmKCk7Cisg
ICAgICAgICAgICAgICAgYmlkaSA9IHN0YXRlQXRFbmQ7CisgICAgICAgICAgICAgICAgYmlkaS5k
aXIgPSBRQ2hhcjo6RGlyT047CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KIAogICAgICAgICAvLyBzZXQgc3RhdHVzLmxhc3QgYXMgbmVlZGVkLgogICAg
ICAgICBzd2l0Y2ggKGRpckN1cnJlbnQpIHsKQEAgLTEzMDIsOCArMTMxNyw2IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAKICAgICAgICAgICAgICAgICBiaWRpLnN0
YXR1cy5sYXN0ID0gZGlyQ3VycmVudDsKICAgICAgICAgfQogCi0JaWYgKGF0RW5kKQotICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGJpZGkubGFzdCA9IGJpZGkuY3VycmVudDsKIAogCWlmIChl
bXB0eVJ1biAmJiAhKGRpckN1cnJlbnQgPT0gUUNoYXI6OkRpclJMRSB8fCBkaXJDdXJyZW50ID09
IFFDaGFyOjpEaXJMUkUgfHwgZGlyQ3VycmVudCA9PSBRQ2hhcjo6RGlyUkxPIHx8IGRpckN1cnJl
bnQgPT0gUUNoYXI6OkRpckxSTyB8fCBkaXJDdXJyZW50ID09IFFDaGFyOjpEaXJQREYpKSB7CkBA
IC0xMzIzLDQ0ICsxMzM2LDQyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZShj
b25zdCAKICAgICAgICAgICAgIGJpZGkuc29yID0gYmlkaS5jdXJyZW50OwogICAgICAgICB9CiAK
LQlpZiAoYmlkaS5jdXJyZW50ID09IGVuZCkgewotCSAgICBpZiAoZW1wdHlSdW4pCi0JCWJyZWFr
OwotCSAgICBhdEVuZCA9IHRydWU7Ci0JfQotICAgIH0KLQotICAgIGlmICghZW1wdHlSdW4gJiYg
YmlkaS5zb3IgIT0gYmlkaS5jdXJyZW50KSB7Ci0gICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0
OwotICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CisgICAgICAgIGlmICghcGFzdEVuZCAmJiAoYmlk
aS5jdXJyZW50ID09IGVuZCB8fCBiaWRpLmN1cnJlbnQuYXRFbmQoKSkpIHsKKyAgICAgICAgICAg
IGlmIChlbXB0eVJ1bikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHN0YXRl
QXRFbmQgPSBiaWRpOworICAgICAgICAgICAgYmlkaS5jb250ZXh0LT5yZWYoKTsKKyAgICAgICAg
ICAgIGJpZGkuZW5kT2ZMaW5lID0gYmlkaS5sYXN0OworICAgICAgICAgICAgcGFzdEVuZCA9IHRy
dWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyByZW9yZGVyIGxpbmUgYWNjb3JkaW5nIHRv
IHJ1biBzdHJ1Y3R1cmUuLi4KKyAgICAvLyBkbyBub3QgcmV2ZXJzZSBmb3IgdmlzdWFsbHkgb3Jk
ZXJlZCB3ZWIgc2l0ZXMKKyAgICBpZiAoIXN0eWxlKCktPnZpc3VhbGx5T3JkZXJlZCgpKSB7CiAK
LSAgICAvLyBmaXJzdCBmaW5kIGhpZ2hlc3QgYW5kIGxvd2VzdCBsZXZlbHMKLSAgICB1Y2hhciBs
ZXZlbExvdyA9IDEyODsKLSAgICB1Y2hhciBsZXZlbEhpZ2ggPSAwOwotICAgIEJpZGlSdW4qIHIg
PSBzRmlyc3RCaWRpUnVuOwotICAgIHdoaWxlIChyKSB7Ci0gICAgICAgIGlmIChyLT5sZXZlbCA+
IGxldmVsSGlnaCkKLSAgICAgICAgICAgIGxldmVsSGlnaCA9IHItPmxldmVsOwotICAgICAgICBp
ZiAoci0+bGV2ZWwgPCBsZXZlbExvdykKLSAgICAgICAgICAgIGxldmVsTG93ID0gci0+bGV2ZWw7
Ci0gICAgICAgIHIgPSByLT5uZXh0UnVuOwotICAgIH0KLQotICAgIC8vIGltcGxlbWVudHMgcmVv
cmRlcmluZyBvZiB0aGUgbGluZSAoTDIgYWNjb3JkaW5nIHRvIEJpZGkgc3BlYyk6Ci0gICAgLy8g
TDIuIEZyb20gdGhlIGhpZ2hlc3QgbGV2ZWwgZm91bmQgaW4gdGhlIHRleHQgdG8gdGhlIGxvd2Vz
dCBvZGQgbGV2ZWwgb24gZWFjaCBsaW5lLAotICAgIC8vIHJldmVyc2UgYW55IGNvbnRpZ3VvdXMg
c2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBhdCB0aGF0IGxldmVsIG9yIGhpZ2hlci4K
LQotICAgIC8vIHJldmVyc2luZyBpcyBvbmx5IGRvbmUgdXAgdG8gdGhlIGxvd2VzdCBvZGQgbGV2
ZWwKLSAgICBpZiAoIShsZXZlbExvdyUyKSkKLSAgICAgICAgbGV2ZWxMb3crKzsKKyAgICAgICAg
Ly8gZmlyc3QgZmluZCBoaWdoZXN0IGFuZCBsb3dlc3QgbGV2ZWxzCisgICAgICAgIHVjaGFyIGxl
dmVsTG93ID0gMTI4OworICAgICAgICB1Y2hhciBsZXZlbEhpZ2ggPSAwOworICAgICAgICBCaWRp
UnVuKiByID0gc0ZpcnN0QmlkaVJ1bjsKKyAgICAgICAgd2hpbGUgKHIpIHsKKyAgICAgICAgICAg
IGlmIChyLT5sZXZlbCA+IGxldmVsSGlnaCkKKyAgICAgICAgICAgICAgICBsZXZlbEhpZ2ggPSBy
LT5sZXZlbDsKKyAgICAgICAgICAgIGlmIChyLT5sZXZlbCA8IGxldmVsTG93KQorICAgICAgICAg
ICAgICAgIGxldmVsTG93ID0gci0+bGV2ZWw7CisgICAgICAgICAgICByID0gci0+bmV4dFJ1bjsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIGltcGxlbWVudHMgcmVvcmRlcmluZyBvZiB0aGUgbGlu
ZSAoTDIgYWNjb3JkaW5nIHRvIEJpZGkgc3BlYyk6CisgICAgICAgIC8vIEwyLiBGcm9tIHRoZSBo
aWdoZXN0IGxldmVsIGZvdW5kIGluIHRoZSB0ZXh0IHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsIG9u
IGVhY2ggbGluZSwKKyAgICAgICAgLy8gcmV2ZXJzZSBhbnkgY29udGlndW91cyBzZXF1ZW5jZSBv
ZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRoYXQgbGV2ZWwgb3IgaGlnaGVyLgorCisgICAgICAg
IC8vIHJldmVyc2luZyBpcyBvbmx5IGRvbmUgdXAgdG8gdGhlIGxvd2VzdCBvZGQgbGV2ZWwKKyAg
ICAgICAgaWYgKCEobGV2ZWxMb3clMikpCisgICAgICAgICAgICBsZXZlbExvdysrOwogCi0gICAg
aW50IGNvdW50ID0gc0JpZGlSdW5Db3VudCAtIDE7CisgICAgICAgIGludCBjb3VudCA9IHNCaWRp
UnVuQ291bnQgLSAxOwogCi0gICAgLy8gZG8gbm90IHJldmVyc2UgZm9yIHZpc3VhbGx5IG9yZGVy
ZWQgd2ViIHNpdGVzCi0gICAgaWYgKCFzdHlsZSgpLT52aXN1YWxseU9yZGVyZWQoKSkgewogICAg
ICAgICB3aGlsZSAobGV2ZWxIaWdoID49IGxldmVsTG93KSB7CiAgICAgICAgICAgICBpbnQgaSA9
IDA7CiAgICAgICAgICAgICBCaWRpUnVuKiBjdXJyUnVuID0gc0ZpcnN0QmlkaVJ1bjsKQEAgLTEz
ODAsNiArMTM5MSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAK
ICAgICAgICAgICAgIGxldmVsSGlnaC0tOwogICAgICAgICB9CiAgICAgfQorICAgIGJpZGkuZW5k
T2ZMaW5lLm9iaiA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGJ1aWxkQ29tcGFjdFJ1bnMoUmVuZGVy
T2JqZWN0KiBjb21wYWN0T2JqLCBCaWRpU3RhdGUmIGJpZGkpCkBAIC0xNTExLDcgKzE1MjMsOSBA
QCBRUmVjdCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oCiAKICAgICAgICAgYmlk
aS5zdGF0dXMubGFzdFN0cm9uZyA9IHN0YXJ0RW1iZWQtPmRpcjsKICAgICAgICAgYmlkaS5zdGF0
dXMubGFzdCA9IHN0YXJ0RW1iZWQtPmRpcjsKKyAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gc3Rh
cnRFbWJlZC0+ZGlyOwogICAgICAgICBiaWRpLmNvbnRleHQgPSBzdGFydEVtYmVkOworICAgICAg
ICBiaWRpLmRpciA9IFFDaGFyOjpEaXJPTjsKICAgICAgICAgCiAgICAgICAgIGlmICghc21pZHBv
aW50cykKICAgICAgICAgICAgIHNtaWRwb2ludHMgPSBuZXcgUU1lbUFycmF5PEJpZGlJdGVyYXRv
cj47CkBAIC0xNTI4LDkgKzE1NDIsMTMgQEAgUVJlY3QgUmVuZGVyQmxvY2s6OmxheW91dElubGlu
ZUNoaWxkcmVuKAogICAgICAgICAvLyBXZSBhbHNvIGZpbmQgdGhlIGZpcnN0IGNsZWFuIGxpbmUg
YW5kIGV4dHJhY3QgdGhlc2UgbGluZXMuICBXZSB3aWxsIGFkZCB0aGVtIGJhY2sKICAgICAgICAg
Ly8gaWYgd2UgZGV0ZXJtaW5lIHRoYXQgd2UncmUgYWJsZSB0byBzeW5jaHJvbml6ZSBhZnRlciBo
YW5kbGluZyBhbGwgb3VyIGRpcnR5IGxpbmVzLgogICAgICAgICBCaWRpSXRlcmF0b3IgY2xlYW5M
aW5lU3RhcnQ7CisgICAgICAgIEJpZGlTdGF0dXMgY2xlYW5MaW5lQmlkaVN0YXR1czsKKyAgICAg
ICAgQmlkaUNvbnRleHQqIGNsZWFuTGluZUJpZGlDb250ZXh0OwogICAgICAgICBpbnQgZW5kTGlu
ZVlQb3M7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIGVuZExpbmUgPSAoZnVsbExheW91dCB8fCAh
c3RhcnRMaW5lKSA/IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCA6IGRldGVy
bWluZUVuZFBvc2l0aW9uKHN0YXJ0TGluZSwgY2xlYW5MaW5lU3RhcnQsIGVuZExpbmVZUG9zKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBkZXRlcm1pbmVFbmRQb3NpdGlv
bihzdGFydExpbmUsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzLCBjbGVhbkxp
bmVCaWRpQ29udGV4dCwgZW5kTGluZVlQb3MpOworICAgICAgICBpZiAoZW5kTGluZSAmJiBjbGVh
bkxpbmVCaWRpQ29udGV4dCkKKyAgICAgICAgICAgIGNsZWFuTGluZUJpZGlDb250ZXh0LT5yZWYo
KTsKICAgICAgICAgaWYgKHN0YXJ0TGluZSkgewogICAgICAgICAgICAgdXNlUmVwYWludFJlY3Qg
PSB0cnVlOwogICAgICAgICAgICAgc3RhcnRMaW5lQm90dG9tID0gc3RhcnRMaW5lLT5ib3R0b21P
dmVyZmxvdygpOwpAQCAtMTU1MCw3ICsxNTY4LDcgQEAgUVJlY3QgUmVuZGVyQmxvY2s6OmxheW91
dElubGluZUNoaWxkcmVuKAogICAgICAgICBib29sIGVuZExpbmVNYXRjaGVkID0gZmFsc2U7CiAg
ICAgICAgIHdoaWxlICghZW5kLmF0RW5kKCkpIHsKICAgICAgICAgICAgIHN0YXJ0ID0gZW5kOwot
ICAgICAgICAgICAgaWYgKGVuZExpbmUgJiYgKGVuZExpbmVNYXRjaGVkID0gbWF0Y2hlZEVuZExp
bmUoc3RhcnQsIGNsZWFuTGluZVN0YXJ0LCBlbmRMaW5lLCBlbmRMaW5lWVBvcykpKQorICAgICAg
ICAgICAgaWYgKGVuZExpbmUgJiYgKGVuZExpbmVNYXRjaGVkID0gbWF0Y2hlZEVuZExpbmUoc3Rh
cnQsIGJpZGkuc3RhdHVzLCBiaWRpLmNvbnRleHQsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVC
aWRpU3RhdHVzLCBjbGVhbkxpbmVCaWRpQ29udGV4dCwgZW5kTGluZSwgZW5kTGluZVlQb3MpKSkK
ICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgYmV0d2Vlbk1pZHBvaW50cyA9
IGZhbHNlOwpAQCAtMTU2MSw3ICsxNTc5LDggQEAgUVJlY3QgUmVuZGVyQmxvY2s6OmxheW91dElu
bGluZUNoaWxkcmVuKAogICAgICAgICAgICAgICAgIGVuZCA9IHN0YXJ0OwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgZW5kID0gZmluZE5leHRMaW5lQnJlYWsoc3RhcnQsIGJpZGkpOwotICAg
ICAgICAgICAgaWYoIHN0YXJ0LmF0RW5kKCkgKSBicmVhazsKKyAgICAgICAgICAgIGlmIChzdGFy
dC5hdEVuZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaWYgKCFpc0xp
bmVFbXB0eSkgewogICAgICAgICAgICAgICAgIGJpZGlSZW9yZGVyTGluZShzdGFydCwgZW5kLCBi
aWRpKTsKIApAQCAtMTU5OSw3ICsxNjE4LDcgQEAgUVJlY3QgUmVuZGVyQmxvY2s6OmxheW91dElu
bGluZUNoaWxkcmVuKAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChs
aW5lQm94KQotICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5zZXRMaW5lQnJlYWtJbmZvKGVu
ZC5vYmosIGVuZC5wb3MpOworICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5zZXRMaW5lQnJl
YWtJbmZvKGVuZC5vYmosIGVuZC5wb3MsICZiaWRpLnN0YXR1cywgYmlkaS5jb250ZXh0KTsKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2ZpcnN0TGluZSA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgIG5ld0xpbmUoKTsKQEAgLTE2MTAsOCArMTYyOSw3IEBAIFFSZWN0IFJlbmRl
ckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbigKICAgICAgICAgICAgIHNDb21wYWN0Rmlyc3RC
aWRpUnVuID0gc0NvbXBhY3RMYXN0QmlkaVJ1biA9IDA7CiAgICAgICAgICAgICBzQ29tcGFjdEJp
ZGlSdW5Db3VudCA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgc3RhcnRFbWJlZC0+ZGVyZWYoKTsK
LSAgICAgICAgLy9lbWJlZC0+ZGVyZWYoKTsKKyAgICAgICAgYmlkaS5jb250ZXh0LT5kZXJlZigp
OwogICAgICAgICAKICAgICAgICAgaWYgKGVuZExpbmUpIHsKICAgICAgICAgICAgIGlmIChlbmRM
aW5lTWF0Y2hlZCkgewpAQCAtMTY1NCw2ICsxNjcyLDggQEAgUVJlY3QgUmVuZGVyQmxvY2s6Omxh
eW91dElubGluZUNoaWxkcmVuKAogICAgICAgICAgICAgICAgICAgICBsaW5lID0gbmV4dDsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2xlYW5MaW5l
QmlkaUNvbnRleHQpCisgICAgICAgICAgICAgICAgY2xlYW5MaW5lQmlkaUNvbnRleHQtPmRlcmVm
KCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3MTYsOCArMTczNiw3IEBAIFJvb3RJbmxpbmVC
b3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGEKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IEtIVE1MQXNzZXJ0KCFtX2ZpcnN0TGluZUJveCAmJiAhbV9sYXN0TGluZUJveCk7CiAgICAgICAg
IH0KLSAgICB9Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAgICAgICAgZm9yIChjdXJyID0g
Zmlyc3RSb290Qm94KCk7IGN1cnIgJiYgIWN1cnItPmlzRGlydHkoKTsgY3VyciA9IGN1cnItPm5l
eHRSb290Qm94KCkpOwogICAgICAgICBpZiAoY3VycikgewogICAgICAgICAgICAgLy8gV2UgaGF2
ZSBhIGRpcnR5IGxpbmUuCkBAIC0xNzI2LDggKzE3NDUsNyBAQCBSb290SW5saW5lQm94KiBSZW5k
ZXJCbG9jazo6ZGV0ZXJtaW5lU3RhCiAgICAgICAgICAgICAgICAgaWYgKCFjdXJyLT5wcmV2Um9v
dEJveCgpLT5lbmRzV2l0aEJyZWFrKCkpCiAgICAgICAgICAgICAgICAgICAgIGN1cnIgPSBjdXJy
LT5wcmV2Um9vdEJveCgpOyAgLy8gVGhlIHByZXZpb3VzIGxpbmUgZGlkbid0IGJyZWFrIGNsZWFu
bHksIHNvIHRyZWF0IGl0IGFzIGRpcnR5IGFsc28uCiAgICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBObyBkaXJ0
eSBsaW5lcyB3ZXJlIGZvdW5kLgogICAgICAgICAgICAgLy8gSWYgdGhlIGxhc3QgbGluZSBkaWRu
J3QgYnJlYWsgY2xlYW5seSwgdHJlYXQgaXQgYXMgZGlydHkuCiAgICAgICAgICAgICBpZiAobGFz
dFJvb3RCb3goKSAmJiAhbGFzdFJvb3RCb3goKS0+ZW5kc1dpdGhCcmVhaygpKQpAQCAtMTc0Nywx
OCArMTc2NSwyMSBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhCiAg
ICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gYm90dG9tT2ZMaW5lOwogICAgICAgICBzdGFy
dE9iaiA9IGxhc3QtPmxpbmVCcmVha09iaigpOwogICAgICAgICBwb3MgPSBsYXN0LT5saW5lQnJl
YWtQb3MoKTsKLSAgICB9Ci0gICAgZWxzZQorICAgICAgICBiaWRpLnN0YXR1cyA9IGxhc3QtPmxp
bmVCcmVha0JpZGlTdGF0dXMoKTsKKyAgICAgICAgQmlkaUNvbnRleHQqIG9sZENvbnRleHQgPSBi
aWRpLmNvbnRleHQ7CisgICAgICAgIGJpZGkuY29udGV4dCA9IGxhc3QtPmxpbmVCcmVha0JpZGlD
b250ZXh0KCk7CisgICAgICAgIGJpZGkuY29udGV4dC0+cmVmKCk7CisgICAgICAgIG9sZENvbnRl
eHQtPmRlcmVmKCk7CisgICAgfSBlbHNlCiAgICAgICAgIHN0YXJ0T2JqID0gYmlkaUZpcnN0KHRo
aXMsIGJpZGksIDApOwogICAgICAgICAKLSAgICBiaWRpLmFkanVzdEVtYmVkZGluZyA9IHRydWU7
CiAgICAgc3RhcnQgPSBCaWRpSXRlcmF0b3IodGhpcywgc3RhcnRPYmosIHBvcyk7Ci0gICAgYmlk
aS5hZGp1c3RFbWJlZGRpbmcgPSBmYWxzZTsKICAgICAKICAgICByZXR1cm4gY3VycjsKIH0KIAog
Um9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZUVuZFBvc2l0aW9uKFJvb3RJbmxp
bmVCb3gqIHN0YXJ0TGluZSwgQmlkaUl0ZXJhdG9yJiBjbGVhbkxpbmVTdGFydCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaWRpU3RhdHVzJiBjbGVh
bkxpbmVCaWRpU3RhdHVzLCBCaWRpQ29udGV4dComIGNsZWFuTGluZUJpZGlDb250ZXh0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgeVBvcykK
IHsKICAgICBSb290SW5saW5lQm94KiBsYXN0ID0gMDsKQEAgLTE3NzYsNyArMTc5NywxMCBAQCBS
b290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lRW5kCiAgICAgaWYgKCFsYXN0KQog
ICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBjbGVhbkxpbmVTdGFydCA9IEJpZGlJdGVyYXRv
cih0aGlzLCBsYXN0LT5wcmV2Um9vdEJveCgpLT5saW5lQnJlYWtPYmooKSwgbGFzdC0+cHJldlJv
b3RCb3goKS0+bGluZUJyZWFrUG9zKCkpOworICAgIFJvb3RJbmxpbmVCb3gqIHByZXYgPSBsYXN0
LT5wcmV2Um9vdEJveCgpOworICAgIGNsZWFuTGluZVN0YXJ0ID0gQmlkaUl0ZXJhdG9yKHRoaXMs
IHByZXYtPmxpbmVCcmVha09iaigpLCBwcmV2LT5saW5lQnJlYWtQb3MoKSk7CisgICAgY2xlYW5M
aW5lQmlkaVN0YXR1cyA9IHByZXYtPmxpbmVCcmVha0JpZGlTdGF0dXMoKTsKKyAgICBjbGVhbkxp
bmVCaWRpQ29udGV4dCA9IHByZXYtPmxpbmVCcmVha0JpZGlDb250ZXh0KCk7CiAgICAgeVBvcyA9
IGxhc3QtPnByZXZSb290Qm94KCktPmJsb2NrSGVpZ2h0KCk7CiAgICAgCiAgICAgZm9yIChSb290
SW5saW5lQm94KiBsaW5lID0gbGFzdDsgbGluZTsgbGluZSA9IGxpbmUtPm5leHRSb290Qm94KCkp
CkBAIC0xNzg2LDExICsxODEwLDEyIEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRl
cm1pbmVFbmQKICAgICByZXR1cm4gbGFzdDsKIH0KIAotYm9vbCBSZW5kZXJCbG9jazo6bWF0Y2hl
ZEVuZExpbmUoY29uc3QgQmlkaUl0ZXJhdG9yJiBzdGFydCwgY29uc3QgQmlkaUl0ZXJhdG9yJiBl
bmRMaW5lU3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUm9vdElubGlu
ZUJveComIGVuZExpbmUsIGludCYgZW5kWVBvcykKK2Jvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRF
bmRMaW5lKGNvbnN0IEJpZGlJdGVyYXRvciYgc3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1
cywgQmlkaUNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBCaWRpSXRlcmF0b3ImIGVuZExpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgZW5k
TGluZVN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlDb250ZXh0
KiBlbmRMaW5lQ29udGV4dCwgUm9vdElubGluZUJveComIGVuZExpbmUsIGludCYgZW5kWVBvcykK
IHsKICAgICBpZiAoc3RhcnQgPT0gZW5kTGluZVN0YXJ0KQotICAgICAgICByZXR1cm4gdHJ1ZTsg
Ly8gVGhlIGNvbW1vbiBjYXNlLiBBbGwgdGhlIGRhdGEgd2UgYWxyZWFkeSBoYXZlIGlzIGNvcnJl
Y3QuCisgICAgICAgIHJldHVybiBzdGF0dXMgPT0gZW5kTGluZVN0YXR1cyAmJiBjb250ZXh0ID09
IGVuZExpbmVDb250ZXh0OwogICAgIGVsc2UgewogICAgICAgICAvLyBUaGUgZmlyc3QgY2xlYW4g
bGluZSBkb2Vzbid0IG1hdGNoLCBidXQgd2UgY2FuIGNoZWNrIGEgaGFuZGZ1bCBvZiBmb2xsb3dp
bmcgbGluZXMgdG8gdHJ5CiAgICAgICAgIC8vIHRvIG1hdGNoIGJhY2sgdXAuCkBAIC0xNzk5LDYg
KzE4MjQsOCBAQCBib29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZShjb25zdCBCCiAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtTGluZXMgJiYgbGluZTsgaSsrLCBsaW5lID0gbGlu
ZS0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICAgICAgaWYgKGxpbmUtPmxpbmVCcmVha09iaigp
ID09IHN0YXJ0Lm9iaiAmJiBsaW5lLT5saW5lQnJlYWtQb3MoKSA9PSBzdGFydC5wb3MpIHsKICAg
ICAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgbWF0Y2guCisgICAgICAgICAgICAgICAgaWYgKGxp
bmUtPmxpbmVCcmVha0JpZGlTdGF0dXMoKSAhPSBzdGF0dXMgfHwgbGluZS0+bGluZUJyZWFrQmlk
aUNvbnRleHQoKSAhPSBjb250ZXh0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
IC8vIC4uLmJ1dCB0aGUgYmlkaSBzdGF0ZSBkb2Vzbid0IG1hdGNoLgogICAgICAgICAgICAgICAg
IFJvb3RJbmxpbmVCb3gqIHJlc3VsdCA9IGxpbmUtPm5leHRSb290Qm94KCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIC8vIFNldCBvdXIgeVBvcyB0
byBiZSB0aGUgYmxvY2sgaGVpZ2h0IG9mIGVuZExpbmUuCkBAIC0xOTUxLDcgKzE5NzgsNyBAQCBC
aWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyCiAgICAgICAgICAgICAgICAg
aWYgKCFpc0xpbmVFbXB0eSkgewogICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGNoZWNrIHRo
ZSBjbGVhciBzdGF0dXMgZm9yIG5vbi1lbXB0eSBsaW5lcy4KICAgICAgICAgICAgICAgICAgICAg
RUNsZWFyIGNsZWFyID0gby0+c3R5bGUoKS0+Y2xlYXIoKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYoY2xlYXIgIT0gQ05PTkUpCisgICAgICAgICAgICAgICAgICAgIGlmIChjbGVhciAhPSBDTk9O
RSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1fY2xlYXJTdGF0dXMgPSAoRUNsZWFyKSAobV9j
bGVhclN0YXR1cyB8IGNsZWFyKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBA
IC0yMDY3LDEzICsyMDk0LDEzIEBAIEJpZGlJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRM
aW5lQnIKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICggby0+aXNUZXh0KCkgKSB7CisgICAgICAgIH0gZWxz
ZSBpZiAoby0+aXNUZXh0KCkpIHsKICAgICAgICAgICAgIFJlbmRlclRleHQgKnQgPSBzdGF0aWNf
Y2FzdDxSZW5kZXJUZXh0ICo+KG8pOwogICAgICAgICAgICAgaW50IHN0cmxlbiA9IHQtPnN0cmlu
Z0xlbmd0aCgpOwogICAgICAgICAgICAgaW50IGxlbiA9IHN0cmxlbiAtIHBvczsKICAgICAgICAg
ICAgIFFDaGFyICpzdHIgPSB0LT50ZXh0KCk7CiAKLSAgICAgICAgICAgIGNvbnN0IEZvbnQgKmYg
PSB0LT5odG1sRm9udCggbV9maXJzdExpbmUgKTsKKyAgICAgICAgICAgIGNvbnN0IEZvbnQgKmYg
PSB0LT5odG1sRm9udChtX2ZpcnN0TGluZSk7CiAgICAgICAgICAgICAvLyBwcm9wb3J0aW9uYWwg
Zm9udCwgbmVlZHMgYSBiaXQgbW9yZSB3b3JrLgogICAgICAgICAgICAgaW50IGxhc3RTcGFjZSA9
IHBvczsKICAgICAgICAgICAgIGludCB3b3JkU3BhY2luZyA9IG8tPnN0eWxlKCktPndvcmRTcGFj
aW5nKCk7CkBAIC0yMjAxLDEzICsyMjI4LDEyIEBAIEJpZGlJdGVyYXRvciBSZW5kZXJCbG9jazo6
ZmluZE5leHRMaW5lQnIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3Rv
IGVuZDsgLy8gRGlkbid0IGZpdC4gSnVtcCB0byB0aGUgZW5kLgotICAgICAgICAgICAgICAgICAg
ICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocG9zID4gMCAmJiBzdHJb
cG9zLTFdLnVuaWNvZGUoKSA9PSBTT0ZUX0hZUEhFTikKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAocG9zID4gMCAmJiBzdHJbcG9zLTFdLnVuaWNvZGUoKSA9PSBTT0ZUX0hZUEhF
TikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCB0aGUgd2lkdGggb2Yg
dGhlIHNvZnQgaHlwaGVuIG91dCBzaW5jZSB3ZSBmaXQgb24gYSBsaW5lLgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRtcFcgLT0gdC0+d2lkdGgocG9zLTEsIDEsIGYsIHcrdG1wVyk7CiAg
ICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICBpZiggKihzdHIrcG9z
KSA9PSAnXG4nICYmIG8tPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICgqKHN0citwb3MpID09ICdcbicgJiYgby0+c3R5bGUoKS0+cHJlc2VydmVO
ZXdsaW5lKCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5vYmogPSBvOwogICAg
ICAgICAgICAgICAgICAgICAgICAgbEJyZWFrLnBvcyA9IHBvczsKICAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBsQnJlYWs7CkBAIC0yMjM5LDEzICsyMjY1LDEyIEBAIEJpZGlJdGVyYXRv
ciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnIKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXN0U3BhY2UgPSBwb3M7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAo
aWdub3JpbmdTcGFjZXMpIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlnbm9yaW5nU3Bh
Y2VzKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFN0b3AgaWdub3Jpbmcgc3BhY2VzIGFuZCBi
ZWdpbiBhdCB0aGlzCiAgICAgICAgICAgICAgICAgICAgIC8vIG5ldyBwb2ludC4KICAgICAgICAg
ICAgICAgICAgICAgaWdub3JpbmdTcGFjZXMgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAg
bGFzdFNwYWNlID0gcG9zOyAvLyBlLmcuLCAiRm9vICAgIGdvbyIsIGRvbid0IGFkZCBpbiBhbnkg
b2YgdGhlIGlnbm9yZWQgc3BhY2VzLgotICAgICAgICAgICAgICAgICAgICBCaWRpSXRlcmF0b3Ig
c3RhcnRNaWQgKCAwLCBvLCBwb3MgKTsKKyAgICAgICAgICAgICAgICAgICAgQmlkaUl0ZXJhdG9y
IHN0YXJ0TWlkKDAsIG8sIHBvcyk7CiAgICAgICAgICAgICAgICAgICAgIGFkZE1pZHBvaW50KHN0
YXJ0TWlkKTsKICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0MTYsNyArMjQ0MSw3IEBAIEJpZGlJ
dGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnIKICAgICAgICAgICAgIC8vIEFkZCBh
IG5ldyBlbmQgbWlkcG9pbnQgdGhhdCBzdG9wcyByaWdodCBhdCB0aGUgdmVyeSBlbmQuCiAgICAg
ICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPih0cmFp
bGluZ1NwYWNlT2JqZWN0KTsKICAgICAgICAgICAgIHVuc2lnbmVkIHBvcyA9IHRleHQtPmxlbmd0
aCgpID49MiA/IHRleHQtPmxlbmd0aCgpIC0gMiA6IFVJTlRfTUFYOwotICAgICAgICAgICAgQmlk
aUl0ZXJhdG9yIGVuZE1pZCAoIDAsIHRyYWlsaW5nU3BhY2VPYmplY3QsIHBvcyApOworICAgICAg
ICAgICAgQmlkaUl0ZXJhdG9yIGVuZE1pZCgwLCB0cmFpbGluZ1NwYWNlT2JqZWN0LCBwb3MpOwog
ICAgICAgICAgICAgYWRkTWlkcG9pbnQoZW5kTWlkKTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6
IHJlbmRlcl9saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0
bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzIKZGlm
ZiAtcCAtdSAtcjEuMzIgcmVuZGVyX2xpbmUuaAotLS0gcmVuZGVyX2xpbmUuaAk2IE9jdCAyMDA1
IDAwOjUzOjU3IC0wMDAwCTEuMzIKKysrIHJlbmRlcl9saW5lLmgJNSBOb3YgMjAwNSAxNzozOTow
NyAtMDAwMApAQCAtMjMsNiArMjMsNyBAQAogI2RlZmluZSBSRU5ERVJfTElORV9ICiAKICNpbmNs
dWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5oIgorI2luY2x1ZGUgImJpZGkuaCIKIAogbmFt
ZXNwYWNlIERPTSB7CiBjbGFzcyBBdG9taWNTdHJpbmc7CkBAIC0zMDIsMTAgKzMwMywxMiBAQCBj
bGFzcyBSb290SW5saW5lQm94IDogcHVibGljIElubGluZUZsb3dCCiBwdWJsaWM6CiAgICAgUm9v
dElubGluZUJveChSZW5kZXJPYmplY3QqIG9iaikKICAgICA6IElubGluZUZsb3dCb3gob2JqKSwg
bV90b3BPdmVyZmxvdygwKSwgbV9ib3R0b21PdmVyZmxvdygwKSwgbV9sZWZ0T3ZlcmZsb3coMCks
IG1fcmlnaHRPdmVyZmxvdygwKSwKLSAgICAgIG1fbGluZUJyZWFrT2JqKDApLCBtX2xpbmVCcmVh
a1BvcygwKSwgCisgICAgICBtX2xpbmVCcmVha09iaigwKSwgbV9saW5lQnJlYWtQb3MoMCksIG1f
bGluZUJyZWFrQ29udGV4dCgwKSwKICAgICAgIG1fYmxvY2tIZWlnaHQoMCksIG1fZW5kc1dpdGhC
cmVhayhmYWxzZSksIG1faGFzU2VsZWN0ZWRDaGlsZHJlbihmYWxzZSksIG1fZWxsaXBzaXNCb3go
MCkKICAgICB7fQogICAgIAorICAgIH5Sb290SW5saW5lQm94KCk7CisgICAgCiAgICAgdmlydHVh
bCB2b2lkIGRlc3Ryb3koUmVuZGVyQXJlbmEqIHJlbmRlckFyZW5hKTsKICAgICB2b2lkIGRldGFj
aEVsbGlwc2lzQm94KFJlbmRlckFyZW5hKiByZW5kZXJBcmVuYSk7CiAKQEAgLTMyMSw4ICszMjQs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgcmlnaHRPdmVyZmxvdygpIHsgcmV0dXJuIG1f
cmlnaHRPdmVyZmxvdzsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJ0aWNhbE92ZXJmbG93UG9z
aXRpb25zKGludCB0b3AsIGludCBib3R0b20pIHsgbV90b3BPdmVyZmxvdyA9IHRvcDsgbV9ib3R0
b21PdmVyZmxvdyA9IGJvdHRvbTsgfQogICAgIHZvaWQgc2V0SG9yaXpvbnRhbE92ZXJmbG93UG9z
aXRpb25zKGludCBsZWZ0LCBpbnQgcmlnaHQpIHsgbV9sZWZ0T3ZlcmZsb3cgPSBsZWZ0OyBtX3Jp
Z2h0T3ZlcmZsb3cgPSByaWdodDsgfQotICAgIHZvaWQgc2V0TGluZUJyZWFrSW5mbyhSZW5kZXJP
YmplY3QqIG9iaiwgdWludCBicmVha1BvcykKLSAgICB7IG1fbGluZUJyZWFrT2JqID0gb2JqOyBt
X2xpbmVCcmVha1BvcyA9IGJyZWFrUG9zOyB9CisgICAgdm9pZCBzZXRMaW5lQnJlYWtJbmZvKFJl
bmRlck9iamVjdCogb2JqLCB1aW50IGJyZWFrUG9zLCBCaWRpU3RhdHVzKiBzdGF0dXMsIEJpZGlD
b250ZXh0KiBjb250ZXh0KTsKICAgICB2b2lkIHNldExpbmVCcmVha1BvcyhpbnQgcCkgeyBtX2xp
bmVCcmVha1BvcyA9IHA7IH0KIAogICAgIHZvaWQgc2V0QmxvY2tIZWlnaHQoaW50IGgpIHsgbV9i
bG9ja0hlaWdodCA9IGg7IH0KQEAgLTMzMiw2ICszMzQsOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBl
bmRzV2l0aEJyZWFrKCkgY29uc3QgeyByZXR1cm4gbV9lbmRzV2l0aEJyZWFrOyB9CiAgICAgUmVu
ZGVyT2JqZWN0KiBsaW5lQnJlYWtPYmooKSBjb25zdCB7IHJldHVybiBtX2xpbmVCcmVha09iajsg
fQogICAgIHVpbnQgbGluZUJyZWFrUG9zKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQnJlYWtQb3M7
IH0KKyAgICBCaWRpU3RhdHVzIGxpbmVCcmVha0JpZGlTdGF0dXMoKSBjb25zdCB7IHJldHVybiBt
X2xpbmVCcmVha0JpZGlTdGF0dXM7IH0KKyAgICBCaWRpQ29udGV4dCogbGluZUJyZWFrQmlkaUNv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX2xpbmVCcmVha0NvbnRleHQ7IH0KIAogICAgIHZvaWQg
Y2hpbGRSZW1vdmVkKElubGluZUJveCogYm94KTsKIApAQCAtMzgwLDYgKzM4NCw5IEBAIHByb3Rl
Y3RlZDoKICAgICBSZW5kZXJPYmplY3QqIG1fbGluZUJyZWFrT2JqOwogICAgIHVpbnQgbV9saW5l
QnJlYWtQb3M7CiAgICAgCisgICAgQmlkaVN0YXR1cyBtX2xpbmVCcmVha0JpZGlTdGF0dXM7Cisg
ICAgQmlkaUNvbnRleHQqIG1fbGluZUJyZWFrQ29udGV4dDsKKyAgICAKICAgICAvLyBUaGUgaGVp
Z2h0IG9mIHRoZSBibG9jayBhdCB0aGUgZW5kIG9mIHRoaXMgbGluZS4gIFRoaXMgaXMgd2hlcmUg
dGhlIG5leHQgbGluZSBzdGFydHMuCiAgICAgaW50IG1fYmxvY2tIZWlnaHQ7CiAgICAgCkluZGV4
OiByZW5kZXJfbGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUv
a2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS41
NgpkaWZmIC1wIC11IC1yMS41NiByZW5kZXJfbGluZS5jcHAKLS0tIHJlbmRlcl9saW5lLmNwcAky
IE5vdiAyMDA1IDA4OjUyOjQ1IC0wMDAwCTEuNTYKKysrIHJlbmRlcl9saW5lLmNwcAk1IE5vdiAy
MDA1IDE3OjM5OjA4IC0wMDAwCkBAIC0xMTIyLDYgKzExMjIsMTIgQEAgYm9vbCBFbGxpcHNpc0Jv
eDo6bm9kZUF0UG9pbnQoUmVuZGVyT2JqZQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorUm9vdElu
bGluZUJveDo6flJvb3RJbmxpbmVCb3goKQoreworICAgIGlmIChtX2xpbmVCcmVha0NvbnRleHQp
CisgICAgICAgIG1fbGluZUJyZWFrQ29udGV4dC0+ZGVyZWYoKTsKK30KKwogdm9pZCBSb290SW5s
aW5lQm94OjpkZXN0cm95KFJlbmRlckFyZW5hKiBhcmVuYSkKIHsKICAgICBkZXRhY2hFbGxpcHNp
c0JveChhcmVuYSk7CkBAIC0xMjIwLDExICsxMjI2LDExIEBAIHZvaWQgUm9vdElubGluZUJveDo6
YWRqdXN0UG9zaXRpb24oaW50IGQKIHZvaWQgUm9vdElubGluZUJveDo6Y2hpbGRSZW1vdmVkKElu
bGluZUJveCogYm94KQogewogICAgIGlmIChib3gtPm9iamVjdCgpID09IG1fbGluZUJyZWFrT2Jq
KQotICAgICAgICBzZXRMaW5lQnJlYWtJbmZvKDAsMCk7CisgICAgICAgIHNldExpbmVCcmVha0lu
Zm8oMCwgMCwgMCwgMCk7CiAKICAgICBSb290SW5saW5lQm94KiBwcmV2ID0gcHJldlJvb3RCb3go
KTsKICAgICBpZiAocHJldiAmJiBwcmV2LT5saW5lQnJlYWtPYmooKSA9PSBib3gtPm9iamVjdCgp
KSB7Ci0gICAgICAgIHByZXYtPnNldExpbmVCcmVha0luZm8oMCwwKTsKKyAgICAgICAgcHJldi0+
c2V0TGluZUJyZWFrSW5mbygwLCAwLCAwLCAwKTsKICAgICAgICAgcHJldi0+bWFya0RpcnR5KCk7
CiAgICAgfQogfQpAQCAtMTM2Nyw1ICsxMzczLDE4IEBAIElubGluZUJveCogUm9vdElubGluZUJv
eDo6Y2xvc2VzdExlYWZDaGkKICAgICByZXR1cm4gbGFzdExlYWY7CiB9CiAKK3ZvaWQgUm9vdElu
bGluZUJveDo6c2V0TGluZUJyZWFrSW5mbyhSZW5kZXJPYmplY3QqIG9iaiwgdWludCBicmVha1Bv
cywgQmlkaVN0YXR1cyogc3RhdHVzLCBCaWRpQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBtX2xp
bmVCcmVha09iaiA9IG9iajsKKyAgICBtX2xpbmVCcmVha1BvcyA9IGJyZWFrUG9zOworICAgIEJp
ZGlDb250ZXh0KiBvbGRDb250ZXh0ID0gbV9saW5lQnJlYWtDb250ZXh0OworICAgIG1fbGluZUJy
ZWFrQ29udGV4dCA9IGNvbnRleHQ7CisgICAgaWYgKG1fbGluZUJyZWFrQ29udGV4dCkKKyAgICAg
ICAgbV9saW5lQnJlYWtDb250ZXh0LT5yZWYoKTsKKyAgICBpZiAob2xkQ29udGV4dCkKKyAgICAg
ICAgb2xkQ29udGV4dC0+ZGVyZWYoKTsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICBtX2xpbmVC
cmVha0JpZGlTdGF0dXMgPSAqc3RhdHVzOworfQogfQogCkluZGV4OiByZW5kZXJfYmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVu
ZGVyX2Jsb2NrLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzIKZGlmZiAtcCAtdSAtcjEuNzIg
cmVuZGVyX2Jsb2NrLmgKLS0tIHJlbmRlcl9ibG9jay5oCTMgTm92IDIwMDUgMjE6MDU6NTkgLTAw
MDAJMS43MgorKysgcmVuZGVyX2Jsb2NrLmgJNSBOb3YgMjAwNSAxNzozOTowOSAtMDAwMApAQCAt
MTI0LDkgKzEyNCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIGltcGxlbWVudGF0aW9uIG9mIHRo
ZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGlzIGluIGJpZGkuY3BwCiAgICAgdm9pZCBiaWRpUmVvcmRl
ckxpbmUoY29uc3QgQmlkaUl0ZXJhdG9yICZzdGFydCwgY29uc3QgQmlkaUl0ZXJhdG9yICZlbmQs
IEJpZGlTdGF0ZSAmYmlkaSApOwogICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWluZVN0YXJ0UG9z
aXRpb24oYm9vbCBmdWxsTGF5b3V0LCBCaWRpSXRlcmF0b3IgJnN0YXJ0LCBCaWRpU3RhdGUgJmJp
ZGkpOwotICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWluZUVuZFBvc2l0aW9uKFJvb3RJbmxpbmVC
b3gqIHN0YXJ0Qm94LCBCaWRpSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBpbnQmIHlQb3MpOwot
ICAgIGJvb2wgbWF0Y2hlZEVuZExpbmUoY29uc3QgQmlkaUl0ZXJhdG9yJiBzdGFydCwgY29uc3Qg
QmlkaUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgUm9v
dElubGluZUJveComIGVuZExpbmUsIGludCYgZW5kWVBvcyk7CisgICAgUm9vdElubGluZUJveCog
ZGV0ZXJtaW5lRW5kUG9zaXRpb24oUm9vdElubGluZUJveCogc3RhcnRCb3gsIEJpZGlJdGVyYXRv
ciYgY2xlYW5MaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywgQmlkaUNvbnRleHQqJiBjbGVhbkxp
bmVCaWRpQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQmIHlQb3MpOworICAgIGJvb2wgbWF0Y2hlZEVuZExpbmUoY29uc3QgQmlkaUl0ZXJhdG9yJiBz
dGFydCwgY29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzLCBCaWRpQ29udGV4dCogY29udGV4dCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJpZGlJdGVyYXRvciYgZW5kTGluZVN0YXJ0LCBj
b25zdCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAg
QmlkaUNvbnRleHQqIGVuZExpbmVDb250ZXh0LCBSb290SW5saW5lQm94KiYgZW5kTGluZSwgaW50
JiBlbmRZUG9zKTsKICAgICBpbnQgc2tpcFdoaXRlc3BhY2UoQmlkaUl0ZXJhdG9yICYsIEJpZGlT
dGF0ZSAmKTsKICAgICBCaWRpSXRlcmF0b3IgZmluZE5leHRMaW5lQnJlYWsoQmlkaUl0ZXJhdG9y
ICZzdGFydCwgQmlkaVN0YXRlICZpbmZvICk7CiAgICAgUm9vdElubGluZUJveCogY29uc3RydWN0
TGluZShjb25zdCBCaWRpSXRlcmF0b3ImIHN0YXJ0LCBjb25zdCBCaWRpSXRlcmF0b3ImIGVuZCk7
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4608</attachid>
            <date>2005-11-05 10:11:47 -0800</date>
            <delta_ts>2005-11-06 16:31:35 -0800</delta_ts>
            <desc>Alternative patch</desc>
            <filename>5172_r4.patch</filename>
            <type>text/plain</type>
            <size>37472</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpZGkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9yZW5kZXJpbmcvYmlkaS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE3CmRpZmYgLXAgLXUg
LXIxLjE3IGJpZGkuaAotLS0gYmlkaS5oCTYgT2N0IDIwMDUgMDA6NTM6NTUgLTAwMDAJMS4xNwor
KysgYmlkaS5oCTUgTm92IDIwMDUgMTg6MTA6NTQgLTAwMDAKQEAgLTMyLDYgKzMyLDE0IEBAIG5h
bWVzcGFjZSBraHRtbCB7CiAgICAgY2xhc3MgUmVuZGVyT2JqZWN0OwogICAgIGNsYXNzIElubGlu
ZUJveDsKIAorICAgIHN0cnVjdCBCaWRpU3RhdHVzIHsKKyAgICAgICAgQmlkaVN0YXR1cygpIDog
ZW9yKFFDaGFyOjpEaXJPTiksIGxhc3RTdHJvbmcoUUNoYXI6OkRpck9OKSwgbGFzdChRQ2hhcjo6
RGlyT04pIHt9CisgICAgICAgIAorICAgICAgICBRQ2hhcjo6RGlyZWN0aW9uIGVvcjsKKyAgICAg
ICAgUUNoYXI6OkRpcmVjdGlvbiBsYXN0U3Ryb25nOworICAgICAgICBRQ2hhcjo6RGlyZWN0aW9u
IGxhc3Q7CisgICAgfTsKKyAgICAgICAgCiAgICAgY2xhc3MgQmlkaUNvbnRleHQgewogICAgIHB1
YmxpYzoKIAlCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxldmVsLCBRQ2hhcjo6RGlyZWN0aW9u
IGVtYmVkZGluZywgQmlkaUNvbnRleHQgKnBhcmVudCA9IDAsIGJvb2wgb3ZlcnJpZGUgPSBmYWxz
ZSk7CkluZGV4OiBiaWRpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9yZW5kZXJpbmcvYmlkaS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTU2CmRp
ZmYgLXAgLXUgLXIxLjE1NiBiaWRpLmNwcAotLS0gYmlkaS5jcHAJMyBOb3YgMjAwNSAyMzo1Mzo1
NyAtMDAwMAkxLjE1NgorKysgYmlkaS5jcHAJNSBOb3YgMjAwNSAxODoxMDo1NiAtMDAwMApAQCAt
NTcsMTYgKzU3LDggQEAgc3RydWN0IEJpZGlJdGVyYXRvcgogICAgIHVuc2lnbmVkIGludCBwb3M7
CiB9OwogCi1zdHJ1Y3QgQmlkaVN0YXR1cyB7Ci0gICAgQmlkaVN0YXR1cygpIDogZW9yKFFDaGFy
OjpEaXJPTiksIGxhc3RTdHJvbmcoUUNoYXI6OkRpck9OKSwgbGFzdChRQ2hhcjo6RGlyT04pIHt9
Ci0gICAgCi0gICAgUUNoYXI6OkRpcmVjdGlvbiBlb3I7Ci0gICAgUUNoYXI6OkRpcmVjdGlvbiBs
YXN0U3Ryb25nOwotICAgIFFDaGFyOjpEaXJlY3Rpb24gbGFzdDsKLX07Ci0gICAgCiBzdHJ1Y3Qg
QmlkaVN0YXRlIHsKLSAgICBCaWRpU3RhdGUoKSA6IGNvbnRleHQoMCksIGRpcihRQ2hhcjo6RGly
T04pLCBhZGp1c3RFbWJlZGRpbmcoZmFsc2UpIHt9CisgICAgQmlkaVN0YXRlKCkgOiBjb250ZXh0
KDApLCBkaXIoUUNoYXI6OkRpck9OKSwgYWRqdXN0RW1iZWRkaW5nKGZhbHNlKSwgcmVhY2hlZEVu
ZE9mTGluZShmYWxzZSkge30KICAgICAKICAgICBCaWRpSXRlcmF0b3Igc29yOwogICAgIEJpZGlJ
dGVyYXRvciBlb3I7CkBAIC03Niw4ICs2OCwyMCBAQCBzdHJ1Y3QgQmlkaVN0YXRlIHsKICAgICBC
aWRpU3RhdHVzIHN0YXR1czsKICAgICBRQ2hhcjo6RGlyZWN0aW9uIGRpcjsKICAgICBib29sIGFk
anVzdEVtYmVkZGluZzsKKyAgICBCaWRpSXRlcmF0b3IgZW5kT2ZMaW5lOworICAgIGJvb2wgcmVh
Y2hlZEVuZE9mTGluZTsKIH07CiAKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQmlkaVN0
YXR1cyYgc3RhdHVzMSwgY29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzMikKK3sKKyAgICByZXR1cm4g
c3RhdHVzMS5lb3IgPT0gc3RhdHVzMi5lb3IgJiYgc3RhdHVzMS5sYXN0ID09IHN0YXR1czIubGFz
dCAmJiBzdGF0dXMxLmxhc3RTdHJvbmcgPT0gc3RhdHVzMi5sYXN0U3Ryb25nOworfQorCitpbmxp
bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1czEsIGNvbnN0IEJpZGlT
dGF0dXMmIHN0YXR1czIpCit7CisgICAgcmV0dXJuIHN0YXR1czEuZW9yICE9IHN0YXR1czIuZW9y
IHx8IHN0YXR1czEubGFzdCAhPSBzdGF0dXMyLmxhc3QgfHwgc3RhdHVzMS5sYXN0U3Ryb25nICE9
IHN0YXR1czIubGFzdFN0cm9uZzsKK30KKwogLy8gVXNlZCB0byB0cmFjayBhIGxpc3Qgb2YgY2hh
aW5lZCBiaWRpIHJ1bnMuCiBzdGF0aWMgQmlkaVJ1biogc0ZpcnN0QmlkaVJ1bjsKIHN0YXRpYyBC
aWRpUnVuKiBzTGFzdEJpZGlSdW47CkBAIC0yMjUsNiArMjI5LDIwIEBAIHZvaWQgQmlkaUNvbnRl
eHQ6OmRlcmVmKCkgY29uc3QKICAgICAgICAgZGVsZXRlIHRoaXM7CiB9CiAKK2Jvb2wgb3BlcmF0
b3I9PShjb25zdCBCaWRpQ29udGV4dCYgYzEsIGNvbnN0IEJpZGlDb250ZXh0JiBjMikKK3sKKyAg
ICBpZiAoJmMxID09ICZjMikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKGMxLmxldmVs
ICE9IGMyLmxldmVsIHx8IGMxLm92ZXJyaWRlICE9IGMyLm92ZXJyaWRlIHx8IGMxLmRpciAhPSBj
Mi5kaXIgfHwgYzEuYmFzaWNEaXIgIT0gYzIuYmFzaWNEaXIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gYzEucGFyZW50ICYmIGMyLnBhcmVudCAmJiAqYzEucGFyZW50ID09ICpj
Mi5wYXJlbnQ7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQmlkaUNvbnRleHQm
IGMxLCBjb25zdCBCaWRpQ29udGV4dCYgYzIpCit7CisgICAgcmV0dXJuICEoYzEgPT0gYzIpOwor
fQorCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCaWRp
SXRlcmF0b3ImIGl0MSwgY29uc3QgQmlkaUl0ZXJhdG9yJiBpdDIpCkBAIC0zMjksNyArMzQ3LDcg
QEAgaW5saW5lIHZvaWQgQmlkaUl0ZXJhdG9yOjppbmNyZW1lbnQoQmlkaQogICAgICAgICByZXR1
cm47CiAgICAgaWYgKG9iai0+aXNUZXh0KCkpIHsKICAgICAgICAgcG9zKys7Ci0gICAgICAgIGlm
KHBvcyA+PSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG9iaiktPnN0cmluZ0xlbmd0aCgpKSB7
CisgICAgICAgIGlmIChwb3MgPj0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvYmopLT5zdHJp
bmdMZW5ndGgoKSkgewogICAgICAgICAgICAgb2JqID0gYmlkaU5leHQoYmxvY2ssIG9iaiwgYmlk
aSk7CiAgICAgICAgICAgICBwb3MgPSAwOwogICAgICAgICB9CkBAIC01NjUsMTQgKzU4MywxOSBA
QCBzdGF0aWMgdm9pZCBhcHBlbmRSdW4oQmlkaVN0YXRlICZiaWRpKQogCiAgICAgaW50IHN0YXJ0
ID0gYmlkaS5zb3IucG9zOwogICAgIFJlbmRlck9iamVjdCAqb2JqID0gYmlkaS5zb3Iub2JqOwot
ICAgIHdoaWxlIChvYmogJiYgb2JqICE9IGJpZGkuZW9yLm9iaikgeworICAgIHdoaWxlIChvYmog
JiYgb2JqICE9IGJpZGkuZW9yLm9iaiAmJiBvYmogIT0gYmlkaS5lbmRPZkxpbmUub2JqKSB7CiAg
ICAgICAgIGFwcGVuZFJ1bnNGb3JPYmplY3Qoc3RhcnQsIG9iai0+bGVuZ3RoKCksIG9iaiwgYmlk
aSk7ICAgICAgICAKICAgICAgICAgc3RhcnQgPSAwOwogICAgICAgICBvYmogPSBiaWRpTmV4dChi
aWRpLnNvci5ibG9jaywgb2JqLCBiaWRpKTsKICAgICB9CiAgICAgaWYgKG9iaikgeworICAgICAg
ICB1bnNpZ25lZCBwb3MgPSBvYmogPT0gYmlkaS5lb3Iub2JqID8gYmlkaS5lb3IucG9zIDogVUlO
VF9NQVg7CisgICAgICAgIGlmIChvYmogPT0gYmlkaS5lbmRPZkxpbmUub2JqICYmIGJpZGkuZW5k
T2ZMaW5lLnBvcyA8PSBwb3MpIHsKKyAgICAgICAgICAgIGJpZGkucmVhY2hlZEVuZE9mTGluZSA9
IHRydWU7CisgICAgICAgICAgICBwb3MgPSBiaWRpLmVuZE9mTGluZS5wb3M7CisgICAgICAgIH0K
ICAgICAgICAgLy8gSXQncyBPSyB0byBhZGQgcnVucyBmb3IgemVyby1sZW5ndGggUmVuZGVyT2Jq
ZWN0cywganVzdCBkb24ndCBtYWtlIHRoZSBydW4gbGFyZ2VyIHRoYW4gaXQgc2hvdWxkIGJlCi0g
ICAgICAgIGludCBlbmQgPSBvYmotPmxlbmd0aCgpID8gYmlkaS5lb3IucG9zICsgMSA6IDA7Cisg
ICAgICAgIGludCBlbmQgPSBvYmotPmxlbmd0aCgpID8gcG9zKzEgOiAwOwogICAgICAgICBhcHBl
bmRSdW5zRm9yT2JqZWN0KHN0YXJ0LCBlbmQsIG9iaiwgYmlkaSk7CiAgICAgfQogICAgIApAQCAt
NjE3LDYgKzY0MCw3IEBAIHN0YXRpYyB2b2lkIGVtYmVkKFFDaGFyOjpEaXJlY3Rpb24gZCwgQmkK
ICAgICAgICAgICAgIC8vIHNvciBmb3IgdGhlIG5ldyBydW4gaXMgZGV0ZXJtaW5lZCBieSB0aGUg
aGlnaGVyIGxldmVsIChydWxlIFgxMCkKIAkgICAgYmlkaS5zdGF0dXMubGFzdCA9IGJpZGkuY29u
dGV4dC0+ZGlyOwogCSAgICBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID0gYmlkaS5jb250ZXh0LT5k
aXI7CisgICAgICAgICAgICBjLT5yZWYoKTsKIAkgICAgYmlkaS5jb250ZXh0LT5kZXJlZigpOwog
CSAgICBiaWRpLmNvbnRleHQgPSBjOwogICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gYmlk
aS5jb250ZXh0LT5kaXI7CkBAIC02ODYsNiArNzEwLDcgQEAgc3RhdGljIHZvaWQgZW1iZWQoUUNo
YXI6OkRpcmVjdGlvbiBkLCBCaQogICAgICAgICAgICAgZW1wdHlSdW4gPSB0cnVlOwogICAgICAg
ICAgICAgYmlkaS5jb250ZXh0ID0gbmV3IEJpZGlDb250ZXh0KGxldmVsLCBydW5EaXIsIGJpZGku
Y29udGV4dCwgb3ZlcnJpZGUpOwogICAgICAgICAgICAgYmlkaS5jb250ZXh0LT5yZWYoKTsKKyAg
ICAgICAgICAgIGJpZGkuY29udGV4dC0+cGFyZW50LT5kZXJlZigpOwogICAgICAgICAgICAgYmlk
aS5zdGF0dXMubGFzdCA9IHJ1bkRpcjsKICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxhc3RTdHJv
bmcgPSBydW5EaXI7CiAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBydW5EaXI7CkBAIC04
NzMsNyArODk4LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUhvcml6b250YWxQb3NpdAog
ICAgICAgICBjYXNlIENFTlRFUjoKICAgICAgICAgY2FzZSBLSFRNTF9DRU5URVI6CiAgICAgICAg
ICAgICBpbnQgeGQgPSAoYXZhaWxhYmxlV2lkdGggLSB0b3RXaWR0aCkvMjsKLSAgICAgICAgICAg
IHggKz0geGQgPjAgPyB4ZCA6IDA7CisgICAgICAgICAgICB4ICs9IHhkID4gMCA/IHhkIDogMDsK
ICAgICAgICAgICAgIG51bVNwYWNlcyA9IDA7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBA
IC05MjYsNyArOTUxLDggQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZVZlcnRpY2FsUG9zaXRp
bwogICAgICAgICAKICAgICAvLyBOb3cgbWFrZSBzdXJlIHdlIHBsYWNlIHJlcGxhY2VkIHJlbmRl
ciBvYmplY3RzIGNvcnJlY3RseS4KICAgICBmb3IgKEJpZGlSdW4qIHIgPSBzRmlyc3RCaWRpUnVu
OyByOyByID0gci0+bmV4dFJ1bikgewotICAgICAgICBpZiAoIXItPmJveCkgY29udGludWU7IC8v
IFNraXAgcnVucyB3aXRoIG5vIGxpbmUgYm94ZXMuCisgICAgICAgIGlmICghci0+Ym94KQorICAg
ICAgICAgICAgY29udGludWU7IC8vIFNraXAgcnVucyB3aXRoIG5vIGxpbmUgYm94ZXMuCiAKICAg
ICAgICAgLy8gQWxpZ24gcG9zaXRpb25lZCBib3hlcyB3aXRoIHRoZSB0b3Agb2YgdGhlIGxpbmUg
Ym94LiAgVGhpcyBpcwogICAgICAgICAvLyBhIHJlYXNvbmFibGUgYXBwcm94aW1hdGlvbiBvZiBh
biBhcHByb3ByaWF0ZSB5IHBvc2l0aW9uLgpAQCAtOTUyLDI2ICs5NzgsMzcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IAogICAgIHNMYXN0QmlkaVJ1biA9IDA7CiAg
ICAgc0JpZGlSdW5Db3VudCA9IDA7CiAKKyAgICBhc3NlcnQoYmlkaS5kaXIgPT0gUUNoYXI6OkRp
ck9OKTsKKwogICAgIGVtcHR5UnVuID0gdHJ1ZTsKLSAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJP
TjsKLSAgICBiaWRpLnN0YXR1cy5lb3IgPSBiaWRpLmNvbnRleHQtPmRpcjsKKwogICAgIGJpZGku
ZW9yLm9iaiA9IDA7CiAKICAgICBudW1TcGFjZXMgPSAwOwogCiAgICAgYmlkaS5jdXJyZW50ID0g
c3RhcnQ7CiAgICAgYmlkaS5sYXN0ID0gYmlkaS5jdXJyZW50OwotICAgIGJvb2wgYXRFbmQgPSBm
YWxzZTsKKyAgICBib29sIHBhc3RFbmQgPSBmYWxzZTsKKyAgICBCaWRpU3RhdGUgc3RhdGVBdEVu
ZDsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIFFDaGFyOjpEaXJlY3Rpb24gZGlyQ3Vy
cmVudDsKLSAgICAgICAgaWYgKGF0RW5kKSB7CisgICAgICAgIGlmIChwYXN0RW5kICYmIChwcmV2
aW91c0xpbmVCcm9rZUNsZWFubHkgfHwgYmlkaS5jdXJyZW50LmF0RW5kKCkpKSB7CiAgICAgICAg
ICAgICAvL2tkRGVidWcoNjA0MSkgPDwgImF0RW5kIiA8PCBlbmRsOwogICAgICAgICAgICAgQmlk
aUNvbnRleHQgKmMgPSBiaWRpLmNvbnRleHQ7Ci0gICAgICAgICAgICBpZiAoIGJpZGkuY3VycmVu
dC5hdEVuZCgpKQotICAgICAgICAgICAgICAgIHdoaWxlICggYy0+cGFyZW50ICkKLSAgICAgICAg
ICAgICAgICAgICAgYyA9IGMtPnBhcmVudDsKKyAgICAgICAgICAgIHdoaWxlIChjLT5wYXJlbnQp
CisgICAgICAgICAgICAgICAgYyA9IGMtPnBhcmVudDsKICAgICAgICAgICAgIGRpckN1cnJlbnQg
PSBjLT5kaXI7CisgICAgICAgICAgICBpZiAocHJldmlvdXNMaW5lQnJva2VDbGVhbmx5KSB7Cisg
ICAgICAgICAgICAgICAgLy8gQSBkZXZpYXRpb24gZnJvbSB0aGUgVW5pY29kZSBCaWRpIEFsZ29y
aXRobSBpbiBvcmRlciB0byBtYXRjaAorICAgICAgICAgICAgICAgIC8vIE1hYyBPUyBYIHRleHQg
YW5kIFdpbklFOiBhIGhhcmQgbGluZSBicmVhayByZXNldHMgYmlkaSBzdGF0ZS4KKyAgICAgICAg
ICAgICAgICBjLT5yZWYoKTsKKyAgICAgICAgICAgICAgICBzdGF0ZUF0RW5kLmNvbnRleHQtPmRl
cmVmKCk7CisgICAgICAgICAgICAgICAgc3RhdGVBdEVuZC5jb250ZXh0ID0gYzsKKyAgICAgICAg
ICAgICAgICBzdGF0ZUF0RW5kLnN0YXR1cy5lb3IgPSBkaXJDdXJyZW50OworICAgICAgICAgICAg
ICAgIHN0YXRlQXRFbmQuc3RhdHVzLmxhc3QgPSBkaXJDdXJyZW50OworICAgICAgICAgICAgICAg
IHN0YXRlQXRFbmQuc3RhdHVzLmxhc3RTdHJvbmcgPSBkaXJDdXJyZW50OworICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZGlyQ3VycmVudCA9IGJpZGkuY3VycmVu
dC5kaXJlY3Rpb24oKTsKICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPm92ZXJyaWRlICYm
IGRpckN1cnJlbnQgIT0gUUNoYXI6OkRpclJMRSAmJiBkaXJDdXJyZW50ICE9IFFDaGFyOjpEaXJM
UkUgJiYgZGlyQ3VycmVudCAhPSBRQ2hhcjo6RGlyUkxPICYmIGRpckN1cnJlbnQgIT0gUUNoYXI6
OkRpckxSTyAmJiBkaXJDdXJyZW50ICE9IFFDaGFyOjpEaXJQREYpCkBAIC0xMDAxLDExICsxMDM4
LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IAogICAgICAgICAg
ICAgICAgIGNhc2UgUUNoYXI6OkRpckFOOgogICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5z
dGF0dXMubGFzdCAhPSBRQ2hhcjo6RGlyRU4gfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBR
Q2hhcjo6RGlyTCkKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAg
ICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyTDsKLSAgICAgICAgICAgICAg
ICAgICAgLy8gZmFsbCB0aHJvdWdoCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckw6Ci0gICAgICAgICAgICAgICAgICAgIGJpZGkuZW9y
ID0gYmlkaS5jdXJyZW50OwotICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBR
Q2hhcjo6RGlyTDsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
Y2FzZSBRQ2hhcjo6RGlyRVM6CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRVQ6CkBA
IC0xMDM3LDM0ICsxMDcxLDMxIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZShj
b25zdCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJS
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChiaWRpLnN0
YXR1cy5lb3IgIT0gUUNoYXI6OkRpckwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxh
c3Qgc3R1ZmYgdGFrZXMgZW1iZWRkaW5nIGRpcgotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGJpZGkuY29udGV4dC0+ZGlyID09IFFDaGFyOjpEaXJMIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJv
bmcgPT0gUUNoYXI6OkRpckwpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KGJpZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyUjsgCisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZihiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpckwpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vbGFzdCBzdHVmZiB0YWtlcyBlbWJlZGRpbmcgZGlyCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIgIT0gUUNoYXI6OkRpckwgJiYgYmlk
aS5zdGF0dXMubGFzdFN0cm9uZyAhPSBRQ2hhcjo6RGlyTCkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OyAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhcHBlbmRSdW4oYmlkaSk7IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGku
ZGlyID0gUUNoYXI6OkRpclI7IAogICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOyAKICAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKLSAgICAgICAgICAg
ICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpckw7CiAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7CisgICAg
ICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyTDsKICAgICAgICAgICAgIGJpZGku
c3RhdHVzLmxhc3RTdHJvbmcgPSBRQ2hhcjo6RGlyTDsKICAgICAgICAgICAgIGJpZGkuZGlyID0g
UUNoYXI6OkRpckw7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBRQ2hhcjo6RGly
QUw6CiAgICAgICAgIGNhc2UgUUNoYXI6OkRpclI6Ci0gICAgICAgICAgICBzd2l0Y2goYmlkaS5z
dGF0dXMubGFzdCkgeworICAgICAgICAgICAgc3dpdGNoIChiaWRpLnN0YXR1cy5sYXN0KSB7CiAg
ICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyTDoKICAgICAgICAgICAgICAgICBjYXNlIFFD
aGFyOjpEaXJFTjoKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTjoKICAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6
OkRpclI6CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQUw6Ci0gICAgICAgICAgICAg
ICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwogICAgICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFUzoKICAgICAgICAgICAgICAgICBj
YXNlIFFDaGFyOjpEaXJFVDoKQEAgLTEwNzYsMjAgKzExMDcsMTcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IAogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRp
ck9OOgogICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yICE9IFFDaGFyOjpE
aXJSICYmIGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGlyQUwpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vbGFzdCBzdHVmZiB0YWtlcyBlbWJlZGRpbmcgZGlyCi0gICAgICAgICAgICAg
ICAgICAgICAgICBpZihiaWRpLmNvbnRleHQtPmRpciA9PSBRQ2hhcjo6RGlyUiB8fCBiaWRpLnN0
YXR1cy5sYXN0U3Ryb25nID09IFFDaGFyOjpEaXJSIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNoYXI6OkRpckFMKSB7IAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hh
cjo6RGlyTDsgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIg
IT0gUUNoYXI6OkRpclIgJiYgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyAhPSBRQ2hhcjo6RGlyUiAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9
IFFDaGFyOjpEaXJBTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0g
YmlkaS5sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJMOyAKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5j
dXJyZW50OwogICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpclI7CiAgICAg
ICAgICAgICBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID0gZGlyQ3VycmVudDsKICAgICAgICAgICAg
IGJpZGkuZGlyID0gUUNoYXI6OkRpclI7CkBAIC0xMDk4LDg3ICsxMTI2LDczIEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAKICAgICAgICAgICAgIC8vIHdlYWsgdHlw
ZXM6CiAKICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRU46Ci0gICAgICAgICAgICBpZiAoIShiaWRp
LnN0YXR1cy5sYXN0U3Ryb25nID09IFFDaGFyOjpEaXJBTCkpIHsKKyAgICAgICAgICAgIGlmIChi
aWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFFDaGFyOjpEaXJBTCkgewogICAgICAgICAgICAgICAg
IC8vIGlmIGxhc3Qgc3Ryb25nIHdhcyBBTCBjaGFuZ2UgRU4gdG8gQU4KICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKGJpZGkuc3RhdHVzLmxhc3QpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBR
Q2hhcjo6RGlyRVQ6Ci0JCQlpZiAoYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGly
UiB8fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nID09IFFDaGFyOjpEaXJBTCkgewotCQkJICAgIGFw
cGVuZFJ1bihiaWRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5s
YXN0U3Ryb25nID09IFFDaGFyOjpEaXJSIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNo
YXI6OkRpckFMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckVOOwot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFFDaGFyOjpEaXJF
TjsKIAkJCX0KIAkJCS8vIGZhbGwgdGhyb3VnaAogICAgICAgICAgICAgICAgICAgICBjYXNlIFFD
aGFyOjpEaXJFTjoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyTDoKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwotICAgICAgICAgICAg
ICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gZGlyQ3VycmVudDsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJSOgog
ICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTDoKICAgICAgICAgICAgICAgICAg
ICAgY2FzZSBRQ2hhcjo6RGlyQU46CiAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9
IGJpZGkubGFzdDsKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwotICAgICAgICAg
ICAgICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpckVOOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyRU47CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRVM6CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckNTOgogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGJpZGkuc3RhdHVzLmVvciA9PSBRQ2hhcjo6RGlyRU4pCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7IGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFy
OjpEaXJCTjoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQjoKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyUzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBR
Q2hhcjo6RGlyV1M6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpck9OOgotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYoYmlkaS5zdGF0dXMuZW9yID09IFFDaGFyOjpEaXJSKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMuZW9yID09IFFDaGFyOjpE
aXJSKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV1dHJhbHMgZ28gdG8gUgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJFTjsKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyRU47Ci0gICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmVvciA9PSBRQ2hhcjo6RGlyTCB8fAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGJpZGkuc3RhdHVzLmVvciA9PSBRQ2hhcjo6
RGlyRU4gJiYgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGlyTCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gZGlyQ3VycmVudDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGlyTCAmJgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGlyRU4gfHwgYmlk
aS5zdGF0dXMubGFzdFN0cm9uZyAhPSBRQ2hhcjo6RGlyTCkgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJpZGkuZGlyICE9IFFDaGFyOjpEaXJMKSB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gbnVtYmVycyBvbiBib3RoIHNpZGVzLCBuZXV0cmFscyBnZXQgcmln
aHQgdG8gbGVmdCBkaXJlY3Rpb24KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlk
aS5kaXIgIT0gUUNoYXI6OkRpckwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXBwZW5kUnVuKGJpZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVv
ciA9IGJpZGkubGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIg
PSBRQ2hhcjo6RGlyUjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KGJpZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFy
OjpEaXJFTjsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9y
ID0gUUNoYXI6OkRpckVOOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsgYmlk
aS5zdGF0dXMuZW9yID0gZGlyQ3VycmVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cHBlbmRSdW4oYmlkaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBi
aWRpLmxhc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6
RGlyUjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyRU47CiAgICAgICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKKyAgICAg
ICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyRU47CiAgICAgICAgICAgICAg
ICAgaWYgKGJpZGkuZGlyID09IFFDaGFyOjpEaXJPTikKICAgICAgICAgICAgICAgICAgICAgYmlk
aS5kaXIgPSBRQ2hhcjo6RGlyTDsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQU46CiAgICAgICAgICAgICBkaXJDdXJyZW50ID0g
UUNoYXI6OkRpckFOOwotICAgICAgICAgICAgc3dpdGNoKGJpZGkuc3RhdHVzLmxhc3QpIHsKKyAg
ICAgICAgICAgIHN3aXRjaCAoYmlkaS5zdGF0dXMubGFzdCkgewogICAgICAgICAgICAgICAgIGNh
c2UgUUNoYXI6OkRpckw6CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQU46Ci0gICAg
ICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OyBiaWRpLnN0YXR1cy5lb3Ig
PSBRQ2hhcjo6RGlyQU47IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJSOgogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6
OkRpckFMOgogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVOOgogICAgICAgICAgICAg
ICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKICAgICAgICAgICAgICAgICAgICAgYXBwZW5k
UnVuKGJpZGkpOwotICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsK
LSAgICAgICAgICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpckFOOwotICAg
ICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJBTjsKICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQ1M6CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRpckFOKQotICAgICAg
ICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7IAotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgIGNhc2UgUUNoYXI6OkRpckVTOgogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRp
ckVUOgogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckJOOgpAQCAtMTE5NCwyNyArMTIw
OCwyMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gY2xvc2UgdGhlIEwgcnVuCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIG5ldXRyYWxzIGJlY29tZSBhbiBSIHJ1bgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJpZGkuZW9yID0gYmlkaS5sYXN0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGku
ZGlyID0gUUNoYXI6OkRpclI7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KGJpZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJy
ZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyB0aGUgZW1iZWRkaW5nIGRpcmVjdGlvbiBpcyBMCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYXBwZW5kIG5ldXRyYWxzIHRvIHRoZSBMIHJ1biBhbmQgY2xvc2Ug
aXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJMOyAK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFw
cGVuZFJ1bihiaWRpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5j
dXJyZW50OwogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJpZGku
ZGlyID0gUUNoYXI6OkRpckFOOwotICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3Ig
PSBRQ2hhcjo6RGlyQU47CisgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0
OworICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKKyAgICAgICAgICAgIGJpZGkuc3RhdHVz
LmVvciA9IFFDaGFyOjpEaXJBTjsKICAgICAgICAgICAgIGlmIChiaWRpLmRpciA9PSBRQ2hhcjo6
RGlyT04pCiAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyQU47CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTEyNjEsOCArMTI2OCwzMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRp
UmVvcmRlckxpbmUoY29uc3QgCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCi0gICAg
ICAgIGlmIChiaWRpLmN1cnJlbnQuYXRFbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBpZiAocGFzdEVuZCkgeworICAgICAgICAgICAgaWYgKGJpZGkuZW9yID09IGJpZGkuY3VycmVu
dCkgeworICAgICAgICAgICAgICAgIGlmICghYmlkaS5yZWFjaGVkRW5kT2ZMaW5lKSB7CisgICAg
ICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5lbmRPZkxpbmU7CisgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAoYmlkaS5zdGF0dXMuZW9yKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIFFDaGFyOjpEaXJMOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6
RGlyUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckFOOgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gYmlkaS5zdGF0dXMuZW9yOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBRQ2hhcjo6RGlyRU46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBi
aWRpLnN0YXR1cy5sYXN0U3Ryb25nID09IFFDaGFyOjpEaXJMID8gUUNoYXI6OkRpckwgOiBRQ2hh
cjo6RGlyRU47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2Vy
dChmYWxzZSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kUnVuKGJpZGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBiaWRpLmNv
bnRleHQtPmRlcmVmKCk7CisgICAgICAgICAgICAgICAgYmlkaSA9IHN0YXRlQXRFbmQ7CisgICAg
ICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyT047CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KIAogICAgICAgICAvLyBzZXQgc3RhdHVzLmxh
c3QgYXMgbmVlZGVkLgogICAgICAgICBzd2l0Y2ggKGRpckN1cnJlbnQpIHsKQEAgLTEzMDIsOCAr
MTMzMSw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAKICAgICAg
ICAgICAgICAgICBiaWRpLnN0YXR1cy5sYXN0ID0gZGlyQ3VycmVudDsKICAgICAgICAgfQogCi0J
aWYgKGF0RW5kKQotICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGJpZGkubGFzdCA9IGJpZGku
Y3VycmVudDsKIAogCWlmIChlbXB0eVJ1biAmJiAhKGRpckN1cnJlbnQgPT0gUUNoYXI6OkRpclJM
RSB8fCBkaXJDdXJyZW50ID09IFFDaGFyOjpEaXJMUkUgfHwgZGlyQ3VycmVudCA9PSBRQ2hhcjo6
RGlyUkxPIHx8IGRpckN1cnJlbnQgPT0gUUNoYXI6OkRpckxSTyB8fCBkaXJDdXJyZW50ID09IFFD
aGFyOjpEaXJQREYpKSB7CkBAIC0xMzIzLDQ0ICsxMzUwLDQyIEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmJpZGlSZW9yZGVyTGluZShjb25zdCAKICAgICAgICAgICAgIGJpZGkuc29yID0gYmlkaS5jdXJy
ZW50OwogICAgICAgICB9CiAKLQlpZiAoYmlkaS5jdXJyZW50ID09IGVuZCkgewotCSAgICBpZiAo
ZW1wdHlSdW4pCi0JCWJyZWFrOwotCSAgICBhdEVuZCA9IHRydWU7Ci0JfQotICAgIH0KLQotICAg
IGlmICghZW1wdHlSdW4gJiYgYmlkaS5zb3IgIT0gYmlkaS5jdXJyZW50KSB7Ci0gICAgICAgIGJp
ZGkuZW9yID0gYmlkaS5sYXN0OwotICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CisgICAgICAgIGlm
ICghcGFzdEVuZCAmJiAoYmlkaS5jdXJyZW50ID09IGVuZCB8fCBiaWRpLmN1cnJlbnQuYXRFbmQo
KSkpIHsKKyAgICAgICAgICAgIGlmIChlbXB0eVJ1bikKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIHN0YXRlQXRFbmQgPSBiaWRpOworICAgICAgICAgICAgYmlkaS5jb250ZXh0
LT5yZWYoKTsKKyAgICAgICAgICAgIGJpZGkuZW5kT2ZMaW5lID0gYmlkaS5sYXN0OworICAgICAg
ICAgICAgcGFzdEVuZCA9IHRydWU7CisgICAgICAgIH0KICAgICB9CiAKICAgICAvLyByZW9yZGVy
IGxpbmUgYWNjb3JkaW5nIHRvIHJ1biBzdHJ1Y3R1cmUuLi4KKyAgICAvLyBkbyBub3QgcmV2ZXJz
ZSBmb3IgdmlzdWFsbHkgb3JkZXJlZCB3ZWIgc2l0ZXMKKyAgICBpZiAoIXN0eWxlKCktPnZpc3Vh
bGx5T3JkZXJlZCgpKSB7CiAKLSAgICAvLyBmaXJzdCBmaW5kIGhpZ2hlc3QgYW5kIGxvd2VzdCBs
ZXZlbHMKLSAgICB1Y2hhciBsZXZlbExvdyA9IDEyODsKLSAgICB1Y2hhciBsZXZlbEhpZ2ggPSAw
OwotICAgIEJpZGlSdW4qIHIgPSBzRmlyc3RCaWRpUnVuOwotICAgIHdoaWxlIChyKSB7Ci0gICAg
ICAgIGlmIChyLT5sZXZlbCA+IGxldmVsSGlnaCkKLSAgICAgICAgICAgIGxldmVsSGlnaCA9IHIt
PmxldmVsOwotICAgICAgICBpZiAoci0+bGV2ZWwgPCBsZXZlbExvdykKLSAgICAgICAgICAgIGxl
dmVsTG93ID0gci0+bGV2ZWw7Ci0gICAgICAgIHIgPSByLT5uZXh0UnVuOwotICAgIH0KLQotICAg
IC8vIGltcGxlbWVudHMgcmVvcmRlcmluZyBvZiB0aGUgbGluZSAoTDIgYWNjb3JkaW5nIHRvIEJp
ZGkgc3BlYyk6Ci0gICAgLy8gTDIuIEZyb20gdGhlIGhpZ2hlc3QgbGV2ZWwgZm91bmQgaW4gdGhl
IHRleHQgdG8gdGhlIGxvd2VzdCBvZGQgbGV2ZWwgb24gZWFjaCBsaW5lLAotICAgIC8vIHJldmVy
c2UgYW55IGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyB0aGF0IGFyZSBhdCB0aGF0
IGxldmVsIG9yIGhpZ2hlci4KLQotICAgIC8vIHJldmVyc2luZyBpcyBvbmx5IGRvbmUgdXAgdG8g
dGhlIGxvd2VzdCBvZGQgbGV2ZWwKLSAgICBpZiAoIShsZXZlbExvdyUyKSkKLSAgICAgICAgbGV2
ZWxMb3crKzsKKyAgICAgICAgLy8gZmlyc3QgZmluZCBoaWdoZXN0IGFuZCBsb3dlc3QgbGV2ZWxz
CisgICAgICAgIHVjaGFyIGxldmVsTG93ID0gMTI4OworICAgICAgICB1Y2hhciBsZXZlbEhpZ2gg
PSAwOworICAgICAgICBCaWRpUnVuKiByID0gc0ZpcnN0QmlkaVJ1bjsKKyAgICAgICAgd2hpbGUg
KHIpIHsKKyAgICAgICAgICAgIGlmIChyLT5sZXZlbCA+IGxldmVsSGlnaCkKKyAgICAgICAgICAg
ICAgICBsZXZlbEhpZ2ggPSByLT5sZXZlbDsKKyAgICAgICAgICAgIGlmIChyLT5sZXZlbCA8IGxl
dmVsTG93KQorICAgICAgICAgICAgICAgIGxldmVsTG93ID0gci0+bGV2ZWw7CisgICAgICAgICAg
ICByID0gci0+bmV4dFJ1bjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGltcGxlbWVudHMgcmVv
cmRlcmluZyBvZiB0aGUgbGluZSAoTDIgYWNjb3JkaW5nIHRvIEJpZGkgc3BlYyk6CisgICAgICAg
IC8vIEwyLiBGcm9tIHRoZSBoaWdoZXN0IGxldmVsIGZvdW5kIGluIHRoZSB0ZXh0IHRvIHRoZSBs
b3dlc3Qgb2RkIGxldmVsIG9uIGVhY2ggbGluZSwKKyAgICAgICAgLy8gcmV2ZXJzZSBhbnkgY29u
dGlndW91cyBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRoYXQgbGV2ZWwgb3Ig
aGlnaGVyLgorCisgICAgICAgIC8vIHJldmVyc2luZyBpcyBvbmx5IGRvbmUgdXAgdG8gdGhlIGxv
d2VzdCBvZGQgbGV2ZWwKKyAgICAgICAgaWYgKCEobGV2ZWxMb3clMikpCisgICAgICAgICAgICBs
ZXZlbExvdysrOwogCi0gICAgaW50IGNvdW50ID0gc0JpZGlSdW5Db3VudCAtIDE7CisgICAgICAg
IGludCBjb3VudCA9IHNCaWRpUnVuQ291bnQgLSAxOwogCi0gICAgLy8gZG8gbm90IHJldmVyc2Ug
Zm9yIHZpc3VhbGx5IG9yZGVyZWQgd2ViIHNpdGVzCi0gICAgaWYgKCFzdHlsZSgpLT52aXN1YWxs
eU9yZGVyZWQoKSkgewogICAgICAgICB3aGlsZSAobGV2ZWxIaWdoID49IGxldmVsTG93KSB7CiAg
ICAgICAgICAgICBpbnQgaSA9IDA7CiAgICAgICAgICAgICBCaWRpUnVuKiBjdXJyUnVuID0gc0Zp
cnN0QmlkaVJ1bjsKQEAgLTEzODAsNiArMTQwNSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlS
ZW9yZGVyTGluZShjb25zdCAKICAgICAgICAgICAgIGxldmVsSGlnaC0tOwogICAgICAgICB9CiAg
ICAgfQorICAgIGJpZGkuZW5kT2ZMaW5lLm9iaiA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIGJ1aWxk
Q29tcGFjdFJ1bnMoUmVuZGVyT2JqZWN0KiBjb21wYWN0T2JqLCBCaWRpU3RhdGUmIGJpZGkpCkBA
IC0xNTExLDcgKzE1MzcsOSBAQCBRUmVjdCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRy
ZW4oCiAKICAgICAgICAgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9IHN0YXJ0RW1iZWQtPmRpcjsK
ICAgICAgICAgYmlkaS5zdGF0dXMubGFzdCA9IHN0YXJ0RW1iZWQtPmRpcjsKKyAgICAgICAgYmlk
aS5zdGF0dXMuZW9yID0gc3RhcnRFbWJlZC0+ZGlyOwogICAgICAgICBiaWRpLmNvbnRleHQgPSBz
dGFydEVtYmVkOworICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJPTjsKICAgICAgICAgCiAg
ICAgICAgIGlmICghc21pZHBvaW50cykKICAgICAgICAgICAgIHNtaWRwb2ludHMgPSBuZXcgUU1l
bUFycmF5PEJpZGlJdGVyYXRvcj47CkBAIC0xNTI4LDkgKzE1NTYsMTMgQEAgUVJlY3QgUmVuZGVy
QmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKAogICAgICAgICAvLyBXZSBhbHNvIGZpbmQgdGhl
IGZpcnN0IGNsZWFuIGxpbmUgYW5kIGV4dHJhY3QgdGhlc2UgbGluZXMuICBXZSB3aWxsIGFkZCB0
aGVtIGJhY2sKICAgICAgICAgLy8gaWYgd2UgZGV0ZXJtaW5lIHRoYXQgd2UncmUgYWJsZSB0byBz
eW5jaHJvbml6ZSBhZnRlciBoYW5kbGluZyBhbGwgb3VyIGRpcnR5IGxpbmVzLgogICAgICAgICBC
aWRpSXRlcmF0b3IgY2xlYW5MaW5lU3RhcnQ7CisgICAgICAgIEJpZGlTdGF0dXMgY2xlYW5MaW5l
QmlkaVN0YXR1czsKKyAgICAgICAgQmlkaUNvbnRleHQqIGNsZWFuTGluZUJpZGlDb250ZXh0Owog
ICAgICAgICBpbnQgZW5kTGluZVlQb3M7CiAgICAgICAgIFJvb3RJbmxpbmVCb3gqIGVuZExpbmUg
PSAoZnVsbExheW91dCB8fCAhc3RhcnRMaW5lKSA/IAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCA6IGRldGVybWluZUVuZFBvc2l0aW9uKHN0YXJ0TGluZSwgY2xlYW5MaW5lU3Rh
cnQsIGVuZExpbmVZUG9zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgOiBk
ZXRlcm1pbmVFbmRQb3NpdGlvbihzdGFydExpbmUsIGNsZWFuTGluZVN0YXJ0LCBjbGVhbkxpbmVC
aWRpU3RhdHVzLCBjbGVhbkxpbmVCaWRpQ29udGV4dCwgZW5kTGluZVlQb3MpOworICAgICAgICBp
ZiAoZW5kTGluZSAmJiBjbGVhbkxpbmVCaWRpQ29udGV4dCkKKyAgICAgICAgICAgIGNsZWFuTGlu
ZUJpZGlDb250ZXh0LT5yZWYoKTsKICAgICAgICAgaWYgKHN0YXJ0TGluZSkgewogICAgICAgICAg
ICAgdXNlUmVwYWludFJlY3QgPSB0cnVlOwogICAgICAgICAgICAgc3RhcnRMaW5lQm90dG9tID0g
c3RhcnRMaW5lLT5ib3R0b21PdmVyZmxvdygpOwpAQCAtMTU1MCw3ICsxNTgyLDcgQEAgUVJlY3Qg
UmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKAogICAgICAgICBib29sIGVuZExpbmVN
YXRjaGVkID0gZmFsc2U7CiAgICAgICAgIHdoaWxlICghZW5kLmF0RW5kKCkpIHsKICAgICAgICAg
ICAgIHN0YXJ0ID0gZW5kOwotICAgICAgICAgICAgaWYgKGVuZExpbmUgJiYgKGVuZExpbmVNYXRj
aGVkID0gbWF0Y2hlZEVuZExpbmUoc3RhcnQsIGNsZWFuTGluZVN0YXJ0LCBlbmRMaW5lLCBlbmRM
aW5lWVBvcykpKQorICAgICAgICAgICAgaWYgKGVuZExpbmUgJiYgKGVuZExpbmVNYXRjaGVkID0g
bWF0Y2hlZEVuZExpbmUoc3RhcnQsIGJpZGkuc3RhdHVzLCBiaWRpLmNvbnRleHQsIGNsZWFuTGlu
ZVN0YXJ0LCBjbGVhbkxpbmVCaWRpU3RhdHVzLCBjbGVhbkxpbmVCaWRpQ29udGV4dCwgZW5kTGlu
ZSwgZW5kTGluZVlQb3MpKSkKICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAg
YmV0d2Vlbk1pZHBvaW50cyA9IGZhbHNlOwpAQCAtMTU2MSw3ICsxNTkzLDggQEAgUVJlY3QgUmVu
ZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKAogICAgICAgICAgICAgICAgIGVuZCA9IHN0
YXJ0OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZW5kID0gZmluZE5leHRMaW5lQnJlYWso
c3RhcnQsIGJpZGkpOwotICAgICAgICAgICAgaWYoIHN0YXJ0LmF0RW5kKCkgKSBicmVhazsKKyAg
ICAgICAgICAgIGlmIChzdGFydC5hdEVuZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgaWYgKCFpc0xpbmVFbXB0eSkgewogICAgICAgICAgICAgICAgIGJpZGlSZW9yZGVy
TGluZShzdGFydCwgZW5kLCBiaWRpKTsKIApAQCAtMTU5OSw3ICsxNjMyLDcgQEAgUVJlY3QgUmVu
ZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKAogICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgIGlmIChsaW5lQm94KQotICAgICAgICAgICAgICAgICAgICBsaW5lQm94LT5z
ZXRMaW5lQnJlYWtJbmZvKGVuZC5vYmosIGVuZC5wb3MpOworICAgICAgICAgICAgICAgICAgICBs
aW5lQm94LT5zZXRMaW5lQnJlYWtJbmZvKGVuZC5vYmosIGVuZC5wb3MsICZiaWRpLnN0YXR1cywg
YmlkaS5jb250ZXh0KTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX2ZpcnN0
TGluZSA9IGZhbHNlOwogICAgICAgICAgICAgICAgIG5ld0xpbmUoKTsKQEAgLTE2MTAsOCArMTY0
Myw3IEBAIFFSZWN0IFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVDaGlsZHJlbigKICAgICAgICAg
ICAgIHNDb21wYWN0Rmlyc3RCaWRpUnVuID0gc0NvbXBhY3RMYXN0QmlkaVJ1biA9IDA7CiAgICAg
ICAgICAgICBzQ29tcGFjdEJpZGlSdW5Db3VudCA9IDA7CiAgICAgICAgIH0KLSAgICAgICAgc3Rh
cnRFbWJlZC0+ZGVyZWYoKTsKLSAgICAgICAgLy9lbWJlZC0+ZGVyZWYoKTsKKyAgICAgICAgYmlk
aS5jb250ZXh0LT5kZXJlZigpOwogICAgICAgICAKICAgICAgICAgaWYgKGVuZExpbmUpIHsKICAg
ICAgICAgICAgIGlmIChlbmRMaW5lTWF0Y2hlZCkgewpAQCAtMTY1NCw2ICsxNjg2LDggQEAgUVJl
Y3QgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKAogICAgICAgICAgICAgICAgICAg
ICBsaW5lID0gbmV4dDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoY2xlYW5MaW5lQmlkaUNvbnRleHQpCisgICAgICAgICAgICAgICAgY2xlYW5MaW5l
QmlkaUNvbnRleHQtPmRlcmVmKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3MTYsOCArMTc1
MCw3IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGEKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIEtIVE1MQXNzZXJ0KCFtX2ZpcnN0TGluZUJveCAmJiAhbV9sYXN0
TGluZUJveCk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAg
ICAgICAgZm9yIChjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnIgJiYgIWN1cnItPmlzRGlydHko
KTsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpOwogICAgICAgICBpZiAoY3VycikgewogICAg
ICAgICAgICAgLy8gV2UgaGF2ZSBhIGRpcnR5IGxpbmUuCkBAIC0xNzI2LDggKzE3NTksNyBAQCBS
b290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhCiAgICAgICAgICAgICAgICAg
aWYgKCFjdXJyLT5wcmV2Um9vdEJveCgpLT5lbmRzV2l0aEJyZWFrKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGN1cnIgPSBjdXJyLT5wcmV2Um9vdEJveCgpOyAgLy8gVGhlIHByZXZpb3VzIGxpbmUg
ZGlkbid0IGJyZWFrIGNsZWFubHksIHNvIHRyZWF0IGl0IGFzIGRpcnR5IGFsc28uCiAgICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAvLyBObyBkaXJ0eSBsaW5lcyB3ZXJlIGZvdW5kLgogICAgICAgICAgICAgLy8gSWYg
dGhlIGxhc3QgbGluZSBkaWRuJ3QgYnJlYWsgY2xlYW5seSwgdHJlYXQgaXQgYXMgZGlydHkuCiAg
ICAgICAgICAgICBpZiAobGFzdFJvb3RCb3goKSAmJiAhbGFzdFJvb3RCb3goKS0+ZW5kc1dpdGhC
cmVhaygpKQpAQCAtMTc0NywxOCArMTc3OSwyMSBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9j
azo6ZGV0ZXJtaW5lU3RhCiAgICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gYm90dG9tT2ZM
aW5lOwogICAgICAgICBzdGFydE9iaiA9IGxhc3QtPmxpbmVCcmVha09iaigpOwogICAgICAgICBw
b3MgPSBsYXN0LT5saW5lQnJlYWtQb3MoKTsKLSAgICB9Ci0gICAgZWxzZQorICAgICAgICBiaWRp
LnN0YXR1cyA9IGxhc3QtPmxpbmVCcmVha0JpZGlTdGF0dXMoKTsKKyAgICAgICAgQmlkaUNvbnRl
eHQqIG9sZENvbnRleHQgPSBiaWRpLmNvbnRleHQ7CisgICAgICAgIGJpZGkuY29udGV4dCA9IGxh
c3QtPmxpbmVCcmVha0JpZGlDb250ZXh0KCk7CisgICAgICAgIGJpZGkuY29udGV4dC0+cmVmKCk7
CisgICAgICAgIG9sZENvbnRleHQtPmRlcmVmKCk7CisgICAgfSBlbHNlCiAgICAgICAgIHN0YXJ0
T2JqID0gYmlkaUZpcnN0KHRoaXMsIGJpZGksIDApOwogICAgICAgICAKLSAgICBiaWRpLmFkanVz
dEVtYmVkZGluZyA9IHRydWU7CiAgICAgc3RhcnQgPSBCaWRpSXRlcmF0b3IodGhpcywgc3RhcnRP
YmosIHBvcyk7Ci0gICAgYmlkaS5hZGp1c3RFbWJlZGRpbmcgPSBmYWxzZTsKICAgICAKICAgICBy
ZXR1cm4gY3VycjsKIH0KIAogUm9vdElubGluZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZUVu
ZFBvc2l0aW9uKFJvb3RJbmxpbmVCb3gqIHN0YXJ0TGluZSwgQmlkaUl0ZXJhdG9yJiBjbGVhbkxp
bmVTdGFydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBCaWRpU3RhdHVzJiBjbGVhbkxpbmVCaWRpU3RhdHVzLCBCaWRpQ29udGV4dComIGNsZWFuTGlu
ZUJpZGlDb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCYgeVBvcykKIHsKICAgICBSb290SW5saW5lQm94KiBsYXN0ID0gMDsKQEAgLTE3
NzYsNyArMTgxMSwxMCBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lRW5k
CiAgICAgaWYgKCFsYXN0KQogICAgICAgICByZXR1cm4gMDsKICAgICAKLSAgICBjbGVhbkxpbmVT
dGFydCA9IEJpZGlJdGVyYXRvcih0aGlzLCBsYXN0LT5wcmV2Um9vdEJveCgpLT5saW5lQnJlYWtP
YmooKSwgbGFzdC0+cHJldlJvb3RCb3goKS0+bGluZUJyZWFrUG9zKCkpOworICAgIFJvb3RJbmxp
bmVCb3gqIHByZXYgPSBsYXN0LT5wcmV2Um9vdEJveCgpOworICAgIGNsZWFuTGluZVN0YXJ0ID0g
QmlkaUl0ZXJhdG9yKHRoaXMsIHByZXYtPmxpbmVCcmVha09iaigpLCBwcmV2LT5saW5lQnJlYWtQ
b3MoKSk7CisgICAgY2xlYW5MaW5lQmlkaVN0YXR1cyA9IHByZXYtPmxpbmVCcmVha0JpZGlTdGF0
dXMoKTsKKyAgICBjbGVhbkxpbmVCaWRpQ29udGV4dCA9IHByZXYtPmxpbmVCcmVha0JpZGlDb250
ZXh0KCk7CiAgICAgeVBvcyA9IGxhc3QtPnByZXZSb290Qm94KCktPmJsb2NrSGVpZ2h0KCk7CiAg
ICAgCiAgICAgZm9yIChSb290SW5saW5lQm94KiBsaW5lID0gbGFzdDsgbGluZTsgbGluZSA9IGxp
bmUtPm5leHRSb290Qm94KCkpCkBAIC0xNzg2LDExICsxODI0LDEyIEBAIFJvb3RJbmxpbmVCb3gq
IFJlbmRlckJsb2NrOjpkZXRlcm1pbmVFbmQKICAgICByZXR1cm4gbGFzdDsKIH0KIAotYm9vbCBS
ZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoY29uc3QgQmlkaUl0ZXJhdG9yJiBzdGFydCwgY29u
c3QgQmlkaUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgUm9vdElubGluZUJveComIGVuZExpbmUsIGludCYgZW5kWVBvcykKK2Jvb2wgUmVu
ZGVyQmxvY2s6Om1hdGNoZWRFbmRMaW5lKGNvbnN0IEJpZGlJdGVyYXRvciYgc3RhcnQsIGNvbnN0
IEJpZGlTdGF0dXMmIHN0YXR1cywgQmlkaUNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBCaWRpSXRlcmF0b3ImIGVuZExpbmVTdGFydCwgY29u
c3QgQmlkaVN0YXR1cyYgZW5kTGluZVN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJpZGlDb250ZXh0KiBlbmRMaW5lQ29udGV4dCwgUm9vdElubGluZUJveComIGVuZExp
bmUsIGludCYgZW5kWVBvcykKIHsKICAgICBpZiAoc3RhcnQgPT0gZW5kTGluZVN0YXJ0KQotICAg
ICAgICByZXR1cm4gdHJ1ZTsgLy8gVGhlIGNvbW1vbiBjYXNlLiBBbGwgdGhlIGRhdGEgd2UgYWxy
ZWFkeSBoYXZlIGlzIGNvcnJlY3QuCisgICAgICAgIHJldHVybiBzdGF0dXMgPT0gZW5kTGluZVN0
YXR1cyAmJiAqY29udGV4dCA9PSAqZW5kTGluZUNvbnRleHQ7CiAgICAgZWxzZSB7CiAgICAgICAg
IC8vIFRoZSBmaXJzdCBjbGVhbiBsaW5lIGRvZXNuJ3QgbWF0Y2gsIGJ1dCB3ZSBjYW4gY2hlY2sg
YSBoYW5kZnVsIG9mIGZvbGxvd2luZyBsaW5lcyB0byB0cnkKICAgICAgICAgLy8gdG8gbWF0Y2gg
YmFjayB1cC4KQEAgLTE3OTksNiArMTgzOCw4IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om1hdGNoZWRF
bmRMaW5lKGNvbnN0IEIKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1MaW5lcyAmJiBs
aW5lOyBpKyssIGxpbmUgPSBsaW5lLT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgICAgICBpZiAo
bGluZS0+bGluZUJyZWFrT2JqKCkgPT0gc3RhcnQub2JqICYmIGxpbmUtPmxpbmVCcmVha1Bvcygp
ID09IHN0YXJ0LnBvcykgewogICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBtYXRjaC4KKyAg
ICAgICAgICAgICAgICBpZiAobGluZS0+bGluZUJyZWFrQmlkaVN0YXR1cygpICE9IHN0YXR1cyB8
fCAqbGluZS0+bGluZUJyZWFrQmlkaUNvbnRleHQoKSAhPSAqY29udGV4dCkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyAuLi5idXQgdGhlIGJpZGkgc3RhdGUgZG9lc24ndCBt
YXRjaC4KICAgICAgICAgICAgICAgICBSb290SW5saW5lQm94KiByZXN1bHQgPSBsaW5lLT5uZXh0
Um9vdEJveCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAg
ICAgICAvLyBTZXQgb3VyIHlQb3MgdG8gYmUgdGhlIGJsb2NrIGhlaWdodCBvZiBlbmRMaW5lLgpA
QCAtMTk1MSw3ICsxOTkyLDcgQEAgQmlkaUl0ZXJhdG9yIFJlbmRlckJsb2NrOjpmaW5kTmV4dExp
bmVCcgogICAgICAgICAgICAgICAgIGlmICghaXNMaW5lRW1wdHkpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gb25seSBjaGVjayB0aGUgY2xlYXIgc3RhdHVzIGZvciBub24tZW1wdHkgbGluZXMu
CiAgICAgICAgICAgICAgICAgICAgIEVDbGVhciBjbGVhciA9IG8tPnN0eWxlKCktPmNsZWFyKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmKGNsZWFyICE9IENOT05FKQorICAgICAgICAgICAgICAg
ICAgICBpZiAoY2xlYXIgIT0gQ05PTkUpCiAgICAgICAgICAgICAgICAgICAgICAgICBtX2NsZWFy
U3RhdHVzID0gKEVDbGVhcikgKG1fY2xlYXJTdGF0dXMgfCBjbGVhcik7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQpAQCAtMjA2NywxMyArMjEwOCwxMyBAQCBCaWRpSXRlcmF0b3Ig
UmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyCiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAoIG8tPmlzVGV4
dCgpICkgeworICAgICAgICB9IGVsc2UgaWYgKG8tPmlzVGV4dCgpKSB7CiAgICAgICAgICAgICBS
ZW5kZXJUZXh0ICp0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dCAqPihvKTsKICAgICAgICAgICAg
IGludCBzdHJsZW4gPSB0LT5zdHJpbmdMZW5ndGgoKTsKICAgICAgICAgICAgIGludCBsZW4gPSBz
dHJsZW4gLSBwb3M7CiAgICAgICAgICAgICBRQ2hhciAqc3RyID0gdC0+dGV4dCgpOwogCi0gICAg
ICAgICAgICBjb25zdCBGb250ICpmID0gdC0+aHRtbEZvbnQoIG1fZmlyc3RMaW5lICk7CisgICAg
ICAgICAgICBjb25zdCBGb250ICpmID0gdC0+aHRtbEZvbnQobV9maXJzdExpbmUpOwogICAgICAg
ICAgICAgLy8gcHJvcG9ydGlvbmFsIGZvbnQsIG5lZWRzIGEgYml0IG1vcmUgd29yay4KICAgICAg
ICAgICAgIGludCBsYXN0U3BhY2UgPSBwb3M7CiAgICAgICAgICAgICBpbnQgd29yZFNwYWNpbmcg
PSBvLT5zdHlsZSgpLT53b3JkU3BhY2luZygpOwpAQCAtMjIwMSwxMyArMjI0MiwxMiBAQCBCaWRp
SXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZ290byBlbmQ7IC8vIERpZG4ndCBmaXQuIEp1bXAgdG8gdGhlIGVu
ZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHBvcyA+IDAgJiYgc3RyW3Bvcy0xXS51bmljb2RlKCkgPT0gU09GVF9IWVBIRU4pCisg
ICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcyA+IDAgJiYgc3RyW3Bvcy0xXS51
bmljb2RlKCkgPT0gU09GVF9IWVBIRU4pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
U3VidHJhY3QgdGhlIHdpZHRoIG9mIHRoZSBzb2Z0IGh5cGhlbiBvdXQgc2luY2Ugd2UgZml0IG9u
IGEgbGluZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBXIC09IHQtPndpZHRoKHBv
cy0xLCAxLCBmLCB3K3RtcFcpOwogICAgICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICAgICAgaWYoICooc3RyK3BvcykgPT0gJ1xuJyAmJiBvLT5zdHlsZSgpLT5wcmVzZXJ2ZU5l
d2xpbmUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKihzdHIrcG9zKSA9PSAnXG4nICYm
IG8tPnN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBsQnJlYWsub2JqID0gbzsKICAgICAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5wb3MgPSBw
b3M7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbEJyZWFrOwpAQCAtMjIzOSwxMyAr
MjI3OSwxMiBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJyCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbGFzdFNwYWNlID0gcG9zOwogICAgICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGlnbm9yaW5nU3BhY2VzKSB7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChpZ25vcmluZ1NwYWNlcykgewogICAgICAgICAgICAgICAgICAgICAvLyBTdG9w
IGlnbm9yaW5nIHNwYWNlcyBhbmQgYmVnaW4gYXQgdGhpcwogICAgICAgICAgICAgICAgICAgICAv
LyBuZXcgcG9pbnQuCiAgICAgICAgICAgICAgICAgICAgIGlnbm9yaW5nU3BhY2VzID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgICAgIGxhc3RTcGFjZSA9IHBvczsgLy8gZS5nLiwgIkZvbyAgICBn
b28iLCBkb24ndCBhZGQgaW4gYW55IG9mIHRoZSBpZ25vcmVkIHNwYWNlcy4KLSAgICAgICAgICAg
ICAgICAgICAgQmlkaUl0ZXJhdG9yIHN0YXJ0TWlkICggMCwgbywgcG9zICk7CisgICAgICAgICAg
ICAgICAgICAgIEJpZGlJdGVyYXRvciBzdGFydE1pZCgwLCBvLCBwb3MpOwogICAgICAgICAgICAg
ICAgICAgICBhZGRNaWRwb2ludChzdGFydE1pZCk7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0y
NDE2LDcgKzI0NTUsNyBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmROZXh0TGluZUJy
CiAgICAgICAgICAgICAvLyBBZGQgYSBuZXcgZW5kIG1pZHBvaW50IHRoYXQgc3RvcHMgcmlnaHQg
YXQgdGhlIHZlcnkgZW5kLgogICAgICAgICAgICAgUmVuZGVyVGV4dCogdGV4dCA9IHN0YXRpY19j
YXN0PFJlbmRlclRleHQgKj4odHJhaWxpbmdTcGFjZU9iamVjdCk7CiAgICAgICAgICAgICB1bnNp
Z25lZCBwb3MgPSB0ZXh0LT5sZW5ndGgoKSA+PTIgPyB0ZXh0LT5sZW5ndGgoKSAtIDIgOiBVSU5U
X01BWDsKLSAgICAgICAgICAgIEJpZGlJdGVyYXRvciBlbmRNaWQgKCAwLCB0cmFpbGluZ1NwYWNl
T2JqZWN0LCBwb3MgKTsKKyAgICAgICAgICAgIEJpZGlJdGVyYXRvciBlbmRNaWQoMCwgdHJhaWxp
bmdTcGFjZU9iamVjdCwgcG9zKTsKICAgICAgICAgICAgIGFkZE1pZHBvaW50KGVuZE1pZCk7CiAg
ICAgICAgIH0KICAgICB9CkluZGV4OiByZW5kZXJfbGluZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5oLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjMyCmRpZmYgLXAgLXUgLXIxLjMyIHJlbmRlcl9saW5lLmgKLS0tIHJl
bmRlcl9saW5lLmgJNiBPY3QgMjAwNSAwMDo1Mzo1NyAtMDAwMAkxLjMyCisrKyByZW5kZXJfbGlu
ZS5oCTUgTm92IDIwMDUgMTg6MTA6NTYgLTAwMDAKQEAgLTIzLDYgKzIzLDcgQEAKICNkZWZpbmUg
UkVOREVSX0xJTkVfSAogCiAjaW5jbHVkZSAicmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuaCIKKyNp
bmNsdWRlICJiaWRpLmgiCiAKIG5hbWVzcGFjZSBET00gewogY2xhc3MgQXRvbWljU3RyaW5nOwpA
QCAtMzAyLDEwICszMDMsMTIgQEAgY2xhc3MgUm9vdElubGluZUJveCA6IHB1YmxpYyBJbmxpbmVG
bG93QgogcHVibGljOgogICAgIFJvb3RJbmxpbmVCb3goUmVuZGVyT2JqZWN0KiBvYmopCiAgICAg
OiBJbmxpbmVGbG93Qm94KG9iaiksIG1fdG9wT3ZlcmZsb3coMCksIG1fYm90dG9tT3ZlcmZsb3co
MCksIG1fbGVmdE92ZXJmbG93KDApLCBtX3JpZ2h0T3ZlcmZsb3coMCksCi0gICAgICBtX2xpbmVC
cmVha09iaigwKSwgbV9saW5lQnJlYWtQb3MoMCksIAorICAgICAgbV9saW5lQnJlYWtPYmooMCks
IG1fbGluZUJyZWFrUG9zKDApLCBtX2xpbmVCcmVha0NvbnRleHQoMCksCiAgICAgICBtX2Jsb2Nr
SGVpZ2h0KDApLCBtX2VuZHNXaXRoQnJlYWsoZmFsc2UpLCBtX2hhc1NlbGVjdGVkQ2hpbGRyZW4o
ZmFsc2UpLCBtX2VsbGlwc2lzQm94KDApCiAgICAge30KICAgICAKKyAgICB+Um9vdElubGluZUJv
eCgpOworICAgIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFJlbmRlckFyZW5hKiByZW5kZXJB
cmVuYSk7CiAgICAgdm9pZCBkZXRhY2hFbGxpcHNpc0JveChSZW5kZXJBcmVuYSogcmVuZGVyQXJl
bmEpOwogCkBAIC0zMjEsOCArMzI0LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgaW50IHJpZ2h0
T3ZlcmZsb3coKSB7IHJldHVybiBtX3JpZ2h0T3ZlcmZsb3c7IH0KICAgICB2aXJ0dWFsIHZvaWQg
c2V0VmVydGljYWxPdmVyZmxvd1Bvc2l0aW9ucyhpbnQgdG9wLCBpbnQgYm90dG9tKSB7IG1fdG9w
T3ZlcmZsb3cgPSB0b3A7IG1fYm90dG9tT3ZlcmZsb3cgPSBib3R0b207IH0KICAgICB2b2lkIHNl
dEhvcml6b250YWxPdmVyZmxvd1Bvc2l0aW9ucyhpbnQgbGVmdCwgaW50IHJpZ2h0KSB7IG1fbGVm
dE92ZXJmbG93ID0gbGVmdDsgbV9yaWdodE92ZXJmbG93ID0gcmlnaHQ7IH0KLSAgICB2b2lkIHNl
dExpbmVCcmVha0luZm8oUmVuZGVyT2JqZWN0KiBvYmosIHVpbnQgYnJlYWtQb3MpCi0gICAgeyBt
X2xpbmVCcmVha09iaiA9IG9iajsgbV9saW5lQnJlYWtQb3MgPSBicmVha1BvczsgfQorICAgIHZv
aWQgc2V0TGluZUJyZWFrSW5mbyhSZW5kZXJPYmplY3QqIG9iaiwgdWludCBicmVha1BvcywgQmlk
aVN0YXR1cyogc3RhdHVzLCBCaWRpQ29udGV4dCogY29udGV4dCk7CiAgICAgdm9pZCBzZXRMaW5l
QnJlYWtQb3MoaW50IHApIHsgbV9saW5lQnJlYWtQb3MgPSBwOyB9CiAKICAgICB2b2lkIHNldEJs
b2NrSGVpZ2h0KGludCBoKSB7IG1fYmxvY2tIZWlnaHQgPSBoOyB9CkBAIC0zMzIsNiArMzM0LDgg
QEAgcHVibGljOgogICAgIGJvb2wgZW5kc1dpdGhCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1fZW5k
c1dpdGhCcmVhazsgfQogICAgIFJlbmRlck9iamVjdCogbGluZUJyZWFrT2JqKCkgY29uc3QgeyBy
ZXR1cm4gbV9saW5lQnJlYWtPYmo7IH0KICAgICB1aW50IGxpbmVCcmVha1BvcygpIGNvbnN0IHsg
cmV0dXJuIG1fbGluZUJyZWFrUG9zOyB9CisgICAgQmlkaVN0YXR1cyBsaW5lQnJlYWtCaWRpU3Rh
dHVzKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQnJlYWtCaWRpU3RhdHVzOyB9CisgICAgQmlkaUNv
bnRleHQqIGxpbmVCcmVha0JpZGlDb250ZXh0KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQnJlYWtD
b250ZXh0OyB9CiAKICAgICB2b2lkIGNoaWxkUmVtb3ZlZChJbmxpbmVCb3gqIGJveCk7CiAKQEAg
LTM4MCw2ICszODQsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVyT2JqZWN0KiBtX2xpbmVCcmVh
a09iajsKICAgICB1aW50IG1fbGluZUJyZWFrUG9zOwogICAgIAorICAgIEJpZGlTdGF0dXMgbV9s
aW5lQnJlYWtCaWRpU3RhdHVzOworICAgIEJpZGlDb250ZXh0KiBtX2xpbmVCcmVha0NvbnRleHQ7
CisgICAgCiAgICAgLy8gVGhlIGhlaWdodCBvZiB0aGUgYmxvY2sgYXQgdGhlIGVuZCBvZiB0aGlz
IGxpbmUuICBUaGlzIGlzIHdoZXJlIHRoZSBuZXh0IGxpbmUgc3RhcnRzLgogICAgIGludCBtX2Js
b2NrSGVpZ2h0OwogICAgIApJbmRleDogcmVuZGVyX2xpbmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp
bGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfbGluZS5jcHAsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuNTYKZGlmZiAtcCAtdSAtcjEuNTYgcmVuZGVyX2xpbmUuY3Bw
Ci0tLSByZW5kZXJfbGluZS5jcHAJMiBOb3YgMjAwNSAwODo1Mjo0NSAtMDAwMAkxLjU2CisrKyBy
ZW5kZXJfbGluZS5jcHAJNSBOb3YgMjAwNSAxODoxMDo1NyAtMDAwMApAQCAtMTEyMiw2ICsxMTIy
LDEyIEBAIGJvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KFJlbmRlck9iamUKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKK1Jvb3RJbmxpbmVCb3g6On5Sb290SW5saW5lQm94KCkKK3sKKyAgICBp
ZiAobV9saW5lQnJlYWtDb250ZXh0KQorICAgICAgICBtX2xpbmVCcmVha0NvbnRleHQtPmRlcmVm
KCk7Cit9CisKIHZvaWQgUm9vdElubGluZUJveDo6ZGVzdHJveShSZW5kZXJBcmVuYSogYXJlbmEp
CiB7CiAgICAgZGV0YWNoRWxsaXBzaXNCb3goYXJlbmEpOwpAQCAtMTIyMCwxMSArMTIyNiwxMSBA
QCB2b2lkIFJvb3RJbmxpbmVCb3g6OmFkanVzdFBvc2l0aW9uKGludCBkCiB2b2lkIFJvb3RJbmxp
bmVCb3g6OmNoaWxkUmVtb3ZlZChJbmxpbmVCb3gqIGJveCkKIHsKICAgICBpZiAoYm94LT5vYmpl
Y3QoKSA9PSBtX2xpbmVCcmVha09iaikKLSAgICAgICAgc2V0TGluZUJyZWFrSW5mbygwLDApOwor
ICAgICAgICBzZXRMaW5lQnJlYWtJbmZvKDAsIDAsIDAsIDApOwogCiAgICAgUm9vdElubGluZUJv
eCogcHJldiA9IHByZXZSb290Qm94KCk7CiAgICAgaWYgKHByZXYgJiYgcHJldi0+bGluZUJyZWFr
T2JqKCkgPT0gYm94LT5vYmplY3QoKSkgewotICAgICAgICBwcmV2LT5zZXRMaW5lQnJlYWtJbmZv
KDAsMCk7CisgICAgICAgIHByZXYtPnNldExpbmVCcmVha0luZm8oMCwgMCwgMCwgMCk7CiAgICAg
ICAgIHByZXYtPm1hcmtEaXJ0eSgpOwogICAgIH0KIH0KQEAgLTEzNjcsNSArMTM3MywxOCBAQCBJ
bmxpbmVCb3gqIFJvb3RJbmxpbmVCb3g6OmNsb3Nlc3RMZWFmQ2hpCiAgICAgcmV0dXJuIGxhc3RM
ZWFmOwogfQogCit2b2lkIFJvb3RJbmxpbmVCb3g6OnNldExpbmVCcmVha0luZm8oUmVuZGVyT2Jq
ZWN0KiBvYmosIHVpbnQgYnJlYWtQb3MsIEJpZGlTdGF0dXMqIHN0YXR1cywgQmlkaUNvbnRleHQq
IGNvbnRleHQpCit7CisgICAgbV9saW5lQnJlYWtPYmogPSBvYmo7CisgICAgbV9saW5lQnJlYWtQ
b3MgPSBicmVha1BvczsKKyAgICBCaWRpQ29udGV4dCogb2xkQ29udGV4dCA9IG1fbGluZUJyZWFr
Q29udGV4dDsKKyAgICBtX2xpbmVCcmVha0NvbnRleHQgPSBjb250ZXh0OworICAgIGlmIChtX2xp
bmVCcmVha0NvbnRleHQpCisgICAgICAgIG1fbGluZUJyZWFrQ29udGV4dC0+cmVmKCk7CisgICAg
aWYgKG9sZENvbnRleHQpCisgICAgICAgIG9sZENvbnRleHQtPmRlcmVmKCk7CisgICAgaWYgKHN0
YXR1cykKKyAgICAgICAgbV9saW5lQnJlYWtCaWRpU3RhdHVzID0gKnN0YXR1czsKK30KIH0KIApJ
bmRleDogcmVuZGVyX2Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9ibG9jay5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAx
LjcyCmRpZmYgLXAgLXUgLXIxLjcyIHJlbmRlcl9ibG9jay5oCi0tLSByZW5kZXJfYmxvY2suaAkz
IE5vdiAyMDA1IDIxOjA1OjU5IC0wMDAwCTEuNzIKKysrIHJlbmRlcl9ibG9jay5oCTUgTm92IDIw
MDUgMTg6MTA6NTkgLTAwMDAKQEAgLTEyNCw5ICsxMjQsMTIgQEAgcHVibGljOgogICAgIC8vIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBpcyBpbiBiaWRpLmNw
cAogICAgIHZvaWQgYmlkaVJlb3JkZXJMaW5lKGNvbnN0IEJpZGlJdGVyYXRvciAmc3RhcnQsIGNv
bnN0IEJpZGlJdGVyYXRvciAmZW5kLCBCaWRpU3RhdGUgJmJpZGkgKTsKICAgICBSb290SW5saW5l
Qm94KiBkZXRlcm1pbmVTdGFydFBvc2l0aW9uKGJvb2wgZnVsbExheW91dCwgQmlkaUl0ZXJhdG9y
ICZzdGFydCwgQmlkaVN0YXRlICZiaWRpKTsKLSAgICBSb290SW5saW5lQm94KiBkZXRlcm1pbmVF
bmRQb3NpdGlvbihSb290SW5saW5lQm94KiBzdGFydEJveCwgQmlkaUl0ZXJhdG9yJiBjbGVhbkxp
bmVTdGFydCwgaW50JiB5UG9zKTsKLSAgICBib29sIG1hdGNoZWRFbmRMaW5lKGNvbnN0IEJpZGlJ
dGVyYXRvciYgc3RhcnQsIGNvbnN0IEJpZGlJdGVyYXRvciYgZW5kTGluZVN0YXJ0LCAKLSAgICAg
ICAgICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqJiBlbmRMaW5lLCBpbnQmIGVuZFlQb3Mp
OworICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWluZUVuZFBvc2l0aW9uKFJvb3RJbmxpbmVCb3gq
IHN0YXJ0Qm94LCBCaWRpSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMs
IEJpZGlDb250ZXh0KiYgY2xlYW5MaW5lQmlkaUNvbnRleHQsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50JiB5UG9zKTsKKyAgICBib29sIG1hdGNoZWRFbmRMaW5l
KGNvbnN0IEJpZGlJdGVyYXRvciYgc3RhcnQsIGNvbnN0IEJpZGlTdGF0dXMmIHN0YXR1cywgQmlk
aUNvbnRleHQqIGNvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBCaWRpSXRl
cmF0b3ImIGVuZExpbmVTdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgZW5kTGluZVN0YXR1cywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIEJpZGlDb250ZXh0KiBlbmRMaW5lQ29udGV4dCwgUm9vdElu
bGluZUJveComIGVuZExpbmUsIGludCYgZW5kWVBvcyk7CiAgICAgaW50IHNraXBXaGl0ZXNwYWNl
KEJpZGlJdGVyYXRvciAmLCBCaWRpU3RhdGUgJik7CiAgICAgQmlkaUl0ZXJhdG9yIGZpbmROZXh0
TGluZUJyZWFrKEJpZGlJdGVyYXRvciAmc3RhcnQsIEJpZGlTdGF0ZSAmaW5mbyApOwogICAgIFJv
b3RJbmxpbmVCb3gqIGNvbnN0cnVjdExpbmUoY29uc3QgQmlkaUl0ZXJhdG9yJiBzdGFydCwgY29u
c3QgQmlkaUl0ZXJhdG9yJiBlbmQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4616</attachid>
            <date>2005-11-06 16:29:07 -0800</date>
            <delta_ts>2005-11-08 15:17:06 -0800</delta_ts>
            <desc>Revised patch</desc>
            <filename>5172_r6.patch</filename>
            <type>text/plain</type>
            <size>39163</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IGJpZGkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRt
bC9yZW5kZXJpbmcvYmlkaS5oLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE3CmRpZmYgLXAgLXUg
LXIxLjE3IGJpZGkuaAotLS0gYmlkaS5oCTYgT2N0IDIwMDUgMDA6NTM6NTUgLTAwMDAJMS4xNwor
KysgYmlkaS5oCTcgTm92IDIwMDUgMDA6MjM6NDEgLTAwMDAKQEAgLTMyLDYgKzMyLDE0IEBAIG5h
bWVzcGFjZSBraHRtbCB7CiAgICAgY2xhc3MgUmVuZGVyT2JqZWN0OwogICAgIGNsYXNzIElubGlu
ZUJveDsKIAorICAgIHN0cnVjdCBCaWRpU3RhdHVzIHsKKyAgICAgICAgQmlkaVN0YXR1cygpIDog
ZW9yKFFDaGFyOjpEaXJPTiksIGxhc3RTdHJvbmcoUUNoYXI6OkRpck9OKSwgbGFzdChRQ2hhcjo6
RGlyT04pIHt9CisgICAgICAgIAorICAgICAgICBRQ2hhcjo6RGlyZWN0aW9uIGVvcjsKKyAgICAg
ICAgUUNoYXI6OkRpcmVjdGlvbiBsYXN0U3Ryb25nOworICAgICAgICBRQ2hhcjo6RGlyZWN0aW9u
IGxhc3Q7CisgICAgfTsKKyAgICAgICAgCiAgICAgY2xhc3MgQmlkaUNvbnRleHQgewogICAgIHB1
YmxpYzoKIAlCaWRpQ29udGV4dCh1bnNpZ25lZCBjaGFyIGxldmVsLCBRQ2hhcjo6RGlyZWN0aW9u
IGVtYmVkZGluZywgQmlkaUNvbnRleHQgKnBhcmVudCA9IDAsIGJvb2wgb3ZlcnJpZGUgPSBmYWxz
ZSk7CkluZGV4OiBiaWRpLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29y
ZS9raHRtbC9yZW5kZXJpbmcvYmlkaS5jcHAsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTU2CmRp
ZmYgLXAgLXUgLXIxLjE1NiBiaWRpLmNwcAotLS0gYmlkaS5jcHAJMyBOb3YgMjAwNSAyMzo1Mzo1
NyAtMDAwMAkxLjE1NgorKysgYmlkaS5jcHAJNyBOb3YgMjAwNSAwMDoyMzo0MyAtMDAwMApAQCAt
MjksNiArMjksNyBAQAogI2luY2x1ZGUgInJlbmRlcl9jYW52YXMuaCIKICNpbmNsdWRlICJraHRt
bHZpZXcuaCIKICNpbmNsdWRlICJ4bWwvZG9tX2RvY2ltcGwuaCIKKyNpbmNsdWRlICJtaXNjL3No
YXJlZC5oIgogCiAjaW5jbHVkZSAia2RlYnVnLmgiCiAjaW5jbHVkZSAicWRhdGV0aW1lLmgiCkBA
IC01NywyNyArNTgsMzEgQEAgc3RydWN0IEJpZGlJdGVyYXRvcgogICAgIHVuc2lnbmVkIGludCBw
b3M7CiB9OwogCi1zdHJ1Y3QgQmlkaVN0YXR1cyB7Ci0gICAgQmlkaVN0YXR1cygpIDogZW9yKFFD
aGFyOjpEaXJPTiksIGxhc3RTdHJvbmcoUUNoYXI6OkRpck9OKSwgbGFzdChRQ2hhcjo6RGlyT04p
IHt9Ci0gICAgCi0gICAgUUNoYXI6OkRpcmVjdGlvbiBlb3I7Ci0gICAgUUNoYXI6OkRpcmVjdGlv
biBsYXN0U3Ryb25nOwotICAgIFFDaGFyOjpEaXJlY3Rpb24gbGFzdDsKLX07Ci0gICAgCiBzdHJ1
Y3QgQmlkaVN0YXRlIHsKLSAgICBCaWRpU3RhdGUoKSA6IGNvbnRleHQoMCksIGRpcihRQ2hhcjo6
RGlyT04pLCBhZGp1c3RFbWJlZGRpbmcoZmFsc2UpIHt9CisgICAgQmlkaVN0YXRlKCkgOiBjb250
ZXh0KDApLCBkaXIoUUNoYXI6OkRpck9OKSwgYWRqdXN0RW1iZWRkaW5nKGZhbHNlKSwgcmVhY2hl
ZEVuZE9mTGluZShmYWxzZSkge30KICAgICAKICAgICBCaWRpSXRlcmF0b3Igc29yOwogICAgIEJp
ZGlJdGVyYXRvciBlb3I7CiAgICAgQmlkaUl0ZXJhdG9yIGxhc3Q7CiAgICAgQmlkaUl0ZXJhdG9y
IGN1cnJlbnQ7Ci0gICAgQmlkaUNvbnRleHQqIGNvbnRleHQ7CisgICAgU2hhcmVkUHRyPEJpZGlD
b250ZXh0PiBjb250ZXh0OwogICAgIEJpZGlTdGF0dXMgc3RhdHVzOwogICAgIFFDaGFyOjpEaXJl
Y3Rpb24gZGlyOwogICAgIGJvb2wgYWRqdXN0RW1iZWRkaW5nOworICAgIEJpZGlJdGVyYXRvciBl
bmRPZkxpbmU7CisgICAgYm9vbCByZWFjaGVkRW5kT2ZMaW5lOwogfTsKIAoraW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBCaWRpU3RhdHVzJiBzdGF0dXMxLCBjb25zdCBCaWRpU3RhdHVzJiBz
dGF0dXMyKQoreworICAgIHJldHVybiBzdGF0dXMxLmVvciA9PSBzdGF0dXMyLmVvciAmJiBzdGF0
dXMxLmxhc3QgPT0gc3RhdHVzMi5sYXN0ICYmIHN0YXR1czEubGFzdFN0cm9uZyA9PSBzdGF0dXMy
Lmxhc3RTdHJvbmc7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQmlkaVN0YXR1
cyYgc3RhdHVzMSwgY29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzMikKK3sKKyAgICByZXR1cm4gIShz
dGF0dXMxID09IHN0YXR1czIpOworfQorCiAvLyBVc2VkIHRvIHRyYWNrIGEgbGlzdCBvZiBjaGFp
bmVkIGJpZGkgcnVucy4KIHN0YXRpYyBCaWRpUnVuKiBzRmlyc3RCaWRpUnVuOwogc3RhdGljIEJp
ZGlSdW4qIHNMYXN0QmlkaVJ1bjsKQEAgLTIyNSw2ICsyMzAsMjAgQEAgdm9pZCBCaWRpQ29udGV4
dDo6ZGVyZWYoKSBjb25zdAogICAgICAgICBkZWxldGUgdGhpczsKIH0KIAorYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEJpZGlDb250ZXh0JiBjMSwgY29uc3QgQmlkaUNvbnRleHQmIGMyKQoreworICAg
IGlmICgmYzEgPT0gJmMyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoYzEubGV2ZWwg
IT0gYzIubGV2ZWwgfHwgYzEub3ZlcnJpZGUgIT0gYzIub3ZlcnJpZGUgfHwgYzEuZGlyICE9IGMy
LmRpciB8fCBjMS5iYXNpY0RpciAhPSBjMi5iYXNpY0RpcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHJldHVybiBjMS5wYXJlbnQgJiYgYzIucGFyZW50ICYmICpjMS5wYXJlbnQgPT0gKmMy
LnBhcmVudDsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBCaWRpQ29udGV4dCYg
YzEsIGNvbnN0IEJpZGlDb250ZXh0JiBjMikKK3sKKyAgICByZXR1cm4gIShjMSA9PSBjMik7Cit9
CisKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJpZGlJ
dGVyYXRvciYgaXQxLCBjb25zdCBCaWRpSXRlcmF0b3ImIGl0MikKQEAgLTMyOSw3ICszNDgsNyBA
QCBpbmxpbmUgdm9pZCBCaWRpSXRlcmF0b3I6OmluY3JlbWVudChCaWRpCiAgICAgICAgIHJldHVy
bjsKICAgICBpZiAob2JqLT5pc1RleHQoKSkgewogICAgICAgICBwb3MrKzsKLSAgICAgICAgaWYo
cG9zID49IHN0YXRpY19jYXN0PFJlbmRlclRleHQgKj4ob2JqKS0+c3RyaW5nTGVuZ3RoKCkpIHsK
KyAgICAgICAgaWYgKHBvcyA+PSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG9iaiktPnN0cmlu
Z0xlbmd0aCgpKSB7CiAgICAgICAgICAgICBvYmogPSBiaWRpTmV4dChibG9jaywgb2JqLCBiaWRp
KTsKICAgICAgICAgICAgIHBvcyA9IDA7CiAgICAgICAgIH0KQEAgLTUzMSw3ICs1NTAsNyBAQCBz
dGF0aWMgdm9pZCBhcHBlbmRSdW5zRm9yT2JqZWN0KGludCBzdGFyCiAgICAgfQogICAgIGVsc2Ug
ewogICAgICAgICBpZiAoIXNtaWRwb2ludHMgfHwgIWhhdmVOZXh0TWlkcG9pbnQgfHwgKG9iaiAh
PSBuZXh0TWlkcG9pbnQub2JqKSkgewotICAgICAgICAgICAgYWRkUnVuKG5ldyAob2JqLT5yZW5k
ZXJBcmVuYSgpKSBCaWRpUnVuKHN0YXJ0LCBlbmQsIG9iaiwgYmlkaS5jb250ZXh0LCBiaWRpLmRp
cikpOworICAgICAgICAgICAgYWRkUnVuKG5ldyAob2JqLT5yZW5kZXJBcmVuYSgpKSBCaWRpUnVu
KHN0YXJ0LCBlbmQsIG9iaiwgYmlkaS5jb250ZXh0LmdldCgpLCBiaWRpLmRpcikpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIApAQCAtNTQzLDEyICs1NjIsMTIgQEAg
c3RhdGljIHZvaWQgYXBwZW5kUnVuc0Zvck9iamVjdChpbnQgc3RhcgogICAgICAgICAgICAgaWYg
KG5leHRNaWRwb2ludC5wb3MgIT0gVUlOVF9NQVgpIHsgLy8gVUlOVF9NQVggbWVhbnMgc3RvcCBh
dCB0aGUgb2JqZWN0IGFuZCBkb24ndCBpbmNsdWRlIGFueSBvZiBpdC4KICAgICAgICAgICAgICAg
ICBpZiAoaW50KG5leHRNaWRwb2ludC5wb3MrMSkgPiBzdGFydCkKICAgICAgICAgICAgICAgICAg
ICAgYWRkUnVuKG5ldyAob2JqLT5yZW5kZXJBcmVuYSgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgQmlkaVJ1bihzdGFydCwgbmV4dE1pZHBvaW50LnBvcysxLCBvYmosIGJpZGkuY29udGV4dCwg
YmlkaS5kaXIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEJpZGlSdW4oc3RhcnQsIG5leHRN
aWRwb2ludC5wb3MrMSwgb2JqLCBiaWRpLmNvbnRleHQuZ2V0KCksIGJpZGkuZGlyKSk7CiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGFwcGVuZFJ1bnNGb3JPYmplY3QobmV4dE1pZHBvaW50LnBvcysx
LCBlbmQsIG9iaiwgYmlkaSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxz
ZQotICAgICAgICAgICBhZGRSdW4obmV3IChvYmotPnJlbmRlckFyZW5hKCkpIEJpZGlSdW4oc3Rh
cnQsIGVuZCwgb2JqLCBiaWRpLmNvbnRleHQsIGJpZGkuZGlyKSk7CisgICAgICAgICAgIGFkZFJ1
bihuZXcgKG9iai0+cmVuZGVyQXJlbmEoKSkgQmlkaVJ1bihzdGFydCwgZW5kLCBvYmosIGJpZGku
Y29udGV4dC5nZXQoKSwgYmlkaS5kaXIpKTsKICAgICB9CiB9CiAKQEAgLTU2NSwxNCArNTg0LDE5
IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bihCaWRpU3RhdGUgJmJpZGkpCiAKICAgICBpbnQgc3Rh
cnQgPSBiaWRpLnNvci5wb3M7CiAgICAgUmVuZGVyT2JqZWN0ICpvYmogPSBiaWRpLnNvci5vYmo7
Ci0gICAgd2hpbGUgKG9iaiAmJiBvYmogIT0gYmlkaS5lb3Iub2JqKSB7CisgICAgd2hpbGUgKG9i
aiAmJiBvYmogIT0gYmlkaS5lb3Iub2JqICYmIG9iaiAhPSBiaWRpLmVuZE9mTGluZS5vYmopIHsK
ICAgICAgICAgYXBwZW5kUnVuc0Zvck9iamVjdChzdGFydCwgb2JqLT5sZW5ndGgoKSwgb2JqLCBi
aWRpKTsgICAgICAgIAogICAgICAgICBzdGFydCA9IDA7CiAgICAgICAgIG9iaiA9IGJpZGlOZXh0
KGJpZGkuc29yLmJsb2NrLCBvYmosIGJpZGkpOwogICAgIH0KICAgICBpZiAob2JqKSB7CisgICAg
ICAgIHVuc2lnbmVkIHBvcyA9IG9iaiA9PSBiaWRpLmVvci5vYmogPyBiaWRpLmVvci5wb3MgOiBV
SU5UX01BWDsKKyAgICAgICAgaWYgKG9iaiA9PSBiaWRpLmVuZE9mTGluZS5vYmogJiYgYmlkaS5l
bmRPZkxpbmUucG9zIDw9IHBvcykgeworICAgICAgICAgICAgYmlkaS5yZWFjaGVkRW5kT2ZMaW5l
ID0gdHJ1ZTsKKyAgICAgICAgICAgIHBvcyA9IGJpZGkuZW5kT2ZMaW5lLnBvczsKKyAgICAgICAg
fQogICAgICAgICAvLyBJdCdzIE9LIHRvIGFkZCBydW5zIGZvciB6ZXJvLWxlbmd0aCBSZW5kZXJP
YmplY3RzLCBqdXN0IGRvbid0IG1ha2UgdGhlIHJ1biBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUK
LSAgICAgICAgaW50IGVuZCA9IG9iai0+bGVuZ3RoKCkgPyBiaWRpLmVvci5wb3MgKyAxIDogMDsK
KyAgICAgICAgaW50IGVuZCA9IG9iai0+bGVuZ3RoKCkgPyBwb3MrMSA6IDA7CiAgICAgICAgIGFw
cGVuZFJ1bnNGb3JPYmplY3Qoc3RhcnQsIGVuZCwgb2JqLCBiaWRpKTsKICAgICB9CiAgICAgCkBA
IC02MTcsNyArNjQxLDYgQEAgc3RhdGljIHZvaWQgZW1iZWQoUUNoYXI6OkRpcmVjdGlvbiBkLCBC
aQogICAgICAgICAgICAgLy8gc29yIGZvciB0aGUgbmV3IHJ1biBpcyBkZXRlcm1pbmVkIGJ5IHRo
ZSBoaWdoZXIgbGV2ZWwgKHJ1bGUgWDEwKQogCSAgICBiaWRpLnN0YXR1cy5sYXN0ID0gYmlkaS5j
b250ZXh0LT5kaXI7CiAJICAgIGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPSBiaWRpLmNvbnRleHQt
PmRpcjsKLQkgICAgYmlkaS5jb250ZXh0LT5kZXJlZigpOwogCSAgICBiaWRpLmNvbnRleHQgPSBj
OwogICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gYmlkaS5jb250ZXh0LT5kaXI7CiAgICAg
ICAgICAgICBiaWRpLmVvci5vYmogPSAwOwpAQCAtNjg0LDggKzcwNyw3IEBAIHN0YXRpYyB2b2lk
IGVtYmVkKFFDaGFyOjpEaXJlY3Rpb24gZCwgQmkKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAgICAgIGVtcHR5UnVuID0gdHJ1ZTsKLSAgICAgICAg
ICAgIGJpZGkuY29udGV4dCA9IG5ldyBCaWRpQ29udGV4dChsZXZlbCwgcnVuRGlyLCBiaWRpLmNv
bnRleHQsIG92ZXJyaWRlKTsKLSAgICAgICAgICAgIGJpZGkuY29udGV4dC0+cmVmKCk7CisgICAg
ICAgICAgICBiaWRpLmNvbnRleHQgPSBuZXcgQmlkaUNvbnRleHQobGV2ZWwsIHJ1bkRpciwgYmlk
aS5jb250ZXh0LmdldCgpLCBvdmVycmlkZSk7CiAgICAgICAgICAgICBiaWRpLnN0YXR1cy5sYXN0
ID0gcnVuRGlyOwogICAgICAgICAgICAgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9IHJ1bkRpcjsK
ICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IHJ1bkRpcjsKQEAgLTg3Myw3ICs4OTUsNyBA
QCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlSG9yaXpvbnRhbFBvc2l0CiAgICAgICAgIGNhc2Ug
Q0VOVEVSOgogICAgICAgICBjYXNlIEtIVE1MX0NFTlRFUjoKICAgICAgICAgICAgIGludCB4ZCA9
IChhdmFpbGFibGVXaWR0aCAtIHRvdFdpZHRoKS8yOwotICAgICAgICAgICAgeCArPSB4ZCA+MCA/
IHhkIDogMDsKKyAgICAgICAgICAgIHggKz0geGQgPiAwID8geGQgOiAwOwogICAgICAgICAgICAg
bnVtU3BhY2VzID0gMDsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTkyNiw3ICs5NDgs
OCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlVmVydGljYWxQb3NpdGlvCiAgICAgICAgIAog
ICAgIC8vIE5vdyBtYWtlIHN1cmUgd2UgcGxhY2UgcmVwbGFjZWQgcmVuZGVyIG9iamVjdHMgY29y
cmVjdGx5LgogICAgIGZvciAoQmlkaVJ1biogciA9IHNGaXJzdEJpZGlSdW47IHI7IHIgPSByLT5u
ZXh0UnVuKSB7Ci0gICAgICAgIGlmICghci0+Ym94KSBjb250aW51ZTsgLy8gU2tpcCBydW5zIHdp
dGggbm8gbGluZSBib3hlcy4KKyAgICAgICAgaWYgKCFyLT5ib3gpCisgICAgICAgICAgICBjb250
aW51ZTsgLy8gU2tpcCBydW5zIHdpdGggbm8gbGluZSBib3hlcy4KIAogICAgICAgICAvLyBBbGln
biBwb3NpdGlvbmVkIGJveGVzIHdpdGggdGhlIHRvcCBvZiB0aGUgbGluZSBib3guICBUaGlzIGlz
CiAgICAgICAgIC8vIGEgcmVhc29uYWJsZSBhcHByb3hpbWF0aW9uIG9mIGFuIGFwcHJvcHJpYXRl
IHkgcG9zaXRpb24uCkBAIC05NTIsMjYgKzk3NSwzNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRp
UmVvcmRlckxpbmUoY29uc3QgCiAgICAgc0xhc3RCaWRpUnVuID0gMDsKICAgICBzQmlkaVJ1bkNv
dW50ID0gMDsKIAorICAgIGFzc2VydChiaWRpLmRpciA9PSBRQ2hhcjo6RGlyT04pOworCiAgICAg
ZW1wdHlSdW4gPSB0cnVlOwotICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpck9OOwotICAgIGJpZGku
c3RhdHVzLmVvciA9IGJpZGkuY29udGV4dC0+ZGlyOworCiAgICAgYmlkaS5lb3Iub2JqID0gMDsK
IAogICAgIG51bVNwYWNlcyA9IDA7CiAKICAgICBiaWRpLmN1cnJlbnQgPSBzdGFydDsKICAgICBi
aWRpLmxhc3QgPSBiaWRpLmN1cnJlbnQ7Ci0gICAgYm9vbCBhdEVuZCA9IGZhbHNlOworICAgIGJv
b2wgcGFzdEVuZCA9IGZhbHNlOworICAgIGJvb2wgcmVzZXRCaWRpQXRFbmQgPSBmYWxzZTsKKyAg
ICBCaWRpU3RhdGUgc3RhdGVBdEVuZDsKIAogICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgIFFD
aGFyOjpEaXJlY3Rpb24gZGlyQ3VycmVudDsKLSAgICAgICAgaWYgKGF0RW5kKSB7CisgICAgICAg
IGlmIChwYXN0RW5kICYmIChyZXNldEJpZGlBdEVuZCB8fCBiaWRpLmN1cnJlbnQuYXRFbmQoKSkp
IHsKICAgICAgICAgICAgIC8va2REZWJ1Zyg2MDQxKSA8PCAiYXRFbmQiIDw8IGVuZGw7Ci0gICAg
ICAgICAgICBCaWRpQ29udGV4dCAqYyA9IGJpZGkuY29udGV4dDsKLSAgICAgICAgICAgIGlmICgg
YmlkaS5jdXJyZW50LmF0RW5kKCkpCi0gICAgICAgICAgICAgICAgd2hpbGUgKCBjLT5wYXJlbnQg
KQotICAgICAgICAgICAgICAgICAgICBjID0gYy0+cGFyZW50OworICAgICAgICAgICAgQmlkaUNv
bnRleHQgKmMgPSBiaWRpLmNvbnRleHQuZ2V0KCk7CisgICAgICAgICAgICB3aGlsZSAoYy0+cGFy
ZW50KQorICAgICAgICAgICAgICAgIGMgPSBjLT5wYXJlbnQ7CiAgICAgICAgICAgICBkaXJDdXJy
ZW50ID0gYy0+ZGlyOworICAgICAgICAgICAgaWYgKHJlc2V0QmlkaUF0RW5kKSB7CisgICAgICAg
ICAgICAgICAgLy8gQSBkZXZpYXRpb24gZnJvbSB0aGUgVW5pY29kZSBCaWRpIEFsZ29yaXRobSBp
biBvcmRlciB0byBtYXRjaAorICAgICAgICAgICAgICAgIC8vIE1hYyBPUyBYIHRleHQgYW5kIFdp
bklFOiBhIGhhcmQgbGluZSBicmVhayByZXNldHMgYmlkaSBzdGF0ZS4KKyAgICAgICAgICAgICAg
ICBzdGF0ZUF0RW5kLmNvbnRleHQgPSBjOworICAgICAgICAgICAgICAgIHN0YXRlQXRFbmQuc3Rh
dHVzLmVvciA9IGRpckN1cnJlbnQ7CisgICAgICAgICAgICAgICAgc3RhdGVBdEVuZC5zdGF0dXMu
bGFzdCA9IGRpckN1cnJlbnQ7CisgICAgICAgICAgICAgICAgc3RhdGVBdEVuZC5zdGF0dXMubGFz
dFN0cm9uZyA9IGRpckN1cnJlbnQ7CisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICBkaXJDdXJyZW50ID0gYmlkaS5jdXJyZW50LmRpcmVjdGlvbigpOwogICAgICAg
ICAgICAgaWYgKGJpZGkuY29udGV4dC0+b3ZlcnJpZGUgJiYgZGlyQ3VycmVudCAhPSBRQ2hhcjo6
RGlyUkxFICYmIGRpckN1cnJlbnQgIT0gUUNoYXI6OkRpckxSRSAmJiBkaXJDdXJyZW50ICE9IFFD
aGFyOjpEaXJSTE8gJiYgZGlyQ3VycmVudCAhPSBRQ2hhcjo6RGlyTFJPICYmIGRpckN1cnJlbnQg
IT0gUUNoYXI6OkRpclBERikKQEAgLTEwMDEsMTEgKzEwMzQsOCBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGly
QU46CiAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLnN0YXR1cy5sYXN0ICE9IFFDaGFyOjpE
aXJFTiB8fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9IFFDaGFyOjpEaXJMKQogICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAgICAgICAgICAgICAgICBiaWRp
LmRpciA9IFFDaGFyOjpEaXJMOwotICAgICAgICAgICAgICAgICAgICAvLyBmYWxsIHRocm91Z2gK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6
RGlyTDoKLSAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFFDaGFyOjpEaXJMOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFUzoKICAg
ICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFVDoKQEAgLTEwMzcsMzQgKzEwNjcsMzEgQEAg
dm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJMaW5lKGNvbnN0IAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpclI7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQotICAg
ICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJpZGkuc3RhdHVzLmVvciAhPSBRQ2hhcjo6RGly
TCkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGFzdCBzdHVmZiB0YWtlcyBlbWJlZGRp
bmcgZGlyCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5jb250ZXh0LT5kaXIgPT0g
UUNoYXI6OkRpckwgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGlyTCkKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9
IFFDaGFyOjpEaXJSOyAKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKGJpZGkuc3RhdHVz
LmVvciAhPSBRQ2hhcjo6RGlyTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy9sYXN0IHN0
dWZmIHRha2VzIGVtYmVkZGluZyBkaXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRp
LmNvbnRleHQtPmRpciAhPSBRQ2hhcjo6RGlyTCAmJiBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9
IFFDaGFyOjpEaXJMKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBi
aWRpLmxhc3Q7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyUjsgCiAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRS
dW4oYmlkaSk7IAogICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGJp
ZGkuZW9yID0gYmlkaS5jdXJyZW50OwotICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5l
b3IgPSBRQ2hhcjo6RGlyTDsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBiaWRpLmVvciA9IGJpZGkuY3VycmVudDsKKyAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVv
ciA9IFFDaGFyOjpEaXJMOwogICAgICAgICAgICAgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9IFFD
aGFyOjpEaXJMOwogICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyTDsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTDoKICAgICAgICAgY2FzZSBRQ2hh
cjo6RGlyUjoKLSAgICAgICAgICAgIHN3aXRjaChiaWRpLnN0YXR1cy5sYXN0KSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKGJpZGkuc3RhdHVzLmxhc3QpIHsKICAgICAgICAgICAgICAgICBjYXNlIFFD
aGFyOjpEaXJMOgogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVOOgogICAgICAgICAg
ICAgICAgIGNhc2UgUUNoYXI6OkRpckFOOgogICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4o
YmlkaSk7CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyUjoKICAgICAgICAgICAgICAg
ICBjYXNlIFFDaGFyOjpEaXJBTDoKLSAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRp
LmN1cnJlbnQ7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNh
c2UgUUNoYXI6OkRpckVTOgogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVUOgpAQCAt
MTA3NiwyMCArMTEwMywxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29u
c3QgCiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyT046CiAgICAgICAgICAgICAgICAg
ICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgIT0gUUNoYXI6OkRpclIgJiYgYmlkaS5zdGF0dXMuZW9y
ICE9IFFDaGFyOjpEaXJBTCkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy9sYXN0IHN0dWZm
IHRha2VzIGVtYmVkZGluZyBkaXIKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKGJpZGkuY29u
dGV4dC0+ZGlyID09IFFDaGFyOjpEaXJSIHx8IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNo
YXI6OkRpclIgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgYmlkaS5zdGF0dXMubGFz
dFN0cm9uZyA9PSBRQ2hhcjo6RGlyQUwpIHsgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXBwZW5kUnVuKGJpZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0g
YmlkaS5jdXJyZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJMOyAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChiaWRpLmNvbnRleHQtPmRpciAhPSBRQ2hhcjo6RGlyUiAmJiBiaWRp
LnN0YXR1cy5sYXN0U3Ryb25nICE9IFFDaGFyOjpEaXJSIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgIT0gUUNoYXI6OkRpckFMKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckw7IAogICAgICAgICAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGJp
ZGkuZW9yID0gYmlkaS5jdXJyZW50OworICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVu
KGJpZGkpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7CiAgICAgICAgICAgICBi
aWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyUjsKICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmxh
c3RTdHJvbmcgPSBkaXJDdXJyZW50OwogICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGly
UjsKQEAgLTEwOTgsODcgKzExMjIsNzMgQEAgdm9pZCBSZW5kZXJCbG9jazo6YmlkaVJlb3JkZXJM
aW5lKGNvbnN0IAogICAgICAgICAgICAgLy8gd2VhayB0eXBlczoKIAogICAgICAgICBjYXNlIFFD
aGFyOjpEaXJFTjoKLSAgICAgICAgICAgIGlmICghKGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0g
UUNoYXI6OkRpckFMKSkgeworICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcg
IT0gUUNoYXI6OkRpckFMKSB7CiAgICAgICAgICAgICAgICAgLy8gaWYgbGFzdCBzdHJvbmcgd2Fz
IEFMIGNoYW5nZSBFTiB0byBBTgogICAgICAgICAgICAgICAgIHN3aXRjaCAoYmlkaS5zdGF0dXMu
bGFzdCkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFVDoKLQkJCWlmIChi
aWRpLnN0YXR1cy5sYXN0U3Ryb25nID09IFFDaGFyOjpEaXJSIHx8IGJpZGkuc3RhdHVzLmxhc3RT
dHJvbmcgPT0gUUNoYXI6OkRpckFMKSB7Ci0JCQkgICAgYXBwZW5kUnVuKGJpZGkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcgPT0gUUNoYXI6OkRp
clIgfHwgYmlkaS5zdGF0dXMubGFzdFN0cm9uZyA9PSBRQ2hhcjo6RGlyQUwpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyRU47Ci0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpckVOOwogCQkJfQogCQkJLy8gZmFsbCB0
aHJvdWdoCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckVOOgogICAgICAgICAg
ICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJMOgotICAgICAgICAgICAgICAgICAgICAgICAgYmlk
aS5lb3IgPSBiaWRpLmN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1
cy5lb3IgPSBkaXJDdXJyZW50OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpclI6CiAgICAgICAgICAgICAgICAgICAgIGNh
c2UgUUNoYXI6OkRpckFMOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTjoK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwogICAgICAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiaWRpLnN0
YXR1cy5lb3IgPSBRQ2hhcjo6RGlyRU47CiAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRp
ciA9IFFDaGFyOjpEaXJFTjsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFUzoKICAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBRQ2hhcjo6RGlyQ1M6CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmlkaS5zdGF0dXMu
ZW9yID09IFFDaGFyOjpEaXJFTikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVv
ciA9IGJpZGkuY3VycmVudDsgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckJOOgogICAgICAgICAgICAg
ICAgICAgICBjYXNlIFFDaGFyOjpEaXJCOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFy
OjpEaXJTOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJXUzoKICAgICAgICAg
ICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyT046Ci0gICAgICAgICAgICAgICAgICAgICAgICBp
ZihiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRpclIpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChiaWRpLnN0YXR1cy5lb3IgPT0gUUNoYXI6OkRpclIpIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBuZXV0cmFscyBnbyB0byBSCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXBwZW5kUnVuKGJpZGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0g
UUNoYXI6OkRpckVOOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVv
ciA9IFFDaGFyOjpEaXJFTjsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlk
aS5zdGF0dXMuZW9yID09IFFDaGFyOjpEaXJMIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoYmlkaS5zdGF0dXMuZW9yID09IFFDaGFyOjpEaXJFTiAmJiBiaWRpLnN0YXR1cy5s
YXN0U3Ryb25nID09IFFDaGFyOjpEaXJMKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
aWRpLnN0YXR1cy5lb3IgPSBkaXJDdXJyZW50OwotICAgICAgICAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmlkaS5zdGF0dXMuZW9y
ICE9IFFDaGFyOjpEaXJMICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYmlk
aS5zdGF0dXMuZW9yICE9IFFDaGFyOjpEaXJFTiB8fCBiaWRpLnN0YXR1cy5sYXN0U3Ryb25nICE9
IFFDaGFyOjpEaXJMKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5k
aXIgIT0gUUNoYXI6OkRpckwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBudW1i
ZXJzIG9uIGJvdGggc2lkZXMsIG5ldXRyYWxzIGdldCByaWdodCB0byBsZWZ0IGRpcmVjdGlvbgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChiaWRpLmRpciAhPSBRQ2hhcjo6RGlyTCkg
ewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJSOwotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckVOOwotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyRU47Ci0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OyBiaWRpLnN0YXR1cy5lb3IgPSBkaXJDdXJy
ZW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmVvciA9IGJpZGkubGFzdDsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJSOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZFJ1bihiaWRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBiaWRpLmRpciA9IFFDaGFyOjpEaXJFTjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OworICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVz
LmVvciA9IFFDaGFyOjpEaXJFTjsKICAgICAgICAgICAgICAgICBpZiAoYmlkaS5kaXIgPT0gUUNo
YXI6OkRpck9OKQogICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IFFDaGFyOjpEaXJMOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICBjYXNlIFFDaGFy
OjpEaXJBTjoKICAgICAgICAgICAgIGRpckN1cnJlbnQgPSBRQ2hhcjo6RGlyQU47Ci0gICAgICAg
ICAgICBzd2l0Y2goYmlkaS5zdGF0dXMubGFzdCkgeworICAgICAgICAgICAgc3dpdGNoIChiaWRp
LnN0YXR1cy5sYXN0KSB7CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyTDoKICAgICAg
ICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJBTjoKLSAgICAgICAgICAgICAgICAgICAgYmlkaS5l
b3IgPSBiaWRpLmN1cnJlbnQ7IGJpZGkuc3RhdHVzLmVvciA9IFFDaGFyOjpEaXJBTjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6
OkRpclI6CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQUw6CiAgICAgICAgICAgICAg
ICAgY2FzZSBRQ2hhcjo6RGlyRU46CiAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlk
aS5sYXN0OwogICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJpZGkuZW9yID0gYmlkaS5jdXJyZW50OwotICAgICAgICAgICAgICAgICAgICBi
aWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyQU47Ci0gICAgICAgICAgICAgICAgICAgIGJpZGku
ZGlyID0gUUNoYXI6OkRpckFOOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBjYXNlIFFDaGFyOjpEaXJDUzoKICAgICAgICAgICAgICAgICAgICAgaWYgKGJpZGku
c3RhdHVzLmVvciA9PSBRQ2hhcjo6RGlyQU4pCi0gICAgICAgICAgICAgICAgICAgICAgICBiaWRp
LmVvciA9IGJpZGkuY3VycmVudDsgCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGly
RVM6CiAgICAgICAgICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyRVQ6CiAgICAgICAgICAgICAgICAg
Y2FzZSBRQ2hhcjo6RGlyQk46CkBAIC0xMTk0LDI3ICsxMjA0LDIwIEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBjbG9zZSB0aGUgTCBydW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4o
YmlkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmV1dHJhbHMgYmVjb21lIGFu
IFIgcnVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyUjsKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBlbWJl
ZGRpbmcgZGlyZWN0aW9uIGlzIEwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhcHBl
bmQgbmV1dHJhbHMgdG8gdGhlIEwgcnVuIGFuZCBjbG9zZSBpdAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpckw7IAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJpZGkuZW9yID0gYmlkaS5sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJpZGkuZW9yID0gYmlk
aS5sYXN0OwotICAgICAgICAgICAgICAgICAgICAgICAgYXBwZW5kUnVuKGJpZGkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmN1cnJlbnQ7CiAgICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgYmlkaS5kaXIgPSBRQ2hhcjo6RGlyQU47Ci0g
ICAgICAgICAgICAgICAgICAgIGJpZGkuc3RhdHVzLmVvciA9IFFDaGFyOjpEaXJBTjsKKyAgICAg
ICAgICAgICAgICAgICAgYmlkaS5lb3IgPSBiaWRpLmxhc3Q7CisgICAgICAgICAgICAgICAgICAg
IGFwcGVuZFJ1bihiaWRpKTsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJpZGkuZW9yID0gYmlk
aS5jdXJyZW50OworICAgICAgICAgICAgYmlkaS5zdGF0dXMuZW9yID0gUUNoYXI6OkRpckFOOwog
ICAgICAgICAgICAgaWYgKGJpZGkuZGlyID09IFFDaGFyOjpEaXJPTikKICAgICAgICAgICAgICAg
ICBiaWRpLmRpciA9IFFDaGFyOjpEaXJBTjsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTI2MSw4
ICsxMjY0LDI5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmJpZGlSZW9yZGVyTGluZShjb25zdCAKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKGJpZGkuY3VycmVudC5h
dEVuZCgpKQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChwYXN0RW5kKSB7CisgICAg
ICAgICAgICBpZiAoYmlkaS5lb3IgPT0gYmlkaS5jdXJyZW50KSB7CisgICAgICAgICAgICAgICAg
aWYgKCFiaWRpLnJlYWNoZWRFbmRPZkxpbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgYmlkaS5l
b3IgPSBiaWRpLmVuZE9mTGluZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChiaWRpLnN0
YXR1cy5lb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgUUNoYXI6OkRpckw6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJSOgorICAgICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBRQ2hhcjo6RGlyQU46CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmlkaS5kaXIgPSBiaWRpLnN0YXR1cy5lb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFFDaGFyOjpEaXJFTjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBiaWRpLmRpciA9IGJpZGkuc3RhdHVzLmxhc3RTdHJvbmcg
PT0gUUNoYXI6OkRpckwgPyBRQ2hhcjo6RGlyTCA6IFFDaGFyOjpEaXJFTjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhcHBlbmRSdW4oYmlkaSk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJpZGkgPSBzdGF0ZUF0RW5kOworICAgICAgICAg
ICAgICAgIGJpZGkuZGlyID0gUUNoYXI6OkRpck9OOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CiAKICAgICAgICAgLy8gc2V0IHN0YXR1cy5sYXN0IGFz
IG5lZWRlZC4KICAgICAgICAgc3dpdGNoIChkaXJDdXJyZW50KSB7CkBAIC0xMzAyLDggKzEzMjYs
NiBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAgICAgICAgICAg
ICAgICAgYmlkaS5zdGF0dXMubGFzdCA9IGRpckN1cnJlbnQ7CiAgICAgICAgIH0KIAotCWlmIChh
dEVuZCkKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBiaWRpLmxhc3QgPSBiaWRpLmN1cnJl
bnQ7CiAKIAlpZiAoZW1wdHlSdW4gJiYgIShkaXJDdXJyZW50ID09IFFDaGFyOjpEaXJSTEUgfHwg
ZGlyQ3VycmVudCA9PSBRQ2hhcjo6RGlyTFJFIHx8IGRpckN1cnJlbnQgPT0gUUNoYXI6OkRpclJM
TyB8fCBkaXJDdXJyZW50ID09IFFDaGFyOjpEaXJMUk8gfHwgZGlyQ3VycmVudCA9PSBRQ2hhcjo6
RGlyUERGKSkgewpAQCAtMTMyMyw0NCArMTM0NSw0MiBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRp
UmVvcmRlckxpbmUoY29uc3QgCiAgICAgICAgICAgICBiaWRpLnNvciA9IGJpZGkuY3VycmVudDsK
ICAgICAgICAgfQogCi0JaWYgKGJpZGkuY3VycmVudCA9PSBlbmQpIHsKLQkgICAgaWYgKGVtcHR5
UnVuKQotCQlicmVhazsKLQkgICAgYXRFbmQgPSB0cnVlOwotCX0KLSAgICB9Ci0KLSAgICBpZiAo
IWVtcHR5UnVuICYmIGJpZGkuc29yICE9IGJpZGkuY3VycmVudCkgewotICAgICAgICBiaWRpLmVv
ciA9IGJpZGkubGFzdDsKLSAgICAgICAgYXBwZW5kUnVuKGJpZGkpOworICAgICAgICBpZiAoIXBh
c3RFbmQgJiYgKGJpZGkuY3VycmVudCA9PSBlbmQgfHwgYmlkaS5jdXJyZW50LmF0RW5kKCkpKSB7
CisgICAgICAgICAgICBpZiAoZW1wdHlSdW4pCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBzdGF0ZUF0RW5kID0gYmlkaTsKKyAgICAgICAgICAgIGJpZGkuZW5kT2ZMaW5lID0g
YmlkaS5sYXN0OworICAgICAgICAgICAgcGFzdEVuZCA9IHRydWU7CisgICAgICAgICAgICByZXNl
dEJpZGlBdEVuZCA9IHByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSB8fCAoZW5kLm9iaiAmJiBlbmQu
b2JqLT5zdHlsZSgpLT5wcmVzZXJ2ZU5ld2xpbmUoKSAmJiBlbmQuY3VycmVudCgpID09ICdcbicp
OworICAgICAgICB9CiAgICAgfQogCiAgICAgLy8gcmVvcmRlciBsaW5lIGFjY29yZGluZyB0byBy
dW4gc3RydWN0dXJlLi4uCisgICAgLy8gZG8gbm90IHJldmVyc2UgZm9yIHZpc3VhbGx5IG9yZGVy
ZWQgd2ViIHNpdGVzCisgICAgaWYgKCFzdHlsZSgpLT52aXN1YWxseU9yZGVyZWQoKSkgewogCi0g
ICAgLy8gZmlyc3QgZmluZCBoaWdoZXN0IGFuZCBsb3dlc3QgbGV2ZWxzCi0gICAgdWNoYXIgbGV2
ZWxMb3cgPSAxMjg7Ci0gICAgdWNoYXIgbGV2ZWxIaWdoID0gMDsKLSAgICBCaWRpUnVuKiByID0g
c0ZpcnN0QmlkaVJ1bjsKLSAgICB3aGlsZSAocikgewotICAgICAgICBpZiAoci0+bGV2ZWwgPiBs
ZXZlbEhpZ2gpCi0gICAgICAgICAgICBsZXZlbEhpZ2ggPSByLT5sZXZlbDsKLSAgICAgICAgaWYg
KHItPmxldmVsIDwgbGV2ZWxMb3cpCi0gICAgICAgICAgICBsZXZlbExvdyA9IHItPmxldmVsOwot
ICAgICAgICByID0gci0+bmV4dFJ1bjsKLSAgICB9Ci0KLSAgICAvLyBpbXBsZW1lbnRzIHJlb3Jk
ZXJpbmcgb2YgdGhlIGxpbmUgKEwyIGFjY29yZGluZyB0byBCaWRpIHNwZWMpOgotICAgIC8vIEwy
LiBGcm9tIHRoZSBoaWdoZXN0IGxldmVsIGZvdW5kIGluIHRoZSB0ZXh0IHRvIHRoZSBsb3dlc3Qg
b2RkIGxldmVsIG9uIGVhY2ggbGluZSwKLSAgICAvLyByZXZlcnNlIGFueSBjb250aWd1b3VzIHNl
cXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgYXQgdGhhdCBsZXZlbCBvciBoaWdoZXIuCi0K
LSAgICAvLyByZXZlcnNpbmcgaXMgb25seSBkb25lIHVwIHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVs
Ci0gICAgaWYgKCEobGV2ZWxMb3clMikpCi0gICAgICAgIGxldmVsTG93Kys7CisgICAgICAgIC8v
IGZpcnN0IGZpbmQgaGlnaGVzdCBhbmQgbG93ZXN0IGxldmVscworICAgICAgICB1Y2hhciBsZXZl
bExvdyA9IDEyODsKKyAgICAgICAgdWNoYXIgbGV2ZWxIaWdoID0gMDsKKyAgICAgICAgQmlkaVJ1
biogciA9IHNGaXJzdEJpZGlSdW47CisgICAgICAgIHdoaWxlIChyKSB7CisgICAgICAgICAgICBp
ZiAoci0+bGV2ZWwgPiBsZXZlbEhpZ2gpCisgICAgICAgICAgICAgICAgbGV2ZWxIaWdoID0gci0+
bGV2ZWw7CisgICAgICAgICAgICBpZiAoci0+bGV2ZWwgPCBsZXZlbExvdykKKyAgICAgICAgICAg
ICAgICBsZXZlbExvdyA9IHItPmxldmVsOworICAgICAgICAgICAgciA9IHItPm5leHRSdW47Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBpbXBsZW1lbnRzIHJlb3JkZXJpbmcgb2YgdGhlIGxpbmUg
KEwyIGFjY29yZGluZyB0byBCaWRpIHNwZWMpOgorICAgICAgICAvLyBMMi4gRnJvbSB0aGUgaGln
aGVzdCBsZXZlbCBmb3VuZCBpbiB0aGUgdGV4dCB0byB0aGUgbG93ZXN0IG9kZCBsZXZlbCBvbiBl
YWNoIGxpbmUsCisgICAgICAgIC8vIHJldmVyc2UgYW55IGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2Yg
Y2hhcmFjdGVycyB0aGF0IGFyZSBhdCB0aGF0IGxldmVsIG9yIGhpZ2hlci4KKworICAgICAgICAv
LyByZXZlcnNpbmcgaXMgb25seSBkb25lIHVwIHRvIHRoZSBsb3dlc3Qgb2RkIGxldmVsCisgICAg
ICAgIGlmICghKGxldmVsTG93JTIpKQorICAgICAgICAgICAgbGV2ZWxMb3crKzsKIAotICAgIGlu
dCBjb3VudCA9IHNCaWRpUnVuQ291bnQgLSAxOworICAgICAgICBpbnQgY291bnQgPSBzQmlkaVJ1
bkNvdW50IC0gMTsKIAotICAgIC8vIGRvIG5vdCByZXZlcnNlIGZvciB2aXN1YWxseSBvcmRlcmVk
IHdlYiBzaXRlcwotICAgIGlmICghc3R5bGUoKS0+dmlzdWFsbHlPcmRlcmVkKCkpIHsKICAgICAg
ICAgd2hpbGUgKGxldmVsSGlnaCA+PSBsZXZlbExvdykgewogICAgICAgICAgICAgaW50IGkgPSAw
OwogICAgICAgICAgICAgQmlkaVJ1biogY3VyclJ1biA9IHNGaXJzdEJpZGlSdW47CkBAIC0xMzgw
LDYgKzE0MDAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpiaWRpUmVvcmRlckxpbmUoY29uc3QgCiAg
ICAgICAgICAgICBsZXZlbEhpZ2gtLTsKICAgICAgICAgfQogICAgIH0KKyAgICBiaWRpLmVuZE9m
TGluZS5vYmogPSAwOwogfQogCiBzdGF0aWMgdm9pZCBidWlsZENvbXBhY3RSdW5zKFJlbmRlck9i
amVjdCogY29tcGFjdE9iaiwgQmlkaVN0YXRlJiBiaWRpKQpAQCAtMTM4OCw3ICsxNDA5LDcgQEAg
c3RhdGljIHZvaWQgYnVpbGRDb21wYWN0UnVucyhSZW5kZXJPYmplYwogICAgIGlmICghY29tcGFj
dE9iai0+aXNSZW5kZXJCbG9jaygpKSB7CiAgICAgICAgIC8vIEp1c3QgYXBwZW5kIGEgcnVuIGZv
ciBvdXIgb2JqZWN0LgogICAgICAgICBpc0xpbmVFbXB0eSA9IGZhbHNlOwotICAgICAgICBhZGRS
dW4obmV3IChjb21wYWN0T2JqLT5yZW5kZXJBcmVuYSgpKSBCaWRpUnVuKDAsIGNvbXBhY3RPYmot
Pmxlbmd0aCgpLCBjb21wYWN0T2JqLCBiaWRpLmNvbnRleHQsIGJpZGkuZGlyKSk7CisgICAgICAg
IGFkZFJ1bihuZXcgKGNvbXBhY3RPYmotPnJlbmRlckFyZW5hKCkpIEJpZGlSdW4oMCwgY29tcGFj
dE9iai0+bGVuZ3RoKCksIGNvbXBhY3RPYmosIGJpZGkuY29udGV4dC5nZXQoKSwgYmlkaS5kaXIp
KTsKICAgICB9CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIEZvcm1hdCB0aGUgY29tcGFjdCBsaWtl
IGl0IGlzIGl0cyBvd24gc2luZ2xlIGxpbmUuICBXZSBidWlsZCB1cCBhbGwgdGhlIHJ1bnMgZm9y
CkBAIC0xNTA3LDExICsxNTI4LDEyIEBAIFFSZWN0IFJlbmRlckJsb2NrOjpsYXlvdXRJbmxpbmVD
aGlsZHJlbigKICAgICAgICAgICAgIHN0YXJ0RW1iZWQgPSBuZXcgQmlkaUNvbnRleHQoIDEsIFFD
aGFyOjpEaXJSLCBOVUxMLCBzdHlsZSgpLT51bmljb2RlQmlkaSgpID09IE92ZXJyaWRlICk7CiAg
ICAgICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBRQ2hhcjo6RGlyUjsKICAgICAgICAgfQotICAg
ICAgICBzdGFydEVtYmVkLT5yZWYoKTsKIAogICAgICAgICBiaWRpLnN0YXR1cy5sYXN0U3Ryb25n
ID0gc3RhcnRFbWJlZC0+ZGlyOwogICAgICAgICBiaWRpLnN0YXR1cy5sYXN0ID0gc3RhcnRFbWJl
ZC0+ZGlyOworICAgICAgICBiaWRpLnN0YXR1cy5lb3IgPSBzdGFydEVtYmVkLT5kaXI7CiAgICAg
ICAgIGJpZGkuY29udGV4dCA9IHN0YXJ0RW1iZWQ7CisgICAgICAgIGJpZGkuZGlyID0gUUNoYXI6
OkRpck9OOwogICAgICAgICAKICAgICAgICAgaWYgKCFzbWlkcG9pbnRzKQogICAgICAgICAgICAg
c21pZHBvaW50cyA9IG5ldyBRTWVtQXJyYXk8QmlkaUl0ZXJhdG9yPjsKQEAgLTE1MjgsOSArMTU1
MCwxMyBAQCBRUmVjdCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oCiAgICAgICAg
IC8vIFdlIGFsc28gZmluZCB0aGUgZmlyc3QgY2xlYW4gbGluZSBhbmQgZXh0cmFjdCB0aGVzZSBs
aW5lcy4gIFdlIHdpbGwgYWRkIHRoZW0gYmFjawogICAgICAgICAvLyBpZiB3ZSBkZXRlcm1pbmUg
dGhhdCB3ZSdyZSBhYmxlIHRvIHN5bmNocm9uaXplIGFmdGVyIGhhbmRsaW5nIGFsbCBvdXIgZGly
dHkgbGluZXMuCiAgICAgICAgIEJpZGlJdGVyYXRvciBjbGVhbkxpbmVTdGFydDsKKyAgICAgICAg
QmlkaVN0YXR1cyBjbGVhbkxpbmVCaWRpU3RhdHVzOworICAgICAgICBCaWRpQ29udGV4dCogY2xl
YW5MaW5lQmlkaUNvbnRleHQ7CiAgICAgICAgIGludCBlbmRMaW5lWVBvczsKICAgICAgICAgUm9v
dElubGluZUJveCogZW5kTGluZSA9IChmdWxsTGF5b3V0IHx8ICFzdGFydExpbmUpID8gCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogZGV0ZXJtaW5lRW5kUG9zaXRpb24oc3Rh
cnRMaW5lLCBjbGVhbkxpbmVTdGFydCwgZW5kTGluZVlQb3MpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCA6IGRldGVybWluZUVuZFBvc2l0aW9uKHN0YXJ0TGluZSwgY2xlYW5M
aW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0dXMsIGNsZWFuTGluZUJpZGlDb250ZXh0LCBlbmRM
aW5lWVBvcyk7CisgICAgICAgIGlmIChlbmRMaW5lICYmIGNsZWFuTGluZUJpZGlDb250ZXh0KQor
ICAgICAgICAgICAgY2xlYW5MaW5lQmlkaUNvbnRleHQtPnJlZigpOwogICAgICAgICBpZiAoc3Rh
cnRMaW5lKSB7CiAgICAgICAgICAgICB1c2VSZXBhaW50UmVjdCA9IHRydWU7CiAgICAgICAgICAg
ICBzdGFydExpbmVCb3R0b20gPSBzdGFydExpbmUtPmJvdHRvbU92ZXJmbG93KCk7CkBAIC0xNTUw
LDcgKzE1NzYsNyBAQCBRUmVjdCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4oCiAg
ICAgICAgIGJvb2wgZW5kTGluZU1hdGNoZWQgPSBmYWxzZTsKICAgICAgICAgd2hpbGUgKCFlbmQu
YXRFbmQoKSkgewogICAgICAgICAgICAgc3RhcnQgPSBlbmQ7Ci0gICAgICAgICAgICBpZiAoZW5k
TGluZSAmJiAoZW5kTGluZU1hdGNoZWQgPSBtYXRjaGVkRW5kTGluZShzdGFydCwgY2xlYW5MaW5l
U3RhcnQsIGVuZExpbmUsIGVuZExpbmVZUG9zKSkpCisgICAgICAgICAgICBpZiAoZW5kTGluZSAm
JiAoZW5kTGluZU1hdGNoZWQgPSBtYXRjaGVkRW5kTGluZShzdGFydCwgYmlkaS5zdGF0dXMsIGJp
ZGkuY29udGV4dC5nZXQoKSwgY2xlYW5MaW5lU3RhcnQsIGNsZWFuTGluZUJpZGlTdGF0dXMsIGNs
ZWFuTGluZUJpZGlDb250ZXh0LCBlbmRMaW5lLCBlbmRMaW5lWVBvcykpKQogICAgICAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgICAgICBiZXR3ZWVuTWlkcG9pbnRzID0gZmFsc2U7CkBAIC0x
NTYxLDcgKzE1ODcsOCBAQCBRUmVjdCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4o
CiAgICAgICAgICAgICAgICAgZW5kID0gc3RhcnQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBlbmQgPSBmaW5kTmV4dExpbmVCcmVhayhzdGFydCwgYmlkaSk7Ci0gICAgICAgICAgICBpZigg
c3RhcnQuYXRFbmQoKSApIGJyZWFrOworICAgICAgICAgICAgaWYgKHN0YXJ0LmF0RW5kKCkpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAoIWlzTGluZUVtcHR5KSB7CiAg
ICAgICAgICAgICAgICAgYmlkaVJlb3JkZXJMaW5lKHN0YXJ0LCBlbmQsIGJpZGkpOwogCkBAIC0x
NTk5LDcgKzE2MjYsNyBAQCBRUmVjdCBSZW5kZXJCbG9jazo6bGF5b3V0SW5saW5lQ2hpbGRyZW4o
CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGxpbmVCb3gpCi0gICAg
ICAgICAgICAgICAgICAgIGxpbmVCb3gtPnNldExpbmVCcmVha0luZm8oZW5kLm9iaiwgZW5kLnBv
cyk7CisgICAgICAgICAgICAgICAgICAgIGxpbmVCb3gtPnNldExpbmVCcmVha0luZm8oZW5kLm9i
aiwgZW5kLnBvcywgJmJpZGkuc3RhdHVzLCBiaWRpLmNvbnRleHQuZ2V0KCkpOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIG1fZmlyc3RMaW5lID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgbmV3TGluZSgpOwpAQCAtMTYxMCw4ICsxNjM3LDYgQEAgUVJlY3QgUmVuZGVyQmxvY2s6
OmxheW91dElubGluZUNoaWxkcmVuKAogICAgICAgICAgICAgc0NvbXBhY3RGaXJzdEJpZGlSdW4g
PSBzQ29tcGFjdExhc3RCaWRpUnVuID0gMDsKICAgICAgICAgICAgIHNDb21wYWN0QmlkaVJ1bkNv
dW50ID0gMDsKICAgICAgICAgfQotICAgICAgICBzdGFydEVtYmVkLT5kZXJlZigpOwotICAgICAg
ICAvL2VtYmVkLT5kZXJlZigpOwogICAgICAgICAKICAgICAgICAgaWYgKGVuZExpbmUpIHsKICAg
ICAgICAgICAgIGlmIChlbmRMaW5lTWF0Y2hlZCkgewpAQCAtMTY1NCw2ICsxNjc5LDggQEAgUVJl
Y3QgUmVuZGVyQmxvY2s6OmxheW91dElubGluZUNoaWxkcmVuKAogICAgICAgICAgICAgICAgICAg
ICBsaW5lID0gbmV4dDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoY2xlYW5MaW5lQmlkaUNvbnRleHQpCisgICAgICAgICAgICAgICAgY2xlYW5MaW5l
QmlkaUNvbnRleHQtPmRlcmVmKCk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTE3MTYsOCArMTc0
Myw3IEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVTdGEKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIEtIVE1MQXNzZXJ0KCFtX2ZpcnN0TGluZUJveCAmJiAhbV9sYXN0
TGluZUJveCk7CiAgICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSB7CisgICAgfSBlbHNlIHsKICAg
ICAgICAgZm9yIChjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnIgJiYgIWN1cnItPmlzRGlydHko
KTsgY3VyciA9IGN1cnItPm5leHRSb290Qm94KCkpOwogICAgICAgICBpZiAoY3VycikgewogICAg
ICAgICAgICAgLy8gV2UgaGF2ZSBhIGRpcnR5IGxpbmUuCkBAIC0xNzI2LDggKzE3NTIsNyBAQCBS
b290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lU3RhCiAgICAgICAgICAgICAgICAg
aWYgKCFjdXJyLT5wcmV2Um9vdEJveCgpLT5lbmRzV2l0aEJyZWFrKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGN1cnIgPSBjdXJyLT5wcmV2Um9vdEJveCgpOyAgLy8gVGhlIHByZXZpb3VzIGxpbmUg
ZGlkbid0IGJyZWFrIGNsZWFubHksIHNvIHRyZWF0IGl0IGFzIGRpcnR5IGFsc28uCiAgICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7CisgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICAvLyBObyBkaXJ0eSBsaW5lcyB3ZXJlIGZvdW5kLgogICAgICAgICAgICAgLy8gSWYg
dGhlIGxhc3QgbGluZSBkaWRuJ3QgYnJlYWsgY2xlYW5seSwgdHJlYXQgaXQgYXMgZGlydHkuCiAg
ICAgICAgICAgICBpZiAobGFzdFJvb3RCb3goKSAmJiAhbGFzdFJvb3RCb3goKS0+ZW5kc1dpdGhC
cmVhaygpKQpAQCAtMTc0NywxOCArMTc3MiwxOCBAQCBSb290SW5saW5lQm94KiBSZW5kZXJCbG9j
azo6ZGV0ZXJtaW5lU3RhCiAgICAgICAgICAgICBtX292ZXJmbG93SGVpZ2h0ID0gYm90dG9tT2ZM
aW5lOwogICAgICAgICBzdGFydE9iaiA9IGxhc3QtPmxpbmVCcmVha09iaigpOwogICAgICAgICBw
b3MgPSBsYXN0LT5saW5lQnJlYWtQb3MoKTsKLSAgICB9Ci0gICAgZWxzZQorICAgICAgICBiaWRp
LnN0YXR1cyA9IGxhc3QtPmxpbmVCcmVha0JpZGlTdGF0dXMoKTsKKyAgICAgICAgYmlkaS5jb250
ZXh0ID0gbGFzdC0+bGluZUJyZWFrQmlkaUNvbnRleHQoKTsKKyAgICB9IGVsc2UKICAgICAgICAg
c3RhcnRPYmogPSBiaWRpRmlyc3QodGhpcywgYmlkaSwgMCk7CiAgICAgICAgIAotICAgIGJpZGku
YWRqdXN0RW1iZWRkaW5nID0gdHJ1ZTsKICAgICBzdGFydCA9IEJpZGlJdGVyYXRvcih0aGlzLCBz
dGFydE9iaiwgcG9zKTsKLSAgICBiaWRpLmFkanVzdEVtYmVkZGluZyA9IGZhbHNlOwogICAgIAog
ICAgIHJldHVybiBjdXJyOwogfQogCiBSb290SW5saW5lQm94KiBSZW5kZXJCbG9jazo6ZGV0ZXJt
aW5lRW5kUG9zaXRpb24oUm9vdElubGluZUJveCogc3RhcnRMaW5lLCBCaWRpSXRlcmF0b3ImIGNs
ZWFuTGluZVN0YXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEJpZGlTdGF0dXMmIGNsZWFuTGluZUJpZGlTdGF0dXMsIEJpZGlDb250ZXh0KiYgY2xl
YW5MaW5lQmlkaUNvbnRleHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50JiB5UG9zKQogewogICAgIFJvb3RJbmxpbmVCb3gqIGxhc3QgPSAwOwpA
QCAtMTc3Niw3ICsxODAxLDEwIEBAIFJvb3RJbmxpbmVCb3gqIFJlbmRlckJsb2NrOjpkZXRlcm1p
bmVFbmQKICAgICBpZiAoIWxhc3QpCiAgICAgICAgIHJldHVybiAwOwogICAgIAotICAgIGNsZWFu
TGluZVN0YXJ0ID0gQmlkaUl0ZXJhdG9yKHRoaXMsIGxhc3QtPnByZXZSb290Qm94KCktPmxpbmVC
cmVha09iaigpLCBsYXN0LT5wcmV2Um9vdEJveCgpLT5saW5lQnJlYWtQb3MoKSk7CisgICAgUm9v
dElubGluZUJveCogcHJldiA9IGxhc3QtPnByZXZSb290Qm94KCk7CisgICAgY2xlYW5MaW5lU3Rh
cnQgPSBCaWRpSXRlcmF0b3IodGhpcywgcHJldi0+bGluZUJyZWFrT2JqKCksIHByZXYtPmxpbmVC
cmVha1BvcygpKTsKKyAgICBjbGVhbkxpbmVCaWRpU3RhdHVzID0gcHJldi0+bGluZUJyZWFrQmlk
aVN0YXR1cygpOworICAgIGNsZWFuTGluZUJpZGlDb250ZXh0ID0gcHJldi0+bGluZUJyZWFrQmlk
aUNvbnRleHQoKTsKICAgICB5UG9zID0gbGFzdC0+cHJldlJvb3RCb3goKS0+YmxvY2tIZWlnaHQo
KTsKICAgICAKICAgICBmb3IgKFJvb3RJbmxpbmVCb3gqIGxpbmUgPSBsYXN0OyBsaW5lOyBsaW5l
ID0gbGluZS0+bmV4dFJvb3RCb3goKSkKQEAgLTE3ODYsMTEgKzE4MTQsMTIgQEAgUm9vdElubGlu
ZUJveCogUmVuZGVyQmxvY2s6OmRldGVybWluZUVuZAogICAgIHJldHVybiBsYXN0OwogfQogCi1i
b29sIFJlbmRlckJsb2NrOjptYXRjaGVkRW5kTGluZShjb25zdCBCaWRpSXRlcmF0b3ImIHN0YXJ0
LCBjb25zdCBCaWRpSXRlcmF0b3ImIGVuZExpbmVTdGFydCwgCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBSb290SW5saW5lQm94KiYgZW5kTGluZSwgaW50JiBlbmRZUG9zKQorYm9v
bCBSZW5kZXJCbG9jazo6bWF0Y2hlZEVuZExpbmUoY29uc3QgQmlkaUl0ZXJhdG9yJiBzdGFydCwg
Y29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzLCBCaWRpQ29udGV4dCogY29udGV4dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJpZGlJdGVyYXRvciYgZW5kTGluZVN0YXJ0
LCBjb25zdCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQmlkaUNvbnRleHQqIGVuZExpbmVDb250ZXh0LCBSb290SW5saW5lQm94KiYg
ZW5kTGluZSwgaW50JiBlbmRZUG9zKQogewogICAgIGlmIChzdGFydCA9PSBlbmRMaW5lU3RhcnQp
Ci0gICAgICAgIHJldHVybiB0cnVlOyAvLyBUaGUgY29tbW9uIGNhc2UuIEFsbCB0aGUgZGF0YSB3
ZSBhbHJlYWR5IGhhdmUgaXMgY29ycmVjdC4KKyAgICAgICAgcmV0dXJuIHN0YXR1cyA9PSBlbmRM
aW5lU3RhdHVzICYmICpjb250ZXh0ID09ICplbmRMaW5lQ29udGV4dDsKICAgICBlbHNlIHsKICAg
ICAgICAgLy8gVGhlIGZpcnN0IGNsZWFuIGxpbmUgZG9lc24ndCBtYXRjaCwgYnV0IHdlIGNhbiBj
aGVjayBhIGhhbmRmdWwgb2YgZm9sbG93aW5nIGxpbmVzIHRvIHRyeQogICAgICAgICAvLyB0byBt
YXRjaCBiYWNrIHVwLgpAQCAtMTc5OSw2ICsxODI4LDggQEAgYm9vbCBSZW5kZXJCbG9jazo6bWF0
Y2hlZEVuZExpbmUoY29uc3QgQgogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUxpbmVz
ICYmIGxpbmU7IGkrKywgbGluZSA9IGxpbmUtPm5leHRSb290Qm94KCkpIHsKICAgICAgICAgICAg
IGlmIChsaW5lLT5saW5lQnJlYWtPYmooKSA9PSBzdGFydC5vYmogJiYgbGluZS0+bGluZUJyZWFr
UG9zKCkgPT0gc3RhcnQucG9zKSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSBhIG1hdGNo
LgorICAgICAgICAgICAgICAgIGlmIChsaW5lLT5saW5lQnJlYWtCaWRpU3RhdHVzKCkgIT0gc3Rh
dHVzIHx8ICpsaW5lLT5saW5lQnJlYWtCaWRpQ29udGV4dCgpICE9ICpjb250ZXh0KQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIC4uLmJ1dCB0aGUgYmlkaSBzdGF0ZSBkb2Vz
bid0IG1hdGNoLgogICAgICAgICAgICAgICAgIFJvb3RJbmxpbmVCb3gqIHJlc3VsdCA9IGxpbmUt
Pm5leHRSb290Qm94KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIC8vIFNldCBvdXIgeVBvcyB0byBiZSB0aGUgYmxvY2sgaGVpZ2h0IG9mIGVuZExp
bmUuCkBAIC0xOTUxLDcgKzE5ODIsNyBAQCBCaWRpSXRlcmF0b3IgUmVuZGVyQmxvY2s6OmZpbmRO
ZXh0TGluZUJyCiAgICAgICAgICAgICAgICAgaWYgKCFpc0xpbmVFbXB0eSkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBvbmx5IGNoZWNrIHRoZSBjbGVhciBzdGF0dXMgZm9yIG5vbi1lbXB0eSBs
aW5lcy4KICAgICAgICAgICAgICAgICAgICAgRUNsZWFyIGNsZWFyID0gby0+c3R5bGUoKS0+Y2xl
YXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYoY2xlYXIgIT0gQ05PTkUpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChjbGVhciAhPSBDTk9ORSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1f
Y2xlYXJTdGF0dXMgPSAoRUNsZWFyKSAobV9jbGVhclN0YXR1cyB8IGNsZWFyKTsKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0yMDY3LDEzICsyMDk4LDEzIEBAIEJpZGlJdGVy
YXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnIKICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICggby0+
aXNUZXh0KCkgKSB7CisgICAgICAgIH0gZWxzZSBpZiAoby0+aXNUZXh0KCkpIHsKICAgICAgICAg
ICAgIFJlbmRlclRleHQgKnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0ICo+KG8pOwogICAgICAg
ICAgICAgaW50IHN0cmxlbiA9IHQtPnN0cmluZ0xlbmd0aCgpOwogICAgICAgICAgICAgaW50IGxl
biA9IHN0cmxlbiAtIHBvczsKICAgICAgICAgICAgIFFDaGFyICpzdHIgPSB0LT50ZXh0KCk7CiAK
LSAgICAgICAgICAgIGNvbnN0IEZvbnQgKmYgPSB0LT5odG1sRm9udCggbV9maXJzdExpbmUgKTsK
KyAgICAgICAgICAgIGNvbnN0IEZvbnQgKmYgPSB0LT5odG1sRm9udChtX2ZpcnN0TGluZSk7CiAg
ICAgICAgICAgICAvLyBwcm9wb3J0aW9uYWwgZm9udCwgbmVlZHMgYSBiaXQgbW9yZSB3b3JrLgog
ICAgICAgICAgICAgaW50IGxhc3RTcGFjZSA9IHBvczsKICAgICAgICAgICAgIGludCB3b3JkU3Bh
Y2luZyA9IG8tPnN0eWxlKCktPndvcmRTcGFjaW5nKCk7CkBAIC0yMjAxLDEzICsyMjMyLDEyIEBA
IEJpZGlJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnIKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDsgLy8gRGlkbid0IGZpdC4gSnVtcCB0byB0
aGUgZW5kLgotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAocG9zID4gMCAmJiBzdHJbcG9zLTFdLnVuaWNvZGUoKSA9PSBTT0ZUX0hZUEhF
TikKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9zID4gMCAmJiBzdHJbcG9z
LTFdLnVuaWNvZGUoKSA9PSBTT0ZUX0hZUEhFTikKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBTdWJ0cmFjdCB0aGUgd2lkdGggb2YgdGhlIHNvZnQgaHlwaGVuIG91dCBzaW5jZSB3ZSBm
aXQgb24gYSBsaW5lLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcFcgLT0gdC0+d2lk
dGgocG9zLTEsIDEsIGYsIHcrdG1wVyk7CiAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAg
ICAgICAgICAgICAgICBpZiggKihzdHIrcG9zKSA9PSAnXG4nICYmIG8tPnN0eWxlKCktPnByZXNl
cnZlTmV3bGluZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgqKHN0citwb3MpID09ICdc
bicgJiYgby0+c3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGxCcmVhay5vYmogPSBvOwogICAgICAgICAgICAgICAgICAgICAgICAgbEJyZWFrLnBv
cyA9IHBvczsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBsQnJlYWs7CkBAIC0yMjM5
LDEzICsyMjY5LDEyIEBAIEJpZGlJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRMaW5lQnIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0U3BhY2UgPSBwb3M7CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaWdub3JpbmdTcGFjZXMpIHsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGlnbm9yaW5nU3BhY2VzKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IFN0b3AgaWdub3Jpbmcgc3BhY2VzIGFuZCBiZWdpbiBhdCB0aGlzCiAgICAgICAgICAgICAgICAg
ICAgIC8vIG5ldyBwb2ludC4KICAgICAgICAgICAgICAgICAgICAgaWdub3JpbmdTcGFjZXMgPSBm
YWxzZTsKICAgICAgICAgICAgICAgICAgICAgbGFzdFNwYWNlID0gcG9zOyAvLyBlLmcuLCAiRm9v
ICAgIGdvbyIsIGRvbid0IGFkZCBpbiBhbnkgb2YgdGhlIGlnbm9yZWQgc3BhY2VzLgotICAgICAg
ICAgICAgICAgICAgICBCaWRpSXRlcmF0b3Igc3RhcnRNaWQgKCAwLCBvLCBwb3MgKTsKKyAgICAg
ICAgICAgICAgICAgICAgQmlkaUl0ZXJhdG9yIHN0YXJ0TWlkKDAsIG8sIHBvcyk7CiAgICAgICAg
ICAgICAgICAgICAgIGFkZE1pZHBvaW50KHN0YXJ0TWlkKTsKICAgICAgICAgICAgICAgICB9CiAK
QEAgLTI0MTYsNyArMjQ0NSw3IEBAIEJpZGlJdGVyYXRvciBSZW5kZXJCbG9jazo6ZmluZE5leHRM
aW5lQnIKICAgICAgICAgICAgIC8vIEFkZCBhIG5ldyBlbmQgbWlkcG9pbnQgdGhhdCBzdG9wcyBy
aWdodCBhdCB0aGUgdmVyeSBlbmQuCiAgICAgICAgICAgICBSZW5kZXJUZXh0KiB0ZXh0ID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGV4dCAqPih0cmFpbGluZ1NwYWNlT2JqZWN0KTsKICAgICAgICAgICAg
IHVuc2lnbmVkIHBvcyA9IHRleHQtPmxlbmd0aCgpID49MiA/IHRleHQtPmxlbmd0aCgpIC0gMiA6
IFVJTlRfTUFYOwotICAgICAgICAgICAgQmlkaUl0ZXJhdG9yIGVuZE1pZCAoIDAsIHRyYWlsaW5n
U3BhY2VPYmplY3QsIHBvcyApOworICAgICAgICAgICAgQmlkaUl0ZXJhdG9yIGVuZE1pZCgwLCB0
cmFpbGluZ1NwYWNlT2JqZWN0LCBwb3MpOwogICAgICAgICAgICAgYWRkTWlkcG9pbnQoZW5kTWlk
KTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IHJlbmRlcl9saW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg
ZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9saW5lLmgsdgpy
ZXRyaWV2aW5nIHJldmlzaW9uIDEuMzIKZGlmZiAtcCAtdSAtcjEuMzIgcmVuZGVyX2xpbmUuaAot
LS0gcmVuZGVyX2xpbmUuaAk2IE9jdCAyMDA1IDAwOjUzOjU3IC0wMDAwCTEuMzIKKysrIHJlbmRl
cl9saW5lLmgJNyBOb3YgMjAwNSAwMDoyMzo0MyAtMDAwMApAQCAtMjMsNiArMjMsOCBAQAogI2Rl
ZmluZSBSRU5ERVJfTElORV9ICiAKICNpbmNsdWRlICJyZW5kZXJpbmcvcmVuZGVyX29iamVjdC5o
IgorI2luY2x1ZGUgImJpZGkuaCIKKyNpbmNsdWRlICJtaXNjL3NoYXJlZC5oIgogCiBuYW1lc3Bh
Y2UgRE9NIHsKIGNsYXNzIEF0b21pY1N0cmluZzsKQEAgLTMwMiwxMCArMzA0LDEwIEBAIGNsYXNz
IFJvb3RJbmxpbmVCb3ggOiBwdWJsaWMgSW5saW5lRmxvd0IKIHB1YmxpYzoKICAgICBSb290SW5s
aW5lQm94KFJlbmRlck9iamVjdCogb2JqKQogICAgIDogSW5saW5lRmxvd0JveChvYmopLCBtX3Rv
cE92ZXJmbG93KDApLCBtX2JvdHRvbU92ZXJmbG93KDApLCBtX2xlZnRPdmVyZmxvdygwKSwgbV9y
aWdodE92ZXJmbG93KDApLAotICAgICAgbV9saW5lQnJlYWtPYmooMCksIG1fbGluZUJyZWFrUG9z
KDApLCAKKyAgICAgIG1fbGluZUJyZWFrT2JqKDApLCBtX2xpbmVCcmVha1BvcygwKSwgbV9saW5l
QnJlYWtDb250ZXh0KDApLAogICAgICAgbV9ibG9ja0hlaWdodCgwKSwgbV9lbmRzV2l0aEJyZWFr
KGZhbHNlKSwgbV9oYXNTZWxlY3RlZENoaWxkcmVuKGZhbHNlKSwgbV9lbGxpcHNpc0JveCgwKQog
ICAgIHt9Ci0gICAgCisgICAgICAgIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KFJlbmRlckFy
ZW5hKiByZW5kZXJBcmVuYSk7CiAgICAgdm9pZCBkZXRhY2hFbGxpcHNpc0JveChSZW5kZXJBcmVu
YSogcmVuZGVyQXJlbmEpOwogCkBAIC0zMjEsOCArMzIzLDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgaW50IHJpZ2h0T3ZlcmZsb3coKSB7IHJldHVybiBtX3JpZ2h0T3ZlcmZsb3c7IH0KICAgICB2
aXJ0dWFsIHZvaWQgc2V0VmVydGljYWxPdmVyZmxvd1Bvc2l0aW9ucyhpbnQgdG9wLCBpbnQgYm90
dG9tKSB7IG1fdG9wT3ZlcmZsb3cgPSB0b3A7IG1fYm90dG9tT3ZlcmZsb3cgPSBib3R0b207IH0K
ICAgICB2b2lkIHNldEhvcml6b250YWxPdmVyZmxvd1Bvc2l0aW9ucyhpbnQgbGVmdCwgaW50IHJp
Z2h0KSB7IG1fbGVmdE92ZXJmbG93ID0gbGVmdDsgbV9yaWdodE92ZXJmbG93ID0gcmlnaHQ7IH0K
LSAgICB2b2lkIHNldExpbmVCcmVha0luZm8oUmVuZGVyT2JqZWN0KiBvYmosIHVpbnQgYnJlYWtQ
b3MpCi0gICAgeyBtX2xpbmVCcmVha09iaiA9IG9iajsgbV9saW5lQnJlYWtQb3MgPSBicmVha1Bv
czsgfQorICAgIHZvaWQgc2V0TGluZUJyZWFrSW5mbyhSZW5kZXJPYmplY3QqIG9iaiwgdWludCBi
cmVha1BvcywgQmlkaVN0YXR1cyogc3RhdHVzLCBCaWRpQ29udGV4dCogY29udGV4dCk7CiAgICAg
dm9pZCBzZXRMaW5lQnJlYWtQb3MoaW50IHApIHsgbV9saW5lQnJlYWtQb3MgPSBwOyB9CiAKICAg
ICB2b2lkIHNldEJsb2NrSGVpZ2h0KGludCBoKSB7IG1fYmxvY2tIZWlnaHQgPSBoOyB9CkBAIC0z
MzIsNiArMzMzLDggQEAgcHVibGljOgogICAgIGJvb2wgZW5kc1dpdGhCcmVhaygpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kc1dpdGhCcmVhazsgfQogICAgIFJlbmRlck9iamVjdCogbGluZUJyZWFrT2Jq
KCkgY29uc3QgeyByZXR1cm4gbV9saW5lQnJlYWtPYmo7IH0KICAgICB1aW50IGxpbmVCcmVha1Bv
cygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZUJyZWFrUG9zOyB9CisgICAgQmlkaVN0YXR1cyBsaW5l
QnJlYWtCaWRpU3RhdHVzKCkgY29uc3QgeyByZXR1cm4gbV9saW5lQnJlYWtCaWRpU3RhdHVzOyB9
CisgICAgQmlkaUNvbnRleHQqIGxpbmVCcmVha0JpZGlDb250ZXh0KCkgY29uc3QgeyByZXR1cm4g
bV9saW5lQnJlYWtDb250ZXh0LmdldCgpOyB9CiAKICAgICB2b2lkIGNoaWxkUmVtb3ZlZChJbmxp
bmVCb3gqIGJveCk7CiAKQEAgLTM4MCw2ICszODMsOSBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVuZGVy
T2JqZWN0KiBtX2xpbmVCcmVha09iajsKICAgICB1aW50IG1fbGluZUJyZWFrUG9zOwogICAgIAor
ICAgIEJpZGlTdGF0dXMgbV9saW5lQnJlYWtCaWRpU3RhdHVzOworICAgIFNoYXJlZFB0cjxCaWRp
Q29udGV4dD4gbV9saW5lQnJlYWtDb250ZXh0OworICAgIAogICAgIC8vIFRoZSBoZWlnaHQgb2Yg
dGhlIGJsb2NrIGF0IHRoZSBlbmQgb2YgdGhpcyBsaW5lLiAgVGhpcyBpcyB3aGVyZSB0aGUgbmV4
dCBsaW5lIHN0YXJ0cy4KICAgICBpbnQgbV9ibG9ja0hlaWdodDsKICAgICAKSW5kZXg6IHJlbmRl
cl9saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9y
ZW5kZXJpbmcvcmVuZGVyX2xpbmUuY3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjU2CmRpZmYg
LXAgLXUgLXIxLjU2IHJlbmRlcl9saW5lLmNwcAotLS0gcmVuZGVyX2xpbmUuY3BwCTIgTm92IDIw
MDUgMDg6NTI6NDUgLTAwMDAJMS41NgorKysgcmVuZGVyX2xpbmUuY3BwCTcgTm92IDIwMDUgMDA6
MjM6NDQgLTAwMDAKQEAgLTEyMjAsMTEgKzEyMjAsMTEgQEAgdm9pZCBSb290SW5saW5lQm94Ojph
ZGp1c3RQb3NpdGlvbihpbnQgZAogdm9pZCBSb290SW5saW5lQm94OjpjaGlsZFJlbW92ZWQoSW5s
aW5lQm94KiBib3gpCiB7CiAgICAgaWYgKGJveC0+b2JqZWN0KCkgPT0gbV9saW5lQnJlYWtPYmop
Ci0gICAgICAgIHNldExpbmVCcmVha0luZm8oMCwwKTsKKyAgICAgICAgc2V0TGluZUJyZWFrSW5m
bygwLCAwLCAwLCAwKTsKIAogICAgIFJvb3RJbmxpbmVCb3gqIHByZXYgPSBwcmV2Um9vdEJveCgp
OwogICAgIGlmIChwcmV2ICYmIHByZXYtPmxpbmVCcmVha09iaigpID09IGJveC0+b2JqZWN0KCkp
IHsKLSAgICAgICAgcHJldi0+c2V0TGluZUJyZWFrSW5mbygwLDApOworICAgICAgICBwcmV2LT5z
ZXRMaW5lQnJlYWtJbmZvKDAsIDAsIDAsIDApOwogICAgICAgICBwcmV2LT5tYXJrRGlydHkoKTsK
ICAgICB9CiB9CkBAIC0xMzY3LDUgKzEzNjcsMTMgQEAgSW5saW5lQm94KiBSb290SW5saW5lQm94
OjpjbG9zZXN0TGVhZkNoaQogICAgIHJldHVybiBsYXN0TGVhZjsKIH0KIAordm9pZCBSb290SW5s
aW5lQm94OjpzZXRMaW5lQnJlYWtJbmZvKFJlbmRlck9iamVjdCogb2JqLCB1aW50IGJyZWFrUG9z
LCBCaWRpU3RhdHVzKiBzdGF0dXMsIEJpZGlDb250ZXh0KiBjb250ZXh0KQoreworICAgIG1fbGlu
ZUJyZWFrT2JqID0gb2JqOworICAgIG1fbGluZUJyZWFrUG9zID0gYnJlYWtQb3M7CisgICAgbV9s
aW5lQnJlYWtDb250ZXh0ID0gY29udGV4dDsKKyAgICBpZiAoc3RhdHVzKQorICAgICAgICBtX2xp
bmVCcmVha0JpZGlTdGF0dXMgPSAqc3RhdHVzOworfQogfQogCkluZGV4OiByZW5kZXJfYmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcv
cmVuZGVyX2Jsb2NrLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNzIKZGlmZiAtcCAtdSAtcjEu
NzIgcmVuZGVyX2Jsb2NrLmgKLS0tIHJlbmRlcl9ibG9jay5oCTMgTm92IDIwMDUgMjE6MDU6NTkg
LTAwMDAJMS43MgorKysgcmVuZGVyX2Jsb2NrLmgJNyBOb3YgMjAwNSAwMDoyMzo0NSAtMDAwMApA
QCAtMTI0LDkgKzEyNCwxMiBAQCBwdWJsaWM6CiAgICAgLy8gdGhlIGltcGxlbWVudGF0aW9uIG9m
IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGlzIGluIGJpZGkuY3BwCiAgICAgdm9pZCBiaWRpUmVv
cmRlckxpbmUoY29uc3QgQmlkaUl0ZXJhdG9yICZzdGFydCwgY29uc3QgQmlkaUl0ZXJhdG9yICZl
bmQsIEJpZGlTdGF0ZSAmYmlkaSApOwogICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWluZVN0YXJ0
UG9zaXRpb24oYm9vbCBmdWxsTGF5b3V0LCBCaWRpSXRlcmF0b3IgJnN0YXJ0LCBCaWRpU3RhdGUg
JmJpZGkpOwotICAgIFJvb3RJbmxpbmVCb3gqIGRldGVybWluZUVuZFBvc2l0aW9uKFJvb3RJbmxp
bmVCb3gqIHN0YXJ0Qm94LCBCaWRpSXRlcmF0b3ImIGNsZWFuTGluZVN0YXJ0LCBpbnQmIHlQb3Mp
OwotICAgIGJvb2wgbWF0Y2hlZEVuZExpbmUoY29uc3QgQmlkaUl0ZXJhdG9yJiBzdGFydCwgY29u
c3QgQmlkaUl0ZXJhdG9yJiBlbmRMaW5lU3RhcnQsIAotICAgICAgICAgICAgICAgICAgICAgICAg
Um9vdElubGluZUJveComIGVuZExpbmUsIGludCYgZW5kWVBvcyk7CisgICAgUm9vdElubGluZUJv
eCogZGV0ZXJtaW5lRW5kUG9zaXRpb24oUm9vdElubGluZUJveCogc3RhcnRCb3gsIEJpZGlJdGVy
YXRvciYgY2xlYW5MaW5lU3RhcnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQmlkaVN0YXR1cyYgY2xlYW5MaW5lQmlkaVN0YXR1cywgQmlkaUNvbnRleHQqJiBjbGVh
bkxpbmVCaWRpQ29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQmIHlQb3MpOworICAgIGJvb2wgbWF0Y2hlZEVuZExpbmUoY29uc3QgQmlkaUl0ZXJhdG9y
JiBzdGFydCwgY29uc3QgQmlkaVN0YXR1cyYgc3RhdHVzLCBCaWRpQ29udGV4dCogY29udGV4dCwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEJpZGlJdGVyYXRvciYgZW5kTGluZVN0YXJ0
LCBjb25zdCBCaWRpU3RhdHVzJiBlbmRMaW5lU3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgQmlkaUNvbnRleHQqIGVuZExpbmVDb250ZXh0LCBSb290SW5saW5lQm94KiYgZW5kTGluZSwg
aW50JiBlbmRZUG9zKTsKICAgICBpbnQgc2tpcFdoaXRlc3BhY2UoQmlkaUl0ZXJhdG9yICYsIEJp
ZGlTdGF0ZSAmKTsKICAgICBCaWRpSXRlcmF0b3IgZmluZE5leHRMaW5lQnJlYWsoQmlkaUl0ZXJh
dG9yICZzdGFydCwgQmlkaVN0YXRlICZpbmZvICk7CiAgICAgUm9vdElubGluZUJveCogY29uc3Ry
dWN0TGluZShjb25zdCBCaWRpSXRlcmF0b3ImIHN0YXJ0LCBjb25zdCBCaWRpSXRlcmF0b3ImIGVu
ZCk7Cg==
</data>
<flag name="review"
          id="828"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>