<?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>176977</bug_id>
          
          <creation_ts>2017-09-14 21:32:20 -0700</creation_ts>
          <short_desc>WSL should support enum</short_desc>
          <delta_ts>2018-10-13 16:40:02 -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>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1349174</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-14 21:32:20 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350035</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-18 12:02:49 -0700</bug_when>
    <thetext>Ima do this next.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350180</commentid>
    <comment_count>2</comment_count>
      <attachid>321158</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-18 17:40:57 -0700</bug_when>
    <thetext>Created attachment 321158
almost done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350234</commentid>
    <comment_count>3</comment_count>
      <attachid>321178</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-18 20:18:24 -0700</bug_when>
    <thetext>Created attachment 321178
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350236</commentid>
    <comment_count>4</comment_count>
      <attachid>321179</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-18 20:21:58 -0700</bug_when>
    <thetext>Created attachment 321179
the ptach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350237</commentid>
    <comment_count>5</comment_count>
      <attachid>321179</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-09-18 20:35:46 -0700</bug_when>
    <thetext>Comment on attachment 321179
the ptach

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

&gt; Tools/WebGPUShadingLanguageRI/Intrinsics.js:111
&gt; +                type.formatValueFromDoubleLiteral = value =&gt; value;

No rounding?

&gt; Tools/WebGPUShadingLanguageRI/SynthesizeEnumFunctions.js:27
&gt; +function synthesizeEnumFunctions(program)

Wow, this is cool! Dynamically generating functions!

I wish I knew how to do this with clang (without emitting a giant string)

&gt; Tools/WebGPUShadingLanguageRI/Test.js:3929
&gt; +        Foo war()
&gt; +        {
&gt; +            return Foo.War;
&gt; +        }
&gt; +        Foo famine()
&gt; +        {
&gt; +            return Foo.Famine;
&gt; +        }
&gt; +        Foo pestilence()
&gt; +        {
&gt; +            return Foo.Pestilence;
&gt; +        }
&gt; +        Foo death()
&gt; +        {
&gt; +            return Foo.Death;
&gt; +        }

Couldn&apos;t you do, like, months of the year or something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350238</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-18 20:44:15 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #5)
&gt; Comment on attachment 321179 [details]
&gt; the ptach
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=321179&amp;action=review
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Intrinsics.js:111
&gt; &gt; +                type.formatValueFromDoubleLiteral = value =&gt; value;
&gt; 
&gt; No rounding?

Oh!  Fixed.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/SynthesizeEnumFunctions.js:27
&gt; &gt; +function synthesizeEnumFunctions(program)
&gt; 
&gt; Wow, this is cool! Dynamically generating functions!
&gt; 
&gt; I wish I knew how to do this with clang (without emitting a giant string)
&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Test.js:3929
&gt; &gt; +        Foo war()
&gt; &gt; +        {
&gt; &gt; +            return Foo.War;
&gt; &gt; +        }
&gt; &gt; +        Foo famine()
&gt; &gt; +        {
&gt; &gt; +            return Foo.Famine;
&gt; &gt; +        }
&gt; &gt; +        Foo pestilence()
&gt; &gt; +        {
&gt; &gt; +            return Foo.Pestilence;
&gt; &gt; +        }
&gt; &gt; +        Foo death()
&gt; &gt; +        {
&gt; &gt; +            return Foo.Death;
&gt; &gt; +        }
&gt; 
&gt; Couldn&apos;t you do, like, months of the year or something?

;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1350239</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-18 20:44:45 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/222200/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353517</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:36:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693578&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468932</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 16:40:02 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/133</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321158</attachid>
            <date>2017-09-18 17:40:57 -0700</date>
            <delta_ts>2017-09-18 20:18:24 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>25270</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJldmlzaW9uIDIyMjE5MikK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkod29ya2luZyBjb3B5KQpA
QCAtNjcsNiArNjcsOSBAQCBsb2FkKCJFQXJyYXlSZWYuanMiKTsKIGxvYWQoIkVCdWZmZXIuanMi
KTsKIGxvYWQoIkVCdWZmZXJCdWlsZGVyLmpzIik7CiBsb2FkKCJFUHRyLmpzIik7Citsb2FkKCJF
bnVtTGl0ZXJhbC5qcyIpOworbG9hZCgiRW51bU1lbWJlci5qcyIpOworbG9hZCgiRW51bVR5cGUu
anMiKTsKIGxvYWQoIkV2YWx1YXRpb25Db21tb24uanMiKTsKIGxvYWQoIkV2YWx1YXRvci5qcyIp
OwogbG9hZCgiRXhwcmVzc2lvbkZpbmRlci5qcyIpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvQ2hlY2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DaGVja2VyLmpzCShyZXZpc2lvbiAyMjIxOTIpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSw1
NiBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCisgICAgdmlzaXRFbnVtVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5iYXNlVHlw
ZS52aXNpdCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIGxldCBiYXNlVHlwZSA9IG5vZGUuYmFz
ZVR5cGUudW5pZnlOb2RlOworICAgICAgICAKKyAgICAgICAgaWYgKCFiYXNlVHlwZS5pc0ludCkK
KyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmlu
ZywgIkJhc2UgdHlwZSBvZiBlbnVtIGlzIG5vdCBhbiBpbnRlZ2VyOiAiICsgbm9kZS5iYXNlVHlw
ZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKGxldCBtZW1iZXIgb2Ygbm9kZS5tZW1iZXJzKSB7
CisgICAgICAgICAgICBpZiAoIW1lbWJlci52YWx1ZSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGV0IG1lbWJlclR5cGUgPSBtZW1iZXIudmFs
dWUudmlzaXQodGhpcyk7CisgICAgICAgICAgICBpZiAoIWJhc2VUeXBlLmVxdWFsc1dpdGhDb21t
aXQobWVtYmVyVHlwZSkpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IobWVt
YmVyLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBlIG9mIGVudW0gbWVtYmVyICIgKyBtZW1iZXIu
dmFsdWUubmFtZSArICIgZG9lcyBub3QgcGF0Y2ggZW51bSBiYXNlIHR5cGUgKG1lbWJlciB0eXBl
IGlzICIgKyBtZW1iZXJUeXBlICsgIiwgZW51bSBiYXNlIHR5cGUgaXMgIiArIG5vZGUuYmFzZVR5
cGUgKyAiKSIpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBsZXQgbmV4dFZhbHVlID0g
YmFzZVR5cGUuZGVmYXVsdFZhbHVlOworICAgICAgICBmb3IgKGxldCBtZW1iZXIgb2Ygbm9kZS5t
ZW1iZXJzKSB7CisgICAgICAgICAgICBpZiAobWVtYmVyLnZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgbmV4dFZhbHVlID0gYmFzZVR5cGUuc3VjY2Vzc29yVmFsdWUobWVtYmVyLnZhbHVlLnZhbHVl
Rm9yU2VsZWN0ZWRUeXBlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbWVtYmVyLnZhbHVlID0gYmFzZVR5cGUuY3Jl
YXRlTGl0ZXJhbChtZW1iZXIub3JpZ2luLCBuZXh0VmFsdWUpOworICAgICAgICAgICAgbmV4dFZh
bHVlID0gYmFzZVR5cGUuc3VjY2Vzc29yVmFsdWUobmV4dFZhbHVlKTsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgbGV0IG1lbWJlckFycmF5ID0gQXJyYXkuZnJvbShub2RlLm1lbWJlcnMp
OworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbWJlckFycmF5Lmxlbmd0aDsgKytpKSB7
CisgICAgICAgICAgICBsZXQgbWVtYmVyID0gbWVtYmVyQXJyYXlbaV07CisgICAgICAgICAgICBm
b3IgKGxldCBqID0gaSArIDE7IGogPCBtZW1iZXJBcnJheS5sZW5ndGg7ICsraikgeworICAgICAg
ICAgICAgICAgIGxldCBvdGhlck1lbWJlciA9IG1lbWJlckFycmF5W2pdOworICAgICAgICAgICAg
ICAgIGlmIChiYXNlVHlwZS52YWx1ZXNFcXVhbChtZW1iZXIudmFsdWUudmFsdWVGb3JTZWxlY3Rl
ZFR5cGUsIG90aGVyTWVtYmVyLnZhbHVlLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKSkKKyAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3RoZXJNZW1iZXIub3JpZ2luLm9yaWdp
blN0cmluZywgIkR1cGxpY2F0ZSBlbnVtIG1lbWJlciB2YWx1ZSAoIiArIG1lbWJlci5uYW1lICsg
IiBoYXMgIiArIG1lbWJlci52YWx1ZS52YWx1ZUZvclNlbGVjdGVkVHlwZSArICIgd2hpbGUgIiAr
IG90aGVyTWVtYmVyLm5hbWUgKyAiIGhhcyAiICsgb3RoZXJNZW1iZXIudmFsdWUudmFsdWVGb3JT
ZWxlY3RlZFR5cGUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBsZXQgZm91bmRaZXJvID0gZmFsc2U7CisgICAgICAgIGZvciAobGV0IG1lbWJlciBvZiBub2Rl
Lm1lbWJlcnMpIHsKKyAgICAgICAgICAgIGlmIChiYXNlVHlwZS52YWx1ZXNFcXVhbChtZW1iZXIu
dmFsdWUudmFsdWVGb3JTZWxlY3RlZFR5cGUsIGJhc2VUeXBlLmRlZmF1bHRWYWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICBmb3VuZFplcm8gPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZm91bmRaZXJvKQorICAgICAg
ICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRW51
bSBkb2VzIG5vdCBoYXZlIGEgbWVtYmVyIHdpdGggdGhlIHZhbHVlIHplcm8iKTsKKyAgICB9Cisg
ICAgCiAgICAgX2NoZWNrVHlwZUFyZ3VtZW50cyhvcmlnaW4sIHR5cGVQYXJhbWV0ZXJzLCB0eXBl
QXJndW1lbnRzKQogICAgIHsKICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eXBlUGFyYW1l
dGVycy5sZW5ndGg7ICsraSkgewpAQCAtMzQ1LDYgKzM5NSwxMSBAQCBjbGFzcyBDaGVja2VyIGV4
dGVuZHMgVmlzaXRvciB7CiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3JhbS5pbnRy
aW5zaWNzLmJvb2w7CiAgICAgfQorICAgIAorICAgIHZpc2l0RW51bUxpdGVyYWwobm9kZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBub2RlLm1lbWJlci5lbnVtVHlwZTsKKyAgICB9CiAKICAgICBf
cmVxdWlyZUJvb2woZXhwcmVzc2lvbikKICAgICB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9DcmVhdGVMaXRlcmFsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0NyZWF0ZUxpdGVyYWwuanMJKHJldmlzaW9uIDIyMjE5MikKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NyZWF0ZUxpdGVyYWwuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTQyLDYgKzQyLDIwIEBAIGZ1bmN0aW9uIGNyZWF0ZUxpdGVyYWwoY29uZmlnKQogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBnZXQgdmFsdWUoKSB7IHJldHVybiB0aGlzLl92YWx1
ZTsgfQorICAgICAgICAKKyAgICAgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBvbmNl
IHdlIHN1cHBvcnQgaW50NjQsIHdlJ2xsIG5lZWQgdGhhdCB0byBiZSByZXByZXNlbnRlZCBhcyBh
biBvYmplY3QKKyAgICAgICAgLy8gcmF0aGVyIHRoYW4gYXMgYSBwcmltaXRpdmUuIFRoZW4gd2Un
bGwgbmVlZCB0byBjb252ZXJ0LgorICAgICAgICBnZXQgdmFsdWVGb3JTZWxlY3RlZFR5cGUoKQor
ICAgICAgICB7CisgICAgICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZS50eXBlLnVuaWZ5Tm9k
ZTsKKyAgICAgICAgICAgIGlmICghdHlwZSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoIkNhbm5vdCBnZXQgdHlwZSBmb3IgIiArIHRoaXMpOworICAgICAgICAgICAgbGV0IGZ1bmMg
PSB0eXBlWyJmb3JtYXRWYWx1ZUZyb20iICsgY29uZmlnLmxpdGVyYWxDbGFzc05hbWVdOworICAg
ICAgICAgICAgaWYgKCFmdW5jKQorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fu
bm90IGdldCBmdW5jdGlvbiB0byBmb3JtYXQgdHlwZSBmb3IgIiArIGNvbmZpZy5saXRlcmFsQ2xh
c3NOYW1lICsgIiBmcm9tICIgKyB0eXBlKTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jLmNhbGwo
dHlwZSwgdGhpcy52YWx1ZSk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGdldCBpc0Nv
bnN0ZXhwcigpIHsgcmV0dXJuIHRydWU7IH0KICAgICAgICAgZ2V0IGlzTGl0ZXJhbCgpIHsgcmV0
dXJuIHRydWU7IH0KICAgICAgICAgCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9Eb3VibGVMaXRlcmFsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0RvdWJsZUxpdGVyYWwuanMJKHJldmlzaW9uIDIyMjE5MikKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0RvdWJsZUxpdGVyYWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI1
LDYgKzI1LDcgQEAKICJ1c2Ugc3RyaWN0IjsKIAogbGV0IERvdWJsZUxpdGVyYWwgPSBjcmVhdGVM
aXRlcmFsKHsKKyAgICBsaXRlcmFsQ2xhc3NOYW1lOiAiRG91YmxlTGl0ZXJhbCIsCiAgICAgcHJl
ZmVycmVkVHlwZU5hbWU6ICJkb3VibGUiLAogICAgIAogICAgIGNyZWF0ZVR5cGUob3JpZ2luLCB2
YWx1ZSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVy
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJC
dWlsZGVyLmpzCShyZXZpc2lvbiAyMjIxOTIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9FQnVmZmVyQnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtOTgsNiArOTgsMTEgQEAg
Y2xhc3MgRUJ1ZmZlckJ1aWxkZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgbm9kZS5lUHRy
ID0gRVB0ci5ib3goKTsKICAgICB9CiAgICAgCisgICAgdmlzaXRFbnVtTGl0ZXJhbChub2RlKQor
ICAgIHsKKyAgICAgICAgbm9kZS5lUHRyID0gRVB0ci5ib3goKTsKKyAgICB9CisgICAgCiAgICAg
dmlzaXRMb2dpY2FsTm90KG5vZGUpCiAgICAgewogICAgICAgICBub2RlLmVQdHIgPSBFUHRyLmJv
eCgpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bUxpdGVyYWwuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bUxpdGVyYWwu
anMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bUxp
dGVyYWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBFbnVt
TGl0ZXJhbCBleHRlbmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbWVt
YmVyKQorICAgIHsKKyAgICAgICAgc3VwZXIob3JpZ2luKTsKKyAgICAgICAgdGhpcy5fbWVtYmVy
ID0gbWVtYmVyOworICAgIH0KKyAgICAKKyAgICBnZXQgbWVtYmVyKCkgeyByZXR1cm4gdGhpcy5f
bWVtYmVyOyB9CisgICAgZ2V0IGlzQ29uc3RleHByKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAor
ICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLm1lbWJlci5lbnVtVHlw
ZS5uYW1lICsgIi4iICsgdGhpcy5tZW1iZXIubmFtZTsKKyAgICB9Cit9CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FbnVtTWVtYmVyLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VudW1NZW1iZXIuanMJKG5vbmV4aXN0ZW50KQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bU1lbWJlci5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisidXNlIHN0cmljdCI7CisKK2NsYXNzIEVudW1NZW1iZXIgZXh0ZW5kcyBOb2RlIHsK
KyAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIHZhbHVlKQorICAgIHsKKyAgICAgICAgc3Vw
ZXIoKTsKKyAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOworICAgICAgICB0aGlzLl9uYW1l
ID0gbmFtZTsKKyAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlOworICAgIH0KKyAgICAKKyAgICBn
ZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9CisgICAgZ2V0IG5hbWUoKSB7IHJl
dHVybiB0aGlzLl9uYW1lOyB9CisgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAg
bGV0IHJlc3VsdCA9IHRoaXMubmFtZTsKKyAgICAgICAgaWYgKHRoaXMudmFsdWUpCisgICAgICAg
ICAgICByZXN1bHQgKz0gIiA9ICIgKyB0aGlzLnZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KK30KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VudW1UeXBl
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VudW1UeXBl
LmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VudW1U
eXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgRW51bVR5
cGUgZXh0ZW5kcyBUeXBlIHsKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIGJhc2VUeXBl
KQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2lu
OworICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKKyAgICAgICAgdGhpcy5fYmFzZVR5cGUgPSBi
YXNlVHlwZTsKKyAgICAgICAgdGhpcy5fbWVtYmVycyA9IG5ldyBNYXAoKTsKKyAgICB9CisgICAg
CisgICAgYWRkKG1lbWJlcikKKyAgICB7CisgICAgICAgIGlmICh0aGlzLl9tZW1iZXJzLmhhcyht
ZW1iZXIubmFtZSkpCisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihtZW1iZXIub3Jp
Z2luLm9yaWdpblN0cmluZywgIkR1cGxpY2F0ZSBlbnVtIG1lbWJlciBuYW1lOiAiICsgbWVtYmVy
Lm5hbWUpOworICAgICAgICBtZW1iZXIuZW51bVR5cGUgPSB0aGlzOworICAgICAgICB0aGlzLl9t
ZW1iZXJzLnNldChtZW1iZXIubmFtZSwgbWVtYmVyKTsKKyAgICB9CisgICAgCisgICAgZ2V0IG9y
aWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQorICAgIGdldCBuYW1lKCkgeyByZXR1cm4g
dGhpcy5fbmFtZTsgfQorICAgIGdldCBiYXNlVHlwZSgpIHsgcmV0dXJuIHRoaXMuX2Jhc2VUeXBl
OyB9CisgICAgCisgICAgZ2V0IG1lbWJlck5hbWVzKCkgeyByZXR1cm4gdGhpcy5fbWVtYmVycy5r
ZXlzKCk7IH0KKyAgICBtZW1iZXJCeU5hbWUobmFtZSkgeyByZXR1cm4gdGhpcy5fbWVtYmVycy5n
ZXQobmFtZSk7IH0KKyAgICBnZXQgbWVtYmVycygpIHsgcmV0dXJuIHRoaXMuX21lbWJlcnMudmFs
dWVzKCk7IH0KKyAgICBnZXQgbWVtYmVyTWFwKCkgeyByZXR1cm4gdGhpcy5fbWVtYmVyczsgfQor
ICAgIAorICAgIGdldCBpc1ByaW1pdGl2ZSgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICBw
b3B1bGF0ZURlZmF1bHRWYWx1ZShidWZmZXIsIG9mZnNldCkKKyAgICB7CisgICAgICAgIHRoaXMu
YmFzZVR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUoYnVmZmVyLCBvZmZzZXQpOworICAgIH0KKyAg
ICAKKyAgICBnZXQgc2l6ZSgpIHsgcmV0dXJuIHRoaXMuYmFzZVR5cGUuc2l6ZTsgfQorICAgIAor
ICAgIHRvU3RyaW5nKCkKKyAgICB7CisgICAgICAgIHJldHVybiAiZW51bSAiICsgdGhpcy5uYW1l
ICsgIiA6ICIgKyB0aGlzLmJhc2VUeXBlICsgIiB7ICIgKyBBcnJheS5mcm9tKHRoaXMubWVtYmVy
cykuam9pbigiLCIpICsgIiB9IjsKKyAgICB9Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9FdmFsdWF0b3IuanMJKHJldmlzaW9uIDIyMjE5MikKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTQ3
LDcgKzE0Nyw3IEBAIGNsYXNzIEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgIAogICAg
IHZpc2l0R2VuZXJpY0xpdGVyYWwobm9kZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBub2RlLmVQ
dHIuYm94KG5vZGUudmFsdWUpOworICAgICAgICByZXR1cm4gbm9kZS5lUHRyLmJveChub2RlLnZh
bHVlRm9yU2VsZWN0ZWRUeXBlKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXROdWxsTGl0ZXJhbChu
b2RlKQpAQCAtMTU5LDYgKzE1OSwxMSBAQCBjbGFzcyBFdmFsdWF0b3IgZXh0ZW5kcyBWaXNpdG9y
IHsKICAgICB7CiAgICAgICAgIHJldHVybiBub2RlLmVQdHIuYm94KG5vZGUudmFsdWUpOwogICAg
IH0KKyAgICAKKyAgICB2aXNpdEVudW1MaXRlcmFsKG5vZGUpCisgICAgeworICAgICAgICByZXR1
cm4gbm9kZS5lUHRyLmJveChub2RlLm1lbWJlci52YWx1ZS52YWx1ZUZvclNlbGVjdGVkVHlwZSk7
CisgICAgfQogCiAgICAgdmlzaXRMb2dpY2FsTm90KG5vZGUpCiAgICAgewpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRmxvYXRMaXRlcmFsLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zsb2F0TGl0ZXJhbC5qcwkocmV2aXNpb24gMjIy
MTkyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRmxvYXRMaXRlcmFsLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAidXNlIHN0cmljdCI7CiAKIGxldCBGbG9h
dExpdGVyYWwgPSBjcmVhdGVMaXRlcmFsKHsKKyAgICBsaXRlcmFsQ2xhc3NOYW1lOiAiRmxvYXRM
aXRlcmFsIiwKICAgICBwcmVmZXJyZWRUeXBlTmFtZTogImZsb2F0IiwKICAgICAKICAgICBjcmVh
dGVUeXBlKG9yaWdpbiwgdmFsdWUpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9JbnRMaXRlcmFsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0ludExpdGVyYWwuanMJKHJldmlzaW9uIDIyMjE5MikKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0ludExpdGVyYWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAKICJ1c2Ugc3RyaWN0IjsKIAogbGV0IEludExpdGVyYWwgPSBjcmVhdGVMaXRlcmFsKHsKKyAg
ICBsaXRlcmFsQ2xhc3NOYW1lOiAiSW50TGl0ZXJhbCIsCiAgICAgcHJlZmVycmVkVHlwZU5hbWU6
ICJpbnQiLAogICAgIAogICAgIGNyZWF0ZVR5cGUob3JpZ2luLCB2YWx1ZSkKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwkocmV2aXNpb24gMjIyMTky
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNjksNyArNjksMTMgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgICAg
ICAgICAgdHlwZS5pc1NpZ25lZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgdHlwZS5jYW5SZXBy
ZXNlbnQgPSB2YWx1ZSA9PiBpc0JpdHdpc2VFcXVpdmFsZW50KHZhbHVlIHwgMCwgdmFsdWUpOwog
ICAgICAgICAgICAgICAgIHR5cGUuc2l6ZSA9IDE7CisgICAgICAgICAgICAgICAgdHlwZS5kZWZh
dWx0VmFsdWUgPSAwOworICAgICAgICAgICAgICAgIHR5cGUuY3JlYXRlTGl0ZXJhbCA9IChvcmln
aW4sIHZhbHVlKSA9PiBJbnRMaXRlcmFsLndpdGhUeXBlKG9yaWdpbiwgdmFsdWUgfCAwLCB0eXBl
KTsKKyAgICAgICAgICAgICAgICB0eXBlLnN1Y2Nlc3NvclZhbHVlID0gdmFsdWUgPT4gKHZhbHVl
ICsgMSkgfCAwOworICAgICAgICAgICAgICAgIHR5cGUudmFsdWVzRXF1YWwgPSAoYSwgYikgPT4g
YSA9PT0gYjsKICAgICAgICAgICAgICAgICB0eXBlLnBvcHVsYXRlRGVmYXVsdFZhbHVlID0gKGJ1
ZmZlciwgb2Zmc2V0KSA9PiBidWZmZXIuc2V0KG9mZnNldCwgMCk7CisgICAgICAgICAgICAgICAg
dHlwZS5mb3JtYXRWYWx1ZUZyb21JbnRMaXRlcmFsID0gdmFsdWUgPT4gdmFsdWUgfCAwOworICAg
ICAgICAgICAgICAgIHR5cGUuZm9ybWF0VmFsdWVGcm9tVWludExpdGVyYWwgPSB2YWx1ZSA9PiB2
YWx1ZSB8IDA7CiAgICAgICAgICAgICB9KTsKIAogICAgICAgICB0aGlzLl9tYXAuc2V0KApAQCAt
ODEsNyArODcsMTMgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgICAgICAgICAgdHlwZS5p
c1NpZ25lZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgIHR5cGUuY2FuUmVwcmVzZW50ID0gdmFs
dWUgPT4gaXNCaXR3aXNlRXF1aXZhbGVudCh2YWx1ZSA+Pj4gMCwgdmFsdWUpOwogICAgICAgICAg
ICAgICAgIHR5cGUuc2l6ZSA9IDE7CisgICAgICAgICAgICAgICAgdHlwZS5kZWZhdWx0VmFsdWUg
PSAwOworICAgICAgICAgICAgICAgIHR5cGUuY3JlYXRlTGl0ZXJhbCA9IChvcmlnaW4sIHZhbHVl
KSA9PiBJbnRMaXRlcmFsLndpdGhUeXBlKG9yaWdpbiwgdmFsdWUgPj4+IDAsIHR5cGUpOworICAg
ICAgICAgICAgICAgIHR5cGUuc3VjY2Vzc29yVmFsdWUgPSB2YWx1ZSA9PiAodmFsdWUgKyAxKSA+
Pj4gMDsKKyAgICAgICAgICAgICAgICB0eXBlLnZhbHVlc0VxdWFsID0gKGEsIGIpID0+IGEgPT09
IGI7CiAgICAgICAgICAgICAgICAgdHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1ZSA9IChidWZmZXIs
IG9mZnNldCkgPT4gYnVmZmVyLnNldChvZmZzZXQsIDApOworICAgICAgICAgICAgICAgIHR5cGUu
Zm9ybWF0VmFsdWVGcm9tSW50TGl0ZXJhbCA9IHZhbHVlID0+IHZhbHVlID4+PiAwOworICAgICAg
ICAgICAgICAgIHR5cGUuZm9ybWF0VmFsdWVGcm9tVWludExpdGVyYWwgPSB2YWx1ZSA9PiB2YWx1
ZSA+Pj4gMDsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHRoaXMuX21hcC5zZXQoCkBAIC05
Myw2ICsxMDUsMTAgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgICAgICAgICAgdHlwZS5p
c051bWJlciA9IHRydWU7CiAgICAgICAgICAgICAgICAgdHlwZS5jYW5SZXByZXNlbnQgPSB2YWx1
ZSA9PiBpc0JpdHdpc2VFcXVpdmFsZW50KE1hdGguZnJvdW5kKHZhbHVlKSwgdmFsdWUpOwogICAg
ICAgICAgICAgICAgIHR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAoYnVmZmVyLCBvZmZzZXQp
ID0+IGJ1ZmZlci5zZXQob2Zmc2V0LCAwKTsKKyAgICAgICAgICAgICAgICB0eXBlLmZvcm1hdFZh
bHVlRnJvbUludExpdGVyYWwgPSB2YWx1ZSA9PiB2YWx1ZTsKKyAgICAgICAgICAgICAgICB0eXBl
LmZvcm1hdFZhbHVlRnJvbVVpbnRMaXRlcmFsID0gdmFsdWUgPT4gdmFsdWU7CisgICAgICAgICAg
ICAgICAgdHlwZS5mb3JtYXRWYWx1ZUZyb21GbG9hdExpdGVyYWwgPSB2YWx1ZSA9PiB2YWx1ZTsK
KyAgICAgICAgICAgICAgICB0eXBlLmZvcm1hdFZhbHVlRnJvbURvdWJsZUxpdGVyYWwgPSB2YWx1
ZSA9PiB2YWx1ZTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHRoaXMuX21hcC5zZXQoCkBA
IC0xMDQsNiArMTIwLDEwIEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgICAgIHR5
cGUuaXNOdW1iZXIgPSB0cnVlOwogICAgICAgICAgICAgICAgIHR5cGUuY2FuUmVwcmVzZW50ID0g
dmFsdWUgPT4gdHJ1ZTsKICAgICAgICAgICAgICAgICB0eXBlLnBvcHVsYXRlRGVmYXVsdFZhbHVl
ID0gKGJ1ZmZlciwgb2Zmc2V0KSA9PiBidWZmZXIuc2V0KG9mZnNldCwgMCk7CisgICAgICAgICAg
ICAgICAgdHlwZS5mb3JtYXRWYWx1ZUZyb21JbnRMaXRlcmFsID0gdmFsdWUgPT4gdmFsdWU7Cisg
ICAgICAgICAgICAgICAgdHlwZS5mb3JtYXRWYWx1ZUZyb21VaW50TGl0ZXJhbCA9IHZhbHVlID0+
IHZhbHVlOworICAgICAgICAgICAgICAgIHR5cGUuZm9ybWF0VmFsdWVGcm9tRmxvYXRMaXRlcmFs
ID0gdmFsdWUgPT4gdmFsdWU7CisgICAgICAgICAgICAgICAgdHlwZS5mb3JtYXRWYWx1ZUZyb21E
b3VibGVMaXRlcmFsID0gdmFsdWUgPT4gdmFsdWU7CiAgICAgICAgICAgICB9KTsKIAogICAgICAg
ICB0aGlzLl9tYXAuc2V0KApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFt
ZVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L05hbWVSZXNvbHZlci5qcwkocmV2aXNpb24gMjIyMTkyKQorKysgVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNTUsNiArMjU1
LDE4IEBAIGNsYXNzIE5hbWVSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgIAogICAgIHZp
c2l0RG90RXhwcmVzc2lvbihub2RlKQogICAgIHsKKyAgICAgICAgLy8gVGhpcyBjb3VsZCBiZSBh
IHJlZmVyZW5jZSB0byBhbiBlbnVtLiBMZXQncyByZXNvbHZlIHRoYXQgbm93LgorICAgICAgICBp
ZiAobm9kZS5zdHJ1Y3QgaW5zdGFuY2VvZiBWYXJpYWJsZVJlZikgeworICAgICAgICAgICAgbGV0
IGVudW1UeXBlID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KFR5cGUsIG5vZGUuc3RydWN0Lm5hbWUp
OworICAgICAgICAgICAgaWYgKGVudW1UeXBlICYmIGVudW1UeXBlIGluc3RhbmNlb2YgRW51bVR5
cGUpIHsKKyAgICAgICAgICAgICAgICBsZXQgZW51bU1lbWJlciA9IGVudW1UeXBlLm1lbWJlckJ5
TmFtZShub2RlLmZpZWxkTmFtZSk7CisgICAgICAgICAgICAgICAgaWYgKCFlbnVtTWVtYmVyKQor
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJFbnVtICIgKyBlbnVtVHlwZS5uYW1lICsgIiBkb2VzIG5vdCBoYXZlIGEgbWVt
YmVyIG5hbWVkICIgKyBub2RlLmZpZWxkTmFtZSk7CisgICAgICAgICAgICAgICAgbm9kZS5iZWNv
bWUobmV3IEVudW1MaXRlcmFsKG5vZGUub3JpZ2luLCBlbnVtTWVtYmVyKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAogICAgICAg
ICB0aGlzLl9oYW5kbGVQcm9wZXJ0eUFjY2Vzcyhub2RlKTsKICAgICAgICAgc3VwZXIudmlzaXRE
b3RFeHByZXNzaW9uKG5vZGUpOwogICAgIH0KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1BhcnNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1BhcnNlLmpzCShyZXZpc2lvbiAyMjIxOTIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9QYXJzZS5qcwkod29ya2luZyBjb3B5KQpAQCAtOTMxLDYgKzkzMSwzNSBAQCBmdW5j
dGlvbiBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgIHJldHVybiByZXN1
bHQ7CiAgICAgfQogICAgIAorICAgIGZ1bmN0aW9uIHBhcnNlRW51bU1lbWJlcigpCisgICAgewor
ICAgICAgICBsZXQgbmFtZSA9IGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIik7CisgICAgICAgIGxl
dCB2YWx1ZSA9IG51bGw7CisgICAgICAgIGlmICh0cnlDb25zdW1lKCI9IikpCisgICAgICAgICAg
ICB2YWx1ZSA9IHBhcnNlQ29uc3RleHByKCk7CisgICAgICAgIHJldHVybiBuZXcgRW51bU1lbWJl
cihuYW1lLCBuYW1lLnRleHQsIHZhbHVlKTsKKyAgICB9CisgICAgCisgICAgZnVuY3Rpb24gcGFy
c2VFbnVtVHlwZSgpCisgICAgeworICAgICAgICBjb25zdW1lKCJlbnVtIik7CisgICAgICAgIGxl
dCBuYW1lID0gY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKTsKKyAgICAgICAgbGV0IGJhc2VUeXBl
OworICAgICAgICBpZiAodHJ5Q29uc3VtZSgiOiIpKQorICAgICAgICAgICAgYmFzZVR5cGUgPSBw
YXJzZVR5cGUoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYmFzZVR5cGUgPSBuZXcgVHlw
ZVJlZihuYW1lLCAiaW50IiwgW10pOworICAgICAgICBjb25zdW1lKCJ7Iik7CisgICAgICAgIGxl
dCByZXN1bHQgPSBuZXcgRW51bVR5cGUobmFtZSwgbmFtZS50ZXh0LCBiYXNlVHlwZSk7CisgICAg
ICAgIHdoaWxlICghdGVzdCgifSIpKSB7CisgICAgICAgICAgICByZXN1bHQuYWRkKHBhcnNlRW51
bU1lbWJlcigpKTsKKyAgICAgICAgICAgIGlmICghdHJ5Q29uc3VtZSgiLCIpKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGNvbnN1bWUoIn0iKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCiAgICAgZm9yICg7OykgewogICAgICAgICBsZXQg
dG9rZW4gPSBsZXhlci5wZWVrKCk7CiAgICAgICAgIGlmICghdG9rZW4pCkBAIC05NDYsNyArOTc1
LDcgQEAgZnVuY3Rpb24gcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBvcmlnaW5LaQogICAgICAgICBl
bHNlIGlmICh0b2tlbi50ZXh0ID09ICJzdHJ1Y3QiKQogICAgICAgICAgICAgcHJvZ3JhbS5hZGQo
cGFyc2VTdHJ1Y3RUeXBlKCkpOwogICAgICAgICBlbHNlIGlmICh0b2tlbi50ZXh0ID09ICJlbnVt
IikKLSAgICAgICAgICAgIHByb2dyYW0uYWRkKHBhcnNlRW51bSgpKTsKKyAgICAgICAgICAgIHBy
b2dyYW0uYWRkKHBhcnNlRW51bVR5cGUoKSk7CiAgICAgICAgIGVsc2UgaWYgKHRva2VuLnRleHQg
PT0gInByb3RvY29sIikKICAgICAgICAgICAgIHByb2dyYW0uYWRkKHBhcnNlUHJvdG9jb2xEZWNs
KCkpOwogICAgICAgICBlbHNlCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9S
ZXdyaXRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9S
ZXdyaXRlci5qcwkocmV2aXNpb24gMjIyMTkyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvUmV3cml0ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDcgQEAgY2xhc3Mg
UmV3cml0ZXIgewogICAgIHZpc2l0U3RydWN0VHlwZShub2RlKSB7IHJldHVybiBub2RlOyB9CiAg
ICAgdmlzaXRDb25zdGV4cHJUeXBlUGFyYW1ldGVyKG5vZGUpIHsgcmV0dXJuIG5vZGU7IH0KICAg
ICB2aXNpdFByb3RvY29sRGVjbChub2RlKSB7IHJldHVybiBub2RlOyB9CisgICAgdmlzaXRFbnVt
VHlwZShub2RlKSB7IHJldHVybiBub2RlOyB9CiAKICAgICAvLyBUaGlzIGlzIGFsbW9zdCB3cm9u
Zy4gV2UgaW5zdGFudGlhdGUgRnVuYyBpbiBTdWJzdGl0dXRpb24gaW4gUHJvdG9jb2xEZWNsLiBU
aGVuLCB3ZSBlbmQgdXAKICAgICAvLyBub3QgcmV3cml0aW5nIHR5cGUgdmFyaWFibGVzLiBJIHRo
aW5rIHRoYXQganVzdCB3b3JrcyBiZWNhdXNlIG5vdCByZXdyaXRpbmcgdGhlbSB0aGVyZSBpcyBP
Sy4KQEAgLTE0MSw2ICsxNDIsMTggQEAgY2xhc3MgUmV3cml0ZXIgewogICAgICAgICByZXR1cm4g
bmV3IEZpZWxkKG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUudHlwZS52aXNpdCh0aGlzKSk7
CiAgICAgfQogICAgIAorICAgIHZpc2l0RW51bU1lbWJlcihub2RlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIG5ldyBFbnVtTWVtYmVyKG5vZGUub3JpZ2luLCBub2RlLm5hbWUsIG5vZGUudmFsdWUu
dmlzaXQodGhpcykpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEVudW1MaXRlcmFsKG5vZGUpCisg
ICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEVudW1MaXRlcmFsKG5vZGUub3JpZ2luLCBu
b2RlLm1lbWJlcik7CisgICAgICAgIHJlc3VsdC5lUHRyID0gbm9kZS5lUHRyOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICB2aXNpdFJlZmVyZW5jZVR5cGUobm9kZSkK
ICAgICB7CiAgICAgICAgIHJldHVybiBuZXcgbm9kZS5jb25zdHJ1Y3Rvcihub2RlLnJvZ2lpbiwg
bm9kZS5hZGRyZXNzU3BhY2UsIG5vZGUuZWxlbWVudFR5cGUudmlzaXQodGhpcykpOwpJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpzCShyZXZpc2lvbiAy
MjIxOTIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC00Myw2ICs0Myw3IEBAIGNsYXNzIFN0cnVjdFR5cGUgZXh0ZW5kcyBU
eXBlIHsKICAgICB9CiAgICAgCiAgICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9
CisgICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQogICAgIGdldCB0eXBl
UGFyYW1ldGVycygpIHsgcmV0dXJuIHRoaXMuX3R5cGVQYXJhbWV0ZXJzOyB9CiAgICAgCiAgICAg
Z2V0IGZpZWxkTmFtZXMoKSB7IHJldHVybiB0aGlzLl9maWVsZHMua2V5cygpOyB9CkBAIC02NCw3
ICs2NSw3IEBAIGNsYXNzIFN0cnVjdFR5cGUgZXh0ZW5kcyBUeXBlIHsKICAgICAgICAgCiAgICAg
ICAgIGlmICh0eXBlQXJndW1lbnRzKSB7CiAgICAgICAgICAgICBpZiAodHlwZUFyZ3VtZW50cy5s
ZW5ndGggIT0gdGhpcy50eXBlUGFyYW1ldGVycy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIldyb25nIG51bWJlciBvZiB0
eXBlIGFyZ3VtZW50cyB0byBpbnN0YW50aWF0aW9uIik7CisgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IFdUeXBlRXJyb3IodGhpcy5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiV3JvbmcgbnVtYmVyIG9m
IHR5cGUgYXJndW1lbnRzIHRvIGluc3RhbnRpYXRpb24iKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKCF0eXBlQXJndW1lbnRzLmxlbmd0aCkKICAgICAgICAgICAgICAgICByZXR1cm4g
dGhpczsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHJldmlz
aW9uIDIyMjE5MikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsOSBAQAogPHNjcmlwdCBzcmM9IkVCdWZmZXIuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkVCdWZmZXJCdWlsZGVyLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJFUHRyLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJFbnVtTGl0ZXJhbC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iRW51bU1lbWJlci5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iRW51bVR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkV2YWx1YXRpb25D
b21tb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkV2YWx1YXRvci5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iRXhwcmVzc2lvbkZpbmRlci5qcyI+PC9zY3JpcHQ+CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHJldmlzaW9uIDIyMjE5MikKKysrIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw2
ICsxMDEsMTQgQEAgZnVuY3Rpb24gY2hlY2tJbnQocHJvZ3JhbSwgcmVzdWx0LCBleHBlYwogICAg
IGNoZWNrTnVtYmVyKHByb2dyYW0sIHJlc3VsdCwgZXhwZWN0ZWQpOwogfQogCitmdW5jdGlvbiBj
aGVja0VudW0ocHJvZ3JhbSwgcmVzdWx0LCBleHBlY3RlZCkKK3sKKyAgICBpZiAoIShyZXN1bHQu
dHlwZSBpbnN0YW5jZW9mIEVudW1UeXBlKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9u
ZyByZXN1bHQgdHlwZTsgcmVzdWx0OiAiICsgcmVzdWx0KTsKKyAgICBpZiAocmVzdWx0LnZhbHVl
ICE9IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdDogIiAr
IHJlc3VsdC52YWx1ZSArICIgKGV4cGVjdGVkICIgKyBleHBlY3RlZCArICIpIik7Cit9CisKIGZ1
bmN0aW9uIGNoZWNrVWludChwcm9ncmFtLCByZXN1bHQsIGV4cGVjdGVkKQogewogICAgIGlmICgh
cmVzdWx0LnR5cGUuZXF1YWxzKHByb2dyYW0uaW50cmluc2ljcy51aW50MzIpKQpAQCAtMzg5NCw2
ICszOTAyLDM4IEBAIGZ1bmN0aW9uIFRFU1RfYnVpbHRpblZlY3RvcnMoKQogICAgIGNoZWNrQm9v
bChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvb2Q2IiwgW10sIFtdKSwgZmFsc2Up
OwogfQogCitmdW5jdGlvbiBURVNUX3NpbXBsZUVudW0oKQoreworICAgIGxldCBwcm9ncmFtID0g
ZG9QcmVwKGAKKyAgICAgICAgZW51bSBGb28geworICAgICAgICAgICAgV2FyLAorICAgICAgICAg
ICAgRmFtaW5lLAorICAgICAgICAgICAgUGVzdGlsZW5jZSwKKyAgICAgICAgICAgIERlYXRoCisg
ICAgICAgIH0KKyAgICAgICAgRm9vIHdhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBGb28uV2FyOworICAgICAgICB9CisgICAgICAgIEZvbyBmYW1pbmUoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gRm9vLkZhbWluZTsKKyAgICAgICAgfQorICAgICAgICBGb28gcGVz
dGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uUGVzdGlsZW5jZTsK
KyAgICAgICAgfQorICAgICAgICBGb28gZGVhdGgoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gRm9vLkRlYXRoOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tFbnVtKHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAid2FyIiwgW10sIFtdKSwgMCk7CisgICAgY2hlY2tF
bnVtKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZmFtaW5lIiwgW10sIFtdKSwgMSk7
CisgICAgY2hlY2tFbnVtKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAicGVzdGlsZW5j
ZSIsIFtdLCBbXSksIDIpOworICAgIGNoZWNrRW51bShwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImRlYXRoIiwgW10sIFtdKSwgMyk7Cit9CisKIGxldCBmaWx0ZXIgPSAvLiovOyAvLyBy
dW4gZXZlcnl0aGluZyBieSBkZWZhdWx0CiBpZiAodGhpc1siYXJndW1lbnRzIl0pIHsKICAgICBm
b3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgewpJbmRleDogVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVWludExpdGVyYWwuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVWludExpdGVyYWwuanMJKHJldmlzaW9uIDIyMjE5
MikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1VpbnRMaXRlcmFsLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAidXNlIHN0cmljdCI7CiAKIGxldCBVaW50TGl0
ZXJhbCA9IGNyZWF0ZUxpdGVyYWwoeworICAgIGxpdGVyYWxDbGFzc05hbWU6ICJVaW50TGl0ZXJh
bCIsCiAgICAgcHJlZmVycmVkVHlwZU5hbWU6ICJ1aW50IiwKICAgICAKICAgICBjcmVhdGVUeXBl
KG9yaWdpbiwgdmFsdWUpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNp
dG9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0
b3IuanMJKHJldmlzaW9uIDIyMjE5MikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1Zpc2l0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsMjIgQEAgY2xhc3MgVmlz
aXRvciB7CiAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKICAgICB9CiAgICAgCisgICAg
dmlzaXRFbnVtVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5iYXNlVHlwZS52aXNpdCh0
aGlzKTsKKyAgICAgICAgZm9yIChsZXQgbWVtYmVyIG9mIG5vZGUubWVtYmVycykKKyAgICAgICAg
ICAgIG1lbWJlci52aXNpdCh0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRFbnVtTWVtYmVy
KG5vZGUpCisgICAgeworICAgICAgICBOb2RlLnZpc2l0KG5vZGUudmFsdWUsIHRoaXMpOworICAg
IH0KKyAgICAKKyAgICB2aXNpdEVudW1MaXRlcmFsKG5vZGUpCisgICAgeworICAgIH0KKyAgICAK
ICAgICB2aXNpdEVsZW1lbnRhbFR5cGUobm9kZSkKICAgICB7CiAgICAgICAgIG5vZGUuZWxlbWVu
dFR5cGUudmlzaXQodGhpcyk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321178</attachid>
            <date>2017-09-18 20:18:24 -0700</date>
            <delta_ts>2017-09-18 20:21:58 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50316</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjE5OCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDExMCBAQAorMjAxNy0wOS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIFdTTCBzaG91bGQgc3VwcG9ydCBlbnVtCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY5NzcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyBlbnVtLiBF
bnVtcyBtZW1iZXJzIGFyZSByZWZlcmVuY2VkIEphdmEtc3R5bGUuIEZvciBleGFtcGxlLCBpZiB3
ZSBoYXZlIGFuIGVudW0gbGlrZToKKyAgICAgICAgCisgICAgICAgICAgICBlbnVtIEJhbmsgewor
ICAgICAgICAgICAgICAgIEdQLAorICAgICAgICAgICAgICAgIEZQCisgICAgICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBUaGVuIHlvdSByZWZlciB0byB0aGUgbWVtYmVycyBieSBzYXlpbmcg
QmFuay5HUCBhbmQgQmFuay5GUC4KKyAgICAgICAgCisgICAgICAgIEFsc28gYWRkcyBhIGhhY2sg
dGhhdCBtYWtlcyBvcGVyYXRvci0gb24gYSBsaXRlcmFsIGZvbGQgdGhlIGxpdGVyYWwuIFRoaXMg
Zml4ZXMgdHdvIGlzc3VlczoKKyAgICAgICAgCisgICAgICAgIC0gTGV0cyB5b3UgdXNlIG5lZ2F0
aXZlIGxpdGVyYWxzIGluIGNvbnN0ZXhwcnMuCisgICAgICAgIC0gTWVhbnMgdGhhdCBuZWdhdGl2
ZSBsaXRlcmFscyBhbHNvIGdldCBsaXRlcmFsIHR5cGUgdW5pZmljYXRpb24uCisgICAgICAgIAor
ICAgICAgICBXU0wncyBjb25zdGV4cHIgc3VwcG9ydCBpcyByZWFsbHkgdGhpbiwgYnV0IEkgdGhp
bmsgaXQncyBhbGwgd2UgcmVhbGx5IG5lZWQgZm9yIG5vdy4KKyAgICAgICAgCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0NoZWNrZXIuanM6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdEVu
dW1UeXBlKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0RW51bUxpdGVyYWwpOgor
ICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbnN0ZXhwckZvbGRlci5qczogQWRk
ZWQuCisgICAgICAgIChDb25zdGV4cHJGb2xkZXIucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Np
b24pOgorICAgICAgICAoQ29uc3RleHByRm9sZGVyLnByb3RvdHlwZS52aXNpdFR5cGVPclZhcmlh
YmxlUmVmKToKKyAgICAgICAgKENvbnN0ZXhwckZvbGRlcik6CisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvQ3JlYXRlTGl0ZXJhbC5qczoKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWwu
R2VuZXJpY0xpdGVyYWwucHJvdG90eXBlLmdldCB2YWx1ZUZvclNlbGVjdGVkVHlwZSk6CisgICAg
ICAgIChjcmVhdGVMaXRlcmFsLkdlbmVyaWNMaXRlcmFsLnByb3RvdHlwZS5nZXQgbmVnQ29uc3Rl
eHByKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3VibGVMaXRlcmFsLmpz
OgorICAgICAgICAobGV0LkRvdWJsZUxpdGVyYWwuY3JlYXRlTGl0ZXJhbC5uZWdDb25zdGV4cHIp
OgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzOgor
ICAgICAgICAoRUJ1ZmZlckJ1aWxkZXIucHJvdG90eXBlLnZpc2l0RW51bUxpdGVyYWwpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VudW1MaXRlcmFsLmpzOiBBZGRlZC4KKyAg
ICAgICAgKEVudW1MaXRlcmFsKToKKyAgICAgICAgKEVudW1MaXRlcmFsLnByb3RvdHlwZS5nZXQg
bWVtYmVyKToKKyAgICAgICAgKEVudW1MaXRlcmFsLnByb3RvdHlwZS5nZXQgdHlwZSk6CisgICAg
ICAgIChFbnVtTGl0ZXJhbC5wcm90b3R5cGUuZ2V0IGlzQ29uc3RleHByKToKKyAgICAgICAgKEVu
dW1MaXRlcmFsLnByb3RvdHlwZS51bmlmeUltcGwpOgorICAgICAgICAoRW51bUxpdGVyYWwucHJv
dG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FbnVt
TWVtYmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKEVudW1NZW1iZXIpOgorICAgICAgICAoRW51bU1l
bWJlci5wcm90b3R5cGUuZ2V0IG9yaWdpbik6CisgICAgICAgIChFbnVtTWVtYmVyLnByb3RvdHlw
ZS5nZXQgbmFtZSk6CisgICAgICAgIChFbnVtTWVtYmVyLnByb3RvdHlwZS50b1N0cmluZyk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bVR5cGUuanM6IEFkZGVkLgorICAg
ICAgICAoRW51bVR5cGUpOgorICAgICAgICAoRW51bVR5cGUucHJvdG90eXBlLmFkZCk6CisgICAg
ICAgIChFbnVtVHlwZS5wcm90b3R5cGUuZ2V0IG9yaWdpbik6CisgICAgICAgIChFbnVtVHlwZS5w
cm90b3R5cGUuZ2V0IG5hbWUpOgorICAgICAgICAoRW51bVR5cGUucHJvdG90eXBlLmdldCBiYXNl
VHlwZSk6CisgICAgICAgIChFbnVtVHlwZS5wcm90b3R5cGUuZ2V0IG1lbWJlck5hbWVzKToKKyAg
ICAgICAgKEVudW1UeXBlLnByb3RvdHlwZS5tZW1iZXJCeU5hbWUpOgorICAgICAgICAoRW51bVR5
cGUucHJvdG90eXBlLmdldCBtZW1iZXJzKToKKyAgICAgICAgKEVudW1UeXBlLnByb3RvdHlwZS5n
ZXQgbWVtYmVyTWFwKToKKyAgICAgICAgKEVudW1UeXBlLnByb3RvdHlwZS5nZXQgaXNQcmltaXRp
dmUpOgorICAgICAgICAoRW51bVR5cGUucHJvdG90eXBlLnBvcHVsYXRlRGVmYXVsdFZhbHVlKToK
KyAgICAgICAgKEVudW1UeXBlLnByb3RvdHlwZS5nZXQgc2l6ZSk6CisgICAgICAgIChFbnVtVHlw
ZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0V2YWx1YXRvci5qczoKKyAgICAgICAgKEV2YWx1YXRvci5wcm90b3R5cGUudmlzaXRHZW5lcmlj
TGl0ZXJhbCk6CisgICAgICAgIChFdmFsdWF0b3IucHJvdG90eXBlLnZpc2l0RW51bUxpdGVyYWwp
OgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zsb2F0TGl0ZXJhbC5qczoKKyAg
ICAgICAgKGxldC5GbG9hdExpdGVyYWwuY3JlYXRlTGl0ZXJhbC5uZWdDb25zdGV4cHIpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ZvbGRDb25zdGV4cHJzLmpzOiBBZGRlZC4K
KyAgICAgICAgKGZvbGRDb25zdGV4cHJzKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9JbnRMaXRlcmFsLmpzOgorICAgICAgICAobGV0LkludExpdGVyYWwuY3JlYXRlTGl0ZXJh
bC5uZWdDb25zdGV4cHIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJp
bnNpY3MuanM6CisgICAgICAgIChJbnRyaW5zaWNzKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanM6CisgICAgICAgIChOYW1lUmVzb2x2ZXIucHJvdG90
eXBlLnZpc2l0UHJvdG9jb2xEZWNsKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9QYXJzZS5qczoKKyAgICAgICAgKHBhcnNlQ29uc3RleHByKToKKyAgICAgICAgKHBhcnNlUG9z
c2libGVTdWZmaXgpOgorICAgICAgICAocGFyc2VFbnVtTWVtYmVyKToKKyAgICAgICAgKHBhcnNl
RW51bVR5cGUpOgorICAgICAgICAocGFyc2UpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1ByZXBhcmUuanM6CisgICAgICAgIChwcmVwYXJlKToKKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qczoKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlw
ZS52aXNpdEVudW1UeXBlKToKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdEVudW1N
ZW1iZXIpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0RW51bUxpdGVyYWwpOgor
ICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanM6CisgICAgICAg
IChTdHJ1Y3RUeXBlLnByb3RvdHlwZS5nZXQgb3JpZ2luKToKKyAgICAgICAgKFN0cnVjdFR5cGUu
cHJvdG90eXBlLmluc3RhbnRpYXRlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TeW50aGVzaXplRW51bUZ1bmN0aW9ucy5qczogQWRkZWQuCisgICAgICAgIChzeW50aGVzaXpl
RW51bUZ1bmN0aW9ucyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5o
dG1sOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAg
IChjaGVja0VudW0pOgorICAgICAgICAoVEVTVF9zaW1wbGVFbnVtKToKKyAgICAgICAgKFRFU1Rf
ZW51bVdpdGhNYW51YWxWYWx1ZXMpOgorICAgICAgICAoVEVTVF9lbnVtV2l0aG91dFplcm8pOgor
ICAgICAgICAoVEVTVF9lbnVtQ29uc3RleHByR2VuZXJpY0Z1bmN0aW9uKToKKyAgICAgICAgKFRF
U1RfZW51bUNvbnN0ZXhwckdlbmVyaWNTdHJ1Y3QpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1VpbnRMaXRlcmFsLmpzOgorICAgICAgICAobGV0LlVpbnRMaXRlcmFsLmNyZWF0
ZUxpdGVyYWwubmVnQ29uc3RleHByKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9WaXNpdG9yLmpzOgorICAgICAgICAoVmlzaXRvci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERl
Y2wpOgorCiAyMDE3LTA5LTE4ICBNaWNoYWVsIENhdGFuemFybyAgPG1jYXRhbnphcm9AaWdhbGlh
LmNvbT4KIAogICAgICAgICBbQ01ha2VdIFJlbmFtZSBXZWJLaXQgdGFyZ2V0IHRvIFdlYktpdExl
Z2FjeSBhbmQgcmVuYW1lIFdlYktpdDIgdGFyZ2V0IHRvIFdlYktpdApJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkocmV2aXNpb24gMjIyMTkyKQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC01NSw2ICs1NSw3IEBA
IGxvYWQoIkNoZWNrVW5yZWFjaGFibGVDb2RlLmpzIik7CiBsb2FkKCJDaGVja1dyYXBwZWQuanMi
KTsKIGxvYWQoIkNoZWNrZXIuanMiKTsKIGxvYWQoIkNvbW1hRXhwcmVzc2lvbi5qcyIpOworbG9h
ZCgiQ29uc3RleHByRm9sZGVyLmpzIik7CiBsb2FkKCJDb25zdGV4cHJUeXBlUGFyYW1ldGVyLmpz
Iik7CiBsb2FkKCJDb250aW51ZS5qcyIpOwogbG9hZCgiQ29udmVydFB0clRvQXJyYXlSZWZFeHBy
ZXNzaW9uLmpzIik7CkBAIC02Nyw2ICs2OCw5IEBAIGxvYWQoIkVBcnJheVJlZi5qcyIpOwogbG9h
ZCgiRUJ1ZmZlci5qcyIpOwogbG9hZCgiRUJ1ZmZlckJ1aWxkZXIuanMiKTsKIGxvYWQoIkVQdHIu
anMiKTsKK2xvYWQoIkVudW1MaXRlcmFsLmpzIik7Citsb2FkKCJFbnVtTWVtYmVyLmpzIik7Cits
b2FkKCJFbnVtVHlwZS5qcyIpOwogbG9hZCgiRXZhbHVhdGlvbkNvbW1vbi5qcyIpOwogbG9hZCgi
RXZhbHVhdG9yLmpzIik7CiBsb2FkKCJFeHByZXNzaW9uRmluZGVyLmpzIik7CkBAIC03NSw2ICs3
OSw3IEBAIGxvYWQoIkZpbmRIaWdoWm9tYmllcy5qcyIpOwogbG9hZCgiRmxhdHRlblByb3RvY29s
RXh0ZW5kcy5qcyIpOwogbG9hZCgiRmxvYXRMaXRlcmFsLmpzIik7CiBsb2FkKCJGbG9hdExpdGVy
YWxUeXBlLmpzIik7Citsb2FkKCJGb2xkQ29uc3RleHBycy5qcyIpOwogbG9hZCgiRm9yTG9vcC5q
cyIpOwogbG9hZCgiRnVuYy5qcyIpOwogbG9hZCgiRnVuY0RlZi5qcyIpOwpAQCAtMTMyLDYgKzEz
Nyw3IEBAIGxvYWQoIlN0YW5kYXJkTGlicmFyeS5qcyIpOwogbG9hZCgiU3RydWN0TGF5b3V0QnVp
bGRlci5qcyIpOwogbG9hZCgiU3RydWN0VHlwZS5qcyIpOwogbG9hZCgiU3Vic3RpdHV0aW9uLmpz
Iik7Citsb2FkKCJTeW50aGVzaXplRW51bUZ1bmN0aW9ucy5qcyIpOwogbG9hZCgiU3ludGhlc2l6
ZVN0cnVjdEFjY2Vzc29ycy5qcyIpOwogbG9hZCgiVHlwZURlZi5qcyIpOwogbG9hZCgiVHlwZURl
ZlJlc29sdmVyLmpzIik7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVj
a2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNr
ZXIuanMJKHJldmlzaW9uIDIyMjE5MikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0NoZWNrZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDU2IEBAIGNsYXNzIENoZWNr
ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgfQogICAgIH0KICAgICAKKyAgICB2aXNpdEVu
dW1UeXBlKG5vZGUpCisgICAgeworICAgICAgICBub2RlLmJhc2VUeXBlLnZpc2l0KHRoaXMpOwor
ICAgICAgICAKKyAgICAgICAgbGV0IGJhc2VUeXBlID0gbm9kZS5iYXNlVHlwZS51bmlmeU5vZGU7
CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2VUeXBlLmlzSW50KQorICAgICAgICAgICAgdGhy
b3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQmFzZSB0eXBlIG9m
IGVudW0gaXMgbm90IGFuIGludGVnZXI6ICIgKyBub2RlLmJhc2VUeXBlKTsKKyAgICAgICAgCisg
ICAgICAgIGZvciAobGV0IG1lbWJlciBvZiBub2RlLm1lbWJlcnMpIHsKKyAgICAgICAgICAgIGlm
ICghbWVtYmVyLnZhbHVlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICBsZXQgbWVtYmVyVHlwZSA9IG1lbWJlci52YWx1ZS52aXNpdCh0aGlzKTsK
KyAgICAgICAgICAgIGlmICghYmFzZVR5cGUuZXF1YWxzV2l0aENvbW1pdChtZW1iZXJUeXBlKSkK
KyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihtZW1iZXIub3JpZ2luLm9yaWdp
blN0cmluZywgIlR5cGUgb2YgZW51bSBtZW1iZXIgIiArIG1lbWJlci52YWx1ZS5uYW1lICsgIiBk
b2VzIG5vdCBwYXRjaCBlbnVtIGJhc2UgdHlwZSAobWVtYmVyIHR5cGUgaXMgIiArIG1lbWJlclR5
cGUgKyAiLCBlbnVtIGJhc2UgdHlwZSBpcyAiICsgbm9kZS5iYXNlVHlwZSArICIpIik7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGxldCBuZXh0VmFsdWUgPSBiYXNlVHlwZS5kZWZhdWx0
VmFsdWU7CisgICAgICAgIGZvciAobGV0IG1lbWJlciBvZiBub2RlLm1lbWJlcnMpIHsKKyAgICAg
ICAgICAgIGlmIChtZW1iZXIudmFsdWUpIHsKKyAgICAgICAgICAgICAgICBuZXh0VmFsdWUgPSBi
YXNlVHlwZS5zdWNjZXNzb3JWYWx1ZShtZW1iZXIudmFsdWUudW5pZnlOb2RlLnZhbHVlRm9yU2Vs
ZWN0ZWRUeXBlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbWVtYmVyLnZhbHVlID0gYmFzZVR5cGUuY3JlYXRlTGl0
ZXJhbChtZW1iZXIub3JpZ2luLCBuZXh0VmFsdWUpOworICAgICAgICAgICAgbmV4dFZhbHVlID0g
YmFzZVR5cGUuc3VjY2Vzc29yVmFsdWUobmV4dFZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgbGV0IG1lbWJlckFycmF5ID0gQXJyYXkuZnJvbShub2RlLm1lbWJlcnMpOworICAg
ICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbWJlckFycmF5Lmxlbmd0aDsgKytpKSB7CisgICAg
ICAgICAgICBsZXQgbWVtYmVyID0gbWVtYmVyQXJyYXlbaV07CisgICAgICAgICAgICBmb3IgKGxl
dCBqID0gaSArIDE7IGogPCBtZW1iZXJBcnJheS5sZW5ndGg7ICsraikgeworICAgICAgICAgICAg
ICAgIGxldCBvdGhlck1lbWJlciA9IG1lbWJlckFycmF5W2pdOworICAgICAgICAgICAgICAgIGlm
IChiYXNlVHlwZS52YWx1ZXNFcXVhbChtZW1iZXIudmFsdWUudW5pZnlOb2RlLnZhbHVlRm9yU2Vs
ZWN0ZWRUeXBlLCBvdGhlck1lbWJlci52YWx1ZS51bmlmeU5vZGUudmFsdWVGb3JTZWxlY3RlZFR5
cGUpKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihvdGhlck1lbWJl
ci5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRHVwbGljYXRlIGVudW0gbWVtYmVyIHZhbHVlICgiICsg
bWVtYmVyLm5hbWUgKyAiIGhhcyAiICsgbWVtYmVyLnZhbHVlICsgIiB3aGlsZSAiICsgb3RoZXJN
ZW1iZXIubmFtZSArICIgaGFzICIgKyBvdGhlck1lbWJlci52YWx1ZSArICIpIik7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxldCBmb3VuZFplcm8gPSBmYWxz
ZTsKKyAgICAgICAgZm9yIChsZXQgbWVtYmVyIG9mIG5vZGUubWVtYmVycykgeworICAgICAgICAg
ICAgaWYgKGJhc2VUeXBlLnZhbHVlc0VxdWFsKG1lbWJlci52YWx1ZS51bmlmeU5vZGUudmFsdWVG
b3JTZWxlY3RlZFR5cGUsIGJhc2VUeXBlLmRlZmF1bHRWYWx1ZSkpIHsKKyAgICAgICAgICAgICAg
ICBmb3VuZFplcm8gPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmICghZm91bmRaZXJvKQorICAgICAgICAgICAgdGhyb3cg
bmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRW51bSBkb2VzIG5vdCBo
YXZlIGEgbWVtYmVyIHdpdGggdGhlIHZhbHVlIHplcm8iKTsKKyAgICB9CisgICAgCiAgICAgX2No
ZWNrVHlwZUFyZ3VtZW50cyhvcmlnaW4sIHR5cGVQYXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKQog
ICAgIHsKICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eXBlUGFyYW1ldGVycy5sZW5ndGg7
ICsraSkgewpAQCAtMzQ1LDYgKzM5NSwxMSBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRv
ciB7CiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3JhbS5pbnRyaW5zaWNzLmJvb2w7
CiAgICAgfQorICAgIAorICAgIHZpc2l0RW51bUxpdGVyYWwobm9kZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBub2RlLm1lbWJlci5lbnVtVHlwZTsKKyAgICB9CiAKICAgICBfcmVxdWlyZUJvb2wo
ZXhwcmVzc2lvbikKICAgICB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9D
b25zdGV4cHJGb2xkZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvQ29uc3RleHByRm9sZGVyLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0NvbnN0ZXhwckZvbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisi
dXNlIHN0cmljdCI7CisKKy8vIE5PVEU6IFRoaXMgZG9lc24ndCBsZXQgeW91IG5lZ2F0ZSBjb25z
dGV4cHIgdmFyaWFibGVzLiBJIHRoaW5rIHRoYXQncyBwcm9iYWJseSBPSyBmb3Igbm93LCBidXQg
d2Ugc2hvdWxkCisvLyBmaXggdGhhdCBldmVudHVhbGx5LgorLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzEyMQorCitjbGFzcyBDb25zdGV4cHJGb2xkZXIgZXh0
ZW5kcyBWaXNpdG9yIHsKKyAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCisgICAgeworICAg
ICAgICBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOworICAgICAgICAKKyAgICAgICAg
aWYgKG5vZGUubmFtZSA9PSAib3BlcmF0b3ItIgorICAgICAgICAgICAgJiYgIW5vZGUudHlwZUFy
Z3VtZW50cy5sZW5ndGgKKyAgICAgICAgICAgICYmIG5vZGUuYXJndW1lbnRMaXN0Lmxlbmd0aCA9
PSAxCisgICAgICAgICAgICAmJiBub2RlLmFyZ3VtZW50TGlzdFswXS51bmlmeU5vZGUuaXNDb25z
dGV4cHIKKyAgICAgICAgICAgICYmIG5vZGUuYXJndW1lbnRMaXN0WzBdLnVuaWZ5Tm9kZS5uZWdD
b25zdGV4cHIpIHsKKyAgICAgICAgICAgIG5vZGUuYmVjb21lKG5vZGUuYXJndW1lbnRMaXN0WzBd
LnVuaWZ5Tm9kZS5uZWdDb25zdGV4cHIobm9kZS5vcmlnaW4pKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2aXNpdFR5cGVPclZhcmlhYmxlUmVmKG5v
ZGUpCisgICAgeworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQ3JlYXRlTGl0ZXJhbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9DcmVhdGVMaXRlcmFsLmpzCShyZXZpc2lvbiAyMjIxOTIpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9DcmVhdGVMaXRlcmFsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw5ICs0MiwzMSBAQCBmdW5jdGlvbiBjcmVhdGVMaXRlcmFsKGNvbmZpZykKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH0KKyAg
ICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugb25jZSB3ZSBzdXBw
b3J0IGludDY0LCB3ZSdsbCBuZWVkIHRoYXQgdG8gYmUgcmVwcmVzZW50ZWQgYXMgYW4gb2JqZWN0
CisgICAgICAgIC8vIHJhdGhlciB0aGFuIGFzIGEgcHJpbWl0aXZlLiBUaGVuIHdlJ2xsIG5lZWQg
dG8gY29udmVydC4KKyAgICAgICAgZ2V0IHZhbHVlRm9yU2VsZWN0ZWRUeXBlKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGUudHlwZS51bmlmeU5vZGU7CisgICAg
ICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJDYW5u
b3QgZ2V0IHR5cGUgZm9yICIgKyB0aGlzKTsKKyAgICAgICAgICAgIGxldCBmdW5jID0gdHlwZVsi
Zm9ybWF0VmFsdWVGcm9tIiArIGNvbmZpZy5saXRlcmFsQ2xhc3NOYW1lXTsKKyAgICAgICAgICAg
IGlmICghZnVuYykKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQg
ZnVuY3Rpb24gdG8gZm9ybWF0IHR5cGUgZm9yICIgKyBjb25maWcubGl0ZXJhbENsYXNzTmFtZSAr
ICIgZnJvbSAiICsgdHlwZSk7CisgICAgICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHR5cGUsIHRo
aXMudmFsdWUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBnZXQgaXNDb25zdGV4cHIo
KSB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIGdldCBpc0xpdGVyYWwoKSB7IHJldHVybiB0cnVl
OyB9CiAgICAgICAgIAorICAgICAgICBnZXQgbmVnQ29uc3RleHByKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKCFjb25maWcubmVnQ29uc3RleHByKQorICAgICAgICAgICAgICAgIHJldHVy
biBudWxsOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gKCkgPT4gY29uZmlnLm5l
Z0NvbnN0ZXhwci5jYWxsKHRoaXMpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICB1bmlm
eUltcGwodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcikKICAgICAgICAgewogICAgICAgICAgICAg
aWYgKCEob3RoZXIgaW5zdGFuY2VvZiBHZW5lcmljTGl0ZXJhbCkpCkluZGV4OiBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3VibGVMaXRlcmFsLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RvdWJsZUxpdGVyYWwuanMJKHJldmlzaW9uIDIyMjE5
MikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RvdWJsZUxpdGVyYWwuanMJKHdv
cmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDE0IEBACiAidXNlIHN0cmljdCI7CiAKIGxldCBEb3Vi
bGVMaXRlcmFsID0gY3JlYXRlTGl0ZXJhbCh7CisgICAgbGl0ZXJhbENsYXNzTmFtZTogIkRvdWJs
ZUxpdGVyYWwiLAogICAgIHByZWZlcnJlZFR5cGVOYW1lOiAiZG91YmxlIiwKICAgICAKKyAgICBu
ZWdDb25zdGV4cHIob3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5ldyBJbnRMaXRlcmFs
KG9yaWdpbiwgLXRoaXMudmFsdWUpOworICAgIH0sCisgICAgCiAgICAgY3JlYXRlVHlwZShvcmln
aW4sIHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBEb3VibGVMaXRlcmFsVHlwZShv
cmlnaW4sIHZhbHVlKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZm
ZXJCdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0VCdWZmZXJCdWlsZGVyLmpzCShyZXZpc2lvbiAyMjIxOTIpCisrKyBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwkod29ya2luZyBjb3B5KQpAQCAtOTgsNiAr
OTgsMTEgQEAgY2xhc3MgRUJ1ZmZlckJ1aWxkZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAg
bm9kZS5lUHRyID0gRVB0ci5ib3goKTsKICAgICB9CiAgICAgCisgICAgdmlzaXRFbnVtTGl0ZXJh
bChub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5lUHRyID0gRVB0ci5ib3goKTsKKyAgICB9Cisg
ICAgCiAgICAgdmlzaXRMb2dpY2FsTm90KG5vZGUpCiAgICAgewogICAgICAgICBub2RlLmVQdHIg
PSBFUHRyLmJveCgpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bUxp
dGVyYWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51
bUxpdGVyYWwuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRW51bUxpdGVyYWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitj
bGFzcyBFbnVtTGl0ZXJhbCBleHRlbmRzIEV4cHJlc3Npb24geworICAgIGNvbnN0cnVjdG9yKG9y
aWdpbiwgbWVtYmVyKQorICAgIHsKKyAgICAgICAgc3VwZXIob3JpZ2luKTsKKyAgICAgICAgdGhp
cy5fbWVtYmVyID0gbWVtYmVyOworICAgIH0KKyAgICAKKyAgICBnZXQgbWVtYmVyKCkgeyByZXR1
cm4gdGhpcy5fbWVtYmVyOyB9CisgICAgZ2V0IHR5cGUoKSB7IHJldHVybiB0aGlzLm1lbWJlci5l
bnVtVHlwZTsgfQorICAgIGdldCBpc0NvbnN0ZXhwcigpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAK
KyAgICB1bmlmeUltcGwodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcikKKyAgICB7CisgICAgICAg
IGlmICghKG90aGVyIGluc3RhbmNlb2YgRW51bUxpdGVyYWwpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gdGhpcy5tZW1iZXIgPT0gb3RoZXIubWVtYmVyOworICAg
IH0KKyAgICAgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMu
bWVtYmVyLmVudW1UeXBlLm5hbWUgKyAiLiIgKyB0aGlzLm1lbWJlci5uYW1lOworICAgIH0KK30K
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VudW1NZW1iZXIuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bU1lbWJlci5qcwkobm9u
ZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FbnVtTWVtYmVyLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgRW51bU1lbWJlciBl
eHRlbmRzIE5vZGUgeworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbmFtZSwgdmFsdWUpCisgICAg
eworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47CisgICAg
ICAgIHRoaXMuX25hbWUgPSBuYW1lOworICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7CisgICAg
fQorICAgIAorICAgIGdldCBvcmlnaW4oKSB7IHJldHVybiB0aGlzLl9vcmlnaW47IH0KKyAgICBn
ZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KKyAgICAKKyAgICB0b1N0cmluZygpCisg
ICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5uYW1lOworICAgICAgICBpZiAodGhpcy52
YWx1ZSkKKyAgICAgICAgICAgIHJlc3VsdCArPSAiID0gIiArIHRoaXMudmFsdWU7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRW51bVR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRW51bVR5cGUuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRW51bVR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOwor
CitjbGFzcyBFbnVtVHlwZSBleHRlbmRzIFR5cGUgeworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwg
bmFtZSwgYmFzZVR5cGUpCisgICAgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9v
cmlnaW4gPSBvcmlnaW47CisgICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOworICAgICAgICB0aGlz
Ll9iYXNlVHlwZSA9IGJhc2VUeXBlOworICAgICAgICB0aGlzLl9tZW1iZXJzID0gbmV3IE1hcCgp
OworICAgIH0KKyAgICAKKyAgICBhZGQobWVtYmVyKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMu
X21lbWJlcnMuaGFzKG1lbWJlci5uYW1lKSkKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVy
cm9yKG1lbWJlci5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRHVwbGljYXRlIGVudW0gbWVtYmVyIG5h
bWU6ICIgKyBtZW1iZXIubmFtZSk7CisgICAgICAgIG1lbWJlci5lbnVtVHlwZSA9IHRoaXM7Cisg
ICAgICAgIHRoaXMuX21lbWJlcnMuc2V0KG1lbWJlci5uYW1lLCBtZW1iZXIpOworICAgIH0KKyAg
ICAKKyAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9CisgICAgZ2V0IG5h
bWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9CisgICAgZ2V0IGJhc2VUeXBlKCkgeyByZXR1cm4g
dGhpcy5fYmFzZVR5cGU7IH0KKyAgICAKKyAgICBnZXQgbWVtYmVyTmFtZXMoKSB7IHJldHVybiB0
aGlzLl9tZW1iZXJzLmtleXMoKTsgfQorICAgIG1lbWJlckJ5TmFtZShuYW1lKSB7IHJldHVybiB0
aGlzLl9tZW1iZXJzLmdldChuYW1lKTsgfQorICAgIGdldCBtZW1iZXJzKCkgeyByZXR1cm4gdGhp
cy5fbWVtYmVycy52YWx1ZXMoKTsgfQorICAgIGdldCBtZW1iZXJNYXAoKSB7IHJldHVybiB0aGlz
Ll9tZW1iZXJzOyB9CisgICAgCisgICAgZ2V0IGlzUHJpbWl0aXZlKCkgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIAorICAgIHBvcHVsYXRlRGVmYXVsdFZhbHVlKGJ1ZmZlciwgb2Zmc2V0KQorICAgIHsK
KyAgICAgICAgdGhpcy5iYXNlVHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1ZShidWZmZXIsIG9mZnNl
dCk7CisgICAgfQorICAgIAorICAgIGdldCBzaXplKCkgeyByZXR1cm4gdGhpcy5iYXNlVHlwZS5z
aXplOyB9CisgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICJlbnVt
ICIgKyB0aGlzLm5hbWUgKyAiIDogIiArIHRoaXMuYmFzZVR5cGUgKyAiIHsgIiArIEFycmF5LmZy
b20odGhpcy5tZW1iZXJzKS5qb2luKCIsIikgKyAiIH0iOworICAgIH0KK30KKwpJbmRleDogVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2aXNpb24gMjIyMTky
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgY2xhc3MgRXZhbHVhdG9yIGV4dGVuZHMgVmlzaXRv
ciB7CiAgICAgCiAgICAgdmlzaXRHZW5lcmljTGl0ZXJhbChub2RlKQogICAgIHsKLSAgICAgICAg
cmV0dXJuIG5vZGUuZVB0ci5ib3gobm9kZS52YWx1ZSk7CisgICAgICAgIHJldHVybiBub2RlLmVQ
dHIuYm94KG5vZGUudmFsdWVGb3JTZWxlY3RlZFR5cGUpOwogICAgIH0KICAgICAKICAgICB2aXNp
dE51bGxMaXRlcmFsKG5vZGUpCkBAIC0xNTksNiArMTU5LDExIEBAIGNsYXNzIEV2YWx1YXRvciBl
eHRlbmRzIFZpc2l0b3IgewogICAgIHsKICAgICAgICAgcmV0dXJuIG5vZGUuZVB0ci5ib3gobm9k
ZS52YWx1ZSk7CiAgICAgfQorICAgIAorICAgIHZpc2l0RW51bUxpdGVyYWwobm9kZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBub2RlLmVQdHIuYm94KG5vZGUubWVtYmVyLnZhbHVlLnVuaWZ5Tm9k
ZS52YWx1ZUZvclNlbGVjdGVkVHlwZSk7CisgICAgfQogCiAgICAgdmlzaXRMb2dpY2FsTm90KG5v
ZGUpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRmxvYXRMaXRl
cmFsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zsb2F0
TGl0ZXJhbC5qcwkocmV2aXNpb24gMjIyMTkyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRmxvYXRMaXRlcmFsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4ICsyNSwxNCBAQAog
InVzZSBzdHJpY3QiOwogCiBsZXQgRmxvYXRMaXRlcmFsID0gY3JlYXRlTGl0ZXJhbCh7CisgICAg
bGl0ZXJhbENsYXNzTmFtZTogIkZsb2F0TGl0ZXJhbCIsCiAgICAgcHJlZmVycmVkVHlwZU5hbWU6
ICJmbG9hdCIsCiAgICAgCisgICAgbmVnQ29uc3RleHByKG9yaWdpbikKKyAgICB7CisgICAgICAg
IHJldHVybiBuZXcgSW50TGl0ZXJhbChvcmlnaW4sIC10aGlzLnZhbHVlKTsKKyAgICB9LAorICAg
IAogICAgIGNyZWF0ZVR5cGUob3JpZ2luLCB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJldHVybiBu
ZXcgRmxvYXRMaXRlcmFsVHlwZShvcmlnaW4sIHZhbHVlKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0ZvbGRDb25zdGV4cHJzLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ZvbGRDb25zdGV4cHJzLmpzCShub25leGlzdGVudCkKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ZvbGRDb25zdGV4cHJzLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gZm9sZENvbnN0ZXhwcnMocHJv
Z3JhbSkKK3sKKyAgICBwcm9ncmFtLnZpc2l0KG5ldyBDb25zdGV4cHJGb2xkZXIoKSk7Cit9CisK
SW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludExpdGVyYWwuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50TGl0ZXJhbC5qcwkocmV2
aXNpb24gMjIyMTkyKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50TGl0ZXJh
bC5qcwkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTQgQEAKICJ1c2Ugc3RyaWN0IjsKIAog
bGV0IEludExpdGVyYWwgPSBjcmVhdGVMaXRlcmFsKHsKKyAgICBsaXRlcmFsQ2xhc3NOYW1lOiAi
SW50TGl0ZXJhbCIsCiAgICAgcHJlZmVycmVkVHlwZU5hbWU6ICJpbnQiLAogICAgIAorICAgIG5l
Z0NvbnN0ZXhwcihvcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEludExpdGVyYWwo
b3JpZ2luLCAoLXRoaXMudmFsdWUpIHwgMCk7CisgICAgfSwKKyAgICAKICAgICBjcmVhdGVUeXBl
KG9yaWdpbiwgdmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IEludExpdGVyYWxUeXBl
KG9yaWdpbiwgdmFsdWUpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50
cmluc2ljcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9J
bnRyaW5zaWNzLmpzCShyZXZpc2lvbiAyMjIxOTIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9JbnRyaW5zaWNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSwxMyBAQCBj
bGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICAgICB0eXBlLmlzU2lnbmVkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB0eXBlLmNhblJlcHJlc2VudCA9IHZhbHVlID0+IGlzQml0d2lzZUVx
dWl2YWxlbnQodmFsdWUgfCAwLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdHlwZS5zaXplID0g
MTsKKyAgICAgICAgICAgICAgICB0eXBlLmRlZmF1bHRWYWx1ZSA9IDA7CisgICAgICAgICAgICAg
ICAgdHlwZS5jcmVhdGVMaXRlcmFsID0gKG9yaWdpbiwgdmFsdWUpID0+IEludExpdGVyYWwud2l0
aFR5cGUob3JpZ2luLCB2YWx1ZSB8IDAsIHR5cGUpOworICAgICAgICAgICAgICAgIHR5cGUuc3Vj
Y2Vzc29yVmFsdWUgPSB2YWx1ZSA9PiAodmFsdWUgKyAxKSB8IDA7CisgICAgICAgICAgICAgICAg
dHlwZS52YWx1ZXNFcXVhbCA9IChhLCBiKSA9PiBhID09PSBiOwogICAgICAgICAgICAgICAgIHR5
cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAoYnVmZmVyLCBvZmZzZXQpID0+IGJ1ZmZlci5zZXQo
b2Zmc2V0LCAwKTsKKyAgICAgICAgICAgICAgICB0eXBlLmZvcm1hdFZhbHVlRnJvbUludExpdGVy
YWwgPSB2YWx1ZSA9PiB2YWx1ZSB8IDA7CisgICAgICAgICAgICAgICAgdHlwZS5mb3JtYXRWYWx1
ZUZyb21VaW50TGl0ZXJhbCA9IHZhbHVlID0+IHZhbHVlIHwgMDsKICAgICAgICAgICAgIH0pOwog
CiAgICAgICAgIHRoaXMuX21hcC5zZXQoCkBAIC04MSw3ICs4NywxMyBAQCBjbGFzcyBJbnRyaW5z
aWNzIHsKICAgICAgICAgICAgICAgICB0eXBlLmlzU2lnbmVkID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgdHlwZS5jYW5SZXByZXNlbnQgPSB2YWx1ZSA9PiBpc0JpdHdpc2VFcXVpdmFsZW50KHZh
bHVlID4+PiAwLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdHlwZS5zaXplID0gMTsKKyAgICAg
ICAgICAgICAgICB0eXBlLmRlZmF1bHRWYWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgdHlwZS5j
cmVhdGVMaXRlcmFsID0gKG9yaWdpbiwgdmFsdWUpID0+IEludExpdGVyYWwud2l0aFR5cGUob3Jp
Z2luLCB2YWx1ZSA+Pj4gMCwgdHlwZSk7CisgICAgICAgICAgICAgICAgdHlwZS5zdWNjZXNzb3JW
YWx1ZSA9IHZhbHVlID0+ICh2YWx1ZSArIDEpID4+PiAwOworICAgICAgICAgICAgICAgIHR5cGUu
dmFsdWVzRXF1YWwgPSAoYSwgYikgPT4gYSA9PT0gYjsKICAgICAgICAgICAgICAgICB0eXBlLnBv
cHVsYXRlRGVmYXVsdFZhbHVlID0gKGJ1ZmZlciwgb2Zmc2V0KSA9PiBidWZmZXIuc2V0KG9mZnNl
dCwgMCk7CisgICAgICAgICAgICAgICAgdHlwZS5mb3JtYXRWYWx1ZUZyb21JbnRMaXRlcmFsID0g
dmFsdWUgPT4gdmFsdWUgPj4+IDA7CisgICAgICAgICAgICAgICAgdHlwZS5mb3JtYXRWYWx1ZUZy
b21VaW50TGl0ZXJhbCA9IHZhbHVlID0+IHZhbHVlID4+PiAwOwogICAgICAgICAgICAgfSk7CiAK
ICAgICAgICAgdGhpcy5fbWFwLnNldCgKQEAgLTkzLDYgKzEwNSwxMCBAQCBjbGFzcyBJbnRyaW5z
aWNzIHsKICAgICAgICAgICAgICAgICB0eXBlLmlzTnVtYmVyID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICB0eXBlLmNhblJlcHJlc2VudCA9IHZhbHVlID0+IGlzQml0d2lzZUVxdWl2YWxlbnQoTWF0
aC5mcm91bmQodmFsdWUpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdHlwZS5wb3B1bGF0ZURl
ZmF1bHRWYWx1ZSA9IChidWZmZXIsIG9mZnNldCkgPT4gYnVmZmVyLnNldChvZmZzZXQsIDApOwor
ICAgICAgICAgICAgICAgIHR5cGUuZm9ybWF0VmFsdWVGcm9tSW50TGl0ZXJhbCA9IHZhbHVlID0+
IHZhbHVlOworICAgICAgICAgICAgICAgIHR5cGUuZm9ybWF0VmFsdWVGcm9tVWludExpdGVyYWwg
PSB2YWx1ZSA9PiB2YWx1ZTsKKyAgICAgICAgICAgICAgICB0eXBlLmZvcm1hdFZhbHVlRnJvbUZs
b2F0TGl0ZXJhbCA9IHZhbHVlID0+IHZhbHVlOworICAgICAgICAgICAgICAgIHR5cGUuZm9ybWF0
VmFsdWVGcm9tRG91YmxlTGl0ZXJhbCA9IHZhbHVlID0+IHZhbHVlOwogICAgICAgICAgICAgfSk7
CiAKICAgICAgICAgdGhpcy5fbWFwLnNldCgKQEAgLTEwNCw2ICsxMjAsMTAgQEAgY2xhc3MgSW50
cmluc2ljcyB7CiAgICAgICAgICAgICAgICAgdHlwZS5pc051bWJlciA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgdHlwZS5jYW5SZXByZXNlbnQgPSB2YWx1ZSA9PiB0cnVlOwogICAgICAgICAgICAg
ICAgIHR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAoYnVmZmVyLCBvZmZzZXQpID0+IGJ1ZmZl
ci5zZXQob2Zmc2V0LCAwKTsKKyAgICAgICAgICAgICAgICB0eXBlLmZvcm1hdFZhbHVlRnJvbUlu
dExpdGVyYWwgPSB2YWx1ZSA9PiB2YWx1ZTsKKyAgICAgICAgICAgICAgICB0eXBlLmZvcm1hdFZh
bHVlRnJvbVVpbnRMaXRlcmFsID0gdmFsdWUgPT4gdmFsdWU7CisgICAgICAgICAgICAgICAgdHlw
ZS5mb3JtYXRWYWx1ZUZyb21GbG9hdExpdGVyYWwgPSB2YWx1ZSA9PiB2YWx1ZTsKKyAgICAgICAg
ICAgICAgICB0eXBlLmZvcm1hdFZhbHVlRnJvbURvdWJsZUxpdGVyYWwgPSB2YWx1ZSA9PiB2YWx1
ZTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHRoaXMuX21hcC5zZXQoCkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCShyZXZpc2lvbiAy
MjIxOTIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTI1NSw2ICsyNTUsMTggQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4
dGVuZHMgVmlzaXRvciB7CiAgICAgCiAgICAgdmlzaXREb3RFeHByZXNzaW9uKG5vZGUpCiAgICAg
eworICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGEgcmVmZXJlbmNlIHRvIGFuIGVudW0uIExldCdz
IHJlc29sdmUgdGhhdCBub3cuCisgICAgICAgIGlmIChub2RlLnN0cnVjdCBpbnN0YW5jZW9mIFZh
cmlhYmxlUmVmKSB7CisgICAgICAgICAgICBsZXQgZW51bVR5cGUgPSB0aGlzLl9uYW1lQ29udGV4
dC5nZXQoVHlwZSwgbm9kZS5zdHJ1Y3QubmFtZSk7CisgICAgICAgICAgICBpZiAoZW51bVR5cGUg
JiYgZW51bVR5cGUgaW5zdGFuY2VvZiBFbnVtVHlwZSkgeworICAgICAgICAgICAgICAgIGxldCBl
bnVtTWVtYmVyID0gZW51bVR5cGUubWVtYmVyQnlOYW1lKG5vZGUuZmllbGROYW1lKTsKKyAgICAg
ICAgICAgICAgICBpZiAoIWVudW1NZW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHRocm93IG5l
dyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkVudW0gIiArIGVudW1UeXBl
Lm5hbWUgKyAiIGRvZXMgbm90IGhhdmUgYSBtZW1iZXIgbmFtZWQgIiArIG5vZGUuZmllbGROYW1l
KTsKKyAgICAgICAgICAgICAgICBub2RlLmJlY29tZShuZXcgRW51bUxpdGVyYWwobm9kZS5vcmln
aW4sIGVudW1NZW1iZXIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHRoaXMuX2hhbmRsZVByb3BlcnR5QWNjZXNz
KG5vZGUpOwogICAgICAgICBzdXBlci52aXNpdERvdEV4cHJlc3Npb24obm9kZSk7CiAgICAgfQpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHJldmlzaW9uIDIyMjE5
MikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjcsNyArMjI3LDEzIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwg
b3JpZ2luS2kKICAgICAKICAgICBmdW5jdGlvbiBwYXJzZUNvbnN0ZXhwcigpCiAgICAgewotICAg
ICAgICByZXR1cm4gcGFyc2VUZXJtKCk7CisgICAgICAgIGxldCB0b2tlbjsKKyAgICAgICAgaWYg
KHRva2VuID0gdHJ5Q29uc3VtZSgiLSIpKQorICAgICAgICAgICAgcmV0dXJuIG5ldyBDYWxsRXhw
cmVzc2lvbih0b2tlbiwgIm9wZXJhdG9yIiArIHRva2VuLnRleHQsIFtdLCBbcGFyc2VUZXJtKCld
KTsKKyAgICAgICAgbGV0IGxlZnQgPSBwYXJzZVRlcm0oKTsKKyAgICAgICAgaWYgKHRva2VuID0g
dHJ5Q29uc3VtZSgiLiIpKQorICAgICAgICAgICAgbGVmdCA9IG5ldyBEb3RFeHByZXNzaW9uKHRv
a2VuLCBsZWZ0LCBjb25zdW1lS2luZCgiaWRlbnRpZmllciIpLnRleHQpOworICAgICAgICByZXR1
cm4gbGVmdDsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24gcGFyc2VUeXBlQXJndW1lbnRzKCkK
QEAgLTM5NiwxMiArNDAyLDE3IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3Jp
Z2luS2kKICAgICAKICAgICBmdW5jdGlvbiBwYXJzZVBvc3NpYmxlU3VmZml4KCkKICAgICB7Ci0g
ICAgICAgIGlmIChpc0NhbGxFeHByZXNzaW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VD
YWxsRXhwcmVzc2lvbigpOworICAgICAgICBsZXQgYWNjZXB0YWJsZU9wZXJhdG9ycyA9IFsiKysi
LCAiLS0iLCAiLiIsICItPiIsICJbIl07CisgICAgICAgIGxldCBsaW1pdGVkT3BlcmF0b3JzID0g
WyIuIiwgIi0+IiwgIlsiXTsKKyAgICAgICAgbGV0IGxlZnQ7CisgICAgICAgIGlmIChpc0NhbGxF
eHByZXNzaW9uKCkpIHsKKyAgICAgICAgICAgIGxlZnQgPSBwYXJzZUNhbGxFeHByZXNzaW9uKCk7
CisgICAgICAgICAgICBhY2NlcHRhYmxlT3BlcmF0b3JzID0gbGltaXRlZE9wZXJhdG9yczsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBsZWZ0ID0gcGFyc2VUZXJtKCk7CiAgICAgICAgIAot
ICAgICAgICBsZXQgbGVmdCA9IHBhcnNlVGVybSgpOwogICAgICAgICBsZXQgdG9rZW47Ci0gICAg
ICAgIHdoaWxlICh0b2tlbiA9IHRyeUNvbnN1bWUoIisrIiwgIi0tIiwgIi4iLCAiLT4iLCAiWyIp
KSB7CisgICAgICAgIHdoaWxlICh0b2tlbiA9IHRyeUNvbnN1bWUoLi4uYWNjZXB0YWJsZU9wZXJh
dG9ycykpIHsKICAgICAgICAgICAgIHN3aXRjaCAodG9rZW4udGV4dCkgewogICAgICAgICAgICAg
Y2FzZSAiKysiOgogICAgICAgICAgICAgY2FzZSAiLS0iOgpAQCAtNDIyLDYgKzQzMyw3IEBAIGZ1
bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAgICAgICAgIGRlZmF1
bHQ6CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgdG9rZW46ICIgKyB0b2tl
bik7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBhY2NlcHRhYmxlT3BlcmF0b3JzID0gbGlt
aXRlZE9wZXJhdG9yczsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbGVmdDsKICAgICB9CkBA
IC05MzEsNiArOTQzLDM1IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2lu
S2kKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAgZnVuY3Rpb24gcGFy
c2VFbnVtTWVtYmVyKCkKKyAgICB7CisgICAgICAgIGxldCBuYW1lID0gY29uc3VtZUtpbmQoImlk
ZW50aWZpZXIiKTsKKyAgICAgICAgbGV0IHZhbHVlID0gbnVsbDsKKyAgICAgICAgaWYgKHRyeUNv
bnN1bWUoIj0iKSkKKyAgICAgICAgICAgIHZhbHVlID0gcGFyc2VDb25zdGV4cHIoKTsKKyAgICAg
ICAgcmV0dXJuIG5ldyBFbnVtTWVtYmVyKG5hbWUsIG5hbWUudGV4dCwgdmFsdWUpOworICAgIH0K
KyAgICAKKyAgICBmdW5jdGlvbiBwYXJzZUVudW1UeXBlKCkKKyAgICB7CisgICAgICAgIGNvbnN1
bWUoImVudW0iKTsKKyAgICAgICAgbGV0IG5hbWUgPSBjb25zdW1lS2luZCgiaWRlbnRpZmllciIp
OworICAgICAgICBsZXQgYmFzZVR5cGU7CisgICAgICAgIGlmICh0cnlDb25zdW1lKCI6IikpCisg
ICAgICAgICAgICBiYXNlVHlwZSA9IHBhcnNlVHlwZSgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBiYXNlVHlwZSA9IG5ldyBUeXBlUmVmKG5hbWUsICJpbnQiLCBbXSk7CisgICAgICAgIGNv
bnN1bWUoInsiKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFbnVtVHlwZShuYW1lLCBuYW1l
LnRleHQsIGJhc2VUeXBlKTsKKyAgICAgICAgd2hpbGUgKCF0ZXN0KCJ9IikpIHsKKyAgICAgICAg
ICAgIHJlc3VsdC5hZGQocGFyc2VFbnVtTWVtYmVyKCkpOworICAgICAgICAgICAgaWYgKCF0cnlD
b25zdW1lKCIsIikpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg
Y29uc3VtZSgifSIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKICAgICBm
b3IgKDs7KSB7CiAgICAgICAgIGxldCB0b2tlbiA9IGxleGVyLnBlZWsoKTsKICAgICAgICAgaWYg
KCF0b2tlbikKQEAgLTk0Niw3ICs5ODcsNyBAQCBmdW5jdGlvbiBwYXJzZShwcm9ncmFtLCBvcmln
aW4sIG9yaWdpbktpCiAgICAgICAgIGVsc2UgaWYgKHRva2VuLnRleHQgPT0gInN0cnVjdCIpCiAg
ICAgICAgICAgICBwcm9ncmFtLmFkZChwYXJzZVN0cnVjdFR5cGUoKSk7CiAgICAgICAgIGVsc2Ug
aWYgKHRva2VuLnRleHQgPT0gImVudW0iKQotICAgICAgICAgICAgcHJvZ3JhbS5hZGQocGFyc2VF
bnVtKCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hZGQocGFyc2VFbnVtVHlwZSgpKTsKICAgICAg
ICAgZWxzZSBpZiAodG9rZW4udGV4dCA9PSAicHJvdG9jb2wiKQogICAgICAgICAgICAgcHJvZ3Jh
bS5hZGQocGFyc2VQcm90b2NvbERlY2woKSk7CiAgICAgICAgIGVsc2UKSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkocmV2aXNpb24gMjIyMTkyKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQCBmdW5jdGlvbiBwcmVwYXJlKG9yaWdpbiwgbGluZU51bWJlck9mZnNlCiAg
ICAgcGFyc2UocHJvZ3JhbSwgIi9pbnRlcm5hbC9zdGRsaWIiLCAibmF0aXZlIiwgMjcsIHN0YW5k
YXJkTGlicmFyeSk7CiAgICAgcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCAidXNlciIsIGxpbmVOdW1i
ZXJPZmZzZXQsIHRleHQpOwogICAgIAorICAgIGZvbGRDb25zdGV4cHJzKHByb2dyYW0pOwogICAg
IGxldCBuYW1lUmVzb2x2ZXIgPSBjcmVhdGVOYW1lUmVzb2x2ZXIocHJvZ3JhbSk7CiAgICAgcmVz
b2x2ZU5hbWVzSW5UeXBlcyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIpOwogICAgIHJlc29sdmVOYW1l
c0luUHJvdG9jb2xzKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CkBAIC0zOSw2ICs0MCw3IEBAIGZ1
bmN0aW9uIHByZXBhcmUob3JpZ2luLCBsaW5lTnVtYmVyT2Zmc2UKICAgICAvLyBGSVhNRTogTmVl
ZCB0byB2ZXJpZnkgdGhhdCBzdHJ1Y3RyZSBhcmUgbm90IGN5Y2xpYy4KICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc3MDQ0CiAgICAgc3ludGhlc2l6ZVN0
cnVjdEFjY2Vzc29ycyhwcm9ncmFtKTsKKyAgICBzeW50aGVzaXplRW51bUZ1bmN0aW9ucyhwcm9n
cmFtKTsKICAgICByZXNvbHZlTmFtZXNJbkZ1bmN0aW9ucyhwcm9ncmFtLCBuYW1lUmVzb2x2ZXIp
OwogICAgIHJlc29sdmVUeXBlRGVmc0luRnVuY3Rpb25zKHByb2dyYW0pOwogICAgIApJbmRleDog
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHJldmlzaW9uIDIyMjE5
MikKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC01OSw2ICs1OSw3IEBAIGNsYXNzIFJld3JpdGVyIHsKICAgICB2aXNpdFN0cnVj
dFR5cGUobm9kZSkgeyByZXR1cm4gbm9kZTsgfQogICAgIHZpc2l0Q29uc3RleHByVHlwZVBhcmFt
ZXRlcihub2RlKSB7IHJldHVybiBub2RlOyB9CiAgICAgdmlzaXRQcm90b2NvbERlY2wobm9kZSkg
eyByZXR1cm4gbm9kZTsgfQorICAgIHZpc2l0RW51bVR5cGUobm9kZSkgeyByZXR1cm4gbm9kZTsg
fQogCiAgICAgLy8gVGhpcyBpcyBhbG1vc3Qgd3JvbmcuIFdlIGluc3RhbnRpYXRlIEZ1bmMgaW4g
U3Vic3RpdHV0aW9uIGluIFByb3RvY29sRGVjbC4gVGhlbiwgd2UgZW5kIHVwCiAgICAgLy8gbm90
IHJld3JpdGluZyB0eXBlIHZhcmlhYmxlcy4gSSB0aGluayB0aGF0IGp1c3Qgd29ya3MgYmVjYXVz
ZSBub3QgcmV3cml0aW5nIHRoZW0gdGhlcmUgaXMgT0suCkBAIC0xNDEsNiArMTQyLDE4IEBAIGNs
YXNzIFJld3JpdGVyIHsKICAgICAgICAgcmV0dXJuIG5ldyBGaWVsZChub2RlLm9yaWdpbiwgbm9k
ZS5uYW1lLCBub2RlLnR5cGUudmlzaXQodGhpcykpOwogICAgIH0KICAgICAKKyAgICB2aXNpdEVu
dW1NZW1iZXIobm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgRW51bU1lbWJlcihub2Rl
Lm9yaWdpbiwgbm9kZS5uYW1lLCBub2RlLnZhbHVlLnZpc2l0KHRoaXMpKTsKKyAgICB9CisgICAg
CisgICAgdmlzaXRFbnVtTGl0ZXJhbChub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9
IG5ldyBFbnVtTGl0ZXJhbChub2RlLm9yaWdpbiwgbm9kZS5tZW1iZXIpOworICAgICAgICByZXN1
bHQuZVB0ciA9IG5vZGUuZVB0cjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAg
CiAgICAgdmlzaXRSZWZlcmVuY2VUeXBlKG5vZGUpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3
IG5vZGUuY29uc3RydWN0b3Iobm9kZS5yb2dpaW4sIG5vZGUuYWRkcmVzc1NwYWNlLCBub2RlLmVs
ZW1lbnRUeXBlLnZpc2l0KHRoaXMpKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1N0cnVjdFR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvU3RydWN0VHlwZS5qcwkocmV2aXNpb24gMjIyMTkyKQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
NyBAQCBjbGFzcyBTdHJ1Y3RUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgfQogICAgIAogICAgIGdl
dCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQorICAgIGdldCBvcmlnaW4oKSB7IHJldHVy
biB0aGlzLl9vcmlnaW47IH0KICAgICBnZXQgdHlwZVBhcmFtZXRlcnMoKSB7IHJldHVybiB0aGlz
Ll90eXBlUGFyYW1ldGVyczsgfQogICAgIAogICAgIGdldCBmaWVsZE5hbWVzKCkgeyByZXR1cm4g
dGhpcy5fZmllbGRzLmtleXMoKTsgfQpAQCAtNjQsNyArNjUsNyBAQCBjbGFzcyBTdHJ1Y3RUeXBl
IGV4dGVuZHMgVHlwZSB7CiAgICAgICAgIAogICAgICAgICBpZiAodHlwZUFyZ3VtZW50cykgewog
ICAgICAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMubGVuZ3RoICE9IHRoaXMudHlwZVBhcmFtZXRl
cnMubGVuZ3RoKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5v
cmlnaW5TdHJpbmcsICJXcm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgdG8gaW5zdGFudGlh
dGlvbiIpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHRoaXMub3JpZ2lu
Lm9yaWdpblN0cmluZywgIldyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyB0byBpbnN0YW50
aWF0aW9uIik7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGlmICghdHlwZUFyZ3VtZW50cy5s
ZW5ndGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7CkluZGV4OiBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplRW51bUZ1bmN0aW9ucy5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplRW51bUZ1bmN0aW9ucy5q
cwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVz
aXplRW51bUZ1bmN0aW9ucy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisidXNlIHN0cmljdCI7CisK
K2Z1bmN0aW9uIHN5bnRoZXNpemVFbnVtRnVuY3Rpb25zKHByb2dyYW0pCit7CisgICAgZm9yIChs
ZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygpKSB7CisgICAgICAgIGlmICghKHR5cGUg
aW5zdGFuY2VvZiBFbnVtVHlwZSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisg
ICAgICAgIGxldCBuYXRpdmVGdW5jOworICAgICAgICBsZXQgaXNDYXN0ID0gZmFsc2U7CisgICAg
ICAgIGxldCBzaGFkZXJUeXBlOworICAgICAgICAKKyAgICAgICAgbmF0aXZlRnVuYyA9IG5ldyBO
YXRpdmVGdW5jKAorICAgICAgICAgICAgdHlwZS5vcmlnaW4sICJvcGVyYXRvcj09IiwgbmV3IFR5
cGVSZWYodHlwZS5vcmlnaW4sICJib29sIiwgW10pLCBbXSwKKyAgICAgICAgICAgIFsKKyAgICAg
ICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcih0eXBlLm9yaWdpbiwgbnVsbCwgbmV3IFR5cGVS
ZWYodHlwZS5vcmlnaW4sIHR5cGUubmFtZSwgW10pKSwKKyAgICAgICAgICAgICAgICBuZXcgRnVu
Y1BhcmFtZXRlcih0eXBlLm9yaWdpbiwgbnVsbCwgbmV3IFR5cGVSZWYodHlwZS5vcmlnaW4sIHR5
cGUubmFtZSwgW10pKQorICAgICAgICAgICAgXSwKKyAgICAgICAgICAgIGlzQ2FzdCwgc2hhZGVy
VHlwZSk7CisgICAgICAgIG5hdGl2ZUZ1bmMuaW1wbGVtZW50YXRpb24gPSAoW2xlZnQsIHJpZ2h0
XSkgPT4gRVB0ci5ib3gobGVmdC5sb2FkVmFsdWUoKSA9PSByaWdodC5sb2FkVmFsdWUoKSk7Cisg
ICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOworICAgICAgICAKKyAgICAgICAgbmF0aXZl
RnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgdHlwZS5vcmlnaW4sICJvcGVyYXRv
ci52YWx1ZSIsIHR5cGUuYmFzZVR5cGUudmlzaXQobmV3IFJld3JpdGVyKCkpLCBbXSwKKyAgICAg
ICAgICAgIFtuZXcgRnVuY1BhcmFtZXRlcih0eXBlLm9yaWdpbiwgbnVsbCwgbmV3IFR5cGVSZWYo
dHlwZS5vcmlnaW4sIHR5cGUubmFtZSwgW10pKV0sCisgICAgICAgICAgICBpc0Nhc3QsIHNoYWRl
clR5cGUpOworICAgICAgICBuYXRpdmVGdW5jLmltcGxlbWVudGF0aW9uID0gKFt2YWx1ZV0pID0+
IHZhbHVlOworICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKKyAgICAgICAgCisgICAg
ICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgIHR5cGUub3JpZ2lu
LCAib3BlcmF0b3IgY2FzdCIsIHR5cGUuYmFzZVR5cGUudmlzaXQobmV3IFJld3JpdGVyKCkpLCBb
XSwKKyAgICAgICAgICAgIFtuZXcgRnVuY1BhcmFtZXRlcih0eXBlLm9yaWdpbiwgbnVsbCwgbmV3
IFR5cGVSZWYodHlwZS5vcmlnaW4sIHR5cGUubmFtZSwgW10pKV0sCisgICAgICAgICAgICBpc0Nh
c3QsIHNoYWRlclR5cGUpOworICAgICAgICBuYXRpdmVGdW5jLmltcGxlbWVudGF0aW9uID0gKFt2
YWx1ZV0pID0+IHZhbHVlOworICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKKyAgICAg
ICAgCisgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAgICAgICAgICAgIHR5
cGUub3JpZ2luLCAib3BlcmF0b3IgY2FzdCIsIG5ldyBUeXBlUmVmKHR5cGUub3JpZ2luLCB0eXBl
Lm5hbWUsIFtdKSwgW10sCisgICAgICAgICAgICBbbmV3IEZ1bmNQYXJhbWV0ZXIodHlwZS5vcmln
aW4sIG51bGwsIHR5cGUuYmFzZVR5cGUudmlzaXQobmV3IFJld3JpdGVyKCkpKV0sCisgICAgICAg
ICAgICBpc0Nhc3QsIHNoYWRlclR5cGUpOworICAgICAgICBuYXRpdmVGdW5jLmltcGxlbWVudGF0
aW9uID0gKFt2YWx1ZV0pID0+IHZhbHVlOworICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVGdW5j
KTsKKyAgICB9Cit9CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1s
CShyZXZpc2lvbiAyMjIxOTIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0
Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKIDxzY3JpcHQgc3JjPSJDaGVj
a1dyYXBwZWQuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNoZWNrZXIuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IkNvbW1hRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iQ29uc3RleHByRm9sZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDb25zdGV4cHJU
eXBlUGFyYW1ldGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDb250aW51ZS5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uLmpzIj48
L3NjcmlwdD4KQEAgLTQ0LDYgKzQ1LDkgQEAKIDxzY3JpcHQgc3JjPSJFQnVmZmVyLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJFQnVmZmVyQnVpbGRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iRVB0ci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iRW51bUxpdGVyYWwuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9IkVudW1NZW1iZXIuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBz
cmM9IkVudW1UeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJFdmFsdWF0aW9uQ29tbW9u
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJFdmFsdWF0b3IuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IkV4cHJlc3Npb25GaW5kZXIuanMiPjwvc2NyaXB0PgpAQCAtNTIsNiArNTYsNyBA
QAogPHNjcmlwdCBzcmM9IkZsYXR0ZW5Qcm90b2NvbEV4dGVuZHMuanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IkZsb2F0TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRmxvYXRM
aXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iRm9sZENvbnN0ZXhwcnMuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZvckxvb3AuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9IkZ1bmMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZ1bmNEZWYuanMiPjwvc2NyaXB0
PgpAQCAtMTEwLDYgKzExNSw3IEBACiA8c2NyaXB0IHNyYz0iU3RydWN0TGF5b3V0QnVpbGRlci5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3RydWN0VHlwZS5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iU3Vic3RpdHV0aW9uLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJTeW50aGVz
aXplRW51bUZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3ludGhlc2l6ZVN0
cnVjdEFjY2Vzc29ycy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZURlZi5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZURlZlJlc29sdmVyLmpzIj48L3NjcmlwdD4KSW5kZXg6
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkocmV2aXNpb24gMjIyMTkyKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwkod29ya2luZyBjb3B5KQpAQCAt
MTAxLDYgKzEwMSwxNCBAQCBmdW5jdGlvbiBjaGVja0ludChwcm9ncmFtLCByZXN1bHQsIGV4cGVj
CiAgICAgY2hlY2tOdW1iZXIocHJvZ3JhbSwgcmVzdWx0LCBleHBlY3RlZCk7CiB9CiAKK2Z1bmN0
aW9uIGNoZWNrRW51bShwcm9ncmFtLCByZXN1bHQsIGV4cGVjdGVkKQoreworICAgIGlmICghKHJl
c3VsdC50eXBlIGluc3RhbmNlb2YgRW51bVR5cGUpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
Ildyb25nIHJlc3VsdCB0eXBlOyByZXN1bHQ6ICIgKyByZXN1bHQpOworICAgIGlmIChyZXN1bHQu
dmFsdWUgIT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0
OiAiICsgcmVzdWx0LnZhbHVlICsgIiAoZXhwZWN0ZWQgIiArIGV4cGVjdGVkICsgIikiKTsKK30K
KwogZnVuY3Rpb24gY2hlY2tVaW50KHByb2dyYW0sIHJlc3VsdCwgZXhwZWN0ZWQpCiB7CiAgICAg
aWYgKCFyZXN1bHQudHlwZS5lcXVhbHMocHJvZ3JhbS5pbnRyaW5zaWNzLnVpbnQzMikpCkBAIC0z
ODk0LDYgKzM5MDIsMjgxIEBAIGZ1bmN0aW9uIFRFU1RfYnVpbHRpblZlY3RvcnMoKQogICAgIGNo
ZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvb2Q2IiwgW10sIFtdKSwg
ZmFsc2UpOwogfQogCitmdW5jdGlvbiBURVNUX3NpbXBsZUVudW0oKQoreworICAgIGxldCBwcm9n
cmFtID0gZG9QcmVwKGAKKyAgICAgICAgZW51bSBGb28geworICAgICAgICAgICAgV2FyLAorICAg
ICAgICAgICAgRmFtaW5lLAorICAgICAgICAgICAgUGVzdGlsZW5jZSwKKyAgICAgICAgICAgIERl
YXRoCisgICAgICAgIH0KKyAgICAgICAgRm9vIHdhcigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBGb28uV2FyOworICAgICAgICB9CisgICAgICAgIEZvbyBmYW1pbmUoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLkZhbWluZTsKKyAgICAgICAgfQorICAgICAgICBG
b28gcGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uUGVzdGls
ZW5jZTsKKyAgICAgICAgfQorICAgICAgICBGb28gZGVhdGgoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gRm9vLkRlYXRoOworICAgICAgICB9CisgICAgICAgIGJvb2wgZXF1YWxzKEZv
byBhLCBGb28gYikKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAg
ICAgfQorICAgICAgICBib29sIG5vdEVxdWFscyhGb28gYSwgRm9vIGIpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBhICE9IGI7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCB0ZXN0U2lt
cGxlRXF1YWwoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gZXF1YWxzKEZvby5XYXIs
IEZvby5XYXIpOworICAgICAgICB9CisgICAgICAgIGJvb2wgdGVzdEFub3RoZXJFcXVhbCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcXVhbHMoRm9vLlBlc3RpbGVuY2UsIEZvby5Q
ZXN0aWxlbmNlKTsKKyAgICAgICAgfQorICAgICAgICBib29sIHRlc3ROb3RFcXVhbCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcXVhbHMoRm9vLkZhbWluZSwgRm9vLkRlYXRoKTsK
KyAgICAgICAgfQorICAgICAgICBib29sIHRlc3RTaW1wbGVOb3RFcXVhbCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBub3RFcXVhbHMoRm9vLldhciwgRm9vLldhcik7CisgICAgICAg
IH0KKyAgICAgICAgYm9vbCB0ZXN0QW5vdGhlck5vdEVxdWFsKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG5vdEVxdWFscyhGb28uUGVzdGlsZW5jZSwgRm9vLlBlc3RpbGVuY2UpOwor
ICAgICAgICB9CisgICAgICAgIGJvb2wgdGVzdE5vdE5vdEVxdWFsKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG5vdEVxdWFscyhGb28uRmFtaW5lLCBGb28uRGVhdGgpOworICAgICAg
ICB9CisgICAgICAgIGludCBpbnRXYXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
aW50KHdhcigpKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgaW50RmFtaW5lKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGludChmYW1pbmUoKSk7CisgICAgICAgIH0KKyAgICAgICAg
aW50IGludFBlc3RpbGVuY2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW50KHBl
c3RpbGVuY2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGludERlYXRoKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGludChkZWF0aCgpKTsKKyAgICAgICAgfQorICAgICAgICBp
bnQgd2FyVmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gd2FyKCkudmFsdWU7
CisgICAgICAgIH0KKyAgICAgICAgaW50IGZhbWluZVZhbHVlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGZhbWluZSgpLnZhbHVlOworICAgICAgICB9CisgICAgICAgIGludCBwZXN0
aWxlbmNlVmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcGVzdGlsZW5jZSgp
LnZhbHVlOworICAgICAgICB9CisgICAgICAgIGludCBkZWF0aFZhbHVlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIGRlYXRoKCkudmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgaW50
IHdhclZhbHVlTGl0ZXJhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uV2Fy
LnZhbHVlOworICAgICAgICB9CisgICAgICAgIGludCBmYW1pbmVWYWx1ZUxpdGVyYWwoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLkZhbWluZS52YWx1ZTsKKyAgICAgICAgfQor
ICAgICAgICBpbnQgcGVzdGlsZW5jZVZhbHVlTGl0ZXJhbCgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBGb28uUGVzdGlsZW5jZS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQg
ZGVhdGhWYWx1ZUxpdGVyYWwoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLkRl
YXRoLnZhbHVlOworICAgICAgICB9CisgICAgICAgIEZvbyBpbnRXYXJCYWNrd2FyZHMoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vKGludFdhcigpKTsKKyAgICAgICAgfQorICAg
ICAgICBGb28gaW50RmFtaW5lQmFja3dhcmRzKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIEZvbyhpbnRGYW1pbmUoKSk7CisgICAgICAgIH0KKyAgICAgICAgRm9vIGludFBlc3RpbGVu
Y2VCYWNrd2FyZHMoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vKGludFBlc3Rp
bGVuY2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgRm9vIGludERlYXRoQmFja3dhcmRzKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvbyhpbnREZWF0aCgpKTsKKyAgICAgICAgfQor
ICAgIGApOworICAgIGNoZWNrRW51bShwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgIndh
ciIsIFtdLCBbXSksIDApOworICAgIGNoZWNrRW51bShwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJv
Z3JhbSwgImZhbWluZSIsIFtdLCBbXSksIDEpOworICAgIGNoZWNrRW51bShwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2UiLCBbXSwgW10pLCAyKTsKKyAgICBjaGVja0Vu
dW0ocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJkZWF0aCIsIFtdLCBbXSksIDMpOwor
ICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RTaW1wbGVF
cXVhbCIsIFtdLCBbXSksIHRydWUpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgInRlc3RBbm90aGVyRXF1YWwiLCBbXSwgW10pLCB0cnVlKTsKKyAgICBjaGVj
a0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0Tm90RXF1YWwiLCBbXSwg
W10pLCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAidGVzdFNpbXBsZU5vdEVxdWFsIiwgW10sIFtdKSwgZmFsc2UpOworICAgIGNoZWNrQm9vbChw
cm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RBbm90aGVyTm90RXF1YWwiLCBbXSwg
W10pLCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAidGVzdE5vdE5vdEVxdWFsIiwgW10sIFtdKSwgdHJ1ZSk7CisgICAgY2hlY2tJbnQocHJvZ3Jh
bSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJpbnRXYXIiLCBbXSwgW10pLCAwKTsKKyAgICBjaGVj
a0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImludEZhbWluZSIsIFtdLCBbXSks
IDEpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiaW50UGVz
dGlsZW5jZSIsIFtdLCBbXSksIDIpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAiaW50RGVhdGgiLCBbXSwgW10pLCAzKTsKKyAgICBjaGVja0ludChwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgIndhclZhbHVlIiwgW10sIFtdKSwgMCk7CisgICAgY2hl
Y2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmYW1pbmVWYWx1ZSIsIFtdLCBb
XSksIDEpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAicGVz
dGlsZW5jZVZhbHVlIiwgW10sIFtdKSwgMik7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1
bmN0aW9uKHByb2dyYW0sICJkZWF0aFZhbHVlIiwgW10sIFtdKSwgMyk7CisgICAgY2hlY2tJbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ3YXJWYWx1ZUxpdGVyYWwiLCBbXSwgW10p
LCAwKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZhbWlu
ZVZhbHVlTGl0ZXJhbCIsIFtdLCBbXSksIDEpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAicGVzdGlsZW5jZVZhbHVlTGl0ZXJhbCIsIFtdLCBbXSksIDIpOwor
ICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZGVhdGhWYWx1ZUxp
dGVyYWwiLCBbXSwgW10pLCAzKTsKKyAgICBjaGVja0VudW0ocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJpbnRXYXJCYWNrd2FyZHMiLCBbXSwgW10pLCAwKTsKKyAgICBjaGVja0VudW0o
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJpbnRGYW1pbmVCYWNrd2FyZHMiLCBbXSwg
W10pLCAxKTsKKyAgICBjaGVja0VudW0ocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJp
bnRQZXN0aWxlbmNlQmFja3dhcmRzIiwgW10sIFtdKSwgMik7CisgICAgY2hlY2tFbnVtKHByb2dy
YW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiaW50RGVhdGhCYWNrd2FyZHMiLCBbXSwgW10pLCAz
KTsKK30KKworZnVuY3Rpb24gVEVTVF9lbnVtV2l0aE1hbnVhbFZhbHVlcygpCit7CisgICAgbGV0
IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBlbnVtIEZvbyB7CisgICAgICAgICAgICBXYXIg
PSA3MiwKKyAgICAgICAgICAgIEZhbWluZSA9IDAsCisgICAgICAgICAgICBQZXN0aWxlbmNlID0g
MjMsCisgICAgICAgICAgICBEZWF0aCA9IC00MgorICAgICAgICB9CisgICAgICAgIEZvbyB3YXIo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLldhcjsKKyAgICAgICAgfQorICAg
ICAgICBGb28gZmFtaW5lKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5GYW1p
bmU7CisgICAgICAgIH0KKyAgICAgICAgRm9vIHBlc3RpbGVuY2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gRm9vLlBlc3RpbGVuY2U7CisgICAgICAgIH0KKyAgICAgICAgRm9vIGRl
YXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5EZWF0aDsKKyAgICAgICAg
fQorICAgIGApOworICAgIGNoZWNrRW51bShwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
IndhciIsIFtdLCBbXSksIDcyKTsKKyAgICBjaGVja0VudW0ocHJvZ3JhbSwgY2FsbEZ1bmN0aW9u
KHByb2dyYW0sICJmYW1pbmUiLCBbXSwgW10pLCAwKTsKKyAgICBjaGVja0VudW0ocHJvZ3JhbSwg
Y2FsbEZ1bmN0aW9uKHByb2dyYW0sICJwZXN0aWxlbmNlIiwgW10sIFtdKSwgMjMpOworICAgIGNo
ZWNrRW51bShwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImRlYXRoIiwgW10sIFtdKSwg
LTQyKTsKK30KKworZnVuY3Rpb24gVEVTVF9lbnVtV2l0aG91dFplcm8oKQoreworICAgIGNoZWNr
RmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAgICAgICAgIGVudW0gRm9vIHsKKyAg
ICAgICAgICAgICAgICBXYXIgPSA3MiwKKyAgICAgICAgICAgICAgICBGYW1pbmUgPSA2NCwKKyAg
ICAgICAgICAgICAgICBQZXN0aWxlbmNlID0gMjMsCisgICAgICAgICAgICAgICAgRGVhdGggPSAt
NDIKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAgICAgIGUgPT4gZSBpbnN0YW5jZW9m
IFdUeXBlRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNUX2VudW1EdXBsaWNhdGVzKCkKK3sKKyAg
ICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChgCisgICAgICAgICAgICBlbnVtIEZv
byB7CisgICAgICAgICAgICAgICAgV2FyID0gLTQyLAorICAgICAgICAgICAgICAgIEZhbWluZSA9
IDAsCisgICAgICAgICAgICAgICAgUGVzdGlsZW5jZSA9IDIzLAorICAgICAgICAgICAgICAgIERl
YXRoID0gLTQyCisgICAgICAgICAgICB9CisgICAgICAgIGApLAorICAgICAgICBlID0+IGUgaW5z
dGFuY2VvZiBXVHlwZUVycm9yKTsKK30KKworZnVuY3Rpb24gVEVTVF9lbnVtV2l0aFNvbWVNYW51
YWxWYWx1ZXMoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgZW51bSBG
b28geworICAgICAgICAgICAgV2FyID0gNzIsCisgICAgICAgICAgICBGYW1pbmUsCisgICAgICAg
ICAgICBQZXN0aWxlbmNlID0gMCwKKyAgICAgICAgICAgIERlYXRoCisgICAgICAgIH0KKyAgICAg
ICAgRm9vIHdhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uV2FyOworICAg
ICAgICB9CisgICAgICAgIEZvbyBmYW1pbmUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gRm9vLkZhbWluZTsKKyAgICAgICAgfQorICAgICAgICBGb28gcGVzdGlsZW5jZSgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uUGVzdGlsZW5jZTsKKyAgICAgICAgfQorICAg
ICAgICBGb28gZGVhdGgoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLkRlYXRo
OworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tFbnVtKHByb2dyYW0sIGNhbGxGdW5jdGlv
bihwcm9ncmFtLCAid2FyIiwgW10sIFtdKSwgNzIpOworICAgIGNoZWNrRW51bShwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZhbWluZSIsIFtdLCBbXSksIDczKTsKKyAgICBjaGVja0Vu
dW0ocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJwZXN0aWxlbmNlIiwgW10sIFtdKSwg
MCk7CisgICAgY2hlY2tFbnVtKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZGVhdGgi
LCBbXSwgW10pLCAxKTsKK30KKworZnVuY3Rpb24gVEVTVF9lbnVtQ29uc3RleHByR2VuZXJpY0Z1
bmN0aW9uKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGVudW0gQXhp
cyB7IFgsIFkgfQorICAgICAgICBpbnQgZm9vPEF4aXMgYXhpcz4oKSB7IHJldHVybiBpbnQoYXhp
cyk7IH0KKyAgICAgICAgaW50IHRlc3RYKCkgeyByZXR1cm4gZm9vPEF4aXMuWD4oKTsgfQorICAg
ICAgICBpbnQgdGVzdFkoKSB7IHJldHVybiBmb288QXhpcy5ZPigpOyB9CisgICAgYCk7CisgICAg
Y2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0WCIsIFtdLCBbXSks
IDApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFki
LCBbXSwgW10pLCAxKTsKK30KKworZnVuY3Rpb24gVEVTVF9lbnVtQ29uc3RleHByR2VuZXJpY1N0
cnVjdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBlbnVtIEF4aXMg
eyBYLCBZIH0KKyAgICAgICAgc3RydWN0IEZvbzxBeGlzIGF4aXM+IHsgfQorICAgICAgICBpbnQg
Zm9vPEF4aXMgYXhpcz4oRm9vPGF4aXM+KSB7IHJldHVybiBpbnQoYXhpcyk7IH0KKyAgICAgICAg
aW50IHRlc3RYKCkKKyAgICAgICAgeyAgIAorICAgICAgICAgICAgRm9vPEF4aXMuWD4gZjsKKyAg
ICAgICAgICAgIHJldHVybiBmb28oZik7CisgICAgICAgIH0KKyAgICAgICAgaW50IHRlc3RZKCkK
KyAgICAgICAgeyAgIAorICAgICAgICAgICAgRm9vPEF4aXMuWT4gZjsKKyAgICAgICAgICAgIHJl
dHVybiBmb28oZik7CisgICAgICAgIH0KKyAgICBgKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RYIiwgW10sIFtdKSwgMCk7CisgICAgY2hlY2tJbnQo
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0WSIsIFtdLCBbXSksIDEpOworfQor
CiBsZXQgZmlsdGVyID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhpbmcgYnkgZGVmYXVsdAogaWYgKHRo
aXNbImFyZ3VtZW50cyJdKSB7CiAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVu
Z3RoOyBpKyspIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1VpbnRMaXRl
cmFsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1VpbnRM
aXRlcmFsLmpzCShyZXZpc2lvbiAyMjIxOTIpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9VaW50TGl0ZXJhbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTQgQEAKICJ1
c2Ugc3RyaWN0IjsKIAogbGV0IFVpbnRMaXRlcmFsID0gY3JlYXRlTGl0ZXJhbCh7CisgICAgbGl0
ZXJhbENsYXNzTmFtZTogIlVpbnRMaXRlcmFsIiwKICAgICBwcmVmZXJyZWRUeXBlTmFtZTogInVp
bnQiLAogICAgIAorICAgIG5lZ0NvbnN0ZXhwcihvcmlnaW4pCisgICAgeworICAgICAgICByZXR1
cm4gbmV3IFVpbnRMaXRlcmFsKG9yaWdpbiwgKC10aGlzLnZhbHVlKSA+Pj4gMCk7CisgICAgfSwK
KyAgICAKICAgICBjcmVhdGVUeXBlKG9yaWdpbiwgdmFsdWUpCiAgICAgewogICAgICAgICByZXR1
cm4gbmV3IFVpbnRMaXRlcmFsVHlwZShvcmlnaW4sIHZhbHVlKTsKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkocmV2aXNpb24gMjIyMTkyKQorKysgVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTQx
LDYgKzE0MSwyMiBAQCBjbGFzcyBWaXNpdG9yIHsKICAgICAgICAgbm9kZS50eXBlLnZpc2l0KHRo
aXMpOwogICAgIH0KICAgICAKKyAgICB2aXNpdEVudW1UeXBlKG5vZGUpCisgICAgeworICAgICAg
ICBub2RlLmJhc2VUeXBlLnZpc2l0KHRoaXMpOworICAgICAgICBmb3IgKGxldCBtZW1iZXIgb2Yg
bm9kZS5tZW1iZXJzKQorICAgICAgICAgICAgbWVtYmVyLnZpc2l0KHRoaXMpOworICAgIH0KKyAg
ICAKKyAgICB2aXNpdEVudW1NZW1iZXIobm9kZSkKKyAgICB7CisgICAgICAgIE5vZGUudmlzaXQo
bm9kZS52YWx1ZSwgdGhpcyk7CisgICAgfQorICAgIAorICAgIHZpc2l0RW51bUxpdGVyYWwobm9k
ZSkKKyAgICB7CisgICAgfQorICAgIAogICAgIHZpc2l0RWxlbWVudGFsVHlwZShub2RlKQogICAg
IHsKICAgICAgICAgbm9kZS5lbGVtZW50VHlwZS52aXNpdCh0aGlzKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>321179</attachid>
            <date>2017-09-18 20:21:58 -0700</date>
            <delta_ts>2017-09-18 20:35:46 -0700</delta_ts>
            <desc>the ptach</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>50907</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMjE5OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDExMCBAQAorMjAxNy0wOS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIFdTTCBzaG91bGQgc3VwcG9ydCBlbnVtCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzY5NzcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaW1wbGVtZW50cyBlbnVtLiBF
bnVtcyBtZW1iZXJzIGFyZSByZWZlcmVuY2VkIEphdmEtc3R5bGUuIEZvciBleGFtcGxlLCBpZiB3
ZSBoYXZlIGFuIGVudW0gbGlrZToKKyAgICAgICAgCisgICAgICAgICAgICBlbnVtIEJhbmsgewor
ICAgICAgICAgICAgICAgIEdQLAorICAgICAgICAgICAgICAgIEZQCisgICAgICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBUaGVuIHlvdSByZWZlciB0byB0aGUgbWVtYmVycyBieSBzYXlpbmcg
QmFuay5HUCBhbmQgQmFuay5GUC4KKyAgICAgICAgCisgICAgICAgIEFsc28gYWRkcyBhIGhhY2sg
dGhhdCBtYWtlcyBvcGVyYXRvci0gb24gYSBsaXRlcmFsIGZvbGQgdGhlIGxpdGVyYWwuIFRoaXMg
Zml4ZXMgdHdvIGlzc3VlczoKKyAgICAgICAgCisgICAgICAgIC0gTGV0cyB5b3UgdXNlIG5lZ2F0
aXZlIGxpdGVyYWxzIGluIGNvbnN0ZXhwcnMuCisgICAgICAgIC0gTWVhbnMgdGhhdCBuZWdhdGl2
ZSBsaXRlcmFscyBhbHNvIGdldCBsaXRlcmFsIHR5cGUgdW5pZmljYXRpb24uCisgICAgICAgIAor
ICAgICAgICBXU0wncyBjb25zdGV4cHIgc3VwcG9ydCBpcyByZWFsbHkgdGhpbiwgYnV0IEkgdGhp
bmsgaXQncyBhbGwgd2UgcmVhbGx5IG5lZWQgZm9yIG5vdy4KKyAgICAgICAgCisgICAgICAgICog
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0NoZWNrZXIuanM6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlwZS52aXNpdEVu
dW1UeXBlKToKKyAgICAgICAgKENoZWNrZXIucHJvdG90eXBlLnZpc2l0RW51bUxpdGVyYWwpOgor
ICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbnN0ZXhwckZvbGRlci5qczogQWRk
ZWQuCisgICAgICAgIChDb25zdGV4cHJGb2xkZXIucHJvdG90eXBlLnZpc2l0Q2FsbEV4cHJlc3Np
b24pOgorICAgICAgICAoQ29uc3RleHByRm9sZGVyLnByb3RvdHlwZS52aXNpdFR5cGVPclZhcmlh
YmxlUmVmKToKKyAgICAgICAgKENvbnN0ZXhwckZvbGRlcik6CisgICAgICAgICogV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvQ3JlYXRlTGl0ZXJhbC5qczoKKyAgICAgICAgKGNyZWF0ZUxpdGVyYWwu
R2VuZXJpY0xpdGVyYWwucHJvdG90eXBlLmdldCB2YWx1ZUZvclNlbGVjdGVkVHlwZSk6CisgICAg
ICAgIChjcmVhdGVMaXRlcmFsLkdlbmVyaWNMaXRlcmFsLnByb3RvdHlwZS5nZXQgbmVnQ29uc3Rl
eHByKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3VibGVMaXRlcmFsLmpz
OgorICAgICAgICAobGV0LkRvdWJsZUxpdGVyYWwuY3JlYXRlTGl0ZXJhbC5uZWdDb25zdGV4cHIp
OgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzOgor
ICAgICAgICAoRUJ1ZmZlckJ1aWxkZXIucHJvdG90eXBlLnZpc2l0RW51bUxpdGVyYWwpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VudW1MaXRlcmFsLmpzOiBBZGRlZC4KKyAg
ICAgICAgKEVudW1MaXRlcmFsKToKKyAgICAgICAgKEVudW1MaXRlcmFsLnByb3RvdHlwZS5nZXQg
bWVtYmVyKToKKyAgICAgICAgKEVudW1MaXRlcmFsLnByb3RvdHlwZS5nZXQgdHlwZSk6CisgICAg
ICAgIChFbnVtTGl0ZXJhbC5wcm90b3R5cGUuZ2V0IGlzQ29uc3RleHByKToKKyAgICAgICAgKEVu
dW1MaXRlcmFsLnByb3RvdHlwZS51bmlmeUltcGwpOgorICAgICAgICAoRW51bUxpdGVyYWwucHJv
dG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FbnVt
TWVtYmVyLmpzOiBBZGRlZC4KKyAgICAgICAgKEVudW1NZW1iZXIpOgorICAgICAgICAoRW51bU1l
bWJlci5wcm90b3R5cGUuZ2V0IG9yaWdpbik6CisgICAgICAgIChFbnVtTWVtYmVyLnByb3RvdHlw
ZS5nZXQgbmFtZSk6CisgICAgICAgIChFbnVtTWVtYmVyLnByb3RvdHlwZS50b1N0cmluZyk6Cisg
ICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bVR5cGUuanM6IEFkZGVkLgorICAg
ICAgICAoRW51bVR5cGUpOgorICAgICAgICAoRW51bVR5cGUucHJvdG90eXBlLmFkZCk6CisgICAg
ICAgIChFbnVtVHlwZS5wcm90b3R5cGUuZ2V0IG9yaWdpbik6CisgICAgICAgIChFbnVtVHlwZS5w
cm90b3R5cGUuZ2V0IG5hbWUpOgorICAgICAgICAoRW51bVR5cGUucHJvdG90eXBlLmdldCBiYXNl
VHlwZSk6CisgICAgICAgIChFbnVtVHlwZS5wcm90b3R5cGUuZ2V0IG1lbWJlck5hbWVzKToKKyAg
ICAgICAgKEVudW1UeXBlLnByb3RvdHlwZS5tZW1iZXJCeU5hbWUpOgorICAgICAgICAoRW51bVR5
cGUucHJvdG90eXBlLmdldCBtZW1iZXJzKToKKyAgICAgICAgKEVudW1UeXBlLnByb3RvdHlwZS5n
ZXQgbWVtYmVyTWFwKToKKyAgICAgICAgKEVudW1UeXBlLnByb3RvdHlwZS5nZXQgaXNQcmltaXRp
dmUpOgorICAgICAgICAoRW51bVR5cGUucHJvdG90eXBlLnBvcHVsYXRlRGVmYXVsdFZhbHVlKToK
KyAgICAgICAgKEVudW1UeXBlLnByb3RvdHlwZS5nZXQgc2l6ZSk6CisgICAgICAgIChFbnVtVHlw
ZS5wcm90b3R5cGUudG9TdHJpbmcpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L0V2YWx1YXRvci5qczoKKyAgICAgICAgKEV2YWx1YXRvci5wcm90b3R5cGUudmlzaXRHZW5lcmlj
TGl0ZXJhbCk6CisgICAgICAgIChFdmFsdWF0b3IucHJvdG90eXBlLnZpc2l0RW51bUxpdGVyYWwp
OgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0Zsb2F0TGl0ZXJhbC5qczoKKyAg
ICAgICAgKGxldC5GbG9hdExpdGVyYWwuY3JlYXRlTGl0ZXJhbC5uZWdDb25zdGV4cHIpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ZvbGRDb25zdGV4cHJzLmpzOiBBZGRlZC4K
KyAgICAgICAgKGZvbGRDb25zdGV4cHJzKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9JbnRMaXRlcmFsLmpzOgorICAgICAgICAobGV0LkludExpdGVyYWwuY3JlYXRlTGl0ZXJh
bC5uZWdDb25zdGV4cHIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJp
bnNpY3MuanM6CisgICAgICAgIChJbnRyaW5zaWNzKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanM6CisgICAgICAgIChOYW1lUmVzb2x2ZXIucHJvdG90
eXBlLnZpc2l0UHJvdG9jb2xEZWNsKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9QYXJzZS5qczoKKyAgICAgICAgKHBhcnNlQ29uc3RleHByKToKKyAgICAgICAgKHBhcnNlUG9z
c2libGVTdWZmaXgpOgorICAgICAgICAocGFyc2VFbnVtTWVtYmVyKToKKyAgICAgICAgKHBhcnNl
RW51bVR5cGUpOgorICAgICAgICAocGFyc2UpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1ByZXBhcmUuanM6CisgICAgICAgIChwcmVwYXJlKToKKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qczoKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlw
ZS52aXNpdEVudW1UeXBlKToKKyAgICAgICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdEVudW1N
ZW1iZXIpOgorICAgICAgICAoUmV3cml0ZXIucHJvdG90eXBlLnZpc2l0RW51bUxpdGVyYWwpOgor
ICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanM6CisgICAgICAg
IChTdHJ1Y3RUeXBlLnByb3RvdHlwZS5nZXQgb3JpZ2luKToKKyAgICAgICAgKFN0cnVjdFR5cGUu
cHJvdG90eXBlLmluc3RhbnRpYXRlKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TeW50aGVzaXplRW51bUZ1bmN0aW9ucy5qczogQWRkZWQuCisgICAgICAgIChzeW50aGVzaXpl
RW51bUZ1bmN0aW9ucyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5o
dG1sOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAg
IChjaGVja0VudW0pOgorICAgICAgICAoVEVTVF9zaW1wbGVFbnVtKToKKyAgICAgICAgKFRFU1Rf
ZW51bVdpdGhNYW51YWxWYWx1ZXMpOgorICAgICAgICAoVEVTVF9lbnVtV2l0aG91dFplcm8pOgor
ICAgICAgICAoVEVTVF9lbnVtQ29uc3RleHByR2VuZXJpY0Z1bmN0aW9uKToKKyAgICAgICAgKFRF
U1RfZW51bUNvbnN0ZXhwckdlbmVyaWNTdHJ1Y3QpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1VpbnRMaXRlcmFsLmpzOgorICAgICAgICAobGV0LlVpbnRMaXRlcmFsLmNyZWF0
ZUxpdGVyYWwubmVnQ29uc3RleHByKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9WaXNpdG9yLmpzOgorICAgICAgICAoVmlzaXRvci5wcm90b3R5cGUudmlzaXRQcm90b2NvbERl
Y2wpOgorCiAyMDE3LTA5LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgV1NMIHByZXBhcmUoKSBzaG91bGQgY2FjaGUgdGhlIHBhcnNlZCBzdGFuZGFyZCBsaWJy
YXJ5CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQWxsLmpzCShyZXZpc2lvbiAyMjIx
OTkpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTU2LDYgKzU2LDcgQEAgbG9hZCgiQ2hlY2tXcmFwcGVkLmpzIik7CiBsb2FkKCJDaGVj
a2VyLmpzIik7CiBsb2FkKCJDbG9uZVByb2dyYW0uanMiKTsKIGxvYWQoIkNvbW1hRXhwcmVzc2lv
bi5qcyIpOworbG9hZCgiQ29uc3RleHByRm9sZGVyLmpzIik7CiBsb2FkKCJDb25zdGV4cHJUeXBl
UGFyYW1ldGVyLmpzIik7CiBsb2FkKCJDb250aW51ZS5qcyIpOwogbG9hZCgiQ29udmVydFB0clRv
QXJyYXlSZWZFeHByZXNzaW9uLmpzIik7CkBAIC02OCw2ICs2OSw5IEBAIGxvYWQoIkVBcnJheVJl
Zi5qcyIpOwogbG9hZCgiRUJ1ZmZlci5qcyIpOwogbG9hZCgiRUJ1ZmZlckJ1aWxkZXIuanMiKTsK
IGxvYWQoIkVQdHIuanMiKTsKK2xvYWQoIkVudW1MaXRlcmFsLmpzIik7Citsb2FkKCJFbnVtTWVt
YmVyLmpzIik7Citsb2FkKCJFbnVtVHlwZS5qcyIpOwogbG9hZCgiRXZhbHVhdGlvbkNvbW1vbi5q
cyIpOwogbG9hZCgiRXZhbHVhdG9yLmpzIik7CiBsb2FkKCJFeHByZXNzaW9uRmluZGVyLmpzIik7
CkBAIC03Niw2ICs4MCw3IEBAIGxvYWQoIkZpbmRIaWdoWm9tYmllcy5qcyIpOwogbG9hZCgiRmxh
dHRlblByb3RvY29sRXh0ZW5kcy5qcyIpOwogbG9hZCgiRmxvYXRMaXRlcmFsLmpzIik7CiBsb2Fk
KCJGbG9hdExpdGVyYWxUeXBlLmpzIik7Citsb2FkKCJGb2xkQ29uc3RleHBycy5qcyIpOwogbG9h
ZCgiRm9yTG9vcC5qcyIpOwogbG9hZCgiRnVuYy5qcyIpOwogbG9hZCgiRnVuY0RlZi5qcyIpOwpA
QCAtMTM0LDYgKzEzOSw3IEBAIGxvYWQoIlN0YXRlbWVudENsb25lci5qcyIpOwogbG9hZCgiU3Ry
dWN0TGF5b3V0QnVpbGRlci5qcyIpOwogbG9hZCgiU3RydWN0VHlwZS5qcyIpOwogbG9hZCgiU3Vi
c3RpdHV0aW9uLmpzIik7Citsb2FkKCJTeW50aGVzaXplRW51bUZ1bmN0aW9ucy5qcyIpOwogbG9h
ZCgiU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcyIpOwogbG9hZCgiVHlwZURlZi5qcyIpOwog
bG9hZCgiVHlwZURlZlJlc29sdmVyLmpzIik7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9DaGVja2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0NoZWNrZXIuanMJKHJldmlzaW9uIDIyMjE5OSkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDU2IEBA
IGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgfQogICAgIH0KICAgICAK
KyAgICB2aXNpdEVudW1UeXBlKG5vZGUpCisgICAgeworICAgICAgICBub2RlLmJhc2VUeXBlLnZp
c2l0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgbGV0IGJhc2VUeXBlID0gbm9kZS5iYXNlVHlw
ZS51bmlmeU5vZGU7CisgICAgICAgIAorICAgICAgICBpZiAoIWJhc2VUeXBlLmlzSW50KQorICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
QmFzZSB0eXBlIG9mIGVudW0gaXMgbm90IGFuIGludGVnZXI6ICIgKyBub2RlLmJhc2VUeXBlKTsK
KyAgICAgICAgCisgICAgICAgIGZvciAobGV0IG1lbWJlciBvZiBub2RlLm1lbWJlcnMpIHsKKyAg
ICAgICAgICAgIGlmICghbWVtYmVyLnZhbHVlKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBsZXQgbWVtYmVyVHlwZSA9IG1lbWJlci52YWx1ZS52
aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIGlmICghYmFzZVR5cGUuZXF1YWxzV2l0aENvbW1pdCht
ZW1iZXJUeXBlKSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihtZW1iZXIu
b3JpZ2luLm9yaWdpblN0cmluZywgIlR5cGUgb2YgZW51bSBtZW1iZXIgIiArIG1lbWJlci52YWx1
ZS5uYW1lICsgIiBkb2VzIG5vdCBwYXRjaCBlbnVtIGJhc2UgdHlwZSAobWVtYmVyIHR5cGUgaXMg
IiArIG1lbWJlclR5cGUgKyAiLCBlbnVtIGJhc2UgdHlwZSBpcyAiICsgbm9kZS5iYXNlVHlwZSAr
ICIpIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxldCBuZXh0VmFsdWUgPSBiYXNl
VHlwZS5kZWZhdWx0VmFsdWU7CisgICAgICAgIGZvciAobGV0IG1lbWJlciBvZiBub2RlLm1lbWJl
cnMpIHsKKyAgICAgICAgICAgIGlmIChtZW1iZXIudmFsdWUpIHsKKyAgICAgICAgICAgICAgICBu
ZXh0VmFsdWUgPSBiYXNlVHlwZS5zdWNjZXNzb3JWYWx1ZShtZW1iZXIudmFsdWUudW5pZnlOb2Rl
LnZhbHVlRm9yU2VsZWN0ZWRUeXBlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbWVtYmVyLnZhbHVlID0gYmFzZVR5
cGUuY3JlYXRlTGl0ZXJhbChtZW1iZXIub3JpZ2luLCBuZXh0VmFsdWUpOworICAgICAgICAgICAg
bmV4dFZhbHVlID0gYmFzZVR5cGUuc3VjY2Vzc29yVmFsdWUobmV4dFZhbHVlKTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgbGV0IG1lbWJlckFycmF5ID0gQXJyYXkuZnJvbShub2RlLm1l
bWJlcnMpOworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbWJlckFycmF5Lmxlbmd0aDsg
KytpKSB7CisgICAgICAgICAgICBsZXQgbWVtYmVyID0gbWVtYmVyQXJyYXlbaV07CisgICAgICAg
ICAgICBmb3IgKGxldCBqID0gaSArIDE7IGogPCBtZW1iZXJBcnJheS5sZW5ndGg7ICsraikgewor
ICAgICAgICAgICAgICAgIGxldCBvdGhlck1lbWJlciA9IG1lbWJlckFycmF5W2pdOworICAgICAg
ICAgICAgICAgIGlmIChiYXNlVHlwZS52YWx1ZXNFcXVhbChtZW1iZXIudmFsdWUudW5pZnlOb2Rl
LnZhbHVlRm9yU2VsZWN0ZWRUeXBlLCBvdGhlck1lbWJlci52YWx1ZS51bmlmeU5vZGUudmFsdWVG
b3JTZWxlY3RlZFR5cGUpKQorICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJv
cihvdGhlck1lbWJlci5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRHVwbGljYXRlIGVudW0gbWVtYmVy
IHZhbHVlICgiICsgbWVtYmVyLm5hbWUgKyAiIGhhcyAiICsgbWVtYmVyLnZhbHVlICsgIiB3aGls
ZSAiICsgb3RoZXJNZW1iZXIubmFtZSArICIgaGFzICIgKyBvdGhlck1lbWJlci52YWx1ZSArICIp
Iik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGxldCBmb3Vu
ZFplcm8gPSBmYWxzZTsKKyAgICAgICAgZm9yIChsZXQgbWVtYmVyIG9mIG5vZGUubWVtYmVycykg
eworICAgICAgICAgICAgaWYgKGJhc2VUeXBlLnZhbHVlc0VxdWFsKG1lbWJlci52YWx1ZS51bmlm
eU5vZGUudmFsdWVGb3JTZWxlY3RlZFR5cGUsIGJhc2VUeXBlLmRlZmF1bHRWYWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICBmb3VuZFplcm8gPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICghZm91bmRaZXJvKQorICAgICAg
ICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRW51
bSBkb2VzIG5vdCBoYXZlIGEgbWVtYmVyIHdpdGggdGhlIHZhbHVlIHplcm8iKTsKKyAgICB9Cisg
ICAgCiAgICAgX2NoZWNrVHlwZUFyZ3VtZW50cyhvcmlnaW4sIHR5cGVQYXJhbWV0ZXJzLCB0eXBl
QXJndW1lbnRzKQogICAgIHsKICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eXBlUGFyYW1l
dGVycy5sZW5ndGg7ICsraSkgewpAQCAtMzQ1LDYgKzM5NSwxMSBAQCBjbGFzcyBDaGVja2VyIGV4
dGVuZHMgVmlzaXRvciB7CiAgICAgewogICAgICAgICByZXR1cm4gdGhpcy5fcHJvZ3JhbS5pbnRy
aW5zaWNzLmJvb2w7CiAgICAgfQorICAgIAorICAgIHZpc2l0RW51bUxpdGVyYWwobm9kZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBub2RlLm1lbWJlci5lbnVtVHlwZTsKKyAgICB9CiAKICAgICBf
cmVxdWlyZUJvb2woZXhwcmVzc2lvbikKICAgICB7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9Db25zdGV4cHJGb2xkZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQ29uc3RleHByRm9sZGVyLmpzCShub25leGlzdGVudCkKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NvbnN0ZXhwckZvbGRlci5qcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisidXNlIHN0cmljdCI7CisKKy8vIE5PVEU6IFRoaXMgZG9lc24ndCBsZXQgeW91
IG5lZ2F0ZSBjb25zdGV4cHIgdmFyaWFibGVzLiBJIHRoaW5rIHRoYXQncyBwcm9iYWJseSBPSyBm
b3Igbm93LCBidXQgd2Ugc2hvdWxkCisvLyBmaXggdGhhdCBldmVudHVhbGx5LgorLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NzEyMQorCitjbGFzcyBDb25zdGV4
cHJGb2xkZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUp
CisgICAgeworICAgICAgICBzdXBlci52aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpOworICAgICAg
ICAKKyAgICAgICAgaWYgKG5vZGUubmFtZSA9PSAib3BlcmF0b3ItIgorICAgICAgICAgICAgJiYg
IW5vZGUudHlwZUFyZ3VtZW50cy5sZW5ndGgKKyAgICAgICAgICAgICYmIG5vZGUuYXJndW1lbnRM
aXN0Lmxlbmd0aCA9PSAxCisgICAgICAgICAgICAmJiBub2RlLmFyZ3VtZW50TGlzdFswXS51bmlm
eU5vZGUuaXNDb25zdGV4cHIKKyAgICAgICAgICAgICYmIG5vZGUuYXJndW1lbnRMaXN0WzBdLnVu
aWZ5Tm9kZS5uZWdDb25zdGV4cHIpIHsKKyAgICAgICAgICAgIG5vZGUuYmVjb21lKG5vZGUuYXJn
dW1lbnRMaXN0WzBdLnVuaWZ5Tm9kZS5uZWdDb25zdGV4cHIobm9kZS5vcmlnaW4pKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2aXNpdFR5cGVPclZh
cmlhYmxlUmVmKG5vZGUpCisgICAgeworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvQ3JlYXRlTGl0ZXJhbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9DcmVhdGVMaXRlcmFsLmpzCShyZXZpc2lvbiAyMjIxOTkpCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DcmVhdGVMaXRlcmFsLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC00Miw5ICs0MiwzMSBAQCBmdW5jdGlvbiBjcmVhdGVMaXRlcmFsKGNvbmZpZykK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5f
dmFsdWU7IH0KKyAgICAgICAgCisgICAgICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ug
b25jZSB3ZSBzdXBwb3J0IGludDY0LCB3ZSdsbCBuZWVkIHRoYXQgdG8gYmUgcmVwcmVzZW50ZWQg
YXMgYW4gb2JqZWN0CisgICAgICAgIC8vIHJhdGhlciB0aGFuIGFzIGEgcHJpbWl0aXZlLiBUaGVu
IHdlJ2xsIG5lZWQgdG8gY29udmVydC4KKyAgICAgICAgZ2V0IHZhbHVlRm9yU2VsZWN0ZWRUeXBl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGUudHlwZS51bmlm
eU5vZGU7CisgICAgICAgICAgICBpZiAoIXR5cGUpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJDYW5ub3QgZ2V0IHR5cGUgZm9yICIgKyB0aGlzKTsKKyAgICAgICAgICAgIGxldCBm
dW5jID0gdHlwZVsiZm9ybWF0VmFsdWVGcm9tIiArIGNvbmZpZy5saXRlcmFsQ2xhc3NOYW1lXTsK
KyAgICAgICAgICAgIGlmICghZnVuYykKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkNhbm5vdCBnZXQgZnVuY3Rpb24gdG8gZm9ybWF0IHR5cGUgZm9yICIgKyBjb25maWcubGl0ZXJh
bENsYXNzTmFtZSArICIgZnJvbSAiICsgdHlwZSk7CisgICAgICAgICAgICByZXR1cm4gZnVuYy5j
YWxsKHR5cGUsIHRoaXMudmFsdWUpOworICAgICAgICB9CisgICAgICAgIAogICAgICAgICBnZXQg
aXNDb25zdGV4cHIoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIGdldCBpc0xpdGVyYWwoKSB7
IHJldHVybiB0cnVlOyB9CiAgICAgICAgIAorICAgICAgICBnZXQgbmVnQ29uc3RleHByKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKCFjb25maWcubmVnQ29uc3RleHByKQorICAgICAgICAg
ICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gKCkg
PT4gY29uZmlnLm5lZ0NvbnN0ZXhwci5jYWxsKHRoaXMpOworICAgICAgICB9CisgICAgICAgIAog
ICAgICAgICB1bmlmeUltcGwodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcikKICAgICAgICAgewog
ICAgICAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBHZW5lcmljTGl0ZXJhbCkpCkluZGV4
OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9Eb3VibGVMaXRlcmFsLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RvdWJsZUxpdGVyYWwuanMJKHJl
dmlzaW9uIDIyMjE5OSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0RvdWJsZUxp
dGVyYWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTI1LDggKzI1LDE0IEBACiAidXNlIHN0cmljdCI7
CiAKIGxldCBEb3VibGVMaXRlcmFsID0gY3JlYXRlTGl0ZXJhbCh7CisgICAgbGl0ZXJhbENsYXNz
TmFtZTogIkRvdWJsZUxpdGVyYWwiLAogICAgIHByZWZlcnJlZFR5cGVOYW1lOiAiZG91YmxlIiwK
ICAgICAKKyAgICBuZWdDb25zdGV4cHIob3JpZ2luKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG5l
dyBJbnRMaXRlcmFsKG9yaWdpbiwgLXRoaXMudmFsdWUpOworICAgIH0sCisgICAgCiAgICAgY3Jl
YXRlVHlwZShvcmlnaW4sIHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBEb3VibGVM
aXRlcmFsVHlwZShvcmlnaW4sIHZhbHVlKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0VCdWZmZXJCdWlsZGVyLmpzCShyZXZpc2lvbiAyMjIxOTkpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9FQnVmZmVyQnVpbGRlci5qcwkod29ya2luZyBjb3B5
KQpAQCAtOTgsNiArOTgsMTEgQEAgY2xhc3MgRUJ1ZmZlckJ1aWxkZXIgZXh0ZW5kcyBWaXNpdG9y
IHsKICAgICAgICAgbm9kZS5lUHRyID0gRVB0ci5ib3goKTsKICAgICB9CiAgICAgCisgICAgdmlz
aXRFbnVtTGl0ZXJhbChub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS5lUHRyID0gRVB0ci5ib3go
KTsKKyAgICB9CisgICAgCiAgICAgdmlzaXRMb2dpY2FsTm90KG5vZGUpCiAgICAgewogICAgICAg
ICBub2RlLmVQdHIgPSBFUHRyLmJveCgpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvRW51bUxpdGVyYWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvRW51bUxpdGVyYWwuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvRW51bUxpdGVyYWwuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBz
dHJpY3QiOworCitjbGFzcyBFbnVtTGl0ZXJhbCBleHRlbmRzIEV4cHJlc3Npb24geworICAgIGNv
bnN0cnVjdG9yKG9yaWdpbiwgbWVtYmVyKQorICAgIHsKKyAgICAgICAgc3VwZXIob3JpZ2luKTsK
KyAgICAgICAgdGhpcy5fbWVtYmVyID0gbWVtYmVyOworICAgIH0KKyAgICAKKyAgICBnZXQgbWVt
YmVyKCkgeyByZXR1cm4gdGhpcy5fbWVtYmVyOyB9CisgICAgZ2V0IHR5cGUoKSB7IHJldHVybiB0
aGlzLm1lbWJlci5lbnVtVHlwZTsgfQorICAgIGdldCBpc0NvbnN0ZXhwcigpIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICAKKyAgICB1bmlmeUltcGwodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcikKKyAg
ICB7CisgICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgRW51bUxpdGVyYWwpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gdGhpcy5tZW1iZXIgPT0gb3RoZXIu
bWVtYmVyOworICAgIH0KKyAgICAgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRoaXMubWVtYmVyLmVudW1UeXBlLm5hbWUgKyAiLiIgKyB0aGlzLm1lbWJlci5uYW1l
OworICAgIH0KK30KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0VudW1NZW1i
ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bU1l
bWJlci5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9F
bnVtTWVtYmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3Mg
RW51bU1lbWJlciBleHRlbmRzIE5vZGUgeworICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbmFtZSwg
dmFsdWUpCisgICAgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9vcmlnaW4gPSBv
cmlnaW47CisgICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOworICAgICAgICB0aGlzLnZhbHVlID0g
dmFsdWU7CisgICAgfQorICAgIAorICAgIGdldCBvcmlnaW4oKSB7IHJldHVybiB0aGlzLl9vcmln
aW47IH0KKyAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KKyAgICAKKyAgICB0
b1N0cmluZygpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5uYW1lOworICAgICAg
ICBpZiAodGhpcy52YWx1ZSkKKyAgICAgICAgICAgIHJlc3VsdCArPSAiID0gIiArIHRoaXMudmFs
dWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvRW51bVR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvRW51bVR5cGUuanMJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvRW51bVR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVz
ZSBzdHJpY3QiOworCitjbGFzcyBFbnVtVHlwZSBleHRlbmRzIFR5cGUgeworICAgIGNvbnN0cnVj
dG9yKG9yaWdpbiwgbmFtZSwgYmFzZVR5cGUpCisgICAgeworICAgICAgICBzdXBlcigpOworICAg
ICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47CisgICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwor
ICAgICAgICB0aGlzLl9iYXNlVHlwZSA9IGJhc2VUeXBlOworICAgICAgICB0aGlzLl9tZW1iZXJz
ID0gbmV3IE1hcCgpOworICAgIH0KKyAgICAKKyAgICBhZGQobWVtYmVyKQorICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMuX21lbWJlcnMuaGFzKG1lbWJlci5uYW1lKSkKKyAgICAgICAgICAgIHRocm93
IG5ldyBXVHlwZUVycm9yKG1lbWJlci5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRHVwbGljYXRlIGVu
dW0gbWVtYmVyIG5hbWU6ICIgKyBtZW1iZXIubmFtZSk7CisgICAgICAgIG1lbWJlci5lbnVtVHlw
ZSA9IHRoaXM7CisgICAgICAgIHRoaXMuX21lbWJlcnMuc2V0KG1lbWJlci5uYW1lLCBtZW1iZXIp
OworICAgIH0KKyAgICAKKyAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9
CisgICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9CisgICAgZ2V0IGJhc2VUeXBl
KCkgeyByZXR1cm4gdGhpcy5fYmFzZVR5cGU7IH0KKyAgICAKKyAgICBnZXQgbWVtYmVyTmFtZXMo
KSB7IHJldHVybiB0aGlzLl9tZW1iZXJzLmtleXMoKTsgfQorICAgIG1lbWJlckJ5TmFtZShuYW1l
KSB7IHJldHVybiB0aGlzLl9tZW1iZXJzLmdldChuYW1lKTsgfQorICAgIGdldCBtZW1iZXJzKCkg
eyByZXR1cm4gdGhpcy5fbWVtYmVycy52YWx1ZXMoKTsgfQorICAgIGdldCBtZW1iZXJNYXAoKSB7
IHJldHVybiB0aGlzLl9tZW1iZXJzOyB9CisgICAgCisgICAgZ2V0IGlzUHJpbWl0aXZlKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHBvcHVsYXRlRGVmYXVsdFZhbHVlKGJ1ZmZlciwgb2Zm
c2V0KQorICAgIHsKKyAgICAgICAgdGhpcy5iYXNlVHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1ZShi
dWZmZXIsIG9mZnNldCk7CisgICAgfQorICAgIAorICAgIGdldCBzaXplKCkgeyByZXR1cm4gdGhp
cy5iYXNlVHlwZS5zaXplOyB9CisgICAgCisgICAgdG9TdHJpbmcoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuICJlbnVtICIgKyB0aGlzLm5hbWUgKyAiIDogIiArIHRoaXMuYmFzZVR5cGUgKyAiIHsg
IiArIEFycmF5LmZyb20odGhpcy5tZW1iZXJzKS5qb2luKCIsIikgKyAiIH0iOworICAgIH0KK30K
KwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9yLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0V2YWx1YXRvci5qcwkocmV2
aXNpb24gMjIyMTk5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvRXZhbHVhdG9y
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgY2xhc3MgRXZhbHVhdG9yIGV4
dGVuZHMgVmlzaXRvciB7CiAgICAgCiAgICAgdmlzaXRHZW5lcmljTGl0ZXJhbChub2RlKQogICAg
IHsKLSAgICAgICAgcmV0dXJuIG5vZGUuZVB0ci5ib3gobm9kZS52YWx1ZSk7CisgICAgICAgIHJl
dHVybiBub2RlLmVQdHIuYm94KG5vZGUudmFsdWVGb3JTZWxlY3RlZFR5cGUpOwogICAgIH0KICAg
ICAKICAgICB2aXNpdE51bGxMaXRlcmFsKG5vZGUpCkBAIC0xNTksNiArMTU5LDExIEBAIGNsYXNz
IEV2YWx1YXRvciBleHRlbmRzIFZpc2l0b3IgewogICAgIHsKICAgICAgICAgcmV0dXJuIG5vZGUu
ZVB0ci5ib3gobm9kZS52YWx1ZSk7CiAgICAgfQorICAgIAorICAgIHZpc2l0RW51bUxpdGVyYWwo
bm9kZSkKKyAgICB7CisgICAgICAgIHJldHVybiBub2RlLmVQdHIuYm94KG5vZGUubWVtYmVyLnZh
bHVlLnVuaWZ5Tm9kZS52YWx1ZUZvclNlbGVjdGVkVHlwZSk7CisgICAgfQogCiAgICAgdmlzaXRM
b2dpY2FsTm90KG5vZGUpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvRmxvYXRMaXRlcmFsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0Zsb2F0TGl0ZXJhbC5qcwkocmV2aXNpb24gMjIyMTk5KQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvRmxvYXRMaXRlcmFsLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNSw4
ICsyNSwxNCBAQAogInVzZSBzdHJpY3QiOwogCiBsZXQgRmxvYXRMaXRlcmFsID0gY3JlYXRlTGl0
ZXJhbCh7CisgICAgbGl0ZXJhbENsYXNzTmFtZTogIkZsb2F0TGl0ZXJhbCIsCiAgICAgcHJlZmVy
cmVkVHlwZU5hbWU6ICJmbG9hdCIsCiAgICAgCisgICAgbmVnQ29uc3RleHByKG9yaWdpbikKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbChvcmlnaW4sIC10aGlzLnZhbHVlKTsK
KyAgICB9LAorICAgIAogICAgIGNyZWF0ZVR5cGUob3JpZ2luLCB2YWx1ZSkKICAgICB7CiAgICAg
ICAgIHJldHVybiBuZXcgRmxvYXRMaXRlcmFsVHlwZShvcmlnaW4sIHZhbHVlKTsKSW5kZXg6IFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ZvbGRDb25zdGV4cHJzLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ZvbGRDb25zdGV4cHJzLmpzCShub25l
eGlzdGVudCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ZvbGRDb25zdGV4cHJz
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gZm9sZENv
bnN0ZXhwcnMocHJvZ3JhbSkKK3sKKyAgICBwcm9ncmFtLnZpc2l0KG5ldyBDb25zdGV4cHJGb2xk
ZXIoKSk7Cit9CisKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludExpdGVy
YWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50TGl0
ZXJhbC5qcwkocmV2aXNpb24gMjIyMTk5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvSW50TGl0ZXJhbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMjUsOCArMjUsMTQgQEAKICJ1c2Ug
c3RyaWN0IjsKIAogbGV0IEludExpdGVyYWwgPSBjcmVhdGVMaXRlcmFsKHsKKyAgICBsaXRlcmFs
Q2xhc3NOYW1lOiAiSW50TGl0ZXJhbCIsCiAgICAgcHJlZmVycmVkVHlwZU5hbWU6ICJpbnQiLAog
ICAgIAorICAgIG5lZ0NvbnN0ZXhwcihvcmlnaW4pCisgICAgeworICAgICAgICByZXR1cm4gbmV3
IEludExpdGVyYWwob3JpZ2luLCAoLXRoaXMudmFsdWUpIHwgMCk7CisgICAgfSwKKyAgICAKICAg
ICBjcmVhdGVUeXBlKG9yaWdpbiwgdmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gbmV3IElu
dExpdGVyYWxUeXBlKG9yaWdpbiwgdmFsdWUpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvSW50cmluc2ljcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCShyZXZpc2lvbiAyMjIxOTkpCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3
ICs2OSwxMyBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICAgICB0eXBlLmlzU2ln
bmVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICB0eXBlLmNhblJlcHJlc2VudCA9IHZhbHVlID0+
IGlzQml0d2lzZUVxdWl2YWxlbnQodmFsdWUgfCAwLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAg
dHlwZS5zaXplID0gMTsKKyAgICAgICAgICAgICAgICB0eXBlLmRlZmF1bHRWYWx1ZSA9IDA7Cisg
ICAgICAgICAgICAgICAgdHlwZS5jcmVhdGVMaXRlcmFsID0gKG9yaWdpbiwgdmFsdWUpID0+IElu
dExpdGVyYWwud2l0aFR5cGUob3JpZ2luLCB2YWx1ZSB8IDAsIHR5cGUpOworICAgICAgICAgICAg
ICAgIHR5cGUuc3VjY2Vzc29yVmFsdWUgPSB2YWx1ZSA9PiAodmFsdWUgKyAxKSB8IDA7CisgICAg
ICAgICAgICAgICAgdHlwZS52YWx1ZXNFcXVhbCA9IChhLCBiKSA9PiBhID09PSBiOwogICAgICAg
ICAgICAgICAgIHR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAoYnVmZmVyLCBvZmZzZXQpID0+
IGJ1ZmZlci5zZXQob2Zmc2V0LCAwKTsKKyAgICAgICAgICAgICAgICB0eXBlLmZvcm1hdFZhbHVl
RnJvbUludExpdGVyYWwgPSB2YWx1ZSA9PiB2YWx1ZSB8IDA7CisgICAgICAgICAgICAgICAgdHlw
ZS5mb3JtYXRWYWx1ZUZyb21VaW50TGl0ZXJhbCA9IHZhbHVlID0+IHZhbHVlIHwgMDsKICAgICAg
ICAgICAgIH0pOwogCiAgICAgICAgIHRoaXMuX21hcC5zZXQoCkBAIC04MSw3ICs4NywxMyBAQCBj
bGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICAgICB0eXBlLmlzU2lnbmVkID0gZmFsc2U7
CiAgICAgICAgICAgICAgICAgdHlwZS5jYW5SZXByZXNlbnQgPSB2YWx1ZSA9PiBpc0JpdHdpc2VF
cXVpdmFsZW50KHZhbHVlID4+PiAwLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdHlwZS5zaXpl
ID0gMTsKKyAgICAgICAgICAgICAgICB0eXBlLmRlZmF1bHRWYWx1ZSA9IDA7CisgICAgICAgICAg
ICAgICAgdHlwZS5jcmVhdGVMaXRlcmFsID0gKG9yaWdpbiwgdmFsdWUpID0+IEludExpdGVyYWwu
d2l0aFR5cGUob3JpZ2luLCB2YWx1ZSA+Pj4gMCwgdHlwZSk7CisgICAgICAgICAgICAgICAgdHlw
ZS5zdWNjZXNzb3JWYWx1ZSA9IHZhbHVlID0+ICh2YWx1ZSArIDEpID4+PiAwOworICAgICAgICAg
ICAgICAgIHR5cGUudmFsdWVzRXF1YWwgPSAoYSwgYikgPT4gYSA9PT0gYjsKICAgICAgICAgICAg
ICAgICB0eXBlLnBvcHVsYXRlRGVmYXVsdFZhbHVlID0gKGJ1ZmZlciwgb2Zmc2V0KSA9PiBidWZm
ZXIuc2V0KG9mZnNldCwgMCk7CisgICAgICAgICAgICAgICAgdHlwZS5mb3JtYXRWYWx1ZUZyb21J
bnRMaXRlcmFsID0gdmFsdWUgPT4gdmFsdWUgPj4+IDA7CisgICAgICAgICAgICAgICAgdHlwZS5m
b3JtYXRWYWx1ZUZyb21VaW50TGl0ZXJhbCA9IHZhbHVlID0+IHZhbHVlID4+PiAwOwogICAgICAg
ICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5fbWFwLnNldCgKQEAgLTkzLDYgKzEwNSwxMCBAQCBj
bGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICAgICB0eXBlLmlzTnVtYmVyID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICB0eXBlLmNhblJlcHJlc2VudCA9IHZhbHVlID0+IGlzQml0d2lzZUVx
dWl2YWxlbnQoTWF0aC5mcm91bmQodmFsdWUpLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdHlw
ZS5wb3B1bGF0ZURlZmF1bHRWYWx1ZSA9IChidWZmZXIsIG9mZnNldCkgPT4gYnVmZmVyLnNldChv
ZmZzZXQsIDApOworICAgICAgICAgICAgICAgIHR5cGUuZm9ybWF0VmFsdWVGcm9tSW50TGl0ZXJh
bCA9IHZhbHVlID0+IHZhbHVlOworICAgICAgICAgICAgICAgIHR5cGUuZm9ybWF0VmFsdWVGcm9t
VWludExpdGVyYWwgPSB2YWx1ZSA9PiB2YWx1ZTsKKyAgICAgICAgICAgICAgICB0eXBlLmZvcm1h
dFZhbHVlRnJvbUZsb2F0TGl0ZXJhbCA9IHZhbHVlID0+IHZhbHVlOworICAgICAgICAgICAgICAg
IHR5cGUuZm9ybWF0VmFsdWVGcm9tRG91YmxlTGl0ZXJhbCA9IHZhbHVlID0+IHZhbHVlOwogICAg
ICAgICAgICAgfSk7CiAKICAgICAgICAgdGhpcy5fbWFwLnNldCgKQEAgLTEwNCw2ICsxMjAsMTAg
QEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgICAgICAgICAgdHlwZS5pc051bWJlciA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgdHlwZS5jYW5SZXByZXNlbnQgPSB2YWx1ZSA9PiB0cnVlOwog
ICAgICAgICAgICAgICAgIHR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAoYnVmZmVyLCBvZmZz
ZXQpID0+IGJ1ZmZlci5zZXQob2Zmc2V0LCAwKTsKKyAgICAgICAgICAgICAgICB0eXBlLmZvcm1h
dFZhbHVlRnJvbUludExpdGVyYWwgPSB2YWx1ZSA9PiB2YWx1ZTsKKyAgICAgICAgICAgICAgICB0
eXBlLmZvcm1hdFZhbHVlRnJvbVVpbnRMaXRlcmFsID0gdmFsdWUgPT4gdmFsdWU7CisgICAgICAg
ICAgICAgICAgdHlwZS5mb3JtYXRWYWx1ZUZyb21GbG9hdExpdGVyYWwgPSB2YWx1ZSA9PiB2YWx1
ZTsKKyAgICAgICAgICAgICAgICB0eXBlLmZvcm1hdFZhbHVlRnJvbURvdWJsZUxpdGVyYWwgPSB2
YWx1ZSA9PiB2YWx1ZTsKICAgICAgICAgICAgIH0pOwogCiAgICAgICAgIHRoaXMuX21hcC5zZXQo
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpz
CShyZXZpc2lvbiAyMjIxOTkpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1l
UmVzb2x2ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw2ICsyNTUsMTggQEAgY2xhc3MgTmFt
ZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgCiAgICAgdmlzaXREb3RFeHByZXNzaW9u
KG5vZGUpCiAgICAgeworICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGEgcmVmZXJlbmNlIHRvIGFu
IGVudW0uIExldCdzIHJlc29sdmUgdGhhdCBub3cuCisgICAgICAgIGlmIChub2RlLnN0cnVjdCBp
bnN0YW5jZW9mIFZhcmlhYmxlUmVmKSB7CisgICAgICAgICAgICBsZXQgZW51bVR5cGUgPSB0aGlz
Ll9uYW1lQ29udGV4dC5nZXQoVHlwZSwgbm9kZS5zdHJ1Y3QubmFtZSk7CisgICAgICAgICAgICBp
ZiAoZW51bVR5cGUgJiYgZW51bVR5cGUgaW5zdGFuY2VvZiBFbnVtVHlwZSkgeworICAgICAgICAg
ICAgICAgIGxldCBlbnVtTWVtYmVyID0gZW51bVR5cGUubWVtYmVyQnlOYW1lKG5vZGUuZmllbGRO
YW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVudW1NZW1iZXIpCisgICAgICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkVudW0g
IiArIGVudW1UeXBlLm5hbWUgKyAiIGRvZXMgbm90IGhhdmUgYSBtZW1iZXIgbmFtZWQgIiArIG5v
ZGUuZmllbGROYW1lKTsKKyAgICAgICAgICAgICAgICBub2RlLmJlY29tZShuZXcgRW51bUxpdGVy
YWwobm9kZS5vcmlnaW4sIGVudW1NZW1iZXIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIHRoaXMuX2hhbmRsZVBy
b3BlcnR5QWNjZXNzKG5vZGUpOwogICAgICAgICBzdXBlci52aXNpdERvdEV4cHJlc3Npb24obm9k
ZSk7CiAgICAgfQpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2UuanMJKHJl
dmlzaW9uIDIyMjE5OSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjcsNyArMjI3LDEzIEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dy
YW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAKICAgICBmdW5jdGlvbiBwYXJzZUNvbnN0ZXhwcigp
CiAgICAgewotICAgICAgICByZXR1cm4gcGFyc2VUZXJtKCk7CisgICAgICAgIGxldCB0b2tlbjsK
KyAgICAgICAgaWYgKHRva2VuID0gdHJ5Q29uc3VtZSgiLSIpKQorICAgICAgICAgICAgcmV0dXJu
IG5ldyBDYWxsRXhwcmVzc2lvbih0b2tlbiwgIm9wZXJhdG9yIiArIHRva2VuLnRleHQsIFtdLCBb
cGFyc2VUZXJtKCldKTsKKyAgICAgICAgbGV0IGxlZnQgPSBwYXJzZVRlcm0oKTsKKyAgICAgICAg
aWYgKHRva2VuID0gdHJ5Q29uc3VtZSgiLiIpKQorICAgICAgICAgICAgbGVmdCA9IG5ldyBEb3RF
eHByZXNzaW9uKHRva2VuLCBsZWZ0LCBjb25zdW1lS2luZCgiaWRlbnRpZmllciIpLnRleHQpOwor
ICAgICAgICByZXR1cm4gbGVmdDsKICAgICB9CiAgICAgCiAgICAgZnVuY3Rpb24gcGFyc2VUeXBl
QXJndW1lbnRzKCkKQEAgLTM5NiwxMiArNDAyLDE3IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0s
IG9yaWdpbiwgb3JpZ2luS2kKICAgICAKICAgICBmdW5jdGlvbiBwYXJzZVBvc3NpYmxlU3VmZml4
KCkKICAgICB7Ci0gICAgICAgIGlmIChpc0NhbGxFeHByZXNzaW9uKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gcGFyc2VDYWxsRXhwcmVzc2lvbigpOworICAgICAgICBsZXQgYWNjZXB0YWJsZU9wZXJh
dG9ycyA9IFsiKysiLCAiLS0iLCAiLiIsICItPiIsICJbIl07CisgICAgICAgIGxldCBsaW1pdGVk
T3BlcmF0b3JzID0gWyIuIiwgIi0+IiwgIlsiXTsKKyAgICAgICAgbGV0IGxlZnQ7CisgICAgICAg
IGlmIChpc0NhbGxFeHByZXNzaW9uKCkpIHsKKyAgICAgICAgICAgIGxlZnQgPSBwYXJzZUNhbGxF
eHByZXNzaW9uKCk7CisgICAgICAgICAgICBhY2NlcHRhYmxlT3BlcmF0b3JzID0gbGltaXRlZE9w
ZXJhdG9yczsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBsZWZ0ID0gcGFyc2VUZXJtKCk7
CiAgICAgICAgIAotICAgICAgICBsZXQgbGVmdCA9IHBhcnNlVGVybSgpOwogICAgICAgICBsZXQg
dG9rZW47Ci0gICAgICAgIHdoaWxlICh0b2tlbiA9IHRyeUNvbnN1bWUoIisrIiwgIi0tIiwgIi4i
LCAiLT4iLCAiWyIpKSB7CisgICAgICAgIHdoaWxlICh0b2tlbiA9IHRyeUNvbnN1bWUoLi4uYWNj
ZXB0YWJsZU9wZXJhdG9ycykpIHsKICAgICAgICAgICAgIHN3aXRjaCAodG9rZW4udGV4dCkgewog
ICAgICAgICAgICAgY2FzZSAiKysiOgogICAgICAgICAgICAgY2FzZSAiLS0iOgpAQCAtNDIyLDYg
KzQzMyw3IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgb3JpZ2luS2kKICAgICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgdG9r
ZW46ICIgKyB0b2tlbik7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBhY2NlcHRhYmxlT3Bl
cmF0b3JzID0gbGltaXRlZE9wZXJhdG9yczsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gbGVm
dDsKICAgICB9CkBAIC05MzEsNiArOTQzLDM1IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9y
aWdpbiwgb3JpZ2luS2kKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgCisgICAg
ZnVuY3Rpb24gcGFyc2VFbnVtTWVtYmVyKCkKKyAgICB7CisgICAgICAgIGxldCBuYW1lID0gY29u
c3VtZUtpbmQoImlkZW50aWZpZXIiKTsKKyAgICAgICAgbGV0IHZhbHVlID0gbnVsbDsKKyAgICAg
ICAgaWYgKHRyeUNvbnN1bWUoIj0iKSkKKyAgICAgICAgICAgIHZhbHVlID0gcGFyc2VDb25zdGV4
cHIoKTsKKyAgICAgICAgcmV0dXJuIG5ldyBFbnVtTWVtYmVyKG5hbWUsIG5hbWUudGV4dCwgdmFs
dWUpOworICAgIH0KKyAgICAKKyAgICBmdW5jdGlvbiBwYXJzZUVudW1UeXBlKCkKKyAgICB7Cisg
ICAgICAgIGNvbnN1bWUoImVudW0iKTsKKyAgICAgICAgbGV0IG5hbWUgPSBjb25zdW1lS2luZCgi
aWRlbnRpZmllciIpOworICAgICAgICBsZXQgYmFzZVR5cGU7CisgICAgICAgIGlmICh0cnlDb25z
dW1lKCI6IikpCisgICAgICAgICAgICBiYXNlVHlwZSA9IHBhcnNlVHlwZSgpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBiYXNlVHlwZSA9IG5ldyBUeXBlUmVmKG5hbWUsICJpbnQiLCBbXSk7
CisgICAgICAgIGNvbnN1bWUoInsiKTsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFbnVtVHlw
ZShuYW1lLCBuYW1lLnRleHQsIGJhc2VUeXBlKTsKKyAgICAgICAgd2hpbGUgKCF0ZXN0KCJ9Iikp
IHsKKyAgICAgICAgICAgIHJlc3VsdC5hZGQocGFyc2VFbnVtTWVtYmVyKCkpOworICAgICAgICAg
ICAgaWYgKCF0cnlDb25zdW1lKCIsIikpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgY29uc3VtZSgifSIpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGxldCB0b2tlbiA9IGxleGVyLnBlZWsoKTsK
ICAgICAgICAgaWYgKCF0b2tlbikKQEAgLTk0Niw3ICs5ODcsNyBAQCBmdW5jdGlvbiBwYXJzZShw
cm9ncmFtLCBvcmlnaW4sIG9yaWdpbktpCiAgICAgICAgIGVsc2UgaWYgKHRva2VuLnRleHQgPT0g
InN0cnVjdCIpCiAgICAgICAgICAgICBwcm9ncmFtLmFkZChwYXJzZVN0cnVjdFR5cGUoKSk7CiAg
ICAgICAgIGVsc2UgaWYgKHRva2VuLnRleHQgPT0gImVudW0iKQotICAgICAgICAgICAgcHJvZ3Jh
bS5hZGQocGFyc2VFbnVtKCkpOworICAgICAgICAgICAgcHJvZ3JhbS5hZGQocGFyc2VFbnVtVHlw
ZSgpKTsKICAgICAgICAgZWxzZSBpZiAodG9rZW4udGV4dCA9PSAicHJvdG9jb2wiKQogICAgICAg
ICAgICAgcHJvZ3JhbS5hZGQocGFyc2VQcm90b2NvbERlY2woKSk7CiAgICAgICAgIGVsc2UKSW5k
ZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1ByZXBhcmUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkocmV2aXNpb24gMjIy
MTk5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBsZXQgcHJlcGFyZSA9ICgoKSA9PiB7CiAgICAgICAg
IGxldCBwcm9ncmFtID0gY2xvbmVQcm9ncmFtKHN0YW5kYXJkUHJvZ3JhbSk7CiAgICAgICAgIHBh
cnNlKHByb2dyYW0sIG9yaWdpbiwgInVzZXIiLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KTsKICAg
ICAgICAgCisgICAgICAgIGZvbGRDb25zdGV4cHJzKHByb2dyYW0pOwogICAgICAgICBsZXQgbmFt
ZVJlc29sdmVyID0gY3JlYXRlTmFtZVJlc29sdmVyKHByb2dyYW0pOwogICAgICAgICByZXNvbHZl
TmFtZXNJblR5cGVzKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CiAgICAgICAgIHJlc29sdmVOYW1l
c0luUHJvdG9jb2xzKHByb2dyYW0sIG5hbWVSZXNvbHZlcik7CkBAIC00Myw2ICs0NCw3IEBAIGxl
dCBwcmVwYXJlID0gKCgpID0+IHsKICAgICAgICAgLy8gRklYTUU6IE5lZWQgdG8gdmVyaWZ5IHRo
YXQgc3RydWN0cmUgYXJlIG5vdCBjeWNsaWMuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzcwNDQKICAgICAgICAgc3ludGhlc2l6ZVN0cnVjdEFj
Y2Vzc29ycyhwcm9ncmFtKTsKKyAgICAgICAgc3ludGhlc2l6ZUVudW1GdW5jdGlvbnMocHJvZ3Jh
bSk7CiAgICAgICAgIHJlc29sdmVOYW1lc0luRnVuY3Rpb25zKHByb2dyYW0sIG5hbWVSZXNvbHZl
cik7CiAgICAgICAgIHJlc29sdmVUeXBlRGVmc0luRnVuY3Rpb25zKHByb2dyYW0pOwogICAgICAg
ICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCShyZXZp
c2lvbiAyMjIxOTkpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksNyBAQCBjbGFzcyBSZXdyaXRlciB7CiAgICAg
dmlzaXRTdHJ1Y3RUeXBlKG5vZGUpIHsgcmV0dXJuIG5vZGU7IH0KICAgICB2aXNpdENvbnN0ZXhw
clR5cGVQYXJhbWV0ZXIobm9kZSkgeyByZXR1cm4gbm9kZTsgfQogICAgIHZpc2l0UHJvdG9jb2xE
ZWNsKG5vZGUpIHsgcmV0dXJuIG5vZGU7IH0KKyAgICB2aXNpdEVudW1UeXBlKG5vZGUpIHsgcmV0
dXJuIG5vZGU7IH0KIAogICAgIC8vIFRoaXMgaXMgYWxtb3N0IHdyb25nLiBXZSBpbnN0YW50aWF0
ZSBGdW5jIGluIFN1YnN0aXR1dGlvbiBpbiBQcm90b2NvbERlY2wuIFRoZW4sIHdlIGVuZCB1cAog
ICAgIC8vIG5vdCByZXdyaXRpbmcgdHlwZSB2YXJpYWJsZXMuIEkgdGhpbmsgdGhhdCBqdXN0IHdv
cmtzIGJlY2F1c2Ugbm90IHJld3JpdGluZyB0aGVtIHRoZXJlIGlzIE9LLgpAQCAtMTQxLDYgKzE0
MiwxOCBAQCBjbGFzcyBSZXdyaXRlciB7CiAgICAgICAgIHJldHVybiBuZXcgRmllbGQobm9kZS5v
cmlnaW4sIG5vZGUubmFtZSwgbm9kZS50eXBlLnZpc2l0KHRoaXMpKTsKICAgICB9CiAgICAgCisg
ICAgdmlzaXRFbnVtTWVtYmVyKG5vZGUpCisgICAgeworICAgICAgICByZXR1cm4gbmV3IEVudW1N
ZW1iZXIobm9kZS5vcmlnaW4sIG5vZGUubmFtZSwgbm9kZS52YWx1ZS52aXNpdCh0aGlzKSk7Cisg
ICAgfQorICAgIAorICAgIHZpc2l0RW51bUxpdGVyYWwobm9kZSkKKyAgICB7CisgICAgICAgIGxl
dCByZXN1bHQgPSBuZXcgRW51bUxpdGVyYWwobm9kZS5vcmlnaW4sIG5vZGUubWVtYmVyKTsKKyAg
ICAgICAgcmVzdWx0LmVQdHIgPSBub2RlLmVQdHI7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorICAgIAogICAgIHZpc2l0UmVmZXJlbmNlVHlwZShub2RlKQogICAgIHsKICAgICAgICAg
cmV0dXJuIG5ldyBub2RlLmNvbnN0cnVjdG9yKG5vZGUucm9naWluLCBub2RlLmFkZHJlc3NTcGFj
ZSwgbm9kZS5lbGVtZW50VHlwZS52aXNpdCh0aGlzKSk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9TdGF0ZW1lbnRDbG9uZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhdGVtZW50Q2xvbmVyLmpzCShyZXZpc2lvbiAyMjIxOTkp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGF0ZW1lbnRDbG9uZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTEwOSw1ICsxMDksMTMgQEAgY2xhc3MgU3RhdGVtZW50Q2xvbmVyIGV4
dGVuZHMgUmV3cml0ZXIgewogICAgIHsKICAgICAgICAgcmV0dXJuIG5ldyBUeXBlT3JWYXJpYWJs
ZVJlZihub2RlLm9yaWdpbiwgbm9kZS5uYW1lKTsKICAgICB9CisgICAgCisgICAgdmlzaXRFbnVt
VHlwZShub2RlKQorICAgIHsKKyAgICAgICAgbGV0IHJlc3VsdCA9IG5ldyBFbnVtVHlwZShub2Rl
Lm9yaWdpbiwgbm9kZS5uYW1lLCBub2RlLmJhc2VUeXBlLnZpc2l0KHRoaXMpKTsKKyAgICAgICAg
Zm9yIChsZXQgbWVtYmVyIG9mIG5vZGUubWVtYmVycykKKyAgICAgICAgICAgIHJlc3VsdC5hZGQo
bWVtYmVyKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwkocmV2aXNpb24gMjIyMTk5
KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsNiArNDMsNyBAQCBjbGFzcyBTdHJ1Y3RUeXBlIGV4dGVuZHMgVHlwZSB7
CiAgICAgfQogICAgIAogICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQorICAg
IGdldCBvcmlnaW4oKSB7IHJldHVybiB0aGlzLl9vcmlnaW47IH0KICAgICBnZXQgdHlwZVBhcmFt
ZXRlcnMoKSB7IHJldHVybiB0aGlzLl90eXBlUGFyYW1ldGVyczsgfQogICAgIAogICAgIGdldCBm
aWVsZE5hbWVzKCkgeyByZXR1cm4gdGhpcy5fZmllbGRzLmtleXMoKTsgfQpAQCAtNjQsNyArNjUs
NyBAQCBjbGFzcyBTdHJ1Y3RUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgIAogICAgICAgICBp
ZiAodHlwZUFyZ3VtZW50cykgewogICAgICAgICAgICAgaWYgKHR5cGVBcmd1bWVudHMubGVuZ3Ro
ICE9IHRoaXMudHlwZVBhcmFtZXRlcnMubGVuZ3RoKQotICAgICAgICAgICAgICAgIHRocm93IG5l
dyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJXcm9uZyBudW1iZXIgb2YgdHlwZSBh
cmd1bWVudHMgdG8gaW5zdGFudGlhdGlvbiIpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBX
VHlwZUVycm9yKHRoaXMub3JpZ2luLm9yaWdpblN0cmluZywgIldyb25nIG51bWJlciBvZiB0eXBl
IGFyZ3VtZW50cyB0byBpbnN0YW50aWF0aW9uIik7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmICghdHlwZUFyZ3VtZW50cy5sZW5ndGgpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplRW51bUZ1bmN0
aW9ucy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TeW50
aGVzaXplRW51bUZ1bmN0aW9ucy5qcwkobm9uZXhpc3RlbnQpCisrKyBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9TeW50aGVzaXplRW51bUZ1bmN0aW9ucy5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIHN5bnRoZXNpemVFbnVtRnVuY3Rpb25zKHBy
b2dyYW0pCit7CisgICAgZm9yIChsZXQgdHlwZSBvZiBwcm9ncmFtLnR5cGVzLnZhbHVlcygpKSB7
CisgICAgICAgIGlmICghKHR5cGUgaW5zdGFuY2VvZiBFbnVtVHlwZSkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgCisgICAgICAgIGxldCBuYXRpdmVGdW5jOworICAgICAgICBsZXQg
aXNDYXN0ID0gZmFsc2U7CisgICAgICAgIGxldCBzaGFkZXJUeXBlOworICAgICAgICAKKyAgICAg
ICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAgdHlwZS5vcmlnaW4s
ICJvcGVyYXRvcj09IiwgbmV3IFR5cGVSZWYodHlwZS5vcmlnaW4sICJib29sIiwgW10pLCBbXSwK
KyAgICAgICAgICAgIFsKKyAgICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcih0eXBlLm9y
aWdpbiwgbnVsbCwgbmV3IFR5cGVSZWYodHlwZS5vcmlnaW4sIHR5cGUubmFtZSwgW10pKSwKKyAg
ICAgICAgICAgICAgICBuZXcgRnVuY1BhcmFtZXRlcih0eXBlLm9yaWdpbiwgbnVsbCwgbmV3IFR5
cGVSZWYodHlwZS5vcmlnaW4sIHR5cGUubmFtZSwgW10pKQorICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgIGlzQ2FzdCwgc2hhZGVyVHlwZSk7CisgICAgICAgIG5hdGl2ZUZ1bmMuaW1wbGVtZW50
YXRpb24gPSAoW2xlZnQsIHJpZ2h0XSkgPT4gRVB0ci5ib3gobGVmdC5sb2FkVmFsdWUoKSA9PSBy
aWdodC5sb2FkVmFsdWUoKSk7CisgICAgICAgIHByb2dyYW0uYWRkKG5hdGl2ZUZ1bmMpOworICAg
ICAgICAKKyAgICAgICAgbmF0aXZlRnVuYyA9IG5ldyBOYXRpdmVGdW5jKAorICAgICAgICAgICAg
dHlwZS5vcmlnaW4sICJvcGVyYXRvci52YWx1ZSIsIHR5cGUuYmFzZVR5cGUudmlzaXQobmV3IFJl
d3JpdGVyKCkpLCBbXSwKKyAgICAgICAgICAgIFtuZXcgRnVuY1BhcmFtZXRlcih0eXBlLm9yaWdp
biwgbnVsbCwgbmV3IFR5cGVSZWYodHlwZS5vcmlnaW4sIHR5cGUubmFtZSwgW10pKV0sCisgICAg
ICAgICAgICBpc0Nhc3QsIHNoYWRlclR5cGUpOworICAgICAgICBuYXRpdmVGdW5jLmltcGxlbWVu
dGF0aW9uID0gKFt2YWx1ZV0pID0+IHZhbHVlOworICAgICAgICBwcm9ncmFtLmFkZChuYXRpdmVG
dW5jKTsKKyAgICAgICAgCisgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZlRnVuYygKKyAg
ICAgICAgICAgIHR5cGUub3JpZ2luLCAib3BlcmF0b3IgY2FzdCIsIHR5cGUuYmFzZVR5cGUudmlz
aXQobmV3IFJld3JpdGVyKCkpLCBbXSwKKyAgICAgICAgICAgIFtuZXcgRnVuY1BhcmFtZXRlcih0
eXBlLm9yaWdpbiwgbnVsbCwgbmV3IFR5cGVSZWYodHlwZS5vcmlnaW4sIHR5cGUubmFtZSwgW10p
KV0sCisgICAgICAgICAgICBpc0Nhc3QsIHNoYWRlclR5cGUpOworICAgICAgICBuYXRpdmVGdW5j
LmltcGxlbWVudGF0aW9uID0gKFt2YWx1ZV0pID0+IHZhbHVlOworICAgICAgICBwcm9ncmFtLmFk
ZChuYXRpdmVGdW5jKTsKKyAgICAgICAgCisgICAgICAgIG5hdGl2ZUZ1bmMgPSBuZXcgTmF0aXZl
RnVuYygKKyAgICAgICAgICAgIHR5cGUub3JpZ2luLCAib3BlcmF0b3IgY2FzdCIsIG5ldyBUeXBl
UmVmKHR5cGUub3JpZ2luLCB0eXBlLm5hbWUsIFtdKSwgW10sCisgICAgICAgICAgICBbbmV3IEZ1
bmNQYXJhbWV0ZXIodHlwZS5vcmlnaW4sIG51bGwsIHR5cGUuYmFzZVR5cGUudmlzaXQobmV3IFJl
d3JpdGVyKCkpKV0sCisgICAgICAgICAgICBpc0Nhc3QsIHNoYWRlclR5cGUpOworICAgICAgICBu
YXRpdmVGdW5jLmltcGxlbWVudGF0aW9uID0gKFt2YWx1ZV0pID0+IHZhbHVlOworICAgICAgICBw
cm9ncmFtLmFkZChuYXRpdmVGdW5jKTsKKyAgICB9Cit9CkluZGV4OiBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvVGVzdC5odG1sCShyZXZpc2lvbiAyMjIxOTkpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKIDxzY3JpcHQgc3JjPSJDaGVja2VyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDbG9u
ZVByb2dyYW0uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNvbW1hRXhwcmVzc2lvbi5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQ29uc3RleHByRm9sZGVyLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJDb25zdGV4cHJUeXBlUGFyYW1ldGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJDb250aW51ZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ29udmVydFB0clRvQXJy
YXlSZWZFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KQEAgLTQ1LDYgKzQ2LDkgQEAKIDxzY3JpcHQg
c3JjPSJFQnVmZmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJFQnVmZmVyQnVpbGRlci5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRVB0ci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iRW51bUxpdGVyYWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkVudW1NZW1iZXIuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkVudW1UeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJFdmFsdWF0aW9uQ29tbW9uLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJFdmFsdWF0
b3IuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkV4cHJlc3Npb25GaW5kZXIuanMiPjwvc2Ny
aXB0PgpAQCAtNTMsNiArNTcsNyBAQAogPHNjcmlwdCBzcmM9IkZsYXR0ZW5Qcm90b2NvbEV4dGVu
ZHMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZsb2F0TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iRmxvYXRMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iRm9sZENvbnN0ZXhwcnMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZvckxvb3AuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkZ1bmMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IkZ1bmNEZWYuanMiPjwvc2NyaXB0PgpAQCAtMTEyLDYgKzExNyw3IEBACiA8c2NyaXB0IHNyYz0i
U3RydWN0TGF5b3V0QnVpbGRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3RydWN0VHlw
ZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3Vic3RpdHV0aW9uLmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJTeW50aGVzaXplRW51bUZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+CiA8c2Ny
aXB0IHNyYz0iU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
IHNyYz0iVHlwZURlZi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iVHlwZURlZlJlc29sdmVy
LmpzIj48L3NjcmlwdD4KSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3Qu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwko
cmV2aXNpb24gMjIyMTk5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5q
cwkod29ya2luZyBjb3B5KQpAQCAtMTAxLDYgKzEwMSwxNCBAQCBmdW5jdGlvbiBjaGVja0ludChw
cm9ncmFtLCByZXN1bHQsIGV4cGVjCiAgICAgY2hlY2tOdW1iZXIocHJvZ3JhbSwgcmVzdWx0LCBl
eHBlY3RlZCk7CiB9CiAKK2Z1bmN0aW9uIGNoZWNrRW51bShwcm9ncmFtLCByZXN1bHQsIGV4cGVj
dGVkKQoreworICAgIGlmICghKHJlc3VsdC50eXBlIGluc3RhbmNlb2YgRW51bVR5cGUpKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdCB0eXBlOyByZXN1bHQ6ICIgKyByZXN1
bHQpOworICAgIGlmIChyZXN1bHQudmFsdWUgIT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiV3JvbmcgcmVzdWx0OiAiICsgcmVzdWx0LnZhbHVlICsgIiAoZXhwZWN0ZWQgIiAr
IGV4cGVjdGVkICsgIikiKTsKK30KKwogZnVuY3Rpb24gY2hlY2tVaW50KHByb2dyYW0sIHJlc3Vs
dCwgZXhwZWN0ZWQpCiB7CiAgICAgaWYgKCFyZXN1bHQudHlwZS5lcXVhbHMocHJvZ3JhbS5pbnRy
aW5zaWNzLnVpbnQzMikpCkBAIC0zODk0LDYgKzM5MDIsMjgxIEBAIGZ1bmN0aW9uIFRFU1RfYnVp
bHRpblZlY3RvcnMoKQogICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImZvb2Q2IiwgW10sIFtdKSwgZmFsc2UpOwogfQogCitmdW5jdGlvbiBURVNUX3NpbXBsZUVu
dW0oKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgZW51bSBGb28gewor
ICAgICAgICAgICAgV2FyLAorICAgICAgICAgICAgRmFtaW5lLAorICAgICAgICAgICAgUGVzdGls
ZW5jZSwKKyAgICAgICAgICAgIERlYXRoCisgICAgICAgIH0KKyAgICAgICAgRm9vIHdhcigpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uV2FyOworICAgICAgICB9CisgICAgICAg
IEZvbyBmYW1pbmUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLkZhbWluZTsK
KyAgICAgICAgfQorICAgICAgICBGb28gcGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBGb28uUGVzdGlsZW5jZTsKKyAgICAgICAgfQorICAgICAgICBGb28gZGVhdGgo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLkRlYXRoOworICAgICAgICB9Cisg
ICAgICAgIGJvb2wgZXF1YWxzKEZvbyBhLCBGb28gYikKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIGEgPT0gYjsKKyAgICAgICAgfQorICAgICAgICBib29sIG5vdEVxdWFscyhGb28gYSwg
Rm9vIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhICE9IGI7CisgICAgICAgIH0K
KyAgICAgICAgYm9vbCB0ZXN0U2ltcGxlRXF1YWwoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZXF1YWxzKEZvby5XYXIsIEZvby5XYXIpOworICAgICAgICB9CisgICAgICAgIGJvb2wg
dGVzdEFub3RoZXJFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcXVhbHMo
Rm9vLlBlc3RpbGVuY2UsIEZvby5QZXN0aWxlbmNlKTsKKyAgICAgICAgfQorICAgICAgICBib29s
IHRlc3ROb3RFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBlcXVhbHMoRm9v
LkZhbWluZSwgRm9vLkRlYXRoKTsKKyAgICAgICAgfQorICAgICAgICBib29sIHRlc3RTaW1wbGVO
b3RFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBub3RFcXVhbHMoRm9vLldh
ciwgRm9vLldhcik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCB0ZXN0QW5vdGhlck5vdEVxdWFs
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5vdEVxdWFscyhGb28uUGVzdGlsZW5j
ZSwgRm9vLlBlc3RpbGVuY2UpOworICAgICAgICB9CisgICAgICAgIGJvb2wgdGVzdE5vdE5vdEVx
dWFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG5vdEVxdWFscyhGb28uRmFtaW5l
LCBGb28uRGVhdGgpOworICAgICAgICB9CisgICAgICAgIGludCBpbnRXYXIoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaW50KHdhcigpKTsKKyAgICAgICAgfQorICAgICAgICBpbnQg
aW50RmFtaW5lKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludChmYW1pbmUoKSk7
CisgICAgICAgIH0KKyAgICAgICAgaW50IGludFBlc3RpbGVuY2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gaW50KHBlc3RpbGVuY2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgaW50
IGludERlYXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludChkZWF0aCgpKTsK
KyAgICAgICAgfQorICAgICAgICBpbnQgd2FyVmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gd2FyKCkudmFsdWU7CisgICAgICAgIH0KKyAgICAgICAgaW50IGZhbWluZVZhbHVl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGZhbWluZSgpLnZhbHVlOworICAgICAg
ICB9CisgICAgICAgIGludCBwZXN0aWxlbmNlVmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gcGVzdGlsZW5jZSgpLnZhbHVlOworICAgICAgICB9CisgICAgICAgIGludCBkZWF0
aFZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGRlYXRoKCkudmFsdWU7Cisg
ICAgICAgIH0KKyAgICAgICAgaW50IHdhclZhbHVlTGl0ZXJhbCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBGb28uV2FyLnZhbHVlOworICAgICAgICB9CisgICAgICAgIGludCBmYW1p
bmVWYWx1ZUxpdGVyYWwoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLkZhbWlu
ZS52YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBpbnQgcGVzdGlsZW5jZVZhbHVlTGl0ZXJhbCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uUGVzdGlsZW5jZS52YWx1ZTsKKyAg
ICAgICAgfQorICAgICAgICBpbnQgZGVhdGhWYWx1ZUxpdGVyYWwoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gRm9vLkRlYXRoLnZhbHVlOworICAgICAgICB9CisgICAgICAgIEZvbyBp
bnRXYXJCYWNrd2FyZHMoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vKGludFdh
cigpKTsKKyAgICAgICAgfQorICAgICAgICBGb28gaW50RmFtaW5lQmFja3dhcmRzKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIEZvbyhpbnRGYW1pbmUoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgRm9vIGludFBlc3RpbGVuY2VCYWNrd2FyZHMoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gRm9vKGludFBlc3RpbGVuY2UoKSk7CisgICAgICAgIH0KKyAgICAgICAgRm9vIGlu
dERlYXRoQmFja3dhcmRzKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvbyhpbnRE
ZWF0aCgpKTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrRW51bShwcm9ncmFtLCBjYWxs
RnVuY3Rpb24ocHJvZ3JhbSwgIndhciIsIFtdLCBbXSksIDApOworICAgIGNoZWNrRW51bShwcm9n
cmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZhbWluZSIsIFtdLCBbXSksIDEpOworICAgIGNo
ZWNrRW51bShwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2UiLCBbXSwg
W10pLCAyKTsKKyAgICBjaGVja0VudW0ocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJk
ZWF0aCIsIFtdLCBbXSksIDMpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24o
cHJvZ3JhbSwgInRlc3RTaW1wbGVFcXVhbCIsIFtdLCBbXSksIHRydWUpOworICAgIGNoZWNrQm9v
bChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RBbm90aGVyRXF1YWwiLCBbXSwg
W10pLCB0cnVlKTsKKyAgICBjaGVja0Jvb2wocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJ0ZXN0Tm90RXF1YWwiLCBbXSwgW10pLCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdFNpbXBsZU5vdEVxdWFsIiwgW10sIFtdKSwgZmFs
c2UpOworICAgIGNoZWNrQm9vbChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RB
bm90aGVyTm90RXF1YWwiLCBbXSwgW10pLCBmYWxzZSk7CisgICAgY2hlY2tCb29sKHByb2dyYW0s
IGNhbGxGdW5jdGlvbihwcm9ncmFtLCAidGVzdE5vdE5vdEVxdWFsIiwgW10sIFtdKSwgdHJ1ZSk7
CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJpbnRXYXIiLCBb
XSwgW10pLCAwKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwg
ImludEZhbWluZSIsIFtdLCBbXSksIDEpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiaW50UGVzdGlsZW5jZSIsIFtdLCBbXSksIDIpOworICAgIGNoZWNrSW50
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiaW50RGVhdGgiLCBbXSwgW10pLCAzKTsK
KyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgIndhclZhbHVlIiwg
W10sIFtdKSwgMCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmYW1pbmVWYWx1ZSIsIFtdLCBbXSksIDEpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxG
dW5jdGlvbihwcm9ncmFtLCAicGVzdGlsZW5jZVZhbHVlIiwgW10sIFtdKSwgMik7CisgICAgY2hl
Y2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJkZWF0aFZhbHVlIiwgW10sIFtd
KSwgMyk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ3YXJW
YWx1ZUxpdGVyYWwiLCBbXSwgW10pLCAwKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZhbWluZVZhbHVlTGl0ZXJhbCIsIFtdLCBbXSksIDEpOworICAgIGNo
ZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAicGVzdGlsZW5jZVZhbHVlTGl0
ZXJhbCIsIFtdLCBbXSksIDIpOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5jdGlvbihw
cm9ncmFtLCAiZGVhdGhWYWx1ZUxpdGVyYWwiLCBbXSwgW10pLCAzKTsKKyAgICBjaGVja0VudW0o
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJpbnRXYXJCYWNrd2FyZHMiLCBbXSwgW10p
LCAwKTsKKyAgICBjaGVja0VudW0ocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJpbnRG
YW1pbmVCYWNrd2FyZHMiLCBbXSwgW10pLCAxKTsKKyAgICBjaGVja0VudW0ocHJvZ3JhbSwgY2Fs
bEZ1bmN0aW9uKHByb2dyYW0sICJpbnRQZXN0aWxlbmNlQmFja3dhcmRzIiwgW10sIFtdKSwgMik7
CisgICAgY2hlY2tFbnVtKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiaW50RGVhdGhC
YWNrd2FyZHMiLCBbXSwgW10pLCAzKTsKK30KKworZnVuY3Rpb24gVEVTVF9lbnVtV2l0aE1hbnVh
bFZhbHVlcygpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBlbnVtIEZv
byB7CisgICAgICAgICAgICBXYXIgPSA3MiwKKyAgICAgICAgICAgIEZhbWluZSA9IDAsCisgICAg
ICAgICAgICBQZXN0aWxlbmNlID0gMjMsCisgICAgICAgICAgICBEZWF0aCA9IC00MgorICAgICAg
ICB9CisgICAgICAgIEZvbyB3YXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9v
LldhcjsKKyAgICAgICAgfQorICAgICAgICBGb28gZmFtaW5lKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIEZvby5GYW1pbmU7CisgICAgICAgIH0KKyAgICAgICAgRm9vIHBlc3RpbGVu
Y2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLlBlc3RpbGVuY2U7CisgICAg
ICAgIH0KKyAgICAgICAgRm9vIGRlYXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IEZvby5EZWF0aDsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrRW51bShwcm9ncmFtLCBj
YWxsRnVuY3Rpb24ocHJvZ3JhbSwgIndhciIsIFtdLCBbXSksIDcyKTsKKyAgICBjaGVja0VudW0o
cHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmYW1pbmUiLCBbXSwgW10pLCAwKTsKKyAg
ICBjaGVja0VudW0ocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJwZXN0aWxlbmNlIiwg
W10sIFtdKSwgMjMpOworICAgIGNoZWNrRW51bShwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3Jh
bSwgImRlYXRoIiwgW10sIFtdKSwgLTQyKTsKK30KKworZnVuY3Rpb24gVEVTVF9lbnVtV2l0aG91
dFplcm8oKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKGAKKyAgICAg
ICAgICAgIGVudW0gRm9vIHsKKyAgICAgICAgICAgICAgICBXYXIgPSA3MiwKKyAgICAgICAgICAg
ICAgICBGYW1pbmUgPSA2NCwKKyAgICAgICAgICAgICAgICBQZXN0aWxlbmNlID0gMjMsCisgICAg
ICAgICAgICAgICAgRGVhdGggPSAtNDIKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCksCisgICAg
ICAgIGUgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNUX2Vu
dW1EdXBsaWNhdGVzKCkKK3sKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGRvUHJlcChg
CisgICAgICAgICAgICBlbnVtIEZvbyB7CisgICAgICAgICAgICAgICAgV2FyID0gLTQyLAorICAg
ICAgICAgICAgICAgIEZhbWluZSA9IDAsCisgICAgICAgICAgICAgICAgUGVzdGlsZW5jZSA9IDIz
LAorICAgICAgICAgICAgICAgIERlYXRoID0gLTQyCisgICAgICAgICAgICB9CisgICAgICAgIGAp
LAorICAgICAgICBlID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKK30KKworZnVuY3Rpb24g
VEVTVF9lbnVtV2l0aFNvbWVNYW51YWxWYWx1ZXMoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9Q
cmVwKGAKKyAgICAgICAgZW51bSBGb28geworICAgICAgICAgICAgV2FyID0gNzIsCisgICAgICAg
ICAgICBGYW1pbmUsCisgICAgICAgICAgICBQZXN0aWxlbmNlID0gMCwKKyAgICAgICAgICAgIERl
YXRoCisgICAgICAgIH0KKyAgICAgICAgRm9vIHdhcigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBGb28uV2FyOworICAgICAgICB9CisgICAgICAgIEZvbyBmYW1pbmUoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLkZhbWluZTsKKyAgICAgICAgfQorICAgICAgICBG
b28gcGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uUGVzdGls
ZW5jZTsKKyAgICAgICAgfQorICAgICAgICBGb28gZGVhdGgoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gRm9vLkRlYXRoOworICAgICAgICB9CisgICAgYCk7CisgICAgY2hlY2tFbnVt
KHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAid2FyIiwgW10sIFtdKSwgNzIpOworICAg
IGNoZWNrRW51bShwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZhbWluZSIsIFtdLCBb
XSksIDczKTsKKyAgICBjaGVja0VudW0ocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJw
ZXN0aWxlbmNlIiwgW10sIFtdKSwgMCk7CisgICAgY2hlY2tFbnVtKHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAiZGVhdGgiLCBbXSwgW10pLCAxKTsKK30KKworZnVuY3Rpb24gVEVTVF9l
bnVtQ29uc3RleHByR2VuZXJpY0Z1bmN0aW9uKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJl
cChgCisgICAgICAgIGVudW0gQXhpcyB7IFgsIFkgfQorICAgICAgICBpbnQgZm9vPEF4aXMgYXhp
cz4oKSB7IHJldHVybiBpbnQoYXhpcyk7IH0KKyAgICAgICAgaW50IHRlc3RYKCkgeyByZXR1cm4g
Zm9vPEF4aXMuWD4oKTsgfQorICAgICAgICBpbnQgdGVzdFkoKSB7IHJldHVybiBmb288QXhpcy5Z
PigpOyB9CisgICAgYCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJ0ZXN0WCIsIFtdLCBbXSksIDApOworICAgIGNoZWNrSW50KHByb2dyYW0sIGNhbGxGdW5j
dGlvbihwcm9ncmFtLCAidGVzdFkiLCBbXSwgW10pLCAxKTsKK30KKworZnVuY3Rpb24gVEVTVF9l
bnVtQ29uc3RleHByR2VuZXJpY1N0cnVjdCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAo
YAorICAgICAgICBlbnVtIEF4aXMgeyBYLCBZIH0KKyAgICAgICAgc3RydWN0IEZvbzxBeGlzIGF4
aXM+IHsgfQorICAgICAgICBpbnQgZm9vPEF4aXMgYXhpcz4oRm9vPGF4aXM+KSB7IHJldHVybiBp
bnQoYXhpcyk7IH0KKyAgICAgICAgaW50IHRlc3RYKCkKKyAgICAgICAgeyAgIAorICAgICAgICAg
ICAgRm9vPEF4aXMuWD4gZjsKKyAgICAgICAgICAgIHJldHVybiBmb28oZik7CisgICAgICAgIH0K
KyAgICAgICAgaW50IHRlc3RZKCkKKyAgICAgICAgeyAgIAorICAgICAgICAgICAgRm9vPEF4aXMu
WT4gZjsKKyAgICAgICAgICAgIHJldHVybiBmb28oZik7CisgICAgICAgIH0KKyAgICBgKTsKKyAg
ICBjaGVja0ludChwcm9ncmFtLCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RYIiwgW10sIFtd
KSwgMCk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0
WSIsIFtdLCBbXSksIDEpOworfQorCiBsZXQgZmlsdGVyID0gLy4qLzsgLy8gcnVuIGV2ZXJ5dGhp
bmcgYnkgZGVmYXVsdAogaWYgKHRoaXNbImFyZ3VtZW50cyJdKSB7CiAgICAgZm9yIChsZXQgaSA9
IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1VpbnRMaXRlcmFsLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1VpbnRMaXRlcmFsLmpzCShyZXZpc2lvbiAyMjIxOTkpCisrKyBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9VaW50TGl0ZXJhbC5qcwkod29ya2luZyBjb3B5KQpA
QCAtMjUsOCArMjUsMTQgQEAKICJ1c2Ugc3RyaWN0IjsKIAogbGV0IFVpbnRMaXRlcmFsID0gY3Jl
YXRlTGl0ZXJhbCh7CisgICAgbGl0ZXJhbENsYXNzTmFtZTogIlVpbnRMaXRlcmFsIiwKICAgICBw
cmVmZXJyZWRUeXBlTmFtZTogInVpbnQiLAogICAgIAorICAgIG5lZ0NvbnN0ZXhwcihvcmlnaW4p
CisgICAgeworICAgICAgICByZXR1cm4gbmV3IFVpbnRMaXRlcmFsKG9yaWdpbiwgKC10aGlzLnZh
bHVlKSA+Pj4gMCk7CisgICAgfSwKKyAgICAKICAgICBjcmVhdGVUeXBlKG9yaWdpbiwgdmFsdWUp
CiAgICAgewogICAgICAgICByZXR1cm4gbmV3IFVpbnRMaXRlcmFsVHlwZShvcmlnaW4sIHZhbHVl
KTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0b3IuanMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwkocmV2aXNp
b24gMjIyMTk5KQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlzaXRvci5qcwko
d29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSwyMiBAQCBjbGFzcyBWaXNpdG9yIHsKICAgICAg
ICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKKyAgICB2aXNpdEVudW1UeXBl
KG5vZGUpCisgICAgeworICAgICAgICBub2RlLmJhc2VUeXBlLnZpc2l0KHRoaXMpOworICAgICAg
ICBmb3IgKGxldCBtZW1iZXIgb2Ygbm9kZS5tZW1iZXJzKQorICAgICAgICAgICAgbWVtYmVyLnZp
c2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEVudW1NZW1iZXIobm9kZSkKKyAgICB7
CisgICAgICAgIE5vZGUudmlzaXQobm9kZS52YWx1ZSwgdGhpcyk7CisgICAgfQorICAgIAorICAg
IHZpc2l0RW51bUxpdGVyYWwobm9kZSkKKyAgICB7CisgICAgfQorICAgIAogICAgIHZpc2l0RWxl
bWVudGFsVHlwZShub2RlKQogICAgIHsKICAgICAgICAgbm9kZS5lbGVtZW50VHlwZS52aXNpdCh0
aGlzKTsK
</data>
<flag name="review"
          id="341207"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>