<?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>69320</bug_id>
          
          <creation_ts>2011-10-03 23:13:56 -0700</creation_ts>
          <short_desc>Some JSValue cleanup</short_desc>
          <delta_ts>2011-10-04 19:37:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>darin</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>477448</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-03 23:13:56 -0700</bug_when>
    <thetext>Some JSValue cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477453</commentid>
    <comment_count>1</comment_count>
      <attachid>109584</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-03 23:29:07 -0700</bug_when>
    <thetext>Created attachment 109584
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477649</commentid>
    <comment_count>2</comment_count>
      <attachid>109584</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-04 09:38:59 -0700</bug_when>
    <thetext>Comment on attachment 109584
Patch

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

The assumption in the old code was that getNumber and getBoolean were more efficient than would be possible for separate isNumber/uncheckedGetNumber calls and the same for boolean. Did that turn out not to be true?

&gt; Source/JavaScriptCore/API/JSCallbackObjectFunctions.h:486
&gt; +            JSValue v = toJS(exec, value);

Not a huge fan of “v” in a function that also has another local named “value”.

&gt; Source/JavaScriptCore/API/JSCallbackObjectFunctions.h:488
&gt; +                return std::numeric_limits&lt;double&gt;::quiet_NaN();

Is there a need to include the “std::” here?

Is there no function that returns NaN if something is not a number? Seems a rather common case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477651</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-04 09:39:30 -0700</bug_when>
    <thetext>Despite the fact that I started making some comments, anyone else is welcome to review this. I was planning to do so but not right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477807</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-04 11:41:33 -0700</bug_when>
    <thetext>&gt; The assumption in the old code was that getNumber and getBoolean were more efficient than would be possible for separate isNumber/uncheckedGetNumber calls and the same for boolean. Did that turn out not to be true?

get* used to be an optimization when every value operation was a virtual function call: get* would combine two virtual calls into one. Now, with non-virtual, inlined functions, get* isn&apos;t faster, and may be slightly slower.

&gt; Is there no function that returns NaN if something is not a number? Seems a rather common case.

NaN is uncommon. Typically, JS operations will convert to number rather that producing NaN.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477809</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-04 11:44:21 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; &gt; The assumption in the old code was that getNumber and getBoolean were more efficient than would be possible for separate isNumber/uncheckedGetNumber calls and the same for boolean. Did that turn out not to be true?
&gt; 
&gt; get* used to be an optimization when every value operation was a virtual function call: get* would combine two virtual calls into one. Now, with non-virtual, inlined functions, get* isn&apos;t faster, and may be slightly slower.

Sounds good. The kind of thing that the change log should state, since it’s key to the motivation behind the patch and explains why this wasn’t done before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477823</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-04 12:03:54 -0700</bug_when>
    <thetext>&gt; Is there a need to include the “std::” here?

Yes, since it&apos;s our custom not to put using declarations in headers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477825</commentid>
    <comment_count>7</comment_count>
      <attachid>109661</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-04 12:05:13 -0700</bug_when>
    <thetext>Created attachment 109661
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477827</commentid>
    <comment_count>8</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-04 12:06:06 -0700</bug_when>
    <thetext>(Added explanation to ChangeLog, renamed &quot;v&quot; to &quot;jsValue&quot;.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477835</commentid>
    <comment_count>9</comment_count>
      <attachid>109661</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-10-04 12:19:29 -0700</bug_when>
    <thetext>Comment on attachment 109661
Patch

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

&gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:4052
&gt; +        else if (scrutinee.isDouble() &amp;&amp; scrutinee.asDouble() == static_cast&lt;int32_t&gt;(scrutinee.asDouble()))
&gt; +            vPC += codeBlock-&gt;immediateSwitchJumpTable(tableIndex).offsetForValue(static_cast&lt;int32_t&gt;(scrutinee.asDouble()), defaultOffset);

Do the repeated scrutinee.asDouble() and static_cast&lt;int32_t&gt;(scrutinee.asDouble()) expressions get optimized as we would wish? I noticed you kept the local variables in another case like this elsewhere in the patch.

&gt; Source/JavaScriptCore/runtime/JSValueInlineMethods.h:399
&gt;          return asValue() == jsBoolean(true);

isTrue() above uses JSValue(JSTrue) while this uses jsBoolean(true). Is there an advantage to one over the other? If not, I suggest unifying.

&gt; Source/JavaScriptCore/runtime/NumberPrototype.cpp:462
&gt; +        unsigned c = static_cast&lt;unsigned&gt;(x);
&gt; +        if (c == x &amp;&amp; c &lt; 36) {

In the old code path, this would all have been done without ever converting to a double in the case where the value was an Int32.

But if we are really serious about optimizing radix 36 then I think we should probably do something less general to get the value of the radix too, maybe even some inlining.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478073</commentid>
    <comment_count>10</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-04 17:12:06 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/interpreter/Interpreter.cpp:4052
&gt; &gt; +        else if (scrutinee.isDouble() &amp;&amp; scrutinee.asDouble() == static_cast&lt;int32_t&gt;(scrutinee.asDouble()))
&gt; &gt; +            vPC += codeBlock-&gt;immediateSwitchJumpTable(tableIndex).offsetForValue(static_cast&lt;int32_t&gt;(scrutinee.asDouble()), defaultOffset);
&gt; 
&gt; Do the repeated scrutinee.asDouble() and static_cast&lt;int32_t&gt;(scrutinee.asDouble()) expressions get optimized as we would wish? I noticed you kept the local variables in another case like this elsewhere in the patch.

I used to have a superstition about reading values out of unions, but whatever compiler version caused that to be an optimization problem, it seems to have passed. I just looked at some generated code for clang++ 3.0, and it optimized perfectly. It&apos;s possible that local variables in other cases can be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478078</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-04 17:19:58 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/runtime/JSValueInlineMethods.h:399
&gt; &gt;          return asValue() == jsBoolean(true);
&gt; 
&gt; isTrue() above uses JSValue(JSTrue) while this uses jsBoolean(true). Is there an advantage to one over the other? If not, I suggest unifying.

In theory, they should all compile down to the same bits, but the isTrue() way of doing this is more direct, so I switched to it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478121</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-10-04 19:37:46 -0700</bug_when>
    <thetext>Committed r96673: &lt;http://trac.webkit.org/changeset/96673&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109584</attachid>
            <date>2011-10-03 23:29:07 -0700</date>
            <delta_ts>2011-10-04 12:05:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69320-20111003232905.patch</filename>
            <type>text/plain</type>
            <size>45990</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY1NzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzIgQEAK
KzIwMTEtMTAtMDMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBTb21lIEpTVmFsdWUgY2xlYW51cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjkzMjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIE5vIHBlcmZvcm1hbmNlIGNoYW5nZS4KKworICAgICAgICBN
ZXJnZWQgZ2V0Qm9vbGVhbihib29sJikgYW5kIGdldEJvb2xlYW4oKSBpbnRvIGFzQm9vbGVhbigp
LCBmb3IKKyAgICAgICAgY29uc2lzdGVuY3kgd2l0aCBvdGhlciBhcyooKSBmdW5jdGlvbnMuCisK
KyAgICAgICAgTWVyZ2VkIHVuY2hlY2tlZEdldE51bWJlcigpLCBnZXRKU051bWJlcigpIGFuZCBn
ZXROdW1iZXIoKSBpbnRvCisgICAgICAgIGFzTnVtYmVyKCksIGZvciBjb25zaXN0ZW5jeSB3aXRo
IG90aGVyIGFzKigpIGZ1bmN0aW9ucy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNWYWx1ZUlubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6
SlNWYWx1ZTo6YXNOdW1iZXIpOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjphc0Jvb2xlYW4pOiBB
cyBwcm9taXNlZCEKKworICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6dG9UaGlzTnVtYmVyKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5j
VG9FeHBvbmVudGlhbCk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvRml4ZWQpOgor
ICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbik6CisgICAgICAgIChKU0M6
Om51bWJlclByb3RvRnVuY1RvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5j
VG9Mb2NhbGVTdHJpbmcpOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNWYWx1ZU9mKTog
UmVtb3ZlZCBhIGJ1bmNoIG9mIHVzZXMgb2YgZ2V0SlNOdW1iZXIoKQorICAgICAgICBieSBzd2l0
Y2hpbmcgdG8gdG9UaGlzTnVtYmVyKCkuCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVj
dEZ1bmN0aW9ucy5oOgorICAgICAgICAoSlNDOjo6OnRvTnVtYmVyKToKKyAgICAgICAgKiBkZmcv
REZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFsdWVPZk51bWJlckNvbnN0
YW50KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dmFsdWVPZkJvb2xlYW5Db25zdGFudCk6
CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnB1
dEJ5VmFsKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFN0
dWJzLmNwcDoKKyAgICAgICAgKEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAq
IHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6OkRhdGVJbnN0YW5jZTo6aW50
ZXJuYWxOdW1iZXIpOgorICAgICAgICAqIHJ1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpmdW5jdGlvblByb3RvRnVuY0JpbmQpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNBcnJheS5jcHA6CisgICAgICAgIChKU0M6OmNvbXBhcmVOdW1iZXJzRm9yUVNvcnQpOiBSZXBs
YWNlZCBnZXROdW1iZXIoKSA9PiBpc051bWJlcigpIC8gYXNOdW1iZXIoKS4KKyAgICAgICAgZ2V0
Qm9vbGVhbigpID0+IGlzQm9vbGVhbigpIC8gYXNCb29sZWFuKCksIHVuY2hlY2tlZEdldE51bWJl
cigpID0+IGFzTnVtYmVyKCkuCisKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAg
ICAgICogcnVudGltZS9KU0NlbGwuaDogTml4ZWQgZ2V0SlNOdW1iZXIoKS4KKworICAgICAgICAq
IHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpnbG9i
YWxGdW5jUGFyc2VJbnQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5jcHA6CisgICAg
ICAgIChKU0M6OmdhcCk6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjpTdHJpbmdpZmllcik6
CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjphcHBlbmRTdHJpbmdpZmllZFZhbHVlKToKKyAg
ICAgICAgKiBydW50aW1lL051bWJlck9iamVjdC5jcHA6CisgICAgICAgICogcnVudGltZS9OdW1i
ZXJPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6TnVtYmVyT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUp
OgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlNDOjpKU1ZhbHVl
OjplcXVhbFNsb3dDYXNlSW5saW5lKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6c3RyaWN0RXF1
YWwpOgorICAgICAgICAoSlNDOjpqc0xlc3MpOgorICAgICAgICAoSlNDOjpqc0xlc3NFcSk6Cisg
ICAgICAgIChKU0M6OmpzQWRkKTogUmVwbGFjZWQgZ2V0TnVtYmVyKCkgPT4gaXNOdW1iZXIoKSAv
IGFzTnVtYmVyKCkuCisgICAgICAgIGdldEJvb2xlYW4oKSA9PiBpc0Jvb2xlYW4oKSAvIGFzQm9v
bGVhbigpLCB1bmNoZWNrZWRHZXROdW1iZXIoKSA9PiBhc051bWJlcigpLgorCiAyMDExLTEwLTAz
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgREZHIHNob3VsZCBp
bmxpbmUgQXJyYXkucHVzaCBhbmQgQXJyYXkucG9wCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaAkocmV2aXNpb24g
OTY1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5j
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgwLDEwICs0ODAsMTMgQEAgZG91YmxlIEpTQ2Fs
bGJhY2tPYmplY3Q8UGFyZW50Pjo6dG9OdW1iZQogICAgICAgICAgICAgICAgIHRocm93RXJyb3Io
ZXhlYywgdG9KUyhleGVjLCBleGNlcHRpb24pKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZG91YmxlIGRWYWx1ZTsKLSAgICAgICAgICAg
IGlmICh2YWx1ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCB2YWx1ZSkuZ2V0
TnVtYmVyKGRWYWx1ZSkgPyBkVmFsdWUgOiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1
aWV0X05hTigpOworICAgICAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIEpTVmFsdWUgdiA9IHRvSlMoZXhl
YywgdmFsdWUpOworICAgICAgICAgICAgaWYgKCF2LmlzTnVtYmVyKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAg
ICAgICAgICByZXR1cm4gdi5hc051bWJlcigpOwogICAgICAgICB9CiAgICAgICAgICAgICAKICAg
ICByZXR1cm4gUGFyZW50Ojp0b051bWJlcihleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDk2NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDcsMTEgKzI0NywxMSBAQCBwdWJs
aWM6CiAgICAgfQogICAgIGRvdWJsZSB2YWx1ZU9mTnVtYmVyQ29uc3RhbnQoQ29kZUJsb2NrKiBj
b2RlQmxvY2ssIE5vZGVJbmRleCBub2RlSW5kZXgpCiAgICAgewotICAgICAgICByZXR1cm4gdmFs
dWVPZkpTQ29uc3RhbnROb2RlKGNvZGVCbG9jaywgbm9kZUluZGV4KS51bmNoZWNrZWRHZXROdW1i
ZXIoKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50Tm9kZShjb2RlQmxvY2ssIG5v
ZGVJbmRleCkuYXNOdW1iZXIoKTsKICAgICB9CiAgICAgYm9vbCB2YWx1ZU9mQm9vbGVhbkNvbnN0
YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKLSAg
ICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50Tm9kZShjb2RlQmxvY2ssIG5vZGVJbmRleCku
Z2V0Qm9vbGVhbigpOworICAgICAgICByZXR1cm4gdmFsdWVPZkpTQ29uc3RhbnROb2RlKGNvZGVC
bG9jaywgbm9kZUluZGV4KS5hc0Jvb2xlYW4oKTsKICAgICB9CiAgICAgSlNGdW5jdGlvbiogdmFs
dWVPZkZ1bmN0aW9uQ29uc3RhbnQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIE5vZGVJbmRleCBub2Rl
SW5kZXgpCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4LDkgKzg4LDggQEAgc3RhdGlj
IGlubGluZSB2b2lkIHB1dEJ5VmFsKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgZG91YmxlIGRWYWx1ZSA9IDA7Ci0gICAgICAgIGlmICh2YWx1
ZS5nZXROdW1iZXIoZFZhbHVlKSkgewotICAgICAgICAgICAgYnl0ZUFycmF5LT5zZXRJbmRleChp
bmRleCwgZFZhbHVlKTsKKyAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAg
ICAgIGJ5dGVBcnJheS0+c2V0SW5kZXgoaW5kZXgsIHZhbHVlLmFzTnVtYmVyKCkpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMTg4LDM2ICsxODcsMzYgQEAgRW5j
b2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25WYQogCiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoQWRkKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgZG91YmxlIG51bTEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSkudW5jaGVja2VkR2V0TnVtYmVyKCk7Ci0gICAgZG91YmxlIG51
bTIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikudW5jaGVja2VkR2V0TnVtYmVyKCk7Cisg
ICAgZG91YmxlIG51bTEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkuYXNOdW1iZXIoKTsK
KyAgICBkb3VibGUgbnVtMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKS5hc051bWJlcigp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobnVtMSArIG51bTIpKTsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aFN1YihFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIGRv
dWJsZSBudW0xID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLnVuY2hlY2tlZEdldE51bWJl
cigpOwotICAgIGRvdWJsZSBudW0yID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLnVuY2hl
Y2tlZEdldE51bWJlcigpOworICAgIGRvdWJsZSBudW0xID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDEpLmFzTnVtYmVyKCk7CisgICAgZG91YmxlIG51bTIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMikuYXNOdW1iZXIoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KG51bTEgLSBudW0yKSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQXJpdGhNdWwoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikKIHsKLSAgICBkb3VibGUgbnVtMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3Ax
KS51bmNoZWNrZWRHZXROdW1iZXIoKTsKLSAgICBkb3VibGUgbnVtMiA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICBkb3VibGUgbnVtMSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKS5hc051bWJlcigpOworICAgIGRvdWJsZSBudW0yID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLmFzTnVtYmVyKCk7CiAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihudW0xICogbnVtMikpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBE
RkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFyaXRoRGl2KEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7Ci0gICAgZG91YmxlIG51bTEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSkudW5jaGVja2VkR2V0TnVtYmVyKCk7Ci0gICAgZG91YmxlIG51
bTIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikudW5jaGVja2VkR2V0TnVtYmVyKCk7Cisg
ICAgZG91YmxlIG51bTEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkuYXNOdW1iZXIoKTsK
KyAgICBkb3VibGUgbnVtMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKS5hc051bWJlcigp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobnVtMSAvIG51bTIpKTsKIH0K
IAogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aE1vZChFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIGRv
dWJsZSBudW0xID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLnVuY2hlY2tlZEdldE51bWJl
cigpOwotICAgIGRvdWJsZSBudW0yID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLnVuY2hl
Y2tlZEdldE51bWJlcigpOworICAgIGRvdWJsZSBudW0xID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDEpLmFzTnVtYmVyKCk7CisgICAgZG91YmxlIG51bTIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZE9wMikuYXNOdW1iZXIoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVy
KGZtb2QobnVtMSwgbnVtMikpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA5NjU3MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE5NzYsNyArMTk3Niw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVF
eGVjdXRlKEV4ZWMKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEpTVmFsdWUgbnVtYmVy
ID0gY2FsbEZyYW1lLT5yKHNyY0RzdCkuanNWYWx1ZSgpLnRvSlNOdW1iZXIoY2FsbEZyYW1lKTsK
ICAgICAgICAgICAgIENIRUNLX0ZPUl9FWENFUFRJT04oKTsKLSAgICAgICAgICAgIGNhbGxGcmFt
ZS0+dW5jaGVja2VkUihzcmNEc3QpID0ganNOdW1iZXIobnVtYmVyLnVuY2hlY2tlZEdldE51bWJl
cigpICsgMSk7CisgICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3JjRHN0KSA9IGpz
TnVtYmVyKG51bWJlci5hc051bWJlcigpICsgMSk7CiAgICAgICAgICAgICBjYWxsRnJhbWUtPnVu
Y2hlY2tlZFIoZHN0KSA9IG51bWJlcjsKICAgICAgICAgfQogCkBAIC0xOTk5LDcgKzE5OTksNyBA
QCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBKU1ZhbHVlIG51bWJlciA9IGNhbGxGcmFtZS0+cihzcmNEc3QpLmpz
VmFsdWUoKS50b0pTTnVtYmVyKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhD
RVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxsRnJhbWUtPnVuY2hlY2tlZFIoc3JjRHN0KSA9IGpz
TnVtYmVyKG51bWJlci51bmNoZWNrZWRHZXROdW1iZXIoKSAtIDEpOworICAgICAgICAgICAgY2Fs
bEZyYW1lLT51bmNoZWNrZWRSKHNyY0RzdCkgPSBqc051bWJlcihudW1iZXIuYXNOdW1iZXIoKSAt
IDEpOwogICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKGRzdCkgPSBudW1iZXI7CiAg
ICAgICAgIH0KIApAQCAtMzUwNiwxMiArMzUwNiwxMSBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgog
ICAgICAgICAgICAgICAgICAgICBqc0FycmF5LT5KU0FycmF5OjpwdXQoY2FsbEZyYW1lLCBpLCBj
YWxsRnJhbWUtPnIodmFsdWUpLmpzVmFsdWUoKSk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGlz
SlNCeXRlQXJyYXkoZ2xvYmFsRGF0YSwgYmFzZVZhbHVlKSAmJiBhc0J5dGVBcnJheShiYXNlVmFs
dWUpLT5jYW5BY2Nlc3NJbmRleChpKSkgewogICAgICAgICAgICAgICAgIEpTQnl0ZUFycmF5KiBq
c0J5dGVBcnJheSA9IGFzQnl0ZUFycmF5KGJhc2VWYWx1ZSk7Ci0gICAgICAgICAgICAgICAgZG91
YmxlIGRWYWx1ZSA9IDA7CiAgICAgICAgICAgICAgICAgSlNWYWx1ZSBqc1ZhbHVlID0gY2FsbEZy
YW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCk7CiAgICAgICAgICAgICAgICAgaWYgKGpzVmFsdWUuaXNJ
bnQzMigpKQogICAgICAgICAgICAgICAgICAgICBqc0J5dGVBcnJheS0+c2V0SW5kZXgoaSwganNW
YWx1ZS5hc0ludDMyKCkpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGpzVmFsdWUuZ2V0TnVt
YmVyKGRWYWx1ZSkpCi0gICAgICAgICAgICAgICAgICAgIGpzQnl0ZUFycmF5LT5zZXRJbmRleChp
LCBkVmFsdWUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGpzVmFsdWUuaXNEb3VibGUoKSkK
KyAgICAgICAgICAgICAgICAgICAganNCeXRlQXJyYXktPnNldEluZGV4KGksIGpzVmFsdWUuYXNE
b3VibGUoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBiYXNl
VmFsdWUucHV0KGNhbGxGcmFtZSwgaSwganNWYWx1ZSk7CiAgICAgICAgICAgICB9IGVsc2UKQEAg
LTQwNDksMTQgKzQwNDgsMTAgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgSlNWYWx1
ZSBzY3J1dGluZWUgPSBjYWxsRnJhbWUtPnIodlBDWzNdLnUub3BlcmFuZCkuanNWYWx1ZSgpOwog
ICAgICAgICBpZiAoc2NydXRpbmVlLmlzSW50MzIoKSkKICAgICAgICAgICAgIHZQQyArPSBjb2Rl
QmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5vZmZzZXRGb3JWYWx1
ZShzY3J1dGluZWUuYXNJbnQzMigpLCBkZWZhdWx0T2Zmc2V0KTsKLSAgICAgICAgZWxzZSB7Ci0g
ICAgICAgICAgICBkb3VibGUgdmFsdWU7Ci0gICAgICAgICAgICBpbnQzMl90IGludFZhbHVlOwot
ICAgICAgICAgICAgaWYgKHNjcnV0aW5lZS5nZXROdW1iZXIodmFsdWUpICYmICgoaW50VmFsdWUg
PSBzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpID09IHZhbHVlKSkKLSAgICAgICAgICAgICAg
ICB2UEMgKz0gY29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCku
b2Zmc2V0Rm9yVmFsdWUoaW50VmFsdWUsIGRlZmF1bHRPZmZzZXQpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0OwotICAgICAgICB9CisgICAg
ICAgIGVsc2UgaWYgKHNjcnV0aW5lZS5pc0RvdWJsZSgpICYmIHNjcnV0aW5lZS5hc0RvdWJsZSgp
ID09IHN0YXRpY19jYXN0PGludDMyX3Q+KHNjcnV0aW5lZS5hc0RvdWJsZSgpKSkKKyAgICAgICAg
ICAgIHZQQyArPSBjb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4
KS5vZmZzZXRGb3JWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihzY3J1dGluZWUuYXNEb3VibGUo
KSksIGRlZmF1bHRPZmZzZXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICB2UEMgKz0gZGVm
YXVsdE9mZnNldDsKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwogICAgIH0KICAgICBERUZJ
TkVfT1BDT0RFKG9wX3N3aXRjaF9jaGFyKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gOTY1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMxMiw5ICsxMzEyLDggQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiAgICAgfQogCi0gICAgZG91YmxlIGxlZnQgPSAwLjAsIHJp
Z2h0OwotICAgIGlmICh2MS5nZXROdW1iZXIobGVmdCkgJiYgdjIuZ2V0TnVtYmVyKHJpZ2h0KSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihsZWZ0ICsgcmlnaHQpKTsK
KyAgICBpZiAodjEuaXNOdW1iZXIoKSAmJiB2Mi5pc051bWJlcigpKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHYxLmFzTnVtYmVyKCkgKyB2Mi5hc051bWJlcigpKSk7
CiAKICAgICAvLyBBbGwgb3RoZXIgY2FzZXMgYXJlIHByZXR0eSB1bmNvbW1vbgogICAgIEpTVmFs
dWUgcmVzdWx0ID0ganNBZGRTbG93Q2FzZShjYWxsRnJhbWUsIHYxLCB2Mik7CkBAIC0yMTE3LDEw
ICsyMTE2LDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAg
IEpTVmFsdWUgc3JjMSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAgICAgSlNWYWx1
ZSBzcmMyID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKIAotICAgIGRvdWJsZSBsZWZ0
OwotICAgIGRvdWJsZSByaWdodDsKLSAgICBpZiAoc3JjMS5nZXROdW1iZXIobGVmdCkgJiYgc3Jj
Mi5nZXROdW1iZXIocmlnaHQpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVt
YmVyKGxlZnQgKiByaWdodCkpOworICAgIGlmIChzcmMxLmlzTnVtYmVyKCkgJiYgc3JjMi5pc051
bWJlcigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHNyYzEuYXNO
dW1iZXIoKSAqIHNyYzIuYXNOdW1iZXIoKSkpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVtYmVyKHNy
YzEudG9OdW1iZXIoY2FsbEZyYW1lKSAqIHNyYzIudG9OdW1iZXIoY2FsbEZyYW1lKSk7CkBAIC0y
NTg3LDEwICsyNTg0LDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9w
XwogICAgIEpTVmFsdWUgc3JjMSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAgICAg
SlNWYWx1ZSBzcmMyID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKIAotICAgIGRvdWJs
ZSBsZWZ0OwotICAgIGRvdWJsZSByaWdodDsKLSAgICBpZiAoc3JjMS5nZXROdW1iZXIobGVmdCkg
JiYgc3JjMi5nZXROdW1iZXIocmlnaHQpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKGxlZnQgLSByaWdodCkpOworICAgIGlmIChzcmMxLmlzTnVtYmVyKCkgJiYgc3Jj
Mi5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHNy
YzEuYXNOdW1iZXIoKSAtIHNyYzIuYXNOdW1iZXIoKSkpOwogCiAgICAgQ2FsbEZyYW1lKiBjYWxs
RnJhbWUgPSBzdGFja0ZyYW1lLmNhbGxGcmFtZTsKICAgICBKU1ZhbHVlIHJlc3VsdCA9IGpzTnVt
YmVyKHNyYzEudG9OdW1iZXIoY2FsbEZyYW1lKSAtIHNyYzIudG9OdW1iZXIoY2FsbEZyYW1lKSk7
CkBAIC0yNjI1LDkgKzI2MjAsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wdXRf
YnlfdmFsCiAgICAgICAgICAgICAgICAganNCeXRlQXJyYXktPnNldEluZGV4KGksIHZhbHVlLmFz
SW50MzIoKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgICAgICBkb3VibGUgZFZhbHVlID0gMDsKLSAgICAgICAgICAgICAgICBpZiAo
dmFsdWUuZ2V0TnVtYmVyKGRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAganNCeXRlQXJy
YXktPnNldEluZGV4KGksIGRWYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVt
YmVyKCkpIHsKKyAgICAgICAgICAgICAgICAgICAganNCeXRlQXJyYXktPnNldEluZGV4KGksIHZh
bHVlLmFzTnVtYmVyKCkpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgfQpAQCAtMjY2Nyw5ICsyNjYxLDggQEAgREVGSU5FX1NUVUJf
RlVOQ1RJT04odm9pZCwgb3BfcHV0X2J5X3ZhbAogICAgICAgICAgICAgICAgIGpzQnl0ZUFycmF5
LT5zZXRJbmRleChpLCB2YWx1ZS5hc0ludDMyKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGRWYWx1ZSA9IDA7
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5nZXROdW1iZXIoZFZh
bHVlKSkgewotICAgICAgICAgICAgICAgICAgICBqc0J5dGVBcnJheS0+c2V0SW5kZXgoaSwgZFZh
bHVlKTsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkgeworICAgICAgICAg
ICAgICAgICAgICBqc0J5dGVBcnJheS0+c2V0SW5kZXgoaSwgdmFsdWUuYXNOdW1iZXIoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICB9CkBAIC0yODMzLDkgKzI4MjYsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNW
YWx1ZSwgb3BfCiAKICAgICBKU1ZhbHVlIHNyYyA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVl
KCk7CiAKLSAgICBkb3VibGUgdjsKLSAgICBpZiAoc3JjLmdldE51bWJlcih2KSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtdikpOworICAgIGlmIChzcmMuaXNOdW1i
ZXIoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcigtc3JjLmFzTnVt
YmVyKCkpKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJh
bWU7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJlcigtc3JjLnRvTnVtYmVyKGNhbGxGcmFt
ZSkpOwpAQCAtMjk1MCwxMCArMjk0Miw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVlIHNyYzEgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1
ZSgpOwogICAgIEpTVmFsdWUgc3JjMiA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAK
LSAgICBkb3VibGUgbGVmdDsKLSAgICBkb3VibGUgcmlnaHQ7Ci0gICAgaWYgKHNyYzEuZ2V0TnVt
YmVyKGxlZnQpICYmIHNyYzIuZ2V0TnVtYmVyKHJpZ2h0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihsZWZ0IC8gcmlnaHQpKTsKKyAgICBpZiAoc3JjMS5pc051bWJl
cigpICYmIHNyYzIuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihzcmMxLmFzTnVtYmVyKCkgLyBzcmMyLmFzTnVtYmVyKCkpKTsKIAogICAgIENhbGxG
cmFtZSogY2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgSlNWYWx1ZSByZXN1
bHQgPSBqc051bWJlcihzcmMxLnRvTnVtYmVyKGNhbGxGcmFtZSkgLyBzcmMyLnRvTnVtYmVyKGNh
bGxGcmFtZSkpOwpAQCAtMzA2Miw3ICszMDUyLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5j
b2RlZEpTVmFsdWUsIG9wXwogICAgIEpTVmFsdWUgbnVtYmVyID0gdi50b0pTTnVtYmVyKGNhbGxG
cmFtZSk7CiAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIAotICAgIGNhbGxGcmFt
ZS0+cmVnaXN0ZXJzKClbc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCldID0ganNOdW1iZXIobnVt
YmVyLnVuY2hlY2tlZEdldE51bWJlcigpICsgMSk7CisgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMo
KVtzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIoKV0gPSBqc051bWJlcihudW1iZXIuYXNOdW1iZXIo
KSArIDEpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUobnVtYmVyKTsKIH0KIApAQCAtMzM2
MSw3ICszMzUxLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwog
ICAgIEpTVmFsdWUgbnVtYmVyID0gdi50b0pTTnVtYmVyKGNhbGxGcmFtZSk7CiAgICAgQ0hFQ0tf
Rk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKIAotICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3Rh
Y2tGcmFtZS5hcmdzWzFdLmludDMyKCldID0ganNOdW1iZXIobnVtYmVyLnVuY2hlY2tlZEdldE51
bWJlcigpIC0gMSk7CisgICAgY2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzdGFja0ZyYW1lLmFyZ3Nb
MV0uaW50MzIoKV0gPSBqc051bWJlcihudW1iZXIuYXNOdW1iZXIoKSAtIDEpOwogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUobnVtYmVyKTsKIH0KIApAQCAtMzY2NiwxNCArMzY1NiwxMyBAQCBE
RUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwgb3Bfc3dpdGNoX2ltCiAKICAgICBpZiAoc2NydXRp
bmVlLmlzSW50MzIoKSkKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aUZvclZhbHVlKHNjcnV0aW5lZS5hc0ludDMyKCkpLmV4
ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGRvdWJsZSB2YWx1ZTsKLSAg
ICAgICAgaW50MzJfdCBpbnRWYWx1ZTsKLSAgICAgICAgaWYgKHNjcnV0aW5lZS5nZXROdW1iZXIo
dmFsdWUpICYmICgoaW50VmFsdWUgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pih2YWx1ZSkpID09IHZh
bHVlKSkKLSAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KS5jdGlGb3JWYWx1ZShpbnRWYWx1ZSkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+aW1tZWRpYXRl
U3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKKyAgICBpZiAoc2NydXRpbmVlLmlzRG91YmxlKCkpIHsKKyAgICAgICAgZG91YmxlIHZhbHVl
ID0gc2NydXRpbmVlLmFzRG91YmxlKCk7CisgICAgICAgIGludDMyX3QgaW50MzJWYWx1ZSA9IHZh
bHVlOworICAgICAgICBpZiAoaW50MzJWYWx1ZSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVy
biBjb2RlQmxvY2stPmltbWVkaWF0ZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlGb3JW
YWx1ZShpbnQzMlZhbHVlKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KKyAgICByZXR1cm4g
Y29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3RpRGVmYXVs
dC5leGVjdXRhYmxlQWRkcmVzcygpOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTih2b2lkKiwg
b3Bfc3dpdGNoX2NoYXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRl
SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9E
YXRlSW5zdGFuY2UuaAkocmV2aXNpb24gOTY1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9EYXRlSW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBpbnN0YW5jZTsKICAgICAgICAgfQog
Ci0gICAgICAgIGRvdWJsZSBpbnRlcm5hbE51bWJlcigpIGNvbnN0IHsgcmV0dXJuIGludGVybmFs
VmFsdWUoKS51bmNoZWNrZWRHZXROdW1iZXIoKTsgfQorICAgICAgICBkb3VibGUgaW50ZXJuYWxO
dW1iZXIoKSBjb25zdCB7IHJldHVybiBpbnRlcm5hbFZhbHVlKCkuYXNOdW1iZXIoKTsgfQogCiAg
ICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBzX2luZm87CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDk2NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTQsNyArMTk0LDcg
QEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblBybwogICAgICAgICBBU1NF
UlQodGFyZ2V0LmdldChleGVjLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS5pc051bWJl
cigpKTsKICAgICAgICAgLy8gYS4gTGV0IEwgYmUgdGhlIGxlbmd0aCBwcm9wZXJ0eSBvZiBUYXJn
ZXQgbWludXMgdGhlIGxlbmd0aCBvZiBBLgogICAgICAgICAvLyBiLiBTZXQgdGhlIGxlbmd0aCBv
d24gcHJvcGVydHkgb2YgRiB0byBlaXRoZXIgMCBvciBMLCB3aGljaGV2ZXIgaXMgbGFyZ2VyLgot
ICAgICAgICB1bnNpZ25lZCB0YXJnZXRMZW5ndGggPSAodW5zaWduZWQpdGFyZ2V0LmdldChleGVj
LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAg
ICAgICAgdW5zaWduZWQgdGFyZ2V0TGVuZ3RoID0gKHVuc2lnbmVkKXRhcmdldC5nZXQoZXhlYywg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkuYXNOdW1iZXIoKTsKICAgICAgICAgaWYgKHRh
cmdldExlbmd0aCA+IG51bUJvdW5kQXJncykKICAgICAgICAgICAgIGxlbmd0aCA9IHRhcmdldExl
bmd0aCAtIG51bUJvdW5kQXJnczsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0FycmF5LmNwcAkocmV2aXNpb24gOTY1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0FycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgyLDggKzg4Miw4
IEBAIHZvaWQgSlNBcnJheTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwKIAogc3RhdGljIGlu
dCBjb21wYXJlTnVtYmVyc0ZvclFTb3J0KGNvbnN0IHZvaWQqIGEsIGNvbnN0IHZvaWQqIGIpCiB7
Ci0gICAgZG91YmxlIGRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGEpLT51bmNoZWNr
ZWRHZXROdW1iZXIoKTsKLSAgICBkb3VibGUgZGIgPSBzdGF0aWNfY2FzdDxjb25zdCBKU1ZhbHVl
Kj4oYiktPnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIGRvdWJsZSBkYSA9IHN0YXRpY19jYXN0
PGNvbnN0IEpTVmFsdWUqPihhKS0+YXNOdW1iZXIoKTsKKyAgICBkb3VibGUgZGIgPSBzdGF0aWNf
Y2FzdDxjb25zdCBKU1ZhbHVlKj4oYiktPmFzTnVtYmVyKCk7CiAgICAgcmV0dXJuIChkYSA+IGRi
KSAtIChkYSA8IGRiKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0NlbGwuY3BwCShyZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCwxMyArMTE4LDYgQEAgSlNPYmpl
Y3QqIEpTQ2VsbDo6dG9UaGlzT2JqZWN0KEV4ZWNTdGF0ZQogICAgIHJldHVybiB0b09iamVjdChl
eGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpOwogfQogCi1KU1ZhbHVlIEpTQ2VsbDo6
Z2V0SlNOdW1iZXIoKSBjb25zdAotewotICAgIGlmIChzdHJ1Y3R1cmUoKS0+dHlwZUluZm8oKS5p
c051bWJlck9iamVjdCgpKQotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTnVtYmVy
T2JqZWN0Kj4odGhpcyktPmdldEpTTnVtYmVyKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWUoKTsKLX0K
LQogSlNWYWx1ZSBKU0NlbGw6OnRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSogZXhlYywgUHJlZmVycmVk
UHJpbWl0aXZlVHlwZSBwcmVmZXJyZWRUeXBlKSBjb25zdAogewogICAgIGlmIChpc1N0cmluZygp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDk2
NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTk2LDcgKzk2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1YWwg
Ym9vbCBkZWxldGVQcm9wZXJ0eShFeGVjU3RhdGUqLCB1bnNpZ25lZCBwcm9wZXJ0eU5hbWUpOwog
CiAgICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIHRvVGhpc09iamVjdChFeGVjU3RhdGUqKSBjb25z
dDsKLSAgICAgICAgSlNWYWx1ZSBnZXRKU051bWJlcigpIGNvbnN0OwogCiAgICAgICAgIHZvaWQq
IHZwdHIoKSBjb25zdCB7IEFTU0VSVCghaXNaYXBwZWQoKSk7IHJldHVybiAqcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKiBjb25zdCo+KHRoaXMpOyB9CiAgICAgICAgIHZvaWQgc2V0VlB0cih2b2lkKiB2
cHRyKSB7ICpyZWludGVycHJldF9jYXN0PHZvaWQqKj4odGhpcykgPSB2cHRyOyBBU1NFUlQoIWlz
WmFwcGVkKCkpOyB9CkBAIC0zMDIsMTUgKzMwMSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICByZXR1cm4gdG9OdW1iZXJTbG93Q2FzZShleGVjKTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNW
YWx1ZSBKU1ZhbHVlOjpnZXRKU051bWJlcigpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXNJ
bnQzMigpIHx8IGlzRG91YmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAg
IGlmIChpc0NlbGwoKSkKLSAgICAgICAgICAgIHJldHVybiBhc0NlbGwoKS0+Z2V0SlNOdW1iZXIo
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICB9Ci0KICAgICBpbmxpbmUgSlNPYmpl
Y3QqIEpTVmFsdWU6OnRvT2JqZWN0KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICB7CiAgICAg
ICAgIHJldHVybiBpc0NlbGwoKSA/IGFzQ2VsbCgpLT50b09iamVjdChleGVjLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCkpIDogdG9PYmplY3RTbG93Q2FzZShleGVjLCBleGVjLT5sZXhpY2Fs
R2xvYmFsT2JqZWN0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAkocmV2aXNpb24gOTY1NzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Myw5ICs0NzMsMTEgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jUAogICAgIC8vIHZhbHVlcyBpbiB0aGUgcmFuZ2UgLTEg
PCBuIDw9IC0xMF4tNiBuZWVkIHRvIHRydW5jYXRlIHRvIC0wLCBub3QgMC4KICAgICBzdGF0aWMg
Y29uc3QgZG91YmxlIHRlblRvVGhlTWludXM2ID0gMC4wMDAwMDE7CiAgICAgc3RhdGljIGNvbnN0
IGRvdWJsZSBpbnRNYXhQbHVzT25lID0gMjE0NzQ4MzY0OC4wOwotICAgIGRvdWJsZSBuOwotICAg
IGlmICh2YWx1ZS5nZXROdW1iZXIobikgJiYgKChuIDwgaW50TWF4UGx1c09uZSAmJiBuID49IHRl
blRvVGhlTWludXM2KSB8fCAhbikgJiYgcmFkaXhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHN0YXRpY19jYXN0PGludDMy
X3Q+KG4pKSk7CisgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgZG91YmxlIG4g
PSB2YWx1ZS5hc051bWJlcigpOworICAgICAgICBpZiAoKChuIDwgaW50TWF4UGx1c09uZSAmJiBu
ID49IHRlblRvVGhlTWludXM2KSB8fCAhbikgJiYgcmFkaXhWYWx1ZS5pc1VuZGVmaW5lZE9yTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdGF0aWNf
Y2FzdDxpbnQzMl90PihuKSkpOworICAgIH0KIAogICAgIC8vIElmIFRvU3RyaW5nIHRocm93cywg
d2Ugc2hvdWxkbid0IGNhbGwgVG9JbnQzMi4KICAgICBVU3RyaW5nIHMgPSB2YWx1ZS50b1N0cmlu
ZyhleGVjKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmpl
Y3QuY3BwCShyZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT05PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsOCArMTUzLDggQEAgc3RhdGlj
IGlubGluZSBVU3RyaW5nIGdhcChFeGVjU3RhdGUqIGV4ZQogICAgIHNwYWNlID0gdW53cmFwQm94
ZWRQcmltaXRpdmUoZXhlYywgc3BhY2UpOwogCiAgICAgLy8gSWYgdGhlIHNwYWNlIHZhbHVlIGlz
IGEgbnVtYmVyLCBjcmVhdGUgYSBnYXAgc3RyaW5nIHdpdGggdGhhdCBudW1iZXIgb2Ygc3BhY2Vz
LgotICAgIGRvdWJsZSBzcGFjZUNvdW50OwotICAgIGlmIChzcGFjZS5nZXROdW1iZXIoc3BhY2VD
b3VudCkpIHsKKyAgICBpZiAoc3BhY2UuaXNOdW1iZXIoKSkgeworICAgICAgICBkb3VibGUgc3Bh
Y2VDb3VudCA9IHNwYWNlLmFzTnVtYmVyKCk7CiAgICAgICAgIGludCBjb3VudDsKICAgICAgICAg
aWYgKHNwYWNlQ291bnQgPiBtYXhHYXBMZW5ndGgpCiAgICAgICAgICAgICBjb3VudCA9IG1heEdh
cExlbmd0aDsKQEAgLTIyOCw5ICsyMjgsOCBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZpZXIoRXhl
Y1N0YXRlKiBleGVjCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGRvdWJsZSB2YWx1ZSA9IDA7Ci0gICAgICAgICAgICBpZiAobmFtZS5nZXRO
dW1iZXIodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJvcGVydHlO
YW1lcy5hZGQoSWRlbnRpZmllcjo6ZnJvbShleGVjLCB2YWx1ZSkpOworICAgICAgICAgICAgaWYg
KG5hbWUuaXNOdW1iZXIoKSkgeworICAgICAgICAgICAgICAgIG1fYXJyYXlSZXBsYWNlclByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgbmFtZS5hc051bWJlcigpKSk7CiAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKQEAgLTM3Niw3ICszNzUs
NyBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyCiAgICAgICAgIHJl
dHVybiBTdHJpbmdpZnlGYWlsZWQ7CiAKICAgICBpZiAodmFsdWUuaXNCb29sZWFuKCkpIHsKLSAg
ICAgICAgYnVpbGRlci5hcHBlbmQodmFsdWUuZ2V0Qm9vbGVhbigpID8gInRydWUiIDogImZhbHNl
Iik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVlLmlzVHJ1ZSgpID8gInRydWUiIDogImZh
bHNlIik7CiAgICAgICAgIHJldHVybiBTdHJpbmdpZnlTdWNjZWVkZWQ7CiAgICAgfQogCkBAIC0z
ODYsMTIgKzM4NSwxMiBAQCBTdHJpbmdpZmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVy
CiAgICAgICAgIHJldHVybiBTdHJpbmdpZnlTdWNjZWVkZWQ7CiAgICAgfQogCi0gICAgZG91Ymxl
IG51bWVyaWNWYWx1ZTsKLSAgICBpZiAodmFsdWUuZ2V0TnVtYmVyKG51bWVyaWNWYWx1ZSkpIHsK
LSAgICAgICAgaWYgKCFpc2Zpbml0ZShudW1lcmljVmFsdWUpKQorICAgIGlmICh2YWx1ZS5pc051
bWJlcigpKSB7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSB2YWx1ZS5hc051bWJlcigpOworICAg
ICAgICBpZiAoIWlzZmluaXRlKG51bWJlcikpCiAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgi
bnVsbCIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChVU3RyaW5n
OjpudW1iZXIobnVtZXJpY1ZhbHVlKSk7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChVU3Ry
aW5nOjpudW1iZXIobnVtYmVyKSk7CiAgICAgICAgIHJldHVybiBTdHJpbmdpZnlTdWNjZWVkZWQ7
CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShy
ZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBpbnQzMl90IGFzSW50MzIoKSBjb25zdDsKICAgICAgICAgdWludDMyX3QgYXNVSW50MzIo
KSBjb25zdDsKICAgICAgICAgZG91YmxlIGFzRG91YmxlKCkgY29uc3Q7CisgICAgICAgIGJvb2wg
YXNCb29sZWFuKCkgY29uc3Q7CisgICAgICAgIGRvdWJsZSBhc051bWJlcigpIGNvbnN0OwogCiAg
ICAgICAgIC8vIFF1ZXJ5aW5nIHRoZSB0eXBlLgogICAgICAgICBib29sIGlzVW5kZWZpbmVkKCkg
Y29uc3Q7CkBAIC0xNzEsMTAgKzE3Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBib29s
IGluaGVyaXRzKGNvbnN0IENsYXNzSW5mbyopIGNvbnN0OwogICAgICAgICAKICAgICAgICAgLy8g
RXh0cmFjdGluZyB0aGUgdmFsdWUuCi0gICAgICAgIGJvb2wgZ2V0Qm9vbGVhbihib29sJikgY29u
c3Q7Ci0gICAgICAgIGJvb2wgZ2V0Qm9vbGVhbigpIGNvbnN0OyAvLyBmYWxzZSBpZiBub3QgYSBi
b29sZWFuCi0gICAgICAgIGJvb2wgZ2V0TnVtYmVyKGRvdWJsZSYpIGNvbnN0OwotICAgICAgICBk
b3VibGUgdW5jaGVja2VkR2V0TnVtYmVyKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgZ2V0U3RyaW5n
KEV4ZWNTdGF0ZSogZXhlYywgVVN0cmluZyYpIGNvbnN0OwogICAgICAgICBVU3RyaW5nIGdldFN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0OyAvLyBudWxsIHN0cmluZyBpZiBub3QgYSBzdHJp
bmcKICAgICAgICAgSlNPYmplY3QqIGdldE9iamVjdCgpIGNvbnN0OyAvLyAwIGlmIG5vdCBhbiBv
YmplY3QKQEAgLTIyNSw4ICsyMjMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGlj
IGJvb2wgc3RyaWN0RXF1YWxTbG93Q2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdjEsIEpT
VmFsdWUgdjIpOwogICAgICAgICBzdGF0aWMgYm9vbCBzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5l
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2Mik7CiAKLSAgICAgICAgSlNW
YWx1ZSBnZXRKU051bWJlcigpIGNvbnN0OyAvLyBKU1ZhbHVlKCkgaWYgdGhpcyBpcyBub3QgYSBK
U051bWJlciBvciBudW1iZXIgb2JqZWN0Ci0KICAgICAgICAgYm9vbCBpc0NlbGwoKSBjb25zdDsK
ICAgICAgICAgSlNDZWxsKiBhc0NlbGwoKSBjb25zdDsKICAgICAgICAgYm9vbCBpc1ZhbGlkQ2Fs
bGVlKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1ZhbHVlSW5saW5l
TWV0aG9kcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VmFsdWVJbmxpbmVNZXRob2RzLmgJKHJldmlzaW9uIDk2NTcwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNWYWx1ZUlubGluZU1ldGhvZHMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTQsNyArNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIGFzSW50MzIoKTsK
ICAgICB9CiAKLSAgICBpbmxpbmUgZG91YmxlIEpTVmFsdWU6OnVuY2hlY2tlZEdldE51bWJlcigp
IGNvbnN0CisgICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjphc051bWJlcigpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlQoaXNOdW1iZXIoKSk7CiAgICAgICAgIHJldHVybiBpc0ludDMyKCkg
PyBhc0ludDMyKCkgOiBhc0RvdWJsZSgpOwpAQCAtNzAsMzMgKzcwLDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIHJldHVybiBKU1ZhbHVlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCkpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIEpTVmFsdWU6OmdldE51bWJl
cihkb3VibGUmIHJlc3VsdCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc0ludDMyKCkpIHsK
LSAgICAgICAgICAgIHJlc3VsdCA9IGFzSW50MzIoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICB9Ci0gICAgICAgIGlmIChpc0RvdWJsZSgpKSB7Ci0gICAgICAgICAgICByZXN1
bHQgPSBhc0RvdWJsZSgpOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlubGluZSBib29sIEpTVmFsdWU6Omdl
dEJvb2xlYW4oYm9vbCYgdikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChpc1RydWUoKSkgewot
ICAgICAgICAgICAgdiA9IHRydWU7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICBpZiAoaXNGYWxzZSgpKSB7Ci0gICAgICAgICAgICB2ID0gZmFsc2U7Ci0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLQogICAgIGlubGluZSBKU1ZhbHVlOjpKU1ZhbHVlKGNoYXIgaSkKICAg
ICB7CiAgICAgICAgICp0aGlzID0gSlNWYWx1ZShzdGF0aWNfY2FzdDxpbnQzMl90PihpKSk7CkBA
IC0zNDQsNyArMzE3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBpc1RydWUo
KSB8fCBpc0ZhbHNlKCk7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6Z2V0Qm9v
bGVhbigpIGNvbnN0CisgICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6YXNCb29sZWFuKCkgY29uc3QK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpc0Jvb2xlYW4oKSk7CiAgICAgICAgIHJldHVybiBwYXls
b2FkKCk7CkBAIC00MjAsOSArMzkzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVy
biBhc1ZhbHVlKCkgPT0gSlNWYWx1ZShKU0ZhbHNlKTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9v
bCBKU1ZhbHVlOjpnZXRCb29sZWFuKCkgY29uc3QKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjph
c0Jvb2xlYW4oKSBjb25zdAogICAgIHsKLSAgICAgICAgQVNTRVJUKGFzVmFsdWUoKSA9PSBqc0Jv
b2xlYW4odHJ1ZSkgfHwgYXNWYWx1ZSgpID09IGpzQm9vbGVhbihmYWxzZSkpOworICAgICAgICBB
U1NFUlQoaXNCb29sZWFuKCkpOwogICAgICAgICByZXR1cm4gYXNWYWx1ZSgpID09IGpzQm9vbGVh
bih0cnVlKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051
bWJlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTnVtYmVyT2JqZWN0LmNwcAkocmV2aXNpb24gOTY1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MiwxMSAr
NDIsNiBAQCB2b2lkIE51bWJlck9iamVjdDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iCiAgICAgQVNT
RVJUKGluaGVyaXRzKCZzX2luZm8pKTsKIH0KIAotSlNWYWx1ZSBOdW1iZXJPYmplY3Q6OmdldEpT
TnVtYmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaW50ZXJuYWxWYWx1ZSgpOwotfQotCiBOdW1i
ZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgbnVtYmVyKQogewogICAgIE51bWJlck9iamVjdCogb2Jq
ZWN0ID0gTnVtYmVyT2JqZWN0OjpjcmVhdGUoZXhlYy0+Z2xvYmFsRGF0YSgpLCBnbG9iYWxPYmpl
Y3QtPm51bWJlck9iamVjdFN0cnVjdHVyZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL051bWJlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCShyZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Niw4ICs0Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICByZXR1
cm4gU3RydWN0dXJlOjpjcmVhdGUoZ2xvYmFsRGF0YSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUs
IFR5cGVJbmZvKE51bWJlck9iamVjdFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgJnNfaW5mbyk7CiAg
ICAgICAgIH0KLQotICAgICAgICBKU1ZhbHVlIGdldEpTTnVtYmVyKCkgY29uc3Q7CiAgICAgfTsK
IAogICAgIE51bWJlck9iamVjdCogY29uc3RydWN0TnVtYmVyKEV4ZWNTdGF0ZSosIEpTR2xvYmFs
T2JqZWN0KiwgSlNWYWx1ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9O
dW1iZXJQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL051bWJlclByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDk2NTcwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTUsMTMgKzk1LDI0IEBAIGJvb2wgTnVtYmVyUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eURl
c2MKIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCB0b1RoaXNO
dW1iZXIoSlNWYWx1ZSB0aGlzVmFsdWUsIGRvdWJsZSAmeCkKK3N0YXRpYyBBTFdBWVNfSU5MSU5F
IGJvb2wgdG9UaGlzTnVtYmVyKEpTVmFsdWUgdGhpc1ZhbHVlLCBkb3VibGUmIHgpCiB7Ci0gICAg
SlNWYWx1ZSB2ID0gdGhpc1ZhbHVlLmdldEpTTnVtYmVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKCF2
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHggPSB2LnVuY2hlY2tlZEdldE51bWJlcigp
OwotICAgIHJldHVybiB0cnVlOworICAgIGlmICh0aGlzVmFsdWUuaXNJbnQzMigpKSB7CisgICAg
ICAgIHggPSB0aGlzVmFsdWUuYXNJbnQzMigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAodGhpc1ZhbHVlLmlzRG91YmxlKCkpIHsKKyAgICAgICAgeCA9IHRoaXNWYWx1
ZS5hc0RvdWJsZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYg
KHRoaXNWYWx1ZS5pc0NlbGwoKSAmJiB0aGlzVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgpLT50
eXBlSW5mbygpLmlzTnVtYmVyT2JqZWN0KCkpIHsKKyAgICAgICAgeCA9IHN0YXRpY19jYXN0PGNv
bnN0IE51bWJlck9iamVjdCo+KHRoaXNWYWx1ZS5hc0NlbGwoKSktPmludGVybmFsVmFsdWUoKS5h
c051bWJlcigpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7CiB9CiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgZ2V0SW50ZWdlckFyZ3VtZW50SW5S
YW5nZShFeGVjU3RhdGUqIGV4ZWMsIGludCBsb3csIGludCBoaWdoLCBpbnQmIHJlc3VsdCwgYm9v
bCYgaXNVbmRlZmluZWQpCkBAIC0zMzMsNyArMzQ0LDYgQEAgc3RhdGljIGNoYXIqIHRvU3RyaW5n
V2l0aFJhZGl4KFJhZGl4QnVmZgogLy8gdG8gYXJndW1lbnQtcGx1cy1vbmUgc2lnbmlmaWNhbnQg
ZmlndXJlcykuCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1Rv
RXhwb25lbnRpYWwoRXhlY1N0YXRlKiBleGVjKQogewotICAgIC8vIEdldCB4ICh0aGUgZG91Ymxl
IHZhbHVlIG9mIHRoaXMsIHdoaWNoIHNob3VsZCBiZSBhIE51bWJlcikuCiAgICAgZG91YmxlIHg7
CiAgICAgaWYgKCF0b1RoaXNOdW1iZXIoZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLCB4KSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CkBAIC0zNjUsMTIgKzM3NSw5IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KIC8vIG1ldGhvZCB3aWxsIGlu
c3RlYWQgZmFsbGJhY2sgdG8gY2FsbGluZyBUb1N0cmluZy4gCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvRml4ZWQoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IC8vIEdldCB4ICh0aGUgZG91YmxlIHZhbHVlIG9mIHRoaXMsIHdoaWNoIHNob3VsZCBiZSBhIE51
bWJlcikuCi0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0g
ICAgSlNWYWx1ZSB2ID0gdGhpc1ZhbHVlLmdldEpTTnVtYmVyKCk7Ci0gICAgaWYgKCF2KQorICAg
IGRvdWJsZSB4OworICAgIGlmICghdG9UaGlzTnVtYmVyKGV4ZWMtPmhvc3RUaGlzVmFsdWUoKSwg
eCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIGRvdWJsZSB4
ID0gdi51bmNoZWNrZWRHZXROdW1iZXIoKTsKIAogICAgIC8vIEdldCB0aGUgYXJndW1lbnQuIAog
ICAgIGludCBkZWNpbWFsUGxhY2VzOwpAQCAtNDA1LDEyICs0MTIsOSBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAvLyB3aXRoIHNtYWxsZXIgdmFsdWVzIGNvbnZl
cnRlZCB0byBleHBvbmVudGlhbCByZXByZXNlbnRhdGlvbi4KIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24oRXhlY1N0YXRlKiBleGVjKQogewot
ICAgIC8vIEdldCB4ICh0aGUgZG91YmxlIHZhbHVlIG9mIHRoaXMsIHdoaWNoIHNob3VsZCBiZSBh
IE51bWJlcikuCi0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7
Ci0gICAgSlNWYWx1ZSB2ID0gdGhpc1ZhbHVlLmdldEpTTnVtYmVyKCk7Ci0gICAgaWYgKCF2KQor
ICAgIGRvdWJsZSB4OworICAgIGlmICghdG9UaGlzTnVtYmVyKGV4ZWMtPmhvc3RUaGlzVmFsdWUo
KSwgeCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwotICAgIGRvdWJs
ZSB4ID0gdi51bmNoZWNrZWRHZXROdW1iZXIoKTsKIAogICAgIC8vIEdldCB0aGUgYXJndW1lbnQu
IAogICAgIGludCBzaWduaWZpY2FudEZpZ3VyZXM7CkBAIC00MzYsOSArNDQwLDggQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAg
ICBKU1ZhbHVlIHRoaXNWYWx1ZSA9IGV4ZWMtPmhvc3RUaGlzVmFsdWUoKTsKLSAgICBKU1ZhbHVl
IHYgPSB0aGlzVmFsdWUuZ2V0SlNOdW1iZXIoKTsKLSAgICBpZiAoIXYpCisgICAgZG91YmxlIHg7
CisgICAgaWYgKCF0b1RoaXNOdW1iZXIoZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLCB4KSkKICAgICAg
ICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKICAgICBKU1ZhbHVlIHJhZGl4VmFs
dWUgPSBleGVjLT5hcmd1bWVudCgwKTsKQEAgLTQ1MSwyMyArNDU0LDIwIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KICAgICAgICAgcmFkaXggPSBzdGF0aWNfY2Fz
dDxpbnQ+KHJhZGl4VmFsdWUudG9JbnRlZ2VyKGV4ZWMpKTsgLy8gbmFuIC0+IDAKIAogICAgIGlm
IChyYWRpeCA9PSAxMCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhl
eGVjLCB2LnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNTdHJpbmcoZXhlYywganNOdW1iZXIoeCkudG9TdHJpbmcoZXhlYykpKTsKIAogICAgIC8vIEZh
c3QgcGF0aCBmb3IgbnVtYmVyIHRvIGNoYXJhY3RlciBjb252ZXJzaW9uLgogICAgIGlmIChyYWRp
eCA9PSAzNikgewotICAgICAgICBpZiAodi5pc0ludDMyKCkpIHsKLSAgICAgICAgICAgIGludCB4
ID0gdi5hc0ludDMyKCk7Ci0gICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHgp
IDwgMzYpIHsgLy8gRXhjbHVkZSBuZWdhdGl2ZXMKLSAgICAgICAgICAgICAgICBKU0dsb2JhbERh
dGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOwotICAgICAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJh
Y3RlclN0cmluZyhnbG9iYWxEYXRhLCByYWRpeERpZ2l0c1t4XSkpOwotICAgICAgICAgICAgfQor
ICAgICAgICB1bnNpZ25lZCBjID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHgpOworICAgICAgICBp
ZiAoYyA9PSB4ICYmIGMgPCAzNikgeworICAgICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoZ2xvYmFsRGF0YS0+c21hbGxTdHJpbmdzLnNpbmdsZUNoYXJhY3RlclN0cmluZyhnbG9i
YWxEYXRhLCByYWRpeERpZ2l0c1tjXSkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHJh
ZGl4IDwgMiB8fCByYWRpeCA+IDM2KQogICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMs
IGNyZWF0ZVJhbmdlRXJyb3IoZXhlYywgInRvU3RyaW5nKCkgcmFkaXggYXJndW1lbnQgbXVzdCBi
ZSBiZXR3ZWVuIDIgYW5kIDM2IikpOwogCi0gICAgZG91YmxlIHggPSB2LnVuY2hlY2tlZEdldE51
bWJlcigpOwogICAgIGlmICghaXNmaW5pdGUoeCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNTdHJpbmcoZXhlYywgVVN0cmluZzo6bnVtYmVyKHgpKSk7CiAKQEAgLTQ3NywyNCAr
NDc3LDE5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhF
eGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhp
c1ZhbHVlKCk7Ci0gICAgLy8gRklYTUU6IE5vdCBpbXBsZW1lbnRlZCB5ZXQuCi0KLSAgICBKU1Zh
bHVlIHYgPSB0aGlzVmFsdWUuZ2V0SlNOdW1iZXIoKTsKLSAgICBpZiAoIXYpCisgICAgZG91Ymxl
IHg7CisgICAgaWYgKCF0b1RoaXNOdW1iZXIoZXhlYy0+aG9zdFRoaXNWYWx1ZSgpLCB4KSkKICAg
ICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhlYyk7CiAKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIHYudG9TdHJpbmcoZXhlYykpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIGpzTnVtYmVyKHgpLnRvU3RyaW5nKGV4ZWMp
KSk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVmFs
dWVPZihFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5o
b3N0VGhpc1ZhbHVlKCk7Ci0gICAgSlNWYWx1ZSB2ID0gdGhpc1ZhbHVlLmdldEpTTnVtYmVyKCk7
Ci0gICAgaWYgKCF2KQorICAgIGRvdWJsZSB4OworICAgIGlmICghdG9UaGlzTnVtYmVyKGV4ZWMt
Pmhvc3RUaGlzVmFsdWUoKSwgeCkpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4
ZWMpOwotCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh2KTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKHgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA5NjU3
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ4LDcgKzI0OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAg
ICAgZG8gewogICAgICAgICAgICAgaWYgKHYxLmlzTnVtYmVyKCkgJiYgdjIuaXNOdW1iZXIoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdjEudW5jaGVja2VkR2V0TnVtYmVyKCkgPT0gdjIudW5j
aGVja2VkR2V0TnVtYmVyKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHYxLmFzTnVtYmVyKCkg
PT0gdjIuYXNOdW1iZXIoKTsKIAogICAgICAgICAgICAgYm9vbCBzMSA9IHYxLmlzU3RyaW5nKCk7
CiAgICAgICAgICAgICBib29sIHMyID0gdjIuaXNTdHJpbmcoKTsKQEAgLTI5OSwxMCArMjk5LDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgICAgICBpZiAodjEuaXNCb29sZWFuKCkpIHsK
ICAgICAgICAgICAgICAgICBpZiAodjIuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGRvdWJsZT4odjEuZ2V0Qm9vbGVhbigpKSA9PSB2Mi51bmNoZWNr
ZWRHZXROdW1iZXIoKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGRv
dWJsZT4odjEuYXNCb29sZWFuKCkpID09IHYyLmFzTnVtYmVyKCk7CiAgICAgICAgICAgICB9IGVs
c2UgaWYgKHYyLmlzQm9vbGVhbigpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHYxLmlzTnVtYmVy
KCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB2MS51bmNoZWNrZWRHZXROdW1iZXIoKSA9
PSBzdGF0aWNfY2FzdDxkb3VibGU+KHYyLmdldEJvb2xlYW4oKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB2MS5hc051bWJlcigpID09IHN0YXRpY19jYXN0PGRvdWJsZT4odjIuYXNCb29s
ZWFuKCkpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICByZXR1cm4gdjEgPT0gdjI7CkBA
IC0zMjYsNyArMzI2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gdjEg
PT0gdjI7CiAKICAgICAgICAgaWYgKHYxLmlzTnVtYmVyKCkgJiYgdjIuaXNOdW1iZXIoKSkKLSAg
ICAgICAgICAgIHJldHVybiB2MS51bmNoZWNrZWRHZXROdW1iZXIoKSA9PSB2Mi51bmNoZWNrZWRH
ZXROdW1iZXIoKTsKKyAgICAgICAgICAgIHJldHVybiB2MS5hc051bWJlcigpID09IHYyLmFzTnVt
YmVyKCk7CiAKICAgICAgICAgaWYgKCF2MS5pc0NlbGwoKSB8fCAhdjIuaXNDZWxsKCkpCiAgICAg
ICAgICAgICByZXR1cm4gdjEgPT0gdjI7CkBAIC0zNDMsMTUgKzM0MywxNSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgaWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMyKCkpCiAgICAgICAg
ICAgICByZXR1cm4gdjEuYXNJbnQzMigpIDwgdjIuYXNJbnQzMigpOwogCi0gICAgICAgIGRvdWJs
ZSBuMTsKLSAgICAgICAgZG91YmxlIG4yOwotICAgICAgICBpZiAodjEuZ2V0TnVtYmVyKG4xKSAm
JiB2Mi5nZXROdW1iZXIobjIpKQotICAgICAgICAgICAgcmV0dXJuIG4xIDwgbjI7CisgICAgICAg
IGlmICh2MS5pc051bWJlcigpICYmIHYyLmlzTnVtYmVyKCkpCisgICAgICAgICAgICByZXR1cm4g
djEuYXNOdW1iZXIoKSA8IHYyLmFzTnVtYmVyKCk7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOwogICAgICAgICBpZiAoaXNKU1N0
cmluZyhnbG9iYWxEYXRhLCB2MSkgJiYgaXNKU1N0cmluZyhnbG9iYWxEYXRhLCB2MikpCiAgICAg
ICAgICAgICByZXR1cm4gYXNTdHJpbmcodjEpLT52YWx1ZShjYWxsRnJhbWUpIDwgYXNTdHJpbmco
djIpLT52YWx1ZShjYWxsRnJhbWUpOwogCisgICAgICAgIGRvdWJsZSBuMTsKKyAgICAgICAgZG91
YmxlIG4yOwogICAgICAgICBKU1ZhbHVlIHAxOwogICAgICAgICBKU1ZhbHVlIHAyOwogICAgICAg
ICBib29sIHdhc05vdFN0cmluZzE7CkBAIC0zNzgsMTUgKzM3OCwxNSBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgaWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0ludDMyKCkpCiAgICAgICAgICAg
ICByZXR1cm4gdjEuYXNJbnQzMigpIDw9IHYyLmFzSW50MzIoKTsKIAotICAgICAgICBkb3VibGUg
bjE7Ci0gICAgICAgIGRvdWJsZSBuMjsKLSAgICAgICAgaWYgKHYxLmdldE51bWJlcihuMSkgJiYg
djIuZ2V0TnVtYmVyKG4yKSkKLSAgICAgICAgICAgIHJldHVybiBuMSA8PSBuMjsKKyAgICAgICAg
aWYgKHYxLmlzTnVtYmVyKCkgJiYgdjIuaXNOdW1iZXIoKSkKKyAgICAgICAgICAgIHJldHVybiB2
MS5hc051bWJlcigpIDw9IHYyLmFzTnVtYmVyKCk7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpOwogICAgICAgICBpZiAoaXNKU1N0
cmluZyhnbG9iYWxEYXRhLCB2MSkgJiYgaXNKU1N0cmluZyhnbG9iYWxEYXRhLCB2MikpCiAgICAg
ICAgICAgICByZXR1cm4gIShhc1N0cmluZyh2MiktPnZhbHVlKGNhbGxGcmFtZSkgPCBhc1N0cmlu
Zyh2MSktPnZhbHVlKGNhbGxGcmFtZSkpOwogCisgICAgICAgIGRvdWJsZSBuMTsKKyAgICAgICAg
ZG91YmxlIG4yOwogICAgICAgICBKU1ZhbHVlIHAxOwogICAgICAgICBKU1ZhbHVlIHAyOwogICAg
ICAgICBib29sIHdhc05vdFN0cmluZzE7CkBAIC00MTUsOSArNDE1LDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICBBTFdBWVNfSU5MSU5FIEpTVmFsdWUganNBZGQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCiAgICAgewotICAgICAgICBkb3VibGUgbGVmdCA9
IDAuMCwgcmlnaHQ7Ci0gICAgICAgIGlmICh2MS5nZXROdW1iZXIobGVmdCkgJiYgdjIuZ2V0TnVt
YmVyKHJpZ2h0KSkKLSAgICAgICAgICAgIHJldHVybiBqc051bWJlcihsZWZ0ICsgcmlnaHQpOwor
ICAgICAgICBpZiAodjEuaXNOdW1iZXIoKSAmJiB2Mi5pc051bWJlcigpKQorICAgICAgICAgICAg
cmV0dXJuIGpzTnVtYmVyKHYxLmFzTnVtYmVyKCkgKyB2Mi5hc051bWJlcigpKTsKICAgICAgICAg
CiAgICAgICAgIGlmICh2MS5pc1N0cmluZygpKSB7CiAgICAgICAgICAgICByZXR1cm4gdjIuaXNT
dHJpbmcoKQpJbmRleDogU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY1NzEpCisrKyBTb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOSBAQAorMjAxMS0xMC0wMyAg
R2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFNvbWUgSlNWYWx1
ZSBjbGVhbnVwCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02OTMyMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZhbHVl
VG9EYXRlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJp
bmRpbmdzL2pzL0pTRXZlbnRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU0V2ZW50
TGlzdGVuZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5z
YWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb246OmV4
ZWN1dGVTcWwpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRl
U3FsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpqc1RvSW5zcGVjdG9yVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbG9uZVNlcmlhbGl6ZXI6
OmR1bXBJZlRlcm1pbmFsKToKKyAgICAgICAgKiBiaW5kaW5ncy9vYmpjL1dlYlNjcmlwdE9iamVj
dC5tbToKKyAgICAgICAgKCtbV2ViU2NyaXB0T2JqZWN0IF9jb252ZXJ0VmFsdWVUb09iamNWYWx1
ZTpvcmlnaW5Sb290T2JqZWN0OnJvb3RPYmplY3Q6XSk6CisgICAgICAgICogYnJpZGdlL2puaS9q
c2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVy
dFZhbHVlVG9KVmFsdWUpOiBVcGRhdGVkIGZvciBKU0MgY2hhbmdlcy4KKwogMjAxMS0xMC0wMyAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBNYWMgcmVsZWFzZSBi
dWlsZCBmaXggYWZ0ZXIgcjk2NTYxLCBhbmQgTGVvcGFyZCBidWlsZCBmaXggYWZ0ZXIgcjk2NTY4
LgpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuY3BwCShy
ZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGlu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Myw3ICsxNjMsNyBAQCBKU1ZhbHVlIGpzRGF0ZU9y
TnVsbChFeGVjU3RhdGUqIGV4ZWMsIGRvCiBkb3VibGUgdmFsdWVUb0RhdGUoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHZhbHVlKQogewogICAgIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAgICAg
ICByZXR1cm4gdmFsdWUudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgICAgIHJldHVybiB2YWx1
ZS5hc051bWJlcigpOwogICAgIGlmICghdmFsdWUuaW5oZXJpdHMoJkRhdGVJbnN0YW5jZTo6c19p
bmZvKSkKICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRf
TmFOKCk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KHZhbHVlLnRvT2Jq
ZWN0KGV4ZWMpKS0+aW50ZXJuYWxOdW1iZXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAJKHJldmlzaW9uIDk2NTcwKQorKysgU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDEsOCArMTAxLDcgQEAgdm9pZCBKU0Vycm9ySGFuZGxlcjo6aGFuZGxlRXZlbnQoU2NyaXB0
RQogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgICAgICByZXBvcnRD
dXJyZW50RXhjZXB0aW9uKGV4ZWMpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGJvb2wg
cmV0dmFsYm9vbDsKLSAgICAgICAgICAgIGlmIChyZXR1cm5WYWx1ZS5nZXRCb29sZWFuKHJldHZh
bGJvb2wpICYmIHJldHZhbGJvb2wpCisgICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUuaXNUcnVl
KCkpCiAgICAgICAgICAgICAgICAgZXZlbnQtPnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgIH0K
ICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXZlbnRMaXN0
ZW5lci5jcHAJKHJldmlzaW9uIDk2NTcwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNFdmVudExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDggKzE0Nyw3IEBAIHZv
aWQgSlNFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudChTY3JpcHQKICAgICAgICAgICAgIGlmICgh
cmV0dmFsLmlzVW5kZWZpbmVkT3JOdWxsKCkgJiYgZXZlbnQtPnN0b3Jlc1Jlc3VsdEFzU3RyaW5n
KCkpCiAgICAgICAgICAgICAgICAgZXZlbnQtPnN0b3JlUmVzdWx0KHVzdHJpbmdUb1N0cmluZyhy
ZXR2YWwudG9TdHJpbmcoZXhlYykpKTsKICAgICAgICAgICAgIGlmIChtX2lzQXR0cmlidXRlKSB7
Ci0gICAgICAgICAgICAgICAgYm9vbCByZXR2YWxib29sOwotICAgICAgICAgICAgICAgIGlmIChy
ZXR2YWwuZ2V0Qm9vbGVhbihyZXR2YWxib29sKSAmJiAhcmV0dmFsYm9vbCkKKyAgICAgICAgICAg
ICAgICBpZiAocmV0dmFsLmlzRmFsc2UoKSkKICAgICAgICAgICAgICAgICAgICAgZXZlbnQtPnBy
ZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25DdXN0b20uY3Bw
CShyZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJh
bnNhY3Rpb25DdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCw3ICs3OCw3IEBAIEpTVmFs
dWUgSlNTUUxUcmFuc2FjdGlvbjo6ZXhlY3V0ZVNxbChFeGUKICAgICAgICAgICAgIGlmICh2YWx1
ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQo
U1FMVmFsdWUoKSk7CiAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5pc051bWJlcigpKQotICAg
ICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodmFsdWUudW5jaGVja2VkR2V0TnVtYmVyKCkp
OworICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodmFsdWUuYXNOdW1iZXIoKSk7CiAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBhcmd1bWVu
dCB0byBhIHN0cmluZyBhbmQgYXBwZW5kIGl0CiAgICAgICAgICAgICAgICAgc3FsVmFsdWVzLmFw
cGVuZCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykpKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3lu
Y0N1c3RvbS5jcHAJKHJldmlzaW9uIDk2NTcwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
anMvSlNTUUxUcmFuc2FjdGlvblN5bmNDdXN0b20uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw3
ICs3Nyw3IEBAIEpTVmFsdWUgSlNTUUxUcmFuc2FjdGlvblN5bmM6OmV4ZWN1dGVTcWwKICAgICAg
ICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKQogICAgICAgICAgICAgICAgIHNx
bFZhbHVlcy5hcHBlbmQoU1FMVmFsdWUoKSk7CiAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZS5p
c051bWJlcigpKQotICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodmFsdWUudW5jaGVj
a2VkR2V0TnVtYmVyKCkpOworICAgICAgICAgICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodmFsdWUu
YXNOdW1iZXIoKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAvLyBDb252
ZXJ0IHRoZSBhcmd1bWVudCB0byBhIHN0cmluZyBhbmQgYXBwZW5kIGl0CiAgICAgICAgICAgICAg
ICAgc3FsVmFsdWVzLmFwcGVuZCh1c3RyaW5nVG9TdHJpbmcodmFsdWUudG9TdHJpbmcoZXhlYykp
KTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAJKHJl
dmlzaW9uIDk2NTcwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsOSArMTI1LDkgQEAgc3RhdGljIFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGpzVG9JbgogICAgIGlmICh2YWx1ZS5pc051bGwoKSB8fCB2YWx1ZS5p
c1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm4gSW5zcGVjdG9yVmFsdWU6Om51bGwoKTsKICAg
ICBpZiAodmFsdWUuaXNCb29sZWFuKCkpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3JCYXNpY1Zh
bHVlOjpjcmVhdGUodmFsdWUuZ2V0Qm9vbGVhbigpKTsKKyAgICAgICAgcmV0dXJuIEluc3BlY3Rv
ckJhc2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZS5hc0Jvb2xlYW4oKSk7CiAgICAgaWYgKHZhbHVlLmlz
TnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBJbnNwZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFs
dWUudW5jaGVja2VkR2V0TnVtYmVyKCkpOworICAgICAgICByZXR1cm4gSW5zcGVjdG9yQmFzaWNW
YWx1ZTo6Y3JlYXRlKHZhbHVlLmFzTnVtYmVyKCkpOwogICAgIGlmICh2YWx1ZS5pc1N0cmluZygp
KSB7CiAgICAgICAgIFVTdHJpbmcgcyA9IHZhbHVlLmdldFN0cmluZyhzY3JpcHRTdGF0ZSk7CiAg
ICAgICAgIHJldHVybiBJbnNwZWN0b3JTdHJpbmc6OmNyZWF0ZShTdHJpbmcocy5jaGFyYWN0ZXJz
KCksIHMubGVuZ3RoKCkpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Nlcmlh
bGl6ZWRTY3JpcHRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkocmV2aXNpb24gOTY1NzApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MDYsNyArNDA2LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICBpZiAodmFsdWUu
aXNOdW1iZXIoKSkgewogICAgICAgICAgICAgd3JpdGUoRG91YmxlVGFnKTsKLSAgICAgICAgICAg
IHdyaXRlKHZhbHVlLnVuY2hlY2tlZEdldE51bWJlcigpKTsKKyAgICAgICAgICAgIHdyaXRlKHZh
bHVlLmFzTnVtYmVyKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KIApJ
bmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3QubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRPYmplY3Qu
bW0JKHJldmlzaW9uIDk2NTcwKQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJT
Y3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTU0MSwxMCArNTQxLDEwIEBAICsgKGlk
KV9jb252ZXJ0VmFsdWVUb09iamNWYWx1ZTooSlNWYWx1ZSkKICAgICB9CiAKICAgICBpZiAodmFs
dWUuaXNOdW1iZXIoKSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoRG91Ymxl
OnZhbHVlLnVuY2hlY2tlZEdldE51bWJlcigpXTsKKyAgICAgICAgcmV0dXJuIFtOU051bWJlciBu
dW1iZXJXaXRoRG91YmxlOnZhbHVlLmFzTnVtYmVyKCldOwogCiAgICAgaWYgKHZhbHVlLmlzQm9v
bGVhbigpKQotICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29sOnZhbHVlLmdl
dEJvb2xlYW4oKV07CisgICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aEJvb2w6dmFs
dWUuYXNCb29sZWFuKCldOwogCiAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAg
IHJldHVybiBbV2ViVW5kZWZpbmVkIHVuZGVmaW5lZF07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJpdmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCShyZXZpc2lvbiA5
NjU3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI0LDE0ICsyMjQsMTQgQEAganZhbHVlIGNvbnZlcnRW
YWx1ZVRvSlZhbHVlKEV4ZWNTdGF0ZSogZQogICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGph
dmFTdHJpbmcgPSBlbnYtPmZ1bmN0aW9ucy0+TmV3U3RyaW5nKGVudiwgKGNvbnN0IGpjaGFyKilz
dHJpbmdWYWx1ZS5jaGFyYWN0ZXJzKCksIHN0cmluZ1ZhbHVlLmxlbmd0aCgpKTsKICAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LmwgPSBqYXZhU3RyaW5nOwogICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAodmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBkb3VibGUgZG91
YmxlVmFsdWUgPSB2YWx1ZS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIGRvdWJsZVZhbHVlID0gdmFsdWUuYXNOdW1iZXIoKTsKICAgICAgICAgICAgICAg
ICAgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKICAgICAgICAgICAgICAgICAgICAgamNs
YXNzIGNsYXp6ID0gZW52LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9Eb3VibGUiKTsKICAgICAgICAg
ICAgICAgICAgICAgam1ldGhvZElEIGNvbnN0cnVjdG9yID0gZW52LT5HZXRNZXRob2RJRChjbGF6
eiwgIjxpbml0PiIsICIoRClWIik7CiAgICAgICAgICAgICAgICAgICAgIGpvYmplY3QgamF2YURv
dWJsZSA9IGVudi0+ZnVuY3Rpb25zLT5OZXdPYmplY3QoZW52LCBjbGF6eiwgY29uc3RydWN0b3Is
IGRvdWJsZVZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmwgPSBqYXZhRG91Ymxl
OwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUuaXNCb29sZWFuKCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgYm9vbCBib29sVmFsdWUgPSB2YWx1ZS5nZXRCb29sZWFuKCk7CisgICAg
ICAgICAgICAgICAgICAgIGJvb2wgYm9vbFZhbHVlID0gdmFsdWUuYXNCb29sZWFuKCk7CiAgICAg
ICAgICAgICAgICAgICAgIEpOSUVudiogZW52ID0gZ2V0Sk5JRW52KCk7CiAgICAgICAgICAgICAg
ICAgICAgIGpjbGFzcyBjbGF6eiA9IGVudi0+RmluZENsYXNzKCJqYXZhL2xhbmcvQm9vbGVhbiIp
OwogICAgICAgICAgICAgICAgICAgICBqbWV0aG9kSUQgY29uc3RydWN0b3IgPSBlbnYtPkdldE1l
dGhvZElEKGNsYXp6LCAiPGluaXQ+IiwgIihaKVYiKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDk2NTcxKQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTEtMTAtMDMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVu
QGFwcGxlLmNvbT4KKworICAgICAgICBTb21lIEpTVmFsdWUgY2xlYW51cAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjkzMjAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToK
KyAgICAgICAgKGFlRGVzY0Zyb21KU1ZhbHVlKTogVXBkYXRlZCBmb3IgSlNDIGNoYW5nZXMuCisK
IDIwMTEtMTAtMDMgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAg
VW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjk2NTI2LgpJbmRleDogU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQkocmV2aXNpb24gOTY1NzApCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1NDcsMTEgKzQ1NDcsMTEgQEAgc3Rh
dGljIE5TQXBwbGVFdmVudERlc2NyaXB0b3IqIGFlRGVzY0ZybwogewogICAgIE5TQXBwbGVFdmVu
dERlc2NyaXB0b3IqIGFlRGVzYyA9IDA7CiAgICAgaWYgKGpzVmFsdWUuaXNCb29sZWFuKCkpCi0g
ICAgICAgIHJldHVybiBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBkZXNjcmlwdG9yV2l0aEJvb2xl
YW46anNWYWx1ZS5nZXRCb29sZWFuKCldOworICAgICAgICByZXR1cm4gW05TQXBwbGVFdmVudERl
c2NyaXB0b3IgZGVzY3JpcHRvcldpdGhCb29sZWFuOmpzVmFsdWUuYXNCb29sZWFuKCldOwogICAg
IGlmIChqc1ZhbHVlLmlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBbTlNBcHBsZUV2ZW50RGVz
Y3JpcHRvciBkZXNjcmlwdG9yV2l0aFN0cmluZzp1c3RyaW5nVG9TdHJpbmcoanNWYWx1ZS5nZXRT
dHJpbmcoZXhlYykpXTsKICAgICBpZiAoanNWYWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgIGRv
dWJsZSB2YWx1ZSA9IGpzVmFsdWUudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgICAgIGRvdWJs
ZSB2YWx1ZSA9IGpzVmFsdWUuYXNOdW1iZXIoKTsKICAgICAgICAgaW50IGludFZhbHVlID0gdmFs
dWU7CiAgICAgICAgIGlmICh2YWx1ZSA9PSBpbnRWYWx1ZSkKICAgICAgICAgICAgIHJldHVybiBb
TlNBcHBsZUV2ZW50RGVzY3JpcHRvciBkZXNjcmlwdG9yV2l0aERlc2NyaXB0b3JUeXBlOnR5cGVT
SW50MzIgYnl0ZXM6JmludFZhbHVlIGxlbmd0aDpzaXplb2YoaW50VmFsdWUpXTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109661</attachid>
            <date>2011-10-04 12:05:13 -0700</date>
            <delta_ts>2011-10-04 12:19:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69320-20111004120513.patch</filename>
            <type>text/plain</type>
            <size>46222</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTY1NzEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzYgQEAK
KzIwMTEtMTAtMDMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAg
ICBTb21lIEpTVmFsdWUgY2xlYW51cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9NjkzMjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKyAgICAgICAgCisgICAgICAgIE5vIG1lYXN1cmFibGUgcGVyZm9ybWFuY2UgY2hhbmdlLgor
CisgICAgICAgIFJlbW92ZWQgc29tZSBKU1ZhbHVlOjpnZXQqIGZ1bmN0aW9ucy4gZ2V0KiB1c2Vk
IHRvIGJlIGFuIG9wdGltaXphdGlvbgorICAgICAgICB3aGVuIGV2ZXJ5IHZhbHVlIG9wZXJhdGlv
biB3YXMgYSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGw6IGdldCogd291bGQgY29tYmluZQorICAgICAg
ICB0d28gdmlydHVhbCBjYWxscyBpbnRvIG9uZS4gTm93LCB3aXRoIG5vbi12aXJ0dWFsLCBpbmxp
bmVkIGZ1bmN0aW9ucywgZ2V0KgorICAgICAgICBpc24ndCBmYXN0ZXIsIGFuZCBtYXkgYmUgc2xp
Z2h0bHkgc2xvd2VyLgorCisgICAgICAgIE1lcmdlZCBnZXRCb29sZWFuKGJvb2wmKSBhbmQgZ2V0
Qm9vbGVhbigpIGludG8gYXNCb29sZWFuKCkuCisKKyAgICAgICAgTWVyZ2VkIHVuY2hlY2tlZEdl
dE51bWJlcigpLCBnZXRKU051bWJlcigpIGFuZCBnZXROdW1iZXIoKSBpbnRvCisgICAgICAgIGFz
TnVtYmVyKCkuCisKKyAgICAgICAgKiBydW50aW1lL0pTVmFsdWUuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmFzTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6YXNCb29sZWFuKTogQXMgcHJvbWlzZWQhCisK
KyAgICAgICAgKiBydW50aW1lL051bWJlclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OnRv
VGhpc051bWJlcik6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvRXhwb25lbnRpYWwp
OgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKToKKyAgICAgICAgKEpTQzo6
bnVtYmVyUHJvdG9GdW5jVG9QcmVjaXNpb24pOgorICAgICAgICAoSlNDOjpudW1iZXJQcm90b0Z1
bmNUb1N0cmluZyk6CisgICAgICAgIChKU0M6Om51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6bnVtYmVyUHJvdG9GdW5jVmFsdWVPZik6IFJlbW92ZWQgYSBidW5j
aCBvZiB1c2VzIG9mIGdldEpTTnVtYmVyKCkKKyAgICAgICAgYnkgc3dpdGNoaW5nIHRvIHRvVGhp
c051bWJlcigpLgorCisgICAgICAgICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoK
KyAgICAgICAgKEpTQzo6Ojp0b051bWJlcik6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZOdW1iZXJDb25zdGFudCk6CisgICAgICAg
IChKU0M6OkRGRzo6R3JhcGg6OnZhbHVlT2ZCb29sZWFuQ29uc3RhbnQpOgorICAgICAgICAqIGRm
Zy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwdXRCeVZhbCk6CisgICAg
ICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnBy
ZXRlcjo6cHJpdmF0ZUV4ZWN1dGUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAg
ICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBydW50aW1lL0RhdGVJ
bnN0YW5jZS5oOgorICAgICAgICAoSlNDOjpEYXRlSW5zdGFuY2U6OmludGVybmFsTnVtYmVyKToK
KyAgICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6
ZnVuY3Rpb25Qcm90b0Z1bmNCaW5kKToKKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXkuY3BwOgor
ICAgICAgICAoSlNDOjpjb21wYXJlTnVtYmVyc0ZvclFTb3J0KTogUmVwbGFjZWQgZ2V0TnVtYmVy
KCkgPT4gaXNOdW1iZXIoKSAvIGFzTnVtYmVyKCkuCisgICAgICAgIGdldEJvb2xlYW4oKSA9PiBp
c0Jvb2xlYW4oKSAvIGFzQm9vbGVhbigpLCB1bmNoZWNrZWRHZXROdW1iZXIoKSA9PiBhc051bWJl
cigpLgorCisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAgICAgICAqIHJ1bnRpbWUv
SlNDZWxsLmg6IE5peGVkIGdldEpTTnVtYmVyKCkuCisKKyAgICAgICAgKiBydW50aW1lL0pTR2xv
YmFsT2JqZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY1BhcnNlSW50
KToKKyAgICAgICAgKiBydW50aW1lL0pTT05PYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpnYXAp
OgorICAgICAgICAoSlNDOjpTdHJpbmdpZmllcjo6U3RyaW5naWZpZXIpOgorICAgICAgICAoSlND
OjpTdHJpbmdpZmllcjo6YXBwZW5kU3RyaW5naWZpZWRWYWx1ZSk6CisgICAgICAgICogcnVudGlt
ZS9OdW1iZXJPYmplY3QuY3BwOgorICAgICAgICAqIHJ1bnRpbWUvTnVtYmVyT2JqZWN0Lmg6Cisg
ICAgICAgIChKU0M6Ok51bWJlck9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKyAgICAgICAgKiBy
dW50aW1lL09wZXJhdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6ZXF1YWxTbG93Q2Fz
ZUlubGluZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnN0cmljdEVxdWFsKToKKyAgICAgICAg
KEpTQzo6anNMZXNzKToKKyAgICAgICAgKEpTQzo6anNMZXNzRXEpOgorICAgICAgICAoSlNDOjpq
c0FkZCk6IFJlcGxhY2VkIGdldE51bWJlcigpID0+IGlzTnVtYmVyKCkgLyBhc051bWJlcigpLgor
ICAgICAgICBnZXRCb29sZWFuKCkgPT4gaXNCb29sZWFuKCkgLyBhc0Jvb2xlYW4oKSwgdW5jaGVj
a2VkR2V0TnVtYmVyKCkgPT4gYXNOdW1iZXIoKS4KKwogMjAxMS0xMC0wMyAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIERGRyBzaG91bGQgaW5saW5lIEFycmF5LnB1
c2ggYW5kIEFycmF5LnBvcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxi
YWNrT2JqZWN0RnVuY3Rpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9uIDk2NTcwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4MCwxMCArNDgwLDEzIEBAIGRvdWJsZSBKU0NhbGxiYWNrT2JqZWN0PFBh
cmVudD46OnRvTnVtYmUKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIHRvSlMoZXhl
YywgZXhjZXB0aW9uKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGRvdWJsZSBkVmFsdWU7Ci0gICAgICAgICAgICBpZiAodmFsdWUpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgdmFsdWUpLmdldE51bWJlcihkVmFsdWUp
ID8gZFZhbHVlIDogc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAg
ICAgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB0b0pTKGV4ZWMsIHZhbHVl
KTsKKyAgICAgICAgICAgIGlmICghanNWYWx1ZS5pc051bWJlcigpKQorICAgICAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgICAg
ICAgICAgcmV0dXJuIGpzVmFsdWUuYXNOdW1iZXIoKTsKICAgICAgICAgfQogICAgICAgICAgICAg
CiAgICAgcmV0dXJuIFBhcmVudDo6dG9OdW1iZXIoZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpAQCAtMjQ3LDExICsyNDcsMTEgQEAg
cHVibGljOgogICAgIH0KICAgICBkb3VibGUgdmFsdWVPZk51bWJlckNvbnN0YW50KENvZGVCbG9j
ayogY29kZUJsb2NrLCBOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKLSAgICAgICAgcmV0dXJu
IHZhbHVlT2ZKU0NvbnN0YW50Tm9kZShjb2RlQmxvY2ssIG5vZGVJbmRleCkudW5jaGVja2VkR2V0
TnVtYmVyKCk7CisgICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudE5vZGUoY29kZUJsb2Nr
LCBub2RlSW5kZXgpLmFzTnVtYmVyKCk7CiAgICAgfQogICAgIGJvb2wgdmFsdWVPZkJvb2xlYW5D
b25zdGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaywgTm9kZUluZGV4IG5vZGVJbmRleCkKICAgICB7
Ci0gICAgICAgIHJldHVybiB2YWx1ZU9mSlNDb25zdGFudE5vZGUoY29kZUJsb2NrLCBub2RlSW5k
ZXgpLmdldEJvb2xlYW4oKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlT2ZKU0NvbnN0YW50Tm9kZShj
b2RlQmxvY2ssIG5vZGVJbmRleCkuYXNCb29sZWFuKCk7CiAgICAgfQogICAgIEpTRnVuY3Rpb24q
IHZhbHVlT2ZGdW5jdGlvbkNvbnN0YW50KENvZGVCbG9jayogY29kZUJsb2NrLCBOb2RlSW5kZXgg
bm9kZUluZGV4KQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gOTY1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw5ICs4OCw4IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBwdXRCeVZhbChFeGVjU3RhdGUqIGUKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogCi0gICAgICAgIGRvdWJsZSBkVmFsdWUgPSAwOwotICAgICAgICBpZiAo
dmFsdWUuZ2V0TnVtYmVyKGRWYWx1ZSkpIHsKLSAgICAgICAgICAgIGJ5dGVBcnJheS0+c2V0SW5k
ZXgoaW5kZXgsIGRWYWx1ZSk7CisgICAgICAgIGlmICh2YWx1ZS5pc051bWJlcigpKSB7CisgICAg
ICAgICAgICBieXRlQXJyYXktPnNldEluZGV4KGluZGV4LCB2YWx1ZS5hc051bWJlcigpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KQEAgLTE4OCwzNiArMTg3LDM2IEBA
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmEKIAogRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aEFkZChFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIGRvdWJsZSBudW0xID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLnVuY2hlY2tlZEdldE51bWJlcigpOwotICAgIGRvdWJs
ZSBudW0yID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLnVuY2hlY2tlZEdldE51bWJlcigp
OworICAgIGRvdWJsZSBudW0xID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLmFzTnVtYmVy
KCk7CisgICAgZG91YmxlIG51bTIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikuYXNOdW1i
ZXIoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bTEgKyBudW0yKSk7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhTdWIoRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAg
ICBkb3VibGUgbnVtMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKS51bmNoZWNrZWRHZXRO
dW1iZXIoKTsKLSAgICBkb3VibGUgbnVtMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKS51
bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICBkb3VibGUgbnVtMSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3AxKS5hc051bWJlcigpOworICAgIGRvdWJsZSBudW0yID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDIpLmFzTnVtYmVyKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihudW0xIC0gbnVtMikpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9w
ZXJhdGlvbkFyaXRoTXVsKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCiB7Ci0gICAgZG91YmxlIG51bTEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSkudW5jaGVja2VkR2V0TnVtYmVyKCk7Ci0gICAgZG91YmxlIG51bTIgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMikudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgZG91YmxlIG51bTEg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkuYXNOdW1iZXIoKTsKKyAgICBkb3VibGUgbnVt
MiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKS5hc051bWJlcigpOwogICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobnVtMSAqIG51bTIpKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Bcml0aERpdihFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewotICAgIGRvdWJsZSBudW0xID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLnVuY2hlY2tlZEdldE51bWJlcigpOwotICAgIGRvdWJs
ZSBudW0yID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLnVuY2hlY2tlZEdldE51bWJlcigp
OworICAgIGRvdWJsZSBudW0xID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLmFzTnVtYmVy
KCk7CisgICAgZG91YmxlIG51bTIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikuYXNOdW1i
ZXIoKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bTEgLyBudW0yKSk7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJpdGhNb2QoRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKIHsKLSAg
ICBkb3VibGUgbnVtMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKS51bmNoZWNrZWRHZXRO
dW1iZXIoKTsKLSAgICBkb3VibGUgbnVtMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKS51
bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICBkb3VibGUgbnVtMSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkT3AxKS5hc051bWJlcigpOworICAgIGRvdWJsZSBudW0yID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDIpLmFzTnVtYmVyKCk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051
bWJlcihmbW9kKG51bTEsIG51bTIpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gOTY1NzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTc2LDcgKzE5NzYsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2
YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBKU1ZhbHVlIG51
bWJlciA9IGNhbGxGcmFtZS0+cihzcmNEc3QpLmpzVmFsdWUoKS50b0pTTnVtYmVyKGNhbGxGcmFt
ZSk7CiAgICAgICAgICAgICBDSEVDS19GT1JfRVhDRVBUSU9OKCk7Ci0gICAgICAgICAgICBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIoc3JjRHN0KSA9IGpzTnVtYmVyKG51bWJlci51bmNoZWNrZWRHZXRO
dW1iZXIoKSArIDEpOworICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNyY0RzdCkg
PSBqc051bWJlcihudW1iZXIuYXNOdW1iZXIoKSArIDEpOwogICAgICAgICAgICAgY2FsbEZyYW1l
LT51bmNoZWNrZWRSKGRzdCkgPSBudW1iZXI7CiAgICAgICAgIH0KIApAQCAtMTk5OSw3ICsxOTk5
LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgSlNWYWx1ZSBudW1iZXIgPSBjYWxsRnJhbWUtPnIoc3JjRHN0
KS5qc1ZhbHVlKCkudG9KU051bWJlcihjYWxsRnJhbWUpOwogICAgICAgICAgICAgQ0hFQ0tfRk9S
X0VYQ0VQVElPTigpOwotICAgICAgICAgICAgY2FsbEZyYW1lLT51bmNoZWNrZWRSKHNyY0RzdCkg
PSBqc051bWJlcihudW1iZXIudW5jaGVja2VkR2V0TnVtYmVyKCkgLSAxKTsKKyAgICAgICAgICAg
IGNhbGxGcmFtZS0+dW5jaGVja2VkUihzcmNEc3QpID0ganNOdW1iZXIobnVtYmVyLmFzTnVtYmVy
KCkgLSAxKTsKICAgICAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUihkc3QpID0gbnVtYmVy
OwogICAgICAgICB9CiAKQEAgLTM1MDYsMTIgKzM1MDYsMTEgQEAgc2tpcF9pZF9jdXN0b21fc2Vs
ZjoKICAgICAgICAgICAgICAgICAgICAganNBcnJheS0+SlNBcnJheTo6cHV0KGNhbGxGcmFtZSwg
aSwgY2FsbEZyYW1lLT5yKHZhbHVlKS5qc1ZhbHVlKCkpOwogICAgICAgICAgICAgfSBlbHNlIGlm
IChpc0pTQnl0ZUFycmF5KGdsb2JhbERhdGEsIGJhc2VWYWx1ZSkgJiYgYXNCeXRlQXJyYXkoYmFz
ZVZhbHVlKS0+Y2FuQWNjZXNzSW5kZXgoaSkpIHsKICAgICAgICAgICAgICAgICBKU0J5dGVBcnJh
eSoganNCeXRlQXJyYXkgPSBhc0J5dGVBcnJheShiYXNlVmFsdWUpOwotICAgICAgICAgICAgICAg
IGRvdWJsZSBkVmFsdWUgPSAwOwogICAgICAgICAgICAgICAgIEpTVmFsdWUganNWYWx1ZSA9IGNh
bGxGcmFtZS0+cih2YWx1ZSkuanNWYWx1ZSgpOwogICAgICAgICAgICAgICAgIGlmIChqc1ZhbHVl
LmlzSW50MzIoKSkKICAgICAgICAgICAgICAgICAgICAganNCeXRlQXJyYXktPnNldEluZGV4KGks
IGpzVmFsdWUuYXNJbnQzMigpKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChqc1ZhbHVlLmdl
dE51bWJlcihkVmFsdWUpKQotICAgICAgICAgICAgICAgICAgICBqc0J5dGVBcnJheS0+c2V0SW5k
ZXgoaSwgZFZhbHVlKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChqc1ZhbHVlLmlzRG91Ymxl
KCkpCisgICAgICAgICAgICAgICAgICAgIGpzQnl0ZUFycmF5LT5zZXRJbmRleChpLCBqc1ZhbHVl
LmFzRG91YmxlKCkpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAg
YmFzZVZhbHVlLnB1dChjYWxsRnJhbWUsIGksIGpzVmFsdWUpOwogICAgICAgICAgICAgfSBlbHNl
CkBAIC00MDQ5LDE0ICs0MDQ4LDEwIEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAgICAgIEpT
VmFsdWUgc2NydXRpbmVlID0gY2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFsdWUo
KTsKICAgICAgICAgaWYgKHNjcnV0aW5lZS5pc0ludDMyKCkpCiAgICAgICAgICAgICB2UEMgKz0g
Y29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkub2Zmc2V0Rm9y
VmFsdWUoc2NydXRpbmVlLmFzSW50MzIoKSwgZGVmYXVsdE9mZnNldCk7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgZG91YmxlIHZhbHVlOwotICAgICAgICAgICAgaW50MzJfdCBpbnRWYWx1
ZTsKLSAgICAgICAgICAgIGlmIChzY3J1dGluZWUuZ2V0TnVtYmVyKHZhbHVlKSAmJiAoKGludFZh
bHVlID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSA9PSB2YWx1ZSkpCi0gICAgICAgICAg
ICAgICAgdlBDICs9IGNvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5k
ZXgpLm9mZnNldEZvclZhbHVlKGludFZhbHVlLCBkZWZhdWx0T2Zmc2V0KTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICB2UEMgKz0gZGVmYXVsdE9mZnNldDsKLSAgICAgICAgfQor
ICAgICAgICBlbHNlIGlmIChzY3J1dGluZWUuaXNEb3VibGUoKSAmJiBzY3J1dGluZWUuYXNEb3Vi
bGUoKSA9PSBzdGF0aWNfY2FzdDxpbnQzMl90PihzY3J1dGluZWUuYXNEb3VibGUoKSkpCisgICAg
ICAgICAgICB2UEMgKz0gY29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCkub2Zmc2V0Rm9yVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2NydXRpbmVlLmFzRG91
YmxlKCkpLCBkZWZhdWx0T2Zmc2V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdlBDICs9
IGRlZmF1bHRPZmZzZXQ7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9CiAgICAg
REVGSU5FX09QQ09ERShvcF9zd2l0Y2hfY2hhcikgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDk2NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMTIsOSArMTMxMiw4IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogICAgIH0KIAotICAgIGRvdWJsZSBsZWZ0ID0gMC4w
LCByaWdodDsKLSAgICBpZiAodjEuZ2V0TnVtYmVyKGxlZnQpICYmIHYyLmdldE51bWJlcihyaWdo
dCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobGVmdCArIHJpZ2h0
KSk7CisgICAgaWYgKHYxLmlzTnVtYmVyKCkgJiYgdjIuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcih2MS5hc051bWJlcigpICsgdjIuYXNOdW1iZXIo
KSkpOwogCiAgICAgLy8gQWxsIG90aGVyIGNhc2VzIGFyZSBwcmV0dHkgdW5jb21tb24KICAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzQWRkU2xvd0Nhc2UoY2FsbEZyYW1lLCB2MSwgdjIpOwpAQCAtMjEx
NywxMCArMjExNiw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8K
ICAgICBKU1ZhbHVlIHNyYzEgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwogICAgIEpT
VmFsdWUgc3JjMiA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAKLSAgICBkb3VibGUg
bGVmdDsKLSAgICBkb3VibGUgcmlnaHQ7Ci0gICAgaWYgKHNyYzEuZ2V0TnVtYmVyKGxlZnQpICYm
IHNyYzIuZ2V0TnVtYmVyKHJpZ2h0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihsZWZ0ICogcmlnaHQpKTsKKyAgICBpZiAoc3JjMS5pc051bWJlcigpICYmIHNyYzIu
aXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzcmMx
LmFzTnVtYmVyKCkgKiBzcmMyLmFzTnVtYmVyKCkpKTsKIAogICAgIENhbGxGcmFtZSogY2FsbEZy
YW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBqc051bWJl
cihzcmMxLnRvTnVtYmVyKGNhbGxGcmFtZSkgKiBzcmMyLnRvTnVtYmVyKGNhbGxGcmFtZSkpOwpA
QCAtMjU4NywxMCArMjU4NCw4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVl
LCBvcF8KICAgICBKU1ZhbHVlIHNyYzEgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwog
ICAgIEpTVmFsdWUgc3JjMiA9IHN0YWNrRnJhbWUuYXJnc1sxXS5qc1ZhbHVlKCk7CiAKLSAgICBk
b3VibGUgbGVmdDsKLSAgICBkb3VibGUgcmlnaHQ7Ci0gICAgaWYgKHNyYzEuZ2V0TnVtYmVyKGxl
ZnQpICYmIHNyYzIuZ2V0TnVtYmVyKHJpZ2h0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihsZWZ0IC0gcmlnaHQpKTsKKyAgICBpZiAoc3JjMS5pc051bWJlcigpICYm
IHNyYzIuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJl
cihzcmMxLmFzTnVtYmVyKCkgLSBzcmMyLmFzTnVtYmVyKCkpKTsKIAogICAgIENhbGxGcmFtZSog
Y2FsbEZyYW1lID0gc3RhY2tGcmFtZS5jYWxsRnJhbWU7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBq
c051bWJlcihzcmMxLnRvTnVtYmVyKGNhbGxGcmFtZSkgLSBzcmMyLnRvTnVtYmVyKGNhbGxGcmFt
ZSkpOwpAQCAtMjYyNSw5ICsyNjIwLDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3Bf
cHV0X2J5X3ZhbAogICAgICAgICAgICAgICAgIGpzQnl0ZUFycmF5LT5zZXRJbmRleChpLCB2YWx1
ZS5hc0ludDMyKCkpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgZG91YmxlIGRWYWx1ZSA9IDA7Ci0gICAgICAgICAgICAgICAg
aWYgKHZhbHVlLmdldE51bWJlcihkVmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGpzQnl0
ZUFycmF5LT5zZXRJbmRleChpLCBkVmFsdWUpOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5p
c051bWJlcigpKSB7CisgICAgICAgICAgICAgICAgICAgIGpzQnl0ZUFycmF5LT5zZXRJbmRleChp
LCB2YWx1ZS5hc051bWJlcigpKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTI2NjcsOSArMjY2MSw4IEBAIERFRklORV9T
VFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3B1dF9ieV92YWwKICAgICAgICAgICAgICAgICBqc0J5dGVB
cnJheS0+c2V0SW5kZXgoaSwgdmFsdWUuYXNJbnQzMigpKTsKICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGRvdWJsZSBkVmFsdWUg
PSAwOyAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAodmFsdWUuZ2V0TnVtYmVy
KGRWYWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAganNCeXRlQXJyYXktPnNldEluZGV4KGks
IGRWYWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAganNCeXRlQXJyYXktPnNldEluZGV4KGksIHZhbHVlLmFzTnVtYmVyKCkp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfQpAQCAtMjgzMyw5ICsyODI2LDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2Rl
ZEpTVmFsdWUsIG9wXwogCiAgICAgSlNWYWx1ZSBzcmMgPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNW
YWx1ZSgpOwogCi0gICAgZG91YmxlIHY7Ci0gICAgaWYgKHNyYy5nZXROdW1iZXIodikpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLXYpKTsKKyAgICBpZiAoc3JjLmlz
TnVtYmVyKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoLXNyYy5h
c051bWJlcigpKSk7CiAKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2Fs
bEZyYW1lOwogICAgIEpTVmFsdWUgcmVzdWx0ID0ganNOdW1iZXIoLXNyYy50b051bWJlcihjYWxs
RnJhbWUpKTsKQEAgLTI5NTAsMTAgKzI5NDIsOCBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNv
ZGVkSlNWYWx1ZSwgb3BfCiAgICAgSlNWYWx1ZSBzcmMxID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpz
VmFsdWUoKTsKICAgICBKU1ZhbHVlIHNyYzIgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgp
OwogCi0gICAgZG91YmxlIGxlZnQ7Ci0gICAgZG91YmxlIHJpZ2h0OwotICAgIGlmIChzcmMxLmdl
dE51bWJlcihsZWZ0KSAmJiBzcmMyLmdldE51bWJlcihyaWdodCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobGVmdCAvIHJpZ2h0KSk7CisgICAgaWYgKHNyYzEuaXNO
dW1iZXIoKSAmJiBzcmMyLmlzTnVtYmVyKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOdW1iZXIoc3JjMS5hc051bWJlcigpIC8gc3JjMi5hc051bWJlcigpKSk7CiAKICAgICBD
YWxsRnJhbWUqIGNhbGxGcmFtZSA9IHN0YWNrRnJhbWUuY2FsbEZyYW1lOwogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNOdW1iZXIoc3JjMS50b051bWJlcihjYWxsRnJhbWUpIC8gc3JjMi50b051bWJl
cihjYWxsRnJhbWUpKTsKQEAgLTMwNjIsNyArMzA1Miw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBKU1ZhbHVlIG51bWJlciA9IHYudG9KU051bWJlcihj
YWxsRnJhbWUpOwogICAgIENIRUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAKLSAgICBjYWxs
RnJhbWUtPnJlZ2lzdGVycygpW3N0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpXSA9IGpzTnVtYmVy
KG51bWJlci51bmNoZWNrZWRHZXROdW1iZXIoKSArIDEpOworICAgIGNhbGxGcmFtZS0+cmVnaXN0
ZXJzKClbc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCldID0ganNOdW1iZXIobnVtYmVyLmFzTnVt
YmVyKCkgKyAxKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG51bWJlcik7CiB9CiAKQEAg
LTMzNjEsNyArMzM1MSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBv
cF8KICAgICBKU1ZhbHVlIG51bWJlciA9IHYudG9KU051bWJlcihjYWxsRnJhbWUpOwogICAgIENI
RUNLX0ZPUl9FWENFUFRJT05fQVRfRU5EKCk7CiAKLSAgICBjYWxsRnJhbWUtPnJlZ2lzdGVycygp
W3N0YWNrRnJhbWUuYXJnc1sxXS5pbnQzMigpXSA9IGpzTnVtYmVyKG51bWJlci51bmNoZWNrZWRH
ZXROdW1iZXIoKSAtIDEpOworICAgIGNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3RhY2tGcmFtZS5h
cmdzWzFdLmludDMyKCldID0ganNOdW1iZXIobnVtYmVyLmFzTnVtYmVyKCkgLSAxKTsKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKG51bWJlcik7CiB9CiAKQEAgLTM2NjYsMTQgKzM2NTYsMTMg
QEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX3N3aXRjaF9pbQogCiAgICAgaWYgKHNj
cnV0aW5lZS5pc0ludDMyKCkpCiAgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmltbWVkaWF0ZVN3
aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlGb3JWYWx1ZShzY3J1dGluZWUuYXNJbnQzMigp
KS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgIGVsc2UgewotICAgICAgICBkb3VibGUgdmFsdWU7
Ci0gICAgICAgIGludDMyX3QgaW50VmFsdWU7Ci0gICAgICAgIGlmIChzY3J1dGluZWUuZ2V0TnVt
YmVyKHZhbHVlKSAmJiAoKGludFZhbHVlID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSA9
PSB2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hK
dW1wVGFibGUodGFibGVJbmRleCkuY3RpRm9yVmFsdWUoaW50VmFsdWUpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBjb2RlQmxvY2stPmltbWVk
aWF0ZVN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlEZWZhdWx0LmV4ZWN1dGFibGVBZGRy
ZXNzKCk7CisgICAgaWYgKHNjcnV0aW5lZS5pc0RvdWJsZSgpKSB7CisgICAgICAgIGRvdWJsZSB2
YWx1ZSA9IHNjcnV0aW5lZS5hc0RvdWJsZSgpOworICAgICAgICBpbnQzMl90IGludDMyVmFsdWUg
PSB2YWx1ZTsKKyAgICAgICAgaWYgKGludDMyVmFsdWUgPT0gdmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4gY29kZUJsb2NrLT5pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3Rp
Rm9yVmFsdWUoaW50MzJWYWx1ZSkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CisgICAgcmV0
dXJuIGNvZGVCbG9jay0+aW1tZWRpYXRlU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aURl
ZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCosIG9wX3N3aXRjaF9jaGFyKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
RGF0ZUluc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZUluc3RhbmNlLmgJKHJldmlzaW9uIDk2NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgICAg
IH0KIAotICAgICAgICBkb3VibGUgaW50ZXJuYWxOdW1iZXIoKSBjb25zdCB7IHJldHVybiBpbnRl
cm5hbFZhbHVlKCkudW5jaGVja2VkR2V0TnVtYmVyKCk7IH0KKyAgICAgICAgZG91YmxlIGludGVy
bmFsTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gaW50ZXJuYWxWYWx1ZSgpLmFzTnVtYmVyKCk7IH0K
IAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gc19pbmZvOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Q
cm90b3R5cGUuY3BwCShyZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5
NCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25Qcm8KICAgICAgICAg
QVNTRVJUKHRhcmdldC5nZXQoZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkuaXNO
dW1iZXIoKSk7CiAgICAgICAgIC8vIGEuIExldCBMIGJlIHRoZSBsZW5ndGggcHJvcGVydHkgb2Yg
VGFyZ2V0IG1pbnVzIHRoZSBsZW5ndGggb2YgQS4KICAgICAgICAgLy8gYi4gU2V0IHRoZSBsZW5n
dGggb3duIHByb3BlcnR5IG9mIEYgdG8gZWl0aGVyIDAgb3IgTCwgd2hpY2hldmVyIGlzIGxhcmdl
ci4KLSAgICAgICAgdW5zaWduZWQgdGFyZ2V0TGVuZ3RoID0gKHVuc2lnbmVkKXRhcmdldC5nZXQo
ZXhlYywgZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCkudW5jaGVja2VkR2V0TnVtYmVyKCk7
CisgICAgICAgIHVuc2lnbmVkIHRhcmdldExlbmd0aCA9ICh1bnNpZ25lZCl0YXJnZXQuZ2V0KGV4
ZWMsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpLmFzTnVtYmVyKCk7CiAgICAgICAgIGlm
ICh0YXJnZXRMZW5ndGggPiBudW1Cb3VuZEFyZ3MpCiAgICAgICAgICAgICBsZW5ndGggPSB0YXJn
ZXRMZW5ndGggLSBudW1Cb3VuZEFyZ3M7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHJldmlzaW9uIDk2NTcwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4Miw4ICs4
ODIsOCBAQCB2b2lkIEpTQXJyYXk6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsCiAKIHN0YXRp
YyBpbnQgY29tcGFyZU51bWJlcnNGb3JRU29ydChjb25zdCB2b2lkKiBhLCBjb25zdCB2b2lkKiBi
KQogewotICAgIGRvdWJsZSBkYSA9IHN0YXRpY19jYXN0PGNvbnN0IEpTVmFsdWUqPihhKS0+dW5j
aGVja2VkR2V0TnVtYmVyKCk7Ci0gICAgZG91YmxlIGRiID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNW
YWx1ZSo+KGIpLT51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICBkb3VibGUgZGEgPSBzdGF0aWNf
Y2FzdDxjb25zdCBKU1ZhbHVlKj4oYSktPmFzTnVtYmVyKCk7CisgICAgZG91YmxlIGRiID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgSlNWYWx1ZSo+KGIpLT5hc051bWJlcigpOwogICAgIHJldHVybiAoZGEg
PiBkYikgLSAoZGEgPCBkYik7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmNwcAkocmV2aXNpb24gOTY1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsMTMgKzExOCw2IEBAIEpT
T2JqZWN0KiBKU0NlbGw6OnRvVGhpc09iamVjdChFeGVjU3RhdGUKICAgICByZXR1cm4gdG9PYmpl
Y3QoZXhlYywgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpKTsKIH0KIAotSlNWYWx1ZSBKU0Nl
bGw6OmdldEpTTnVtYmVyKCkgY29uc3QKLXsKLSAgICBpZiAoc3RydWN0dXJlKCktPnR5cGVJbmZv
KCkuaXNOdW1iZXJPYmplY3QoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IE51
bWJlck9iamVjdCo+KHRoaXMpLT5nZXRKU051bWJlcigpOwotICAgIHJldHVybiBKU1ZhbHVlKCk7
Ci19Ci0KIEpTVmFsdWUgSlNDZWxsOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqIGV4ZWMsIFByZWZl
cnJlZFByaW1pdGl2ZVR5cGUgcHJlZmVycmVkVHlwZSkgY29uc3QKIHsKICAgICBpZiAoaXNTdHJp
bmcoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCShyZXZpc2lv
biA5NjU3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC05Niw3ICs5Niw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0
dWFsIGJvb2wgZGVsZXRlUHJvcGVydHkoRXhlY1N0YXRlKiwgdW5zaWduZWQgcHJvcGVydHlOYW1l
KTsKIAogICAgICAgICB2aXJ0dWFsIEpTT2JqZWN0KiB0b1RoaXNPYmplY3QoRXhlY1N0YXRlKikg
Y29uc3Q7Ci0gICAgICAgIEpTVmFsdWUgZ2V0SlNOdW1iZXIoKSBjb25zdDsKIAogICAgICAgICB2
b2lkKiB2cHRyKCkgY29uc3QgeyBBU1NFUlQoIWlzWmFwcGVkKCkpOyByZXR1cm4gKnJlaW50ZXJw
cmV0X2Nhc3Q8dm9pZCogY29uc3QqPih0aGlzKTsgfQogICAgICAgICB2b2lkIHNldFZQdHIodm9p
ZCogdnB0cikgeyAqcmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KHRoaXMpID0gdnB0cjsgQVNTRVJU
KCFpc1phcHBlZCgpKTsgfQpAQCAtMzAyLDE1ICszMDEsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgcmV0dXJuIHRvTnVtYmVyU2xvd0Nhc2UoZXhlYyk7CiAgICAgfQogCi0gICAgaW5saW5l
IEpTVmFsdWUgSlNWYWx1ZTo6Z2V0SlNOdW1iZXIoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYg
KGlzSW50MzIoKSB8fCBpc0RvdWJsZSgpKQotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAg
ICAgICBpZiAoaXNDZWxsKCkpCi0gICAgICAgICAgICByZXR1cm4gYXNDZWxsKCktPmdldEpTTnVt
YmVyKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgfQotCiAgICAgaW5saW5lIEpT
T2JqZWN0KiBKU1ZhbHVlOjp0b09iamVjdChFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gaXNDZWxsKCkgPyBhc0NlbGwoKS0+dG9PYmplY3QoZXhlYywgZXhlYy0+
bGV4aWNhbEdsb2JhbE9iamVjdCgpKSA6IHRvT2JqZWN0U2xvd0Nhc2UoZXhlYywgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHJldmlzaW9uIDk2
NTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5j
dGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NzMsOSArNDczLDExIEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZ2xvYmFsRnVuY1AKICAgICAvLyB2YWx1ZXMgaW4gdGhlIHJhbmdl
IC0xIDwgbiA8PSAtMTBeLTYgbmVlZCB0byB0cnVuY2F0ZSB0byAtMCwgbm90IDAuCiAgICAgc3Rh
dGljIGNvbnN0IGRvdWJsZSB0ZW5Ub1RoZU1pbnVzNiA9IDAuMDAwMDAxOwogICAgIHN0YXRpYyBj
b25zdCBkb3VibGUgaW50TWF4UGx1c09uZSA9IDIxNDc0ODM2NDguMDsKLSAgICBkb3VibGUgbjsK
LSAgICBpZiAodmFsdWUuZ2V0TnVtYmVyKG4pICYmICgobiA8IGludE1heFBsdXNPbmUgJiYgbiA+
PSB0ZW5Ub1RoZU1pbnVzNikgfHwgIW4pICYmIHJhZGl4VmFsdWUuaXNVbmRlZmluZWRPck51bGwo
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihzdGF0aWNfY2FzdDxp
bnQzMl90PihuKSkpOworICAgIGlmICh2YWx1ZS5pc051bWJlcigpKSB7CisgICAgICAgIGRvdWJs
ZSBuID0gdmFsdWUuYXNOdW1iZXIoKTsKKyAgICAgICAgaWYgKCgobiA8IGludE1heFBsdXNPbmUg
JiYgbiA+PSB0ZW5Ub1RoZU1pbnVzNikgfHwgIW4pICYmIHJhZGl4VmFsdWUuaXNVbmRlZmluZWRP
ck51bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoc3Rh
dGljX2Nhc3Q8aW50MzJfdD4obikpKTsKKyAgICB9CiAKICAgICAvLyBJZiBUb1N0cmluZyB0aHJv
d3MsIHdlIHNob3VsZG4ndCBjYWxsIFRvSW50MzIuCiAgICAgVVN0cmluZyBzID0gdmFsdWUudG9T
dHJpbmcoZXhlYyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2Jq
ZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09O
T2JqZWN0LmNwcAkocmV2aXNpb24gOTY1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09OT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDggKzE1Myw4IEBAIHN0
YXRpYyBpbmxpbmUgVVN0cmluZyBnYXAoRXhlY1N0YXRlKiBleGUKICAgICBzcGFjZSA9IHVud3Jh
cEJveGVkUHJpbWl0aXZlKGV4ZWMsIHNwYWNlKTsKIAogICAgIC8vIElmIHRoZSBzcGFjZSB2YWx1
ZSBpcyBhIG51bWJlciwgY3JlYXRlIGEgZ2FwIHN0cmluZyB3aXRoIHRoYXQgbnVtYmVyIG9mIHNw
YWNlcy4KLSAgICBkb3VibGUgc3BhY2VDb3VudDsKLSAgICBpZiAoc3BhY2UuZ2V0TnVtYmVyKHNw
YWNlQ291bnQpKSB7CisgICAgaWYgKHNwYWNlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgZG91Ymxl
IHNwYWNlQ291bnQgPSBzcGFjZS5hc051bWJlcigpOwogICAgICAgICBpbnQgY291bnQ7CiAgICAg
ICAgIGlmIChzcGFjZUNvdW50ID4gbWF4R2FwTGVuZ3RoKQogICAgICAgICAgICAgY291bnQgPSBt
YXhHYXBMZW5ndGg7CkBAIC0yMjgsOSArMjI4LDggQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmaWVy
KEV4ZWNTdGF0ZSogZXhlYwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICBkb3VibGUgdmFsdWUgPSAwOwotICAgICAgICAgICAgaWYgKG5hbWUu
Z2V0TnVtYmVyKHZhbHVlKSkgewotICAgICAgICAgICAgICAgIG1fYXJyYXlSZXBsYWNlclByb3Bl
cnR5TmFtZXMuYWRkKElkZW50aWZpZXI6OmZyb20oZXhlYywgdmFsdWUpKTsKKyAgICAgICAgICAg
IGlmIChuYW1lLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBtX2FycmF5UmVwbGFjZXJQ
cm9wZXJ0eU5hbWVzLmFkZChJZGVudGlmaWVyOjpmcm9tKGV4ZWMsIG5hbWUuYXNOdW1iZXIoKSkp
OwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC0zNzYsNyAr
Mzc1LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdpZmllcgogICAgICAg
ICByZXR1cm4gU3RyaW5naWZ5RmFpbGVkOwogCiAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKSB7
Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVlLmdldEJvb2xlYW4oKSA/ICJ0cnVlIiA6ICJm
YWxzZSIpOworICAgICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZS5pc1RydWUoKSA/ICJ0cnVlIiA6
ICJmYWxzZSIpOwogICAgICAgICByZXR1cm4gU3RyaW5naWZ5U3VjY2VlZGVkOwogICAgIH0KIApA
QCAtMzg2LDEyICszODUsMTIgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdp
ZmllcgogICAgICAgICByZXR1cm4gU3RyaW5naWZ5U3VjY2VlZGVkOwogICAgIH0KIAotICAgIGRv
dWJsZSBudW1lcmljVmFsdWU7Ci0gICAgaWYgKHZhbHVlLmdldE51bWJlcihudW1lcmljVmFsdWUp
KSB7Ci0gICAgICAgIGlmICghaXNmaW5pdGUobnVtZXJpY1ZhbHVlKSkKKyAgICBpZiAodmFsdWUu
aXNOdW1iZXIoKSkgeworICAgICAgICBkb3VibGUgbnVtYmVyID0gdmFsdWUuYXNOdW1iZXIoKTsK
KyAgICAgICAgaWYgKCFpc2Zpbml0ZShudW1iZXIpKQogICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoIm51bGwiKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoVVN0
cmluZzo6bnVtYmVyKG51bWVyaWNWYWx1ZSkpOworICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
VVN0cmluZzo6bnVtYmVyKG51bWJlcikpOwogICAgICAgICByZXR1cm4gU3RyaW5naWZ5U3VjY2Vl
ZGVkOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUu
aAkocmV2aXNpb24gOTY1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Zh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw2ICsxNTcsOCBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgaW50MzJfdCBhc0ludDMyKCkgY29uc3Q7CiAgICAgICAgIHVpbnQzMl90IGFzVUlu
dDMyKCkgY29uc3Q7CiAgICAgICAgIGRvdWJsZSBhc0RvdWJsZSgpIGNvbnN0OworICAgICAgICBi
b29sIGFzQm9vbGVhbigpIGNvbnN0OworICAgICAgICBkb3VibGUgYXNOdW1iZXIoKSBjb25zdDsK
IAogICAgICAgICAvLyBRdWVyeWluZyB0aGUgdHlwZS4KICAgICAgICAgYm9vbCBpc1VuZGVmaW5l
ZCgpIGNvbnN0OwpAQCAtMTcxLDEwICsxNzMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBpbmhlcml0cyhjb25zdCBDbGFzc0luZm8qKSBjb25zdDsKICAgICAgICAgCiAgICAgICAg
IC8vIEV4dHJhY3RpbmcgdGhlIHZhbHVlLgotICAgICAgICBib29sIGdldEJvb2xlYW4oYm9vbCYp
IGNvbnN0OwotICAgICAgICBib29sIGdldEJvb2xlYW4oKSBjb25zdDsgLy8gZmFsc2UgaWYgbm90
IGEgYm9vbGVhbgotICAgICAgICBib29sIGdldE51bWJlcihkb3VibGUmKSBjb25zdDsKLSAgICAg
ICAgZG91YmxlIHVuY2hlY2tlZEdldE51bWJlcigpIGNvbnN0OwogICAgICAgICBib29sIGdldFN0
cmluZyhFeGVjU3RhdGUqIGV4ZWMsIFVTdHJpbmcmKSBjb25zdDsKICAgICAgICAgVVN0cmluZyBn
ZXRTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdDsgLy8gbnVsbCBzdHJpbmcgaWYgbm90IGEg
c3RyaW5nCiAgICAgICAgIEpTT2JqZWN0KiBnZXRPYmplY3QoKSBjb25zdDsgLy8gMCBpZiBub3Qg
YW4gb2JqZWN0CkBAIC0yMjUsOCArMjIzLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0
YXRpYyBib29sIHN0cmljdEVxdWFsU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYx
LCBKU1ZhbHVlIHYyKTsKICAgICAgICAgc3RhdGljIGJvb2wgc3RyaWN0RXF1YWxTbG93Q2FzZUlu
bGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpOwogCi0gICAgICAg
IEpTVmFsdWUgZ2V0SlNOdW1iZXIoKSBjb25zdDsgLy8gSlNWYWx1ZSgpIGlmIHRoaXMgaXMgbm90
IGEgSlNOdW1iZXIgb3IgbnVtYmVyIG9iamVjdAotCiAgICAgICAgIGJvb2wgaXNDZWxsKCkgY29u
c3Q7CiAgICAgICAgIEpTQ2VsbCogYXNDZWxsKCkgY29uc3Q7CiAgICAgICAgIGJvb2wgaXNWYWxp
ZENhbGxlZSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZUlu
bGluZU1ldGhvZHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1ZhbHVlSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWVJbmxpbmVNZXRob2RzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDcgKzU0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBhc0ludDMy
KCk7CiAgICAgfQogCi0gICAgaW5saW5lIGRvdWJsZSBKU1ZhbHVlOjp1bmNoZWNrZWRHZXROdW1i
ZXIoKSBjb25zdAorICAgIGlubGluZSBkb3VibGUgSlNWYWx1ZTo6YXNOdW1iZXIoKSBjb25zdAog
ICAgIHsKICAgICAgICAgQVNTRVJUKGlzTnVtYmVyKCkpOwogICAgICAgICByZXR1cm4gaXNJbnQz
MigpID8gYXNJbnQzMigpIDogYXNEb3VibGUoKTsKQEAgLTcwLDMzICs3MCw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICByZXR1cm4gSlNWYWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OnF1aWV0X05hTigpKTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpnZXRO
dW1iZXIoZG91YmxlJiByZXN1bHQpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXNJbnQzMigp
KSB7Ci0gICAgICAgICAgICByZXN1bHQgPSBhc0ludDMyKCk7Ci0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoaXNEb3VibGUoKSkgewotICAgICAgICAgICAg
cmVzdWx0ID0gYXNEb3VibGUoKTsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVl
OjpnZXRCb29sZWFuKGJvb2wmIHYpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoaXNUcnVlKCkp
IHsKLSAgICAgICAgICAgIHYgPSB0cnVlOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKGlzRmFsc2UoKSkgewotICAgICAgICAgICAgdiA9IGZhbHNlOwot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KICAgICBpbmxpbmUgSlNWYWx1ZTo6SlNWYWx1ZShjaGFyIGkp
CiAgICAgewogICAgICAgICAqdGhpcyA9IEpTVmFsdWUoc3RhdGljX2Nhc3Q8aW50MzJfdD4oaSkp
OwpAQCAtMzQ0LDcgKzMxNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICByZXR1cm4gaXNU
cnVlKCkgfHwgaXNGYWxzZSgpOwogICAgIH0KIAotICAgIGlubGluZSBib29sIEpTVmFsdWU6Omdl
dEJvb2xlYW4oKSBjb25zdAorICAgIGlubGluZSBib29sIEpTVmFsdWU6OmFzQm9vbGVhbigpIGNv
bnN0CiAgICAgewogICAgICAgICBBU1NFUlQoaXNCb29sZWFuKCkpOwogICAgICAgICByZXR1cm4g
cGF5bG9hZCgpOwpAQCAtNDIwLDkgKzM5Myw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBy
ZXR1cm4gYXNWYWx1ZSgpID09IEpTVmFsdWUoSlNGYWxzZSk7CiAgICAgfQogCi0gICAgaW5saW5l
IGJvb2wgSlNWYWx1ZTo6Z2V0Qm9vbGVhbigpIGNvbnN0CisgICAgaW5saW5lIGJvb2wgSlNWYWx1
ZTo6YXNCb29sZWFuKCkgY29uc3QKICAgICB7Ci0gICAgICAgIEFTU0VSVChhc1ZhbHVlKCkgPT0g
anNCb29sZWFuKHRydWUpIHx8IGFzVmFsdWUoKSA9PSBqc0Jvb2xlYW4oZmFsc2UpKTsKKyAgICAg
ICAgQVNTRVJUKGlzQm9vbGVhbigpKTsKICAgICAgICAgcmV0dXJuIGFzVmFsdWUoKSA9PSBqc0Jv
b2xlYW4odHJ1ZSk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OdW1iZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL051bWJlck9iamVjdC5jcHAJKHJldmlzaW9uIDk2NTcwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIs
MTEgKzQyLDYgQEAgdm9pZCBOdW1iZXJPYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvYgogICAg
IEFTU0VSVChpbmhlcml0cygmc19pbmZvKSk7CiB9CiAKLUpTVmFsdWUgTnVtYmVyT2JqZWN0Ojpn
ZXRKU051bWJlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGludGVybmFsVmFsdWUoKTsKLX0KLQog
TnVtYmVyT2JqZWN0KiBjb25zdHJ1Y3ROdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIG51bWJlcikKIHsKICAgICBOdW1iZXJPYmplY3Qq
IG9iamVjdCA9IE51bWJlck9iamVjdDo6Y3JlYXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgZ2xvYmFs
T2JqZWN0LT5udW1iZXJPYmplY3RTdHJ1Y3R1cmUoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkocmV2aXNpb24gOTY1NzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtNDYsOCArNDYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKGdsb2JhbERhdGEsIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhOdW1iZXJPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksICZzX2luZm8p
OwogICAgICAgICB9Ci0KLSAgICAgICAgSlNWYWx1ZSBnZXRKU051bWJlcigpIGNvbnN0OwogICAg
IH07CiAKICAgICBOdW1iZXJPYmplY3QqIGNvbnN0cnVjdE51bWJlcihFeGVjU3RhdGUqLCBKU0ds
b2JhbE9iamVjdCosIEpTVmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvTnVtYmVyUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9OdW1iZXJQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk1LDEzICs5NSwyNCBAQCBib29sIE51bWJlclByb3RvdHlwZTo6Z2V0T3duUHJvcGVy
dHlEZXNjCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgdG9U
aGlzTnVtYmVyKEpTVmFsdWUgdGhpc1ZhbHVlLCBkb3VibGUgJngpCitzdGF0aWMgQUxXQVlTX0lO
TElORSBib29sIHRvVGhpc051bWJlcihKU1ZhbHVlIHRoaXNWYWx1ZSwgZG91YmxlJiB4KQogewot
ICAgIEpTVmFsdWUgdiA9IHRoaXNWYWx1ZS5nZXRKU051bWJlcigpOwotICAgIGlmIChVTkxJS0VM
WSghdikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB4ID0gdi51bmNoZWNrZWRHZXROdW1i
ZXIoKTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodGhpc1ZhbHVlLmlzSW50MzIoKSkgewor
ICAgICAgICB4ID0gdGhpc1ZhbHVlLmFzSW50MzIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorCisgICAgaWYgKHRoaXNWYWx1ZS5pc0RvdWJsZSgpKSB7CisgICAgICAgIHggPSB0aGlz
VmFsdWUuYXNEb3VibGUoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IGlmICh0aGlzVmFsdWUuaXNDZWxsKCkgJiYgdGhpc1ZhbHVlLmFzQ2VsbCgpLT5zdHJ1Y3R1cmUo
KS0+dHlwZUluZm8oKS5pc051bWJlck9iamVjdCgpKSB7CisgICAgICAgIHggPSBzdGF0aWNfY2Fz
dDxjb25zdCBOdW1iZXJPYmplY3QqPih0aGlzVmFsdWUuYXNDZWxsKCkpLT5pbnRlcm5hbFZhbHVl
KCkuYXNOdW1iZXIoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IGZhbHNlOwogfQogCiBzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGdldEludGVnZXJBcmd1bWVu
dEluUmFuZ2UoRXhlY1N0YXRlKiBleGVjLCBpbnQgbG93LCBpbnQgaGlnaCwgaW50JiByZXN1bHQs
IGJvb2wmIGlzVW5kZWZpbmVkKQpAQCAtMzMzLDcgKzM0NCw2IEBAIHN0YXRpYyBjaGFyKiB0b1N0
cmluZ1dpdGhSYWRpeChSYWRpeEJ1ZmYKIC8vIHRvIGFyZ3VtZW50LXBsdXMtb25lIHNpZ25pZmlj
YW50IGZpZ3VyZXMpLgogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1
bmNUb0V4cG9uZW50aWFsKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICAvLyBHZXQgeCAodGhlIGRv
dWJsZSB2YWx1ZSBvZiB0aGlzLCB3aGljaCBzaG91bGQgYmUgYSBOdW1iZXIpLgogICAgIGRvdWJs
ZSB4OwogICAgIGlmICghdG9UaGlzTnVtYmVyKGV4ZWMtPmhvc3RUaGlzVmFsdWUoKSwgeCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwpAQCAtMzY1LDEyICszNzUsOSBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAvLyBtZXRob2Qgd2ls
bCBpbnN0ZWFkIGZhbGxiYWNrIHRvIGNhbGxpbmcgVG9TdHJpbmcuIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb0ZpeGVkKEV4ZWNTdGF0ZSogZXhlYykKIHsK
LSAgICAvLyBHZXQgeCAodGhlIGRvdWJsZSB2YWx1ZSBvZiB0aGlzLCB3aGljaCBzaG91bGQgYmUg
YSBOdW1iZXIpLgotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1ZSgp
OwotICAgIEpTVmFsdWUgdiA9IHRoaXNWYWx1ZS5nZXRKU051bWJlcigpOwotICAgIGlmICghdikK
KyAgICBkb3VibGUgeDsKKyAgICBpZiAoIXRvVGhpc051bWJlcihleGVjLT5ob3N0VGhpc1ZhbHVl
KCksIHgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBkb3Vi
bGUgeCA9IHYudW5jaGVja2VkR2V0TnVtYmVyKCk7CiAKICAgICAvLyBHZXQgdGhlIGFyZ3VtZW50
LiAKICAgICBpbnQgZGVjaW1hbFBsYWNlczsKQEAgLTQwNSwxMiArNDEyLDkgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90bwogLy8gd2l0aCBzbWFsbGVyIHZhbHVlcyBj
b252ZXJ0ZWQgdG8gZXhwb25lbnRpYWwgcmVwcmVzZW50YXRpb24uCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVuY1RvUHJlY2lzaW9uKEV4ZWNTdGF0ZSogZXhlYykK
IHsKLSAgICAvLyBHZXQgeCAodGhlIGRvdWJsZSB2YWx1ZSBvZiB0aGlzLCB3aGljaCBzaG91bGQg
YmUgYSBOdW1iZXIpLgotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9zdFRoaXNWYWx1
ZSgpOwotICAgIEpTVmFsdWUgdiA9IHRoaXNWYWx1ZS5nZXRKU051bWJlcigpOwotICAgIGlmICgh
dikKKyAgICBkb3VibGUgeDsKKyAgICBpZiAoIXRvVGhpc051bWJlcihleGVjLT5ob3N0VGhpc1Zh
bHVlKCksIHgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJvcihleGVjKTsKLSAgICBk
b3VibGUgeCA9IHYudW5jaGVja2VkR2V0TnVtYmVyKCk7CiAKICAgICAvLyBHZXQgdGhlIGFyZ3Vt
ZW50LiAKICAgICBpbnQgc2lnbmlmaWNhbnRGaWd1cmVzOwpAQCAtNDM2LDkgKzQ0MCw4IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG8KIAogRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBudW1iZXJQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgSlNWYWx1ZSB0aGlzVmFsdWUgPSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7Ci0gICAgSlNW
YWx1ZSB2ID0gdGhpc1ZhbHVlLmdldEpTTnVtYmVyKCk7Ci0gICAgaWYgKCF2KQorICAgIGRvdWJs
ZSB4OworICAgIGlmICghdG9UaGlzTnVtYmVyKGV4ZWMtPmhvc3RUaGlzVmFsdWUoKSwgeCkpCiAg
ICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogCiAgICAgSlNWYWx1ZSByYWRp
eFZhbHVlID0gZXhlYy0+YXJndW1lbnQoMCk7CkBAIC00NTEsMjMgKzQ1NCwyMCBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAgICAgICAgIHJhZGl4ID0gc3RhdGlj
X2Nhc3Q8aW50PihyYWRpeFZhbHVlLnRvSW50ZWdlcihleGVjKSk7IC8vIG5hbiAtPiAwCiAKICAg
ICBpZiAocmFkaXggPT0gMTApCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJp
bmcoZXhlYywgdi50b1N0cmluZyhleGVjKSkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzU3RyaW5nKGV4ZWMsIGpzTnVtYmVyKHgpLnRvU3RyaW5nKGV4ZWMpKSk7CiAKICAgICAv
LyBGYXN0IHBhdGggZm9yIG51bWJlciB0byBjaGFyYWN0ZXIgY29udmVyc2lvbi4KICAgICBpZiAo
cmFkaXggPT0gMzYpIHsKLSAgICAgICAgaWYgKHYuaXNJbnQzMigpKSB7Ci0gICAgICAgICAgICBp
bnQgeCA9IHYuYXNJbnQzMigpOwotICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PHVuc2lnbmVk
Pih4KSA8IDM2KSB7IC8vIEV4Y2x1ZGUgbmVnYXRpdmVzCi0gICAgICAgICAgICAgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVD
aGFyYWN0ZXJTdHJpbmcoZ2xvYmFsRGF0YSwgcmFkaXhEaWdpdHNbeF0pKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgdW5zaWduZWQgYyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPih4KTsKKyAgICAg
ICAgaWYgKGMgPT0geCAmJiBjIDwgMzYpIHsKKyAgICAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGdsb2JhbERhdGEtPnNtYWxsU3RyaW5ncy5zaW5nbGVDaGFyYWN0ZXJTdHJpbmco
Z2xvYmFsRGF0YSwgcmFkaXhEaWdpdHNbY10pKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlm
IChyYWRpeCA8IDIgfHwgcmFkaXggPiAzNikKICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihl
eGVjLCBjcmVhdGVSYW5nZUVycm9yKGV4ZWMsICJ0b1N0cmluZygpIHJhZGl4IGFyZ3VtZW50IG11
c3QgYmUgYmV0d2VlbiAyIGFuZCAzNiIpKTsKIAotICAgIGRvdWJsZSB4ID0gdi51bmNoZWNrZWRH
ZXROdW1iZXIoKTsKICAgICBpZiAoIWlzZmluaXRlKHgpKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzU3RyaW5nKGV4ZWMsIFVTdHJpbmc6Om51bWJlcih4KSkpOwogCkBAIC00Nzcs
MjQgKzQ3NywxOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvCiAK
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbnVtYmVyUHJvdG9GdW5jVG9Mb2NhbGVTdHJp
bmcoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhlYy0+aG9z
dFRoaXNWYWx1ZSgpOwotICAgIC8vIEZJWE1FOiBOb3QgaW1wbGVtZW50ZWQgeWV0LgotCi0gICAg
SlNWYWx1ZSB2ID0gdGhpc1ZhbHVlLmdldEpTTnVtYmVyKCk7Ci0gICAgaWYgKCF2KQorICAgIGRv
dWJsZSB4OworICAgIGlmICghdG9UaGlzTnVtYmVyKGV4ZWMtPmhvc3RUaGlzVmFsdWUoKSwgeCkp
CiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOwogCi0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCB2LnRvU3RyaW5nKGV4ZWMpKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyhleGVjLCBqc051bWJlcih4KS50b1N0cmluZyhl
eGVjKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG51bWJlclByb3RvRnVu
Y1ZhbHVlT2YoRXhlY1N0YXRlKiBleGVjKQogewotICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0gZXhl
Yy0+aG9zdFRoaXNWYWx1ZSgpOwotICAgIEpTVmFsdWUgdiA9IHRoaXNWYWx1ZS5nZXRKU051bWJl
cigpOwotICAgIGlmICghdikKKyAgICBkb3VibGUgeDsKKyAgICBpZiAoIXRvVGhpc051bWJlcihl
eGVjLT5ob3N0VGhpc1ZhbHVlKCksIHgpKQogICAgICAgICByZXR1cm4gdGhyb3dWTVR5cGVFcnJv
cihleGVjKTsKLQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodik7CisgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcih4KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24g
OTY1NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTI0OCw3ICsyNDgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB7CiAg
ICAgICAgIGRvIHsKICAgICAgICAgICAgIGlmICh2MS5pc051bWJlcigpICYmIHYyLmlzTnVtYmVy
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHYxLnVuY2hlY2tlZEdldE51bWJlcigpID09IHYy
LnVuY2hlY2tlZEdldE51bWJlcigpOworICAgICAgICAgICAgICAgIHJldHVybiB2MS5hc051bWJl
cigpID09IHYyLmFzTnVtYmVyKCk7CiAKICAgICAgICAgICAgIGJvb2wgczEgPSB2MS5pc1N0cmlu
ZygpOwogICAgICAgICAgICAgYm9vbCBzMiA9IHYyLmlzU3RyaW5nKCk7CkBAIC0yOTksMTAgKzI5
OSwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICAgICAgaWYgKHYxLmlzQm9vbGVhbigp
KSB7CiAgICAgICAgICAgICAgICAgaWYgKHYyLmlzTnVtYmVyKCkpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxkb3VibGU+KHYxLmdldEJvb2xlYW4oKSkgPT0gdjIudW5j
aGVja2VkR2V0TnVtYmVyKCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxkb3VibGU+KHYxLmFzQm9vbGVhbigpKSA9PSB2Mi5hc051bWJlcigpOwogICAgICAgICAgICAg
fSBlbHNlIGlmICh2Mi5pc0Jvb2xlYW4oKSkgewogICAgICAgICAgICAgICAgIGlmICh2MS5pc051
bWJlcigpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdjEudW5jaGVja2VkR2V0TnVtYmVy
KCkgPT0gc3RhdGljX2Nhc3Q8ZG91YmxlPih2Mi5nZXRCb29sZWFuKCkpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdjEuYXNOdW1iZXIoKSA9PSBzdGF0aWNfY2FzdDxkb3VibGU+KHYyLmFz
Qm9vbGVhbigpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgcmV0dXJuIHYxID09IHYy
OwpAQCAtMzI2LDcgKzMyNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJu
IHYxID09IHYyOwogCiAgICAgICAgIGlmICh2MS5pc051bWJlcigpICYmIHYyLmlzTnVtYmVyKCkp
Ci0gICAgICAgICAgICByZXR1cm4gdjEudW5jaGVja2VkR2V0TnVtYmVyKCkgPT0gdjIudW5jaGVj
a2VkR2V0TnVtYmVyKCk7CisgICAgICAgICAgICByZXR1cm4gdjEuYXNOdW1iZXIoKSA9PSB2Mi5h
c051bWJlcigpOwogCiAgICAgICAgIGlmICghdjEuaXNDZWxsKCkgfHwgIXYyLmlzQ2VsbCgpKQog
ICAgICAgICAgICAgcmV0dXJuIHYxID09IHYyOwpAQCAtMzQzLDE1ICszNDMsMTUgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGlmICh2MS5pc0ludDMyKCkgJiYgdjIuaXNJbnQzMigpKQogICAg
ICAgICAgICAgcmV0dXJuIHYxLmFzSW50MzIoKSA8IHYyLmFzSW50MzIoKTsKIAotICAgICAgICBk
b3VibGUgbjE7Ci0gICAgICAgIGRvdWJsZSBuMjsKLSAgICAgICAgaWYgKHYxLmdldE51bWJlcihu
MSkgJiYgdjIuZ2V0TnVtYmVyKG4yKSkKLSAgICAgICAgICAgIHJldHVybiBuMSA8IG4yOworICAg
ICAgICBpZiAodjEuaXNOdW1iZXIoKSAmJiB2Mi5pc051bWJlcigpKQorICAgICAgICAgICAgcmV0
dXJuIHYxLmFzTnVtYmVyKCkgPCB2Mi5hc051bWJlcigpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKICAgICAgICAgaWYgKGlz
SlNTdHJpbmcoZ2xvYmFsRGF0YSwgdjEpICYmIGlzSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdjIpKQog
ICAgICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKHYxKS0+dmFsdWUoY2FsbEZyYW1lKSA8IGFzU3Ry
aW5nKHYyKS0+dmFsdWUoY2FsbEZyYW1lKTsKIAorICAgICAgICBkb3VibGUgbjE7CisgICAgICAg
IGRvdWJsZSBuMjsKICAgICAgICAgSlNWYWx1ZSBwMTsKICAgICAgICAgSlNWYWx1ZSBwMjsKICAg
ICAgICAgYm9vbCB3YXNOb3RTdHJpbmcxOwpAQCAtMzc4LDE1ICszNzgsMTUgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIGlmICh2MS5pc0ludDMyKCkgJiYgdjIuaXNJbnQzMigpKQogICAgICAg
ICAgICAgcmV0dXJuIHYxLmFzSW50MzIoKSA8PSB2Mi5hc0ludDMyKCk7CiAKLSAgICAgICAgZG91
YmxlIG4xOwotICAgICAgICBkb3VibGUgbjI7Ci0gICAgICAgIGlmICh2MS5nZXROdW1iZXIobjEp
ICYmIHYyLmdldE51bWJlcihuMikpCi0gICAgICAgICAgICByZXR1cm4gbjEgPD0gbjI7CisgICAg
ICAgIGlmICh2MS5pc051bWJlcigpICYmIHYyLmlzTnVtYmVyKCkpCisgICAgICAgICAgICByZXR1
cm4gdjEuYXNOdW1iZXIoKSA8PSB2Mi5hc051bWJlcigpOwogCiAgICAgICAgIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSA9ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKICAgICAgICAgaWYgKGlz
SlNTdHJpbmcoZ2xvYmFsRGF0YSwgdjEpICYmIGlzSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdjIpKQog
ICAgICAgICAgICAgcmV0dXJuICEoYXNTdHJpbmcodjIpLT52YWx1ZShjYWxsRnJhbWUpIDwgYXNT
dHJpbmcodjEpLT52YWx1ZShjYWxsRnJhbWUpKTsKIAorICAgICAgICBkb3VibGUgbjE7CisgICAg
ICAgIGRvdWJsZSBuMjsKICAgICAgICAgSlNWYWx1ZSBwMTsKICAgICAgICAgSlNWYWx1ZSBwMjsK
ICAgICAgICAgYm9vbCB3YXNOb3RTdHJpbmcxOwpAQCAtNDE1LDkgKzQxNSw4IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgQUxXQVlTX0lOTElORSBKU1ZhbHVlIGpzQWRkKENhbGxGcmFtZSogY2Fs
bEZyYW1lLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQogICAgIHsKLSAgICAgICAgZG91YmxlIGxl
ZnQgPSAwLjAsIHJpZ2h0OwotICAgICAgICBpZiAodjEuZ2V0TnVtYmVyKGxlZnQpICYmIHYyLmdl
dE51bWJlcihyaWdodCkpCi0gICAgICAgICAgICByZXR1cm4ganNOdW1iZXIobGVmdCArIHJpZ2h0
KTsKKyAgICAgICAgaWYgKHYxLmlzTnVtYmVyKCkgJiYgdjIuaXNOdW1iZXIoKSkKKyAgICAgICAg
ICAgIHJldHVybiBqc051bWJlcih2MS5hc051bWJlcigpICsgdjIuYXNOdW1iZXIoKSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAodjEuaXNTdHJpbmcoKSkgewogICAgICAgICAgICAgcmV0dXJuIHYy
LmlzU3RyaW5nKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDk2NTcxKQorKysgU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTEtMTAt
MDMgIEdlb2ZmcmV5IEdhcmVuICA8Z2dhcmVuQGFwcGxlLmNvbT4KKworICAgICAgICBTb21lIEpT
VmFsdWUgY2xlYW51cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NjkzMjAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjp2
YWx1ZVRvRGF0ZSk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0V2ZW50TGlzdGVuZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNF
dmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvanMvSlNTUUxU
cmFuc2FjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NRTFRyYW5zYWN0aW9u
OjpleGVjdXRlU3FsKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3lu
Y0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1NRTFRyYW5zYWN0aW9uU3luYzo6ZXhl
Y3V0ZVNxbCk6CisgICAgICAgICogYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6anNUb0luc3BlY3RvclZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2xvbmVTZXJpYWxp
emVyOjpkdW1wSWZUZXJtaW5hbCk6CisgICAgICAgICogYmluZGluZ3Mvb2JqYy9XZWJTY3JpcHRP
YmplY3QubW06CisgICAgICAgICgrW1dlYlNjcmlwdE9iamVjdCBfY29udmVydFZhbHVlVG9PYmpj
VmFsdWU6b3JpZ2luUm9vdE9iamVjdDpyb290T2JqZWN0Ol0pOgorICAgICAgICAqIGJyaWRnZS9q
bmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNv
bnZlcnRWYWx1ZVRvSlZhbHVlKTogVXBkYXRlZCBmb3IgSlNDIGNoYW5nZXMuCisKIDIwMTEtMTAt
MDMgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFjIHJlbGVh
c2UgYnVpbGQgZml4IGFmdGVyIHI5NjU2MSwgYW5kIExlb3BhcmQgYnVpbGQgZml4IGFmdGVyIHI5
NjU2OC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmNw
cAkocmV2aXNpb24gOTY1NzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJp
bmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjMsNyArMTYzLDcgQEAgSlNWYWx1ZSBqc0Rh
dGVPck51bGwoRXhlY1N0YXRlKiBleGVjLCBkbwogZG91YmxlIHZhbHVlVG9EYXRlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSkKIHsKICAgICBpZiAodmFsdWUuaXNOdW1iZXIoKSkKLSAg
ICAgICAgcmV0dXJuIHZhbHVlLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgICAgICByZXR1cm4g
dmFsdWUuYXNOdW1iZXIoKTsKICAgICBpZiAoIXZhbHVlLmluaGVyaXRzKCZEYXRlSW5zdGFuY2U6
OnNfaW5mbykpCiAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1
aWV0X05hTigpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxEYXRlSW5zdGFuY2UqPih2YWx1ZS50
b09iamVjdChleGVjKSktPmludGVybmFsTnVtYmVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9qcy9KU0Vycm9ySGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNFcnJvckhhbmRsZXIuY3BwCShyZXZpc2lvbiA5NjU3MCkKKysrIFNv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRXJyb3JIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTAxLDggKzEwMSw3IEBAIHZvaWQgSlNFcnJvckhhbmRsZXI6OmhhbmRsZUV2ZW50KFNj
cmlwdEUKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmVw
b3J0Q3VycmVudEV4Y2VwdGlvbihleGVjKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBi
b29sIHJldHZhbGJvb2w7Ci0gICAgICAgICAgICBpZiAocmV0dXJuVmFsdWUuZ2V0Qm9vbGVhbihy
ZXR2YWxib29sKSAmJiByZXR2YWxib29sKQorICAgICAgICAgICAgaWYgKHJldHVyblZhbHVlLmlz
VHJ1ZSgpKQogICAgICAgICAgICAgICAgIGV2ZW50LT5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAg
ICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNFdmVudExpc3Rl
bmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0V2ZW50
TGlzdGVuZXIuY3BwCShyZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2pzL0pTRXZlbnRMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Nyw4ICsxNDcsNyBA
QCB2b2lkIEpTRXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZlbnQoU2NyaXB0CiAgICAgICAgICAgICBp
ZiAoIXJldHZhbC5pc1VuZGVmaW5lZE9yTnVsbCgpICYmIGV2ZW50LT5zdG9yZXNSZXN1bHRBc1N0
cmluZygpKQogICAgICAgICAgICAgICAgIGV2ZW50LT5zdG9yZVJlc3VsdCh1c3RyaW5nVG9TdHJp
bmcocmV0dmFsLnRvU3RyaW5nKGV4ZWMpKSk7CiAgICAgICAgICAgICBpZiAobV9pc0F0dHJpYnV0
ZSkgewotICAgICAgICAgICAgICAgIGJvb2wgcmV0dmFsYm9vbDsKLSAgICAgICAgICAgICAgICBp
ZiAocmV0dmFsLmdldEJvb2xlYW4ocmV0dmFsYm9vbCkgJiYgIXJldHZhbGJvb2wpCisgICAgICAg
ICAgICAgICAgaWYgKHJldHZhbC5pc0ZhbHNlKCkpCiAgICAgICAgICAgICAgICAgICAgIGV2ZW50
LT5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uQ3VzdG9t
LmNwcAkocmV2aXNpb24gOTY1NzApCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NR
TFRyYW5zYWN0aW9uQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBK
U1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb246OmV4ZWN1dGVTcWwoRXhlCiAgICAgICAgICAgICBpZiAo
dmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBw
ZW5kKFNRTFZhbHVlKCkpOwogICAgICAgICAgICAgZWxzZSBpZiAodmFsdWUuaXNOdW1iZXIoKSkK
LSAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLnVuY2hlY2tlZEdldE51bWJl
cigpKTsKKyAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLmFzTnVtYmVyKCkp
OwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgYXJn
dW1lbnQgdG8gYSBzdHJpbmcgYW5kIGFwcGVuZCBpdAogICAgICAgICAgICAgICAgIHNxbFZhbHVl
cy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4ZWMpKSk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1NRTFRyYW5zYWN0aW9uU3luY0N1c3RvbS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNTUUxUcmFuc2FjdGlv
blN5bmNDdXN0b20uY3BwCShyZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2pzL0pTU1FMVHJhbnNhY3Rpb25TeW5jQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzcsNyArNzcsNyBAQCBKU1ZhbHVlIEpTU1FMVHJhbnNhY3Rpb25TeW5jOjpleGVjdXRlU3FsCiAg
ICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkKICAgICAgICAgICAgICAg
ICBzcWxWYWx1ZXMuYXBwZW5kKFNRTFZhbHVlKCkpOwogICAgICAgICAgICAgZWxzZSBpZiAodmFs
dWUuaXNOdW1iZXIoKSkKLSAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZhbHVlLnVu
Y2hlY2tlZEdldE51bWJlcigpKTsKKyAgICAgICAgICAgICAgICBzcWxWYWx1ZXMuYXBwZW5kKHZh
bHVlLmFzTnVtYmVyKCkpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgLy8g
Q29udmVydCB0aGUgYXJndW1lbnQgdG8gYSBzdHJpbmcgYW5kIGFwcGVuZCBpdAogICAgICAgICAg
ICAgICAgIHNxbFZhbHVlcy5hcHBlbmQodXN0cmluZ1RvU3RyaW5nKHZhbHVlLnRvU3RyaW5nKGV4
ZWMpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3Bw
CShyZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDkgKzEyNSw5IEBAIHN0YXRpYyBQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBqc1RvSW4KICAgICBpZiAodmFsdWUuaXNOdWxsKCkgfHwgdmFs
dWUuaXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuIEluc3BlY3RvclZhbHVlOjpudWxsKCk7
CiAgICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yQmFz
aWNWYWx1ZTo6Y3JlYXRlKHZhbHVlLmdldEJvb2xlYW4oKSk7CisgICAgICAgIHJldHVybiBJbnNw
ZWN0b3JCYXNpY1ZhbHVlOjpjcmVhdGUodmFsdWUuYXNCb29sZWFuKCkpOwogICAgIGlmICh2YWx1
ZS5pc051bWJlcigpKQotICAgICAgICByZXR1cm4gSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRl
KHZhbHVlLnVuY2hlY2tlZEdldE51bWJlcigpKTsKKyAgICAgICAgcmV0dXJuIEluc3BlY3RvckJh
c2ljVmFsdWU6OmNyZWF0ZSh2YWx1ZS5hc051bWJlcigpKTsKICAgICBpZiAodmFsdWUuaXNTdHJp
bmcoKSkgewogICAgICAgICBVU3RyaW5nIHMgPSB2YWx1ZS5nZXRTdHJpbmcoc2NyaXB0U3RhdGUp
OwogICAgICAgICByZXR1cm4gSW5zcGVjdG9yU3RyaW5nOjpjcmVhdGUoU3RyaW5nKHMuY2hhcmFj
dGVycygpLCBzLmxlbmd0aCgpKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9T
ZXJpYWxpemVkU2NyaXB0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAJKHJldmlzaW9uIDk2NTcwKQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNjcmlwdFZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDA2LDcgKzQwNiw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgaWYgKHZh
bHVlLmlzTnVtYmVyKCkpIHsKICAgICAgICAgICAgIHdyaXRlKERvdWJsZVRhZyk7Ci0gICAgICAg
ICAgICB3cml0ZSh2YWx1ZS51bmNoZWNrZWRHZXROdW1iZXIoKSk7CisgICAgICAgICAgICB3cml0
ZSh2YWx1ZS5hc051bWJlcigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2JqZWN0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0T2Jq
ZWN0Lm1tCShyZXZpc2lvbiA5NjU3MCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL29iamMv
V2ViU2NyaXB0T2JqZWN0Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC01NDEsMTAgKzU0MSwxMCBAQCAr
IChpZClfY29udmVydFZhbHVlVG9PYmpjVmFsdWU6KEpTVmFsdWUpCiAgICAgfQogCiAgICAgaWYg
KHZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgIHJldHVybiBbTlNOdW1iZXIgbnVtYmVyV2l0aERv
dWJsZTp2YWx1ZS51bmNoZWNrZWRHZXROdW1iZXIoKV07CisgICAgICAgIHJldHVybiBbTlNOdW1i
ZXIgbnVtYmVyV2l0aERvdWJsZTp2YWx1ZS5hc051bWJlcigpXTsKIAogICAgIGlmICh2YWx1ZS5p
c0Jvb2xlYW4oKSkKLSAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDp2YWx1
ZS5nZXRCb29sZWFuKCldOworICAgICAgICByZXR1cm4gW05TTnVtYmVyIG51bWJlcldpdGhCb29s
OnZhbHVlLmFzQm9vbGVhbigpXTsKIAogICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKQogICAg
ICAgICByZXR1cm4gW1dlYlVuZGVmaW5lZCB1bmRlZmluZWRdOwpJbmRleDogU291cmNlL1dlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSk5JVXRpbGl0eVByaXZhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9qbmkvanNjL0pOSVV0aWxpdHlQcml2YXRlLmNwcAkocmV2aXNp
b24gOTY1NzApCisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KTklVdGlsaXR5UHJp
dmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCwxNCArMjI0LDE0IEBAIGp2YWx1ZSBjb252
ZXJ0VmFsdWVUb0pWYWx1ZShFeGVjU3RhdGUqIGUKICAgICAgICAgICAgICAgICAgICAgam9iamVj
dCBqYXZhU3RyaW5nID0gZW52LT5mdW5jdGlvbnMtPk5ld1N0cmluZyhlbnYsIChjb25zdCBqY2hh
ciopc3RyaW5nVmFsdWUuY2hhcmFjdGVycygpLCBzdHJpbmdWYWx1ZS5sZW5ndGgoKSk7CiAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gamF2YVN0cmluZzsKICAgICAgICAgICAgICAgICB9
IGVsc2UgaWYgKHZhbHVlLmlzTnVtYmVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgZG91Ymxl
IGRvdWJsZVZhbHVlID0gdmFsdWUudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSBkb3VibGVWYWx1ZSA9IHZhbHVlLmFzTnVtYmVyKCk7CiAgICAgICAgICAg
ICAgICAgICAgIEpOSUVudiogZW52ID0gZ2V0Sk5JRW52KCk7CiAgICAgICAgICAgICAgICAgICAg
IGpjbGFzcyBjbGF6eiA9IGVudi0+RmluZENsYXNzKCJqYXZhL2xhbmcvRG91YmxlIik7CiAgICAg
ICAgICAgICAgICAgICAgIGptZXRob2RJRCBjb25zdHJ1Y3RvciA9IGVudi0+R2V0TWV0aG9kSUQo
Y2xhenosICI8aW5pdD4iLCAiKEQpViIpOwogICAgICAgICAgICAgICAgICAgICBqb2JqZWN0IGph
dmFEb3VibGUgPSBlbnYtPmZ1bmN0aW9ucy0+TmV3T2JqZWN0KGVudiwgY2xhenosIGNvbnN0cnVj
dG9yLCBkb3VibGVWYWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5sID0gamF2YURv
dWJsZTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmlzQm9vbGVhbigpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGJvb2wgYm9vbFZhbHVlID0gdmFsdWUuZ2V0Qm9vbGVhbigpOwor
ICAgICAgICAgICAgICAgICAgICBib29sIGJvb2xWYWx1ZSA9IHZhbHVlLmFzQm9vbGVhbigpOwog
ICAgICAgICAgICAgICAgICAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOwogICAgICAgICAg
ICAgICAgICAgICBqY2xhc3MgY2xhenogPSBlbnYtPkZpbmRDbGFzcygiamF2YS9sYW5nL0Jvb2xl
YW4iKTsKICAgICAgICAgICAgICAgICAgICAgam1ldGhvZElEIGNvbnN0cnVjdG9yID0gZW52LT5H
ZXRNZXRob2RJRChjbGF6eiwgIjxpbml0PiIsICIoWilWIik7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9n
CShyZXZpc2lvbiA5NjU3MSkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTEwLTAzICBHZW9mZnJleSBHYXJlbiAgPGdn
YXJlbkBhcHBsZS5jb20+CisKKyAgICAgICAgU29tZSBKU1ZhbHVlIGNsZWFudXAKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5MzIwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcu
bW06CisgICAgICAgIChhZURlc2NGcm9tSlNWYWx1ZSk6IFVwZGF0ZWQgZm9yIEpTQyBjaGFuZ2Vz
LgorCiAyMDExLTEwLTAzICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgogCiAgICAg
ICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHI5NjUyNi4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9X
ZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDk2NTcwKQorKysgU291cmNlL1dlYktpdC9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NTQ3LDExICs0NTQ3LDExIEBA
IHN0YXRpYyBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm8KIHsKICAgICBOU0FwcGxl
RXZlbnREZXNjcmlwdG9yKiBhZURlc2MgPSAwOwogICAgIGlmIChqc1ZhbHVlLmlzQm9vbGVhbigp
KQotICAgICAgICByZXR1cm4gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhC
b29sZWFuOmpzVmFsdWUuZ2V0Qm9vbGVhbigpXTsKKyAgICAgICAgcmV0dXJuIFtOU0FwcGxlRXZl
bnREZXNjcmlwdG9yIGRlc2NyaXB0b3JXaXRoQm9vbGVhbjpqc1ZhbHVlLmFzQm9vbGVhbigpXTsK
ICAgICBpZiAoanNWYWx1ZS5pc1N0cmluZygpKQogICAgICAgICByZXR1cm4gW05TQXBwbGVFdmVu
dERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhTdHJpbmc6dXN0cmluZ1RvU3RyaW5nKGpzVmFsdWUu
Z2V0U3RyaW5nKGV4ZWMpKV07CiAgICAgaWYgKGpzVmFsdWUuaXNOdW1iZXIoKSkgewotICAgICAg
ICBkb3VibGUgdmFsdWUgPSBqc1ZhbHVlLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgICAgICBk
b3VibGUgdmFsdWUgPSBqc1ZhbHVlLmFzTnVtYmVyKCk7CiAgICAgICAgIGludCBpbnRWYWx1ZSA9
IHZhbHVlOwogICAgICAgICBpZiAodmFsdWUgPT0gaW50VmFsdWUpCiAgICAgICAgICAgICByZXR1
cm4gW05TQXBwbGVFdmVudERlc2NyaXB0b3IgZGVzY3JpcHRvcldpdGhEZXNjcmlwdG9yVHlwZTp0
eXBlU0ludDMyIGJ5dGVzOiZpbnRWYWx1ZSBsZW5ndGg6c2l6ZW9mKGludFZhbHVlKV07Cg==
</data>
<flag name="review"
          id="106948"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>