<?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>176117</bug_id>
          
          <creation_ts>2017-08-30 12:22:24 -0700</creation_ts>
          <short_desc>Rename ArrayLang to WebGPU Shading Language, or WSL for short, pronounced &quot;whistle&quot;</short_desc>
          <delta_ts>2018-10-13 14:56:08 -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>1343641</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-30 12:22:24 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343642</commentid>
    <comment_count>1</comment_count>
      <attachid>319386</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-30 12:25:39 -0700</bug_when>
    <thetext>Created attachment 319386
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343866</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-30 21:45:48 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/221393/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1343868</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-08-30 21:46:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/34180113&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468790</commentid>
    <comment_count>4</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 14:21:30 -0700</bug_when>
    <thetext>Migrated to https://api.github.com/repos/gpuweb/WHLSL/issues/13</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468861</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 14:56:08 -0700</bug_when>
    <thetext>https://github.com/gpuweb/WHLSL/issues/13</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319386</attachid>
            <date>2017-08-30 12:25:39 -0700</date>
            <delta_ts>2017-08-30 12:28:42 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>245484</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEyNyBAQAorMjAxNy0wOC0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIFJlbmFtZSBBcnJheUxhbmcgdG8gV2ViR1BVIFNoYWRpbmcgTGFuZ3VhZ2UsIG9y
IFdTTCBmb3Igc2hvcnQsIHByb25vdW5jZWQgIndoaXN0bGUiCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzYxMTcKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFJlbmFtZWQgQXJyYXlMYW5nUkkg
dG8gV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkuCisgICAgICAgIAorICAgICAgICBSZW5hbWVkIEFM
U3ludGF4RXJyb3IvQUxUeXBlRXJyb3IgdG8gV1N5bnRheEVycm9yL1dUeXBlRXJyb3IuCisgICAg
ICAgIAorICAgICAgICBSZW5hbWVkIGFsbCByZWZlcmVuY2VzIHRvICJBcnJheUxhbmciIGluIHRo
ZSBjb2RlIHRvICJXU0wiLgorCisgICAgICAgICogQXJyYXlMYW5nUkk6IFJlbW92ZWQuCisgICAg
ICAgICogQXJyYXlMYW5nUkkvQUxTeW50YXhFcnJvci5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBB
cnJheUxhbmdSSS9BTFR5cGVFcnJvci5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdS
SS9BZGRyZXNzU3BhY2UuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvQWxsLmpz
OiBSZW1vdmVkLgorICAgICAgICAqIEFycmF5TGFuZ1JJL0FycmF5UmVmVHlwZS5qczogUmVtb3Zl
ZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9BcnJheVR5cGUuanM6IFJlbW92ZWQuCisgICAgICAg
ICogQXJyYXlMYW5nUkkvQXNzaWdubWVudC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxh
bmdSSS9CbG9jay5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9DYWxsQXNzaWdu
bWVudC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9DYWxsRXhwcmVzc2lvbi5q
czogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9DYWxsRnVuY3Rpb24uanM6IFJlbW92
ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvQ2hlY2suanM6IFJlbW92ZWQuCisgICAgICAgICog
QXJyYXlMYW5nUkkvQ2hlY2tlci5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9D
b21tYUV4cHJlc3Npb24uanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvQ29uc3Rl
eHByVHlwZVBhcmFtZXRlci5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9FQnVm
ZmVyLmpzOiBSZW1vdmVkLgorICAgICAgICAqIEFycmF5TGFuZ1JJL0VCdWZmZXJCdWlsZGVyLmpz
OiBSZW1vdmVkLgorICAgICAgICAqIEFycmF5TGFuZ1JJL0VGbG9hdC5qczogUmVtb3ZlZC4KKyAg
ICAgICAgKiBBcnJheUxhbmdSSS9FSW50LmpzOiBSZW1vdmVkLgorICAgICAgICAqIEFycmF5TGFu
Z1JJL0VQdHIuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvRVZhbHVlLmpzOiBS
ZW1vdmVkLgorICAgICAgICAqIEFycmF5TGFuZ1JJL0V2YWx1YXRpb25Db21tb24uanM6IFJlbW92
ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvRXZhbHVhdG9yLmpzOiBSZW1vdmVkLgorICAgICAg
ICAqIEFycmF5TGFuZ1JJL0V4cHJlc3Npb24uanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlM
YW5nUkkvRmllbGQuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvRnVuYy5qczog
UmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9GdW5jRGVmLmpzOiBSZW1vdmVkLgorICAg
ICAgICAqIEFycmF5TGFuZ1JJL0Z1bmNJbnN0YW50aWF0b3IuanM6IFJlbW92ZWQuCisgICAgICAg
ICogQXJyYXlMYW5nUkkvRnVuY1BhcmFtZXRlci5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJh
eUxhbmdSSS9GdW5jdGlvbkxpa2VCbG9jay5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxh
bmdSSS9JbmxpbmUuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvSW5saW5lci5q
czogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9JbnN0YW50aWF0ZUltbWVkaWF0ZXMu
anM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvSW50TGl0ZXJhbC5qczogUmVtb3Zl
ZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9JbnRyaW5zaWNzLmpzOiBSZW1vdmVkLgorICAgICAg
ICAqIEFycmF5TGFuZ1JJL0xleGVyLmpzOiBSZW1vdmVkLgorICAgICAgICAqIEFycmF5TGFuZ1JJ
L0xleGVyVG9rZW4uanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvTmFtZUNvbnRl
eHQuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvTmFtZVJlc29sdmVyLmpzOiBS
ZW1vdmVkLgorICAgICAgICAqIEFycmF5TGFuZ1JJL05hdGl2ZUZ1bmMuanM6IFJlbW92ZWQuCisg
ICAgICAgICogQXJyYXlMYW5nUkkvTmF0aXZlVHlwZS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBB
cnJheUxhbmdSSS9OYXRpdmVUeXBlSW5zdGFuY2UuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJy
YXlMYW5nUkkvTm9kZS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9OdWxsVHlw
ZS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9QYXJzZS5qczogUmVtb3ZlZC4K
KyAgICAgICAgKiBBcnJheUxhbmdSSS9QcmVwYXJlLmpzOiBSZW1vdmVkLgorICAgICAgICAqIEFy
cmF5TGFuZ1JJL1Byb2dyYW0uanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvUHJv
dG9jb2wuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvUHJvdG9jb2xEZWNsLmpz
OiBSZW1vdmVkLgorICAgICAgICAqIEFycmF5TGFuZ1JJL1Byb3RvY29sUmVmLmpzOiBSZW1vdmVk
LgorICAgICAgICAqIEFycmF5TGFuZ1JJL1B0clR5cGUuanM6IFJlbW92ZWQuCisgICAgICAgICog
QXJyYXlMYW5nUkkvUmVmZXJlbmNlVHlwZS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxh
bmdSSS9SZXNvbHZlTmFtZXMuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvUmVz
b2x2ZU92ZXJsb2FkSW1wbC5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9SZXNv
bHZlVHlwZURlZnMuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvUmV0dXJuLmpz
OiBSZW1vdmVkLgorICAgICAgICAqIEFycmF5TGFuZ1JJL1JldHVybkV4Y2VwdGlvbi5qczogUmVt
b3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9SZXdyaXRlci5qczogUmVtb3ZlZC4KKyAgICAg
ICAgKiBBcnJheUxhbmdSSS9TdGFuZGFyZExpYnJhcnkuanM6IFJlbW92ZWQuCisgICAgICAgICog
QXJyYXlMYW5nUkkvU3RydWN0VHlwZS5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdS
SS9TdWJzdGl0dXRpb24uanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvU3VmZml4
Q2FsbEFzc2lnbm1lbnQuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvVGVzdC5q
czogUmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9UeXBlLmpzOiBSZW1vdmVkLgorICAg
ICAgICAqIEFycmF5TGFuZ1JJL1R5cGVEZWYuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlM
YW5nUkkvVHlwZURlZlJlc29sdmVyLmpzOiBSZW1vdmVkLgorICAgICAgICAqIEFycmF5TGFuZ1JJ
L1R5cGVPclZhcmlhYmxlUmVmLmpzOiBSZW1vdmVkLgorICAgICAgICAqIEFycmF5TGFuZ1JJL1R5
cGVSZWYuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvVHlwZVZhcmlhYmxlLmpz
OiBSZW1vdmVkLgorICAgICAgICAqIEFycmF5TGFuZ1JJL1VuaWZpY2F0aW9uQ29udGV4dC5qczog
UmVtb3ZlZC4KKyAgICAgICAgKiBBcnJheUxhbmdSSS9WYWx1ZS5qczogUmVtb3ZlZC4KKyAgICAg
ICAgKiBBcnJheUxhbmdSSS9WYXJpYWJsZURlY2wuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJy
YXlMYW5nUkkvVmFyaWFibGVSZWYuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkv
VmlzaXRpbmdTZXQuanM6IFJlbW92ZWQuCisgICAgICAgICogQXJyYXlMYW5nUkkvVmlzaXRvci5q
czogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSTogQ29waWVkIGZy
b20gVG9vbHMvQXJyYXlMYW5nUkkuCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
QUxTeW50YXhFcnJvci5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9BTFR5cGVFcnJvci5qczogUmVtb3ZlZC4KKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9BbGwuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEZ1
bmN0aW9uLmpzOgorICAgICAgICAoY2FsbEZ1bmN0aW9uQnlSZWYpOgorICAgICAgICAqIFdlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanM6CisgICAgICAgIChDaGVja2VyLnByb3RvdHlw
ZS52aXNpdFByb3RvY29sRGVjbC5zZXQgdGhyb3cpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0ludHJpbnNpY3MuanM6CisgICAgICAgIChJbnRyaW5zaWNzLnByb3RvdHlwZS5h
ZGQpOgorICAgICAgICAoSW50cmluc2ljcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvTGV4ZXIuanM6CisgICAgICAgIChMZXhlcik6CisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvTmFtZUNvbnRleHQuanM6CisgICAgICAgIChOYW1lQ29udGV4dC5wcm90b3R5
cGUuYWRkKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lUmVzb2x2ZXIu
anM6CisgICAgICAgIChOYW1lUmVzb2x2ZXIucHJvdG90eXBlLl9yZXNvbHZlVHlwZUFyZ3VtZW50
cyk6CisgICAgICAgIChOYW1lUmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJlZik6CisgICAg
ICAgIChOYW1lUmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0VmFyaWFibGVSZWYpOgorICAgICAgICAq
IFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qczoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TdHJ1Y3RUeXBlLmpzOgorICAgICAgICAoU3RydWN0VHlwZS5wcm90b3R5cGUu
YWRkKToKKyAgICAgICAgKFN0cnVjdFR5cGUucHJvdG90eXBlLmluc3RhbnRpYXRlKToKKyAgICAg
ICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlRGVmUmVzb2x2ZXIuanM6CisgICAgICAg
IChUeXBlRGVmUmVzb2x2ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJlZik6CisgICAgICAgIChUeXBl
RGVmUmVzb2x2ZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Zpc2l0aW5n
U2V0LmpzOgorICAgICAgICAoVmlzaXRpbmdTZXQucHJvdG90eXBlLmRvVmlzaXQpOgorICAgICAg
ICAoVmlzaXRpbmdTZXQpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1dTeW50
YXhFcnJvci5qczogQ29waWVkIGZyb20gVG9vbHMvQXJyYXlMYW5nUkkvQUxTeW50YXhFcnJvci5q
cy4KKyAgICAgICAgKEFMU3ludGF4RXJyb3IpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1dUeXBlRXJyb3IuanM6IENvcGllZCBmcm9tIFRvb2xzL0FycmF5TGFu
Z1JJL0FMVHlwZUVycm9yLmpzLgorICAgICAgICAoQUxUeXBlRXJyb3IpOiBEZWxldGVkLgorCiAy
MDE3LTA4LTMwICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAg
ICAgIEFkZCBMb2dnZXIgb2JzZXJ2ZXIgYW5kIGhlbHBlciBjbGFzcwpJbmRleDogVG9vbHMvQXJy
YXlMYW5nUkkvQUxTeW50YXhFcnJvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9BcnJheUxhbmdS
SS9BTFN5bnRheEVycm9yLmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdS
SS9BTFN5bnRheEVycm9yLmpzCShub25leGlzdGVudCkKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1j
bGFzcyBBTFN5bnRheEVycm9yIGV4dGVuZHMgRXJyb3IgewotICAgIGNvbnN0cnVjdG9yKG9yaWdp
blN0cmluZywgbWVzc2FnZSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCJTeW50YXggZXJyb3IgYXQg
IiArIG9yaWdpblN0cmluZyArICI6ICIgKyBtZXNzYWdlKTsKLSAgICAgICAgdGhpcy5vcmlnaW5T
dHJpbmcgPSBvcmlnaW5TdHJpbmc7Ci0gICAgICAgIHRoaXMuc3ludGF4RXJyb3JNZXNzYWdlID0g
bWVzc2FnZTsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL0FMVHlwZUVycm9y
LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL0FMVHlwZUVycm9yLmpzCShyZXZp
c2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9BTFR5cGVFcnJvci5qcwkobm9uZXhp
c3RlbnQpCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgQUxUeXBlRXJyb3IgZXh0ZW5kcyBF
cnJvciB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luU3RyaW5nLCBtZXNzYWdlKQotICAgIHsKLSAg
ICAgICAgc3VwZXIoIlR5cGUgZXJyb3IgYXQgIiArIG9yaWdpblN0cmluZyArICI6ICIgKyBtZXNz
YWdlKTsKLSAgICAgICAgdGhpcy5vcmlnaW5TdHJpbmcgPSBvcmlnaW5TdHJpbmc7Ci0gICAgICAg
IHRoaXMudHlwZUVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7Ci0gICAgfQotfQotCkluZGV4OiBUb29s
cy9BcnJheUxhbmdSSS9BZGRyZXNzU3BhY2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlM
YW5nUkkvQWRkcmVzc1NwYWNlLmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxh
bmdSSS9BZGRyZXNzU3BhY2UuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0K
LWNvbnN0IGFkZHJlc3NTcGFjZXMgPSBbImNvbnN0YW50IiwgImRldmljZSIsICJ0aHJlYWRncm91
cCIsICJ0aHJlYWQiXTsKLQotZnVuY3Rpb24gaXNBZGRyZXNzU3BhY2UoYWRkcmVzc1NwYWNlKQot
ewotICAgIHN3aXRjaCAoYWRkcmVzc1NwYWNlKSB7Ci0gICAgY2FzZSAiY29uc3RhbnQiOgotICAg
IGNhc2UgImRldmljZSI6Ci0gICAgY2FzZSAidGhyZWFkZ3JvdXAiOgotICAgIGNhc2UgInRocmVh
ZCI6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci19Ci0KLWZ1bmN0aW9uIHZhbGlkYXRlQWRkcmVzc1NwYWNlKGFkZHJlc3NT
cGFjZSkKLXsKLSAgICBpZiAoIWlzQWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkpCi0gICAgICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIGFkZHJlc3Mgc3BhY2U6ICIgKyBhZGRyZXNzU3BhY2UpOwot
fQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkvQWxsLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0Fy
cmF5TGFuZ1JJL0FsbC5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkv
QWxsLmpzCShub25leGlzdGVudCkKQEAgLTEsMTAwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotbG9hZCgiTm9kZS5q
cyIpOwotbG9hZCgiVHlwZS5qcyIpOwotbG9hZCgiUmVmZXJlbmNlVHlwZS5qcyIpOwotbG9hZCgi
VmFsdWUuanMiKTsKLWxvYWQoIkV4cHJlc3Npb24uanMiKTsKLWxvYWQoIlJld3JpdGVyLmpzIik7
Ci1sb2FkKCJWaXNpdG9yLmpzIik7Ci1sb2FkKCJFVmFsdWUuanMiKTsKLQotbG9hZCgiQUxTeW50
YXhFcnJvci5qcyIpOwotbG9hZCgiQUxUeXBlRXJyb3IuanMiKTsKLWxvYWQoIkFkZHJlc3NTcGFj
ZS5qcyIpOwotbG9hZCgiQXJyYXlSZWZUeXBlLmpzIik7Ci1sb2FkKCJBcnJheVR5cGUuanMiKTsK
LWxvYWQoIkFzc2lnbm1lbnQuanMiKTsKLWxvYWQoIkJsb2NrLmpzIik7Ci1sb2FkKCJDYWxsQXNz
aWdubWVudC5qcyIpOwotbG9hZCgiQ2FsbEV4cHJlc3Npb24uanMiKTsKLWxvYWQoIkNhbGxGdW5j
dGlvbi5qcyIpOwotbG9hZCgiQ2hlY2suanMiKTsKLWxvYWQoIkNoZWNrZXIuanMiKTsKLWxvYWQo
IkNvbW1hRXhwcmVzc2lvbi5qcyIpOwotbG9hZCgiQ29uc3RleHByVHlwZVBhcmFtZXRlci5qcyIp
OwotbG9hZCgiRUJ1ZmZlci5qcyIpOwotbG9hZCgiRUJ1ZmZlckJ1aWxkZXIuanMiKTsKLWxvYWQo
IkVGbG9hdC5qcyIpOwotbG9hZCgiRUludC5qcyIpOwotbG9hZCgiRVB0ci5qcyIpOwotbG9hZCgi
RXZhbHVhdGlvbkNvbW1vbi5qcyIpOwotbG9hZCgiRXZhbHVhdG9yLmpzIik7Ci1sb2FkKCJGaWVs
ZC5qcyIpOwotbG9hZCgiRnVuYy5qcyIpOwotbG9hZCgiRnVuY0RlZi5qcyIpOwotbG9hZCgiRnVu
Y0luc3RhbnRpYXRvci5qcyIpOwotbG9hZCgiRnVuY1BhcmFtZXRlci5qcyIpOwotbG9hZCgiRnVu
Y3Rpb25MaWtlQmxvY2suanMiKTsKLWxvYWQoIklubGluZS5qcyIpOwotbG9hZCgiSW5saW5lci5q
cyIpOwotbG9hZCgiSW5zdGFudGlhdGVJbW1lZGlhdGVzLmpzIik7Ci1sb2FkKCJJbnRMaXRlcmFs
LmpzIik7Ci1sb2FkKCJJbnRyaW5zaWNzLmpzIik7Ci1sb2FkKCJMZXhlci5qcyIpOwotbG9hZCgi
TGV4ZXJUb2tlbi5qcyIpOwotbG9hZCgiTmFtZUNvbnRleHQuanMiKTsKLWxvYWQoIk5hbWVSZXNv
bHZlci5qcyIpOwotbG9hZCgiTmF0aXZlRnVuYy5qcyIpOwotbG9hZCgiTmF0aXZlVHlwZS5qcyIp
OwotbG9hZCgiTmF0aXZlVHlwZUluc3RhbmNlLmpzIik7Ci1sb2FkKCJOdWxsVHlwZS5qcyIpOwot
bG9hZCgiUGFyc2UuanMiKTsKLWxvYWQoIlByZXBhcmUuanMiKTsKLWxvYWQoIlByb2dyYW0uanMi
KTsKLWxvYWQoIlByb3RvY29sLmpzIik7Ci1sb2FkKCJQcm90b2NvbERlY2wuanMiKTsKLWxvYWQo
IlByb3RvY29sUmVmLmpzIik7Ci1sb2FkKCJQdHJUeXBlLmpzIik7Ci1sb2FkKCJSZXNvbHZlTmFt
ZXMuanMiKTsKLWxvYWQoIlJlc29sdmVPdmVybG9hZEltcGwuanMiKTsKLWxvYWQoIlJlc29sdmVU
eXBlRGVmcy5qcyIpOwotbG9hZCgiUmV0dXJuLmpzIik7Ci1sb2FkKCJSZXR1cm5FeGNlcHRpb24u
anMiKTsKLWxvYWQoIlN0YW5kYXJkTGlicmFyeS5qcyIpOwotbG9hZCgiU3RydWN0VHlwZS5qcyIp
OwotbG9hZCgiU3Vic3RpdHV0aW9uLmpzIik7Ci1sb2FkKCJTdWZmaXhDYWxsQXNzaWdubWVudC5q
cyIpOwotbG9hZCgiVHlwZURlZi5qcyIpOwotbG9hZCgiVHlwZURlZlJlc29sdmVyLmpzIik7Ci1s
b2FkKCJUeXBlT3JWYXJpYWJsZVJlZi5qcyIpOwotbG9hZCgiVHlwZVJlZi5qcyIpOwotbG9hZCgi
VHlwZVZhcmlhYmxlLmpzIik7Ci1sb2FkKCJVbmlmaWNhdGlvbkNvbnRleHQuanMiKTsKLWxvYWQo
IlZhcmlhYmxlRGVjbC5qcyIpOwotbG9hZCgiVmFyaWFibGVSZWYuanMiKTsKLWxvYWQoIlZpc2l0
aW5nU2V0LmpzIik7CkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9BcnJheVJlZlR5cGUuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvQXJyYXlSZWZUeXBlLmpzCShyZXZpc2lvbiAy
MjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9BcnJheVJlZlR5cGUuanMJKG5vbmV4aXN0ZW50
KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAotICovCi0idXNlIHN0cmljdCI7Ci0KLS8vIE5vdGUgdGhhdCB3ZSBzYXkgdGhhdCBUW10gaXMg
InRoZSBzYW1lIHR5cGUiIGFzIFRbY10gZm9yIGFueSBULCBjLiBUaGlzIGdyZWF0bHkgc2ltcGxp
ZmllcyB0aGUKLS8vIGxhbmd1YWdlLgotY2xhc3MgQXJyYXlSZWZUeXBlIGV4dGVuZHMgUmVmZXJl
bmNlVHlwZSB7Ci0gICAgdW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpCi0gICAg
ewotICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEFycmF5UmVmVHlwZSkpIHsKLSAgICAg
ICAgICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgQXJyYXlUeXBlKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBpZiAodGhpcy5hZGRyZXNzU3BhY2UgIT0gInRo
cmVhZCIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIu
ZWxlbWVudFR5cGUpOwotICAgIH0KLQotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiB0aGlzLmFkZHJlc3NTcGFjZSArICIgIiArIHRoaXMuZWxlbWVudFR5cGUgKyAiW10iOwot
ICAgIH0KLX0KLQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkvQXJyYXlUeXBlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL0FycmF5VHlwZS5qcwkocmV2aXNpb24gMjIxMzkxKQor
KysgVG9vbHMvQXJyYXlMYW5nUkkvQXJyYXlUeXBlLmpzCShub25leGlzdGVudCkKQEAgLTEsNjYg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVz
ZSBzdHJpY3QiOwotCi1jbGFzcyBBcnJheVR5cGUgZXh0ZW5kcyBUeXBlIHsKLSAgICBjb25zdHJ1
Y3RvcihvcmlnaW4sIGVsZW1lbnRUeXBlLCBudW1FbGVtZW50cykKLSAgICB7Ci0gICAgICAgIHRo
aXMuX29yaWdpbiA9IG9yaWdpbjsKLSAgICAgICAgdGhpcy5fZWxlbWVudFR5cGUgPSBlbGVtZW50
VHlwZTsKLSAgICAgICAgdGhpcy5fbnVtRWxlbWVudHMgPSBudW1FbGVtZW50czsKLSAgICB9Ci0g
ICAgCi0gICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQotICAgIGdldCBl
bGVtZW50VHlwZSgpIHsgcmV0dXJuIHRoaXMuX2VsZW1lbnRUeXBlOyB9Ci0gICAgZ2V0IG51bUVs
ZW1lbnRzKCkgeyByZXR1cm4gdGhpcy5fbnVtRWxlbWVudHM7IH0KLSAgICBnZXQgaXNQcmltaXRp
dmUoKSB7IHJldHVybiB0aGlzLmVsZW1lbnRUeXBlLmlzUHJpbWl0aXZlOyB9Ci0gICAgCi0gICAg
dG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFR5cGUgKyAiWyIg
KyB0aGlzLm51bUVsZW1lbnRzICsgIl0iOwotICAgIH0KLSAgICAKLSAgICBnZXQgc2l6ZSgpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS5zaXplICogdGhpcy5udW1FbGVt
ZW50czsKLSAgICB9Ci0gICAgCi0gICAgdW5pZnlJbXBsKHVuaWZpY2F0b25Db250ZXh0LCBvdGhl
cikKLSAgICB7Ci0gICAgICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIEFycmF5UmVmVHlwZSkgewot
ICAgICAgICAgICAgaWYgKG90aGVyLmFkZHJlc3NTcGFjZSAhPSAidGhyZWFkIikKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAo
IShvdGhlciBpbnN0YW5jZW9mIEFycmF5VHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoIXRoaXMubnVtRWxlbWVudHMudW5p
ZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci5udW1FbGVtZW50cykpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gdGhp
cy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyLmVsZW1lbnRUeXBl
KTsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL0Fzc2lnbm1lbnQuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvQXNzaWdubWVudC5qcwkocmV2aXNpb24gMjIx
MzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkvQXNzaWdubWVudC5qcwkobm9uZXhpc3RlbnQpCkBA
IC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24g
ewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbGhzLCByaHMpCi0gICAgewotICAgICAgICBzdXBl
cihvcmlnaW4pOwotICAgICAgICB0aGlzLl9saHMgPSBsaHM7Ci0gICAgICAgIHRoaXMuX3JocyA9
IHJoczsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IGxocygpIHsgcmV0dXJuIHRoaXMuX2xoczsgfQot
ICAgIGdldCByaHMoKSB7IHJldHVybiB0aGlzLl9yaHM7IH0KLSAgICAKLSAgICB0b1N0cmluZygp
Ci0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5saHMgKyAiID0gIiArIHRoaXMucmhzOwotICAg
IH0KLX07Ci0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL0Jsb2NrLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0FycmF5TGFuZ1JJL0Jsb2NrLmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9B
cnJheUxhbmdSSS9CbG9jay5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDUxICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQot
Y2xhc3MgQmxvY2sgZXh0ZW5kcyBOb2RlIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4pCi0gICAg
ewotICAgICAgICBzdXBlcigpOwotICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47Ci0gICAg
ICAgIHRoaXMuX3N0YXRlbWVudHMgPSBbXTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG9yaWdpbigp
IHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQotICAgIAotICAgIGFkZChzdGF0ZW1lbnQpCi0gICAg
ewotICAgICAgICB0aGlzLl9zdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTsKLSAgICB9Ci0gICAg
Ci0gICAgZ2V0IHN0YXRlbWVudHMoKSB7IHJldHVybiB0aGlzLl9zdGF0ZW1lbnRzOyB9Ci0gICAg
Ci0gICAgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnN0YXRlbWVudHMubGVu
Z3RoKQotICAgICAgICAgICAgcmV0dXJuICJ7IH0iOwotICAgICAgICByZXR1cm4gInsgIiArIHRo
aXMuc3RhdGVtZW50cy5qb2luKCI7ICIpICsgIjsgfSI7Ci0gICAgfQotfTsKLQpJbmRleDogVG9v
bHMvQXJyYXlMYW5nUkkvQ2FsbEFzc2lnbm1lbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJy
YXlMYW5nUkkvQ2FsbEFzc2lnbm1lbnQuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0Fy
cmF5TGFuZ1JJL0NhbGxBc3NpZ25tZW50LmpzCShub25leGlzdGVudCkKQEAgLTEsNDYgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJp
Y3QiOwotCi1jbGFzcyBDYWxsQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNv
bnN0cnVjdG9yKG9yaWdpbiwgbmFtZSwgbGhzLCByaHMpCi0gICAgewotICAgICAgICBzdXBlcihv
cmlnaW4pOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5fbGhzID0g
bGhzOwotICAgICAgICB0aGlzLl9yaHMgPSByaHM7Ci0gICAgICAgIHRoaXMuZnVuYyA9IG51bGw7
Ci0gICAgfQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQotICAg
IGdldCBsaHMoKSB7IHJldHVybiB0aGlzLl9saHM7IH0KLSAgICBnZXQgcmhzKCkgeyByZXR1cm4g
dGhpcy5fcmhzOyB9IC8vIFRoaXMgY2FuIGJlIG51bGwuCi0gICAgCi0gICAgdG9TdHJpbmcoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubGhzICsgIiAiICsgdGhpcy5uYW1lICsgKHRoaXMu
cmhzID8gIj0gIiArIHRoaXMucmhzIDogIiIpOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMvQXJy
YXlMYW5nUkkvQ2FsbEV4cHJlc3Npb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5n
UkkvQ2FsbEV4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5TGFu
Z1JJL0NhbGxFeHByZXNzaW9uLmpzCShub25leGlzdGVudCkKQEAgLTEsNDYgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwot
Ci1jbGFzcyBDYWxsRXhwcmVzc2lvbiBleHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNvbnN0cnVj
dG9yKG9yaWdpbiwgbmFtZSwgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRMaXN0KQotICAgIHsKLSAg
ICAgICAgc3VwZXIob3JpZ2luKTsKLSAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7Ci0gICAgICAg
IHRoaXMuX3R5cGVBcmd1bWVudHMgPSB0eXBlQXJndW1lbnRzOwotICAgICAgICB0aGlzLl9hcmd1
bWVudExpc3QgPSBhcmd1bWVudExpc3Q7Ci0gICAgICAgIHRoaXMuZnVuYyA9IG51bGw7Ci0gICAg
fQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQotICAgIGdldCB0
eXBlQXJndW1lbnRzKCkgeyByZXR1cm4gdGhpcy5fdHlwZUFyZ3VtZW50czsgfQotICAgIGdldCBh
cmd1bWVudExpc3QoKSB7IHJldHVybiB0aGlzLl9hcmd1bWVudExpc3Q7IH0KLSAgICAKLSAgICB0
b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5uYW1lICsgIjwiICsgdGhpcy50
eXBlQXJndW1lbnRzICsgIj4oIiArIHRoaXMuYXJndW1lbnRMaXN0ICsgIikiOwotICAgIH0KLX0K
LQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkvQ2FsbEZ1bmN0aW9uLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0FycmF5TGFuZ1JJL0NhbGxGdW5jdGlvbi5qcwkocmV2aXNpb24gMjIxMzkxKQorKysg
VG9vbHMvQXJyYXlMYW5nUkkvQ2FsbEZ1bmN0aW9uLmpzCShub25leGlzdGVudCkKQEAgLTEsNDkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVz
ZSBzdHJpY3QiOwotCi0vLyBUaGlzIGFsbG93cyB5b3UgdG8gcGFzcyBzdHJ1Y3RzIGFuZCBhcnJh
eXMgaW4tcGxhY2UsIGJ1dCBpdCdzIGEgbW9yZSBhbm5veWluZyBBUEkuCi1mdW5jdGlvbiBjYWxs
RnVuY3Rpb25CeVJlZihwcm9ncmFtLCBuYW1lLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudExpc3Qp
Ci17Ci0gICAgbGV0IGFyZ3VtZW50VHlwZXMgPSBhcmd1bWVudExpc3QubWFwKGFyZ3VtZW50ID0+
IHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IGFyZ3VtZW50LnR5cGUuZWxlbWVudFR5cGU7Ci0gICAg
ICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBcmd1bWVudCBo
YXMgbm8gZWxlbWVudCB0eXBlOiAiICsgYXJndW1lbnQpOwotICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgIH0pOwotICAgIGxldCBmdW5jID0gcmVzb2x2ZUlubGluZWRGdW5jdGlvbihwcm9ncmFt
LCBuYW1lLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzKTsKLSAgICBpZiAoIWZ1bmMpCi0g
ICAgICAgIHRocm93IG5ldyBBTFR5cGVFcnJvcigiPGNhbGxGdW5jdGlvbj4iLCAiQ2Fubm90IHJl
c29sdmUgZnVuY3Rpb24gY2FsbCAiICsgbmFtZSArICI8IiArIHR5cGVBcmd1bWVudHMgKyAiPigi
ICsgYXJndW1lbnRMaXN0ICsgIikiKTsKLSAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZ1bmMucGFy
YW1ldGVycy5sZW5ndGg7ICsraSkKLSAgICAgICAgZnVuYy5wYXJhbWV0ZXJzW2ldLmVQdHIuY29w
eUZyb20oYXJndW1lbnRMaXN0W2ldKTsKLSAgICByZXR1cm4gbmV3IEV2YWx1YXRvcihwcm9ncmFt
KS52aXNpdEZ1bmN0aW9uQm9keShmdW5jLmJvZHkpOwotfQotCi1mdW5jdGlvbiBjYWxsRnVuY3Rp
b24ocHJvZ3JhbSwgbmFtZSwgdHlwZUFyZ3VtZW50cywgYXJndW1lbnRMaXN0KQotewotICAgIHJl
dHVybiBjYWxsRnVuY3Rpb25CeVJlZigKLSAgICAgICAgcHJvZ3JhbSwgbmFtZSwgdHlwZUFyZ3Vt
ZW50cywKLSAgICAgICAgYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiBFUHRyLmJveChhcmd1
bWVudCkpKS5sb2FkVmFsdWUoKTsKLX0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL0NoZWNrLmpz
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL0NoZWNrLmpzCShyZXZpc2lvbiAyMjEz
OTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9DaGVjay5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDMx
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1
c2Ugc3RyaWN0IjsKLQotZnVuY3Rpb24gY2hlY2socHJvZ3JhbSkKLXsKLSAgICBwcm9ncmFtLnZp
c2l0KG5ldyBDaGVja2VyKHByb2dyYW0pKTsKLX0KLQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkv
Q2hlY2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9BcnJheUxhbmdSSS9DaGVja2VyLmpzCShy
ZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9DaGVja2VyLmpzCShub25leGlz
dGVudCkKQEAgLTEsMTk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0
b3IgewotICAgIGNvbnN0cnVjdG9yKHByb2dyYW0pCi0gICAgewotICAgICAgICBzdXBlcigpOwot
ICAgICAgICB0aGlzLl9wcm9ncmFtID0gcHJvZ3JhbTsKLSAgICAgICAgdGhpcy5fY3VycmVudFN0
YXRlbWVudCA9IG51bGw7Ci0gICAgfQotICAgIAotICAgIHZpc2l0UHJvZ3JhbShub2RlKQotICAg
IHsKLSAgICAgICAgZm9yIChsZXQgc3RhdGVtZW50IG9mIG5vZGUudG9wTGV2ZWxTdGF0ZW1lbnRz
KSB7Ci0gICAgICAgICAgICB0aGlzLl9jdXJyZW50U3RhdGVtZW50ID0gc3RhdGVtZW50OwotICAg
ICAgICAgICAgc3RhdGVtZW50LnZpc2l0KHRoaXMpOwotICAgICAgICB9Ci0gICAgfQotICAgIAot
ICAgIHZpc2l0UHJvdG9jb2xEZWNsKG5vZGUpCi0gICAgewotICAgICAgICBmb3IgKGxldCBzaWdu
YXR1cmUgb2Ygbm9kZS5zaWduYXR1cmVzKSB7Ci0gICAgICAgICAgICBsZXQgc2V0ID0gbmV3IFNl
dCgpOwotICAgICAgICAgICAgZnVuY3Rpb24gY29uc2lkZXIodGhpbmcpCi0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgaWYgKHRoaW5nLmlzVW5pZmlhYmxlKQotICAgICAgICAgICAgICAg
ICAgICBzZXQuYWRkKHRoaW5nKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGNsYXNzIE5v
dGljZVR5cGVWYXJpYWJsZSBleHRlbmRzIFZpc2l0b3IgewotICAgICAgICAgICAgICAgIHZpc2l0
VHlwZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgY29u
c2lkZXIobm9kZS50eXBlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgdmlz
aXRWYXJpYWJsZVJlZihub2RlKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgY29uc2lkZXIobm9kZS52YXJpYWJsZSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgbGV0IG5vdGljZVR5cGVWYXJpYWJsZSA9IG5ldyBOb3RpY2VUeXBl
VmFyaWFibGUoKTsKLSAgICAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlclR5cGUgb2Ygc2lnbmF0
dXJlLnBhcmFtZXRlclR5cGVzKQotICAgICAgICAgICAgICAgIHBhcmFtZXRlclR5cGUudmlzaXQo
bm90aWNlVHlwZVZhcmlhYmxlKTsKLSAgICAgICAgICAgIGZvciAobGV0IHR5cGVQYXJhbWV0ZXIg
b2Ygc2lnbmF0dXJlLnR5cGVQYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFzZXQu
aGFzKHR5cGVQYXJhbWV0ZXIpKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBBTFR5cGVFcnJv
cih0eXBlUGFyYW1ldGVyLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBlIHBhcmFtZXRlciB0byBw
cm90b2NvbCBzaWduYXR1cmUgbm90IGluZmVycmFibGUgZnJvbSB2YWx1ZSBwYXJhbWV0ZXJzIik7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIXNldC5oYXMobm9kZS50eXBlVmFyaWFi
bGUpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBTFR5cGVFcnJvcihzaWduYXR1cmUub3Jp
Z2luLm9yaWdpblN0cmluZywgIlByb3RvY29sJ3MgdHlwZSB2YXJpYWJsZSBub3QgbWVudGlvbmVk
IGluIHNpZ25hdHVyZSIpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIF9jaGVja1R5cGVB
cmd1bWVudHMob3JpZ2luLCB0eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cykKLSAgICB7Ci0g
ICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHlwZVBhcmFtZXRlcnMubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgIGxldCBhcmd1bWVudElzVHlwZSA9IHR5cGVBcmd1bWVudHNbaV0gaW5zdGFu
Y2VvZiBUeXBlOwotICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5vZGUudHlwZUFyZ3VtZW50c1tp
XS52aXNpdCh0aGlzKTsKLSAgICAgICAgICAgIGlmIChhcmd1bWVudElzVHlwZSkgewotICAgICAg
ICAgICAgICAgIGlmICghdHlwZUFyZ3VtZW50c1tpXS5pbmhlcml0cyh0eXBlQXJndW1lbnRzW2ld
KSkKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFMVHlwZUVycm9yKG9yaWdpbi5vcmln
aW5TdHJpbmcsICJUeXBlIGFyZ3VtZW50IGRvZXMgbm90IGluaGVyaXQgcHJvdG9jb2wiKTsKLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuZXF1YWxzKHR5
cGVQYXJhbWV0ZXJzW2ldLnR5cGUpKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQUxU
eXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIldyb25nIHR5cGUgZm9yIGNvbnN0ZXhwciIp
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHZpc2l0VHlwZVJl
Zihub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLnR5cGUpCi0gICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIlR5cGUgcmVmZXJlbmNlIHdpdGhvdXQgYSB0eXBlIGluIGNoZWNrZXI6ICIg
KyBub2RlICsgIiBhdCAiICsgbm9kZS5vcmlnaW4pOwotICAgICAgICB0aGlzLl9jaGVja1R5cGVB
cmd1bWVudHMobm9kZS5vcmlnaW4sIG5vZGUudHlwZS50eXBlUGFyYW1ldGVycywgbm9kZS50eXBl
QXJndW1lbnRzKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRSZWZlcmVuY2VUeXBlKG5vZGUpCi0g
ICAgewotICAgICAgICBub2RlLmVsZW1lbnRUeXBlLnZpc2l0KHRoaXMpOwotICAgICAgICAKLSAg
ICAgICAgaWYgKG5vZGUuYWRkcmVzc1NwYWNlID09ICJ0aHJlYWQiKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKCFub2RlLmVsZW1lbnRUeXBlLndpdGhSZWN1cnNp
dmVseUluc3RhbnRpYXRlZEltbWVkaWF0ZXMuaXNQcmltaXRpdmUpCi0gICAgICAgICAgICB0aHJv
dyBuZXcgQUxUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiSWxsZWdhbCBwb2lu
dGVyIHRvIG5vbi1wcmltaXRpdmUgdHlwZSIpOwotICAgIH0KLSAgICAKLSAgICB2aXNpdEFycmF5
VHlwZShub2RlKQotICAgIHsKLSAgICAgICAgaWYgKCFub2RlLm51bUVsZW1lbnRzLmlzQ29uc3Rl
eHByKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFMVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdp
blN0cmluZywgIkFycmF5IGxlbmd0aCBtdXN0IGJlIGNvbnN0ZXhwciIpOwotICAgIH0KLSAgICAK
LSAgICB2aXNpdEFzc2lnbm1lbnQobm9kZSkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBXZSBu
ZWVkIHRvIGNoZWNrIHRoYXQgdGhlIGxocyBpcyBhc3NpZ25hYmxlLgotICAgICAgICBsZXQgbGhz
VHlwZSA9IG5vZGUubGhzLnZpc2l0KHRoaXMpOwotICAgICAgICBsZXQgcmhzVHlwZSA9IG5vZGUu
cmhzLnZpc2l0KHRoaXMpOwotICAgICAgICBpZiAoIWxoc1R5cGUuZXF1YWxzKHJoc1R5cGUpKQot
ICAgICAgICAgICAgdGhyb3cgbmV3IEFMVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmlu
ZywgIlR5cGUgbWlzbWF0Y2ggaW4gYXNzaWdubWVudDogIiArIGxoc1R5cGUgKyAiIHZlcnN1cyAi
ICsgcmhzVHlwZSk7Ci0gICAgICAgIHJldHVybiBsaHNUeXBlOwotICAgIH0KLSAgICAKLSAgICB2
aXNpdFZhcmlhYmxlUmVmKG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS52YXJpYWJs
ZS50eXBlOwotICAgIH0KLSAgICAKLSAgICB2aXNpdFJldHVybihub2RlKQotICAgIHsKLSAgICAg
ICAgaWYgKG5vZGUudmFsdWUpIHsKLSAgICAgICAgICAgIGxldCByZXN1bHRUeXBlID0gbm9kZS52
YWx1ZS52aXNpdCh0aGlzKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0VHlwZSkKLSAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgcmVzdWx0IHR5cGUgZnJvbSAiICsgbm9kZS52
YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIW5vZGUuZnVuYy5yZXR1cm5UeXBlLmVxdWFscyhyZXN1
bHRUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQUxUeXBlRXJyb3Iobm9kZS5vcmln
aW4ub3JpZ2luU3RyaW5nLCAiVHJ5aW5nIHRvIHJldHVybiAiICsgcmVzdWx0VHlwZSArICIgaW4g
YSBmdW5jdGlvbiB0aGF0IHJldHVybnMgIiArIGZ1bmMucmV0dXJuVHlwZSk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmICghZnVuYy5yZXR1cm5U
eXBlLmVxdWFscyh0aGlzLl9wcm9ncmFtLmludHJpbnNpY3Mudm9pZCkpCi0gICAgICAgICAgICB0
aHJvdyBuZXcgQUxUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTm9uLXZvaWQg
ZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1ZSIpOwotICAgIH0KLSAgICAKLSAgICB2aXNpdElu
dExpdGVyYWwobm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmFtLmludHJp
bnNpY3MuaW50MzI7Ci0gICAgfQotICAgIAotICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUp
Ci0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gbnVsbDsKLSAgICAgICAgZm9yIChsZXQgZXhw
cmVzc2lvbiBvZiBub2RlLmxpc3QpCi0gICAgICAgICAgICByZXN1bHQgPSBleHByZXNzaW9uLnZp
c2l0KHRoaXMpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB2aXNp
dENhbGxFeHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICBmb3IgKGxldCB0eXBlQXJndW1l
bnQgb2Ygbm9kZS50eXBlQXJndW1lbnRzKQotICAgICAgICAgICAgdHlwZUFyZ3VtZW50LnZpc2l0
KHRoaXMpOwotICAgICAgICBsZXQgYXJndW1lbnRUeXBlcyA9IG5vZGUuYXJndW1lbnRMaXN0Lm1h
cChhcmd1bWVudCA9PiB7Ci0gICAgICAgICAgICBsZXQgbmV3QXJndW1lbnQgPSBhcmd1bWVudC52
aXNpdCh0aGlzKTsKLSAgICAgICAgICAgIGlmICghbmV3QXJndW1lbnQpCi0gICAgICAgICAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCJ2aXNpdG9yIHJldHVybmVkIG51bGwgZm9yICIgKyBhcmd1bWVu
dCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3QXJndW1lbnQ7Ci0gICAgICAgIH0pOwotICAgICAg
ICAKLSAgICAgICAgbGV0IG92ZXJsb2FkID0gbnVsbDsKLSAgICAgICAgZm9yIChsZXQgdHlwZVBh
cmFtZXRlciBvZiB0aGlzLl9jdXJyZW50U3RhdGVtZW50LnR5cGVQYXJhbWV0ZXJzKSB7Ci0gICAg
ICAgICAgICBpZiAoISh0eXBlUGFyYW1ldGVyIGluc3RhbmNlb2YgVHlwZVZhcmlhYmxlKSkKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghdHlwZVBhcmFtZXRlci5w
cm90b2NvbCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGxldCBzaWdu
YXR1cmVzID0KLSAgICAgICAgICAgICAgICB0eXBlUGFyYW1ldGVyLnByb3RvY29sLnNpZ25hdHVy
ZXNCeU5hbWVXaXRoVHlwZVZhcmlhYmxlKG5vZGUubmFtZSwgdHlwZVBhcmFtZXRlcik7Ci0gICAg
ICAgICAgICBpZiAoIXNpZ25hdHVyZXMpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBvdmVybG9hZCA9IHJlc29sdmVPdmVybG9hZEltcGwoc2lnbmF0dXJlcywgbm9kZS50
eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzKTsKLSAgICAgICAgICAgIGlmIChvdmVybG9hZCkK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW92ZXJsb2Fk
KSB7Ci0gICAgICAgICAgICBvdmVybG9hZCA9IHRoaXMuX3Byb2dyYW0ucmVzb2x2ZUZ1bmNPdmVy
bG9hZCgKLSAgICAgICAgICAgICAgICBub2RlLm5hbWUsIG5vZGUudHlwZUFyZ3VtZW50cywgYXJn
dW1lbnRUeXBlcyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFvdmVybG9hZCkKLSAgICAgICAg
ICAgIHRocm93IG5ldyBBTFR5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJEaWQg
bm90IGZpbmQgZnVuY3Rpb24gZm9yIGNhbGwiKTsKLSAgICAgICAgbm9kZS5mdW5jID0gb3Zlcmxv
YWQuZnVuYzsKLSAgICAgICAgbm9kZS5hY3R1YWxUeXBlQXJndW1lbnRzID0gb3ZlcmxvYWQudHlw
ZUFyZ3VtZW50cy5tYXAoVHlwZVJlZi53cmFwKTsKLSAgICAgICAgbGV0IHJlc3VsdCA9IG92ZXJs
b2FkLmZ1bmMucmV0dXJuVHlwZS5zdWJzdGl0dXRlVG9VbmlmaWNhdGlvbigKLSAgICAgICAgICAg
IG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0aW9uQ29udGV4
dCk7Ci0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJO
dWxsIHJlc3VsdCBmcm9tIENhbGxFeHByZXNzaW9uIik7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7
Ci0gICAgfQotfQotCkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9Db21tYUV4cHJlc3Npb24uanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvQ29tbWFFeHByZXNzaW9uLmpzCShyZXZp
c2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9Db21tYUV4cHJlc3Npb24uanMJKG5v
bmV4aXN0ZW50KQpAQCAtMSw0NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIENvbW1hRXhwcmVzc2lvbiBl
eHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbGlzdCkKLSAgICB7
Ci0gICAgICAgIHN1cGVyKG9yaWdpbik7Ci0gICAgICAgIHRoaXMuX2xpc3QgPSBsaXN0OwotICAg
ICAgICBmb3IgKGxldCBleHByZXNzaW9uIG9mIGxpc3QpIHsKLSAgICAgICAgICAgIGlmICghZXhw
cmVzc2lvbikKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIm51bGwgZXhwcmVzc2lv
biIpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGdldCBsaXN0KCkgeyByZXR1cm4gdGhp
cy5fbGlzdDsgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAi
KCIgKyB0aGlzLmxpc3QudG9TdHJpbmcoKSArICIpIjsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xz
L0FycmF5TGFuZ1JJL0NvbnN0ZXhwclR5cGVQYXJhbWV0ZXIuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvQXJyYXlMYW5nUkkvQ29uc3RleHByVHlwZVBhcmFtZXRlci5qcwkocmV2aXNpb24gMjIxMzkx
KQorKysgVG9vbHMvQXJyYXlMYW5nUkkvQ29uc3RleHByVHlwZVBhcmFtZXRlci5qcwkobm9uZXhp
c3RlbnQpCkBAIC0xLDgwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgQ29uc3RleHByVHlwZVBhcmFtZXRl
ciBleHRlbmRzIFZhbHVlIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIHR5cGUpCi0g
ICAgewotICAgICAgICBzdXBlcigpOwotICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47Ci0g
ICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgICAgICB0aGlzLl90eXBlID0gdHlwZTsKLSAg
ICB9Ci0gICAgCi0gICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLl9uYW1lOyB9Ci0gICAgZ2V0
IHR5cGUoKSB7IHJldHVybiB0aGlzLl90eXBlOyB9Ci0gICAgZ2V0IGlzQ29uc3RleHByKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIGdldCBpc1VuaWZpYWJsZSgpIHsgcmV0dXJuIHRydWU7IH0KLSAg
ICAKLSAgICB0eXBlVmFyaWFibGVVbmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKQotICAg
IHsKLSAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBWYWx1ZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCF0aGlzLnR5cGUudW5pZnkodW5pZmljYXRpb25D
b250ZXh0LCBvdGhlci50eXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBsZXQgcmVhbFRoaXMgPSB1bmlmaWNhdGlvbkNvbnRleHQuZmluZCh0aGlzKTsKLSAgICAgICAg
aWYgKHJlYWxUaGlzICE9IHRoaXMpCi0gICAgICAgICAgICByZXR1cm4gcmVhbFRoaXMudW5pZnko
dW5pZmljYXRpb25Db250ZXh0LCBvdGhlcik7Ci0gICAgICAgIAotICAgICAgICBpZiAob3RoZXIg
aW5zdGFuY2VvZiBWYXJpYWJsZVJlZikKLSAgICAgICAgICAgIG90aGVyID0gb3RoZXIudmFyaWFi
bGU7Ci0gICAgICAgIAotICAgICAgICB1bmlmaWNhdGlvbkNvbnRleHQudW5pZnkodGhpcywgb3Ro
ZXIpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdW5pZnlJbXBsKHVu
aWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy50eXBl
VmFyaWFibGVVbmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKTsKLSAgICB9Ci0gICAgCi0g
ICAgdmVyaWZ5QXNBcmd1bWVudCh1bmlmaWNhdGlvbkNvbnRleHQpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgdmVyaWZ5QXNQYXJhbWV0ZXIodW5pZmljYXRp
b25Db250ZXh0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIAotICAg
IHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnR5cGUgKyAiICIgKyB0aGlz
Lm5hbWU7Ci0gICAgfQotfQotCkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9FQnVmZmVyLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL0VCdWZmZXIuanMJKHJldmlzaW9uIDIyMTM5
MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJL0VCdWZmZXIuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw1
NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
LSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0i
dXNlIHN0cmljdCI7Ci0KLWxldCBlQnVmZmVyQ291bnQgPSAwOwotCi1jbGFzcyBFQnVmZmVyIHsK
LSAgICBjb25zdHJ1Y3RvcihzaXplKQotICAgIHsKLSAgICAgICAgdGhpcy5faW5kZXggPSBlQnVm
ZmVyQ291bnQrKzsKLSAgICAgICAgdGhpcy5fYXJyYXkgPSBuZXcgQXJyYXkoc2l6ZSk7Ci0gICAg
fQotICAgIAotICAgIGdldChpbmRleCkKLSAgICB7Ci0gICAgICAgIGlmIChpbmRleCA8IDAgfHwg
aW5kZXggPj0gdGhpcy5fYXJyYXkubGVuZ3RoKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJvdXQgb2YgYm91bmRzIGJ1ZmZlciBhY2Nlc3MiKTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2Fy
cmF5W2luZGV4XTsKLSAgICB9Ci0gICAgCi0gICAgc2V0KGluZGV4LCB2YWx1ZSkKLSAgICB7Ci0g
ICAgICAgIHRoaXMuX2FycmF5W2luZGV4XSA9IHZhbHVlOwotICAgIH0KLSAgICAKLSAgICBnZXQg
aW5kZXgoKSB7IHJldHVybiB0aGlzLl9pbmRleDsgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAiQiIgKyB0aGlzLl9pbmRleCArICI6WyIgKyB0aGlzLl9hcnJh
eSArICJdIjsKLSAgICB9Ci19CkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9FQnVmZmVyQnVpbGRl
ci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9BcnJheUxhbmdSSS9FQnVmZmVyQnVpbGRlci5qcwko
cmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkvRUJ1ZmZlckJ1aWxkZXIuanMJ
KG5vbmV4aXN0ZW50KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIEVCdWZmZXJCdWlsZGVy
IGV4dGVuZHMgVmlzaXRvciB7Ci0gICAgY29uc3RydWN0b3IocHJvZ3JhbSkKLSAgICB7Ci0gICAg
ICAgIHN1cGVyKCk7Ci0gICAgICAgIHRoaXMuX3Byb2dyYW0gPSBwcm9ncmFtOwotICAgIH0KLSAg
ICAKLSAgICBfY3JlYXRlRVB0cih0eXBlKQotICAgIHsKLSAgICAgICAgdHlwZSA9IHR5cGUuaW5z
dGFudGlhdGVkVHlwZTsKLSAgICAgICAgbGV0IGJ1ZmZlciA9IG5ldyBFQnVmZmVyKHR5cGUuc2l6
ZSk7Ci0gICAgICAgIHR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUoYnVmZmVyLCAwKTsKLSAgICAg
ICAgcmV0dXJuIG5ldyBFUHRyKG5ldyBQdHJUeXBlKG51bGwsICJ0aHJlYWQiLCB0eXBlKSwgYnVm
ZmVyLCAwKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRGdW5jUGFyYW1ldGVyKG5vZGUpCi0gICAg
ewotICAgICAgICBub2RlLmVQdHIgPSB0aGlzLl9jcmVhdGVFUHRyKG5vZGUudHlwZSk7Ci0gICAg
fQotfQotCkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9FRmxvYXQuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvQXJyYXlMYW5nUkkvRUZsb2F0LmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9B
cnJheUxhbmdSSS9FRmxvYXQuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0K
LWNsYXNzIEVGbG9hdCBleHRlbmRzIEVWYWx1ZSB7Ci0gICAgY29uc3RydWN0b3IodHlwZSwgdmFs
dWUpCi0gICAgewotICAgICAgICBzdXBlcih0eXBlKTsKLSAgICAgICAgdGhpcy5fdmFsdWUgPSB2
YWx1ZTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5fdmFsdWU7
IH0KLSAgICAKLSAgICBhZGQob3RoZXIpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IEVGbG9h
dCh0aGlzLnR5cGUsIHRoaXMudmFsdWUgKyBvdGhlci52YWx1ZSk7Ci0gICAgfQotICAgIAotICAg
IHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiIiArIHRoaXMudmFsdWU7Ci0gICAg
fQotfQotCkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9FSW50LmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0FycmF5TGFuZ1JJL0VJbnQuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5
TGFuZ1JJL0VJbnQuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw0NiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNz
IEVJbnQgZXh0ZW5kcyBFVmFsdWUgewotICAgIGNvbnN0cnVjdG9yKHR5cGUsIHZhbHVlKQotICAg
IHsKLSAgICAgICAgc3VwZXIodHlwZSk7Ci0gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7Ci0g
ICAgfQotICAgIAotICAgIGdldCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9Ci0gICAg
Ci0gICAgYWRkKG90aGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBFSW50KHRoaXMudHlw
ZSwgKHRoaXMudmFsdWUgKyBvdGhlci52YWx1ZSkgfCAwKTsKLSAgICB9Ci0gICAgCi0gICAgdG9T
dHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICIiICsgdGhpcy52YWx1ZTsKLSAgICB9Ci19
Ci0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL0VQdHIuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
QXJyYXlMYW5nUkkvRVB0ci5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5n
UkkvRVB0ci5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDc1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgRVB0
ciBleHRlbmRzIEVWYWx1ZSB7Ci0gICAgY29uc3RydWN0b3IodHlwZSwgYnVmZmVyLCBvZmZzZXQp
Ci0gICAgewotICAgICAgICBzdXBlcih0eXBlKTsKLSAgICAgICAgaWYgKCEodHlwZS51bmlmeU5v
ZGUgaW5zdGFuY2VvZiBQdHJUeXBlKSkKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fu
bm90IGNyZWF0ZSBFUHRyIHdpdGggbm9uLXB0ciB0eXBlOiAiICsgdHlwZSk7Ci0gICAgICAgIHRo
aXMuX2J1ZmZlciA9IGJ1ZmZlcjsKLSAgICAgICAgdGhpcy5fb2Zmc2V0ID0gb2Zmc2V0OwotICAg
IH0KLSAgICAKLSAgICAvLyBUaGUgaW50ZXJwcmV0ZXIgYWx3YXlzIHBhc3NlcyBhcm91bmQgcG9p
bnRlcnMgdG8gdGhpbmdzLiBUaGlzIG1lYW5zIHRoYXQgc29tZXRpbWVzIHdlIHdpbGwKLSAgICAv
LyB3YW50IHRvIHJldHVybiBhIHZhbHVlIGJ1dCB3ZSBoYXZlIHRvICJpbnZlbnQiIGEgcG9pbnRl
ciB0byB0aGF0IHZhbHVlLiBObyBwcm9ibGVtLCB0aGlzCi0gICAgLy8gZnVuY3Rpb24gaXMgaGVy
ZSB0byBoZWxwLgotICAgIC8vCi0gICAgLy8gSW4gYSByZWFsIGV4ZWN1dGlvbiBlbnZpcm9ubWVu
dCwgdXNlcyBvZiB0aGlzIG1hbmlmZXN0IGFzIFNTQSB0ZW1wb3Jhcmllcy4KLSAgICBzdGF0aWMg
Ym94KHZhbHVlKQotICAgIHsKLSAgICAgICAgaWYgKCF2YWx1ZS50eXBlKQotICAgICAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJWYWx1ZSBoYXMgbm8gdHlwZTogIiArIHZhbHVlKTsKLSAgICAgICAg
bGV0IGJ1ZmZlciA9IG5ldyBFQnVmZmVyKDEpOwotICAgICAgICBidWZmZXIuc2V0KDAsIHZhbHVl
KTsKLSAgICAgICAgcmV0dXJuIG5ldyBFUHRyKG5ldyBQdHJUeXBlKG51bGwsICJ0aHJlYWQiLCB2
YWx1ZS50eXBlKSwgYnVmZmVyLCAwKTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IGJ1ZmZlcigpIHsg
cmV0dXJuIHRoaXMuX2J1ZmZlcjsgfQotICAgIGdldCBvZmZzZXQoKSB7IHJldHVybiB0aGlzLl9v
ZmZzZXQ7IH0KLSAgICAKLSAgICBsb2FkVmFsdWUoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRo
aXMuYnVmZmVyLmdldCh0aGlzLm9mZnNldCk7Ci0gICAgfQotICAgIAotICAgIGNvcHlGcm9tKG90
aGVyKQotICAgIHsKLSAgICAgICAgbGV0IGVsZW1lbnRUeXBlID0gdGhpcy50eXBlLmVsZW1lbnRU
eXBlOwotICAgICAgICBpZiAoIWVsZW1lbnRUeXBlKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJObyBlbGVtZW50IHR5cGU6ICIgKyB0aGlzKTsKLSAgICAgICAgZm9yIChsZXQgaSA9IGVs
ZW1lbnRUeXBlLnNpemU7IGktLTspCi0gICAgICAgICAgICB0aGlzLmJ1ZmZlci5zZXQoaSwgb3Ro
ZXIuYnVmZmVyLmdldChpKSk7Ci0gICAgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0g
ICAgICAgIGlmICghdGhpcy5idWZmZXIpCi0gICAgICAgICAgICByZXR1cm4gIm51bGwiOwotICAg
ICAgICByZXR1cm4gdGhpcy50eXBlICsgIkIiICsgdGhpcy5idWZmZXIuaW5kZXggKyAiOiIgKyB0
aGlzLm9mZnNldDsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL0VWYWx1ZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9BcnJheUxhbmdSSS9FVmFsdWUuanMJKHJldmlzaW9uIDIy
MTM5MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJL0VWYWx1ZS5qcwkobm9uZXhpc3RlbnQpCkBAIC0x
LDM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgRVZhbHVlIHsKLSAgICBjb25zdHJ1Y3Rvcih0eXBlKQot
ICAgIHsKLSAgICAgICAgaWYgKCF0eXBlKQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJO
byB0eXBlIik7Ci0gICAgICAgIHRoaXMuX3R5cGUgPSB0eXBlLnVuaWZ5Tm9kZTsKLSAgICB9Ci0g
ICAgCi0gICAgZ2V0IHR5cGUoKSB7IHJldHVybiB0aGlzLl90eXBlOyB9Ci19Ci0KSW5kZXg6IFRv
b2xzL0FycmF5TGFuZ1JJL0V2YWx1YXRpb25Db21tb24uanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
QXJyYXlMYW5nUkkvRXZhbHVhdGlvbkNvbW1vbi5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9v
bHMvQXJyYXlMYW5nUkkvRXZhbHVhdGlvbkNvbW1vbi5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDMw
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1
c2Ugc3RyaWN0IjsKLQotY29uc3QgQnJlYWtFeGNlcHRpb24gPSBTeW1ib2woIkJyZWFrRXhjZXB0
aW9uIik7Ci1jb25zdCBDb250aW51ZUV4Y2VwdGlvbiA9IFN5bWJvbCgiQ29udGludWVFeGNlcHRp
b24iKTsKLQotCkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9FdmFsdWF0b3IuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvRXZhbHVhdG9yLmpzCShyZXZpc2lvbiAyMjEzOTEpCisr
KyBUb29scy9BcnJheUxhbmdSSS9FdmFsdWF0b3IuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw5MyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNl
IHN0cmljdCI7Ci0KLS8vIFRoaXMgaXMgYSBjb21iaW5lZCBMSFMvUkhTIGV2YWx1YXRvciB0aGF0
IHBhc3NlcyBhcm91bmQgRVB0cidzIHRvIGV2ZXJ5dGhpbmcuCi1jbGFzcyBFdmFsdWF0b3IgZXh0
ZW5kcyBWaXNpdG9yIHsKLSAgICBjb25zdHJ1Y3Rvcihwcm9ncmFtKQotICAgIHsKLSAgICAgICAg
c3VwZXIoKTsKLSAgICAgICAgdGhpcy5fcHJvZ3JhbSA9IHByb2dyYW07Ci0gICAgfQotICAgIAot
ICAgIHZpc2l0RnVuY3Rpb25Cb2R5KGJsb2NrKQotICAgIHsKLSAgICAgICAgdHJ5IHsKLSAgICAg
ICAgICAgIGJsb2NrLnZpc2l0KHRoaXMpOwotICAgICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBoYXZlIGEgY2hlY2sgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8gZHJvcCBvdXQgb2YgYSBmdW5j
dGlvbiB3aXRob3V0Ci0gICAgICAgICAgICAvLyByZXR1cm5pbmcgdW5sZXNzIHRoZSBmdW5jdGlv
biByZXR1cm5zIHZvaWQuCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgfSBjYXRj
aCAoZSkgewotICAgICAgICAgICAgaWYgKGUgPT0gQnJlYWtFeGNlcHRpb24gfHwgZSA9PSBDb250
aW51ZUV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlNob3VsZCBu
b3Qgc2VlIGJyZWFrL2NvbnRpbnVlIGF0IGZ1bmN0aW9uIHNjb3BlIik7Ci0gICAgICAgICAgICBp
ZiAoZSBpbnN0YW5jZW9mIFJldHVybkV4Y2VwdGlvbikKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZS52YWx1ZTsKLSAgICAgICAgICAgIHRocm93IGU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0g
ICAgdmlzaXRGdW5jdGlvbkxpa2VCbG9jayhub2RlKQotICAgIHsKLSAgICAgICAgZm9yIChsZXQg
aSA9IDA7IGkgPCBub2RlLmFyZ3VtZW50TGlzdC5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgIG5v
ZGUucGFyYW1ldGVyc1tpXS5sVmFsdWUudmFsdWUgPSBub2RlLmFyZ3VtZW50TGlzdFtpXS52aXNp
dCh0aGlzKTsKLSAgICAgICAgcmV0dXJuIHZpc2l0RnVuY3Rpb25Cb2R5KG5vZGUuYmxvY2spOwot
ICAgIH0KLSAgICAKLSAgICB2aXNpdFJldHVybihub2RlKQotICAgIHsKLSAgICAgICAgdGhyb3cg
bmV3IFJldHVybkV4Y2VwdGlvbihub2RlLnZhbHVlID8gbm9kZS52YWx1ZS52aXNpdCh0aGlzKSA6
IG51bGwpOwotICAgIH0KLSAgICAKLSAgICB2aXNpdENvbW1hRXhwcmVzc2lvbihub2RlKQotICAg
IHsKLSAgICAgICAgbGV0IHJlc3VsdDsKLSAgICAgICAgZm9yIChsZXQgZXhwcmVzc2lvbiBvZiBu
b2RlLmxpc3QpCi0gICAgICAgICAgICByZXN1bHQgPSBleHByZXNzaW9uLnZpc2l0KHRoaXMpOwot
ICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB2aXNpdFZhcmlhYmxlUmVm
KG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZS52YXJpYWJsZS5lUHRyOwotICAgIH0K
LSAgICAKLSAgICB2aXNpdEludExpdGVyYWwobm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBF
UHRyLmJveChuZXcgRUludCh0aGlzLl9wcm9ncmFtLmludHJpbnNpY3MuaW50MzIsIG5vZGUudmFs
dWUpKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRDYWxsRXhwcmVzc2lvbihub2RlKQotICAgIHsK
LSAgICAgICAgLy8gV2UgZXZhbHVhdGUgaW5saW5lZCBBU1RzLCBzbyB0aGlzIGNhbiBvbmx5IGJl
IGEgbmF0aXZlIGNhbGwuCi0gICAgICAgIGxldCBjYWxsQXJndW1lbnRzID0gbm9kZS5hcmd1bWVu
dExpc3QubWFwKGFyZ3VtZW50ID0+IHsKLSAgICAgICAgICAgIGxldCByZXN1bHQgPSBhcmd1bWVu
dC52aXNpdCh0aGlzKTsKLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiTnVsbCByZXN1bHQgZnJvbSAiICsgYXJndW1lbnQpOwotICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICAgICAgfSk7Ci0gICAgICAgIHJldHVybiBub2RlLmZ1
bmMuaW1wbGVtZW50YXRpb24oY2FsbEFyZ3VtZW50cywgbm9kZSk7Ci0gICAgfQotfQotCkluZGV4
OiBUb29scy9BcnJheUxhbmdSSS9FeHByZXNzaW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0Fy
cmF5TGFuZ1JJL0V4cHJlc3Npb24uanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5
TGFuZ1JJL0V4cHJlc3Npb24uanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwzNSArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0K
LWNsYXNzIEV4cHJlc3Npb24gZXh0ZW5kcyBWYWx1ZSB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2lu
KQotICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2lu
OwotICAgIH0KLSAgICAKLSAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9
Ci19CkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9GaWVsZC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9BcnJheUxhbmdSSS9GaWVsZC5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJyYXlM
YW5nUkkvRmllbGQuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNz
IEZpZWxkIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIHR5cGUpCi0gICAgewotICAg
ICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47Ci0gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwot
ICAgICAgICB0aGlzLl90eXBlID0gdHlwZTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG9yaWdpbigp
IHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5f
bmFtZTsgfQotICAgIGdldCB0eXBlKCkgeyByZXR1cm4gdGhpcy5fdHlwZTsgfQotICAgIAotICAg
IHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnR5cGUgKyAiICIgKyB0aGlz
Lm5hbWU7Ci0gICAgfQotfQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkvRnVuYy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9BcnJheUxhbmdSSS9GdW5jLmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBU
b29scy9BcnJheUxhbmdSSS9GdW5jLmpzCShub25leGlzdGVudCkKQEAgLTEsNTAgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3Qi
OwotCi1jbGFzcyBGdW5jIGV4dGVuZHMgTm9kZSB7Ci0gICAgY29uc3RydWN0b3IobmFtZSwgcmV0
dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpCi0gICAgewotICAgICAgICBzdXBl
cigpOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5fcmV0dXJuVHlw
ZSA9IHJldHVyblR5cGU7Ci0gICAgICAgIHRoaXMuX3R5cGVQYXJhbWV0ZXJzID0gdHlwZVBhcmFt
ZXRlcnM7Ci0gICAgICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzOwotICAgIH0KLSAg
ICAKLSAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KLSAgICBnZXQgcmV0dXJu
VHlwZSgpIHsgcmV0dXJuIHRoaXMuX3JldHVyblR5cGU7IH0KLSAgICBnZXQgdHlwZVBhcmFtZXRl
cnMoKSB7IHJldHVybiB0aGlzLl90eXBlUGFyYW1ldGVyczsgfQotICAgIGdldCBwYXJhbWV0ZXJz
KCkgeyByZXR1cm4gdGhpcy5fcGFyYW1ldGVyczsgfQotICAgIGdldCBwYXJhbWV0ZXJUeXBlcygp
IHsgcmV0dXJuIHRoaXMucGFyYW1ldGVycy5tYXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci50eXBl
KTsgfQotICAgIAotICAgIGdldCBraW5kKCkgeyByZXR1cm4gRnVuYzsgfQotICAgIAotICAgIHRv
U3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnJldHVyblR5cGUgKyAiICIgKyB0
aGlzLm5hbWUgKyAiPCIgKyB0aGlzLnR5cGVQYXJhbWV0ZXJzICsgIj4oIiArIHRoaXMucGFyYW1l
dGVycyArICIpIjsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL0Z1bmNEZWYu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvRnVuY0RlZi5qcwkocmV2aXNpb24g
MjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkvRnVuY0RlZi5qcwkobm9uZXhpc3RlbnQpCkBA
IC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0g
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0g
Ki8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgRnVuY0RlZiBleHRlbmRzIEZ1bmMgewotICAgIGNv
bnN0cnVjdG9yKG9yaWdpbiwgbmFtZSwgcmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnMsIHBhcmFt
ZXRlcnMsIGJvZHkpCi0gICAgewotICAgICAgICBzdXBlcihuYW1lLCByZXR1cm5UeXBlLCB0eXBl
UGFyYW1ldGVycywgcGFyYW1ldGVycyk7Ci0gICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsK
LSAgICAgICAgdGhpcy5ib2R5ID0gYm9keTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG9yaWdpbigp
IHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBzdXBlci50b1N0cmluZygpICsgIiB7ICIgKyB0aGlzLmJvZHkgKyAiIH0i
OwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkvRnVuY0luc3RhbnRpYXRvci5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9BcnJheUxhbmdSSS9GdW5jSW5zdGFudGlhdG9yLmpzCShy
ZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9GdW5jSW5zdGFudGlhdG9yLmpz
CShub25leGlzdGVudCkKQEAgLTEsNjggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1jbGFzcyBGdW5jSW5zdGFudGlh
dG9yIHsKLSAgICBjb25zdHJ1Y3RvcigpCi0gICAgewotICAgICAgICB0aGlzLl9pbnN0YW5jZXMg
PSBuZXcgTWFwKCk7Ci0gICAgfQotICAgIAotICAgIC8vIFJldHVybnMgYSBGdW5jIG9iamVjdCB0
aGF0IHVuaXF1ZWx5IGlkZW50aWZpZXMgYSBwYXJ0aWN1bGFyIHN5c3RlbSBvZiB0eXBlIGFyZ3Vt
ZW50cy4KLSAgICBnZXRVbmlxdWUoZnVuYywgdHlwZUFyZ3VtZW50cykKLSAgICB7Ci0gICAgICAg
IGlmICghZnVuYy50eXBlUGFyYW1ldGVycy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZnVu
YzsKLSAgICAgICAgCi0gICAgICAgIGxldCBpbnN0YW5jZXMgPSB0aGlzLl9pbnN0YW5jZXMuZ2V0
KGZ1bmMpOwotICAgICAgICBpZiAoIWZ1bmN0aW9ucykKLSAgICAgICAgICAgIHRoaXMuX2Z1bmN0
aW9ucy5zZXQoZnVuYywgZnVuY3Rpb25zID0gW10pOwotICAgICAgICAKLSAgICAgICAgZm9yIChs
ZXQgaW5zdGFuY2Ugb2YgaW5zdGFuY2VzKSB7Ci0gICAgICAgICAgICBsZXQgb2sgPSB0cnVlOwot
ICAgICAgICAgICAgZm9yIChsZXQgaSA9IGluc3RhbmNlLnR5cGVBcmd1bWVudHMubGVuZ3RoOyBp
LS07KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZS50eXBlQXJndW1lbnRzW2ldLmVx
dWFscyh0eXBlQXJndW1lbnRzW2ldKSkgewotICAgICAgICAgICAgICAgICAgICBvayA9IGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgcmV0dXJuIGluc3RhbmNlLmZ1bmM7Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24ubWFwcGluZyhmdW5jLnR5cGVQ
YXJhbWV0ZXJzLCB0eXBlQXJndW1lbnRzKTsKLSAgICAgICAgbGV0IHJlc3VsdGluZ0Z1bmMgPSBu
ZXcgRnVuY0RlZigKLSAgICAgICAgICAgIGZ1bmMub3JpZ2luLCBmdW5jLm5hbWUsCi0gICAgICAg
ICAgICBmdW5jLnJldHVyblR5cGUudmlzaXQoc3Vic3RpdHV0aW9uKSwKLSAgICAgICAgICAgIFtd
LCAvLyBXZSdyZSBpbnN0YW50aWF0ZWQgc28gd2Ugbm8gbG9uZ2VyIHRha2UgdHlwZSBwYXJhbWV0
ZXJzLgotICAgICAgICAgICAgZnVuYy5wYXJhbWV0ZXJzLm1hcChwYXJhbWV0ZXIgPT4gcGFyYW1l
dGVyLnZpc2l0KHN1YnN0aXR1dGlvbikpLAotICAgICAgICAgICAgZnVuYy5ib2R5LnZpc2l0KHN1
YnN0aXR1dGlvbikpOwotICAgICAgICBsZXQgaW5zdGFuY2UgPSB7ZnVuYzogcmVzdWx0aW5nRnVu
YywgdHlwZUFyZ3VtZW50c307Ci0gICAgICAgIGluc3RhbmNlcy5wdXNoKGluc3RhbmNlKTsKLSAg
ICAgICAgcmV0dXJuIGZ1bmM7Ci0gICAgfQotfQotCkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9G
dW5jUGFyYW1ldGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL0Z1bmNQYXJh
bWV0ZXIuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJL0Z1bmNQYXJh
bWV0ZXIuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw0OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIEZ1bmNQ
YXJhbWV0ZXIgZXh0ZW5kcyBWYWx1ZSB7Ci0gICAgLy8gVGhlIG5hbWUgaXMgb3B0aW9uYWwuIEl0
J3MgT0sgZm9yIGl0IHRvIGJlIG51bGwhCi0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBuYW1lLCB0
eXBlKQotICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgdGhpcy5fb3JpZ2luID0gb3Jp
Z2luOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5fdHlwZSA9IHR5
cGU7Ci0gICAgfQotICAgIAotICAgIGdldCBvcmlnaW4oKSB7IHJldHVybiB0aGlzLl9vcmlnaW47
IH0KLSAgICBnZXQgbmFtZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KLSAgICBnZXQgdHlwZSgp
IHsgcmV0dXJuIHRoaXMuX3R5cGU7IH0KLSAgICAKLSAgICB0b1N0cmluZygpCi0gICAgewotICAg
ICAgICBpZiAoIXRoaXMubmFtZSkKLSAgICAgICAgICAgIHJldHVybiAiIiArIHRoaXMudHlwZTsK
LSAgICAgICAgcmV0dXJuIHRoaXMudHlwZSArICIgIiArIHRoaXMubmFtZTsKLSAgICB9Ci19Ci0K
SW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL0Z1bmN0aW9uTGlrZUJsb2NrLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0FycmF5TGFuZ1JJL0Z1bmN0aW9uTGlrZUJsb2NrLmpzCShyZXZpc2lvbiAyMjEz
OTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9GdW5jdGlvbkxpa2VCbG9jay5qcwkobm9uZXhpc3Rl
bnQpCkBAIC0xLDQ2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgRnVuY3Rpb25MaWtlQmxvY2sgZXh0ZW5k
cyBWYWx1ZSB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBhcmd1bWVudExpc3QsIHBhcmFtZXRl
cnMsIGJvZHkpCi0gICAgewotICAgICAgICBzdXBlcigpOwotICAgICAgICB0aGlzLl9vcmlnaW4g
PSBvcmlnaW47Ci0gICAgICAgIHRoaXMuX2FyZ3VtZW50TGlzdCA9IGFyZ3VtZW50TGlzdDsKLSAg
ICAgICAgdGhpcy5fcGFyYW1ldGVycyA9IHBhcmFtZXRlcnM7Ci0gICAgICAgIHRoaXMuX2JvZHkg
PSBib2R5OwotICAgIH0KLSAgICAKLSAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3Jp
Z2luOyB9Ci0gICAgZ2V0IGFyZ3VtZW50TGlzdCgpIHsgcmV0dXJuIHRoaXMuX2FyZ3VtZW50TGlz
dDsgfQotICAgIGdldCBwYXJhbWV0ZXJzKCkgeyByZXR1cm4gdGhpcy5fcGFyYW1ldGVyczsgfQot
ICAgIGdldCBib2R5KCkgeyByZXR1cm4gdGhpcy5fYm9keTsgfQotICAgIAotICAgIHRvU3RyaW5n
KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAiWyZdICgiICsgdGhpcy5wYXJhbWV0ZXJzICsgIikg
eyAiICsgdGhpcy5ibG9jayArICIgfSgiICsgdGhpcy5hcmd1bWVudExpc3QgKyAiKSI7Ci0gICAg
fQotfQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkvSW5saW5lLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0FycmF5TGFuZ1JJL0lubGluZS5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJy
YXlMYW5nUkkvSW5saW5lLmpzCShub25leGlzdGVudCkKQEAgLTEsNjIgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1m
dW5jdGlvbiBpbmxpbmUocHJvZ3JhbSkKLXsKLSAgICBmb3IgKGxldCBmdW5jTGlzdCBvZiBwcm9n
cmFtLmZ1bmN0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmNM
aXN0KSB7Ci0gICAgICAgICAgICBpZiAoIWZ1bmMudHlwZVBhcmFtZXRlcnMubGVuZ3RoKQotICAg
ICAgICAgICAgICAgIF9pbmxpbmVGdW5jdGlvbihwcm9ncmFtLCBmdW5jLCBuZXcgVmlzaXRpbmdT
ZXQoZnVuYykpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1mdW5jdGlvbiBfaW5saW5lRnVuY3Rp
b24ocHJvZ3JhbSwgZnVuYywgdmlzaXRpbmcpCi17Ci0gICAgaWYgKGZ1bmMudHlwZVBhcmFtZXRl
cnMubGVuZ3RoKQotICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBpbmxpbmUgZnVuY3Rp
b24gdGhhdCBoYXMgdHlwZSBwYXJhbWV0ZXJzIik7Ci0gICAgaWYgKGZ1bmMuaW5saW5lZCB8fCBm
dW5jLmlzTmF0aXZlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gVGhpcyBpcyB0aGUg
cHJlY2lzZSB0aW1lIHdoZW4gd2UgY2FuIGJ1aWxkIEVCdWZmZXJzIGluIG9yZGVyIHRvIGdldCB0
aGVtIHRvIGJlIHVuaXF1ZWQgYnkKLSAgICAvLyB0eXBlIGluc3RhbnRpYXRpb24gYnV0IG5vdGhp
bmcgZWxzZS4KLSAgICBmdW5jLnZpc2l0KG5ldyBFQnVmZmVyQnVpbGRlcihwcm9ncmFtKSk7Ci0g
ICAgCi0gICAgZnVuYy5ib2R5ID0gZnVuYy5ib2R5LnZpc2l0KG5ldyBJbmxpbmVyKHByb2dyYW0s
IGZ1bmMsIHZpc2l0aW5nKSk7Ci0gICAgZnVuYy5pbmxpbmVkID0gdHJ1ZTsKLX0KLQotZnVuY3Rp
b24gcmVzb2x2ZUlubGluZWRGdW5jdGlvbihwcm9ncmFtLCBuYW1lLCB0eXBlQXJndW1lbnRzLCBh
cmd1bWVudFR5cGVzKQotewotICAgIGxldCBvdmVybG9hZCA9IHByb2dyYW0ucmVzb2x2ZUZ1bmNP
dmVybG9hZChuYW1lLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzKTsKLSAgICBpZiAoIW92
ZXJsb2FkKQotICAgICAgICByZXR1cm4gbnVsbDsKLSAgICBpZiAoIW92ZXJsb2FkLmZ1bmMudHlw
ZVBhcmFtZXRlcnMpCi0gICAgICAgIHJldHVybiBvdmVybG9hZC5mdW5jOwotICAgIGxldCBmdW5j
ID0gcHJvZ3JhbS5mdW5jSW5zdGFudGlhdG9yLmdldFVuaXF1ZShvdmVybG9hZC5mdW5jLCBvdmVy
bG9hZC50eXBlQXJndW1lbnRzKTsKLSAgICBfaW5saW5lRnVuY3Rpb24ocHJvZ3JhbSwgZnVuYywg
bmV3IFZpc2l0aW5nU2V0KG92ZXJsb2FkLmZ1bmMpKTsKLSAgICByZXR1cm4gZnVuYzsKLX0KSW5k
ZXg6IFRvb2xzL0FycmF5TGFuZ1JJL0lubGluZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJy
YXlMYW5nUkkvSW5saW5lci5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5n
UkkvSW5saW5lci5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3Mg
SW5saW5lciBleHRlbmRzIFJld3JpdGVyIHsKLSAgICBjb25zdHJ1Y3Rvcihwcm9ncmFtLCBmdW5j
LCB2aXNpdGluZykKLSAgICB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgICAgIHRoaXMuX3Byb2dy
YW0gPSBwcm9ncmFtOwotICAgICAgICB0aGlzLl92aXNpdGluZyA9IHZpc2l0aW5nOwotICAgIH0K
LSAgICAKLSAgICB2aXNpdENhbGxFeHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICBpZiAo
bm9kZS5mdW5jLmlzTmF0aXZlKQotICAgICAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgICAgIHJl
dHVybiB0aGlzLl92aXNpdGluZy5kb1Zpc2l0KG5vZGUuZnVuYywgKCkgPT4gewotICAgICAgICAg
ICAgbGV0IGZ1bmMgPSB0aGlzLl9wcm9ncmFtLmZ1bmNJbnN0YW50aWF0b3IuZ2V0VW5pcXVlKG5v
ZGUuZnVuYywgbm9kZS5hY3R1YWxUeXBlQXJndW1lbnRzKTsKLSAgICAgICAgICAgIF9pbmxpbmVG
dW5jdGlvbih0aGlzLl9wcm9ncmFtLCBmdW5jLCB0aGlzLl92aXNpdGluZyk7Ci0gICAgICAgICAg
ICByZXR1cm4gbmV3IEZ1bmN0aW9uTGlrZUJsb2NrKAotICAgICAgICAgICAgICAgIG5vZGUub3Jp
Z2luLAotICAgICAgICAgICAgICAgIG5vZGUuYXJndW1lbnRMaXN0Lm1hcChhcmd1bWVudCA9PiBh
cmd1bWVudC52aXNpdCh0aGlzKSksCi0gICAgICAgICAgICAgICAgZnVuYy5wYXJhbWV0ZXJzLCBm
dW5jLmJvZHkpOwotICAgICAgICB9KTsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL0FycmF5TGFu
Z1JJL0luc3RhbnRpYXRlSW1tZWRpYXRlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9BcnJheUxh
bmdSSS9JbnN0YW50aWF0ZUltbWVkaWF0ZXMuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xz
L0FycmF5TGFuZ1JJL0luc3RhbnRpYXRlSW1tZWRpYXRlcy5qcwkobm9uZXhpc3RlbnQpCkBAIC0x
LDM5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8K
LSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgSW5zdGFudGlhdGVJbW1lZGlhdGVzIGV4dGVuZHMgUmV3
cml0ZXIgewotICAgIHZpc2l0VHlwZVJlZihub2RlKQotICAgIHsKLSAgICAgICAgbm9kZSA9IHN1
cGVyLnZpc2l0VHlwZVJlZihub2RlKTsKLSAgICAgICAgcmV0dXJuIG5vZGUuaW5zdGFudGlhdGVk
VHlwZTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRSZWZlcmVuY2VUeXBlKG5vZGUpCi0gICAgewot
ICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJ
L0ludExpdGVyYWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvSW50TGl0ZXJh
bC5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkvSW50TGl0ZXJhbC5q
cwkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgSW50TGl0ZXJhbCBl
eHRlbmRzIEV4cHJlc3Npb24gewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgdmFsdWUpCi0gICAg
ewotICAgICAgICBzdXBlcihvcmlnaW4pOwotICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlOwot
ICAgIH0KLSAgICAKLSAgICBnZXQgdmFsdWUoKSB7IHJldHVybiB0aGlzLl92YWx1ZTsgfQotICAg
IGdldCBpc0NvbnN0ZXhwcigpIHsgcmV0dXJuIHRydWU7IH0KLSAgICAKLSAgICB0b1N0cmluZygp
Ci0gICAgewotICAgICAgICByZXR1cm4gIiIgKyB0aGlzLl92YWx1ZTsKLSAgICB9Ci19Ci0KSW5k
ZXg6IFRvb2xzL0FycmF5TGFuZ1JJL0ludHJpbnNpY3MuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
QXJyYXlMYW5nUkkvSW50cmluc2ljcy5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJy
YXlMYW5nUkkvSW50cmluc2ljcy5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDc4ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsK
LQotY2xhc3MgSW50cmluc2ljcyB7Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsKLSAgICAgICAg
dGhpcy5fbWFwID0gbmV3IE1hcCgpOwotCi0gICAgICAgIC8vIE5PVEU6IEludHJpbnNpYyByZXNv
bHV0aW9uIGhhcHBlbnMgYmVmb3JlIHR5cGUgbmFtZSByZXNvbHV0aW9uLCBzbyB0aGUgc3RyaW5n
cyB3ZSB1c2UgaGVyZQotICAgICAgICAvLyB0byBjYXRjaCB0aGUgaW50cmluc2ljcyBtdXN0IGJl
IGJhc2VkIG9uIHRoZSB0eXBlIG5hbWVzIHRoYXQgU3RhbmRhcmRMaWJyYXJ5LmpzIHVzZXMuIEZv
cgotICAgICAgICAvLyBleGFtcGxlLCBpZiBhIG5hdGl2ZSBmdW5jdGlvbiBpcyBkZWNsYXJlZCB1
c2luZyAiaW50IiByYXRoZXIgdGhhbiAiaW50MzIiLCB0aGVuIHdlIG11c3QgdXNlCi0gICAgICAg
IC8vICJpbnQiIGhlcmUsIHNpbmNlIHdlIGRvbid0IHlldCBrbm93IHRoYXQgdGhleSBhcmUgdGhl
IHNhbWUgdHlwZS4KLSAgICAgICAgCi0gICAgICAgIHRoaXMuX21hcC5zZXQoCi0gICAgICAgICAg
ICAibmF0aXZlIHByaW1pdGl2ZSB0eXBlIHZvaWQ8PiIsCi0gICAgICAgICAgICAodHlwZSkgPT4g
ewotICAgICAgICAgICAgICAgIHRoaXMudm9pZCA9IHR5cGU7Ci0gICAgICAgICAgICAgICAgdHlw
ZS5zaXplID0gMDsKLSAgICAgICAgICAgICAgICB0eXBlLnBvcHVsYXRlRGVmYXVsdFZhbHVlID0g
KCkgPT4geyB9OwotICAgICAgICAgICAgfSk7Ci0KLSAgICAgICAgdGhpcy5fbWFwLnNldCgKLSAg
ICAgICAgICAgICJuYXRpdmUgcHJpbWl0aXZlIHR5cGUgaW50MzI8PiIsCi0gICAgICAgICAgICAo
dHlwZSkgPT4gewotICAgICAgICAgICAgICAgIHRoaXMuaW50MzIgPSB0eXBlOwotICAgICAgICAg
ICAgICAgIHR5cGUuc2l6ZSA9IDE7Ci0gICAgICAgICAgICAgICAgdHlwZS5wb3B1bGF0ZURlZmF1
bHRWYWx1ZSA9IChidWZmZXIsIG9mZnNldCkgPT4gYnVmZmVyLnNldChvZmZzZXQsIG5ldyBFSW50
KHR5cGUsIDApKTsKLSAgICAgICAgICAgIH0pOwotCi0gICAgICAgIHRoaXMuX21hcC5zZXQoCi0g
ICAgICAgICAgICAibmF0aXZlIHByaW1pdGl2ZSB0eXBlIGRvdWJsZTw+IiwKLSAgICAgICAgICAg
ICh0eXBlKSA9PiB7Ci0gICAgICAgICAgICAgICAgdGhpcy5kb3VibGUgPSB0eXBlOwotICAgICAg
ICAgICAgICAgIHR5cGUuc2l6ZSA9IDE7Ci0gICAgICAgICAgICAgICAgdHlwZS5wb3B1bGF0ZURl
ZmF1bHRWYWx1ZSA9Ci0gICAgICAgICAgICAgICAgICAgIChidWZmZXIsIG9mZnNldCkgPT4gYnVm
ZmVyLnNldChvZmZzZXQsIG5ldyBFRmxvYXQodHlwZSwgMCkpOwotICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIAotICAgICAgICB0aGlzLl9tYXAuc2V0KAotICAgICAgICAgICAgIm5hdGl2ZSBpbnQg
b3BlcmF0b3IrPD4oaW50LGludCkiLAotICAgICAgICAgICAgKGZ1bmMpID0+IHsKLSAgICAgICAg
ICAgICAgICBmdW5jLmltcGxlbWVudGF0aW9uID0KLSAgICAgICAgICAgICAgICAgICAgKFtsZWZ0
LCByaWdodF0pID0+IEVQdHIuYm94KGxlZnQubG9hZFZhbHVlKCkuYWRkKHJpZ2h0LmxvYWRWYWx1
ZSgpKSk7Ci0gICAgICAgICAgICB9KTsKLSAgICB9Ci0gICAgCi0gICAgYWRkKHRoaW5nKQotICAg
IHsKLSAgICAgICAgbGV0IGludHJpbnNpYyA9IHRoaXMuX21hcC5nZXQodGhpbmcudG9TdHJpbmco
KSk7Ci0gICAgICAgIGlmICghaW50cmluc2ljKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFMVHlw
ZUVycm9yKHRoaW5nLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJVbnJlY29nbml6ZWQgaW50cmluc2lj
OiAiICsgdGhpbmcpOwotICAgICAgICBpbnRyaW5zaWModGhpbmcpOwotICAgIH0KLX0KLQpJbmRl
eDogVG9vbHMvQXJyYXlMYW5nUkkvTGV4ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlM
YW5nUkkvTGV4ZXIuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJL0xl
eGVyLmpzCShub25leGlzdGVudCkKQEAgLTEsMTU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgTGV4ZXIg
ewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbGluZU51bWJlck9mZnNldCwgdGV4dCkKLSAgICB7
Ci0gICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdpbjsKLSAgICAgICAgdGhpcy5fbGluZU51bWJl
ck9mZnNldCA9IGxpbmVOdW1iZXJPZmZzZXQ7Ci0gICAgICAgIHRoaXMuX3RleHQgPSB0ZXh0Owot
ICAgICAgICB0aGlzLl9pbmRleCA9IDA7Ci0gICAgICAgIHRoaXMuX3N0YWNrID0gW107Ci0gICAg
fQotICAgIAotICAgIGdldCBsaW5lTnVtYmVyKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
LmxpbmVOdW1iZXJGb3JJbmRleCh0aGlzLl9pbmRleCk7Ci0gICAgfQotICAgIAotICAgIGdldCBv
cmlnaW4oKSB7IHJldHVybiB0aGlzLl9vcmlnaW47IH0KLSAgICAKLSAgICBnZXQgb3JpZ2luU3Ry
aW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9vcmlnaW4gKyAiOiIgKyAodGhpcy5s
aW5lTnVtYmVyICsgMSk7Ci0gICAgfQotICAgIAotICAgIGxpbmVOdW1iZXJGb3JJbmRleChpbmRl
eCkKLSAgICB7Ci0gICAgICAgIGxldCBtYXRjaGVzID0gdGhpcy5fdGV4dC5zdWJzdHJpbmcoMCwg
aW5kZXgpLm1hdGNoKC9cbi9nKTsKLSAgICAgICAgcmV0dXJuIChtYXRjaGVzID8gbWF0Y2hlcy5s
ZW5ndGggOiAwKSArIHRoaXMuX2xpbmVOdW1iZXJPZmZzZXQ7Ci0gICAgfQotICAgIAotICAgIGdl
dCBzdGF0ZSgpIHsgcmV0dXJuIHtpbmRleDogdGhpcy5faW5kZXgsIHN0YWNrOiB0aGlzLl9zdGFj
ay5jb25jYXQoKX07IH0KLSAgICBzZXQgc3RhdGUodmFsdWUpCi0gICAgewotICAgICAgICB0aGlz
Ll9pbmRleCA9IHZhbHVlLmluZGV4OwotICAgICAgICB0aGlzLl9zdGFjayA9IHZhbHVlLnN0YWNr
OwotICAgIH0KLSAgICAKLSAgICBuZXh0KCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9zdGFj
ay5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3RhY2sucG9wKCk7Ci0gICAgICAg
IAotICAgICAgICBpZiAodGhpcy5faW5kZXggPj0gdGhpcy5fdGV4dC5sZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IGlzQ0NvbW1lbnRCZWdp
biA9IC9cL1wqLzsKLSAgICAgICAgY29uc3QgaXNDUGx1c1BsdXNDb21tZW50QmVnaW4gPSAvXC9c
Ly87Ci0gICAgICAgIAotICAgICAgICBsZXQgcmVzdWx0ID0gKGtpbmQpID0+IHsKLSAgICAgICAg
ICAgIGxldCB0ZXh0ID0gUmVnRXhwLmxhc3RNYXRjaDsKLSAgICAgICAgICAgIGxldCB0b2tlbiA9
IG5ldyBMZXhlclRva2VuKHRoaXMsIHRoaXMuX2luZGV4LCBraW5kLCB0ZXh0KTsKLSAgICAgICAg
ICAgIHRoaXMuX2luZGV4ICs9IHRleHQubGVuZ3RoOwotICAgICAgICAgICAgcmV0dXJuIHRva2Vu
OwotICAgICAgICB9OwotCi0gICAgICAgIGxldCByZWxldmFudFRleHQ7Ci0gICAgICAgIGZvciAo
OzspIHsKLSAgICAgICAgICAgIHJlbGV2YW50VGV4dCA9IHRoaXMuX3RleHQuc3Vic3RyaW5nKHRo
aXMuX2luZGV4KTsKLSAgICAgICAgICAgIGlmICgvXlxzKy8udGVzdChyZWxldmFudFRleHQpKSB7
Ci0gICAgICAgICAgICAgICAgdGhpcy5faW5kZXggKz0gUmVnRXhwLmxhc3RNYXRjaC5sZW5ndGg7
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBp
ZiAoL15cL1wqLy50ZXN0KHJlbGV2YW50VGV4dCkpIHsKLSAgICAgICAgICAgICAgICBsZXQgZW5k
SW5kZXggPSByZWxldmFudFRleHQuc2VhcmNoKC9cKlwvLyk7Ci0gICAgICAgICAgICAgICAgaWYg
KGVuZEluZGV4IDwgMCkKLSAgICAgICAgICAgICAgICAgICAgdGhpcy5mYWlsKCJVbnRlcm1pbmF0
ZWQgY29tbWVudCIpOwotICAgICAgICAgICAgICAgIHRoaXMuX2luZGV4ICs9IGVuZEluZGV4Owot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYg
KC9eXC9cLy4qLy50ZXN0KHJlbGV2YW50VGV4dCkpIHsKLSAgICAgICAgICAgICAgICB0aGlzLl9p
bmRleCArPSBSZWdFeHAubGFzdE1hdGNoLmxlbmd0aDsKLSAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IAotICAgICAgICBpZiAodGhpcy5faW5kZXggPj0gdGhpcy5fdGV4dC5sZW5ndGgpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMg
ZG8gVW5pY29kZS4KLSAgICAgICAgaWYgKC9eW15cZFxXXVx3Ki8udGVzdChyZWxldmFudFRleHQp
KQotICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCgiaWRlbnRpZmllciIpOwotCi0gICAgICAgIGlm
ICgvXlswLTldKy8udGVzdChyZWxldmFudFRleHQpKQotICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dCgiaW50TGl0ZXJhbCIpOwotCi0gICAgICAgIC8vIEZJWE1FOiBNYWtlIHRoaXMgaGFuZGxlIGV4
cC1mb3JtIGxpdGVyYWxzIGxpa2UgMWUxLgotICAgICAgICBpZiAoL14oWzAtOV0qXC5bMC05XSsp
fChbMC05XStcLlswLTldKikvLnRlc3QocmVsZXZhbnRUZXh0KSkKLSAgICAgICAgICAgIHJldHVy
biByZXN1bHQoImRvdWJsZUxpdGVyYWwiKTsKLSAgICAgICAgCi0gICAgICAgIGlmICgvXihzdHJ1
Y3R8cHJvdG9jb2x8dHlwZXxpZnxlbHNlfGVudW18Y29udGludWV8YnJlYWt8c3dpdGNofGNhc2V8
ZGVmYXVsdHxmb3J8d2hpbGV8ZG98cmV0dXJufHNpemVvZnxjb25zdGFudHxkZXZpY2V8dGhyZWFk
Z3JvdXB8dGhyZWFkfG9wZXJhdG9yfG51bGwpLy50ZXN0KHJlbGV2YW50VGV4dCkpCi0gICAgICAg
ICAgICByZXR1cm4gcmVzdWx0KCJrZXl3b3JkIik7Ci0gICAgICAgIAotICAgICAgICBpZiAoL14o
W3t9KClcW1xdPzo9KypcLywuJSF+XiZ8PD5cXDstXXwtPnw9Pnw8PXw9PXwhPXxcKz18LT18XCo9
fFwvPXwlPXxePXxcfD18Jj0pLy50ZXN0KHJlbGV2YW50VGV4dCkpCi0gICAgICAgICAgICByZXR1
cm4gcmVzdWx0KCJwdW5jdHVhdGlvbiIpOwotICAgICAgICAKLSAgICAgICAgbGV0IHJlbWFpbmlu
ZyA9IHJlbGV2YW50VGV4dC5zdWJzdHJpbmcoMCwgMjApLnNwbGl0KC9ccy8pWzBdOwotICAgICAg
ICBpZiAoIXJlbWFpbmluZy5sZW5ndGgpCi0gICAgICAgICAgICByZW1haW5pbmcgPSByZWxldmFu
dFRleHQuc3Vic3RyaW5nKDAsIDIwKTsKLSAgICAgICAgdGhpcy5mYWlsKCJVbnJlY29nbml6ZWQg
dG9rZW4gYmVnaW5uaW5nIHdpdGg6ICIgKyByZW1haW5pbmcpOwotICAgIH0KLSAgICAKLSAgICBw
dXNoKHRva2VuKQotICAgIHsKLSAgICAgICAgdGhpcy5fc3RhY2sucHVzaCh0b2tlbik7Ci0gICAg
fQotICAgIAotICAgIHBlZWsoKQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMubmV4
dCgpOwotICAgICAgICB0aGlzLnB1c2gocmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0gICAgCi0gICAgZmFpbChlcnJvcikKLSAgICB7Ci0gICAgICAgIHRocm93IG5ldyBB
TFN5bnRheEVycm9yKHRoaXMub3JpZ2luU3RyaW5nLCBlcnJvcik7Ci0gICAgfQotICAgIAotICAg
IGJhY2t0cmFja2luZ1Njb3BlKGNhbGxiYWNrKQotICAgIHsKLSAgICAgICAgbGV0IHN0YXRlID0g
dGhpcy5zdGF0ZTsKLSAgICAgICAgdHJ5IHsKLSAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygp
OwotICAgICAgICB9IGNhdGNoIChlKSB7Ci0gICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIEFM
U3ludGF4RXJyb3IpIHsKLSAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aHJv
dyBlOwotICAgICAgICB9Ci0gICAgfQotfQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkvTGV4ZXJU
b2tlbi5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9BcnJheUxhbmdSSS9MZXhlclRva2VuLmpzCShy
ZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9MZXhlclRva2VuLmpzCShub25l
eGlzdGVudCkKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1jbGFzcyBMZXhlclRva2VuIHsKLSAgICBj
b25zdHJ1Y3RvcihsZXhlciwgaW5kZXgsIGtpbmQsIHRleHQpCi0gICAgewotICAgICAgICB0aGlz
Ll9sZXhlciA9IGxleGVyOwotICAgICAgICB0aGlzLl9pbmRleCA9IGluZGV4OwotICAgICAgICB0
aGlzLl9raW5kID0ga2luZDsKLSAgICAgICAgdGhpcy5fdGV4dCA9IHRleHQ7Ci0gICAgfQotICAg
IAotICAgIGdldCBraW5kKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9raW5kOwotICAg
IH0KLSAgICAKLSAgICBnZXQgdGV4dCgpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fdGV4
dDsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG9yaWdpbigpCi0gICAgewotICAgICAgICByZXR1cm4g
dGhpcy5fbGV4ZXIub3JpZ2luOwotICAgIH0KLSAgICAKLSAgICBnZXQgaW5kZXgoKQotICAgIHsK
LSAgICAgICAgcmV0dXJuIHRoaXMuX2luZGV4OwotICAgIH0KLSAgICAKLSAgICBnZXQgbGluZU51
bWJlcigpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy5fbGV4ZXIubGluZU51bWJlckZvcklu
ZGV4KHRoaXMuX2luZGV4KTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG9yaWdpblN0cmluZygpCi0g
ICAgewotICAgICAgICByZXR1cm4gdGhpcy5vcmlnaW4gKyAiOiIgKyAodGhpcy5saW5lTnVtYmVy
ICsgMSk7Ci0gICAgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVy
biAiTGV4ZXJUb2tlbigiICsgdGhpcy5raW5kICsgIiwgIiArIHRoaXMudGV4dCArICIsICIgKyB0
aGlzLmxpbmVOdW1iZXIgKyAiKSI7Ci0gICAgfQotfQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkv
TmFtZUNvbnRleHQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvTmFtZUNvbnRl
eHQuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJL05hbWVDb250ZXh0
LmpzCShub25leGlzdGVudCkKQEAgLTEsMTY1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY29uc3QgTm90RnVuYyA9
IFN5bWJvbCgpOwotCi1mdW5jdGlvbiBpc1dpbGRjYXJkS2luZChraW5kKQotewotICAgIHJldHVy
biBraW5kID09IE5vdEZ1bmM7Ci19Ci0KLWNsYXNzIE5hbWVDb250ZXh0IHsKLSAgICBjb25zdHJ1
Y3RvcihkZWxlZ2F0ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2Z1bmNNYXAgPSBuZXcgTWFwKCk7
Ci0gICAgICAgIHRoaXMuX21hcCA9IG5ldyBNYXAoKTsKLSAgICAgICAgdGhpcy5fZGVmaW5lZCA9
IG5ldyBTZXQoKTsKLSAgICAgICAgdGhpcy5fY3VycmVudFN0YXRlbWVudCA9IG51bGw7Ci0gICAg
ICAgIHRoaXMuX2RlbGVnYXRlID0gZGVsZWdhdGU7Ci0gICAgICAgIHRoaXMuX2ludHJpbnNpY3Mg
PSBudWxsOwotICAgICAgICB0aGlzLl9wcm9ncmFtID0gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAg
bWFwRm9yKGtpbmQpCi0gICAgewotICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICAgICAgY2Fz
ZSBOb3RGdW5jOgotICAgICAgICBjYXNlIFZhbHVlOgotICAgICAgICBjYXNlIFR5cGU6Ci0gICAg
ICAgIGNhc2UgUHJvdG9jb2w6Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fbWFwOwotICAgICAg
ICBjYXNlIEZ1bmM6Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy5fZnVuY01hcDsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQmFkIGtpbmQ6ICIgKyBraW5k
KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBhZGQodGhpbmcpCi0gICAgewotICAgICAg
ICBpZiAoIXRoaW5nLm5hbWUpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAg
ICBpZiAodGhpbmcuaXNOYXRpdmUpIHsKLSAgICAgICAgICAgIGlmICghdGhpcy5faW50cmluc2lj
cykKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk5hdGl2ZSBmdW5jdGlvbiBpbiBh
IHNjb3BlIHRoYXQgZG9lcyBub3QgcmVjb2duaXplIGludHJpbnNpY3MiKTsKLSAgICAgICAgICAg
IHRoaXMuX2ludHJpbnNpY3MuYWRkKHRoaW5nKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgaWYgKHRoaW5nLmtpbmQgPT0gRnVuYykgewotICAgICAgICAgICAgbGV0IGFycmF5ID0gdGhp
cy5fZnVuY01hcC5nZXQodGhpbmcubmFtZSk7Ci0gICAgICAgICAgICBpZiAoIWFycmF5KQotICAg
ICAgICAgICAgICAgIHRoaXMuX2Z1bmNNYXAuc2V0KHRoaW5nLm5hbWUsIGFycmF5ID0gW10pOwot
ICAgICAgICAgICAgYXJyYXkucHVzaCh0aGluZyk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIH0KLSAgICAgICAgaWYgKHRoaXMuX21hcC5oYXModGhpbmcubmFtZSkpCi0gICAgICAgICAg
ICB0aHJvdyBuZXcgQUxUeXBlRXJyb3IodGhpbmcub3JpZ2luLm9yaWdpblN0cmluZywgIkR1cGxp
Y2F0ZSBuYW1lOiAiICsgdGhpbmcubmFtZSk7Ci0gICAgICAgIHRoaXMuX21hcC5zZXQodGhpbmcu
bmFtZSwgdGhpbmcpOwotICAgIH0KLSAgICAKLSAgICBnZXQoa2luZCwgbmFtZSkKLSAgICB7Ci0g
ICAgICAgIGxldCByZXN1bHQgPSB0aGlzLm1hcEZvcihraW5kKS5nZXQobmFtZSk7Ci0gICAgICAg
IGlmICghcmVzdWx0ICYmIHRoaXMuX2RlbGVnYXRlKQotICAgICAgICAgICAgcmV0dXJuIHRoaXMu
X2RlbGVnYXRlLmdldChraW5kLCBuYW1lKTsKLSAgICAgICAgaWYgKHJlc3VsdCAmJiAhaXNXaWxk
Y2FyZEtpbmQoa2luZCkgJiYgcmVzdWx0LmtpbmQgIT0ga2luZCkKLSAgICAgICAgICAgIHJldHVy
biBudWxsOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBnZXQgY3Vy
cmVudFN0YXRlbWVudCgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fY3VycmVudFN0YXRlbWVu
dCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdGVtZW50OwotICAgICAgICBp
ZiAodGhpcy5fZGVsZWdhdGUpCi0gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGUuY3Vy
cmVudFN0YXRlbWVudDsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0gICAgfQotICAgIAotICAgIGlz
RGVmaW5lZCh0aGluZykKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9kZWZpbmVkLmhhcyh0
aGluZykKLSAgICAgICAgICAgIHx8ICh0aGlzLl9kZWxlZ2F0ZSAmJiB0aGlzLl9kZWxlZ2F0ZS5p
c0RlZmluZWQodGhpbmcpKTsKLSAgICB9Ci0gICAgCi0gICAgZGVmaW5lKHRoaW5nKQotICAgIHsK
LSAgICAgICAgdGhpcy5fZGVmaW5lZC5hZGQodGhpbmcpOwotICAgIH0KLSAgICAKLSAgICBkZWZp
bmVBbGwoKQotICAgIHsKLSAgICAgICAgZm9yIChsZXQgdGhpbmcgb2YgdGhpcykKLSAgICAgICAg
ICAgIHRoaXMuZGVmaW5lKHRoaW5nKTsKLSAgICB9Ci0gICAgCi0gICAgZG9TdGF0ZW1lbnQoc3Rh
dGVtZW50LCBjYWxsYmFjaykKLSAgICB7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnRTdGF0ZW1lbnQg
PSBzdGF0ZW1lbnQ7Ci0gICAgICAgIGNhbGxiYWNrKCk7Ci0gICAgICAgIHRoaXMuX2N1cnJlbnRT
dGF0ZW1lbnQgPSBudWxsOwotICAgICAgICB0aGlzLmRlZmluZShzdGF0ZW1lbnQpOwotICAgIH0K
LSAgICAKLSAgICByZWNvZ25pemVJbnRyaW5zaWNzKCkKLSAgICB7Ci0gICAgICAgIHRoaXMuX2lu
dHJpbnNpY3MgPSBuZXcgSW50cmluc2ljcygpOwotICAgIH0KLSAgICAKLSAgICBnZXQgaW50cmlu
c2ljcygpCi0gICAgewotICAgICAgICBpZiAodGhpcy5faW50cmluc2ljcykKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLl9pbnRyaW5zaWNzOwotICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUpCi0g
ICAgICAgICAgICByZXR1cm4gdGhpcy5fZGVsZWdhdGUuaW50cmluc2ljczsKLSAgICAgICAgcmV0
dXJuIG51bGw7Ci0gICAgfQotICAgIAotICAgIHNldCBwcm9ncmFtKHZhbHVlKQotICAgIHsKLSAg
ICAgICAgdGhpcy5fcHJvZ3JhbSA9IHZhbHVlOwotICAgIH0KLSAgICAKLSAgICBnZXQgcHJvZ3Jh
bSgpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fcHJvZ3JhbSkKLSAgICAgICAgICAgIHJldHVy
biB0aGlzLl9wcm9ncmFtOwotICAgICAgICBpZiAodGhpcy5fZGVsZWdhdGUpCi0gICAgICAgICAg
ICByZXR1cm4gdGhpcy5fZGVsZWdhdGUucHJvZ3JhbTsKLSAgICAgICAgcmV0dXJuIG51bGw7Ci0g
ICAgfQotICAgIAotICAgICpbU3ltYm9sLml0ZXJhdG9yXSgpCi0gICAgewotICAgICAgICBmb3Ig
KGxldCB2YWx1ZSBvZiB0aGlzLl9tYXAudmFsdWVzKCkpCi0gICAgICAgICAgICB5aWVsZCB2YWx1
ZTsKLSAgICAgICAgZm9yIChsZXQgZnVuY3Mgb2YgdGhpcy5fZnVuY01hcC52YWx1ZXMoKSkgewot
ICAgICAgICAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jcykKLSAgICAgICAgICAgICAgICB5aWVs
ZCBmdW5jOwotICAgICAgICB9Ci0gICAgfQotfQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkvTmFt
ZVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL05hbWVSZXNvbHZl
ci5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkvTmFtZVJlc29sdmVy
LmpzCShub25leGlzdGVudCkKQEAgLTEsMTk4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotLy8gVGhpcyBvbmx5IHJl
c29sdmVzIG5hbWVzLiBBZnRlciB0aGlzIHBoYXNlIHJ1bnMsIGFsbCBuYW1lcyB3aWxsIGJlIHJl
c29sdmVkLiBUaGlzIG1lYW5zIHRoYXQgYWxsCi0vLyBYWVpSZWYgb2JqZWN0cyBub3cga25vdyB3
aG8gdGhleSByZXNvbHZlIHRvLiBUaGlzIGRvZXMgbm90IHlldCBhbGxvdyB0eXBlIGFuYWx5c2lz
LCBiZWNhdXNlIHRoZXJlCi0vLyBhcmUgc3RpbGwgVHlwZURlZnMuIFRoaXMgdGhyb3dzIHR5cGUg
ZXJyb3JzIGZvciBmYWlsZWQgbmFtZSByZXNvbHV0aW9ucyBhbmQgZm9yIHRoaW5ncyB0aGF0IGFy
ZQotLy8gbW9yZSBjb252ZW5pZW50IHRvIGNoZWNrIGhlcmUgdGhhbiBpbiB0aGUgQ2hlY2tlci4g
VGhpcyB1c3VhbGx5IGludm9sdmVzIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUKLS8vIGNoZWNrZWQg
YmVmb3JlIFR5cGVSZWZUb1R5cGVEZWZTa2lwcGVyLgotY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVu
ZHMgVmlzaXRvciB7Ci0gICAgLy8gSXQncyB0b3RhbGx5IE9LIHRvIGluc3RhbnRpYXRlIHRoaXMg
d2l0aCB6ZXJvIGFyZ3VtZW50cyAoaS5lLiBwYXNzaW5nIHVuZGVmaW5lZCBmb3IgYm90aCBvZgot
ICAgIC8vIHRoZW0pIGlmIHlvdSdyZSBjcmVhdGluZyBhIE5hbWVSZXNvbHZlciB0byB2aXNpdCBh
IFByb2dyYW0uCi0gICAgY29uc3RydWN0b3IobmFtZUNvbnRleHQpCi0gICAgewotICAgICAgICBz
dXBlcigpOwotICAgICAgICB0aGlzLl9uYW1lQ29udGV4dCA9IG5hbWVDb250ZXh0OwotICAgIH0K
LSAgICAKLSAgICB2aXNpdFByb2dyYW0obm9kZSkKLSAgICB7Ci0gICAgICAgIGxldCBuYW1lQ29u
dGV4dCA9IG5ldyBOYW1lQ29udGV4dCh0aGlzLl9uYW1lQ29udGV4dCk7Ci0gICAgICAgIG5hbWVD
b250ZXh0LnByb2dyYW0gPSBub2RlOwotICAgICAgICBuYW1lQ29udGV4dC5yZWNvZ25pemVJbnRy
aW5zaWNzKCk7Ci0gICAgICAgIG5vZGUuaW50cmluc2ljcyA9IG5hbWVDb250ZXh0LmludHJpbnNp
Y3M7Ci0gICAgICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiBub2RlLnRvcExldmVsU3RhdGVtZW50
cykKLSAgICAgICAgICAgIG5hbWVDb250ZXh0LmFkZChzdGF0ZW1lbnQpOwotICAgICAgICBsZXQg
Y2hlY2tlciA9IG5ldyBOYW1lUmVzb2x2ZXIobmFtZUNvbnRleHQpOwotICAgICAgICBmb3IgKGxl
dCBzdGF0ZW1lbnQgb2Ygbm9kZS50b3BMZXZlbFN0YXRlbWVudHMpCi0gICAgICAgICAgICBuYW1l
Q29udGV4dC5kb1N0YXRlbWVudChzdGF0ZW1lbnQsICgpID0+IHN0YXRlbWVudC52aXNpdChjaGVj
a2VyKSk7Ci0gICAgfQotICAgIAotICAgIF92aXNpdFR5cGVQYXJhbWV0ZXJzQW5kQnVpbGROYW1l
Q29udGV4dChub2RlKQotICAgIHsKLSAgICAgICAgbGV0IG5hbWVDb250ZXh0ID0gbmV3IE5hbWVD
b250ZXh0KHRoaXMuX25hbWVDb250ZXh0KTsKLSAgICAgICAgZm9yIChsZXQgdHlwZVBhcmFtZXRl
ciBvZiBub2RlLnR5cGVQYXJhbWV0ZXJzKSB7Ci0gICAgICAgICAgICBuYW1lQ29udGV4dC5hZGQo
dHlwZVBhcmFtZXRlcik7Ci0gICAgICAgICAgICB0eXBlUGFyYW1ldGVyLnZpc2l0KHRoaXMpOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBuYW1lQ29udGV4dDsKLSAgICB9Ci0gICAgCi0gICAg
dmlzaXRGdW5jKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgY2hlY2tlciA9IG5ldyBOYW1lUmVz
b2x2ZXIodGhpcy5fdmlzaXRUeXBlUGFyYW1ldGVyc0FuZEJ1aWxkTmFtZUNvbnRleHQobm9kZSkp
OwotICAgICAgICBub2RlLnJldHVyblR5cGUudmlzaXQoY2hlY2tlcik7Ci0gICAgICAgIGZvciAo
bGV0IHBhcmFtZXRlciBvZiBub2RlLnBhcmFtZXRlcnMpCi0gICAgICAgICAgICBwYXJhbWV0ZXIu
dmlzaXQoY2hlY2tlcik7Ci0gICAgfQotICAgIAotICAgIHZpc2l0RnVuY0RlZihub2RlKQotICAg
IHsKLSAgICAgICAgbGV0IGNvbnRleHRXaXRoVHlwZVBhcmFtZXRlcnMgPSB0aGlzLl92aXNpdFR5
cGVQYXJhbWV0ZXJzQW5kQnVpbGROYW1lQ29udGV4dChub2RlKTsKLSAgICAgICAgbGV0IGNoZWNr
ZXJXaXRoVHlwZVBhcmFtZXRlcnMgPSBuZXcgTmFtZVJlc29sdmVyKGNvbnRleHRXaXRoVHlwZVBh
cmFtZXRlcnMpOwotICAgICAgICBub2RlLnJldHVyblR5cGUudmlzaXQoY2hlY2tlcldpdGhUeXBl
UGFyYW1ldGVycyk7Ci0gICAgICAgIGxldCBjb250ZXh0V2l0aFBhcmFtZXRlcnMgPSBuZXcgTmFt
ZUNvbnRleHQoY29udGV4dFdpdGhUeXBlUGFyYW1ldGVycyk7Ci0gICAgICAgIGZvciAobGV0IHBh
cmFtZXRlciBvZiBub2RlLnBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIHBhcmFtZXRlci52aXNp
dChjaGVja2VyV2l0aFR5cGVQYXJhbWV0ZXJzKTsKLSAgICAgICAgICAgIGNvbnRleHRXaXRoUGFy
YW1ldGVycy5hZGQocGFyYW1ldGVyKTsKLSAgICAgICAgfQotICAgICAgICBsZXQgY2hlY2tlcldp
dGhQYXJhbWV0ZXJzID0gbmV3IE5hbWVSZXNvbHZlcihjb250ZXh0V2l0aFBhcmFtZXRlcnMpOwot
ICAgICAgICBub2RlLmJvZHkudmlzaXQoY2hlY2tlcldpdGhQYXJhbWV0ZXJzKTsKLSAgICB9Ci0g
ICAgCi0gICAgdmlzaXRCbG9jayhub2RlKQotICAgIHsKLSAgICAgICAgbGV0IGNoZWNrZXIgPSBu
ZXcgTmFtZVJlc29sdmVyKG5ldyBOYW1lQ29udGV4dCh0aGlzLl9uYW1lQ29udGV4dCkpOwotICAg
ICAgICBmb3IgKGxldCBzdGF0ZW1lbnQgb2Ygbm9kZS5zdGF0ZW1lbnRzKQotICAgICAgICAgICAg
c3RhdGVtZW50LnZpc2l0KGNoZWNrZXIpOwotICAgIH0KLSAgICAKLSAgICB2aXNpdFByb3RvY29s
RGVjbChub2RlKQotICAgIHsKLSAgICAgICAgbGV0IG5hbWVDb250ZXh0ID0gbmV3IE5hbWVDb250
ZXh0KHRoaXMuX25hbWVDb250ZXh0KTsKLSAgICAgICAgbmFtZUNvbnRleHQuYWRkKG5vZGUudHlw
ZVZhcmlhYmxlKTsKLSAgICAgICAgbGV0IGNoZWNrZXIgPSBuZXcgTmFtZVJlc29sdmVyKG5hbWVD
b250ZXh0KTsKLSAgICAgICAgZm9yIChsZXQgc2lnbmF0dXJlIG9mIG5vZGUuc2lnbmF0dXJlcykK
LSAgICAgICAgICAgIHNpZ25hdHVyZS52aXNpdChjaGVja2VyKTsKLSAgICB9Ci0gICAgCi0gICAg
dmlzaXRUeXBlRGVmKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgbmFtZUNvbnRleHQgPSBuZXcg
TmFtZUNvbnRleHQodGhpcy5fbmFtZUNvbnRleHQpOwotICAgICAgICBmb3IgKGxldCB0eXBlUGFy
YW1ldGVyIG9mIG5vZGUudHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIHR5cGVQYXJhbWV0
ZXIudmlzaXQodGhpcyk7Ci0gICAgICAgICAgICBuYW1lQ29udGV4dC5hZGQodHlwZVBhcmFtZXRl
cik7Ci0gICAgICAgIH0KLSAgICAgICAgbGV0IGNoZWNrZXIgPSBuZXcgTmFtZVJlc29sdmVyKG5h
bWVDb250ZXh0KTsKLSAgICAgICAgbm9kZS50eXBlLnZpc2l0KGNoZWNrZXIpOwotICAgIH0KLSAg
ICAKLSAgICB2aXNpdFN0cnVjdFR5cGUobm9kZSkKLSAgICB7Ci0gICAgICAgIGxldCBuYW1lQ29u
dGV4dCA9IG5ldyBOYW1lQ29udGV4dCh0aGlzLl9uYW1lQ29udGV4dCk7Ci0gICAgICAgIGZvciAo
bGV0IHR5cGVQYXJhbWV0ZXIgb2Ygbm9kZS50eXBlUGFyYW1ldGVycykgewotICAgICAgICAgICAg
dHlwZVBhcmFtZXRlci52aXNpdCh0aGlzKTsKLSAgICAgICAgICAgIG5hbWVDb250ZXh0LmFkZCh0
eXBlUGFyYW1ldGVyKTsKLSAgICAgICAgfQotICAgICAgICBsZXQgY2hlY2tlciA9IG5ldyBOYW1l
UmVzb2x2ZXIobmFtZUNvbnRleHQpOwotICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiBub2RlLmZp
ZWxkcykKLSAgICAgICAgICAgIGZpZWxkLnZpc2l0KGNoZWNrZXIpOwotICAgIH0KLSAgICAKLSAg
ICBfcmVzb2x2ZVR5cGVBcmd1bWVudHModHlwZUFyZ3VtZW50cykKLSAgICB7Ci0gICAgICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgdHlwZUFyZ3VtZW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAg
ICAgbGV0IHR5cGVBcmd1bWVudCA9IHR5cGVBcmd1bWVudHNbaV07Ci0gICAgICAgICAgICBpZiAo
dHlwZUFyZ3VtZW50IGluc3RhbmNlb2YgVHlwZU9yVmFyaWFibGVSZWYpIHsKLSAgICAgICAgICAg
ICAgICBsZXQgdGhpbmcgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoTm90RnVuYywgdHlwZUFyZ3Vt
ZW50Lm5hbWUpOwotICAgICAgICAgICAgICAgIGlmICghdGhpbmcpCi0gICAgICAgICAgICAgICAg
ICAgIG5ldyBBTFR5cGVFcnJvcih0eXBlQXJndW1lbnQub3JpZ2luLm9yaWdpblN0cmluZywgIkNv
dWxkIG5vdCBmaW5kIHR5cGUgb3IgdmFyaWFibGUgbmFtZWQgIiArIHR5cGVBcmd1bWVudC5uYW1l
KTsKLSAgICAgICAgICAgICAgICBpZiAodGhpbmcgaW5zdGFuY2VvZiBWYWx1ZSkgewotICAgICAg
ICAgICAgICAgICAgICB0eXBlQXJndW1lbnRbaV0gPSBuZXcgVmFyaWFibGVSZWYodHlwZUFyZ3Vt
ZW50Lm9yaWdpbiwgdHlwZUFyZ3VtZW50Lm5hbWUpOwotICAgICAgICAgICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgICAgICAgICB0eXBlQXJndW1lbnRbaV0gPSBuZXcgVHlwZVJlZih0eXBlQXJn
dW1lbnQub3JpZ2luLCB0eXBlQXJndW1lbnQubmFtZSwgW10pOwotICAgICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgICAgICBpZiAodHlwZUFyZ3VtZW50W2ldIGluc3RhbmNlb2YgVmFs
dWUKLSAgICAgICAgICAgICAgICAmJiAhdHlwZUFyZ3VtZW50W2ldLmlzQ29uc3RleHByKQotICAg
ICAgICAgICAgICAgIHRocm93IG5ldyBBTFR5cGVFcnJvcih0eXBlQXJndW1lbnRbaV0ub3JpZ2lu
Lm9yaWdpblN0cmluZywgIkV4cGVjdGVkIGNvbnN0ZXhwciIpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIAotICAgIHZpc2l0VHlwZVJlZihub2RlKQotICAgIHsKLSAgICAgICAgdGhpcy5fcmVzb2x2
ZVR5cGVBcmd1bWVudHMobm9kZS50eXBlQXJndW1lbnRzKTsKLSAgICAgICAgCi0gICAgICAgIGxl
dCB0eXBlID0gdGhpcy5fbmFtZUNvbnRleHQuZ2V0KFR5cGUsIG5vZGUubmFtZSk7Ci0gICAgICAg
IGlmICghdHlwZSkKLSAgICAgICAgICAgIHRocm93IG5ldyBBTFR5cGVFcnJvcihub2RlLm9yaWdp
bi5vcmlnaW5TdHJpbmcsICJDb3VsZCBub3QgZmluZCB0eXBlIG5hbWVkICIgKyBub2RlLm5hbWUp
OwotICAgICAgICBpZiAoIXRoaXMuX25hbWVDb250ZXh0LmlzRGVmaW5lZCh0eXBlKSkKLSAgICAg
ICAgICAgIHRocm93IG5ldyBBTFR5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJJ
bGxlZ2FsIGZvcndhcmQgdXNlIG9mIHR5cGUgbmFtZWQgIiArIG5vZGUubmFtZSk7Ci0gICAgICAg
IG5vZGUudHlwZSA9IHR5cGU7Ci0gICAgICAgIAotICAgICAgICBpZiAodHlwZS50eXBlUGFyYW1l
dGVycy5sZW5ndGggIT0gbm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgICAgIHRo
cm93IG5ldyBBTFR5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJXcm9uZyBudW1i
ZXIgb2YgdHlwZSBhcmd1bWVudHMiKTsKLSAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0eXBl
LnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBsZXQgcGFyYW1ldGVy
SXNUeXBlID0gdHlwZS50eXBlUGFyYW1ldGVyc1tpXSBpbnN0YW5jZW9mIFR5cGVWYXJpYWJsZTsK
LSAgICAgICAgICAgIGxldCBhcmd1bWVudElzVHlwZSA9IG5vZGUudHlwZUFyZ3VtZW50c1tpXSBp
bnN0YW5jZW9mIFR5cGU7Ci0gICAgICAgICAgICBub2RlLnR5cGVBcmd1bWVudHNbaV0udmlzaXQo
dGhpcyk7Ci0gICAgICAgICAgICBpZiAocGFyYW1ldGVySXNUeXBlICYmICFhcmd1bWVudElzVHlw
ZSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQUxUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3Jp
Z2luU3RyaW5nLCAiRXhwZWN0ZWQgdHlwZSwgYnV0IGdvdCB2YWx1ZSBhdCBhcmd1bWVudCAjIiAr
IGkpOwotICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXJJc1R5cGUgJiYgYXJndW1lbnRJc1R5cGUp
Ci0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFMVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdp
blN0cmluZywgIkV4cGVjdGVkIHZhbHVlLCBidXQgZ290IHR5cGUgYXQgYXJndW1lbnQgIyIgKyBp
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHN1cGVyLnZpc2l0VHlwZVJlZihub2RlKTsKLSAgICB9
Ci0gICAgCi0gICAgdmlzaXRSZWZlcmVuY2VUeXBlKG5vZGUpCi0gICAgewotICAgICAgICBsZXQg
bmFtZUNvbnRleHQgPSBuZXcgTmFtZUNvbnRleHQodGhpcy5fbmFtZUNvbnRleHQpOwotICAgICAg
ICBuYW1lQ29udGV4dC5kZWZpbmVBbGwoKTsKLSAgICAgICAgbm9kZS5lbGVtZW50VHlwZS52aXNp
dChuZXcgTmFtZVJlc29sdmVyKG5hbWVDb250ZXh0KSk7Ci0gICAgfQotICAgIAotICAgIHZpc2l0
VmFyaWFibGVSZWYobm9kZSkKLSAgICB7Ci0gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLl9uYW1l
Q29udGV4dC5nZXQoVmFsdWUsIG5vZGUubmFtZSk7Ci0gICAgICAgIGlmICghcmVzdWx0KQotICAg
ICAgICAgICAgdGhyb3cgbmV3IEFMVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywg
IkNvdWxkIG5vdCBmaW5kIHZhcmlhYmxlIG5hbWVkICIgKyBub2RlLm5hbWUpOwotICAgICAgICBu
b2RlLnZhcmlhYmxlID0gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB2aXNpdFJldHVybihub2Rl
KQotICAgIHsKLSAgICAgICAgbm9kZS5mdW5jID0gdGhpcy5fbmFtZUNvbnRleHQuY3VycmVudFN0
YXRlbWVudDsKLSAgICAgICAgc3VwZXIudmlzaXRSZXR1cm4obm9kZSk7Ci0gICAgfQotICAgIAot
ICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKLSAgICB7Ci0gICAgICAgIHRoaXMuX3Jlc29s
dmVUeXBlQXJndW1lbnRzKG5vZGUudHlwZUFyZ3VtZW50cyk7Ci0gICAgICAgIHN1cGVyLnZpc2l0
Q2FsbEV4cHJlc3Npb24obm9kZSk7Ci0gICAgfQotfQotCkluZGV4OiBUb29scy9BcnJheUxhbmdS
SS9OYXRpdmVGdW5jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL05hdGl2ZUZ1
bmMuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJL05hdGl2ZUZ1bmMu
anMJKG5vbmV4aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
LSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIE5hdGl2ZUZ1bmMg
ZXh0ZW5kcyBGdW5jIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIHJldHVyblR5cGUs
IHR5cGVQYXJhbWV0ZXJzLCBwYXJhbWV0ZXJzKQotICAgIHsKLSAgICAgICAgc3VwZXIobmFtZSwg
cmV0dXJuVHlwZSwgdHlwZVBhcmFtZXRlcnMsIHBhcmFtZXRlcnMpOwotICAgICAgICB0aGlzLl9v
cmlnaW4gPSBvcmlnaW47Ci0gICAgfQotICAgIAotICAgIGdldCBvcmlnaW4oKSB7IHJldHVybiB0
aGlzLl9vcmlnaW47IH0KLSAgICBnZXQgaXNOYXRpdmUoKSB7IHJldHVybiB0cnVlOyB9Ci0KLSAg
ICB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gIm5hdGl2ZSAiICsgc3VwZXIudG9T
dHJpbmcoKTsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL05hdGl2ZVR5cGUu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvTmF0aXZlVHlwZS5qcwkocmV2aXNp
b24gMjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkvTmF0aXZlVHlwZS5qcwkobm9uZXhpc3Rl
bnQpCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgTmF0aXZlVHlwZSBleHRlbmRzIFR5cGUg
ewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbmFtZSwgaXNQcmltaXRpdmUsIHR5cGVQYXJhbWV0
ZXJzKQotICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgdGhpcy5fb3JpZ2luID0gb3Jp
Z2luOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5faXNQcmltaXRp
dmUgPSBpc1ByaW1pdGl2ZTsKLSAgICAgICAgdGhpcy5fdHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFy
YW1ldGVyczsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29y
aWdpbjsgfQotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQotICAgIGdldCBp
c1ByaW1pdGl2ZSgpIHsgcmV0dXJuIHRoaXMuX2lzUHJpbWl0aXZlOyB9Ci0gICAgZ2V0IHR5cGVQ
YXJhbWV0ZXJzKCkgeyByZXR1cm4gdGhpcy5fdHlwZVBhcmFtZXRlcnM7IH0KLSAgICBnZXQgaXNO
YXRpdmUoKSB7IHJldHVybiB0cnVlOyB9Ci0gICAgCi0gICAgaW5zdGFudGlhdGUodHlwZUFyZ3Vt
ZW50cykKLSAgICB7Ci0gICAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSB0aGlzLnR5
cGVQYXJhbWV0ZXJzLmxlbmd0aCkKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3Jvbmcg
bnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIHRvIGluc3RhbnRpYXRpb24iKTsKLSAgICAgICAgaWYg
KCF0eXBlQXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiB0aGlzOwotICAgICAg
ICByZXR1cm4gbmV3IE5hdGl2ZVR5cGVJbnN0YW5jZSh0aGlzLCB0eXBlQXJndW1lbnRzKTsKLSAg
ICB9Ci0gICAgCi0gICAgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJuYXRpdmUg
IiArICh0aGlzLmlzUHJpbWl0aXZlID8gInByaW1pdGl2ZSAiIDogIiIpICsgInR5cGUgIiArIHRo
aXMubmFtZSArICI8IiArIHRoaXMudHlwZVBhcmFtZXRlcnMgKyAiPiI7Ci0gICAgfQotfQotCklu
ZGV4OiBUb29scy9BcnJheUxhbmdSSS9OYXRpdmVUeXBlSW5zdGFuY2UuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvQXJyYXlMYW5nUkkvTmF0aXZlVHlwZUluc3RhbmNlLmpzCShyZXZpc2lvbiAyMjEz
OTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9OYXRpdmVUeXBlSW5zdGFuY2UuanMJKG5vbmV4aXN0
ZW50KQpAQCAtMSw1OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIE5hdGl2ZVR5cGVJbnN0YW5jZSBleHRl
bmRzIFR5cGUgewotICAgIGNvbnN0cnVjdG9yKHR5cGUsIHR5cGVBcmd1bWVudHMpCi0gICAgewot
ICAgICAgICBzdXBlcigpOwotICAgICAgICB0aGlzLl90eXBlID0gdHlwZTsKLSAgICAgICAgdGhp
cy5fdHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVudHM7Ci0gICAgfQotICAgIAotICAgIGdldCB0
eXBlKCkgeyByZXR1cm4gdGhpcy5fdHlwZTsgfQotICAgIGdldCB0eXBlQXJndW1lbnRzKCkgeyBy
ZXR1cm4gdGhpcy5fdHlwZUFyZ3VtZW50czsgfQotICAgIGdldCBpc1ByaW1pdGl2ZSgpIHsgcmV0
dXJuIHRoaXMuX3R5cGUuaXNQcmltaXRpdmU7IH0KLSAgICBnZXQgaXNOYXRpdmUoKSB7IHJldHVy
biB0cnVlOyB9Ci0gICAgCi0gICAgdW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIp
Ci0gICAgewotICAgICAgICBpZiAodGhpcy50eXBlICE9IG90aGVyLnR5cGUpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0aGlzLnR5cGVBcmd1bWVudHMubGVuZ3RoICE9
IG90aGVyLnR5cGVBcmd1bWVudHMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudHlwZUFyZ3VtZW50cy5sZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgaWYgKCF0aGlzLnR5cGVBcmd1bWVudHNbaV0udW5pZnkodW5pZmlj
YXRpb25Db250ZXh0LCBvdGhlci50eXBlQXJndW1lbnRzW2ldKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAg
IAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnR5cGUgKyAiPCIg
KyB0aGlzLnR5cGVBcmd1bWVudHMgKyAiPiI7Ci0gICAgfQotfQotCkluZGV4OiBUb29scy9BcnJh
eUxhbmdSSS9Ob2RlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL05vZGUuanMJ
KHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJL05vZGUuanMJKG5vbmV4aXN0
ZW50KQpAQCAtMSw4MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIE5vZGUgewotICAgIHZpc2l0KHZpc2l0
b3IpCi0gICAgewotICAgICAgICBsZXQgdmlzaXRGdW5jID0gdmlzaXRvclsidmlzaXQiICsgdGhp
cy5jb25zdHJ1Y3Rvci5uYW1lXTsKLSAgICAgICAgaWYgKCF2aXNpdEZ1bmMpCi0gICAgICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoIk5vIHZpc2l0IGZ1bmN0aW9uIGZvciAiICsgdGhpcy5jb25zdHJ1
Y3Rvci5uYW1lICsgIiBpbiAiICsgdmlzaXRvci5jb25zdHJ1Y3Rvci5uYW1lKTsKLSAgICAgICAg
bGV0IHJldHVyblZhbHVlID0gdmlzaXRGdW5jLmNhbGwodmlzaXRvciwgdGhpcyk7Ci0gICAgICAg
IGlmICgicmV0dXJuVmFsdWUiIGluIHZpc2l0b3IpCi0gICAgICAgICAgICByZXR1cm4gdmlzaXRv
ci5yZXR1cm5WYWx1ZTsKLSAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwotICAgIH0KLSAgICAK
LSAgICB1bmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYg
KCFvdGhlcikKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBvdGhlciIpOwotICAg
ICAgICBsZXQgdW5pZnlUaGlzID0gdGhpcy51bmlmeU5vZGU7Ci0gICAgICAgIGxldCB1bmlmeU90
aGVyID0gb3RoZXIudW5pZnlOb2RlOwotICAgICAgICBpZiAodW5pZnlPdGhlci50eXBlVmFyaWFi
bGVVbmlmeSh1bmlmaWNhdGlvbkNvbnRleHQsIHVuaWZ5VGhpcykpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgcmV0dXJuIHVuaWZ5VGhpcy51bmlmeUltcGwodW5pZmljYXRpb25D
b250ZXh0LCB1bmlmeU90aGVyKTsKLSAgICB9Ci0gICAgCi0gICAgdW5pZnlJbXBsKHVuaWZpY2F0
aW9uQ29udGV4dCwgb3RoZXIpCi0gICAgewotICAgICAgICBpZiAob3RoZXIudHlwZVZhcmlhYmxl
VW5pZnkodW5pZmljYXRpb25Db250ZXh0LCB0aGlzKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICByZXR1cm4gdGhpcyA9PSBvdGhlcjsKLSAgICB9Ci0gICAgCi0gICAgdHlwZVZh
cmlhYmxlVW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IHVuaWZ5Tm9kZSgpIHsgcmV0dXJuIHRo
aXM7IH0KLSAgICBnZXQgaXNVbmlmaWFibGUoKSB7IHJldHVybiBmYWxzZTsgfQotICAgIAotICAg
IGdldCBpc05hdGl2ZSgpIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgCi0gICAgZXF1YWxzKG90aGVy
KQotICAgIHsKLSAgICAgICAgbGV0IHVuaWZpY2F0aW9uQ29udGV4dCA9IG5ldyBVbmlmaWNhdGlv
bkNvbnRleHQoKTsKLSAgICAgICAgcmV0dXJuIHRoaXMudW5pZnkodW5pZmljYXRpb25Db250ZXh0
LCBvdGhlcikgJiYgdW5pZmljYXRpb25Db250ZXh0LmlzVW51bmlmaWVkKCk7Ci0gICAgfQotICAg
IAotICAgIHN1YnN0aXR1dGUocGFyYW1ldGVycywgYXJndW1lbnRMaXN0KQotICAgIHsKLSAgICAg
ICAgcmV0dXJuIHRoaXMudmlzaXQoU3Vic3RpdHV0aW9uLm1hcHBpbmcocGFyYW1ldGVycywgYXJn
dW1lbnRMaXN0KSk7Ci0gICAgfQotICAgIAotICAgIHN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKHBh
cmFtZXRlcnMsIHVuaWZpY2F0aW9uQ29udGV4dCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlz
LnN1YnN0aXR1dGUocGFyYW1ldGVycywgcGFyYW1ldGVycy5tYXAodHlwZSA9PiB1bmlmaWNhdGlv
bkNvbnRleHQuZmluZCh0eXBlKSkpOwotICAgIH0KLX0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJ
L051bGxUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL051bGxUeXBlLmpz
CShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9OdWxsVHlwZS5qcwkobm9u
ZXhpc3RlbnQpCkBAIC0xLDMyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgTnVsbFR5cGUgZXh0ZW5kcyBU
eXBlIHsKLSAgICAvLyBGSVhNRTogVGhpcyB3aWxsIGhhdmUgdG8gYmVoYXZlIGxpa2UgYSB0eXBl
IHZhcmlhYmxlIGZvciB0aGUgcHVycG9zZXMgb2YgdW5pZmljYXRpb24sIHNvIHRoYXQKLSAgICAv
LyBpdCBjYW4gYmUgdW5pZmllZCB3aXRoIGFueSBwb2ludGVyIHR5cGUuIFRoZW4sIHdlIGNhbiBk
byBhIHZlcmlmaWNhdGlvbiBhdCB0aGUgZW5kIHRvIHNlZSBpZgotICAgIC8vIHdlIGdvdCB1bmlm
aWVkIHdpdGggYSBwb2ludGVyIHR5cGUuCi19Ci0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL1Bh
cnNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL1BhcnNlLmpzCShyZXZpc2lv
biAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9QYXJzZS5qcwkobm9uZXhpc3RlbnQpCkBA
IC0xLDY0OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0idXNlIHN0cmljdCI7Ci0KLWZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgbGlu
ZU51bWJlck9mZnNldCwgdGV4dCkKLXsKLSAgICBsZXQgbGV4ZXIgPSBuZXcgTGV4ZXIob3JpZ2lu
LCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KTsKLSAgICAKLSAgICAvLyBUaGUgaGFyZGVzdCBwYXJ0
IG9mIGRlYWxpbmcgd2l0aCBDLWxpa2UgbGFuZ3VhZ2VzIGlzIHBhcnNpbmcgdmFyaWFibGUgZGVj
bGFyYXRpb24gc3RhdGVtZW50cy4KLSAgICAvLyBMZXQncyBjb25zaWRlciBpZiB0aGlzIGhhcHBl
bnMgaW4gQXJyYXlMYW5nLiBIZXJlIGFyZSB0aGUgdmFsaWQgc3RhdGVtZW50cyBpbiBBcnJheUxh
bmcgdGhhdAotICAgIC8vIGJlZ2luIHdpdGggYW4gaWRlbnRpZmllciwgaWYgd2UgYXNzdW1lIHRo
YXQgYW55IGV4cHJlc3Npb24gY2FuIGJlIGEgc3RhbmRhbG9uZSBzdGF0ZW1lbnQuCi0gICAgLy8K
LSAgICAvLyAgICAgeDsKLSAgICAvLyAgICAgeCA8Ymlub3A+IHk7Ci0gICAgLy8gICAgIHggPCB5
OwotICAgIC8vICAgICB4IDwgeSA+IHo7Ci0gICAgLy8gICAgIHggPSB5OwotICAgIC8vICAgICB4
LmYgPSB5OwotICAgIC8vICAgICBcZXhwID0geTsKLSAgICAvLyAgICAgeFs0Ml0gPSB5OwotICAg
IC8vICAgICB4KCk7Ci0gICAgLy8gICAgIHg8eT4oKTsKLSAgICAvLyAgICAgeCB5OwotICAgIC8v
ICAgICB4PHk+IHo7Ci0gICAgLy8gICAgIGRldmljZSB4W10geTsKLSAgICAvLyAgICAgeFs0Ml0g
eTsKLSAgICAvLyAgICAgZGV2aWNlIHheIHk7Ci0gICAgLy8gICAgIHRocmVhZCB4Xl4geTsKLSAg
ICAvLyAgICAgeF50aHJlYWRedGhyZWFkIHk7Ci0gICAgLy8gICAgIHheZGV2aWNlXnRocmVhZCB5
OwotICAgIC8vCi0gICAgLy8gVGhpcyBoYXMgdHdvIHByb2JsZW0gYXJlYXM6Ci0gICAgLy8KLSAg
ICAvLyAgICAgLSB4PHk+eiBjYW4gcGFyc2UgdHdvIGRpZmZlcmVudCB3YXlzIChhcyAoeCA8IHkp
ID4geiBvciB4PHk+IHopLgotICAgIC8vICAgICAtIHhbNDJdIGNvdWxkIGJlY29tZSBlaXRoZXIg
YW4gYXNzaWdubWVudCBvciBhIHZhcmlhYmxlIGRlY2xhcmF0aW9uLgotICAgIC8vICAgICAtIHg8
eT4gY291bGQgYmVjb21lIGVpdGhlciBhbiBhc3NpZ25tZW50IG9yIGEgdmFyaWFibGUgZGVjbGFy
YXRpb24uCi0gICAgLy8KLSAgICAvLyBXZSBzb2x2ZSB0aGUgZmlyc3QgcHJvYmxlbSBieSBmb3Ji
aWRkaW5nIGV4cHJlc3Npb25zIGFzIHN0YXRlbWVudHMuIFRoZSBsYWNrIG9mIGZ1bmN0aW9uCi0g
ICAgLy8gcG9pbnRlcnMgbWVhbnMgdGhhdCB3ZSBjYW4gc3RpbGwgYWxsb3cgZnVuY3Rpb24gY2Fs
bCBzdGF0ZW1lbnRzIC0gdW5saWtlIGluIEMsIHRob3NlIGNhbm5vdAotICAgIC8vIGhhdmUgYXJi
aXRyYXJ5IGV4cHJlc3Npb25zIGFzIHRoZSBjYWxsZWUuIFRoZSByZW1haW5pbmcgdHdvIHByb2Js
ZW1zIGFyZSBzb2x2ZWQgYnkKLSAgICAvLyBiYWNrdHJhY2tpbmcuIEluIGFsbCBvdGhlciByZXNw
ZWN0cywgdGhpcyBpcyBhIHNpbXBsZSByZWN1cnNpdmUgZGVzY2VudCBwYXJzZXIuCi0gICAgCi0g
ICAgZnVuY3Rpb24gZ2VuZXJpY0NvbnN1bWUoY2FsbGJhY2ssIGV4cGxhbmF0aW9uKQotICAgIHsK
LSAgICAgICAgbGV0IHRva2VuID0gbGV4ZXIubmV4dCgpOwotICAgICAgICBpZiAoIXRva2VuKQot
ICAgICAgICAgICAgbGV4ZXIuZmFpbCgiVW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwotICAgICAg
ICBpZiAoIWNhbGxiYWNrKHRva2VuKSkKLSAgICAgICAgICAgIGxleGVyLmZhaWwoIlVuZXhwZWN0
ZWQgdG9rZW46ICIgKyB0b2tlbi50ZXh0ICsgIjsgZXhwZWN0ZWQ6ICIgKyBleHBsYW5hdGlvbik7
Ci0gICAgICAgIHJldHVybiB0b2tlbjsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gY29uc3Vt
ZSguLi50ZXh0cykKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmljQ29uc3VtZSh0b2tlbiA9
PiB0ZXh0cy5pbmNsdWRlcyh0b2tlbi50ZXh0KSwgdGV4dHMpOwotICAgIH0KLSAgICAKLSAgICBm
dW5jdGlvbiBjb25zdW1lS2luZChraW5kKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdlbmVyaWND
b25zdW1lKHRva2VuID0+IHRva2VuLmtpbmQgPT0ga2luZCwga2luZCk7Ci0gICAgfQotICAgIAot
ICAgIGZ1bmN0aW9uIGFzc2VydE5leHQoLi4udGV4dHMpCi0gICAgewotICAgICAgICBsZXhlci5w
dXNoKGNvbnN1bWUoLi4udGV4dHMpKTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gZ2VuZXJp
Y1Rlc3QoY2FsbGJhY2spCi0gICAgewotICAgICAgICBsZXQgdG9rZW4gPSBsZXhlci5wZWVrKCk7
Ci0gICAgICAgIGlmICh0b2tlbiAmJiBjYWxsYmFjayh0b2tlbikpCi0gICAgICAgICAgICByZXR1
cm4gdG9rZW47Ci0gICAgICAgIHJldHVybiBudWxsOwotICAgIH0KLSAgICAKLSAgICBmdW5jdGlv
biB0ZXN0KC4uLnRleHRzKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdlbmVyaWNUZXN0KHRva2Vu
ID0+IHRleHRzLmluY2x1ZGVzKHRva2VuLnRleHQpKTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rp
b24gdGVzdEtpbmQoa2luZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmljVGVzdCh0b2tl
biA9PiB0b2tlbi5raW5kID09IGtpbmQpOwotICAgIH0KLSAgICAKLSAgICBmdW5jdGlvbiB0cnlD
b25zdW1lKC4uLnRleHRzKQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IHRlc3QoLi4udGV4
dHMpOwotICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgbGV4ZXIubmV4dCgpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBmdW5jdGlvbiB0cnlDb25zdW1l
S2luZChraW5kKQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IHRlc3RLaW5kKGtpbmQpOwot
ICAgICAgICBpZiAocmVzdWx0KQotICAgICAgICAgICAgbGV4ZXIubmV4dCgpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICBmdW5jdGlvbiBwYXJzZVByb3RvY29sUmVm
KCkKLSAgICB7Ci0gICAgICAgIGxldCBwcm90b2NvbFRva2VuID0gY29uc3VtZUtpbmQoImlkZW50
aWZpZXIiKTsKLSAgICAgICAgcmV0dXJuIG5ldyBQcm90b2NvbFJlZihwcm90b2NvbFRva2VuLm9y
aWdpbiwgcHJvdG9jb2xUb2tlbi50ZXh0KTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gY29u
c3VtZUVuZE9mVHlwZUFyZ3MoKQotICAgIHsKLSAgICAgICAgbGV0IHJpZ2h0U2hpZnQgPSB0cnlD
b25zdW1lKCI+PiIpOwotICAgICAgICBpZiAocmlnaHRTaGlmdCkKLSAgICAgICAgICAgIGxleGVy
LnB1c2gobmV3IExleGVyVG9rZW4obGV4ZXIsIHJpZ2h0U2hpZnQub3JpZ2luLCByaWdodFNoaWZ0
LmluZGV4LCByaWdodFNoaWZ0LmtpbmQsICI+IikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBjb25zdW1lKCI+Iik7Ci0gICAgfQotICAgIAotICAgIGZ1bmN0aW9uIHBhcnNlVHlwZVBhcmFt
ZXRlcnMoKQotICAgIHsKLSAgICAgICAgaWYgKCF0ZXN0KCI8IikpCi0gICAgICAgICAgICByZXR1
cm4gW107Ci0gICAgICAgIAotICAgICAgICBsZXQgcmVzdWx0ID0gW107Ci0gICAgICAgIGNvbnN1
bWUoIjwiKTsKLSAgICAgICAgd2hpbGUgKCF0ZXN0KCI+IikpIHsKLSAgICAgICAgICAgIGxldCBj
b25zdGV4cHIgPSBsZXhlci5iYWNrdHJhY2tpbmdTY29wZSgoKSA9PiB7Ci0gICAgICAgICAgICAg
ICAgbGV0IHR5cGUgPSBwYXJzZVR5cGUoKTsKLSAgICAgICAgICAgICAgICBsZXQgbmFtZSA9IGNv
bnN1bWVLaW5kKCJpZGVudGlmaWVyIik7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0TmV4dCgiLCIs
ICI+IiwgIj4+Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGV4cHJUeXBlUGFy
YW1ldGVyKHR5cGUub3JpZ2luLCBuYW1lLCB0eXBlKTsKLSAgICAgICAgICAgIH0pOwotICAgICAg
ICAgICAgaWYgKGNvbnN0ZXhwcikKLSAgICAgICAgICAgICAgICByZXN1bHQucHVzaChjb25zdGV4
cHIpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBjb25z
dW1lS2luZCgiaWRlbnRpZmllciIpOwotICAgICAgICAgICAgICAgIGxldCBwcm90b2NvbCA9IHRy
eUNvbnN1bWUoIjoiKSA/IHBhcnNlUHJvdG9jb2xSZWYoKSA6IG51bGw7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0LnB1c2gobmV3IFR5cGVWYXJpYWJsZShuYW1lLm9yaWdpbiwgbmFtZS50ZXh0LCBw
cm90b2NvbCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCF0cnlDb25zdW1lKCIs
IikpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3VtZUVu
ZE9mVHlwZUFyZ3MoKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAg
ZnVuY3Rpb24gcGFyc2VUZXJtKCkKLSAgICB7Ci0gICAgICAgIGxldCB0b2tlbjsKLSAgICAgICAg
aWYgKHRva2VuID0gdHJ5Q29uc3VtZSgibnVsbCIpKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBO
dWxsKHRva2VuLm9yaWdpbik7Ci0gICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWVLaW5kKCJp
ZGVudGlmaWVyIikpCi0gICAgICAgICAgICByZXR1cm4gbmV3IFZhcmlhYmxlUmVmKHRva2VuLm9y
aWdpbiwgdG9rZW4udGV4dCk7Ci0gICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWVLaW5kKCJp
bnRMaXRlcmFsIikpIHsKLSAgICAgICAgICAgIGxldCBpbnRWZXJzaW9uID0gdG9rZW4udGV4dCB8
IDA7Ci0gICAgICAgICAgICBpZiAoaW50VmVyc2lvbiAhPSB0b2tlbi50ZXh0KQotICAgICAgICAg
ICAgICAgIGxleGVyLmZhaWwoIkludGVnZXIgbGl0ZXJhbCBpcyBub3QgMzItYml0IGludGVnZXIi
KTsKLSAgICAgICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJhbCh0b2tlbi5vcmlnaW4sIGludFZl
cnNpb24pOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiBOZWVkIHN1cHBvcnQgZm9yIGZs
b2F0IGxpdGVyYWxzIGFuZCBwcm9iYWJseSBvdGhlciBsaXRlcmFscyB0b28uCi0gICAgICAgIHRv
a2VuID0gY29uc3VtZUtpbmQoImRvdWJsZUxpdGVyYWwiKTsKLSAgICAgICAgcmV0dXJuIG5ldyBE
b3VibGVMaXRlcmFsKHRva2VuLm9yaWdpbiwgK3Rva2VuLnRleHQpOwotICAgIH0KLSAgICAKLSAg
ICBmdW5jdGlvbiBwYXJzZUNvbnN0ZXhwcigpCi0gICAgewotICAgICAgICByZXR1cm4gcGFyc2VU
ZXJtKCk7Ci0gICAgfQotICAgIAotICAgIGZ1bmN0aW9uIHBhcnNlVHlwZUFyZ3VtZW50cygpCi0g
ICAgewotICAgICAgICBpZiAoIXRlc3QoIjwiKSkKLSAgICAgICAgICAgIHJldHVybiBbXTsKLSAg
ICAgICAgCi0gICAgICAgIGxldCByZXN1bHQgPSBbXTsKLSAgICAgICAgY29uc3VtZSgiPCIpOwot
ICAgICAgICB3aGlsZSAoIXRlc3QoIj4iKSkgewotICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJs
ZSBmb3IgYSBjb25zdGV4cHIgb3IgdHlwZSBjYW4gc3ludGFjdGljYWxseSBvdmVybGFwIGluIHRo
ZSBzaW5nbGUKLSAgICAgICAgICAgIC8vIGlkZW50aWZpZXIgY2FzZS4gTGV0J3MgY29uc2lkZXIg
dGhlIHBvc3NpYmlsaXRpZXM6Ci0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gICAgIFQg
ICAgICAgICAgY291bGQgYmUgdHlwZSBvciBjb25zdGV4cHIKLSAgICAgICAgICAgIC8vICAgICBU
W10gICAgICAgIG9ubHkgdHlwZQotICAgICAgICAgICAgLy8gICAgIFRbNDJdICAgICAgb25seSB0
eXBlIChjb25zdGV4cHIgY2Fubm90IGRvIGluZGV4aW5nKQotICAgICAgICAgICAgLy8gICAgIDQy
ICAgICAgICAgb25seSBjb25zdGV4cHIKLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBJ
biB0aGUgZnV0dXJlIHdlJ2xsIGFsbG93IGNvbnN0ZXhwcnMgdG8gZG8gbW9yZSB0aGluZ3MsIGFu
ZCB0aGVuIHdlJ2xsIHN0aWxsIGhhdmUKLSAgICAgICAgICAgIC8vIHRoZSBwcm9ibGVtIHRoYXQg
c29tZXRoaW5nIG9mIHRoZSBmb3JtIFRbMV1bMl1bM10uLi4gY2FuIGVpdGhlciBiZSBhIHR5cGUg
b3IgYQotICAgICAgICAgICAgLy8gY29uc3RleHByLCBhbmQgd2UgY2FuIGZpZ3VyZSBvdXQgaW4g
dGhlIGNoZWNrZXIgd2hpY2ggaXQgaXMuCi0gICAgICAgICAgICBsZXQgdHlwZU9yVmFyaWFibGVS
ZWYgPSBsZXhlci5iYWNrdHJhY2tpbmdTY29wZSgoKSA9PiB7Ci0gICAgICAgICAgICAgICAgbGV0
IHJlc3VsdCA9IGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIik7Ci0gICAgICAgICAgICAgICAgYXNz
ZXJ0TmV4dCgiLCIsICI+IiwgIj4+Iik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUeXBl
T3JWYXJpYWJsZVJlZihyZXN1bHQub3JpZ2luLCByZXN1bHQudGV4dCk7Ci0gICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIGlmICh0eXBlT3JWYXJpYWJsZVJlZikKLSAgICAgICAgICAgICAgICBy
ZXN1bHQucHVzaCh0eXBlT3JWYXJpYWJsZVJlZik7Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBsZXQgY29uc3RleHByID0gbGV4ZXIuYmFja3RyYWNraW5nU2NvcGUoKCkgPT4g
ewotICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gcGFyc2VDb25zdGV4cHIoKTsKLSAg
ICAgICAgICAgICAgICAgICAgYXNzZXJ0TmV4dCgiLCIsICI+IiwgIj4+Iik7Ci0gICAgICAgICAg
ICAgICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGNvbnN0ZXhwcikKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goY29u
c3RleHByKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5wdXNoKHBhcnNlVHlwZSgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghdHJ5
Q29uc3VtZSgiLCIpKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg
IGNvbnN1bWVFbmRPZlR5cGVBcmdzKCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
ICAgIAotICAgIGZ1bmN0aW9uIHBhcnNlVHlwZSgpCi0gICAgewotICAgICAgICBsZXQgdG9rZW47
Ci0gICAgICAgIGxldCBhZGRyZXNzU3BhY2U7Ci0gICAgICAgIGxldCBhZGRyZXNzU3BhY2VDb25z
dW1lZCA9IGZhbHNlOwotICAgICAgICBpZiAodG9rZW4gPSB0cnlDb25zdW1lKC4uLmFkZHJlc3NT
cGFjZXMpKQotICAgICAgICAgICAgYWRkcmVzc1NwYWNlID0gdG9rZW4udGV4dDsKLSAgICAgICAg
Ci0gICAgICAgIGxldCBuYW1lID0gY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKTsKLSAgICAgICAg
bGV0IHR5cGVBcmd1bWVudHMgPSBwYXJzZVR5cGVBcmd1bWVudHMoKTsKLSAgICAgICAgbGV0IHR5
cGUgPSBuZXcgVHlwZVJlZihuYW1lLm9yaWdpbiwgbmFtZS50ZXh0LCB0eXBlQXJndW1lbnRzKTsK
LSAgICAgICAgCi0gICAgICAgIGZ1bmN0aW9uIGdldEFkZHJlc3NTcGFjZSgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIGFkZHJlc3NTcGFjZUNvbnN1bWVkID0gdHJ1ZTsKLSAgICAgICAgICAgIGlm
IChhZGRyZXNzU3BhY2UpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NTcGFjZTsKLSAg
ICAgICAgICAgIHJldHVybiB0cnlDb25zdW1lKC4uLmFkZHJlc3NTcGFjZXMpOwotICAgICAgICB9
Ci0gICAgICAgIAotICAgICAgICB3aGlsZSAodG9rZW4gPSB0cnlDb25zdW1lKCJeIiwgIlsiKSkg
ewotICAgICAgICAgICAgaWYgKHRva2VuLnRleHQgPT0gIl4iKSB7Ci0gICAgICAgICAgICAgICAg
dHlwZSA9IG5ldyBQdHJUeXBlKHRva2VuLm9yaWdpbiwgZ2V0QWRkcmVzc1NwYWNlKCksIHR5cGUp
OwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
Ci0gICAgICAgICAgICBpZiAodHJ5Q29uc3VtZSgiXSIpKSB7Ci0gICAgICAgICAgICAgICAgdHlw
ZSA9IG5ldyBBcnJheVJlZlR5cGUodG9rZW4ub3JpZ2luLCBnZXRBZGRyZXNzU3BhY2UoKSwgdHlw
ZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIHR5cGUgPSBuZXcgQXJyYXlUeXBlKHRva2VuLm9yaWdpbiwgdHlwZSwg
cGFyc2VDb25zdGV4cHIoKSk7Ci0gICAgICAgICAgICBjb25zdW1lKCJdIik7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChhZGRyZXNzU3BhY2UgJiYgIWFkZHJlc3NTcGFjZUNvbnN1
bWVkKQotICAgICAgICAgICAgbGV4ZXIuZmFpbCgiQWRkcmVzcyBzcGFjZSBzcGVjaWZpZWQgZm9y
IHR5cGUgdGhhdCBkb2VzIG5vdCBuZWVkIGFkZHJlc3Mgc3BhY2UiKTsKLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiB0eXBlOwotICAgIH0KLSAgICAKLSAgICBmdW5jdGlvbiBwYXJzZVR5cGVEZWYo
KQotICAgIHsKLSAgICAgICAgbGV0IG9yaWdpbiA9IGNvbnN1bWUoInR5cGUiKS5vcmlnaW47Ci0g
ICAgICAgIGxldCBuYW1lID0gY29uc3VtZUtpbmQoImlkZW50aWZpZXIiKS50ZXh0OwotICAgICAg
ICBsZXQgdHlwZVBhcmFtZXRlcnMgPSBwYXJzZVR5cGVQYXJhbWV0ZXJzKCk7Ci0gICAgICAgIGNv
bnN1bWUoIj0iKTsKLSAgICAgICAgbGV0IHR5cGUgPSBwYXJzZVR5cGUoKTsKLSAgICAgICAgY29u
c3VtZSgiOyIpOwotICAgICAgICByZXR1cm4gbmV3IFR5cGVEZWYob3JpZ2luLCBuYW1lLCB0eXBl
UGFyYW1ldGVycywgdHlwZSk7Ci0gICAgfQotICAgIAotICAgIGZ1bmN0aW9uIHBhcnNlTmF0aXZl
KCkKLSAgICB7Ci0gICAgICAgIGxldCBvcmlnaW4gPSBjb25zdW1lKCJuYXRpdmUiKS5vcmlnaW47
Ci0gICAgICAgIGxldCBpc1R5cGUgPSBsZXhlci5iYWNrdHJhY2tpbmdTY29wZSgoKSA9PiB7Ci0g
ICAgICAgICAgICBpZiAodHJ5Q29uc3VtZSgidHlwZSIpKQotICAgICAgICAgICAgICAgIHJldHVy
biAibm9ybWFsIjsKLSAgICAgICAgICAgIGNvbnN1bWUoInByaW1pdGl2ZSIpOwotICAgICAgICAg
ICAgY29uc3VtZSgidHlwZSIpOwotICAgICAgICAgICAgcmV0dXJuICJwcmltaXRpdmUiOwotICAg
ICAgICB9KTsKLSAgICAgICAgaWYgKGlzVHlwZSkgewotICAgICAgICAgICAgbGV0IG5hbWUgPSBj
b25zdW1lS2luZCgiaWRlbnRpZmllciIpOwotICAgICAgICAgICAgbGV0IHBhcmFtZXRlcnMgPSBw
YXJzZVR5cGVQYXJhbWV0ZXJzKCk7Ci0gICAgICAgICAgICBjb25zdW1lKCI7Iik7Ci0gICAgICAg
ICAgICByZXR1cm4gbmV3IE5hdGl2ZVR5cGUob3JpZ2luLCBuYW1lLnRleHQsIGlzVHlwZSA9PSAi
cHJpbWl0aXZlIiwgcGFyYW1ldGVycyk7Ci0gICAgICAgIH0KLSAgICAgICAgbGV0IHJldHVyblR5
cGUgPSBwYXJzZVR5cGUoKTsKLSAgICAgICAgbGV0IG5hbWUgPSBwYXJzZUZ1bmNOYW1lKCk7Ci0g
ICAgICAgIGxldCB0eXBlUGFyYW1ldGVycyA9IHBhcnNlVHlwZVBhcmFtZXRlcnMoKTsKLSAgICAg
ICAgbGV0IHBhcmFtZXRlcnMgPSBwYXJzZVBhcmFtZXRlcnMoKTsKLSAgICAgICAgY29uc3VtZSgi
OyIpOwotICAgICAgICByZXR1cm4gbmV3IE5hdGl2ZUZ1bmMob3JpZ2luLCBuYW1lLCByZXR1cm5U
eXBlLCB0eXBlUGFyYW1ldGVycywgcGFyYW1ldGVycyk7Ci0gICAgfQotICAgIAotICAgIGZ1bmN0
aW9uIGdlbmVyaWNQYXJzZUxlZnQodGV4dHMsIG5leHRQYXJzZXIsIGNvbnN0cnVjdG9yKQotICAg
IHsKLSAgICAgICAgbGV0IGxlZnQgPSBuZXh0UGFyc2VyKCk7Ci0gICAgICAgIGxldCB0b2tlbjsK
LSAgICAgICAgd2hpbGUgKHRva2VuID0gdHJ5Q29uc3VtZSguLi50ZXh0cykpCi0gICAgICAgICAg
ICBsZWZ0ID0gY29uc3RydWN0b3IodG9rZW4sIGxlZnQsIG5leHRQYXJzZXIoKSk7Ci0gICAgICAg
IHJldHVybiBsZWZ0OwotICAgIH0KLSAgICAKLSAgICBmdW5jdGlvbiBwYXJzZUxlZnRPcGVyYXRv
ckNhbGwodGV4dHMsIG5leHRQYXJzZXIpCi0gICAgewotICAgICAgICByZXR1cm4gZ2VuZXJpY1Bh
cnNlTGVmdCgKLSAgICAgICAgICAgIHRleHRzLCBuZXh0UGFyc2VyLAotICAgICAgICAgICAgKHRv
a2VuLCBsZWZ0LCByaWdodCkgPT4KLSAgICAgICAgICAgICAgICBuZXcgQ2FsbEV4cHJlc3Npb24o
dG9rZW4ub3JpZ2luLCAib3BlcmF0b3IiICsgdG9rZW4udGV4dCwgW10sIFtsZWZ0LCByaWdodF0p
KTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gcGFyc2VDYWxsRXhwcmVzc2lvbigpCi0gICAg
ewotICAgICAgICBsZXQgbmFtZSA9IGNvbnN1bWVLaW5kKCJpZGVudGlmaWVyIik7Ci0gICAgICAg
IGxldCB0eXBlQXJndW1lbnRzID0gcGFyc2VUeXBlQXJndW1lbnRzKCk7Ci0gICAgICAgIGNvbnN1
bWUoIigiKTsKLSAgICAgICAgbGV0IGFyZ3VtZW50TGlzdCA9IFtdOwotICAgICAgICB3aGlsZSAo
IXRlc3QoIikiKSkgewotICAgICAgICAgICAgYXJndW1lbnRMaXN0LnB1c2gocGFyc2VFeHByZXNz
aW9uKCkpOwotICAgICAgICAgICAgaWYgKCF0cnlDb25zdW1lKCIsIikpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3VtZSgiKSIpOwotICAgICAgICByZXR1
cm4gbmV3IENhbGxFeHByZXNzaW9uKG5hbWUub3JpZ2luLCBuYW1lLCB0eXBlQXJndW1lbnRzLCBh
cmd1bWVudExpc3QpOwotICAgIH0KLSAgICAKLSAgICBmdW5jdGlvbiBwYXJzZVBvc3NpYmxlU3Vm
Zml4KCkKLSAgICB7Ci0gICAgICAgIGxldCBzaW1wbGVDYXNlID0gbGV4ZXIuYmFja3RyYWNraW5n
U2NvcGUoKCkgPT4gewotICAgICAgICAgICAgbGV0IGxlZnQgPSBwYXJzZVRlcm0oKTsKLSAgICAg
ICAgICAgIGxldCB0b2tlbjsKLSAgICAgICAgICAgIHdoaWxlICh0b2tlbiA9IHRyeUNvbnN1bWUo
IisrIiwgIi0tIiwgIi4iLCAiLT4iLCAiWyIpKSB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICh0
b2tlbi50ZXh0KSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAiKysiOgotICAgICAgICAgICAgICAg
IGNhc2UgIi0tIjoKLSAgICAgICAgICAgICAgICAgICAgbGVmdCA9IG5ldyBTdWZmaXhDYWxsQXNz
aWdubWVudCh0b2tlbi5vcmlnaW4sICJvcGVyYXRvciIgKyB0b2tlbi50ZXh0LCBsZWZ0KTsKLSAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAiLiI6Ci0gICAg
ICAgICAgICAgICAgY2FzZSAiLT4iOgotICAgICAgICAgICAgICAgICAgICBpZiAodG9rZW4udGV4
dCA9PSAiLT4iKQotICAgICAgICAgICAgICAgICAgICAgICAgbGVmdCA9IG5ldyBEZXJlZmVyZW5j
ZUV4cHJlc3Npb24odG9rZW4ub3JpZ2luLCBsZWZ0KTsKLSAgICAgICAgICAgICAgICAgICAgbGVm
dCA9IG5ldyBEb3RFeHByZXNzaW9uKHRva2VuLm9yaWdpbiwgbGVmdCwgY29uc3VtZUtpbmQoImlk
ZW50aWZpZXIiKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGNhc2UgIlsiOiB7Ci0gICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHBhcnNlRXhwcmVz
c2lvbigpOwotICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCJdIik7Ci0gICAgICAgICAgICAg
ICAgICAgIGxlZnQgPSBuZXcgSW5kZXhFeHByZXNzaW9uKHRva2VuLm9yaWdpbiwgbGVmdCwgaW5k
ZXgpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9y
KCJCYWQgdG9rZW46ICIgKyB0b2tlbik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
fQotICAgICAgICAgICAgcmV0dXJuIGxlZnQ7Ci0gICAgICAgIH0pOwotICAgICAgICBpZiAoc2lt
cGxlQ2FzZSkKLSAgICAgICAgICAgIHJldHVybiBzaW1wbGVDYXNlOwotICAgICAgICAKLSAgICAg
ICAgcmV0dXJuIHBhcnNlQ2FsbEV4cHJlc3Npb24oKTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rp
b24gcGFyc2VQb3NzaWJsZVByZWZpeCgpCi0gICAgewotICAgICAgICBsZXQgdG9rZW47Ci0gICAg
ICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWUoIisrIiwgIi0tIiwgIisiLCAiLSIsICIhIiwgIn4i
KSkKLSAgICAgICAgICAgIHJldHVybiBuZXcgQ2FsbEFzc2lnbm1lbnQodG9rZW4ub3JpZ2luLCAi
b3BlcmF0b3IiICsgdG9rZW4udGV4dCwgcGFyc2VQb3NzaWJsZVByZWZpeCgpKTsKLSAgICAgICAg
aWYgKHRva2VuID0gdHJ5Q29uc3VtZSgiXiIpKQotICAgICAgICAgICAgcmV0dXJuIG5ldyBEZXJl
ZmVyZW5jZUV4cHJlc3Npb24odG9rZW4ub3JpZ2luLCBwYXJzZVBvc3NpYmxlUHJlZml4KCkpOwot
ICAgICAgICBpZiAodG9rZW4gPSB0cnlDb25zdW1lKCJcXCIpKQotICAgICAgICAgICAgcmV0dXJu
IG5ldyBNYWtlUHRyRXhwcmVzc2lvbih0b2tlbi5vcmlnaW4sIHBhcnNlUG9zc2libGVQcmVmaXgo
KSk7Ci0gICAgICAgIGlmICh0b2tlbiA9IHRyeUNvbnN1bWUoIiYiKSkKLSAgICAgICAgICAgIHJl
dHVybiBuZXcgTWFrZUFycmF5UmVmRXhwcmVzc2lvbih0b2tlbi5vcmlnaW4sIHBhcnNlUG9zc2li
bGVQcmVmaXgoKSk7Ci0gICAgICAgIHJldHVybiBwYXJzZVBvc3NpYmxlU3VmZml4KCk7Ci0gICAg
fQotICAgIAotICAgIGZ1bmN0aW9uIHBhcnNlUG9zc2libGVQcm9kdWN0KCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBwYXJzZUxlZnRPcGVyYXRvckNhbGwoWyIqIiwgIi8iLCAiJSJdLCBwYXJzZVBv
c3NpYmxlUHJlZml4KTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gcGFyc2VQb3NzaWJsZVN1
bSgpCi0gICAgewotICAgICAgICByZXR1cm4gcGFyc2VMZWZ0T3BlcmF0b3JDYWxsKFsiKyIsICIt
Il0sIHBhcnNlUG9zc2libGVQcm9kdWN0KTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gcGFy
c2VQb3NzaWJsZVNoaWZ0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwYXJzZUxlZnRPcGVyYXRv
ckNhbGwoWyI8PCIsICI+PiJdLCBwYXJzZVBvc3NpYmxlU3VtKTsKLSAgICB9Ci0gICAgCi0gICAg
ZnVuY3Rpb24gcGFyc2VQb3NzaWJsZVJlbGF0aW9uYWxJbmVxdWFsaXR5KCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBwYXJzZUxlZnRPcGVyYXRvckNhbGwoWyI8IiwgIj4iLCAiPD0iLCAiPT4iXSwg
cGFyc2VQb3NzaWJsZVNoaWZ0KTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gcGFyc2VQb3Nz
aWJsZVJlbGF0aW9uYWxFcXVhbGl0eSgpCi0gICAgewotICAgICAgICByZXR1cm4gZ2VuZXJpY1Bh
cnNlTGVmdCgKLSAgICAgICAgICAgIFsiPT0iLCAiIT0iXSwgcGFyc2VQb3NzaWJsZVJlbGF0aW9u
YWxJbmVxdWFsaXR5LAotICAgICAgICAgICAgKHRva2VuLCBsZWZ0LCByaWdodCkgPT4gewotICAg
ICAgICAgICAgICAgIGxldCByZXN1bHQgPSBuZXcgQ2FsbEV4cHJlc3Npb24odG9rZW4ub3JpZ2lu
LCAib3BlcmF0b3I9PSIsIFtdLCBbbGVmdCwgcmlnaHRdKTsKLSAgICAgICAgICAgICAgICBpZiAo
dG9rZW4udGV4dCA9PSAiIT0iKQotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBuZXcgQ2Fs
bEV4cHJlc3Npb24odG9rZW4ub3JpZ2luLCAib3BlcmF0b3IhIiwgW10sIFtyZXN1bHRdKTsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgICAgICAgICAgfSk7Ci0gICAgfQotICAg
IAotICAgIGZ1bmN0aW9uIHBhcnNlUG9zc2libGVCaXR3aXNlQW5kKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiBwYXJzZUxlZnRPcGVyYXRvckNhbGwoWyImIl0sIHBhcnNlUG9zc2libGVSZWxhdGlv
bmFsRXF1YWxpdHkpOwotICAgIH0KLSAgICAKLSAgICBmdW5jdGlvbiBwYXJzZVBvc3NpYmxlQml0
d2lzZVhvcigpCi0gICAgewotICAgICAgICByZXR1cm4gcGFyc2VMZWZ0T3BlcmF0b3JDYWxsKFsi
XiJdLCBwYXJzZVBvc3NpYmxlQml0d2lzZUFuZCk7Ci0gICAgfQotICAgIAotICAgIGZ1bmN0aW9u
IHBhcnNlUG9zc2libGVCaXR3aXNlT3IoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHBhcnNlTGVm
dE9wZXJhdG9yQ2FsbChbInwiXSwgcGFyc2VQb3NzaWJsZUJpdHdpc2VYb3IpOwotICAgIH0KLSAg
ICAKLSAgICBmdW5jdGlvbiBwYXJzZUxlZnRMb2dpY2FsRXhwcmVzc2lvbih0ZXh0cywgbmV4dFBh
cnNlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZW5lcmljUGFyc2VMZWZ0KAotICAgICAgICAg
ICAgdGV4dHMsIG5leHRQYXJzZXIsCi0gICAgICAgICAgICAodG9rZW4sIGxlZnQsIHJpZ2h0KSA9
PiBuZXcgTG9naWNhbEV4cHJlc3Npb24odG9rZW4ub3JpZ2luLCB0b2tlbi50ZXh0LCBsZWZ0LCBy
aWdodCkpOwotICAgIH0KLSAgICAKLSAgICBmdW5jdGlvbiBwYXJzZVBvc3NpYmxlTG9naWNhbEFu
ZCgpCi0gICAgewotICAgICAgICByZXR1cm4gcGFyc2VMZWZ0TG9naWNhbEV4cHJlc3Npb24oWyIm
JiJdLCBwYXJzZVBvc3NpYmxlQml0d2lzZU9yKTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24g
cGFyc2VQb3NzaWJsZUxvZ2ljYWxPcigpCi0gICAgewotICAgICAgICByZXR1cm4gcGFyc2VMZWZ0
TG9naWNhbEV4cHJlc3Npb24oWyJ8fCJdLCBwYXJzZVBvc3NpYmxlTG9naWNhbEFuZCk7Ci0gICAg
fQotICAgIAotICAgIGZ1bmN0aW9uIHBhcnNlUG9zc2libGVUZXJuYXJ5Q29uZGl0aW9uYWwoKQot
ICAgIHsKLSAgICAgICAgbGV0IHByZWRpY2F0ZSA9IHBhcnNlUG9zc2libGVMb2dpY2FsT3IoKTsK
LSAgICAgICAgbGV0IG9wZXJhdG9yID0gdHJ5Q29uc3VtZSgiPyIpOwotICAgICAgICBpZiAoIW9w
ZXJhdG9yKQotICAgICAgICAgICAgcmV0dXJuIHByZWRpY2F0ZTsKLSAgICAgICAgcmV0dXJuIG5l
dyBUZXJuYXJ5RXhwcmVzc2lvbihvcGVyYXRvci5vcmlnaW4sIHByZWRpY2F0ZSwgcGFyc2VQb3Nz
aWJsZUFzc2lnbm1lbnQoKSwgcGFyc2VQb3NzaWJsZUFzc2lnbm1lbnQoKSk7Ci0gICAgfQotICAg
IAotICAgIGZ1bmN0aW9uIHBhcnNlUG9zc2libGVBc3NpZ25tZW50KG1vZGUpCi0gICAgewotICAg
ICAgICBsZXQgbGhzID0gcGFyc2VQb3NzaWJsZVRlcm5hcnlDb25kaXRpb25hbCgpOwotICAgICAg
ICBsZXQgb3BlcmF0b3IgPSB0cnlDb25zdW1lKCI9IiwgIis9IiwgIi09IiwgIio9IiwgIi89Iiwg
IiU9IiwgIl49IiwgInw9IiwgIiY9Iik7Ci0gICAgICAgIGlmICghb3BlcmF0b3IpIHsKLSAgICAg
ICAgICAgIGlmIChtb2RlID09ICJyZXF1aXJlZCIpCi0gICAgICAgICAgICAgICAgbGV4ZXIuZmFp
bCgiRXhwZWN0ZWQgYXNzaWdubWVudCIpOwotICAgICAgICAgICAgcmV0dXJuIGxoczsKLSAgICAg
ICAgfQotICAgICAgICBpZiAob3BlcmF0b3IudGV4dCA9PSAiPSIpCi0gICAgICAgICAgICByZXR1
cm4gbmV3IEFzc2lnbm1lbnQob3BlcmF0b3Iub3JpZ2luLCBsaHMsIHBhcnNlUG9zc2libGVBc3Np
Z25tZW50KCkpOwotICAgICAgICBsZXQgbmFtZSA9ICJvcGVyYXRvciIgKyBvcGVyYXRvci50ZXh0
LnN1YnN0cmluZygwLCBvcGVyYXRvci50ZXh0Lmxlbmd0aCAtIDEpOwotICAgICAgICByZXR1cm4g
bmV3IENhbGxBc3NpZ25tZW50KG9wZXJhdG9yLm9yaWdpbiwgbmFtZSwgbGhzLCBwYXJzZVBvc3Np
YmxlQXNzaWdubWVudCgpKTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gcGFyc2VBc3NpZ25t
ZW50KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBwYXJzZVBvc3NpYmxlQXNzaWdubWVudCgicmVx
dWlyZWQiKTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gcGFyc2VFZmZlY3RmdWxFeHByZXNz
aW9uKCkKLSAgICB7Ci0gICAgICAgIGxldCBhc3NpZ25tZW50ID0gbGV4ZXIuYmFja3RyYWNraW5n
U2NvcGUocGFyc2VBc3NpZ25tZW50KTsKLSAgICAgICAgaWYgKGFzc2lnbm1lbnQpCi0gICAgICAg
ICAgICByZXR1cm4gYXNzaWdubWVudDsKLSAgICAgICAgcmV0dXJuIHBhcnNlQ2FsbEV4cHJlc3Np
b24oKTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gZ2VuZXJpY1BhcnNlQ29tbWFFeHByZXNz
aW9uKGZpbmFsRXhwcmVzc2lvblBhcnNlcikKLSAgICB7Ci0gICAgICAgIGxldCBsaXN0ID0gW107
Ci0gICAgICAgIGxldCBvcmlnaW4gPSBsZXhlci5wZWVrKCk7Ci0gICAgICAgIGlmICghb3JpZ2lu
KQotICAgICAgICAgICAgbGV4ZXIuZmFpbCgiVW5leHBlY3RlZCBlbmQgb2YgZmlsZSIpOwotICAg
ICAgICBvcmlnaW4gPSBvcmlnaW4ub3JpZ2luOwotICAgICAgICBmb3IgKDs7KSB7Ci0gICAgICAg
ICAgICBsZXQgZWZmZWN0ZnVsRXhwcmVzc2lvbiA9IGxleGVyLmJhY2t0cmFja2luZ1Njb3BlKHBh
cnNlRWZmZWN0ZnVsRXhwcmVzc2lvbik7Ci0gICAgICAgICAgICBpZiAoIWVmZmVjdGZ1bEV4cHJl
c3Npb24pIHsKLSAgICAgICAgICAgICAgICBsZXQgZmluYWwgPSBmaW5hbEV4cHJlc3Npb25QYXJz
ZXIoKTsKLSAgICAgICAgICAgICAgICBsaXN0LnB1c2goZmluYWwpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbGlzdC5wdXNoKGVmZmVjdGZ1bEV4
cHJlc3Npb24pOwotICAgICAgICAgICAgaWYgKCF0cnlDb25zdW1lKCIsIikpCi0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG5ldyBDb21tYUV4cHJlc3Np
b24ob3JpZ2luLCBsaXN0KTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gcGFyc2VDb21tYUV4
cHJlc3Npb24oKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGdlbmVyaWNQYXJzZUNvbW1hRXhwcmVz
c2lvbihwYXJzZVBvc3NpYmxlQXNzaWdubWVudCk7Ci0gICAgfQotICAgIAotICAgIGZ1bmN0aW9u
IHBhcnNlRXhwcmVzc2lvbigpCi0gICAgewotICAgICAgICByZXR1cm4gcGFyc2VDb21tYUV4cHJl
c3Npb24oKTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gcGFyc2VFZmZlY3RmdWxTdGF0ZW1l
bnQoKQotICAgIHsKLSAgICAgICAgbGV0IHJlc3VsdCA9IGdlbmVyaWNQYXJzZUNvbW1hRXhwcmVz
c2lvbihwYXJzZUVmZmVjdGZ1bEV4cHJlc3Npb24pOwotICAgICAgICBjb25zdW1lKCI7Iik7Ci0g
ICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIGZ1bmN0aW9uIHBhcnNlUmV0
dXJuKCkKLSAgICB7Ci0gICAgICAgIGxldCBvcmlnaW4gPSBjb25zdW1lKCJyZXR1cm4iKS5vcmln
aW47Ci0gICAgICAgIHJldHVybiBuZXcgUmV0dXJuKG9yaWdpbiwgcGFyc2VFeHByZXNzaW9uKCkp
OwotICAgIH0KLSAgICAKLSAgICBmdW5jdGlvbiBwYXJzZVZhcmlhYmxlRGVjbHMoKQotICAgIHsK
LSAgICAgICAgbGV0IHR5cGUgPSBwYXJzZVR5cGUoKTsKLSAgICAgICAgbGV0IGxpc3QgPSBbXTsK
LSAgICAgICAgZG8gewotICAgICAgICAgICAgbGV0IG5hbWUgPSBjb25zdW1lS2luZCgiaWRlbnRp
ZmllciIpOwotICAgICAgICAgICAgbGV0IGluaXRpYWxpemVyID0gdHJ5Q29uc3VtZSgiPSIpID8g
cGFyc2VFeHByZXNzaW9uKCkgOiBudWxsOwotICAgICAgICAgICAgbGlzdC5wdXNoKG5ldyBWYXJp
YWJsZURlY2wobmFtZS5vcmlnaW4sIG5hbWUudGV4dCwgdHlwZSwgaW5pdGlhbGl6ZXIpKTsKLSAg
ICAgICAgfSB3aGlsZSAoY29uc3VtZSgiLCIsICI7IikudGV4dCA9PSAiLCIpOwotICAgICAgICBy
ZXR1cm4gbmV3IENvbW1hRXhwcmVzc2lvbih0eXBlLm9yaWdpbiwgbGlzdCk7Ci0gICAgfQotICAg
IAotICAgIGZ1bmN0aW9uIHBhcnNlU3RhdGVtZW50KCkKLSAgICB7Ci0gICAgICAgIGxldCB0b2tl
biA9IGxleGVyLnBlZWsoKTsKLSAgICAgICAgaWYgKHRva2VuLnRleHQgPT0gIjsiKSB7Ci0gICAg
ICAgICAgICBsZXhlci5uZXh0KCk7Ci0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAg
fQotICAgICAgICBpZiAodG9rZW4udGV4dCA9PSAicmV0dXJuIikKLSAgICAgICAgICAgIHJldHVy
biBwYXJzZVJldHVybigpOwotICAgICAgICBpZiAodG9rZW4udGV4dCA9PSAiYnJlYWsiKQotICAg
ICAgICAgICAgcmV0dXJuIHBhcnNlQnJlYWsoKTsKLSAgICAgICAgaWYgKHRva2VuLnRleHQgPT0g
ImNvbnRpbnVlIikKLSAgICAgICAgICAgIHJldHVybiBwYXJzZUNvbnRpbnVlKCk7Ci0gICAgICAg
IGlmICh0b2tlbi50ZXh0ID09ICJ3aGlsZSIpCi0gICAgICAgICAgICByZXR1cm4gcGFyc2VXaGls
ZSgpOwotICAgICAgICBpZiAodG9rZW4udGV4dCA9PSAiZG8iKQotICAgICAgICAgICAgcmV0dXJu
IHBhcnNlRG8oKTsKLSAgICAgICAgaWYgKHRva2VuLnRleHQgPT0gImZvciIpCi0gICAgICAgICAg
ICByZXR1cm4gcGFyc2VGb3IoKTsKLSAgICAgICAgbGV0IHZhcmlhYmxlRGVjbCA9IGxleGVyLmJh
Y2t0cmFja2luZ1Njb3BlKHBhcnNlVmFyaWFibGVEZWNscyk7Ci0gICAgICAgIGlmICh2YXJpYWJs
ZURlY2wpCi0gICAgICAgICAgICByZXR1cm4gdmFyaWFibGVEZWNsOwotICAgICAgICByZXR1cm4g
cGFyc2VFZmZlY3RmdWxTdGF0ZW1lbnQoKTsKLSAgICB9Ci0gICAgCi0gICAgZnVuY3Rpb24gcGFy
c2VCbG9jaygpCi0gICAgewotICAgICAgICBsZXQgb3JpZ2luID0gY29uc3VtZSgieyIpLm9yaWdp
bjsKLSAgICAgICAgbGV0IGJsb2NrID0gbmV3IEJsb2NrKG9yaWdpbik7Ci0gICAgICAgIHdoaWxl
ICghdGVzdCgifSIpKSB7Ci0gICAgICAgICAgICBsZXQgc3RhdGVtZW50ID0gcGFyc2VTdGF0ZW1l
bnQoKTsKLSAgICAgICAgICAgIGlmIChzdGF0ZW1lbnQpCi0gICAgICAgICAgICAgICAgYmxvY2su
YWRkKHN0YXRlbWVudCk7Ci0gICAgICAgIH0KLSAgICAgICAgY29uc3VtZSgifSIpOwotICAgICAg
ICByZXR1cm4gYmxvY2s7Ci0gICAgfQotICAgIAotICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVy
KCkKLSAgICB7Ci0gICAgICAgIGxldCB0eXBlID0gcGFyc2VUeXBlKCk7Ci0gICAgICAgIGxldCBu
YW1lID0gdHJ5Q29uc3VtZUtpbmQoImlkZW50aWZpZXIiKTsKLSAgICAgICAgcmV0dXJuIG5ldyBG
dW5jUGFyYW1ldGVyKHR5cGUub3JpZ2luLCBuYW1lID8gbmFtZS50ZXh0IDogbnVsbCwgdHlwZSk7
Ci0gICAgfQotICAgIAotICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW1ldGVycygpCi0gICAgewotICAg
ICAgICBjb25zdW1lKCIoIik7Ci0gICAgICAgIGxldCBwYXJhbWV0ZXJzID0gW107Ci0gICAgICAg
IHdoaWxlICghdGVzdCgiKSIpKSB7Ci0gICAgICAgICAgICBwYXJhbWV0ZXJzLnB1c2gocGFyc2VQ
YXJhbWV0ZXIoKSk7Ci0gICAgICAgICAgICBpZiAoIXRyeUNvbnN1bWUoIiwiKSkKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjb25zdW1lKCIpIik7Ci0gICAgICAg
IHJldHVybiBwYXJhbWV0ZXJzOwotICAgIH0KLSAgICAKLSAgICBmdW5jdGlvbiBwYXJzZUZ1bmNO
YW1lKCkKLSAgICB7Ci0gICAgICAgIGlmICh0cnlDb25zdW1lKCJvcGVyYXRvciIpKSB7Ci0gICAg
ICAgICAgICBsZXQgdG9rZW4gPSBjb25zdW1lKCIrIiwgIi0iLCAiKiIsICIvIiwgIiUiLCAiXiIs
ICImIiwgInwiLCAiPCIsICI+IiwgIjw9IiwgIj49IiwgIiEiLCAiPT0iLCAiKysiLCAiLS0iLCAi
XFwiKTsKLSAgICAgICAgICAgIGlmICh0b2tlbi50ZXh0ICE9ICJcXCIpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuICJvcGVyYXRvciIgKyB0b2tlbi50ZXh0OwotICAgICAgICAgICAgY29uc3VtZSgi
WyIpOwotICAgICAgICAgICAgY29uc3VtZSgiXSIpOwotICAgICAgICAgICAgcmV0dXJuICJvcGVy
YXRvclxcW10iOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBjb25zdW1lS2luZCgiaWRlbnRp
ZmllciIpLnRleHQ7Ci0gICAgfQotICAgIAotICAgIGZ1bmN0aW9uIHBhcnNlRnVuY0RlZigpCi0g
ICAgewotICAgICAgICBsZXQgcmV0dXJuVHlwZSA9IHBhcnNlVHlwZSgpOwotICAgICAgICBsZXQg
bmFtZSA9IHBhcnNlRnVuY05hbWUoKTsKLSAgICAgICAgbGV0IHR5cGVQYXJhbWV0ZXJzID0gcGFy
c2VUeXBlUGFyYW1ldGVycygpOwotICAgICAgICBsZXQgcGFyYW1ldGVycyA9IHBhcnNlUGFyYW1l
dGVycygpOwotICAgICAgICBsZXQgYm9keSA9IHBhcnNlQmxvY2soKTsKLSAgICAgICAgcmV0dXJu
IG5ldyBGdW5jRGVmKHJldHVyblR5cGUub3JpZ2luLCBuYW1lLCByZXR1cm5UeXBlLCB0eXBlUGFy
YW1ldGVycywgcGFyYW1ldGVycywgYm9keSk7Ci0gICAgfQotICAgIAotICAgIGZvciAoOzspIHsK
LSAgICAgICAgbGV0IHRva2VuID0gbGV4ZXIucGVlaygpOwotICAgICAgICBpZiAoIXRva2VuKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAodG9rZW4udGV4dCA9PSAiOyIpCi0gICAg
ICAgICAgICBsZXhlci5uZXh0KCk7Ci0gICAgICAgIGVsc2UgaWYgKHRva2VuLnRleHQgPT0gInR5
cGUiKQotICAgICAgICAgICAgcHJvZ3JhbS5hZGQocGFyc2VUeXBlRGVmKCkpOwotICAgICAgICBl
bHNlIGlmICh0b2tlbi50ZXh0ID09ICJuYXRpdmUiKQotICAgICAgICAgICAgcHJvZ3JhbS5hZGQo
cGFyc2VOYXRpdmUoKSk7Ci0gICAgICAgIGVsc2UgaWYgKHRva2VuLnRleHQgPT0gInN0cnVjdCIp
Ci0gICAgICAgICAgICBwcm9ncmFtLmFkZChwYXJzZVN0cnVjdFR5cGUoKSk7Ci0gICAgICAgIGVs
c2UgaWYgKHRva2VuLnRleHQgPT0gImVudW0iKQotICAgICAgICAgICAgcHJvZ3JhbS5hZGQocGFy
c2VFbnVtKCkpOwotICAgICAgICBlbHNlIGlmICh0b2tlbi50ZXh0ID09ICJwcm90b2NvbCIpCi0g
ICAgICAgICAgICBwcm9ncmFtLmFkZChwYXJzZVByb3RvY29sRGVjbCgpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcHJvZ3JhbS5hZGQocGFyc2VGdW5jRGVmKCkpOwotICAgIH0KLX0KLQpJ
bmRleDogVG9vbHMvQXJyYXlMYW5nUkkvUHJlcGFyZS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9B
cnJheUxhbmdSSS9QcmVwYXJlLmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxh
bmdSSS9QcmVwYXJlLmpzCShub25leGlzdGVudCkKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1mdW5j
dGlvbiBwcmVwYXJlKG9yaWdpbiwgbGluZU51bWJlck9mZnNldCwgdGV4dCkKLXsKLSAgICBsZXQg
cHJvZ3JhbSA9IG5ldyBQcm9ncmFtKCk7Ci0gICAgcGFyc2UocHJvZ3JhbSwgIjxzdGRsaWI+Iiwg
MjgsIHN0YW5kYXJkTGlicmFyeSk7Ci0gICAgcGFyc2UocHJvZ3JhbSwgb3JpZ2luLCBsaW5lTnVt
YmVyT2Zmc2V0LCB0ZXh0KTsKLSAgICByZXNvbHZlTmFtZXMocHJvZ3JhbSk7Ci0gICAgcmVzb2x2
ZVR5cGVEZWZzKHByb2dyYW0pOwotICAgIGNoZWNrKHByb2dyYW0pOwotICAgIGlubGluZShwcm9n
cmFtKTsKLSAgICByZXR1cm4gcHJvZ3JhbTsKLX0KLQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkv
UHJvZ3JhbS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9BcnJheUxhbmdSSS9Qcm9ncmFtLmpzCShy
ZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9Qcm9ncmFtLmpzCShub25leGlz
dGVudCkKQEAgLTEsODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1jbGFzcyBQcm9ncmFtIGV4dGVuZHMgTm9kZSB7
Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgdGhp
cy5fdG9wTGV2ZWxTdGF0ZW1lbnRzID0gW107Ci0gICAgICAgIHRoaXMuX2Z1bmN0aW9ucyA9IG5l
dyBNYXAoKTsKLSAgICAgICAgdGhpcy5fdHlwZXMgPSBuZXcgTWFwKCk7Ci0gICAgICAgIHRoaXMu
X2Z1bmNJbnN0YW50aWF0b3IgPSBuZXcgRnVuY0luc3RhbnRpYXRvcigpOwotICAgIH0KLSAgICAK
LSAgICBnZXQgdG9wTGV2ZWxTdGF0ZW1lbnRzKCkgeyByZXR1cm4gdGhpcy5fdG9wTGV2ZWxTdGF0
ZW1lbnRzOyB9Ci0gICAgZ2V0IGZ1bmN0aW9ucygpIHsgcmV0dXJuIHRoaXMuX2Z1bmN0aW9uczsg
fQotICAgIGdldCB0eXBlcygpIHsgcmV0dXJuIHRoaXMuX3R5cGVzOyB9Ci0gICAgZ2V0IGZ1bmNJ
bnN0YW50aWF0b3IoKSB7IHJldHVybiB0aGlzLl9mdW5jSW5zdGFudGlhdG9yOyB9Ci0gICAgCi0g
ICAgYWRkKHN0YXRlbWVudCkKLSAgICB7Ci0gICAgICAgIHN0YXRlbWVudC5wcm9ncmFtID0gdGhp
czsKLSAgICAgICAgaWYgKHN0YXRlbWVudCBpbnN0YW5jZW9mIEZ1bmMpIHsKLSAgICAgICAgICAg
IGxldCBhcnJheSA9IHRoaXMuX2Z1bmN0aW9ucy5nZXQoc3RhdGVtZW50Lm5hbWUpOwotICAgICAg
ICAgICAgaWYgKCFhcnJheSkKLSAgICAgICAgICAgICAgICB0aGlzLl9mdW5jdGlvbnMuc2V0KHN0
YXRlbWVudC5uYW1lLCBhcnJheSA9IFtdKTsKLSAgICAgICAgICAgIGFycmF5LnB1c2goc3RhdGVt
ZW50KTsKLSAgICAgICAgfSBlbHNlIGlmIChzdGF0ZW1lbnQgaW5zdGFuY2VvZiBUeXBlKQotICAg
ICAgICAgICAgdGhpcy5fdHlwZXMuc2V0KHN0YXRlbWVudC5uYW1lLCBzdGF0ZW1lbnQpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlN0YXRlbWVudCBpcyBub3Qg
YSBmdW5jdGlvbiBvciB0eXBlOiAiICsgc3RhdGVtZW50KTsKLSAgICAgICAgdGhpcy5fdG9wTGV2
ZWxTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTsKLSAgICB9Ci0gICAgCi0gICAgcmVzb2x2ZUZ1
bmNPdmVybG9hZChuYW1lLCB0eXBlQXJndW1lbnRzLCBhcmd1bWVudFR5cGVzKQotICAgIHsKLSAg
ICAgICAgbGV0IGZ1bmN0aW9ucyA9IHRoaXMuZnVuY3Rpb25zLmdldChuYW1lKTsKLSAgICAgICAg
aWYgKCFmdW5jdGlvbnMpCi0gICAgICAgICAgICByZXR1cm4gbnVsbDsKLSAgICAgICAgCi0gICAg
ICAgIHJldHVybiByZXNvbHZlT3ZlcmxvYWRJbXBsKGZ1bmN0aW9ucywgdHlwZUFyZ3VtZW50cywg
YXJndW1lbnRUeXBlcyk7Ci0gICAgfQotICAgIAotICAgIGdldCBuYW1lQ29udGV4dCgpCi0gICAg
ewotICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IE5hbWVDb250ZXh0KCk7Ci0gICAgICAgIGZvciAo
bGV0IHN0YXRlbWVudCBvZiB0aGlzLnRvcExldmVsU3RhdGVtZW50cykKLSAgICAgICAgICAgIHJl
c3VsdC5hZGQoc3RhdGVtZW50KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAg
Ci0gICAgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl90b3BMZXZlbFN0YXRl
bWVudHMubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuICIiOwotICAgICAgICByZXR1cm4gdGhp
cy5fdG9wTGV2ZWxTdGF0ZW1lbnRzLmpvaW4oIjsiKSArICI7IjsKLSAgICB9Ci19Ci0KSW5kZXg6
IFRvb2xzL0FycmF5TGFuZ1JJL1Byb3RvY29sLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5
TGFuZ1JJL1Byb3RvY29sLmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdS
SS9Qcm90b2NvbC5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3Mg
UHJvdG9jb2wgZXh0ZW5kcyBOb2RlIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUpCi0g
ICAgewotICAgICAgICBzdXBlcigpOwotICAgICAgICB0aGlzLl9vcmlnaW4gPSBvcmlnaW47Ci0g
ICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgIH0KLSAgICAKLSAgICBnZXQgb3JpZ2luKCkg
eyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9Ci0gICAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLl9u
YW1lOyB9Ci0gICAgZ2V0IGtpbmQoKSB7IHJldHVybiBQcm90b2NvbDsgfQotICAgIAotICAgIHRv
U3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLm5hbWU7Ci0gICAgfQotfQpJbmRl
eDogVG9vbHMvQXJyYXlMYW5nUkkvUHJvdG9jb2xEZWNsLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0FycmF5TGFuZ1JJL1Byb3RvY29sRGVjbC5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMv
QXJyYXlMYW5nUkkvUHJvdG9jb2xEZWNsLmpzCShub25leGlzdGVudCkKQEAgLTEsMTA1ICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
Ci0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3Ry
aWN0IjsKLQotY2xhc3MgUHJvdG9jb2xEZWNsIGV4dGVuZHMgUHJvdG9jb2wgewotICAgIGNvbnN0
cnVjdG9yKG9yaWdpbiwgbmFtZSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKG9yaWdpbiwgbmFtZSk7
Ci0gICAgICAgIHRoaXMuX3NpZ25hdHVyZXMgPSBbXTsKLSAgICAgICAgdGhpcy5fc2lnbmF0dXJl
TWFwID0gbmV3IE1hcCgpOwotICAgICAgICB0aGlzLl90eXBlVmFyaWFibGUgPSBuZXcgVHlwZVZh
cmlhYmxlKG9yaWdpbiwgbmFtZSwgbnVsbCk7Ci0gICAgfQotICAgIAotICAgIGFkZFNpZ25hdHVy
ZShzaWduYXR1cmUpCi0gICAgewotICAgICAgICB0aGlzLl9zaWduYXR1cmVzLnB1c2goc2lnbmF0
dXJlKTsKLSAgICAgICAgbGV0IG92ZXJsb2FkcyA9IHRoaXMuX3NpZ25hdHVyZU1hcC5nZXQoc2ln
bmF0dXJlLm5hbWUpOwotICAgICAgICBpZiAoIW92ZXJsb2FkcykKLSAgICAgICAgICAgIHRoaXMu
X3NpZ25hdHVyZU1hcC5zZXQoc2lnbmF0dXJlLm5hbWUsIG92ZXJsb2FkcyA9IFtdKTsKLSAgICAg
ICAgb3ZlcmxvYWRzLnB1c2goc2lnbmF0dXJlKTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IHNpZ25h
dHVyZXMoKSB7IHJldHVybiB0aGlzLl9zaWduYXR1cmVzOyB9Ci0gICAgc2lnbmF0dXJlc0J5TmFt
ZShuYW1lKSB7IHJldHVybiB0aGlzLl9zaWduYXR1cmVNYXAuZ2V0KG5hbWUpOyB9Ci0gICAgZ2V0
IHR5cGVWYXJpYWJsZSgpIHsgcmV0dXJuIHRoaXMuX3R5cGVWYXJpYWJsZTsgfQotICAgIAotICAg
IHNpZ25hdHVyZXNCeU5hbWVXaXRoVHlwZVZhcmlhYmxlKG5hbWUsIHR5cGVWYXJpYWJsZSkKLSAg
ICB7Ci0gICAgICAgIGxldCBzdWJzdGl0dXRpb24gPSBuZXcgU3Vic3RpdHV0aW9uKFt0aGlzLnR5
cGVWYXJpYWJsZV0sIFt0eXBlVmFyaWFibGVdKTsKLSAgICAgICAgbGV0IHJlc3VsdCA9IHRoaXMu
c2lnbmF0dXJlc0J5TmFtZShuYW1lKTsKLSAgICAgICAgaWYgKCFyZXN1bHQpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbDsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC5tYXAoc2lnbmF0dXJlID0+IHNp
Z25hdHVyZS52aXNpdChzdWJzdGl0dXRpb24pKTsKLSAgICB9Ci0gICAgCi0gICAgaW5oZXJpdHMo
b3RoZXJQcm90b2NvbCkKLSAgICB7Ci0gICAgICAgIGlmICghb3RoZXJQcm90b2NvbCkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKG90aGVyUHJvdG9jb2wg
aW5zdGFuY2VvZiBQcm90b2NvbFJlZikKLSAgICAgICAgICAgIG90aGVyUHJvdG9jb2wgPSBvdGhl
clByb3RvY29sLnByb3RvY29sRGVjbDsKLSAgICAgICAgCi0gICAgICAgIGZvciAobGV0IG90aGVy
U2lnbmF0dXJlIG9mIG90aGVyUHJvdG9jb2wuc2lnbmF0dXJlcykgewotICAgICAgICAgICAgbGV0
IHNpZ25hdHVyZXMgPSB0aGlzLnNpZ25hdHVyZXNCeU5hbWUob3RoZXJTaWduYXR1cmUubmFtZSk7
Ci0gICAgICAgICAgICBpZiAoIXNpZ25hdHVyZXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgbGV0IG92ZXJsb2FkID0gcmVzb2x2ZU92ZXJsb2FkSW1wbChzaWdu
YXR1cmVzLCBbXSwgb3RoZXJTaWduYXR1cmUucGFyYW1ldGVyVHlwZXMpOwotICAgICAgICAgICAg
aWYgKCFvdmVybG9hZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAg
ICBsZXQgc3Vic3RpdHV0ZWRSZXR1cm5UeXBlID0KLSAgICAgICAgICAgICAgICBvdmVybG9hZC5m
dW5jLnJldHVyblR5cGUuc3Vic3RpdHV0ZVRvVW5pZmljYXRpb24oCi0gICAgICAgICAgICAgICAg
ICAgIG92ZXJsb2FkLmZ1bmMudHlwZVBhcmFtZXRlcnMsIG92ZXJsb2FkLnVuaWZpY2F0aW9uQ29u
dGV4dCk7Ci0gICAgICAgICAgICBpZiAoIXN1YnN0aXR1dGVkUmV0dXJuVHlwZS5lcXVhbHMob3Ro
ZXJTaWduYXR1cmUucmV0dXJuVHlwZSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICBoYXNIZWly
KHR5cGUpCi0gICAgewotICAgICAgICBsZXQgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLm1h
cHBpbmcoW3RoaXMuX3R5cGVWYXJpYWJsZV0sIFt0eXBlXSk7Ci0gICAgICAgIGZvciAobGV0IHNp
Z25hdHVyZSBvZiB0aGlzLl9zaWduYXR1cmVzKSB7Ci0gICAgICAgICAgICBsZXQgc2lnbmF0dXJl
ID0gc2lnbmF0dXJlLnZpc2l0KHN1YnN0aXR1dGlvbik7Ci0gICAgICAgICAgICBsZXQgb3Zlcmxv
YWQgPSB0aGlzLnByb2dyYW0ucmVzb2x2ZUZ1bmNPdmVybG9hZChzaWduYXR1cmUubmFtZSwgW10s
IHNpZ25hdHVyZS5wYXJhbWV0ZXJUeXBlcyk7Ci0gICAgICAgICAgICBpZiAoIW92ZXJsb2FkKQot
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAg
bGV0IHN1YnN0aXR1dGVkUmV0dXJuVHlwZSA9IG92ZXJsb2FkLmZ1bmMucmV0dXJuVHlwZS5zdWJz
dGl0dXRlVG9VbmlmaWNhdGlvbigKLSAgICAgICAgICAgICAgICBvdmVybG9hZC5mdW5jLnR5cGVQ
YXJhbWV0ZXJzLCBvdmVybG9hZC51bmlmaWNhdGlvbkNvbnRleHQpOwotICAgICAgICAgICAgaWYg
KCFzdWJzdGl0dXRlZFJldHVyblR5cGUuZXF1YWxzKHNpZ25hdHVyZS5yZXR1cm5UeXBlKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAi
cHJvdG9jb2wgIiArIHRoaXMubmFtZSArICIgeyAiICsgdGhpcy5zaWduYXR1cmVzLmpvaW4oIjsg
IikgKyAiOyB9IjsKLSAgICB9Ci19Ci0KLQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkvUHJvdG9j
b2xSZWYuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvUHJvdG9jb2xSZWYuanMJ
KHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJL1Byb3RvY29sUmVmLmpzCShu
b25leGlzdGVudCkKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1jbGFzcyBQcm90b2NvbFJlZiBleHRl
bmRzIFByb3RvY29sIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUpCi0gICAgewotICAg
ICAgICBzdXBlcihvcmlnaW4sIG5hbWUpOwotICAgICAgICB0aGlzLnByb3RvY29sRGVjbCA9IG51
bGw7Ci0gICAgfQotICAgIAotICAgIGluaGVyaXRzKG90aGVyKQotICAgIHsKLSAgICAgICAgcmV0
dXJuIHRoaXMucHJvdG9jb2xEZWNsLmluaGVyaXRzKG90aGVyKTsKLSAgICB9Ci0gICAgCi0gICAg
aGFzSGVpcih0eXBlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMucHJvdG9jb2xEZWNsLmhh
c0hlaXIodHlwZSk7Ci0gICAgfQotfQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkvUHRyVHlwZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9BcnJheUxhbmdSSS9QdHJUeXBlLmpzCShyZXZpc2lvbiAy
MjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9QdHJUeXBlLmpzCShub25leGlzdGVudCkKQEAg
LTEsNDAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAq
LwotInVzZSBzdHJpY3QiOwotCi1jbGFzcyBQdHJUeXBlIGV4dGVuZHMgUmVmZXJlbmNlVHlwZSB7
Ci0gICAgdW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpCi0gICAgewotICAgICAg
ICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFB0clR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50VHlwZS51bmlmeSh1bmlmaWNhdGlvbkNv
bnRleHQsIG90aGVyLmVsZW1lbnRUeXBlKTsKLSAgICB9Ci0gICAgCi0gICAgdG9TdHJpbmcoKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMuYWRkcmVzc1NwYWNlICsgIiAiICsgdGhpcy5lbGVt
ZW50VHlwZSArICJeIjsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL1JlZmVy
ZW5jZVR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvUmVmZXJlbmNlVHlw
ZS5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkvUmVmZXJlbmNlVHlw
ZS5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgUmVmZXJlbmNl
VHlwZSBleHRlbmRzIFR5cGUgewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgYWRkcmVzc1NwYWNl
LCBlbGVtZW50VHlwZSkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgICAgIHZhbGlkYXRl
QWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSk7Ci0gICAgICAgIHRoaXMuX29yaWdpbiA9IG9yaWdp
bjsKLSAgICAgICAgdGhpcy5fYWRkcmVzc1NwYWNlID0gYWRkcmVzc1NwYWNlOwotICAgICAgICB0
aGlzLl9lbGVtZW50VHlwZSA9IGVsZW1lbnRUeXBlOwotICAgIH0KLSAgICAKLSAgICBnZXQgb3Jp
Z2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9Ci0gICAgZ2V0IGFkZHJlc3NTcGFjZSgpIHsg
cmV0dXJuIHRoaXMuX2FkZHJlc3NTcGFjZTsgfQotICAgIGdldCBlbGVtZW50VHlwZSgpIHsgcmV0
dXJuIHRoaXMuX2VsZW1lbnRUeXBlOyB9Ci0gICAgZ2V0IGlzUHJpbWl0aXZlKCkgeyByZXR1cm4g
ZmFsc2U7IH0KLQotICAgIGdldCBzaXplKCkgeyByZXR1cm4gMTsgfQotfQotCkluZGV4OiBUb29s
cy9BcnJheUxhbmdSSS9SZXNvbHZlTmFtZXMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlM
YW5nUkkvUmVzb2x2ZU5hbWVzLmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxh
bmdSSS9SZXNvbHZlTmFtZXMuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0K
LWZ1bmN0aW9uIHJlc29sdmVOYW1lcyhwcm9ncmFtKQotewotICAgIHByb2dyYW0udmlzaXQobmV3
IE5hbWVSZXNvbHZlcigpKTsKLX0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL1Jlc29sdmVPdmVy
bG9hZEltcGwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvUmVzb2x2ZU92ZXJs
b2FkSW1wbC5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkvUmVzb2x2
ZU92ZXJsb2FkSW1wbC5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDc2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotZnVu
Y3Rpb24gcmVzb2x2ZU92ZXJsb2FkSW1wbChmdW5jdGlvbnMsIHR5cGVBcmd1bWVudHMsIGFyZ3Vt
ZW50VHlwZXMpCi17Ci0gICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jdGlvbnMpIHsKLSAgICAgICAg
aWYgKHR5cGVBcmd1bWVudHMubGVuZ3RoICYmIHR5cGVBcmd1bWVudHMubGVuZ3RoICE9IGZ1bmMu
dHlwZVBhcmFtZXRlcnMubGVuZ3RoKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
IChhcmd1bWVudFR5cGVzLmxlbmd0aCAhPSBmdW5jLnBhcmFtZXRlcnMubGVuZ3RoKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGxldCB1bmlmaWNhdGlvbkNvbnRleHQgPSBuZXcgVW5p
ZmljYXRpb25Db250ZXh0KGZ1bmMudHlwZVBhcmFtZXRlcnMpOwotICAgICAgICBsZXQgb2sgPSB0
cnVlOwotICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHR5cGVBcmd1bWVudHMubGVuZ3RoOyAr
K2kpIHsKLSAgICAgICAgICAgIGxldCBhcmd1bWVudCA9IHR5cGVBcmd1bWVudHNbaV07Ci0gICAg
ICAgICAgICBsZXQgcGFyYW1ldGVyID0gZnVuYy50eXBlUGFyYW1ldGVyc1tpXTsKLSAgICAgICAg
ICAgIGlmICghYXJndW1lbnQudW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBwYXJhbWV0ZXIpKSB7
Ci0gICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRUeXBlcy5sZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgaWYgKCFhcmd1bWVudFR5cGVzW2ldKQotICAgICAgICAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBhcmd1bWVudCB0eXBlIGF0IGkgPSAiICsgaSk7Ci0g
ICAgICAgICAgICBpZiAoIWFyZ3VtZW50VHlwZXNbaV0udW5pZnkodW5pZmljYXRpb25Db250ZXh0
LCBmdW5jLnBhcmFtZXRlcnNbaV0udHlwZSkpIHsKLSAgICAgICAgICAgICAgICBvayA9IGZhbHNl
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
ICAgIGlmICghb2spCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKCF1bmlmaWNh
dGlvbkNvbnRleHQudmVyaWZ5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgbGV0
IHNob3VsZEJ1aWxkVHlwZUFyZ3VtZW50cyA9ICF0eXBlQXJndW1lbnRzLmxlbmd0aDsKLSAgICAg
ICAgaWYgKHNob3VsZEJ1aWxkVHlwZUFyZ3VtZW50cykKLSAgICAgICAgICAgIHR5cGVBcmd1bWVu
dHMgPSBbXTsKLSAgICAgICAgZm9yIChsZXQgdHlwZVBhcmFtZXRlciBvZiBmdW5jLnR5cGVQYXJh
bWV0ZXJzKSB7Ci0gICAgICAgICAgICBsZXQgdHlwZUFyZ3VtZW50ID0gdW5pZmljYXRpb25Db250
ZXh0LmZpbmQodHlwZVBhcmFtZXRlcik7Ci0gICAgICAgICAgICBpZiAodHlwZUFyZ3VtZW50ID09
IHR5cGVQYXJhbWV0ZXIpIHsKLSAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHNob3VsZEJ1aWxk
VHlwZUFyZ3VtZW50cykKLSAgICAgICAgICAgICAgICB0eXBlQXJndW1lbnRzLnB1c2godHlwZUFy
Z3VtZW50KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIW9rKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIHJldHVybiB7ZnVuYywgdW5pZmljYXRpb25Db250ZXh0LCB0eXBlQXJndW1l
bnRzfTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG51bGw7Ci19CkluZGV4OiBUb29scy9BcnJh
eUxhbmdSSS9SZXNvbHZlVHlwZURlZnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5n
UkkvUmVzb2x2ZVR5cGVEZWZzLmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxh
bmdSSS9SZXNvbHZlVHlwZURlZnMuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwzMSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7
Ci0KLWZ1bmN0aW9uIHJlc29sdmVUeXBlRGVmcyhwcm9ncmFtKQotewotICAgIHByb2dyYW0udmlz
aXQobmV3IFR5cGVEZWZSZXNvbHZlcigpKTsKLX0KLQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkv
UmV0dXJuLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL1JldHVybi5qcwkocmV2
aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkvUmV0dXJuLmpzCShub25leGlzdGVu
dCkKQEAgLTEsNDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1jbGFzcyBSZXR1cm4gZXh0ZW5kcyBOb2RlIHsKLSAg
ICBjb25zdHJ1Y3RvcihvcmlnaW4sIHZhbHVlKQotICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLSAg
ICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOwotICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVl
OwotICAgIH0KLSAgICAKLSAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9
Ci0gICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH0KLSAgICAKLSAgICB0b1N0
cmluZygpCi0gICAgewotICAgICAgICBpZiAodGhpcy52YWx1ZSkKLSAgICAgICAgICAgIHJldHVy
biAicmV0dXJuICIgKyB0aGlzLnZhbHVlOwotICAgICAgICByZXR1cm4gInJldHVybiI7Ci0gICAg
fQotfTsKLQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkvUmV0dXJuRXhjZXB0aW9uLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL1JldHVybkV4Y2VwdGlvbi5qcwkocmV2aXNpb24g
MjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkvUmV0dXJuRXhjZXB0aW9uLmpzCShub25leGlz
dGVudCkKQEAgLTEsMzQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1jbGFzcyBSZXR1cm5FeGNlcHRpb24gewotICAg
IGNvbnN0cnVjdG9yKHZhbHVlKQotICAgIHsKLSAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTsK
LSAgICB9Ci0gICAgCi0gICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH0KLX0K
SW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL1Jld3JpdGVyLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0FycmF5TGFuZ1JJL1Jld3JpdGVyLmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJh
eUxhbmdSSS9SZXdyaXRlci5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDE3MiArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0K
LWNsYXNzIFJld3JpdGVyIHsKLSAgICBjb25zdHJ1Y3RvcigpCi0gICAgewotICAgICAgICB0aGlz
Ll9tYXBwaW5nID0gbmV3IE1hcCgpOwotICAgIH0KLSAgICAKLSAgICBfbWFwKG9sZEl0ZW0sIG5l
d0l0ZW0pCi0gICAgewotICAgICAgICB0aGlzLl9tYXBwaW5nLnNldChvbGRJdGVtLCBuZXdJdGVt
KTsKLSAgICAgICAgcmV0dXJuIG5ld0l0ZW07Ci0gICAgfQotICAgIAotICAgIF9nZXRNYXBwaW5n
KG9sZEl0ZW0pCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5fbWFwcGluZy5nZXQo
b2xkSXRlbSk7Ci0gICAgICAgIGlmIChyZXN1bHQpCi0gICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwotICAgICAgICByZXR1cm4gb2xkSXRlbTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRGdW5jKG5v
ZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IEZ1bmMoCi0gICAgICAgICAgICBub2RlLm5h
bWUsIG5vZGUucmV0dXJuVHlwZS52aXNpdCh0aGlzKSwKLSAgICAgICAgICAgIG5vZGUudHlwZVBh
cmFtZXRlcnMubWFwKHR5cGVQYXJhbWV0ZXIgPT4gdHlwZVBhcmFtZXRlci52aXNpdCh0aGlzKSks
Ci0gICAgICAgICAgICBub2RlLnBhcmFtZXRlcnMubWFwKHBhcmFtZXRlciA9PiBwYXJhbWV0ZXIu
dmlzaXQodGhpcykpKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRGdW5jUGFyYW1ldGVyKG5vZGUp
Ci0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEZ1bmNQYXJhbWV0ZXIobm9kZS5uYW1l
LCBub2RlLnR5cGUudmlzaXQodGhpcykpOwotICAgICAgICB0aGlzLl9tYXAobm9kZSwgcmVzdWx0
KTsKLSAgICAgICAgcmVzdWx0LmxWYWx1ZSA9IG5vZGUubFZhbHVlOwotICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB2aXNpdEJsb2NrKG5vZGUpCi0gICAgewotICAgICAg
ICBsZXQgcmVzdWx0ID0gbmV3IEJsb2NrKG5vZGUub3JpZ2luKTsKLSAgICAgICAgZm9yIChsZXQg
c3RhdGVtZW50IG9mIG5vZGUuc3RhdGVtZW50cykKLSAgICAgICAgICAgIHJlc3VsdC5hZGQoc3Rh
dGVtZW50LnZpc2l0KHRoaXMpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9Ci0gICAg
Ci0gICAgdmlzaXRDb21tYUV4cHJlc3Npb24obm9kZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBu
ZXcgQ29tbWFFeHByZXNzaW9uKG5vZGUub3JpZ2luLCBub2RlLmxpc3QubWFwKGV4cHJlc3Npb24g
PT4gewotICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGV4cHJlc3Npb24udmlzaXQodGhpcyk7Ci0g
ICAgICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
Ik51bGwgcmVzdWx0IGZyb20gIiArIGV4cHJlc3Npb24pOwotICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKLSAgICAgICAgfSkpOwotICAgIH0KLSAgICAKLSAgICB2aXNpdFByb3RvY29sUmVmKG5v
ZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRU
eXBlUmVmKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IFR5cGVSZWYobm9k
ZS5vcmlnaW4sIG5vZGUubmFtZSwgbm9kZS50eXBlQXJndW1lbnRzLm1hcCh0eXBlQXJndW1lbnQg
PT4gdHlwZUFyZ3VtZW50LnZpc2l0KHRoaXMpKSk7Ci0gICAgICAgIHJlc3VsdC50eXBlID0gbm9k
ZS50eXBlOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAgICAKLSAgICB2aXNpdFR5
cGVWYXJpYWJsZShub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGU7Ci0gICAgfQotICAg
IAotICAgIHZpc2l0Q29uc3RleHByVHlwZVBhcmFtZXRlcihub2RlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIG5ldyBDb25zdGV4cHJUeXBlUGFyYW1ldGVyKG5vZGUub3JpZ2luLCBub2RlLm5hbWUs
IG5vZGUudHlwZS52aXNpdCh0aGlzKSk7Ci0gICAgfQotICAgIAotICAgIHZpc2l0RmllbGQobm9k
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBuZXcgRmllbGQobm9kZS5vcmlnaW4sIG5vZGUubmFt
ZSwgbm9kZS50eXBlLnZpc2l0KHRoaXMpKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRSZWZlcmVu
Y2VUeXBlKG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IG5vZGUuY29uc3RydWN0b3Io
bm9kZS5yb2dpaW4sIG5vZGUuYWRkcmVzc1NwYWNlLCBub2RlLmVsZW1lbnRUeXBlLnZpc2l0KHRo
aXMpKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRQdHJUeXBlKG5vZGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy52aXNpdFJlZmVyZW5jZVR5cGUobm9kZSk7Ci0gICAgfQotICAgIAotICAg
IHZpc2l0QXJyYXlSZWZUeXBlKG5vZGUpCi0gICAgewotICAgICAgICByZXR1cm4gdGhpcy52aXNp
dFJlZmVyZW5jZVR5cGUobm9kZSk7Ci0gICAgfQotICAgIAotICAgIHZpc2l0QXJyYXlUeXBlKG5v
ZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbmV3IEFycmF5VHlwZShub2RlLm9yaWdpbiwgbm9k
ZS5lbGVtZW50VHlwZS52aXNpdCh0aGlzKSk7Ci0gICAgfQotICAgIAotICAgIHZpc2l0QXNzaWdu
bWVudChub2RlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50KG5vZGUub3Jp
Z2luLCBub2RlLmxocy52aXNpdCh0aGlzKSwgbm9kZS5yaHMudmlzaXQodGhpcykpOwotICAgIH0K
LSAgICAKLSAgICB2aXNpdFZhcmlhYmxlUmVmKG5vZGUpCi0gICAgewotICAgICAgICBub2RlLnZh
cmlhYmxlID0gdGhpcy5fZ2V0TWFwcGluZyhub2RlLnZhcmlhYmxlKTsKLSAgICAgICAgcmV0dXJu
IG5vZGU7Ci0gICAgfQotICAgIAotICAgIHZpc2l0UmV0dXJuKG5vZGUpCi0gICAgewotICAgICAg
ICByZXR1cm4gbmV3IFJldHVybihub2RlLm9yaWdpbiwgbm9kZS52YWx1ZSA/IG5vZGUudmFsdWUu
dmlzaXQodGhpcykgOiBudWxsKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRJbnRMaXRlcmFsKG5v
ZGUpCi0gICAgewotICAgICAgICByZXR1cm4gbm9kZTsKLSAgICB9Ci0KLSAgICB2aXNpdENhbGxF
eHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IENhbGxFeHBy
ZXNzaW9uKAotICAgICAgICAgICAgbm9kZS5vcmlnaW4sIG5vZGUubmFtZSwKLSAgICAgICAgICAg
IG5vZGUudHlwZUFyZ3VtZW50cy5tYXAodHlwZUFyZ3VtZW50ID0+IHR5cGVBcmd1bWVudC52aXNp
dCh0aGlzKSksCi0gICAgICAgICAgICBub2RlLmFyZ3VtZW50bGlzdC5tYXAoYXJndW1lbnQgPT4g
YXJndW1lbnQudmlzaXQodGhpcykpKTsKLSAgICAgICAgbGV0IGFjdHVhbFR5cGVBcmd1bWVudHMg
PSBub2RlLmFjdHVhbFR5cGVBcmd1bWVudHM7Ci0gICAgICAgIGlmIChhY3R1YWxUeXBlQXJndW1l
bnRzKSB7Ci0gICAgICAgICAgICByZXN1bHQuYWN0dWFsVHlwZUFyZ3VtZW50cyA9Ci0gICAgICAg
ICAgICAgICAgYWN0dWFsVHlwZUFyZ3VtZW50cy5tYXAoYWN0dWFsVHlwZUFyZ3VtZW50ID0+IGFj
dHVhbFR5cGVBcmd1bWVudC52aXNpdCh0aGlzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRGdW5jdGlvbkxpa2VCbG9jayhub2RlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbkxpa2VCbG9jaygKLSAgICAgICAgICAg
IG5vZGUub3JpZ2luLAotICAgICAgICAgICAgbm9kZS5hcmd1bWVudExpc3QubWFwKGFyZ3VtZW50
ID0+IGFyZ3VtZW50LnZpc2l0KHRoaXMpKSwKLSAgICAgICAgICAgIG5vZGUucGFyYW1ldGVycy5t
YXAocGFyYW1ldGVyID0+IHBhcmFtZXRlci52aXNpdCh0aGlzKSksCi0gICAgICAgICAgICBub2Rl
LmJvZHkudmlzaXQodGhpcykpOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkv
U3RhbmRhcmRMaWJyYXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL1N0YW5k
YXJkTGlicmFyeS5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkvU3Rh
bmRhcmRMaWJyYXJ5LmpzCShub25leGlzdGVudCkKQEAgLTEsMzggKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi0vLyBO
T1RFOiBUaGUgbmV4dCBsaW5lIGlzIGxpbmUgMjgsIGFuZCB3ZSByZWx5IG9uIHRoaXMgaW4gUHJl
cGFyZS5qcy4KLWNvbnN0IHN0YW5kYXJkTGlicmFyeSA9IGAKLS8vIFRoaXMgaXMgdGhlIEFycmF5
TGFuZyBzdGFuZGFyZCBsaWJyYXJ5LiBJbXBsZW1lbnRhdGlvbnMgb2YgYWxsIG9mIHRoZXNlIHRo
aW5ncyBhcmUgaW4KLS8vIEludHJpbnNpY3MuanMuCi0KLS8vIE5lZWQgdG8gYm9vdHN0cmFwIHZv
aWQgZmlyc3QuCi1uYXRpdmUgcHJpbWl0aXZlIHR5cGUgdm9pZDsKLW5hdGl2ZSBwcmltaXRpdmUg
dHlwZSBpbnQzMjsKLXR5cGUgaW50ID0gaW50MzI7Ci0KLW5hdGl2ZSBpbnQgb3BlcmF0b3IrKGlu
dCwgaW50KTsKLWA7CkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9TdHJ1Y3RUeXBlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL1N0cnVjdFR5cGUuanMJKHJldmlzaW9uIDIyMTM5
MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJL1N0cnVjdFR5cGUuanMJKG5vbmV4aXN0ZW50KQpAQCAt
MSw3NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICov
Ci0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIFN0cnVjdFR5cGUgZXh0ZW5kcyBUeXBlIHsKLSAgICBj
b25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIHR5cGVQYXJhbWV0ZXJzKQotICAgIHsKLSAgICAgICAg
c3VwZXIoKTsKLSAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOwotICAgICAgICB0aGlzLl9u
YW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5fdHlwZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVy
czsKLSAgICAgICAgdGhpcy5fZmllbGRzID0gbmV3IE1hcCgpOwotICAgIH0KLSAgICAKLSAgICBh
ZGQoZmllbGQpCi0gICAgewotICAgICAgICBpZiAodGhpcy5fZmllbGRzLmhhcyhmaWVsZC5uYW1l
KSkKLSAgICAgICAgICAgIHRocm93IG5ldyBBTFR5cGVFcnJvcihmaWVsZC5vcmlnaW4ub3JpZ2lu
U3RyaW5nLCAiRHVwbGljYXRlIGZpZWxkIG5hbWU6ICIgKyBmaWVsZC5uYW1lKTsKLSAgICAgICAg
dGhpcy5fZmllbGRzLnNldChmaWVsZC5uYW1lLCBmaWVsZCk7Ci0gICAgfQotICAgIAotICAgIGdl
dCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQotICAgIGdldCB0eXBlUGFyYW1ldGVycygp
IHsgcmV0dXJuIHRoaXMuX3R5cGVQYXJhbWV0ZXJzOyB9Ci0gICAgCi0gICAgZ2V0IGZpZWxkTmFt
ZXMoKSB7IHJldHVybiB0aGlzLl9maWVsZHMua2V5cygpOyB9Ci0gICAgZmllbGRCeU5hbWUobmFt
ZSkgeyByZXR1cm4gdGhpcy5fZmllbGRzLmdldChuYW1lKTsgfQotICAgIGdldCBmaWVsZHMoKSB7
IHJldHVybiB0aGlzLl9maWVsZHMudmFsdWVzKCk7IH0KLSAgICBnZXQgZmllbGRNYXAoKSB7IHJl
dHVybiB0aGlzLl9maWVsZHM7IH0KLSAgICBnZXQgaXNQcmltaXRpdmUoKQotICAgIHsKLSAgICAg
ICAgbGV0IHJlc3VsdCA9IHRydWU7Ci0gICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmll
bGRzKQotICAgICAgICAgICAgcmVzdWx0ICY9IGZpZWxkLnR5cGUuaXNQcmltaXRpdmU7Ci0gICAg
ICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQotICAgIAotICAgIGluc3RhbnRpYXRlKHR5cGVBcmd1
bWVudHMpCi0gICAgewotICAgICAgICBpZiAodHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gdGhpcy50
eXBlUGFyYW1ldGVycy5sZW5ndGgpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQUxUeXBlRXJyb3Io
b3JpZ2luLm9yaWdpblN0cmluZywgIldyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyB0byBp
bnN0YW50aWF0aW9uIik7Ci0gICAgICAgIAotICAgICAgICBsZXQgc3Vic3RpdHV0aW9uID0gU3Vi
c3RpdHV0aW9uLm1hcHBpbmcodGhpcy50eXBlUGFyYW1ldGVycywgdHlwZUFyZ3VtZW50cyk7Ci0g
ICAgICAgIGxldCBpbnN0YW50aWF0ZUltbWVkaWF0ZXMgPSBuZXcgSW5zdGFudGlhdGVJbW1lZGlh
dGVzKCk7Ci0gICAgICAgIGxldCByZXN1bHQgPSBuZXcgU3RydWN0VHlwZSh0aGlzLm9yaWdpbiwg
dGhpcy5uYW1lLCBbXSk7Ci0gICAgICAgIGZvciAobGV0IGZpZWxkIG9mIHRoaXMuZmllbGRzKQot
ICAgICAgICAgICAgcmVzdWx0LmFkZChmaWVsZC52aXNpdChzdWJzdGl0dXRpb24pLnZpc2l0KGlu
c3RhbnRpYXRlSW1tZWRpYXRlcykpOwotICAgICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KLSAg
ICAKLSAgICB0b1N0cmluZygpCi0gICAgewotICAgICAgICByZXR1cm4gInN0cnVjdCAiICsgdGhp
cy5uYW1lICsgIjwiICsgdGhpcy50eXBlUGFyYW1ldGVycyArICI+IHsgIiArIEFycmF5LmZyb20o
dGhpcy5maWVsZHMpLmpvaW4oIjsgIikgKyAiOyB9IjsKLSAgICB9Ci19CkluZGV4OiBUb29scy9B
cnJheUxhbmdSSS9TdWJzdGl0dXRpb24uanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5n
UkkvU3Vic3RpdHV0aW9uLmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdS
SS9TdWJzdGl0dXRpb24uanMJKG5vbmV4aXN0ZW50KQpAQCAtMSw2NSArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNs
YXNzIFN1YnN0aXR1dGlvbiBleHRlbmRzIFJld3JpdGVyIHsKLSAgICBjb25zdHJ1Y3RvcihtYXAp
Ci0gICAgewotICAgICAgICBzdXBlcigpOwotICAgICAgICB0aGlzLl9tYXAgPSBtYXA7Ci0gICAg
fQotICAgIAotICAgIHN0YXRpYyBtYXBwaW5nKHBhcmFtZXRlcnMsIGFyZ3VtZW50TGlzdCkKLSAg
ICB7Ci0gICAgICAgIGlmIChwYXJhbWV0ZXJzLmxlbmd0aCAhPSBhcmd1bWVudExpc3QubGVuZ3Ro
KQotICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJQYXJhbWV0ZXJzIGFuZCBhcmd1bWVudHMg
YXJlIG1pc21hdGNoZWQiKTsKLSAgICAgICAgbGV0IG1hcCA9IG5ldyBNYXAoKTsKLSAgICAgICAg
Zm9yIChsZXQgaSA9IDA7IGkgPCBwYXJhbWV0ZXJzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAg
bWFwLnNldChwYXJhbWV0ZXJzW2ldLCBhcmd1bWVudExpc3RbaV0pOwotICAgICAgICByZXR1cm4g
bmV3IFN1YnN0aXR1dGlvbihtYXApOwotICAgIH0KLSAgICAKLSAgICB2aXNpdFR5cGVSZWYobm9k
ZSkKLSAgICB7Ci0gICAgICAgIGxldCByZXBsYWNlbWVudCA9IHRoaXMuX21hcC5nZXQobm9kZS50
eXBlKTsKLSAgICAgICAgaWYgKHJlcGxhY2VtZW50KSB7Ci0gICAgICAgICAgICBpZiAobm9kZS50
eXBlQXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVu
ZXhwZWN0ZWQgdHlwZSBhcmd1bWVudHMgb24gdHlwZSB2YXJpYWJsZSIpOwotICAgICAgICAgICAg
cmV0dXJuIHJlcGxhY2VtZW50OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4g
c3VwZXIudmlzaXRUeXBlUmVmKG5vZGUpOwotICAgIH0KLQotICAgIHZpc2l0VmFyaWFibGVSZWYo
bm9kZSkKLSAgICB7Ci0gICAgICAgIGxldCByZXBsYWNlbWVudCA9IHRoaXMuX21hcC5nZXQobm9k
ZS52YXJpYWJsZSk7Ci0gICAgICAgIGlmIChyZXBsYWNlbWVudCkKLSAgICAgICAgICAgIHJldHVy
biByZXBsYWNlbWVudDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBzdXBlci52aXNpdFZhcmlh
YmxlUmVmKG5vZGUpOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkvU3VmZml4
Q2FsbEFzc2lnbm1lbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvU3VmZml4
Q2FsbEFzc2lnbm1lbnQuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJ
L1N1ZmZpeENhbGxBc3NpZ25tZW50LmpzCShub25leGlzdGVudCkKQEAgLTEsNDQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3Qi
OwotCi1jbGFzcyBTdWZmaXhDYWxsQXNzaWdubWVudCBleHRlbmRzIEV4cHJlc3Npb24gewotICAg
IGNvbnN0cnVjdG9yKG9yaWdpbiwgbmFtZSwgbGhzKQotICAgIHsKLSAgICAgICAgc3VwZXIob3Jp
Z2luKTsKLSAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7Ci0gICAgICAgIHRoaXMuX2xocyA9IGxo
czsKLSAgICAgICAgdGhpcy5mdW5jID0gbnVsbDsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG5hbWUo
KSB7IHJldHVybiB0aGlzLl9uYW1lOyB9Ci0gICAgZ2V0IGxocygpIHsgcmV0dXJuIHRoaXMuX2xo
czsgfQotICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLmxo
cyArICIgc3VmZml4ICIgKyB0aGlzLm5hbWU7Ci0gICAgfQotfQotCkluZGV4OiBUb29scy9BcnJh
eUxhbmdSSS9UZXN0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL1Rlc3QuanMJ
KHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJL1Rlc3QuanMJKG5vbmV4aXN0
ZW50KQpAQCAtMSwzNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWxvYWQoIkFsbC5qcyIpOwotCi17Ci0gICAgbGV0
IHByb2dyYW0gPSBwcmVwYXJlKCI8dGVzdD4iLCAwLCAiaW50IGZvbyhpbnQgeCkgeyByZXR1cm4g
eCArIDE7IH0iKTsKLSAgICBsZXQgcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbXSwgW25ldyBFSW50KHByb2dyYW0uaW50cmluc2ljcy5pbnQzMiwgNDIpXSk7Ci0gICAgaWYg
KCEocmVzdWx0IGluc3RhbmNlb2YgRUludCkpCi0gICAgICAgIHRocm93IG5ldyBFcnJvcigiV3Jv
bmcgcmVzdWx0IHR5cGU7IHJlc3VsdDogIiArIHJlc3VsdCk7Ci0gICAgaWYgKHJlc3VsdC52YWx1
ZSAhPSA0MykKLSAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQ6ICIgKyByZXN1
bHQpOwotfQotCkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9UeXBlLmpzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0FycmF5TGFuZ1JJL1R5cGUuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0Fy
cmF5TGFuZ1JJL1R5cGUuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwzOCArMCwwIEBACi0vKgotICog
Q29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNs
YXNzIFR5cGUgZXh0ZW5kcyBOb2RlIHsKLSAgICBnZXQgdHlwZVBhcmFtZXRlcnMoKSB7IHJldHVy
biBbXTsgfQotICAgIGdldCBraW5kKCkgeyByZXR1cm4gVHlwZTsgfQotICAgIAotICAgIGluaGVy
aXRzKHByb3RvY29sKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3RvY29sLmhhc0hlaXIodGhp
cyk7Ci0gICAgfQotICAgIAotICAgIGdldCBpbnN0YW50aWF0ZWRUeXBlKCkgeyByZXR1cm4gdGhp
cy52aXNpdChuZXcgSW5zdGFudGlhdGVJbW1lZGlhdGVzKCkpOyB9Ci19Ci0KSW5kZXg6IFRvb2xz
L0FycmF5TGFuZ1JJL1R5cGVEZWYuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkv
VHlwZURlZi5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkvVHlwZURl
Zi5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDQyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgVHlwZURlZiBl
eHRlbmRzIFR5cGUgewotICAgIGNvbnN0cnVjdG9yKG9yaWdpbiwgbmFtZSwgdHlwZVBhcmFtZXRl
cnMsIHR5cGUpCi0gICAgewotICAgICAgICBzdXBlcigpOwotICAgICAgICB0aGlzLl9vcmlnaW4g
PSBvcmlnaW47Ci0gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lOwotICAgICAgICB0aGlzLl90eXBl
UGFyYW1ldGVycyA9IHR5cGVQYXJhbWV0ZXJzOwotICAgICAgICB0aGlzLl90eXBlID0gdHlwZTsK
LSAgICB9Ci0gICAgCi0gICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRoaXMuX29yaWdpbjsgfQot
ICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQotICAgIGdldCB0eXBlUGFyYW1l
dGVycygpIHsgcmV0dXJuIHRoaXMuX3R5cGVQYXJhbWV0ZXJzOyB9Ci0gICAgZ2V0IHR5cGUoKSB7
IHJldHVybiB0aGlzLl90eXBlOyB9Ci19Ci0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL1R5cGVE
ZWZSZXNvbHZlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9BcnJheUxhbmdSSS9UeXBlRGVmUmVz
b2x2ZXIuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJL1R5cGVEZWZS
ZXNvbHZlci5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgVHlw
ZURlZlJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7Ci0gICAgY29uc3RydWN0b3IoKQotICAgIHsK
LSAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgdGhpcy5fdmlzaXRpbmcgPSBuZXcgVmlzaXRpbmdT
ZXQoKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRUeXBlUmVmKG5vZGUpCi0gICAgewotICAgICAg
ICB0aGlzLl92aXNpdGluZy5kb1Zpc2l0KG5vZGUsICgpID0+IHsKLSAgICAgICAgICAgIHN1cGVy
LnZpc2l0VHlwZVJlZihub2RlKTsKLSAgICAgICAgICAgIGlmIChub2RlLnR5cGUgaW5zdGFuY2Vv
ZiBUeXBlRGVmKSB7Ci0gICAgICAgICAgICAgICAgbGV0IHVuaWZpY2F0aW9uQ29udGV4dCA9IG5l
dyBVbmlmaWNhdGlvbkNvbnRleHQobm9kZS50eXBlLnR5cGVQYXJhbWV0ZXJzKTsKLSAgICAgICAg
ICAgICAgICBpZiAobm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aCAhPSBub2RlLnR5cGUudHlwZVBh
cmFtZXRlcnMubGVuZ3RoKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImFy
Z3VtZW50L3BhcmFtZXRlciBtaXNtYXRjaCAoc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgZWFybGll
cikiKTsKLSAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUudHlwZUFyZ3Vt
ZW50cy5sZW5ndGg7ICsraSkKLSAgICAgICAgICAgICAgICAgICAgbm9kZS50eXBlQXJndW1lbnRz
W2ldLnVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgbm9kZS50eXBlLnR5cGVQYXJhbWV0ZXJzW2ld
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXVuaWZpY2F0aW9uQ29udGV4dC52ZXJpZnkoKSkKLSAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFMVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdp
blN0cmluZywgIlR5cGUgcmVmZXJlbmNlIHRvIGEgdHlwZSBkZWZpbml0aW9uIHZpb2xhdGVzIHBy
b3RvY29sIGNvbnN0cmFpbnRzIik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
bGV0IG5ld1R5cGUgPSBub2RlLnR5cGUudHlwZS5zdWJzdGl0dXRlVG9VbmlmaWNhdGlvbihub2Rl
LnR5cGUudHlwZVBhcmFtZXRlcnMsIHVuaWZpY2F0aW9uQ29udGV4dCk7Ci0gICAgICAgICAgICAg
ICAgbmV3VHlwZS52aXNpdCh0aGlzKTsKLSAgICAgICAgICAgICAgICBub2RlLnNldFR5cGVBbmRB
cmd1bWVudHMobmV3VHlwZSwgW10pOwotICAgICAgICAgICAgfQotICAgICAgICB9KTsKLSAgICB9
Ci19CkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9UeXBlT3JWYXJpYWJsZVJlZi5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9BcnJheUxhbmdSSS9UeXBlT3JWYXJpYWJsZVJlZi5qcwkocmV2aXNpb24g
MjIxMzkxKQorKysgVG9vbHMvQXJyYXlMYW5nUkkvVHlwZU9yVmFyaWFibGVSZWYuanMJKG5vbmV4
aXN0ZW50KQpAQCAtMSw0MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIFR5cGVPclZhcmlhYmxlUmVmIGV4
dGVuZHMgTm9kZSB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBuYW1lKQotICAgIHsKLSAgICAg
ICAgc3VwZXIoKTsKLSAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOwotICAgICAgICB0aGlz
Ll9uYW1lID0gbmFtZTsKLSAgICB9Ci0gICAgCi0gICAgZ2V0IG9yaWdpbigpIHsgcmV0dXJuIHRo
aXMuX29yaWdpbjsgfQotICAgIGdldCBuYW1lKCkgeyByZXR1cm4gdGhpcy5fbmFtZTsgfQotCi0g
ICAgdG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubmFtZTsKLSAgICB9Ci19
CkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9UeXBlUmVmLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0FycmF5TGFuZ1JJL1R5cGVSZWYuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5
TGFuZ1JJL1R5cGVSZWYuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwxMTMgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1j
bGFzcyBUeXBlUmVmIGV4dGVuZHMgVHlwZSB7Ci0gICAgY29uc3RydWN0b3Iob3JpZ2luLCBuYW1l
LCB0eXBlQXJndW1lbnRzKQotICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgdGhpcy5f
b3JpZ2luID0gb3JpZ2luOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhp
cy50eXBlID0gbnVsbDsKLSAgICAgICAgdGhpcy5fdHlwZUFyZ3VtZW50cyA9IHR5cGVBcmd1bWVu
dHM7Ci0gICAgfQotICAgIAotICAgIHN0YXRpYyB3cmFwKHR5cGUpCi0gICAgewotICAgICAgICBs
ZXQgcmVzdWx0ID0gbmV3IFR5cGVSZWYodHlwZS5vcmlnaW4sIHR5cGUubmFtZSwgW10pOwotICAg
ICAgICByZXN1bHQudHlwZSA9IHR5cGU7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0gICAgfQot
IAotICAgIGdldCBvcmlnaW4oKSB7IHJldHVybiB0aGlzLl9vcmlnaW47IH0KLSAgICBnZXQgbmFt
ZSgpIHsgcmV0dXJuIHRoaXMuX25hbWU7IH0KLSAgICBnZXQgdHlwZUFyZ3VtZW50cygpIHsgcmV0
dXJuIHRoaXMuX3R5cGVBcmd1bWVudHM7IH0KLSAgICAKLSAgICBnZXQgaW5zdGFudGlhdGVkVHlw
ZSgpCi0gICAgewotICAgICAgICBsZXQgdHlwZSA9IHRoaXMudHlwZS51bmlmeU5vZGU7Ci0gICAg
ICAgIGlmICghdHlwZS5pbnN0YW50aWF0ZSkKLSAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
dHlwZSBkb2VzIG5vdCBzdXBwb3J0IGluc3RhbnRpYXRpb246ICIgKyB0eXBlICsgIiAoIiArIHR5
cGUuY29uc3RydWN0b3IubmFtZSArICIpIik7Ci0gICAgICAgIHJldHVybiB0eXBlLmluc3RhbnRp
YXRlKHRoaXMudHlwZUFyZ3VtZW50cyk7Ci0gICAgfQotICAgIAotICAgIGdldCB1bmlmeU5vZGUo
KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnR5cGVBcmd1bWVudHMubGVuZ3RoKQotICAgICAg
ICAgICAgcmV0dXJuIHRoaXMudHlwZS51bmlmeU5vZGU7Ci0gICAgICAgIHJldHVybiB0aGlzOwot
ICAgIH0KLSAgICAKLSAgICBwb3B1bGF0ZURlZmF1bHRWYWx1ZShidWZmZXIsIG9mZnNldCkKLSAg
ICB7Ci0gICAgICAgIGlmICghdGhpcy50eXBlQXJndW1lbnRzLmxlbmd0aCkKLSAgICAgICAgICAg
IHJldHVybiB0aGlzLnR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUoYnVmZmVyLCBvZmZzZXQpOwot
ICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBnZXQgZGVmYXVsdCB2YWx1ZSBvZiBhIHR5
cGUgaW5zdGFudGlhdGlvbiIpOwotICAgIH0KLSAgICAKLSAgICBnZXQgc2l6ZSgpCi0gICAgewot
ICAgICAgICBpZiAoIXRoaXMudHlwZUFyZ3VtZW50cy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1
cm4gdGhpcy50eXBlLnNpemU7Ci0gICAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGdldCBz
aXplIG9mIGEgdHlwZSBpbnN0YW50aWF0aW9uIik7Ci0gICAgfQotICAgIAotICAgIGdldCBpc1By
aW1pdGl2ZSgpCi0gICAgewotICAgICAgICBpZiAoIXRoaXMudHlwZUFyZ3VtZW50cy5sZW5ndGgp
Ci0gICAgICAgICAgICByZXR1cm4gdGhpcy50eXBlLmlzUHJpbWl0aXZlOwotICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkNhbm5vdCBkZXRlcm1pbmUgaWYgYW4gdW5pbnN0YW50aWF0ZWQgdHlwZSBp
cyBwcmltaXRpdmUiKTsKLSAgICB9Ci0gICAgCi0gICAgc2V0VHlwZUFuZEFyZ3VtZW50cyh0eXBl
LCB0eXBlQXJndW1lbnRzKQotICAgIHsKLSAgICAgICAgdGhpcy5fbmFtZSA9IHR5cGUubmFtZTsK
LSAgICAgICAgdGhpcy50eXBlID0gdHlwZTsKLSAgICAgICAgdGhpcy5fdHlwZUFyZ3VtZW50cyA9
IHR5cGVBcmd1bWVudHM7Ci0gICAgfQotICAgIAotICAgIHVuaWZ5SW1wbCh1bmlmaWNhdGlvbkNv
bnRleHQsIG90aGVyKQotICAgIHsKLSAgICAgICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBUeXBl
UmVmKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCF0aGlzLnR5cGUu
dW5pZnkodW5pZmljYXRpb25Db250ZXh0LCBvdGhlci50eXBlKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgaWYgKHRoaXMudHlwZUFyZ3VtZW50cy5sZW5ndGggIT0gb3RoZXIu
dHlwZUFyZ3VtZW50cy5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy50eXBlQXJndW1lbnRzLmxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgICAgICBpZiAoIXRoaXMudHlwZUFyZ3VtZW50c1tpXS51bmlmeSh1bmlmaWNhdGlvbkNv
bnRleHQsIG90aGVyLnR5cGVBcmd1bWVudHNbaV0pKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAg
dG9TdHJpbmcoKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnR5cGVBcmd1bWVudHMubGVuZ3Ro
KQotICAgICAgICAgICAgcmV0dXJuIHRoaXMubmFtZTsKLSAgICAgICAgcmV0dXJuIHRoaXMubmFt
ZSArICI8IiArIHRoaXMudHlwZUFyZ3VtZW50cyArICI+IjsKLSAgICB9Ci19Ci0KSW5kZXg6IFRv
b2xzL0FycmF5TGFuZ1JJL1R5cGVWYXJpYWJsZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9BcnJh
eUxhbmdSSS9UeXBlVmFyaWFibGUuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5
TGFuZ1JJL1R5cGVWYXJpYWJsZS5qcwkobm9uZXhpc3RlbnQpCkBAIC0xLDk5ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsK
LQotY2xhc3MgVHlwZVZhcmlhYmxlIGV4dGVuZHMgVHlwZSB7Ci0gICAgY29uc3RydWN0b3Iob3Jp
Z2luLCBuYW1lLCBwcm90b2NvbCkKLSAgICB7Ci0gICAgICAgIHN1cGVyKCk7Ci0gICAgICAgIHRo
aXMuX29yaWdpbiA9IG9yaWdpbjsKLSAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7Ci0gICAgICAg
IHRoaXMuX3Byb3RvY29sID0gcHJvdG9jb2w7Ci0gICAgfQotICAgIAotICAgIGdldCBuYW1lKCkg
eyByZXR1cm4gdGhpcy5fbmFtZTsgfQotICAgIGdldCBwcm90b2NvbCgpIHsgcmV0dXJuIHRoaXMu
X3Byb3RvY29sOyB9Ci0gICAgCi0gICAgZ2V0IGlzUHJpbWl0aXZlKCkKLSAgICB7Ci0gICAgICAg
IHJldHVybiB0aGlzLl9wcm90b2NvbCAmJiB0aGlzLl9wcm90b2NvbC5pc1ByaW1pdGl2ZTsKLSAg
ICB9Ci0gICAgCi0gICAgZ2V0IGlzVW5pZmlhYmxlKCkgeyByZXR1cm4gdHJ1ZTsgfQotICAgIAot
ICAgIGluaGVyaXRzKHByb3RvY29sKQotICAgIHsKLSAgICAgICAgaWYgKCFwcm90b2NvbCkKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIXRoaXMucHJvdG9jb2wpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiB0aGlzLnByb3RvY29sLmluaGVy
aXRzKHByb3RvY29sKTsKLSAgICB9Ci0gICAgCi0gICAgdHlwZVZhcmlhYmxlVW5pZnkodW5pZmlj
YXRpb25Db250ZXh0LCBvdGhlcikKLSAgICB7Ci0gICAgICAgIGlmICghKG90aGVyIGluc3RhbmNl
b2YgVHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGxldCByZWFsVGhp
cyA9IHVuaWZpY2F0aW9uQ29udGV4dC5maW5kKHRoaXMpOwotICAgICAgICBpZiAocmVhbFRoaXMg
IT0gdGhpcykKLSAgICAgICAgICAgIHJldHVybiByZWFsVGhpcy51bmlmeSh1bmlmaWNhdGlvbkNv
bnRleHQsIG90aGVyKTsKLSAgICAgICAgCi0gICAgICAgIHVuaWZpY2F0aW9uQ29udGV4dC51bmlm
eSh0aGlzLCBvdGhlcik7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICAKLSAgICB1
bmlmeUltcGwodW5pZmljYXRpb25Db250ZXh0LCBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVy
biB0aGlzLnR5cGVWYXJpYWJsZVVuaWZ5KHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpOwotICAg
IH0KLSAgICAKLSAgICB2ZXJpZnlBc0FyZ3VtZW50KHVuaWZpY2F0aW9uQ29udGV4dCkKLSAgICB7
Ci0gICAgICAgIGxldCByZWFsVGhpcyA9IHVuaWZpY2F0aW9uQ29udGV4dC5maW5kKHRoaXMpOwot
ICAgICAgICAKLSAgICAgICAgLy8gVGhlIHRoaW5nIHdlIGdldCB1bmlmaWVkIHdpdGggbXVzdCBi
ZSBhIHR5cGUgdmFyaWFibGUgdGhhdCBhY2NlcHRzIGEgYnJvYWRlciBzZXQgb2YKLSAgICAgICAg
Ly8gdGhpbmdzIHRoYW4gd2UgZG8uCi0gICAgICAgIGlmICghKHJlYWxUaGlzIGluc3RhbmNlb2Yg
VHlwZVZhcmlhYmxlKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAKLSAgICAg
ICAgaWYgKCF0aGlzLnByb3RvY29sKQotICAgICAgICAgICAgcmV0dXJuICFyZWFsVGhpcy5wcm90
b2NvbDsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiB0aGlzLnByb3RvY29sLmluaGVyaXRzKHJl
YWxUaGlzLnByb3RvY29sKTsKLSAgICB9Ci0gICAgCi0gICAgdmVyaWZ5QXNQYXJhbWV0ZXIodW5p
ZmljYXRpb25Db250ZXh0KQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLnByb3RvY29sKQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIHJldHVybiB1bmlmaWNhdGlvbkNvbnRleHQu
ZmluZCh0aGlzKS5pbmhlcml0cyh0aGlzLnByb3RvY29sKTsKLSAgICB9Ci0gICAgCi0gICAgdG9T
dHJpbmcoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHRoaXMubmFtZTsKLSAgICB9Ci19Ci0KSW5k
ZXg6IFRvb2xzL0FycmF5TGFuZ1JJL1VuaWZpY2F0aW9uQ29udGV4dC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9BcnJheUxhbmdSSS9VbmlmaWNhdGlvbkNvbnRleHQuanMJKHJldmlzaW9uIDIyMTM5
MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJL1VuaWZpY2F0aW9uQ29udGV4dC5qcwkobm9uZXhpc3Rl
bnQpCkBAIC0xLDEwMSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIFVuaWZpY2F0aW9uQ29udGV4dCB7Ci0g
ICAgY29uc3RydWN0b3IodHlwZVBhcmFtZXRlcnMpCi0gICAgewotICAgICAgICB0aGlzLl90eXBl
UGFyYW1ldGVycyA9IG5ldyBTZXQodHlwZVBhcmFtZXRlcnMpOwotICAgICAgICB0aGlzLl9uZXh0
TWFwID0gbmV3IE1hcCgpOwotICAgIH0KLSAgICAKLSAgICB1bmlvbihhLCBiKQotICAgIHsKLSAg
ICAgICAgYSA9IGZpbmQoYSk7Ci0gICAgICAgIGIgPSBmaW5kKGIpOwotICAgICAgICBpZiAoYSA9
PSBiKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKCFiLmlzVW5p
ZmlhYmxlKQotICAgICAgICAgICAgW2EsIGJdID0gW2IsIGFdOwotICAgICAgICBpZiAoIWEuaXNV
bmlmaWFibGUpCi0gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCB1bmlmeSBub24t
dW5pZmlhYmxlIHRoaW5ncyAiICsgYSArICIgYW5kICIgKyBiKTsKLSAgICAgICAgCi0gICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHR5cGUgcGFyYW1ldGVycyBkb24ndCBlbmQgdXAgYmVpbmcgcm9v
dHMuCi0gICAgICAgIGlmIChhLmlzVW5pZmlhYmxlICYmIGIuaXNVbmlmaWFibGUgJiYgdGhpcy5f
dHlwZVBhcmFtZXRlcnMuaGFzKGIpKQotICAgICAgICAgICAgW2EsIGJdID0gW2IsIGFdOwotCi0g
ICAgICAgIHRoaXMuX25leHRNYXAuc2V0KGEsIGIpOwotICAgIH0KLSAgICAKLSAgICBmaW5kKG5v
ZGUpCi0gICAgewotICAgICAgICBsZXQgY3VycmVudE5vZGUgPSBub2RlOwotICAgICAgICBsZXQg
bmV4dE5vZGUgPSB0aGlzLl9uZXh0TWFwLmdldChjdXJyZW50Tm9kZSk7Ci0gICAgICAgIGlmICgh
bmV4dE5vZGUpCi0gICAgICAgICAgICByZXR1cm4gY3VycmVudE5vZGU7Ci0gICAgICAgIGZvciAo
OzspIHsKLSAgICAgICAgICAgIGN1cnJlbnROb2RlID0gbmV4dE5vZGU7Ci0gICAgICAgICAgICBu
ZXh0Tm9kZSA9IHRoaXMuX25leHRNYXAuZ2V0KGN1cnJlbnROb2RlKTsKLSAgICAgICAgICAgIGlm
ICghbmV4dE5vZGUpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
dGhpcy5fbmV4dE1hcC5zZXQobm9kZSwgY3VycmVudE5vZGUpOwotICAgICAgICByZXR1cm4gY3Vy
cmVudE5vZGU7Ci0gICAgfQotICAgIAotICAgIGdldCBub2RlcygpCi0gICAgewotICAgICAgICBs
ZXQgcmVzdWx0ID0gbmV3IFNldCgpOwotICAgICAgICBmb3IgKGxldCBba2V5LCB2YWx1ZV0gb2Yg
dGhpcy5fbmV4dE1hcCkgewotICAgICAgICAgICAgcmVzdWx0LmFkZChrZXkpOwotICAgICAgICAg
ICAgcmVzdWx0LmFkZCh2YWx1ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICB9Ci0gICAgCi0gICAgdmVyaWZ5KCkKLSAgICB7Ci0gICAgICAgIGZvciAobGV0IHR5cGVQ
YXJhbWV0ZXIgb2YgdGhpcy5fdHlwZVBhcmFtZXRlcnMpIHsKLSAgICAgICAgICAgIGlmICghdHlw
ZVBhcmFtZXRlci52ZXJpZnlBc1BhcmFtZXRlcih0aGlzKSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgZm9yIChsZXQgdHlwZUFyZ3VtZW50IG9mIHRo
aXMubm9kZXMpIHsKLSAgICAgICAgICAgIGlmICghdHlwZUFyZ3VtZW50LmlzVW5pZmlhYmxlKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKHRoaXMuX3R5cGVQYXJh
bWV0ZXJzLmhhcyh0eXBlQXJndW1lbnQpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgaWYgKCF0eXBlQXJndW1lbnQudmVyaWZ5QXNBcmd1bWVudCh0aGlzKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIAotICAgIGlzVW51bmlmaWVkKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiAh
dGhpcy5fbmV4dE1hcC5zaXplOwotICAgIH0KLX0KLQpJbmRleDogVG9vbHMvQXJyYXlMYW5nUkkv
VmFsdWUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvVmFsdWUuanMJKHJldmlz
aW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5TGFuZ1JJL1ZhbHVlLmpzCShub25leGlzdGVudCkK
QEAgLTEsMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotInVzZSBzdHJpY3QiOwotCi1jbGFzcyBWYWx1ZSBleHRlbmRzIE5vZGUgewotICAgIGdl
dCBraW5kKCkgeyByZXR1cm4gVmFsdWU7IH0KLSAgICBnZXQgaXNDb25zdGV4cHIoKSB7IHJldHVy
biBmYWxzZTsgfQotfQotCkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9WYXJpYWJsZURlY2wuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvQXJyYXlMYW5nUkkvVmFyaWFibGVEZWNsLmpzCShyZXZpc2lv
biAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9WYXJpYWJsZURlY2wuanMJKG5vbmV4aXN0
ZW50KQpAQCAtMSw0NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0idXNlIHN0cmljdCI7Ci0KLWNsYXNzIFZhcmlhYmxlRGVjbCBleHRlbmRzIFZh
bHVlIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUsIHR5cGUsIGluaXRpYWxpemVyKQot
ICAgIHsKLSAgICAgICAgc3VwZXIoKTsKLSAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOwot
ICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAgdGhpcy5fdHlwZSA9IHR5cGU7Ci0g
ICAgICAgIHRoaXMuX2luaXRpYWxpemVyID0gaW5pdGlhbGl6ZXI7Ci0gICAgfQotICAgIAotICAg
IGdldCBvcmlnaW4oKSB7IHJldHVybiB0aGlzLl9vcmlnaW47IH0KLSAgICBnZXQgbmFtZSgpIHsg
cmV0dXJuIHRoaXMuX25hbWU7IH0KLSAgICBnZXQgdHlwZSgpIHsgcmV0dXJuIHRoaXMuX3R5cGU7
IH0KLSAgICBnZXQgaW5pdGlhbGl6ZXIoKSB7IHJldHVybiB0aGlzLl9pbml0aWFsaXplcjsgfQot
ICAgIAotICAgIHRvU3RyaW5nKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLnR5cGUgKyAi
ICIgKyB0aGlzLm5hbWUgKyAodGhpcy5pbml0aWFsaXplciA/ICIgPSAiICsgdGhpcy5pbml0aWFs
aXplciA6ICIiKTsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL1ZhcmlhYmxl
UmVmLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL1ZhcmlhYmxlUmVmLmpzCShy
ZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9WYXJpYWJsZVJlZi5qcwkobm9u
ZXhpc3RlbnQpCkBAIC0xLDQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgVmFyaWFibGVSZWYgZXh0ZW5k
cyBFeHByZXNzaW9uIHsKLSAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIG5hbWUpCi0gICAgewotICAg
ICAgICBzdXBlcihvcmlnaW4pOwotICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKLSAgICAgICAg
dGhpcy52YXJpYWJsZSA9IG51bGw7Ci0gICAgfQotICAgIAotICAgIGdldCBuYW1lKCkgeyByZXR1
cm4gdGhpcy5fbmFtZTsgfQotICAgIGdldCBpc0NvbnN0ZXhwcigpIHsgcmV0dXJuIHRoaXMudmFy
aWFibGUuaXNDb25zdGV4cHI7IH0KLSAgICBnZXQgdW5pZnlOb2RlKCkgeyByZXR1cm4gdGhpcy52
YXJpYWJsZS51bmlmeU5vZGU7IH0KLSAgICAKLSAgICB0b1N0cmluZygpCi0gICAgewotICAgICAg
ICByZXR1cm4gdGhpcy5uYW1lOwotICAgIH0KLX0KSW5kZXg6IFRvb2xzL0FycmF5TGFuZ1JJL1Zp
c2l0aW5nU2V0LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0FycmF5TGFuZ1JJL1Zpc2l0aW5nU2V0
LmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9BcnJheUxhbmdSSS9WaXNpdGluZ1NldC5q
cwkobm9uZXhpc3RlbnQpCkBAIC0xLDQ0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLSJ1c2Ugc3RyaWN0IjsKLQotY2xhc3MgVmlzaXRpbmdTZXQg
ewotICAgIGNvbnN0cnVjdG9yKC4uLml0ZW1zKQotICAgIHsKLSAgICAgICAgdGhpcy5fc2V0ID0g
bmV3IFNldChpdGVtcyk7Ci0gICAgfQotICAgIAotICAgIGRvVmlzaXQoaXRlbSwgY2FsbGJhY2sp
Ci0gICAgewotICAgICAgICBpZiAodGhpcy5fc2V0LmhhcyhpdGVtKSkKLSAgICAgICAgICAgIHRo
cm93IG5ldyBBTFR5cGVFcnJvcihpdGVtLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJSZWN1cnNpdmUg
IiArIGl0ZW0ua2luZCk7Ci0gICAgICAgIHRoaXMuX3NldC5hZGQoaXRlbSk7Ci0gICAgICAgIHRy
eSB7Ci0gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTsKLSAgICAgICAgfSBmaW5hbGx5IHsK
LSAgICAgICAgICAgIHRoaXMuX3NldC5kZWxldGUoaXRlbSk7Ci0gICAgICAgIH0KLSAgICB9Ci19
CkluZGV4OiBUb29scy9BcnJheUxhbmdSSS9WaXNpdG9yLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0FycmF5TGFuZ1JJL1Zpc2l0b3IuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL0FycmF5
TGFuZ1JJL1Zpc2l0b3IuanMJKG5vbmV4aXN0ZW50KQpAQCAtMSwxODAgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotInVzZSBzdHJpY3QiOwotCi1j
bGFzcyBWaXNpdG9yIHsKLSAgICB2aXNpdFByb2dyYW0obm9kZSkKLSAgICB7Ci0gICAgICAgIGZv
ciAobGV0IHN0YXRlbWVudCBvZiBub2RlLnRvcExldmVsU3RhdGVtZW50cykKLSAgICAgICAgICAg
IHN0YXRlbWVudC52aXNpdCh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRGdW5jKG5vZGUp
Ci0gICAgewotICAgICAgICBub2RlLnJldHVyblR5cGUudmlzaXQodGhpcyk7Ci0gICAgICAgIGZv
ciAobGV0IHR5cGVQYXJhbWV0ZXIgb2Ygbm9kZS50eXBlUGFyYW1ldGVycykKLSAgICAgICAgICAg
IHR5cGVQYXJhbWV0ZXIudmlzaXQodGhpcyk7Ci0gICAgICAgIGZvciAobGV0IHBhcmFtZXRlciBv
ZiBub2RlLnBhcmFtZXRlcnMpCi0gICAgICAgICAgICBwYXJhbWV0ZXIudmlzaXQodGhpcyk7Ci0g
ICAgfQotICAgIAotICAgIHZpc2l0RnVuY1BhcmFtZXRlcihub2RlKQotICAgIHsKLSAgICAgICAg
bm9kZS50eXBlLnZpc2l0KHRoaXMpOwotICAgIH0KLSAgICAKLSAgICB2aXNpdEZ1bmNEZWYobm9k
ZSkKLSAgICB7Ci0gICAgICAgIHRoaXMudmlzaXRGdW5jKG5vZGUpOwotICAgICAgICBub2RlLmJv
ZHkudmlzaXQodGhpcyk7Ci0gICAgfQotICAgIAotICAgIHZpc2l0TmF0aXZlRnVuYyhub2RlKQot
ICAgIHsKLSAgICAgICAgdGhpcy52aXNpdEZ1bmMobm9kZSk7Ci0gICAgfQotICAgIAotICAgIHZp
c2l0QmxvY2sobm9kZSkKLSAgICB7Ci0gICAgICAgIGZvciAobGV0IHN0YXRlbWVudCBvZiBub2Rl
LnN0YXRlbWVudHMpCi0gICAgICAgICAgICBzdGF0ZW1lbnQudmlzaXQodGhpcyk7Ci0gICAgfQot
ICAgIAotICAgIHZpc2l0Q29tbWFFeHByZXNzaW9uKG5vZGUpCi0gICAgewotICAgICAgICBmb3Ig
KGxldCBleHByZXNzaW9uIG9mIG5vZGUubGlzdCkKLSAgICAgICAgICAgIGV4cHJlc3Npb24udmlz
aXQodGhpcyk7Ci0gICAgfQotICAgIAotICAgIHZpc2l0UHJvdG9jb2xSZWYobm9kZSkKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIHZpc2l0UHJvdG9jb2xEZWNsKG5vZGUpCi0gICAgewotICAgICAg
ICBmb3IgKGxldCBzaWduYXR1cmUgb2Ygbm9kZS5zaWduYXR1cmVzKQotICAgICAgICAgICAgc2ln
bmF0dXJlLnZpc2l0KHRoaXMpOwotICAgIH0KLSAgICAKLSAgICB2aXNpdFR5cGVSZWYobm9kZSkK
LSAgICB7Ci0gICAgICAgIGZvciAobGV0IHR5cGVBcmd1bWVudCBvZiBub2RlLnR5cGVBcmd1bWVu
dHMpCi0gICAgICAgICAgICB0eXBlQXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgfQotICAgIAot
ICAgIHZpc2l0TmF0aXZlVHlwZShub2RlKQotICAgIHsKLSAgICAgICAgZm9yIChsZXQgdHlwZVBh
cmFtZXRlciBvZiBub2RlLnR5cGVQYXJhbWV0ZXJzKQotICAgICAgICAgICAgdHlwZVBhcmFtZXRl
ci52aXNpdCh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRUeXBlRGVmKG5vZGUpCi0gICAg
ewotICAgICAgICBmb3IgKGxldCB0eXBlUGFyYW1ldGVyIG9mIG5vZGUudHlwZVBhcmFtZXRlcnMp
Ci0gICAgICAgICAgICB0eXBlUGFyYW1ldGVyLnZpc2l0KHRoaXMpOwotICAgICAgICBub2RlLnR5
cGUudmlzaXQodGhpcyk7Ci0gICAgfQotICAgIAotICAgIHZpc2l0U3RydWN0VHlwZShub2RlKQot
ICAgIHsKLSAgICAgICAgZm9yIChsZXQgdHlwZVBhcmFtZXRlciBvZiBub2RlLnR5cGVQYXJhbWV0
ZXJzKQotICAgICAgICAgICAgdHlwZVBhcmFtZXRlci52aXNpdCh0aGlzKTsKLSAgICAgICAgZm9y
IChsZXQgZmllbGQgb2Ygbm9kZS5maWVsZHMpCi0gICAgICAgICAgICBmaWVsZC52aXNpdCh0aGlz
KTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRUeXBlVmFyaWFibGUobm9kZSkKLSAgICB7Ci0gICAg
fQotICAgIAotICAgIHZpc2l0Q29uc3RleHByVHlwZVBhcmFtZXRlcihub2RlKQotICAgIHsKLSAg
ICAgICAgbm9kZS50eXBlLnZpc2l0KHRoaXMpOwotICAgIH0KLSAgICAKLSAgICB2aXNpdEZpZWxk
KG5vZGUpCi0gICAgewotICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7Ci0gICAgfQotICAg
IAotICAgIHZpc2l0RWxlbWVudGFsVHlwZShub2RlKQotICAgIHsKLSAgICAgICAgbm9kZS5lbGVt
ZW50VHlwZS52aXNpdCh0aGlzKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRQdHJUeXBlKG5vZGUp
Ci0gICAgewotICAgICAgICB0aGlzLnZpc2l0RWxlbWVudGFsVHlwZShub2RlKTsKLSAgICB9Ci0g
ICAgCi0gICAgdmlzaXRBcnJheVJlZlR5cGUobm9kZSkKLSAgICB7Ci0gICAgICAgIHRoaXMudmlz
aXRFbGVtZW50YWxUeXBlKG5vZGUpOwotICAgIH0KLSAgICAKLSAgICB2aXNpdEFycmF5VHlwZShu
b2RlKQotICAgIHsKLSAgICAgICAgdGhpcy52aXNpdEVsZW1lbnRhbFR5cGUobm9kZSk7Ci0gICAg
ICAgIG5vZGUubnVtRWxlbWVudHMudmlzaXQodGhpcyk7Ci0gICAgfQotICAgIAotICAgIHZpc2l0
QXNzaWdubWVudChub2RlKQotICAgIHsKLSAgICAgICAgbm9kZS5saHMudmlzaXQodGhpcyk7Ci0g
ICAgICAgIG5vZGUucmhzLnZpc2l0KHRoaXMpOwotICAgIH0KLSAgICAKLSAgICB2aXNpdFZhcmlh
YmxlUmVmKG5vZGUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2aXNpdFJldHVybihub2RlKQot
ICAgIHsKLSAgICAgICAgaWYgKG5vZGUudmFsdWUpCi0gICAgICAgICAgICBub2RlLnZhbHVlLnZp
c2l0KHRoaXMpOwotICAgIH0KLSAgICAKLSAgICB2aXNpdEludExpdGVyYWwobm9kZSkKLSAgICB7
Ci0gICAgfQotICAgIAotICAgIHZpc2l0Q2FsbEV4cHJlc3Npb24obm9kZSkKLSAgICB7Ci0gICAg
ICAgIGZvciAobGV0IHR5cGVBcmd1bWVudCBvZiBub2RlLnR5cGVBcmd1bWVudHMpCi0gICAgICAg
ICAgICB0eXBlQXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgICAgIGZvciAobGV0IGFyZ3VtZW50
IG9mIG5vZGUuYXJndW1lbnRMaXN0KQotICAgICAgICAgICAgYXJndW1lbnQudmlzaXQodGhpcyk7
Ci0gICAgfQotICAgIAotICAgIHZpc2l0RnVuY3Rpb25MaWtlQmxvY2sobm9kZSkKLSAgICB7Ci0g
ICAgICAgIGZvciAobGV0IGFyZ3VtZW50IG9mIG5vZGUuYXJndW1lbnRMaXN0KQotICAgICAgICAg
ICAgYXJndW1lbnQudmlzaXQodGhpcyk7Ci0gICAgICAgIGZvciAobGV0IHBhcmFtZXRlciBvZiBu
b2RlLnBhcmFtZXRlcnMpCi0gICAgICAgICAgICBwYXJhbWV0ZXIudmlzaXQodGhpcyk7Ci0gICAg
ICAgIG5vZGUuYm9keS52aXNpdCh0aGlzKTsKLSAgICB9Ci19Ci0KSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNiBAQCBs
b2FkKCJSZXdyaXRlci5qcyIpOwogbG9hZCgiVmlzaXRvci5qcyIpOwogbG9hZCgiRVZhbHVlLmpz
Iik7CiAKLWxvYWQoIkFMU3ludGF4RXJyb3IuanMiKTsKLWxvYWQoIkFMVHlwZUVycm9yLmpzIik7
CiBsb2FkKCJBZGRyZXNzU3BhY2UuanMiKTsKIGxvYWQoIkFycmF5UmVmVHlwZS5qcyIpOwogbG9h
ZCgiQXJyYXlUeXBlLmpzIik7CkBAIC05OCwzICs5Niw1IEBAIGxvYWQoIlVuaWZpY2F0aW9uQ29u
dGV4dC5qcyIpOwogbG9hZCgiVmFyaWFibGVEZWNsLmpzIik7CiBsb2FkKCJWYXJpYWJsZVJlZi5q
cyIpOwogbG9hZCgiVmlzaXRpbmdTZXQuanMiKTsKK2xvYWQoIldTeW50YXhFcnJvci5qcyIpOwor
bG9hZCgiV1R5cGVFcnJvci5qcyIpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvQ2FsbEZ1bmN0aW9uLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0NhbGxGdW5jdGlvbi5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvQ2FsbEZ1bmN0aW9uLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3
ICszNSw3IEBAIGZ1bmN0aW9uIGNhbGxGdW5jdGlvbkJ5UmVmKHByb2dyYW0sIG5hbWUKICAgICB9
KTsKICAgICBsZXQgZnVuYyA9IHJlc29sdmVJbmxpbmVkRnVuY3Rpb24ocHJvZ3JhbSwgbmFtZSwg
dHlwZUFyZ3VtZW50cywgYXJndW1lbnRUeXBlcyk7CiAgICAgaWYgKCFmdW5jKQotICAgICAgICB0
aHJvdyBuZXcgQUxUeXBlRXJyb3IoIjxjYWxsRnVuY3Rpb24+IiwgIkNhbm5vdCByZXNvbHZlIGZ1
bmN0aW9uIGNhbGwgIiArIG5hbWUgKyAiPCIgKyB0eXBlQXJndW1lbnRzICsgIj4oIiArIGFyZ3Vt
ZW50TGlzdCArICIpIik7CisgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKCI8Y2FsbEZ1bmN0
aW9uPiIsICJDYW5ub3QgcmVzb2x2ZSBmdW5jdGlvbiBjYWxsICIgKyBuYW1lICsgIjwiICsgdHlw
ZUFyZ3VtZW50cyArICI+KCIgKyBhcmd1bWVudExpc3QgKyAiKSIpOwogICAgIGZvciAobGV0IGkg
PSAwOyBpIDwgZnVuYy5wYXJhbWV0ZXJzLmxlbmd0aDsgKytpKQogICAgICAgICBmdW5jLnBhcmFt
ZXRlcnNbaV0uZVB0ci5jb3B5RnJvbShhcmd1bWVudExpc3RbaV0pOwogICAgIHJldHVybiBuZXcg
RXZhbHVhdG9yKHByb2dyYW0pLnZpc2l0RnVuY3Rpb25Cb2R5KGZ1bmMuYm9keSk7CkluZGV4OiBU
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHJldmlzaW9uIDIyMTM5MSkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTY0LDEwICs2NCwxMCBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAg
ICAgICAgICAgICAgICAgcGFyYW1ldGVyVHlwZS52aXNpdChub3RpY2VUeXBlVmFyaWFibGUpOwog
ICAgICAgICAgICAgZm9yIChsZXQgdHlwZVBhcmFtZXRlciBvZiBzaWduYXR1cmUudHlwZVBhcmFt
ZXRlcnMpIHsKICAgICAgICAgICAgICAgICBpZiAoIXNldC5oYXModHlwZVBhcmFtZXRlcikpCi0g
ICAgICAgICAgICAgICAgICAgIHRocm93IEFMVHlwZUVycm9yKHR5cGVQYXJhbWV0ZXIub3JpZ2lu
Lm9yaWdpblN0cmluZywgIlR5cGUgcGFyYW1ldGVyIHRvIHByb3RvY29sIHNpZ25hdHVyZSBub3Qg
aW5mZXJyYWJsZSBmcm9tIHZhbHVlIHBhcmFtZXRlcnMiKTsKKyAgICAgICAgICAgICAgICAgICAg
dGhyb3cgV1R5cGVFcnJvcih0eXBlUGFyYW1ldGVyLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJUeXBl
IHBhcmFtZXRlciB0byBwcm90b2NvbCBzaWduYXR1cmUgbm90IGluZmVycmFibGUgZnJvbSB2YWx1
ZSBwYXJhbWV0ZXJzIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoIXNldC5oYXMo
bm9kZS50eXBlVmFyaWFibGUpKQotICAgICAgICAgICAgICAgIHRocm93IG5ldyBBTFR5cGVFcnJv
cihzaWduYXR1cmUub3JpZ2luLm9yaWdpblN0cmluZywgIlByb3RvY29sJ3MgdHlwZSB2YXJpYWJs
ZSBub3QgbWVudGlvbmVkIGluIHNpZ25hdHVyZSIpOworICAgICAgICAgICAgICAgIHRocm93IG5l
dyBXVHlwZUVycm9yKHNpZ25hdHVyZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUHJvdG9jb2wncyB0
eXBlIHZhcmlhYmxlIG5vdCBtZW50aW9uZWQgaW4gc2lnbmF0dXJlIik7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgCkBAIC03OCwxMCArNzgsMTAgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0
b3IgewogICAgICAgICAgICAgbGV0IHJlc3VsdCA9IG5vZGUudHlwZUFyZ3VtZW50c1tpXS52aXNp
dCh0aGlzKTsKICAgICAgICAgICAgIGlmIChhcmd1bWVudElzVHlwZSkgewogICAgICAgICAgICAg
ICAgIGlmICghdHlwZUFyZ3VtZW50c1tpXS5pbmhlcml0cyh0eXBlQXJndW1lbnRzW2ldKSkKLSAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFMVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJp
bmcsICJUeXBlIGFyZ3VtZW50IGRvZXMgbm90IGluaGVyaXQgcHJvdG9jb2wiKTsKKyAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iob3JpZ2luLm9yaWdpblN0cmluZywgIlR5
cGUgYXJndW1lbnQgZG9lcyBub3QgaW5oZXJpdCBwcm90b2NvbCIpOwogICAgICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5lcXVhbHModHlwZVBhcmFtZXRlcnNb
aV0udHlwZSkpCi0gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBBTFR5cGVFcnJvcihvcmln
aW4ub3JpZ2luU3RyaW5nLCAiV3JvbmcgdHlwZSBmb3IgY29uc3RleHByIik7CisgICAgICAgICAg
ICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5vcmlnaW5TdHJpbmcsICJXcm9u
ZyB0eXBlIGZvciBjb25zdGV4cHIiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
QEAgLTEwMSwxMyArMTAxLDEzIEBAIGNsYXNzIENoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIGlmICghbm9kZS5lbGVtZW50VHlw
ZS53aXRoUmVjdXJzaXZlbHlJbnN0YW50aWF0ZWRJbW1lZGlhdGVzLmlzUHJpbWl0aXZlKQotICAg
ICAgICAgICAgdGhyb3cgbmV3IEFMVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywg
IklsbGVnYWwgcG9pbnRlciB0byBub24tcHJpbWl0aXZlIHR5cGUiKTsKKyAgICAgICAgICAgIHRo
cm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIklsbGVnYWwgcG9p
bnRlciB0byBub24tcHJpbWl0aXZlIHR5cGUiKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRBcnJh
eVR5cGUobm9kZSkKICAgICB7CiAgICAgICAgIGlmICghbm9kZS5udW1FbGVtZW50cy5pc0NvbnN0
ZXhwcikKLSAgICAgICAgICAgIHRocm93IG5ldyBBTFR5cGVFcnJvcihub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJBcnJheSBsZW5ndGggbXVzdCBiZSBjb25zdGV4cHIiKTsKKyAgICAgICAgICAg
IHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkFycmF5IGxl
bmd0aCBtdXN0IGJlIGNvbnN0ZXhwciIpOwogICAgIH0KICAgICAKICAgICB2aXNpdEFzc2lnbm1l
bnQobm9kZSkKQEAgLTExNiw3ICsxMTYsNyBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRv
ciB7CiAgICAgICAgIGxldCBsaHNUeXBlID0gbm9kZS5saHMudmlzaXQodGhpcyk7CiAgICAgICAg
IGxldCByaHNUeXBlID0gbm9kZS5yaHMudmlzaXQodGhpcyk7CiAgICAgICAgIGlmICghbGhzVHlw
ZS5lcXVhbHMocmhzVHlwZSkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQUxUeXBlRXJyb3Iobm9k
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVHlwZSBtaXNtYXRjaCBpbiBhc3NpZ25tZW50OiAiICsg
bGhzVHlwZSArICIgdmVyc3VzICIgKyByaHNUeXBlKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBX
VHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIlR5cGUgbWlzbWF0Y2ggaW4gYXNz
aWdubWVudDogIiArIGxoc1R5cGUgKyAiIHZlcnN1cyAiICsgcmhzVHlwZSk7CiAgICAgICAgIHJl
dHVybiBsaHNUeXBlOwogICAgIH0KICAgICAKQEAgLTEzMiwxMiArMTMyLDEyIEBAIGNsYXNzIENo
ZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgIGlmICghcmVzdWx0VHlwZSkKICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk51bGwgcmVzdWx0IHR5cGUgZnJvbSAiICsg
bm9kZS52YWx1ZSk7CiAgICAgICAgICAgICBpZiAoIW5vZGUuZnVuYy5yZXR1cm5UeXBlLmVxdWFs
cyhyZXN1bHRUeXBlKSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQUxUeXBlRXJyb3Iobm9k
ZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVHJ5aW5nIHRvIHJldHVybiAiICsgcmVzdWx0VHlwZSAr
ICIgaW4gYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgIiArIGZ1bmMucmV0dXJuVHlwZSk7CisgICAg
ICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5n
LCAiVHJ5aW5nIHRvIHJldHVybiAiICsgcmVzdWx0VHlwZSArICIgaW4gYSBmdW5jdGlvbiB0aGF0
IHJldHVybnMgIiArIGZ1bmMucmV0dXJuVHlwZSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIGlmICghZnVuYy5yZXR1cm5UeXBlLmVxdWFscyh0aGlz
Ll9wcm9ncmFtLmludHJpbnNpY3Mudm9pZCkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQUxUeXBl
RXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiTm9uLXZvaWQgZnVuY3Rpb24gbXVzdCBy
ZXR1cm4gYSB2YWx1ZSIpOworICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5v
cmlnaW4ub3JpZ2luU3RyaW5nLCAiTm9uLXZvaWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSB2YWx1
ZSIpOwogICAgIH0KICAgICAKICAgICB2aXNpdEludExpdGVyYWwobm9kZSkKQEAgLTE4Myw3ICsx
ODMsNyBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgICAgICAgICAg
bm9kZS5uYW1lLCBub2RlLnR5cGVBcmd1bWVudHMsIGFyZ3VtZW50VHlwZXMpOwogICAgICAgICB9
CiAgICAgICAgIGlmICghb3ZlcmxvYWQpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQUxUeXBlRXJy
b3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRGlkIG5vdCBmaW5kIGZ1bmN0aW9uIGZvciBj
YWxsIik7CisgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmln
aW5TdHJpbmcsICJEaWQgbm90IGZpbmQgZnVuY3Rpb24gZm9yIGNhbGwiKTsKICAgICAgICAgbm9k
ZS5mdW5jID0gb3ZlcmxvYWQuZnVuYzsKICAgICAgICAgbm9kZS5hY3R1YWxUeXBlQXJndW1lbnRz
ID0gb3ZlcmxvYWQudHlwZUFyZ3VtZW50cy5tYXAoVHlwZVJlZi53cmFwKTsKICAgICAgICAgbGV0
IHJlc3VsdCA9IG92ZXJsb2FkLmZ1bmMucmV0dXJuVHlwZS5zdWJzdGl0dXRlVG9VbmlmaWNhdGlv
bigKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludHJpbnNpY3MuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwko
cmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmlu
c2ljcy5qcwkod29ya2luZyBjb3B5KQpAQCAtNzEsNyArNzEsNyBAQCBjbGFzcyBJbnRyaW5zaWNz
IHsKICAgICB7CiAgICAgICAgIGxldCBpbnRyaW5zaWMgPSB0aGlzLl9tYXAuZ2V0KHRoaW5nLnRv
U3RyaW5nKCkpOwogICAgICAgICBpZiAoIWludHJpbnNpYykKLSAgICAgICAgICAgIHRocm93IG5l
dyBBTFR5cGVFcnJvcih0aGluZy5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVW5yZWNvZ25pemVkIGlu
dHJpbnNpYzogIiArIHRoaW5nKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKHRo
aW5nLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJVbnJlY29nbml6ZWQgaW50cmluc2ljOiAiICsgdGhp
bmcpOwogICAgICAgICBpbnRyaW5zaWModGhpbmcpOwogICAgIH0KIH0KSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xleGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0xleGVyLmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MZXhlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcg
KzEzOCw3IEBAIGNsYXNzIExleGVyIHsKICAgICAKICAgICBmYWlsKGVycm9yKQogICAgIHsKLSAg
ICAgICAgdGhyb3cgbmV3IEFMU3ludGF4RXJyb3IodGhpcy5vcmlnaW5TdHJpbmcsIGVycm9yKTsK
KyAgICAgICAgdGhyb3cgbmV3IFdTeW50YXhFcnJvcih0aGlzLm9yaWdpblN0cmluZywgZXJyb3Ip
OwogICAgIH0KICAgICAKICAgICBiYWNrdHJhY2tpbmdTY29wZShjYWxsYmFjaykKQEAgLTE0Nyw3
ICsxNDcsNyBAQCBjbGFzcyBMZXhlciB7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICByZXR1
cm4gY2FsbGJhY2soKTsKICAgICAgICAgfSBjYXRjaCAoZSkgewotICAgICAgICAgICAgaWYgKGUg
aW5zdGFuY2VvZiBBTFN5bnRheEVycm9yKSB7CisgICAgICAgICAgICBpZiAoZSBpbnN0YW5jZW9m
IFdTeW50YXhFcnJvcikgewogICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTsKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgIH0KSW5kZXg6IFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hbWVDb250ZXh0LmpzCShyZXZpc2lvbiAyMjEzOTEp
CisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYW1lQ29udGV4dC5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBjbGFzcyBOYW1lQ29udGV4dCB7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRoaXMuX21hcC5oYXModGhpbmcubmFt
ZSkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQUxUeXBlRXJyb3IodGhpbmcub3JpZ2luLm9yaWdp
blN0cmluZywgIkR1cGxpY2F0ZSBuYW1lOiAiICsgdGhpbmcubmFtZSk7CisgICAgICAgICAgICB0
aHJvdyBuZXcgV1R5cGVFcnJvcih0aGluZy5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRHVwbGljYXRl
IG5hbWU6ICIgKyB0aGluZy5uYW1lKTsKICAgICAgICAgdGhpcy5fbWFwLnNldCh0aGluZy5uYW1l
LCB0aGluZyk7CiAgICAgfQogICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTmFtZVJlc29sdmVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL05hbWVSZXNvbHZlci5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTmFtZVJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0xMjks
NyArMTI5LDcgQEAgY2xhc3MgTmFtZVJlc29sdmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAg
ICAgICBpZiAodHlwZUFyZ3VtZW50IGluc3RhbmNlb2YgVHlwZU9yVmFyaWFibGVSZWYpIHsKICAg
ICAgICAgICAgICAgICBsZXQgdGhpbmcgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQoTm90RnVuYywg
dHlwZUFyZ3VtZW50Lm5hbWUpOwogICAgICAgICAgICAgICAgIGlmICghdGhpbmcpCi0gICAgICAg
ICAgICAgICAgICAgIG5ldyBBTFR5cGVFcnJvcih0eXBlQXJndW1lbnQub3JpZ2luLm9yaWdpblN0
cmluZywgIkNvdWxkIG5vdCBmaW5kIHR5cGUgb3IgdmFyaWFibGUgbmFtZWQgIiArIHR5cGVBcmd1
bWVudC5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgbmV3IFdUeXBlRXJyb3IodHlwZUFyZ3Vt
ZW50Lm9yaWdpbi5vcmlnaW5TdHJpbmcsICJDb3VsZCBub3QgZmluZCB0eXBlIG9yIHZhcmlhYmxl
IG5hbWVkICIgKyB0eXBlQXJndW1lbnQubmFtZSk7CiAgICAgICAgICAgICAgICAgaWYgKHRoaW5n
IGluc3RhbmNlb2YgVmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAgdHlwZUFyZ3VtZW50W2ld
ID0gbmV3IFZhcmlhYmxlUmVmKHR5cGVBcmd1bWVudC5vcmlnaW4sIHR5cGVBcmd1bWVudC5uYW1l
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UKQEAgLTEzOCw3ICsxMzgsNyBAQCBjbGFzcyBOYW1l
UmVzb2x2ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYg
KHR5cGVBcmd1bWVudFtpXSBpbnN0YW5jZW9mIFZhbHVlCiAgICAgICAgICAgICAgICAgJiYgIXR5
cGVBcmd1bWVudFtpXS5pc0NvbnN0ZXhwcikKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQUxU
eXBlRXJyb3IodHlwZUFyZ3VtZW50W2ldLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJFeHBlY3RlZCBj
b25zdGV4cHIiKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcih0eXBlQXJn
dW1lbnRbaV0ub3JpZ2luLm9yaWdpblN0cmluZywgIkV4cGVjdGVkIGNvbnN0ZXhwciIpOwogICAg
ICAgICB9CiAgICAgfQogICAgIApAQCAtMTQ4LDIxICsxNDgsMjEgQEAgY2xhc3MgTmFtZVJlc29s
dmVyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgICAgIAogICAgICAgICBsZXQgdHlwZSA9IHRoaXMu
X25hbWVDb250ZXh0LmdldChUeXBlLCBub2RlLm5hbWUpOwogICAgICAgICBpZiAoIXR5cGUpCi0g
ICAgICAgICAgICB0aHJvdyBuZXcgQUxUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5n
LCAiQ291bGQgbm90IGZpbmQgdHlwZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsKKyAgICAgICAgICAg
IHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkNvdWxkIG5v
dCBmaW5kIHR5cGUgbmFtZWQgIiArIG5vZGUubmFtZSk7CiAgICAgICAgIGlmICghdGhpcy5fbmFt
ZUNvbnRleHQuaXNEZWZpbmVkKHR5cGUpKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFMVHlwZUVy
cm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIklsbGVnYWwgZm9yd2FyZCB1c2Ugb2YgdHlw
ZSBuYW1lZCAiICsgbm9kZS5uYW1lKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9y
KG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIklsbGVnYWwgZm9yd2FyZCB1c2Ugb2YgdHlwZSBu
YW1lZCAiICsgbm9kZS5uYW1lKTsKICAgICAgICAgbm9kZS50eXBlID0gdHlwZTsKICAgICAgICAg
CiAgICAgICAgIGlmICh0eXBlLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCAhPSBub2RlLnR5cGVBcmd1
bWVudHMubGVuZ3RoKQotICAgICAgICAgICAgdGhyb3cgbmV3IEFMVHlwZUVycm9yKG5vZGUub3Jp
Z2luLm9yaWdpblN0cmluZywgIldyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50cyIpOworICAg
ICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAi
V3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIik7CiAgICAgICAgIGZvciAobGV0IGkgPSAw
OyBpIDwgdHlwZS50eXBlUGFyYW1ldGVycy5sZW5ndGg7ICsraSkgewogICAgICAgICAgICAgbGV0
IHBhcmFtZXRlcklzVHlwZSA9IHR5cGUudHlwZVBhcmFtZXRlcnNbaV0gaW5zdGFuY2VvZiBUeXBl
VmFyaWFibGU7CiAgICAgICAgICAgICBsZXQgYXJndW1lbnRJc1R5cGUgPSBub2RlLnR5cGVBcmd1
bWVudHNbaV0gaW5zdGFuY2VvZiBUeXBlOwogICAgICAgICAgICAgbm9kZS50eXBlQXJndW1lbnRz
W2ldLnZpc2l0KHRoaXMpOwogICAgICAgICAgICAgaWYgKHBhcmFtZXRlcklzVHlwZSAmJiAhYXJn
dW1lbnRJc1R5cGUpCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFMVHlwZUVycm9yKG5vZGUu
b3JpZ2luLm9yaWdpblN0cmluZywgIkV4cGVjdGVkIHR5cGUsIGJ1dCBnb3QgdmFsdWUgYXQgYXJn
dW1lbnQgIyIgKyBpKTsKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2Rl
Lm9yaWdpbi5vcmlnaW5TdHJpbmcsICJFeHBlY3RlZCB0eXBlLCBidXQgZ290IHZhbHVlIGF0IGFy
Z3VtZW50ICMiICsgaSk7CiAgICAgICAgICAgICBpZiAoIXBhcmFtZXRlcklzVHlwZSAmJiBhcmd1
bWVudElzVHlwZSkKLSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQUxUeXBlRXJyb3Iobm9kZS5v
cmlnaW4ub3JpZ2luU3RyaW5nLCAiRXhwZWN0ZWQgdmFsdWUsIGJ1dCBnb3QgdHlwZSBhdCBhcmd1
bWVudCAjIiArIGkpOworICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUu
b3JpZ2luLm9yaWdpblN0cmluZywgIkV4cGVjdGVkIHZhbHVlLCBidXQgZ290IHR5cGUgYXQgYXJn
dW1lbnQgIyIgKyBpKTsKICAgICAgICAgfQogCiAgICAgICAgIHN1cGVyLnZpc2l0VHlwZVJlZihu
b2RlKTsKQEAgLTE3OSw3ICsxNzksNyBAQCBjbGFzcyBOYW1lUmVzb2x2ZXIgZXh0ZW5kcyBWaXNp
dG9yIHsKICAgICB7CiAgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLl9uYW1lQ29udGV4dC5nZXQo
VmFsdWUsIG5vZGUubmFtZSk7CiAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgdGhy
b3cgbmV3IEFMVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0cmluZywgIkNvdWxkIG5vdCBm
aW5kIHZhcmlhYmxlIG5hbWVkICIgKyBub2RlLm5hbWUpOworICAgICAgICAgICAgdGhyb3cgbmV3
IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiQ291bGQgbm90IGZpbmQgdmFy
aWFibGUgbmFtZWQgIiArIG5vZGUubmFtZSk7CiAgICAgICAgIG5vZGUudmFyaWFibGUgPSByZXN1
bHQ7CiAgICAgfQogICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFy
c2UuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUGFyc2Uu
anMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Bh
cnNlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw4ICsyOSw4IEBAIGZ1bmN0aW9uIHBhcnNlKHBy
b2dyYW0sIG9yaWdpbiwgbGluZU51bWIKICAgICBsZXQgbGV4ZXIgPSBuZXcgTGV4ZXIob3JpZ2lu
LCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KTsKICAgICAKICAgICAvLyBUaGUgaGFyZGVzdCBwYXJ0
IG9mIGRlYWxpbmcgd2l0aCBDLWxpa2UgbGFuZ3VhZ2VzIGlzIHBhcnNpbmcgdmFyaWFibGUgZGVj
bGFyYXRpb24gc3RhdGVtZW50cy4KLSAgICAvLyBMZXQncyBjb25zaWRlciBpZiB0aGlzIGhhcHBl
bnMgaW4gQXJyYXlMYW5nLiBIZXJlIGFyZSB0aGUgdmFsaWQgc3RhdGVtZW50cyBpbiBBcnJheUxh
bmcgdGhhdAotICAgIC8vIGJlZ2luIHdpdGggYW4gaWRlbnRpZmllciwgaWYgd2UgYXNzdW1lIHRo
YXQgYW55IGV4cHJlc3Npb24gY2FuIGJlIGEgc3RhbmRhbG9uZSBzdGF0ZW1lbnQuCisgICAgLy8g
TGV0J3MgY29uc2lkZXIgaWYgdGhpcyBoYXBwZW5zIGluIFdTTC4gSGVyZSBhcmUgdGhlIHZhbGlk
IHN0YXRlbWVudHMgaW4gV1NMIHRoYXQgYmVpbmcgd2l0aCBhbgorICAgIC8vIGlkZW50aWZpZXIs
IGlmIHdlIGFzc3VtZSB0aGF0IGFueSBleHByZXNzaW9uIGNhbiBiZSBhIHN0YW5kYWxvbmUgc3Rh
dGVtZW50LgogICAgIC8vCiAgICAgLy8gICAgIHg7CiAgICAgLy8gICAgIHggPGJpbm9wPiB5OwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RhbmRhcmRMaWJyYXJ5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFy
eS5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U3RhbmRhcmRMaWJyYXJ5LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAKIC8v
IE5PVEU6IFRoZSBuZXh0IGxpbmUgaXMgbGluZSAyOCwgYW5kIHdlIHJlbHkgb24gdGhpcyBpbiBQ
cmVwYXJlLmpzLgogY29uc3Qgc3RhbmRhcmRMaWJyYXJ5ID0gYAotLy8gVGhpcyBpcyB0aGUgQXJy
YXlMYW5nIHN0YW5kYXJkIGxpYnJhcnkuIEltcGxlbWVudGF0aW9ucyBvZiBhbGwgb2YgdGhlc2Ug
dGhpbmdzIGFyZSBpbgorLy8gVGhpcyBpcyB0aGUgV1NMIHN0YW5kYXJkIGxpYnJhcnkuIEltcGxl
bWVudGF0aW9ucyBvZiBhbGwgb2YgdGhlc2UgdGhpbmdzIGFyZSBpbgogLy8gSW50cmluc2ljcy5q
cy4KIAogLy8gTmVlZCB0byBib290c3RyYXAgdm9pZCBmaXJzdC4KSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1N0cnVjdFR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwkocmV2aXNpb24gMjIxMzkxKQorKysg
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3RydWN0VHlwZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsNyBAQCBjbGFzcyBTdHJ1Y3RUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAg
YWRkKGZpZWxkKQogICAgIHsKICAgICAgICAgaWYgKHRoaXMuX2ZpZWxkcy5oYXMoZmllbGQubmFt
ZSkpCi0gICAgICAgICAgICB0aHJvdyBuZXcgQUxUeXBlRXJyb3IoZmllbGQub3JpZ2luLm9yaWdp
blN0cmluZywgIkR1cGxpY2F0ZSBmaWVsZCBuYW1lOiAiICsgZmllbGQubmFtZSk7CisgICAgICAg
ICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihmaWVsZC5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiRHVw
bGljYXRlIGZpZWxkIG5hbWU6ICIgKyBmaWVsZC5uYW1lKTsKICAgICAgICAgdGhpcy5fZmllbGRz
LnNldChmaWVsZC5uYW1lLCBmaWVsZCk7CiAgICAgfQogICAgIApAQCAtNTksNyArNTksNyBAQCBj
bGFzcyBTdHJ1Y3RUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgaW5zdGFudGlhdGUodHlwZUFyZ3Vt
ZW50cykKICAgICB7CiAgICAgICAgIGlmICh0eXBlQXJndW1lbnRzLmxlbmd0aCAhPSB0aGlzLnR5
cGVQYXJhbWV0ZXJzLmxlbmd0aCkKLSAgICAgICAgICAgIHRocm93IG5ldyBBTFR5cGVFcnJvcihv
cmlnaW4ub3JpZ2luU3RyaW5nLCAiV3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzIHRvIGlu
c3RhbnRpYXRpb24iKTsKKyAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG9yaWdpbi5v
cmlnaW5TdHJpbmcsICJXcm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHMgdG8gaW5zdGFudGlh
dGlvbiIpOwogICAgICAgICAKICAgICAgICAgbGV0IHN1YnN0aXR1dGlvbiA9IFN1YnN0aXR1dGlv
bi5tYXBwaW5nKHRoaXMudHlwZVBhcmFtZXRlcnMsIHR5cGVBcmd1bWVudHMpOwogICAgICAgICBs
ZXQgaW5zdGFudGlhdGVJbW1lZGlhdGVzID0gbmV3IEluc3RhbnRpYXRlSW1tZWRpYXRlcygpOwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZURlZlJlc29sdmVyLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGVEZWZSZXNvbHZl
ci5qcwkocmV2aXNpb24gMjIxMzkxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VHlwZURlZlJlc29sdmVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIGNsYXNz
IFR5cGVEZWZSZXNvbHZlciBleHRlbmRzIFZpc2l0b3IgewogICAgICAgICAgICAgICAgIGZvciAo
bGV0IGkgPSAwOyBpIDwgbm9kZS50eXBlQXJndW1lbnRzLmxlbmd0aDsgKytpKQogICAgICAgICAg
ICAgICAgICAgICBub2RlLnR5cGVBcmd1bWVudHNbaV0udW5pZnkodW5pZmljYXRpb25Db250ZXh0
LCBub2RlLnR5cGUudHlwZVBhcmFtZXRlcnNbaV0pOwogICAgICAgICAgICAgICAgIGlmICghdW5p
ZmljYXRpb25Db250ZXh0LnZlcmlmeSgpKQotICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
QUxUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiVHlwZSByZWZlcmVuY2UgdG8g
YSB0eXBlIGRlZmluaXRpb24gdmlvbGF0ZXMgcHJvdG9jb2wgY29uc3RyYWludHMiKTsKKyAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2luU3Ry
aW5nLCAiVHlwZSByZWZlcmVuY2UgdG8gYSB0eXBlIGRlZmluaXRpb24gdmlvbGF0ZXMgcHJvdG9j
b2wgY29uc3RyYWludHMiKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBsZXQg
bmV3VHlwZSA9IG5vZGUudHlwZS50eXBlLnN1YnN0aXR1dGVUb1VuaWZpY2F0aW9uKG5vZGUudHlw
ZS50eXBlUGFyYW1ldGVycywgdW5pZmljYXRpb25Db250ZXh0KTsKICAgICAgICAgICAgICAgICBu
ZXdUeXBlLnZpc2l0KHRoaXMpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
VmlzaXRpbmdTZXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVmlzaXRpbmdTZXQuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1Zpc2l0aW5nU2V0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw3
IEBAIGNsYXNzIFZpc2l0aW5nU2V0IHsKICAgICBkb1Zpc2l0KGl0ZW0sIGNhbGxiYWNrKQogICAg
IHsKICAgICAgICAgaWYgKHRoaXMuX3NldC5oYXMoaXRlbSkpCi0gICAgICAgICAgICB0aHJvdyBu
ZXcgQUxUeXBlRXJyb3IoaXRlbS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiUmVjdXJzaXZlICIgKyBp
dGVtLmtpbmQpOworICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3IoaXRlbS5vcmlnaW4u
b3JpZ2luU3RyaW5nLCAiUmVjdXJzaXZlICIgKyBpdGVtLmtpbmQpOwogICAgICAgICB0aGlzLl9z
ZXQuYWRkKGl0ZW0pOwogICAgICAgICB0cnkgewogICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNr
KCk7CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9XU3ludGF4RXJyb3IuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvV1N5bnRheEVycm9y
LmpzCShyZXZpc2lvbiAyMjEzOTEpCShmcm9tIFRvb2xzL0FycmF5TGFuZ1JJL0FMU3ludGF4RXJy
b3IuanM6MjIxMzkxKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvV1N5bnRheEVy
cm9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgQUxTeW50
YXhFcnJvciBleHRlbmRzIEVycm9yIHsKKyAgICBjb25zdHJ1Y3RvcihvcmlnaW5TdHJpbmcsIG1l
c3NhZ2UpCisgICAgeworICAgICAgICBzdXBlcigiU3ludGF4IGVycm9yIGF0ICIgKyBvcmlnaW5T
dHJpbmcgKyAiOiAiICsgbWVzc2FnZSk7CisgICAgICAgIHRoaXMub3JpZ2luU3RyaW5nID0gb3Jp
Z2luU3RyaW5nOworICAgICAgICB0aGlzLnN5bnRheEVycm9yTWVzc2FnZSA9IG1lc3NhZ2U7Cisg
ICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9XU3ludGF4RXJy
b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvV1N5bnRh
eEVycm9yLmpzCShyZXZpc2lvbiAyMjEzOTEpCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9XU3ludGF4RXJyb3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAq
LwogInVzZSBzdHJpY3QiOwogCi1jbGFzcyBBTFN5bnRheEVycm9yIGV4dGVuZHMgRXJyb3Igewor
Y2xhc3MgV1N5bnRheEVycm9yIGV4dGVuZHMgRXJyb3IgewogICAgIGNvbnN0cnVjdG9yKG9yaWdp
blN0cmluZywgbWVzc2FnZSkKICAgICB7CiAgICAgICAgIHN1cGVyKCJTeW50YXggZXJyb3IgYXQg
IiArIG9yaWdpblN0cmluZyArICI6ICIgKyBtZXNzYWdlKTsKSW5kZXg6IFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1dUeXBlRXJyb3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvV1R5cGVFcnJvci5qcwkocmV2aXNpb24gMjIxMzkxKQkoZnJvbSBU
b29scy9BcnJheUxhbmdSSS9BTFR5cGVFcnJvci5qczoyMjEzOTEpCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9XVHlwZUVycm9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ug
c3RyaWN0IjsKKworY2xhc3MgQUxUeXBlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CisgICAgY29uc3Ry
dWN0b3Iob3JpZ2luU3RyaW5nLCBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgc3VwZXIoIlR5cGUg
ZXJyb3IgYXQgIiArIG9yaWdpblN0cmluZyArICI6ICIgKyBtZXNzYWdlKTsKKyAgICAgICAgdGhp
cy5vcmlnaW5TdHJpbmcgPSBvcmlnaW5TdHJpbmc7CisgICAgICAgIHRoaXMudHlwZUVycm9yTWVz
c2FnZSA9IG1lc3NhZ2U7CisgICAgfQorfQorCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9XVHlwZUVycm9yLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1dUeXBlRXJyb3IuanMJKHJldmlzaW9uIDIyMTM5MSkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1dUeXBlRXJyb3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcg
KzI0LDcgQEAKICAqLwogInVzZSBzdHJpY3QiOwogCi1jbGFzcyBBTFR5cGVFcnJvciBleHRlbmRz
IEVycm9yIHsKK2NsYXNzIFdUeXBlRXJyb3IgZXh0ZW5kcyBFcnJvciB7CiAgICAgY29uc3RydWN0
b3Iob3JpZ2luU3RyaW5nLCBtZXNzYWdlKQogICAgIHsKICAgICAgICAgc3VwZXIoIlR5cGUgZXJy
b3IgYXQgIiArIG9yaWdpblN0cmluZyArICI6ICIgKyBtZXNzYWdlKTsK
</data>
<flag name="review"
          id="339678"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>