<?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>177303</bug_id>
          
          <creation_ts>2017-09-21 08:50:45 -0700</creation_ts>
          <short_desc>WSL should have some post-instantiation type checking</short_desc>
          <delta_ts>2018-10-13 19:31:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>176199</blocked>
    
    <blocked>176967</blocked>
    
    <blocked>177045</blocked>
    
    <blocked>177093</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>keith_miller</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1351194</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-21 08:50:45 -0700</bug_when>
    <thetext>There are certain things that are easier to check after type instantiation.

Shader type checking is definitely in that category.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351222</commentid>
    <comment_count>1</comment_count>
      <attachid>321439</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-21 09:37:47 -0700</bug_when>
    <thetext>Created attachment 321439
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351260</commentid>
    <comment_count>2</comment_count>
      <attachid>321447</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-21 10:45:06 -0700</bug_when>
    <thetext>Created attachment 321447
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351266</commentid>
    <comment_count>3</comment_count>
      <attachid>321450</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-21 10:53:54 -0700</bug_when>
    <thetext>Created attachment 321450
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351385</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-21 14:15:27 -0700</bug_when>
    <thetext>*** Bug 177098 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351394</commentid>
    <comment_count>5</comment_count>
      <attachid>321450</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-09-21 14:28:55 -0700</bug_when>
    <thetext>Comment on attachment 321450
the patch

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

r=me with some nits.

&gt; Tools/ChangeLog:26
&gt; +        Finally, this removes the shader type checker&apos;s incomplete reimplementation of isPrimitive. That calls
&gt; +        isPrimitive now.

I don&apos;t understand what this is saying. What is &quot;That&quot;? isPrimitive was/is a property. AFAICT, there is no isPrimitive function?

&gt; Tools/WebGPUShadingLanguageRI/LateChecker.js:31
&gt; +    constructor()
&gt; +    {
&gt; +        super();
&gt; +    }

Nit: you can remove this. Unless you want to be really sure that no arguments are passed to Visitor.

&gt; Tools/WebGPUShadingLanguageRI/LateChecker.js:52
&gt; +            if (!(node.returnType.type instanceof StructType))
&gt; +                throw new WTypeError(node.origin.originString, &quot;Vertex shader &quot; + node.name + &quot; must return a struct.&quot;);
&gt; +            assertPrimitive(node.returnType);

Nit: you could probably move this and the one below out of the switch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351398</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-21 14:33:03 -0700</bug_when>
    <thetext>(In reply to Keith Miller from comment #5)
&gt; Comment on attachment 321450 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=321450&amp;action=review
&gt; 
&gt; r=me with some nits.
&gt; 
&gt; &gt; Tools/ChangeLog:26
&gt; &gt; +        Finally, this removes the shader type checker&apos;s incomplete reimplementation of isPrimitive. That calls
&gt; &gt; +        isPrimitive now.
&gt; 
&gt; I don&apos;t understand what this is saying. What is &quot;That&quot;? isPrimitive was/is a
&gt; property. AFAICT, there is no isPrimitive function?

There is an isPrimitive getter all over the place.  For example:

        let assertPrimitive = type =&gt; {
            if (!type.isPrimitive)
                throw new WTypeError(node.origin.originString, &quot;Shader signature cannot include non-primitive type: &quot; + type);
        }

Before, this code used its own probably-mostly-correct reimplementation:

        class NonNumericSearcher extends Visitor {
            constructor(name)
            {
                super();
                this._name = name;
            }
            visitArrayRefType(node)
            {
                throw new WTypeError(node.origin.originString, shaderFunc.name + &quot; must transitively only have numeric types.&quot;);
            }
            visitPtrType(node)
            {
                throw new WTypeError(node.origin.originString, shaderFunc.name + &quot; must transitively only have numeric types.&quot;);
            }
            visitTypeRef(node)
            {
                super.visitTypeRef(node);
                node.type.visit(this);
            }
        }

That was when this code lived in Checker, so the patch doesn&apos;t make this super obvious.  I&apos;ll fix the changelog to refer to this defunct helper class by name.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/LateChecker.js:31
&gt; &gt; +    constructor()
&gt; &gt; +    {
&gt; &gt; +        super();
&gt; &gt; +    }
&gt; 
&gt; Nit: you can remove this. Unless you want to be really sure that no
&gt; arguments are passed to Visitor.

Fixed.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/LateChecker.js:52
&gt; &gt; +            if (!(node.returnType.type instanceof StructType))
&gt; &gt; +                throw new WTypeError(node.origin.originString, &quot;Vertex shader &quot; + node.name + &quot; must return a struct.&quot;);
&gt; &gt; +            assertPrimitive(node.returnType);
&gt; 
&gt; Nit: you could probably move this and the one below out of the switch.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351399</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-21 14:36:08 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/222351/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353342</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:23:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693183&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468980</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 19:31:17 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/176</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321439</attachid>
            <date>2017-09-21 09:37:47 -0700</date>
            <delta_ts>2017-09-21 10:45:06 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31124</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjMyMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDgyIEBACisyMDE3LTA5LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIHNob3VsZCBoYXZlIHNvbWUgcG9zdC1pbnN0YW50aWF0aW9uIHR5cGUgY2hl
Y2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzMwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBwYXRjaCByZW1vdmVzIHRoZSBQcmltaXRpdmUgcHJvdG9jb2whIFlheSEKKyAg
ICAgICAgCisgICAgICAgIFRoZSBQcmltaXRpdmUgcHJvdG9jb2wgd2FzIGFuIGF0dGVtcHQgdG8g
aGFuZGxlIHRoZSBmYWN0IHRoYXQgTWV0YWwgd291bGRuJ3QgYWxsb3cgdXMgdG8gcG9pbnQgYQor
ICAgICAgICBub24tdGhyZWFkIHBvaW50ZXIgYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaGF2ZSBw
b2ludGVycy4gVGhpcyB0eXBlIGNoZWNraW5nIHJ1bGUgaW50ZXJhY3RzIGJhZGx5IHdpdGgKKyAg
ICAgICAgZ2VuZXJpY3MuIEkgd2FzIGFibGUgdG8gZ2V0IGl0IHRvIG1vc3RseSB3b3JrIGJ5IG1h
a2luZyBQcmltaXRpdmUgaW50byBhIGR5bmFtaWMgcHJvdG9jb2wgLSBhIHR5cGUKKyAgICAgICAg
YmVsb25ncyB0byBpdCBpZiBpdCBoYXBwZW5zIHRvIGJlIGlzUHJpbWl0aXZlLgorICAgICAgICAK
KyAgICAgICAgQnV0IHRoYXQgd2FzIGEgbWlzdGFrZSwgc2luY2UgaXQgbWFrZXMgaXQgaGFyZCB0
byBjcmVhdGUgcG9pbnRlcnMgdGhhdCBhcmUgZ2VuZXJpYyBvdmVyIGFkZHJlc3Mgc3BhY2UuCisg
ICAgICAgIEFsc28sIGl0J3Mgbm90IGFuIGFwcHJvcHJpYXRlIHJ1bGUgZm9yIHRhcmdldGluZyBT
UElSLVYgbG9naWNhbCBtb2RlLiBUaGF0IHJ1bGUgd2lsbCBiZSBkaWZmZXJlbnQsIGFuZAorICAg
ICAgICBwb3NzaWJseSBtb3JlIGNvbXBsaWNhdGVkLgorICAgICAgICAKKyAgICAgICAgQWxsIG9m
IHRoZXNlIGtpbmRzIG9mIHJ1bGVzIGFyZSBlYXNpZXIgdG8gaW1wbGVtZW50IG9mIHdlIHJ1biB0
aGVtIGFmdGVyIGluc3RhbnRpYXRpb24sIHNpbmNlIHRoZW4gdGhleQorICAgICAgICBkb24ndCBn
ZXQgaW4gdGhlIHdheSBvZiBnZW5lcmljcy4gVGhhdCdzIHdoYXQgdGhpcyBwYXRjaCBkb2VzLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBtZWFucyB0aGF0IHdlIGdldCBhbGwgb2YgdGhlIHNhbWUg
dHlwZSBjaGVja2luZyBwb3dlciBhcyBiZWZvcmUsIGFuZCB3ZSBzdGlsbCBjYW4gY2F0Y2ggdGhl
IGVycm9ycworICAgICAgICB0aGF0IE1ldGFsIHJlcXVpcmVzIHVzIHRvIGNoZWNrIGZvci4gSXQn
cyBlYXNpZXIgdG8gZG8gdGhvc2UgY2hlY2tzIG5vdy4KKyAgICAgICAgCisgICAgICAgIEZpbmFs
bHksIHRoaXMgcmVtb3ZlcyB0aGUgc2hhZGVyIHR5cGUgY2hlY2tlcidzIGluY29tcGxldGUgcmVp
bXBsZW1lbnRhdGlvbiBvZiBpc1ByaW1pdGl2ZS4gVGhhdCBjYWxscworICAgICAgICBpc1ByaW1p
dGl2ZSBub3cuCisKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BZGRyZXNzU3Bh
Y2UuanM6CisgICAgICAgIChuZWVkc1ByaW1pdGl2ZVByb3RvY29sKTogRGVsZXRlZC4KKyAgICAg
ICAgKHByb3RvY29sU3VmZml4KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9BbGwuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tl
ci5qczoKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLl9jaGVja1NoYWRlclR5cGUpOgorICAg
ICAgICAoQ2hlY2tlci5wcm90b3R5cGUuX2NoZWNrU2hhZGVyVHlwZS5Ob25OdW1lcmljU2VhcmNo
ZXIpOiBEZWxldGVkLgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUuX2NoZWNrU2hhZGVyVHlw
ZS5Ob25OdW1lcmljU2VhcmNoZXIucHJvdG90eXBlLnZpc2l0QXJyYXlSZWZUeXBlKTogRGVsZXRl
ZC4KKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLl9jaGVja1NoYWRlclR5cGUuTm9uTnVtZXJp
Y1NlYXJjaGVyLnByb3RvdHlwZS52aXNpdFB0clR5cGUpOiBEZWxldGVkLgorICAgICAgICAoQ2hl
Y2tlci5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2VUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzOgorICAgICAgICAoRnVu
Y0luc3RhbnRpYXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlLkluc3RhbnRpYXRlLnByb3RvdHlwZS52
aXNpdEZ1bmNEZWYpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZS5q
czoKKyAgICAgICAgKF9pbmxpbmVGdW5jdGlvbik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvSW50cmluc2ljcy5qczoKKyAgICAgICAgKEludHJpbnNpY3MpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVja2VyLmpzOiBBZGRlZC4KKyAgICAgICAg
KExhdGVDaGVja2VyKToKKyAgICAgICAgKExhdGVDaGVja2VyLnByb3RvdHlwZS52aXNpdFJlZmVy
ZW5jZVR5cGUpOgorICAgICAgICAoTGF0ZUNoZWNrZXIucHJvdG90eXBlLl9jaGVja1NoYWRlclR5
cGUpOgorICAgICAgICAoTGF0ZUNoZWNrZXIucHJvdG90eXBlLnZpc2l0RnVuY0RlZik6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXJUb2tlbi5qczoKKyAgICAgICAgKExl
eGVyVG9rZW4ucHJvdG90eXBlLmdldCBpc0ludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVUeXBlLmpzOgorICAgICAgICAoTmF0aXZlVHlw
ZSk6CisgICAgICAgIChOYXRpdmVUeXBlLnByb3RvdHlwZS5nZXQgbmFtZSk6CisgICAgICAgIChO
YXRpdmVUeXBlLnByb3RvdHlwZS5nZXQgaXNQcmltaXRpdmUpOgorICAgICAgICAoTmF0aXZlVHlw
ZS5wcm90b3R5cGUuc2V0IGlzUHJpbWl0aXZlKToKKyAgICAgICAgKE5hdGl2ZVR5cGUucHJvdG90
eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5q
czoKKyAgICAgICAgKHBhcnNlTmF0aXZlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Qcm9ncmFtV2l0aFVubmVjZXNzYXJ5VGhpbmdzUmVtb3ZlZC5qczoKKyAgICAgICAgKHBy
b2dyYW1XaXRoVW5uZWNlc3NhcnlUaGluZ3NSZW1vdmVkKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUmVmZXJlbmNlVHlwZS5qczoKKyAgICAgICAgKFJlZmVyZW5jZVR5cGUucHJvdG90
eXBlLmdldCBlbGVtZW50VHlwZSk6CisgICAgICAgIChSZWZlcmVuY2VUeXBlLnByb3RvdHlwZS5n
ZXQgaXNQcmltaXRpdmUpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1N0YW5kYXJkTGlicmFyeS5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TdGF0ZW1lbnRDbG9uZXIuanM6CisgICAgICAgIChTdGF0ZW1lbnRDbG9uZXIucHJvdG90eXBl
LnZpc2l0TmF0aXZlVHlwZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3lu
dGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qczoKKyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nl
c3NvcnMpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAg
ICAgIChURVNUX3Bhc3NOdWxsQW5kTm90TnVsbEZ1bGxQb2x5KToKKyAgICAgICAgKFRFU1RfcGFz
c051bGxBbmROb3ROdWxsRnVsbFBvbHlSZXZlcnNlKToKKyAgICAgICAgKFRFU1RfbnVsbFR5cGVW
YXJpYWJsZVVuaWZ5KToKKyAgICAgICAgKFRFU1RfY2hhaW5TdHJ1Y3ROZXdseVZhbGlkKToKKyAg
ICAgICAgKFRFU1RfY2hhaW5TdHJ1Y3REZXZpY2UpOgorICAgICAgICAoVEVTVF9jaGFpblN0cnVj
dEludmFsaWQpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5
cGUuanM6CisgICAgICAgIChUeXBlLnByb3RvdHlwZS5nZXQgaXNQcmltaXRpdmUpOgorCiAyMDE3
LTA5LTIwICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAg
VXBkYXRlIHRlc3QyNjIgdGVzdHMKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0FkZHJlc3NTcGFjZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9BZGRyZXNzU3BhY2UuanMJKHJldmlzaW9uIDIyMjI5NCkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0FkZHJlc3NTcGFjZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzksMTYg
KzM5LDYgQEAgZnVuY3Rpb24gaXNBZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQogICAgIH0KIH0K
IAotZnVuY3Rpb24gbmVlZHNQcmltaXRpdmVQcm90b2NvbChhZGRyZXNzU3BhY2UpCi17Ci0gICAg
cmV0dXJuIGFkZHJlc3NTcGFjZSAhPSAidGhyZWFkIjsKLX0KLQotZnVuY3Rpb24gcHJvdG9jb2xT
dWZmaXgoYWRkcmVzc1NwYWNlKQotewotICAgIHJldHVybiBuZWVkc1ByaW1pdGl2ZVByb3RvY29s
KGFkZHJlc3NTcGFjZSkgPyAiOlByaW1pdGl2ZSIgOiAiIjsKLX0KLQogZnVuY3Rpb24gdmFsaWRh
dGVBZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQogewogICAgIGlmICghaXNBZGRyZXNzU3BhY2Uo
YWRkcmVzc1NwYWNlKSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJl
dmlzaW9uIDIyMjI5NSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwko
d29ya2luZyBjb3B5KQpAQCAtOTksNiArOTksNyBAQCBsb2FkKCJJbnN0YW50aWF0ZUltbWVkaWF0
ZXMuanMiKTsKIGxvYWQoIkludExpdGVyYWwuanMiKTsKIGxvYWQoIkludExpdGVyYWxUeXBlLmpz
Iik7CiBsb2FkKCJJbnRyaW5zaWNzLmpzIik7Citsb2FkKCJMYXRlQ2hlY2tlci5qcyIpOwogbG9h
ZCgiTGV4ZXIuanMiKTsKIGxvYWQoIkxleGVyVG9rZW4uanMiKTsKIGxvYWQoIkxpdGVyYWxUeXBl
Q2hlY2tlci5qcyIpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tl
ci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2Vy
LmpzCShyZXZpc2lvbiAyMjIyOTQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9D
aGVja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC02MSw1NyArNjEsMjAgQEAgY2xhc3MgQ2hlY2tl
ciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAvLyBGSVhNRTogUmVsYXggdGhlc2UgY2hlY2tz
IG9uY2Ugd2UgaGF2ZSBpbXBsZW1lbnRlZCBzdXBwb3J0IGZvciB0ZXh0dXJlcyBhbmQgc2FtcGxl
cnMuCiAgICAgICAgIGlmIChub2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPSAwKQogICAgICAg
ICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IoIkVudHJ5IHBvaW50ICIgKyBub2RlLm5hbWUgKyAi
IG11c3Qgbm90IGhhdmUgdHlwZSBhcmd1bWVudHMuIik7Ci0gICAgICAgIGNsYXNzIE5vbk51bWVy
aWNTZWFyY2hlciBleHRlbmRzIFZpc2l0b3IgewotICAgICAgICAgICAgY29uc3RydWN0b3IobmFt
ZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBzdXBlcigpOwotICAgICAgICAgICAg
ICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmlzaXRB
cnJheVJlZlR5cGUobm9kZSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcih0aGlzLl9uYW1lICsgIiBtdXN0IHRyYW5zaXRpdmVseSBvbmx5IGhhdmUg
bnVtZXJpYyB0eXBlcy4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZpc2l0UHRyVHlw
ZShub2RlKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVy
cm9yKHRoaXMuX25hbWUgKyAiIG11c3QgdHJhbnNpdGl2ZWx5IG9ubHkgaGF2ZSBudW1lcmljIHR5
cGVzLiIpOwotICAgICAgICAgICAgfQotICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAobm9kZS5z
aGFkZXJUeXBlKSB7CiAgICAgICAgIGNhc2UgInZlcnRleCI6CiAgICAgICAgICAgICBpZiAodGhp
cy5fdmVydGV4RW50cnlQb2ludHMuaGFzKG5vZGUubmFtZSkpCi0gICAgICAgICAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3IoIkR1cGxpY2F0ZSB2ZXJ0ZXggZW50cnkgcG9pbnQgbmFtZSAiICsg
bm9kZS5uYW1lKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9y
aWdpbi5vcmlnaW5TdHJpbmcsICJEdXBsaWNhdGUgdmVydGV4IGVudHJ5IHBvaW50IG5hbWUgIiAr
IG5vZGUubmFtZSk7CiAgICAgICAgICAgICB0aGlzLl92ZXJ0ZXhFbnRyeVBvaW50cy5hZGQobm9k
ZS5uYW1lKTsKLSAgICAgICAgICAgIGlmICghKG5vZGUucmV0dXJuVHlwZS50eXBlIGluc3RhbmNl
b2YgU3RydWN0VHlwZSkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IoIlZl
cnRleCBzaGFkZXIgIiArIG5vZGUubmFtZSArICIgbXVzdCByZXR1cm4gYSBzdHJ1Y3QuIik7Ci0g
ICAgICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2Ygbm9kZS5wYXJhbWV0ZXJzKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHBhcmFtZXRlci50eXBlLnR5cGUgaW5zdGFuY2VvZiBTdHJ1Y3RUeXBl
KQotICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudHlwZS52aXNpdChuZXcgTm9uTnVtZXJp
Y1NlYXJjaGVyKG5vZGUubmFtZSkpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEocGFyYW1l
dGVyLnR5cGUudHlwZSBpbnN0YW5jZW9mIEFycmF5UmVmVHlwZSkpCi0gICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUubmFtZSArICIgYWNjZXB0cyBhIHBhcmFtZXRl
ciAiICsgcGFyYW1ldGVyLm5hbWUgKyAiIHdoaWNoIGlzbid0IGEgc3RydWN0IGFuZCBpc24ndCBh
biBBcnJheVJlZi4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5vZGUucmV0dXJuVHlw
ZS50eXBlLnZpc2l0KG5ldyBOb25OdW1lcmljU2VhcmNoZXIpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgImZyYWdtZW50IjoKICAgICAgICAgICAgIGlmICh0aGlzLl9mcmFnbWVu
dEVudHJ5UG9pbnRzLmhhcyhub2RlLm5hbWUpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBX
VHlwZUVycm9yKCJEdXBsaWNhdGUgZnJhZ21lbnQgZW50cnkgcG9pbnQgbmFtZSAiICsgbm9kZS5u
YW1lKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5v
cmlnaW5TdHJpbmcsICJEdXBsaWNhdGUgZnJhZ21lbnQgZW50cnkgcG9pbnQgbmFtZSAiICsgbm9k
ZS5uYW1lKTsKICAgICAgICAgICAgIHRoaXMuX2ZyYWdtZW50RW50cnlQb2ludHMuYWRkKG5vZGUu
bmFtZSk7Ci0gICAgICAgICAgICBpZiAoIShub2RlLnJldHVyblR5cGUudHlwZSBpbnN0YW5jZW9m
IFN0cnVjdFR5cGUpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKCJGcmFn
bWVudCBzaGFkZXIgIiArIG5vZGUubmFtZSArICIgbXVzdCByZXR1cm4gYSBzdHJ1Y3QuIik7Ci0g
ICAgICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2Ygbm9kZS5wYXJhbWV0ZXJzKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHBhcmFtZXRlci5uYW1lID09ICJzdGFnZUluIikgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoIShwYXJhbWV0ZXIudHlwZS50eXBlIGluc3RhbmNlb2YgU3RydWN0VHlw
ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcigiRnJhZ21l
bnQgZW50cnkgcG9pbnRzJyBzdGFnZUluIHBhcmFtZXRlciAob2YgIiArIG5vZGUubmFtZSArICIp
IG11c3QgYmUgYSBzdHJ1Y3QgdHlwZS4iKTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVy
LnR5cGUudmlzaXQobmV3IE5vbk51bWVyaWNTZWFyY2hlcihub2RlLm5hbWUpKTsKLSAgICAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoIShwYXJhbWV0ZXIudHlw
ZS50eXBlIGluc3RhbmNlb2YgQXJyYXlSZWZUeXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IHRocm93IG5ldyBXVHlwZUVycm9yKCJGcmFnbWVudCBlbnRyeSBwb2ludCdzICIgKyBwYXJhbWV0
ZXIubmFtZSArICIgcGFyYW1ldGVyIGlzIG5vdCBhbiBhcnJheSByZWZlcmVuY2UuIik7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgbm9kZS5yZXR1cm5UeXBl
LnR5cGUudmlzaXQobmV3IE5vbk51bWVyaWNTZWFyY2hlcik7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHZpc2l0RnVuY0RlZihub2RlKQogICAgIHsK
ICAgICAgICAgaWYgKG5vZGUuc2hhZGVyVHlwZSkKQEAgLTIxMywxOCArMTc2LDYgQEAgY2xhc3Mg
Q2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICB0aGlzLl9jaGVja1R5cGVBcmd1bWVu
dHMobm9kZS5vcmlnaW4sIG5vZGUudHlwZS50eXBlUGFyYW1ldGVycywgbm9kZS50eXBlQXJndW1l
bnRzKTsKICAgICB9CiAgICAgCi0gICAgdmlzaXRSZWZlcmVuY2VUeXBlKG5vZGUpCi0gICAgewot
ICAgICAgICBub2RlLmVsZW1lbnRUeXBlLnZpc2l0KHRoaXMpOwotICAgICAgICAKLSAgICAgICAg
aWYgKG5vZGUuYWRkcmVzc1NwYWNlID09ICJ0aHJlYWQiKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKLSAgICAgICAgbGV0IGluc3RhbnRpYXRlZFR5cGUgPSBub2RlLmVsZW1lbnRUeXBl
Lmluc3RhbnRpYXRlZFR5cGU7Ci0gICAgICAgIGlmICghaW5zdGFudGlhdGVkVHlwZS5pc1ByaW1p
dGl2ZSkKLSAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdp
blN0cmluZywgIklsbGVnYWwgcG9pbnRlciB0byBub24tcHJpbWl0aXZlIHR5cGU6ICIgKyBub2Rl
LmVsZW1lbnRUeXBlICsgIiAoaW5zdGFudGlhdGVkIHRvICIgKyBub2RlLmVsZW1lbnRUeXBlLmlu
c3RhbnRpYXRlZFR5cGUgKyAiKSIpOwotICAgIH0KLSAgICAKICAgICB2aXNpdEFycmF5VHlwZShu
b2RlKQogICAgIHsKICAgICAgICAgbm9kZS5lbGVtZW50VHlwZS52aXNpdCh0aGlzKTsKSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Z1bmNJbnN0YW50aWF0b3IuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0luc3RhbnRpYXRvci5q
cwkocmV2aXNpb24gMjIyMjk0KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVu
Y0luc3RhbnRpYXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw4IEBAIGNsYXNz
IEZ1bmNJbnN0YW50aWF0b3IgewogICAgICAgICAgICAgICAgICAgICBmdW5jLnJldHVyblR5cGUu
dmlzaXQoc3Vic3RpdHV0aW9uKS52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpLAogICAgICAg
ICAgICAgICAgICAgICBbXSwgLy8gV2UncmUgaW5zdGFudGlhdGVkIHNvIHdlIG5vIGxvbmdlciB0
YWtlIHR5cGUgcGFyYW1ldGVycy4KICAgICAgICAgICAgICAgICAgICAgZnVuYy5wYXJhbWV0ZXJz
Lm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1ldGVyLnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQoaW5z
dGFudGlhdGVJbW1lZGlhdGVzKSksCi0gICAgICAgICAgICAgICAgICAgIGZ1bmMuYm9keS52aXNp
dChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcykpOworICAgICAgICAg
ICAgICAgICAgICBmdW5jLmJvZHkudmlzaXQoc3Vic3RpdHV0aW9uKS52aXNpdChpbnN0YW50aWF0
ZUltbWVkaWF0ZXMpLAorICAgICAgICAgICAgICAgICAgICBmdW5jLmlzQ2FzdCwgZnVuYy5zaGFk
ZXJUeXBlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgdmlzaXRO
YXRpdmVGdW5jKGZ1bmMpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Jbmxp
bmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW5saW5l
LmpzCShyZXZpc2lvbiAyMjIyOTQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9J
bmxpbmUuanMJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDggQEAgZnVuY3Rpb24gX2lubGlu
ZUZ1bmN0aW9uKHByb2dyYW0sIGZ1bmMsIAogICAgIGlmIChmdW5jLmlubGluZWQgfHwgZnVuYy5p
c05hdGl2ZSkKICAgICAgICAgcmV0dXJuOwogICAgIAorICAgIGZ1bmMudmlzaXQobmV3IExhdGVD
aGVja2VyKCkpOworICAgIAogICAgIC8vIFRoaXMgaXMgdGhlIHByZWNpc2UgdGltZSB3aGVuIHdl
IGNhbiBidWlsZCBFQnVmZmVycyBpbiBvcmRlciB0byBnZXQgdGhlbSB0byBiZSB1bmlxdWVkIGJ5
CiAgICAgLy8gdHlwZSBpbnN0YW50aWF0aW9uIGJ1dCBub3RoaW5nIGVsc2UuCiAgICAgZnVuYy52
aXNpdChuZXcgU3RydWN0TGF5b3V0QnVpbGRlcigpKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwkocmV2aXNpb24gMjIyMjk1KQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MjcsMTAgKzI3LDYgQEAKIGNsYXNzIEludHJpbnNpY3MgewogICAgIGNvbnN0cnVjdG9yKG5hbWVD
b250ZXh0KQogICAgIHsKLSAgICAgICAgdGhpcy5wcmltaXRpdmUgPSBuZXcgUHJvdG9jb2xEZWNs
KHtvcmlnaW46ICI8aW50ZXJuYWw+Iiwgb3JpZ2luU3RyaW5nOiAibmF0aXZlIiwgaXNJbnRlcm5h
bDogdHJ1ZX0sICJQcmltaXRpdmUiKTsKLSAgICAgICAgdGhpcy5wcmltaXRpdmUuaXNQcmltaXRp
dmUgPSB0cnVlOwotICAgICAgICBuYW1lQ29udGV4dC5hZGQodGhpcy5wcmltaXRpdmUpOwotICAg
ICAgICAKICAgICAgICAgdGhpcy5fbWFwID0gbmV3IE1hcCgpOwogCiAgICAgICAgIC8vIE5PVEU6
IEludHJpbnNpYyByZXNvbHV0aW9uIGhhcHBlbnMgYmVmb3JlIHR5cGUgbmFtZSByZXNvbHV0aW9u
LCBzbyB0aGUgc3RyaW5ncyB3ZSB1c2UgaGVyZQpAQCAtMzksNyArMzUsNyBAQCBjbGFzcyBJbnRy
aW5zaWNzIHsKICAgICAgICAgLy8gdXNlICJpbnQiIGhlcmUsIHNpbmNlIHdlIGRvbid0IHlldCBr
bm93IHRoYXQgdGhleSBhcmUgdGhlIHNhbWUgdHlwZS4KICAgICAgICAgCiAgICAgICAgIHRoaXMu
X21hcC5zZXQoCi0gICAgICAgICAgICAibmF0aXZlIFByaW1pdGl2ZSB0eXBlIHZvaWQ8PiIsCisg
ICAgICAgICAgICAibmF0aXZlIHR5cGVkZWYgdm9pZDw+IiwKICAgICAgICAgICAgIHR5cGUgPT4g
ewogICAgICAgICAgICAgICAgIHRoaXMudm9pZCA9IHR5cGU7CiAgICAgICAgICAgICAgICAgdHlw
ZS5zaXplID0gMDsKQEAgLTYxLDkgKzU3LDEwIEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAg
ICB9CiAKICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgUHJpbWl0
aXZlIHR5cGUgaW50MzI8PiIsCisgICAgICAgICAgICAibmF0aXZlIHR5cGVkZWYgaW50MzI8PiIs
CiAgICAgICAgICAgICB0eXBlID0+IHsKICAgICAgICAgICAgICAgICB0aGlzLmludDMyID0gdHlw
ZTsKKyAgICAgICAgICAgICAgICB0eXBlLmlzUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICB0eXBlLmlzSW50ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB0eXBlLmlzTnVtYmVyID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICB0eXBlLmlzU2lnbmVkID0gdHJ1ZTsKQEAgLTc5LDkgKzc2
LDEwIEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgdGhp
cy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgUHJpbWl0aXZlIHR5cGUgdWludDMyPD4i
LAorICAgICAgICAgICAgIm5hdGl2ZSB0eXBlZGVmIHVpbnQzMjw+IiwKICAgICAgICAgICAgIHR5
cGUgPT4gewogICAgICAgICAgICAgICAgIHRoaXMudWludDMyID0gdHlwZTsKKyAgICAgICAgICAg
ICAgICB0eXBlLmlzUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB0eXBlLmlzSW50
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB0eXBlLmlzTnVtYmVyID0gdHJ1ZTsKICAgICAgICAg
ICAgICAgICB0eXBlLmlzU2lnbmVkID0gZmFsc2U7CkBAIC05Nyw5ICs5NSwxMCBAQCBjbGFzcyBJ
bnRyaW5zaWNzIHsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHRoaXMuX21hcC5zZXQoCi0g
ICAgICAgICAgICAibmF0aXZlIFByaW1pdGl2ZSB0eXBlIGZsb2F0PD4iLAorICAgICAgICAgICAg
Im5hdGl2ZSB0eXBlZGVmIGZsb2F0PD4iLAogICAgICAgICAgICAgdHlwZSA9PiB7CiAgICAgICAg
ICAgICAgICAgdGhpcy5mbG9hdCA9IHR5cGU7CisgICAgICAgICAgICAgICAgdHlwZS5pc1ByaW1p
dGl2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgdHlwZS5zaXplID0gMTsKICAgICAgICAgICAg
ICAgICB0eXBlLmlzRmxvYXRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgIHR5cGUuaXNOdW1i
ZXIgPSB0cnVlOwpAQCAtMTEyLDkgKzExMSwxMCBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAg
ICAgICAgIH0pOwogCiAgICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAibmF0aXZl
IFByaW1pdGl2ZSB0eXBlIGRvdWJsZTw+IiwKKyAgICAgICAgICAgICJuYXRpdmUgdHlwZWRlZiBk
b3VibGU8PiIsCiAgICAgICAgICAgICB0eXBlID0+IHsKICAgICAgICAgICAgICAgICB0aGlzLmRv
dWJsZSA9IHR5cGU7CisgICAgICAgICAgICAgICAgdHlwZS5pc1ByaW1pdGl2ZSA9IHRydWU7CiAg
ICAgICAgICAgICAgICAgdHlwZS5zaXplID0gMTsKICAgICAgICAgICAgICAgICB0eXBlLmlzRmxv
YXRpbmcgPSB0cnVlOwogICAgICAgICAgICAgICAgIHR5cGUuaXNOdW1iZXIgPSB0cnVlOwpAQCAt
MTI3LDkgKzEyNywxMCBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgIH0pOwogCiAg
ICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAgICAibmF0aXZlIFByaW1pdGl2ZSB0eXBl
IGJvb2w8PiIsCisgICAgICAgICAgICAibmF0aXZlIHR5cGVkZWYgYm9vbDw+IiwKICAgICAgICAg
ICAgIHR5cGUgPT4gewogICAgICAgICAgICAgICAgIHRoaXMuYm9vbCA9IHR5cGU7CisgICAgICAg
ICAgICAgICAgdHlwZS5pc1ByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgdHlwZS5z
aXplID0gMTsKICAgICAgICAgICAgICAgICB0eXBlLnBvcHVsYXRlRGVmYXVsdFZhbHVlID0gKGJ1
ZmZlciwgb2Zmc2V0KSA9PiBidWZmZXIuc2V0KG9mZnNldCwgZmFsc2UpOwogICAgICAgICAgICAg
fSk7CkBAIC01MDEsNyArNTAyLDcgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgIAogICAg
ICAgICBmb3IgKGxldCBhZGRyZXNzU3BhY2Ugb2YgYWRkcmVzc1NwYWNlcykgewogICAgICAgICAg
ICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICAgICBgbmF0aXZlIFReICR7YWRkcmVzc1Nw
YWNlfSBvcGVyYXRvciZbXTxUJHtwcm90b2NvbFN1ZmZpeChhZGRyZXNzU3BhY2UpfT4oVFtdICR7
YWRkcmVzc1NwYWNlfSx1aW50KWAsCisgICAgICAgICAgICAgICAgYG5hdGl2ZSBUXiAke2FkZHJl
c3NTcGFjZX0gb3BlcmF0b3ImW108VD4oVFtdICR7YWRkcmVzc1NwYWNlfSx1aW50KWAsCiAgICAg
ICAgICAgICAgICAgZnVuYyA9PiB7CiAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50
YXRpb24gPSAoW3JlZiwgaW5kZXhdLCBub2RlKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICByZWYgPSByZWYubG9hZFZhbHVlKCk7CkBAIC01MTUsNyArNTE2LDcgQEAgY2xhc3MgSW50cmlu
c2ljcyB7CiAgICAgICAgICAgICAgICAgfSk7CiAKICAgICAgICAgICAgIHRoaXMuX21hcC5zZXQo
Ci0gICAgICAgICAgICAgICAgYG5hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUJHtwcm90b2Nv
bFN1ZmZpeChhZGRyZXNzU3BhY2UpfT4oVFtdICR7YWRkcmVzc1NwYWNlfSlgLAorICAgICAgICAg
ICAgICAgIGBuYXRpdmUgdWludCBvcGVyYXRvci5sZW5ndGg8VD4oVFtdICR7YWRkcmVzc1NwYWNl
fSlgLAogICAgICAgICAgICAgICAgIGZ1bmMgPT4gewogICAgICAgICAgICAgICAgICAgICBmdW5j
LmltcGxlbWVudGF0aW9uID0gKFtyZWZdLCBub2RlKSA9PiB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICByZWYgPSByZWYubG9hZFZhbHVlKCk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MYXRlQ2hlY2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9MYXRlQ2hlY2tlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9MYXRlQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNl
IHN0cmljdCI7CisKK2NsYXNzIExhdGVDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CisgICAgY29u
c3RydWN0b3IoKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICB9CisKKyAgICB2aXNpdFJl
ZmVyZW5jZVR5cGUobm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLmFkZHJlc3NTcGFjZSA9
PSAidGhyZWFkIikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICgh
bm9kZS5lbGVtZW50VHlwZS5pc1ByaW1pdGl2ZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlw
ZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIklsbGVnYWwgcG9pbnRlciB0byBub24t
cHJpbWl0aXZlIHR5cGU6ICIgKyBub2RlLmVsZW1lbnRUeXBlKTsKKyAgICB9CisgICAgCisgICAg
X2NoZWNrU2hhZGVyVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGFzc2VydFByaW1pdGl2
ZSA9IHR5cGUgPT4geworICAgICAgICAgICAgaWYgKCF0eXBlLmlzUHJpbWl0aXZlKQorICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywg
IlNoYWRlciBzaWduYXR1cmUgY2Fubm90IGluY2x1ZGUgbm9uLXByaW1pdGl2ZSB0eXBlOiAiICsg
dHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgc3dpdGNoIChub2RlLnNoYWRlclR5cGUpIHsKKyAg
ICAgICAgY2FzZSAidmVydGV4IjoKKyAgICAgICAgICAgIGlmICghKG5vZGUucmV0dXJuVHlwZS50
eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdU
eXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVmVydGV4IHNoYWRlciAiICsgbm9k
ZS5uYW1lICsgIiBtdXN0IHJldHVybiBhIHN0cnVjdC4iKTsKKyAgICAgICAgICAgIGFzc2VydFBy
aW1pdGl2ZShub2RlLnJldHVyblR5cGUpOworICAgICAgICAgICAgZm9yIChsZXQgcGFyYW1ldGVy
IG9mIG5vZGUucGFyYW1ldGVycykgeworICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIudHlw
ZS50eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0
UHJpbWl0aXZlKHBhcmFtZXRlci50eXBlKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICghKHBh
cmFtZXRlci50eXBlLnR5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKQorICAgICAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG5v
ZGUubmFtZSArICIgYWNjZXB0cyBhIHBhcmFtZXRlciAiICsgcGFyYW1ldGVyLm5hbWUgKyAiIHdo
aWNoIGlzbid0IGEgc3RydWN0IGFuZCBpc24ndCBhbiBBcnJheVJlZi4iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJmcmFnbWVudCI6CisgICAgICAg
ICAgICBpZiAoIShub2RlLnJldHVyblR5cGUudHlwZSBpbnN0YW5jZW9mIFN0cnVjdFR5cGUpKQor
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0
cmluZywgIkZyYWdtZW50IHNoYWRlciAiICsgbm9kZS5uYW1lICsgIiBtdXN0IHJldHVybiBhIHN0
cnVjdC4iKTsKKyAgICAgICAgICAgIGFzc2VydFByaW1pdGl2ZShub2RlLnJldHVyblR5cGUpOwor
ICAgICAgICAgICAgZm9yIChsZXQgcGFyYW1ldGVyIG9mIG5vZGUucGFyYW1ldGVycykgeworICAg
ICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIubmFtZSA9PSAic3RhZ2VJbiIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKCEocGFyYW1ldGVyLnR5cGUudHlwZSBpbnN0YW5jZW9mIFN0cnVjdFR5
cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5v
cmlnaW4ub3JpZ2luU3RyaW5nLCAiRnJhZ21lbnQgZW50cnkgcG9pbnRzJyBzdGFnZUluIHBhcmFt
ZXRlciAob2YgIiArIG5vZGUubmFtZSArICIpIG11c3QgYmUgYSBzdHJ1Y3QgdHlwZS4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0UHJpbWl0aXZlKHBhcmFtZXRlci50eXBlKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoIShwYXJhbWV0ZXIu
dHlwZS50eXBlIGluc3RhbmNlb2YgQXJyYXlSZWZUeXBlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkZyYWdt
ZW50IGVudHJ5IHBvaW50J3MgIiArIHBhcmFtZXRlci5uYW1lICsgIiBwYXJhbWV0ZXIgaXMgbm90
IGFuIGFycmF5IHJlZmVyZW5jZS4iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2aXNpdEZ1
bmNEZWYobm9kZSkKKyAgICB7CisgICAgICAgIGlmIChub2RlLnNoYWRlclR5cGUpCisgICAgICAg
ICAgICB0aGlzLl9jaGVja1NoYWRlclR5cGUobm9kZSk7CisgICAgICAgIHN1cGVyLnZpc2l0RnVu
Y0RlZihub2RlKTsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0xleGVyVG9rZW4uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTGV4ZXJUb2tlbi5qcwkocmV2aXNpb24gMjIyMjk1KQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTGV4ZXJUb2tlbi5qcwkod29ya2luZyBjb3B5KQpAQCAtNTgsMTEgKzU4
LDYgQEAgY2xhc3MgTGV4ZXJUb2tlbiB7CiAgICAgICAgIHJldHVybiB0aGlzLmxleGVyLm9yaWdp
bktpbmQ7CiAgICAgfQogICAgIAotICAgIGdldCBpc0ludGVybmFsKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCiAgICAgZ2V0IGluZGV4KCkKICAgICB7CiAgICAg
ICAgIHJldHVybiB0aGlzLl9pbmRleDsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL05hdGl2ZVR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTmF0aXZlVHlwZS5qcwkocmV2aXNpb24gMjIyMjk0KQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvTmF0aXZlVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjUsMjEgKzI1
LDIyIEBACiAidXNlIHN0cmljdCI7CiAKIGNsYXNzIE5hdGl2ZVR5cGUgZXh0ZW5kcyBUeXBlIHsK
LSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIGlzUHJpbWl0aXZlLCB0eXBlUGFyYW1ldGVy
cykKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIHR5cGVQYXJhbWV0ZXJzKQogICAgIHsK
KyAgICAgICAgaWYgKCEodHlwZVBhcmFtZXRlcnMgaW5zdGFuY2VvZiBBcnJheSkpCisgICAgICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoInR5cGUgcGFyYW1ldGVycyBub3QgYXJyYXk6ICIgKyB0eXBl
UGFyYW1ldGVycyk7CiAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgIHRoaXMuX29yaWdpbiA9IG9y
aWdpbjsKICAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7Ci0gICAgICAgIHRoaXMuX2lzUHJpbWl0
aXZlID0gaXNQcmltaXRpdmU7CiAgICAgICAgIHRoaXMuX3R5cGVQYXJhbWV0ZXJzID0gdHlwZVBh
cmFtZXRlcnM7CiAgICAgICAgIHRoaXMuX2lzTnVtYmVyID0gZmFsc2U7CiAgICAgICAgIHRoaXMu
X2lzSW50ID0gZmFsc2U7CiAgICAgICAgIHRoaXMuX2lzRmxvYXRpbmcgPSBmYWxzZTsKKyAgICAg
ICAgdGhpcy5faXNQcmltaXRpdmUgPSBmYWxzZTsKICAgICB9CiAgICAgCiAgICAgZ2V0IG9yaWdp
bigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhp
cy5fbmFtZTsgfQotICAgIGdldCBpc1ByaW1pdGl2ZSgpIHsgcmV0dXJuIHRoaXMuX2lzUHJpbWl0
aXZlOyB9CiAgICAgZ2V0IHR5cGVQYXJhbWV0ZXJzKCkgeyByZXR1cm4gdGhpcy5fdHlwZVBhcmFt
ZXRlcnM7IH0KICAgICBnZXQgaXNOYXRpdmUoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgCkBAIC01
MCw2ICs1MSw4IEBAIGNsYXNzIE5hdGl2ZVR5cGUgZXh0ZW5kcyBUeXBlIHsKICAgICBzZXQgaXNJ
bnQodmFsdWUpIHsgdGhpcy5faXNJbnQgPSB2YWx1ZTsgfQogICAgIGdldCBpc0Zsb2F0aW5nKCkg
eyByZXR1cm4gdGhpcy5faXNGbG9hdGluZzsgfQogICAgIHNldCBpc0Zsb2F0aW5nKHZhbHVlKSB7
IHRoaXMuX2lzRmxvYXRpbmcgPSB2YWx1ZTsgfQorICAgIGdldCBpc1ByaW1pdGl2ZSgpIHsgcmV0
dXJuIHRoaXMuX2lzUHJpbWl0aXZlOyB9CisgICAgc2V0IGlzUHJpbWl0aXZlKHZhbHVlKSB7IHRo
aXMuX2lzUHJpbWl0aXZlID0gdmFsdWU7IH0KICAgICAKICAgICBpbnN0YW50aWF0ZSh0eXBlQXJn
dW1lbnRzKQogICAgIHsKQEAgLTYyLDcgKzY1LDcgQEAgY2xhc3MgTmF0aXZlVHlwZSBleHRlbmRz
IFR5cGUgewogICAgIAogICAgIHRvU3RyaW5nKCkKICAgICB7Ci0gICAgICAgIHJldHVybiAibmF0
aXZlICIgKyAodGhpcy5pc1ByaW1pdGl2ZSA/ICJQcmltaXRpdmUgIiA6ICIiKSArICJ0eXBlICIg
KyB0aGlzLm5hbWUgKyAiPCIgKyB0aGlzLnR5cGVQYXJhbWV0ZXJzICsgIj4iOworICAgICAgICBy
ZXR1cm4gIm5hdGl2ZSB0eXBlZGVmICIgKyB0aGlzLm5hbWUgKyAiPCIgKyB0aGlzLnR5cGVQYXJh
bWV0ZXJzICsgIj4iOwogICAgIH0KIH0KIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUGFyc2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvUGFyc2UuanMJKHJldmlzaW9uIDIyMjI5NCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1BhcnNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC05MjMsMTggKzkyMywxMSBAQCBmdW5j
dGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgZnVuY3Rpb24gcGFyc2VO
YXRpdmUoKQogICAgIHsKICAgICAgICAgbGV0IG9yaWdpbiA9IGNvbnN1bWUoIm5hdGl2ZSIpOwot
ICAgICAgICBsZXQgaXNUeXBlID0gbGV4ZXIuYmFja3RyYWNraW5nU2NvcGUoKCkgPT4gewotICAg
ICAgICAgICAgaWYgKHRyeUNvbnN1bWUoInR5cGVkZWYiKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gIm5vcm1hbCI7Ci0gICAgICAgICAgICBjb25zdW1lKCJQcmltaXRpdmUiKTsKLSAgICAgICAg
ICAgIGNvbnN1bWUoInR5cGVkZWYiKTsKLSAgICAgICAgICAgIHJldHVybiAicHJpbWl0aXZlIjsK
LSAgICAgICAgfSk7Ci0gICAgICAgIGlmIChpc1R5cGUpIHsKKyAgICAgICAgaWYgKHRyeUNvbnN1
bWUoInR5cGVkZWYiKSkgewogICAgICAgICAgICAgbGV0IG5hbWUgPSBjb25zdW1lS2luZCgiaWRl
bnRpZmllciIpOwogICAgICAgICAgICAgbGV0IHBhcmFtZXRlcnMgPSBwYXJzZVR5cGVQYXJhbWV0
ZXJzKCk7CiAgICAgICAgICAgICBjb25zdW1lKCI7Iik7Ci0gICAgICAgICAgICByZXR1cm4gbmV3
IE5hdGl2ZVR5cGUob3JpZ2luLCBuYW1lLnRleHQsIGlzVHlwZSA9PSAicHJpbWl0aXZlIiwgcGFy
YW1ldGVycyk7CisgICAgICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZVR5cGUob3JpZ2luLCBuYW1l
LnRleHQsIHBhcmFtZXRlcnMpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBwYXJzZU5hdGl2
ZUZ1bmMoKTsKICAgICB9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9n
cmFtV2l0aFVubmVjZXNzYXJ5VGhpbmdzUmVtb3ZlZC5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9ncmFtV2l0aFVubmVjZXNzYXJ5VGhpbmdzUmVtb3Zl
ZC5qcwkocmV2aXNpb24gMjIyMjk1KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
UHJvZ3JhbVdpdGhVbm5lY2Vzc2FyeVRoaW5nc1JlbW92ZWQuanMJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDEwICs1MSw4IEBAIGZ1bmN0aW9uIHByb2dyYW1XaXRoVW5uZWNlc3NhcnlUaGluZ3NSZW0K
ICAgICAKICAgICBsZXQgcmVzdWx0ID0gbmV3IFByb2dyYW0oKTsKICAgICBmb3IgKGxldCBuYW1l
IG9mIG5hbWVGaW5kZXIuc2V0KSB7Ci0gICAgICAgIGZvciAobGV0IHRoaW5nIG9mIHByb2dyYW0u
Z2xvYmFsTmFtZUNvbnRleHQudW5kZXJseWluZ1RoaW5ncyhBbnl0aGluZywgbmFtZSkpIHsKLSAg
ICAgICAgICAgIGlmICghdGhpbmcub3JpZ2luLmlzSW50ZXJuYWwpCi0gICAgICAgICAgICAgICAg
cmVzdWx0LmFkZCh0aGluZyk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChsZXQgdGhpbmcgb2Yg
cHJvZ3JhbS5nbG9iYWxOYW1lQ29udGV4dC51bmRlcmx5aW5nVGhpbmdzKEFueXRoaW5nLCBuYW1l
KSkKKyAgICAgICAgICAgIHJlc3VsdC5hZGQodGhpbmcpOwogICAgIH0KICAgICAKICAgICByZXR1
cm4gcmVzdWx0OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvdG9jb2xE
ZWNsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb3Rv
Y29sRGVjbC5qcwkocmV2aXNpb24gMjIyMjk0KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUHJvdG9jb2xEZWNsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw2IEBAIGNs
YXNzIFByb3RvY29sRGVjbCBleHRlbmRzIFByb3RvY29sIHsKICAgICAgICAgdGhpcy5fc2lnbmF0
dXJlcyA9IFtdOwogICAgICAgICB0aGlzLl9zaWduYXR1cmVNYXAgPSBuZXcgTWFwKCk7CiAgICAg
ICAgIHRoaXMuX3R5cGVWYXJpYWJsZSA9IG5ldyBUeXBlVmFyaWFibGUob3JpZ2luLCBuYW1lLCBu
dWxsKTsKLSAgICAgICAgdGhpcy5pc1ByaW1pdGl2ZSA9IGZhbHNlOwogICAgIH0KICAgICAKICAg
ICBhZGRFeHRlbmRzKHByb3RvY29sKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvUmVmZXJlbmNlVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9SZWZlcmVuY2VUeXBlLmpzCShyZXZpc2lvbiAyMjIyOTQpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWZlcmVuY2VUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSw3ICszOSw2IEBAIGNsYXNzIFJlZmVyZW5jZVR5cGUgZXh0ZW5kcyBUeXBlIHsKICAgICBnZXQg
b3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9CiAgICAgZ2V0IGFkZHJlc3NTcGFjZSgp
IHsgcmV0dXJuIHRoaXMuX2FkZHJlc3NTcGFjZTsgfQogICAgIGdldCBlbGVtZW50VHlwZSgpIHsg
cmV0dXJuIHRoaXMuX2VsZW1lbnRUeXBlOyB9Ci0gICAgZ2V0IGlzUHJpbWl0aXZlKCkgeyByZXR1
cm4gZmFsc2U7IH0KIAogICAgIGdldCBzaXplKCkgeyByZXR1cm4gMTsgfQogCkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCShyZXZp
c2lvbiAyMjIyOTQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExp
YnJhcnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTcxLDIwICs3MSwxOSBAQCBmdW5jdGlvbiBfZ2Vu
ZXJhdGVTd2l6emxlKG1heERlcHRoLCBtYXhJCiAvLyBOT1RFOiBUaGUgbmV4dCBsaW5lIGlzIGxp
bmUgNzIsIGFuZCB3ZSByZWx5IG9uIHRoaXMgaW4gUHJlcGFyZS5qcy4KIGNvbnN0IHN0YW5kYXJk
TGlicmFyeSA9IGAKIC8vIFRoaXMgaXMgdGhlIFdTTCBzdGFuZGFyZCBsaWJyYXJ5LiBJbXBsZW1l
bnRhdGlvbnMgb2YgYWxsIG9mIHRoZXNlIHRoaW5ncyBhcmUgaW4KLS8vIEludHJpbnNpY3MuanMu
IFRoZSBvbmx5IHRoaW5nIHRoYXQgZ2V0cyBkZWZpbmVkIGJlZm9yZSB3ZSBnZXQgaGVyZSBpcyB0
aGUgUHJpbWl0aXZlCi0vLyBwcm90b2NvbC4KKy8vIEludHJpbnNpY3MuanMuCiAKIC8vIE5lZWQg
dG8gYm9vdHN0cmFwIHZvaWQgZmlyc3QuCi1uYXRpdmUgUHJpbWl0aXZlIHR5cGVkZWYgdm9pZDsK
K25hdGl2ZSB0eXBlZGVmIHZvaWQ7CiAKLW5hdGl2ZSBQcmltaXRpdmUgdHlwZWRlZiBpbnQzMjsK
LW5hdGl2ZSBQcmltaXRpdmUgdHlwZWRlZiB1aW50MzI7Ci1uYXRpdmUgUHJpbWl0aXZlIHR5cGVk
ZWYgYm9vbDsKK25hdGl2ZSB0eXBlZGVmIGludDMyOworbmF0aXZlIHR5cGVkZWYgdWludDMyOwor
bmF0aXZlIHR5cGVkZWYgYm9vbDsKIHR5cGVkZWYgaW50ID0gaW50MzI7CiB0eXBlZGVmIHVpbnQg
PSB1aW50MzI7CiAKLW5hdGl2ZSBQcmltaXRpdmUgdHlwZWRlZiBmbG9hdDsKLW5hdGl2ZSBQcmlt
aXRpdmUgdHlwZWRlZiBkb3VibGU7CituYXRpdmUgdHlwZWRlZiBmbG9hdDsKK25hdGl2ZSB0eXBl
ZGVmIGRvdWJsZTsKIAogbmF0aXZlIG9wZXJhdG9yIGludDMyKHVpbnQzMik7CiBuYXRpdmUgb3Bl
cmF0b3IgdWludDMyKGludDMyKTsKQEAgLTM4NCwxNCArMzgzLDE0IEBAIHRocmVhZCBUXiBvcGVy
YXRvciZbXTxUPih0aHJlYWQgdmVjNDxUPl4KIH0KIAogbmF0aXZlIHRocmVhZCBUXiBvcGVyYXRv
ciZbXTxUPih0aHJlYWQgVFtdLCB1aW50KTsKLW5hdGl2ZSB0aHJlYWRncm91cCBUXiBvcGVyYXRv
ciZbXTxUOlByaW1pdGl2ZT4odGhyZWFkZ3JvdXAgVFtdLCB1aW50KTsKLW5hdGl2ZSBkZXZpY2Ug
VF4gb3BlcmF0b3ImW108VDpQcmltaXRpdmU+KGRldmljZSBUW10sIHVpbnQpOwotbmF0aXZlIGNv
bnN0YW50IFReIG9wZXJhdG9yJltdPFQ6UHJpbWl0aXZlPihjb25zdGFudCBUW10sIHVpbnQpOwor
bmF0aXZlIHRocmVhZGdyb3VwIFReIG9wZXJhdG9yJltdPFQ+KHRocmVhZGdyb3VwIFRbXSwgdWlu
dCk7CituYXRpdmUgZGV2aWNlIFReIG9wZXJhdG9yJltdPFQ+KGRldmljZSBUW10sIHVpbnQpOwor
bmF0aXZlIGNvbnN0YW50IFReIG9wZXJhdG9yJltdPFQ+KGNvbnN0YW50IFRbXSwgdWludCk7CiAK
IG5hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUPih0aHJlYWQgVFtdKTsKLW5hdGl2ZSB1aW50
IG9wZXJhdG9yLmxlbmd0aDxUOlByaW1pdGl2ZT4odGhyZWFkZ3JvdXAgVFtdKTsKLW5hdGl2ZSB1
aW50IG9wZXJhdG9yLmxlbmd0aDxUOlByaW1pdGl2ZT4oZGV2aWNlIFRbXSk7Ci1uYXRpdmUgdWlu
dCBvcGVyYXRvci5sZW5ndGg8VDpQcmltaXRpdmU+KGNvbnN0YW50IFRbXSk7CituYXRpdmUgdWlu
dCBvcGVyYXRvci5sZW5ndGg8VD4odGhyZWFkZ3JvdXAgVFtdKTsKK25hdGl2ZSB1aW50IG9wZXJh
dG9yLmxlbmd0aDxUPihkZXZpY2UgVFtdKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxU
Pihjb25zdGFudCBUW10pOwogCiB1aW50IG9wZXJhdG9yLmxlbmd0aDxULCB1aW50IGxlbmd0aD4o
VFtsZW5ndGhdKQogewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhdGVt
ZW50Q2xvbmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0YXRlbWVudENsb25lci5qcwkocmV2aXNpb24gMjIyMjk0KQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvU3RhdGVtZW50Q2xvbmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4
ICs1Myw3IEBAIGNsYXNzIFN0YXRlbWVudENsb25lciBleHRlbmRzIFJld3JpdGVyIHsKICAgICB2
aXNpdE5hdGl2ZVR5cGUobm9kZSkKICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlVHlw
ZSgKLSAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUuaXNQcmltaXRpdmUs
Ci0gICAgICAgICAgICBub2RlLnR5cGVQYXJhbWV0ZXJzLm1hcCh0eXBlUGFyYW1ldGVyID0+IHR5
cGVQYXJhbWV0ZXIudmlzaXQodGhpcykpKTsKKyAgICAgICAgICAgIG5vZGUub3JpZ2luLCBub2Rl
Lm5hbWUsIG5vZGUudHlwZVBhcmFtZXRlcnMubWFwKHR5cGVQYXJhbWV0ZXIgPT4gdHlwZVBhcmFt
ZXRlci52aXNpdCh0aGlzKSkpOwogICAgIH0KICAgICAKICAgICB2aXNpdFR5cGVEZWYobm9kZSkK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N5bnRoZXNpemVTdHJ1Y3RBY2Nl
c3NvcnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3lu
dGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwkocmV2aXNpb24gMjIyMjk0KQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMTU0LDExICsxNTQsOSBAQCBmdW5jdGlvbiBzeW50aGVzaXplU3RydWN0QWNj
ZXNzb3JzKHByb2dyCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHNl
dHVwQW5kZXIoInRocmVhZCIpOwotICAgICAgICAgICAgaWYgKHR5cGUuaW5zdGFudGlhdGUoKS5p
c1ByaW1pdGl2ZSkgewotICAgICAgICAgICAgICAgIHNldHVwQW5kZXIoInRocmVhZGdyb3VwIik7
Ci0gICAgICAgICAgICAgICAgc2V0dXBBbmRlcigiZGV2aWNlIik7Ci0gICAgICAgICAgICAgICAg
c2V0dXBBbmRlcigiY29uc3RhbnQiKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNldHVw
QW5kZXIoInRocmVhZGdyb3VwIik7CisgICAgICAgICAgICBzZXR1cEFuZGVyKCJkZXZpY2UiKTsK
KyAgICAgICAgICAgIHNldHVwQW5kZXIoImNvbnN0YW50Iik7CiAgICAgICAgIH0KICAgICB9CiB9
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHJldmlzaW9uIDIyMjI5
NSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTkyNiw3ICs5MjYsNyBAQCBmdW5jdGlvbiBURVNUX2JhZEludExpdGVyYWxGb3JEb3Vi
bGUoKQogZnVuY3Rpb24gVEVTVF9wYXNzTnVsbEFuZE5vdE51bGwoKQogewogICAgIGxldCBwcm9n
cmFtID0gZG9QcmVwKGAKLSAgICAgICAgVCBiYXI8VDpQcmltaXRpdmU+KGRldmljZSBUXiBwLCBk
ZXZpY2UgVF4pCisgICAgICAgIFQgYmFyPFQ+KGRldmljZSBUXiBwLCBkZXZpY2UgVF4pCiAgICAg
ICAgIHsKICAgICAgICAgICAgIHJldHVybiBecDsKICAgICAgICAgfQpAQCAtOTQzLDcgKzk0Myw3
IEBAIGZ1bmN0aW9uIFRFU1RfcGFzc051bGxBbmROb3ROdWxsKCkKIGZ1bmN0aW9uIFRFU1RfcGFz
c051bGxBbmROb3ROdWxsRnVsbFBvbHkoKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAK
LSAgICAgICAgVCBiYXI8VDpQcmltaXRpdmU+KFQgcCwgVCkKKyAgICAgICAgVCBiYXI8VD4oVCBw
LCBUKQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gcDsKICAgICAgICAgfQpAQCAtOTYw
LDcgKzk2MCw3IEBAIGZ1bmN0aW9uIFRFU1RfcGFzc051bGxBbmROb3ROdWxsRnVsbFBvbHkKIGZ1
bmN0aW9uIFRFU1RfcGFzc051bGxBbmROb3ROdWxsRnVsbFBvbHlSZXZlcnNlKCkKIHsKICAgICBs
ZXQgcHJvZ3JhbSA9IGRvUHJlcChgCi0gICAgICAgIFQgYmFyPFQ6UHJpbWl0aXZlPihULCBUIHAp
CisgICAgICAgIFQgYmFyPFQ+KFQsIFQgcCkKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IHA7CiAgICAgICAgIH0KQEAgLTEwMTgsNyArMTAxOCw3IEBAIGZ1bmN0aW9uIFRFU1RfbnVsbFR5
cGVWYXJpYWJsZVVuaWZ5KCkKICAgICAgICAgICAgIGxldCB0eXBlcyA9IHt9OwogICAgICAgICAg
ICAgdHlwZXMubnVsbFR5cGUgPSBuZXcgTnVsbFR5cGUobnVsbCk7CiAgICAgICAgICAgICB0eXBl
cy52YXJpYWJsZVR5cGUgPSBuZXcgVHlwZVZhcmlhYmxlKG51bGwsICJUIiwgbnVsbCk7Ci0gICAg
ICAgICAgICB0eXBlcy5wdHJUeXBlID0gbmV3IFB0clR5cGUobnVsbCwgImNvbnN0YW50IiwgbmV3
IE5hdGl2ZVR5cGUobnVsbCwgImZvb190IiwgdHJ1ZSwgW10pKTsKKyAgICAgICAgICAgIHR5cGVz
LnB0clR5cGUgPSBuZXcgUHRyVHlwZShudWxsLCAiY29uc3RhbnQiLCBuZXcgTmF0aXZlVHlwZShu
dWxsLCAiZm9vX3QiLCBbXSkpOwogICAgICAgICAgICAgbGV0IHVuaWZpY2F0aW9uQ29udGV4dCA9
IG5ldyBVbmlmaWNhdGlvbkNvbnRleHQoW3R5cGVzLnZhcmlhYmxlVHlwZV0pOwogICAgICAgICAg
ICAgZm9yIChsZXQgW2xlZnROYW1lLCByaWdodE5hbWVdIG9mIG9yZGVyKSB7CiAgICAgICAgICAg
ICAgICAgbGV0IGxlZnQgPSB0eXBlc1tsZWZ0TmFtZV07CkBAIC0xOTkwLDI4ICsxOTkwLDI5IEBA
IGZ1bmN0aW9uIFRFU1RfY2hhaW5TdHJ1Y3QoKQogICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAiYmFyIiwgW10sIFttYWtlSW50KHByb2dyYW0sIDQ2NTcpXSksIDQ2
NTcpOwogfQogCi1mdW5jdGlvbiBURVNUX2NoYWluU3RydWN0SW52YWxpZCgpCitmdW5jdGlvbiBU
RVNUX2NoYWluU3RydWN0TmV3bHlWYWxpZCgpCiB7Ci0gICAgY2hlY2tGYWlsKAotICAgICAgICAo
KSA9PiBkb1ByZXAoYAotICAgICAgICAgICAgc3RydWN0IEZvbzxUPiB7Ci0gICAgICAgICAgICAg
ICAgVCBmOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RydWN0IEJhcjxUPiB7Ci0gICAg
ICAgICAgICAgICAgRm9vPGRldmljZSBUXj4gZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGludCBmb28odGhyZWFkIEJhcjxpbnQ+XiB4KQotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBeeC0+Zi5mOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IGJhcihk
ZXZpY2UgaW50XiBhKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEJhcjxpbnQ+IHg7
Ci0gICAgICAgICAgICAgICAgeC5mLmYgPSBhOwotICAgICAgICAgICAgICAgIHJldHVybiBmb28o
JngpOwotICAgICAgICAgICAgfQotICAgICAgICBgKSwKLSAgICAgICAgKGUpID0+IGUgaW5zdGFu
Y2VvZiBXVHlwZUVycm9yKTsKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHN0
cnVjdCBGb288VD4geworICAgICAgICAgICAgVCBmOworICAgICAgICB9CisgICAgICAgIHN0cnVj
dCBCYXI8VD4geworICAgICAgICAgICAgRm9vPGRldmljZSBUXj4gZjsKKyAgICAgICAgfQorICAg
ICAgICBpbnQgZm9vKHRocmVhZCBCYXI8aW50Pl4geCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIF54LT5mLmY7CisgICAgICAgIH0KKyAgICAgICAgaW50IGJhcihkZXZpY2UgaW50XiBh
KQorICAgICAgICB7CisgICAgICAgICAgICBCYXI8aW50PiB4OworICAgICAgICAgICAgeC5mLmYg
PSBhOworICAgICAgICAgICAgcmV0dXJuIGZvbygmeCk7CisgICAgICAgIH0KKyAgICBgKTsKKyAg
ICBsZXQgYnVmZmVyID0gbmV3IEVCdWZmZXIoMSk7CisgICAgYnVmZmVyLnNldCgwLCA3ODQ1Myk7
CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBbXSwg
W1R5cGVkVmFsdWUuYm94KG5ldyBQdHJUeXBlKG51bGwsICJkZXZpY2UiLCBwcm9ncmFtLmludHJp
bnNpY3MuaW50MzIpLCBuZXcgRVB0cihidWZmZXIsIDApKV0pLCA3ODQ1Myk7CiB9CiAKIGZ1bmN0
aW9uIFRFU1RfY2hhaW5TdHJ1Y3REZXZpY2UoKQpAQCAtMjAyMCw3ICsyMDIxLDcgQEAgZnVuY3Rp
b24gVEVTVF9jaGFpblN0cnVjdERldmljZSgpCiAgICAgICAgIHN0cnVjdCBGb288VD4gewogICAg
ICAgICAgICAgVCBmOwogICAgICAgICB9Ci0gICAgICAgIHN0cnVjdCBCYXI8VDpQcmltaXRpdmU+
IHsKKyAgICAgICAgc3RydWN0IEJhcjxUPiB7CiAgICAgICAgICAgICBGb288ZGV2aWNlIFRePiBm
OwogICAgICAgICB9CiAgICAgICAgIGludCBmb28odGhyZWFkIEJhcjxpbnQ+XiB4KQpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCShyZXZpc2lvbiAyMjIyOTQpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw2ICszMyw3IEBAIGNsYXNzIFR5cGUgZXh0ZW5kcyBOb2RlIHsKICAgICBnZXQgaXNOdW1iZXIo
KSB7IHJldHVybiBmYWxzZTsgfQogICAgIGdldCBpc0ludCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAg
ICAgZ2V0IGlzRmxvYXRpbmcoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGdldCBpc1ByaW1pdGl2
ZSgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCiAgICAgaW5oZXJpdHMocHJvdG9jb2wpCiAgICAg
ewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321447</attachid>
            <date>2017-09-21 10:45:06 -0700</date>
            <delta_ts>2017-09-21 10:53:54 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31270</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjMyOCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDgyIEBACisyMDE3LTA5LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIHNob3VsZCBoYXZlIHNvbWUgcG9zdC1pbnN0YW50aWF0aW9uIHR5cGUgY2hl
Y2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzMwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBwYXRjaCByZW1vdmVzIHRoZSBQcmltaXRpdmUgcHJvdG9jb2whIFlheSEKKyAg
ICAgICAgCisgICAgICAgIFRoZSBQcmltaXRpdmUgcHJvdG9jb2wgd2FzIGFuIGF0dGVtcHQgdG8g
aGFuZGxlIHRoZSBmYWN0IHRoYXQgTWV0YWwgd291bGRuJ3QgYWxsb3cgdXMgdG8gcG9pbnQgYQor
ICAgICAgICBub24tdGhyZWFkIHBvaW50ZXIgYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaGF2ZSBw
b2ludGVycy4gVGhpcyB0eXBlIGNoZWNraW5nIHJ1bGUgaW50ZXJhY3RzIGJhZGx5IHdpdGgKKyAg
ICAgICAgZ2VuZXJpY3MuIEkgd2FzIGFibGUgdG8gZ2V0IGl0IHRvIG1vc3RseSB3b3JrIGJ5IG1h
a2luZyBQcmltaXRpdmUgaW50byBhIGR5bmFtaWMgcHJvdG9jb2wgLSBhIHR5cGUKKyAgICAgICAg
YmVsb25ncyB0byBpdCBpZiBpdCBoYXBwZW5zIHRvIGJlIGlzUHJpbWl0aXZlLgorICAgICAgICAK
KyAgICAgICAgQnV0IHRoYXQgd2FzIGEgbWlzdGFrZSwgc2luY2UgaXQgbWFrZXMgaXQgaGFyZCB0
byBjcmVhdGUgcG9pbnRlcnMgdGhhdCBhcmUgZ2VuZXJpYyBvdmVyIGFkZHJlc3Mgc3BhY2UuCisg
ICAgICAgIEFsc28sIGl0J3Mgbm90IGFuIGFwcHJvcHJpYXRlIHJ1bGUgZm9yIHRhcmdldGluZyBT
UElSLVYgbG9naWNhbCBtb2RlLiBUaGF0IHJ1bGUgd2lsbCBiZSBkaWZmZXJlbnQsIGFuZAorICAg
ICAgICBwb3NzaWJseSBtb3JlIGNvbXBsaWNhdGVkLgorICAgICAgICAKKyAgICAgICAgQWxsIG9m
IHRoZXNlIGtpbmRzIG9mIHJ1bGVzIGFyZSBlYXNpZXIgdG8gaW1wbGVtZW50IG9mIHdlIHJ1biB0
aGVtIGFmdGVyIGluc3RhbnRpYXRpb24sIHNpbmNlIHRoZW4gdGhleQorICAgICAgICBkb24ndCBn
ZXQgaW4gdGhlIHdheSBvZiBnZW5lcmljcy4gVGhhdCdzIHdoYXQgdGhpcyBwYXRjaCBkb2VzLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBtZWFucyB0aGF0IHdlIGdldCBhbGwgb2YgdGhlIHNhbWUg
dHlwZSBjaGVja2luZyBwb3dlciBhcyBiZWZvcmUsIGFuZCB3ZSBzdGlsbCBjYW4gY2F0Y2ggdGhl
IGVycm9ycworICAgICAgICB0aGF0IE1ldGFsIHJlcXVpcmVzIHVzIHRvIGNoZWNrIGZvci4gSXQn
cyBlYXNpZXIgdG8gZG8gdGhvc2UgY2hlY2tzIG5vdy4KKyAgICAgICAgCisgICAgICAgIEZpbmFs
bHksIHRoaXMgcmVtb3ZlcyB0aGUgc2hhZGVyIHR5cGUgY2hlY2tlcidzIGluY29tcGxldGUgcmVp
bXBsZW1lbnRhdGlvbiBvZiBpc1ByaW1pdGl2ZS4gVGhhdCBjYWxscworICAgICAgICBpc1ByaW1p
dGl2ZSBub3cuCisKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BZGRyZXNzU3Bh
Y2UuanM6CisgICAgICAgIChuZWVkc1ByaW1pdGl2ZVByb3RvY29sKTogRGVsZXRlZC4KKyAgICAg
ICAgKHByb3RvY29sU3VmZml4KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9BbGwuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tl
ci5qczoKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLl9jaGVja1NoYWRlclR5cGUpOgorICAg
ICAgICAoQ2hlY2tlci5wcm90b3R5cGUuX2NoZWNrU2hhZGVyVHlwZS5Ob25OdW1lcmljU2VhcmNo
ZXIpOiBEZWxldGVkLgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUuX2NoZWNrU2hhZGVyVHlw
ZS5Ob25OdW1lcmljU2VhcmNoZXIucHJvdG90eXBlLnZpc2l0QXJyYXlSZWZUeXBlKTogRGVsZXRl
ZC4KKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLl9jaGVja1NoYWRlclR5cGUuTm9uTnVtZXJp
Y1NlYXJjaGVyLnByb3RvdHlwZS52aXNpdFB0clR5cGUpOiBEZWxldGVkLgorICAgICAgICAoQ2hl
Y2tlci5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2VUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzOgorICAgICAgICAoRnVu
Y0luc3RhbnRpYXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlLkluc3RhbnRpYXRlLnByb3RvdHlwZS52
aXNpdEZ1bmNEZWYpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZS5q
czoKKyAgICAgICAgKF9pbmxpbmVGdW5jdGlvbik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvSW50cmluc2ljcy5qczoKKyAgICAgICAgKEludHJpbnNpY3MpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVja2VyLmpzOiBBZGRlZC4KKyAgICAgICAg
KExhdGVDaGVja2VyKToKKyAgICAgICAgKExhdGVDaGVja2VyLnByb3RvdHlwZS52aXNpdFJlZmVy
ZW5jZVR5cGUpOgorICAgICAgICAoTGF0ZUNoZWNrZXIucHJvdG90eXBlLl9jaGVja1NoYWRlclR5
cGUpOgorICAgICAgICAoTGF0ZUNoZWNrZXIucHJvdG90eXBlLnZpc2l0RnVuY0RlZik6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXJUb2tlbi5qczoKKyAgICAgICAgKExl
eGVyVG9rZW4ucHJvdG90eXBlLmdldCBpc0ludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVUeXBlLmpzOgorICAgICAgICAoTmF0aXZlVHlw
ZSk6CisgICAgICAgIChOYXRpdmVUeXBlLnByb3RvdHlwZS5nZXQgbmFtZSk6CisgICAgICAgIChO
YXRpdmVUeXBlLnByb3RvdHlwZS5nZXQgaXNQcmltaXRpdmUpOgorICAgICAgICAoTmF0aXZlVHlw
ZS5wcm90b3R5cGUuc2V0IGlzUHJpbWl0aXZlKToKKyAgICAgICAgKE5hdGl2ZVR5cGUucHJvdG90
eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5q
czoKKyAgICAgICAgKHBhcnNlTmF0aXZlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Qcm9ncmFtV2l0aFVubmVjZXNzYXJ5VGhpbmdzUmVtb3ZlZC5qczoKKyAgICAgICAgKHBy
b2dyYW1XaXRoVW5uZWNlc3NhcnlUaGluZ3NSZW1vdmVkKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUmVmZXJlbmNlVHlwZS5qczoKKyAgICAgICAgKFJlZmVyZW5jZVR5cGUucHJvdG90
eXBlLmdldCBlbGVtZW50VHlwZSk6CisgICAgICAgIChSZWZlcmVuY2VUeXBlLnByb3RvdHlwZS5n
ZXQgaXNQcmltaXRpdmUpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1N0YW5kYXJkTGlicmFyeS5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TdGF0ZW1lbnRDbG9uZXIuanM6CisgICAgICAgIChTdGF0ZW1lbnRDbG9uZXIucHJvdG90eXBl
LnZpc2l0TmF0aXZlVHlwZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3lu
dGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qczoKKyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nl
c3NvcnMpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAg
ICAgIChURVNUX3Bhc3NOdWxsQW5kTm90TnVsbEZ1bGxQb2x5KToKKyAgICAgICAgKFRFU1RfcGFz
c051bGxBbmROb3ROdWxsRnVsbFBvbHlSZXZlcnNlKToKKyAgICAgICAgKFRFU1RfbnVsbFR5cGVW
YXJpYWJsZVVuaWZ5KToKKyAgICAgICAgKFRFU1RfY2hhaW5TdHJ1Y3ROZXdseVZhbGlkKToKKyAg
ICAgICAgKFRFU1RfY2hhaW5TdHJ1Y3REZXZpY2UpOgorICAgICAgICAoVEVTVF9jaGFpblN0cnVj
dEludmFsaWQpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5
cGUuanM6CisgICAgICAgIChUeXBlLnByb3RvdHlwZS5nZXQgaXNQcmltaXRpdmUpOgorCiAyMDE3
LTA5LTIwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgV1NMIG5l
ZWRzIGEgd2F5IHRvIHZlcmlmeSB0aGF0IHN0cnVjdHMgYXJlIG5vdCBjeWNsaWMKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FkZHJlc3NTcGFjZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BZGRyZXNzU3BhY2UuanMJKHJldmlzaW9u
IDIyMjMyOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FkZHJlc3NTcGFjZS5q
cwkod29ya2luZyBjb3B5KQpAQCAtMzksMTYgKzM5LDYgQEAgZnVuY3Rpb24gaXNBZGRyZXNzU3Bh
Y2UoYWRkcmVzc1NwYWNlKQogICAgIH0KIH0KIAotZnVuY3Rpb24gbmVlZHNQcmltaXRpdmVQcm90
b2NvbChhZGRyZXNzU3BhY2UpCi17Ci0gICAgcmV0dXJuIGFkZHJlc3NTcGFjZSAhPSAidGhyZWFk
IjsKLX0KLQotZnVuY3Rpb24gcHJvdG9jb2xTdWZmaXgoYWRkcmVzc1NwYWNlKQotewotICAgIHJl
dHVybiBuZWVkc1ByaW1pdGl2ZVByb3RvY29sKGFkZHJlc3NTcGFjZSkgPyAiOlByaW1pdGl2ZSIg
OiAiIjsKLX0KLQogZnVuY3Rpb24gdmFsaWRhdGVBZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQog
ewogICAgIGlmICghaXNBZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKSkKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJldmlzaW9uIDIyMjMyOCkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw3
IEBAIGxvYWQoIkluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbC5q
cyIpOwogbG9hZCgiSW50TGl0ZXJhbFR5cGUuanMiKTsKIGxvYWQoIkludHJpbnNpY3MuanMiKTsK
K2xvYWQoIkxhdGVDaGVja2VyLmpzIik7CiBsb2FkKCJMZXhlci5qcyIpOwogbG9hZCgiTGV4ZXJU
b2tlbi5qcyIpOwogbG9hZCgiTGl0ZXJhbFR5cGVDaGVja2VyLmpzIik7CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHJldmlzaW9uIDIyMjMyOCkKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDYyICs2MiwyMCBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAg
IGlmIChub2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPSAwKQogICAgICAgICAgICAgdGhyb3cg
bmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRW50cnkgcG9pbnQgIiAr
IG5vZGUubmFtZSArICIgbXVzdCBub3QgaGF2ZSB0eXBlIGFyZ3VtZW50cy4iKTsKICAgICAgICAg
bGV0IHNoYWRlckZ1bmMgPSBub2RlOwotICAgICAgICBjbGFzcyBOb25OdW1lcmljU2VhcmNoZXIg
ZXh0ZW5kcyBWaXNpdG9yIHsKLSAgICAgICAgICAgIGNvbnN0cnVjdG9yKG5hbWUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgICAgICAgICB0aGlzLl9u
YW1lID0gbmFtZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZpc2l0QXJyYXlSZWZUeXBl
KG5vZGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBzaGFkZXJGdW5jLm5hbWUgKyAiIG11c3QgdHJh
bnNpdGl2ZWx5IG9ubHkgaGF2ZSBudW1lcmljIHR5cGVzLiIpOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgdmlzaXRQdHJUeXBlKG5vZGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBzaGFkZXJG
dW5jLm5hbWUgKyAiIG11c3QgdHJhbnNpdGl2ZWx5IG9ubHkgaGF2ZSBudW1lcmljIHR5cGVzLiIp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmlzaXRUeXBlUmVmKG5vZGUpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgc3VwZXIudmlzaXRUeXBlUmVmKG5vZGUpOwotICAgICAg
ICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQogICAgICAgICBzd2l0Y2ggKG5vZGUuc2hhZGVyVHlwZSkgewogICAgICAgICBjYXNlICJ2ZXJ0
ZXgiOgogICAgICAgICAgICAgaWYgKHRoaXMuX3ZlcnRleEVudHJ5UG9pbnRzLmhhcyhub2RlLm5h
bWUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9y
aWdpblN0cmluZywgIkR1cGxpY2F0ZSB2ZXJ0ZXggZW50cnkgcG9pbnQgbmFtZSAiICsgbm9kZS5u
YW1lKTsKICAgICAgICAgICAgIHRoaXMuX3ZlcnRleEVudHJ5UG9pbnRzLmFkZChub2RlLm5hbWUp
OwotICAgICAgICAgICAgaWYgKCEobm9kZS5yZXR1cm5UeXBlLnR5cGUgaW5zdGFuY2VvZiBTdHJ1
Y3RUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJWZXJ0ZXggc2hhZGVyICIgKyBub2RlLm5hbWUgKyAiIG11c3QgcmV0
dXJuIGEgc3RydWN0LiIpOwotICAgICAgICAgICAgZm9yIChsZXQgcGFyYW1ldGVyIG9mIG5vZGUu
cGFyYW1ldGVycykgewotICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIudHlwZS50eXBlIGlu
c3RhbmNlb2YgU3RydWN0VHlwZSkKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnR5cGUu
dmlzaXQobmV3IE5vbk51bWVyaWNTZWFyY2hlcihub2RlLm5hbWUpKTsKLSAgICAgICAgICAgICAg
ICBlbHNlIGlmICghKHBhcmFtZXRlci50eXBlLnR5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUp
KQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5v
cmlnaW5TdHJpbmcsIG5vZGUubmFtZSArICIgYWNjZXB0cyBhIHBhcmFtZXRlciAiICsgcGFyYW1l
dGVyLm5hbWUgKyAiIHdoaWNoIGlzbid0IGEgc3RydWN0IGFuZCBpc24ndCBhbiBBcnJheVJlZi4i
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG5vZGUucmV0dXJuVHlwZS50eXBlLnZpc2l0
KG5ldyBOb25OdW1lcmljU2VhcmNoZXIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgImZyYWdtZW50IjoKICAgICAgICAgICAgIGlmICh0aGlzLl9mcmFnbWVudEVudHJ5UG9pbnRz
Lmhhcyhub2RlLm5hbWUpKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5v
ZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkR1cGxpY2F0ZSBmcmFnbWVudCBlbnRyeSBwb2ludCBu
YW1lICIgKyBub2RlLm5hbWUpOwogICAgICAgICAgICAgdGhpcy5fZnJhZ21lbnRFbnRyeVBvaW50
cy5hZGQobm9kZS5uYW1lKTsKLSAgICAgICAgICAgIGlmICghKG5vZGUucmV0dXJuVHlwZS50eXBl
IGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBl
RXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRnJhZ21lbnQgc2hhZGVyICIgKyBub2Rl
Lm5hbWUgKyAiIG11c3QgcmV0dXJuIGEgc3RydWN0LiIpOwotICAgICAgICAgICAgZm9yIChsZXQg
cGFyYW1ldGVyIG9mIG5vZGUucGFyYW1ldGVycykgewotICAgICAgICAgICAgICAgIGlmIChwYXJh
bWV0ZXIubmFtZSA9PSAic3RhZ2VJbiIpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCEocGFy
YW1ldGVyLnR5cGUudHlwZSBpbnN0YW5jZW9mIFN0cnVjdFR5cGUpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
RnJhZ21lbnQgZW50cnkgcG9pbnRzJyBzdGFnZUluIHBhcmFtZXRlciAob2YgIiArIG5vZGUubmFt
ZSArICIpIG11c3QgYmUgYSBzdHJ1Y3QgdHlwZS4iKTsKLSAgICAgICAgICAgICAgICAgICAgcGFy
YW1ldGVyLnR5cGUudmlzaXQobmV3IE5vbk51bWVyaWNTZWFyY2hlcihub2RlLm5hbWUpKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoIShwYXJhbWV0
ZXIudHlwZS50eXBlIGluc3RhbmNlb2YgQXJyYXlSZWZUeXBlKSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkZy
YWdtZW50IGVudHJ5IHBvaW50J3MgIiArIHBhcmFtZXRlci5uYW1lICsgIiBwYXJhbWV0ZXIgaXMg
bm90IGFuIGFycmF5IHJlZmVyZW5jZS4iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBub2RlLnJldHVyblR5cGUudHlwZS52aXNpdChuZXcgTm9uTnVtZXJp
Y1NlYXJjaGVyKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotICAgIAor
CiAgICAgdmlzaXRGdW5jRGVmKG5vZGUpCiAgICAgewogICAgICAgICBpZiAobm9kZS5zaGFkZXJU
eXBlKQpAQCAtMjIwLDE4ICsxNzgsNiBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7
CiAgICAgICAgIHRoaXMuX2NoZWNrVHlwZUFyZ3VtZW50cyhub2RlLm9yaWdpbiwgbm9kZS50eXBl
LnR5cGVQYXJhbWV0ZXJzLCBub2RlLnR5cGVBcmd1bWVudHMpOwogICAgIH0KICAgICAKLSAgICB2
aXNpdFJlZmVyZW5jZVR5cGUobm9kZSkKLSAgICB7Ci0gICAgICAgIG5vZGUuZWxlbWVudFR5cGUu
dmlzaXQodGhpcyk7Ci0gICAgICAgIAotICAgICAgICBpZiAobm9kZS5hZGRyZXNzU3BhY2UgPT0g
InRocmVhZCIpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBsZXQgaW5z
dGFudGlhdGVkVHlwZSA9IG5vZGUuZWxlbWVudFR5cGUuaW5zdGFudGlhdGVkVHlwZTsKLSAgICAg
ICAgaWYgKCFpbnN0YW50aWF0ZWRUeXBlLmlzUHJpbWl0aXZlKQotICAgICAgICAgICAgdGhyb3cg
bmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiSWxsZWdhbCBwb2ludGVy
IHRvIG5vbi1wcmltaXRpdmUgdHlwZTogIiArIG5vZGUuZWxlbWVudFR5cGUgKyAiIChpbnN0YW50
aWF0ZWQgdG8gIiArIG5vZGUuZWxlbWVudFR5cGUuaW5zdGFudGlhdGVkVHlwZSArICIpIik7Ci0g
ICAgfQotICAgIAogICAgIHZpc2l0QXJyYXlUeXBlKG5vZGUpCiAgICAgewogICAgICAgICBub2Rl
LmVsZW1lbnRUeXBlLnZpc2l0KHRoaXMpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRnVuY0luc3RhbnRpYXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCShyZXZpc2lvbiAyMjIzMjgpCisrKyBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDIsNyArMTAyLDggQEAgY2xhc3MgRnVuY0luc3RhbnRpYXRvciB7CiAgICAg
ICAgICAgICAgICAgICAgIGZ1bmMucmV0dXJuVHlwZS52aXNpdChzdWJzdGl0dXRpb24pLnZpc2l0
KGluc3RhbnRpYXRlSW1tZWRpYXRlcyksCiAgICAgICAgICAgICAgICAgICAgIFtdLCAvLyBXZSdy
ZSBpbnN0YW50aWF0ZWQgc28gd2Ugbm8gbG9uZ2VyIHRha2UgdHlwZSBwYXJhbWV0ZXJzLgogICAg
ICAgICAgICAgICAgICAgICBmdW5jLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0
ZXIudmlzaXQoc3Vic3RpdHV0aW9uKS52aXNpdChpbnN0YW50aWF0ZUltbWVkaWF0ZXMpKSwKLSAg
ICAgICAgICAgICAgICAgICAgZnVuYy5ib2R5LnZpc2l0KHN1YnN0aXR1dGlvbikudmlzaXQoaW5z
dGFudGlhdGVJbW1lZGlhdGVzKSk7CisgICAgICAgICAgICAgICAgICAgIGZ1bmMuYm9keS52aXNp
dChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyksCisgICAgICAgICAg
ICAgICAgICAgIGZ1bmMuaXNDYXN0LCBmdW5jLnNoYWRlclR5cGUpOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCiAgICAgICAgICAgICB2aXNpdE5hdGl2ZUZ1bmMoZnVuYykKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZS5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbmxpbmUuanMJKHJldmlzaW9uIDIyMjMyOCkKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtNDMsNiArNDMsOCBAQCBmdW5jdGlvbiBfaW5saW5lRnVuY3Rpb24ocHJvZ3JhbSwgZnVuYywg
CiAgICAgaWYgKGZ1bmMuaW5saW5lZCB8fCBmdW5jLmlzTmF0aXZlKQogICAgICAgICByZXR1cm47
CiAgICAgCisgICAgZnVuYy52aXNpdChuZXcgTGF0ZUNoZWNrZXIoKSk7CisgICAgCiAgICAgLy8g
VGhpcyBpcyB0aGUgcHJlY2lzZSB0aW1lIHdoZW4gd2UgY2FuIGJ1aWxkIEVCdWZmZXJzIGluIG9y
ZGVyIHRvIGdldCB0aGVtIHRvIGJlIHVuaXF1ZWQgYnkKICAgICAvLyB0eXBlIGluc3RhbnRpYXRp
b24gYnV0IG5vdGhpbmcgZWxzZS4KICAgICBmdW5jLnZpc2l0KG5ldyBTdHJ1Y3RMYXlvdXRCdWls
ZGVyKCkpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNz
LmpzCShyZXZpc2lvbiAyMjIzMjgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9J
bnRyaW5zaWNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNywxMCArMjcsNiBAQAogY2xhc3MgSW50
cmluc2ljcyB7CiAgICAgY29uc3RydWN0b3IobmFtZUNvbnRleHQpCiAgICAgewotICAgICAgICB0
aGlzLnByaW1pdGl2ZSA9IG5ldyBQcm90b2NvbERlY2woe29yaWdpbjogIjxpbnRlcm5hbD4iLCBv
cmlnaW5TdHJpbmc6ICJuYXRpdmUiLCBpc0ludGVybmFsOiB0cnVlfSwgIlByaW1pdGl2ZSIpOwot
ICAgICAgICB0aGlzLnByaW1pdGl2ZS5pc1ByaW1pdGl2ZSA9IHRydWU7Ci0gICAgICAgIG5hbWVD
b250ZXh0LmFkZCh0aGlzLnByaW1pdGl2ZSk7Ci0gICAgICAgIAogICAgICAgICB0aGlzLl9tYXAg
PSBuZXcgTWFwKCk7CiAKICAgICAgICAgLy8gTk9URTogSW50cmluc2ljIHJlc29sdXRpb24gaGFw
cGVucyBiZWZvcmUgdHlwZSBuYW1lIHJlc29sdXRpb24sIHNvIHRoZSBzdHJpbmdzIHdlIHVzZSBo
ZXJlCkBAIC0zOSw3ICszNSw3IEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAvLyB1c2Ug
ImludCIgaGVyZSwgc2luY2Ugd2UgZG9uJ3QgeWV0IGtub3cgdGhhdCB0aGV5IGFyZSB0aGUgc2Ft
ZSB0eXBlLgogICAgICAgICAKICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJu
YXRpdmUgUHJpbWl0aXZlIHR5cGUgdm9pZDw+IiwKKyAgICAgICAgICAgICJuYXRpdmUgdHlwZWRl
ZiB2b2lkPD4iLAogICAgICAgICAgICAgdHlwZSA9PiB7CiAgICAgICAgICAgICAgICAgdGhpcy52
b2lkID0gdHlwZTsKICAgICAgICAgICAgICAgICB0eXBlLnNpemUgPSAwOwpAQCAtNjEsOSArNTcs
MTAgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9tYXAu
c2V0KAotICAgICAgICAgICAgIm5hdGl2ZSBQcmltaXRpdmUgdHlwZSBpbnQzMjw+IiwKKyAgICAg
ICAgICAgICJuYXRpdmUgdHlwZWRlZiBpbnQzMjw+IiwKICAgICAgICAgICAgIHR5cGUgPT4gewog
ICAgICAgICAgICAgICAgIHRoaXMuaW50MzIgPSB0eXBlOworICAgICAgICAgICAgICAgIHR5cGUu
aXNQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgIHR5cGUuaXNJbnQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIHR5cGUuaXNOdW1iZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgIHR5
cGUuaXNTaWduZWQgPSB0cnVlOwpAQCAtNzksOSArNzYsMTAgQEAgY2xhc3MgSW50cmluc2ljcyB7
CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAg
Im5hdGl2ZSBQcmltaXRpdmUgdHlwZSB1aW50MzI8PiIsCisgICAgICAgICAgICAibmF0aXZlIHR5
cGVkZWYgdWludDMyPD4iLAogICAgICAgICAgICAgdHlwZSA9PiB7CiAgICAgICAgICAgICAgICAg
dGhpcy51aW50MzIgPSB0eXBlOworICAgICAgICAgICAgICAgIHR5cGUuaXNQcmltaXRpdmUgPSB0
cnVlOwogICAgICAgICAgICAgICAgIHR5cGUuaXNJbnQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IHR5cGUuaXNOdW1iZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgIHR5cGUuaXNTaWduZWQgPSBm
YWxzZTsKQEAgLTk3LDkgKzk1LDEwIEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAg
fSk7CiAKICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgUHJpbWl0
aXZlIHR5cGUgZmxvYXQ8PiIsCisgICAgICAgICAgICAibmF0aXZlIHR5cGVkZWYgZmxvYXQ8PiIs
CiAgICAgICAgICAgICB0eXBlID0+IHsKICAgICAgICAgICAgICAgICB0aGlzLmZsb2F0ID0gdHlw
ZTsKKyAgICAgICAgICAgICAgICB0eXBlLmlzUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICB0eXBlLnNpemUgPSAxOwogICAgICAgICAgICAgICAgIHR5cGUuaXNGbG9hdGluZyA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgdHlwZS5pc051bWJlciA9IHRydWU7CkBAIC0xMTIsOSArMTEx
LDEwIEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgdGhp
cy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgUHJpbWl0aXZlIHR5cGUgZG91YmxlPD4i
LAorICAgICAgICAgICAgIm5hdGl2ZSB0eXBlZGVmIGRvdWJsZTw+IiwKICAgICAgICAgICAgIHR5
cGUgPT4gewogICAgICAgICAgICAgICAgIHRoaXMuZG91YmxlID0gdHlwZTsKKyAgICAgICAgICAg
ICAgICB0eXBlLmlzUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB0eXBlLnNpemUg
PSAxOwogICAgICAgICAgICAgICAgIHR5cGUuaXNGbG9hdGluZyA9IHRydWU7CiAgICAgICAgICAg
ICAgICAgdHlwZS5pc051bWJlciA9IHRydWU7CkBAIC0xMjcsOSArMTI3LDEwIEBAIGNsYXNzIElu
dHJpbnNpY3MgewogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAg
ICAgICAgICAgICJuYXRpdmUgUHJpbWl0aXZlIHR5cGUgYm9vbDw+IiwKKyAgICAgICAgICAgICJu
YXRpdmUgdHlwZWRlZiBib29sPD4iLAogICAgICAgICAgICAgdHlwZSA9PiB7CiAgICAgICAgICAg
ICAgICAgdGhpcy5ib29sID0gdHlwZTsKKyAgICAgICAgICAgICAgICB0eXBlLmlzUHJpbWl0aXZl
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB0eXBlLnNpemUgPSAxOwogICAgICAgICAgICAgICAg
IHR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAoYnVmZmVyLCBvZmZzZXQpID0+IGJ1ZmZlci5z
ZXQob2Zmc2V0LCBmYWxzZSk7CiAgICAgICAgICAgICB9KTsKQEAgLTUwMSw3ICs1MDIsNyBAQCBj
bGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgCiAgICAgICAgIGZvciAobGV0IGFkZHJlc3NTcGFj
ZSBvZiBhZGRyZXNzU3BhY2VzKSB7CiAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAg
ICAgICAgICAgIGBuYXRpdmUgVF4gJHthZGRyZXNzU3BhY2V9IG9wZXJhdG9yJltdPFQke3Byb3Rv
Y29sU3VmZml4KGFkZHJlc3NTcGFjZSl9PihUW10gJHthZGRyZXNzU3BhY2V9LHVpbnQpYCwKKyAg
ICAgICAgICAgICAgICBgbmF0aXZlIFReICR7YWRkcmVzc1NwYWNlfSBvcGVyYXRvciZbXTxUPihU
W10gJHthZGRyZXNzU3BhY2V9LHVpbnQpYCwKICAgICAgICAgICAgICAgICBmdW5jID0+IHsKICAg
ICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbcmVmLCBpbmRleF0sIG5v
ZGUpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlZiA9IHJlZi5sb2FkVmFsdWUoKTsK
QEAgLTUxNSw3ICs1MTYsNyBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICAgICB9
KTsKIAogICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICAgICBgbmF0aXZl
IHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQke3Byb3RvY29sU3VmZml4KGFkZHJlc3NTcGFjZSl9PihU
W10gJHthZGRyZXNzU3BhY2V9KWAsCisgICAgICAgICAgICAgICAgYG5hdGl2ZSB1aW50IG9wZXJh
dG9yLmxlbmd0aDxUPihUW10gJHthZGRyZXNzU3BhY2V9KWAsCiAgICAgICAgICAgICAgICAgZnVu
YyA9PiB7CiAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW3JlZl0s
IG5vZGUpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlZiA9IHJlZi5sb2FkVmFsdWUo
KTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVja2VyLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVja2VyLmpz
CShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVj
a2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgTGF0ZUNo
ZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgeworICAgICAg
ICBzdXBlcigpOworICAgIH0KKworICAgIHZpc2l0UmVmZXJlbmNlVHlwZShub2RlKQorICAgIHsK
KyAgICAgICAgaWYgKG5vZGUuYWRkcmVzc1NwYWNlID09ICJ0aHJlYWQiKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKCFub2RlLmVsZW1lbnRUeXBlLmlzUHJpbWl0
aXZlKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2lu
U3RyaW5nLCAiSWxsZWdhbCBwb2ludGVyIHRvIG5vbi1wcmltaXRpdmUgdHlwZTogIiArIG5vZGUu
ZWxlbWVudFR5cGUpOworICAgIH0KKyAgICAKKyAgICBfY2hlY2tTaGFkZXJUeXBlKG5vZGUpCisg
ICAgeworICAgICAgICBsZXQgYXNzZXJ0UHJpbWl0aXZlID0gdHlwZSA9PiB7CisgICAgICAgICAg
ICBpZiAoIXR5cGUuaXNQcmltaXRpdmUpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBl
RXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiU2hhZGVyIHNpZ25hdHVyZSBjYW5ub3Qg
aW5jbHVkZSBub24tcHJpbWl0aXZlIHR5cGU6ICIgKyB0eXBlKTsKKyAgICAgICAgfQorICAgICAg
ICBzd2l0Y2ggKG5vZGUuc2hhZGVyVHlwZSkgeworICAgICAgICBjYXNlICJ2ZXJ0ZXgiOgorICAg
ICAgICAgICAgaWYgKCEobm9kZS5yZXR1cm5UeXBlLnR5cGUgaW5zdGFuY2VvZiBTdHJ1Y3RUeXBl
KSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJWZXJ0ZXggc2hhZGVyICIgKyBub2RlLm5hbWUgKyAiIG11c3QgcmV0dXJuIGEg
c3RydWN0LiIpOworICAgICAgICAgICAgYXNzZXJ0UHJpbWl0aXZlKG5vZGUucmV0dXJuVHlwZSk7
CisgICAgICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2Ygbm9kZS5wYXJhbWV0ZXJzKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci50eXBlLnR5cGUgaW5zdGFuY2VvZiBTdHJ1Y3RU
eXBlKQorICAgICAgICAgICAgICAgICAgICBhc3NlcnRQcmltaXRpdmUocGFyYW1ldGVyLnR5cGUp
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEocGFyYW1ldGVyLnR5cGUudHlwZSBpbnN0YW5j
ZW9mIEFycmF5UmVmVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVy
cm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgbm9kZS5uYW1lICsgIiBhY2NlcHRzIGEgcGFy
YW1ldGVyICIgKyBwYXJhbWV0ZXIubmFtZSArICIgd2hpY2ggaXNuJ3QgYSBzdHJ1Y3QgYW5kIGlz
bid0IGFuIEFycmF5UmVmLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgImZyYWdtZW50IjoKKyAgICAgICAgICAgIGlmICghKG5vZGUucmV0dXJuVHlw
ZS50eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRnJhZ21lbnQgc2hhZGVyICIg
KyBub2RlLm5hbWUgKyAiIG11c3QgcmV0dXJuIGEgc3RydWN0LiIpOworICAgICAgICAgICAgYXNz
ZXJ0UHJpbWl0aXZlKG5vZGUucmV0dXJuVHlwZSk7CisgICAgICAgICAgICBmb3IgKGxldCBwYXJh
bWV0ZXIgb2Ygbm9kZS5wYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRl
ci5uYW1lID09ICJzdGFnZUluIikgeworICAgICAgICAgICAgICAgICAgICBpZiAoIShwYXJhbWV0
ZXIudHlwZS50eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCisgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJGcmFn
bWVudCBlbnRyeSBwb2ludHMnIHN0YWdlSW4gcGFyYW1ldGVyIChvZiAiICsgbm9kZS5uYW1lICsg
IikgbXVzdCBiZSBhIHN0cnVjdCB0eXBlLiIpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnRQ
cmltaXRpdmUocGFyYW1ldGVyLnR5cGUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghKHBhcmFtZXRlci50eXBlLnR5cGUgaW5zdGFuY2VvZiBBcnJh
eVJlZlR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Io
bm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRnJhZ21lbnQgZW50cnkgcG9pbnQncyAiICsgcGFy
YW1ldGVyLm5hbWUgKyAiIHBhcmFtZXRlciBpcyBub3QgYW4gYXJyYXkgcmVmZXJlbmNlLiIpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZpc2l0RnVuY0RlZihub2RlKQorICAgIHsKKyAgICAg
ICAgaWYgKG5vZGUuc2hhZGVyVHlwZSkKKyAgICAgICAgICAgIHRoaXMuX2NoZWNrU2hhZGVyVHlw
ZShub2RlKTsKKyAgICAgICAgc3VwZXIudmlzaXRGdW5jRGVmKG5vZGUpOworICAgIH0KK30KKwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXJUb2tlbi5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhlclRva2VuLmpzCShyZXZp
c2lvbiAyMjIzMjgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhlclRva2Vu
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMSArNTgsNiBAQCBjbGFzcyBMZXhlclRva2VuIHsK
ICAgICAgICAgcmV0dXJuIHRoaXMubGV4ZXIub3JpZ2luS2luZDsKICAgICB9CiAgICAgCi0gICAg
Z2V0IGlzSW50ZXJuYWwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAg
ICAKICAgICBnZXQgaW5kZXgoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2luZGV4OwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlVHlwZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVUeXBlLmpzCShyZXZp
c2lvbiAyMjIzMjgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVUeXBl
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwyMSArMjUsMjIgQEAKICJ1c2Ugc3RyaWN0IjsKIAog
Y2xhc3MgTmF0aXZlVHlwZSBleHRlbmRzIFR5cGUgewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwg
bmFtZSwgaXNQcmltaXRpdmUsIHR5cGVQYXJhbWV0ZXJzKQorICAgIGNvbnN0cnVjdG9yKG9yaWdp
biwgbmFtZSwgdHlwZVBhcmFtZXRlcnMpCiAgICAgeworICAgICAgICBpZiAoISh0eXBlUGFyYW1l
dGVycyBpbnN0YW5jZW9mIEFycmF5KSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigidHlw
ZSBwYXJhbWV0ZXJzIG5vdCBhcnJheTogIiArIHR5cGVQYXJhbWV0ZXJzKTsKICAgICAgICAgc3Vw
ZXIoKTsKICAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOwogICAgICAgICB0aGlzLl9uYW1l
ID0gbmFtZTsKLSAgICAgICAgdGhpcy5faXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTsKICAgICAg
ICAgdGhpcy5fdHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVyczsKICAgICAgICAgdGhpcy5f
aXNOdW1iZXIgPSBmYWxzZTsKICAgICAgICAgdGhpcy5faXNJbnQgPSBmYWxzZTsKICAgICAgICAg
dGhpcy5faXNGbG9hdGluZyA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc1ByaW1pdGl2ZSA9IGZh
bHNlOwogICAgIH0KICAgICAKICAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2lu
OyB9CiAgICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9Ci0gICAgZ2V0IGlzUHJp
bWl0aXZlKCkgeyByZXR1cm4gdGhpcy5faXNQcmltaXRpdmU7IH0KICAgICBnZXQgdHlwZVBhcmFt
ZXRlcnMoKSB7IHJldHVybiB0aGlzLl90eXBlUGFyYW1ldGVyczsgfQogICAgIGdldCBpc05hdGl2
ZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICAKQEAgLTUwLDYgKzUxLDggQEAgY2xhc3MgTmF0aXZl
VHlwZSBleHRlbmRzIFR5cGUgewogICAgIHNldCBpc0ludCh2YWx1ZSkgeyB0aGlzLl9pc0ludCA9
IHZhbHVlOyB9CiAgICAgZ2V0IGlzRmxvYXRpbmcoKSB7IHJldHVybiB0aGlzLl9pc0Zsb2F0aW5n
OyB9CiAgICAgc2V0IGlzRmxvYXRpbmcodmFsdWUpIHsgdGhpcy5faXNGbG9hdGluZyA9IHZhbHVl
OyB9CisgICAgZ2V0IGlzUHJpbWl0aXZlKCkgeyByZXR1cm4gdGhpcy5faXNQcmltaXRpdmU7IH0K
KyAgICBzZXQgaXNQcmltaXRpdmUodmFsdWUpIHsgdGhpcy5faXNQcmltaXRpdmUgPSB2YWx1ZTsg
fQogICAgIAogICAgIGluc3RhbnRpYXRlKHR5cGVBcmd1bWVudHMpCiAgICAgewpAQCAtNjIsNyAr
NjUsNyBAQCBjbGFzcyBOYXRpdmVUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgCiAgICAgdG9TdHJp
bmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJuYXRpdmUgIiArICh0aGlzLmlzUHJpbWl0aXZl
ID8gIlByaW1pdGl2ZSAiIDogIiIpICsgInR5cGUgIiArIHRoaXMubmFtZSArICI8IiArIHRoaXMu
dHlwZVBhcmFtZXRlcnMgKyAiPiI7CisgICAgICAgIHJldHVybiAibmF0aXZlIHR5cGVkZWYgIiAr
IHRoaXMubmFtZSArICI8IiArIHRoaXMudHlwZVBhcmFtZXRlcnMgKyAiPiI7CiAgICAgfQogfQog
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwkocmV2aXNpb24gMjIy
MzI4KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTkyMywxOCArOTIzLDExIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdp
biwgb3JpZ2luS2kKICAgICBmdW5jdGlvbiBwYXJzZU5hdGl2ZSgpCiAgICAgewogICAgICAgICBs
ZXQgb3JpZ2luID0gY29uc3VtZSgibmF0aXZlIik7Ci0gICAgICAgIGxldCBpc1R5cGUgPSBsZXhl
ci5iYWNrdHJhY2tpbmdTY29wZSgoKSA9PiB7Ci0gICAgICAgICAgICBpZiAodHJ5Q29uc3VtZSgi
dHlwZWRlZiIpKQotICAgICAgICAgICAgICAgIHJldHVybiAibm9ybWFsIjsKLSAgICAgICAgICAg
IGNvbnN1bWUoIlByaW1pdGl2ZSIpOwotICAgICAgICAgICAgY29uc3VtZSgidHlwZWRlZiIpOwot
ICAgICAgICAgICAgcmV0dXJuICJwcmltaXRpdmUiOwotICAgICAgICB9KTsKLSAgICAgICAgaWYg
KGlzVHlwZSkgeworICAgICAgICBpZiAodHJ5Q29uc3VtZSgidHlwZWRlZiIpKSB7CiAgICAgICAg
ICAgICBsZXQgbmFtZSA9IGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIik7CiAgICAgICAgICAgICBs
ZXQgcGFyYW1ldGVycyA9IHBhcnNlVHlwZVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAgIGNvbnN1
bWUoIjsiKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlVHlwZShvcmlnaW4sIG5hbWUu
dGV4dCwgaXNUeXBlID09ICJwcmltaXRpdmUiLCBwYXJhbWV0ZXJzKTsKKyAgICAgICAgICAgIHJl
dHVybiBuZXcgTmF0aXZlVHlwZShvcmlnaW4sIG5hbWUudGV4dCwgcGFyYW1ldGVycyk7CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIHBhcnNlTmF0aXZlRnVuYygpOwogICAgIH0KSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW1XaXRoVW5uZWNlc3NhcnlUaGluZ3NS
ZW1vdmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1By
b2dyYW1XaXRoVW5uZWNlc3NhcnlUaGluZ3NSZW1vdmVkLmpzCShyZXZpc2lvbiAyMjIzMjgpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9ncmFtV2l0aFVubmVjZXNzYXJ5VGhp
bmdzUmVtb3ZlZC5qcwkod29ya2luZyBjb3B5KQpAQCAtNTEsMTAgKzUxLDggQEAgZnVuY3Rpb24g
cHJvZ3JhbVdpdGhVbm5lY2Vzc2FyeVRoaW5nc1JlbQogICAgIAogICAgIGxldCByZXN1bHQgPSBu
ZXcgUHJvZ3JhbSgpOwogICAgIGZvciAobGV0IG5hbWUgb2YgbmFtZUZpbmRlci5zZXQpIHsKLSAg
ICAgICAgZm9yIChsZXQgdGhpbmcgb2YgcHJvZ3JhbS5nbG9iYWxOYW1lQ29udGV4dC51bmRlcmx5
aW5nVGhpbmdzKEFueXRoaW5nLCBuYW1lKSkgewotICAgICAgICAgICAgaWYgKCF0aGluZy5vcmln
aW4uaXNJbnRlcm5hbCkKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHRoaW5nKTsKLSAgICAg
ICAgfQorICAgICAgICBmb3IgKGxldCB0aGluZyBvZiBwcm9ncmFtLmdsb2JhbE5hbWVDb250ZXh0
LnVuZGVybHlpbmdUaGluZ3MoQW55dGhpbmcsIG5hbWUpKQorICAgICAgICAgICAgcmVzdWx0LmFk
ZCh0aGluZyk7CiAgICAgfQogICAgIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvdG9jb2xEZWNsLmpzCShyZXZpc2lvbiAyMjIz
MjgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wuanMJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAgY2xhc3MgUHJvdG9jb2xEZWNsIGV4dGVuZHMg
UHJvdG9jb2wgewogICAgICAgICB0aGlzLl9zaWduYXR1cmVzID0gW107CiAgICAgICAgIHRoaXMu
X3NpZ25hdHVyZU1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgdGhpcy5fdHlwZVZhcmlhYmxlID0g
bmV3IFR5cGVWYXJpYWJsZShvcmlnaW4sIG5hbWUsIG51bGwpOwotICAgICAgICB0aGlzLmlzUHJp
bWl0aXZlID0gZmFsc2U7CiAgICAgfQogICAgIAogICAgIGFkZEV4dGVuZHMocHJvdG9jb2wpCklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWZlcmVuY2VUeXBlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlZmVyZW5jZVR5cGUuanMJ
KHJldmlzaW9uIDIyMjMyOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlZmVy
ZW5jZVR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgY2xhc3MgUmVmZXJl
bmNlVHlwZSBleHRlbmRzIFR5cGUgewogICAgIGdldCBvcmlnaW4oKSB7IHJldHVybiB0aGlzLl9v
cmlnaW47IH0KICAgICBnZXQgYWRkcmVzc1NwYWNlKCkgeyByZXR1cm4gdGhpcy5fYWRkcmVzc1Nw
YWNlOyB9CiAgICAgZ2V0IGVsZW1lbnRUeXBlKCkgeyByZXR1cm4gdGhpcy5fZWxlbWVudFR5cGU7
IH0KLSAgICBnZXQgaXNQcmltaXRpdmUoKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgZ2V0IHNp
emUoKSB7IHJldHVybiAxOyB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1N0YW5kYXJkTGlicmFyeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJKHJldmlzaW9uIDIyMjMyOCkKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwkod29ya2luZyBjb3B5KQpA
QCAtNzEsMjAgKzcxLDE5IEBAIGZ1bmN0aW9uIF9nZW5lcmF0ZVN3aXp6bGUobWF4RGVwdGgsIG1h
eEkKIC8vIE5PVEU6IFRoZSBuZXh0IGxpbmUgaXMgbGluZSA3MiwgYW5kIHdlIHJlbHkgb24gdGhp
cyBpbiBQcmVwYXJlLmpzLgogY29uc3Qgc3RhbmRhcmRMaWJyYXJ5ID0gYAogLy8gVGhpcyBpcyB0
aGUgV1NMIHN0YW5kYXJkIGxpYnJhcnkuIEltcGxlbWVudGF0aW9ucyBvZiBhbGwgb2YgdGhlc2Ug
dGhpbmdzIGFyZSBpbgotLy8gSW50cmluc2ljcy5qcy4gVGhlIG9ubHkgdGhpbmcgdGhhdCBnZXRz
IGRlZmluZWQgYmVmb3JlIHdlIGdldCBoZXJlIGlzIHRoZSBQcmltaXRpdmUKLS8vIHByb3RvY29s
LgorLy8gSW50cmluc2ljcy5qcy4KIAogLy8gTmVlZCB0byBib290c3RyYXAgdm9pZCBmaXJzdC4K
LW5hdGl2ZSBQcmltaXRpdmUgdHlwZWRlZiB2b2lkOworbmF0aXZlIHR5cGVkZWYgdm9pZDsKIAot
bmF0aXZlIFByaW1pdGl2ZSB0eXBlZGVmIGludDMyOwotbmF0aXZlIFByaW1pdGl2ZSB0eXBlZGVm
IHVpbnQzMjsKLW5hdGl2ZSBQcmltaXRpdmUgdHlwZWRlZiBib29sOworbmF0aXZlIHR5cGVkZWYg
aW50MzI7CituYXRpdmUgdHlwZWRlZiB1aW50MzI7CituYXRpdmUgdHlwZWRlZiBib29sOwogdHlw
ZWRlZiBpbnQgPSBpbnQzMjsKIHR5cGVkZWYgdWludCA9IHVpbnQzMjsKIAotbmF0aXZlIFByaW1p
dGl2ZSB0eXBlZGVmIGZsb2F0OwotbmF0aXZlIFByaW1pdGl2ZSB0eXBlZGVmIGRvdWJsZTsKK25h
dGl2ZSB0eXBlZGVmIGZsb2F0OworbmF0aXZlIHR5cGVkZWYgZG91YmxlOwogCiBuYXRpdmUgb3Bl
cmF0b3IgaW50MzIodWludDMyKTsKIG5hdGl2ZSBvcGVyYXRvciB1aW50MzIoaW50MzIpOwpAQCAt
Mzg0LDE0ICszODMsMTQgQEAgdGhyZWFkIFReIG9wZXJhdG9yJltdPFQ+KHRocmVhZCB2ZWM0PFQ+
XgogfQogCiBuYXRpdmUgdGhyZWFkIFReIG9wZXJhdG9yJltdPFQ+KHRocmVhZCBUW10sIHVpbnQp
OwotbmF0aXZlIHRocmVhZGdyb3VwIFReIG9wZXJhdG9yJltdPFQ6UHJpbWl0aXZlPih0aHJlYWRn
cm91cCBUW10sIHVpbnQpOwotbmF0aXZlIGRldmljZSBUXiBvcGVyYXRvciZbXTxUOlByaW1pdGl2
ZT4oZGV2aWNlIFRbXSwgdWludCk7Ci1uYXRpdmUgY29uc3RhbnQgVF4gb3BlcmF0b3ImW108VDpQ
cmltaXRpdmU+KGNvbnN0YW50IFRbXSwgdWludCk7CituYXRpdmUgdGhyZWFkZ3JvdXAgVF4gb3Bl
cmF0b3ImW108VD4odGhyZWFkZ3JvdXAgVFtdLCB1aW50KTsKK25hdGl2ZSBkZXZpY2UgVF4gb3Bl
cmF0b3ImW108VD4oZGV2aWNlIFRbXSwgdWludCk7CituYXRpdmUgY29uc3RhbnQgVF4gb3BlcmF0
b3ImW108VD4oY29uc3RhbnQgVFtdLCB1aW50KTsKIAogbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVu
Z3RoPFQ+KHRocmVhZCBUW10pOwotbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ6UHJpbWl0
aXZlPih0aHJlYWRncm91cCBUW10pOwotbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ6UHJp
bWl0aXZlPihkZXZpY2UgVFtdKTsKLW5hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOlByaW1p
dGl2ZT4oY29uc3RhbnQgVFtdKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUPih0aHJl
YWRncm91cCBUW10pOworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ+KGRldmljZSBUW10p
OworbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ+KGNvbnN0YW50IFRbXSk7CiAKIHVpbnQg
b3BlcmF0b3IubGVuZ3RoPFQsIHVpbnQgbGVuZ3RoPihUW2xlbmd0aF0pCiB7CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGF0ZW1lbnRDbG9uZXIuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhdGVtZW50Q2xvbmVyLmpzCShyZXZp
c2lvbiAyMjIzMjgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGF0ZW1lbnRD
bG9uZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTUzLDggKzUzLDcgQEAgY2xhc3MgU3RhdGVtZW50
Q2xvbmVyIGV4dGVuZHMgUmV3cml0ZXIgewogICAgIHZpc2l0TmF0aXZlVHlwZShub2RlKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG5ldyBOYXRpdmVUeXBlKAotICAgICAgICAgICAgbm9kZS5vcmln
aW4sIG5vZGUubmFtZSwgbm9kZS5pc1ByaW1pdGl2ZSwKLSAgICAgICAgICAgIG5vZGUudHlwZVBh
cmFtZXRlcnMubWFwKHR5cGVQYXJhbWV0ZXIgPT4gdHlwZVBhcmFtZXRlci52aXNpdCh0aGlzKSkp
OworICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUubmFtZSwgbm9kZS50eXBlUGFyYW1ldGVy
cy5tYXAodHlwZVBhcmFtZXRlciA9PiB0eXBlUGFyYW1ldGVyLnZpc2l0KHRoaXMpKSk7CiAgICAg
fQogICAgIAogICAgIHZpc2l0VHlwZURlZihub2RlKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpz
CShyZXZpc2lvbiAyMjIzMjgpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50
aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTEgKzE1NCw5
IEBAIGZ1bmN0aW9uIHN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3IKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgc2V0dXBBbmRlcigidGhyZWFkIik7Ci0gICAg
ICAgICAgICBpZiAodHlwZS5pbnN0YW50aWF0ZSgpLmlzUHJpbWl0aXZlKSB7Ci0gICAgICAgICAg
ICAgICAgc2V0dXBBbmRlcigidGhyZWFkZ3JvdXAiKTsKLSAgICAgICAgICAgICAgICBzZXR1cEFu
ZGVyKCJkZXZpY2UiKTsKLSAgICAgICAgICAgICAgICBzZXR1cEFuZGVyKCJjb25zdGFudCIpOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgc2V0dXBBbmRlcigidGhyZWFkZ3JvdXAiKTsKKyAg
ICAgICAgICAgIHNldHVwQW5kZXIoImRldmljZSIpOworICAgICAgICAgICAgc2V0dXBBbmRlcigi
Y29uc3RhbnQiKTsKICAgICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Rlc3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVGVzdC5qcwkocmV2aXNpb24gMjIyMzI4KQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAtOTI2LDcgKzkyNiw3IEBAIGZ1
bmN0aW9uIFRFU1RfYmFkSW50TGl0ZXJhbEZvckRvdWJsZSgpCiBmdW5jdGlvbiBURVNUX3Bhc3NO
dWxsQW5kTm90TnVsbCgpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBU
IGJhcjxUOlByaW1pdGl2ZT4oZGV2aWNlIFReIHAsIGRldmljZSBUXikKKyAgICAgICAgVCBiYXI8
VD4oZGV2aWNlIFReIHAsIGRldmljZSBUXikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJu
IF5wOwogICAgICAgICB9CkBAIC05NDMsNyArOTQzLDcgQEAgZnVuY3Rpb24gVEVTVF9wYXNzTnVs
bEFuZE5vdE51bGwoKQogZnVuY3Rpb24gVEVTVF9wYXNzTnVsbEFuZE5vdE51bGxGdWxsUG9seSgp
CiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBUIGJhcjxUOlByaW1pdGl2
ZT4oVCBwLCBUKQorICAgICAgICBUIGJhcjxUPihUIHAsIFQpCiAgICAgICAgIHsKICAgICAgICAg
ICAgIHJldHVybiBwOwogICAgICAgICB9CkBAIC05NjAsNyArOTYwLDcgQEAgZnVuY3Rpb24gVEVT
VF9wYXNzTnVsbEFuZE5vdE51bGxGdWxsUG9seQogZnVuY3Rpb24gVEVTVF9wYXNzTnVsbEFuZE5v
dE51bGxGdWxsUG9seVJldmVyc2UoKQogewogICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKLSAg
ICAgICAgVCBiYXI8VDpQcmltaXRpdmU+KFQsIFQgcCkKKyAgICAgICAgVCBiYXI8VD4oVCwgVCBw
KQogICAgICAgICB7CiAgICAgICAgICAgICByZXR1cm4gcDsKICAgICAgICAgfQpAQCAtMTAxOCw3
ICsxMDE4LDcgQEAgZnVuY3Rpb24gVEVTVF9udWxsVHlwZVZhcmlhYmxlVW5pZnkoKQogICAgICAg
ICAgICAgbGV0IHR5cGVzID0ge307CiAgICAgICAgICAgICB0eXBlcy5udWxsVHlwZSA9IG5ldyBO
dWxsVHlwZShudWxsKTsKICAgICAgICAgICAgIHR5cGVzLnZhcmlhYmxlVHlwZSA9IG5ldyBUeXBl
VmFyaWFibGUobnVsbCwgIlQiLCBudWxsKTsKLSAgICAgICAgICAgIHR5cGVzLnB0clR5cGUgPSBu
ZXcgUHRyVHlwZShudWxsLCAiY29uc3RhbnQiLCBuZXcgTmF0aXZlVHlwZShudWxsLCAiZm9vX3Qi
LCB0cnVlLCBbXSkpOworICAgICAgICAgICAgdHlwZXMucHRyVHlwZSA9IG5ldyBQdHJUeXBlKG51
bGwsICJjb25zdGFudCIsIG5ldyBOYXRpdmVUeXBlKG51bGwsICJmb29fdCIsIFtdKSk7CiAgICAg
ICAgICAgICBsZXQgdW5pZmljYXRpb25Db250ZXh0ID0gbmV3IFVuaWZpY2F0aW9uQ29udGV4dChb
dHlwZXMudmFyaWFibGVUeXBlXSk7CiAgICAgICAgICAgICBmb3IgKGxldCBbbGVmdE5hbWUsIHJp
Z2h0TmFtZV0gb2Ygb3JkZXIpIHsKICAgICAgICAgICAgICAgICBsZXQgbGVmdCA9IHR5cGVzW2xl
ZnROYW1lXTsKQEAgLTE5OTAsMjggKzE5OTAsMjkgQEAgZnVuY3Rpb24gVEVTVF9jaGFpblN0cnVj
dCgpCiAgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJiYXIiLCBb
XSwgW21ha2VJbnQocHJvZ3JhbSwgNDY1NyldKSwgNDY1Nyk7CiB9CiAKLWZ1bmN0aW9uIFRFU1Rf
Y2hhaW5TdHJ1Y3RJbnZhbGlkKCkKK2Z1bmN0aW9uIFRFU1RfY2hhaW5TdHJ1Y3ROZXdseVZhbGlk
KCkKIHsKLSAgICBjaGVja0ZhaWwoCi0gICAgICAgICgpID0+IGRvUHJlcChgCi0gICAgICAgICAg
ICBzdHJ1Y3QgRm9vPFQ+IHsKLSAgICAgICAgICAgICAgICBUIGY7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBzdHJ1Y3QgQmFyPFQ+IHsKLSAgICAgICAgICAgICAgICBGb288ZGV2aWNlIFRe
PiBmOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW50IGZvbyh0aHJlYWQgQmFyPGludD5e
IHgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIF54LT5mLmY7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpbnQgYmFyKGRldmljZSBpbnReIGEpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgQmFyPGludD4geDsKLSAgICAgICAgICAgICAgICB4LmYuZiA9
IGE7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZvbygmeCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIGApLAotICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworICAgIGxl
dCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgc3RydWN0IEZvbzxUPiB7CisgICAgICAgICAg
ICBUIGY7CisgICAgICAgIH0KKyAgICAgICAgc3RydWN0IEJhcjxUPiB7CisgICAgICAgICAgICBG
b288ZGV2aWNlIFRePiBmOworICAgICAgICB9CisgICAgICAgIGludCBmb28odGhyZWFkIEJhcjxp
bnQ+XiB4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gXngtPmYuZjsKKyAgICAgICAg
fQorICAgICAgICBpbnQgYmFyKGRldmljZSBpbnReIGEpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEJhcjxpbnQ+IHg7CisgICAgICAgICAgICB4LmYuZiA9IGE7CisgICAgICAgICAgICByZXR1cm4g
Zm9vKCZ4KTsKKyAgICAgICAgfQorICAgIGApOworICAgIGxldCBidWZmZXIgPSBuZXcgRUJ1ZmZl
cigxKTsKKyAgICBidWZmZXIuc2V0KDAsIDc4NDUzKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFtdLCBbVHlwZWRWYWx1ZS5ib3gobmV3IFB0clR5
cGUobnVsbCwgImRldmljZSIsIHByb2dyYW0uaW50cmluc2ljcy5pbnQzMiksIG5ldyBFUHRyKGJ1
ZmZlciwgMCkpXSksIDc4NDUzKTsKIH0KIAogZnVuY3Rpb24gVEVTVF9jaGFpblN0cnVjdERldmlj
ZSgpCkBAIC0yMDIwLDcgKzIwMjEsNyBAQCBmdW5jdGlvbiBURVNUX2NoYWluU3RydWN0RGV2aWNl
KCkKICAgICAgICAgc3RydWN0IEZvbzxUPiB7CiAgICAgICAgICAgICBUIGY7CiAgICAgICAgIH0K
LSAgICAgICAgc3RydWN0IEJhcjxUOlByaW1pdGl2ZT4geworICAgICAgICBzdHJ1Y3QgQmFyPFQ+
IHsKICAgICAgICAgICAgIEZvbzxkZXZpY2UgVF4+IGY7CiAgICAgICAgIH0KICAgICAgICAgaW50
IGZvbyh0aHJlYWQgQmFyPGludD5eIHgpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9UeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1R5cGUuanMJKHJldmlzaW9uIDIyMjMyOCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1R5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAgY2xhc3MgVHlwZSBl
eHRlbmRzIE5vZGUgewogICAgIGdldCBpc051bWJlcigpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
Z2V0IGlzSW50KCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNGbG9hdGluZygpIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgZ2V0IGlzUHJpbWl0aXZlKCkgeyByZXR1cm4gZmFsc2U7IH0KICAg
ICAKICAgICBpbmhlcml0cyhwcm90b2NvbCkKICAgICB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321450</attachid>
            <date>2017-09-21 10:53:54 -0700</date>
            <delta_ts>2017-09-21 14:28:55 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31599</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjMzMSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDgyIEBACisyMDE3LTA5LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIHNob3VsZCBoYXZlIHNvbWUgcG9zdC1pbnN0YW50aWF0aW9uIHR5cGUgY2hl
Y2tpbmcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzMwMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAg
ICAgICAgVGhpcyBwYXRjaCByZW1vdmVzIHRoZSBQcmltaXRpdmUgcHJvdG9jb2whIFlheSEKKyAg
ICAgICAgCisgICAgICAgIFRoZSBQcmltaXRpdmUgcHJvdG9jb2wgd2FzIGFuIGF0dGVtcHQgdG8g
aGFuZGxlIHRoZSBmYWN0IHRoYXQgTWV0YWwgd291bGRuJ3QgYWxsb3cgdXMgdG8gcG9pbnQgYQor
ICAgICAgICBub24tdGhyZWFkIHBvaW50ZXIgYXQgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaGF2ZSBw
b2ludGVycy4gVGhpcyB0eXBlIGNoZWNraW5nIHJ1bGUgaW50ZXJhY3RzIGJhZGx5IHdpdGgKKyAg
ICAgICAgZ2VuZXJpY3MuIEkgd2FzIGFibGUgdG8gZ2V0IGl0IHRvIG1vc3RseSB3b3JrIGJ5IG1h
a2luZyBQcmltaXRpdmUgaW50byBhIGR5bmFtaWMgcHJvdG9jb2wgLSBhIHR5cGUKKyAgICAgICAg
YmVsb25ncyB0byBpdCBpZiBpdCBoYXBwZW5zIHRvIGJlIGlzUHJpbWl0aXZlLgorICAgICAgICAK
KyAgICAgICAgQnV0IHRoYXQgd2FzIGEgbWlzdGFrZSwgc2luY2UgaXQgbWFrZXMgaXQgaGFyZCB0
byBjcmVhdGUgcG9pbnRlcnMgdGhhdCBhcmUgZ2VuZXJpYyBvdmVyIGFkZHJlc3Mgc3BhY2UuCisg
ICAgICAgIEFsc28sIGl0J3Mgbm90IGFuIGFwcHJvcHJpYXRlIHJ1bGUgZm9yIHRhcmdldGluZyBT
UElSLVYgbG9naWNhbCBtb2RlLiBUaGF0IHJ1bGUgd2lsbCBiZSBkaWZmZXJlbnQsIGFuZAorICAg
ICAgICBwb3NzaWJseSBtb3JlIGNvbXBsaWNhdGVkLgorICAgICAgICAKKyAgICAgICAgQWxsIG9m
IHRoZXNlIGtpbmRzIG9mIHJ1bGVzIGFyZSBlYXNpZXIgdG8gaW1wbGVtZW50IG9mIHdlIHJ1biB0
aGVtIGFmdGVyIGluc3RhbnRpYXRpb24sIHNpbmNlIHRoZW4gdGhleQorICAgICAgICBkb24ndCBn
ZXQgaW4gdGhlIHdheSBvZiBnZW5lcmljcy4gVGhhdCdzIHdoYXQgdGhpcyBwYXRjaCBkb2VzLgor
ICAgICAgICAKKyAgICAgICAgVGhpcyBtZWFucyB0aGF0IHdlIGdldCBhbGwgb2YgdGhlIHNhbWUg
dHlwZSBjaGVja2luZyBwb3dlciBhcyBiZWZvcmUsIGFuZCB3ZSBzdGlsbCBjYW4gY2F0Y2ggdGhl
IGVycm9ycworICAgICAgICB0aGF0IE1ldGFsIHJlcXVpcmVzIHVzIHRvIGNoZWNrIGZvci4gSXQn
cyBlYXNpZXIgdG8gZG8gdGhvc2UgY2hlY2tzIG5vdy4KKyAgICAgICAgCisgICAgICAgIEZpbmFs
bHksIHRoaXMgcmVtb3ZlcyB0aGUgc2hhZGVyIHR5cGUgY2hlY2tlcidzIGluY29tcGxldGUgcmVp
bXBsZW1lbnRhdGlvbiBvZiBpc1ByaW1pdGl2ZS4gVGhhdCBjYWxscworICAgICAgICBpc1ByaW1p
dGl2ZSBub3cuCisKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BZGRyZXNzU3Bh
Y2UuanM6CisgICAgICAgIChuZWVkc1ByaW1pdGl2ZVByb3RvY29sKTogRGVsZXRlZC4KKyAgICAg
ICAgKHByb3RvY29sU3VmZml4KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9BbGwuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2hlY2tl
ci5qczoKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLl9jaGVja1NoYWRlclR5cGUpOgorICAg
ICAgICAoQ2hlY2tlci5wcm90b3R5cGUuX2NoZWNrU2hhZGVyVHlwZS5Ob25OdW1lcmljU2VhcmNo
ZXIpOiBEZWxldGVkLgorICAgICAgICAoQ2hlY2tlci5wcm90b3R5cGUuX2NoZWNrU2hhZGVyVHlw
ZS5Ob25OdW1lcmljU2VhcmNoZXIucHJvdG90eXBlLnZpc2l0QXJyYXlSZWZUeXBlKTogRGVsZXRl
ZC4KKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLl9jaGVja1NoYWRlclR5cGUuTm9uTnVtZXJp
Y1NlYXJjaGVyLnByb3RvdHlwZS52aXNpdFB0clR5cGUpOiBEZWxldGVkLgorICAgICAgICAoQ2hl
Y2tlci5wcm90b3R5cGUudmlzaXRSZWZlcmVuY2VUeXBlKTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9yLmpzOgorICAgICAgICAoRnVu
Y0luc3RhbnRpYXRvci5wcm90b3R5cGUuZ2V0VW5pcXVlLkluc3RhbnRpYXRlLnByb3RvdHlwZS52
aXNpdEZ1bmNEZWYpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lubGluZS5q
czoKKyAgICAgICAgKF9pbmxpbmVGdW5jdGlvbik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvSW50cmluc2ljcy5qczoKKyAgICAgICAgKEludHJpbnNpY3MpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVja2VyLmpzOiBBZGRlZC4KKyAgICAgICAg
KExhdGVDaGVja2VyKToKKyAgICAgICAgKExhdGVDaGVja2VyLnByb3RvdHlwZS52aXNpdFJlZmVy
ZW5jZVR5cGUpOgorICAgICAgICAoTGF0ZUNoZWNrZXIucHJvdG90eXBlLl9jaGVja1NoYWRlclR5
cGUpOgorICAgICAgICAoTGF0ZUNoZWNrZXIucHJvdG90eXBlLnZpc2l0RnVuY0RlZik6CisgICAg
ICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXJUb2tlbi5qczoKKyAgICAgICAgKExl
eGVyVG9rZW4ucHJvdG90eXBlLmdldCBpc0ludGVybmFsKTogRGVsZXRlZC4KKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVUeXBlLmpzOgorICAgICAgICAoTmF0aXZlVHlw
ZSk6CisgICAgICAgIChOYXRpdmVUeXBlLnByb3RvdHlwZS5nZXQgbmFtZSk6CisgICAgICAgIChO
YXRpdmVUeXBlLnByb3RvdHlwZS5nZXQgaXNQcmltaXRpdmUpOgorICAgICAgICAoTmF0aXZlVHlw
ZS5wcm90b3R5cGUuc2V0IGlzUHJpbWl0aXZlKToKKyAgICAgICAgKE5hdGl2ZVR5cGUucHJvdG90
eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5q
czoKKyAgICAgICAgKHBhcnNlTmF0aXZlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9Qcm9ncmFtV2l0aFVubmVjZXNzYXJ5VGhpbmdzUmVtb3ZlZC5qczoKKyAgICAgICAgKHBy
b2dyYW1XaXRoVW5uZWNlc3NhcnlUaGluZ3NSZW1vdmVkKToKKyAgICAgICAgKiBXZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUmVmZXJlbmNlVHlwZS5qczoKKyAgICAgICAgKFJlZmVyZW5jZVR5cGUucHJvdG90
eXBlLmdldCBlbGVtZW50VHlwZSk6CisgICAgICAgIChSZWZlcmVuY2VUeXBlLnByb3RvdHlwZS5n
ZXQgaXNQcmltaXRpdmUpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1N0YW5kYXJkTGlicmFyeS5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TdGF0ZW1lbnRDbG9uZXIuanM6CisgICAgICAgIChTdGF0ZW1lbnRDbG9uZXIucHJvdG90eXBl
LnZpc2l0TmF0aXZlVHlwZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3lu
dGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qczoKKyAgICAgICAgKHN5bnRoZXNpemVTdHJ1Y3RBY2Nl
c3NvcnMpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAg
ICAgIChURVNUX3Bhc3NOdWxsQW5kTm90TnVsbEZ1bGxQb2x5KToKKyAgICAgICAgKFRFU1RfcGFz
c051bGxBbmROb3ROdWxsRnVsbFBvbHlSZXZlcnNlKToKKyAgICAgICAgKFRFU1RfbnVsbFR5cGVW
YXJpYWJsZVVuaWZ5KToKKyAgICAgICAgKFRFU1RfY2hhaW5TdHJ1Y3ROZXdseVZhbGlkKToKKyAg
ICAgICAgKFRFU1RfY2hhaW5TdHJ1Y3REZXZpY2UpOgorICAgICAgICAoVEVTVF9jaGFpblN0cnVj
dEludmFsaWQpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5
cGUuanM6CisgICAgICAgIChUeXBlLnByb3RvdHlwZS5nZXQgaXNQcmltaXRpdmUpOgorCiAyMDE3
LTA5LTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZp
ZXdlZCwgZml4IGEgYnVnIGluIHRoZSBpbnRlcmFjdGl2ZSBhcHAgdGhhdCB3YXMgaW50cm9kdWNl
ZCBieSBiYWQgbWVyZ2luZy4KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Fk
ZHJlc3NTcGFjZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9BZGRyZXNzU3BhY2UuanMJKHJldmlzaW9uIDIyMjMzMSkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0FkZHJlc3NTcGFjZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzksMTYgKzM5
LDYgQEAgZnVuY3Rpb24gaXNBZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQogICAgIH0KIH0KIAot
ZnVuY3Rpb24gbmVlZHNQcmltaXRpdmVQcm90b2NvbChhZGRyZXNzU3BhY2UpCi17Ci0gICAgcmV0
dXJuIGFkZHJlc3NTcGFjZSAhPSAidGhyZWFkIjsKLX0KLQotZnVuY3Rpb24gcHJvdG9jb2xTdWZm
aXgoYWRkcmVzc1NwYWNlKQotewotICAgIHJldHVybiBuZWVkc1ByaW1pdGl2ZVByb3RvY29sKGFk
ZHJlc3NTcGFjZSkgPyAiOlByaW1pdGl2ZSIgOiAiIjsKLX0KLQogZnVuY3Rpb24gdmFsaWRhdGVB
ZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQogewogICAgIGlmICghaXNBZGRyZXNzU3BhY2UoYWRk
cmVzc1NwYWNlKSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJldmlz
aW9uIDIyMjMzMSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkod29y
a2luZyBjb3B5KQpAQCAtMTAwLDYgKzEwMCw3IEBAIGxvYWQoIkluc3RhbnRpYXRlSW1tZWRpYXRl
cy5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbC5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbFR5cGUuanMi
KTsKIGxvYWQoIkludHJpbnNpY3MuanMiKTsKK2xvYWQoIkxhdGVDaGVja2VyLmpzIik7CiBsb2Fk
KCJMZXhlci5qcyIpOwogbG9hZCgiTGV4ZXJUb2tlbi5qcyIpOwogbG9hZCgiTGl0ZXJhbFR5cGVD
aGVja2VyLmpzIik7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2Vy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIu
anMJKHJldmlzaW9uIDIyMjMzMSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0No
ZWNrZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTYyLDYyICs2MiwyMCBAQCBjbGFzcyBDaGVja2Vy
IGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIGlmIChub2RlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0
aCAhPSAwKQogICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3Jp
Z2luU3RyaW5nLCAiRW50cnkgcG9pbnQgIiArIG5vZGUubmFtZSArICIgbXVzdCBub3QgaGF2ZSB0
eXBlIGFyZ3VtZW50cy4iKTsKICAgICAgICAgbGV0IHNoYWRlckZ1bmMgPSBub2RlOwotICAgICAg
ICBjbGFzcyBOb25OdW1lcmljU2VhcmNoZXIgZXh0ZW5kcyBWaXNpdG9yIHsKLSAgICAgICAgICAg
IGNvbnN0cnVjdG9yKG5hbWUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3VwZXIo
KTsKLSAgICAgICAgICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHZpc2l0QXJyYXlSZWZUeXBlKG5vZGUpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCBz
aGFkZXJGdW5jLm5hbWUgKyAiIG11c3QgdHJhbnNpdGl2ZWx5IG9ubHkgaGF2ZSBudW1lcmljIHR5
cGVzLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdmlzaXRQdHJUeXBlKG5vZGUpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5v
cmlnaW4ub3JpZ2luU3RyaW5nLCBzaGFkZXJGdW5jLm5hbWUgKyAiIG11c3QgdHJhbnNpdGl2ZWx5
IG9ubHkgaGF2ZSBudW1lcmljIHR5cGVzLiIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
dmlzaXRUeXBlUmVmKG5vZGUpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3VwZXIu
dmlzaXRUeXBlUmVmKG5vZGUpOwotICAgICAgICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlz
KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQogICAgICAgICBzd2l0Y2ggKG5vZGUuc2hhZGVy
VHlwZSkgewogICAgICAgICBjYXNlICJ2ZXJ0ZXgiOgogICAgICAgICAgICAgaWYgKHRoaXMuX3Zl
cnRleEVudHJ5UG9pbnRzLmhhcyhub2RlLm5hbWUpKQogICAgICAgICAgICAgICAgIHRocm93IG5l
dyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkR1cGxpY2F0ZSB2ZXJ0ZXgg
ZW50cnkgcG9pbnQgbmFtZSAiICsgbm9kZS5uYW1lKTsKICAgICAgICAgICAgIHRoaXMuX3ZlcnRl
eEVudHJ5UG9pbnRzLmFkZChub2RlLm5hbWUpOwotICAgICAgICAgICAgaWYgKCEobm9kZS5yZXR1
cm5UeXBlLnR5cGUgaW5zdGFuY2VvZiBTdHJ1Y3RUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJWZXJ0ZXggc2hhZGVy
ICIgKyBub2RlLm5hbWUgKyAiIG11c3QgcmV0dXJuIGEgc3RydWN0LiIpOwotICAgICAgICAgICAg
Zm9yIChsZXQgcGFyYW1ldGVyIG9mIG5vZGUucGFyYW1ldGVycykgewotICAgICAgICAgICAgICAg
IGlmIChwYXJhbWV0ZXIudHlwZS50eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkKLSAgICAgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyLnR5cGUudmlzaXQobmV3IE5vbk51bWVyaWNTZWFyY2hlcihu
b2RlLm5hbWUpKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICghKHBhcmFtZXRlci50eXBlLnR5
cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsIG5vZGUubmFtZSArICIgYWNj
ZXB0cyBhIHBhcmFtZXRlciAiICsgcGFyYW1ldGVyLm5hbWUgKyAiIHdoaWNoIGlzbid0IGEgc3Ry
dWN0IGFuZCBpc24ndCBhbiBBcnJheVJlZi4iKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IG5vZGUucmV0dXJuVHlwZS50eXBlLnZpc2l0KG5ldyBOb25OdW1lcmljU2VhcmNoZXIpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgImZyYWdtZW50IjoKICAgICAgICAgICAgIGlm
ICh0aGlzLl9mcmFnbWVudEVudHJ5UG9pbnRzLmhhcyhub2RlLm5hbWUpKQogICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkR1cGxp
Y2F0ZSBmcmFnbWVudCBlbnRyeSBwb2ludCBuYW1lICIgKyBub2RlLm5hbWUpOwogICAgICAgICAg
ICAgdGhpcy5fZnJhZ21lbnRFbnRyeVBvaW50cy5hZGQobm9kZS5uYW1lKTsKLSAgICAgICAgICAg
IGlmICghKG5vZGUucmV0dXJuVHlwZS50eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCi0gICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5n
LCAiRnJhZ21lbnQgc2hhZGVyICIgKyBub2RlLm5hbWUgKyAiIG11c3QgcmV0dXJuIGEgc3RydWN0
LiIpOwotICAgICAgICAgICAgZm9yIChsZXQgcGFyYW1ldGVyIG9mIG5vZGUucGFyYW1ldGVycykg
ewotICAgICAgICAgICAgICAgIGlmIChwYXJhbWV0ZXIubmFtZSA9PSAic3RhZ2VJbiIpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKCEocGFyYW1ldGVyLnR5cGUudHlwZSBpbnN0YW5jZW9mIFN0
cnVjdFR5cGUpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Io
bm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRnJhZ21lbnQgZW50cnkgcG9pbnRzJyBzdGFnZUlu
IHBhcmFtZXRlciAob2YgIiArIG5vZGUubmFtZSArICIpIG11c3QgYmUgYSBzdHJ1Y3QgdHlwZS4i
KTsKLSAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyLnR5cGUudmlzaXQobmV3IE5vbk51bWVy
aWNTZWFyY2hlcihub2RlLm5hbWUpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoIShwYXJhbWV0ZXIudHlwZS50eXBlIGluc3RhbmNlb2YgQXJyYXlS
ZWZUeXBlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5v
ZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkZyYWdtZW50IGVudHJ5IHBvaW50J3MgIiArIHBhcmFt
ZXRlci5uYW1lICsgIiBwYXJhbWV0ZXIgaXMgbm90IGFuIGFycmF5IHJlZmVyZW5jZS4iKTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBub2RlLnJldHVyblR5
cGUudHlwZS52aXNpdChuZXcgTm9uTnVtZXJpY1NlYXJjaGVyKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgdmlzaXRGdW5jRGVmKG5vZGUpCiAgICAg
ewogICAgICAgICBpZiAobm9kZS5zaGFkZXJUeXBlKQpAQCAtMjIwLDE4ICsxNzgsNiBAQCBjbGFz
cyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIHRoaXMuX2NoZWNrVHlwZUFyZ3Vt
ZW50cyhub2RlLm9yaWdpbiwgbm9kZS50eXBlLnR5cGVQYXJhbWV0ZXJzLCBub2RlLnR5cGVBcmd1
bWVudHMpOwogICAgIH0KICAgICAKLSAgICB2aXNpdFJlZmVyZW5jZVR5cGUobm9kZSkKLSAgICB7
Ci0gICAgICAgIG5vZGUuZWxlbWVudFR5cGUudmlzaXQodGhpcyk7Ci0gICAgICAgIAotICAgICAg
ICBpZiAobm9kZS5hZGRyZXNzU3BhY2UgPT0gInRocmVhZCIpCi0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgICAgICBsZXQgaW5zdGFudGlhdGVkVHlwZSA9IG5vZGUuZWxlbWVudFR5
cGUuaW5zdGFudGlhdGVkVHlwZTsKLSAgICAgICAgaWYgKCFpbnN0YW50aWF0ZWRUeXBlLmlzUHJp
bWl0aXZlKQotICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3Jp
Z2luU3RyaW5nLCAiSWxsZWdhbCBwb2ludGVyIHRvIG5vbi1wcmltaXRpdmUgdHlwZTogIiArIG5v
ZGUuZWxlbWVudFR5cGUgKyAiIChpbnN0YW50aWF0ZWQgdG8gIiArIG5vZGUuZWxlbWVudFR5cGUu
aW5zdGFudGlhdGVkVHlwZSArICIpIik7Ci0gICAgfQotICAgIAogICAgIHZpc2l0QXJyYXlUeXBl
KG5vZGUpCiAgICAgewogICAgICAgICBub2RlLmVsZW1lbnRUeXBlLnZpc2l0KHRoaXMpOwpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRnVuY0luc3RhbnRpYXRvci5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9GdW5jSW5zdGFudGlhdG9y
LmpzCShyZXZpc2lvbiAyMjIzMzEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9G
dW5jSW5zdGFudGlhdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIsNyArMTAyLDggQEAgY2xh
c3MgRnVuY0luc3RhbnRpYXRvciB7CiAgICAgICAgICAgICAgICAgICAgIGZ1bmMucmV0dXJuVHlw
ZS52aXNpdChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRpYXRlSW1tZWRpYXRlcyksCiAgICAg
ICAgICAgICAgICAgICAgIFtdLCAvLyBXZSdyZSBpbnN0YW50aWF0ZWQgc28gd2Ugbm8gbG9uZ2Vy
IHRha2UgdHlwZSBwYXJhbWV0ZXJzLgogICAgICAgICAgICAgICAgICAgICBmdW5jLnBhcmFtZXRl
cnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIudmlzaXQoc3Vic3RpdHV0aW9uKS52aXNpdChp
bnN0YW50aWF0ZUltbWVkaWF0ZXMpKSwKLSAgICAgICAgICAgICAgICAgICAgZnVuYy5ib2R5LnZp
c2l0KHN1YnN0aXR1dGlvbikudmlzaXQoaW5zdGFudGlhdGVJbW1lZGlhdGVzKSk7CisgICAgICAg
ICAgICAgICAgICAgIGZ1bmMuYm9keS52aXNpdChzdWJzdGl0dXRpb24pLnZpc2l0KGluc3RhbnRp
YXRlSW1tZWRpYXRlcyksCisgICAgICAgICAgICAgICAgICAgIGZ1bmMuaXNDYXN0LCBmdW5jLnNo
YWRlclR5cGUpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICB2aXNp
dE5hdGl2ZUZ1bmMoZnVuYykKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0lu
bGluZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Jbmxp
bmUuanMJKHJldmlzaW9uIDIyMjMzMSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0lubGluZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsOCBAQCBmdW5jdGlvbiBfaW5s
aW5lRnVuY3Rpb24ocHJvZ3JhbSwgZnVuYywgCiAgICAgaWYgKGZ1bmMuaW5saW5lZCB8fCBmdW5j
LmlzTmF0aXZlKQogICAgICAgICByZXR1cm47CiAgICAgCisgICAgZnVuYy52aXNpdChuZXcgTGF0
ZUNoZWNrZXIoKSk7CisgICAgCiAgICAgLy8gVGhpcyBpcyB0aGUgcHJlY2lzZSB0aW1lIHdoZW4g
d2UgY2FuIGJ1aWxkIEVCdWZmZXJzIGluIG9yZGVyIHRvIGdldCB0aGVtIHRvIGJlIHVuaXF1ZWQg
YnkKICAgICAvLyB0eXBlIGluc3RhbnRpYXRpb24gYnV0IG5vdGhpbmcgZWxzZS4KICAgICBmdW5j
LnZpc2l0KG5ldyBTdHJ1Y3RMYXlvdXRCdWlsZGVyKCkpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCShyZXZpc2lvbiAyMjIzMzEpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0yNywxMCArMjcsNiBAQAogY2xhc3MgSW50cmluc2ljcyB7CiAgICAgY29uc3RydWN0b3IobmFt
ZUNvbnRleHQpCiAgICAgewotICAgICAgICB0aGlzLnByaW1pdGl2ZSA9IG5ldyBQcm90b2NvbERl
Y2woe29yaWdpbjogIjxpbnRlcm5hbD4iLCBvcmlnaW5TdHJpbmc6ICJuYXRpdmUiLCBpc0ludGVy
bmFsOiB0cnVlfSwgIlByaW1pdGl2ZSIpOwotICAgICAgICB0aGlzLnByaW1pdGl2ZS5pc1ByaW1p
dGl2ZSA9IHRydWU7Ci0gICAgICAgIG5hbWVDb250ZXh0LmFkZCh0aGlzLnByaW1pdGl2ZSk7Ci0g
ICAgICAgIAogICAgICAgICB0aGlzLl9tYXAgPSBuZXcgTWFwKCk7CiAKICAgICAgICAgLy8gTk9U
RTogSW50cmluc2ljIHJlc29sdXRpb24gaGFwcGVucyBiZWZvcmUgdHlwZSBuYW1lIHJlc29sdXRp
b24sIHNvIHRoZSBzdHJpbmdzIHdlIHVzZSBoZXJlCkBAIC0zOSw3ICszNSw3IEBAIGNsYXNzIElu
dHJpbnNpY3MgewogICAgICAgICAvLyB1c2UgImludCIgaGVyZSwgc2luY2Ugd2UgZG9uJ3QgeWV0
IGtub3cgdGhhdCB0aGV5IGFyZSB0aGUgc2FtZSB0eXBlLgogICAgICAgICAKICAgICAgICAgdGhp
cy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgUHJpbWl0aXZlIHR5cGUgdm9pZDw+IiwK
KyAgICAgICAgICAgICJuYXRpdmUgdHlwZWRlZiB2b2lkPD4iLAogICAgICAgICAgICAgdHlwZSA9
PiB7CiAgICAgICAgICAgICAgICAgdGhpcy52b2lkID0gdHlwZTsKICAgICAgICAgICAgICAgICB0
eXBlLnNpemUgPSAwOwpAQCAtNjEsOSArNTcsMTAgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAg
ICAgIH0KIAogICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAgIm5hdGl2ZSBQcmlt
aXRpdmUgdHlwZSBpbnQzMjw+IiwKKyAgICAgICAgICAgICJuYXRpdmUgdHlwZWRlZiBpbnQzMjw+
IiwKICAgICAgICAgICAgIHR5cGUgPT4gewogICAgICAgICAgICAgICAgIHRoaXMuaW50MzIgPSB0
eXBlOworICAgICAgICAgICAgICAgIHR5cGUuaXNQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICAg
ICAgICAgIHR5cGUuaXNJbnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHR5cGUuaXNOdW1iZXIg
PSB0cnVlOwogICAgICAgICAgICAgICAgIHR5cGUuaXNTaWduZWQgPSB0cnVlOwpAQCAtODUsOSAr
ODIsMTAgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICB0
aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAgIm5hdGl2ZSBQcmltaXRpdmUgdHlwZSB1aW50MzI8
PiIsCisgICAgICAgICAgICAibmF0aXZlIHR5cGVkZWYgdWludDMyPD4iLAogICAgICAgICAgICAg
dHlwZSA9PiB7CiAgICAgICAgICAgICAgICAgdGhpcy51aW50MzIgPSB0eXBlOworICAgICAgICAg
ICAgICAgIHR5cGUuaXNQcmltaXRpdmUgPSB0cnVlOwogICAgICAgICAgICAgICAgIHR5cGUuaXNJ
bnQgPSB0cnVlOwogICAgICAgICAgICAgICAgIHR5cGUuaXNOdW1iZXIgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIHR5cGUuaXNTaWduZWQgPSBmYWxzZTsKQEAgLTEwNyw3ICsxMDUsNyBAQCBjbGFz
cyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHRoaXMuX21hcC5zZXQo
Ci0gICAgICAgICAgICAibmF0aXZlIFByaW1pdGl2ZSB0eXBlIHVpbnQ4PD4iLAorICAgICAgICAg
ICAgIm5hdGl2ZSB0eXBlZGVmIHVpbnQ4PD4iLAogICAgICAgICAgICAgdHlwZSA9PiB7CiAgICAg
ICAgICAgICAgICAgdGhpcy51aW50OCA9IHR5cGU7CiAgICAgICAgICAgICAgICAgdHlwZS5pc0lu
dCA9IHRydWU7CkBAIC0xMjksOSArMTI3LDEwIEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAg
ICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUg
UHJpbWl0aXZlIHR5cGUgZmxvYXQ8PiIsCisgICAgICAgICAgICAibmF0aXZlIHR5cGVkZWYgZmxv
YXQ8PiIsCiAgICAgICAgICAgICB0eXBlID0+IHsKICAgICAgICAgICAgICAgICB0aGlzLmZsb2F0
ID0gdHlwZTsKKyAgICAgICAgICAgICAgICB0eXBlLmlzUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICB0eXBlLnNpemUgPSAxOwogICAgICAgICAgICAgICAgIHR5cGUuaXNGbG9hdGlu
ZyA9IHRydWU7CiAgICAgICAgICAgICAgICAgdHlwZS5pc051bWJlciA9IHRydWU7CkBAIC0xNDQs
OSArMTQzLDEwIEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgfSk7CiAKICAgICAg
ICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICJuYXRpdmUgUHJpbWl0aXZlIHR5cGUgZG91
YmxlPD4iLAorICAgICAgICAgICAgIm5hdGl2ZSB0eXBlZGVmIGRvdWJsZTw+IiwKICAgICAgICAg
ICAgIHR5cGUgPT4gewogICAgICAgICAgICAgICAgIHRoaXMuZG91YmxlID0gdHlwZTsKKyAgICAg
ICAgICAgICAgICB0eXBlLmlzUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB0eXBl
LnNpemUgPSAxOwogICAgICAgICAgICAgICAgIHR5cGUuaXNGbG9hdGluZyA9IHRydWU7CiAgICAg
ICAgICAgICAgICAgdHlwZS5pc051bWJlciA9IHRydWU7CkBAIC0xNTksOSArMTU5LDEwIEBAIGNs
YXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5fbWFwLnNl
dCgKLSAgICAgICAgICAgICJuYXRpdmUgUHJpbWl0aXZlIHR5cGUgYm9vbDw+IiwKKyAgICAgICAg
ICAgICJuYXRpdmUgdHlwZWRlZiBib29sPD4iLAogICAgICAgICAgICAgdHlwZSA9PiB7CiAgICAg
ICAgICAgICAgICAgdGhpcy5ib29sID0gdHlwZTsKKyAgICAgICAgICAgICAgICB0eXBlLmlzUHJp
bWl0aXZlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB0eXBlLnNpemUgPSAxOwogICAgICAgICAg
ICAgICAgIHR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAoYnVmZmVyLCBvZmZzZXQpID0+IGJ1
ZmZlci5zZXQob2Zmc2V0LCBmYWxzZSk7CiAgICAgICAgICAgICB9KTsKQEAgLTU1Nyw3ICs1NTgs
NyBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgCiAgICAgICAgIGZvciAobGV0IGFkZHJl
c3NTcGFjZSBvZiBhZGRyZXNzU3BhY2VzKSB7CiAgICAgICAgICAgICB0aGlzLl9tYXAuc2V0KAot
ICAgICAgICAgICAgICAgIGBuYXRpdmUgVF4gJHthZGRyZXNzU3BhY2V9IG9wZXJhdG9yJltdPFQk
e3Byb3RvY29sU3VmZml4KGFkZHJlc3NTcGFjZSl9PihUW10gJHthZGRyZXNzU3BhY2V9LHVpbnQp
YCwKKyAgICAgICAgICAgICAgICBgbmF0aXZlIFReICR7YWRkcmVzc1NwYWNlfSBvcGVyYXRvciZb
XTxUPihUW10gJHthZGRyZXNzU3BhY2V9LHVpbnQpYCwKICAgICAgICAgICAgICAgICBmdW5jID0+
IHsKICAgICAgICAgICAgICAgICAgICAgZnVuYy5pbXBsZW1lbnRhdGlvbiA9IChbcmVmLCBpbmRl
eF0sIG5vZGUpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlZiA9IHJlZi5sb2FkVmFs
dWUoKTsKQEAgLTU3MSw3ICs1NzIsNyBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAg
ICAgICB9KTsKIAogICAgICAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAgICAgICAgICAgICAgICBg
bmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQke3Byb3RvY29sU3VmZml4KGFkZHJlc3NTcGFj
ZSl9PihUW10gJHthZGRyZXNzU3BhY2V9KWAsCisgICAgICAgICAgICAgICAgYG5hdGl2ZSB1aW50
IG9wZXJhdG9yLmxlbmd0aDxUPihUW10gJHthZGRyZXNzU3BhY2V9KWAsCiAgICAgICAgICAgICAg
ICAgZnVuYyA9PiB7CiAgICAgICAgICAgICAgICAgICAgIGZ1bmMuaW1wbGVtZW50YXRpb24gPSAo
W3JlZl0sIG5vZGUpID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJlZiA9IHJlZi5sb2Fk
VmFsdWUoKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVja2Vy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVj
a2VyLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xh
dGVDaGVja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3Mg
TGF0ZUNoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBjb25zdHJ1Y3RvcigpCisgICAgewor
ICAgICAgICBzdXBlcigpOworICAgIH0KKworICAgIHZpc2l0UmVmZXJlbmNlVHlwZShub2RlKQor
ICAgIHsKKyAgICAgICAgaWYgKG5vZGUuYWRkcmVzc1NwYWNlID09ICJ0aHJlYWQiKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKCFub2RlLmVsZW1lbnRUeXBlLmlz
UHJpbWl0aXZlKQorICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4u
b3JpZ2luU3RyaW5nLCAiSWxsZWdhbCBwb2ludGVyIHRvIG5vbi1wcmltaXRpdmUgdHlwZTogIiAr
IG5vZGUuZWxlbWVudFR5cGUpOworICAgIH0KKyAgICAKKyAgICBfY2hlY2tTaGFkZXJUeXBlKG5v
ZGUpCisgICAgeworICAgICAgICBsZXQgYXNzZXJ0UHJpbWl0aXZlID0gdHlwZSA9PiB7CisgICAg
ICAgICAgICBpZiAoIXR5cGUuaXNQcmltaXRpdmUpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiU2hhZGVyIHNpZ25hdHVyZSBj
YW5ub3QgaW5jbHVkZSBub24tcHJpbWl0aXZlIHR5cGU6ICIgKyB0eXBlKTsKKyAgICAgICAgfQor
ICAgICAgICBzd2l0Y2ggKG5vZGUuc2hhZGVyVHlwZSkgeworICAgICAgICBjYXNlICJ2ZXJ0ZXgi
OgorICAgICAgICAgICAgaWYgKCEobm9kZS5yZXR1cm5UeXBlLnR5cGUgaW5zdGFuY2VvZiBTdHJ1
Y3RUeXBlKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJWZXJ0ZXggc2hhZGVyICIgKyBub2RlLm5hbWUgKyAiIG11c3QgcmV0
dXJuIGEgc3RydWN0LiIpOworICAgICAgICAgICAgYXNzZXJ0UHJpbWl0aXZlKG5vZGUucmV0dXJu
VHlwZSk7CisgICAgICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2Ygbm9kZS5wYXJhbWV0ZXJz
KSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci50eXBlLnR5cGUgaW5zdGFuY2VvZiBT
dHJ1Y3RUeXBlKQorICAgICAgICAgICAgICAgICAgICBhc3NlcnRQcmltaXRpdmUocGFyYW1ldGVy
LnR5cGUpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEocGFyYW1ldGVyLnR5cGUudHlwZSBp
bnN0YW5jZW9mIEFycmF5UmVmVHlwZSkpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBX
VHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgbm9kZS5uYW1lICsgIiBhY2NlcHRz
IGEgcGFyYW1ldGVyICIgKyBwYXJhbWV0ZXIubmFtZSArICIgd2hpY2ggaXNuJ3QgYSBzdHJ1Y3Qg
YW5kIGlzbid0IGFuIEFycmF5UmVmLiIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgImZyYWdtZW50IjoKKyAgICAgICAgICAgIGlmICghKG5vZGUucmV0
dXJuVHlwZS50eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCisgICAgICAgICAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRnJhZ21lbnQgc2hh
ZGVyICIgKyBub2RlLm5hbWUgKyAiIG11c3QgcmV0dXJuIGEgc3RydWN0LiIpOworICAgICAgICAg
ICAgYXNzZXJ0UHJpbWl0aXZlKG5vZGUucmV0dXJuVHlwZSk7CisgICAgICAgICAgICBmb3IgKGxl
dCBwYXJhbWV0ZXIgb2Ygbm9kZS5wYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICAgICAgaWYgKHBh
cmFtZXRlci5uYW1lID09ICJzdGFnZUluIikgeworICAgICAgICAgICAgICAgICAgICBpZiAoIShw
YXJhbWV0ZXIudHlwZS50eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkpCisgICAgICAgICAgICAg
ICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcs
ICJGcmFnbWVudCBlbnRyeSBwb2ludHMnIHN0YWdlSW4gcGFyYW1ldGVyIChvZiAiICsgbm9kZS5u
YW1lICsgIikgbXVzdCBiZSBhIHN0cnVjdCB0eXBlLiIpOworICAgICAgICAgICAgICAgICAgICBh
c3NlcnRQcmltaXRpdmUocGFyYW1ldGVyLnR5cGUpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghKHBhcmFtZXRlci50eXBlLnR5cGUgaW5zdGFuY2Vv
ZiBBcnJheVJlZlR5cGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBl
RXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRnJhZ21lbnQgZW50cnkgcG9pbnQncyAi
ICsgcGFyYW1ldGVyLm5hbWUgKyAiIHBhcmFtZXRlciBpcyBub3QgYW4gYXJyYXkgcmVmZXJlbmNl
LiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZpc2l0RnVuY0RlZihub2RlKQorICAgIHsK
KyAgICAgICAgaWYgKG5vZGUuc2hhZGVyVHlwZSkKKyAgICAgICAgICAgIHRoaXMuX2NoZWNrU2hh
ZGVyVHlwZShub2RlKTsKKyAgICAgICAgc3VwZXIudmlzaXRGdW5jRGVmKG5vZGUpOworICAgIH0K
K30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGV4ZXJUb2tlbi5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhlclRva2VuLmpz
CShyZXZpc2lvbiAyMjIzMzEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhl
clRva2VuLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMSArNTgsNiBAQCBjbGFzcyBMZXhlclRv
a2VuIHsKICAgICAgICAgcmV0dXJuIHRoaXMubGV4ZXIub3JpZ2luS2luZDsKICAgICB9CiAgICAg
Ci0gICAgZ2V0IGlzSW50ZXJuYWwoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLSAgICAKICAgICBnZXQgaW5kZXgoKQogICAgIHsKICAgICAgICAgcmV0dXJuIHRoaXMuX2lu
ZGV4OwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlVHlwZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVUeXBlLmpz
CShyZXZpc2lvbiAyMjIzMzEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRp
dmVUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSwyMSArMjUsMjIgQEAKICJ1c2Ugc3RyaWN0
IjsKIAogY2xhc3MgTmF0aXZlVHlwZSBleHRlbmRzIFR5cGUgewotICAgIGNvbnN0cnVjdG9yKG9y
aWdpbiwgbmFtZSwgaXNQcmltaXRpdmUsIHR5cGVQYXJhbWV0ZXJzKQorICAgIGNvbnN0cnVjdG9y
KG9yaWdpbiwgbmFtZSwgdHlwZVBhcmFtZXRlcnMpCiAgICAgeworICAgICAgICBpZiAoISh0eXBl
UGFyYW1ldGVycyBpbnN0YW5jZW9mIEFycmF5KSkKKyAgICAgICAgICAgIHRocm93IG5ldyBFcnJv
cigidHlwZSBwYXJhbWV0ZXJzIG5vdCBhcnJheTogIiArIHR5cGVQYXJhbWV0ZXJzKTsKICAgICAg
ICAgc3VwZXIoKTsKICAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOwogICAgICAgICB0aGlz
Ll9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5faXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTsK
ICAgICAgICAgdGhpcy5fdHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVyczsKICAgICAgICAg
dGhpcy5faXNOdW1iZXIgPSBmYWxzZTsKICAgICAgICAgdGhpcy5faXNJbnQgPSBmYWxzZTsKICAg
ICAgICAgdGhpcy5faXNGbG9hdGluZyA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc1ByaW1pdGl2
ZSA9IGZhbHNlOwogICAgIH0KICAgICAKICAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5f
b3JpZ2luOyB9CiAgICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9Ci0gICAgZ2V0
IGlzUHJpbWl0aXZlKCkgeyByZXR1cm4gdGhpcy5faXNQcmltaXRpdmU7IH0KICAgICBnZXQgdHlw
ZVBhcmFtZXRlcnMoKSB7IHJldHVybiB0aGlzLl90eXBlUGFyYW1ldGVyczsgfQogICAgIGdldCBp
c05hdGl2ZSgpIHsgcmV0dXJuIHRydWU7IH0KICAgICAKQEAgLTUwLDYgKzUxLDggQEAgY2xhc3Mg
TmF0aXZlVHlwZSBleHRlbmRzIFR5cGUgewogICAgIHNldCBpc0ludCh2YWx1ZSkgeyB0aGlzLl9p
c0ludCA9IHZhbHVlOyB9CiAgICAgZ2V0IGlzRmxvYXRpbmcoKSB7IHJldHVybiB0aGlzLl9pc0Zs
b2F0aW5nOyB9CiAgICAgc2V0IGlzRmxvYXRpbmcodmFsdWUpIHsgdGhpcy5faXNGbG9hdGluZyA9
IHZhbHVlOyB9CisgICAgZ2V0IGlzUHJpbWl0aXZlKCkgeyByZXR1cm4gdGhpcy5faXNQcmltaXRp
dmU7IH0KKyAgICBzZXQgaXNQcmltaXRpdmUodmFsdWUpIHsgdGhpcy5faXNQcmltaXRpdmUgPSB2
YWx1ZTsgfQogICAgIAogICAgIGluc3RhbnRpYXRlKHR5cGVBcmd1bWVudHMpCiAgICAgewpAQCAt
NjIsNyArNjUsNyBAQCBjbGFzcyBOYXRpdmVUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgCiAgICAg
dG9TdHJpbmcoKQogICAgIHsKLSAgICAgICAgcmV0dXJuICJuYXRpdmUgIiArICh0aGlzLmlzUHJp
bWl0aXZlID8gIlByaW1pdGl2ZSAiIDogIiIpICsgInR5cGUgIiArIHRoaXMubmFtZSArICI8IiAr
IHRoaXMudHlwZVBhcmFtZXRlcnMgKyAiPiI7CisgICAgICAgIHJldHVybiAibmF0aXZlIHR5cGVk
ZWYgIiArIHRoaXMubmFtZSArICI8IiArIHRoaXMudHlwZVBhcmFtZXRlcnMgKyAiPiI7CiAgICAg
fQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwkocmV2aXNp
b24gMjIyMzMxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHdv
cmtpbmcgY29weSkKQEAgLTk1NSwxOCArOTU1LDExIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0s
IG9yaWdpbiwgb3JpZ2luS2kKICAgICBmdW5jdGlvbiBwYXJzZU5hdGl2ZSgpCiAgICAgewogICAg
ICAgICBsZXQgb3JpZ2luID0gY29uc3VtZSgibmF0aXZlIik7Ci0gICAgICAgIGxldCBpc1R5cGUg
PSBsZXhlci5iYWNrdHJhY2tpbmdTY29wZSgoKSA9PiB7Ci0gICAgICAgICAgICBpZiAodHJ5Q29u
c3VtZSgidHlwZWRlZiIpKQotICAgICAgICAgICAgICAgIHJldHVybiAibm9ybWFsIjsKLSAgICAg
ICAgICAgIGNvbnN1bWUoIlByaW1pdGl2ZSIpOwotICAgICAgICAgICAgY29uc3VtZSgidHlwZWRl
ZiIpOwotICAgICAgICAgICAgcmV0dXJuICJwcmltaXRpdmUiOwotICAgICAgICB9KTsKLSAgICAg
ICAgaWYgKGlzVHlwZSkgeworICAgICAgICBpZiAodHJ5Q29uc3VtZSgidHlwZWRlZiIpKSB7CiAg
ICAgICAgICAgICBsZXQgbmFtZSA9IGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIik7CiAgICAgICAg
ICAgICBsZXQgcGFyYW1ldGVycyA9IHBhcnNlVHlwZVBhcmFtZXRlcnMoKTsKICAgICAgICAgICAg
IGNvbnN1bWUoIjsiKTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgTmF0aXZlVHlwZShvcmlnaW4s
IG5hbWUudGV4dCwgaXNUeXBlID09ICJwcmltaXRpdmUiLCBwYXJhbWV0ZXJzKTsKKyAgICAgICAg
ICAgIHJldHVybiBuZXcgTmF0aXZlVHlwZShvcmlnaW4sIG5hbWUudGV4dCwgcGFyYW1ldGVycyk7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHBhcnNlTmF0aXZlRnVuYygpOwogICAgIH0KSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Byb2dyYW1XaXRoVW5uZWNlc3NhcnlU
aGluZ3NSZW1vdmVkLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1Byb2dyYW1XaXRoVW5uZWNlc3NhcnlUaGluZ3NSZW1vdmVkLmpzCShyZXZpc2lvbiAyMjIz
MzEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm9ncmFtV2l0aFVubmVjZXNz
YXJ5VGhpbmdzUmVtb3ZlZC5qcwkod29ya2luZyBjb3B5KQpAQCAtNTEsMTAgKzUxLDggQEAgZnVu
Y3Rpb24gcHJvZ3JhbVdpdGhVbm5lY2Vzc2FyeVRoaW5nc1JlbQogICAgIAogICAgIGxldCByZXN1
bHQgPSBuZXcgUHJvZ3JhbSgpOwogICAgIGZvciAobGV0IG5hbWUgb2YgbmFtZUZpbmRlci5zZXQp
IHsKLSAgICAgICAgZm9yIChsZXQgdGhpbmcgb2YgcHJvZ3JhbS5nbG9iYWxOYW1lQ29udGV4dC51
bmRlcmx5aW5nVGhpbmdzKEFueXRoaW5nLCBuYW1lKSkgewotICAgICAgICAgICAgaWYgKCF0aGlu
Zy5vcmlnaW4uaXNJbnRlcm5hbCkKLSAgICAgICAgICAgICAgICByZXN1bHQuYWRkKHRoaW5nKTsK
LSAgICAgICAgfQorICAgICAgICBmb3IgKGxldCB0aGluZyBvZiBwcm9ncmFtLmdsb2JhbE5hbWVD
b250ZXh0LnVuZGVybHlpbmdUaGluZ3MoQW55dGhpbmcsIG5hbWUpKQorICAgICAgICAgICAgcmVz
dWx0LmFkZCh0aGluZyk7CiAgICAgfQogICAgIAogICAgIHJldHVybiByZXN1bHQ7CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJvdG9jb2xEZWNsLmpzCShyZXZpc2lv
biAyMjIzMzEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Qcm90b2NvbERlY2wu
anMJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDYgQEAgY2xhc3MgUHJvdG9jb2xEZWNsIGV4
dGVuZHMgUHJvdG9jb2wgewogICAgICAgICB0aGlzLl9zaWduYXR1cmVzID0gW107CiAgICAgICAg
IHRoaXMuX3NpZ25hdHVyZU1hcCA9IG5ldyBNYXAoKTsKICAgICAgICAgdGhpcy5fdHlwZVZhcmlh
YmxlID0gbmV3IFR5cGVWYXJpYWJsZShvcmlnaW4sIG5hbWUsIG51bGwpOwotICAgICAgICB0aGlz
LmlzUHJpbWl0aXZlID0gZmFsc2U7CiAgICAgfQogICAgIAogICAgIGFkZEV4dGVuZHMocHJvdG9j
b2wpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZWZlcmVuY2VUeXBlLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1JlZmVyZW5jZVR5
cGUuanMJKHJldmlzaW9uIDIyMjMzMSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1JlZmVyZW5jZVR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDYgQEAgY2xhc3Mg
UmVmZXJlbmNlVHlwZSBleHRlbmRzIFR5cGUgewogICAgIGdldCBvcmlnaW4oKSB7IHJldHVybiB0
aGlzLl9vcmlnaW47IH0KICAgICBnZXQgYWRkcmVzc1NwYWNlKCkgeyByZXR1cm4gdGhpcy5fYWRk
cmVzc1NwYWNlOyB9CiAgICAgZ2V0IGVsZW1lbnRUeXBlKCkgeyByZXR1cm4gdGhpcy5fZWxlbWVu
dFR5cGU7IH0KLSAgICBnZXQgaXNQcmltaXRpdmUoKSB7IHJldHVybiBmYWxzZTsgfQogCiAgICAg
Z2V0IHNpemUoKSB7IHJldHVybiAxOyB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJKHJldmlzaW9uIDIyMjMzMSkKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwkod29ya2luZyBj
b3B5KQpAQCAtNDMsMjEgKzQzLDIwIEBAIGZ1bmN0aW9uIGludFRvU3RyaW5nKHgpCiAvLyBOT1RF
OiBUaGUgbmV4dCBsaW5lIGlzIGxpbmUgNzIsIGFuZCB3ZSByZWx5IG9uIHRoaXMgaW4gUHJlcGFy
ZS5qcy4KIGxldCBzdGFuZGFyZExpYnJhcnkgPSBgCiAvLyBUaGlzIGlzIHRoZSBXU0wgc3RhbmRh
cmQgbGlicmFyeS4gSW1wbGVtZW50YXRpb25zIG9mIGFsbCBvZiB0aGVzZSB0aGluZ3MgYXJlIGlu
Ci0vLyBJbnRyaW5zaWNzLmpzLiBUaGUgb25seSB0aGluZyB0aGF0IGdldHMgZGVmaW5lZCBiZWZv
cmUgd2UgZ2V0IGhlcmUgaXMgdGhlIFByaW1pdGl2ZQotLy8gcHJvdG9jb2wuCisvLyBJbnRyaW5z
aWNzLmpzLgogCiAvLyBOZWVkIHRvIGJvb3RzdHJhcCB2b2lkIGZpcnN0LgotbmF0aXZlIFByaW1p
dGl2ZSB0eXBlZGVmIHZvaWQ7CituYXRpdmUgdHlwZWRlZiB2b2lkOwogCi1uYXRpdmUgUHJpbWl0
aXZlIHR5cGVkZWYgdWludDg7Ci1uYXRpdmUgUHJpbWl0aXZlIHR5cGVkZWYgaW50MzI7Ci1uYXRp
dmUgUHJpbWl0aXZlIHR5cGVkZWYgdWludDMyOwotbmF0aXZlIFByaW1pdGl2ZSB0eXBlZGVmIGJv
b2w7CituYXRpdmUgdHlwZWRlZiB1aW50ODsKK25hdGl2ZSB0eXBlZGVmIGludDMyOworbmF0aXZl
IHR5cGVkZWYgdWludDMyOworbmF0aXZlIHR5cGVkZWYgYm9vbDsKIHR5cGVkZWYgaW50ID0gaW50
MzI7CiB0eXBlZGVmIHVpbnQgPSB1aW50MzI7CiAKLW5hdGl2ZSBQcmltaXRpdmUgdHlwZWRlZiBm
bG9hdDsKLW5hdGl2ZSBQcmltaXRpdmUgdHlwZWRlZiBkb3VibGU7CituYXRpdmUgdHlwZWRlZiBm
bG9hdDsKK25hdGl2ZSB0eXBlZGVmIGRvdWJsZTsKIAogbmF0aXZlIG9wZXJhdG9yIGludDMyKHVp
bnQzMik7CiBuYXRpdmUgb3BlcmF0b3IgaW50MzIodWludDgpOwpAQCAtMzc4LDE0ICszNzcsMTQg
QEAgdGhyZWFkIFReIG9wZXJhdG9yJltdPFQ+KHRocmVhZCB2ZWM0PFQ+XgogfQogCiBuYXRpdmUg
dGhyZWFkIFReIG9wZXJhdG9yJltdPFQ+KHRocmVhZCBUW10sIHVpbnQpOwotbmF0aXZlIHRocmVh
ZGdyb3VwIFReIG9wZXJhdG9yJltdPFQ6UHJpbWl0aXZlPih0aHJlYWRncm91cCBUW10sIHVpbnQp
OwotbmF0aXZlIGRldmljZSBUXiBvcGVyYXRvciZbXTxUOlByaW1pdGl2ZT4oZGV2aWNlIFRbXSwg
dWludCk7Ci1uYXRpdmUgY29uc3RhbnQgVF4gb3BlcmF0b3ImW108VDpQcmltaXRpdmU+KGNvbnN0
YW50IFRbXSwgdWludCk7CituYXRpdmUgdGhyZWFkZ3JvdXAgVF4gb3BlcmF0b3ImW108VD4odGhy
ZWFkZ3JvdXAgVFtdLCB1aW50KTsKK25hdGl2ZSBkZXZpY2UgVF4gb3BlcmF0b3ImW108VD4oZGV2
aWNlIFRbXSwgdWludCk7CituYXRpdmUgY29uc3RhbnQgVF4gb3BlcmF0b3ImW108VD4oY29uc3Rh
bnQgVFtdLCB1aW50KTsKIAogbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ+KHRocmVhZCBU
W10pOwotbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ6UHJpbWl0aXZlPih0aHJlYWRncm91
cCBUW10pOwotbmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ6UHJpbWl0aXZlPihkZXZpY2Ug
VFtdKTsKLW5hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUOlByaW1pdGl2ZT4oY29uc3RhbnQg
VFtdKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLmxlbmd0aDxUPih0aHJlYWRncm91cCBUW10pOwor
bmF0aXZlIHVpbnQgb3BlcmF0b3IubGVuZ3RoPFQ+KGRldmljZSBUW10pOworbmF0aXZlIHVpbnQg
b3BlcmF0b3IubGVuZ3RoPFQ+KGNvbnN0YW50IFRbXSk7CiAKIHVpbnQgb3BlcmF0b3IubGVuZ3Ro
PFQsIHVpbnQgbGVuZ3RoPihUW2xlbmd0aF0pCiB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TdGF0ZW1lbnRDbG9uZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU3RhdGVtZW50Q2xvbmVyLmpzCShyZXZpc2lvbiAyMjIzMzEpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGF0ZW1lbnRDbG9uZXIuanMJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDggKzUzLDcgQEAgY2xhc3MgU3RhdGVtZW50Q2xvbmVyIGV4dGVuZHMg
UmV3cml0ZXIgewogICAgIHZpc2l0TmF0aXZlVHlwZShub2RlKQogICAgIHsKICAgICAgICAgcmV0
dXJuIG5ldyBOYXRpdmVUeXBlKAotICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUubmFtZSwg
bm9kZS5pc1ByaW1pdGl2ZSwKLSAgICAgICAgICAgIG5vZGUudHlwZVBhcmFtZXRlcnMubWFwKHR5
cGVQYXJhbWV0ZXIgPT4gdHlwZVBhcmFtZXRlci52aXNpdCh0aGlzKSkpOworICAgICAgICAgICAg
bm9kZS5vcmlnaW4sIG5vZGUubmFtZSwgbm9kZS50eXBlUGFyYW1ldGVycy5tYXAodHlwZVBhcmFt
ZXRlciA9PiB0eXBlUGFyYW1ldGVyLnZpc2l0KHRoaXMpKSk7CiAgICAgfQogICAgIAogICAgIHZp
c2l0VHlwZURlZihub2RlKQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3lu
dGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzCShyZXZpc2lvbiAyMjIz
MzEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplU3RydWN0QWNj
ZXNzb3JzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNTQsMTEgKzE1NCw5IEBAIGZ1bmN0aW9uIHN5
bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMocHJvZ3IKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IAogICAgICAgICAgICAgc2V0dXBBbmRlcigidGhyZWFkIik7Ci0gICAgICAgICAgICBpZiAodHlw
ZS5pbnN0YW50aWF0ZSgpLmlzUHJpbWl0aXZlKSB7Ci0gICAgICAgICAgICAgICAgc2V0dXBBbmRl
cigidGhyZWFkZ3JvdXAiKTsKLSAgICAgICAgICAgICAgICBzZXR1cEFuZGVyKCJkZXZpY2UiKTsK
LSAgICAgICAgICAgICAgICBzZXR1cEFuZGVyKCJjb25zdGFudCIpOwotICAgICAgICAgICAgfQor
ICAgICAgICAgICAgc2V0dXBBbmRlcigidGhyZWFkZ3JvdXAiKTsKKyAgICAgICAgICAgIHNldHVw
QW5kZXIoImRldmljZSIpOworICAgICAgICAgICAgc2V0dXBBbmRlcigiY29uc3RhbnQiKTsKICAg
ICAgICAgfQogICAgIH0KIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rl
c3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5q
cwkocmV2aXNpb24gMjIyMzMxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVz
dC5qcwkod29ya2luZyBjb3B5KQpAQCAtOTY4LDcgKzk2OCw3IEBAIGZ1bmN0aW9uIFRFU1RfYmFk
SW50TGl0ZXJhbEZvckRvdWJsZSgpCiBmdW5jdGlvbiBURVNUX3Bhc3NOdWxsQW5kTm90TnVsbCgp
CiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBUIGJhcjxUOlByaW1pdGl2
ZT4oZGV2aWNlIFReIHAsIGRldmljZSBUXikKKyAgICAgICAgVCBiYXI8VD4oZGV2aWNlIFReIHAs
IGRldmljZSBUXikKICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIF5wOwogICAgICAgICB9
CkBAIC05ODUsNyArOTg1LDcgQEAgZnVuY3Rpb24gVEVTVF9wYXNzTnVsbEFuZE5vdE51bGwoKQog
ZnVuY3Rpb24gVEVTVF9wYXNzTnVsbEFuZE5vdE51bGxGdWxsUG9seSgpCiB7CiAgICAgbGV0IHBy
b2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBUIGJhcjxUOlByaW1pdGl2ZT4oVCBwLCBUKQorICAg
ICAgICBUIGJhcjxUPihUIHAsIFQpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBwOwog
ICAgICAgICB9CkBAIC0xMDAyLDcgKzEwMDIsNyBAQCBmdW5jdGlvbiBURVNUX3Bhc3NOdWxsQW5k
Tm90TnVsbEZ1bGxQb2x5CiBmdW5jdGlvbiBURVNUX3Bhc3NOdWxsQW5kTm90TnVsbEZ1bGxQb2x5
UmV2ZXJzZSgpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAotICAgICAgICBUIGJhcjxU
OlByaW1pdGl2ZT4oVCwgVCBwKQorICAgICAgICBUIGJhcjxUPihULCBUIHApCiAgICAgICAgIHsK
ICAgICAgICAgICAgIHJldHVybiBwOwogICAgICAgICB9CkBAIC0xMDYwLDcgKzEwNjAsNyBAQCBm
dW5jdGlvbiBURVNUX251bGxUeXBlVmFyaWFibGVVbmlmeSgpCiAgICAgICAgICAgICBsZXQgdHlw
ZXMgPSB7fTsKICAgICAgICAgICAgIHR5cGVzLm51bGxUeXBlID0gbmV3IE51bGxUeXBlKG51bGwp
OwogICAgICAgICAgICAgdHlwZXMudmFyaWFibGVUeXBlID0gbmV3IFR5cGVWYXJpYWJsZShudWxs
LCAiVCIsIG51bGwpOwotICAgICAgICAgICAgdHlwZXMucHRyVHlwZSA9IG5ldyBQdHJUeXBlKG51
bGwsICJjb25zdGFudCIsIG5ldyBOYXRpdmVUeXBlKG51bGwsICJmb29fdCIsIHRydWUsIFtdKSk7
CisgICAgICAgICAgICB0eXBlcy5wdHJUeXBlID0gbmV3IFB0clR5cGUobnVsbCwgImNvbnN0YW50
IiwgbmV3IE5hdGl2ZVR5cGUobnVsbCwgImZvb190IiwgW10pKTsKICAgICAgICAgICAgIGxldCB1
bmlmaWNhdGlvbkNvbnRleHQgPSBuZXcgVW5pZmljYXRpb25Db250ZXh0KFt0eXBlcy52YXJpYWJs
ZVR5cGVdKTsKICAgICAgICAgICAgIGZvciAobGV0IFtsZWZ0TmFtZSwgcmlnaHROYW1lXSBvZiBv
cmRlcikgewogICAgICAgICAgICAgICAgIGxldCBsZWZ0ID0gdHlwZXNbbGVmdE5hbWVdOwpAQCAt
MjAzMiwyOCArMjAzMiwyOSBAQCBmdW5jdGlvbiBURVNUX2NoYWluU3RydWN0KCkKICAgICBjaGVj
a0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImJhciIsIFtdLCBbbWFrZUludChw
cm9ncmFtLCA0NjU3KV0pLCA0NjU3KTsKIH0KIAotZnVuY3Rpb24gVEVTVF9jaGFpblN0cnVjdElu
dmFsaWQoKQorZnVuY3Rpb24gVEVTVF9jaGFpblN0cnVjdE5ld2x5VmFsaWQoKQogewotICAgIGNo
ZWNrRmFpbCgKLSAgICAgICAgKCkgPT4gZG9QcmVwKGAKLSAgICAgICAgICAgIHN0cnVjdCBGb288
VD4gewotICAgICAgICAgICAgICAgIFQgZjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0
cnVjdCBCYXI8VD4gewotICAgICAgICAgICAgICAgIEZvbzxkZXZpY2UgVF4+IGY7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpbnQgZm9vKHRocmVhZCBCYXI8aW50Pl4geCkKLSAgICAgICAg
ICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gXngtPmYuZjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGludCBiYXIoZGV2aWNlIGludF4gYSkKLSAgICAgICAgICAgIHsKLSAgICAgICAg
ICAgICAgICBCYXI8aW50PiB4OwotICAgICAgICAgICAgICAgIHguZi5mID0gYTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZm9vKCZ4KTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgYCksCi0gICAg
ICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1R5cGVFcnJvcik7CisgICAgbGV0IHByb2dyYW0gPSBk
b1ByZXAoYAorICAgICAgICBzdHJ1Y3QgRm9vPFQ+IHsKKyAgICAgICAgICAgIFQgZjsKKyAgICAg
ICAgfQorICAgICAgICBzdHJ1Y3QgQmFyPFQ+IHsKKyAgICAgICAgICAgIEZvbzxkZXZpY2UgVF4+
IGY7CisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbyh0aHJlYWQgQmFyPGludD5eIHgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBeeC0+Zi5mOworICAgICAgICB9CisgICAgICAgIGlu
dCBiYXIoZGV2aWNlIGludF4gYSkKKyAgICAgICAgeworICAgICAgICAgICAgQmFyPGludD4geDsK
KyAgICAgICAgICAgIHguZi5mID0gYTsKKyAgICAgICAgICAgIHJldHVybiBmb28oJngpOworICAg
ICAgICB9CisgICAgYCk7CisgICAgbGV0IGJ1ZmZlciA9IG5ldyBFQnVmZmVyKDEpOworICAgIGJ1
ZmZlci5zZXQoMCwgNzg0NTMpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiYmFyIiwgW10sIFtUeXBlZFZhbHVlLmJveChuZXcgUHRyVHlwZShudWxsLCAiZGV2
aWNlIiwgcHJvZ3JhbS5pbnRyaW5zaWNzLmludDMyKSwgbmV3IEVQdHIoYnVmZmVyLCAwKSldKSwg
Nzg0NTMpOwogfQogCiBmdW5jdGlvbiBURVNUX2NoYWluU3RydWN0RGV2aWNlKCkKQEAgLTIwNjIs
NyArMjA2Myw3IEBAIGZ1bmN0aW9uIFRFU1RfY2hhaW5TdHJ1Y3REZXZpY2UoKQogICAgICAgICBz
dHJ1Y3QgRm9vPFQ+IHsKICAgICAgICAgICAgIFQgZjsKICAgICAgICAgfQotICAgICAgICBzdHJ1
Y3QgQmFyPFQ6UHJpbWl0aXZlPiB7CisgICAgICAgIHN0cnVjdCBCYXI8VD4gewogICAgICAgICAg
ICAgRm9vPGRldmljZSBUXj4gZjsKICAgICAgICAgfQogICAgICAgICBpbnQgZm9vKHRocmVhZCBC
YXI8aW50Pl4geCkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwkocmV2
aXNpb24gMjIyMzMxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwko
d29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQCBjbGFzcyBUeXBlIGV4dGVuZHMgTm9kZSB7
CiAgICAgZ2V0IGlzTnVtYmVyKCkgeyByZXR1cm4gZmFsc2U7IH0KICAgICBnZXQgaXNJbnQoKSB7
IHJldHVybiBmYWxzZTsgfQogICAgIGdldCBpc0Zsb2F0aW5nKCkgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBnZXQgaXNQcmltaXRpdmUoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIAogICAgIGluaGVy
aXRzKHByb3RvY29sKQogICAgIHsK
</data>
<flag name="review"
          id="341431"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>