<?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>102686</bug_id>
          
          <creation_ts>2012-11-19 06:54:41 -0800</creation_ts>
          <short_desc>[V8] toFastV8 for non-Nodes</short_desc>
          <delta_ts>2012-12-05 01:04:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>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>0</everconfirmed>
          <reporter name="Dan Carney">dcarney</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>jochen</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>770700</commentid>
    <comment_count>0</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-11-19 06:54:41 -0800</bug_when>
    <thetext>[V8] toFastV8 for non-Nodes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770709</commentid>
    <comment_count>1</comment_count>
      <attachid>174973</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-11-19 07:00:16 -0800</bug_when>
    <thetext>Created attachment 174973
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770740</commentid>
    <comment_count>2</comment_count>
      <attachid>174973</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-11-19 07:38:19 -0800</bug_when>
    <thetext>Comment on attachment 174973
Patch

patch is hitting an assertion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770742</commentid>
    <comment_count>3</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-11-19 07:40:00 -0800</bug_when>
    <thetext>can you post a backtrace to the assertion?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770783</commentid>
    <comment_count>4</comment_count>
      <attachid>174973</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-19 08:39:41 -0800</bug_when>
    <thetext>Comment on attachment 174973
Patch

Attachment 174973 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/14928005

New failing tests:
inspector-protocol/debugger-terminate-dedicated-worker-while-paused.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>771243</commentid>
    <comment_count>5</comment_count>
      <attachid>174973</attachid>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-19 17:17:22 -0800</bug_when>
    <thetext>Comment on attachment 174973
Patch

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

The patch looks great. Marking r- due to the code duplication for AccessorInfo and Arguments.

&gt; Source/WebCore/ChangeLog:3
&gt; +        [V8] toFastV8 for non-Nodes

I&apos;m a bit confused with the title. Is this patch intending to use toV8Fast() for a case where IsDOMNodeType($type) is true?

Nit: toV8Fast

&gt; Source/WebCore/ChangeLog:8
&gt; +        This patch makes most generated bindings use toFastV8

Ditto.

&gt; Source/WebCore/ChangeLog:10
&gt; +        Additionally, a toFastV8 for v8::Arguments was added

Ditto.

&gt; Source/WebCore/ChangeLog:11
&gt; +        to make this most of thia optimization.

Typo: thia. Sorry for nit-pickings.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:536
&gt; +inline v8::Handle&lt;v8::Value&gt; toV8Fast(${nativeType}* impl, const v8::Arguments&amp; info, Node*)

Nit: We&apos;re likely to use &apos;args&apos; instead of &apos;info&apos;.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:539
&gt; +
&gt; +inline v8::Handle&lt;v8::Value&gt; toV8Fast(${nativeType}* impl, const v8::Arguments&amp; info, Node*)
&gt; +{
&gt; +    return toV8(impl, info.Holder(), info.GetIsolate());
&gt; +}

We might not want to duplicate this function for AccessorInfo and Arguments. Wouldn&apos;t it be possible to change the signature to

  v8::Handle&lt;v8::Value&gt; toV8Fast(${nativeType}* impl, v8::Handle&lt;v8::Object&gt; holder, Node*);

and thus eliminate the duplication?

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:588
&gt; +        foreach my $argType (&quot;AccessorInfo&quot;,&quot;Arguments&quot;) {

Nit: &quot;AccessorInfo&quot;, &quot;Arguments&quot; (One space after ,)

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:620
&gt; +inline v8::Handle&lt;v8::Value&gt; toV8Fast(PassRefPtr&lt; ${nativeType} &gt; impl, const v8::Arguments&amp; info, Node* holder)

Nit: We are likely to use &apos;args&apos; instead of &apos;info&apos;.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:4144
&gt; +    if ($getFastArgs) {

Don&apos;t you need to check IsDOMNodeType($type) ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781478</commentid>
    <comment_count>6</comment_count>
      <attachid>177259</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-12-03 08:22:58 -0800</bug_when>
    <thetext>Created attachment 177259
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781481</commentid>
    <comment_count>7</comment_count>
      <attachid>174973</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-12-03 08:25:37 -0800</bug_when>
    <thetext>Comment on attachment 174973
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:3
&gt;&gt; +        [V8] toFastV8 for non-Nodes
&gt; 
&gt; I&apos;m a bit confused with the title. Is this patch intending to use toV8Fast() for a case where IsDOMNodeType($type) is true?
&gt; 
&gt; Nit: toV8Fast

fixed
it means that the callback is from for a node subclass, but the object requested could be anything with a wrapper

&gt;&gt; Source/WebCore/ChangeLog:8
&gt;&gt; +        This patch makes most generated bindings use toFastV8
&gt; 
&gt; Ditto.

ok

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        Additionally, a toFastV8 for v8::Arguments was added
&gt; 
&gt; Ditto.

ok

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:539
&gt;&gt; +}
&gt; 
&gt; We might not want to duplicate this function for AccessorInfo and Arguments. Wouldn&apos;t it be possible to change the signature to
&gt; 
&gt;   v8::Handle&lt;v8::Value&gt; toV8Fast(${nativeType}* impl, v8::Handle&lt;v8::Object&gt; holder, Node*);
&gt; 
&gt; and thus eliminate the duplication?

ok

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:588
&gt;&gt; +        foreach my $argType (&quot;AccessorInfo&quot;,&quot;Arguments&quot;) {
&gt; 
&gt; Nit: &quot;AccessorInfo&quot;, &quot;Arguments&quot; (One space after ,)

ok

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:620
&gt;&gt; +inline v8::Handle&lt;v8::Value&gt; toV8Fast(PassRefPtr&lt; ${nativeType} &gt; impl, const v8::Arguments&amp; info, Node* holder)
&gt; 
&gt; Nit: We are likely to use &apos;args&apos; instead of &apos;info&apos;.

ok

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:4144
&gt;&gt; +    if ($getFastArgs) {
&gt; 
&gt; Don&apos;t you need to check IsDOMNodeType($type) ?

not here, the presence of the argument implies there is a node to make the call from</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781731</commentid>
    <comment_count>8</comment_count>
      <attachid>177259</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-12-03 11:52:48 -0800</bug_when>
    <thetext>Comment on attachment 177259
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:589
&gt; -inline v8::Handle&lt;v8::Value&gt; toV8Fast(${nativeType}* impl, const v8::AccessorInfo&amp; info, Node* holder)
&gt; +inline v8::Handle&lt;v8::Value&gt; toV8Fast(${nativeType}* impl, const v8::Local&lt;v8::Object&gt; holder, v8::Isolate* isolate, Node* node)

This seems to imply that all callers need to call GetIsolate before calling toV8Fast.  In the common path through this function, we previously avoided the GetIsolate call.  Does calling that function eagerly affect performance (I would expect it to).

It might be worth having two overloaded copies of this function: one for AccessorInfo and one for Arguments.  We could even make it a template since the code would be identical.  This function is always inlined, so there wouldn&apos;t be any cost to having two copies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781735</commentid>
    <comment_count>9</comment_count>
      <attachid>177259</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-12-03 11:57:15 -0800</bug_when>
    <thetext>Comment on attachment 177259
Patch

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

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:585
&gt; +        my $fastWrapper = $codeGenerator-&gt;IsSubType($interface, &quot;Node&quot;) ? &quot;impl-&gt;wrapper()&quot; : &quot;DOMDataStore::mainWorldStore()-&gt;get(impl)&quot;;

Very clever!

&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:1076
&gt; +        if (IsDOMNodeType($interfaceName)) {

In principle, we should be able to use toV8Fast whenever $interfaceName is ScriptWrappable.  We can have the compiler do the dispatch by exposing DOMDataStore::wrapperIsStoredInObject publicly.  We can do that in a subsequent patch if you like.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781738</commentid>
    <comment_count>10</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-12-03 11:58:34 -0800</bug_when>
    <thetext>Can you run dom-traverse to make sure we&apos;re not regressing?  I suspect calling GetIsolate one extra time will show up on that perf test.  (It should be fixable as described above.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>781798</commentid>
    <comment_count>11</comment_count>
      <attachid>177259</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-12-03 13:07:44 -0800</bug_when>
    <thetext>Comment on attachment 177259
Patch

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

&gt;&gt; Source/WebCore/bindings/scripts/CodeGeneratorV8.pm:589
&gt;&gt; +inline v8::Handle&lt;v8::Value&gt; toV8Fast(${nativeType}* impl, const v8::Local&lt;v8::Object&gt; holder, v8::Isolate* isolate, Node* node)
&gt; 
&gt; This seems to imply that all callers need to call GetIsolate before calling toV8Fast.  In the common path through this function, we previously avoided the GetIsolate call.  Does calling that function eagerly affect performance (I would expect it to).
&gt; 
&gt; It might be worth having two overloaded copies of this function: one for AccessorInfo and one for Arguments.  We could even make it a template since the code would be identical.  This function is always inlined, so there wouldn&apos;t be any cost to having two copies.

I had the two copies before but haraken didn&apos;t want it.  I thought the Isolate was needed in all paths, but I see now that it&apos;s not in the fast path.  I&apos;ll switch to a templatized method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782510</commentid>
    <comment_count>12</comment_count>
      <attachid>177476</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-12-04 06:53:04 -0800</bug_when>
    <thetext>Created attachment 177476
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782515</commentid>
    <comment_count>13</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-12-04 07:02:54 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Created an attachment (id=177476) [details]
&gt; Patch

This time round I moved all the complexity to DOMDataStore inline templates. Seems much cleaner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782516</commentid>
    <comment_count>14</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-12-04 07:03:57 -0800</bug_when>
    <thetext>Note, this patch doesn&apos;t have the adjustments to the binding test classes. It&apos;s harder to read the patch, so I&apos;ll add that after an r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782521</commentid>
    <comment_count>15</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-12-04 07:19:50 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; Can you run dom-traverse to make sure we&apos;re not regressing?  I suspect calling GetIsolate one extra time will show up on that perf test.  (It should be fixable as described above.)

Your comment no longer applies, but here are the numbers, run twice each with interwoven runs. Looks like a small perf bump.

with patch:

avg 3069.1348651348653 runs/s
median 0 runs/s
stdev 21.196854488648402 runs/s
min 3009.99000999001 runs/s
max 3088.81018981019 runs/s

avg 3192.8747252747253 runs/s
median 0 runs/s
stdev 12.296375015512377 runs/s
min 3163.9750249750246 runs/s
max 3213.18981018981 runs/s

without patch:

avg 2963.217982017982 runs/s
median 0 runs/s
stdev 16.350015231822884 runs/s
min 2920.834165834166 runs/s
max 2987.306693306693 runs/s

avg 2925.672727272727 runs/s
median 0 runs/s
stdev 6.087018068830624 runs/s
min 2908.5304695304694 runs/s
max 2936.0009990009994 runs/s</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>782574</commentid>
    <comment_count>16</comment_count>
      <attachid>177476</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-12-04 08:36:06 -0800</bug_when>
    <thetext>Comment on attachment 177476
Patch

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

Looks great.

&gt; Source/WebCore/bindings/v8/DOMDataStore.h:65
&gt; +    static v8::Handle&lt;v8::Object&gt; getWrapperFast(T* object, const HolderContainer&amp; container, Wrappable* wrappable)

wrappable -&gt; holder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783491</commentid>
    <comment_count>17</comment_count>
      <attachid>177692</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-12-05 01:01:51 -0800</bug_when>
    <thetext>Created attachment 177692
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783492</commentid>
    <comment_count>18</comment_count>
      <attachid>177692</attachid>
    <who name="">jochen</who>
    <bug_when>2012-12-05 01:04:28 -0800</bug_when>
    <thetext>Comment on attachment 177692
Patch

Clearing flags on attachment: 177692

Committed r136652: &lt;http://trac.webkit.org/changeset/136652&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>783493</commentid>
    <comment_count>19</comment_count>
    <who name="">jochen</who>
    <bug_when>2012-12-05 01:04:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174973</attachid>
            <date>2012-11-19 07:00:16 -0800</date>
            <delta_ts>2012-12-03 08:25:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102686-20121119155806.patch</filename>
            <type>text/plain</type>
            <size>13005</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM1MTIxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWJhZjU5YjdmMWViZWY4
ODEzZWM4ZDRlMTA0OGVlMjEyNzE4MDQ3YS4uYmRkY2FjYmU2OWIzNzRmZDhjYTNmNzlhYzY0NGQx
YzNiOWQwYmUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI4IEBACisyMDEyLTExLTE5ICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIFtWOF0gdG9GYXN0VjggZm9y
IG5vbi1Ob2RlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTAyNjg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBtYWtlcyBtb3N0IGdlbmVyYXRlZCBiaW5kaW5ncyB1c2UgdG9GYXN0VjgK
KyAgICAgICAgYnkgYWRkaW5nIGEgZmFzdCBwYXRoIHRvIHRoZSBtYWluIHdvcmxkIERPTURhdGFT
dG9yZS4KKyAgICAgICAgQWRkaXRpb25hbGx5LCBhIHRvRmFzdFY4IGZvciB2ODo6QXJndW1lbnRz
IHdhcyBhZGRlZAorICAgICAgICB0byBtYWtlIHRoaXMgbW9zdCBvZiB0aGlhIG9wdGltaXphdGlv
bi4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZSBpbiBmdW5jdGlvbmFsaXR5Lgor
CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG06CisgICAgICAg
IChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5lcmF0ZU5vcm1hbEF0dHJHZXR0ZXIpOgor
ICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcpOgorICAgICAgICAoTmF0aXZlVG9K
U1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjptYWluV29ybGQpOgorICAgICAgICAoV2ViQ29yZSk6
CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OmN1cnJlbnQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oOgorCiAyMDEyLTExLTE4ICBJbHlhIFRpa2hvbm92c2t5
ICA8bG9pc2xvQGNocm9taXVtLm9yZz4KIAogICAgICAgICB3ZWJhdWRpbzogY2xlYW4tdXAuIFJl
cGxhY2UgQXVkaW9Db250ZXh0OjptX2RvY3VtZW50IG1lbWJlciB3aXRoIENvbnRleHREZXN0cnVj
dGlvbk9ic2VydmVyOjpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCmluZGV4IGExZjg3Nzg4
YmJjMmJhYWUxODlkZDljYWNlNDAyMzlkNWU1YmVkYjUuLmJlZmE1MDFhNzllNDc4MmQ2NzNiNDlh
NzBhZDFhOTA0YjNkNDRjMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC01MzIsNiArNTMyLDExIEBAIGlubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoJHtuYXRpdmVUeXBlfSogaW1wbCwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mCiB7CiAgICAgcmV0dXJuIHRvVjgoaW1wbCwgaW5mby5Ib2xkZXIoKSwgaW5m
by5HZXRJc29sYXRlKCkpOwogfQorCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhG
YXN0KCR7bmF0aXZlVHlwZX0qIGltcGwsIGNvbnN0IHY4OjpBcmd1bWVudHMmIGluZm8sIE5vZGUq
KQoreworICAgIHJldHVybiB0b1Y4KGltcGwsIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0
ZSgpKTsKK30KIEVORAogICAgIH0gZWxzZSB7CiAKQEAgLTU3NywxMCArNTgyLDEzIEBAIGlubGlu
ZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOCgke25hdGl2ZVR5cGV9KiBpbXBsLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGNyCiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKTsKIH0KIEVORAotICAgICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3ViVHlw
ZSgkZGF0YU5vZGUsICJOb2RlIikpIHsKKworICAgICAgICBteSAkZmFzdFdyYXBwZXIgPSAkY29k
ZUdlbmVyYXRvci0+SXNTdWJUeXBlKCRkYXRhTm9kZSwgIk5vZGUiKSA/ICJpbXBsLT53cmFwcGVy
KCkiIDogIkRPTURhdGFTdG9yZTo6bWFpbldvcmxkKCktPmdldChpbXBsKSI7CisgICAgICAgIG15
ICRzbG93V3JhcHBlciA9ICRjb2RlR2VuZXJhdG9yLT5Jc1N1YlR5cGUoJGRhdGFOb2RlLCAiTm9k
ZSIpID8gIlY4RE9NV3JhcHBlcjo6Z2V0Q2FjaGVkV3JhcHBlcihpbXBsKSIgOiAiRE9NRGF0YVN0
b3JlOjpjdXJyZW50KGluZm8uR2V0SXNvbGF0ZSgpKS0+Z2V0KGluZm8uR2V0SXNvbGF0ZSgpKSI7
CisgICAgICAgIGZvcmVhY2ggbXkgJGFyZ1R5cGUgKCJBY2Nlc3NvckluZm8iLCJBcmd1bWVudHMi
KSB7CiAgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAKLWlubGluZSB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoJHtuYXRpdmVUeXBlfSogaW1wbCwgY29uc3Qg
djg6OkFjY2Vzc29ySW5mbyYgaW5mbywgTm9kZSogaG9sZGVyKQoraW5saW5lIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4RmFzdCgke25hdGl2ZVR5cGV9KiBpbXBsLCBjb25zdCB2ODo6JGFyZ1R5
cGUmIGluZm8sIE5vZGUqIGhvbGRlcikKIHsKICAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQogICAg
ICAgICByZXR1cm4gdjg6Ok51bGwoaW5mby5HZXRJc29sYXRlKCkpOwpAQCAtNTg4LDcgKzU5Niw3
IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoJHtuYXRpdmVUeXBlfSog
aW1wbCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mCiAgICAgLy8gaW4gYW4gaXNvbGF0ZWQgd29ybGQu
IFRoZSBmYXN0ZXN0IHdheSB3ZSBrbm93IGhvdyB0byBkbyB0aGF0IGlzIHRvIGNoZWNrCiAgICAg
Ly8gd2hldGhlciB0aGUgaG9sZGVyJ3MgaW5saW5lIHdyYXBwZXIgaXMgdGhlIHNhbWUgd3JhcHBl
ciB3ZSBzZWUgaW4gdGhlCiAgICAgLy8gdjg6OkFjY2Vzc29ySW5mby4KLSAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXBwZXIgPSAoaG9sZGVyLT53cmFwcGVyKCkgPT0gaW5mby5Ib2xkZXIo
KSkgPyBpbXBsLT53cmFwcGVyKCkgOiBWOERPTVdyYXBwZXI6OmdldENhY2hlZFdyYXBwZXIoaW1w
bCk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gKGhvbGRlci0+d3JhcHBl
cigpID09IGluZm8uSG9sZGVyKCkpID8gJGZhc3RXcmFwcGVyIDogJHNsb3dXcmFwcGVyOwogICAg
IGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHJl
dHVybiB3cmFwKGltcGwsIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKQEAgLTYw
Myw2ICs2MTEsMTYgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQ
dHI8ICR7bmF0aXZlVHlwZX0gPiBpbXBsLCB2ODo6SGFuZGxlPHYKIHsKICAgICByZXR1cm4gdG9W
OChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQorCitpbmxpbmUgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFBhc3NSZWZQdHI8ICR7bmF0aXZlVHlwZX0gPiBp
bXBsLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvLCBOb2RlKiBob2xkZXIpCit7CisgICAg
cmV0dXJuIHRvVjhGYXN0KGltcGwuZ2V0KCksIGluZm8sIGhvbGRlcik7Cit9CisKK2lubGluZSB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoUGFzc1JlZlB0cjwgJHtuYXRpdmVUeXBlfSA+
IGltcGwsIGNvbnN0IHY4OjpBcmd1bWVudHMmIGluZm8sIE5vZGUqIGhvbGRlcikKK3sKKyAgICBy
ZXR1cm4gdG9WOEZhc3QoaW1wbC5nZXQoKSwgaW5mbywgaG9sZGVyKTsKK30KIEVORAogCiAgICAg
aWYgKCRjb2RlR2VuZXJhdG9yLT5Jc0NvbnN0cnVjdG9yVGVtcGxhdGUoJGRhdGFOb2RlLCAiRXZl
bnQiKSkgewpAQCAtMTA1NywxMSArMTA3NSwxNiBAQCBFTkQKICAgICAgICAgQWRkVG9JbXBsSW5j
bHVkZXMoIlY4JGF0dHJUeXBlLmgiKTsKICAgICAgICAgbXkgJHN2Z05hdGl2ZVR5cGUgPSAkY29k
ZUdlbmVyYXRvci0+R2V0U1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCRhdHRyVHlwZSk7CiAgICAgICAg
ICMgQ29udmVydCBmcm9tIGFic3RyYWN0IFNWR1Byb3BlcnR5IHRvIHJlYWwgdHlwZSwgc28gdGhl
IHJpZ2h0IHRvSlMoKSBtZXRob2QgY2FuIGJlIGludm9rZWQuCi0gICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoc3RhdGljX2Nhc3Q8JHN2Z05hdGl2ZVR5cGUq
PigkcmVzdWx0KSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CisgICAg
ICAgIGlmIChJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSkgeworICAgICAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdG9WOEZhc3Qoc3RhdGljX2Nhc3Q8JHN2
Z05hdGl2ZVR5cGUqPigkcmVzdWx0KSwgaW5mbywgaW1wKTtcbiIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdG9WOChz
dGF0aWNfY2FzdDwkc3ZnTmF0aXZlVHlwZSo+KCRyZXN1bHQpLCBpbmZvLkhvbGRlcigpLCBpbmZv
LkdldElzb2xhdGUoKSk7XG4iKTsKKyAgICAgICAgfQogICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJh
dG9yLT5Jc1NWR1R5cGVOZWVkaW5nVGVhck9mZigkYXR0clR5cGUpIGFuZCBub3QgJGludGVyZmFj
ZU5hbWUgPX4gL0xpc3QkLykgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkYXR0clR5
cGUuaCIpOwogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU1ZHUHJvcGVydHlUZWFyT2ZmLmgi
KTsKICAgICAgICAgbXkgJHRlYXJPZmZUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldFNWR1R5cGVO
ZWVkaW5nVGVhck9mZigkYXR0clR5cGUpOworICAgICAgICBteSAkd3JhcHBlZFZhbHVlOwogICAg
ICAgICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZVdpdGhXcml0YWJsZVByb3BlcnRpZXNO
ZWVkaW5nVGVhck9mZigkYXR0clR5cGUpIGFuZCBub3QgZGVmaW5lZCAkYXR0cmlidXRlLT5zaWdu
YXR1cmUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJJbW11dGFibGUifSkgewogICAgICAgICAgICAg
bXkgJGdldHRlciA9ICRyZXN1bHQ7CiAgICAgICAgICAgICAkZ2V0dGVyID1+IHMvaW1wLT4vLzsK
QEAgLTEwODAsMjQgKzExMDMsMzEgQEAgRU5ECiAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQg
PX4gcy9tYXRyaXgvc3ZnTWF0cml4LzsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRy
KCR7dGVhck9mZlR5cGV9OjpjcmVhdGUod3JhcHBlciwgJHJlc3VsdCwgJHVwZGF0ZU1ldGhvZCkp
LCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICAkd3JhcHBlZFZhbHVlID0gIldURjo6Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVhdGUod3Jh
cHBlciwgJHJlc3VsdCwgJHVwZGF0ZU1ldGhvZCkpIjsKICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNWR1N0YXRpY1Byb3BlcnR5VGVhck9m
Zi5oIik7CiAgICAgICAgICAgICAgICAgJHRlYXJPZmZUeXBlID1+IHMvU1ZHUHJvcGVydHlUZWFy
T2ZmPC9TVkdTdGF0aWNQcm9wZXJ0eVRlYXJPZmY8JGludGVyZmFjZU5hbWUsIC87CiAKLSAgICAg
ICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6
Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVhdGUoaW1wLCAkcmVzdWx0LCAkdXBkYXRlTWV0aG9k
KSksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIpOworICAgICAgICAgICAg
ICAgICR3cmFwcGVkVmFsdWUgPSAiV1RGOjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZShp
bXAsICRyZXN1bHQsICR1cGRhdGVNZXRob2QpKSI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzaWYgKCR0ZWFyT2ZmVHlwZSA9fiAvU1ZHU3RhdGljTGlzdFByb3BlcnR5VGVhck9mZi8pIHsK
LSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoV1RG
OjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZShpbXAsICRyZXN1bHQpKSwgaW5mby5Ib2xk
ZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7CisgICAgICAgICAgICAgICAgJHdyYXBwZWRW
YWx1ZSA9ICJXVEY6OmdldFB0cigke3RlYXJPZmZUeXBlfTo6Y3JlYXRlKGltcCwgJHJlc3VsdCkp
IjsKICAgICAgICAgfSBlbHNpZiAoJHRlYXJPZmZUeXBlID1+IC9TVkcoUG9pbnR8UGF0aFNlZylM
aXN0LykgewotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4g
dG9WOChXVEY6OmdldFB0cigkcmVzdWx0KSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRl
KCkpO1xuIik7CisgICAgICAgICAgICAgICAgJHdyYXBwZWRWYWx1ZSA9ICJXVEY6OmdldFB0cigk
cmVzdWx0KSI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgJHdyYXBwZWRWYWx1
ZSA9ICJXVEY6OmdldFB0cigke3RlYXJPZmZUeXBlfTo6Y3JlYXRlKCRyZXN1bHQpKSI7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkpIHsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjhGYXN0KCR3
cmFwcGVkVmFsdWUsIGluZm8sIGltcCk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIo
JHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZSgkcmVzdWx0KSksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0
SXNvbGF0ZSgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAg
ICByZXR1cm4gdG9WOCgkd3JhcHBlZFZhbHVlLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xh
dGUoKSk7XG4iKTsKICAgICAgICAgfQogICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNpZ25hdHVy
ZS0+dHlwZSBlcSAiTWVzc2FnZVBvcnRBcnJheSIpIHsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVk
ZXMoIk1lc3NhZ2VQb3J0LmgiKTsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4TWVzc2Fn
ZVBvcnQuaCIpOwogICAgICAgICBteSAkZ2V0dGVyRnVuYyA9ICRjb2RlR2VuZXJhdG9yLT5XS19s
Y2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSk7CisgICAgICAgIG15ICR0b1Y4SW5M
b29wID0gSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkgPyAidG9WOEZhc3QocG9ydHNDb3B5
W2ldLmdldCgpLCBpbmZvLCBpbXApIiA6ICJ0b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwgaW5mby5I
b2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpIjsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgPDxFTkQpOwogICAgIE1lc3NhZ2VQb3J0QXJyYXkqIHBvcnRzID0gaW1wLT4ke2dldHRl
ckZ1bmN9KCk7CiAgICAgaWYgKCFwb3J0cykKQEAgLTExMDUsNyArMTEzNSw3IEBAIEVORAogICAg
IE1lc3NhZ2VQb3J0QXJyYXkgcG9ydHNDb3B5KCpwb3J0cyk7CiAgICAgdjg6OkxvY2FsPHY4OjpB
cnJheT4gcG9ydEFycmF5ID0gdjg6OkFycmF5OjpOZXcocG9ydHNDb3B5LnNpemUoKSk7CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBwb3J0c0NvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIHBv
cnRBcnJheS0+U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUoKSksIHRvVjgocG9ydHND
b3B5W2ldLmdldCgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSkpOworICAgICAg
ICBwb3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5HZXRJc29sYXRlKCkpLCAkdG9WOElu
TG9vcCk7CiAgICAgcmV0dXJuIHBvcnRBcnJheTsKIEVORAogICAgIH0gZWxzaWYgKCRhdHRyaWJ1
dGUtPnNpZ25hdHVyZS0+dHlwZSBlcSAiU2VyaWFsaXplZFNjcmlwdFZhbHVlIiAmJiAkYXR0ckV4
dC0+eyJDYWNoZWRBdHRyaWJ1dGUifSkgewpAQCAtMTExNiw5ICsxMTQ2LDggQEAgRU5ECiAgICAg
aW5mby5Ib2xkZXIoKS0+U2V0SGlkZGVuVmFsdWUocHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAg
cmV0dXJuIHZhbHVlOwogRU5ECi0gICAgfSBlbHNpZiAoSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNl
TmFtZSkgJiYgSXNET01Ob2RlVHlwZSgkYXR0clR5cGUpKSB7Ci0gICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCRhdHRyVHlwZS4iLmgiKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
IiAgICByZXR1cm4gdG9WOEZhc3QoJHJlc3VsdCwgaW5mbywgaW1wKTtcbiIpOworICAgIH0gZWxz
aWYgKElzRE9NTm9kZVR5cGUoJGludGVyZmFjZU5hbWUpKSB7CisgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgcmV0dXJuICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+
c2lnbmF0dXJlLCAkcmVzdWx0LCAiaW5mby5Ib2xkZXIoKSIsICJpbmZvLkdldElzb2xhdGUoKSIs
ICJpbmZvLCBpbXAiKS4iO1xuIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICByZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5z
aWduYXR1cmUsICRyZXN1bHQsICJpbmZvLkhvbGRlcigpIiwgImluZm8uR2V0SXNvbGF0ZSgpIiku
IjtcbiIpOwogICAgIH0KQEAgLTM1OTEsNyArMzYyMCwxMSBAQCBzdWIgR2VuZXJhdGVGdW5jdGlv
bkNhbGxTdHJpbmcoKQogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkcmV0dXJuVHlwZS5o
Iik7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJTVkdQcm9wZXJ0eVRlYXJPZmYuaCIpOwog
ICAgICAgICBteSAkc3ZnTmF0aXZlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTVkdUeXBlTmVl
ZGluZ1RlYXJPZmYoJHJldHVyblR5cGUpOwotICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAi
cmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHtzdmdOYXRpdmVUeXBlfTo6Y3JlYXRlKCRyZXR1cm4p
KSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpO1xuIjsKKyAgICAgICAgaWYgKElz
RE9NTm9kZVR5cGUoJGludGVyZmFjZU5hbWUpKSB7CisgICAgICAgICAgICAkcmVzdWx0IC49ICRp
bmRlbnQgLiAicmV0dXJuIHRvVjhGYXN0KFdURjo6Z2V0UHRyKCR7c3ZnTmF0aXZlVHlwZX06OmNy
ZWF0ZSgkcmV0dXJuKSksIGFyZ3MsIGltcCk7XG4iOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7c3Zn
TmF0aXZlVHlwZX06OmNyZWF0ZSgkcmV0dXJuKSksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNv
bGF0ZSgpKTtcbiI7CisgICAgICAgIH0KICAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICAgfQog
CkBAIC0zNjAxLDcgKzM2MzQsMTUgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKCkK
ICAgICB9CiAKICAgICAkcmV0dXJuIC49ICIucmVsZWFzZSgpIiBpZiAoJHJldHVybklzUmVmKTsK
LSAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJuICIgLiBOYXRpdmVUb0pTVmFsdWUoJGZ1
bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1cm4sICJhcmdzLkhvbGRlcigpIiwgImFyZ3MuR2V0SXNv
bGF0ZSgpIikgLiAiO1xuIjsKKworICAgIG15ICRuYXRpdmVWYWx1ZTsKKyAgICBpZiAoSXNET01O
b2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkpIHsKKyAgICAgICAgJG5hdGl2ZVZhbHVlID0gTmF0aXZl
VG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJuLCAiYXJncy5Ib2xkZXIoKSIs
ICJhcmdzLkdldElzb2xhdGUoKSIsICJhcmdzLCBpbXAiKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICAkbmF0aXZlVmFsdWUgPSBOYXRpdmVUb0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRy
ZXR1cm4sICJhcmdzLkhvbGRlcigpIiwgImFyZ3MuR2V0SXNvbGF0ZSgpIik7CisgICAgfQorCisg
ICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVybiAiIC4gJG5hdGl2ZVZhbHVlIC4gIjtcbiI7
CiAKICAgICByZXR1cm4gJHJlc3VsdDsKIH0KQEAgLTQwMTUsNiArNDA1Niw3IEBAIHN1YiBOYXRp
dmVUb0pTVmFsdWUKICAgICBteSAkZ2V0Q3JlYXRpb25Db250ZXh0QXJnID0gJGdldENyZWF0aW9u
Q29udGV4dCA/ICIsICRnZXRDcmVhdGlvbkNvbnRleHQiIDogIiI7CiAgICAgbXkgJGdldElzb2xh
dGUgPSBzaGlmdDsKICAgICBteSAkZ2V0SXNvbGF0ZUFyZyA9ICRnZXRJc29sYXRlID8gIiwgJGdl
dElzb2xhdGUiIDogIiI7CisgICAgbXkgJGdldEZhc3RBcmdzID0gc2hpZnQ7CiAgICAgbXkgJHR5
cGUgPSAkc2lnbmF0dXJlLT50eXBlOwogCiAgICAgcmV0dXJuICgkZ2V0SXNvbGF0ZSA/ICJ2OEJv
b2xlYW4oJHZhbHVlLCAkZ2V0SXNvbGF0ZSkiIDogInY4Qm9vbGVhbigkdmFsdWUpIikgaWYgJHR5
cGUgZXEgImJvb2xlYW4iOwpAQCAtNDA3NSw2ICs0MTE3LDkgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1
ZQogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7CiAKICAgICBpZiAoSXNET01Ob2RlVHlw
ZSgkdHlwZSkpIHsKKyAgICAgICAgaWYgKCRnZXRGYXN0QXJncykgeworICAgICAgICAgICAgcmV0
dXJuICJ0b1Y4RmFzdCgkdmFsdWUsICRnZXRGYXN0QXJncykiOworICAgICAgICB9CiAgICAgICAg
IHJldHVybiAidG9WOCgkdmFsdWUkZ2V0Q3JlYXRpb25Db250ZXh0QXJnJGdldElzb2xhdGVBcmcp
IjsKICAgICB9CiAKQEAgLTQwOTYsNiArNDE0MSw5IEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygid3RmL1JlZlB0ci5oIik7CiAgICAgQWRkVG9JbXBsSW5jbHVk
ZXMoInd0Zi9HZXRQdHIuaCIpOwogCisgICAgaWYgKCRnZXRGYXN0QXJncykgeworICAgICAgICBy
ZXR1cm4gInRvVjhGYXN0KCR2YWx1ZSwgJGdldEZhc3RBcmdzKSI7CisgICAgfQogICAgIHJldHVy
biAidG9WOCgkdmFsdWUkZ2V0Q3JlYXRpb25Db250ZXh0QXJnJGdldElzb2xhdGVBcmcpIjsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAKaW5kZXggZTNi
YTkxMmUzOWQxMTAyNDQ5NTU5Njk5ODQ5M2UzN2UwMzYwZjU4Yi4uZGFmZjg4NjdiZGFlNjRlMzhi
MWFiNTQ0NWU5ZDkyMzg1MjVkZjAwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvRE9NRGF0YVN0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9E
T01EYXRhU3RvcmUuY3BwCkBAIC01MSwxNiArNTEsMjMgQEAgRE9NRGF0YVN0b3JlOjp+RE9NRGF0
YVN0b3JlKCkKICAgICBtX3dyYXBwZXJNYXAuY2xlYXIoKTsKIH0KIAotRE9NRGF0YVN0b3JlKiBE
T01EYXRhU3RvcmU6OmN1cnJlbnQodjg6Oklzb2xhdGUqIGlzb2xhdGUpCitET01EYXRhU3RvcmUq
IERPTURhdGFTdG9yZTo6bWFpbldvcmxkKCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKERP
TURhdGFTdG9yZSwgbWFpbldvcmxkRE9NRGF0YVN0b3JlLCAoTWFpbldvcmxkKSk7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKKyAgICBBU1NFUlQoIVY4RE9NV2luZG93U2hlbGw6OmdldEVu
dGVyZWQoKSk7CisgICAgcmV0dXJuICZtYWluV29ybGRET01EYXRhU3RvcmU7Cit9CisKK0RPTURh
dGFTdG9yZSogRE9NRGF0YVN0b3JlOjpjdXJyZW50KHY4OjpJc29sYXRlKiBpc29sYXRlKQorewog
ICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBpc29sYXRlID8gVjhQZXJJc29sYXRlRGF0YTo6
ZnJvbShpc29sYXRlKSA6IFY4UGVySXNvbGF0ZURhdGE6OmN1cnJlbnQoKTsKICAgICBpZiAoVU5M
SUtFTFkoISFkYXRhLT5kb21EYXRhU3RvcmUoKSkpCiAgICAgICAgIHJldHVybiBkYXRhLT5kb21E
YXRhU3RvcmUoKTsKICAgICBWOERPTVdpbmRvd1NoZWxsKiBjb250ZXh0ID0gVjhET01XaW5kb3dT
aGVsbDo6Z2V0RW50ZXJlZCgpOwogICAgIGlmIChVTkxJS0VMWSghIWNvbnRleHQpKQogICAgICAg
ICByZXR1cm4gY29udGV4dC0+d29ybGQoKS0+aXNvbGF0ZWRXb3JsZERPTURhdGFTdG9yZSgpOwot
ICAgIHJldHVybiAmbWFpbldvcmxkRE9NRGF0YVN0b3JlOworICAgIHJldHVybiBtYWluV29ybGQo
KTsKIH0KIAogdm9pZCBET01EYXRhU3RvcmU6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RPTURhdGFTdG9yZS5oCmluZGV4IDM5MjBjNzgzNGUxNTRiMjAzOGZkYmYxMTdmMGNlYjVlNGI4
ZWZhZDAuLmNhNTI4ZTRkN2U5NzVlNzZlNjkzNTVmZGI0MjNhZWQ1ZmVmYmIxZDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oCkBAIC01OCw2ICs1OCw3IEBAIHB1
YmxpYzoKICAgICBleHBsaWNpdCBET01EYXRhU3RvcmUoVHlwZSk7CiAgICAgfkRPTURhdGFTdG9y
ZSgpOwogCisgICAgc3RhdGljIERPTURhdGFTdG9yZSogbWFpbldvcmxkKCk7CiAgICAgc3RhdGlj
IERPTURhdGFTdG9yZSogY3VycmVudCh2ODo6SXNvbGF0ZSopOwogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177259</attachid>
            <date>2012-12-03 08:22:58 -0800</date>
            <delta_ts>2012-12-04 06:52:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102686-20121203172024.patch</filename>
            <type>text/plain</type>
            <size>13441</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2Mzg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjgzZDk2YjQ3YjUzMzlh
MjliNDJlZWNhMzNmM2Y1ZDIwM2UzY2E3ZC4uYmJiOTJjYjk3ZWFmZDYxYmY2ZTMzZTQyNDViMjI0
OWI0MGM3MTg5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTEyLTAzICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIFtWOF0gdG9WOEZhc3QgZm9y
IGFsbCBjbGFzc2VzIHdpdGggTm9kZSBIb2xkZXIgb2JqZWN0cworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNjg2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBtb3N0IGdlbmVy
YXRlZCBiaW5kaW5ncyB1c2UgdG9WOEZhc3QKKyAgICAgICAgYnkgYWRkaW5nIGEgZmFzdCBwYXRo
IHRvIHRoZSBtYWluIHdvcmxkIERPTURhdGFTdG9yZS4KKyAgICAgICAgQWRkaXRpb25hbGx5LCB0
b1Y4RmFzdCBpcyBub3cgYmVpbmcgY2FsbGVkIG9uIGNhbGxiYWNrcworICAgICAgICB3aGljaCB1
c2Ugdjg6OkFyZ3VtZW50cy4gCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLiBObyBjaGFuZ2UgaW4g
ZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRv
clY4LnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAoR2VuZXJhdGVOb3Jt
YWxBdHRyR2V0dGVyKToKKyAgICAgICAgKEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKToKKyAg
ICAgICAgKE5hdGl2ZVRvSlNWYWx1ZSk6CisgICAgICAgICogYmluZGluZ3MvdjgvRE9NRGF0YVN0
b3JlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6bWFpbldvcmxkU3RvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjpjdXJyZW50KToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9ET01EYXRhU3RvcmUuaDoKKwogMjAxMi0xMi0wMyAgU2hlcmlmZiBCb3QgIDx3
ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjEzNjM3Ny4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9D
b2RlR2VuZXJhdG9yVjgucG0KaW5kZXggYTM0ZjU2OWNmNWMwOGRkNGE1ZmU0MDVmOGFjNjlmMDZk
ZDgxZjQ1MC4uNzI2NTAzMTMzZDJlMTIwM2MzMWM1MTcyOGE0NjI4YTk5YzMwZjRlYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0K
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0K
QEAgLTUzMyw5ICs1MzMsOSBAQCBFTkQKIGNsYXNzICR7bmF0aXZlVHlwZX07CiB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOCgke25hdGl2ZVR5cGV9Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiA9
IDApOwogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KCR7bmF0aXZlVHlw
ZX0qIGltcGwsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8sIE5vZGUqKQoraW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdCgke25hdGl2ZVR5cGV9KiBpbXBsLCBjb25zdCB2
ODo6TG9jYWw8djg6Ok9iamVjdD4gaG9sZGVyLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSwgTm9kZSop
CiB7Ci0gICAgcmV0dXJuIHRvVjgoaW1wbCwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRl
KCkpOworICAgIHJldHVybiB0b1Y4KGltcGwsIGhvbGRlciwgaXNvbGF0ZSk7CiB9CiBFTkQKICAg
ICB9IGVsc2UgewpAQCAtNTgyLDI4ICs1ODIsMzIgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3IK
ICAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogRU5E
Ci0gICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+SXNTdWJUeXBlKCRpbnRlcmZhY2UsICJOb2Rl
IikpIHsKLSAgICAgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKKyAgICAgICAg
bXkgJGZhc3RXcmFwcGVyID0gJGNvZGVHZW5lcmF0b3ItPklzU3ViVHlwZSgkaW50ZXJmYWNlLCAi
Tm9kZSIpID8gImltcGwtPndyYXBwZXIoKSIgOiAiRE9NRGF0YVN0b3JlOjptYWluV29ybGRTdG9y
ZSgpLT5nZXQoaW1wbCkiOworICAgICAgICBteSAkc2xvd1dyYXBwZXIgPSAkY29kZUdlbmVyYXRv
ci0+SXNTdWJUeXBlKCRpbnRlcmZhY2UsICJOb2RlIikgPyAiRE9NRGF0YVN0b3JlOjpnZXROb2Rl
KGltcGwsIGlzb2xhdGUpIiA6ICJET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChp
bXBsKSI7CisgICAgICAgIHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIAotaW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdCgke25hdGl2ZVR5cGV9KiBpbXBsLCBjb25zdCB2
ODo6QWNjZXNzb3JJbmZvJiBpbmZvLCBOb2RlKiBob2xkZXIpCitpbmxpbmUgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHRvVjhGYXN0KCR7bmF0aXZlVHlwZX0qIGltcGwsIGNvbnN0IHY4OjpMb2NhbDx2
ODo6T2JqZWN0PiBob2xkZXIsIHY4OjpJc29sYXRlKiBpc29sYXRlLCBOb2RlKiBub2RlKQogewog
ICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCi0gICAgICAgIHJldHVybiB2ODo6TnVsbChpbmZvLkdl
dElzb2xhdGUoKSk7CisgICAgICAgIHJldHVybiB2ODo6TnVsbChpc29sYXRlKTsKICAgICAvLyBX
aGF0IHdlJ2QgcmVhbGx5IGxpa2UgdG8gY2hlY2sgaGVyZSBpcyB3aGV0aGVyIHdlJ3JlIGluIHRo
ZSBtYWluIHdvcmxkIG9yCiAgICAgLy8gaW4gYW4gaXNvbGF0ZWQgd29ybGQuIFRoZSBmYXN0ZXN0
IHdheSB3ZSBrbm93IGhvdyB0byBkbyB0aGF0IGlzIHRvIGNoZWNrCi0gICAgLy8gd2hldGhlciB0
aGUgaG9sZGVyJ3MgaW5saW5lIHdyYXBwZXIgaXMgdGhlIHNhbWUgd3JhcHBlciB3ZSBzZWUgaW4g
dGhlCi0gICAgLy8gdjg6OkFjY2Vzc29ySW5mby4KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBwZXIgPSAoaG9sZGVyLT53cmFwcGVyKCkgPT0gaW5mby5Ib2xkZXIoKSkgPyBpbXBsLT53
cmFwcGVyKCkgOiBET01EYXRhU3RvcmU6OmdldE5vZGUoaW1wbCwgaW5mby5HZXRJc29sYXRlKCkp
OworICAgIC8vIHdoZXRoZXIgdGhlIG5vZGUncyBpbmxpbmUgd3JhcHBlciBpcyB0aGUgc2FtZSBh
cyB0aGUgaG9sZGVyCisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gKG5vZGUt
PndyYXBwZXIoKSA9PSBob2xkZXIpID8gJGZhc3RXcmFwcGVyIDogJHNsb3dXcmFwcGVyOwogICAg
IGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJl
dHVybiB3cmFwKGltcGwsIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICBy
ZXR1cm4gd3JhcChpbXBsLCBob2xkZXIsIGlzb2xhdGUpOwogfQogRU5ECi0gICAgICAgIH0KICAg
ICB9CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAKK2lubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoUGFzc1JlZlB0cjwgJHtuYXRpdmVUeXBlfSA+IGltcGws
IGNvbnN0IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBob2xkZXIsIHY4OjpJc29sYXRlKiBpc29sYXRl
LCBOb2RlKiBub2RlKQoreworICAgIHJldHVybiB0b1Y4RmFzdChpbXBsLmdldCgpLCBob2xkZXIs
IGlzb2xhdGUsIG5vZGUpOworfQorCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
UGFzc1JlZlB0cjwgJHtuYXRpdmVUeXBlfSA+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSA9IDApCiB7CiAgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKQEAgLTEwNjksMTEgKzEwNzMsMTYgQEAgRU5ECiAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJWOCRhdHRyVHlwZS5oIik7CiAgICAgICAgIG15ICRzdmdOYXRpdmVUeXBl
ID0gJGNvZGVHZW5lcmF0b3ItPkdldFNWR1R5cGVOZWVkaW5nVGVhck9mZigkYXR0clR5cGUpOwog
ICAgICAgICAjIENvbnZlcnQgZnJvbSBhYnN0cmFjdCBTVkdQcm9wZXJ0eSB0byByZWFsIHR5cGUs
IHNvIHRoZSByaWdodCB0b0pTKCkgbWV0aG9kIGNhbiBiZSBpbnZva2VkLgotICAgICAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PCRzdmdOYXRp
dmVUeXBlKj4oJHJlc3VsdCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIp
OworICAgICAgICBpZiAoSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkpIHsKKyAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjhGYXN0KHN0YXRpY19j
YXN0PCRzdmdOYXRpdmVUeXBlKj4oJHJlc3VsdCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNv
bGF0ZSgpLCBpbXApO1xuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0PCRzdmdOYXRpdmVU
eXBlKj4oJHJlc3VsdCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIpOwor
ICAgICAgICB9CiAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZU5lZWRpbmdU
ZWFyT2ZmKCRhdHRyVHlwZSkgYW5kIG5vdCAkaW50ZXJmYWNlTmFtZSA9fiAvTGlzdCQvKSB7CiAg
ICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRhdHRyVHlwZS5oIik7CiAgICAgICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJTVkdQcm9wZXJ0eVRlYXJPZmYuaCIpOwogICAgICAgICBteSAkdGVhck9m
ZlR5cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0U1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCRhdHRyVHlw
ZSk7CisgICAgICAgIG15ICR3cmFwcGVkVmFsdWU7CiAgICAgICAgIGlmICgkY29kZUdlbmVyYXRv
ci0+SXNTVkdUeXBlV2l0aFdyaXRhYmxlUHJvcGVydGllc05lZWRpbmdUZWFyT2ZmKCRhdHRyVHlw
ZSkgYW5kIG5vdCBkZWZpbmVkICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1
dGVzLT57IkltbXV0YWJsZSJ9KSB7CiAgICAgICAgICAgICBteSAkZ2V0dGVyID0gJHJlc3VsdDsK
ICAgICAgICAgICAgICRnZXR0ZXIgPX4gcy9pbXAtPi8vOwpAQCAtMTA5MiwyNCArMTEwMSwzMSBA
QCBFTkQKICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9fiBzL21hdHJpeC9zdmdNYXRyaXgv
OwogICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50
RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0
ZSh3cmFwcGVyLCAkcmVzdWx0LCAkdXBkYXRlTWV0aG9kKSksIGluZm8uSG9sZGVyKCksIGluZm8u
R2V0SXNvbGF0ZSgpKTtcbiIpOworICAgICAgICAgICAgICAgICR3cmFwcGVkVmFsdWUgPSAiV1RG
OjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZSh3cmFwcGVyLCAkcmVzdWx0LCAkdXBkYXRl
TWV0aG9kKSkiOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBZGRUb0lt
cGxJbmNsdWRlcygiU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmLmgiKTsKICAgICAgICAgICAgICAg
ICAkdGVhck9mZlR5cGUgPX4gcy9TVkdQcm9wZXJ0eVRlYXJPZmY8L1NWR1N0YXRpY1Byb3BlcnR5
VGVhck9mZjwkaW50ZXJmYWNlTmFtZSwgLzsKIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06
OmNyZWF0ZShpbXAsICRyZXN1bHQsICR1cGRhdGVNZXRob2QpKSwgaW5mby5Ib2xkZXIoKSwgaW5m
by5HZXRJc29sYXRlKCkpO1xuIik7CisgICAgICAgICAgICAgICAgJHdyYXBwZWRWYWx1ZSA9ICJX
VEY6OmdldFB0cigke3RlYXJPZmZUeXBlfTo6Y3JlYXRlKGltcCwgJHJlc3VsdCwgJHVwZGF0ZU1l
dGhvZCkpIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNpZiAoJHRlYXJPZmZUeXBlID1+
IC9TVkdTdGF0aWNMaXN0UHJvcGVydHlUZWFyT2ZmLykgewotICAgICAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cigke3RlYXJPZmZUeXBl
fTo6Y3JlYXRlKGltcCwgJHJlc3VsdCkpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUo
KSk7XG4iKTsKKyAgICAgICAgICAgICAgICAkd3JhcHBlZFZhbHVlID0gIldURjo6Z2V0UHRyKCR7
dGVhck9mZlR5cGV9OjpjcmVhdGUoaW1wLCAkcmVzdWx0KSkiOwogICAgICAgICB9IGVsc2lmICgk
dGVhck9mZlR5cGUgPX4gL1NWRyhQb2ludHxQYXRoU2VnKUxpc3QvKSB7Ci0gICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCRyZXN1
bHQpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsKKyAgICAgICAgICAg
ICAgICAkd3JhcHBlZFZhbHVlID0gIldURjo6Z2V0UHRyKCRyZXN1bHQpIjsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAkd3JhcHBlZFZhbHVlID0gIldURjo6Z2V0UHRyKCR7dGVh
ck9mZlR5cGV9OjpjcmVhdGUoJHJlc3VsdCkpIjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChJ
c0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSkgeworICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICByZXR1cm4gdG9WOEZhc3QoJHdyYXBwZWRWYWx1ZSwgaW5mby5Ib2xk
ZXIoKSwgaW5mby5HZXRJc29sYXRlKCksIGltcCk7XG4iKTsKICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoV1RGOjpn
ZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZSgkcmVzdWx0KSksIGluZm8uSG9sZGVyKCksIGlu
Zm8uR2V0SXNvbGF0ZSgpKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICByZXR1cm4gdG9WOCgkd3JhcHBlZFZhbHVlLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdl
dElzb2xhdGUoKSk7XG4iKTsKICAgICAgICAgfQogICAgIH0gZWxzaWYgKCRhdHRyaWJ1dGUtPnNp
Z25hdHVyZS0+dHlwZSBlcSAiTWVzc2FnZVBvcnRBcnJheSIpIHsKICAgICAgICAgQWRkVG9JbXBs
SW5jbHVkZXMoIk1lc3NhZ2VQb3J0LmgiKTsKICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlY4
TWVzc2FnZVBvcnQuaCIpOwogICAgICAgICBteSAkZ2V0dGVyRnVuYyA9ICRjb2RlR2VuZXJhdG9y
LT5XS19sY2ZpcnN0KCRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+bmFtZSk7CisgICAgICAgIG15ICR0
b1Y4SW5Mb29wID0gSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkgPyAidG9WOEZhc3QocG9y
dHNDb3B5W2ldLmdldCgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSwgaW1wKSIg
OiAidG9WOChwb3J0c0NvcHlbaV0uZ2V0KCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0
ZSgpKSI7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsIDw8RU5EKTsKICAgICBNZXNz
YWdlUG9ydEFycmF5KiBwb3J0cyA9IGltcC0+JHtnZXR0ZXJGdW5jfSgpOwogICAgIGlmICghcG9y
dHMpCkBAIC0xMTE3LDcgKzExMzMsNyBAQCBFTkQKICAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRz
Q29weSgqcG9ydHMpOwogICAgIHY4OjpMb2NhbDx2ODo6QXJyYXk+IHBvcnRBcnJheSA9IHY4OjpB
cnJheTo6TmV3KHBvcnRzQ29weS5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
cG9ydHNDb3B5LnNpemUoKTsgKytpKQotICAgICAgICBwb3J0QXJyYXktPlNldCh2OEludGVnZXIo
aSwgaW5mby5HZXRJc29sYXRlKCkpLCB0b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwgaW5mby5Ib2xk
ZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpKTsKKyAgICAgICAgcG9ydEFycmF5LT5TZXQodjhJbnRl
Z2VyKGksIGluZm8uR2V0SXNvbGF0ZSgpKSwgJHRvVjhJbkxvb3ApOwogICAgIHJldHVybiBwb3J0
QXJyYXk7CiBFTkQKICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEg
IlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSIgJiYgJGF0dHJFeHQtPnsiQ2FjaGVkQXR0cmlidXRlIn0p
IHsKQEAgLTExMjgsOSArMTE0NCw4IEBAIEVORAogICAgIGluZm8uSG9sZGVyKCktPlNldEhpZGRl
blZhbHVlKHByb3BlcnR5TmFtZSwgdmFsdWUpOwogICAgIHJldHVybiB2YWx1ZTsKIEVORAotICAg
IH0gZWxzaWYgKElzRE9NTm9kZVR5cGUoJGludGVyZmFjZU5hbWUpICYmIElzRE9NTm9kZVR5cGUo
JGF0dHJUeXBlKSkgewotICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygkYXR0clR5cGUuIi5oIik7
Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjhGYXN0KCRy
ZXN1bHQsIGluZm8sIGltcCk7XG4iKTsKKyAgICB9IGVsc2lmIChJc0RPTU5vZGVUeXBlKCRpbnRl
cmZhY2VOYW1lKSkgeworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVy
biAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgJHJlc3VsdCwgImlu
Zm8uSG9sZGVyKCkiLCAiaW5mby5HZXRJc29sYXRlKCkiLCAiaW1wIikuIjtcbiIpOwogICAgIH0g
ZWxzZSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuICIgLiBO
YXRpdmVUb0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAkcmVzdWx0LCAiaW5mby5Ib2xk
ZXIoKSIsICJpbmZvLkdldElzb2xhdGUoKSIpLiI7XG4iKTsKICAgICB9CkBAIC0zNjMwLDcgKzM2
NDUsMTEgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKCkKICAgICAgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIlY4JHJldHVyblR5cGUuaCIpOwogICAgICAgICBBZGRUb0ltcGxJbmNsdWRl
cygiU1ZHUHJvcGVydHlUZWFyT2ZmLmgiKTsKICAgICAgICAgbXkgJHN2Z05hdGl2ZVR5cGUgPSAk
Y29kZUdlbmVyYXRvci0+R2V0U1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCRyZXR1cm5UeXBlKTsKLSAg
ICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7c3Zn
TmF0aXZlVHlwZX06OmNyZWF0ZSgkcmV0dXJuKSksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0SXNv
bGF0ZSgpKTtcbiI7CisgICAgICAgIGlmIChJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSkg
eworICAgICAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVybiB0b1Y4RmFzdChXVEY6
OmdldFB0cigke3N2Z05hdGl2ZVR5cGV9OjpjcmVhdGUoJHJldHVybikpLCBhcmdzLkhvbGRlcigp
LCBhcmdzLkdldElzb2xhdGUoKSwgaW1wKTtcbiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHtzdmdO
YXRpdmVUeXBlfTo6Y3JlYXRlKCRyZXR1cm4pKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29s
YXRlKCkpO1xuIjsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICB9CiAK
QEAgLTM2NDAsNyArMzY1OSwxNSBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoKQog
ICAgIH0KIAogICAgICRyZXR1cm4gLj0gIi5yZWxlYXNlKCkiIGlmICgkcmV0dXJuSXNSZWYpOwot
ICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkZnVu
Y3Rpb24tPnNpZ25hdHVyZSwgJHJldHVybiwgImFyZ3MuSG9sZGVyKCkiLCAiYXJncy5HZXRJc29s
YXRlKCkiKSAuICI7XG4iOworCisgICAgbXkgJG5hdGl2ZVZhbHVlOworICAgIGlmIChJc0RPTU5v
ZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSkgeworICAgICAgICAkbmF0aXZlVmFsdWUgPSBOYXRpdmVU
b0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1cm4sICJhcmdzLkhvbGRlcigpIiwg
ImFyZ3MuR2V0SXNvbGF0ZSgpIiwgImltcCIpOworICAgIH0gZWxzZSB7CisgICAgICAgICRuYXRp
dmVWYWx1ZSA9IE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVyZSwgJHJldHVybiwg
ImFyZ3MuSG9sZGVyKCkiLCAiYXJncy5HZXRJc29sYXRlKCkiKTsKKyAgICB9CisKKyAgICAkcmVz
dWx0IC49ICRpbmRlbnQgLiAicmV0dXJuICIgLiAkbmF0aXZlVmFsdWUgLiAiO1xuIjsKIAogICAg
IHJldHVybiAkcmVzdWx0OwogfQpAQCAtNDA1NCw2ICs0MDgxLDggQEAgc3ViIE5hdGl2ZVRvSlNW
YWx1ZQogICAgIG15ICRnZXRDcmVhdGlvbkNvbnRleHRBcmcgPSAkZ2V0Q3JlYXRpb25Db250ZXh0
ID8gIiwgJGdldENyZWF0aW9uQ29udGV4dCIgOiAiIjsKICAgICBteSAkZ2V0SXNvbGF0ZSA9IHNo
aWZ0OwogICAgIG15ICRnZXRJc29sYXRlQXJnID0gJGdldElzb2xhdGUgPyAiLCAkZ2V0SXNvbGF0
ZSIgOiAiIjsKKyAgICBteSAkZ2V0Tm9kZSA9IHNoaWZ0OworICAgIG15ICRnZXROb2RlQXJnID0g
JGdldE5vZGUgPyAiLCAkZ2V0Tm9kZSIgOiAiIjsKICAgICBteSAkdHlwZSA9ICRzaWduYXR1cmUt
PnR5cGU7CiAKICAgICByZXR1cm4gKCRnZXRJc29sYXRlID8gInY4Qm9vbGVhbigkdmFsdWUsICRn
ZXRJc29sYXRlKSIgOiAidjhCb29sZWFuKCR2YWx1ZSkiKSBpZiAkdHlwZSBlcSAiYm9vbGVhbiI7
CkBAIC00MTE0LDcgKzQxNDMsMTAgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIEFkZEluY2x1
ZGVzRm9yVHlwZSgkdHlwZSk7CiAKICAgICBpZiAoSXNET01Ob2RlVHlwZSgkdHlwZSkpIHsKLSAg
ICAgICAgcmV0dXJuICJ0b1Y4KCR2YWx1ZSRnZXRDcmVhdGlvbkNvbnRleHRBcmckZ2V0SXNvbGF0
ZUFyZykiOworICAgICAgaWYgKCRnZXROb2RlKSB7CisgICAgICAgICAgcmV0dXJuICJ0b1Y4RmFz
dCgkdmFsdWUkZ2V0Q3JlYXRpb25Db250ZXh0QXJnJGdldElzb2xhdGVBcmckZ2V0Tm9kZUFyZyki
OworICAgICAgfQorICAgICAgcmV0dXJuICJ0b1Y4KCR2YWx1ZSRnZXRDcmVhdGlvbkNvbnRleHRB
cmckZ2V0SXNvbGF0ZUFyZykiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiRXZlbnRUYXJn
ZXQiKSB7CkBAIC00MTM1LDYgKzQxNjcsOSBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoInd0Zi9SZWZQdHIuaCIpOwogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJ3
dGYvR2V0UHRyLmgiKTsKIAorICAgIGlmICgkZ2V0Tm9kZSkgeworICAgICAgICByZXR1cm4gInRv
VjhGYXN0KCR2YWx1ZSRnZXRDcmVhdGlvbkNvbnRleHRBcmckZ2V0SXNvbGF0ZUFyZyRnZXROb2Rl
QXJnKSI7CisgICAgfQogICAgIHJldHVybiAidG9WOCgkdmFsdWUkZ2V0Q3JlYXRpb25Db250ZXh0
QXJnJGdldElzb2xhdGVBcmcpIjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RP
TURhdGFTdG9yZS5jcHAKaW5kZXggOTFmYjlkY2U2MTU2ZDNmYmM0MjJlNTUyYTkwN2Q5NTEzY2Uy
YmVmZC4uN2Q5ZTRhOWIwNDhhNDM1OGNlNTAzOTk2NDRkYzgyMjdiYzM2ZWVkYiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwCkBAIC01MSwxMCArNTEsMTUg
QEAgRE9NRGF0YVN0b3JlOjp+RE9NRGF0YVN0b3JlKCkKICAgICBtX3dyYXBwZXJNYXAuY2xlYXIo
KTsKIH0KIAotRE9NRGF0YVN0b3JlKiBET01EYXRhU3RvcmU6OmN1cnJlbnQodjg6Oklzb2xhdGUq
IGlzb2xhdGUpCitET01EYXRhU3RvcmUqIERPTURhdGFTdG9yZTo6bWFpbldvcmxkU3RvcmUoKQog
ewogICAgIERFRklORV9TVEFUSUNfTE9DQUwoRE9NRGF0YVN0b3JlLCBtYWluV29ybGRET01EYXRh
U3RvcmUsIChNYWluV29ybGQpKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgIHJl
dHVybiAmbWFpbldvcmxkRE9NRGF0YVN0b3JlOworfQogCitET01EYXRhU3RvcmUqIERPTURhdGFT
dG9yZTo6Y3VycmVudCh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKICAgICBWOFBlcklzb2xhdGVE
YXRhKiBkYXRhID0gaXNvbGF0ZSA/IFY4UGVySXNvbGF0ZURhdGE6OmZyb20oaXNvbGF0ZSkgOiBW
OFBlcklzb2xhdGVEYXRhOjpjdXJyZW50KCk7CiAgICAgaWYgKFVOTElLRUxZKCEhZGF0YS0+ZG9t
RGF0YVN0b3JlKCkpKQogICAgICAgICByZXR1cm4gZGF0YS0+ZG9tRGF0YVN0b3JlKCk7CkBAIC02
NSw3ICs3MCw3IEBAIERPTURhdGFTdG9yZSogRE9NRGF0YVN0b3JlOjpjdXJyZW50KHY4OjpJc29s
YXRlKiBpc29sYXRlKQogICAgICAgICAgICAgcmV0dXJuIGlzb2xhdGVkV29ybGQtPmlzb2xhdGVk
V29ybGRET01EYXRhU3RvcmUoKTsKICAgICB9CiAKLSAgICByZXR1cm4gJm1haW5Xb3JsZERPTURh
dGFTdG9yZTsKKyAgICByZXR1cm4gbWFpbldvcmxkU3RvcmUoKTsKIH0KIAogdm9pZCBET01EYXRh
U3RvcmU6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdElu
Zm8pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRh
U3RvcmUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oCmluZGV4
IDRiMmI0MjVlZTM1MDAzNmFhNmY5MDc0MmRkNTYxMmVmMjY2MTA2ZTUuLjFhNmJjMTdhZDNiZTFh
MmI5NGI3MTk1MWE4NDc3ZDYzYjRjYjk5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L0RPTURhdGFTdG9yZS5oCkBAIC01OSw2ICs1OSw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBE
T01EYXRhU3RvcmUoVHlwZSk7CiAgICAgfkRPTURhdGFTdG9yZSgpOwogCisgICAgc3RhdGljIERP
TURhdGFTdG9yZSogbWFpbldvcmxkU3RvcmUoKTsKICAgICBzdGF0aWMgRE9NRGF0YVN0b3JlKiBj
dXJyZW50KHY4OjpJc29sYXRlKik7CiAKICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBnZXROb2RlKE5vZGUqIG9iamVjdCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177476</attachid>
            <date>2012-12-04 06:53:04 -0800</date>
            <delta_ts>2012-12-05 01:01:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102686-20121204155028.patch</filename>
            <type>text/plain</type>
            <size>21952</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NDgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2FlNTQ0MDI0NzAzODBm
NWY5MmQ0OWI3YjZjM2RmOWU1YTc2ZmUzYy4uZDdkM2VlYzdiMzZjODc4OGNmYzQ3ODI0YjY5YWE0
ZWRkYjkyY2U4MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTEyLTA0ICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIFtWOF0gdG9WOEZhc3QgZm9y
IGFsbCBjbGFzc2VzIHdpdGggU2NyaXB0V3JhcHBlciBIb2xkZXIgb2JqZWN0cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNjg2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBtYWtlcyBt
b3N0IGdlbmVyYXRlZCBiaW5kaW5ncyB1c2UgdG9WOEZhc3QKKyAgICAgICAgYnkgYWRkaW5nIGEg
ZmFzdCBwYXRoIHRvIHRoZSBtYWluIHdvcmxkIERPTURhdGFTdG9yZS4KKyAgICAgICAgQWRkaXRp
b25hbGx5LCB0b1Y4RmFzdCBpcyBub3cgYmVpbmcgY2FsbGVkIG9uIGNhbGxiYWNrcworICAgICAg
ICB3aGljaCB1c2Ugdjg6OkFyZ3VtZW50cy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNo
YW5nZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy9Db2Rl
R2VuZXJhdG9yVjgucG06CisgICAgICAgIChHZW5lcmF0ZUhlYWRlcik6CisgICAgICAgIChHZW5l
cmF0ZU5vcm1hbEF0dHJHZXR0ZXIpOgorICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJp
bmcpOgorICAgICAgICAoTmF0aXZlVG9KU1ZhbHVlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9E
T01EYXRhU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YVN0b3JlOjptYWluV29y
bGRTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6OmN1cnJlbnQpOgorICAg
ICAgICAqIGJpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oOgorCiAyMDEyLTEyLTAzICBSYWZhZWwg
V2VpbnN0ZWluICA8cmFmYWVsd0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCBi
dWlsZCBmaXggYWZ0ZXIgcjEzNjQ2NwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBhMzRmNTY5Y2Y1YzA4ZGQ0YTVmZTQwNWY4
YWM2OWYwNmRkODFmNDUwLi5jODdmZGY3MWMzYTBjMmE3ZWRmMTcwYTU0OGVhZWVkZTEzMjc4ZGRk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JWOC5wbQpAQCAtNTMzLDE0ICs1MzMsMTQgQEAgRU5ECiBjbGFzcyAke25hdGl2ZVR5cGV9Owog
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoJHtuYXRpdmVUeXBlfSosIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6
SXNvbGF0ZSogPSAwKTsKIAotaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdCgk
e25hdGl2ZVR5cGV9KiBpbXBsLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvLCBOb2RlKikK
K3RlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgoraW5saW5l
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdCgke25hdGl2ZVR5cGV9KiBpbXBsLCBjb25z
dCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKikKIHsKLSAgICByZXR1cm4g
dG9WOChpbXBsLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJu
IHRvVjgoaW1wbCwgY29udGFpbmVyLkhvbGRlcigpLCBjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsK
IH0KIEVORAogICAgIH0gZWxzZSB7CiAKLSAgICAgICAgbXkgJGdldENhY2hlZFdyYXBwZXIgPSAk
Y29kZUdlbmVyYXRvci0+SXNTdWJUeXBlKCRpbnRlcmZhY2UsICJOb2RlIikgPyAiRE9NRGF0YVN0
b3JlOjpnZXROb2RlKGltcGwsIGlzb2xhdGUpIiA6ICJET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNv
bGF0ZSktPmdldChpbXBsKSI7CiAgICAgICAgIG15ICRjcmVhdGVXcmFwcGVyQ2FsbCA9ICRjdXN0
b21XcmFwID8gIiR7djhJbnRlcmZhY2VOYW1lfTo6d3JhcCIgOiAiJHt2OEludGVyZmFjZU5hbWV9
OjpjcmVhdGVXcmFwcGVyIjsKIAogICAgICAgICBpZiAoJGN1c3RvbVdyYXApIHsKQEAgLTU1NCw3
ICs1NTQsNyBAQCBFTkQKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRp
dmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICBBU1NFUlQoaW1wbCk7Ci0gICAgQVNTRVJU
KCRnZXRDYWNoZWRXcmFwcGVyLklzRW1wdHkoKSk7CisgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6
Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKS5Jc0VtcHR5KCkpOwogICAgIHJldHVybiAkY3JlYXRl
V3JhcHBlckNhbGwoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIEVORApAQCAt
NTY2LDcgKzU2Niw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRvVjhPYmplY3Qo
JHtuYXRpdmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqCiB7CiAgICAgaWYgKFVOTElL
RUxZKCFpbXBsKSkKICAgICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKTsKLSAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSAkZ2V0Q2FjaGVkV3JhcHBlcjsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBw
ZXIoaW1wbCwgaXNvbGF0ZSk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIHdyYXBwZXI7CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBp
c29sYXRlKTsKQEAgLTU3NiwzNCArNTc2LDMzIEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdG9WOCgke25hdGl2ZVR5cGV9KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyCiB7
CiAgICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVj
ayhpc29sYXRlKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9ICRnZXRDYWNo
ZWRXcmFwcGVyOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gRE9NRGF0YVN0
b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9Ci1FTkQKLSAgICAgICAgaWYgKCRjb2RlR2VuZXJhdG9y
LT5Jc1N1YlR5cGUoJGludGVyZmFjZSwgIk5vZGUiKSkgewotICAgICAgICAgICAgcHVzaChAaGVh
ZGVyQ29udGVudCwgPDxFTkQpOwogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhG
YXN0KCR7bmF0aXZlVHlwZX0qIGltcGwsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8sIE5v
ZGUqIGhvbGRlcikKK3RlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBh
YmxlPgoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdCgke25hdGl2ZVR5cGV9
KiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFw
cGFibGUpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKLSAgICAgICAgcmV0dXJuIHY4OjpO
dWxsKGluZm8uR2V0SXNvbGF0ZSgpKTsKLSAgICAvLyBXaGF0IHdlJ2QgcmVhbGx5IGxpa2UgdG8g
Y2hlY2sgaGVyZSBpcyB3aGV0aGVyIHdlJ3JlIGluIHRoZSBtYWluIHdvcmxkIG9yCi0gICAgLy8g
aW4gYW4gaXNvbGF0ZWQgd29ybGQuIFRoZSBmYXN0ZXN0IHdheSB3ZSBrbm93IGhvdyB0byBkbyB0
aGF0IGlzIHRvIGNoZWNrCi0gICAgLy8gd2hldGhlciB0aGUgaG9sZGVyJ3MgaW5saW5lIHdyYXBw
ZXIgaXMgdGhlIHNhbWUgd3JhcHBlciB3ZSBzZWUgaW4gdGhlCi0gICAgLy8gdjg6OkFjY2Vzc29y
SW5mby4KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSAoaG9sZGVyLT53cmFw
cGVyKCkgPT0gaW5mby5Ib2xkZXIoKSkgPyBpbXBsLT53cmFwcGVyKCkgOiBET01EYXRhU3RvcmU6
OmdldE5vZGUoaW1wbCwgaW5mby5HZXRJc29sYXRlKCkpOworICAgICAgICByZXR1cm4gdjg6Ok51
bGwoY29udGFpbmVyLkdldElzb2xhdGUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRmFzdChpbXBsLCBjb250YWluZXIsIHdy
YXBwYWJsZSk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdy
YXBwZXI7Ci0gICAgcmV0dXJuIHdyYXAoaW1wbCwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29s
YXRlKCkpOworICAgIHJldHVybiB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29udGFp
bmVyLkdldElzb2xhdGUoKSk7CiB9CiBFTkQKLSAgICAgICAgfQogICAgIH0KIAogICAgIHB1c2go
QGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIAordGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVy
LCBjbGFzcyBXcmFwcGFibGU+CitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0
KFBhc3NSZWZQdHI8ICR7bmF0aXZlVHlwZX0gPiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXIm
IGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCit7CisgICAgcmV0dXJuIHRvVjhGYXN0
KGltcGwuZ2V0KCksIGNvbnRhaW5lciwgd3JhcHBhYmxlKTsKK30KKwogaW5saW5lIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8ICR7bmF0aXZlVHlwZX0gPiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIHJldHVybiB0b1Y4KGltcGwu
Z2V0KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CkBAIC0xMDUzLDcgKzEwNTIsNyBAQCBF
TkQKICAgICAgICAgIyBDaGVjayBmb3IgYSB3cmFwcGVyIGluIHRoZSB3cmFwcGVyIGNhY2hlLiBJ
ZiB0aGVyZSBpcyBvbmUsIHdlIGtub3cgdGhhdCBhIGhpZGRlbiByZWZlcmVuY2UgaGFzIGFscmVh
ZHkKICAgICAgICAgIyBiZWVuIGNyZWF0ZWQuIElmIHdlIGRvbid0IGZpbmQgYSB3cmFwcGVyLCB3
ZSBjcmVhdGUgYm90aCBhIHdyYXBwZXIgYW5kIGEgaGlkZGVuIHJlZmVyZW5jZS4KICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBSZWZQdHI8JHJldHVyblR5cGU+IHJlc3VsdCA9
ICR7Z2V0dGVyU3RyaW5nfTtcbiIpOwotICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAi
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gcmVzdWx0LmdldCgpID8gdjg6Okhh
bmRsZTx2ODo6VmFsdWU+KERPTURhdGFTdG9yZTo6Y3VycmVudChpbmZvLkdldElzb2xhdGUoKSkt
PmdldChyZXN1bHQuZ2V0KCkpKSA6IHY4VW5kZWZpbmVkKCk7XG4iKTsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IHJl
c3VsdC5nZXQoKSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPihET01EYXRhU3RvcmU6OmdldFdyYXBw
ZXIocmVzdWx0LmdldCgpLCBpbmZvLkdldElzb2xhdGUoKSkpIDogdjhVbmRlZmluZWQoKTtcbiIp
OwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIGlmICh3cmFwcGVyLklzRW1w
dHkoKSkge1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIHdy
YXBwZXIgPSB0b1Y4KHJlc3VsdC5nZXQoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRl
KCkpO1xuIik7ICMgRklYTUU6IENvdWxkIHVzZSB3cmFwIGhlcmUgc2luY2UgdGhlIHdyYXBwZXIg
aXMgZW1wdHkuCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgICAgIGlmICgh
d3JhcHBlci5Jc0VtcHR5KCkpXG4iKTsKQEAgLTEwNjksMTEgKzEwNjgsMTIgQEAgRU5ECiAgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRhdHRyVHlwZS5oIik7CiAgICAgICAgIG15ICRzdmdO
YXRpdmVUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldFNWR1R5cGVOZWVkaW5nVGVhck9mZigkYXR0
clR5cGUpOwogICAgICAgICAjIENvbnZlcnQgZnJvbSBhYnN0cmFjdCBTVkdQcm9wZXJ0eSB0byBy
ZWFsIHR5cGUsIHNvIHRoZSByaWdodCB0b0pTKCkgbWV0aG9kIGNhbiBiZSBpbnZva2VkLgotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KHN0YXRpY19jYXN0
PCRzdmdOYXRpdmVUeXBlKj4oJHJlc3VsdCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0
ZSgpKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0
b1Y4RmFzdChzdGF0aWNfY2FzdDwkc3ZnTmF0aXZlVHlwZSo+KCRyZXN1bHQpLCBpbmZvLCBpbXAp
O1xuIik7CiAgICAgfSBlbHNpZiAoJGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZU5lZWRpbmdUZWFy
T2ZmKCRhdHRyVHlwZSkgYW5kIG5vdCAkaW50ZXJmYWNlTmFtZSA9fiAvTGlzdCQvKSB7CiAgICAg
ICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRhdHRyVHlwZS5oIik7CiAgICAgICAgIEFkZFRvSW1w
bEluY2x1ZGVzKCJTVkdQcm9wZXJ0eVRlYXJPZmYuaCIpOwogICAgICAgICBteSAkdGVhck9mZlR5
cGUgPSAkY29kZUdlbmVyYXRvci0+R2V0U1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCRhdHRyVHlwZSk7
CisgICAgICAgIG15ICR3cmFwcGVkVmFsdWU7CiAgICAgICAgIGlmICgkY29kZUdlbmVyYXRvci0+
SXNTVkdUeXBlV2l0aFdyaXRhYmxlUHJvcGVydGllc05lZWRpbmdUZWFyT2ZmKCRhdHRyVHlwZSkg
YW5kIG5vdCBkZWZpbmVkICRhdHRyaWJ1dGUtPnNpZ25hdHVyZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVz
LT57IkltbXV0YWJsZSJ9KSB7CiAgICAgICAgICAgICBteSAkZ2V0dGVyID0gJHJlc3VsdDsKICAg
ICAgICAgICAgICRnZXR0ZXIgPX4gcy9pbXAtPi8vOwpAQCAtMTA5MiwyMCArMTA5MiwyMSBAQCBF
TkQKICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9fiBzL21hdHJpeC9zdmdNYXRyaXgvOwog
ICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsICIgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZSh3
cmFwcGVyLCAkcmVzdWx0LCAkdXBkYXRlTWV0aG9kKSksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0
SXNvbGF0ZSgpKTtcbiIpOworICAgICAgICAgICAgICAgICR3cmFwcGVkVmFsdWUgPSAiV1RGOjpn
ZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZSh3cmFwcGVyLCAkcmVzdWx0LCAkdXBkYXRlTWV0
aG9kKSkiOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBBZGRUb0ltcGxJ
bmNsdWRlcygiU1ZHU3RhdGljUHJvcGVydHlUZWFyT2ZmLmgiKTsKICAgICAgICAgICAgICAgICAk
dGVhck9mZlR5cGUgPX4gcy9TVkdQcm9wZXJ0eVRlYXJPZmY8L1NWR1N0YXRpY1Byb3BlcnR5VGVh
ck9mZjwkaW50ZXJmYWNlTmFtZSwgLzsKIAotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNy
ZWF0ZShpbXAsICRyZXN1bHQsICR1cGRhdGVNZXRob2QpKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5H
ZXRJc29sYXRlKCkpO1xuIik7CisgICAgICAgICAgICAgICAgJHdyYXBwZWRWYWx1ZSA9ICJXVEY6
OmdldFB0cigke3RlYXJPZmZUeXBlfTo6Y3JlYXRlKGltcCwgJHJlc3VsdCwgJHVwZGF0ZU1ldGhv
ZCkpIjsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNpZiAoJHRlYXJPZmZUeXBlID1+IC9T
VkdTdGF0aWNMaXN0UHJvcGVydHlUZWFyT2ZmLykgewotICAgICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICByZXR1cm4gdG9WOChXVEY6OmdldFB0cigke3RlYXJPZmZUeXBlfTo6
Y3JlYXRlKGltcCwgJHJlc3VsdCkpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7
XG4iKTsKKyAgICAgICAgICAgICAgICAkd3JhcHBlZFZhbHVlID0gIldURjo6Z2V0UHRyKCR7dGVh
ck9mZlR5cGV9OjpjcmVhdGUoaW1wLCAkcmVzdWx0KSkiOwogICAgICAgICB9IGVsc2lmICgkdGVh
ck9mZlR5cGUgPX4gL1NWRyhQb2ludHxQYXRoU2VnKUxpc3QvKSB7Ci0gICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCRyZXN1bHQp
LCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsKKyAgICAgICAgICAgICAg
ICAkd3JhcHBlZFZhbHVlID0gIldURjo6Z2V0UHRyKCRyZXN1bHQpIjsKICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgo
V1RGOjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZSgkcmVzdWx0KSksIGluZm8uSG9sZGVy
KCksIGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIpOworICAgICAgICAgICAgICAgICR3cmFwcGVkVmFs
dWUgPSAiV1RGOjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZSgkcmVzdWx0KSkiOwogICAg
ICAgICB9CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjhG
YXN0KCR3cmFwcGVkVmFsdWUsIGluZm8sIGltcCk7XG4iKTsKICAgICB9IGVsc2lmICgkYXR0cmli
dXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIk1lc3NhZ2VQb3J0QXJyYXkiKSB7CiAgICAgICAgIEFk
ZFRvSW1wbEluY2x1ZGVzKCJNZXNzYWdlUG9ydC5oIik7CiAgICAgICAgIEFkZFRvSW1wbEluY2x1
ZGVzKCJWOE1lc3NhZ2VQb3J0LmgiKTsKQEAgLTExMTcsNyArMTExOCw3IEBAIEVORAogICAgIE1l
c3NhZ2VQb3J0QXJyYXkgcG9ydHNDb3B5KCpwb3J0cyk7CiAgICAgdjg6OkxvY2FsPHY4OjpBcnJh
eT4gcG9ydEFycmF5ID0gdjg6OkFycmF5OjpOZXcocG9ydHNDb3B5LnNpemUoKSk7CiAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBwb3J0c0NvcHkuc2l6ZSgpOyArK2kpCi0gICAgICAgIHBvcnRB
cnJheS0+U2V0KHY4SW50ZWdlcihpLCBpbmZvLkdldElzb2xhdGUoKSksIHRvVjgocG9ydHNDb3B5
W2ldLmdldCgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSkpOworICAgICAgICBw
b3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5HZXRJc29sYXRlKCkpLCB0b1Y4RmFzdChw
b3J0c0NvcHlbaV0uZ2V0KCksIGluZm8sIGltcCkpOwogICAgIHJldHVybiBwb3J0QXJyYXk7CiBF
TkQKICAgICB9IGVsc2lmICgkYXR0cmlidXRlLT5zaWduYXR1cmUtPnR5cGUgZXEgIlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZSIgJiYgJGF0dHJFeHQtPnsiQ2FjaGVkQXR0cmlidXRlIn0pIHsKQEAgLTEx
MjgsMTEgKzExMjksOCBAQCBFTkQKICAgICBpbmZvLkhvbGRlcigpLT5TZXRIaWRkZW5WYWx1ZShw
cm9wZXJ0eU5hbWUsIHZhbHVlKTsKICAgICByZXR1cm4gdmFsdWU7CiBFTkQKLSAgICB9IGVsc2lm
IChJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSAmJiBJc0RPTU5vZGVUeXBlKCRhdHRyVHlw
ZSkpIHsKLSAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoJGF0dHJUeXBlLiIuaCIpOwotICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4RmFzdCgkcmVzdWx0LCBp
bmZvLCBpbXApO1xuIik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnRE
ZWNscywgIiAgICByZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1
cmUsICRyZXN1bHQsICJpbmZvLkhvbGRlcigpIiwgImluZm8uR2V0SXNvbGF0ZSgpIikuIjtcbiIp
OworICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiAiIC4gTmF0aXZl
VG9KU1ZhbHVlKCRhdHRyaWJ1dGUtPnNpZ25hdHVyZSwgJHJlc3VsdCwgImluZm8uSG9sZGVyKCki
LCAiaW5mby5HZXRJc29sYXRlKCkiLCAiaW5mbyIsICJpbXAiKS4iO1xuIik7CiAgICAgfQogCiAg
ICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIn1cblxuIik7ICAjIGVuZCBvZiBnZXR0ZXIKQEAg
LTM0NzAsMTQgKzM0NjgsMTMgQEAgc3ViIEdlbmVyYXRlVG9WOENvbnZlcnRlcnMKIAogICAgIG15
ICRjcmVhdGVXcmFwcGVyQXJndW1lbnRUeXBlID0gR2V0UGFzc1JlZlB0clR5cGUoJG5hdGl2ZVR5
cGUpOwogICAgIG15ICRiYXNlVHlwZSA9IEJhc2VJbnRlcmZhY2VOYW1lKCRpbnRlcmZhY2UpOwot
ICAgIG15ICRnZXRDYWNoZWRXcmFwcGVyID0gJGNvZGVHZW5lcmF0b3ItPklzU3ViVHlwZSgkaW50
ZXJmYWNlLCAiTm9kZSIpID8gIkRPTURhdGFTdG9yZTo6Z2V0Tm9kZShpbXBsLmdldCgpLCBpc29s
YXRlKSIgOiAiRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbC5nZXQoKSki
OwogCiAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKIAogdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiAke3Y4SW50ZXJmYWNlTmFtZX06OmNyZWF0ZVdyYXBwZXIoJHtjcmVhdGVXcmFwcGVyQXJn
dW1lbnRUeXBlfSBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgQVNTRVJUKGltcGwuZ2V0KCkpOwotICAgIEFT
U0VSVCgkZ2V0Q2FjaGVkV3JhcHBlci5Jc0VtcHR5KCkpOworICAgIEFTU0VSVChET01EYXRhU3Rv
cmU6OmdldFdyYXBwZXIoaW1wbC5nZXQoKSwgaXNvbGF0ZSkuSXNFbXB0eSgpKTsKIEVORAogICAg
IGlmICgkYmFzZVR5cGUgbmUgJGludGVyZmFjZU5hbWUpIHsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsIDw8RU5EKTsKQEAgLTM0OTIsNyArMzQ4OSw3IEBAIEVORAogICAgIGlmIChGcmFtZSog
ZnJhbWUgPSBpbXBsLT5mcmFtZSgpKSB7CiAgICAgICAgIGlmIChmcmFtZS0+c2NyaXB0KCktPmlu
aXRpYWxpemVNYWluV29ybGQoKSkgewogICAgICAgICAgICAgLy8gaW5pdGlhbGl6ZU1haW5Xb3Js
ZCBtYXkgaGF2ZSBjcmVhdGVkIGEgd3JhcHBlciBmb3IgdGhlIG9iamVjdCwgcmV0cnkgZnJvbSB0
aGUgc3RhcnQuCi0gICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBE
T01EYXRhU3RvcmU6OmdldE5vZGUoaW1wbC5nZXQoKSwgaXNvbGF0ZSk7CisgICAgICAgICAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXIo
aW1wbC5nZXQoKSwgaXNvbGF0ZSk7CiAgICAgICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgp
KQogICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgICAgICB9CkBAIC0zNjMwLDcg
KzM2MjcsMTIgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKCkKICAgICAgICAgQWRk
VG9JbXBsSW5jbHVkZXMoIlY4JHJldHVyblR5cGUuaCIpOwogICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiU1ZHUHJvcGVydHlUZWFyT2ZmLmgiKTsKICAgICAgICAgbXkgJHN2Z05hdGl2ZVR5cGUg
PSAkY29kZUdlbmVyYXRvci0+R2V0U1ZHVHlwZU5lZWRpbmdUZWFyT2ZmKCRyZXR1cm5UeXBlKTsK
LSAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7
c3ZnTmF0aXZlVHlwZX06OmNyZWF0ZSgkcmV0dXJuKSksIGFyZ3MuSG9sZGVyKCksIGFyZ3MuR2V0
SXNvbGF0ZSgpKTtcbiI7CisgICAgICAgICMgRklYTUU6IFVwZGF0ZSBmb3IgYWxsIFNjcmlwdFdy
YXBwYWJsZXMuCisgICAgICAgIGlmIChJc0RPTU5vZGVUeXBlKCRpbnRlcmZhY2VOYW1lKSkgewor
ICAgICAgICAgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVybiB0b1Y4RmFzdChXVEY6Omdl
dFB0cigke3N2Z05hdGl2ZVR5cGV9OjpjcmVhdGUoJHJldHVybikpLCBhcmdzLCBpbXApO1xuIjsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1
cm4gdG9WOChXVEY6OmdldFB0cigke3N2Z05hdGl2ZVR5cGV9OjpjcmVhdGUoJHJldHVybikpLCBh
cmdzLkhvbGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7XG4iOworICAgICAgICB9CiAgICAgICAg
IHJldHVybiAkcmVzdWx0OwogICAgIH0KIApAQCAtMzY0MCw3ICszNjQyLDE2IEBAIHN1YiBHZW5l
cmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZygpCiAgICAgfQogCiAgICAgJHJldHVybiAuPSAiLnJlbGVh
c2UoKSIgaWYgKCRyZXR1cm5Jc1JlZik7Ci0gICAgJHJlc3VsdCAuPSAkaW5kZW50IC4gInJldHVy
biAiIC4gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJuLCAiYXJn
cy5Ib2xkZXIoKSIsICJhcmdzLkdldElzb2xhdGUoKSIpIC4gIjtcbiI7CisKKyAgICBteSAkbmF0
aXZlVmFsdWU7CisgICAgIyBGSVhNRTogVXBkYXRlIGZvciBhbGwgU2NyaXB0V3JhcHBhYmxlcy4K
KyAgICBpZiAoSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkpIHsKKyAgICAgICAgJG5hdGl2
ZVZhbHVlID0gTmF0aXZlVG9KU1ZhbHVlKCRmdW5jdGlvbi0+c2lnbmF0dXJlLCAkcmV0dXJuLCAi
YXJncy5Ib2xkZXIoKSIsICJhcmdzLkdldElzb2xhdGUoKSIsICJhcmdzIiwgImltcCIpOworICAg
IH0gZWxzZSB7CisgICAgICAgICRuYXRpdmVWYWx1ZSA9IE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rp
b24tPnNpZ25hdHVyZSwgJHJldHVybiwgImFyZ3MuSG9sZGVyKCkiLCAiYXJncy5HZXRJc29sYXRl
KCkiKTsKKyAgICB9CisKKyAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAicmV0dXJuICIgLiAkbmF0
aXZlVmFsdWUgLiAiO1xuIjsKIAogICAgIHJldHVybiAkcmVzdWx0OwogfQpAQCAtNDA1NCw2ICs0
MDY1LDEwIEBAIHN1YiBOYXRpdmVUb0pTVmFsdWUKICAgICBteSAkZ2V0Q3JlYXRpb25Db250ZXh0
QXJnID0gJGdldENyZWF0aW9uQ29udGV4dCA/ICIsICRnZXRDcmVhdGlvbkNvbnRleHQiIDogIiI7
CiAgICAgbXkgJGdldElzb2xhdGUgPSBzaGlmdDsKICAgICBteSAkZ2V0SXNvbGF0ZUFyZyA9ICRn
ZXRJc29sYXRlID8gIiwgJGdldElzb2xhdGUiIDogIiI7CisgICAgbXkgJGdldEhvbGRlckNvbnRh
aW5lciA9IHNoaWZ0OworICAgIG15ICRnZXRIb2xkZXJDb250YWluZXJBcmcgPSAkZ2V0SG9sZGVy
Q29udGFpbmVyID8gIiwgJGdldEhvbGRlckNvbnRhaW5lciIgOiAiIjsKKyAgICBteSAkZ2V0U2Ny
aXB0V3JhcHBhYmxlID0gc2hpZnQ7CisgICAgbXkgJGdldFNjcmlwdFdyYXBwYWJsZUFyZyA9ICRn
ZXRTY3JpcHRXcmFwcGFibGUgPyAiLCAkZ2V0U2NyaXB0V3JhcHBhYmxlIiA6ICIiOwogICAgIG15
ICR0eXBlID0gJHNpZ25hdHVyZS0+dHlwZTsKIAogICAgIHJldHVybiAoJGdldElzb2xhdGUgPyAi
djhCb29sZWFuKCR2YWx1ZSwgJGdldElzb2xhdGUpIiA6ICJ2OEJvb2xlYW4oJHZhbHVlKSIpIGlm
ICR0eXBlIGVxICJib29sZWFuIjsKQEAgLTQxMTQsNyArNDEyOSwxMCBAQCBzdWIgTmF0aXZlVG9K
U1ZhbHVlCiAgICAgQWRkSW5jbHVkZXNGb3JUeXBlKCR0eXBlKTsKIAogICAgIGlmIChJc0RPTU5v
ZGVUeXBlKCR0eXBlKSkgewotICAgICAgICByZXR1cm4gInRvVjgoJHZhbHVlJGdldENyZWF0aW9u
Q29udGV4dEFyZyRnZXRJc29sYXRlQXJnKSI7CisgICAgICBpZiAoJGdldFNjcmlwdFdyYXBwYWJs
ZSkgeworICAgICAgICAgIHJldHVybiAidG9WOEZhc3QoJHZhbHVlJGdldEhvbGRlckNvbnRhaW5l
ckFyZyRnZXRTY3JpcHRXcmFwcGFibGVBcmcpIjsKKyAgICAgIH0KKyAgICAgIHJldHVybiAidG9W
OCgkdmFsdWUkZ2V0Q3JlYXRpb25Db250ZXh0QXJnJGdldElzb2xhdGVBcmcpIjsKICAgICB9CiAK
ICAgICBpZiAoJHR5cGUgZXEgIkV2ZW50VGFyZ2V0IikgewpAQCAtNDEzNSw2ICs0MTUzLDkgQEAg
c3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJ3dGYvUmVmUHRyLmgi
KTsKICAgICBBZGRUb0ltcGxJbmNsdWRlcygid3RmL0dldFB0ci5oIik7CiAKKyAgICBpZiAoJGdl
dFNjcmlwdFdyYXBwYWJsZSkgeworICAgICAgICAgIHJldHVybiAidG9WOEZhc3QoJHZhbHVlJGdl
dEhvbGRlckNvbnRhaW5lckFyZyRnZXRTY3JpcHRXcmFwcGFibGVBcmcpIjsKKyAgICB9CiAgICAg
cmV0dXJuICJ0b1Y4KCR2YWx1ZSRnZXRDcmVhdGlvbkNvbnRleHRBcmckZ2V0SXNvbGF0ZUFyZyki
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3Rv
cmUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNwcAppbmRl
eCA5MWZiOWRjZTYxNTZkM2ZiYzQyMmU1NTJhOTA3ZDk1MTNjZTJiZWZkLi43ZDllNGE5YjA0OGE0
MzU4Y2U1MDM5OTY0NGRjODIyN2JjMzZlZWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0RPTURhdGFTdG9yZS5jcHAKQEAgLTUxLDEwICs1MSwxNSBAQCBET01EYXRhU3RvcmU6On5E
T01EYXRhU3RvcmUoKQogICAgIG1fd3JhcHBlck1hcC5jbGVhcigpOwogfQogCi1ET01EYXRhU3Rv
cmUqIERPTURhdGFTdG9yZTo6Y3VycmVudCh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK0RPTURhdGFT
dG9yZSogRE9NRGF0YVN0b3JlOjptYWluV29ybGRTdG9yZSgpCiB7CiAgICAgREVGSU5FX1NUQVRJ
Q19MT0NBTChET01EYXRhU3RvcmUsIG1haW5Xb3JsZERPTURhdGFTdG9yZSwgKE1haW5Xb3JsZCkp
OworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuICZtYWluV29ybGRET01E
YXRhU3RvcmU7Cit9CiAKK0RPTURhdGFTdG9yZSogRE9NRGF0YVN0b3JlOjpjdXJyZW50KHY4OjpJ
c29sYXRlKiBpc29sYXRlKQorewogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBpc29sYXRl
ID8gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKSA6IFY4UGVySXNvbGF0ZURhdGE6OmN1
cnJlbnQoKTsKICAgICBpZiAoVU5MSUtFTFkoISFkYXRhLT5kb21EYXRhU3RvcmUoKSkpCiAgICAg
ICAgIHJldHVybiBkYXRhLT5kb21EYXRhU3RvcmUoKTsKQEAgLTY1LDcgKzcwLDcgQEAgRE9NRGF0
YVN0b3JlKiBET01EYXRhU3RvcmU6OmN1cnJlbnQodjg6Oklzb2xhdGUqIGlzb2xhdGUpCiAgICAg
ICAgICAgICByZXR1cm4gaXNvbGF0ZWRXb3JsZC0+aXNvbGF0ZWRXb3JsZERPTURhdGFTdG9yZSgp
OwogICAgIH0KIAotICAgIHJldHVybiAmbWFpbldvcmxkRE9NRGF0YVN0b3JlOworICAgIHJldHVy
biBtYWluV29ybGRTdG9yZSgpOwogfQogCiB2b2lkIERPTURhdGFTdG9yZTo6cmVwb3J0TWVtb3J5
VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgKaW5kZXggNGIyYjQyNWVlMzUwMDM2YWE2
ZjkwNzQyZGQ1NjEyZWYyNjYxMDZlNS4uNTkyMjU5MWYwMjUzNzdkMTdmOTY1MGY0MjE0OGViMWQ5
YmM4ZDk1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0
b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgKQEAg
LTYxLDE3ICs2MSw0NiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgRE9NRGF0YVN0b3JlKiBjdXJy
ZW50KHY4OjpJc29sYXRlKik7CiAKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBn
ZXROb2RlKE5vZGUqIG9iamVjdCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUgSG9sZGVyQ29udGFpbmVyLCB0eXBlbmFtZSBXcmFwcGFibGU+
CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2V0V3JhcHBlckZhc3QoVCogb2Jq
ZWN0LCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFi
bGUpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKCFET01XcmFwcGVyV29ybGQ6Omlzb2xhdGVk
V29ybGRzRXhpc3QoKSkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0V3JhcHBlckZyb21PYmplY3Qo
b2JqZWN0KTsKKyAgICAgICAgLy8gV2hhdCB3ZSdkIHJlYWxseSBsaWtlIHRvIGNoZWNrIGhlcmUg
aXMgd2hldGhlciB3ZSdyZSBpbiB0aGUgbWFpbiB3b3JsZCBvcgorICAgICAgICAvLyBpbiBhbiBp
c29sYXRlZCB3b3JsZC4gVGhlIGZhc3Rlc3Qgd2F5IHdlIGtub3cgaG93IHRvIGRvIHRoYXQgaXMg
dG8gY2hlY2sKKyAgICAgICAgLy8gd2hldGhlciB0aGUgd3JhcHBhYmxlJ3Mgd3JhcHBlciBpcyB0
aGUgc2FtZSBhcyB0aGUgaG9sZGVyCisgICAgICAgIGlmIChob2xkZXJDb250YWluc1dyYXBwZXIo
Y29udGFpbmVyLCB3cmFwcGFibGUpKSB7CisgICAgICAgICAgICBpZiAobWFpbldvcmxkV3JhcHBl
cklzU3RvcmVkSW5PYmplY3Qob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V3Jh
cHBlckZyb21PYmplY3Qob2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBtYWluV29ybGRTdG9y
ZSgpLT5tX3dyYXBwZXJNYXAuZ2V0KG9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGdldFdyYXBwZXIob2JqZWN0LCBjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGdldFdyYXBwZXIoVCogb2JqZWN0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKKyAgICB7CisgICAg
ICAgIGlmIChtYWluV29ybGRXcmFwcGVySXNTdG9yZWRJbk9iamVjdChvYmplY3QpICYmIGlzTWFp
bldvcmxkT2JqZWN0KG9iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoIURPTVdyYXBw
ZXJXb3JsZDo6aXNvbGF0ZWRXb3JsZHNFeGlzdCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2V0V3JhcHBlckZyb21PYmplY3Qob2JqZWN0KTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4g
Y3VycmVudChpc29sYXRlKS0+Z2V0KG9iamVjdCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBzZXRXcmFwcGVyKFQqIG9iamVjdCwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCisgICAgewor
ICAgICAgICBpZiAobWFpbldvcmxkV3JhcHBlcklzU3RvcmVkSW5PYmplY3Qob2JqZWN0KSAmJiBp
c01haW5Xb3JsZE9iamVjdChvYmplY3QpKSB7CisgICAgICAgICAgICBpZiAoTElLRUxZKCFET01X
cmFwcGVyV29ybGQ6Omlzb2xhdGVkV29ybGRzRXhpc3QoKSkpIHsKKyAgICAgICAgICAgICAgICBz
ZXRXcmFwcGVySW5PYmplY3Qob2JqZWN0LCB3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGN1cnJlbnQoaXNv
bGF0ZSktPnNldChvYmplY3QsIHdyYXBwZXIpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiAgICAgaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2V0KFQqIG9iamVjdCkK
ICAgICB7Ci0gICAgICAgIGlmICh3cmFwcGVySXNTdG9yZWRJbk9iamVjdChvYmplY3QpKQorICAg
ICAgICBpZiAobWFpbldvcmxkV3JhcHBlcklzU3RvcmVkSW5PYmplY3Qob2JqZWN0KSAmJiBtX3R5
cGUgPT0gTWFpbldvcmxkKQogICAgICAgICAgICAgcmV0dXJuIGdldFdyYXBwZXJGcm9tT2JqZWN0
KG9iamVjdCk7CiAgICAgICAgIHJldHVybiBtX3dyYXBwZXJNYXAuZ2V0KG9iamVjdCk7CiAgICAg
fQpAQCAtNzksNDcgKzEwOCw2NSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
ICAgICBpbmxpbmUgdm9pZCBzZXQoVCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVyKQogICAgIHsKLSAgICAgICAgaWYgKHNldFdyYXBwZXJJbk9iamVjdChvYmplY3Qs
IHdyYXBwZXIpKQorICAgICAgICBBU1NFUlQoISFvYmplY3QpOworICAgICAgICBBU1NFUlQoIXdy
YXBwZXIuSXNFbXB0eSgpKTsKKyAgICAgICAgaWYgKG1haW5Xb3JsZFdyYXBwZXJJc1N0b3JlZElu
T2JqZWN0KG9iamVjdCkgJiYgbV90eXBlID09IE1haW5Xb3JsZCkgeworICAgICAgICAgICAgc2V0
V3JhcHBlckluT2JqZWN0KG9iamVjdCwgd3JhcHBlcik7CiAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KICAgICAgICAgbV93cmFwcGVyTWFwLnNldChvYmplY3QsIHdyYXBwZXIpOwogICAg
IH0KIAogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0
OwogCiBwcml2YXRlOgotICAgIGJvb2wgd3JhcHBlcklzU3RvcmVkSW5PYmplY3Qodm9pZCopIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCB3cmFwcGVySXNTdG9yZWRJbk9iamVjdChT
Y3JpcHRXcmFwcGFibGUqKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gTWFpbldvcmxkOyB9Cisg
ICAgc3RhdGljIERPTURhdGFTdG9yZSogbWFpbldvcmxkU3RvcmUoKTsKKworICAgIHN0YXRpYyBi
b29sIG1haW5Xb3JsZFdyYXBwZXJJc1N0b3JlZEluT2JqZWN0KHZvaWQqKSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHN0YXRpYyBib29sIG1haW5Xb3JsZFdyYXBwZXJJc1N0b3JlZEluT2JqZWN0KFNj
cmlwdFdyYXBwYWJsZSopIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0YXRpYyBib29sIGlzTWFp
bldvcmxkT2JqZWN0KHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBib29sIGlz
TWFpbldvcmxkT2JqZWN0KE5vZGUqKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIb2xkZXJDb250YWluZXI+CisgICAgc3RhdGljIGJvb2wgaG9sZGVyQ29udGFpbnNX
cmFwcGVyKGNvbnN0IEhvbGRlckNvbnRhaW5lciYsIHZvaWQqKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIb2xkZXJDb250YWluZXI+
CisgICAgc3RhdGljIGJvb2wgaG9sZGVyQ29udGFpbnNXcmFwcGVyKGNvbnN0IEhvbGRlckNvbnRh
aW5lciYgY29udGFpbmVyLCBTY3JpcHRXcmFwcGFibGUqIHdyYXBwYWJsZSkKKyAgICB7CisgICAg
ICAgIC8vIFZlcmlmeSBvdXIgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIG1haW4gd29ybGQuCisgICAg
ICAgIEFTU0VSVCh3cmFwcGFibGUtPndyYXBwZXIoKS5Jc0VtcHR5KCkgfHwgY29udGFpbmVyLkhv
bGRlcigpICE9IHdyYXBwYWJsZS0+d3JhcHBlcigpIHx8IGN1cnJlbnQodjg6Oklzb2xhdGU6Okdl
dEN1cnJlbnQoKSktPm1fdHlwZSA9PSBNYWluV29ybGQpOworICAgICAgICByZXR1cm4gY29udGFp
bmVyLkhvbGRlcigpID09IHdyYXBwYWJsZS0+d3JhcHBlcigpOworICAgIH0KIAogICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdldFdyYXBwZXJGcm9tT2JqZWN0KHZvaWQqKQogICAg
IHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KCk7CiAgICAgfQotCiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gZ2V0V3JhcHBlckZyb21PYmplY3QoU2NyaXB0V3JhcHBhYmxlKiBvYmplY3QpCiAgICAg
ewogICAgICAgICByZXR1cm4gb2JqZWN0LT53cmFwcGVyKCk7CiAgICAgfQogCi0gICAgYm9vbCBz
ZXRXcmFwcGVySW5PYmplY3Qodm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KSB7IHJl
dHVybiBmYWxzZTsgfQotICAgIGJvb2wgc2V0V3JhcHBlckluT2JqZWN0KFNjcmlwdFdyYXBwYWJs
ZSogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHN0YXRp
YyB2b2lkIHNldFdyYXBwZXJJbk9iamVjdCh2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD4pCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgc3Rh
dGljIHZvaWQgc2V0V3JhcHBlckluT2JqZWN0KFNjcmlwdFdyYXBwYWJsZSogb2JqZWN0LCB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAgIHsKLSAgICAgICAgaWYgKG1fdHlw
ZSAhPSBNYWluV29ybGQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEFTU0VS
VChvYmplY3QtPndyYXBwZXIoKS5Jc0VtcHR5KCkpOwogICAgICAgICBvYmplY3QtPnNldFdyYXBw
ZXIod3JhcHBlcik7CiAgICAgICAgIHdyYXBwZXIuTWFrZVdlYWsob2JqZWN0LCB3ZWFrQ2FsbGJh
Y2spOwotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgYm9vbCBzZXRXcmFwcGVySW5P
YmplY3QoTm9kZSogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQor
ICAgIHN0YXRpYyB2b2lkIHNldFdyYXBwZXJJbk9iamVjdChOb2RlKiBvYmplY3QsIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiAgICAgewotICAgICAgICBpZiAobV90eXBlICE9
IE1haW5Xb3JsZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgQVNTRVJUKG9i
amVjdC0+d3JhcHBlcigpLklzRW1wdHkoKSk7CiAgICAgICAgIG9iamVjdC0+c2V0V3JhcHBlcih3
cmFwcGVyKTsKICAgICAgICAgVjhHQ0NvbnRyb2xsZXI6OmRpZENyZWF0ZVdyYXBwZXJGb3JOb2Rl
KG9iamVjdCk7CiAgICAgICAgIHdyYXBwZXIuTWFrZVdlYWsoc3RhdGljX2Nhc3Q8U2NyaXB0V3Jh
cHBhYmxlKj4ob2JqZWN0KSwgd2Vha0NhbGxiYWNrKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCiAgICAgc3RhdGljIHZvaWQgd2Vha0NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpW
YWx1ZT4sIHZvaWQqIGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuaAppbmRleCAxZjgwNjJkYzZkNjk0OWYwODYxYWYzOWI5NjdiMDBmZmRjZjkwOWI1Li4y
NzRlYzBlMzZkNWQwZmE5ZmRmMzg3ZWFjNDlmODExNGMwZWFjODIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaApAQCAtMTMxLDcgKzEzMSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhh
bmRsZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcik7CiAgICAgICAg
IEFTU0VSVChtYXliZURPTVdyYXBwZXIod3JhcHBlckhhbmRsZSkpOwogICAgICAgICBzZXRXcmFw
cGVyQ2xhc3Mob2JqZWN0LmdldCgpLCB3cmFwcGVySGFuZGxlKTsKLSAgICAgICAgRE9NRGF0YVN0
b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5zZXQob2JqZWN0LmxlYWtSZWYoKSwgd3JhcHBlckhhbmRs
ZSk7CisgICAgICAgIERPTURhdGFTdG9yZTo6c2V0V3JhcHBlcihvYmplY3QubGVha1JlZigpLCB3
cmFwcGVySGFuZGxlLCBpc29sYXRlKTsKICAgICAgICAgcmV0dXJuIHdyYXBwZXJIYW5kbGU7CiAg
ICAgfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>177692</attachid>
            <date>2012-12-05 01:01:51 -0800</date>
            <delta_ts>2012-12-05 01:04:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102686-20121205095915.patch</filename>
            <type>text/plain</type>
            <size>71143</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM2NjQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNjUyYWRiYmZjY2E2MzJj
MTJkNzI0ZDhmOTQzNzQzZDgwMTg4ZjE0OS4uMDMyYjgwMjQxYWJlOWUzNDQ0NmZkNDJhOGJhYWU1
ZjM0ZTZiNDA5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDEyLTEyLTA0ICBEYW4g
Q2FybmV5ICA8ZGNhcm5leUBnb29nbGUuY29tPgorCisgICAgICAgIFtWOF0gdG9WOEZhc3QgZm9y
IGFsbCBjbGFzc2VzIHdpdGggU2NyaXB0V3JhcHBlciBIb2xkZXIgb2JqZWN0cworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAyNjg2CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIG1vc3Qg
Z2VuZXJhdGVkIGJpbmRpbmdzIHVzZSB0b1Y4RmFzdAorICAgICAgICBieSBhZGRpbmcgYSBmYXN0
IHBhdGggdG8gdGhlIG1haW4gd29ybGQgRE9NRGF0YVN0b3JlLgorICAgICAgICBBZGRpdGlvbmFs
bHksIHRvVjhGYXN0IGlzIG5vdyBiZWluZyBjYWxsZWQgb24gY2FsbGJhY2tzCisgICAgICAgIHdo
aWNoIHVzZSB2ODo6QXJndW1lbnRzLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdl
IGluIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5l
cmF0b3JWOC5wbToKKyAgICAgICAgKEdlbmVyYXRlSGVhZGVyKToKKyAgICAgICAgKEdlbmVyYXRl
Tm9ybWFsQXR0ckdldHRlcik6CisgICAgICAgIChHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmluZyk6
CisgICAgICAgIChOYXRpdmVUb0pTVmFsdWUpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RPTURh
dGFTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01EYXRhU3RvcmU6Om1haW5Xb3JsZFN0
b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkRPTURhdGFTdG9yZTo6Y3VycmVudCk6CisgICAgICAg
ICogYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmg6CisKIDIwMTItMTItMDUgIEhhbnMgTXVsbGVy
ICA8aG11bGxlckBhZG9iZS5jb20+CiAKICAgICAgICAgW0NTUyBFeGNsdXNpb25zXSBFeGNsdXNp
b25TaGFwZSBpbmxpbmVzIHNob3VsZCB1c2UgaXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9y
VjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5w
bQppbmRleCA3NmRiZDRjNDM0ZGM3NDA3ODBkMTk3ZTEzYjIyODkxOWU4NTIwOTNjLi5mM2JiNGI3
OWVhZTBkMjA3NGQxNThlYjA1Nzk3MDMyNDQ4MzJiMzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQpAQCAtNTM0LDE0ICs1MzQs
MTQgQEAgRU5ECiBjbGFzcyAke25hdGl2ZVR5cGV9Owogdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoJHtuYXRpdmVUeXBlfSosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0
ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogPSAwKTsKIAotaW5saW5l
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdCgke25hdGl2ZVR5cGV9KiBpbXBsLCBjb25z
dCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvLCBOb2RlKikKK3RlbXBsYXRlPGNsYXNzIEhvbGRlckNv
bnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4RmFzdCgke25hdGl2ZVR5cGV9KiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRh
aW5lciwgV3JhcHBhYmxlKikKIHsKLSAgICByZXR1cm4gdG9WOChpbXBsLCBpbmZvLkhvbGRlcigp
LCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjgoaW1wbCwgY29udGFpbmVyLkhv
bGRlcigpLCBjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsKIH0KIEVORAogICAgIH0gZWxzZSB7CiAK
LSAgICAgICAgbXkgJGdldENhY2hlZFdyYXBwZXIgPSAkY29kZUdlbmVyYXRvci0+SXNTdWJUeXBl
KCRpbnRlcmZhY2UsICJOb2RlIikgPyAiRE9NRGF0YVN0b3JlOjpnZXROb2RlKGltcGwsIGlzb2xh
dGUpIiA6ICJET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKSI7CiAgICAg
ICAgIG15ICRjcmVhdGVXcmFwcGVyQ2FsbCA9ICRjdXN0b21XcmFwID8gIiR7djhJbnRlcmZhY2VO
YW1lfTo6d3JhcCIgOiAiJHt2OEludGVyZmFjZU5hbWV9OjpjcmVhdGVXcmFwcGVyIjsKIAogICAg
ICAgICBpZiAoJGN1c3RvbVdyYXApIHsKQEAgLTU1NSw3ICs1NTUsNyBAQCBFTkQKIGlubGluZSB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRpdmVUeXBlfSogaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkK
IHsKICAgICBBU1NFUlQoaW1wbCk7Ci0gICAgQVNTRVJUKCRnZXRDYWNoZWRXcmFwcGVyLklzRW1w
dHkoKSk7CisgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRl
KS5Jc0VtcHR5KCkpOwogICAgIHJldHVybiAkY3JlYXRlV3JhcHBlckNhbGwoaW1wbCwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKIH0KIEVORApAQCAtNTY3LDM0ICs1NjcsMzMgQEAgaW5saW5l
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gY3IKIHsKICAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQogICAgICAgICBy
ZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB3cmFwcGVyID0gJGdldENhY2hlZFdyYXBwZXI7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0ZSk7CiAgICAg
aWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgcmV0
dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KLUVORAotICAgICAg
ICBpZiAoJGNvZGVHZW5lcmF0b3ItPklzU3ViVHlwZSgkaW50ZXJmYWNlLCAiTm9kZSIpKSB7Ci0g
ICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAKLWlubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoJHtuYXRpdmVUeXBlfSogaW1wbCwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbywgTm9kZSogaG9sZGVyKQordGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29u
dGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+CitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjhGYXN0KCR7bmF0aXZlVHlwZX0qIGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFp
bmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKIHsKICAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQot
ICAgICAgICByZXR1cm4gdjhOdWxsKGluZm8uR2V0SXNvbGF0ZSgpKTsKLSAgICAvLyBXaGF0IHdl
J2QgcmVhbGx5IGxpa2UgdG8gY2hlY2sgaGVyZSBpcyB3aGV0aGVyIHdlJ3JlIGluIHRoZSBtYWlu
IHdvcmxkIG9yCi0gICAgLy8gaW4gYW4gaXNvbGF0ZWQgd29ybGQuIFRoZSBmYXN0ZXN0IHdheSB3
ZSBrbm93IGhvdyB0byBkbyB0aGF0IGlzIHRvIGNoZWNrCi0gICAgLy8gd2hldGhlciB0aGUgaG9s
ZGVyJ3MgaW5saW5lIHdyYXBwZXIgaXMgdGhlIHNhbWUgd3JhcHBlciB3ZSBzZWUgaW4gdGhlCi0g
ICAgLy8gdjg6OkFjY2Vzc29ySW5mby4KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBw
ZXIgPSAoaG9sZGVyLT53cmFwcGVyKCkgPT0gaW5mby5Ib2xkZXIoKSkgPyBpbXBsLT53cmFwcGVy
KCkgOiBET01EYXRhU3RvcmU6OmdldE5vZGUoaW1wbCwgaW5mby5HZXRJc29sYXRlKCkpOworICAg
ICAgICByZXR1cm4gdjhOdWxsKGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOworICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlckZhc3QoaW1w
bCwgY29udGFpbmVyLCB3cmFwcGFibGUpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiB3cmFwKGltcGwsIGluZm8uSG9sZGVy
KCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gd3JhcChpbXBsLCBjb250YWluZXIu
SG9sZGVyKCksIGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOwogfQogRU5ECi0gICAgICAgIH0KICAg
ICB9CiAKICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CiAKK3RlbXBsYXRlPGNsYXNz
IEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgoraW5saW5lIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4RmFzdChQYXNzUmVmUHRyPCAke25hdGl2ZVR5cGV9ID4gaW1wbCwgY29uc3Qg
SG9sZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQoreworICAg
IHJldHVybiB0b1Y4RmFzdChpbXBsLmdldCgpLCBjb250YWluZXIsIHdyYXBwYWJsZSk7Cit9CisK
IGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCAke25hdGl2ZVR5
cGV9ID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICBy
ZXR1cm4gdG9WOChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwpAQCAtMTA0
NCw3ICsxMDQzLDcgQEAgRU5ECiAgICAgICAgICMgQ2hlY2sgZm9yIGEgd3JhcHBlciBpbiB0aGUg
d3JhcHBlciBjYWNoZS4gSWYgdGhlcmUgaXMgb25lLCB3ZSBrbm93IHRoYXQgYSBoaWRkZW4gcmVm
ZXJlbmNlIGhhcyBhbHJlYWR5CiAgICAgICAgICMgYmVlbiBjcmVhdGVkLiBJZiB3ZSBkb24ndCBm
aW5kIGEgd3JhcHBlciwgd2UgY3JlYXRlIGJvdGggYSB3cmFwcGVyIGFuZCBhIGhpZGRlbiByZWZl
cmVuY2UuCiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgUmVmUHRyPCRyZXR1
cm5UeXBlPiByZXN1bHQgPSAke2dldHRlclN0cmluZ307XG4iKTsKLSAgICAgICAgcHVzaChAaW1w
bENvbnRlbnREZWNscywgIiAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IHJlc3Vs
dC5nZXQoKSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPihET01EYXRhU3RvcmU6OmN1cnJlbnQoaW5m
by5HZXRJc29sYXRlKCkpLT5nZXQocmVzdWx0LmdldCgpKSkgOiB2OFVuZGVmaW5lZCgpO1xuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHdyYXBwZXIgPSByZXN1bHQuZ2V0KCkgPyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oRE9NRGF0
YVN0b3JlOjpnZXRXcmFwcGVyKHJlc3VsdC5nZXQoKSwgaW5mby5HZXRJc29sYXRlKCkpKSA6IHY4
VW5kZWZpbmVkKCk7XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBp
ZiAod3JhcHBlci5Jc0VtcHR5KCkpIHtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERl
Y2xzLCAiICAgICAgICB3cmFwcGVyID0gdG9WOChyZXN1bHQuZ2V0KCksIGluZm8uSG9sZGVyKCks
IGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIpOyAjIEZJWE1FOiBDb3VsZCB1c2Ugd3JhcCBoZXJlIHNp
bmNlIHRoZSB3cmFwcGVyIGlzIGVtcHR5LgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xz
LCAiICAgICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKVxuIik7CkBAIC0xMDYwLDExICsxMDU5
LDEyIEBAIEVORAogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkYXR0clR5cGUuaCIpOwog
ICAgICAgICBteSAkc3ZnTmF0aXZlVHlwZSA9ICRjb2RlR2VuZXJhdG9yLT5HZXRTVkdUeXBlTmVl
ZGluZ1RlYXJPZmYoJGF0dHJUeXBlKTsKICAgICAgICAgIyBDb252ZXJ0IGZyb20gYWJzdHJhY3Qg
U1ZHUHJvcGVydHkgdG8gcmVhbCB0eXBlLCBzbyB0aGUgcmlnaHQgdG9KUygpIG1ldGhvZCBjYW4g
YmUgaW52b2tlZC4KLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4g
dG9WOChzdGF0aWNfY2FzdDwkc3ZnTmF0aXZlVHlwZSo+KCRyZXN1bHQpLCBpbmZvLkhvbGRlcigp
LCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICByZXR1cm4gdG9WOEZhc3Qoc3RhdGljX2Nhc3Q8JHN2Z05hdGl2ZVR5cGUqPigkcmVz
dWx0KSwgaW5mbywgaW1wKTtcbiIpOwogICAgIH0gZWxzaWYgKCRjb2RlR2VuZXJhdG9yLT5Jc1NW
R1R5cGVOZWVkaW5nVGVhck9mZigkYXR0clR5cGUpIGFuZCBub3QgJGludGVyZmFjZU5hbWUgPX4g
L0xpc3QkLykgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiVjgkYXR0clR5cGUuaCIpOwog
ICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiU1ZHUHJvcGVydHlUZWFyT2ZmLmgiKTsKICAgICAg
ICAgbXkgJHRlYXJPZmZUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldFNWR1R5cGVOZWVkaW5nVGVh
ck9mZigkYXR0clR5cGUpOworICAgICAgICBteSAkd3JhcHBlZFZhbHVlOwogICAgICAgICBpZiAo
JGNvZGVHZW5lcmF0b3ItPklzU1ZHVHlwZVdpdGhXcml0YWJsZVByb3BlcnRpZXNOZWVkaW5nVGVh
ck9mZigkYXR0clR5cGUpIGFuZCBub3QgZGVmaW5lZCAkYXR0cmlidXRlLT5zaWduYXR1cmUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJJbW11dGFibGUifSkgewogICAgICAgICAgICAgbXkgJGdldHRl
ciA9ICRyZXN1bHQ7CiAgICAgICAgICAgICAkZ2V0dGVyID1+IHMvaW1wLT4vLzsKQEAgLTEwODMs
MjAgKzEwODMsMjEgQEAgRU5ECiAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPX4gcy9tYXRy
aXgvc3ZnTWF0cml4LzsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7dGVhck9m
ZlR5cGV9OjpjcmVhdGUod3JhcHBlciwgJHJlc3VsdCwgJHVwZGF0ZU1ldGhvZCkpLCBpbmZvLkhv
bGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsKKyAgICAgICAgICAgICAgICAkd3JhcHBl
ZFZhbHVlID0gIldURjo6Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVhdGUod3JhcHBlciwgJHJl
c3VsdCwgJHVwZGF0ZU1ldGhvZCkpIjsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNWR1N0YXRpY1Byb3BlcnR5VGVhck9mZi5oIik7CiAg
ICAgICAgICAgICAgICAgJHRlYXJPZmZUeXBlID1+IHMvU1ZHUHJvcGVydHlUZWFyT2ZmPC9TVkdT
dGF0aWNQcm9wZXJ0eVRlYXJPZmY8JGludGVyZmFjZU5hbWUsIC87CiAKLSAgICAgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7
dGVhck9mZlR5cGV9OjpjcmVhdGUoaW1wLCAkcmVzdWx0LCAkdXBkYXRlTWV0aG9kKSksIGluZm8u
SG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTtcbiIpOworICAgICAgICAgICAgICAgICR3cmFw
cGVkVmFsdWUgPSAiV1RGOjpnZXRQdHIoJHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZShpbXAsICRyZXN1
bHQsICR1cGRhdGVNZXRob2QpKSI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzaWYgKCR0
ZWFyT2ZmVHlwZSA9fiAvU1ZHU3RhdGljTGlzdFByb3BlcnR5VGVhck9mZi8pIHsKLSAgICAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIo
JHt0ZWFyT2ZmVHlwZX06OmNyZWF0ZShpbXAsICRyZXN1bHQpKSwgaW5mby5Ib2xkZXIoKSwgaW5m
by5HZXRJc29sYXRlKCkpO1xuIik7CisgICAgICAgICAgICAgICAgJHdyYXBwZWRWYWx1ZSA9ICJX
VEY6OmdldFB0cigke3RlYXJPZmZUeXBlfTo6Y3JlYXRlKGltcCwgJHJlc3VsdCkpIjsKICAgICAg
ICAgfSBlbHNpZiAoJHRlYXJPZmZUeXBlID1+IC9TVkcoUG9pbnR8UGF0aFNlZylMaXN0Lykgewot
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdG9WOChXVEY6
OmdldFB0cigkcmVzdWx0KSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpO1xuIik7
CisgICAgICAgICAgICAgICAgJHdyYXBwZWRWYWx1ZSA9ICJXVEY6OmdldFB0cigkcmVzdWx0KSI7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAi
ICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVhdGUoJHJlc3Vs
dCkpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7XG4iKTsKKyAgICAgICAgICAg
ICAgICAkd3JhcHBlZFZhbHVlID0gIldURjo6Z2V0UHRyKCR7dGVhck9mZlR5cGV9OjpjcmVhdGUo
JHJlc3VsdCkpIjsKICAgICAgICAgfQorICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAi
ICAgIHJldHVybiB0b1Y4RmFzdCgkd3JhcHBlZFZhbHVlLCBpbmZvLCBpbXApO1xuIik7CiAgICAg
fSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50eXBlIGVxICJNZXNzYWdlUG9ydEFycmF5
IikgewogICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygiTWVzc2FnZVBvcnQuaCIpOwogICAgICAg
ICBBZGRUb0ltcGxJbmNsdWRlcygiVjhNZXNzYWdlUG9ydC5oIik7CkBAIC0xMTA4LDcgKzExMDks
NyBAQCBFTkQKICAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRzQ29weSgqcG9ydHMpOwogICAgIHY4
OjpMb2NhbDx2ODo6QXJyYXk+IHBvcnRBcnJheSA9IHY4OjpBcnJheTo6TmV3KHBvcnRzQ29weS5z
aXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9ydHNDb3B5LnNpemUoKTsgKytp
KQotICAgICAgICBwb3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5HZXRJc29sYXRlKCkp
LCB0b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRl
KCkpKTsKKyAgICAgICAgcG9ydEFycmF5LT5TZXQodjhJbnRlZ2VyKGksIGluZm8uR2V0SXNvbGF0
ZSgpKSwgdG9WOEZhc3QocG9ydHNDb3B5W2ldLmdldCgpLCBpbmZvLCBpbXApKTsKICAgICByZXR1
cm4gcG9ydEFycmF5OwogRU5ECiAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLT50
eXBlIGVxICJTZXJpYWxpemVkU2NyaXB0VmFsdWUiICYmICRhdHRyRXh0LT57IkNhY2hlZEF0dHJp
YnV0ZSJ9KSB7CkBAIC0xMTE5LDExICsxMTIwLDggQEAgRU5ECiAgICAgaW5mby5Ib2xkZXIoKS0+
U2V0SGlkZGVuVmFsdWUocHJvcGVydHlOYW1lLCB2YWx1ZSk7CiAgICAgcmV0dXJuIHZhbHVlOwog
RU5ECi0gICAgfSBlbHNpZiAoSXNET01Ob2RlVHlwZSgkaW50ZXJmYWNlTmFtZSkgJiYgSXNET01O
b2RlVHlwZSgkYXR0clR5cGUpKSB7Ci0gICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCRhdHRyVHlw
ZS4iLmgiKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gdG9W
OEZhc3QoJHJlc3VsdCwgaW5mbywgaW1wKTtcbiIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgcmV0dXJuICIgLiBOYXRpdmVUb0pTVmFsdWUoJGF0
dHJpYnV0ZS0+c2lnbmF0dXJlLCAkcmVzdWx0LCAiaW5mby5Ib2xkZXIoKSIsICJpbmZvLkdldElz
b2xhdGUoKSIpLiI7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBy
ZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkYXR0cmlidXRlLT5zaWduYXR1cmUsICRyZXN1bHQs
ICJpbmZvLkhvbGRlcigpIiwgImluZm8uR2V0SXNvbGF0ZSgpIiwgImluZm8iLCAiaW1wIikuIjtc
biIpOwogICAgIH0KIAogICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICJ9XG5cbiIpOyAgIyBl
bmQgb2YgZ2V0dGVyCkBAIC0zNDYwLDE0ICszNDU4LDEzIEBAIHN1YiBHZW5lcmF0ZVRvVjhDb252
ZXJ0ZXJzCiAKICAgICBteSAkY3JlYXRlV3JhcHBlckFyZ3VtZW50VHlwZSA9IEdldFBhc3NSZWZQ
dHJUeXBlKCRuYXRpdmVUeXBlKTsKICAgICBteSAkYmFzZVR5cGUgPSBCYXNlSW50ZXJmYWNlTmFt
ZSgkaW50ZXJmYWNlKTsKLSAgICBteSAkZ2V0Q2FjaGVkV3JhcHBlciA9ICRjb2RlR2VuZXJhdG9y
LT5Jc1N1YlR5cGUoJGludGVyZmFjZSwgIk5vZGUiKSA/ICJET01EYXRhU3RvcmU6OmdldE5vZGUo
aW1wbC5nZXQoKSwgaXNvbGF0ZSkiIDogIkRPTURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+
Z2V0KGltcGwuZ2V0KCkpIjsKIAogICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CiAKIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gJHt2OEludGVyZmFjZU5hbWV9OjpjcmVhdGVXcmFwcGVyKCR7
Y3JlYXRlV3JhcHBlckFyZ3VtZW50VHlwZX0gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIEFTU0VSVChpbXBs
LmdldCgpKTsKLSAgICBBU1NFUlQoJGdldENhY2hlZFdyYXBwZXIuSXNFbXB0eSgpKTsKKyAgICBB
U1NFUlQoRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwuZ2V0KCksIGlzb2xhdGUpLklzRW1w
dHkoKSk7CiBFTkQKICAgICBpZiAoJGJhc2VUeXBlIG5lICRpbnRlcmZhY2VOYW1lKSB7CiAgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7CkBAIC0zNDgyLDcgKzM0NzksNyBAQCBFTkQK
ICAgICBpZiAoRnJhbWUqIGZyYW1lID0gaW1wbC0+ZnJhbWUoKSkgewogICAgICAgICBpZiAoZnJh
bWUtPnNjcmlwdCgpLT5pbml0aWFsaXplTWFpbldvcmxkKCkpIHsKICAgICAgICAgICAgIC8vIGlu
aXRpYWxpemVNYWluV29ybGQgbWF5IGhhdmUgY3JlYXRlZCBhIHdyYXBwZXIgZm9yIHRoZSBvYmpl
Y3QsIHJldHJ5IGZyb20gdGhlIHN0YXJ0LgotICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXROb2RlKGltcGwuZ2V0KCksIGlzb2xhdGUp
OworICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0
b3JlOjpnZXRXcmFwcGVyKGltcGwuZ2V0KCksIGlzb2xhdGUpOwogICAgICAgICAgICAgaWYgKCF3
cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICAg
ICAgfQpAQCAtMzYyMCw3ICszNjE3LDEyIEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbFN0cmlu
ZygpCiAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJWOCRyZXR1cm5UeXBlLmgiKTsKICAgICAg
ICAgQWRkVG9JbXBsSW5jbHVkZXMoIlNWR1Byb3BlcnR5VGVhck9mZi5oIik7CiAgICAgICAgIG15
ICRzdmdOYXRpdmVUeXBlID0gJGNvZGVHZW5lcmF0b3ItPkdldFNWR1R5cGVOZWVkaW5nVGVhck9m
ZigkcmV0dXJuVHlwZSk7Ci0gICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4gdG9W
OChXVEY6OmdldFB0cigke3N2Z05hdGl2ZVR5cGV9OjpjcmVhdGUoJHJldHVybikpLCBhcmdzLkhv
bGRlcigpLCBhcmdzLkdldElzb2xhdGUoKSk7XG4iOworICAgICAgICAjIEZJWE1FOiBVcGRhdGUg
Zm9yIGFsbCBTY3JpcHRXcmFwcGFibGVzLgorICAgICAgICBpZiAoSXNET01Ob2RlVHlwZSgkaW50
ZXJmYWNlTmFtZSkpIHsKKyAgICAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4g
dG9WOEZhc3QoV1RGOjpnZXRQdHIoJHtzdmdOYXRpdmVUeXBlfTo6Y3JlYXRlKCRyZXR1cm4pKSwg
YXJncywgaW1wKTtcbiI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAkcmVzdWx0IC49
ICRpbmRlbnQgLiAicmV0dXJuIHRvVjgoV1RGOjpnZXRQdHIoJHtzdmdOYXRpdmVUeXBlfTo6Y3Jl
YXRlKCRyZXR1cm4pKSwgYXJncy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpO1xuIjsKKyAg
ICAgICAgfQogICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICB9CiAKQEAgLTM2MzAsNyArMzYz
MiwxNiBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbkNhbGxTdHJpbmcoKQogICAgIH0KIAogICAgICRy
ZXR1cm4gLj0gIi5yZWxlYXNlKCkiIGlmICgkcmV0dXJuSXNSZWYpOwotICAgICRyZXN1bHQgLj0g
JGluZGVudCAuICJyZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25hdHVy
ZSwgJHJldHVybiwgImFyZ3MuSG9sZGVyKCkiLCAiYXJncy5HZXRJc29sYXRlKCkiKSAuICI7XG4i
OworCisgICAgbXkgJG5hdGl2ZVZhbHVlOworICAgICMgRklYTUU6IFVwZGF0ZSBmb3IgYWxsIFNj
cmlwdFdyYXBwYWJsZXMuCisgICAgaWYgKElzRE9NTm9kZVR5cGUoJGludGVyZmFjZU5hbWUpKSB7
CisgICAgICAgICRuYXRpdmVWYWx1ZSA9IE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rpb24tPnNpZ25h
dHVyZSwgJHJldHVybiwgImFyZ3MuSG9sZGVyKCkiLCAiYXJncy5HZXRJc29sYXRlKCkiLCAiYXJn
cyIsICJpbXAiKTsKKyAgICB9IGVsc2UgeworICAgICAgICAkbmF0aXZlVmFsdWUgPSBOYXRpdmVU
b0pTVmFsdWUoJGZ1bmN0aW9uLT5zaWduYXR1cmUsICRyZXR1cm4sICJhcmdzLkhvbGRlcigpIiwg
ImFyZ3MuR2V0SXNvbGF0ZSgpIik7CisgICAgfQorCisgICAgJHJlc3VsdCAuPSAkaW5kZW50IC4g
InJldHVybiAiIC4gJG5hdGl2ZVZhbHVlIC4gIjtcbiI7CiAKICAgICByZXR1cm4gJHJlc3VsdDsK
IH0KQEAgLTQwMzMsNiArNDA0NCwxMCBAQCBzdWIgTmF0aXZlVG9KU1ZhbHVlCiAgICAgbXkgJGdl
dENyZWF0aW9uQ29udGV4dEFyZyA9ICRnZXRDcmVhdGlvbkNvbnRleHQgPyAiLCAkZ2V0Q3JlYXRp
b25Db250ZXh0IiA6ICIiOwogICAgIG15ICRnZXRJc29sYXRlID0gc2hpZnQ7CiAgICAgbXkgJGdl
dElzb2xhdGVBcmcgPSAkZ2V0SXNvbGF0ZSA/ICIsICRnZXRJc29sYXRlIiA6ICIiOworICAgIG15
ICRnZXRIb2xkZXJDb250YWluZXIgPSBzaGlmdDsKKyAgICBteSAkZ2V0SG9sZGVyQ29udGFpbmVy
QXJnID0gJGdldEhvbGRlckNvbnRhaW5lciA/ICIsICRnZXRIb2xkZXJDb250YWluZXIiIDogIiI7
CisgICAgbXkgJGdldFNjcmlwdFdyYXBwYWJsZSA9IHNoaWZ0OworICAgIG15ICRnZXRTY3JpcHRX
cmFwcGFibGVBcmcgPSAkZ2V0U2NyaXB0V3JhcHBhYmxlID8gIiwgJGdldFNjcmlwdFdyYXBwYWJs
ZSIgOiAiIjsKICAgICBteSAkdHlwZSA9ICRzaWduYXR1cmUtPnR5cGU7CiAKICAgICByZXR1cm4g
KCRnZXRJc29sYXRlID8gInY4Qm9vbGVhbigkdmFsdWUsICRnZXRJc29sYXRlKSIgOiAidjhCb29s
ZWFuKCR2YWx1ZSkiKSBpZiAkdHlwZSBlcSAiYm9vbGVhbiI7CkBAIC00MDg4LDcgKzQxMDMsMTAg
QEAgc3ViIE5hdGl2ZVRvSlNWYWx1ZQogICAgIEFkZEluY2x1ZGVzRm9yVHlwZSgkdHlwZSk7CiAK
ICAgICBpZiAoSXNET01Ob2RlVHlwZSgkdHlwZSkgfHwgJHR5cGUgZXEgIkV2ZW50VGFyZ2V0Iikg
ewotICAgICAgICByZXR1cm4gInRvVjgoJHZhbHVlJGdldENyZWF0aW9uQ29udGV4dEFyZyRnZXRJ
c29sYXRlQXJnKSI7CisgICAgICBpZiAoJGdldFNjcmlwdFdyYXBwYWJsZSkgeworICAgICAgICAg
IHJldHVybiAidG9WOEZhc3QoJHZhbHVlJGdldEhvbGRlckNvbnRhaW5lckFyZyRnZXRTY3JpcHRX
cmFwcGFibGVBcmcpIjsKKyAgICAgIH0KKyAgICAgIHJldHVybiAidG9WOCgkdmFsdWUkZ2V0Q3Jl
YXRpb25Db250ZXh0QXJnJGdldElzb2xhdGVBcmcpIjsKICAgICB9CiAKICAgICBpZiAoJHR5cGUg
ZXEgIkV2ZW50TGlzdGVuZXIiKSB7CkBAIC00MTA1LDYgKzQxMjMsOSBAQCBzdWIgTmF0aXZlVG9K
U1ZhbHVlCiAgICAgQWRkVG9JbXBsSW5jbHVkZXMoInd0Zi9SZWZQdHIuaCIpOwogICAgIEFkZFRv
SW1wbEluY2x1ZGVzKCJ3dGYvR2V0UHRyLmgiKTsKIAorICAgIGlmICgkZ2V0U2NyaXB0V3JhcHBh
YmxlKSB7CisgICAgICAgICAgcmV0dXJuICJ0b1Y4RmFzdCgkdmFsdWUkZ2V0SG9sZGVyQ29udGFp
bmVyQXJnJGdldFNjcmlwdFdyYXBwYWJsZUFyZykiOworICAgIH0KICAgICByZXR1cm4gInRvVjgo
JHZhbHVlJGdldENyZWF0aW9uQ29udGV4dEFyZyRnZXRJc29sYXRlQXJnKSI7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRB
cnJheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9h
dDY0QXJyYXkuY3BwCmluZGV4IGY3YzRiNGU3NmQ0MWY1NTY5MmU3Njc1OWI1ZDlkMDk5N2YyNmFj
YjAuLmZiNDEyYTVkOGFjMmVmZjFmZDIyYjAwOWIzN2MxZWE0MjFjYTM4MmUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2
NEFycmF5LmNwcApAQCAtMTQ4LDcgKzE0OCw3IEBAIGJvb2wgVjhGbG9hdDY0QXJyYXk6Okhhc0lu
c3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gVjhGbG9hdDY0QXJyYXk6OmNyZWF0ZVdyYXBwZXIoUGFzc1JlZlB0cjxGbG9hdDY0QXJyYXk+
IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0
ZSogaXNvbGF0ZSkKIHsKICAgICBBU1NFUlQoaW1wbC5nZXQoKSk7Ci0gICAgQVNTRVJUKERPTURh
dGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0KGltcGwuZ2V0KCkpLklzRW1wdHkoKSk7Cisg
ICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLmdldCgpLCBpc29sYXRlKS5J
c0VtcHR5KCkpOwogICAgIEFTU0VSVChzdGF0aWNfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8QXJy
YXlCdWZmZXJWaWV3Kj4oaW1wbC5nZXQoKSkpID09IHN0YXRpY19jYXN0PHZvaWQqPihpbXBsLmdl
dCgpKSk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOERPTVdyYXBw
ZXI6OmNyZWF0ZVdyYXBwZXIoY3JlYXRpb25Db250ZXh0LCAmaW5mbywgaW1wbC5nZXQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9h
dDY0QXJyYXkuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZs
b2F0NjRBcnJheS5oCmluZGV4IGRjMWZjNjA1NzAxNTdhOTNkYWIxOGY5MDAxMjc4ZDJmYjcwMjkx
NjUuLmI3NzFjY2I3YmQ1NDkwNGMwMDQ2MGZkMWNlN2I3MWFmMDllZTg3ZjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRB
cnJheS5oCkBAIC02MCwxMiArNjAsMjkgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KEZsb2F0NjRBcnJheSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmUKIHsKICAg
ICBpZiAoVU5MSUtFTFkoIWltcGwpKQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlz
b2xhdGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gRE9NRGF0YVN0b3Jl
OjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbCk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0ZSk7CiAgICAg
aWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgcmV0
dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAordGVtcGxhdGU8
Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+CitpbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjhGYXN0KEZsb2F0NjRBcnJheSogaW1wbCwgY29uc3QgSG9sZGVyQ29u
dGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQoreworICAgIGlmIChVTkxJ
S0VMWSghaW1wbCkpCisgICAgICAgIHJldHVybiB2OE51bGwoY29udGFpbmVyLkdldElzb2xhdGUo
KSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpn
ZXRXcmFwcGVyRmFzdChpbXBsLCBjb250YWluZXIsIHdyYXBwYWJsZSk7CisgICAgaWYgKCF3cmFw
cGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJuIHdyYXAo
aW1wbCwgY29udGFpbmVyLkhvbGRlcigpLCBjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsKK30KKwor
dGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+CitpbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFBhc3NSZWZQdHI8IEZsb2F0NjRBcnJheSA+
IGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBw
YWJsZSkKK3sKKyAgICByZXR1cm4gdG9WOEZhc3QoaW1wbC5nZXQoKSwgY29udGFpbmVyLCB3cmFw
cGFibGUpOworfQorCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0
cjwgRmxvYXQ2NEFycmF5ID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0g
MCkKIHsKICAgICByZXR1cm4gdG9WOChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCBmMTcxZTEyZjUwYjc0
MjY1Mzg4YjAwYjZmZTI2ODJjYzhlZGU3ZTZjLi43MTRmOTI2ZGVkZjNlNmQ1NzJjZGJmN2Q0Mzgw
MGYwOGYwMTljZjUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMTc4
LDcgKzE3OCw3IEBAIGJvb2wgVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpIYXNJbnN0YW5jZSh2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEFj
dGl2ZURPTU9iamVjdDo6Y3JlYXRlV3JhcHBlcihQYXNzUmVmUHRyPFRlc3RBY3RpdmVET01PYmpl
Y3Q+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKIHsKICAgICBBU1NFUlQoaW1wbC5nZXQoKSk7Ci0gICAgQVNTRVJUKERP
TURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0KGltcGwuZ2V0KCkpLklzRW1wdHkoKSk7
CisgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLmdldCgpLCBpc29sYXRl
KS5Jc0VtcHR5KCkpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhE
T01XcmFwcGVyOjpjcmVhdGVXcmFwcGVyKGNyZWF0aW9uQ29udGV4dCwgJmluZm8sIGltcGwuZ2V0
KCkpOwogICAgIGlmIChVTkxJS0VMWSh3cmFwcGVyLklzRW1wdHkoKSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2Jq
ZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0LmgKaW5kZXggYmI3OTMyNDQ3N2ZhYmZiMDVjMTMzYmQ5YWYyOGE5YjI1Njgy
NWQ1NC4uZDNhMTRhNTkzODRkZjVhNTAxMmE0NjcyNTlkMmYwMTA4YzUyOGU4YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURP
TU9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RBY3RpdmVET01PYmplY3QuaApAQCAtNTcsNyArNTcsNyBAQCBwcml2YXRlOgogaW5saW5l
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0QWN0aXZlRE9NT2JqZWN0KiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUgPSAwKQogewogICAgIEFTU0VSVChpbXBsKTsKLSAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpj
dXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbCkuSXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoRE9NRGF0
YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpLklzRW1wdHkoKSk7CiAgICAgcmV0dXJu
IFY4VGVzdEFjdGl2ZURPTU9iamVjdDo6Y3JlYXRlV3JhcHBlcihpbXBsLCBjcmVhdGlvbkNvbnRl
eHQsIGlzb2xhdGUpOwogfQogCkBAIC02NSwxMiArNjUsMjkgQEAgaW5saW5lIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4KFRlc3RBY3RpdmVET01PYmplY3QqIGltcGwsIHY4OjpIYW5kbGU8djg6
Ok9iamUKIHsKICAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQogICAgICAgICByZXR1cm4gdjhOdWxs
V2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0g
RE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbCk7CisgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNv
bGF0ZSk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBw
ZXI7CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0K
IAordGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+Citpbmxp
bmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFRlc3RBY3RpdmVET01PYmplY3QqIGlt
cGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJs
ZSkKK3sKKyAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQorICAgICAgICByZXR1cm4gdjhOdWxsKGNv
bnRhaW5lci5HZXRJc29sYXRlKCkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBl
ciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlckZhc3QoaW1wbCwgY29udGFpbmVyLCB3cmFwcGFi
bGUpOworICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVy
OworICAgIHJldHVybiB3cmFwKGltcGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29udGFpbmVyLkdl
dElzb2xhdGUoKSk7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3Mg
V3JhcHBhYmxlPgoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChQYXNzUmVm
UHRyPCBUZXN0QWN0aXZlRE9NT2JqZWN0ID4gaW1wbCwgY29uc3QgSG9sZGVyQ29udGFpbmVyJiBj
b250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQoreworICAgIHJldHVybiB0b1Y4RmFzdChp
bXBsLmdldCgpLCBjb250YWluZXIsIHdyYXBwYWJsZSk7Cit9CisKIGlubGluZSB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0QWN0aXZlRE9NT2JqZWN0ID4gaW1wbCwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1cm4gdG9WOChp
bXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0
b21OYW1lZEdldHRlci5jcHAKaW5kZXggYjU4MzIzZDI0NWRkNTU1NjQ4NzQ3ZGM5MDNkMTIzZjk3
ZWU3ZWU4ZS4uZjU5NDg1NGNmYjgxNzM3NTM4ZGM5NTE4MzQ2MzliZWNiMTAzY2FhZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3Rv
bU5hbWVkR2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rl
c3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3BwCkBAIC0xMTIsNyArMTEyLDcgQEAgYm9v
bCBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHZhbHVlKQogdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RDdXN0b21OYW1lZEdldHRl
cjo6Y3JlYXRlV3JhcHBlcihQYXNzUmVmUHRyPFRlc3RDdXN0b21OYW1lZEdldHRlcj4gaW1wbCwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29s
YXRlKQogewogICAgIEFTU0VSVChpbXBsLmdldCgpKTsKLSAgICBBU1NFUlQoRE9NRGF0YVN0b3Jl
OjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbC5nZXQoKSkuSXNFbXB0eSgpKTsKKyAgICBBU1NF
UlQoRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwuZ2V0KCksIGlzb2xhdGUpLklzRW1wdHko
KSk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6
OmNyZWF0ZVdyYXBwZXIoY3JlYXRpb25Db250ZXh0LCAmaW5mbywgaW1wbC5nZXQoKSk7CiAgICAg
aWYgKFVOTElLRUxZKHdyYXBwZXIuSXNFbXB0eSgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVk
R2V0dGVyLmgKaW5kZXggNzAzNjg5MjVhMmI2YzdlYzA0NmE1ZTZiZGM5MDA5YzZkMTg5YzJkYS4u
NDQxNmExMjMyZWY4OTIzZDNmMGUzMWUyOWQyZjI1Yzg4YjQyZGMyNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0
dGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEN1c3RvbU5hbWVkR2V0dGVyLmgKQEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKIGlubGluZSB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUgPSAwKQogewogICAgIEFTU0VSVChpbXBsKTsKLSAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpj
dXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbCkuSXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoRE9NRGF0
YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpLklzRW1wdHkoKSk7CiAgICAgcmV0dXJu
IFY4VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29u
dGV4dCwgaXNvbGF0ZSk7CiB9CiAKQEAgLTY0LDEyICs2NCwyOSBAQCBpbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjgoVGVzdEN1c3RvbU5hbWVkR2V0dGVyKiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpPYgogewogICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCiAgICAgICAgIHJldHVybiB2OE51
bGxXaXRoQ2hlY2soaXNvbGF0ZSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIg
PSBET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKTsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBp
c29sYXRlKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKICAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwog
fQogCit0ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJsZT4KK2lu
bGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoVGVzdEN1c3RvbU5hbWVkR2V0dGVy
KiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFw
cGFibGUpCit7CisgICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKKyAgICAgICAgcmV0dXJuIHY4TnVs
bChjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXJGYXN0KGltcGwsIGNvbnRhaW5lciwgd3Jh
cHBhYmxlKTsKKyAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKKyAgICByZXR1cm4gd3JhcChpbXBsLCBjb250YWluZXIuSG9sZGVyKCksIGNvbnRhaW5l
ci5HZXRJc29sYXRlKCkpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNs
YXNzIFdyYXBwYWJsZT4KK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoUGFz
c1JlZlB0cjwgVGVzdEN1c3RvbU5hbWVkR2V0dGVyID4gaW1wbCwgY29uc3QgSG9sZGVyQ29udGFp
bmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQoreworICAgIHJldHVybiB0b1Y4
RmFzdChpbXBsLmdldCgpLCBjb250YWluZXIsIHdyYXBwYWJsZSk7Cit9CisKIGlubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIg
PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIHJldHVy
biB0b1Y4KGltcGwuZ2V0KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25z
dHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggMmM2MDhlMGVlYjk5ODJiOGUxZTM5ZTI1Y2Vj
MTJlZjM4NGE5MGJkNy4uMjk1YTgzYjVmNWU5MmRmZGVhYzBiMTFjYWFlOGI0OWY2N2RmNDk1NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dEV2ZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBA
IGJvb2wgVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhbHVlKQogdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVudENvbnN0cnVj
dG9yOjpjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VGVzdEV2ZW50Q29uc3RydWN0b3I+IGltcGws
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSkKIHsKICAgICBBU1NFUlQoaW1wbC5nZXQoKSk7Ci0gICAgQVNTRVJUKERPTURhdGFTdG9y
ZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0KGltcGwuZ2V0KCkpLklzRW1wdHkoKSk7CisgICAgQVNT
RVJUKERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLmdldCgpLCBpc29sYXRlKS5Jc0VtcHR5
KCkpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhET01XcmFwcGVy
OjpjcmVhdGVXcmFwcGVyKGNyZWF0aW9uQ29udGV4dCwgJmluZm8sIGltcGwuZ2V0KCkpOwogICAg
IGlmIChVTkxJS0VMWSh3cmFwcGVyLklzRW1wdHkoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3Ry
dWN0b3IuaAppbmRleCAyNjNiOTBmYzJmYThiMTBiZGQ1MjdmMDFiNjBlMTUxZWMzY2Q3YzNiLi45
MGM4MWM3ZTExYThjM2Q3ODQ0MjkxZjY0OWRjMTEzYjBiMWM5ODM4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rv
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RF
dmVudENvbnN0cnVjdG9yLmgKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKIGlubGluZSB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEV2ZW50Q29uc3RydWN0b3IqIGltcGwsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9
IDApCiB7CiAgICAgQVNTRVJUKGltcGwpOwotICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJl
bnQoaXNvbGF0ZSktPmdldChpbXBsKS5Jc0VtcHR5KCkpOworICAgIEFTU0VSVChET01EYXRhU3Rv
cmU6OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0ZSkuSXNFbXB0eSgpKTsKICAgICByZXR1cm4gVjhU
ZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlV3JhcHBlcihpbXBsLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOwogfQogCkBAIC02NSwxMiArNjUsMjkgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4KFRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpP
YmoKIHsKICAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0
aENoZWNrKGlzb2xhdGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gRE9N
RGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbCk7CisgICAgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0
ZSk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7
CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAor
dGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+CitpbmxpbmUg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXBs
LCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUp
Cit7CisgICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKKyAgICAgICAgcmV0dXJuIHY4TnVsbChjb250
YWluZXIuR2V0SXNvbGF0ZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIg
PSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXJGYXN0KGltcGwsIGNvbnRhaW5lciwgd3JhcHBhYmxl
KTsKKyAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsK
KyAgICByZXR1cm4gd3JhcChpbXBsLCBjb250YWluZXIuSG9sZGVyKCksIGNvbnRhaW5lci5HZXRJ
c29sYXRlKCkpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdy
YXBwYWJsZT4KK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoUGFzc1JlZlB0
cjwgVGVzdEV2ZW50Q29uc3RydWN0b3IgPiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNv
bnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCit7CisgICAgcmV0dXJuIHRvVjhGYXN0KGlt
cGwuZ2V0KCksIGNvbnRhaW5lciwgd3JhcHBhYmxlKTsKK30KKwogaW5saW5lIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RFdmVudENvbnN0cnVjdG9yID4gaW1wbCwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1cm4gdG9WOChp
bXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdl
dC5jcHAKaW5kZXggZGU4N2M2OWE5M2ZiYTY5ZWY5YzFhNWU5YzIwZjlmNmI3MzE3ZDliMy4uZGNi
NzNiZjE4ZDYwODdjNGYyMWMwNzBkMjcxNTM5ZGQxMmYyYTRkNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRU
YXJnZXQuY3BwCkBAIC0xNzUsNyArMTc1LDcgQEAgYm9vbCBWOFRlc3RFdmVudFRhcmdldDo6SGFz
SW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBWOFRlc3RFdmVudFRhcmdldDo6Y3JlYXRlV3JhcHBlcihQYXNzUmVmUHRyPFRlc3RFdmVu
dFRhcmdldD4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIEFTU0VSVChpbXBsLmdldCgpKTsKLSAgICBBU1NF
UlQoRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbC5nZXQoKSkuSXNFbXB0
eSgpKTsKKyAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwuZ2V0KCksIGlz
b2xhdGUpLklzRW1wdHkoKSk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIg
PSBWOERPTVdyYXBwZXI6OmNyZWF0ZVdyYXBwZXIoY3JlYXRpb25Db250ZXh0LCAmaW5mbywgaW1w
bC5nZXQoKSk7CiAgICAgaWYgKFVOTElLRUxZKHdyYXBwZXIuSXNFbXB0eSgpKSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRh
cmdldC5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2
ZW50VGFyZ2V0LmgKaW5kZXggMDFmM2I5ZjEwNGM1ODE0MGIwODUzYzQxYWIyMTBkMjYyMDhjMGVm
Yi4uNTA5N2YzMmQ2MmQ3ZWNhOTliMDFhOGI0ZDc1NmEzNTgwNjM3NmI3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2
ZW50VGFyZ2V0LmgKQEAgLTU4LDcgKzU4LDcgQEAgcHJpdmF0ZToKIGlubGluZSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXAoVGVzdEV2ZW50VGFyZ2V0KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAg
IEFTU0VSVChpbXBsKTsKLSAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUp
LT5nZXQoaW1wbCkuSXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpnZXRXcmFw
cGVyKGltcGwsIGlzb2xhdGUpLklzRW1wdHkoKSk7CiAgICAgcmV0dXJuIFY4VGVzdEV2ZW50VGFy
Z2V0OjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAK
QEAgLTY2LDEyICs2NiwyOSBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVz
dEV2ZW50VGFyZ2V0KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+CiB7CiAgICAgaWYgKFVO
TElLRUxZKCFpbXBsKSkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsK
LSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Y3VycmVu
dChpc29sYXRlKS0+Z2V0KGltcGwpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVy
ID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpOwogICAgIGlmICghd3Jh
cHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHJldHVybiB3cmFw
KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKK3RlbXBsYXRlPGNsYXNzIEhv
bGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4RmFzdChUZXN0RXZlbnRUYXJnZXQqIGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5l
ciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKK3sKKyAgICBpZiAoVU5MSUtFTFko
IWltcGwpKQorICAgICAgICByZXR1cm4gdjhOdWxsKGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOwor
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3Jh
cHBlckZhc3QoaW1wbCwgY29udGFpbmVyLCB3cmFwcGFibGUpOworICAgIGlmICghd3JhcHBlci5J
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiB3cmFwKGltcGws
IGNvbnRhaW5lci5Ib2xkZXIoKSwgY29udGFpbmVyLkdldElzb2xhdGUoKSk7Cit9CisKK3RlbXBs
YXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgoraW5saW5lIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChQYXNzUmVmUHRyPCBUZXN0RXZlbnRUYXJnZXQgPiBp
bXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFi
bGUpCit7CisgICAgcmV0dXJuIHRvVjhGYXN0KGltcGwuZ2V0KCksIGNvbnRhaW5lciwgd3JhcHBh
YmxlKTsKK30KKwogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8
IFRlc3RFdmVudFRhcmdldCA+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25D
b250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9
IDApCiB7CiAgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29s
YXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RFeGNlcHRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKaW5kZXggYTFmMGM1YTI5NjM0NmFlZDA4Yzg0YzMy
ZjI0ZTU0OTU3MzM3ZWI3Yi4uNTJiZjg0ZDk5ZTFiMTYyMWY1YmMzZTMwZmNkZGUxNTNmNDFkZTQ2
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEV4Y2VwdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCBib29sIFY4VGVz
dEV4Y2VwdGlvbjo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFeGNlcHRpb246OmNyZWF0ZVdyYXBwZXIoUGFzc1Jl
ZlB0cjxUZXN0RXhjZXB0aW9uPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9u
Q29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgQVNTRVJUKGltcGwuZ2V0KCkp
OwotICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsLmdl
dCgpKS5Jc0VtcHR5KCkpOworICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1w
bC5nZXQoKSwgaXNvbGF0ZSkuSXNFbXB0eSgpKTsKIAogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Y3JlYXRlV3JhcHBlcihjcmVhdGlvbkNvbnRleHQs
ICZpbmZvLCBpbXBsLmdldCgpKTsKICAgICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdEV4Y2VwdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEV4Y2VwdGlvbi5oCmluZGV4IGIzYjhmMGE5NmU1MTk5NmY2ODU1MzcwNjQzNmViNWIx
NGY5NzU3NzMuLjM0ZDdjMGQyODMwZWM3NTk0ODQwYzZiMDMyNmUyMzE5ZjMyNDExYTEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNl
cHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0RXhjZXB0aW9uLmgKQEAgLTU1LDcgKzU1LDcgQEAgcHJpdmF0ZToKIGlubGluZSB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEV4Y2VwdGlvbiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAg
ICBBU1NFUlQoaW1wbCk7Ci0gICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRl
KS0+Z2V0KGltcGwpLklzRW1wdHkoKSk7CisgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Z2V0V3Jh
cHBlcihpbXBsLCBpc29sYXRlKS5Jc0VtcHR5KCkpOwogICAgIHJldHVybiBWOFRlc3RFeGNlcHRp
b246OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIApA
QCAtNjMsMTIgKzYzLDI5IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0
RXhjZXB0aW9uKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyCiB7CiAgICAgaWYgKFVO
TElLRUxZKCFpbXBsKSkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsK
LSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Y3VycmVu
dChpc29sYXRlKS0+Z2V0KGltcGwpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVy
ID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpOwogICAgIGlmICghd3Jh
cHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwogICAgIHJldHVybiB3cmFw
KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKK3RlbXBsYXRlPGNsYXNzIEhv
bGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgoraW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4RmFzdChUZXN0RXhjZXB0aW9uKiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXIm
IGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCit7CisgICAgaWYgKFVOTElLRUxZKCFp
bXBsKSkKKyAgICAgICAgcmV0dXJuIHY4TnVsbChjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBw
ZXJGYXN0KGltcGwsIGNvbnRhaW5lciwgd3JhcHBhYmxlKTsKKyAgICBpZiAoIXdyYXBwZXIuSXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICByZXR1cm4gd3JhcChpbXBsLCBj
b250YWluZXIuSG9sZGVyKCksIGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOworfQorCit0ZW1wbGF0
ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJsZT4KK2lubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoUGFzc1JlZlB0cjwgVGVzdEV4Y2VwdGlvbiA+IGltcGws
IGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkK
K3sKKyAgICByZXR1cm4gdG9WOEZhc3QoaW1wbC5nZXQoKSwgY29udGFpbmVyLCB3cmFwcGFibGUp
OworfQorCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVz
dEV4Y2VwdGlvbiA+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0
ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7
CiAgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RJbnRlcmZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEludGVyZmFjZS5jcHAKaW5kZXggYThmMzcyNzQ1ODhlNTZmNTZhM2U1Zjg5M2UyZDUx
ZTAzZGViMWVmNS4uNDYwOTRjZDZjZWJiYjgwNDgzYzg1YzIzZGI3YmVjMDRiZTEyYmNjNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdElu
dGVyZmFjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEludGVyZmFjZS5jcHAKQEAgLTExOSw3ICsxMTksNyBAQCBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHN1cHBsZW1lbnRhbE5vZGVBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3Ry
aW5nPiBuYQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RJbnRlcmZhY2Uuc3VwcGxlbWVudGFs
Tm9kZS5fZ2V0Iik7CiAgICAgVGVzdEludGVyZmFjZSogaW1wID0gVjhUZXN0SW50ZXJmYWNlOjp0
b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChUZXN0U3VwcGxlbWVudGFs
OjpzdXBwbGVtZW50YWxOb2RlKGltcCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgp
KTsKKyAgICByZXR1cm4gdG9WOEZhc3QoVGVzdFN1cHBsZW1lbnRhbDo6c3VwcGxlbWVudGFsTm9k
ZShpbXApLCBpbmZvLCBpbXApOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKENvbmRpdGlvbjExKSB8
fCBFTkFCTEUoQ29uZGl0aW9uMTIpCkBAIC0zNDEsNyArMzQxLDcgQEAgQWN0aXZlRE9NT2JqZWN0
KiBWOFRlc3RJbnRlcmZhY2U6OnRvQWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gb2JqZWMKIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0SW50ZXJmYWNlOjpjcmVhdGVX
cmFwcGVyKFBhc3NSZWZQdHI8VGVzdEludGVyZmFjZT4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIEFTU0VS
VChpbXBsLmdldCgpKTsKLSAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUp
LT5nZXQoaW1wbC5nZXQoKSkuSXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpn
ZXRXcmFwcGVyKGltcGwuZ2V0KCksIGlzb2xhdGUpLklzRW1wdHkoKSk7CiAKICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6OmNyZWF0ZVdyYXBwZXIoY3Jl
YXRpb25Db250ZXh0LCAmaW5mbywgaW1wbC5nZXQoKSk7CiAgICAgaWYgKFVOTElLRUxZKHdyYXBw
ZXIuSXNFbXB0eSgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuaAppbmRleCBlNzRlZjY4NjJiN2RiMTc3NTU4
NGJmZjllNjZmY2E2YTZkMjk3YzUxLi4xOGVkY2VmZjVkZjhhZTQ1ODUzOWZkNzQyMTRkODQzOWY4
NzUxN2MwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5oCkBAIC02MCw3ICs2MCw3IEBAIHByaXZhdGU6CiBp
bmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RJbnRlcmZhY2UqIGltcGwsIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0
ZSA9IDApCiB7CiAgICAgQVNTRVJUKGltcGwpOwotICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1
cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKS5Jc0VtcHR5KCkpOworICAgIEFTU0VSVChET01EYXRh
U3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0ZSkuSXNFbXB0eSgpKTsKICAgICByZXR1cm4g
VjhUZXN0SW50ZXJmYWNlOjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNv
bGF0ZSk7CiB9CiAKQEAgLTY4LDEyICs2OCwyOSBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoVGVzdEludGVyZmFjZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcgog
ewogICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hl
Y2soaXNvbGF0ZSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRh
U3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKTsK
ICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAg
ICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCit0ZW1w
bGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJsZT4KK2lubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoVGVzdEludGVyZmFjZSogaW1wbCwgY29uc3QgSG9s
ZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBhYmxlKQoreworICAgIGlm
IChVTkxJS0VMWSghaW1wbCkpCisgICAgICAgIHJldHVybiB2OE51bGwoY29udGFpbmVyLkdldElz
b2xhdGUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0
b3JlOjpnZXRXcmFwcGVyRmFzdChpbXBsLCBjb250YWluZXIsIHdyYXBwYWJsZSk7CisgICAgaWYg
KCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBwZXI7CisgICAgcmV0dXJu
IHdyYXAoaW1wbCwgY29udGFpbmVyLkhvbGRlcigpLCBjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsK
K30KKwordGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+Citp
bmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFBhc3NSZWZQdHI8IFRlc3RJbnRl
cmZhY2UgPiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxl
KiB3cmFwcGFibGUpCit7CisgICAgcmV0dXJuIHRvVjhGYXN0KGltcGwuZ2V0KCksIGNvbnRhaW5l
ciwgd3JhcHBhYmxlKTsKK30KKwogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBh
c3NSZWZQdHI8IFRlc3RJbnRlcmZhY2UgPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNy
ZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUgPSAwKQogewogICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5j
cHAKaW5kZXggMmViMmMxZWJkNGJiZWUyMzBhOTg3YjZmNjRmM2I3Mzk5NzQyMjU5NC4uYjg0MTg2
NDBmNGRmZGNjNTA1YzJkNzMwYTVlZTMzODQ2ZjUwYzM5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcApAQCAtMTEyLDcgKzExMiw3IEBAIGJvb2wgVjhU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHZhbHVlKQogdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyOjpjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVu
ZXI+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKIHsKICAgICBBU1NFUlQoaW1wbC5nZXQoKSk7Ci0gICAgQVNTRVJUKERP
TURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0KGltcGwuZ2V0KCkpLklzRW1wdHkoKSk7
CisgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLmdldCgpLCBpc29sYXRl
KS5Jc0VtcHR5KCkpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhE
T01XcmFwcGVyOjpjcmVhdGVXcmFwcGVyKGNyZWF0aW9uQ29udGV4dCwgJmluZm8sIGltcGwuZ2V0
KCkpOwogICAgIGlmIChVTkxJS0VMWSh3cmFwcGVyLklzRW1wdHkoKSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaAppbmRleCAyMGM5MGFmMzc1NWNjMzQyZjk4ZWU0
YWQzZWE4NjBiNDY0MDA0MGY2Li45YjczOTFhZDkyNmFlNDg2MDc5NmFlNGU4YTUwNjgyYjdhMGIw
MTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKQEAgLTU1
LDcgKzU1LDcgQEAgcHJpdmF0ZToKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAo
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgQVNTRVJU
KGltcGwpOwotICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChp
bXBsKS5Jc0VtcHR5KCkpOworICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1w
bCwgaXNvbGF0ZSkuSXNFbXB0eSgpKTsKICAgICByZXR1cm4gVjhUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lcjo6Y3JlYXRlV3JhcHBlcihpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwog
fQogCkBAIC02MywxMiArNjMsMjkgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4
KFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBpbXBsLCB2ODo6SGFuZGxlPHYKIHsKICAgICBp
ZiAoVU5MSUtFTFkoIWltcGwpKQogICAgICAgICByZXR1cm4gdjhOdWxsV2l0aENoZWNrKGlzb2xh
dGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpj
dXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbCk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdy
YXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0ZSk7CiAgICAgaWYg
KCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgcmV0dXJu
IHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAordGVtcGxhdGU8Y2xh
c3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+CitpbmxpbmUgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHRvVjhGYXN0KFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBpbXBsLCBjb25z
dCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCit7Cisg
ICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKKyAgICAgICAgcmV0dXJuIHY4TnVsbChjb250YWluZXIu
R2V0SXNvbGF0ZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01E
YXRhU3RvcmU6OmdldFdyYXBwZXJGYXN0KGltcGwsIGNvbnRhaW5lciwgd3JhcHBhYmxlKTsKKyAg
ICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICBy
ZXR1cm4gd3JhcChpbXBsLCBjb250YWluZXIuSG9sZGVyKCksIGNvbnRhaW5lci5HZXRJc29sYXRl
KCkpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJs
ZT4KK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoUGFzc1JlZlB0cjwgVGVz
dE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgPiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNv
bnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCit7CisgICAgcmV0dXJuIHRvVjhGYXN0KGlt
cGwuZ2V0KCksIGNvbnRhaW5lciwgd3JhcHBhYmxlKTsKK30KKwogaW5saW5lIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyID4g
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1cm4g
dG9WOChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3Ry
dWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE5hbWVkQ29uc3RydWN0b3IuY3BwCmluZGV4IGJlYTM3OTIyNmYwZmUyNGNlMTA4MGUyMGRjMmZh
ZTY1ODc2ZDExZTIuLmZiMjRjMzRjMGQ5NWJhNzZmMzEyZWJhMDdhYzA0ZmEwMmNmNGEwOGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RO
YW1lZENvbnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTE1MCw3ICsxNTAsNyBAQCBB
Y3RpdmVET01PYmplY3QqIFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OnRvQWN0aXZlRE9NT2JqZWN0
KHY4OjpIYW5kbGU8djg6Ok9iamVjdAogdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROYW1l
ZENvbnN0cnVjdG9yOjpjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0
b3I+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSkKIHsKICAgICBBU1NFUlQoaW1wbC5nZXQoKSk7Ci0gICAgQVNTRVJUKERP
TURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0KGltcGwuZ2V0KCkpLklzRW1wdHkoKSk7
CisgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLmdldCgpLCBpc29sYXRl
KS5Jc0VtcHR5KCkpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhE
T01XcmFwcGVyOjpjcmVhdGVXcmFwcGVyKGNyZWF0aW9uQ29udGV4dCwgJmluZm8sIGltcGwuZ2V0
KCkpOwogICAgIGlmIChVTkxJS0VMWSh3cmFwcGVyLklzRW1wdHkoKSkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1
Y3Rvci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5h
bWVkQ29uc3RydWN0b3IuaAppbmRleCBiNTY3NDU2MjUyZjI1MDFjZTdiM2I3MmU4YzEwZDg3OTY4
MmMxZjNjLi5iNDg3MDRmMTNkYTM4YmEzY2MwYWM3YmFlYTI0NDIxNjFkMjI2OTkwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRD
b25zdHJ1Y3Rvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmgKQEAgLTYyLDcgKzYyLDcgQEAgcHJpdmF0ZToKIGlu
bGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdE5hbWVkQ29uc3RydWN0b3IqIGlt
cGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSA9IDApCiB7CiAgICAgQVNTRVJUKGltcGwpOwotICAgIEFTU0VSVChET01EYXRhU3Rv
cmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKS5Jc0VtcHR5KCkpOworICAgIEFTU0VSVChE
T01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNvbGF0ZSkuSXNFbXB0eSgpKTsKICAgICBy
ZXR1cm4gVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlV3JhcHBlcihpbXBsLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOwogfQogCkBAIC03MCwxMiArNzAsMjkgQEAgaW5saW5lIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3ROYW1lZENvbnN0cnVjdG9yKiBpbXBsLCB2ODo6SGFu
ZGxlPHY4OjpPYmoKIHsKICAgICBpZiAoVU5MSUtFTFkoIWltcGwpKQogICAgICAgICByZXR1cm4g
djhOdWxsV2l0aENoZWNrKGlzb2xhdGUpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFw
cGVyID0gRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbCk7CisgICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1w
bCwgaXNvbGF0ZSk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJu
IHdyYXBwZXI7CiAgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRl
KTsKIH0KIAordGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFzcyBXcmFwcGFibGU+
CitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFRlc3ROYW1lZENvbnN0cnVj
dG9yKiBpbXBsLCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3
cmFwcGFibGUpCit7CisgICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKKyAgICAgICAgcmV0dXJuIHY4
TnVsbChjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmdldFdyYXBwZXJGYXN0KGltcGwsIGNvbnRhaW5lciwg
d3JhcHBhYmxlKTsKKyAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
d3JhcHBlcjsKKyAgICByZXR1cm4gd3JhcChpbXBsLCBjb250YWluZXIuSG9sZGVyKCksIGNvbnRh
aW5lci5HZXRJc29sYXRlKCkpOworfQorCit0ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIs
IGNsYXNzIFdyYXBwYWJsZT4KK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3Qo
UGFzc1JlZlB0cjwgVGVzdE5hbWVkQ29uc3RydWN0b3IgPiBpbXBsLCBjb25zdCBIb2xkZXJDb250
YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCit7CisgICAgcmV0dXJuIHRv
VjhGYXN0KGltcGwuZ2V0KCksIGNvbnRhaW5lciwgd3JhcHBhYmxlKTsKK30KKwogaW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3ROYW1lZENvbnN0cnVjdG9y
ID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICByZXR1
cm4gdG9WOChpbXBsLmdldCgpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3Bw
CmluZGV4IGY3Mjg5OGRjYTkwNmRlYTQwYWY5NzljNDdmYjNhZmIwZGRiN2FlYmUuLmI3ZjkzMDZk
OGIyZjViNjAzNGE4YzQ0NzQ5MDg0NmU5OTEyYzVmZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHAKQEAgLTExMCw3
ICsxMTAsNyBAQCBib29sIFY4VGVzdE5vZGU6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB2YWx1ZSkKIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0Tm9kZTo6Y3JlYXRlV3Jh
cHBlcihQYXNzUmVmUHRyPFRlc3ROb2RlPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNy
ZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgQVNTRVJUKGltcGwu
Z2V0KCkpOwotICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmdldE5vZGUoaW1wbC5nZXQoKSwgaXNv
bGF0ZSkuSXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGlt
cGwuZ2V0KCksIGlzb2xhdGUpLklzRW1wdHkoKSk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PHZv
aWQqPihzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbC5nZXQoKSkpID09IHN0YXRpY19jYXN0PHZvaWQq
PihpbXBsLmdldCgpKSk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBW
OERPTVdyYXBwZXI6OmNyZWF0ZVdyYXBwZXIoY3JlYXRpb25Db250ZXh0LCAmaW5mbywgaW1wbC5n
ZXQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0Tm9kZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE5vZGUuaAppbmRleCBiY2FlNDIzZTQ0MmFhNmJjNzlkOGY1OTlkYjIzMTYxZDM4MzBj
M2Y3Li45ZTFhNDk3NWU2N2FlNzg4NWM5NjMwYjY2NDYwODgxOWRmYWJlNjgyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2RlLmgK
QEAgLTU2LDcgKzU2LDcgQEAgcHJpdmF0ZToKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXAoVGVzdE5vZGUqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgQVNTRVJUKGltcGwpOwotICAg
IEFTU0VSVChET01EYXRhU3RvcmU6OmdldE5vZGUoaW1wbCwgaXNvbGF0ZSkuSXNFbXB0eSgpKTsK
KyAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xhdGUpLklzRW1w
dHkoKSk7CiAgICAgcmV0dXJuIFY4VGVzdE5vZGU6OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKIH0KIApAQCAtNjQsMjQgKzY0LDI3IEBAIGlubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0Tm9kZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvCiB7CiAgICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKICAgICAgICAgcmV0dXJu
IHY4TnVsbFdpdGhDaGVjayhpc29sYXRlKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3Jh
cHBlciA9IERPTURhdGFTdG9yZTo6Z2V0Tm9kZShpbXBsLCBpc29sYXRlKTsKKyAgICB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBp
c29sYXRlKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gd3Jh
cHBlcjsKICAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwog
fQogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFRlc3ROb2RlKiBpbXBs
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvLCBOb2RlKiBob2xkZXIpCit0ZW1wbGF0ZTxj
bGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJsZT4KK2lubGluZSB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOEZhc3QoVGVzdE5vZGUqIGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5l
ciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKIHsKICAgICBpZiAoVU5MSUtFTFko
IWltcGwpKQotICAgICAgICByZXR1cm4gdjhOdWxsKGluZm8uR2V0SXNvbGF0ZSgpKTsKLSAgICAv
LyBXaGF0IHdlJ2QgcmVhbGx5IGxpa2UgdG8gY2hlY2sgaGVyZSBpcyB3aGV0aGVyIHdlJ3JlIGlu
IHRoZSBtYWluIHdvcmxkIG9yCi0gICAgLy8gaW4gYW4gaXNvbGF0ZWQgd29ybGQuIFRoZSBmYXN0
ZXN0IHdheSB3ZSBrbm93IGhvdyB0byBkbyB0aGF0IGlzIHRvIGNoZWNrCi0gICAgLy8gd2hldGhl
ciB0aGUgaG9sZGVyJ3MgaW5saW5lIHdyYXBwZXIgaXMgdGhlIHNhbWUgd3JhcHBlciB3ZSBzZWUg
aW4gdGhlCi0gICAgLy8gdjg6OkFjY2Vzc29ySW5mby4KLSAgICB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXBwZXIgPSAoaG9sZGVyLT53cmFwcGVyKCkgPT0gaW5mby5Ib2xkZXIoKSkgPyBpbXBs
LT53cmFwcGVyKCkgOiBET01EYXRhU3RvcmU6OmdldE5vZGUoaW1wbCwgaW5mby5HZXRJc29sYXRl
KCkpOworICAgICAgICByZXR1cm4gdjhOdWxsKGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOworICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBl
ckZhc3QoaW1wbCwgY29udGFpbmVyLCB3cmFwcGFibGUpOwogICAgIGlmICghd3JhcHBlci5Jc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiB3cmFwKGltcGwsIGlu
Zm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gd3JhcChpbXBsLCBj
b250YWluZXIuSG9sZGVyKCksIGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOworfQorCit0ZW1wbGF0
ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJsZT4KK2lubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoUGFzc1JlZlB0cjwgVGVzdE5vZGUgPiBpbXBsLCBjb25z
dCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCit7Cisg
ICAgcmV0dXJuIHRvVjhGYXN0KGltcGwuZ2V0KCksIGNvbnRhaW5lciwgd3JhcHBhYmxlKTsKIH0K
IAogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3ROb2Rl
ID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKaW5k
ZXggMTY0NmM3ODRlMjQxM2Q2MzI2ZGIxYzY3NmZmNmEzYjA0YjQ4MTkzYi4uMWNhMjYzOGFjNWJk
OGU3NTBjODgyZTI1MThmNzE0YmRkMjgyMGIyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAgLTEwMCw3ICsxMDAs
NyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlYWRPbmx5VGVzdE9iakF0dHJBdHRy
R2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPgogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmou
cmVhZE9ubHlUZXN0T2JqQXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2Jq
Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKICAgICBSZWZQdHI8VGVzdE9iaj4gcmVzdWx0ID0g
aW1wLT5yZWFkT25seVRlc3RPYmpBdHRyKCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdy
YXBwZXIgPSByZXN1bHQuZ2V0KCkgPyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oRE9NRGF0YVN0b3Jl
OjpjdXJyZW50KGluZm8uR2V0SXNvbGF0ZSgpKS0+Z2V0KHJlc3VsdC5nZXQoKSkpIDogdjhVbmRl
ZmluZWQoKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IHJlc3VsdC5nZXQo
KSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPihET01EYXRhU3RvcmU6OmdldFdyYXBwZXIocmVzdWx0
LmdldCgpLCBpbmZvLkdldElzb2xhdGUoKSkpIDogdjhVbmRlZmluZWQoKTsKICAgICBpZiAod3Jh
cHBlci5Jc0VtcHR5KCkpIHsKICAgICAgICAgd3JhcHBlciA9IHRvVjgocmVzdWx0LmdldCgpLCBp
bmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CiAgICAgICAgIGlmICghd3JhcHBlci5J
c0VtcHR5KCkpCkBAIC0yMzAsNyArMjMwLDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB0ZXN0T2JqQXR0ckF0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIGMKICAg
ICBJTkNfU1RBVFMoIkRPTS5UZXN0T2JqLnRlc3RPYmpBdHRyLl9nZXQiKTsKICAgICBGZWF0dXJl
T2JzZXJ2ZXI6Om9ic2VydmUoYWN0aXZlRE9NV2luZG93KEJpbmRpbmdTdGF0ZTo6aW5zdGFuY2Uo
KSksIEZlYXR1cmVPYnNlcnZlcjo6VGVzdEZlYXR1cmUpOwogICAgIFRlc3RPYmoqIGltcCA9IFY4
VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT50
ZXN0T2JqQXR0cigpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0
dXJuIHRvVjhGYXN0KGltcC0+dGVzdE9iakF0dHIoKSwgaW5mbywgaW1wKTsKIH0KIAogc3RhdGlj
IHZvaWQgdGVzdE9iakF0dHJBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2
ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykK
QEAgLTI0Nyw3ICsyNDcsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFhNTE9iakF0
dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjbwogewogICAgIElOQ19T
VEFUUygiRE9NLlRlc3RPYmouWE1MT2JqQXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0g
VjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChpbXAt
PnhtbE9iakF0dHIoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJl
dHVybiB0b1Y4RmFzdChpbXAtPnhtbE9iakF0dHIoKSwgaW5mbywgaW1wKTsKIH0KIAogc3RhdGlj
IHZvaWQgWE1MT2JqQXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4
OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpA
QCAtNDIzLDcgKzQyMyw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdHlwZWRBcnJh
eUF0dHJBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uVGVzdE9iai50eXBlZEFycmF5QXR0ci5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1w
ID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gdG9WOChp
bXAtPnR5cGVkQXJyYXlBdHRyKCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsK
KyAgICByZXR1cm4gdG9WOEZhc3QoaW1wLT50eXBlZEFycmF5QXR0cigpLCBpbmZvLCBpbXApOwog
fQogCiBzdGF0aWMgdm9pZCB0eXBlZEFycmF5QXR0ckF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpT
dHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNz
b3JJbmZvJiBpbmZvKQpAQCAtNTQ0LDcgKzU0NCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVBdHRyR2V0dGVyKHY4OjpM
CiAgICAgSU5DX1NUQVRTKCJET00uVGVzdE9iai53aXRoU2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0
dHJpYnV0ZS5fZ2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShp
bmZvLkhvbGRlcigpKTsKICAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRDb250ZXh0
ID0gZ2V0U2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpOwotICAgIHJldHVybiB0b1Y4KGltcC0+d2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGUoc2NyaXB0Q29udGV4dCksIGluZm8uSG9s
ZGVyKCksIGluZm8uR2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOEZhc3QoaW1wLT53aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZShzY3JpcHRDb250ZXh0KSwgaW5mbywgaW1w
KTsKIH0KIAogc3RhdGljIHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBdHRyaWJ1dGVB
dHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVl
PiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTU3MSw3ICs1NzEsNyBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRTdGF0ZUF0dHJpYnV0ZVJh
aXNlc0F0dHJHZXR0ZXIodjg6OkxvY2FsPAogICAgICAgICByZXR1cm4gc2V0RE9NRXhjZXB0aW9u
KGVjLCBpbmZvLkdldElzb2xhdGUoKSk7CiAgICAgaWYgKHN0YXRlLmhhZEV4Y2VwdGlvbigpKQog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihzdGF0ZS5leGNlcHRpb24oKSwgaW5mby5HZXRJc29s
YXRlKCkpOwotICAgIHJldHVybiB0b1Y4KHYucmVsZWFzZSgpLCBpbmZvLkhvbGRlcigpLCBpbmZv
LkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjhGYXN0KHYucmVsZWFzZSgpLCBpbmZvLCBp
bXApOwogfQogCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0U3RhdGVBdHRyaWJ1dGVSYWlzZXNBdHRy
U2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2
YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAgLTU5OCw3ICs1OTgsNyBAQCBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QXR0
cmlidXRlUmFpc2VzQXR0ckdldHRlcgogICAgIFJlZlB0cjxUZXN0T2JqPiB2ID0gaW1wLT53aXRo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dEF0dHJpYnV0ZVJhaXNlcyhzY3JpcHRDb250ZXh0LCBlYyk7
CiAgICAgaWYgKFVOTElLRUxZKGVjKSkKICAgICAgICAgcmV0dXJuIHNldERPTUV4Y2VwdGlvbihl
YywgaW5mby5HZXRJc29sYXRlKCkpOwotICAgIHJldHVybiB0b1Y4KHYucmVsZWFzZSgpLCBpbmZv
LkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjhGYXN0KHYucmVs
ZWFzZSgpLCBpbmZvLCBpbXApOwogfQogCiBzdGF0aWMgdm9pZCB3aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEF0dHJpYnV0ZVJhaXNlc0F0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5h
bWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBp
bmZvKQpAQCAtNjIwLDcgKzYyMCw3IEBAIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0
aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0CiAgICAgICAg
IHJldHVybiB2OFVuZGVmaW5lZCgpOwogICAgIFNjcmlwdFN0YXRlJiBzdGF0ZSA9ICpjdXJyZW50
U3RhdGU7CiAgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0Q29udGV4dCA9IGdldFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPndpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1dGUoJnN0YXRlLCBzY3JpcHRDb250
ZXh0KSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJldHVybiB0b1Y4
RmFzdChpbXAtPndpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVBdHRyaWJ1
dGUoJnN0YXRlLCBzY3JpcHRDb250ZXh0KSwgaW5mbywgaW1wKTsKIH0KIAogc3RhdGljIHZvaWQg
d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZUF0dHJpYnV0ZUF0dHJTZXR0
ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVl
LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQpAQCAtNjU0LDcgKzY1NCw3IEBAIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3Jp
cHRTdGF0ZUF0dHJpYnV0ZVJhCiAgICAgICAgIHJldHVybiBzZXRET01FeGNlcHRpb24oZWMsIGlu
Zm8uR2V0SXNvbGF0ZSgpKTsKICAgICBpZiAoc3RhdGUuaGFkRXhjZXB0aW9uKCkpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKHN0YXRlLmV4Y2VwdGlvbigpLCBpbmZvLkdldElzb2xhdGUoKSk7
Ci0gICAgcmV0dXJuIHRvVjgodi5yZWxlYXNlKCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNv
bGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOEZhc3Qodi5yZWxlYXNlKCksIGluZm8sIGltcCk7CiB9
CiAKIHN0YXRpYyB2b2lkIHdpdGhTY3JpcHRFeGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVB
dHRyaWJ1dGVSYWlzZXNBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAg
LTY4Miw3ICs2ODIsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRF
eGVjdXRpb25Db250ZXh0QW5kU2NyaXB0U3RhdGVXaXRoU3BhY2VzQQogICAgICAgICByZXR1cm4g
djhVbmRlZmluZWQoKTsKICAgICBTY3JpcHRTdGF0ZSYgc3RhdGUgPSAqY3VycmVudFN0YXRlOwog
ICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIHNjcmlwdENvbnRleHQgPSBnZXRTY3JpcHRFeGVj
dXRpb25Db250ZXh0KCk7Ci0gICAgcmV0dXJuIHRvVjgoaW1wLT53aXRoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dEFuZFNjcmlwdFN0YXRlV2l0aFNwYWNlc0F0dHJpYnV0ZSgmc3RhdGUsIHNjcmlwdENv
bnRleHQpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7CisgICAgcmV0dXJuIHRv
VjhGYXN0KGltcC0+d2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhT
cGFjZXNBdHRyaWJ1dGUoJnN0YXRlLCBzY3JpcHRDb250ZXh0KSwgaW5mbywgaW1wKTsKIH0KIAog
c3RhdGljIHZvaWQgd2l0aFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRBbmRTY3JpcHRTdGF0ZVdpdGhT
cGFjZXNBdHRyaWJ1dGVBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCB2ODo6
TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKQEAg
LTcwNSw3ICs3MDUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdpdGhTY3JpcHRB
cmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1dGVBdHRyR2V0dGVyKAogewogICAgIElOQ19TVEFU
UygiRE9NLlRlc3RPYmoud2l0aFNjcmlwdEFyZ3VtZW50c0FuZENhbGxTdGFja0F0dHJpYnV0ZS5f
Z2V0Iik7CiAgICAgVGVzdE9iaiogaW1wID0gVjhUZXN0T2JqOjp0b05hdGl2ZShpbmZvLkhvbGRl
cigpKTsKLSAgICByZXR1cm4gdG9WOChpbXAtPndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3Rh
Y2tBdHRyaWJ1dGUoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRlKCkpOworICAgIHJl
dHVybiB0b1Y4RmFzdChpbXAtPndpdGhTY3JpcHRBcmd1bWVudHNBbmRDYWxsU3RhY2tBdHRyaWJ1
dGUoKSwgaW5mbywgaW1wKTsKIH0KIAogc3RhdGljIHZvaWQgd2l0aFNjcmlwdEFyZ3VtZW50c0Fu
ZENhbGxTdGFja0F0dHJpYnV0ZUF0dHJTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IHY4OjpMb2NhbDx2ODo6VmFsdWU+IHZhbHVlLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZv
KQpAQCAtOTIyLDE0ICs5MjIsMTQgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb250
ZW50RG9jdW1lbnRBdHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW0KICAgICBpZiAo
IUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NUb05vZGUoQmluZGluZ1N0YXRlOjpp
bnN0YW5jZSgpLCBpbXAtPmNvbnRlbnREb2N1bWVudCgpKSkKICAgICAgICAgcmV0dXJuIHY4OjpI
YW5kbGU8djg6OlZhbHVlPih2OE51bGwoaW5mby5HZXRJc29sYXRlKCkpKTsKIAotICAgIHJldHVy
biB0b1Y4KGltcC0+Y29udGVudERvY3VtZW50KCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNv
bGF0ZSgpKTsKKyAgICByZXR1cm4gdG9WOEZhc3QoaW1wLT5jb250ZW50RG9jdW1lbnQoKSwgaW5m
bywgaW1wKTsKIH0KIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBtdXRhYmxlUG9pbnRB
dHRyR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBuYW1lLCBjb25zdCB2ODo6QWNjZXNzb3JJ
bmZvJiBpbmZvKQogewogICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmoubXV0YWJsZVBvaW50Ll9n
ZXQiKTsKICAgICBUZXN0T2JqKiBpbXAgPSBWOFRlc3RPYmo6OnRvTmF0aXZlKGluZm8uSG9sZGVy
KCkpOwotICAgIHJldHVybiB0b1Y4KFdURjo6Z2V0UHRyKFNWR1N0YXRpY1Byb3BlcnR5VGVhck9m
ZjxUZXN0T2JqLCBGbG9hdFBvaW50Pjo6Y3JlYXRlKGltcCwgaW1wLT5tdXRhYmxlUG9pbnQoKSwg
JlRlc3RPYmo6OnVwZGF0ZU11dGFibGVQb2ludCkpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElz
b2xhdGUoKSk7CisgICAgcmV0dXJuIHRvVjhGYXN0KFdURjo6Z2V0UHRyKFNWR1N0YXRpY1Byb3Bl
cnR5VGVhck9mZjxUZXN0T2JqLCBGbG9hdFBvaW50Pjo6Y3JlYXRlKGltcCwgaW1wLT5tdXRhYmxl
UG9pbnQoKSwgJlRlc3RPYmo6OnVwZGF0ZU11dGFibGVQb2ludCkpLCBpbmZvLCBpbXApOwogfQog
CiBzdGF0aWMgdm9pZCBtdXRhYmxlUG9pbnRBdHRyU2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5n
PiBuYW1lLCB2ODo6TG9jYWw8djg6OlZhbHVlPiB2YWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5m
byYgaW5mbykKQEAgLTk0NSw3ICs5NDUsNyBAQCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
IGltbXV0YWJsZVBvaW50QXR0ckdldHRlcih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZQogewog
ICAgIElOQ19TVEFUUygiRE9NLlRlc3RPYmouaW1tdXRhYmxlUG9pbnQuX2dldCIpOwogICAgIFRl
c3RPYmoqIGltcCA9IFY4VGVzdE9iajo6dG9OYXRpdmUoaW5mby5Ib2xkZXIoKSk7Ci0gICAgcmV0
dXJuIHRvVjgoV1RGOjpnZXRQdHIoU1ZHUHJvcGVydHlUZWFyT2ZmPEZsb2F0UG9pbnQ+OjpjcmVh
dGUoaW1wLT5pbW11dGFibGVQb2ludCgpKSksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0
ZSgpKTsKKyAgICByZXR1cm4gdG9WOEZhc3QoV1RGOjpnZXRQdHIoU1ZHUHJvcGVydHlUZWFyT2Zm
PEZsb2F0UG9pbnQ+OjpjcmVhdGUoaW1wLT5pbW11dGFibGVQb2ludCgpKSksIGluZm8sIGltcCk7
CiB9CiAKIHN0YXRpYyB2b2lkIGltbXV0YWJsZVBvaW50QXR0clNldHRlcih2ODo6TG9jYWw8djg6
OlN0cmluZz4gbmFtZSwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gdmFsdWUsIGNvbnN0IHY4OjpBY2Nl
c3NvckluZm8mIGluZm8pCkBAIC0yMzk4LDcgKzIzOTgsNyBAQCB2b2lkIFY4VGVzdE9iajo6aW5z
dGFsbFBlckNvbnRleHRQcm90b3R5cGVQcm9wZXJ0aWVzKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
cHJvdAogdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RPYmo6OmNyZWF0ZVdyYXBwZXIoUGFz
c1JlZlB0cjxUZXN0T2JqPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29u
dGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgQVNTRVJUKGltcGwuZ2V0KCkpOwot
ICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsLmdldCgp
KS5Jc0VtcHR5KCkpOworICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbC5n
ZXQoKSwgaXNvbGF0ZSkuSXNFbXB0eSgpKTsKIAogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Y3JlYXRlV3JhcHBlcihjcmVhdGlvbkNvbnRleHQsICZp
bmZvLCBpbXBsLmdldCgpKTsKICAgICBpZiAoVU5MSUtFTFkod3JhcHBlci5Jc0VtcHR5KCkpKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9i
ai5oCmluZGV4IGFiYjFmOTgyNDM0OWY3NGNkZWVjMDc4ZThiNzMxYTBiZGQ4NmYzMTYuLmMyM2Uw
Y2ZjMGNkYzc2ZjQxMzc0YTk3ODhlZjE4ZGFiNTdjNzUzNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPYmouaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmgKQEAgLTYxLDcgKzYx
LDcgQEAgcHJpdmF0ZToKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdE9i
aiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29s
YXRlKiBpc29sYXRlID0gMCkKIHsKICAgICBBU1NFUlQoaW1wbCk7Ci0gICAgQVNTRVJUKERPTURh
dGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0KGltcGwpLklzRW1wdHkoKSk7CisgICAgQVNT
RVJUKERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKS5Jc0VtcHR5KCkpOwog
ICAgIHJldHVybiBWOFRlc3RPYmo6OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKTsKIH0KIApAQCAtNjksMTIgKzY5LDI5IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChUZXN0T2JqKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uCiB7CiAgICAgaWYgKFVOTElLRUxZKCFpbXBsKSkKICAgICAgICAgcmV0dXJuIHY4TnVsbFdp
dGhDaGVjayhpc29sYXRlKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERP
TURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0KGltcGwpOworICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwsIGlzb2xh
dGUpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVy
OwogICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAK
K3RlbXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgoraW5saW5l
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChUZXN0T2JqKiBpbXBsLCBjb25zdCBIb2xk
ZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCit7CisgICAgaWYg
KFVOTElLRUxZKCFpbXBsKSkKKyAgICAgICAgcmV0dXJuIHY4TnVsbChjb250YWluZXIuR2V0SXNv
bGF0ZSgpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01EYXRhU3Rv
cmU6OmdldFdyYXBwZXJGYXN0KGltcGwsIGNvbnRhaW5lciwgd3JhcHBhYmxlKTsKKyAgICBpZiAo
IXdyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gd3JhcHBlcjsKKyAgICByZXR1cm4g
d3JhcChpbXBsLCBjb250YWluZXIuSG9sZGVyKCksIGNvbnRhaW5lci5HZXRJc29sYXRlKCkpOwor
fQorCit0ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJsZT4KK2lu
bGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOEZhc3QoUGFzc1JlZlB0cjwgVGVzdE9iaiA+
IGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBw
YWJsZSkKK3sKKyAgICByZXR1cm4gdG9WOEZhc3QoaW1wbC5nZXQoKSwgY29udGFpbmVyLCB3cmFw
cGFibGUpOworfQorCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0
cjwgVGVzdE9iaiA+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0
ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7
CiAgICAgcmV0dXJuIHRvVjgoaW1wbC5nZXQoKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcAppbmRleCBlOTQz
ODllMmYzZjc2YzNkN2ViMDljZGZkYjEyYzdkY2VmZDUwZjhiLi4zZTUzNWFkYzA1NDYzOTkxZWVk
NzM1YTQ3YjIxY2RiM2IzMzA2NDVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnMuY3BwCkBAIC0xNzEsNyArMTcxLDcgQEAgYm9vbCBWOFRlc3RPdmVybG9hZGVk
Q29uc3RydWN0b3JzOjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0
ZVdyYXBwZXIoUGFzc1JlZlB0cjxUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycz4gaW1wbCwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQogewogICAgIEFTU0VSVChpbXBsLmdldCgpKTsKLSAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpj
dXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbC5nZXQoKSkuSXNFbXB0eSgpKTsKKyAgICBBU1NFUlQo
RE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwuZ2V0KCksIGlzb2xhdGUpLklzRW1wdHkoKSk7
CiAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6OmNy
ZWF0ZVdyYXBwZXIoY3JlYXRpb25Db250ZXh0LCAmaW5mbywgaW1wbC5nZXQoKSk7CiAgICAgaWYg
KFVOTElLRUxZKHdyYXBwZXIuSXNFbXB0eSgpKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycy5oCmluZGV4IDgyY2UyMTA3ZmM1OGUxNTEwNjAxN2NhNTY4ZjQxN2EwZDhh
YTdlNGIuLjJhNzA1MjhmYTJjMmU0NTRmZDZmOTMxODJhYmY2MjllMjVhN2Q0ZGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVybG9h
ZGVkQ29uc3RydWN0b3JzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaApAQCAtNjAsNyArNjAsNyBAQCBw
cml2YXRlOgogaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycyogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICBBU1NFUlQoaW1wbCk7Ci0gICAg
QVNTRVJUKERPTURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0KGltcGwpLklzRW1wdHko
KSk7CisgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKS5J
c0VtcHR5KCkpOwogICAgIHJldHVybiBWOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVh
dGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKQEAgLTY4LDEy
ICs2OCwyOSBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnMqIGltcGwsIHY4OjpIYW5kbGU8dgogewogICAgIGlmIChVTkxJS0VMWSgh
aW1wbCkpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNvbGF0ZSk7Ci0gICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0
ZSktPmdldChpbXBsKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURh
dGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKTsKICAgICBpZiAoIXdyYXBwZXIuSXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICByZXR1cm4gd3JhcChpbXBsLCBj
cmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCit0ZW1wbGF0ZTxjbGFzcyBIb2xkZXJDb250
YWluZXIsIGNsYXNzIFdyYXBwYWJsZT4KK2lubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OEZhc3QoVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIGltcGwsIGNvbnN0IEhvbGRlckNvbnRh
aW5lciYgY29udGFpbmVyLCBXcmFwcGFibGUqIHdyYXBwYWJsZSkKK3sKKyAgICBpZiAoVU5MSUtF
TFkoIWltcGwpKQorICAgICAgICByZXR1cm4gdjhOdWxsKGNvbnRhaW5lci5HZXRJc29sYXRlKCkp
OworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0
V3JhcHBlckZhc3QoaW1wbCwgY29udGFpbmVyLCB3cmFwcGFibGUpOworICAgIGlmICghd3JhcHBl
ci5Jc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB3cmFwcGVyOworICAgIHJldHVybiB3cmFwKGlt
cGwsIGNvbnRhaW5lci5Ib2xkZXIoKSwgY29udGFpbmVyLkdldElzb2xhdGUoKSk7Cit9CisKK3Rl
bXBsYXRlPGNsYXNzIEhvbGRlckNvbnRhaW5lciwgY2xhc3MgV3JhcHBhYmxlPgoraW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChQYXNzUmVmUHRyPCBUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycyA+IGltcGwsIGNvbnN0IEhvbGRlckNvbnRhaW5lciYgY29udGFpbmVyLCBXcmFw
cGFibGUqIHdyYXBwYWJsZSkKK3sKKyAgICByZXR1cm4gdG9WOEZhc3QoaW1wbC5nZXQoKSwgY29u
dGFpbmVyLCB3cmFwcGFibGUpOworfQorCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoUGFzc1JlZlB0cjwgVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgPiBpbXBsLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4o
KSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQogewogICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0
KCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCmluZGV4IGIxNWZmYTRlN2Y2NDM3
N2JhOGQxNjc1OGI0MjYyMThjMmQ0ZmExMGMuLjFjMzFlYzJmODM0N2Q4NWM5NDk0N2MwMzU1OWM0
MTA2Y2I3Y2NmZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuY3BwCkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBwb3J0c0F0dHJHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUs
IGNvbnN0IHYKICAgICBNZXNzYWdlUG9ydEFycmF5IHBvcnRzQ29weSgqcG9ydHMpOwogICAgIHY4
OjpMb2NhbDx2ODo6QXJyYXk+IHBvcnRBcnJheSA9IHY4OjpBcnJheTo6TmV3KHBvcnRzQ29weS5z
aXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcG9ydHNDb3B5LnNpemUoKTsgKytp
KQotICAgICAgICBwb3J0QXJyYXktPlNldCh2OEludGVnZXIoaSwgaW5mby5HZXRJc29sYXRlKCkp
LCB0b1Y4KHBvcnRzQ29weVtpXS5nZXQoKSwgaW5mby5Ib2xkZXIoKSwgaW5mby5HZXRJc29sYXRl
KCkpKTsKKyAgICAgICAgcG9ydEFycmF5LT5TZXQodjhJbnRlZ2VyKGksIGluZm8uR2V0SXNvbGF0
ZSgpKSwgdG9WOEZhc3QocG9ydHNDb3B5W2ldLmdldCgpLCBpbmZvLCBpbXApKTsKICAgICByZXR1
cm4gcG9ydEFycmF5OwogfQogCkBAIC0yOTQsNyArMjk0LDcgQEAgYm9vbCBWOFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6Okhhc0luc3RhbmNlKHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB2YWwKIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlOjpjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZT4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIEFTU0VSVChpbXBsLmdldCgpKTsKLSAg
ICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbC5nZXQoKSku
SXNFbXB0eSgpKTsKKyAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyKGltcGwuZ2V0
KCksIGlzb2xhdGUpLklzRW1wdHkoKSk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZXIgPSBWOERPTVdyYXBwZXI6OmNyZWF0ZVdyYXBwZXIoY3JlYXRpb25Db250ZXh0LCAmaW5m
bywgaW1wbC5nZXQoKSk7CiAgICAgaWYgKFVOTElLRUxZKHdyYXBwZXIuSXNFbXB0eSgpKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RT
ZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaApp
bmRleCA3ZWRlMDY3Zjk2MWVjYjI1ZDgxYzhhMDY2YWM4MmE4Y2YzM2U4YzA0Li43NGQ1NmQ4ZjU3
NzU2NjRiYTE5NWI1OWVhYTI1MTUzY2ZkYTJjNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50
ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCkBAIC01OCw3ICs1OCw3IEBAIHBy
aXZhdGU6CiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRp
b25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgQVNTRVJUKGltcGwp
OwotICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKS5J
c0VtcHR5KCkpOworICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmdldFdyYXBwZXIoaW1wbCwgaXNv
bGF0ZSkuSXNFbXB0eSgpKTsKICAgICByZXR1cm4gVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVl
SW50ZXJmYWNlOjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7
CiB9CiAKQEAgLTY2LDEyICs2NiwyOSBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRv
VjgoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCwgdjg6OgogewogICAg
IGlmIChVTkxJS0VMWSghaW1wbCkpCiAgICAgICAgIHJldHVybiB2OE51bGxXaXRoQ2hlY2soaXNv
bGF0ZSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6
OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
d3JhcHBlciA9IERPTURhdGFTdG9yZTo6Z2V0V3JhcHBlcihpbXBsLCBpc29sYXRlKTsKICAgICBp
ZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKICAgICByZXR1
cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCit0ZW1wbGF0ZTxj
bGFzcyBIb2xkZXJDb250YWluZXIsIGNsYXNzIFdyYXBwYWJsZT4KK2lubGluZSB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gdG9WOEZhc3QoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSog
aW1wbCwgY29uc3QgSG9sZGVyQ29udGFpbmVyJiBjb250YWluZXIsIFdyYXBwYWJsZSogd3JhcHBh
YmxlKQoreworICAgIGlmIChVTkxJS0VMWSghaW1wbCkpCisgICAgICAgIHJldHVybiB2OE51bGwo
Y29udGFpbmVyLkdldElzb2xhdGUoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFw
cGVyID0gRE9NRGF0YVN0b3JlOjpnZXRXcmFwcGVyRmFzdChpbXBsLCBjb250YWluZXIsIHdyYXBw
YWJsZSk7CisgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHdyYXBw
ZXI7CisgICAgcmV0dXJuIHdyYXAoaW1wbCwgY29udGFpbmVyLkhvbGRlcigpLCBjb250YWluZXIu
R2V0SXNvbGF0ZSgpKTsKK30KKwordGVtcGxhdGU8Y2xhc3MgSG9sZGVyQ29udGFpbmVyLCBjbGFz
cyBXcmFwcGFibGU+CitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0KFBhc3NS
ZWZQdHI8IFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPiBpbXBsLCBjb25zdCBI
b2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiB3cmFwcGFibGUpCit7CisgICAg
cmV0dXJuIHRvVjhGYXN0KGltcGwuZ2V0KCksIGNvbnRhaW5lciwgd3JhcHBhYmxlKTsKK30KKwog
aW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNy
ZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUgPSAwKQogewogICAgIHJldHVybiB0b1Y4KGltcGwuZ2V0KCksIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9ET01E
YXRhU3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmNw
cAppbmRleCA5MWZiOWRjZTYxNTZkM2ZiYzQyMmU1NTJhOTA3ZDk1MTNjZTJiZWZkLi43ZDllNGE5
YjA0OGE0MzU4Y2U1MDM5OTY0NGRjODIyN2JjMzZlZWRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9ET01EYXRhU3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5jcHAKQEAgLTUxLDEwICs1MSwxNSBAQCBET01EYXRhU3Rv
cmU6On5ET01EYXRhU3RvcmUoKQogICAgIG1fd3JhcHBlck1hcC5jbGVhcigpOwogfQogCi1ET01E
YXRhU3RvcmUqIERPTURhdGFTdG9yZTo6Y3VycmVudCh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK0RP
TURhdGFTdG9yZSogRE9NRGF0YVN0b3JlOjptYWluV29ybGRTdG9yZSgpCiB7CiAgICAgREVGSU5F
X1NUQVRJQ19MT0NBTChET01EYXRhU3RvcmUsIG1haW5Xb3JsZERPTURhdGFTdG9yZSwgKE1haW5X
b3JsZCkpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgcmV0dXJuICZtYWluV29y
bGRET01EYXRhU3RvcmU7Cit9CiAKK0RPTURhdGFTdG9yZSogRE9NRGF0YVN0b3JlOjpjdXJyZW50
KHY4OjpJc29sYXRlKiBpc29sYXRlKQorewogICAgIFY4UGVySXNvbGF0ZURhdGEqIGRhdGEgPSBp
c29sYXRlID8gVjhQZXJJc29sYXRlRGF0YTo6ZnJvbShpc29sYXRlKSA6IFY4UGVySXNvbGF0ZURh
dGE6OmN1cnJlbnQoKTsKICAgICBpZiAoVU5MSUtFTFkoISFkYXRhLT5kb21EYXRhU3RvcmUoKSkp
CiAgICAgICAgIHJldHVybiBkYXRhLT5kb21EYXRhU3RvcmUoKTsKQEAgLTY1LDcgKzcwLDcgQEAg
RE9NRGF0YVN0b3JlKiBET01EYXRhU3RvcmU6OmN1cnJlbnQodjg6Oklzb2xhdGUqIGlzb2xhdGUp
CiAgICAgICAgICAgICByZXR1cm4gaXNvbGF0ZWRXb3JsZC0+aXNvbGF0ZWRXb3JsZERPTURhdGFT
dG9yZSgpOwogICAgIH0KIAotICAgIHJldHVybiAmbWFpbldvcmxkRE9NRGF0YVN0b3JlOworICAg
IHJldHVybiBtYWluV29ybGRTdG9yZSgpOwogfQogCiB2b2lkIERPTURhdGFTdG9yZTo6cmVwb3J0
TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RPTURhdGFTdG9yZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3JlLmgKaW5kZXggNGIyYjQyNWVlMzUw
MDM2YWE2ZjkwNzQyZGQ1NjEyZWYyNjYxMDZlNS4uNWRkNjI1YmM1ODZhNDI0N2I2ODljMjA3MzMy
NWNjYTg0MTI0MmMxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9N
RGF0YVN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvRE9NRGF0YVN0b3Jl
LmgKQEAgLTYxLDE3ICs2MSw0NiBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgRE9NRGF0YVN0b3Jl
KiBjdXJyZW50KHY4OjpJc29sYXRlKik7CiAKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBnZXROb2RlKE5vZGUqIG9iamVjdCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgSG9sZGVyQ29udGFpbmVyLCB0eXBlbmFtZSBXcmFw
cGFibGU+CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2V0V3JhcHBlckZhc3Qo
VCogb2JqZWN0LCBjb25zdCBIb2xkZXJDb250YWluZXImIGNvbnRhaW5lciwgV3JhcHBhYmxlKiBo
b2xkZXIpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKCFET01XcmFwcGVyV29ybGQ6Omlzb2xh
dGVkV29ybGRzRXhpc3QoKSkpCi0gICAgICAgICAgICByZXR1cm4gZ2V0V3JhcHBlckZyb21PYmpl
Y3Qob2JqZWN0KTsKKyAgICAgICAgLy8gV2hhdCB3ZSdkIHJlYWxseSBsaWtlIHRvIGNoZWNrIGhl
cmUgaXMgd2hldGhlciB3ZSdyZSBpbiB0aGUgbWFpbiB3b3JsZCBvcgorICAgICAgICAvLyBpbiBh
biBpc29sYXRlZCB3b3JsZC4gVGhlIGZhc3Rlc3Qgd2F5IHdlIGtub3cgaG93IHRvIGRvIHRoYXQg
aXMgdG8gY2hlY2sKKyAgICAgICAgLy8gd2hldGhlciB0aGUgd3JhcHBhYmxlJ3Mgd3JhcHBlciBp
cyB0aGUgc2FtZSBhcyB0aGUgaG9sZGVyCisgICAgICAgIGlmIChob2xkZXJDb250YWluc1dyYXBw
ZXIoY29udGFpbmVyLCBob2xkZXIpKSB7CisgICAgICAgICAgICBpZiAobWFpbldvcmxkV3JhcHBl
cklzU3RvcmVkSW5PYmplY3Qob2JqZWN0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZ2V0V3Jh
cHBlckZyb21PYmplY3Qob2JqZWN0KTsKKyAgICAgICAgICAgIHJldHVybiBtYWluV29ybGRTdG9y
ZSgpLT5tX3dyYXBwZXJNYXAuZ2V0KG9iamVjdCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGdldFdyYXBwZXIob2JqZWN0LCBjb250YWluZXIuR2V0SXNvbGF0ZSgpKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGdldFdyYXBwZXIoVCogb2JqZWN0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKKyAgICB7CisgICAg
ICAgIGlmIChtYWluV29ybGRXcmFwcGVySXNTdG9yZWRJbk9iamVjdChvYmplY3QpICYmIGlzTWFp
bldvcmxkT2JqZWN0KG9iamVjdCkpIHsKKyAgICAgICAgICAgIGlmIChMSUtFTFkoIURPTVdyYXBw
ZXJXb3JsZDo6aXNvbGF0ZWRXb3JsZHNFeGlzdCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Z2V0V3JhcHBlckZyb21PYmplY3Qob2JqZWN0KTsKKyAgICAgICAgfQogICAgICAgICByZXR1cm4g
Y3VycmVudChpc29sYXRlKS0+Z2V0KG9iamVjdCk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICBzdGF0aWMgdm9pZCBzZXRXcmFwcGVyKFQqIG9iamVjdCwgdjg6OlBlcnNp
c3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlciwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCisgICAgewor
ICAgICAgICBpZiAobWFpbldvcmxkV3JhcHBlcklzU3RvcmVkSW5PYmplY3Qob2JqZWN0KSAmJiBp
c01haW5Xb3JsZE9iamVjdChvYmplY3QpKSB7CisgICAgICAgICAgICBpZiAoTElLRUxZKCFET01X
cmFwcGVyV29ybGQ6Omlzb2xhdGVkV29ybGRzRXhpc3QoKSkpIHsKKyAgICAgICAgICAgICAgICBz
ZXRXcmFwcGVySW5PYmplY3Qob2JqZWN0LCB3cmFwcGVyKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGN1cnJlbnQoaXNv
bGF0ZSktPnNldChvYmplY3QsIHdyYXBwZXIpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CiAgICAgaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2V0KFQqIG9iamVjdCkK
ICAgICB7Ci0gICAgICAgIGlmICh3cmFwcGVySXNTdG9yZWRJbk9iamVjdChvYmplY3QpKQorICAg
ICAgICBpZiAobWFpbldvcmxkV3JhcHBlcklzU3RvcmVkSW5PYmplY3Qob2JqZWN0KSAmJiBtX3R5
cGUgPT0gTWFpbldvcmxkKQogICAgICAgICAgICAgcmV0dXJuIGdldFdyYXBwZXJGcm9tT2JqZWN0
KG9iamVjdCk7CiAgICAgICAgIHJldHVybiBtX3dyYXBwZXJNYXAuZ2V0KG9iamVjdCk7CiAgICAg
fQpAQCAtNzksNDcgKzEwOCw2NSBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
ICAgICBpbmxpbmUgdm9pZCBzZXQoVCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
PiB3cmFwcGVyKQogICAgIHsKLSAgICAgICAgaWYgKHNldFdyYXBwZXJJbk9iamVjdChvYmplY3Qs
IHdyYXBwZXIpKQorICAgICAgICBBU1NFUlQoISFvYmplY3QpOworICAgICAgICBBU1NFUlQoIXdy
YXBwZXIuSXNFbXB0eSgpKTsKKyAgICAgICAgaWYgKG1haW5Xb3JsZFdyYXBwZXJJc1N0b3JlZElu
T2JqZWN0KG9iamVjdCkgJiYgbV90eXBlID09IE1haW5Xb3JsZCkgeworICAgICAgICAgICAgc2V0
V3JhcHBlckluT2JqZWN0KG9iamVjdCwgd3JhcHBlcik7CiAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KICAgICAgICAgbV93cmFwcGVyTWFwLnNldChvYmplY3QsIHdyYXBwZXIpOwogICAg
IH0KIAogICAgIHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0
OwogCiBwcml2YXRlOgotICAgIGJvb2wgd3JhcHBlcklzU3RvcmVkSW5PYmplY3Qodm9pZCopIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCB3cmFwcGVySXNTdG9yZWRJbk9iamVjdChT
Y3JpcHRXcmFwcGFibGUqKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gTWFpbldvcmxkOyB9Cisg
ICAgc3RhdGljIERPTURhdGFTdG9yZSogbWFpbldvcmxkU3RvcmUoKTsKKworICAgIHN0YXRpYyBi
b29sIG1haW5Xb3JsZFdyYXBwZXJJc1N0b3JlZEluT2JqZWN0KHZvaWQqKSB7IHJldHVybiBmYWxz
ZTsgfQorICAgIHN0YXRpYyBib29sIG1haW5Xb3JsZFdyYXBwZXJJc1N0b3JlZEluT2JqZWN0KFNj
cmlwdFdyYXBwYWJsZSopIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHN0YXRpYyBib29sIGlzTWFp
bldvcmxkT2JqZWN0KHZvaWQqKSB7IHJldHVybiBmYWxzZTsgfQorICAgIHN0YXRpYyBib29sIGlz
TWFpbldvcmxkT2JqZWN0KE5vZGUqKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBIb2xkZXJDb250YWluZXI+CisgICAgc3RhdGljIGJvb2wgaG9sZGVyQ29udGFpbnNX
cmFwcGVyKGNvbnN0IEhvbGRlckNvbnRhaW5lciYsIHZvaWQqKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBIb2xkZXJDb250YWluZXI+
CisgICAgc3RhdGljIGJvb2wgaG9sZGVyQ29udGFpbnNXcmFwcGVyKGNvbnN0IEhvbGRlckNvbnRh
aW5lciYgY29udGFpbmVyLCBTY3JpcHRXcmFwcGFibGUqIHdyYXBwYWJsZSkKKyAgICB7CisgICAg
ICAgIC8vIFZlcmlmeSBvdXIgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIG1haW4gd29ybGQuCisgICAg
ICAgIEFTU0VSVCh3cmFwcGFibGUtPndyYXBwZXIoKS5Jc0VtcHR5KCkgfHwgY29udGFpbmVyLkhv
bGRlcigpICE9IHdyYXBwYWJsZS0+d3JhcHBlcigpIHx8IGN1cnJlbnQodjg6Oklzb2xhdGU6Okdl
dEN1cnJlbnQoKSktPm1fdHlwZSA9PSBNYWluV29ybGQpOworICAgICAgICByZXR1cm4gY29udGFp
bmVyLkhvbGRlcigpID09IHdyYXBwYWJsZS0+d3JhcHBlcigpOworICAgIH0KIAogICAgIHN0YXRp
YyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdldFdyYXBwZXJGcm9tT2JqZWN0KHZvaWQqKQogICAg
IHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KCk7CiAgICAgfQotCiAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gZ2V0V3JhcHBlckZyb21PYmplY3QoU2NyaXB0V3JhcHBhYmxlKiBvYmplY3QpCiAgICAg
ewogICAgICAgICByZXR1cm4gb2JqZWN0LT53cmFwcGVyKCk7CiAgICAgfQogCi0gICAgYm9vbCBz
ZXRXcmFwcGVySW5PYmplY3Qodm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KSB7IHJl
dHVybiBmYWxzZTsgfQotICAgIGJvb2wgc2V0V3JhcHBlckluT2JqZWN0KFNjcmlwdFdyYXBwYWJs
ZSogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQorICAgIHN0YXRp
YyB2b2lkIHNldFdyYXBwZXJJbk9iamVjdCh2b2lkKiwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD4pCisgICAgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgc3Rh
dGljIHZvaWQgc2V0V3JhcHBlckluT2JqZWN0KFNjcmlwdFdyYXBwYWJsZSogb2JqZWN0LCB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogICAgIHsKLSAgICAgICAgaWYgKG1fdHlw
ZSAhPSBNYWluV29ybGQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIEFTU0VS
VChvYmplY3QtPndyYXBwZXIoKS5Jc0VtcHR5KCkpOwogICAgICAgICBvYmplY3QtPnNldFdyYXBw
ZXIod3JhcHBlcik7CiAgICAgICAgIHdyYXBwZXIuTWFrZVdlYWsob2JqZWN0LCB3ZWFrQ2FsbGJh
Y2spOwotICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgYm9vbCBzZXRXcmFwcGVySW5P
YmplY3QoTm9kZSogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQor
ICAgIHN0YXRpYyB2b2lkIHNldFdyYXBwZXJJbk9iamVjdChOb2RlKiBvYmplY3QsIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiAgICAgewotICAgICAgICBpZiAobV90eXBlICE9
IE1haW5Xb3JsZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgQVNTRVJUKG9i
amVjdC0+d3JhcHBlcigpLklzRW1wdHkoKSk7CiAgICAgICAgIG9iamVjdC0+c2V0V3JhcHBlcih3
cmFwcGVyKTsKICAgICAgICAgVjhHQ0NvbnRyb2xsZXI6OmRpZENyZWF0ZVdyYXBwZXJGb3JOb2Rl
KG9iamVjdCk7CiAgICAgICAgIHdyYXBwZXIuTWFrZVdlYWsoc3RhdGljX2Nhc3Q8U2NyaXB0V3Jh
cHBhYmxlKj4ob2JqZWN0KSwgd2Vha0NhbGxiYWNrKTsKLSAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogCiAgICAgc3RhdGljIHZvaWQgd2Vha0NhbGxiYWNrKHY4OjpQZXJzaXN0ZW50PHY4OjpW
YWx1ZT4sIHZvaWQqIGNvbnRleHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvVjhET01XcmFwcGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdy
YXBwZXIuaAppbmRleCA5MDE1YTAzNDJkODU2YmYxNjFkOGQxNTdmN2M4ODVkMWI1Y2YwMjI0Li42
ZTM1YmJkMDM0NGMzNmQ4MWQ3NDhkMmMyNjExYjQ2MTcwNTFjODU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9WOERPTVdyYXBwZXIuaApAQCAtMTAyLDcgKzEwMiw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlckhh
bmRsZSA9IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcod3JhcHBlcik7CiAgICAgICAg
IEFTU0VSVChtYXliZURPTVdyYXBwZXIod3JhcHBlckhhbmRsZSkpOwogICAgICAgICBzZXRXcmFw
cGVyQ2xhc3Mob2JqZWN0LmdldCgpLCB3cmFwcGVySGFuZGxlKTsKLSAgICAgICAgRE9NRGF0YVN0
b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5zZXQob2JqZWN0LmxlYWtSZWYoKSwgd3JhcHBlckhhbmRs
ZSk7CisgICAgICAgIERPTURhdGFTdG9yZTo6c2V0V3JhcHBlcihvYmplY3QubGVha1JlZigpLCB3
cmFwcGVySGFuZGxlLCBpc29sYXRlKTsKICAgICAgICAgcmV0dXJuIHdyYXBwZXJIYW5kbGU7CiAg
ICAgfQogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>