<?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>212309</bug_id>
          
          <creation_ts>2020-05-23 17:35:47 -0700</creation_ts>
          <short_desc>Extended Color Cleanup: Move SimpleColor into its own files</short_desc>
          <delta_ts>2020-05-24 12:14:14 -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>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>annulen</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1655668</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-23 17:35:47 -0700</bug_when>
    <thetext>It would be more straightforward and easier to maintain if SimpleColor were in its now files like ExtenedColor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655753</commentid>
    <comment_count>1</comment_count>
      <attachid>400168</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-24 11:07:04 -0700</bug_when>
    <thetext>Created attachment 400168
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655754</commentid>
    <comment_count>2</comment_count>
      <attachid>400169</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-24 11:08:40 -0700</bug_when>
    <thetext>Created attachment 400169
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655755</commentid>
    <comment_count>3</comment_count>
      <attachid>400170</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-24 11:09:53 -0700</bug_when>
    <thetext>Created attachment 400170
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655756</commentid>
    <comment_count>4</comment_count>
      <attachid>400171</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-24 11:12:27 -0700</bug_when>
    <thetext>Created attachment 400171
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655757</commentid>
    <comment_count>5</comment_count>
      <attachid>400172</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-05-24 11:20:02 -0700</bug_when>
    <thetext>Created attachment 400172
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655759</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-05-24 12:13:06 -0700</bug_when>
    <thetext>Committed r262110: &lt;https://trac.webkit.org/changeset/262110&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 400172.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1655760</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-05-24 12:14:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/63581322&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400168</attachid>
            <date>2020-05-24 11:07:04 -0700</date>
            <delta_ts>2020-05-24 11:08:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212309-20200524110703.patch</filename>
            <type>text/plain</type>
            <size>95259</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAyMC0wNS0yNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogTW92ZSBTaW1wbGVDb2xvciBpbnRvIGl0cyBvd24gZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjMwOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgU2ltcGxlQ29sb3IgaW50byBpdHMg
b3duIGZpbGVzLiBJdCdzIGFib3V0IHRpbWUuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpt
YWtlVW5QcmVtdWx0aXBsaWVkUkdCQSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2xv
ckZsb2F0VG9SR0JBQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUkdCQTMy
RnJvbUZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUkdCQUZyb21IU0xB
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSR0JBRnJvbUNNWUtBKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9ySFRNTCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWNpbWFsRGlnaXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6ZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlv
bkZvckNTUyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzI6OnNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6
OlNpbXBsZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjp2
YWx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cmVk
Q29tcG9uZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9y
OjpncmVlbkNvbXBvbmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVDb2xvcjo6Ymx1ZUNvbXBvbmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhhQ29tcG9uZW50QXNGbG9hdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6aXNPcGFxdWUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmlzVmlzaWJsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmdldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZhc3RNdWx0aXBseUJ5MjU1KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmZhc3REaXZpZGVCeTI1NSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjptYWtlUkdCKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSR0JBKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6IENv
cGllZCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCBjb25zdCk6Cisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGbG9hdFRvUkdCQUJ5
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIZXhDb2xvckludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpwYXJzZUhleENvbG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmRpZmZlcmVuY2VTcXVhcmVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmZpbmROYW1lZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0
b3I9KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXJpYWxpemVkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjc3NUZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVG
b3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpsaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFy
ayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNEYXJrIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodG5lc3MgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRDb21wb25lbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBU2ltcGxl
Q29sb3JMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9T
UkdCQUNvbXBvbmVudHNMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpl
eHRlbmRlZENvbG9yc0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdBc1ZhbGlkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0V4dGVuZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmg6IENvcGllZCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmguCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnRBc0Zsb2F0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpjb2xvcldpdGhBbHBoYSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Z2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yRmxvYXRUb1JHQkFCeXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
On5Db2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNWYWxpZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNPcGFxdWUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6cmVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpncmVlbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6Ymx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6YWxwaGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
QXNGbG9hdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BhcXVl
Q29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzU2VtYW50
aWMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzRXh0ZW5kZWQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldFJHQik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0SXNTZW1hbnRpYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjplcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZl
Um91bmRpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9y
V2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpyZ2IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OmlzQmxhY2tDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6aXNXaGl0ZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6IERl
bGV0ZWQuCisKIDIwMjAtMDUtMjQgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTEZDXVtURkNdIElnbm9yZSBzZWN0aW9uIGJvcmRlcnMgZXZlbiB3aGVuIGJvcmRl
ciBjb2xsYXBzZSBpcyBvZmYuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2MjEw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEx
ODQsNiArMTE4NCw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVuZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3Qu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9TdHJpbmdUcnVuY2F0b3IuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RhYlNpemUuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaApJbmRleDogU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlz
aW9uIDI2MjEwOCkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xOTM3LDYgKzE5MzcsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1Jv
dW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNh
dG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9y
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MjEw
OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjI0MSw2ICsyMjQxLDcgQEAKIAkJN0MyRkE2MTIxRUE5NUEzQzAw
QTAzMTA4IC8qIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MyRkE2MTAxRUE5NUEzMjAwQTAzMTA4IC8q
IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMzBEOTg0MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fi
b3J0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MzMEQ5ODAxRjgxNUFDMTAwMjY4MzU2IC8qIEpTQWJvcnRDb250cm9sbGVyLmggKi87
IH07CiAJCTdDMzBEOTg2MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzMwRDk4MTFGODE1QUMx
MDAyNjgzNTYgLyogSlNBYm9ydFNpZ25hbC5oICovOyB9OworCQk3QzMxQzg4RTI0N0FENTk1MDA1
QkYzMTkgLyogU2ltcGxlQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDMzFDODhDMjQ3QUQ1OTUwMDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMzMwQTAy
MURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzMwQTAxMURGOEZBQzYw
MEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzMzMEEwODFERjlGOTUxMDBEMzM5
NUMgLyogSlNQb3NpdGlvbk9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMzMwQTA2MURGOUY5NTEwMEQzMzk1QyAvKiBKU1Bvc2l0aW9uT3B0
aW9ucy5oICovOyB9OwogCQk3QzNBOTFFNjFDOTYzQjg4MDBEMUE3RTMgLyogQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzNBOTFFNTFDOTYzQjg4MDBEMUE3RTMgLyogQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk5NzQsNiAr
OTk3NSw4IEBACiAJCTdDMzBEOTgwMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fib3J0Q29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMwRDk4MTFGODE1QUMxMDAyNjgzNTYg
LyogSlNBYm9ydFNpZ25hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fi
b3J0U2lnbmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzBEOTgyMUY4MTVB
QzIwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQWJvcnRTaWduYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3QzMxQzg4QTI0N0FENTk0MDA1QkYzMTkgLyogU2ltcGxlQ29sb3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlQ29sb3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3QzMxQzg4QzI0N0FENTk1MDA1QkYzMTkgLyogU2ltcGxlQ29s
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlQ29sb3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0MzMzBBMDMxREY5RTk1QjAwRDMzOTVDIC8qIFBvc2l0aW9uT3B0aW9ucy5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gUG9zaXRpb25PcHRpb25zLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MzMzBBMDUxREY5Rjk1MTAwRDMzOTVDIC8qIEpTUG9zaXRpb25PcHRpb25zLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUG9zaXRpb25PcHRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NTk0LDYgKzI1NTk3LDggQEAKIAkJCQlBNzNG
OTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuaCAqLywKIAkJCQkwRjNERDQ0RDEy
RjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUEx
QjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKKwkJCQk3QzMxQzg4QTI0N0FENTk0MDA1QkYz
MTkgLyogU2ltcGxlQ29sb3IuY3BwICovLAorCQkJCTdDMzFDODhDMjQ3QUQ1OTUwMDVCRjMxOSAv
KiBTaW1wbGVDb2xvci5oICovLAogCQkJCUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3Vy
Y2VCdWZmZXJQcml2YXRlLmggKi8sCiAJCQkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNv
dXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCAqLywKIAkJCQk3QzgzREU4NTFEMDRDQkQ0MDBGRUJD
RjMgLyogU3ByaW5nU29sdmVyLmggKi8sCkBAIC0zMzUzNyw2ICszMzU0Miw3IEBACiAJCQkJQ0Qz
MzZGNjQxN0ZBMEE0RDAwREREQ0QwIC8qIFZpZGVvVHJhY2tQcml2YXRlQVZGLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDRDMzNkY2ODE3RkEwQUM2MDBERERDRDAgLyogVmlkZW9UcmFja1ByaXZhdGVB
VkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDhCNUE0MzE4MEQxNDlBMDA4QjhFNjUgLyog
VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTdDMzFDODhFMjQ3QUQ1OTUwMDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDcwRTgxRDExQkYyNzY1NjAwMUZEQTQ4IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFT
dHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUNFRjQxOENGMTE3OTY3OEMwMDlEMTEyQyAvKiBW
aWV3cG9ydEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGOUE4MzkxOEEwNDZBQzAw
QUVCODhBIC8qIFZpZXdwb3J0Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIx
MDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcxICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBj
b25zdGV4cHIgU2ltcGxlQ29sb3IgbGlnaHRlbmVkQmxhY2sgeyAweEZGNTQ1NDU0IH07CiBzdGF0
aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGRhcmtlbmVkV2hpdGUgeyAweEZGQUJBQkFCIH07CiAK
LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywg
dW5zaWduZWQgYSwgYm9vbCBjZWlsaW5nID0gdHJ1ZSkKLXsKLSAgICByZXR1cm4gZmFzdERpdmlk
ZUJ5MjU1KGNlaWxpbmcgPyBjICogYSArIDI1NCA6IGMgKiBhKTsKLX0KLQotc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEp
Ci17Ci0gICAgcmV0dXJuIChmYXN0TXVsdGlwbHlCeTI1NShjKSArIGEgLSAxKSAvIGE7Ci19Ci0K
LVJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEs
IGJvb2wgY2VpbGluZykKLXsKLSAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVsdGlwbGllZENoYW5u
ZWwociwgYSwgY2VpbGluZyksIHByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEsIGNlaWxpbmcpLCBw
cmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBhLCBjZWlsaW5nKSwgYSk7Ci19Ci0KLVJHQkEzMiBtYWtl
UHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyIHBpeGVsQ29sb3IpCi17Ci0gICAgaWYgKHBpeGVsQ29s
b3IuaXNPcGFxdWUoKSkKLSAgICAgICAgcmV0dXJuIHBpeGVsQ29sb3I7Ci0gICAgcmV0dXJuIG1h
a2VQcmVtdWx0aXBsaWVkUkdCQShwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9y
LmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9y
LmFscGhhQ29tcG9uZW50KCkpOwotfQotCi1SR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEo
aW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCi17Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHVucHJl
bXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSksIHVu
cHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOwotfQotCi1SR0JBMzIgbWFrZVVuUHJlbXVs
dGlwbGllZFJHQkEoUkdCQTMyIHBpeGVsQ29sb3IpCi17Ci0gICAgaWYgKHBpeGVsQ29sb3IuaXNW
aXNpYmxlKCkgJiYgIXBpeGVsQ29sb3IuaXNPcGFxdWUoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VV
blByZW11bHRpcGxpZWRSR0JBKHBpeGVsQ29sb3IucmVkQ29tcG9uZW50KCksIHBpeGVsQ29sb3Iu
Z3JlZW5Db21wb25lbnQoKSwgcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCksIHBpeGVsQ29sb3Iu
YWxwaGFDb21wb25lbnQoKSk7Ci0gICAgcmV0dXJuIHBpeGVsQ29sb3I7Ci19Ci0KLXN0YXRpYyBp
bnQgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKLXsKLSAgICAvLyBXZSB1c2UgbHJvdW5k
ZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91
bmRpbmcKLSAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50Pihs
cm91bmRmKDI1NS4wZiAqIGYpKSwgMjU1KSk7Ci19Ci0KLVJHQkEzMiBtYWtlUkdCQTMyRnJvbUZs
b2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotewotICAgIHJldHVybiBt
YWtlUkdCQShjb2xvckZsb2F0VG9SR0JBQnl0ZShyKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZyks
IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGIpLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShhKSk7Ci19Ci0K
LVJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGZsb2F0IGh1ZSwgZmxvYXQgc2F0dXJhdGlvbiwgZmxv
YXQgbGlnaHRuZXNzLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3Rv
ciA9IDI1NS4wOwotICAgIEZsb2F0Q29tcG9uZW50cyBmbG9hdFJlc3VsdCA9IGhzbFRvU1JHQih7
IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KTsKLSAgICByZXR1cm4gbWFrZVJH
QkEoCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMF0gKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMV0gKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMl0gKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbM10gKiBzY2FsZUZhY3Rv
cikpOwotfQotCi1SR0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxv
YXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKLXsKLSAgICBkb3VibGUgY29sb3JzID0gMSAtIGs7Ci0g
ICAgaW50IHIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAq
ICgxIC0gYykpKTsKLSAgICBpbnQgZyA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1Niwg
MCkgKiAoY29sb3JzICogKDEgLSBtKSkpOwotICAgIGludCBiID0gc3RhdGljX2Nhc3Q8aW50Pihu
ZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIHkpKSk7Ci0gICAgcmV0dXJuIG1ha2VS
R0JBKHIsIGcsIGIsIHN0YXRpY19jYXN0PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIGEpKTsK
LX0KLQogLy8gb3JpZ2luYWxseSBtb3ZlZCBoZXJlIGZyb20gdGhlIENTUyBwYXJzZXIKIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgogc3RhdGljIGlubGluZSBib29sIHBhcnNlSGV4
Q29sb3JJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgs
IFJHQkEzMiYgcmdiKQpAQCAtMjkyLDEzICsyMjcsNiBAQCBDb2xvciYgQ29sb3I6Om9wZXJhdG9y
PShDb2xvciYmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotU3RyaW5nIFNpbXBsZUNv
bG9yOjpzZXJpYWxpemF0aW9uRm9ySFRNTCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzT3BhcXVlKCkp
Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBvbmVudCgpLCAyLCBM
b3dlcmNhc2UpLCBoZXgoZ3JlZW5Db21wb25lbnQoKSwgMiwgTG93ZXJjYXNlKSwgaGV4KGJsdWVD
b21wb25lbnQoKSwgMiwgTG93ZXJjYXNlKSk7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JD
U1MoKTsKLX0KLQogU3RyaW5nIENvbG9yOjpzZXJpYWxpemVkKCkgY29uc3QKIHsKICAgICBpZiAo
aXNFeHRlbmRlZCgpKQpAQCAtMzA2LDM1ICsyMzQsNiBAQCBTdHJpbmcgQ29sb3I6OnNlcmlhbGl6
ZWQoKSBjb25zdAogICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0aW9uRm9ySFRNTCgpOwogfQog
Ci1zdGF0aWMgY2hhciBkZWNpbWFsRGlnaXQodW5zaWduZWQgbnVtYmVyKQotewotICAgIEFTU0VS
VChudW1iZXIgPCAxMCk7Ci0gICAgcmV0dXJuICcwJyArIG51bWJlcjsKLX0KLQotc3RhdGljIHN0
ZDo6YXJyYXk8Y2hhciwgND4gZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1ZSh1
aW50OF90IGFscGhhKQotewotICAgIEFTU0VSVChhbHBoYSA+IDApOwotICAgIEFTU0VSVChhbHBo
YSA8IDB4RkYpOwotICAgIGlmICgoKGFscGhhICogMTAwICsgMHg3RikgLyAweEZGICogMHhGRiAr
IDUwKSAvIDEwMCAhPSBhbHBoYSkKLSAgICAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoYWxw
aGEgKiAxMCAvIDB4RkYgJSAxMCksIGRlY2ltYWxEaWdpdChhbHBoYSAqIDEwMCAvIDB4RkYgJSAx
MCksIGRlY2ltYWxEaWdpdCgoYWxwaGEgKiAxMDAwICsgMHg3RikgLyAweEZGICUgMTApLCAnXDAn
IH0gfTsKLSAgICBpZiAoaW50IHRoaXJkRGlnaXQgPSAoYWxwaGEgKiAxMDAgKyAweDdGKSAvIDB4
RkYgJSAxMCkKLSAgICAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoYWxwaGEgKiAxMCAvIDB4
RkYpLCBkZWNpbWFsRGlnaXQodGhpcmREaWdpdCksICdcMCcsICdcMCcgfSB9OwotICAgIHJldHVy
biB7IHsgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwICsgMHg3RikgLyAweEZGKSwgJ1wwJywgJ1ww
JywgJ1wwJyB9IH07Ci19Ci0KLVN0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvckNT
UygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChhbHBoYUNvbXBvbmVudCgpKSB7Ci0gICAgY2FzZSAw
OgotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygicmdiYSgiLCByZWRDb21wb25lbnQoKSwgIiwg
IiwgZ3JlZW5Db21wb25lbnQoKSwgIiwgIiwgYmx1ZUNvbXBvbmVudCgpLCAiLCAwKSIpOwotICAg
IGNhc2UgMHhGRjoKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInJnYigiLCByZWRDb21wb25l
bnQoKSwgIiwgIiwgZ3JlZW5Db21wb25lbnQoKSwgIiwgIiwgYmx1ZUNvbXBvbmVudCgpLCAnKScp
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2JhKCIsIHJlZENv
bXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29tcG9uZW50KCks
ICIsIDAuIiwgZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1ZShhbHBoYUNvbXBv
bmVudCgpKS5kYXRhKCksICcpJyk7Ci0gICAgfQotfQotCiBTdHJpbmcgQ29sb3I6OmNzc1RleHQo
KSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCkBAIC0zNDIsMTMgKzI0MSw2IEBAIFN0
cmluZyBDb2xvcjo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRp
b25Gb3JDU1MoKTsKIH0KIAotU3RyaW5nIFJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQoKSBjb25zdAotewotICAgIGlmIChhbHBoYUNvbXBvbmVudCgpIDwgMHhGRikKLSAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkQ29tcG9uZW50KCksIDIpLCBoZXgo
Z3JlZW5Db21wb25lbnQoKSwgMiksIGhleChibHVlQ29tcG9uZW50KCksIDIpLCBoZXgoYWxwaGFD
b21wb25lbnQoKSwgMikpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBv
bmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVudCgp
LCAyKSk7Ci19Ci0KIFN0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25z
dAogewogICAgIC8vIEZJWE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29sb3JzLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjIxMDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRXh0
ZW5kZWRDb2xvci5oIgorI2luY2x1ZGUgIlNpbXBsZUNvbG9yLmgiCiAjaW5jbHVkZSA8YWxnb3Jp
dGhtPgogI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KQEAgLTU2
LDY5ICs1Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEZsb2F0Q29tcG9uZW50
czsKIAotLy8gQ29sb3IgdmFsdWUgd2l0aCA4LWJpdCBjb21wb25lbnRzIGZvciByZWQsIGdyZWVu
LCBibHVlLCBhbmQgYWxwaGEuCi0vLyBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBzdG9yZWQgYXMg
YSAzMi1iaXQgaW50ZWdlciwgd2l0aCBhbHBoYSBpbiB0aGUgaGlnaCBiaXRzOiBBUkdCLgotY2xh
c3MgU2ltcGxlQ29sb3IgewotcHVibGljOgotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvcih1aW50
MzJfdCB2YWx1ZSA9IDApIDogbV92YWx1ZSB7IHZhbHVlIH0geyB9Ci0KLSAgICBjb25zdGV4cHIg
dWludDMyX3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLSAgICBjb25zdGV4
cHIgdWludDhfdCByZWRDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDE2OyB9
Ci0gICAgY29uc3RleHByIHVpbnQ4X3QgZ3JlZW5Db21wb25lbnQoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlID4+IDg7IH0KLSAgICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9u
ZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA+PiAyNDsgfQotCi0gICAgY29uc3RleHByIGZs
b2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0PihhbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KLQotICAgIGNvbnN0ZXhwciBib29sIGlz
T3BhcXVlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9Ci0gICAg
Y29uc3RleHByIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQo
KTsgfQotCi0gICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29uc3Q7Ci0gICAgU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoKSBjb25zdDsKLSAgICBTdHJpbmcgc2VyaWFsaXphdGlv
bkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdDsKLQotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xv
ciBjb2xvcldpdGhBbHBoYSh1aW50OF90IGFscGhhKSBjb25zdCB7IHJldHVybiB7IChtX3ZhbHVl
ICYgMHgwMEZGRkZGRikgfCBhbHBoYSA8PCAyNCB9OyB9Ci0KLSAgICB0ZW1wbGF0ZTxzdGQ6OnNp
emVfdCBOPgotICAgIGNvbnN0ZXhwciB1aW50OF90IGdldCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KE4gPCA0KTsKLSAgICAgICAgaWYgY29uc3RleHByICghTikKLSAgICAg
ICAgICAgIHJldHVybiByZWRDb21wb25lbnQoKTsKLSAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIg
KE4gPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBncmVlbkNvbXBvbmVudCgpOwotICAgICAgICBl
bHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAyKQotICAgICAgICAgICAgcmV0dXJuIGJsdWVDb21wb25l
bnQoKTsKLSAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMykKLSAgICAgICAgICAgIHJl
dHVybiBhbHBoYUNvbXBvbmVudCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1aW50MzJfdCBt
X3ZhbHVlIHsgMCB9OwotfTsKLQotYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yLCBTaW1wbGVD
b2xvcik7Ci1ib29sIG9wZXJhdG9yIT0oU2ltcGxlQ29sb3IsIFNpbXBsZUNvbG9yKTsKLQotLy8g
RklYTUU6IFJlbW92ZSB0aGlzIGFmdGVyIG1pZ3JhdGluZyB0byB0aGUgbmV3IG5hbWUuCi11c2lu
ZyBSR0JBMzIgPSBTaW1wbGVDb2xvcjsKLQotY29uc3RleHByIFJHQkEzMiBtYWtlUkdCKGludCBy
LCBpbnQgZywgaW50IGIpOwotY29uc3RleHByIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSk7Ci0KLVJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEsIGJvb2wgY2VpbGluZyA9IHRydWUpOwotUkdCQTMyIG1ha2VQcmVt
dWx0aXBsaWVkUkdCQShSR0JBMzIpOwotUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGlu
dCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKLVJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdC
QShSR0JBMzIpOwotCi1XRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkEzMkZyb21GbG9hdHMo
ZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7Ci1XRUJDT1JFX0VYUE9SVCBSR0JB
MzIgbWFrZVJHQkFGcm9tSFNMQShmbG9hdCBoLCBmbG9hdCBzLCBmbG9hdCBsLCBmbG9hdCBhKTsK
LVJHQkEzMiBtYWtlUkdCQUZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9h
dCBrLCBmbG9hdCBhKTsKLQotdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGludCk7
Ci11aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZmxvYXQpOwotCiBjbGFzcyBDb2xv
ciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0zNTAsOSArMjg4
LDYgQEAgQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sbwogCiBpbnQgZGlm
ZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCi11aW50MTZfdCBm
YXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSk7Ci11aW50MTZfdCBmYXN0RGl2aWRlQnky
NTUodWludDE2X3QpOwotCiAjaWYgVVNFKENHKQogV0VCQ09SRV9FWFBPUlQgQ0dDb2xvclJlZiBj
YWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJik7CiAjZW5kaWYKQEAgLTM2MCwxNiArMjk1LDYgQEAg
V0VCQ09SRV9FWFBPUlQgQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKAogV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENvbG9y
Jik7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgQ29sb3JTcGFjZSk7CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29s
b3IgYSwgU2ltcGxlQ29sb3IgYikKLXsKLSAgICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFsdWUo
KTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xv
ciBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KIGlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQogewogICAgIGlmIChhLmlzRXh0ZW5k
ZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSkKQEAgLTM5OCwzMCArMzIzLDYgQEAgaW5saW5lIHVuc2ln
bmVkIENvbG9yOjpoYXNoKCkgY29uc3QKICAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JE
YXRhLnJnYmFBbmRGbGFncyk7CiB9CiAKLWlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwoaW50IHZhbHVlKQotewotICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbigy
NTUsIHZhbHVlKSk7Ci19Ci0KLWlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5u
ZWwoZmxvYXQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oMjU1
LmYsIHN0ZDo6cm91bmQodmFsdWUpKSk7Ci19Ci0KLWlubGluZSB1aW50MTZfdCBmYXN0TXVsdGlw
bHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gKHZhbHVlIDw8IDgpIC0gdmFs
dWU7Ci19Ci0KLWlubGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QgdmFsdWUp
Ci17Ci0gICAgLy8gV2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0aG0gZm9yIGRp
dmlzaW9uIGJ5IDI1NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2
LWJpdCB2YWx1ZXMuCi0gICAgLy8gRklYTUU6IFNpbmNlIHRoaXMgZ2l2ZXMgYWNjdXJhdGUgcmVz
dWx0cyBmb3IgMTYtYml0IHZhbHVlcywgd2Ugc2hvdWxkIGdldCB0aGlzIG9wdGltaXphdGlvbiBp
bnRvIGNvbXBpbGVycyBsaWtlIGNsYW5nLgotICAgIHVpbnQxNl90IGFwcHJveGltYXRpb24gPSB2
YWx1ZSA+PiA4OwotICAgIHVpbnQxNl90IHJlbWFpbmRlciA9IHZhbHVlIC0gKGFwcHJveGltYXRp
b24gKiAyNTUpICsgMTsKLSAgICByZXR1cm4gYXBwcm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4g
OCk7Ci19Ci0KIGlubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlV
c2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAogewog
ICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5h
dGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CkBAIC01MzQsMzMgKzQzNSw5IEBA
IE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAgICByZXR1cm4gQ29s
b3IgeyBTaW1wbGVDb2xvciB7IHZhbHVlIH0gfTsKIH0KIAotY29uc3RleHByIFJHQkEzMiBtYWtl
UkdCKGludCByLCBpbnQgZywgaW50IGIpCi17Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcsIGIs
IDB4RkYpOwotfQotCi1jb25zdGV4cHIgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50
IGIsIGludCBhKQotewotICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om1h
eCgwLCBzdGQ6Om1pbihhLCAweEZGKSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAw
eEZGKSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAweEZGKSkgPDwgOCB8IHN0ZDo6
bWF4KDAsIHN0ZDo6bWluKGIsIDB4RkYpKSkgfTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiBuYW1lc3BhY2UgV1RGIHsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNv
cmU6OkNvbG9yPjsKIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29sb3I+
OwogfQotCi1uYW1lc3BhY2Ugc3RkIHsKLQotdGVtcGxhdGU8PgotY2xhc3MgdHVwbGVfc2l6ZTxX
ZWJDb3JlOjpTaW1wbGVDb2xvcj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6
OnNpemVfdCwgND4gewotfTsKLQotdGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KLWNsYXNzIHR1cGxl
X2VsZW1lbnQ8TiwgV2ViQ29yZTo6U2ltcGxlQ29sb3I+IHsKLXB1YmxpYzoKLSAgICB1c2luZyB0
eXBlID0gdWludDhfdDsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlzaW9uIDI2MjEwNCkJKGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOjI2MjEwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2xvci5oIgor
CisjaW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJIYXNoVG9vbHMuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhw
ciBTaW1wbGVDb2xvciBsaWdodGVuZWRCbGFjayB7IDB4RkY1NDU0NTQgfTsKK3N0YXRpYyBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgZGFya2VuZWRXaGl0ZSB7IDB4RkZBQkFCQUIgfTsKKworc3RhdGlj
IGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25l
ZCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKQoreworICAgIHJldHVybiBmYXN0RGl2aWRlQnkyNTUo
Y2VpbGluZyA/IGMgKiBhICsgMjU0IDogYyAqIGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAg
ICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKworUkdCQTMy
IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSwgYm9vbCBj
ZWlsaW5nKQoreworICAgIHJldHVybiBtYWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBh
LCBjZWlsaW5nKSwgcHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSwgY2VpbGluZyksIHByZW11bHRp
cGxpZWRDaGFubmVsKGIsIGEsIGNlaWxpbmcpLCBhKTsKK30KKworUkdCQTMyIG1ha2VQcmVtdWx0
aXBsaWVkUkdCQShSR0JBMzIgcGl4ZWxDb2xvcikKK3sKKyAgICBpZiAocGl4ZWxDb2xvci5pc09w
YXF1ZSgpKQorICAgICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKKyAgICByZXR1cm4gbWFrZVByZW11
bHRpcGxpZWRSR0JBKHBpeGVsQ29sb3IucmVkQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuZ3JlZW5D
b21wb25lbnQoKSwgcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYWxwaGFD
b21wb25lbnQoKSk7Cit9CisKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwg
aW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBs
aWVkQ2hhbm5lbChyLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0
aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7Cit9CisKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVk
UkdCQShSR0JBMzIgcGl4ZWxDb2xvcikKK3sKKyAgICBpZiAocGl4ZWxDb2xvci5pc1Zpc2libGUo
KSAmJiAhcGl4ZWxDb2xvci5pc09wYXF1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuUHJlbXVs
dGlwbGllZFJHQkEocGl4ZWxDb2xvci5yZWRDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5ncmVlbkNv
bXBvbmVudCgpLCBwaXhlbENvbG9yLmJsdWVDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5hbHBoYUNv
bXBvbmVudCgpKTsKKyAgICByZXR1cm4gcGl4ZWxDb2xvcjsKK30KKworc3RhdGljIGludCBjb2xv
ckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQoreworICAgIC8vIFdlIHVzZSBscm91bmRmIGFuZCAy
NTUgaW5zdGVhZCBvZiBuZXh0YWZ0ZXJmKDI1NiwgMCkgdG8gbWF0Y2ggQ0cncyByb3VuZGluZwor
ICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYo
MjU1LjBmICogZikpLCAyNTUpKTsKK30KKworUkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JB
KGNvbG9yRmxvYXRUb1JHQkFCeXRlKHIpLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShnKSwgY29sb3JG
bG9hdFRvUkdCQUJ5dGUoYiksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGEpKTsKK30KKworUkdCQTMy
IG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBzYXR1cmF0aW9uLCBmbG9hdCBsaWdo
dG5lc3MsIGZsb2F0IGFscGhhKQoreworICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMjU1
LjA7CisgICAgRmxvYXRDb21wb25lbnRzIGZsb2F0UmVzdWx0ID0gaHNsVG9TUkdCKHsgaHVlLCBz
YXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pOworICAgIHJldHVybiBtYWtlUkdCQSgKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1swXSAqIHNjYWxlRmFjdG9yKSwKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1sxXSAqIHNjYWxlRmFjdG9yKSwKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1syXSAqIHNjYWxlRmFjdG9yKSwKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1szXSAqIHNjYWxlRmFjdG9yKSk7Cit9
CisKK1JHQkEzMiBtYWtlUkdCQUZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBm
bG9hdCBrLCBmbG9hdCBhKQoreworICAgIGRvdWJsZSBjb2xvcnMgPSAxIC0gazsKKyAgICBpbnQg
ciA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEgLSBj
KSkpOworICAgIGludCBnID0gc3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChj
b2xvcnMgKiAoMSAtIG0pKSk7CisgICAgaW50IGIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRl
cigyNTYsIDApICogKGNvbG9ycyAqICgxIC0geSkpKTsKKyAgICByZXR1cm4gbWFrZVJHQkEociwg
ZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5leHRhZnRlcigyNTYsIDApICogYSkpOworfQorCisv
LyBvcmlnaW5hbGx5IG1vdmVkIGhlcmUgZnJvbSB0aGUgQ1NTIHBhcnNlcgordGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VIZXhDb2xvcklu
dGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMy
JiByZ2IpCit7CisgICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAh
PSA2ICYmIGxlbmd0aCAhPSA4KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdW5zaWduZWQg
dmFsdWUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdChuYW1lW2ldKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgdmFsdWUgPDw9IDQ7CisgICAgICAgIHZhbHVlIHw9IHRvQVNDSUlI
ZXhWYWx1ZShuYW1lW2ldKTsKKyAgICB9CisgICAgaWYgKGxlbmd0aCA9PSA2KSB7CisgICAgICAg
IHJnYiA9IHsgMHhGRjAwMDAwMCB8IHZhbHVlIH07CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBpZiAobGVuZ3RoID09IDgpIHsKKyAgICAgICAgLy8gV2UgcGFyc2VkIHRoZSB2YWx1
ZXMgaW50byBSR0JBIG9yZGVyLCBidXQgdGhlIFJHQkEzMiB0eXBlCisgICAgICAgIC8vIGV4cGVj
dHMgdGhlbSB0byBiZSBpbiBBUkdCIG9yZGVyLCBzbyB3ZSByaWdodCByb3RhdGUgZWlnaHQgYml0
cy4KKyAgICAgICAgcmdiID0geyB2YWx1ZSA8PCAyNCB8IHZhbHVlID4+IDggfTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChsZW5ndGggPT0gNCkgeworICAgICAgICAvLyAj
YWJjZCBjb252ZXJ0cyB0byBkZGFhYmJjYyBpbiBSR0JBMzIuCisgICAgICAgIHJnYiA9IHsgKHZh
bHVlICYgMHhGKSA8PCAyOCB8ICh2YWx1ZSAmIDB4RikgPDwgMjQKKyAgICAgICAgICAgIHwgKHZh
bHVlICYgMHhGMDAwKSA8PCA4IHwgKHZhbHVlICYgMHhGMDAwKSA8PCA0CisgICAgICAgICAgICB8
ICh2YWx1ZSAmIDB4RjAwKSA8PCA0IHwgKHZhbHVlICYgMHhGMDApCisgICAgICAgICAgICB8ICh2
YWx1ZSAmIDB4RjApIHwgKHZhbHVlICYgMHhGMCkgPj4gNCB9OworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgLy8gI2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjCisgICAgcmdiID0geyAw
eEZGMDAwMDAwCisgICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDEyIHwgKHZhbHVlICYgMHhG
MDApIDw8IDgKKyAgICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4IHwgKHZhbHVlICYgMHhGMCkg
PDwgNAorICAgICAgICB8ICh2YWx1ZSAmIDB4RikgPDwgNCB8ICh2YWx1ZSAmIDB4RikgfTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBMQ2hh
ciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikKK3sKKyAgICByZXR1cm4gcGFy
c2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwgcmdiKTsKK30KKworYm9vbCBDb2xvcjo6
cGFyc2VIZXhDb2xvcihjb25zdCBVQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzIm
IHJnYikKK3sKKyAgICByZXR1cm4gcGFyc2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwg
cmdiKTsKK30KKworYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUs
IFJHQkEzMiYgcmdiKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Cisg
ICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobmFtZS5pczhC
aXQoKSkKKyAgICAgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpLCBu
YW1lLmxlbmd0aCgpLCByZ2IpOworICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFj
dGVyczE2KCksIG5hbWUubGVuZ3RoKCksIHJnYik7Cit9CisKK2Jvb2wgQ29sb3I6OnBhcnNlSGV4
Q29sb3IoY29uc3QgU3RyaW5nVmlldyYgbmFtZSwgUkdCQTMyJiByZ2IpCit7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChuYW1lLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gcGFyc2VI
ZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCksIG5hbWUubGVuZ3RoKCksIHJnYik7CisgICAgcmV0
dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5ndGgoKSwgcmdi
KTsKK30KKworaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiBjMSwgY29uc3QgQ29s
b3ImIGMyKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFzc3VtaW5nIHRoYXQgdGhlIGNvbG9y
cyBhcmUgaW4gdGhlIHNhbWUgY29sb3JzcGFjZS4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
cHJvYmFibHkgcmV0dXJuIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBidXQgbWFueSBvZiB0aGUg
Y2FsbAorICAgIC8vIHNpdGVzIGhhdmUgcGlja2VkIGNvbXBhcmlzb24gdmFsdWVzIGJhc2VkIG9u
IGZlZWwuIFdlJ2QgbmVlZCB0byBicmVhayBvdXQKKyAgICAvLyBvdXIgbG9nYXJpdGhtIHRhYmxl
cyB0byBjaGFuZ2UgdGhlbSA6KQorICAgIGludCBjMVJlZCA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMx
LmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMxLnJlZCgpOworICAgIGludCBjMUdyZWVuID0g
YzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBjMS5ncmVl
bigpOworICAgIGludCBjMUJsdWUgPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCku
Ymx1ZSgpICogMjU1IDogYzEuYmx1ZSgpOworICAgIGludCBjMlJlZCA9IGMyLmlzRXh0ZW5kZWQo
KSA/IGMyLmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMyLnJlZCgpOworICAgIGludCBjMkdy
ZWVuID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBj
Mi5ncmVlbigpOworICAgIGludCBjMkJsdWUgPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVu
ZGVkKCkuYmx1ZSgpICogMjU1IDogYzIuYmx1ZSgpOworICAgIGludCBkUiA9IGMxUmVkIC0gYzJS
ZWQ7CisgICAgaW50IGRHID0gYzFHcmVlbiAtIGMyR3JlZW47CisgICAgaW50IGRCID0gYzFCbHVl
IC0gYzJCbHVlOworICAgIHJldHVybiBkUiAqIGRSICsgZEcgKiBkRyArIGRCICogZEI7Cit9CisK
K3N0YXRpYyBpbmxpbmUgY29uc3QgTmFtZWRDb2xvciogZmluZE5hbWVkQ29sb3IoY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIGNoYXIgYnVmZmVyWzY0XTsgLy8gZWFzaWx5IGJpZyBlbm91Z2gg
Zm9yIHRoZSBsb25nZXN0IGNvbG9yIG5hbWUKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxl
bmd0aCgpOworICAgIGlmIChsZW5ndGggPiBzaXplb2YoYnVmZmVyKSAtIDEpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
eworICAgICAgICBVQ2hhciBjID0gbmFtZVtpXTsKKyAgICAgICAgaWYgKCFjIHx8ICFXVEY6Omlz
QVNDSUkoYykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYnVmZmVyW2ld
ID0gdG9BU0NJSUxvd2VyKHN0YXRpY19jYXN0PGNoYXI+KGMpKTsKKyAgICB9CisgICAgYnVmZmVy
W2xlbmd0aF0gPSAnXDAnOworICAgIHJldHVybiBmaW5kQ29sb3IoYnVmZmVyLCBsZW5ndGgpOwor
fQorCitDb2xvcjo6Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lWzBd
ID09ICcjJykgeworICAgICAgICBSR0JBMzIgY29sb3I7CisgICAgICAgIGJvb2wgdmFsaWQ7CisK
KyAgICAgICAgaWYgKG5hbWUuaXM4Qml0KCkpCisgICAgICAgICAgICB2YWxpZCA9IHBhcnNlSGV4
Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsaWQgPSBwYXJzZUhleENvbG9yKG5hbWUuY2hh
cmFjdGVyczE2KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0gMSwgY29sb3IpOworCisgICAgICAgIGlm
ICh2YWxpZCkKKyAgICAgICAgICAgIHNldFJHQihjb2xvcik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGZvdW5kQ29sb3IgPSBmaW5kTmFtZWRDb2xvcihuYW1lKSkKKyAgICAgICAg
ICAgIHNldFJHQih7IGZvdW5kQ29sb3ItPkFSR0JWYWx1ZSB9KTsKKyAgICB9Cit9CisKK0NvbG9y
OjpDb2xvcihjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGlmIChuYW1lWzBdID09ICcjJykgewor
ICAgICAgICBTaW1wbGVDb2xvciBjb2xvcjsKKyAgICAgICAgaWYgKHBhcnNlSGV4Q29sb3IocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCZuYW1lWzFdKSwgc3RkOjpzdHJsZW4oJm5hbWVb
MV0pLCBjb2xvcikpCisgICAgICAgICAgICBzZXRSR0IoY29sb3IpOworICAgIH0gZWxzZSBpZiAo
YXV0byogZm91bmRDb2xvciA9IGZpbmRDb2xvcihuYW1lLCBzdHJsZW4obmFtZSkpKQorICAgICAg
ICBzZXRSR0IoeyBmb3VuZENvbG9yLT5BUkdCVmFsdWUgfSk7Cit9CisKK0NvbG9yOjpDb2xvcihj
b25zdCBDb2xvciYgb3RoZXIpCisgICAgOiBtX2NvbG9yRGF0YShvdGhlci5tX2NvbG9yRGF0YSkK
K3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yLT5yZWYoKTsKK30KKworQ29sb3I6OkNvbG9yKENvbG9yJiYgb3RoZXIpCit7CisgICAgKnRo
aXMgPSBXVEZNb3ZlKG90aGVyKTsKK30KKworQ29sb3I6OkNvbG9yKGZsb2F0IGMxLCBmbG9hdCBj
MiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAg
Ly8gWmVybyB0aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3Np
Z25zIHRoZQorICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgZXh0ZW5kZWRDb2xv
ciBwb2ludGVyIGJlbG93LgorICAgIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IDA7CisgICAg
YXV0byBleHRlbmRlZENvbG9yUmVmID0gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMs
IGFscGhhLCBjb2xvclNwYWNlKTsKKyAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yID0gJmV4
dGVuZGVkQ29sb3JSZWYubGVha1JlZigpOworICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOworfQor
CitDb2xvciYgQ29sb3I6Om9wZXJhdG9yPShjb25zdCBDb2xvciYgb3RoZXIpCit7CisgICAgaWYg
KCp0aGlzID09IG90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBpZiAoaXNFeHRl
bmRlZCgpKQorICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigpOworCisg
ICAgbV9jb2xvckRhdGEgPSBvdGhlci5tX2NvbG9yRGF0YTsKKworICAgIGlmIChpc0V4dGVuZGVk
KCkpCisgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJlZigpOworICAgIHJldHVy
biAqdGhpczsKK30KKworQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oQ29sb3ImJiBvdGhlcikKK3sK
KyAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGlm
IChpc0V4dGVuZGVkKCkpCisgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVm
KCk7CisKKyAgICBtX2NvbG9yRGF0YSA9IG90aGVyLm1fY29sb3JEYXRhOworICAgIG90aGVyLm1f
Y29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IGludmFsaWRSR0JBQ29sb3I7CisKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK1N0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvckhUTUwoKSBj
b25zdAoreworICAgIGlmIChpc09wYXF1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygn
IycsIGhleChyZWRDb21wb25lbnQoKSwgMiwgTG93ZXJjYXNlKSwgaGV4KGdyZWVuQ29tcG9uZW50
KCksIDIsIExvd2VyY2FzZSksIGhleChibHVlQ29tcG9uZW50KCksIDIsIExvd2VyY2FzZSkpOwor
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKCk7Cit9CisKK1N0cmluZyBDb2xvcjo6c2Vy
aWFsaXplZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJu
IGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7CisgICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRpb25G
b3JIVE1MKCk7Cit9CisKK3N0YXRpYyBjaGFyIGRlY2ltYWxEaWdpdCh1bnNpZ25lZCBudW1iZXIp
Cit7CisgICAgQVNTRVJUKG51bWJlciA8IDEwKTsKKyAgICByZXR1cm4gJzAnICsgbnVtYmVyOwor
fQorCitzdGF0aWMgc3RkOjphcnJheTxjaGFyLCA0PiBmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9u
YWxBbHBoYVZhbHVlKHVpbnQ4X3QgYWxwaGEpCit7CisgICAgQVNTRVJUKGFscGhhID4gMCk7Cisg
ICAgQVNTRVJUKGFscGhhIDwgMHhGRik7CisgICAgaWYgKCgoYWxwaGEgKiAxMDAgKyAweDdGKSAv
IDB4RkYgKiAweEZGICsgNTApIC8gMTAwICE9IGFscGhhKQorICAgICAgICByZXR1cm4geyB7IGRl
Y2ltYWxEaWdpdChhbHBoYSAqIDEwIC8gMHhGRiAlIDEwKSwgZGVjaW1hbERpZ2l0KGFscGhhICog
MTAwIC8gMHhGRiAlIDEwKSwgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwMDAgKyAweDdGKSAvIDB4
RkYgJSAxMCksICdcMCcgfSB9OworICAgIGlmIChpbnQgdGhpcmREaWdpdCA9IChhbHBoYSAqIDEw
MCArIDB4N0YpIC8gMHhGRiAlIDEwKQorICAgICAgICByZXR1cm4geyB7IGRlY2ltYWxEaWdpdChh
bHBoYSAqIDEwIC8gMHhGRiksIGRlY2ltYWxEaWdpdCh0aGlyZERpZ2l0KSwgJ1wwJywgJ1wwJyB9
IH07CisgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoKGFscGhhICogMTAgKyAweDdGKSAvIDB4
RkYpLCAnXDAnLCAnXDAnLCAnXDAnIH0gfTsKK30KKworU3RyaW5nIFNpbXBsZUNvbG9yOjpzZXJp
YWxpemF0aW9uRm9yQ1NTKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGFscGhhQ29tcG9uZW50KCkp
IHsKKyAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2JhKCIsIHJlZENv
bXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29tcG9uZW50KCks
ICIsIDApIik7CisgICAgY2FzZSAweEZGOgorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygicmdi
KCIsIHJlZENvbXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29t
cG9uZW50KCksICcpJyk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmco
InJnYmEoIiwgcmVkQ29tcG9uZW50KCksICIsICIsIGdyZWVuQ29tcG9uZW50KCksICIsICIsIGJs
dWVDb21wb25lbnQoKSwgIiwgMC4iLCBmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9uYWxBbHBoYVZh
bHVlKGFscGhhQ29tcG9uZW50KCkpLmRhdGEoKSwgJyknKTsKKyAgICB9Cit9CisKK1N0cmluZyBD
b2xvcjo6Y3NzVGV4dCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAg
cmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7CisgICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6
YXRpb25Gb3JDU1MoKTsKK30KKworU3RyaW5nIFJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQoKSBjb25zdAoreworICAgIGlmIChhbHBoYUNvbXBvbmVudCgpIDwgMHhGRikK
KyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkQ29tcG9uZW50KCksIDIpLCBo
ZXgoZ3JlZW5Db21wb25lbnQoKSwgMiksIGhleChibHVlQ29tcG9uZW50KCksIDIpLCBoZXgoYWxw
aGFDb21wb25lbnQoKSwgMikpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENv
bXBvbmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVu
dCgpLCAyKSk7Cit9CisKK1N0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBj
b25zdAoreworICAgIC8vIEZJWE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29sb3JzLgorICAgIHJldHVy
biByZ2IoKS5zZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpOworfQorCitDb2xvciBD
b2xvcjo6bGlnaHQoKSBjb25zdAoreworICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2Ug
Zm9yIHNwZWVkLgorICAgIGlmIChyZ2IoKSA9PSBibGFjaykKKyAgICAgICAgcmV0dXJuIGxpZ2h0
ZW5lZEJsYWNrOworICAgIAorICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVy
ZigyNTYuMGYsIDAuMGYpOworCisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCk7CisKKyAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOworCisg
ICAgaWYgKHYgPT0gMC4wZikgeworICAgICAgICAvLyBMaWdodGVuZWQgYmxhY2sgd2l0aCBhbHBo
YS4KKyAgICAgICAgcmV0dXJuIENvbG9yKDB4NTQsIDB4NTQsIDB4NTQsIGFscGhhKCkpOworICAg
IH0KKworICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4zM2YpIC8g
djsKKworICAgIHJldHVybiBDb2xvcihzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICog
c2NhbGVGYWN0b3IpLAorICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiBnICogc2NhbGVGYWN0b3IpLAorICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAorICAgICAgICAgICAgICAgICBhbHBoYSgp
KTsKK30KKworQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAoreworICAgIC8vIEhhcmRjb2RlIHRo
aXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgorICAgIGlmIChyZ2IoKSA9PSB3aGl0ZSkKKyAgICAg
ICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CisgICAgCisgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0
b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CisKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKworICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIs
IGcsIGIgfSk7CisgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4z
M2YpIC8gdik7CisKKyAgICByZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVy
ICogciAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Piht
dWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgICAgICAgICAg
YWxwaGEoKSk7Cit9CisKK2Jvb2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0Cit7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBmbG9hdCBsYXJnZXN0
Tm9uQWxwaGFDaGFubmVsID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOworICAgIHJldHVybiBhID4g
MC41ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPCAwLjU7Cit9CisKK2Zsb2F0IENvbG9yOjps
aWdodG5lc3MoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9p
ZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMg
Zm9yIEhTTC4KKyAgICByZXR1cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRz
TG9zc3koKSk7Cit9CisKK3N0YXRpYyBpbnQgYmxlbmRDb21wb25lbnQoaW50IGMsIGludCBhKQor
eworICAgIC8vIFdlIHVzZSB3aGl0ZS4KKyAgICBmbG9hdCBhbHBoYSA9IGEgLyAyNTUuMGY7Cisg
ICAgaW50IHdoaXRlQmxlbmQgPSAyNTUgLSBhOworICAgIGMgLT0gd2hpdGVCbGVuZDsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjIC8gYWxwaGEpOworfQorCitjb25zdCBpbnQgY1N0YXJ0
QWxwaGEgPSAxNTM7IC8vIDYwJQorY29uc3QgaW50IGNFbmRBbHBoYSA9IDIwNDsgLy8gODAlOwor
Y29uc3QgaW50IGNBbHBoYUluY3JlbWVudCA9IDE3OyAvLyBJbmNyZW1lbnRzIGluIGJldHdlZW4u
CisKK0NvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYgc291cmNlKSBjb25zdAoreworICAg
IGlmICghaXNWaXNpYmxlKCkgfHwgc291cmNlLmlzT3BhcXVlKCkpCisgICAgICAgIHJldHVybiBz
b3VyY2U7CisKKyAgICBpZiAoIXNvdXJjZS5hbHBoYSgpKQorICAgICAgICByZXR1cm4gKnRoaXM7
CisKKyAgICBpbnQgZCA9IDI1NSAqIChhbHBoYSgpICsgc291cmNlLmFscGhhKCkpIC0gYWxwaGEo
KSAqIHNvdXJjZS5hbHBoYSgpOworICAgIGludCBhID0gZCAvIDI1NTsKKyAgICBpbnQgciA9IChy
ZWQoKSAqIGFscGhhKCkgKiAoMjU1IC0gc291cmNlLmFscGhhKCkpICsgMjU1ICogc291cmNlLmFs
cGhhKCkgKiBzb3VyY2UucmVkKCkpIC8gZDsKKyAgICBpbnQgZyA9IChncmVlbigpICogYWxwaGEo
KSAqICgyNTUgLSBzb3VyY2UuYWxwaGEoKSkgKyAyNTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJj
ZS5ncmVlbigpKSAvIGQ7CisgICAgaW50IGIgPSAoYmx1ZSgpICogYWxwaGEoKSAqICgyNTUgLSBz
b3VyY2UuYWxwaGEoKSkgKyAyNTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJjZS5ibHVlKCkpIC8g
ZDsKKyAgICByZXR1cm4gQ29sb3IociwgZywgYiwgYSk7Cit9CisKK0NvbG9yIENvbG9yOjpibGVu
ZFdpdGhXaGl0ZSgpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhlIGNvbG9yIGNvbnRhaW5zIGFscGhh
IGFscmVhZHksIHdlIGxlYXZlIGl0IGFsb25lLgorICAgIGlmICghaXNPcGFxdWUoKSkKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworCisgICAgQ29sb3IgbmV3Q29sb3I7CisgICAgZm9yIChpbnQgYWxw
aGEgPSBjU3RhcnRBbHBoYTsgYWxwaGEgPD0gY0VuZEFscGhhOyBhbHBoYSArPSBjQWxwaGFJbmNy
ZW1lbnQpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBhIHNvbGlkIGNvbG9yLiAgQ29udmVydCB0byBh
biBlcXVpdmFsZW50IGNvbG9yIHRoYXQgbG9va3MgdGhlIHNhbWUgd2hlbiBibGVuZGVkIHdpdGgg
d2hpdGUKKyAgICAgICAgLy8gYXQgdGhlIGN1cnJlbnQgYWxwaGEuICBUcnkgdXNpbmcgbGVzcyB0
cmFuc3BhcmVuY3kgaWYgdGhlIG51bWJlcnMgZW5kIHVwIGJlaW5nIG5lZ2F0aXZlLgorICAgICAg
ICBpbnQgciA9IGJsZW5kQ29tcG9uZW50KHJlZCgpLCBhbHBoYSk7CisgICAgICAgIGludCBnID0g
YmxlbmRDb21wb25lbnQoZ3JlZW4oKSwgYWxwaGEpOworICAgICAgICBpbnQgYiA9IGJsZW5kQ29t
cG9uZW50KGJsdWUoKSwgYWxwaGEpOworICAgICAgICAKKyAgICAgICAgbmV3Q29sb3IgPSBDb2xv
cihyLCBnLCBiLCBhbHBoYSk7CisKKyAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49IDAgJiYgYiA+
PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGlzU2VtYW50aWMoKSkK
KyAgICAgICAgbmV3Q29sb3Iuc2V0SXNTZW1hbnRpYygpOworICAgIHJldHVybiBuZXdDb2xvcjsK
K30KKworQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0IGFtb3Vu
dCkgY29uc3QKK3sKKyAgICBmbG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkg
PyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5hbHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGFscGhhKCkpIC8gMjU1KTsKKyAgICByZXR1cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwor
fQorCitDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0
aXZlUm91bmRpbmcoZmxvYXQgYW1vdW50KSBjb25zdAoreworICAgIGZsb2F0IG5ld0FscGhhID0g
YW1vdW50ICogKGlzRXh0ZW5kZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhh
KCkgOiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEoKSkgLyAyNTUpOworICAgIHJldHVybiBjb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Cit9CisKK0NvbG9y
IENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKK3sKKyAgICBpZiAoaXNF
eHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yLT5yZWQoKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRh
dGEuZXh0ZW5kZWRDb2xvci0+Ymx1ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xv
ci0+Y29sb3JTcGFjZSgpIH07CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1
bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGlu
Zy4KKyAgICBpbnQgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsKKworICAgIENvbG9yIHJlc3VsdCA9
IHsgcmVkKCksIGdyZWVuKCksIGJsdWUoKSwgbmV3QWxwaGEgfTsKKyAgICBpZiAoaXNTZW1hbnRp
YygpKQorICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK0NvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGlu
ZyhmbG9hdCBhbHBoYSkgY29uc3QKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBy
ZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xvckRh
dGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Ymx1
ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07CisK
KyAgICBDb2xvciByZXN1bHQgPSBTaW1wbGVDb2xvciB7IChyZ2IoKS52YWx1ZSgpICYgMHgwMEZG
RkZGRikgfCBjb2xvckZsb2F0VG9SR0JBQnl0ZShhbHBoYSkgPDwgMjQgfTsKKyAgICBpZiAoaXNT
ZW1hbnRpYygpKQorICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0ZDo6cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IENvbG9y
Ojpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQo
KSkgeworICAgICAgICBhdXRvJiBleHRlbmRlZENvbG9yID0gYXNFeHRlbmRlZCgpOworICAgICAg
ICByZXR1cm4geyBleHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSwgZXh0ZW5kZWRDb2xvci5jaGFu
bmVscygpIH07CisgICAgfQorCisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRD
b21wb25lbnRzIHsgcmVkKCkgLyAyNTUuMGYsIGdyZWVuKCkgLyAyNTUuMGYsIGJsdWUoKSAvIDI1
NS4wZiwgIGFscGhhKCkgLyAyNTUuMGYgfSB9OworfQorCitTaW1wbGVDb2xvciBDb2xvcjo6dG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdAoreworICAgIGlmICghaXNFeHRlbmRlZCgpKQor
ICAgICAgICByZXR1cm4gcmdiKCk7CisKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKKyAgICByZXR1cm4gbWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywg
YiwgYSk7Cit9CisKK0Zsb2F0Q29tcG9uZW50cyBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpIGNvbnN0Cit7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpOworICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgeworICAgIGNhc2Ug
Q29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7CisgICAgY2FzZSBD
b2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVu
dHMoY29tcG9uZW50cyk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAg
IHJldHVybiBwM1RvU1JHQihjb21wb25lbnRzKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNv
bnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVuZGVkKCkg
JiYgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9PSBiLmFz
RXh0ZW5kZWQoKTsKKworICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQo
KSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJv
bSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gRklYTUU6IEV4
dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorICAgIC8vIFdlIG5l
ZWQgdG8gcHJlc2VydmUgdGhlIHN0YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2Yg
dGhlIGFuaW1hdGlvbgorICAgIGlmIChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgLy8gU2luY2UgbWFrZVByZW11bHRpcGxpZWRS
R0JBKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCisgICAgYXV0byBw
cmVtdWx0RnJvbSA9IGZyb20uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShmcm9tLnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50OworICAgIGF1dG8g
cHJlbXVsdFRvID0gdG8uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQSh0by50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKKworICAgIFJHQkEzMiBw
cmVtdWx0QmxlbmRlZCA9IG1ha2VSR0JBKAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0
RnJvbS5yZWRDb21wb25lbnQoKSwgcHJlbXVsdFRvLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyks
CisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmdyZWVuQ29tcG9uZW50KCksIHBy
ZW11bHRUby5ncmVlbkNvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJs
ZW5kKHByZW11bHRGcm9tLmJsdWVDb21wb25lbnQoKSwgcHJlbXVsdFRvLmJsdWVDb21wb25lbnQo
KSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5hbHBoYUNv
bXBvbmVudCgpLCBwcmVtdWx0VG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCisgICAgKTsK
KworICAgIHJldHVybiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShwcmVtdWx0QmxlbmRlZCk7Cit9
CisKK0NvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25z
dCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kZWRD
b2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisgICAgLy8gV2UgbmVlZCB0byBw
cmVzZXJ2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhbGlkIGZsYWcgYXQgdGhlIGVuZCBvZiB0aGUgYW5p
bWF0aW9uCisgICAgaWYgKHByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisgICAgYXV0byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7CisKKyAgICByZXR1cm4geworICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWRD
b21wb25lbnQoKSwgdG9TUkdCLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdl
YkNvcmU6OmJsZW5kKGZyb21TUkdCLmdyZWVuQ29tcG9uZW50KCksIHRvU1JHQi5ncmVlbkNvbXBv
bmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWVD
b21wb25lbnQoKSwgdG9TUkdCLmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tU1JHQi5hbHBoYUNvbXBvbmVudCgpLCB0b1NSR0IuYWxwaGFDb21w
b25lbnQoKSwgcHJvZ3Jlc3MpCisgICAgfTsKK30KKwordm9pZCBDb2xvcjo6dGFnQXNWYWxpZCgp
Cit7CisgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzIHw9IHZhbGlkUkdCQUNvbG9yOworfQor
Citjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGlzRXh0ZW5kZWQoKSk7CisgICAgcmV0dXJuICptX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBD
b2xvciYgY29sb3IpCit7CisgICAgcmV0dXJuIHRzIDw8IGNvbG9yLm5hbWVGb3JSZW5kZXJUcmVl
QXNUZXh0KCk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKKyAgICBj
YXNlIENvbG9yU3BhY2U6OlNSR0I6CisgICAgICAgIHRzIDw8ICJzUkdCIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAgIHRzIDw8ICJMaW5l
YXJSR0IiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoK
KyAgICAgICAgdHMgPDwgIkRpc3BsYXlQMyI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDEwICsyNCw4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiU2ltcGxlQ29sb3IuaCIKIAotI2luY2x1ZGUgIkFuaW1h
dGlvblV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
SGFzaFRvb2xzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYv
SGV4TnVtYmVyLmg+CkBAIC0zNyw5ICszNSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBsaWdodGVuZWRCbGFjayB7IDB4RkY1NDU0NTQg
fTsKLXN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgZGFya2VuZWRXaGl0ZSB7IDB4RkZBQkFC
QUIgfTsKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNp
Z25lZCBjLCB1bnNpZ25lZCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKQogewogICAgIHJldHVybiBm
YXN0RGl2aWRlQnkyNTUoY2VpbGluZyA/IGMgKiBhICsgMjU0IDogYyAqIGEpOwpAQCAtNzQsMTIg
KzY5LDYgQEAgUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKFJHQkEzMiBwaQogICAgIHJl
dHVybiBwaXhlbENvbG9yOwogfQogCi1zdGF0aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZs
b2F0IGYpCi17Ci0gICAgLy8gV2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRh
ZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5kaW5nCi0gICAgcmV0dXJuIHN0ZDo6bWF4
KDAsIHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4obHJvdW5kZigyNTUuMGYgKiBmKSksIDI1NSkp
OwotfQotCiBSR0JBMzIgbWFrZVJHQkEzMkZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxv
YXQgYiwgZmxvYXQgYSkKIHsKICAgICByZXR1cm4gbWFrZVJHQkEoY29sb3JGbG9hdFRvUkdCQUJ5
dGUociksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGcpLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShiKSwg
Y29sb3JGbG9hdFRvUkdCQUJ5dGUoYSkpOwpAQCAtMTA1LDE4OSArOTQsNiBAQCBSR0JBMzIgbWFr
ZVJHQkFGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgCiAgICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcs
IGIsIHN0YXRpY19jYXN0PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIGEpKTsKIH0KIAotLy8g
b3JpZ2luYWxseSBtb3ZlZCBoZXJlIGZyb20gdGhlIENTUyBwYXJzZXIKLXRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIHBhcnNlSGV4Q29sb3JJbnRl
cm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgsIFJHQkEzMiYg
cmdiKQotewotICAgIGlmIChsZW5ndGggIT0gMyAmJiBsZW5ndGggIT0gNCAmJiBsZW5ndGggIT0g
NiAmJiBsZW5ndGggIT0gOCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIHZh
bHVlID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQobmFtZVtpXSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHZhbHVlIDw8PSA0OwotICAgICAgICB2YWx1ZSB8PSB0b0FTQ0lJSGV4
VmFsdWUobmFtZVtpXSk7Ci0gICAgfQotICAgIGlmIChsZW5ndGggPT0gNikgewotICAgICAgICBy
Z2IgPSB7IDB4RkYwMDAwMDAgfCB2YWx1ZSB9OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgaWYgKGxlbmd0aCA9PSA4KSB7Ci0gICAgICAgIC8vIFdlIHBhcnNlZCB0aGUgdmFsdWVz
IGludG8gUkdCQSBvcmRlciwgYnV0IHRoZSBSR0JBMzIgdHlwZQotICAgICAgICAvLyBleHBlY3Rz
IHRoZW0gdG8gYmUgaW4gQVJHQiBvcmRlciwgc28gd2UgcmlnaHQgcm90YXRlIGVpZ2h0IGJpdHMu
Ci0gICAgICAgIHJnYiA9IHsgdmFsdWUgPDwgMjQgfCB2YWx1ZSA+PiA4IH07Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAobGVuZ3RoID09IDQpIHsKLSAgICAgICAgLy8gI2Fi
Y2QgY29udmVydHMgdG8gZGRhYWJiY2MgaW4gUkdCQTMyLgotICAgICAgICByZ2IgPSB7ICh2YWx1
ZSAmIDB4RikgPDwgMjggfCAodmFsdWUgJiAweEYpIDw8IDI0Ci0gICAgICAgICAgICB8ICh2YWx1
ZSAmIDB4RjAwMCkgPDwgOCB8ICh2YWx1ZSAmIDB4RjAwMCkgPDwgNAotICAgICAgICAgICAgfCAo
dmFsdWUgJiAweEYwMCkgPDwgNCB8ICh2YWx1ZSAmIDB4RjAwKQotICAgICAgICAgICAgfCAodmFs
dWUgJiAweEYwKSB8ICh2YWx1ZSAmIDB4RjApID4+IDQgfTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIC8vICNhYmMgY29udmVydHMgdG8gI2FhYmJjYwotICAgIHJnYiA9IHsgMHhG
RjAwMDAwMAotICAgICAgICB8ICh2YWx1ZSAmIDB4RjAwKSA8PCAxMiB8ICh2YWx1ZSAmIDB4RjAw
KSA8PCA4Ci0gICAgICAgIHwgKHZhbHVlICYgMHhGMCkgPDwgOCB8ICh2YWx1ZSAmIDB4RjApIDw8
IDQKLSAgICAgICAgfCAodmFsdWUgJiAweEYpIDw8IDQgfCAodmFsdWUgJiAweEYpIH07Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29sb3I6OnBhcnNlSGV4Q29sb3IoY29uc3QgTENoYXIq
IG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMyJiByZ2IpCi17Ci0gICAgcmV0dXJuIHBhcnNl
SGV4Q29sb3JJbnRlcm5hbChuYW1lLCBsZW5ndGgsIHJnYik7Ci19Ci0KLWJvb2wgQ29sb3I6OnBh
cnNlSGV4Q29sb3IoY29uc3QgVUNoYXIqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMyJiBy
Z2IpCi17Ci0gICAgcmV0dXJuIHBhcnNlSGV4Q29sb3JJbnRlcm5hbChuYW1lLCBsZW5ndGgsIHJn
Yik7Ci19Ci0KLWJvb2wgQ29sb3I6OnBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lLCBS
R0JBMzImIHJnYikKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOwotICAg
IGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG5hbWUuaXM4Qml0
KCkpCi0gICAgICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczgoKSwgbmFt
ZS5sZW5ndGgoKSwgcmdiKTsKLSAgICByZXR1cm4gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3Rl
cnMxNigpLCBuYW1lLmxlbmd0aCgpLCByZ2IpOwotfQotCi1ib29sIENvbG9yOjpwYXJzZUhleENv
bG9yKGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUsIFJHQkEzMiYgcmdiKQotewotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAobmFtZS5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlSGV4
Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpLCBuYW1lLmxlbmd0aCgpLCByZ2IpOwotICAgIHJldHVy
biBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2KCksIG5hbWUubGVuZ3RoKCksIHJnYik7
Ci19Ci0KLWludCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYgYzEsIGNvbnN0IENvbG9y
JiBjMikKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhc3N1bWluZyB0aGF0IHRoZSBjb2xvcnMg
YXJlIGluIHRoZSBzYW1lIGNvbG9yc3BhY2UuCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHBy
b2JhYmx5IHJldHVybiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgYnV0IG1hbnkgb2YgdGhlIGNh
bGwKLSAgICAvLyBzaXRlcyBoYXZlIHBpY2tlZCBjb21wYXJpc29uIHZhbHVlcyBiYXNlZCBvbiBm
ZWVsLiBXZSdkIG5lZWQgdG8gYnJlYWsgb3V0Ci0gICAgLy8gb3VyIGxvZ2FyaXRobSB0YWJsZXMg
dG8gY2hhbmdlIHRoZW0gOikKLSAgICBpbnQgYzFSZWQgPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5h
c0V4dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMS5yZWQoKTsKLSAgICBpbnQgYzFHcmVlbiA9IGMx
LmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzEuZ3JlZW4o
KTsKLSAgICBpbnQgYzFCbHVlID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmJs
dWUoKSAqIDI1NSA6IGMxLmJsdWUoKTsKLSAgICBpbnQgYzJSZWQgPSBjMi5pc0V4dGVuZGVkKCkg
PyBjMi5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMi5yZWQoKTsKLSAgICBpbnQgYzJHcmVl
biA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzIu
Z3JlZW4oKTsKLSAgICBpbnQgYzJCbHVlID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRl
ZCgpLmJsdWUoKSAqIDI1NSA6IGMyLmJsdWUoKTsKLSAgICBpbnQgZFIgPSBjMVJlZCAtIGMyUmVk
OwotICAgIGludCBkRyA9IGMxR3JlZW4gLSBjMkdyZWVuOwotICAgIGludCBkQiA9IGMxQmx1ZSAt
IGMyQmx1ZTsKLSAgICByZXR1cm4gZFIgKiBkUiArIGRHICogZEcgKyBkQiAqIGRCOwotfQotCi1z
dGF0aWMgaW5saW5lIGNvbnN0IE5hbWVkQ29sb3IqIGZpbmROYW1lZENvbG9yKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLXsKLSAgICBjaGFyIGJ1ZmZlcls2NF07IC8vIGVhc2lseSBiaWcgZW5vdWdoIGZv
ciB0aGUgbG9uZ2VzdCBjb2xvciBuYW1lCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5n
dGgoKTsKLSAgICBpZiAobGVuZ3RoID4gc2l6ZW9mKGJ1ZmZlcikgLSAxKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgVUNoYXIgYyA9IG5hbWVbaV07Ci0gICAgICAgIGlmICghYyB8fCAhV1RGOjppc0FT
Q0lJKGMpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGJ1ZmZlcltpXSA9
IHRvQVNDSUlMb3dlcihzdGF0aWNfY2FzdDxjaGFyPihjKSk7Ci0gICAgfQotICAgIGJ1ZmZlclts
ZW5ndGhdID0gJ1wwJzsKLSAgICByZXR1cm4gZmluZENvbG9yKGJ1ZmZlciwgbGVuZ3RoKTsKLX0K
LQotQ29sb3I6OkNvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZVswXSA9
PSAnIycpIHsKLSAgICAgICAgUkdCQTMyIGNvbG9yOwotICAgICAgICBib29sIHZhbGlkOwotCi0g
ICAgICAgIGlmIChuYW1lLmlzOEJpdCgpKQotICAgICAgICAgICAgdmFsaWQgPSBwYXJzZUhleENv
bG9yKG5hbWUuY2hhcmFjdGVyczgoKSArIDEsIG5hbWUubGVuZ3RoKCkgLSAxLCBjb2xvcik7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJh
Y3RlcnMxNigpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKLQotICAgICAgICBpZiAo
dmFsaWQpCi0gICAgICAgICAgICBzZXRSR0IoY29sb3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChhdXRvKiBmb3VuZENvbG9yID0gZmluZE5hbWVkQ29sb3IobmFtZSkpCi0gICAgICAgICAg
ICBzZXRSR0IoeyBmb3VuZENvbG9yLT5BUkdCVmFsdWUgfSk7Ci0gICAgfQotfQotCi1Db2xvcjo6
Q29sb3IoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBpZiAobmFtZVswXSA9PSAnIycpIHsKLSAg
ICAgICAgU2ltcGxlQ29sb3IgY29sb3I7Ci0gICAgICAgIGlmIChwYXJzZUhleENvbG9yKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigmbmFtZVsxXSksIHN0ZDo6c3RybGVuKCZuYW1lWzFd
KSwgY29sb3IpKQotICAgICAgICAgICAgc2V0UkdCKGNvbG9yKTsKLSAgICB9IGVsc2UgaWYgKGF1
dG8qIGZvdW5kQ29sb3IgPSBmaW5kQ29sb3IobmFtZSwgc3RybGVuKG5hbWUpKSkKLSAgICAgICAg
c2V0UkdCKHsgZm91bmRDb2xvci0+QVJHQlZhbHVlIH0pOwotfQotCi1Db2xvcjo6Q29sb3IoY29u
c3QgQ29sb3ImIG90aGVyKQotICAgIDogbV9jb2xvckRhdGEob3RoZXIubV9jb2xvckRhdGEpCi17
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xv
ci0+cmVmKCk7Ci19Ci0KLUNvbG9yOjpDb2xvcihDb2xvciYmIG90aGVyKQotewotICAgICp0aGlz
ID0gV1RGTW92ZShvdGhlcik7Ci19Ci0KLUNvbG9yOjpDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIs
IGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIC8v
IFplcm8gdGhlIHVuaW9uLCBqdXN0IGluIGNhc2UgYSAzMi1iaXQgc3lzdGVtIG9ubHkgYXNzaWdu
cyB0aGUKLSAgICAvLyB0b3AgMzIgYml0cyB3aGVuIGNvcHlpbmcgdGhlIGV4dGVuZGVkQ29sb3Ig
cG9pbnRlciBiZWxvdy4KLSAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSAwOwotICAgIGF1
dG8gZXh0ZW5kZWRDb2xvclJlZiA9IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBh
bHBoYSwgY29sb3JTcGFjZSk7Ci0gICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRl
bmRlZENvbG9yUmVmLmxlYWtSZWYoKTsKLSAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKLX0KLQot
Q29sb3ImIENvbG9yOjpvcGVyYXRvcj0oY29uc3QgQ29sb3ImIG90aGVyKQotewotICAgIGlmICgq
dGhpcyA9PSBvdGhlcikKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgaWYgKGlzRXh0ZW5k
ZWQoKSkKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYoKTsKLQotICAg
IG1fY29sb3JEYXRhID0gb3RoZXIubV9jb2xvckRhdGE7Ci0KLSAgICBpZiAoaXNFeHRlbmRlZCgp
KQotICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWYoKTsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KLUNvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KENvbG9yJiYgb3RoZXIpCi17Ci0g
ICAgaWYgKCp0aGlzID09IG90aGVyKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBpZiAo
aXNFeHRlbmRlZCgpKQotICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigp
OwotCi0gICAgbV9jb2xvckRhdGEgPSBvdGhlci5tX2NvbG9yRGF0YTsKLSAgICBvdGhlci5tX2Nv
bG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBpbnZhbGlkUkdCQUNvbG9yOwotCi0gICAgcmV0dXJuICp0
aGlzOwotfQotCiBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29u
c3QKIHsKICAgICBpZiAoaXNPcGFxdWUoKSkKQEAgLTI5NSwxMyArMTAxLDYgQEAgU3RyaW5nIFNp
bXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9ySFRNTAogICAgIHJldHVybiBzZXJpYWxpemF0aW9u
Rm9yQ1NTKCk7CiB9CiAKLVN0cmluZyBDb2xvcjo6c2VyaWFsaXplZCgpIGNvbnN0Ci17Ci0gICAg
aWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7
Ci0gICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRpb25Gb3JIVE1MKCk7Ci19Ci0KIHN0YXRpYyBj
aGFyIGRlY2ltYWxEaWdpdCh1bnNpZ25lZCBudW1iZXIpCiB7CiAgICAgQVNTRVJUKG51bWJlciA8
IDEwKTsKQEAgLTMzMSwyODcgKzEzMCwxMSBAQCBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6
YXRpb25Gb3JDU1MoCiAgICAgfQogfQogCi1TdHJpbmcgQ29sb3I6OmNzc1RleHQoKSBjb25zdAot
ewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY3Nz
VGV4dCgpOwotICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0aW9uRm9yQ1NTKCk7Ci19Ci0KLVN0
cmluZyBSR0JBMzI6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3QKK1N0
cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25z
dAogewogICAgIGlmIChhbHBoYUNvbXBvbmVudCgpIDwgMHhGRikKICAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoJyMnLCBoZXgocmVkQ29tcG9uZW50KCksIDIpLCBoZXgoZ3JlZW5Db21wb25lbnQo
KSwgMiksIGhleChibHVlQ29tcG9uZW50KCksIDIpLCBoZXgoYWxwaGFDb21wb25lbnQoKSwgMikp
OwogICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBvbmVudCgpLCAyKSwgaGV4
KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVudCgpLCAyKSk7CiB9CiAKLVN0
cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdAotewotICAgIC8vIEZJ
WE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29sb3JzLgotICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0
aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpOwotfQotCi1Db2xvciBDb2xvcjo6bGlnaHQoKSBjb25z
dAotewotICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlm
IChyZ2IoKSA9PSBibGFjaykKLSAgICAgICAgcmV0dXJuIGxpZ2h0ZW5lZEJsYWNrOwotICAgIAot
ICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwot
Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0KLSAg
ICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwotCi0gICAgaWYgKHYgPT0gMC4wZikg
ewotICAgICAgICAvLyBMaWdodGVuZWQgYmxhY2sgd2l0aCBhbHBoYS4KLSAgICAgICAgcmV0dXJu
IENvbG9yKDB4NTQsIDB4NTQsIDB4NTQsIGFscGhhKCkpOwotICAgIH0KLQotICAgIGZsb2F0IG11
bHRpcGxpZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4zM2YpIC8gdjsKLQotICAgIHJldHVybiBD
b2xvcihzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0
b3IpLAotICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICog
c2NhbGVGYWN0b3IpLAotICAgICAgICAgICAgICAgICBhbHBoYSgpKTsKLX0KLQotQ29sb3IgQ29s
b3I6OmRhcmsoKSBjb25zdAotewotICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9y
IHNwZWVkLgotICAgIGlmIChyZ2IoKSA9PSB3aGl0ZSkKLSAgICAgICAgcmV0dXJuIGRhcmtlbmVk
V2hpdGU7Ci0gICAgCi0gICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1
Ni4wZiwgMC4wZik7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRz
TG9zc3koKTsKLQotICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7Ci0gICAgZmxv
YXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7Ci0KLSAgICBy
ZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9y
KSwKLSAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNj
YWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVy
ICogYiAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAgICAgYWxwaGEoKSk7Ci19Ci0KLWJv
b2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHBy
b2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JH
QkFDb21wb25lbnRzTG9zc3koKTsKLSAgICBmbG9hdCBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsID0g
c3RkOjptYXgoeyByLCBnLCBiIH0pOwotICAgIHJldHVybiBhID4gMC41ICYmIGxhcmdlc3ROb25B
bHBoYUNoYW5uZWwgPCAwLjU7Ci19Ci0KLWZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdAot
ewotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9uIHRvIHNS
R0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMgZm9yIEhTTC4KLSAgICByZXR1
cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7Ci19Ci0KLXN0
YXRpYyBpbnQgYmxlbmRDb21wb25lbnQoaW50IGMsIGludCBhKQotewotICAgIC8vIFdlIHVzZSB3
aGl0ZS4KLSAgICBmbG9hdCBhbHBoYSA9IGEgLyAyNTUuMGY7Ci0gICAgaW50IHdoaXRlQmxlbmQg
PSAyNTUgLSBhOwotICAgIGMgLT0gd2hpdGVCbGVuZDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihjIC8gYWxwaGEpOwotfQotCi1jb25zdCBpbnQgY1N0YXJ0QWxwaGEgPSAxNTM7IC8vIDYw
JQotY29uc3QgaW50IGNFbmRBbHBoYSA9IDIwNDsgLy8gODAlOwotY29uc3QgaW50IGNBbHBoYUlu
Y3JlbWVudCA9IDE3OyAvLyBJbmNyZW1lbnRzIGluIGJldHdlZW4uCi0KLUNvbG9yIENvbG9yOjpi
bGVuZChjb25zdCBDb2xvciYgc291cmNlKSBjb25zdAotewotICAgIGlmICghaXNWaXNpYmxlKCkg
fHwgc291cmNlLmlzT3BhcXVlKCkpCi0gICAgICAgIHJldHVybiBzb3VyY2U7Ci0KLSAgICBpZiAo
IXNvdXJjZS5hbHBoYSgpKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBpbnQgZCA9IDI1
NSAqIChhbHBoYSgpICsgc291cmNlLmFscGhhKCkpIC0gYWxwaGEoKSAqIHNvdXJjZS5hbHBoYSgp
OwotICAgIGludCBhID0gZCAvIDI1NTsKLSAgICBpbnQgciA9IChyZWQoKSAqIGFscGhhKCkgKiAo
MjU1IC0gc291cmNlLmFscGhhKCkpICsgMjU1ICogc291cmNlLmFscGhhKCkgKiBzb3VyY2UucmVk
KCkpIC8gZDsKLSAgICBpbnQgZyA9IChncmVlbigpICogYWxwaGEoKSAqICgyNTUgLSBzb3VyY2Uu
YWxwaGEoKSkgKyAyNTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJjZS5ncmVlbigpKSAvIGQ7Ci0g
ICAgaW50IGIgPSAoYmx1ZSgpICogYWxwaGEoKSAqICgyNTUgLSBzb3VyY2UuYWxwaGEoKSkgKyAy
NTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJjZS5ibHVlKCkpIC8gZDsKLSAgICByZXR1cm4gQ29s
b3IociwgZywgYiwgYSk7Ci19Ci0KLUNvbG9yIENvbG9yOjpibGVuZFdpdGhXaGl0ZSgpIGNvbnN0
Ci17Ci0gICAgLy8gSWYgdGhlIGNvbG9yIGNvbnRhaW5zIGFscGhhIGFscmVhZHksIHdlIGxlYXZl
IGl0IGFsb25lLgotICAgIGlmICghaXNPcGFxdWUoKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwot
Ci0gICAgQ29sb3IgbmV3Q29sb3I7Ci0gICAgZm9yIChpbnQgYWxwaGEgPSBjU3RhcnRBbHBoYTsg
YWxwaGEgPD0gY0VuZEFscGhhOyBhbHBoYSArPSBjQWxwaGFJbmNyZW1lbnQpIHsKLSAgICAgICAg
Ly8gV2UgaGF2ZSBhIHNvbGlkIGNvbG9yLiAgQ29udmVydCB0byBhbiBlcXVpdmFsZW50IGNvbG9y
IHRoYXQgbG9va3MgdGhlIHNhbWUgd2hlbiBibGVuZGVkIHdpdGggd2hpdGUKLSAgICAgICAgLy8g
YXQgdGhlIGN1cnJlbnQgYWxwaGEuICBUcnkgdXNpbmcgbGVzcyB0cmFuc3BhcmVuY3kgaWYgdGhl
IG51bWJlcnMgZW5kIHVwIGJlaW5nIG5lZ2F0aXZlLgotICAgICAgICBpbnQgciA9IGJsZW5kQ29t
cG9uZW50KHJlZCgpLCBhbHBoYSk7Ci0gICAgICAgIGludCBnID0gYmxlbmRDb21wb25lbnQoZ3Jl
ZW4oKSwgYWxwaGEpOwotICAgICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGJsdWUoKSwgYWxw
aGEpOwotICAgICAgICAKLSAgICAgICAgbmV3Q29sb3IgPSBDb2xvcihyLCBnLCBiLCBhbHBoYSk7
Ci0KLSAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49IDAgJiYgYiA+PSAwKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAgbmV3Q29sb3Iu
c2V0SXNTZW1hbnRpYygpOwotICAgIHJldHVybiBuZXdDb2xvcjsKLX0KLQotQ29sb3IgQ29sb3I6
OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0IGFtb3VudCkgY29uc3QKLXsKLSAgICBm
bG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkgPyBtX2NvbG9yRGF0YS5leHRl
bmRlZENvbG9yLT5hbHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKCkpIC8gMjU1KTsK
LSAgICByZXR1cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwotfQotCi1Db2xvciBDb2xvcjo6
Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQg
YW1vdW50KSBjb25zdAotewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogKGlzRXh0ZW5k
ZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkgOiBzdGF0aWNfY2FzdDxm
bG9hdD4oYWxwaGEoKSkgLyAyNTUpOwotICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Ci19Ci0KLUNvbG9yIENvbG9yOjpjb2xvcldpdGhB
bHBoYShmbG9hdCBhbHBoYSkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAg
ICByZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xv
ckRhdGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+
Ymx1ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07
Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJv
bSBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZy4KLSAgICBpbnQgbmV3QWxw
aGEgPSBhbHBoYSAqIDI1NTsKLQotICAgIENvbG9yIHJlc3VsdCA9IHsgcmVkKCksIGdyZWVuKCks
IGJsdWUoKSwgbmV3QWxwaGEgfTsKLSAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1
bHQuc2V0SXNTZW1hbnRpYygpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUNvbG9yIENvbG9y
Ojpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCBhbHBoYSkgY29u
c3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gQ29sb3IgeyBtX2Nv
bG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+
Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Ymx1ZSgpLCBhbHBoYSwgbV9jb2xv
ckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07Ci0KLSAgICBDb2xvciByZXN1bHQg
PSBTaW1wbGVDb2xvciB7IChyZ2IoKS52YWx1ZSgpICYgMHgwMEZGRkZGRikgfCBjb2xvckZsb2F0
VG9SR0JBQnl0ZShhbHBoYSkgPDwgMjQgfTsKLSAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAg
ICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6
cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IENvbG9yOjpjb2xvclNwYWNlQW5kQ29t
cG9uZW50cygpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkgewotICAgICAgICBhdXRv
JiBleHRlbmRlZENvbG9yID0gYXNFeHRlbmRlZCgpOwotICAgICAgICByZXR1cm4geyBleHRlbmRl
ZENvbG9yLmNvbG9yU3BhY2UoKSwgZXh0ZW5kZWRDb2xvci5jaGFubmVscygpIH07Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgcmVkKCkg
LyAyNTUuMGYsIGdyZWVuKCkgLyAyNTUuMGYsIGJsdWUoKSAvIDI1NS4wZiwgIGFscGhhKCkgLyAy
NTUuMGYgfSB9OwotfQotCi1TaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKSBjb25zdAotewotICAgIGlmICghaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gcmdi
KCk7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsK
LSAgICByZXR1cm4gbWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywgYiwgYSk7Ci19Ci0KLUZsb2F0
Q29tcG9uZW50cyBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0Ci17Ci0gICAg
YXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygp
OwotICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgewotICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoK
LSAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJS
R0I6Ci0gICAgICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29tcG9uZW50cyk7Ci0g
ICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgIHJldHVybiBwM1RvU1JHQihj
b21wb25lbnRzKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IHsgfTsKLX0KLQotYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiBhLCBjb25z
dCBDb2xvciYgYikKLXsKLSAgICBpZiAoYS5pc0V4dGVuZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkp
Ci0gICAgICAgIHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9PSBiLmFzRXh0ZW5kZWQoKTsKLQotICAg
IEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1Db2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVk
cyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgotICAgIC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhl
IHN0YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbgotICAg
IGlmIChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBDb2xv
cigpOwotCi0gICAgLy8gU2luY2UgbWFrZVByZW11bHRpcGxpZWRSR0JBKCkgYmFpbHMgb24gemVy
byBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCi0gICAgYXV0byBwcmVtdWx0RnJvbSA9IGZyb20u
YWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGF1dG8gcHJlbXVsdFRvID0gdG8uYWxw
aGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQSh0by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
KSA6IENvbG9yOjp0cmFuc3BhcmVudDsKLQotICAgIFJHQkEzMiBwcmVtdWx0QmxlbmRlZCA9IG1h
a2VSR0JBKAotICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5yZWRDb21wb25lbnQo
KSwgcHJlbXVsdFRvLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6
OmJsZW5kKHByZW11bHRGcm9tLmdyZWVuQ29tcG9uZW50KCksIHByZW11bHRUby5ncmVlbkNvbXBv
bmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmJs
dWVDb21wb25lbnQoKSwgcHJlbXVsdFRvLmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5hbHBoYUNvbXBvbmVudCgpLCBwcmVtdWx0
VG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCi0gICAgKTsKLQotICAgIHJldHVybiBtYWtl
VW5QcmVtdWx0aXBsaWVkUkdCQShwcmVtdWx0QmxlbmRlZCk7Ci19Ci0KLUNvbG9yIGJsZW5kV2l0
aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKLXsKLSAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhh
bmRsZSBjb2xvciBzcGFjZXMuCi0gICAgLy8gV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUg
b2YgdGhlIHZhbGlkIGZsYWcgYXQgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uCi0gICAgaWYgKHBy
b2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0
byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0KLSAgICByZXR1cm4g
ewotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWRDb21wb25lbnQoKSwgdG9TUkdC
LnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21T
UkdCLmdyZWVuQ29tcG9uZW50KCksIHRvU1JHQi5ncmVlbkNvbXBvbmVudCgpLCBwcm9ncmVzcyks
Ci0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWVDb21wb25lbnQoKSwgdG9TUkdC
LmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9t
U1JHQi5hbHBoYUNvbXBvbmVudCgpLCB0b1NSR0IuYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3Mp
Ci0gICAgfTsKLX0KLQotdm9pZCBDb2xvcjo6dGFnQXNWYWxpZCgpCi17Ci0gICAgbV9jb2xvckRh
dGEucmdiYUFuZEZsYWdzIHw9IHZhbGlkUkdCQUNvbG9yOwotfQotCi1jb25zdCBFeHRlbmRlZENv
bG9yJiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzRXh0ZW5kZWQo
KSk7Ci0gICAgcmV0dXJuICptX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yOwotfQotCi1UZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0g
ICAgcmV0dXJuIHRzIDw8IGNvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCk7Ci19Ci0KLVRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSkKLXsKLSAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKLSAgICBjYXNlIENvbG9yU3BhY2U6OlNS
R0I6Ci0gICAgICAgIHRzIDw8ICJzUkdCIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2xv
clNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgIHRzIDw8ICJMaW5lYXJSR0IiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKLSAgICAgICAgdHMgPDwgIkRp
c3BsYXlQMyI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24gMjYyMTA0KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOjI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZENvbG9yLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtYXRoPgor
I2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvTENoYXIuaD4KKworI2lmIFVTRShDRykKK3R5cGVkZWYgc3RydWN0
IENHQ29sb3IqIENHQ29sb3JSZWY7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKK3N0cnVj
dCBfRDNEQ09MT1JWQUxVRTsKK3R5cGVkZWYgX0QzRENPTE9SVkFMVUUgRDNEQ09MT1JWQUxVRTsK
K3R5cGVkZWYgRDNEQ09MT1JWQUxVRSBEMkRfQ09MT1JfRjsKK3R5cGVkZWYgRDJEX0NPTE9SX0Yg
RDJEMV9DT0xPUl9GOworc3RydWN0IEQyRF9WRUNUT1JfNEY7Cit0eXBlZGVmIEQyRF9WRUNUT1Jf
NEYgRDJEMV9WRUNUT1JfNEY7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYg
c3RydWN0IF9HZGtSR0JBIEdka1JHQkE7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdHJ1Y3QgRmxvYXRDb21wb25lbnRzOworCisvLyBDb2xvciB2YWx1ZSB3aXRoIDgtYml0IGNv
bXBvbmVudHMgZm9yIHJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYS4KKy8vIEZvciBoaXN0b3Jp
Y2FsIHJlYXNvbnMsIHN0b3JlZCBhcyBhIDMyLWJpdCBpbnRlZ2VyLCB3aXRoIGFscGhhIGluIHRo
ZSBoaWdoIGJpdHM6IEFSR0IuCitjbGFzcyBTaW1wbGVDb2xvciB7CitwdWJsaWM6CisgICAgY29u
c3RleHByIFNpbXBsZUNvbG9yKHVpbnQzMl90IHZhbHVlID0gMCkgOiBtX3ZhbHVlIHsgdmFsdWUg
fSB7IH0KKworICAgIGNvbnN0ZXhwciB1aW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWU7IH0KKworICAgIGNvbnN0ZXhwciB1aW50OF90IHJlZENvbXBvbmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUgPj4gMTY7IH0KKyAgICBjb25zdGV4cHIgdWludDhfdCBncmVlbkNvbXBv
bmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4gODsgfQorICAgIGNvbnN0ZXhwciB1aW50
OF90IGJsdWVDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgY29uc3Rl
eHByIHVpbnQ4X3QgYWxwaGFDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDI0
OyB9CisKKyAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGFscGhh
Q29tcG9uZW50KCkgPT0gMHhGRjsgfQorICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCk7IH0KKworICAgIFN0cmluZyBzZXJpYWxpemF0
aW9uRm9ySFRNTCgpIGNvbnN0OworICAgIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKCkgY29u
c3Q7CisgICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKK307CisKK2Jvb2wgb3Bl
cmF0b3I9PShTaW1wbGVDb2xvciwgU2ltcGxlQ29sb3IpOworYm9vbCBvcGVyYXRvciE9KFNpbXBs
ZUNvbG9yLCBTaW1wbGVDb2xvcik7CisKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBhZnRlciBtaWdy
YXRpbmcgdG8gdGhlIG5ldyBuYW1lLgordXNpbmcgUkdCQTMyID0gU2ltcGxlQ29sb3I7CisKK2Nv
bnN0ZXhwciBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKK2NvbnN0ZXhwciBS
R0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOworCitSR0JBMzIgbWFr
ZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhLCBib29sIGNlaWxp
bmcgPSB0cnVlKTsKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKTsKK1JHQkEz
MiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitS
R0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKTsKKworV0VCQ09SRV9FWFBPUlQg
UkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZs
b2F0IGEpOworV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaCwg
ZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7CitSR0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0EoZmxv
YXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7CisKK3VpbnQ4X3Qgcm91
bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQpOwordWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsKGZsb2F0KTsKKworY2xhc3MgQ29sb3IgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIENvbG9yKCkgeyB9CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIGFs
bCB0aGVzZSBjb25zdHJ1Y3RvcnMgYW5kIGNyZWF0aW9uIGZ1bmN0aW9ucyBhbmQgcmVwbGFjZSB0
aGUgb25lcyB0aGF0IGFyZSBzdGlsbCBuZWVkZWQgd2l0aCBmcmVlIGZ1bmN0aW9ucy4KKworICAg
IENvbG9yKFJHQkEzMiBjb2xvciwgYm9vbCB2YWxpZCA9IHRydWUpCisgICAgeworICAgICAgICBp
ZiAodmFsaWQpCisgICAgICAgICAgICBzZXRSR0IoY29sb3IpOworICAgIH0KKworICAgIGVudW0g
U2VtYW50aWNUYWcgeyBTZW1hbnRpYyB9OworICAgIENvbG9yKFJHQkEzMiBjb2xvciwgU2VtYW50
aWNUYWcpCisgICAgeworICAgICAgICBzZXRSR0IoY29sb3IpOworICAgICAgICBzZXRJc1NlbWFu
dGljKCk7CisgICAgfQorCisgICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikKKyAgICB7Cisg
ICAgICAgIHNldFJHQihyLCBnLCBiKTsKKyAgICB9CisKKyAgICBDb2xvcihpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQShyLCBnLCBiLCBh
KSk7CisgICAgfQorCisgICAgQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQg
YSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQTMyRnJvbUZsb2F0cyhyLCBnLCBiLCBh
KSk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlcyBhIG5ldyBjb2xvciBmcm9tIHRoZSBzcGVjaWZp
YyBDTVlLIGFuZCBhbHBoYSB2YWx1ZXMuCisgICAgQ29sb3IoZmxvYXQgYywgZmxvYXQgbSwgZmxv
YXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQUZy
b21DTVlLQShjLCBtLCB5LCBrLCBhKSk7CisgICAgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgZXhw
bGljaXQgQ29sb3IoY29uc3QgU3RyaW5nJik7CisgICAgZXhwbGljaXQgQ29sb3IoY29uc3QgY2hh
ciopOworCisgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBl
KQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxp
ZFJHQkFDb2xvciwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlr
ZSBhbiBFeHRlbmRlZENvbG9yIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShkZWxldGVkSGFz
aFZhbHVlICYgdmFsaWRSR0JBQ29sb3JCaXQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUg
bXVzdCBub3QgbG9vayBsaWtlIGEgdmFsaWQgUkdCQTMyIENvbG9yIik7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAmICgxIDw8IDQpLCAiQ29sb3IncyBkZWxldGVkIGhh
c2ggdmFsdWUgbXVzdCBoYXZlIHNvbWUgYml0cyBzZXQgdGhhdCBhbiBSR0JBMzIgQ29sb3Igd291
bGRuJ3QgaGF2ZSIpOworICAgICAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBkZWxldGVk
SGFzaFZhbHVlOworICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7CisgICAgfQorCisgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID09IGRlbGV0ZWRIYXNoVmFsdWU7CisgICAgfQor
CisgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVFbXB0eVZhbHVlVHlwZSkKKyAgICB7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiBpbnZhbGlkUkdCQUNvbG9y
LCAiQ29sb3IncyBlbXB0eSBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhbiBFeHRlbmRl
ZENvbG9yIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiAoMSA8PCA0
KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRo
YXQgYW4gUkdCQTMyIENvbG9yIHdvdWxkbid0IGhhdmUiKTsKKyAgICAgICAgbV9jb2xvckRhdGEu
cmdiYUFuZEZsYWdzID0gZW1wdHlIYXNoVmFsdWU7CisgICAgICAgIEFTU0VSVCghaXNFeHRlbmRl
ZCgpKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNyZWF0ZXMgYW4gRXh0ZW5kZWRDb2xvci4KKyAg
ICAvLyBGSVhNRTogSWYgdGhlIGNvbG9yU3BhY2UgaXMgc1JHQiBhbmQgdGhlIHZhbHVlcyBjYW4g
YWxsIGJlCisgICAgLy8gY29udmVydGVkIGV4YWN0bHkgdG8gaW50ZWdlcnMsIHdlIHNob3VsZCBt
YWtlIGEgbm9ybWFsIENvbG9yLgorICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBDb2xvclNwYWNlKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
KGNvbnN0IENvbG9yJik7CisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3ImJik7CisKKyAg
ICB+Q29sb3IoKQorICAgIHsKKyAgICAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgICAg
IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CisgICAgfQorCisgICAgLy8gUmV0
dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gSFRNTDUKKyAgICAvLyA8aHR0
cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjZmlsbC1h
bmQtc3Ryb2tlLXN0eWxlcz4gKDEwIFNlcHRlbWJlciAyMDE1KQorICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBzZXJpYWxpemVkKCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
Y3NzVGV4dCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBh
cyBlaXRoZXIgI1JSR0dCQiBvciAjUlJHR0JCQUEKKyAgICBTdHJpbmcgbmFtZUZvclJlbmRlclRy
ZWVBc1RleHQoKSBjb25zdDsKKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlz
RXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgdmFsaWRSR0JBQ29sb3JC
aXQpOyB9CisKKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgp
ID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogcmdiKCkuaXNPcGFxdWUoKTsgfQorICAg
IGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRl
ZCgpLmFscGhhKCkgPiAwLjAgOiByZ2IoKS5pc1Zpc2libGUoKTsgfQorCisgICAgaW50IHJlZCgp
IGNvbnN0IHsgcmV0dXJuIHJnYigpLnJlZENvbXBvbmVudCgpOyB9CisgICAgaW50IGdyZWVuKCkg
Y29uc3QgeyByZXR1cm4gcmdiKCkuZ3JlZW5Db21wb25lbnQoKTsgfQorICAgIGludCBibHVlKCkg
Y29uc3QgeyByZXR1cm4gcmdiKCkuYmx1ZUNvbXBvbmVudCgpOyB9CisgICAgaW50IGFscGhhKCkg
Y29uc3QgeyByZXR1cm4gcmdiKCkuYWxwaGFDb21wb25lbnQoKTsgfQorCisgICAgZmxvYXQgYWxw
aGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFs
cGhhKCkgOiBzdGF0aWNfY2FzdDxmbG9hdD4ocmdiKCkuYWxwaGFDb21wb25lbnQoKSkgLyAweEZG
OyB9CisKKyAgICBSR0JBMzIgcmdiKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21w
b25lbnRzPiBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0OworCisgICAgLy8gVGhpcyB3
aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgorICAgIFdF
QkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3Q7
CisKKyAgICAvLyBUaGlzIHdpbGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBp
bnRvIHNSR0IuCisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRDb21wb25lbnRzIHRvU1JHQkFDb21w
b25lbnRzTG9zc3koKSBjb25zdDsKKworICAgIENvbG9yIGxpZ2h0KCkgY29uc3Q7CisgICAgQ29s
b3IgZGFyaygpIGNvbnN0OworCisgICAgYm9vbCBpc0RhcmsoKSBjb25zdDsKKyAgICAKKyAgICBX
RUJDT1JFX0VYUE9SVCBmbG9hdCBsaWdodG5lc3MoKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMg
YW4gaW1wbGVtZW50YXRpb24gb2YgUG9ydGVyLUR1ZmYncyAic291cmNlLW92ZXIiIGVxdWF0aW9u
CisgICAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsKKyAgICBDb2xvciBibGVuZFdp
dGhXaGl0ZSgpIGNvbnN0OworCisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
ZmxvYXQpIGNvbnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKKwor
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIEFsdGVybmF0aXZlUm91bmRpbmcgdmFy
aWFudHMgYnkgc2V0dGxpbmcgb24gYSByb3VuZGluZyBiZWhhdmlvci4KKyAgICBDb2xvciBjb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxm
bG9hdD4pIGNvbnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdB
bHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsKKyAgICBDb2xvciBjb2xvcldpdGhBbHBo
YVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4pIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5n
KGZsb2F0KSBjb25zdDsKKworICAgIENvbG9yIG9wYXF1ZUNvbG9yKCkgY29uc3QgeyByZXR1cm4g
Y29sb3JXaXRoQWxwaGEoMS4wZik7IH0KKworICAgIC8vIFRydWUgaWYgdGhlIGNvbG9yIG9yaWdp
bmF0ZWQgZnJvbSBhIENTUyBzZW1hbnRpYyBjb2xvciBuYW1lLgorICAgIGJvb2wgaXNTZW1hbnRp
YygpIGNvbnN0IHsgcmV0dXJuICFpc0V4dGVuZGVkKCkgJiYgKG1fY29sb3JEYXRhLnJnYmFBbmRG
bGFncyAmIGlzU2VtYW50aWNSQkdBQ29sb3JCaXQpOyB9CisKKyNpZiBQTEFURk9STShHVEspCisg
ICAgQ29sb3IoY29uc3QgR2RrUkdCQSYpOworICAgIG9wZXJhdG9yIEdka1JHQkEoKSBjb25zdDsK
KyNlbmRpZgorCisjaWYgVVNFKENHKQorICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENHQ29sb3JS
ZWYpOworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENHQ29sb3JSZWYsIFNlbWFudGljVGFnKTsK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQorICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKEQy
RDFfQ09MT1JfRik7CisgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgRDJEMV9DT0xPUl9GKCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYoKSBjb25z
dDsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcm
LCBSR0JBMzImKTsKKyAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZ1Zp
ZXcmLCBSR0JBMzImKTsKKyAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IExDaGFy
KiwgdW5zaWduZWQsIFJHQkEzMiYpOworICAgIHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCwgUkdCQTMyJik7CisKKyAgICBzdGF0aWMgY29uc3RleHByIFNp
bXBsZUNvbG9yIGJsYWNrIHsgMHhGRjAwMDAwMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgU2lt
cGxlQ29sb3Igd2hpdGUgeyAweEZGRkZGRkZGIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1w
bGVDb2xvciBkYXJrR3JheSB7IDB4RkY4MDgwODAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNp
bXBsZUNvbG9yIGdyYXkgeyAweEZGQTBBMEEwIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1w
bGVDb2xvciBsaWdodEdyYXkgeyAweEZGQzBDMEMwIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBT
aW1wbGVDb2xvciB0cmFuc3BhcmVudCB7IDB4MDAwMDAwMDAgfTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFNpbXBsZUNvbG9yIGN5YW4geyAweEZGMDBGRkZGIH07CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBTaW1wbGVDb2xvciB5ZWxsb3cgeyAweEZGRkZGRjAwIH07CisKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgY29tcG9zaXRpb25GaWxs
IHsgMHgzQ0FGQzBFMyB9OworI2Vsc2UKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9y
IGNvbXBvc2l0aW9uRmlsbCB7IDB4RkZFMURENTUgfTsKKyNlbmRpZgorCisgICAgYm9vbCBpc0V4
dGVuZGVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKG1fY29sb3JEYXRhLnJnYmFB
bmRGbGFncyAmIGludmFsaWRSR0JBQ29sb3IpOworICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBj
b25zdCBFeHRlbmRlZENvbG9yJiBhc0V4dGVuZGVkKCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VY
UE9SVCBDb2xvciYgb3BlcmF0b3I9KGNvbnN0IENvbG9yJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
Q29sb3ImIG9wZXJhdG9yPShDb2xvciYmKTsKKworICAgIC8vIEV4dGVuZGVkIGFuZCBub24tZXh0
ZW5kZWQgY29sb3JzIHdpbGwgYWx3YXlzIGJlIG5vbi1lcXVhbC4KKyAgICBmcmllbmQgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CisgICAgZnJpZW5kIGJv
b2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9y
JiBiKTsKKworICAgIHN0YXRpYyBib29sIGlzQmxhY2tDb2xvcihjb25zdCBDb2xvciYpOworICAg
IHN0YXRpYyBib29sIGlzV2hpdGVDb2xvcihjb25zdCBDb2xvciYpOworCisgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb2xvcj4gZGVjb2RlKERlY29kZXImKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIHNldFJHQihpbnQgciwgaW50IGcsIGludCBiKSB7IHNldFJH
QihtYWtlUkdCKHIsIGcsIGIpKTsgfQorICAgIHZvaWQgc2V0UkdCKFJHQkEzMik7CisgICAgdm9p
ZCBzZXRJc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgfD0gaXNTZW1hbnRp
Y1JCR0FDb2xvckJpdDsgfQorCisgICAgLy8gMHhfX19fX19fMDAgaXMgYW4gRXh0ZW5kZWRDb2xv
ciBwb2ludGVyLgorICAgIC8vIDB4X19fX19fXzAxIGlzIGFuIGludmFsaWQgUkdCQTMyLgorICAg
IC8vIDB4X19fX19fXzExIGlzIGEgdmFsaWQgUkdCQTMyLgorICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBleHRlbmRlZENvbG9yID0gMHgwOworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpbnZh
bGlkUkdCQUNvbG9yID0gMHgxOworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCB2YWxpZFJHQkFD
b2xvckJpdCA9IDB4MjsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRSR0JBQ29sb3Ig
PSAweDM7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGlzU2VtYW50aWNSQkdBQ29sb3JCaXQg
PSAweDQ7CisKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgZGVsZXRlZEhhc2hWYWx1ZSA9IDB4
RkZGRkZGRkZGRkZGRkZGRDsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgZW1wdHlIYXNoVmFs
dWUgPSAweEZGRkZGRkZGRkZGRkZGRkI7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRhZ0Fz
VmFsaWQoKTsKKworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDY0X3QgcmdiYUFuZEZsYWdzIHsg
aW52YWxpZFJHQkFDb2xvciB9OworICAgICAgICBFeHRlbmRlZENvbG9yKiBleHRlbmRlZENvbG9y
OworICAgIH0gbV9jb2xvckRhdGE7Cit9OworCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3Im
LCBjb25zdCBDb2xvciYpOworYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiwgY29uc3QgQ29s
b3ImKTsKKworLy8gT25lIG9yIGJvdGggbXVzdCBiZSBleHRlbmRlZCBjb2xvcnMuCitXRUJDT1JF
X0VYUE9SVCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xv
ciYpOworCitDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpOworQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29s
b3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKTsKKworaW50IGRpZmZl
cmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKKwordWludDE2X3QgZmFz
dE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpOwordWludDE2X3QgZmFzdERpdmlkZUJ5MjU1
KHVpbnQxNl90KTsKKworI2lmIFVTRShDRykKK1dFQkNPUkVfRVhQT1JUIENHQ29sb3JSZWYgY2Fj
aGVkQ0dDb2xvcihjb25zdCBDb2xvciYpOworI2VuZGlmCisKK1dFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBDb2xvciYpOwor
V0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVh
bSYsIENvbG9yU3BhY2UpOworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yIGEs
IFNpbXBsZUNvbG9yIGIpCit7CisgICAgcmV0dXJuIGEudmFsdWUoKSA9PSBiLnZhbHVlKCk7Cit9
CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oU2ltcGxlQ29sb3IgYSwgU2ltcGxlQ29sb3IgYikK
K3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVuZGVkKCkg
fHwgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBleHRlbmRlZENvbG9yc0VxdWFsKGEs
IGIpOworCisgICAgcmV0dXJuIGEubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID09IGIubV9jb2xv
ckRhdGEucmdiYUFuZEZsYWdzOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENv
bG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitp
bmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29u
c3QgQ29sb3ImIGIpCit7CisgICAgaWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgp
KQorICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKKyAgICByZXR1cm4g
KGEubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljUkJHQUNvbG9y
Qml0KSA9PSAoYi5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNS
QkdBQ29sb3JCaXQpOworfQorCitpbmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAor
eworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuaGFz
aCgpOworCisgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3Mp
OworfQorCitpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGludCB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oMjU1LCB2YWx1ZSkpOworfQor
CitpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0IHZhbHVlKQor
eworICAgIHJldHVybiBzdGQ6Om1heCgwLmYsIHN0ZDo6bWluKDI1NS5mLCBzdGQ6OnJvdW5kKHZh
bHVlKSkpOworfQorCitpbmxpbmUgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3Qg
dmFsdWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSA8PCA4KSAtIHZhbHVlOworfQorCitpbmxpbmUg
dWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90IHZhbHVlKQoreworICAgIC8vIFdoaWxl
IHRoaXMgaXMgYW4gYXBwcm94aW1hdGUgYWxnb3JpdGhtIGZvciBkaXZpc2lvbiBieSAyNTUsIGl0
IGdpdmVzIHBlcmZlY3RseSBhY2N1cmF0ZSByZXN1bHRzIGZvciAxNi1iaXQgdmFsdWVzLgorICAg
IC8vIEZJWE1FOiBTaW5jZSB0aGlzIGdpdmVzIGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2LWJpdCB2
YWx1ZXMsIHdlIHNob3VsZCBnZXQgdGhpcyBvcHRpbWl6YXRpb24gaW50byBjb21waWxlcnMgbGlr
ZSBjbGFuZy4KKyAgICB1aW50MTZfdCBhcHByb3hpbWF0aW9uID0gdmFsdWUgPj4gODsKKyAgICB1
aW50MTZfdCByZW1haW5kZXIgPSB2YWx1ZSAtIChhcHByb3hpbWF0aW9uICogMjU1KSArIDE7Cisg
ICAgcmV0dXJuIGFwcHJveGltYXRpb24gKyAocmVtYWluZGVyID4+IDgpOworfQorCitpbmxpbmUg
Q29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKK3sKKyAgICByZXR1cm4gYWxwaGEg
PyBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhhbHBo
YS52YWx1ZSgpKSA6ICp0aGlzOworfQorCitpbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QK
K3sKKyAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3Vu
ZGluZyhhbHBoYS52YWx1ZSgpKSA6ICp0aGlzOworfQorCitpbmxpbmUgUkdCQTMyIENvbG9yOjpy
Z2IoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgQVNTRVJUKCFpc0V4dGVuZGVk
KCkpIGhlcmUsIG9yIHByb2R1Y2UKKyAgICAvLyBhbiBSR0JBMzIgZXF1aXZhbGVudCBmb3IgYW4g
RXh0ZW5kZWRDb2xvci4gSWRlYWxseSB0aGUgZm9ybWVyLAorICAgIC8vIHNvIHdlIGNhbiBhdWRp
dCBhbGwgdGhlIHJnYigpIGNhbGwgc2l0ZXMgdG8gaGFuZGxlIGV4dGVuZGVkLgorICAgIHJldHVy
biB7IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPj4gMzIp
IH07Cit9CisKK2lubGluZSB2b2lkIENvbG9yOjpzZXRSR0IoUkdCQTMyIHJnYikKK3sKKyAgICBt
X2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmdiLnZhbHVl
KCkpIDw8IDMyOworICAgIHRhZ0FzVmFsaWQoKTsKK30KKworaW5saW5lIGJvb2wgQ29sb3I6Omlz
QmxhY2tDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yLmlzRXh0ZW5k
ZWQoKSkgeworICAgICAgICBjb25zdCBFeHRlbmRlZENvbG9yJiBleHRlbmRlZENvbG9yID0gY29s
b3IuYXNFeHRlbmRlZCgpOworICAgICAgICByZXR1cm4gIWV4dGVuZGVkQ29sb3IucmVkKCkgJiYg
IWV4dGVuZGVkQ29sb3IuZ3JlZW4oKSAmJiAhZXh0ZW5kZWRDb2xvci5ibHVlKCkgJiYgZXh0ZW5k
ZWRDb2xvci5hbHBoYSgpID09IDE7CisgICAgfQorCisgICAgcmV0dXJuIGNvbG9yLnJnYigpID09
IENvbG9yOjpibGFjazsKK30KKworaW5saW5lIGJvb2wgQ29sb3I6OmlzV2hpdGVDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkgeworICAgICAg
ICBjb25zdCBFeHRlbmRlZENvbG9yJiBleHRlbmRlZENvbG9yID0gY29sb3IuYXNFeHRlbmRlZCgp
OworICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvci5yZWQoKSA9PSAxICYmIGV4dGVuZGVkQ29s
b3IuZ3JlZW4oKSA9PSAxICYmIGV4dGVuZGVkQ29sb3IuYmx1ZSgpID09IDEgJiYgZXh0ZW5kZWRD
b2xvci5hbHBoYSgpID09IDE7CisgICAgfQorICAgIAorICAgIHJldHVybiBjb2xvci5yZ2IoKSA9
PSBDb2xvcjo6d2hpdGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIENvbG9y
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgp
KSB7CisgICAgICAgIGVuY29kZXIgPDwgdHJ1ZTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVu
ZGVkKCkucmVkKCk7CisgICAgICAgIGVuY29kZXIgPDwgYXNFeHRlbmRlZCgpLmdyZWVuKCk7Cisg
ICAgICAgIGVuY29kZXIgPDwgYXNFeHRlbmRlZCgpLmJsdWUoKTsKKyAgICAgICAgZW5jb2RlciA8
PCBhc0V4dGVuZGVkKCkuYWxwaGEoKTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCku
Y29sb3JTcGFjZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5jb2RlciA8PCBm
YWxzZTsKKworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIGVuY29kZXIgPDwgZmFsc2U7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZW5j
b2RlIHdoZXRoZXIgdGhlIGNvbG9yIGlzIHNlbWFudGljLgorCisgICAgdWludDMyX3QgdmFsdWUg
PSByZ2IoKS52YWx1ZSgpOworCisgICAgZW5jb2RlciA8PCB0cnVlOworICAgIGVuY29kZXIgPDwg
dmFsdWU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxDb2xvcj4gQ29s
b3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGJvb2wgaXNFeHRlbmRlZDsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRXh0ZW5kZWQpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgaWYgKGlzRXh0ZW5kZWQpIHsKKyAgICAgICAgZmxvYXQgcmVkOworICAg
ICAgICBmbG9hdCBncmVlbjsKKyAgICAgICAgZmxvYXQgYmx1ZTsKKyAgICAgICAgZmxvYXQgYWxw
aGE7CisgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZTsKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZWQpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShncmVlbikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJsdWUpKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhbHBoYSkpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGNvbG9yU3BhY2UpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgcmV0dXJuIENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCBjb2xvclNwYWNlKTsKKyAg
ICB9CisKKyAgICBib29sIGlzVmFsaWQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc1ZhbGlk
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmICghaXNWYWxpZCkKKyAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICB1aW50MzJfdCB2YWx1ZTsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IHJldHVybiBDb2xvciB7IFNpbXBsZUNvbG9yIHsgdmFsdWUgfSB9OworfQorCitjb25zdGV4cHIg
UkdCQTMyIG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQgYikKK3sKKyAgICByZXR1cm4gbWFrZVJH
QkEociwgZywgYiwgMHhGRik7Cit9CisKK2NvbnN0ZXhwciBSR0JBMzIgbWFrZVJHQkEoaW50IHIs
IGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGEsIDB4RkYpKSA8PCAyNCB8IHN0ZDo6bWF4KDAsIHN0
ZDo6bWluKHIsIDB4RkYpKSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDB4RkYpKSA8
PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMHhGRikpKSB9OworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgewordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8V2ViQ29yZTo6Q29sb3I+OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJD
b3JlOjpDb2xvcj47Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3Iu
aAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMzcgKzI1LDE0IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkV4dGVuZGVkQ29s
b3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4K
ICNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CisjaW5jbHVkZSA8
dHVwbGU+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0
aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0xD
aGFyLmg+Ci0KLSNpZiBVU0UoQ0cpCi10eXBlZGVmIHN0cnVjdCBDR0NvbG9yKiBDR0NvbG9yUmVm
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi1zdHJ1Y3QgX0QzRENPTE9SVkFMVUU7Ci10
eXBlZGVmIF9EM0RDT0xPUlZBTFVFIEQzRENPTE9SVkFMVUU7Ci10eXBlZGVmIEQzRENPTE9SVkFM
VUUgRDJEX0NPTE9SX0Y7Ci10eXBlZGVmIEQyRF9DT0xPUl9GIEQyRDFfQ09MT1JfRjsKLXN0cnVj
dCBEMkRfVkVDVE9SXzRGOwotdHlwZWRlZiBEMkRfVkVDVE9SXzRGIEQyRDFfVkVDVE9SXzRGOwot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi10eXBlZGVmIHN0cnVjdCBfR2RrUkdCQSBHZGtS
R0JBOwotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZsb2F0Q29tcG9u
ZW50czsKLQogLy8gQ29sb3IgdmFsdWUgd2l0aCA4LWJpdCBjb21wb25lbnRzIGZvciByZWQsIGdy
ZWVuLCBibHVlLCBhbmQgYWxwaGEuCiAvLyBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBzdG9yZWQg
YXMgYSAzMi1iaXQgaW50ZWdlciwgd2l0aCBhbHBoYSBpbiB0aGUgaGlnaCBiaXRzOiBBUkdCLgog
Y2xhc3MgU2ltcGxlQ29sb3IgewpAQCAtNjksNiArNDYsOCBAQCBwdWJsaWM6CiAgICAgY29uc3Rl
eHByIHVpbnQ4X3QgYmx1ZUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAg
ICBjb25zdGV4cHIgdWludDhfdCBhbHBoYUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWUgPj4gMjQ7IH0KIAorICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNvbXBvbmVudEFzRmxvYXQo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGFDb21wb25lbnQoKSkgLyAw
eEZGOyB9CisKICAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGFs
cGhhQ29tcG9uZW50KCkgPT0gMHhGRjsgfQogICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCk7IH0KIApAQCAtNzYsNiArNTUsMjIgQEAg
cHVibGljOgogICAgIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKCkgY29uc3Q7CiAgICAgU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3Q7CiAKKyAgICBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgY29sb3JXaXRoQWxwaGEodWludDhfdCBhbHBoYSkgY29uc3QgeyBy
ZXR1cm4geyAobV92YWx1ZSAmIDB4MDBGRkZGRkYpIHwgYWxwaGEgPDwgMjQgfTsgfQorCisgICAg
dGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KKyAgICBjb25zdGV4cHIgdWludDhfdCBnZXQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChOIDwgNCk7CisgICAgICAgIGlmIGNvbnN0
ZXhwciAoIU4pCisgICAgICAgICAgICByZXR1cm4gcmVkQ29tcG9uZW50KCk7CisgICAgICAgIGVs
c2UgaWYgY29uc3RleHByIChOID09IDEpCisgICAgICAgICAgICByZXR1cm4gZ3JlZW5Db21wb25l
bnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMikKKyAgICAgICAgICAgIHJl
dHVybiBibHVlQ29tcG9uZW50KCk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChOID09IDMp
CisgICAgICAgICAgICByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsKKyAgICB9CisKIHByaXZhdGU6
CiAgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKIH07CkBAIC0xMDEsMjQ0ICs5NiwxMSBAQCBS
R0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgCiB1aW50OF90IHJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwoaW50KTsKIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5l
bChmbG9hdCk7CiAKLWNsYXNzIENvbG9yIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBDb2xvcigpIHsgfQotCi0gICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgdGhl
c2UgY29uc3RydWN0b3JzIGFuZCBjcmVhdGlvbiBmdW5jdGlvbnMgYW5kIHJlcGxhY2UgdGhlIG9u
ZXMgdGhhdCBhcmUgc3RpbGwgbmVlZGVkIHdpdGggZnJlZSBmdW5jdGlvbnMuCi0KLSAgICBDb2xv
cihSR0JBMzIgY29sb3IsIGJvb2wgdmFsaWQgPSB0cnVlKQotICAgIHsKLSAgICAgICAgaWYgKHZh
bGlkKQotICAgICAgICAgICAgc2V0UkdCKGNvbG9yKTsKLSAgICB9Ci0KLSAgICBlbnVtIFNlbWFu
dGljVGFnIHsgU2VtYW50aWMgfTsKLSAgICBDb2xvcihSR0JBMzIgY29sb3IsIFNlbWFudGljVGFn
KQotICAgIHsKLSAgICAgICAgc2V0UkdCKGNvbG9yKTsKLSAgICAgICAgc2V0SXNTZW1hbnRpYygp
OwotICAgIH0KLQotICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpCi0gICAgewotICAgICAg
ICBzZXRSR0IociwgZywgYik7Ci0gICAgfQotCi0gICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQg
YiwgaW50IGEpCi0gICAgewotICAgICAgICBzZXRSR0IobWFrZVJHQkEociwgZywgYiwgYSkpOwot
ICAgIH0KLQotICAgIENvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCi0g
ICAgewotICAgICAgICBzZXRSR0IobWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywgYiwgYSkpOwot
ICAgIH0KLQotICAgIC8vIENyZWF0ZXMgYSBuZXcgY29sb3IgZnJvbSB0aGUgc3BlY2lmaWMgQ01Z
SyBhbmQgYWxwaGEgdmFsdWVzLgotICAgIENvbG9yKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHks
IGZsb2F0IGssIGZsb2F0IGEpCi0gICAgewotICAgICAgICBzZXRSR0IobWFrZVJHQkFGcm9tQ01Z
S0EoYywgbSwgeSwgaywgYSkpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0
IENvbG9yKGNvbnN0IFN0cmluZyYpOwotICAgIGV4cGxpY2l0IENvbG9yKGNvbnN0IGNoYXIqKTsK
LQotICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAg
ICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAmIGludmFsaWRSR0JB
Q29sb3IsICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4g
RXh0ZW5kZWRDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoZGVsZXRlZEhhc2hWYWx1
ZSAmIHZhbGlkUkdCQUNvbG9yQml0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qg
bm90IGxvb2sgbGlrZSBhIHZhbGlkIFJHQkEzMiBDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KGRlbGV0ZWRIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZh
bHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gUkdCQTMyIENvbG9yIHdvdWxkbid0
IGhhdmUiKTsKLSAgICAgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gZGVsZXRlZEhhc2hW
YWx1ZTsKLSAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwotICAgIH0KLQotICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
Y29sb3JEYXRhLnJnYmFBbmRGbGFncyA9PSBkZWxldGVkSGFzaFZhbHVlOwotICAgIH0KLQotICAg
IGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpCi0gICAgewotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgaW52YWxpZFJHQkFDb2xvciwgIkNv
bG9yJ3MgZW1wdHkgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xv
ciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgKDEgPDwgNCksICJD
b2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFu
IFJHQkEzMiBDb2xvciB3b3VsZG4ndCBoYXZlIik7Ci0gICAgICAgIG1fY29sb3JEYXRhLnJnYmFB
bmRGbGFncyA9IGVtcHR5SGFzaFZhbHVlOwotICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7
Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjcmVhdGVzIGFuIEV4dGVuZGVkQ29sb3IuCi0gICAgLy8g
RklYTUU6IElmIHRoZSBjb2xvclNwYWNlIGlzIHNSR0IgYW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBi
ZQotICAgIC8vIGNvbnZlcnRlZCBleGFjdGx5IHRvIGludGVnZXJzLCB3ZSBzaG91bGQgbWFrZSBh
IG5vcm1hbCBDb2xvci4KLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihmbG9hdCwgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgQ29sb3JTcGFjZSk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihjb25z
dCBDb2xvciYpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENvbG9yJiYpOwotCi0gICAgfkNv
bG9yKCkKLSAgICB7Ci0gICAgICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgICAgICBtX2Nv
bG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigpOwotICAgIH0KLQotICAgIC8vIFJldHVybnMg
dGhlIGNvbG9yIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIEhUTUw1Ci0gICAgLy8gPGh0dHBzOi8v
aHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI2ZpbGwtYW5kLXN0
cm9rZS1zdHlsZXM+ICgxMCBTZXB0ZW1iZXIgMjAxNSkKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgc2VyaWFsaXplZCgpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGNzc1Rl
eHQoKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMgdGhlIGNvbG9yIHNlcmlhbGl6ZWQgYXMgZWl0
aGVyICNSUkdHQkIgb3IgI1JSR0dCQkFBCi0gICAgU3RyaW5nIG5hbWVGb3JSZW5kZXJUcmVlQXNU
ZXh0KCkgY29uc3Q7Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVu
ZGVkKCkgfHwgKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIHZhbGlkUkdCQUNvbG9yQml0KTsg
fQotCi0gICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFz
RXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IHJnYigpLmlzT3BhcXVlKCk7IH0KLSAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5h
bHBoYSgpID4gMC4wIDogcmdiKCkuaXNWaXNpYmxlKCk7IH0KLQotICAgIGludCByZWQoKSBjb25z
dCB7IHJldHVybiByZ2IoKS5yZWRDb21wb25lbnQoKTsgfQotICAgIGludCBncmVlbigpIGNvbnN0
IHsgcmV0dXJuIHJnYigpLmdyZWVuQ29tcG9uZW50KCk7IH0KLSAgICBpbnQgYmx1ZSgpIGNvbnN0
IHsgcmV0dXJuIHJnYigpLmJsdWVDb21wb25lbnQoKTsgfQotICAgIGludCBhbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIHJnYigpLmFscGhhQ29tcG9uZW50KCk7IH0KLQotICAgIGZsb2F0IGFscGhhQXNG
bG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgp
IDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJnYigpLmFscGhhQ29tcG9uZW50KCkpIC8gMHhGRjsgfQot
Ci0gICAgUkdCQTMyIHJnYigpIGNvbnN0OwotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Owot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50
cz4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKLQotICAgIC8vIFRoaXMgd2lsbCBj
b252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KLSAgICBXRUJDT1JF
X0VYUE9SVCBTaW1wbGVDb2xvciB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0OwotCi0g
ICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBz
UkdCLgotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0Q29tcG9uZW50cyB0b1NSR0JBQ29tcG9uZW50
c0xvc3N5KCkgY29uc3Q7Ci0KLSAgICBDb2xvciBsaWdodCgpIGNvbnN0OwotICAgIENvbG9yIGRh
cmsoKSBjb25zdDsKLQotICAgIGJvb2wgaXNEYXJrKCkgY29uc3Q7Ci0gICAgCi0gICAgV0VCQ09S
RV9FWFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIGlzIGFuIGlt
cGxlbWVudGF0aW9uIG9mIFBvcnRlci1EdWZmJ3MgInNvdXJjZS1vdmVyIiBlcXVhdGlvbgotICAg
IENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJikgY29uc3Q7Ci0gICAgQ29sb3IgYmxlbmRXaXRoV2hp
dGUoKSBjb25zdDsKLQotICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0
KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7Ci0KLSAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZvciBBbHRlcm5hdGl2ZVJvdW5kaW5nIHZhcmlhbnRz
IGJ5IHNldHRsaW5nIG9uIGEgcm91bmRpbmcgYmVoYXZpb3IuCi0gICAgQ29sb3IgY29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+
KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhmbG9hdCkgY29uc3Q7Ci0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFVc2lu
Z0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+KSBjb25zdDsKLSAgICBXRUJDT1JF
X0VYUE9SVCBDb2xvciBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9h
dCkgY29uc3Q7Ci0KLSAgICBDb2xvciBvcGFxdWVDb2xvcigpIGNvbnN0IHsgcmV0dXJuIGNvbG9y
V2l0aEFscGhhKDEuMGYpOyB9Ci0KLSAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVk
IGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KLSAgICBib29sIGlzU2VtYW50aWMoKSBj
b25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3Mg
JiBpc1NlbWFudGljUkJHQUNvbG9yQml0KTsgfQotCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIENv
bG9yKGNvbnN0IEdka1JHQkEmKTsKLSAgICBvcGVyYXRvciBHZGtSR0JBKCkgY29uc3Q7Ci0jZW5k
aWYKLQotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmLCBTZW1hbnRpY1RhZyk7Ci0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihEMkQxX0NP
TE9SX0YpOwotICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0
OwotICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3Q7Ci0j
ZW5kaWYKLQotICAgIHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nJiwgUkdC
QTMyJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmdWaWV3Jiwg
UkdCQTMyJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBMQ2hhciosIHVu
c2lnbmVkLCBSR0JBMzImKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFVD
aGFyKiwgdW5zaWduZWQsIFJHQkEzMiYpOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVD
b2xvciBibGFjayB7IDB4RkYwMDAwMDAgfTsKLSAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNv
bG9yIHdoaXRlIHsgMHhGRkZGRkZGRiB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29s
b3IgZGFya0dyYXkgeyAweEZGODA4MDgwIH07Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVD
b2xvciBncmF5IHsgMHhGRkEwQTBBMCB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29s
b3IgbGlnaHRHcmF5IHsgMHhGRkMwQzBDMCB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxl
Q29sb3IgdHJhbnNwYXJlbnQgeyAweDAwMDAwMDAwIH07Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBT
aW1wbGVDb2xvciBjeWFuIHsgMHhGRjAwRkZGRiB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2lt
cGxlQ29sb3IgeWVsbG93IHsgMHhGRkZGRkYwMCB9OwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGNvbXBvc2l0aW9uRmlsbCB7IDB4
M0NBRkMwRTMgfTsKLSNlbHNlCi0gICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb21w
b3NpdGlvbkZpbGwgeyAweEZGRTFERDU1IH07Ci0jZW5kaWYKLQotICAgIGJvb2wgaXNFeHRlbmRl
ZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gIShtX2NvbG9yRGF0YS5yZ2JhQW5kRmxh
Z3MgJiBpbnZhbGlkUkdCQUNvbG9yKTsKLSAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
RXh0ZW5kZWRDb2xvciYgYXNFeHRlbmRlZCgpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQg
Q29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
JiBvcGVyYXRvcj0oQ29sb3ImJik7Ci0KLSAgICAvLyBFeHRlbmRlZCBhbmQgbm9uLWV4dGVuZGVk
IGNvbG9ycyB3aWxsIGFsd2F5cyBiZSBub24tZXF1YWwuCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwotICAgIGZyaWVuZCBib29sIGVx
dWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7
Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBzdGF0
aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKLQotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVyJik7Ci0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBzZXRSR0IoaW50IHIsIGludCBnLCBpbnQgYikgeyBzZXRSR0IobWFr
ZVJHQihyLCBnLCBiKSk7IH0KLSAgICB2b2lkIHNldFJHQihSR0JBMzIpOwotICAgIHZvaWQgc2V0
SXNTZW1hbnRpYygpIHsgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzIHw9IGlzU2VtYW50aWNSQkdB
Q29sb3JCaXQ7IH0KLQotICAgIC8vIDB4X19fX19fXzAwIGlzIGFuIEV4dGVuZGVkQ29sb3IgcG9p
bnRlci4KLSAgICAvLyAweF9fX19fX18wMSBpcyBhbiBpbnZhbGlkIFJHQkEzMi4KLSAgICAvLyAw
eF9fX19fX18xMSBpcyBhIHZhbGlkIFJHQkEzMi4KLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qg
ZXh0ZW5kZWRDb2xvciA9IDB4MDsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaW52YWxpZFJH
QkFDb2xvciA9IDB4MTsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRSR0JBQ29sb3JC
aXQgPSAweDI7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHZhbGlkUkdCQUNvbG9yID0gMHgz
OwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpc1NlbWFudGljUkJHQUNvbG9yQml0ID0gMHg0
OwotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlbGV0ZWRIYXNoVmFsdWUgPSAweEZGRkZG
RkZGRkZGRkZGRkQ7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGVtcHR5SGFzaFZhbHVlID0g
MHhGRkZGRkZGRkZGRkZGRkZCOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0YWdBc1ZhbGlk
KCk7Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIHVpbnQ2NF90IHJnYmFBbmRGbGFncyB7IGludmFs
aWRSR0JBQ29sb3IgfTsKLSAgICAgICAgRXh0ZW5kZWRDb2xvciogZXh0ZW5kZWRDb2xvcjsKLSAg
ICB9IG1fY29sb3JEYXRhOwotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiwgY29u
c3QgQ29sb3ImKTsKLWJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7
Ci0KLS8vIE9uZSBvciBib3RoIG11c3QgYmUgZXh0ZW5kZWQgY29sb3JzLgotV0VCQ09SRV9FWFBP
UlQgYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsK
LQotQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91Ymxl
IHByb2dyZXNzKTsKLUNvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBm
cm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7Ci0KLWludCBkaWZmZXJlbmNl
U3F1YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Ci0KIHVpbnQxNl90IGZhc3RNdWx0
aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKTsKIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50
MTZfdCk7CiAKLSNpZiBVU0UoQ0cpCi1XRUJDT1JFX0VYUE9SVCBDR0NvbG9yUmVmIGNhY2hlZENH
Q29sb3IoY29uc3QgQ29sb3ImKTsKLSNlbmRpZgordWludDhfdCBjb2xvckZsb2F0VG9SR0JBQnl0
ZShmbG9hdCBmKTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENvbG9yJik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQ29sb3JTcGFjZSk7CiAKIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3IgYSwgU2ltcGxlQ29sb3IgYikKIHsKQEAg
LTM1MCwzNCArMTEyLDYgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBT
aQogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQotewotICAgIGlmIChhLmlzRXh0ZW5kZWQoKSB8
fCBiLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGV4dGVuZGVkQ29sb3JzRXF1YWwoYSwg
Yik7Ci0KLSAgICByZXR1cm4gYS5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPT0gYi5tX2NvbG9y
RGF0YS5yZ2JhQW5kRmxhZ3M7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29s
b3ImIGEsIGNvbnN0IENvbG9yJiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KLWlu
bGluZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25z
dCBDb2xvciYgYikKLXsKLSAgICBpZiAoYS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkp
Ci0gICAgICAgIHJldHVybiBleHRlbmRlZENvbG9yc0VxdWFsKGEsIGIpOwotICAgIHJldHVybiAo
YS5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNSQkdBQ29sb3JC
aXQpID09IChiLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1JC
R0FDb2xvckJpdCk7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5oYXNo
KCk7Ci0KLSAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyk7
Ci19Ci0KIGlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVl
KQogewogICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbigyNTUsIHZhbHVlKSk7CkBAIC00
MDIsMTE2ICsxMzYsMTEgQEAgaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZf
dAogICAgIHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRlciA+PiA4KTsKIH0KIAotaW5s
aW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRp
dmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFs
cGhhID8gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmco
YWxwaGEudmFsdWUoKSkgOiAqdGhpczsKLX0KLQotaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldp
dGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGFscGhhID8gY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZl
Um91bmRpbmcoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKLX0KLQotaW5saW5lIFJHQkEzMiBDb2xv
cjo6cmdiKCkgY29uc3QKK2lubGluZSB1aW50OF90IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0
IGYpCiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQoKSkgaGVy
ZSwgb3IgcHJvZHVjZQotICAgIC8vIGFuIFJHQkEzMiBlcXVpdmFsZW50IGZvciBhbiBFeHRlbmRl
ZENvbG9yLiBJZGVhbGx5IHRoZSBmb3JtZXIsCi0gICAgLy8gc28gd2UgY2FuIGF1ZGl0IGFsbCB0
aGUgcmdiKCkgY2FsbCBzaXRlcyB0byBoYW5kbGUgZXh0ZW5kZWQuCi0gICAgcmV0dXJuIHsgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA+PiAzMikgfTsKLX0K
LQotaW5saW5lIHZvaWQgQ29sb3I6OnNldFJHQihSR0JBMzIgcmdiKQotewotICAgIG1fY29sb3JE
YXRhLnJnYmFBbmRGbGFncyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZ2IudmFsdWUoKSkgPDwg
MzI7Ci0gICAgdGFnQXNWYWxpZCgpOwotfQotCi1pbmxpbmUgYm9vbCBDb2xvcjo6aXNCbGFja0Nv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKSB7
Ci0gICAgICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGV4dGVuZGVkQ29sb3IgPSBjb2xvci5hc0V4
dGVuZGVkKCk7Ci0gICAgICAgIHJldHVybiAhZXh0ZW5kZWRDb2xvci5yZWQoKSAmJiAhZXh0ZW5k
ZWRDb2xvci5ncmVlbigpICYmICFleHRlbmRlZENvbG9yLmJsdWUoKSAmJiBleHRlbmRlZENvbG9y
LmFscGhhKCkgPT0gMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29sb3IucmdiKCkgPT0gQ29sb3I6
OmJsYWNrOwotfQotCi1pbmxpbmUgYm9vbCBDb2xvcjo6aXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikKLXsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGNvbnN0
IEV4dGVuZGVkQ29sb3ImIGV4dGVuZGVkQ29sb3IgPSBjb2xvci5hc0V4dGVuZGVkKCk7Ci0gICAg
ICAgIHJldHVybiBleHRlbmRlZENvbG9yLnJlZCgpID09IDEgJiYgZXh0ZW5kZWRDb2xvci5ncmVl
bigpID09IDEgJiYgZXh0ZW5kZWRDb2xvci5ibHVlKCkgPT0gMSAmJiBleHRlbmRlZENvbG9yLmFs
cGhhKCkgPT0gMTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbG9yLnJnYigpID09IENvbG9y
Ojp3aGl0ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ29sb3I6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGlmIChpc0V4dGVuZGVkKCkpIHsKLSAg
ICAgICAgZW5jb2RlciA8PCB0cnVlOwotICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5y
ZWQoKTsKLSAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuZ3JlZW4oKTsKLSAgICAgICAg
ZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuYmx1ZSgpOwotICAgICAgICBlbmNvZGVyIDw8IGFzRXh0
ZW5kZWQoKS5hbHBoYSgpOwotICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5jb2xvclNw
YWNlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbmNvZGVyIDw8IGZhbHNlOwot
Ci0gICAgaWYgKCFpc1ZhbGlkKCkpIHsKLSAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBlbmNvZGUgd2hl
dGhlciB0aGUgY29sb3IgaXMgc2VtYW50aWMuCi0KLSAgICB1aW50MzJfdCB2YWx1ZSA9IHJnYigp
LnZhbHVlKCk7Ci0KLSAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAgZW5jb2RlciA8PCB2YWx1ZTsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgYm9vbCBpc0V4dGVuZGVkOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaXNFeHRlbmRlZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICBpZiAoaXNFeHRlbmRlZCkgewotICAgICAgICBmbG9hdCByZWQ7Ci0gICAgICAgIGZs
b2F0IGdyZWVuOwotICAgICAgICBmbG9hdCBibHVlOwotICAgICAgICBmbG9hdCBhbHBoYTsKLSAg
ICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlZCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGdyZWVuKSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYmx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhhKSkKLSAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29s
b3JTcGFjZSkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1
cm4gQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIGNvbG9yU3BhY2UpOwotICAgIH0KLQot
ICAgIGJvb2wgaXNWYWxpZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWQpKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKLQotICAgIHVpbnQzMl90IHZhbHVlOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodmFsdWUpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IENvbG9yIHsgU2ltcGxlQ29sb3IgeyB2YWx1ZSB9IH07CisgICAgLy8gRklYTUU6IENvbnNvbGlk
YXRlIHdpdGggY2xhbXBlZENvbG9yQ29tcG9uZW50KCkuCisgICAgLy8gV2UgdXNlIGxyb3VuZGYg
YW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5k
aW5nCisgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4obHJv
dW5kZigyNTUuMGYgKiBmKSksIDI1NSkpOwogfQogCiBjb25zdGV4cHIgUkdCQTMyIG1ha2VSR0Io
aW50IHIsIGludCBnLCBpbnQgYikKQEAgLTUyNiw3ICsxNTUsMTYgQEAgY29uc3RleHByIFJHQkEz
MiBtYWtlUkdCQShpbnQgciwgaW50IGcsIAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLW5h
bWVzcGFjZSBXVEYgewotdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29s
b3I+OwotdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpDb2xvcj47CituYW1l
c3BhY2Ugc3RkIHsKKwordGVtcGxhdGU8PgorY2xhc3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpTaW1w
bGVDb2xvcj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgND4g
eworfTsKKwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8Tiwg
V2ViQ29yZTo6U2ltcGxlQ29sb3I+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBlID0gdWludDhf
dDsKK307CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400169</attachid>
            <date>2020-05-24 11:08:40 -0700</date>
            <delta_ts>2020-05-24 11:09:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212309-20200524110840.patch</filename>
            <type>text/plain</type>
            <size>95259</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAyMC0wNS0yNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogTW92ZSBTaW1wbGVDb2xvciBpbnRvIGl0cyBvd24gZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjMwOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgU2ltcGxlQ29sb3IgaW50byBpdHMg
b3duIGZpbGVzLiBJdCdzIGFib3V0IHRpbWUuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpt
YWtlVW5QcmVtdWx0aXBsaWVkUkdCQSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2xv
ckZsb2F0VG9SR0JBQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUkdCQTMy
RnJvbUZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUkdCQUZyb21IU0xB
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSR0JBRnJvbUNNWUtBKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9ySFRNTCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWNpbWFsRGlnaXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6ZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlv
bkZvckNTUyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzI6OnNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6
OlNpbXBsZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjp2
YWx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cmVk
Q29tcG9uZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9y
OjpncmVlbkNvbXBvbmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVDb2xvcjo6Ymx1ZUNvbXBvbmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhhQ29tcG9uZW50QXNGbG9hdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6aXNPcGFxdWUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmlzVmlzaWJsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmdldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZhc3RNdWx0aXBseUJ5MjU1KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmZhc3REaXZpZGVCeTI1NSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjptYWtlUkdCKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSR0JBKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6IENv
cGllZCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCBjb25zdCk6Cisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGbG9hdFRvUkdCQUJ5
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIZXhDb2xvckludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpwYXJzZUhleENvbG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmRpZmZlcmVuY2VTcXVhcmVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmZpbmROYW1lZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0
b3I9KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXJpYWxpemVkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjc3NUZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVG
b3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpsaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFy
ayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNEYXJrIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodG5lc3MgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRDb21wb25lbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBU2ltcGxl
Q29sb3JMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9T
UkdCQUNvbXBvbmVudHNMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpl
eHRlbmRlZENvbG9yc0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdBc1ZhbGlkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0V4dGVuZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmg6IENvcGllZCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmguCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnRBc0Zsb2F0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpjb2xvcldpdGhBbHBoYSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Z2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yRmxvYXRUb1JHQkFCeXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
On5Db2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNWYWxpZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNPcGFxdWUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6cmVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpncmVlbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6Ymx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6YWxwaGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
QXNGbG9hdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BhcXVl
Q29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzU2VtYW50
aWMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzRXh0ZW5kZWQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldFJHQik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0SXNTZW1hbnRpYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjplcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZl
Um91bmRpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9y
V2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpyZ2IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OmlzQmxhY2tDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6aXNXaGl0ZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6IERl
bGV0ZWQuCisKIDIwMjAtMDUtMjQgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTEZDXVtURkNdIElnbm9yZSBzZWN0aW9uIGJvcmRlcnMgZXZlbiB3aGVuIGJvcmRl
ciBjb2xsYXBzZSBpcyBvZmYuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2MjEw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEx
ODQsNiArMTE4NCw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVuZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3Qu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9TdHJpbmdUcnVuY2F0b3IuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RhYlNpemUuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaApJbmRleDogU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlz
aW9uIDI2MjEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xOTM3LDYgKzE5MzcsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1Jv
dW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNh
dG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9y
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MjEw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjI0MSw2ICsyMjQxLDcgQEAKIAkJN0MyRkE2MTIxRUE5NUEzQzAw
QTAzMTA4IC8qIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MyRkE2MTAxRUE5NUEzMjAwQTAzMTA4IC8q
IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMzBEOTg0MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fi
b3J0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MzMEQ5ODAxRjgxNUFDMTAwMjY4MzU2IC8qIEpTQWJvcnRDb250cm9sbGVyLmggKi87
IH07CiAJCTdDMzBEOTg2MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzMwRDk4MTFGODE1QUMx
MDAyNjgzNTYgLyogSlNBYm9ydFNpZ25hbC5oICovOyB9OworCQk3QzMxQzg4RTI0N0FENTk1MDA1
QkYzMTkgLyogU2ltcGxlQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDMzFDODhDMjQ3QUQ1OTUwMDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMzMwQTAy
MURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzMwQTAxMURGOEZBQzYw
MEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzMzMEEwODFERjlGOTUxMDBEMzM5
NUMgLyogSlNQb3NpdGlvbk9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMzMwQTA2MURGOUY5NTEwMEQzMzk1QyAvKiBKU1Bvc2l0aW9uT3B0
aW9ucy5oICovOyB9OwogCQk3QzNBOTFFNjFDOTYzQjg4MDBEMUE3RTMgLyogQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzNBOTFFNTFDOTYzQjg4MDBEMUE3RTMgLyogQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk5NzQsNiAr
OTk3NSw4IEBACiAJCTdDMzBEOTgwMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fib3J0Q29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMwRDk4MTFGODE1QUMxMDAyNjgzNTYg
LyogSlNBYm9ydFNpZ25hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fi
b3J0U2lnbmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzBEOTgyMUY4MTVB
QzIwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQWJvcnRTaWduYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3QzMxQzg4QTI0N0FENTk0MDA1QkYzMTkgLyogU2ltcGxlQ29sb3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlQ29sb3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3QzMxQzg4QzI0N0FENTk1MDA1QkYzMTkgLyogU2ltcGxlQ29s
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlQ29sb3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0MzMzBBMDMxREY5RTk1QjAwRDMzOTVDIC8qIFBvc2l0aW9uT3B0aW9ucy5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gUG9zaXRpb25PcHRpb25zLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MzMzBBMDUxREY5Rjk1MTAwRDMzOTVDIC8qIEpTUG9zaXRpb25PcHRpb25zLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUG9zaXRpb25PcHRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NTk0LDYgKzI1NTk3LDggQEAKIAkJCQlBNzNG
OTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuaCAqLywKIAkJCQkwRjNERDQ0RDEy
RjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUEx
QjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKKwkJCQk3QzMxQzg4QTI0N0FENTk0MDA1QkYz
MTkgLyogU2ltcGxlQ29sb3IuY3BwICovLAorCQkJCTdDMzFDODhDMjQ3QUQ1OTUwMDVCRjMxOSAv
KiBTaW1wbGVDb2xvci5oICovLAogCQkJCUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3Vy
Y2VCdWZmZXJQcml2YXRlLmggKi8sCiAJCQkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNv
dXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCAqLywKIAkJCQk3QzgzREU4NTFEMDRDQkQ0MDBGRUJD
RjMgLyogU3ByaW5nU29sdmVyLmggKi8sCkBAIC0zMzUzNyw2ICszMzU0Miw3IEBACiAJCQkJQ0Qz
MzZGNjQxN0ZBMEE0RDAwREREQ0QwIC8qIFZpZGVvVHJhY2tQcml2YXRlQVZGLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDRDMzNkY2ODE3RkEwQUM2MDBERERDRDAgLyogVmlkZW9UcmFja1ByaXZhdGVB
VkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDhCNUE0MzE4MEQxNDlBMDA4QjhFNjUgLyog
VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTdDMzFDODhFMjQ3QUQ1OTUwMDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDcwRTgxRDExQkYyNzY1NjAwMUZEQTQ4IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFT
dHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUNFRjQxOENGMTE3OTY3OEMwMDlEMTEyQyAvKiBW
aWV3cG9ydEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGOUE4MzkxOEEwNDZBQzAw
QUVCODhBIC8qIFZpZXdwb3J0Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIx
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcxICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBj
b25zdGV4cHIgU2ltcGxlQ29sb3IgbGlnaHRlbmVkQmxhY2sgeyAweEZGNTQ1NDU0IH07CiBzdGF0
aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGRhcmtlbmVkV2hpdGUgeyAweEZGQUJBQkFCIH07CiAK
LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywg
dW5zaWduZWQgYSwgYm9vbCBjZWlsaW5nID0gdHJ1ZSkKLXsKLSAgICByZXR1cm4gZmFzdERpdmlk
ZUJ5MjU1KGNlaWxpbmcgPyBjICogYSArIDI1NCA6IGMgKiBhKTsKLX0KLQotc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEp
Ci17Ci0gICAgcmV0dXJuIChmYXN0TXVsdGlwbHlCeTI1NShjKSArIGEgLSAxKSAvIGE7Ci19Ci0K
LVJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEs
IGJvb2wgY2VpbGluZykKLXsKLSAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVsdGlwbGllZENoYW5u
ZWwociwgYSwgY2VpbGluZyksIHByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEsIGNlaWxpbmcpLCBw
cmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBhLCBjZWlsaW5nKSwgYSk7Ci19Ci0KLVJHQkEzMiBtYWtl
UHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyIHBpeGVsQ29sb3IpCi17Ci0gICAgaWYgKHBpeGVsQ29s
b3IuaXNPcGFxdWUoKSkKLSAgICAgICAgcmV0dXJuIHBpeGVsQ29sb3I7Ci0gICAgcmV0dXJuIG1h
a2VQcmVtdWx0aXBsaWVkUkdCQShwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9y
LmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9y
LmFscGhhQ29tcG9uZW50KCkpOwotfQotCi1SR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEo
aW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCi17Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHVucHJl
bXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSksIHVu
cHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOwotfQotCi1SR0JBMzIgbWFrZVVuUHJlbXVs
dGlwbGllZFJHQkEoUkdCQTMyIHBpeGVsQ29sb3IpCi17Ci0gICAgaWYgKHBpeGVsQ29sb3IuaXNW
aXNpYmxlKCkgJiYgIXBpeGVsQ29sb3IuaXNPcGFxdWUoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VV
blByZW11bHRpcGxpZWRSR0JBKHBpeGVsQ29sb3IucmVkQ29tcG9uZW50KCksIHBpeGVsQ29sb3Iu
Z3JlZW5Db21wb25lbnQoKSwgcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCksIHBpeGVsQ29sb3Iu
YWxwaGFDb21wb25lbnQoKSk7Ci0gICAgcmV0dXJuIHBpeGVsQ29sb3I7Ci19Ci0KLXN0YXRpYyBp
bnQgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKLXsKLSAgICAvLyBXZSB1c2UgbHJvdW5k
ZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91
bmRpbmcKLSAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50Pihs
cm91bmRmKDI1NS4wZiAqIGYpKSwgMjU1KSk7Ci19Ci0KLVJHQkEzMiBtYWtlUkdCQTMyRnJvbUZs
b2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotewotICAgIHJldHVybiBt
YWtlUkdCQShjb2xvckZsb2F0VG9SR0JBQnl0ZShyKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZyks
IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGIpLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShhKSk7Ci19Ci0K
LVJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGZsb2F0IGh1ZSwgZmxvYXQgc2F0dXJhdGlvbiwgZmxv
YXQgbGlnaHRuZXNzLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3Rv
ciA9IDI1NS4wOwotICAgIEZsb2F0Q29tcG9uZW50cyBmbG9hdFJlc3VsdCA9IGhzbFRvU1JHQih7
IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KTsKLSAgICByZXR1cm4gbWFrZVJH
QkEoCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMF0gKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMV0gKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMl0gKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbM10gKiBzY2FsZUZhY3Rv
cikpOwotfQotCi1SR0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxv
YXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKLXsKLSAgICBkb3VibGUgY29sb3JzID0gMSAtIGs7Ci0g
ICAgaW50IHIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAq
ICgxIC0gYykpKTsKLSAgICBpbnQgZyA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1Niwg
MCkgKiAoY29sb3JzICogKDEgLSBtKSkpOwotICAgIGludCBiID0gc3RhdGljX2Nhc3Q8aW50Pihu
ZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIHkpKSk7Ci0gICAgcmV0dXJuIG1ha2VS
R0JBKHIsIGcsIGIsIHN0YXRpY19jYXN0PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIGEpKTsK
LX0KLQogLy8gb3JpZ2luYWxseSBtb3ZlZCBoZXJlIGZyb20gdGhlIENTUyBwYXJzZXIKIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgogc3RhdGljIGlubGluZSBib29sIHBhcnNlSGV4
Q29sb3JJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgs
IFJHQkEzMiYgcmdiKQpAQCAtMjkyLDEzICsyMjcsNiBAQCBDb2xvciYgQ29sb3I6Om9wZXJhdG9y
PShDb2xvciYmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotU3RyaW5nIFNpbXBsZUNv
bG9yOjpzZXJpYWxpemF0aW9uRm9ySFRNTCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzT3BhcXVlKCkp
Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBvbmVudCgpLCAyLCBM
b3dlcmNhc2UpLCBoZXgoZ3JlZW5Db21wb25lbnQoKSwgMiwgTG93ZXJjYXNlKSwgaGV4KGJsdWVD
b21wb25lbnQoKSwgMiwgTG93ZXJjYXNlKSk7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JD
U1MoKTsKLX0KLQogU3RyaW5nIENvbG9yOjpzZXJpYWxpemVkKCkgY29uc3QKIHsKICAgICBpZiAo
aXNFeHRlbmRlZCgpKQpAQCAtMzA2LDM1ICsyMzQsNiBAQCBTdHJpbmcgQ29sb3I6OnNlcmlhbGl6
ZWQoKSBjb25zdAogICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0aW9uRm9ySFRNTCgpOwogfQog
Ci1zdGF0aWMgY2hhciBkZWNpbWFsRGlnaXQodW5zaWduZWQgbnVtYmVyKQotewotICAgIEFTU0VS
VChudW1iZXIgPCAxMCk7Ci0gICAgcmV0dXJuICcwJyArIG51bWJlcjsKLX0KLQotc3RhdGljIHN0
ZDo6YXJyYXk8Y2hhciwgND4gZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1ZSh1
aW50OF90IGFscGhhKQotewotICAgIEFTU0VSVChhbHBoYSA+IDApOwotICAgIEFTU0VSVChhbHBo
YSA8IDB4RkYpOwotICAgIGlmICgoKGFscGhhICogMTAwICsgMHg3RikgLyAweEZGICogMHhGRiAr
IDUwKSAvIDEwMCAhPSBhbHBoYSkKLSAgICAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoYWxw
aGEgKiAxMCAvIDB4RkYgJSAxMCksIGRlY2ltYWxEaWdpdChhbHBoYSAqIDEwMCAvIDB4RkYgJSAx
MCksIGRlY2ltYWxEaWdpdCgoYWxwaGEgKiAxMDAwICsgMHg3RikgLyAweEZGICUgMTApLCAnXDAn
IH0gfTsKLSAgICBpZiAoaW50IHRoaXJkRGlnaXQgPSAoYWxwaGEgKiAxMDAgKyAweDdGKSAvIDB4
RkYgJSAxMCkKLSAgICAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoYWxwaGEgKiAxMCAvIDB4
RkYpLCBkZWNpbWFsRGlnaXQodGhpcmREaWdpdCksICdcMCcsICdcMCcgfSB9OwotICAgIHJldHVy
biB7IHsgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwICsgMHg3RikgLyAweEZGKSwgJ1wwJywgJ1ww
JywgJ1wwJyB9IH07Ci19Ci0KLVN0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvckNT
UygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChhbHBoYUNvbXBvbmVudCgpKSB7Ci0gICAgY2FzZSAw
OgotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygicmdiYSgiLCByZWRDb21wb25lbnQoKSwgIiwg
IiwgZ3JlZW5Db21wb25lbnQoKSwgIiwgIiwgYmx1ZUNvbXBvbmVudCgpLCAiLCAwKSIpOwotICAg
IGNhc2UgMHhGRjoKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInJnYigiLCByZWRDb21wb25l
bnQoKSwgIiwgIiwgZ3JlZW5Db21wb25lbnQoKSwgIiwgIiwgYmx1ZUNvbXBvbmVudCgpLCAnKScp
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2JhKCIsIHJlZENv
bXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29tcG9uZW50KCks
ICIsIDAuIiwgZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1ZShhbHBoYUNvbXBv
bmVudCgpKS5kYXRhKCksICcpJyk7Ci0gICAgfQotfQotCiBTdHJpbmcgQ29sb3I6OmNzc1RleHQo
KSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCkBAIC0zNDIsMTMgKzI0MSw2IEBAIFN0
cmluZyBDb2xvcjo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRp
b25Gb3JDU1MoKTsKIH0KIAotU3RyaW5nIFJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQoKSBjb25zdAotewotICAgIGlmIChhbHBoYUNvbXBvbmVudCgpIDwgMHhGRikKLSAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkQ29tcG9uZW50KCksIDIpLCBoZXgo
Z3JlZW5Db21wb25lbnQoKSwgMiksIGhleChibHVlQ29tcG9uZW50KCksIDIpLCBoZXgoYWxwaGFD
b21wb25lbnQoKSwgMikpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBv
bmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVudCgp
LCAyKSk7Ci19Ci0KIFN0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25z
dAogewogICAgIC8vIEZJWE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29sb3JzLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjIxMDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRXh0
ZW5kZWRDb2xvci5oIgorI2luY2x1ZGUgIlNpbXBsZUNvbG9yLmgiCiAjaW5jbHVkZSA8YWxnb3Jp
dGhtPgogI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KQEAgLTU2
LDY5ICs1Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEZsb2F0Q29tcG9uZW50
czsKIAotLy8gQ29sb3IgdmFsdWUgd2l0aCA4LWJpdCBjb21wb25lbnRzIGZvciByZWQsIGdyZWVu
LCBibHVlLCBhbmQgYWxwaGEuCi0vLyBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBzdG9yZWQgYXMg
YSAzMi1iaXQgaW50ZWdlciwgd2l0aCBhbHBoYSBpbiB0aGUgaGlnaCBiaXRzOiBBUkdCLgotY2xh
c3MgU2ltcGxlQ29sb3IgewotcHVibGljOgotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvcih1aW50
MzJfdCB2YWx1ZSA9IDApIDogbV92YWx1ZSB7IHZhbHVlIH0geyB9Ci0KLSAgICBjb25zdGV4cHIg
dWludDMyX3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLSAgICBjb25zdGV4
cHIgdWludDhfdCByZWRDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDE2OyB9
Ci0gICAgY29uc3RleHByIHVpbnQ4X3QgZ3JlZW5Db21wb25lbnQoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlID4+IDg7IH0KLSAgICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9u
ZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA+PiAyNDsgfQotCi0gICAgY29uc3RleHByIGZs
b2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0PihhbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KLQotICAgIGNvbnN0ZXhwciBib29sIGlz
T3BhcXVlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9Ci0gICAg
Y29uc3RleHByIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQo
KTsgfQotCi0gICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29uc3Q7Ci0gICAgU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoKSBjb25zdDsKLSAgICBTdHJpbmcgc2VyaWFsaXphdGlv
bkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdDsKLQotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xv
ciBjb2xvcldpdGhBbHBoYSh1aW50OF90IGFscGhhKSBjb25zdCB7IHJldHVybiB7IChtX3ZhbHVl
ICYgMHgwMEZGRkZGRikgfCBhbHBoYSA8PCAyNCB9OyB9Ci0KLSAgICB0ZW1wbGF0ZTxzdGQ6OnNp
emVfdCBOPgotICAgIGNvbnN0ZXhwciB1aW50OF90IGdldCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KE4gPCA0KTsKLSAgICAgICAgaWYgY29uc3RleHByICghTikKLSAgICAg
ICAgICAgIHJldHVybiByZWRDb21wb25lbnQoKTsKLSAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIg
KE4gPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBncmVlbkNvbXBvbmVudCgpOwotICAgICAgICBl
bHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAyKQotICAgICAgICAgICAgcmV0dXJuIGJsdWVDb21wb25l
bnQoKTsKLSAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMykKLSAgICAgICAgICAgIHJl
dHVybiBhbHBoYUNvbXBvbmVudCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1aW50MzJfdCBt
X3ZhbHVlIHsgMCB9OwotfTsKLQotYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yLCBTaW1wbGVD
b2xvcik7Ci1ib29sIG9wZXJhdG9yIT0oU2ltcGxlQ29sb3IsIFNpbXBsZUNvbG9yKTsKLQotLy8g
RklYTUU6IFJlbW92ZSB0aGlzIGFmdGVyIG1pZ3JhdGluZyB0byB0aGUgbmV3IG5hbWUuCi11c2lu
ZyBSR0JBMzIgPSBTaW1wbGVDb2xvcjsKLQotY29uc3RleHByIFJHQkEzMiBtYWtlUkdCKGludCBy
LCBpbnQgZywgaW50IGIpOwotY29uc3RleHByIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSk7Ci0KLVJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEsIGJvb2wgY2VpbGluZyA9IHRydWUpOwotUkdCQTMyIG1ha2VQcmVt
dWx0aXBsaWVkUkdCQShSR0JBMzIpOwotUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGlu
dCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKLVJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdC
QShSR0JBMzIpOwotCi1XRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkEzMkZyb21GbG9hdHMo
ZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7Ci1XRUJDT1JFX0VYUE9SVCBSR0JB
MzIgbWFrZVJHQkFGcm9tSFNMQShmbG9hdCBoLCBmbG9hdCBzLCBmbG9hdCBsLCBmbG9hdCBhKTsK
LVJHQkEzMiBtYWtlUkdCQUZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9h
dCBrLCBmbG9hdCBhKTsKLQotdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGludCk7
Ci11aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZmxvYXQpOwotCiBjbGFzcyBDb2xv
ciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0zNTAsOSArMjg4
LDYgQEAgQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sbwogCiBpbnQgZGlm
ZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCi11aW50MTZfdCBm
YXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSk7Ci11aW50MTZfdCBmYXN0RGl2aWRlQnky
NTUodWludDE2X3QpOwotCiAjaWYgVVNFKENHKQogV0VCQ09SRV9FWFBPUlQgQ0dDb2xvclJlZiBj
YWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJik7CiAjZW5kaWYKQEAgLTM2MCwxNiArMjk1LDYgQEAg
V0VCQ09SRV9FWFBPUlQgQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKAogV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENvbG9y
Jik7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgQ29sb3JTcGFjZSk7CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29s
b3IgYSwgU2ltcGxlQ29sb3IgYikKLXsKLSAgICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFsdWUo
KTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xv
ciBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KIGlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQogewogICAgIGlmIChhLmlzRXh0ZW5k
ZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSkKQEAgLTM5OCwzMCArMzIzLDYgQEAgaW5saW5lIHVuc2ln
bmVkIENvbG9yOjpoYXNoKCkgY29uc3QKICAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JE
YXRhLnJnYmFBbmRGbGFncyk7CiB9CiAKLWlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwoaW50IHZhbHVlKQotewotICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbigy
NTUsIHZhbHVlKSk7Ci19Ci0KLWlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5u
ZWwoZmxvYXQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oMjU1
LmYsIHN0ZDo6cm91bmQodmFsdWUpKSk7Ci19Ci0KLWlubGluZSB1aW50MTZfdCBmYXN0TXVsdGlw
bHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gKHZhbHVlIDw8IDgpIC0gdmFs
dWU7Ci19Ci0KLWlubGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QgdmFsdWUp
Ci17Ci0gICAgLy8gV2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0aG0gZm9yIGRp
dmlzaW9uIGJ5IDI1NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2
LWJpdCB2YWx1ZXMuCi0gICAgLy8gRklYTUU6IFNpbmNlIHRoaXMgZ2l2ZXMgYWNjdXJhdGUgcmVz
dWx0cyBmb3IgMTYtYml0IHZhbHVlcywgd2Ugc2hvdWxkIGdldCB0aGlzIG9wdGltaXphdGlvbiBp
bnRvIGNvbXBpbGVycyBsaWtlIGNsYW5nLgotICAgIHVpbnQxNl90IGFwcHJveGltYXRpb24gPSB2
YWx1ZSA+PiA4OwotICAgIHVpbnQxNl90IHJlbWFpbmRlciA9IHZhbHVlIC0gKGFwcHJveGltYXRp
b24gKiAyNTUpICsgMTsKLSAgICByZXR1cm4gYXBwcm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4g
OCk7Ci19Ci0KIGlubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlV
c2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAogewog
ICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5h
dGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CkBAIC01MzQsMzMgKzQzNSw5IEBA
IE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAgICByZXR1cm4gQ29s
b3IgeyBTaW1wbGVDb2xvciB7IHZhbHVlIH0gfTsKIH0KIAotY29uc3RleHByIFJHQkEzMiBtYWtl
UkdCKGludCByLCBpbnQgZywgaW50IGIpCi17Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcsIGIs
IDB4RkYpOwotfQotCi1jb25zdGV4cHIgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50
IGIsIGludCBhKQotewotICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om1h
eCgwLCBzdGQ6Om1pbihhLCAweEZGKSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAw
eEZGKSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAweEZGKSkgPDwgOCB8IHN0ZDo6
bWF4KDAsIHN0ZDo6bWluKGIsIDB4RkYpKSkgfTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiBuYW1lc3BhY2UgV1RGIHsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNv
cmU6OkNvbG9yPjsKIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29sb3I+
OwogfQotCi1uYW1lc3BhY2Ugc3RkIHsKLQotdGVtcGxhdGU8PgotY2xhc3MgdHVwbGVfc2l6ZTxX
ZWJDb3JlOjpTaW1wbGVDb2xvcj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6
OnNpemVfdCwgND4gewotfTsKLQotdGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KLWNsYXNzIHR1cGxl
X2VsZW1lbnQ8TiwgV2ViQ29yZTo6U2ltcGxlQ29sb3I+IHsKLXB1YmxpYzoKLSAgICB1c2luZyB0
eXBlID0gdWludDhfdDsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlzaW9uIDI2MjEwNCkJKGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOjI2MjEwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2xvci5oIgor
CisjaW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJIYXNoVG9vbHMuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhw
ciBTaW1wbGVDb2xvciBsaWdodGVuZWRCbGFjayB7IDB4RkY1NDU0NTQgfTsKK3N0YXRpYyBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgZGFya2VuZWRXaGl0ZSB7IDB4RkZBQkFCQUIgfTsKKworc3RhdGlj
IGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25l
ZCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKQoreworICAgIHJldHVybiBmYXN0RGl2aWRlQnkyNTUo
Y2VpbGluZyA/IGMgKiBhICsgMjU0IDogYyAqIGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAg
ICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKworUkdCQTMy
IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSwgYm9vbCBj
ZWlsaW5nKQoreworICAgIHJldHVybiBtYWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBh
LCBjZWlsaW5nKSwgcHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSwgY2VpbGluZyksIHByZW11bHRp
cGxpZWRDaGFubmVsKGIsIGEsIGNlaWxpbmcpLCBhKTsKK30KKworUkdCQTMyIG1ha2VQcmVtdWx0
aXBsaWVkUkdCQShSR0JBMzIgcGl4ZWxDb2xvcikKK3sKKyAgICBpZiAocGl4ZWxDb2xvci5pc09w
YXF1ZSgpKQorICAgICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKKyAgICByZXR1cm4gbWFrZVByZW11
bHRpcGxpZWRSR0JBKHBpeGVsQ29sb3IucmVkQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuZ3JlZW5D
b21wb25lbnQoKSwgcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYWxwaGFD
b21wb25lbnQoKSk7Cit9CisKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwg
aW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBs
aWVkQ2hhbm5lbChyLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0
aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7Cit9CisKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVk
UkdCQShSR0JBMzIgcGl4ZWxDb2xvcikKK3sKKyAgICBpZiAocGl4ZWxDb2xvci5pc1Zpc2libGUo
KSAmJiAhcGl4ZWxDb2xvci5pc09wYXF1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuUHJlbXVs
dGlwbGllZFJHQkEocGl4ZWxDb2xvci5yZWRDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5ncmVlbkNv
bXBvbmVudCgpLCBwaXhlbENvbG9yLmJsdWVDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5hbHBoYUNv
bXBvbmVudCgpKTsKKyAgICByZXR1cm4gcGl4ZWxDb2xvcjsKK30KKworc3RhdGljIGludCBjb2xv
ckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQoreworICAgIC8vIFdlIHVzZSBscm91bmRmIGFuZCAy
NTUgaW5zdGVhZCBvZiBuZXh0YWZ0ZXJmKDI1NiwgMCkgdG8gbWF0Y2ggQ0cncyByb3VuZGluZwor
ICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYo
MjU1LjBmICogZikpLCAyNTUpKTsKK30KKworUkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JB
KGNvbG9yRmxvYXRUb1JHQkFCeXRlKHIpLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShnKSwgY29sb3JG
bG9hdFRvUkdCQUJ5dGUoYiksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGEpKTsKK30KKworUkdCQTMy
IG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBzYXR1cmF0aW9uLCBmbG9hdCBsaWdo
dG5lc3MsIGZsb2F0IGFscGhhKQoreworICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMjU1
LjA7CisgICAgRmxvYXRDb21wb25lbnRzIGZsb2F0UmVzdWx0ID0gaHNsVG9TUkdCKHsgaHVlLCBz
YXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pOworICAgIHJldHVybiBtYWtlUkdCQSgKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1swXSAqIHNjYWxlRmFjdG9yKSwKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1sxXSAqIHNjYWxlRmFjdG9yKSwKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1syXSAqIHNjYWxlRmFjdG9yKSwKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1szXSAqIHNjYWxlRmFjdG9yKSk7Cit9
CisKK1JHQkEzMiBtYWtlUkdCQUZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBm
bG9hdCBrLCBmbG9hdCBhKQoreworICAgIGRvdWJsZSBjb2xvcnMgPSAxIC0gazsKKyAgICBpbnQg
ciA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEgLSBj
KSkpOworICAgIGludCBnID0gc3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChj
b2xvcnMgKiAoMSAtIG0pKSk7CisgICAgaW50IGIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRl
cigyNTYsIDApICogKGNvbG9ycyAqICgxIC0geSkpKTsKKyAgICByZXR1cm4gbWFrZVJHQkEociwg
ZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5leHRhZnRlcigyNTYsIDApICogYSkpOworfQorCisv
LyBvcmlnaW5hbGx5IG1vdmVkIGhlcmUgZnJvbSB0aGUgQ1NTIHBhcnNlcgordGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VIZXhDb2xvcklu
dGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMy
JiByZ2IpCit7CisgICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAh
PSA2ICYmIGxlbmd0aCAhPSA4KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdW5zaWduZWQg
dmFsdWUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdChuYW1lW2ldKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgdmFsdWUgPDw9IDQ7CisgICAgICAgIHZhbHVlIHw9IHRvQVNDSUlI
ZXhWYWx1ZShuYW1lW2ldKTsKKyAgICB9CisgICAgaWYgKGxlbmd0aCA9PSA2KSB7CisgICAgICAg
IHJnYiA9IHsgMHhGRjAwMDAwMCB8IHZhbHVlIH07CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBpZiAobGVuZ3RoID09IDgpIHsKKyAgICAgICAgLy8gV2UgcGFyc2VkIHRoZSB2YWx1
ZXMgaW50byBSR0JBIG9yZGVyLCBidXQgdGhlIFJHQkEzMiB0eXBlCisgICAgICAgIC8vIGV4cGVj
dHMgdGhlbSB0byBiZSBpbiBBUkdCIG9yZGVyLCBzbyB3ZSByaWdodCByb3RhdGUgZWlnaHQgYml0
cy4KKyAgICAgICAgcmdiID0geyB2YWx1ZSA8PCAyNCB8IHZhbHVlID4+IDggfTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChsZW5ndGggPT0gNCkgeworICAgICAgICAvLyAj
YWJjZCBjb252ZXJ0cyB0byBkZGFhYmJjYyBpbiBSR0JBMzIuCisgICAgICAgIHJnYiA9IHsgKHZh
bHVlICYgMHhGKSA8PCAyOCB8ICh2YWx1ZSAmIDB4RikgPDwgMjQKKyAgICAgICAgICAgIHwgKHZh
bHVlICYgMHhGMDAwKSA8PCA4IHwgKHZhbHVlICYgMHhGMDAwKSA8PCA0CisgICAgICAgICAgICB8
ICh2YWx1ZSAmIDB4RjAwKSA8PCA0IHwgKHZhbHVlICYgMHhGMDApCisgICAgICAgICAgICB8ICh2
YWx1ZSAmIDB4RjApIHwgKHZhbHVlICYgMHhGMCkgPj4gNCB9OworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgLy8gI2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjCisgICAgcmdiID0geyAw
eEZGMDAwMDAwCisgICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDEyIHwgKHZhbHVlICYgMHhG
MDApIDw8IDgKKyAgICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4IHwgKHZhbHVlICYgMHhGMCkg
PDwgNAorICAgICAgICB8ICh2YWx1ZSAmIDB4RikgPDwgNCB8ICh2YWx1ZSAmIDB4RikgfTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBMQ2hh
ciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikKK3sKKyAgICByZXR1cm4gcGFy
c2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwgcmdiKTsKK30KKworYm9vbCBDb2xvcjo6
cGFyc2VIZXhDb2xvcihjb25zdCBVQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzIm
IHJnYikKK3sKKyAgICByZXR1cm4gcGFyc2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwg
cmdiKTsKK30KKworYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUs
IFJHQkEzMiYgcmdiKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Cisg
ICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobmFtZS5pczhC
aXQoKSkKKyAgICAgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpLCBu
YW1lLmxlbmd0aCgpLCByZ2IpOworICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFj
dGVyczE2KCksIG5hbWUubGVuZ3RoKCksIHJnYik7Cit9CisKK2Jvb2wgQ29sb3I6OnBhcnNlSGV4
Q29sb3IoY29uc3QgU3RyaW5nVmlldyYgbmFtZSwgUkdCQTMyJiByZ2IpCit7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChuYW1lLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gcGFyc2VI
ZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCksIG5hbWUubGVuZ3RoKCksIHJnYik7CisgICAgcmV0
dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5ndGgoKSwgcmdi
KTsKK30KKworaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiBjMSwgY29uc3QgQ29s
b3ImIGMyKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFzc3VtaW5nIHRoYXQgdGhlIGNvbG9y
cyBhcmUgaW4gdGhlIHNhbWUgY29sb3JzcGFjZS4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
cHJvYmFibHkgcmV0dXJuIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBidXQgbWFueSBvZiB0aGUg
Y2FsbAorICAgIC8vIHNpdGVzIGhhdmUgcGlja2VkIGNvbXBhcmlzb24gdmFsdWVzIGJhc2VkIG9u
IGZlZWwuIFdlJ2QgbmVlZCB0byBicmVhayBvdXQKKyAgICAvLyBvdXIgbG9nYXJpdGhtIHRhYmxl
cyB0byBjaGFuZ2UgdGhlbSA6KQorICAgIGludCBjMVJlZCA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMx
LmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMxLnJlZCgpOworICAgIGludCBjMUdyZWVuID0g
YzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBjMS5ncmVl
bigpOworICAgIGludCBjMUJsdWUgPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCku
Ymx1ZSgpICogMjU1IDogYzEuYmx1ZSgpOworICAgIGludCBjMlJlZCA9IGMyLmlzRXh0ZW5kZWQo
KSA/IGMyLmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMyLnJlZCgpOworICAgIGludCBjMkdy
ZWVuID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBj
Mi5ncmVlbigpOworICAgIGludCBjMkJsdWUgPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVu
ZGVkKCkuYmx1ZSgpICogMjU1IDogYzIuYmx1ZSgpOworICAgIGludCBkUiA9IGMxUmVkIC0gYzJS
ZWQ7CisgICAgaW50IGRHID0gYzFHcmVlbiAtIGMyR3JlZW47CisgICAgaW50IGRCID0gYzFCbHVl
IC0gYzJCbHVlOworICAgIHJldHVybiBkUiAqIGRSICsgZEcgKiBkRyArIGRCICogZEI7Cit9CisK
K3N0YXRpYyBpbmxpbmUgY29uc3QgTmFtZWRDb2xvciogZmluZE5hbWVkQ29sb3IoY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIGNoYXIgYnVmZmVyWzY0XTsgLy8gZWFzaWx5IGJpZyBlbm91Z2gg
Zm9yIHRoZSBsb25nZXN0IGNvbG9yIG5hbWUKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxl
bmd0aCgpOworICAgIGlmIChsZW5ndGggPiBzaXplb2YoYnVmZmVyKSAtIDEpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
eworICAgICAgICBVQ2hhciBjID0gbmFtZVtpXTsKKyAgICAgICAgaWYgKCFjIHx8ICFXVEY6Omlz
QVNDSUkoYykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYnVmZmVyW2ld
ID0gdG9BU0NJSUxvd2VyKHN0YXRpY19jYXN0PGNoYXI+KGMpKTsKKyAgICB9CisgICAgYnVmZmVy
W2xlbmd0aF0gPSAnXDAnOworICAgIHJldHVybiBmaW5kQ29sb3IoYnVmZmVyLCBsZW5ndGgpOwor
fQorCitDb2xvcjo6Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lWzBd
ID09ICcjJykgeworICAgICAgICBSR0JBMzIgY29sb3I7CisgICAgICAgIGJvb2wgdmFsaWQ7CisK
KyAgICAgICAgaWYgKG5hbWUuaXM4Qml0KCkpCisgICAgICAgICAgICB2YWxpZCA9IHBhcnNlSGV4
Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsaWQgPSBwYXJzZUhleENvbG9yKG5hbWUuY2hh
cmFjdGVyczE2KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0gMSwgY29sb3IpOworCisgICAgICAgIGlm
ICh2YWxpZCkKKyAgICAgICAgICAgIHNldFJHQihjb2xvcik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGZvdW5kQ29sb3IgPSBmaW5kTmFtZWRDb2xvcihuYW1lKSkKKyAgICAgICAg
ICAgIHNldFJHQih7IGZvdW5kQ29sb3ItPkFSR0JWYWx1ZSB9KTsKKyAgICB9Cit9CisKK0NvbG9y
OjpDb2xvcihjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGlmIChuYW1lWzBdID09ICcjJykgewor
ICAgICAgICBTaW1wbGVDb2xvciBjb2xvcjsKKyAgICAgICAgaWYgKHBhcnNlSGV4Q29sb3IocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCZuYW1lWzFdKSwgc3RkOjpzdHJsZW4oJm5hbWVb
MV0pLCBjb2xvcikpCisgICAgICAgICAgICBzZXRSR0IoY29sb3IpOworICAgIH0gZWxzZSBpZiAo
YXV0byogZm91bmRDb2xvciA9IGZpbmRDb2xvcihuYW1lLCBzdHJsZW4obmFtZSkpKQorICAgICAg
ICBzZXRSR0IoeyBmb3VuZENvbG9yLT5BUkdCVmFsdWUgfSk7Cit9CisKK0NvbG9yOjpDb2xvcihj
b25zdCBDb2xvciYgb3RoZXIpCisgICAgOiBtX2NvbG9yRGF0YShvdGhlci5tX2NvbG9yRGF0YSkK
K3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yLT5yZWYoKTsKK30KKworQ29sb3I6OkNvbG9yKENvbG9yJiYgb3RoZXIpCit7CisgICAgKnRo
aXMgPSBXVEZNb3ZlKG90aGVyKTsKK30KKworQ29sb3I6OkNvbG9yKGZsb2F0IGMxLCBmbG9hdCBj
MiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAg
Ly8gWmVybyB0aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3Np
Z25zIHRoZQorICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgZXh0ZW5kZWRDb2xv
ciBwb2ludGVyIGJlbG93LgorICAgIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IDA7CisgICAg
YXV0byBleHRlbmRlZENvbG9yUmVmID0gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMs
IGFscGhhLCBjb2xvclNwYWNlKTsKKyAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yID0gJmV4
dGVuZGVkQ29sb3JSZWYubGVha1JlZigpOworICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOworfQor
CitDb2xvciYgQ29sb3I6Om9wZXJhdG9yPShjb25zdCBDb2xvciYgb3RoZXIpCit7CisgICAgaWYg
KCp0aGlzID09IG90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBpZiAoaXNFeHRl
bmRlZCgpKQorICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigpOworCisg
ICAgbV9jb2xvckRhdGEgPSBvdGhlci5tX2NvbG9yRGF0YTsKKworICAgIGlmIChpc0V4dGVuZGVk
KCkpCisgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJlZigpOworICAgIHJldHVy
biAqdGhpczsKK30KKworQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oQ29sb3ImJiBvdGhlcikKK3sK
KyAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGlm
IChpc0V4dGVuZGVkKCkpCisgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVm
KCk7CisKKyAgICBtX2NvbG9yRGF0YSA9IG90aGVyLm1fY29sb3JEYXRhOworICAgIG90aGVyLm1f
Y29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IGludmFsaWRSR0JBQ29sb3I7CisKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK1N0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvckhUTUwoKSBj
b25zdAoreworICAgIGlmIChpc09wYXF1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygn
IycsIGhleChyZWRDb21wb25lbnQoKSwgMiwgTG93ZXJjYXNlKSwgaGV4KGdyZWVuQ29tcG9uZW50
KCksIDIsIExvd2VyY2FzZSksIGhleChibHVlQ29tcG9uZW50KCksIDIsIExvd2VyY2FzZSkpOwor
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKCk7Cit9CisKK1N0cmluZyBDb2xvcjo6c2Vy
aWFsaXplZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJu
IGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7CisgICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRpb25G
b3JIVE1MKCk7Cit9CisKK3N0YXRpYyBjaGFyIGRlY2ltYWxEaWdpdCh1bnNpZ25lZCBudW1iZXIp
Cit7CisgICAgQVNTRVJUKG51bWJlciA8IDEwKTsKKyAgICByZXR1cm4gJzAnICsgbnVtYmVyOwor
fQorCitzdGF0aWMgc3RkOjphcnJheTxjaGFyLCA0PiBmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9u
YWxBbHBoYVZhbHVlKHVpbnQ4X3QgYWxwaGEpCit7CisgICAgQVNTRVJUKGFscGhhID4gMCk7Cisg
ICAgQVNTRVJUKGFscGhhIDwgMHhGRik7CisgICAgaWYgKCgoYWxwaGEgKiAxMDAgKyAweDdGKSAv
IDB4RkYgKiAweEZGICsgNTApIC8gMTAwICE9IGFscGhhKQorICAgICAgICByZXR1cm4geyB7IGRl
Y2ltYWxEaWdpdChhbHBoYSAqIDEwIC8gMHhGRiAlIDEwKSwgZGVjaW1hbERpZ2l0KGFscGhhICog
MTAwIC8gMHhGRiAlIDEwKSwgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwMDAgKyAweDdGKSAvIDB4
RkYgJSAxMCksICdcMCcgfSB9OworICAgIGlmIChpbnQgdGhpcmREaWdpdCA9IChhbHBoYSAqIDEw
MCArIDB4N0YpIC8gMHhGRiAlIDEwKQorICAgICAgICByZXR1cm4geyB7IGRlY2ltYWxEaWdpdChh
bHBoYSAqIDEwIC8gMHhGRiksIGRlY2ltYWxEaWdpdCh0aGlyZERpZ2l0KSwgJ1wwJywgJ1wwJyB9
IH07CisgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoKGFscGhhICogMTAgKyAweDdGKSAvIDB4
RkYpLCAnXDAnLCAnXDAnLCAnXDAnIH0gfTsKK30KKworU3RyaW5nIFNpbXBsZUNvbG9yOjpzZXJp
YWxpemF0aW9uRm9yQ1NTKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGFscGhhQ29tcG9uZW50KCkp
IHsKKyAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2JhKCIsIHJlZENv
bXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29tcG9uZW50KCks
ICIsIDApIik7CisgICAgY2FzZSAweEZGOgorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygicmdi
KCIsIHJlZENvbXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29t
cG9uZW50KCksICcpJyk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmco
InJnYmEoIiwgcmVkQ29tcG9uZW50KCksICIsICIsIGdyZWVuQ29tcG9uZW50KCksICIsICIsIGJs
dWVDb21wb25lbnQoKSwgIiwgMC4iLCBmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9uYWxBbHBoYVZh
bHVlKGFscGhhQ29tcG9uZW50KCkpLmRhdGEoKSwgJyknKTsKKyAgICB9Cit9CisKK1N0cmluZyBD
b2xvcjo6Y3NzVGV4dCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAg
cmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7CisgICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6
YXRpb25Gb3JDU1MoKTsKK30KKworU3RyaW5nIFJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQoKSBjb25zdAoreworICAgIGlmIChhbHBoYUNvbXBvbmVudCgpIDwgMHhGRikK
KyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkQ29tcG9uZW50KCksIDIpLCBo
ZXgoZ3JlZW5Db21wb25lbnQoKSwgMiksIGhleChibHVlQ29tcG9uZW50KCksIDIpLCBoZXgoYWxw
aGFDb21wb25lbnQoKSwgMikpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENv
bXBvbmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVu
dCgpLCAyKSk7Cit9CisKK1N0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBj
b25zdAoreworICAgIC8vIEZJWE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29sb3JzLgorICAgIHJldHVy
biByZ2IoKS5zZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpOworfQorCitDb2xvciBD
b2xvcjo6bGlnaHQoKSBjb25zdAoreworICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2Ug
Zm9yIHNwZWVkLgorICAgIGlmIChyZ2IoKSA9PSBibGFjaykKKyAgICAgICAgcmV0dXJuIGxpZ2h0
ZW5lZEJsYWNrOworICAgIAorICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVy
ZigyNTYuMGYsIDAuMGYpOworCisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCk7CisKKyAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOworCisg
ICAgaWYgKHYgPT0gMC4wZikgeworICAgICAgICAvLyBMaWdodGVuZWQgYmxhY2sgd2l0aCBhbHBo
YS4KKyAgICAgICAgcmV0dXJuIENvbG9yKDB4NTQsIDB4NTQsIDB4NTQsIGFscGhhKCkpOworICAg
IH0KKworICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4zM2YpIC8g
djsKKworICAgIHJldHVybiBDb2xvcihzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICog
c2NhbGVGYWN0b3IpLAorICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiBnICogc2NhbGVGYWN0b3IpLAorICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAorICAgICAgICAgICAgICAgICBhbHBoYSgp
KTsKK30KKworQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAoreworICAgIC8vIEhhcmRjb2RlIHRo
aXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgorICAgIGlmIChyZ2IoKSA9PSB3aGl0ZSkKKyAgICAg
ICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CisgICAgCisgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0
b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CisKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKworICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIs
IGcsIGIgfSk7CisgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4z
M2YpIC8gdik7CisKKyAgICByZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVy
ICogciAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Piht
dWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgICAgICAgICAg
YWxwaGEoKSk7Cit9CisKK2Jvb2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0Cit7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBmbG9hdCBsYXJnZXN0
Tm9uQWxwaGFDaGFubmVsID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOworICAgIHJldHVybiBhID4g
MC41ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPCAwLjU7Cit9CisKK2Zsb2F0IENvbG9yOjps
aWdodG5lc3MoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9p
ZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMg
Zm9yIEhTTC4KKyAgICByZXR1cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRz
TG9zc3koKSk7Cit9CisKK3N0YXRpYyBpbnQgYmxlbmRDb21wb25lbnQoaW50IGMsIGludCBhKQor
eworICAgIC8vIFdlIHVzZSB3aGl0ZS4KKyAgICBmbG9hdCBhbHBoYSA9IGEgLyAyNTUuMGY7Cisg
ICAgaW50IHdoaXRlQmxlbmQgPSAyNTUgLSBhOworICAgIGMgLT0gd2hpdGVCbGVuZDsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjIC8gYWxwaGEpOworfQorCitjb25zdCBpbnQgY1N0YXJ0
QWxwaGEgPSAxNTM7IC8vIDYwJQorY29uc3QgaW50IGNFbmRBbHBoYSA9IDIwNDsgLy8gODAlOwor
Y29uc3QgaW50IGNBbHBoYUluY3JlbWVudCA9IDE3OyAvLyBJbmNyZW1lbnRzIGluIGJldHdlZW4u
CisKK0NvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYgc291cmNlKSBjb25zdAoreworICAg
IGlmICghaXNWaXNpYmxlKCkgfHwgc291cmNlLmlzT3BhcXVlKCkpCisgICAgICAgIHJldHVybiBz
b3VyY2U7CisKKyAgICBpZiAoIXNvdXJjZS5hbHBoYSgpKQorICAgICAgICByZXR1cm4gKnRoaXM7
CisKKyAgICBpbnQgZCA9IDI1NSAqIChhbHBoYSgpICsgc291cmNlLmFscGhhKCkpIC0gYWxwaGEo
KSAqIHNvdXJjZS5hbHBoYSgpOworICAgIGludCBhID0gZCAvIDI1NTsKKyAgICBpbnQgciA9IChy
ZWQoKSAqIGFscGhhKCkgKiAoMjU1IC0gc291cmNlLmFscGhhKCkpICsgMjU1ICogc291cmNlLmFs
cGhhKCkgKiBzb3VyY2UucmVkKCkpIC8gZDsKKyAgICBpbnQgZyA9IChncmVlbigpICogYWxwaGEo
KSAqICgyNTUgLSBzb3VyY2UuYWxwaGEoKSkgKyAyNTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJj
ZS5ncmVlbigpKSAvIGQ7CisgICAgaW50IGIgPSAoYmx1ZSgpICogYWxwaGEoKSAqICgyNTUgLSBz
b3VyY2UuYWxwaGEoKSkgKyAyNTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJjZS5ibHVlKCkpIC8g
ZDsKKyAgICByZXR1cm4gQ29sb3IociwgZywgYiwgYSk7Cit9CisKK0NvbG9yIENvbG9yOjpibGVu
ZFdpdGhXaGl0ZSgpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhlIGNvbG9yIGNvbnRhaW5zIGFscGhh
IGFscmVhZHksIHdlIGxlYXZlIGl0IGFsb25lLgorICAgIGlmICghaXNPcGFxdWUoKSkKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworCisgICAgQ29sb3IgbmV3Q29sb3I7CisgICAgZm9yIChpbnQgYWxw
aGEgPSBjU3RhcnRBbHBoYTsgYWxwaGEgPD0gY0VuZEFscGhhOyBhbHBoYSArPSBjQWxwaGFJbmNy
ZW1lbnQpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBhIHNvbGlkIGNvbG9yLiAgQ29udmVydCB0byBh
biBlcXVpdmFsZW50IGNvbG9yIHRoYXQgbG9va3MgdGhlIHNhbWUgd2hlbiBibGVuZGVkIHdpdGgg
d2hpdGUKKyAgICAgICAgLy8gYXQgdGhlIGN1cnJlbnQgYWxwaGEuICBUcnkgdXNpbmcgbGVzcyB0
cmFuc3BhcmVuY3kgaWYgdGhlIG51bWJlcnMgZW5kIHVwIGJlaW5nIG5lZ2F0aXZlLgorICAgICAg
ICBpbnQgciA9IGJsZW5kQ29tcG9uZW50KHJlZCgpLCBhbHBoYSk7CisgICAgICAgIGludCBnID0g
YmxlbmRDb21wb25lbnQoZ3JlZW4oKSwgYWxwaGEpOworICAgICAgICBpbnQgYiA9IGJsZW5kQ29t
cG9uZW50KGJsdWUoKSwgYWxwaGEpOworICAgICAgICAKKyAgICAgICAgbmV3Q29sb3IgPSBDb2xv
cihyLCBnLCBiLCBhbHBoYSk7CisKKyAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49IDAgJiYgYiA+
PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGlzU2VtYW50aWMoKSkK
KyAgICAgICAgbmV3Q29sb3Iuc2V0SXNTZW1hbnRpYygpOworICAgIHJldHVybiBuZXdDb2xvcjsK
K30KKworQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0IGFtb3Vu
dCkgY29uc3QKK3sKKyAgICBmbG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkg
PyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5hbHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGFscGhhKCkpIC8gMjU1KTsKKyAgICByZXR1cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwor
fQorCitDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0
aXZlUm91bmRpbmcoZmxvYXQgYW1vdW50KSBjb25zdAoreworICAgIGZsb2F0IG5ld0FscGhhID0g
YW1vdW50ICogKGlzRXh0ZW5kZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhh
KCkgOiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEoKSkgLyAyNTUpOworICAgIHJldHVybiBjb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Cit9CisKK0NvbG9y
IENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKK3sKKyAgICBpZiAoaXNF
eHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yLT5yZWQoKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRh
dGEuZXh0ZW5kZWRDb2xvci0+Ymx1ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xv
ci0+Y29sb3JTcGFjZSgpIH07CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1
bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGlu
Zy4KKyAgICBpbnQgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsKKworICAgIENvbG9yIHJlc3VsdCA9
IHsgcmVkKCksIGdyZWVuKCksIGJsdWUoKSwgbmV3QWxwaGEgfTsKKyAgICBpZiAoaXNTZW1hbnRp
YygpKQorICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK0NvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGlu
ZyhmbG9hdCBhbHBoYSkgY29uc3QKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBy
ZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xvckRh
dGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Ymx1
ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07CisK
KyAgICBDb2xvciByZXN1bHQgPSBTaW1wbGVDb2xvciB7IChyZ2IoKS52YWx1ZSgpICYgMHgwMEZG
RkZGRikgfCBjb2xvckZsb2F0VG9SR0JBQnl0ZShhbHBoYSkgPDwgMjQgfTsKKyAgICBpZiAoaXNT
ZW1hbnRpYygpKQorICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0ZDo6cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IENvbG9y
Ojpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQo
KSkgeworICAgICAgICBhdXRvJiBleHRlbmRlZENvbG9yID0gYXNFeHRlbmRlZCgpOworICAgICAg
ICByZXR1cm4geyBleHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSwgZXh0ZW5kZWRDb2xvci5jaGFu
bmVscygpIH07CisgICAgfQorCisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRD
b21wb25lbnRzIHsgcmVkKCkgLyAyNTUuMGYsIGdyZWVuKCkgLyAyNTUuMGYsIGJsdWUoKSAvIDI1
NS4wZiwgIGFscGhhKCkgLyAyNTUuMGYgfSB9OworfQorCitTaW1wbGVDb2xvciBDb2xvcjo6dG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdAoreworICAgIGlmICghaXNFeHRlbmRlZCgpKQor
ICAgICAgICByZXR1cm4gcmdiKCk7CisKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKKyAgICByZXR1cm4gbWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywg
YiwgYSk7Cit9CisKK0Zsb2F0Q29tcG9uZW50cyBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpIGNvbnN0Cit7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpOworICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgeworICAgIGNhc2Ug
Q29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7CisgICAgY2FzZSBD
b2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVu
dHMoY29tcG9uZW50cyk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAg
IHJldHVybiBwM1RvU1JHQihjb21wb25lbnRzKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNv
bnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVuZGVkKCkg
JiYgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9PSBiLmFz
RXh0ZW5kZWQoKTsKKworICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQo
KSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJv
bSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gRklYTUU6IEV4
dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorICAgIC8vIFdlIG5l
ZWQgdG8gcHJlc2VydmUgdGhlIHN0YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2Yg
dGhlIGFuaW1hdGlvbgorICAgIGlmIChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgLy8gU2luY2UgbWFrZVByZW11bHRpcGxpZWRS
R0JBKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCisgICAgYXV0byBw
cmVtdWx0RnJvbSA9IGZyb20uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShmcm9tLnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50OworICAgIGF1dG8g
cHJlbXVsdFRvID0gdG8uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQSh0by50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKKworICAgIFJHQkEzMiBw
cmVtdWx0QmxlbmRlZCA9IG1ha2VSR0JBKAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0
RnJvbS5yZWRDb21wb25lbnQoKSwgcHJlbXVsdFRvLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyks
CisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmdyZWVuQ29tcG9uZW50KCksIHBy
ZW11bHRUby5ncmVlbkNvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJs
ZW5kKHByZW11bHRGcm9tLmJsdWVDb21wb25lbnQoKSwgcHJlbXVsdFRvLmJsdWVDb21wb25lbnQo
KSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5hbHBoYUNv
bXBvbmVudCgpLCBwcmVtdWx0VG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCisgICAgKTsK
KworICAgIHJldHVybiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShwcmVtdWx0QmxlbmRlZCk7Cit9
CisKK0NvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25z
dCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kZWRD
b2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisgICAgLy8gV2UgbmVlZCB0byBw
cmVzZXJ2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhbGlkIGZsYWcgYXQgdGhlIGVuZCBvZiB0aGUgYW5p
bWF0aW9uCisgICAgaWYgKHByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisgICAgYXV0byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7CisKKyAgICByZXR1cm4geworICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWRD
b21wb25lbnQoKSwgdG9TUkdCLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdl
YkNvcmU6OmJsZW5kKGZyb21TUkdCLmdyZWVuQ29tcG9uZW50KCksIHRvU1JHQi5ncmVlbkNvbXBv
bmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWVD
b21wb25lbnQoKSwgdG9TUkdCLmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tU1JHQi5hbHBoYUNvbXBvbmVudCgpLCB0b1NSR0IuYWxwaGFDb21w
b25lbnQoKSwgcHJvZ3Jlc3MpCisgICAgfTsKK30KKwordm9pZCBDb2xvcjo6dGFnQXNWYWxpZCgp
Cit7CisgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzIHw9IHZhbGlkUkdCQUNvbG9yOworfQor
Citjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGlzRXh0ZW5kZWQoKSk7CisgICAgcmV0dXJuICptX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBD
b2xvciYgY29sb3IpCit7CisgICAgcmV0dXJuIHRzIDw8IGNvbG9yLm5hbWVGb3JSZW5kZXJUcmVl
QXNUZXh0KCk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKKyAgICBj
YXNlIENvbG9yU3BhY2U6OlNSR0I6CisgICAgICAgIHRzIDw8ICJzUkdCIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAgIHRzIDw8ICJMaW5l
YXJSR0IiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoK
KyAgICAgICAgdHMgPDwgIkRpc3BsYXlQMyI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDEwICsyNCw4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiU2ltcGxlQ29sb3IuaCIKIAotI2luY2x1ZGUgIkFuaW1h
dGlvblV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
SGFzaFRvb2xzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYv
SGV4TnVtYmVyLmg+CkBAIC0zNyw5ICszNSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBsaWdodGVuZWRCbGFjayB7IDB4RkY1NDU0NTQg
fTsKLXN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgZGFya2VuZWRXaGl0ZSB7IDB4RkZBQkFC
QUIgfTsKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNp
Z25lZCBjLCB1bnNpZ25lZCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKQogewogICAgIHJldHVybiBm
YXN0RGl2aWRlQnkyNTUoY2VpbGluZyA/IGMgKiBhICsgMjU0IDogYyAqIGEpOwpAQCAtNzQsMTIg
KzY5LDYgQEAgUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKFJHQkEzMiBwaQogICAgIHJl
dHVybiBwaXhlbENvbG9yOwogfQogCi1zdGF0aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZs
b2F0IGYpCi17Ci0gICAgLy8gV2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRh
ZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5kaW5nCi0gICAgcmV0dXJuIHN0ZDo6bWF4
KDAsIHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4obHJvdW5kZigyNTUuMGYgKiBmKSksIDI1NSkp
OwotfQotCiBSR0JBMzIgbWFrZVJHQkEzMkZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxv
YXQgYiwgZmxvYXQgYSkKIHsKICAgICByZXR1cm4gbWFrZVJHQkEoY29sb3JGbG9hdFRvUkdCQUJ5
dGUociksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGcpLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShiKSwg
Y29sb3JGbG9hdFRvUkdCQUJ5dGUoYSkpOwpAQCAtMTA1LDE4OSArOTQsNiBAQCBSR0JBMzIgbWFr
ZVJHQkFGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgCiAgICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcs
IGIsIHN0YXRpY19jYXN0PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIGEpKTsKIH0KIAotLy8g
b3JpZ2luYWxseSBtb3ZlZCBoZXJlIGZyb20gdGhlIENTUyBwYXJzZXIKLXRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIHBhcnNlSGV4Q29sb3JJbnRl
cm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgsIFJHQkEzMiYg
cmdiKQotewotICAgIGlmIChsZW5ndGggIT0gMyAmJiBsZW5ndGggIT0gNCAmJiBsZW5ndGggIT0g
NiAmJiBsZW5ndGggIT0gOCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIHZh
bHVlID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQobmFtZVtpXSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHZhbHVlIDw8PSA0OwotICAgICAgICB2YWx1ZSB8PSB0b0FTQ0lJSGV4
VmFsdWUobmFtZVtpXSk7Ci0gICAgfQotICAgIGlmIChsZW5ndGggPT0gNikgewotICAgICAgICBy
Z2IgPSB7IDB4RkYwMDAwMDAgfCB2YWx1ZSB9OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgaWYgKGxlbmd0aCA9PSA4KSB7Ci0gICAgICAgIC8vIFdlIHBhcnNlZCB0aGUgdmFsdWVz
IGludG8gUkdCQSBvcmRlciwgYnV0IHRoZSBSR0JBMzIgdHlwZQotICAgICAgICAvLyBleHBlY3Rz
IHRoZW0gdG8gYmUgaW4gQVJHQiBvcmRlciwgc28gd2UgcmlnaHQgcm90YXRlIGVpZ2h0IGJpdHMu
Ci0gICAgICAgIHJnYiA9IHsgdmFsdWUgPDwgMjQgfCB2YWx1ZSA+PiA4IH07Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAobGVuZ3RoID09IDQpIHsKLSAgICAgICAgLy8gI2Fi
Y2QgY29udmVydHMgdG8gZGRhYWJiY2MgaW4gUkdCQTMyLgotICAgICAgICByZ2IgPSB7ICh2YWx1
ZSAmIDB4RikgPDwgMjggfCAodmFsdWUgJiAweEYpIDw8IDI0Ci0gICAgICAgICAgICB8ICh2YWx1
ZSAmIDB4RjAwMCkgPDwgOCB8ICh2YWx1ZSAmIDB4RjAwMCkgPDwgNAotICAgICAgICAgICAgfCAo
dmFsdWUgJiAweEYwMCkgPDwgNCB8ICh2YWx1ZSAmIDB4RjAwKQotICAgICAgICAgICAgfCAodmFs
dWUgJiAweEYwKSB8ICh2YWx1ZSAmIDB4RjApID4+IDQgfTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIC8vICNhYmMgY29udmVydHMgdG8gI2FhYmJjYwotICAgIHJnYiA9IHsgMHhG
RjAwMDAwMAotICAgICAgICB8ICh2YWx1ZSAmIDB4RjAwKSA8PCAxMiB8ICh2YWx1ZSAmIDB4RjAw
KSA8PCA4Ci0gICAgICAgIHwgKHZhbHVlICYgMHhGMCkgPDwgOCB8ICh2YWx1ZSAmIDB4RjApIDw8
IDQKLSAgICAgICAgfCAodmFsdWUgJiAweEYpIDw8IDQgfCAodmFsdWUgJiAweEYpIH07Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29sb3I6OnBhcnNlSGV4Q29sb3IoY29uc3QgTENoYXIq
IG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMyJiByZ2IpCi17Ci0gICAgcmV0dXJuIHBhcnNl
SGV4Q29sb3JJbnRlcm5hbChuYW1lLCBsZW5ndGgsIHJnYik7Ci19Ci0KLWJvb2wgQ29sb3I6OnBh
cnNlSGV4Q29sb3IoY29uc3QgVUNoYXIqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMyJiBy
Z2IpCi17Ci0gICAgcmV0dXJuIHBhcnNlSGV4Q29sb3JJbnRlcm5hbChuYW1lLCBsZW5ndGgsIHJn
Yik7Ci19Ci0KLWJvb2wgQ29sb3I6OnBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lLCBS
R0JBMzImIHJnYikKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOwotICAg
IGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG5hbWUuaXM4Qml0
KCkpCi0gICAgICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczgoKSwgbmFt
ZS5sZW5ndGgoKSwgcmdiKTsKLSAgICByZXR1cm4gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3Rl
cnMxNigpLCBuYW1lLmxlbmd0aCgpLCByZ2IpOwotfQotCi1ib29sIENvbG9yOjpwYXJzZUhleENv
bG9yKGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUsIFJHQkEzMiYgcmdiKQotewotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAobmFtZS5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlSGV4
Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpLCBuYW1lLmxlbmd0aCgpLCByZ2IpOwotICAgIHJldHVy
biBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2KCksIG5hbWUubGVuZ3RoKCksIHJnYik7
Ci19Ci0KLWludCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYgYzEsIGNvbnN0IENvbG9y
JiBjMikKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhc3N1bWluZyB0aGF0IHRoZSBjb2xvcnMg
YXJlIGluIHRoZSBzYW1lIGNvbG9yc3BhY2UuCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHBy
b2JhYmx5IHJldHVybiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgYnV0IG1hbnkgb2YgdGhlIGNh
bGwKLSAgICAvLyBzaXRlcyBoYXZlIHBpY2tlZCBjb21wYXJpc29uIHZhbHVlcyBiYXNlZCBvbiBm
ZWVsLiBXZSdkIG5lZWQgdG8gYnJlYWsgb3V0Ci0gICAgLy8gb3VyIGxvZ2FyaXRobSB0YWJsZXMg
dG8gY2hhbmdlIHRoZW0gOikKLSAgICBpbnQgYzFSZWQgPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5h
c0V4dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMS5yZWQoKTsKLSAgICBpbnQgYzFHcmVlbiA9IGMx
LmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzEuZ3JlZW4o
KTsKLSAgICBpbnQgYzFCbHVlID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmJs
dWUoKSAqIDI1NSA6IGMxLmJsdWUoKTsKLSAgICBpbnQgYzJSZWQgPSBjMi5pc0V4dGVuZGVkKCkg
PyBjMi5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMi5yZWQoKTsKLSAgICBpbnQgYzJHcmVl
biA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzIu
Z3JlZW4oKTsKLSAgICBpbnQgYzJCbHVlID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRl
ZCgpLmJsdWUoKSAqIDI1NSA6IGMyLmJsdWUoKTsKLSAgICBpbnQgZFIgPSBjMVJlZCAtIGMyUmVk
OwotICAgIGludCBkRyA9IGMxR3JlZW4gLSBjMkdyZWVuOwotICAgIGludCBkQiA9IGMxQmx1ZSAt
IGMyQmx1ZTsKLSAgICByZXR1cm4gZFIgKiBkUiArIGRHICogZEcgKyBkQiAqIGRCOwotfQotCi1z
dGF0aWMgaW5saW5lIGNvbnN0IE5hbWVkQ29sb3IqIGZpbmROYW1lZENvbG9yKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLXsKLSAgICBjaGFyIGJ1ZmZlcls2NF07IC8vIGVhc2lseSBiaWcgZW5vdWdoIGZv
ciB0aGUgbG9uZ2VzdCBjb2xvciBuYW1lCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5n
dGgoKTsKLSAgICBpZiAobGVuZ3RoID4gc2l6ZW9mKGJ1ZmZlcikgLSAxKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgVUNoYXIgYyA9IG5hbWVbaV07Ci0gICAgICAgIGlmICghYyB8fCAhV1RGOjppc0FT
Q0lJKGMpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGJ1ZmZlcltpXSA9
IHRvQVNDSUlMb3dlcihzdGF0aWNfY2FzdDxjaGFyPihjKSk7Ci0gICAgfQotICAgIGJ1ZmZlclts
ZW5ndGhdID0gJ1wwJzsKLSAgICByZXR1cm4gZmluZENvbG9yKGJ1ZmZlciwgbGVuZ3RoKTsKLX0K
LQotQ29sb3I6OkNvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZVswXSA9
PSAnIycpIHsKLSAgICAgICAgUkdCQTMyIGNvbG9yOwotICAgICAgICBib29sIHZhbGlkOwotCi0g
ICAgICAgIGlmIChuYW1lLmlzOEJpdCgpKQotICAgICAgICAgICAgdmFsaWQgPSBwYXJzZUhleENv
bG9yKG5hbWUuY2hhcmFjdGVyczgoKSArIDEsIG5hbWUubGVuZ3RoKCkgLSAxLCBjb2xvcik7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJh
Y3RlcnMxNigpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKLQotICAgICAgICBpZiAo
dmFsaWQpCi0gICAgICAgICAgICBzZXRSR0IoY29sb3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChhdXRvKiBmb3VuZENvbG9yID0gZmluZE5hbWVkQ29sb3IobmFtZSkpCi0gICAgICAgICAg
ICBzZXRSR0IoeyBmb3VuZENvbG9yLT5BUkdCVmFsdWUgfSk7Ci0gICAgfQotfQotCi1Db2xvcjo6
Q29sb3IoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBpZiAobmFtZVswXSA9PSAnIycpIHsKLSAg
ICAgICAgU2ltcGxlQ29sb3IgY29sb3I7Ci0gICAgICAgIGlmIChwYXJzZUhleENvbG9yKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigmbmFtZVsxXSksIHN0ZDo6c3RybGVuKCZuYW1lWzFd
KSwgY29sb3IpKQotICAgICAgICAgICAgc2V0UkdCKGNvbG9yKTsKLSAgICB9IGVsc2UgaWYgKGF1
dG8qIGZvdW5kQ29sb3IgPSBmaW5kQ29sb3IobmFtZSwgc3RybGVuKG5hbWUpKSkKLSAgICAgICAg
c2V0UkdCKHsgZm91bmRDb2xvci0+QVJHQlZhbHVlIH0pOwotfQotCi1Db2xvcjo6Q29sb3IoY29u
c3QgQ29sb3ImIG90aGVyKQotICAgIDogbV9jb2xvckRhdGEob3RoZXIubV9jb2xvckRhdGEpCi17
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xv
ci0+cmVmKCk7Ci19Ci0KLUNvbG9yOjpDb2xvcihDb2xvciYmIG90aGVyKQotewotICAgICp0aGlz
ID0gV1RGTW92ZShvdGhlcik7Ci19Ci0KLUNvbG9yOjpDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIs
IGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIC8v
IFplcm8gdGhlIHVuaW9uLCBqdXN0IGluIGNhc2UgYSAzMi1iaXQgc3lzdGVtIG9ubHkgYXNzaWdu
cyB0aGUKLSAgICAvLyB0b3AgMzIgYml0cyB3aGVuIGNvcHlpbmcgdGhlIGV4dGVuZGVkQ29sb3Ig
cG9pbnRlciBiZWxvdy4KLSAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSAwOwotICAgIGF1
dG8gZXh0ZW5kZWRDb2xvclJlZiA9IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBh
bHBoYSwgY29sb3JTcGFjZSk7Ci0gICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRl
bmRlZENvbG9yUmVmLmxlYWtSZWYoKTsKLSAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKLX0KLQot
Q29sb3ImIENvbG9yOjpvcGVyYXRvcj0oY29uc3QgQ29sb3ImIG90aGVyKQotewotICAgIGlmICgq
dGhpcyA9PSBvdGhlcikKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgaWYgKGlzRXh0ZW5k
ZWQoKSkKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYoKTsKLQotICAg
IG1fY29sb3JEYXRhID0gb3RoZXIubV9jb2xvckRhdGE7Ci0KLSAgICBpZiAoaXNFeHRlbmRlZCgp
KQotICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWYoKTsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KLUNvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KENvbG9yJiYgb3RoZXIpCi17Ci0g
ICAgaWYgKCp0aGlzID09IG90aGVyKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBpZiAo
aXNFeHRlbmRlZCgpKQotICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigp
OwotCi0gICAgbV9jb2xvckRhdGEgPSBvdGhlci5tX2NvbG9yRGF0YTsKLSAgICBvdGhlci5tX2Nv
bG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBpbnZhbGlkUkdCQUNvbG9yOwotCi0gICAgcmV0dXJuICp0
aGlzOwotfQotCiBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29u
c3QKIHsKICAgICBpZiAoaXNPcGFxdWUoKSkKQEAgLTI5NSwxMyArMTAxLDYgQEAgU3RyaW5nIFNp
bXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9ySFRNTAogICAgIHJldHVybiBzZXJpYWxpemF0aW9u
Rm9yQ1NTKCk7CiB9CiAKLVN0cmluZyBDb2xvcjo6c2VyaWFsaXplZCgpIGNvbnN0Ci17Ci0gICAg
aWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7
Ci0gICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRpb25Gb3JIVE1MKCk7Ci19Ci0KIHN0YXRpYyBj
aGFyIGRlY2ltYWxEaWdpdCh1bnNpZ25lZCBudW1iZXIpCiB7CiAgICAgQVNTRVJUKG51bWJlciA8
IDEwKTsKQEAgLTMzMSwyODcgKzEzMCwxMSBAQCBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6
YXRpb25Gb3JDU1MoCiAgICAgfQogfQogCi1TdHJpbmcgQ29sb3I6OmNzc1RleHQoKSBjb25zdAot
ewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY3Nz
VGV4dCgpOwotICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0aW9uRm9yQ1NTKCk7Ci19Ci0KLVN0
cmluZyBSR0JBMzI6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3QKK1N0
cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25z
dAogewogICAgIGlmIChhbHBoYUNvbXBvbmVudCgpIDwgMHhGRikKICAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoJyMnLCBoZXgocmVkQ29tcG9uZW50KCksIDIpLCBoZXgoZ3JlZW5Db21wb25lbnQo
KSwgMiksIGhleChibHVlQ29tcG9uZW50KCksIDIpLCBoZXgoYWxwaGFDb21wb25lbnQoKSwgMikp
OwogICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBvbmVudCgpLCAyKSwgaGV4
KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVudCgpLCAyKSk7CiB9CiAKLVN0
cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdAotewotICAgIC8vIEZJ
WE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29sb3JzLgotICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0
aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpOwotfQotCi1Db2xvciBDb2xvcjo6bGlnaHQoKSBjb25z
dAotewotICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlm
IChyZ2IoKSA9PSBibGFjaykKLSAgICAgICAgcmV0dXJuIGxpZ2h0ZW5lZEJsYWNrOwotICAgIAot
ICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwot
Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0KLSAg
ICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwotCi0gICAgaWYgKHYgPT0gMC4wZikg
ewotICAgICAgICAvLyBMaWdodGVuZWQgYmxhY2sgd2l0aCBhbHBoYS4KLSAgICAgICAgcmV0dXJu
IENvbG9yKDB4NTQsIDB4NTQsIDB4NTQsIGFscGhhKCkpOwotICAgIH0KLQotICAgIGZsb2F0IG11
bHRpcGxpZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4zM2YpIC8gdjsKLQotICAgIHJldHVybiBD
b2xvcihzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0
b3IpLAotICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICog
c2NhbGVGYWN0b3IpLAotICAgICAgICAgICAgICAgICBhbHBoYSgpKTsKLX0KLQotQ29sb3IgQ29s
b3I6OmRhcmsoKSBjb25zdAotewotICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9y
IHNwZWVkLgotICAgIGlmIChyZ2IoKSA9PSB3aGl0ZSkKLSAgICAgICAgcmV0dXJuIGRhcmtlbmVk
V2hpdGU7Ci0gICAgCi0gICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1
Ni4wZiwgMC4wZik7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRz
TG9zc3koKTsKLQotICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7Ci0gICAgZmxv
YXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7Ci0KLSAgICBy
ZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9y
KSwKLSAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNj
YWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVy
ICogYiAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAgICAgYWxwaGEoKSk7Ci19Ci0KLWJv
b2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHBy
b2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JH
QkFDb21wb25lbnRzTG9zc3koKTsKLSAgICBmbG9hdCBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsID0g
c3RkOjptYXgoeyByLCBnLCBiIH0pOwotICAgIHJldHVybiBhID4gMC41ICYmIGxhcmdlc3ROb25B
bHBoYUNoYW5uZWwgPCAwLjU7Ci19Ci0KLWZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdAot
ewotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9uIHRvIHNS
R0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMgZm9yIEhTTC4KLSAgICByZXR1
cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7Ci19Ci0KLXN0
YXRpYyBpbnQgYmxlbmRDb21wb25lbnQoaW50IGMsIGludCBhKQotewotICAgIC8vIFdlIHVzZSB3
aGl0ZS4KLSAgICBmbG9hdCBhbHBoYSA9IGEgLyAyNTUuMGY7Ci0gICAgaW50IHdoaXRlQmxlbmQg
PSAyNTUgLSBhOwotICAgIGMgLT0gd2hpdGVCbGVuZDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihjIC8gYWxwaGEpOwotfQotCi1jb25zdCBpbnQgY1N0YXJ0QWxwaGEgPSAxNTM7IC8vIDYw
JQotY29uc3QgaW50IGNFbmRBbHBoYSA9IDIwNDsgLy8gODAlOwotY29uc3QgaW50IGNBbHBoYUlu
Y3JlbWVudCA9IDE3OyAvLyBJbmNyZW1lbnRzIGluIGJldHdlZW4uCi0KLUNvbG9yIENvbG9yOjpi
bGVuZChjb25zdCBDb2xvciYgc291cmNlKSBjb25zdAotewotICAgIGlmICghaXNWaXNpYmxlKCkg
fHwgc291cmNlLmlzT3BhcXVlKCkpCi0gICAgICAgIHJldHVybiBzb3VyY2U7Ci0KLSAgICBpZiAo
IXNvdXJjZS5hbHBoYSgpKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBpbnQgZCA9IDI1
NSAqIChhbHBoYSgpICsgc291cmNlLmFscGhhKCkpIC0gYWxwaGEoKSAqIHNvdXJjZS5hbHBoYSgp
OwotICAgIGludCBhID0gZCAvIDI1NTsKLSAgICBpbnQgciA9IChyZWQoKSAqIGFscGhhKCkgKiAo
MjU1IC0gc291cmNlLmFscGhhKCkpICsgMjU1ICogc291cmNlLmFscGhhKCkgKiBzb3VyY2UucmVk
KCkpIC8gZDsKLSAgICBpbnQgZyA9IChncmVlbigpICogYWxwaGEoKSAqICgyNTUgLSBzb3VyY2Uu
YWxwaGEoKSkgKyAyNTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJjZS5ncmVlbigpKSAvIGQ7Ci0g
ICAgaW50IGIgPSAoYmx1ZSgpICogYWxwaGEoKSAqICgyNTUgLSBzb3VyY2UuYWxwaGEoKSkgKyAy
NTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJjZS5ibHVlKCkpIC8gZDsKLSAgICByZXR1cm4gQ29s
b3IociwgZywgYiwgYSk7Ci19Ci0KLUNvbG9yIENvbG9yOjpibGVuZFdpdGhXaGl0ZSgpIGNvbnN0
Ci17Ci0gICAgLy8gSWYgdGhlIGNvbG9yIGNvbnRhaW5zIGFscGhhIGFscmVhZHksIHdlIGxlYXZl
IGl0IGFsb25lLgotICAgIGlmICghaXNPcGFxdWUoKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwot
Ci0gICAgQ29sb3IgbmV3Q29sb3I7Ci0gICAgZm9yIChpbnQgYWxwaGEgPSBjU3RhcnRBbHBoYTsg
YWxwaGEgPD0gY0VuZEFscGhhOyBhbHBoYSArPSBjQWxwaGFJbmNyZW1lbnQpIHsKLSAgICAgICAg
Ly8gV2UgaGF2ZSBhIHNvbGlkIGNvbG9yLiAgQ29udmVydCB0byBhbiBlcXVpdmFsZW50IGNvbG9y
IHRoYXQgbG9va3MgdGhlIHNhbWUgd2hlbiBibGVuZGVkIHdpdGggd2hpdGUKLSAgICAgICAgLy8g
YXQgdGhlIGN1cnJlbnQgYWxwaGEuICBUcnkgdXNpbmcgbGVzcyB0cmFuc3BhcmVuY3kgaWYgdGhl
IG51bWJlcnMgZW5kIHVwIGJlaW5nIG5lZ2F0aXZlLgotICAgICAgICBpbnQgciA9IGJsZW5kQ29t
cG9uZW50KHJlZCgpLCBhbHBoYSk7Ci0gICAgICAgIGludCBnID0gYmxlbmRDb21wb25lbnQoZ3Jl
ZW4oKSwgYWxwaGEpOwotICAgICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGJsdWUoKSwgYWxw
aGEpOwotICAgICAgICAKLSAgICAgICAgbmV3Q29sb3IgPSBDb2xvcihyLCBnLCBiLCBhbHBoYSk7
Ci0KLSAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49IDAgJiYgYiA+PSAwKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAgbmV3Q29sb3Iu
c2V0SXNTZW1hbnRpYygpOwotICAgIHJldHVybiBuZXdDb2xvcjsKLX0KLQotQ29sb3IgQ29sb3I6
OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0IGFtb3VudCkgY29uc3QKLXsKLSAgICBm
bG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkgPyBtX2NvbG9yRGF0YS5leHRl
bmRlZENvbG9yLT5hbHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKCkpIC8gMjU1KTsK
LSAgICByZXR1cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwotfQotCi1Db2xvciBDb2xvcjo6
Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQg
YW1vdW50KSBjb25zdAotewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogKGlzRXh0ZW5k
ZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkgOiBzdGF0aWNfY2FzdDxm
bG9hdD4oYWxwaGEoKSkgLyAyNTUpOwotICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Ci19Ci0KLUNvbG9yIENvbG9yOjpjb2xvcldpdGhB
bHBoYShmbG9hdCBhbHBoYSkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAg
ICByZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xv
ckRhdGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+
Ymx1ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07
Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJv
bSBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZy4KLSAgICBpbnQgbmV3QWxw
aGEgPSBhbHBoYSAqIDI1NTsKLQotICAgIENvbG9yIHJlc3VsdCA9IHsgcmVkKCksIGdyZWVuKCks
IGJsdWUoKSwgbmV3QWxwaGEgfTsKLSAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1
bHQuc2V0SXNTZW1hbnRpYygpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUNvbG9yIENvbG9y
Ojpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCBhbHBoYSkgY29u
c3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gQ29sb3IgeyBtX2Nv
bG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+
Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Ymx1ZSgpLCBhbHBoYSwgbV9jb2xv
ckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07Ci0KLSAgICBDb2xvciByZXN1bHQg
PSBTaW1wbGVDb2xvciB7IChyZ2IoKS52YWx1ZSgpICYgMHgwMEZGRkZGRikgfCBjb2xvckZsb2F0
VG9SR0JBQnl0ZShhbHBoYSkgPDwgMjQgfTsKLSAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAg
ICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6
cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IENvbG9yOjpjb2xvclNwYWNlQW5kQ29t
cG9uZW50cygpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkgewotICAgICAgICBhdXRv
JiBleHRlbmRlZENvbG9yID0gYXNFeHRlbmRlZCgpOwotICAgICAgICByZXR1cm4geyBleHRlbmRl
ZENvbG9yLmNvbG9yU3BhY2UoKSwgZXh0ZW5kZWRDb2xvci5jaGFubmVscygpIH07Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgcmVkKCkg
LyAyNTUuMGYsIGdyZWVuKCkgLyAyNTUuMGYsIGJsdWUoKSAvIDI1NS4wZiwgIGFscGhhKCkgLyAy
NTUuMGYgfSB9OwotfQotCi1TaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKSBjb25zdAotewotICAgIGlmICghaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gcmdi
KCk7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsK
LSAgICByZXR1cm4gbWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywgYiwgYSk7Ci19Ci0KLUZsb2F0
Q29tcG9uZW50cyBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0Ci17Ci0gICAg
YXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygp
OwotICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgewotICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoK
LSAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJS
R0I6Ci0gICAgICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29tcG9uZW50cyk7Ci0g
ICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgIHJldHVybiBwM1RvU1JHQihj
b21wb25lbnRzKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IHsgfTsKLX0KLQotYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiBhLCBjb25z
dCBDb2xvciYgYikKLXsKLSAgICBpZiAoYS5pc0V4dGVuZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkp
Ci0gICAgICAgIHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9PSBiLmFzRXh0ZW5kZWQoKTsKLQotICAg
IEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1Db2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVk
cyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgotICAgIC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhl
IHN0YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbgotICAg
IGlmIChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBDb2xv
cigpOwotCi0gICAgLy8gU2luY2UgbWFrZVByZW11bHRpcGxpZWRSR0JBKCkgYmFpbHMgb24gemVy
byBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCi0gICAgYXV0byBwcmVtdWx0RnJvbSA9IGZyb20u
YWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGF1dG8gcHJlbXVsdFRvID0gdG8uYWxw
aGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQSh0by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
KSA6IENvbG9yOjp0cmFuc3BhcmVudDsKLQotICAgIFJHQkEzMiBwcmVtdWx0QmxlbmRlZCA9IG1h
a2VSR0JBKAotICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5yZWRDb21wb25lbnQo
KSwgcHJlbXVsdFRvLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6
OmJsZW5kKHByZW11bHRGcm9tLmdyZWVuQ29tcG9uZW50KCksIHByZW11bHRUby5ncmVlbkNvbXBv
bmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmJs
dWVDb21wb25lbnQoKSwgcHJlbXVsdFRvLmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5hbHBoYUNvbXBvbmVudCgpLCBwcmVtdWx0
VG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCi0gICAgKTsKLQotICAgIHJldHVybiBtYWtl
VW5QcmVtdWx0aXBsaWVkUkdCQShwcmVtdWx0QmxlbmRlZCk7Ci19Ci0KLUNvbG9yIGJsZW5kV2l0
aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKLXsKLSAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhh
bmRsZSBjb2xvciBzcGFjZXMuCi0gICAgLy8gV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUg
b2YgdGhlIHZhbGlkIGZsYWcgYXQgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uCi0gICAgaWYgKHBy
b2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0
byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0KLSAgICByZXR1cm4g
ewotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWRDb21wb25lbnQoKSwgdG9TUkdC
LnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21T
UkdCLmdyZWVuQ29tcG9uZW50KCksIHRvU1JHQi5ncmVlbkNvbXBvbmVudCgpLCBwcm9ncmVzcyks
Ci0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWVDb21wb25lbnQoKSwgdG9TUkdC
LmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9t
U1JHQi5hbHBoYUNvbXBvbmVudCgpLCB0b1NSR0IuYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3Mp
Ci0gICAgfTsKLX0KLQotdm9pZCBDb2xvcjo6dGFnQXNWYWxpZCgpCi17Ci0gICAgbV9jb2xvckRh
dGEucmdiYUFuZEZsYWdzIHw9IHZhbGlkUkdCQUNvbG9yOwotfQotCi1jb25zdCBFeHRlbmRlZENv
bG9yJiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzRXh0ZW5kZWQo
KSk7Ci0gICAgcmV0dXJuICptX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yOwotfQotCi1UZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0g
ICAgcmV0dXJuIHRzIDw8IGNvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCk7Ci19Ci0KLVRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSkKLXsKLSAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKLSAgICBjYXNlIENvbG9yU3BhY2U6OlNS
R0I6Ci0gICAgICAgIHRzIDw8ICJzUkdCIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2xv
clNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgIHRzIDw8ICJMaW5lYXJSR0IiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKLSAgICAgICAgdHMgPDwgIkRp
c3BsYXlQMyI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24gMjYyMTA0KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOjI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZENvbG9yLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtYXRoPgor
I2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvTENoYXIuaD4KKworI2lmIFVTRShDRykKK3R5cGVkZWYgc3RydWN0
IENHQ29sb3IqIENHQ29sb3JSZWY7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKK3N0cnVj
dCBfRDNEQ09MT1JWQUxVRTsKK3R5cGVkZWYgX0QzRENPTE9SVkFMVUUgRDNEQ09MT1JWQUxVRTsK
K3R5cGVkZWYgRDNEQ09MT1JWQUxVRSBEMkRfQ09MT1JfRjsKK3R5cGVkZWYgRDJEX0NPTE9SX0Yg
RDJEMV9DT0xPUl9GOworc3RydWN0IEQyRF9WRUNUT1JfNEY7Cit0eXBlZGVmIEQyRF9WRUNUT1Jf
NEYgRDJEMV9WRUNUT1JfNEY7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYg
c3RydWN0IF9HZGtSR0JBIEdka1JHQkE7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdHJ1Y3QgRmxvYXRDb21wb25lbnRzOworCisvLyBDb2xvciB2YWx1ZSB3aXRoIDgtYml0IGNv
bXBvbmVudHMgZm9yIHJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYS4KKy8vIEZvciBoaXN0b3Jp
Y2FsIHJlYXNvbnMsIHN0b3JlZCBhcyBhIDMyLWJpdCBpbnRlZ2VyLCB3aXRoIGFscGhhIGluIHRo
ZSBoaWdoIGJpdHM6IEFSR0IuCitjbGFzcyBTaW1wbGVDb2xvciB7CitwdWJsaWM6CisgICAgY29u
c3RleHByIFNpbXBsZUNvbG9yKHVpbnQzMl90IHZhbHVlID0gMCkgOiBtX3ZhbHVlIHsgdmFsdWUg
fSB7IH0KKworICAgIGNvbnN0ZXhwciB1aW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWU7IH0KKworICAgIGNvbnN0ZXhwciB1aW50OF90IHJlZENvbXBvbmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUgPj4gMTY7IH0KKyAgICBjb25zdGV4cHIgdWludDhfdCBncmVlbkNvbXBv
bmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4gODsgfQorICAgIGNvbnN0ZXhwciB1aW50
OF90IGJsdWVDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgY29uc3Rl
eHByIHVpbnQ4X3QgYWxwaGFDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDI0
OyB9CisKKyAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGFscGhh
Q29tcG9uZW50KCkgPT0gMHhGRjsgfQorICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCk7IH0KKworICAgIFN0cmluZyBzZXJpYWxpemF0
aW9uRm9ySFRNTCgpIGNvbnN0OworICAgIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKCkgY29u
c3Q7CisgICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKK307CisKK2Jvb2wgb3Bl
cmF0b3I9PShTaW1wbGVDb2xvciwgU2ltcGxlQ29sb3IpOworYm9vbCBvcGVyYXRvciE9KFNpbXBs
ZUNvbG9yLCBTaW1wbGVDb2xvcik7CisKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBhZnRlciBtaWdy
YXRpbmcgdG8gdGhlIG5ldyBuYW1lLgordXNpbmcgUkdCQTMyID0gU2ltcGxlQ29sb3I7CisKK2Nv
bnN0ZXhwciBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKK2NvbnN0ZXhwciBS
R0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOworCitSR0JBMzIgbWFr
ZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhLCBib29sIGNlaWxp
bmcgPSB0cnVlKTsKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKTsKK1JHQkEz
MiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitS
R0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKTsKKworV0VCQ09SRV9FWFBPUlQg
UkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZs
b2F0IGEpOworV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaCwg
ZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7CitSR0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0EoZmxv
YXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7CisKK3VpbnQ4X3Qgcm91
bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQpOwordWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsKGZsb2F0KTsKKworY2xhc3MgQ29sb3IgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIENvbG9yKCkgeyB9CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIGFs
bCB0aGVzZSBjb25zdHJ1Y3RvcnMgYW5kIGNyZWF0aW9uIGZ1bmN0aW9ucyBhbmQgcmVwbGFjZSB0
aGUgb25lcyB0aGF0IGFyZSBzdGlsbCBuZWVkZWQgd2l0aCBmcmVlIGZ1bmN0aW9ucy4KKworICAg
IENvbG9yKFJHQkEzMiBjb2xvciwgYm9vbCB2YWxpZCA9IHRydWUpCisgICAgeworICAgICAgICBp
ZiAodmFsaWQpCisgICAgICAgICAgICBzZXRSR0IoY29sb3IpOworICAgIH0KKworICAgIGVudW0g
U2VtYW50aWNUYWcgeyBTZW1hbnRpYyB9OworICAgIENvbG9yKFJHQkEzMiBjb2xvciwgU2VtYW50
aWNUYWcpCisgICAgeworICAgICAgICBzZXRSR0IoY29sb3IpOworICAgICAgICBzZXRJc1NlbWFu
dGljKCk7CisgICAgfQorCisgICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikKKyAgICB7Cisg
ICAgICAgIHNldFJHQihyLCBnLCBiKTsKKyAgICB9CisKKyAgICBDb2xvcihpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQShyLCBnLCBiLCBh
KSk7CisgICAgfQorCisgICAgQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQg
YSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQTMyRnJvbUZsb2F0cyhyLCBnLCBiLCBh
KSk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlcyBhIG5ldyBjb2xvciBmcm9tIHRoZSBzcGVjaWZp
YyBDTVlLIGFuZCBhbHBoYSB2YWx1ZXMuCisgICAgQ29sb3IoZmxvYXQgYywgZmxvYXQgbSwgZmxv
YXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQUZy
b21DTVlLQShjLCBtLCB5LCBrLCBhKSk7CisgICAgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgZXhw
bGljaXQgQ29sb3IoY29uc3QgU3RyaW5nJik7CisgICAgZXhwbGljaXQgQ29sb3IoY29uc3QgY2hh
ciopOworCisgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBl
KQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxp
ZFJHQkFDb2xvciwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlr
ZSBhbiBFeHRlbmRlZENvbG9yIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShkZWxldGVkSGFz
aFZhbHVlICYgdmFsaWRSR0JBQ29sb3JCaXQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUg
bXVzdCBub3QgbG9vayBsaWtlIGEgdmFsaWQgUkdCQTMyIENvbG9yIik7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAmICgxIDw8IDQpLCAiQ29sb3IncyBkZWxldGVkIGhh
c2ggdmFsdWUgbXVzdCBoYXZlIHNvbWUgYml0cyBzZXQgdGhhdCBhbiBSR0JBMzIgQ29sb3Igd291
bGRuJ3QgaGF2ZSIpOworICAgICAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBkZWxldGVk
SGFzaFZhbHVlOworICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7CisgICAgfQorCisgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID09IGRlbGV0ZWRIYXNoVmFsdWU7CisgICAgfQor
CisgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVFbXB0eVZhbHVlVHlwZSkKKyAgICB7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiBpbnZhbGlkUkdCQUNvbG9y
LCAiQ29sb3IncyBlbXB0eSBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhbiBFeHRlbmRl
ZENvbG9yIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiAoMSA8PCA0
KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRo
YXQgYW4gUkdCQTMyIENvbG9yIHdvdWxkbid0IGhhdmUiKTsKKyAgICAgICAgbV9jb2xvckRhdGEu
cmdiYUFuZEZsYWdzID0gZW1wdHlIYXNoVmFsdWU7CisgICAgICAgIEFTU0VSVCghaXNFeHRlbmRl
ZCgpKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNyZWF0ZXMgYW4gRXh0ZW5kZWRDb2xvci4KKyAg
ICAvLyBGSVhNRTogSWYgdGhlIGNvbG9yU3BhY2UgaXMgc1JHQiBhbmQgdGhlIHZhbHVlcyBjYW4g
YWxsIGJlCisgICAgLy8gY29udmVydGVkIGV4YWN0bHkgdG8gaW50ZWdlcnMsIHdlIHNob3VsZCBt
YWtlIGEgbm9ybWFsIENvbG9yLgorICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBDb2xvclNwYWNlKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
KGNvbnN0IENvbG9yJik7CisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3ImJik7CisKKyAg
ICB+Q29sb3IoKQorICAgIHsKKyAgICAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgICAg
IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CisgICAgfQorCisgICAgLy8gUmV0
dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gSFRNTDUKKyAgICAvLyA8aHR0
cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjZmlsbC1h
bmQtc3Ryb2tlLXN0eWxlcz4gKDEwIFNlcHRlbWJlciAyMDE1KQorICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBzZXJpYWxpemVkKCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
Y3NzVGV4dCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBh
cyBlaXRoZXIgI1JSR0dCQiBvciAjUlJHR0JCQUEKKyAgICBTdHJpbmcgbmFtZUZvclJlbmRlclRy
ZWVBc1RleHQoKSBjb25zdDsKKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlz
RXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgdmFsaWRSR0JBQ29sb3JC
aXQpOyB9CisKKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgp
ID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogcmdiKCkuaXNPcGFxdWUoKTsgfQorICAg
IGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRl
ZCgpLmFscGhhKCkgPiAwLjAgOiByZ2IoKS5pc1Zpc2libGUoKTsgfQorCisgICAgaW50IHJlZCgp
IGNvbnN0IHsgcmV0dXJuIHJnYigpLnJlZENvbXBvbmVudCgpOyB9CisgICAgaW50IGdyZWVuKCkg
Y29uc3QgeyByZXR1cm4gcmdiKCkuZ3JlZW5Db21wb25lbnQoKTsgfQorICAgIGludCBibHVlKCkg
Y29uc3QgeyByZXR1cm4gcmdiKCkuYmx1ZUNvbXBvbmVudCgpOyB9CisgICAgaW50IGFscGhhKCkg
Y29uc3QgeyByZXR1cm4gcmdiKCkuYWxwaGFDb21wb25lbnQoKTsgfQorCisgICAgZmxvYXQgYWxw
aGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFs
cGhhKCkgOiBzdGF0aWNfY2FzdDxmbG9hdD4ocmdiKCkuYWxwaGFDb21wb25lbnQoKSkgLyAweEZG
OyB9CisKKyAgICBSR0JBMzIgcmdiKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21w
b25lbnRzPiBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0OworCisgICAgLy8gVGhpcyB3
aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgorICAgIFdF
QkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3Q7
CisKKyAgICAvLyBUaGlzIHdpbGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBp
bnRvIHNSR0IuCisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRDb21wb25lbnRzIHRvU1JHQkFDb21w
b25lbnRzTG9zc3koKSBjb25zdDsKKworICAgIENvbG9yIGxpZ2h0KCkgY29uc3Q7CisgICAgQ29s
b3IgZGFyaygpIGNvbnN0OworCisgICAgYm9vbCBpc0RhcmsoKSBjb25zdDsKKyAgICAKKyAgICBX
RUJDT1JFX0VYUE9SVCBmbG9hdCBsaWdodG5lc3MoKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMg
YW4gaW1wbGVtZW50YXRpb24gb2YgUG9ydGVyLUR1ZmYncyAic291cmNlLW92ZXIiIGVxdWF0aW9u
CisgICAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsKKyAgICBDb2xvciBibGVuZFdp
dGhXaGl0ZSgpIGNvbnN0OworCisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
ZmxvYXQpIGNvbnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKKwor
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIEFsdGVybmF0aXZlUm91bmRpbmcgdmFy
aWFudHMgYnkgc2V0dGxpbmcgb24gYSByb3VuZGluZyBiZWhhdmlvci4KKyAgICBDb2xvciBjb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxm
bG9hdD4pIGNvbnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdB
bHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsKKyAgICBDb2xvciBjb2xvcldpdGhBbHBo
YVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4pIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5n
KGZsb2F0KSBjb25zdDsKKworICAgIENvbG9yIG9wYXF1ZUNvbG9yKCkgY29uc3QgeyByZXR1cm4g
Y29sb3JXaXRoQWxwaGEoMS4wZik7IH0KKworICAgIC8vIFRydWUgaWYgdGhlIGNvbG9yIG9yaWdp
bmF0ZWQgZnJvbSBhIENTUyBzZW1hbnRpYyBjb2xvciBuYW1lLgorICAgIGJvb2wgaXNTZW1hbnRp
YygpIGNvbnN0IHsgcmV0dXJuICFpc0V4dGVuZGVkKCkgJiYgKG1fY29sb3JEYXRhLnJnYmFBbmRG
bGFncyAmIGlzU2VtYW50aWNSQkdBQ29sb3JCaXQpOyB9CisKKyNpZiBQTEFURk9STShHVEspCisg
ICAgQ29sb3IoY29uc3QgR2RrUkdCQSYpOworICAgIG9wZXJhdG9yIEdka1JHQkEoKSBjb25zdDsK
KyNlbmRpZgorCisjaWYgVVNFKENHKQorICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENHQ29sb3JS
ZWYpOworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENHQ29sb3JSZWYsIFNlbWFudGljVGFnKTsK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQorICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKEQy
RDFfQ09MT1JfRik7CisgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgRDJEMV9DT0xPUl9GKCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYoKSBjb25z
dDsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcm
LCBSR0JBMzImKTsKKyAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZ1Zp
ZXcmLCBSR0JBMzImKTsKKyAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IExDaGFy
KiwgdW5zaWduZWQsIFJHQkEzMiYpOworICAgIHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCwgUkdCQTMyJik7CisKKyAgICBzdGF0aWMgY29uc3RleHByIFNp
bXBsZUNvbG9yIGJsYWNrIHsgMHhGRjAwMDAwMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgU2lt
cGxlQ29sb3Igd2hpdGUgeyAweEZGRkZGRkZGIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1w
bGVDb2xvciBkYXJrR3JheSB7IDB4RkY4MDgwODAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNp
bXBsZUNvbG9yIGdyYXkgeyAweEZGQTBBMEEwIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1w
bGVDb2xvciBsaWdodEdyYXkgeyAweEZGQzBDMEMwIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBT
aW1wbGVDb2xvciB0cmFuc3BhcmVudCB7IDB4MDAwMDAwMDAgfTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFNpbXBsZUNvbG9yIGN5YW4geyAweEZGMDBGRkZGIH07CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBTaW1wbGVDb2xvciB5ZWxsb3cgeyAweEZGRkZGRjAwIH07CisKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgY29tcG9zaXRpb25GaWxs
IHsgMHgzQ0FGQzBFMyB9OworI2Vsc2UKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9y
IGNvbXBvc2l0aW9uRmlsbCB7IDB4RkZFMURENTUgfTsKKyNlbmRpZgorCisgICAgYm9vbCBpc0V4
dGVuZGVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKG1fY29sb3JEYXRhLnJnYmFB
bmRGbGFncyAmIGludmFsaWRSR0JBQ29sb3IpOworICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBj
b25zdCBFeHRlbmRlZENvbG9yJiBhc0V4dGVuZGVkKCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VY
UE9SVCBDb2xvciYgb3BlcmF0b3I9KGNvbnN0IENvbG9yJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
Q29sb3ImIG9wZXJhdG9yPShDb2xvciYmKTsKKworICAgIC8vIEV4dGVuZGVkIGFuZCBub24tZXh0
ZW5kZWQgY29sb3JzIHdpbGwgYWx3YXlzIGJlIG5vbi1lcXVhbC4KKyAgICBmcmllbmQgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CisgICAgZnJpZW5kIGJv
b2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9y
JiBiKTsKKworICAgIHN0YXRpYyBib29sIGlzQmxhY2tDb2xvcihjb25zdCBDb2xvciYpOworICAg
IHN0YXRpYyBib29sIGlzV2hpdGVDb2xvcihjb25zdCBDb2xvciYpOworCisgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb2xvcj4gZGVjb2RlKERlY29kZXImKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIHNldFJHQihpbnQgciwgaW50IGcsIGludCBiKSB7IHNldFJH
QihtYWtlUkdCKHIsIGcsIGIpKTsgfQorICAgIHZvaWQgc2V0UkdCKFJHQkEzMik7CisgICAgdm9p
ZCBzZXRJc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgfD0gaXNTZW1hbnRp
Y1JCR0FDb2xvckJpdDsgfQorCisgICAgLy8gMHhfX19fX19fMDAgaXMgYW4gRXh0ZW5kZWRDb2xv
ciBwb2ludGVyLgorICAgIC8vIDB4X19fX19fXzAxIGlzIGFuIGludmFsaWQgUkdCQTMyLgorICAg
IC8vIDB4X19fX19fXzExIGlzIGEgdmFsaWQgUkdCQTMyLgorICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBleHRlbmRlZENvbG9yID0gMHgwOworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpbnZh
bGlkUkdCQUNvbG9yID0gMHgxOworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCB2YWxpZFJHQkFD
b2xvckJpdCA9IDB4MjsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRSR0JBQ29sb3Ig
PSAweDM7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGlzU2VtYW50aWNSQkdBQ29sb3JCaXQg
PSAweDQ7CisKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgZGVsZXRlZEhhc2hWYWx1ZSA9IDB4
RkZGRkZGRkZGRkZGRkZGRDsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgZW1wdHlIYXNoVmFs
dWUgPSAweEZGRkZGRkZGRkZGRkZGRkI7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRhZ0Fz
VmFsaWQoKTsKKworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDY0X3QgcmdiYUFuZEZsYWdzIHsg
aW52YWxpZFJHQkFDb2xvciB9OworICAgICAgICBFeHRlbmRlZENvbG9yKiBleHRlbmRlZENvbG9y
OworICAgIH0gbV9jb2xvckRhdGE7Cit9OworCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3Im
LCBjb25zdCBDb2xvciYpOworYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiwgY29uc3QgQ29s
b3ImKTsKKworLy8gT25lIG9yIGJvdGggbXVzdCBiZSBleHRlbmRlZCBjb2xvcnMuCitXRUJDT1JF
X0VYUE9SVCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xv
ciYpOworCitDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpOworQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29s
b3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKTsKKworaW50IGRpZmZl
cmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKKwordWludDE2X3QgZmFz
dE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpOwordWludDE2X3QgZmFzdERpdmlkZUJ5MjU1
KHVpbnQxNl90KTsKKworI2lmIFVTRShDRykKK1dFQkNPUkVfRVhQT1JUIENHQ29sb3JSZWYgY2Fj
aGVkQ0dDb2xvcihjb25zdCBDb2xvciYpOworI2VuZGlmCisKK1dFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBDb2xvciYpOwor
V0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVh
bSYsIENvbG9yU3BhY2UpOworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yIGEs
IFNpbXBsZUNvbG9yIGIpCit7CisgICAgcmV0dXJuIGEudmFsdWUoKSA9PSBiLnZhbHVlKCk7Cit9
CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oU2ltcGxlQ29sb3IgYSwgU2ltcGxlQ29sb3IgYikK
K3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVuZGVkKCkg
fHwgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBleHRlbmRlZENvbG9yc0VxdWFsKGEs
IGIpOworCisgICAgcmV0dXJuIGEubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID09IGIubV9jb2xv
ckRhdGEucmdiYUFuZEZsYWdzOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENv
bG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitp
bmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29u
c3QgQ29sb3ImIGIpCit7CisgICAgaWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgp
KQorICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKKyAgICByZXR1cm4g
KGEubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljUkJHQUNvbG9y
Qml0KSA9PSAoYi5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNS
QkdBQ29sb3JCaXQpOworfQorCitpbmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAor
eworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuaGFz
aCgpOworCisgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3Mp
OworfQorCitpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGludCB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oMjU1LCB2YWx1ZSkpOworfQor
CitpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0IHZhbHVlKQor
eworICAgIHJldHVybiBzdGQ6Om1heCgwLmYsIHN0ZDo6bWluKDI1NS5mLCBzdGQ6OnJvdW5kKHZh
bHVlKSkpOworfQorCitpbmxpbmUgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3Qg
dmFsdWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSA8PCA4KSAtIHZhbHVlOworfQorCitpbmxpbmUg
dWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90IHZhbHVlKQoreworICAgIC8vIFdoaWxl
IHRoaXMgaXMgYW4gYXBwcm94aW1hdGUgYWxnb3JpdGhtIGZvciBkaXZpc2lvbiBieSAyNTUsIGl0
IGdpdmVzIHBlcmZlY3RseSBhY2N1cmF0ZSByZXN1bHRzIGZvciAxNi1iaXQgdmFsdWVzLgorICAg
IC8vIEZJWE1FOiBTaW5jZSB0aGlzIGdpdmVzIGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2LWJpdCB2
YWx1ZXMsIHdlIHNob3VsZCBnZXQgdGhpcyBvcHRpbWl6YXRpb24gaW50byBjb21waWxlcnMgbGlr
ZSBjbGFuZy4KKyAgICB1aW50MTZfdCBhcHByb3hpbWF0aW9uID0gdmFsdWUgPj4gODsKKyAgICB1
aW50MTZfdCByZW1haW5kZXIgPSB2YWx1ZSAtIChhcHByb3hpbWF0aW9uICogMjU1KSArIDE7Cisg
ICAgcmV0dXJuIGFwcHJveGltYXRpb24gKyAocmVtYWluZGVyID4+IDgpOworfQorCitpbmxpbmUg
Q29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKK3sKKyAgICByZXR1cm4gYWxwaGEg
PyBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhhbHBo
YS52YWx1ZSgpKSA6ICp0aGlzOworfQorCitpbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QK
K3sKKyAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3Vu
ZGluZyhhbHBoYS52YWx1ZSgpKSA6ICp0aGlzOworfQorCitpbmxpbmUgUkdCQTMyIENvbG9yOjpy
Z2IoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgQVNTRVJUKCFpc0V4dGVuZGVk
KCkpIGhlcmUsIG9yIHByb2R1Y2UKKyAgICAvLyBhbiBSR0JBMzIgZXF1aXZhbGVudCBmb3IgYW4g
RXh0ZW5kZWRDb2xvci4gSWRlYWxseSB0aGUgZm9ybWVyLAorICAgIC8vIHNvIHdlIGNhbiBhdWRp
dCBhbGwgdGhlIHJnYigpIGNhbGwgc2l0ZXMgdG8gaGFuZGxlIGV4dGVuZGVkLgorICAgIHJldHVy
biB7IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPj4gMzIp
IH07Cit9CisKK2lubGluZSB2b2lkIENvbG9yOjpzZXRSR0IoUkdCQTMyIHJnYikKK3sKKyAgICBt
X2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmdiLnZhbHVl
KCkpIDw8IDMyOworICAgIHRhZ0FzVmFsaWQoKTsKK30KKworaW5saW5lIGJvb2wgQ29sb3I6Omlz
QmxhY2tDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yLmlzRXh0ZW5k
ZWQoKSkgeworICAgICAgICBjb25zdCBFeHRlbmRlZENvbG9yJiBleHRlbmRlZENvbG9yID0gY29s
b3IuYXNFeHRlbmRlZCgpOworICAgICAgICByZXR1cm4gIWV4dGVuZGVkQ29sb3IucmVkKCkgJiYg
IWV4dGVuZGVkQ29sb3IuZ3JlZW4oKSAmJiAhZXh0ZW5kZWRDb2xvci5ibHVlKCkgJiYgZXh0ZW5k
ZWRDb2xvci5hbHBoYSgpID09IDE7CisgICAgfQorCisgICAgcmV0dXJuIGNvbG9yLnJnYigpID09
IENvbG9yOjpibGFjazsKK30KKworaW5saW5lIGJvb2wgQ29sb3I6OmlzV2hpdGVDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkgeworICAgICAg
ICBjb25zdCBFeHRlbmRlZENvbG9yJiBleHRlbmRlZENvbG9yID0gY29sb3IuYXNFeHRlbmRlZCgp
OworICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvci5yZWQoKSA9PSAxICYmIGV4dGVuZGVkQ29s
b3IuZ3JlZW4oKSA9PSAxICYmIGV4dGVuZGVkQ29sb3IuYmx1ZSgpID09IDEgJiYgZXh0ZW5kZWRD
b2xvci5hbHBoYSgpID09IDE7CisgICAgfQorICAgIAorICAgIHJldHVybiBjb2xvci5yZ2IoKSA9
PSBDb2xvcjo6d2hpdGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIENvbG9y
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgp
KSB7CisgICAgICAgIGVuY29kZXIgPDwgdHJ1ZTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVu
ZGVkKCkucmVkKCk7CisgICAgICAgIGVuY29kZXIgPDwgYXNFeHRlbmRlZCgpLmdyZWVuKCk7Cisg
ICAgICAgIGVuY29kZXIgPDwgYXNFeHRlbmRlZCgpLmJsdWUoKTsKKyAgICAgICAgZW5jb2RlciA8
PCBhc0V4dGVuZGVkKCkuYWxwaGEoKTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCku
Y29sb3JTcGFjZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5jb2RlciA8PCBm
YWxzZTsKKworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIGVuY29kZXIgPDwgZmFsc2U7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZW5j
b2RlIHdoZXRoZXIgdGhlIGNvbG9yIGlzIHNlbWFudGljLgorCisgICAgdWludDMyX3QgdmFsdWUg
PSByZ2IoKS52YWx1ZSgpOworCisgICAgZW5jb2RlciA8PCB0cnVlOworICAgIGVuY29kZXIgPDwg
dmFsdWU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxDb2xvcj4gQ29s
b3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGJvb2wgaXNFeHRlbmRlZDsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRXh0ZW5kZWQpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgaWYgKGlzRXh0ZW5kZWQpIHsKKyAgICAgICAgZmxvYXQgcmVkOworICAg
ICAgICBmbG9hdCBncmVlbjsKKyAgICAgICAgZmxvYXQgYmx1ZTsKKyAgICAgICAgZmxvYXQgYWxw
aGE7CisgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZTsKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZWQpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShncmVlbikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJsdWUpKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhbHBoYSkpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGNvbG9yU3BhY2UpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgcmV0dXJuIENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCBjb2xvclNwYWNlKTsKKyAg
ICB9CisKKyAgICBib29sIGlzVmFsaWQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc1ZhbGlk
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmICghaXNWYWxpZCkKKyAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICB1aW50MzJfdCB2YWx1ZTsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IHJldHVybiBDb2xvciB7IFNpbXBsZUNvbG9yIHsgdmFsdWUgfSB9OworfQorCitjb25zdGV4cHIg
UkdCQTMyIG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQgYikKK3sKKyAgICByZXR1cm4gbWFrZVJH
QkEociwgZywgYiwgMHhGRik7Cit9CisKK2NvbnN0ZXhwciBSR0JBMzIgbWFrZVJHQkEoaW50IHIs
IGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGEsIDB4RkYpKSA8PCAyNCB8IHN0ZDo6bWF4KDAsIHN0
ZDo6bWluKHIsIDB4RkYpKSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDB4RkYpKSA8
PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMHhGRikpKSB9OworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgewordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8V2ViQ29yZTo6Q29sb3I+OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJD
b3JlOjpDb2xvcj47Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3Iu
aAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMzcgKzI1LDE0IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkV4dGVuZGVkQ29s
b3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4K
ICNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CisjaW5jbHVkZSA8
dHVwbGU+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0
aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0xD
aGFyLmg+Ci0KLSNpZiBVU0UoQ0cpCi10eXBlZGVmIHN0cnVjdCBDR0NvbG9yKiBDR0NvbG9yUmVm
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi1zdHJ1Y3QgX0QzRENPTE9SVkFMVUU7Ci10
eXBlZGVmIF9EM0RDT0xPUlZBTFVFIEQzRENPTE9SVkFMVUU7Ci10eXBlZGVmIEQzRENPTE9SVkFM
VUUgRDJEX0NPTE9SX0Y7Ci10eXBlZGVmIEQyRF9DT0xPUl9GIEQyRDFfQ09MT1JfRjsKLXN0cnVj
dCBEMkRfVkVDVE9SXzRGOwotdHlwZWRlZiBEMkRfVkVDVE9SXzRGIEQyRDFfVkVDVE9SXzRGOwot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi10eXBlZGVmIHN0cnVjdCBfR2RrUkdCQSBHZGtS
R0JBOwotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZsb2F0Q29tcG9u
ZW50czsKLQogLy8gQ29sb3IgdmFsdWUgd2l0aCA4LWJpdCBjb21wb25lbnRzIGZvciByZWQsIGdy
ZWVuLCBibHVlLCBhbmQgYWxwaGEuCiAvLyBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBzdG9yZWQg
YXMgYSAzMi1iaXQgaW50ZWdlciwgd2l0aCBhbHBoYSBpbiB0aGUgaGlnaCBiaXRzOiBBUkdCLgog
Y2xhc3MgU2ltcGxlQ29sb3IgewpAQCAtNjksNiArNDYsOCBAQCBwdWJsaWM6CiAgICAgY29uc3Rl
eHByIHVpbnQ4X3QgYmx1ZUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAg
ICBjb25zdGV4cHIgdWludDhfdCBhbHBoYUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWUgPj4gMjQ7IH0KIAorICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNvbXBvbmVudEFzRmxvYXQo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGFDb21wb25lbnQoKSkgLyAw
eEZGOyB9CisKICAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGFs
cGhhQ29tcG9uZW50KCkgPT0gMHhGRjsgfQogICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCk7IH0KIApAQCAtNzYsNiArNTUsMjIgQEAg
cHVibGljOgogICAgIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKCkgY29uc3Q7CiAgICAgU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3Q7CiAKKyAgICBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgY29sb3JXaXRoQWxwaGEodWludDhfdCBhbHBoYSkgY29uc3QgeyBy
ZXR1cm4geyAobV92YWx1ZSAmIDB4MDBGRkZGRkYpIHwgYWxwaGEgPDwgMjQgfTsgfQorCisgICAg
dGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KKyAgICBjb25zdGV4cHIgdWludDhfdCBnZXQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChOIDwgNCk7CisgICAgICAgIGlmIGNvbnN0
ZXhwciAoIU4pCisgICAgICAgICAgICByZXR1cm4gcmVkQ29tcG9uZW50KCk7CisgICAgICAgIGVs
c2UgaWYgY29uc3RleHByIChOID09IDEpCisgICAgICAgICAgICByZXR1cm4gZ3JlZW5Db21wb25l
bnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMikKKyAgICAgICAgICAgIHJl
dHVybiBibHVlQ29tcG9uZW50KCk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChOID09IDMp
CisgICAgICAgICAgICByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsKKyAgICB9CisKIHByaXZhdGU6
CiAgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKIH07CkBAIC0xMDEsMjQ0ICs5NiwxMSBAQCBS
R0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgCiB1aW50OF90IHJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwoaW50KTsKIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5l
bChmbG9hdCk7CiAKLWNsYXNzIENvbG9yIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBDb2xvcigpIHsgfQotCi0gICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgdGhl
c2UgY29uc3RydWN0b3JzIGFuZCBjcmVhdGlvbiBmdW5jdGlvbnMgYW5kIHJlcGxhY2UgdGhlIG9u
ZXMgdGhhdCBhcmUgc3RpbGwgbmVlZGVkIHdpdGggZnJlZSBmdW5jdGlvbnMuCi0KLSAgICBDb2xv
cihSR0JBMzIgY29sb3IsIGJvb2wgdmFsaWQgPSB0cnVlKQotICAgIHsKLSAgICAgICAgaWYgKHZh
bGlkKQotICAgICAgICAgICAgc2V0UkdCKGNvbG9yKTsKLSAgICB9Ci0KLSAgICBlbnVtIFNlbWFu
dGljVGFnIHsgU2VtYW50aWMgfTsKLSAgICBDb2xvcihSR0JBMzIgY29sb3IsIFNlbWFudGljVGFn
KQotICAgIHsKLSAgICAgICAgc2V0UkdCKGNvbG9yKTsKLSAgICAgICAgc2V0SXNTZW1hbnRpYygp
OwotICAgIH0KLQotICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpCi0gICAgewotICAgICAg
ICBzZXRSR0IociwgZywgYik7Ci0gICAgfQotCi0gICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQg
YiwgaW50IGEpCi0gICAgewotICAgICAgICBzZXRSR0IobWFrZVJHQkEociwgZywgYiwgYSkpOwot
ICAgIH0KLQotICAgIENvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCi0g
ICAgewotICAgICAgICBzZXRSR0IobWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywgYiwgYSkpOwot
ICAgIH0KLQotICAgIC8vIENyZWF0ZXMgYSBuZXcgY29sb3IgZnJvbSB0aGUgc3BlY2lmaWMgQ01Z
SyBhbmQgYWxwaGEgdmFsdWVzLgotICAgIENvbG9yKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHks
IGZsb2F0IGssIGZsb2F0IGEpCi0gICAgewotICAgICAgICBzZXRSR0IobWFrZVJHQkFGcm9tQ01Z
S0EoYywgbSwgeSwgaywgYSkpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0
IENvbG9yKGNvbnN0IFN0cmluZyYpOwotICAgIGV4cGxpY2l0IENvbG9yKGNvbnN0IGNoYXIqKTsK
LQotICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAg
ICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAmIGludmFsaWRSR0JB
Q29sb3IsICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4g
RXh0ZW5kZWRDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoZGVsZXRlZEhhc2hWYWx1
ZSAmIHZhbGlkUkdCQUNvbG9yQml0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qg
bm90IGxvb2sgbGlrZSBhIHZhbGlkIFJHQkEzMiBDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KGRlbGV0ZWRIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZh
bHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gUkdCQTMyIENvbG9yIHdvdWxkbid0
IGhhdmUiKTsKLSAgICAgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gZGVsZXRlZEhhc2hW
YWx1ZTsKLSAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwotICAgIH0KLQotICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
Y29sb3JEYXRhLnJnYmFBbmRGbGFncyA9PSBkZWxldGVkSGFzaFZhbHVlOwotICAgIH0KLQotICAg
IGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpCi0gICAgewotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgaW52YWxpZFJHQkFDb2xvciwgIkNv
bG9yJ3MgZW1wdHkgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xv
ciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgKDEgPDwgNCksICJD
b2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFu
IFJHQkEzMiBDb2xvciB3b3VsZG4ndCBoYXZlIik7Ci0gICAgICAgIG1fY29sb3JEYXRhLnJnYmFB
bmRGbGFncyA9IGVtcHR5SGFzaFZhbHVlOwotICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7
Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjcmVhdGVzIGFuIEV4dGVuZGVkQ29sb3IuCi0gICAgLy8g
RklYTUU6IElmIHRoZSBjb2xvclNwYWNlIGlzIHNSR0IgYW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBi
ZQotICAgIC8vIGNvbnZlcnRlZCBleGFjdGx5IHRvIGludGVnZXJzLCB3ZSBzaG91bGQgbWFrZSBh
IG5vcm1hbCBDb2xvci4KLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihmbG9hdCwgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgQ29sb3JTcGFjZSk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihjb25z
dCBDb2xvciYpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENvbG9yJiYpOwotCi0gICAgfkNv
bG9yKCkKLSAgICB7Ci0gICAgICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgICAgICBtX2Nv
bG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigpOwotICAgIH0KLQotICAgIC8vIFJldHVybnMg
dGhlIGNvbG9yIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIEhUTUw1Ci0gICAgLy8gPGh0dHBzOi8v
aHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI2ZpbGwtYW5kLXN0
cm9rZS1zdHlsZXM+ICgxMCBTZXB0ZW1iZXIgMjAxNSkKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgc2VyaWFsaXplZCgpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGNzc1Rl
eHQoKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMgdGhlIGNvbG9yIHNlcmlhbGl6ZWQgYXMgZWl0
aGVyICNSUkdHQkIgb3IgI1JSR0dCQkFBCi0gICAgU3RyaW5nIG5hbWVGb3JSZW5kZXJUcmVlQXNU
ZXh0KCkgY29uc3Q7Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVu
ZGVkKCkgfHwgKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIHZhbGlkUkdCQUNvbG9yQml0KTsg
fQotCi0gICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFz
RXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IHJnYigpLmlzT3BhcXVlKCk7IH0KLSAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5h
bHBoYSgpID4gMC4wIDogcmdiKCkuaXNWaXNpYmxlKCk7IH0KLQotICAgIGludCByZWQoKSBjb25z
dCB7IHJldHVybiByZ2IoKS5yZWRDb21wb25lbnQoKTsgfQotICAgIGludCBncmVlbigpIGNvbnN0
IHsgcmV0dXJuIHJnYigpLmdyZWVuQ29tcG9uZW50KCk7IH0KLSAgICBpbnQgYmx1ZSgpIGNvbnN0
IHsgcmV0dXJuIHJnYigpLmJsdWVDb21wb25lbnQoKTsgfQotICAgIGludCBhbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIHJnYigpLmFscGhhQ29tcG9uZW50KCk7IH0KLQotICAgIGZsb2F0IGFscGhhQXNG
bG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgp
IDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJnYigpLmFscGhhQ29tcG9uZW50KCkpIC8gMHhGRjsgfQot
Ci0gICAgUkdCQTMyIHJnYigpIGNvbnN0OwotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Owot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50
cz4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKLQotICAgIC8vIFRoaXMgd2lsbCBj
b252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KLSAgICBXRUJDT1JF
X0VYUE9SVCBTaW1wbGVDb2xvciB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0OwotCi0g
ICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBz
UkdCLgotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0Q29tcG9uZW50cyB0b1NSR0JBQ29tcG9uZW50
c0xvc3N5KCkgY29uc3Q7Ci0KLSAgICBDb2xvciBsaWdodCgpIGNvbnN0OwotICAgIENvbG9yIGRh
cmsoKSBjb25zdDsKLQotICAgIGJvb2wgaXNEYXJrKCkgY29uc3Q7Ci0gICAgCi0gICAgV0VCQ09S
RV9FWFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIGlzIGFuIGlt
cGxlbWVudGF0aW9uIG9mIFBvcnRlci1EdWZmJ3MgInNvdXJjZS1vdmVyIiBlcXVhdGlvbgotICAg
IENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJikgY29uc3Q7Ci0gICAgQ29sb3IgYmxlbmRXaXRoV2hp
dGUoKSBjb25zdDsKLQotICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0
KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7Ci0KLSAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZvciBBbHRlcm5hdGl2ZVJvdW5kaW5nIHZhcmlhbnRz
IGJ5IHNldHRsaW5nIG9uIGEgcm91bmRpbmcgYmVoYXZpb3IuCi0gICAgQ29sb3IgY29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+
KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhmbG9hdCkgY29uc3Q7Ci0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFVc2lu
Z0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+KSBjb25zdDsKLSAgICBXRUJDT1JF
X0VYUE9SVCBDb2xvciBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9h
dCkgY29uc3Q7Ci0KLSAgICBDb2xvciBvcGFxdWVDb2xvcigpIGNvbnN0IHsgcmV0dXJuIGNvbG9y
V2l0aEFscGhhKDEuMGYpOyB9Ci0KLSAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVk
IGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KLSAgICBib29sIGlzU2VtYW50aWMoKSBj
b25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3Mg
JiBpc1NlbWFudGljUkJHQUNvbG9yQml0KTsgfQotCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIENv
bG9yKGNvbnN0IEdka1JHQkEmKTsKLSAgICBvcGVyYXRvciBHZGtSR0JBKCkgY29uc3Q7Ci0jZW5k
aWYKLQotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmLCBTZW1hbnRpY1RhZyk7Ci0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihEMkQxX0NP
TE9SX0YpOwotICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0
OwotICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3Q7Ci0j
ZW5kaWYKLQotICAgIHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nJiwgUkdC
QTMyJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmdWaWV3Jiwg
UkdCQTMyJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBMQ2hhciosIHVu
c2lnbmVkLCBSR0JBMzImKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFVD
aGFyKiwgdW5zaWduZWQsIFJHQkEzMiYpOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVD
b2xvciBibGFjayB7IDB4RkYwMDAwMDAgfTsKLSAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNv
bG9yIHdoaXRlIHsgMHhGRkZGRkZGRiB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29s
b3IgZGFya0dyYXkgeyAweEZGODA4MDgwIH07Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVD
b2xvciBncmF5IHsgMHhGRkEwQTBBMCB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29s
b3IgbGlnaHRHcmF5IHsgMHhGRkMwQzBDMCB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxl
Q29sb3IgdHJhbnNwYXJlbnQgeyAweDAwMDAwMDAwIH07Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBT
aW1wbGVDb2xvciBjeWFuIHsgMHhGRjAwRkZGRiB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2lt
cGxlQ29sb3IgeWVsbG93IHsgMHhGRkZGRkYwMCB9OwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGNvbXBvc2l0aW9uRmlsbCB7IDB4
M0NBRkMwRTMgfTsKLSNlbHNlCi0gICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb21w
b3NpdGlvbkZpbGwgeyAweEZGRTFERDU1IH07Ci0jZW5kaWYKLQotICAgIGJvb2wgaXNFeHRlbmRl
ZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gIShtX2NvbG9yRGF0YS5yZ2JhQW5kRmxh
Z3MgJiBpbnZhbGlkUkdCQUNvbG9yKTsKLSAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
RXh0ZW5kZWRDb2xvciYgYXNFeHRlbmRlZCgpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQg
Q29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
JiBvcGVyYXRvcj0oQ29sb3ImJik7Ci0KLSAgICAvLyBFeHRlbmRlZCBhbmQgbm9uLWV4dGVuZGVk
IGNvbG9ycyB3aWxsIGFsd2F5cyBiZSBub24tZXF1YWwuCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwotICAgIGZyaWVuZCBib29sIGVx
dWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7
Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBzdGF0
aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKLQotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVyJik7Ci0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBzZXRSR0IoaW50IHIsIGludCBnLCBpbnQgYikgeyBzZXRSR0IobWFr
ZVJHQihyLCBnLCBiKSk7IH0KLSAgICB2b2lkIHNldFJHQihSR0JBMzIpOwotICAgIHZvaWQgc2V0
SXNTZW1hbnRpYygpIHsgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzIHw9IGlzU2VtYW50aWNSQkdB
Q29sb3JCaXQ7IH0KLQotICAgIC8vIDB4X19fX19fXzAwIGlzIGFuIEV4dGVuZGVkQ29sb3IgcG9p
bnRlci4KLSAgICAvLyAweF9fX19fX18wMSBpcyBhbiBpbnZhbGlkIFJHQkEzMi4KLSAgICAvLyAw
eF9fX19fX18xMSBpcyBhIHZhbGlkIFJHQkEzMi4KLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qg
ZXh0ZW5kZWRDb2xvciA9IDB4MDsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaW52YWxpZFJH
QkFDb2xvciA9IDB4MTsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRSR0JBQ29sb3JC
aXQgPSAweDI7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHZhbGlkUkdCQUNvbG9yID0gMHgz
OwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpc1NlbWFudGljUkJHQUNvbG9yQml0ID0gMHg0
OwotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlbGV0ZWRIYXNoVmFsdWUgPSAweEZGRkZG
RkZGRkZGRkZGRkQ7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGVtcHR5SGFzaFZhbHVlID0g
MHhGRkZGRkZGRkZGRkZGRkZCOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0YWdBc1ZhbGlk
KCk7Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIHVpbnQ2NF90IHJnYmFBbmRGbGFncyB7IGludmFs
aWRSR0JBQ29sb3IgfTsKLSAgICAgICAgRXh0ZW5kZWRDb2xvciogZXh0ZW5kZWRDb2xvcjsKLSAg
ICB9IG1fY29sb3JEYXRhOwotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiwgY29u
c3QgQ29sb3ImKTsKLWJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7
Ci0KLS8vIE9uZSBvciBib3RoIG11c3QgYmUgZXh0ZW5kZWQgY29sb3JzLgotV0VCQ09SRV9FWFBP
UlQgYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsK
LQotQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91Ymxl
IHByb2dyZXNzKTsKLUNvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBm
cm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7Ci0KLWludCBkaWZmZXJlbmNl
U3F1YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Ci0KIHVpbnQxNl90IGZhc3RNdWx0
aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKTsKIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50
MTZfdCk7CiAKLSNpZiBVU0UoQ0cpCi1XRUJDT1JFX0VYUE9SVCBDR0NvbG9yUmVmIGNhY2hlZENH
Q29sb3IoY29uc3QgQ29sb3ImKTsKLSNlbmRpZgordWludDhfdCBjb2xvckZsb2F0VG9SR0JBQnl0
ZShmbG9hdCBmKTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENvbG9yJik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQ29sb3JTcGFjZSk7CiAKIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3IgYSwgU2ltcGxlQ29sb3IgYikKIHsKQEAg
LTM1MCwzNCArMTEyLDYgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBT
aQogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQotewotICAgIGlmIChhLmlzRXh0ZW5kZWQoKSB8
fCBiLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGV4dGVuZGVkQ29sb3JzRXF1YWwoYSwg
Yik7Ci0KLSAgICByZXR1cm4gYS5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPT0gYi5tX2NvbG9y
RGF0YS5yZ2JhQW5kRmxhZ3M7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29s
b3ImIGEsIGNvbnN0IENvbG9yJiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KLWlu
bGluZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25z
dCBDb2xvciYgYikKLXsKLSAgICBpZiAoYS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkp
Ci0gICAgICAgIHJldHVybiBleHRlbmRlZENvbG9yc0VxdWFsKGEsIGIpOwotICAgIHJldHVybiAo
YS5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNSQkdBQ29sb3JC
aXQpID09IChiLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1JC
R0FDb2xvckJpdCk7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5oYXNo
KCk7Ci0KLSAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyk7
Ci19Ci0KIGlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVl
KQogewogICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbigyNTUsIHZhbHVlKSk7CkBAIC00
MDIsMTE2ICsxMzYsMTEgQEAgaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZf
dAogICAgIHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRlciA+PiA4KTsKIH0KIAotaW5s
aW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRp
dmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFs
cGhhID8gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmco
YWxwaGEudmFsdWUoKSkgOiAqdGhpczsKLX0KLQotaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldp
dGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGFscGhhID8gY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZl
Um91bmRpbmcoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKLX0KLQotaW5saW5lIFJHQkEzMiBDb2xv
cjo6cmdiKCkgY29uc3QKK2lubGluZSB1aW50OF90IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0
IGYpCiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQoKSkgaGVy
ZSwgb3IgcHJvZHVjZQotICAgIC8vIGFuIFJHQkEzMiBlcXVpdmFsZW50IGZvciBhbiBFeHRlbmRl
ZENvbG9yLiBJZGVhbGx5IHRoZSBmb3JtZXIsCi0gICAgLy8gc28gd2UgY2FuIGF1ZGl0IGFsbCB0
aGUgcmdiKCkgY2FsbCBzaXRlcyB0byBoYW5kbGUgZXh0ZW5kZWQuCi0gICAgcmV0dXJuIHsgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA+PiAzMikgfTsKLX0K
LQotaW5saW5lIHZvaWQgQ29sb3I6OnNldFJHQihSR0JBMzIgcmdiKQotewotICAgIG1fY29sb3JE
YXRhLnJnYmFBbmRGbGFncyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZ2IudmFsdWUoKSkgPDwg
MzI7Ci0gICAgdGFnQXNWYWxpZCgpOwotfQotCi1pbmxpbmUgYm9vbCBDb2xvcjo6aXNCbGFja0Nv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKSB7
Ci0gICAgICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGV4dGVuZGVkQ29sb3IgPSBjb2xvci5hc0V4
dGVuZGVkKCk7Ci0gICAgICAgIHJldHVybiAhZXh0ZW5kZWRDb2xvci5yZWQoKSAmJiAhZXh0ZW5k
ZWRDb2xvci5ncmVlbigpICYmICFleHRlbmRlZENvbG9yLmJsdWUoKSAmJiBleHRlbmRlZENvbG9y
LmFscGhhKCkgPT0gMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29sb3IucmdiKCkgPT0gQ29sb3I6
OmJsYWNrOwotfQotCi1pbmxpbmUgYm9vbCBDb2xvcjo6aXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikKLXsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGNvbnN0
IEV4dGVuZGVkQ29sb3ImIGV4dGVuZGVkQ29sb3IgPSBjb2xvci5hc0V4dGVuZGVkKCk7Ci0gICAg
ICAgIHJldHVybiBleHRlbmRlZENvbG9yLnJlZCgpID09IDEgJiYgZXh0ZW5kZWRDb2xvci5ncmVl
bigpID09IDEgJiYgZXh0ZW5kZWRDb2xvci5ibHVlKCkgPT0gMSAmJiBleHRlbmRlZENvbG9yLmFs
cGhhKCkgPT0gMTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbG9yLnJnYigpID09IENvbG9y
Ojp3aGl0ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ29sb3I6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGlmIChpc0V4dGVuZGVkKCkpIHsKLSAg
ICAgICAgZW5jb2RlciA8PCB0cnVlOwotICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5y
ZWQoKTsKLSAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuZ3JlZW4oKTsKLSAgICAgICAg
ZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuYmx1ZSgpOwotICAgICAgICBlbmNvZGVyIDw8IGFzRXh0
ZW5kZWQoKS5hbHBoYSgpOwotICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5jb2xvclNw
YWNlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbmNvZGVyIDw8IGZhbHNlOwot
Ci0gICAgaWYgKCFpc1ZhbGlkKCkpIHsKLSAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBlbmNvZGUgd2hl
dGhlciB0aGUgY29sb3IgaXMgc2VtYW50aWMuCi0KLSAgICB1aW50MzJfdCB2YWx1ZSA9IHJnYigp
LnZhbHVlKCk7Ci0KLSAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAgZW5jb2RlciA8PCB2YWx1ZTsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgYm9vbCBpc0V4dGVuZGVkOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaXNFeHRlbmRlZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICBpZiAoaXNFeHRlbmRlZCkgewotICAgICAgICBmbG9hdCByZWQ7Ci0gICAgICAgIGZs
b2F0IGdyZWVuOwotICAgICAgICBmbG9hdCBibHVlOwotICAgICAgICBmbG9hdCBhbHBoYTsKLSAg
ICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlZCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGdyZWVuKSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYmx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhhKSkKLSAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29s
b3JTcGFjZSkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1
cm4gQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIGNvbG9yU3BhY2UpOwotICAgIH0KLQot
ICAgIGJvb2wgaXNWYWxpZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWQpKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKLQotICAgIHVpbnQzMl90IHZhbHVlOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodmFsdWUpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IENvbG9yIHsgU2ltcGxlQ29sb3IgeyB2YWx1ZSB9IH07CisgICAgLy8gRklYTUU6IENvbnNvbGlk
YXRlIHdpdGggY2xhbXBlZENvbG9yQ29tcG9uZW50KCkuCisgICAgLy8gV2UgdXNlIGxyb3VuZGYg
YW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5k
aW5nCisgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4obHJv
dW5kZigyNTUuMGYgKiBmKSksIDI1NSkpOwogfQogCiBjb25zdGV4cHIgUkdCQTMyIG1ha2VSR0Io
aW50IHIsIGludCBnLCBpbnQgYikKQEAgLTUyNiw3ICsxNTUsMTYgQEAgY29uc3RleHByIFJHQkEz
MiBtYWtlUkdCQShpbnQgciwgaW50IGcsIAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLW5h
bWVzcGFjZSBXVEYgewotdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29s
b3I+OwotdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpDb2xvcj47CituYW1l
c3BhY2Ugc3RkIHsKKwordGVtcGxhdGU8PgorY2xhc3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpTaW1w
bGVDb2xvcj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgND4g
eworfTsKKwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8Tiwg
V2ViQ29yZTo6U2ltcGxlQ29sb3I+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBlID0gdWludDhf
dDsKK307CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400170</attachid>
            <date>2020-05-24 11:09:53 -0700</date>
            <delta_ts>2020-05-24 11:13:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>95259</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAyMC0wNS0yNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogTW92ZSBTaW1wbGVDb2xvciBpbnRvIGl0cyBvd24gZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjMwOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgU2ltcGxlQ29sb3IgaW50byBpdHMg
b3duIGZpbGVzLiBJdCdzIGFib3V0IHRpbWUuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpt
YWtlVW5QcmVtdWx0aXBsaWVkUkdCQSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2xv
ckZsb2F0VG9SR0JBQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUkdCQTMy
RnJvbUZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUkdCQUZyb21IU0xB
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSR0JBRnJvbUNNWUtBKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9ySFRNTCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWNpbWFsRGlnaXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6ZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlv
bkZvckNTUyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzI6OnNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6
OlNpbXBsZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjp2
YWx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cmVk
Q29tcG9uZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9y
OjpncmVlbkNvbXBvbmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVDb2xvcjo6Ymx1ZUNvbXBvbmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhhQ29tcG9uZW50QXNGbG9hdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6aXNPcGFxdWUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmlzVmlzaWJsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmdldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZhc3RNdWx0aXBseUJ5MjU1KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmZhc3REaXZpZGVCeTI1NSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjptYWtlUkdCKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSR0JBKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6IENv
cGllZCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCBjb25zdCk6Cisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGbG9hdFRvUkdCQUJ5
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIZXhDb2xvckludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpwYXJzZUhleENvbG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmRpZmZlcmVuY2VTcXVhcmVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmZpbmROYW1lZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0
b3I9KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXJpYWxpemVkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjc3NUZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVG
b3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpsaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFy
ayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNEYXJrIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodG5lc3MgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRDb21wb25lbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBU2ltcGxl
Q29sb3JMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9T
UkdCQUNvbXBvbmVudHNMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpl
eHRlbmRlZENvbG9yc0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdBc1ZhbGlkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0V4dGVuZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmg6IENvcGllZCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmguCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnRBc0Zsb2F0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpjb2xvcldpdGhBbHBoYSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Z2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yRmxvYXRUb1JHQkFCeXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
On5Db2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNWYWxpZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNPcGFxdWUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6cmVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpncmVlbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6Ymx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6YWxwaGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
QXNGbG9hdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BhcXVl
Q29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzU2VtYW50
aWMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzRXh0ZW5kZWQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldFJHQik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0SXNTZW1hbnRpYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjplcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZl
Um91bmRpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9y
V2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpyZ2IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OmlzQmxhY2tDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6aXNXaGl0ZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6IERl
bGV0ZWQuCisKIDIwMjAtMDUtMjQgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTEZDXVtURkNdIElnbm9yZSBzZWN0aW9uIGJvcmRlcnMgZXZlbiB3aGVuIGJvcmRl
ciBjb2xsYXBzZSBpcyBvZmYuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2MjEw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEx
ODQsNiArMTE4NCw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVuZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3Qu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9TdHJpbmdUcnVuY2F0b3IuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RhYlNpemUuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaApJbmRleDogU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlz
aW9uIDI2MjEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xOTM3LDYgKzE5MzcsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1Jv
dW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNh
dG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9y
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MjEw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjI0MSw2ICsyMjQxLDcgQEAKIAkJN0MyRkE2MTIxRUE5NUEzQzAw
QTAzMTA4IC8qIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MyRkE2MTAxRUE5NUEzMjAwQTAzMTA4IC8q
IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMzBEOTg0MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fi
b3J0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MzMEQ5ODAxRjgxNUFDMTAwMjY4MzU2IC8qIEpTQWJvcnRDb250cm9sbGVyLmggKi87
IH07CiAJCTdDMzBEOTg2MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzMwRDk4MTFGODE1QUMx
MDAyNjgzNTYgLyogSlNBYm9ydFNpZ25hbC5oICovOyB9OworCQk3QzMxQzg4RTI0N0FENTk1MDA1
QkYzMTkgLyogU2ltcGxlQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDMzFDODhDMjQ3QUQ1OTUwMDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMzMwQTAy
MURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzMwQTAxMURGOEZBQzYw
MEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzMzMEEwODFERjlGOTUxMDBEMzM5
NUMgLyogSlNQb3NpdGlvbk9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMzMwQTA2MURGOUY5NTEwMEQzMzk1QyAvKiBKU1Bvc2l0aW9uT3B0
aW9ucy5oICovOyB9OwogCQk3QzNBOTFFNjFDOTYzQjg4MDBEMUE3RTMgLyogQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzNBOTFFNTFDOTYzQjg4MDBEMUE3RTMgLyogQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk5NzQsNiAr
OTk3NSw4IEBACiAJCTdDMzBEOTgwMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fib3J0Q29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMwRDk4MTFGODE1QUMxMDAyNjgzNTYg
LyogSlNBYm9ydFNpZ25hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fi
b3J0U2lnbmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzBEOTgyMUY4MTVB
QzIwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQWJvcnRTaWduYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3QzMxQzg4QTI0N0FENTk0MDA1QkYzMTkgLyogU2ltcGxlQ29sb3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlQ29sb3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3QzMxQzg4QzI0N0FENTk1MDA1QkYzMTkgLyogU2ltcGxlQ29s
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlQ29sb3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0MzMzBBMDMxREY5RTk1QjAwRDMzOTVDIC8qIFBvc2l0aW9uT3B0aW9ucy5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gUG9zaXRpb25PcHRpb25zLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MzMzBBMDUxREY5Rjk1MTAwRDMzOTVDIC8qIEpTUG9zaXRpb25PcHRpb25zLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUG9zaXRpb25PcHRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NTk0LDYgKzI1NTk3LDggQEAKIAkJCQlBNzNG
OTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuaCAqLywKIAkJCQkwRjNERDQ0RDEy
RjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUEx
QjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKKwkJCQk3QzMxQzg4QTI0N0FENTk0MDA1QkYz
MTkgLyogU2ltcGxlQ29sb3IuY3BwICovLAorCQkJCTdDMzFDODhDMjQ3QUQ1OTUwMDVCRjMxOSAv
KiBTaW1wbGVDb2xvci5oICovLAogCQkJCUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3Vy
Y2VCdWZmZXJQcml2YXRlLmggKi8sCiAJCQkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNv
dXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCAqLywKIAkJCQk3QzgzREU4NTFEMDRDQkQ0MDBGRUJD
RjMgLyogU3ByaW5nU29sdmVyLmggKi8sCkBAIC0zMzUzNyw2ICszMzU0Miw3IEBACiAJCQkJQ0Qz
MzZGNjQxN0ZBMEE0RDAwREREQ0QwIC8qIFZpZGVvVHJhY2tQcml2YXRlQVZGLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDRDMzNkY2ODE3RkEwQUM2MDBERERDRDAgLyogVmlkZW9UcmFja1ByaXZhdGVB
VkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDhCNUE0MzE4MEQxNDlBMDA4QjhFNjUgLyog
VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTdDMzFDODhFMjQ3QUQ1OTUwMDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDcwRTgxRDExQkYyNzY1NjAwMUZEQTQ4IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFT
dHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUNFRjQxOENGMTE3OTY3OEMwMDlEMTEyQyAvKiBW
aWV3cG9ydEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGOUE4MzkxOEEwNDZBQzAw
QUVCODhBIC8qIFZpZXdwb3J0Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIx
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcxICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBj
b25zdGV4cHIgU2ltcGxlQ29sb3IgbGlnaHRlbmVkQmxhY2sgeyAweEZGNTQ1NDU0IH07CiBzdGF0
aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGRhcmtlbmVkV2hpdGUgeyAweEZGQUJBQkFCIH07CiAK
LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywg
dW5zaWduZWQgYSwgYm9vbCBjZWlsaW5nID0gdHJ1ZSkKLXsKLSAgICByZXR1cm4gZmFzdERpdmlk
ZUJ5MjU1KGNlaWxpbmcgPyBjICogYSArIDI1NCA6IGMgKiBhKTsKLX0KLQotc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEp
Ci17Ci0gICAgcmV0dXJuIChmYXN0TXVsdGlwbHlCeTI1NShjKSArIGEgLSAxKSAvIGE7Ci19Ci0K
LVJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEs
IGJvb2wgY2VpbGluZykKLXsKLSAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVsdGlwbGllZENoYW5u
ZWwociwgYSwgY2VpbGluZyksIHByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEsIGNlaWxpbmcpLCBw
cmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBhLCBjZWlsaW5nKSwgYSk7Ci19Ci0KLVJHQkEzMiBtYWtl
UHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyIHBpeGVsQ29sb3IpCi17Ci0gICAgaWYgKHBpeGVsQ29s
b3IuaXNPcGFxdWUoKSkKLSAgICAgICAgcmV0dXJuIHBpeGVsQ29sb3I7Ci0gICAgcmV0dXJuIG1h
a2VQcmVtdWx0aXBsaWVkUkdCQShwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9y
LmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9y
LmFscGhhQ29tcG9uZW50KCkpOwotfQotCi1SR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEo
aW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCi17Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHVucHJl
bXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSksIHVu
cHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOwotfQotCi1SR0JBMzIgbWFrZVVuUHJlbXVs
dGlwbGllZFJHQkEoUkdCQTMyIHBpeGVsQ29sb3IpCi17Ci0gICAgaWYgKHBpeGVsQ29sb3IuaXNW
aXNpYmxlKCkgJiYgIXBpeGVsQ29sb3IuaXNPcGFxdWUoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VV
blByZW11bHRpcGxpZWRSR0JBKHBpeGVsQ29sb3IucmVkQ29tcG9uZW50KCksIHBpeGVsQ29sb3Iu
Z3JlZW5Db21wb25lbnQoKSwgcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCksIHBpeGVsQ29sb3Iu
YWxwaGFDb21wb25lbnQoKSk7Ci0gICAgcmV0dXJuIHBpeGVsQ29sb3I7Ci19Ci0KLXN0YXRpYyBp
bnQgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKLXsKLSAgICAvLyBXZSB1c2UgbHJvdW5k
ZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91
bmRpbmcKLSAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50Pihs
cm91bmRmKDI1NS4wZiAqIGYpKSwgMjU1KSk7Ci19Ci0KLVJHQkEzMiBtYWtlUkdCQTMyRnJvbUZs
b2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotewotICAgIHJldHVybiBt
YWtlUkdCQShjb2xvckZsb2F0VG9SR0JBQnl0ZShyKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZyks
IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGIpLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShhKSk7Ci19Ci0K
LVJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGZsb2F0IGh1ZSwgZmxvYXQgc2F0dXJhdGlvbiwgZmxv
YXQgbGlnaHRuZXNzLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3Rv
ciA9IDI1NS4wOwotICAgIEZsb2F0Q29tcG9uZW50cyBmbG9hdFJlc3VsdCA9IGhzbFRvU1JHQih7
IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KTsKLSAgICByZXR1cm4gbWFrZVJH
QkEoCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMF0gKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMV0gKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMl0gKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbM10gKiBzY2FsZUZhY3Rv
cikpOwotfQotCi1SR0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxv
YXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKLXsKLSAgICBkb3VibGUgY29sb3JzID0gMSAtIGs7Ci0g
ICAgaW50IHIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAq
ICgxIC0gYykpKTsKLSAgICBpbnQgZyA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1Niwg
MCkgKiAoY29sb3JzICogKDEgLSBtKSkpOwotICAgIGludCBiID0gc3RhdGljX2Nhc3Q8aW50Pihu
ZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIHkpKSk7Ci0gICAgcmV0dXJuIG1ha2VS
R0JBKHIsIGcsIGIsIHN0YXRpY19jYXN0PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIGEpKTsK
LX0KLQogLy8gb3JpZ2luYWxseSBtb3ZlZCBoZXJlIGZyb20gdGhlIENTUyBwYXJzZXIKIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgogc3RhdGljIGlubGluZSBib29sIHBhcnNlSGV4
Q29sb3JJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgs
IFJHQkEzMiYgcmdiKQpAQCAtMjkyLDEzICsyMjcsNiBAQCBDb2xvciYgQ29sb3I6Om9wZXJhdG9y
PShDb2xvciYmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotU3RyaW5nIFNpbXBsZUNv
bG9yOjpzZXJpYWxpemF0aW9uRm9ySFRNTCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzT3BhcXVlKCkp
Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBvbmVudCgpLCAyLCBM
b3dlcmNhc2UpLCBoZXgoZ3JlZW5Db21wb25lbnQoKSwgMiwgTG93ZXJjYXNlKSwgaGV4KGJsdWVD
b21wb25lbnQoKSwgMiwgTG93ZXJjYXNlKSk7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JD
U1MoKTsKLX0KLQogU3RyaW5nIENvbG9yOjpzZXJpYWxpemVkKCkgY29uc3QKIHsKICAgICBpZiAo
aXNFeHRlbmRlZCgpKQpAQCAtMzA2LDM1ICsyMzQsNiBAQCBTdHJpbmcgQ29sb3I6OnNlcmlhbGl6
ZWQoKSBjb25zdAogICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0aW9uRm9ySFRNTCgpOwogfQog
Ci1zdGF0aWMgY2hhciBkZWNpbWFsRGlnaXQodW5zaWduZWQgbnVtYmVyKQotewotICAgIEFTU0VS
VChudW1iZXIgPCAxMCk7Ci0gICAgcmV0dXJuICcwJyArIG51bWJlcjsKLX0KLQotc3RhdGljIHN0
ZDo6YXJyYXk8Y2hhciwgND4gZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1ZSh1
aW50OF90IGFscGhhKQotewotICAgIEFTU0VSVChhbHBoYSA+IDApOwotICAgIEFTU0VSVChhbHBo
YSA8IDB4RkYpOwotICAgIGlmICgoKGFscGhhICogMTAwICsgMHg3RikgLyAweEZGICogMHhGRiAr
IDUwKSAvIDEwMCAhPSBhbHBoYSkKLSAgICAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoYWxw
aGEgKiAxMCAvIDB4RkYgJSAxMCksIGRlY2ltYWxEaWdpdChhbHBoYSAqIDEwMCAvIDB4RkYgJSAx
MCksIGRlY2ltYWxEaWdpdCgoYWxwaGEgKiAxMDAwICsgMHg3RikgLyAweEZGICUgMTApLCAnXDAn
IH0gfTsKLSAgICBpZiAoaW50IHRoaXJkRGlnaXQgPSAoYWxwaGEgKiAxMDAgKyAweDdGKSAvIDB4
RkYgJSAxMCkKLSAgICAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoYWxwaGEgKiAxMCAvIDB4
RkYpLCBkZWNpbWFsRGlnaXQodGhpcmREaWdpdCksICdcMCcsICdcMCcgfSB9OwotICAgIHJldHVy
biB7IHsgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwICsgMHg3RikgLyAweEZGKSwgJ1wwJywgJ1ww
JywgJ1wwJyB9IH07Ci19Ci0KLVN0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvckNT
UygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChhbHBoYUNvbXBvbmVudCgpKSB7Ci0gICAgY2FzZSAw
OgotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygicmdiYSgiLCByZWRDb21wb25lbnQoKSwgIiwg
IiwgZ3JlZW5Db21wb25lbnQoKSwgIiwgIiwgYmx1ZUNvbXBvbmVudCgpLCAiLCAwKSIpOwotICAg
IGNhc2UgMHhGRjoKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInJnYigiLCByZWRDb21wb25l
bnQoKSwgIiwgIiwgZ3JlZW5Db21wb25lbnQoKSwgIiwgIiwgYmx1ZUNvbXBvbmVudCgpLCAnKScp
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2JhKCIsIHJlZENv
bXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29tcG9uZW50KCks
ICIsIDAuIiwgZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1ZShhbHBoYUNvbXBv
bmVudCgpKS5kYXRhKCksICcpJyk7Ci0gICAgfQotfQotCiBTdHJpbmcgQ29sb3I6OmNzc1RleHQo
KSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCkBAIC0zNDIsMTMgKzI0MSw2IEBAIFN0
cmluZyBDb2xvcjo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRp
b25Gb3JDU1MoKTsKIH0KIAotU3RyaW5nIFJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQoKSBjb25zdAotewotICAgIGlmIChhbHBoYUNvbXBvbmVudCgpIDwgMHhGRikKLSAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkQ29tcG9uZW50KCksIDIpLCBoZXgo
Z3JlZW5Db21wb25lbnQoKSwgMiksIGhleChibHVlQ29tcG9uZW50KCksIDIpLCBoZXgoYWxwaGFD
b21wb25lbnQoKSwgMikpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBv
bmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVudCgp
LCAyKSk7Ci19Ci0KIFN0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25z
dAogewogICAgIC8vIEZJWE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29sb3JzLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjIxMDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRXh0
ZW5kZWRDb2xvci5oIgorI2luY2x1ZGUgIlNpbXBsZUNvbG9yLmgiCiAjaW5jbHVkZSA8YWxnb3Jp
dGhtPgogI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KQEAgLTU2
LDY5ICs1Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEZsb2F0Q29tcG9uZW50
czsKIAotLy8gQ29sb3IgdmFsdWUgd2l0aCA4LWJpdCBjb21wb25lbnRzIGZvciByZWQsIGdyZWVu
LCBibHVlLCBhbmQgYWxwaGEuCi0vLyBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBzdG9yZWQgYXMg
YSAzMi1iaXQgaW50ZWdlciwgd2l0aCBhbHBoYSBpbiB0aGUgaGlnaCBiaXRzOiBBUkdCLgotY2xh
c3MgU2ltcGxlQ29sb3IgewotcHVibGljOgotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvcih1aW50
MzJfdCB2YWx1ZSA9IDApIDogbV92YWx1ZSB7IHZhbHVlIH0geyB9Ci0KLSAgICBjb25zdGV4cHIg
dWludDMyX3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLSAgICBjb25zdGV4
cHIgdWludDhfdCByZWRDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDE2OyB9
Ci0gICAgY29uc3RleHByIHVpbnQ4X3QgZ3JlZW5Db21wb25lbnQoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlID4+IDg7IH0KLSAgICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9u
ZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA+PiAyNDsgfQotCi0gICAgY29uc3RleHByIGZs
b2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0PihhbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KLQotICAgIGNvbnN0ZXhwciBib29sIGlz
T3BhcXVlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9Ci0gICAg
Y29uc3RleHByIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQo
KTsgfQotCi0gICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29uc3Q7Ci0gICAgU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoKSBjb25zdDsKLSAgICBTdHJpbmcgc2VyaWFsaXphdGlv
bkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdDsKLQotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xv
ciBjb2xvcldpdGhBbHBoYSh1aW50OF90IGFscGhhKSBjb25zdCB7IHJldHVybiB7IChtX3ZhbHVl
ICYgMHgwMEZGRkZGRikgfCBhbHBoYSA8PCAyNCB9OyB9Ci0KLSAgICB0ZW1wbGF0ZTxzdGQ6OnNp
emVfdCBOPgotICAgIGNvbnN0ZXhwciB1aW50OF90IGdldCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KE4gPCA0KTsKLSAgICAgICAgaWYgY29uc3RleHByICghTikKLSAgICAg
ICAgICAgIHJldHVybiByZWRDb21wb25lbnQoKTsKLSAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIg
KE4gPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBncmVlbkNvbXBvbmVudCgpOwotICAgICAgICBl
bHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAyKQotICAgICAgICAgICAgcmV0dXJuIGJsdWVDb21wb25l
bnQoKTsKLSAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMykKLSAgICAgICAgICAgIHJl
dHVybiBhbHBoYUNvbXBvbmVudCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1aW50MzJfdCBt
X3ZhbHVlIHsgMCB9OwotfTsKLQotYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yLCBTaW1wbGVD
b2xvcik7Ci1ib29sIG9wZXJhdG9yIT0oU2ltcGxlQ29sb3IsIFNpbXBsZUNvbG9yKTsKLQotLy8g
RklYTUU6IFJlbW92ZSB0aGlzIGFmdGVyIG1pZ3JhdGluZyB0byB0aGUgbmV3IG5hbWUuCi11c2lu
ZyBSR0JBMzIgPSBTaW1wbGVDb2xvcjsKLQotY29uc3RleHByIFJHQkEzMiBtYWtlUkdCKGludCBy
LCBpbnQgZywgaW50IGIpOwotY29uc3RleHByIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSk7Ci0KLVJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEsIGJvb2wgY2VpbGluZyA9IHRydWUpOwotUkdCQTMyIG1ha2VQcmVt
dWx0aXBsaWVkUkdCQShSR0JBMzIpOwotUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGlu
dCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKLVJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdC
QShSR0JBMzIpOwotCi1XRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkEzMkZyb21GbG9hdHMo
ZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7Ci1XRUJDT1JFX0VYUE9SVCBSR0JB
MzIgbWFrZVJHQkFGcm9tSFNMQShmbG9hdCBoLCBmbG9hdCBzLCBmbG9hdCBsLCBmbG9hdCBhKTsK
LVJHQkEzMiBtYWtlUkdCQUZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9h
dCBrLCBmbG9hdCBhKTsKLQotdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGludCk7
Ci11aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZmxvYXQpOwotCiBjbGFzcyBDb2xv
ciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0zNTAsOSArMjg4
LDYgQEAgQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sbwogCiBpbnQgZGlm
ZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCi11aW50MTZfdCBm
YXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSk7Ci11aW50MTZfdCBmYXN0RGl2aWRlQnky
NTUodWludDE2X3QpOwotCiAjaWYgVVNFKENHKQogV0VCQ09SRV9FWFBPUlQgQ0dDb2xvclJlZiBj
YWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJik7CiAjZW5kaWYKQEAgLTM2MCwxNiArMjk1LDYgQEAg
V0VCQ09SRV9FWFBPUlQgQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKAogV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENvbG9y
Jik7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgQ29sb3JTcGFjZSk7CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29s
b3IgYSwgU2ltcGxlQ29sb3IgYikKLXsKLSAgICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFsdWUo
KTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xv
ciBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KIGlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQogewogICAgIGlmIChhLmlzRXh0ZW5k
ZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSkKQEAgLTM5OCwzMCArMzIzLDYgQEAgaW5saW5lIHVuc2ln
bmVkIENvbG9yOjpoYXNoKCkgY29uc3QKICAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JE
YXRhLnJnYmFBbmRGbGFncyk7CiB9CiAKLWlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwoaW50IHZhbHVlKQotewotICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbigy
NTUsIHZhbHVlKSk7Ci19Ci0KLWlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5u
ZWwoZmxvYXQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oMjU1
LmYsIHN0ZDo6cm91bmQodmFsdWUpKSk7Ci19Ci0KLWlubGluZSB1aW50MTZfdCBmYXN0TXVsdGlw
bHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gKHZhbHVlIDw8IDgpIC0gdmFs
dWU7Ci19Ci0KLWlubGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QgdmFsdWUp
Ci17Ci0gICAgLy8gV2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0aG0gZm9yIGRp
dmlzaW9uIGJ5IDI1NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2
LWJpdCB2YWx1ZXMuCi0gICAgLy8gRklYTUU6IFNpbmNlIHRoaXMgZ2l2ZXMgYWNjdXJhdGUgcmVz
dWx0cyBmb3IgMTYtYml0IHZhbHVlcywgd2Ugc2hvdWxkIGdldCB0aGlzIG9wdGltaXphdGlvbiBp
bnRvIGNvbXBpbGVycyBsaWtlIGNsYW5nLgotICAgIHVpbnQxNl90IGFwcHJveGltYXRpb24gPSB2
YWx1ZSA+PiA4OwotICAgIHVpbnQxNl90IHJlbWFpbmRlciA9IHZhbHVlIC0gKGFwcHJveGltYXRp
b24gKiAyNTUpICsgMTsKLSAgICByZXR1cm4gYXBwcm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4g
OCk7Ci19Ci0KIGlubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlV
c2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAogewog
ICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5h
dGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CkBAIC01MzQsMzMgKzQzNSw5IEBA
IE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAgICByZXR1cm4gQ29s
b3IgeyBTaW1wbGVDb2xvciB7IHZhbHVlIH0gfTsKIH0KIAotY29uc3RleHByIFJHQkEzMiBtYWtl
UkdCKGludCByLCBpbnQgZywgaW50IGIpCi17Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcsIGIs
IDB4RkYpOwotfQotCi1jb25zdGV4cHIgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50
IGIsIGludCBhKQotewotICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om1h
eCgwLCBzdGQ6Om1pbihhLCAweEZGKSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAw
eEZGKSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAweEZGKSkgPDwgOCB8IHN0ZDo6
bWF4KDAsIHN0ZDo6bWluKGIsIDB4RkYpKSkgfTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiBuYW1lc3BhY2UgV1RGIHsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNv
cmU6OkNvbG9yPjsKIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29sb3I+
OwogfQotCi1uYW1lc3BhY2Ugc3RkIHsKLQotdGVtcGxhdGU8PgotY2xhc3MgdHVwbGVfc2l6ZTxX
ZWJDb3JlOjpTaW1wbGVDb2xvcj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6
OnNpemVfdCwgND4gewotfTsKLQotdGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KLWNsYXNzIHR1cGxl
X2VsZW1lbnQ8TiwgV2ViQ29yZTo6U2ltcGxlQ29sb3I+IHsKLXB1YmxpYzoKLSAgICB1c2luZyB0
eXBlID0gdWludDhfdDsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlzaW9uIDI2MjEwNCkJKGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOjI2MjEwNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2xvci5oIgor
CisjaW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJIYXNoVG9vbHMuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhw
ciBTaW1wbGVDb2xvciBsaWdodGVuZWRCbGFjayB7IDB4RkY1NDU0NTQgfTsKK3N0YXRpYyBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgZGFya2VuZWRXaGl0ZSB7IDB4RkZBQkFCQUIgfTsKKworc3RhdGlj
IGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25l
ZCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKQoreworICAgIHJldHVybiBmYXN0RGl2aWRlQnkyNTUo
Y2VpbGluZyA/IGMgKiBhICsgMjU0IDogYyAqIGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAg
ICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKworUkdCQTMy
IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSwgYm9vbCBj
ZWlsaW5nKQoreworICAgIHJldHVybiBtYWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBh
LCBjZWlsaW5nKSwgcHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSwgY2VpbGluZyksIHByZW11bHRp
cGxpZWRDaGFubmVsKGIsIGEsIGNlaWxpbmcpLCBhKTsKK30KKworUkdCQTMyIG1ha2VQcmVtdWx0
aXBsaWVkUkdCQShSR0JBMzIgcGl4ZWxDb2xvcikKK3sKKyAgICBpZiAocGl4ZWxDb2xvci5pc09w
YXF1ZSgpKQorICAgICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKKyAgICByZXR1cm4gbWFrZVByZW11
bHRpcGxpZWRSR0JBKHBpeGVsQ29sb3IucmVkQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuZ3JlZW5D
b21wb25lbnQoKSwgcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYWxwaGFD
b21wb25lbnQoKSk7Cit9CisKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwg
aW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBs
aWVkQ2hhbm5lbChyLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0
aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7Cit9CisKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVk
UkdCQShSR0JBMzIgcGl4ZWxDb2xvcikKK3sKKyAgICBpZiAocGl4ZWxDb2xvci5pc1Zpc2libGUo
KSAmJiAhcGl4ZWxDb2xvci5pc09wYXF1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuUHJlbXVs
dGlwbGllZFJHQkEocGl4ZWxDb2xvci5yZWRDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5ncmVlbkNv
bXBvbmVudCgpLCBwaXhlbENvbG9yLmJsdWVDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5hbHBoYUNv
bXBvbmVudCgpKTsKKyAgICByZXR1cm4gcGl4ZWxDb2xvcjsKK30KKworc3RhdGljIGludCBjb2xv
ckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQoreworICAgIC8vIFdlIHVzZSBscm91bmRmIGFuZCAy
NTUgaW5zdGVhZCBvZiBuZXh0YWZ0ZXJmKDI1NiwgMCkgdG8gbWF0Y2ggQ0cncyByb3VuZGluZwor
ICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYo
MjU1LjBmICogZikpLCAyNTUpKTsKK30KKworUkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JB
KGNvbG9yRmxvYXRUb1JHQkFCeXRlKHIpLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShnKSwgY29sb3JG
bG9hdFRvUkdCQUJ5dGUoYiksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGEpKTsKK30KKworUkdCQTMy
IG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBzYXR1cmF0aW9uLCBmbG9hdCBsaWdo
dG5lc3MsIGZsb2F0IGFscGhhKQoreworICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMjU1
LjA7CisgICAgRmxvYXRDb21wb25lbnRzIGZsb2F0UmVzdWx0ID0gaHNsVG9TUkdCKHsgaHVlLCBz
YXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pOworICAgIHJldHVybiBtYWtlUkdCQSgKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1swXSAqIHNjYWxlRmFjdG9yKSwKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1sxXSAqIHNjYWxlRmFjdG9yKSwKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1syXSAqIHNjYWxlRmFjdG9yKSwKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1szXSAqIHNjYWxlRmFjdG9yKSk7Cit9
CisKK1JHQkEzMiBtYWtlUkdCQUZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBm
bG9hdCBrLCBmbG9hdCBhKQoreworICAgIGRvdWJsZSBjb2xvcnMgPSAxIC0gazsKKyAgICBpbnQg
ciA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEgLSBj
KSkpOworICAgIGludCBnID0gc3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChj
b2xvcnMgKiAoMSAtIG0pKSk7CisgICAgaW50IGIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRl
cigyNTYsIDApICogKGNvbG9ycyAqICgxIC0geSkpKTsKKyAgICByZXR1cm4gbWFrZVJHQkEociwg
ZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5leHRhZnRlcigyNTYsIDApICogYSkpOworfQorCisv
LyBvcmlnaW5hbGx5IG1vdmVkIGhlcmUgZnJvbSB0aGUgQ1NTIHBhcnNlcgordGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VIZXhDb2xvcklu
dGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMy
JiByZ2IpCit7CisgICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAh
PSA2ICYmIGxlbmd0aCAhPSA4KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdW5zaWduZWQg
dmFsdWUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdChuYW1lW2ldKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgdmFsdWUgPDw9IDQ7CisgICAgICAgIHZhbHVlIHw9IHRvQVNDSUlI
ZXhWYWx1ZShuYW1lW2ldKTsKKyAgICB9CisgICAgaWYgKGxlbmd0aCA9PSA2KSB7CisgICAgICAg
IHJnYiA9IHsgMHhGRjAwMDAwMCB8IHZhbHVlIH07CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBpZiAobGVuZ3RoID09IDgpIHsKKyAgICAgICAgLy8gV2UgcGFyc2VkIHRoZSB2YWx1
ZXMgaW50byBSR0JBIG9yZGVyLCBidXQgdGhlIFJHQkEzMiB0eXBlCisgICAgICAgIC8vIGV4cGVj
dHMgdGhlbSB0byBiZSBpbiBBUkdCIG9yZGVyLCBzbyB3ZSByaWdodCByb3RhdGUgZWlnaHQgYml0
cy4KKyAgICAgICAgcmdiID0geyB2YWx1ZSA8PCAyNCB8IHZhbHVlID4+IDggfTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChsZW5ndGggPT0gNCkgeworICAgICAgICAvLyAj
YWJjZCBjb252ZXJ0cyB0byBkZGFhYmJjYyBpbiBSR0JBMzIuCisgICAgICAgIHJnYiA9IHsgKHZh
bHVlICYgMHhGKSA8PCAyOCB8ICh2YWx1ZSAmIDB4RikgPDwgMjQKKyAgICAgICAgICAgIHwgKHZh
bHVlICYgMHhGMDAwKSA8PCA4IHwgKHZhbHVlICYgMHhGMDAwKSA8PCA0CisgICAgICAgICAgICB8
ICh2YWx1ZSAmIDB4RjAwKSA8PCA0IHwgKHZhbHVlICYgMHhGMDApCisgICAgICAgICAgICB8ICh2
YWx1ZSAmIDB4RjApIHwgKHZhbHVlICYgMHhGMCkgPj4gNCB9OworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgLy8gI2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjCisgICAgcmdiID0geyAw
eEZGMDAwMDAwCisgICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDEyIHwgKHZhbHVlICYgMHhG
MDApIDw8IDgKKyAgICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4IHwgKHZhbHVlICYgMHhGMCkg
PDwgNAorICAgICAgICB8ICh2YWx1ZSAmIDB4RikgPDwgNCB8ICh2YWx1ZSAmIDB4RikgfTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBMQ2hh
ciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikKK3sKKyAgICByZXR1cm4gcGFy
c2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwgcmdiKTsKK30KKworYm9vbCBDb2xvcjo6
cGFyc2VIZXhDb2xvcihjb25zdCBVQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzIm
IHJnYikKK3sKKyAgICByZXR1cm4gcGFyc2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwg
cmdiKTsKK30KKworYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUs
IFJHQkEzMiYgcmdiKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Cisg
ICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobmFtZS5pczhC
aXQoKSkKKyAgICAgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpLCBu
YW1lLmxlbmd0aCgpLCByZ2IpOworICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFj
dGVyczE2KCksIG5hbWUubGVuZ3RoKCksIHJnYik7Cit9CisKK2Jvb2wgQ29sb3I6OnBhcnNlSGV4
Q29sb3IoY29uc3QgU3RyaW5nVmlldyYgbmFtZSwgUkdCQTMyJiByZ2IpCit7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChuYW1lLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gcGFyc2VI
ZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCksIG5hbWUubGVuZ3RoKCksIHJnYik7CisgICAgcmV0
dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5ndGgoKSwgcmdi
KTsKK30KKworaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiBjMSwgY29uc3QgQ29s
b3ImIGMyKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFzc3VtaW5nIHRoYXQgdGhlIGNvbG9y
cyBhcmUgaW4gdGhlIHNhbWUgY29sb3JzcGFjZS4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
cHJvYmFibHkgcmV0dXJuIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBidXQgbWFueSBvZiB0aGUg
Y2FsbAorICAgIC8vIHNpdGVzIGhhdmUgcGlja2VkIGNvbXBhcmlzb24gdmFsdWVzIGJhc2VkIG9u
IGZlZWwuIFdlJ2QgbmVlZCB0byBicmVhayBvdXQKKyAgICAvLyBvdXIgbG9nYXJpdGhtIHRhYmxl
cyB0byBjaGFuZ2UgdGhlbSA6KQorICAgIGludCBjMVJlZCA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMx
LmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMxLnJlZCgpOworICAgIGludCBjMUdyZWVuID0g
YzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBjMS5ncmVl
bigpOworICAgIGludCBjMUJsdWUgPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCku
Ymx1ZSgpICogMjU1IDogYzEuYmx1ZSgpOworICAgIGludCBjMlJlZCA9IGMyLmlzRXh0ZW5kZWQo
KSA/IGMyLmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMyLnJlZCgpOworICAgIGludCBjMkdy
ZWVuID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBj
Mi5ncmVlbigpOworICAgIGludCBjMkJsdWUgPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVu
ZGVkKCkuYmx1ZSgpICogMjU1IDogYzIuYmx1ZSgpOworICAgIGludCBkUiA9IGMxUmVkIC0gYzJS
ZWQ7CisgICAgaW50IGRHID0gYzFHcmVlbiAtIGMyR3JlZW47CisgICAgaW50IGRCID0gYzFCbHVl
IC0gYzJCbHVlOworICAgIHJldHVybiBkUiAqIGRSICsgZEcgKiBkRyArIGRCICogZEI7Cit9CisK
K3N0YXRpYyBpbmxpbmUgY29uc3QgTmFtZWRDb2xvciogZmluZE5hbWVkQ29sb3IoY29uc3QgU3Ry
aW5nJiBuYW1lKQoreworICAgIGNoYXIgYnVmZmVyWzY0XTsgLy8gZWFzaWx5IGJpZyBlbm91Z2gg
Zm9yIHRoZSBsb25nZXN0IGNvbG9yIG5hbWUKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxl
bmd0aCgpOworICAgIGlmIChsZW5ndGggPiBzaXplb2YoYnVmZmVyKSAtIDEpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
eworICAgICAgICBVQ2hhciBjID0gbmFtZVtpXTsKKyAgICAgICAgaWYgKCFjIHx8ICFXVEY6Omlz
QVNDSUkoYykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYnVmZmVyW2ld
ID0gdG9BU0NJSUxvd2VyKHN0YXRpY19jYXN0PGNoYXI+KGMpKTsKKyAgICB9CisgICAgYnVmZmVy
W2xlbmd0aF0gPSAnXDAnOworICAgIHJldHVybiBmaW5kQ29sb3IoYnVmZmVyLCBsZW5ndGgpOwor
fQorCitDb2xvcjo6Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lWzBd
ID09ICcjJykgeworICAgICAgICBSR0JBMzIgY29sb3I7CisgICAgICAgIGJvb2wgdmFsaWQ7CisK
KyAgICAgICAgaWYgKG5hbWUuaXM4Qml0KCkpCisgICAgICAgICAgICB2YWxpZCA9IHBhcnNlSGV4
Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsaWQgPSBwYXJzZUhleENvbG9yKG5hbWUuY2hh
cmFjdGVyczE2KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0gMSwgY29sb3IpOworCisgICAgICAgIGlm
ICh2YWxpZCkKKyAgICAgICAgICAgIHNldFJHQihjb2xvcik7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgaWYgKGF1dG8qIGZvdW5kQ29sb3IgPSBmaW5kTmFtZWRDb2xvcihuYW1lKSkKKyAgICAgICAg
ICAgIHNldFJHQih7IGZvdW5kQ29sb3ItPkFSR0JWYWx1ZSB9KTsKKyAgICB9Cit9CisKK0NvbG9y
OjpDb2xvcihjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGlmIChuYW1lWzBdID09ICcjJykgewor
ICAgICAgICBTaW1wbGVDb2xvciBjb2xvcjsKKyAgICAgICAgaWYgKHBhcnNlSGV4Q29sb3IocmVp
bnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCZuYW1lWzFdKSwgc3RkOjpzdHJsZW4oJm5hbWVb
MV0pLCBjb2xvcikpCisgICAgICAgICAgICBzZXRSR0IoY29sb3IpOworICAgIH0gZWxzZSBpZiAo
YXV0byogZm91bmRDb2xvciA9IGZpbmRDb2xvcihuYW1lLCBzdHJsZW4obmFtZSkpKQorICAgICAg
ICBzZXRSR0IoeyBmb3VuZENvbG9yLT5BUkdCVmFsdWUgfSk7Cit9CisKK0NvbG9yOjpDb2xvcihj
b25zdCBDb2xvciYgb3RoZXIpCisgICAgOiBtX2NvbG9yRGF0YShvdGhlci5tX2NvbG9yRGF0YSkK
K3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yLT5yZWYoKTsKK30KKworQ29sb3I6OkNvbG9yKENvbG9yJiYgb3RoZXIpCit7CisgICAgKnRo
aXMgPSBXVEZNb3ZlKG90aGVyKTsKK30KKworQ29sb3I6OkNvbG9yKGZsb2F0IGMxLCBmbG9hdCBj
MiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAg
Ly8gWmVybyB0aGUgdW5pb24sIGp1c3QgaW4gY2FzZSBhIDMyLWJpdCBzeXN0ZW0gb25seSBhc3Np
Z25zIHRoZQorICAgIC8vIHRvcCAzMiBiaXRzIHdoZW4gY29weWluZyB0aGUgZXh0ZW5kZWRDb2xv
ciBwb2ludGVyIGJlbG93LgorICAgIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IDA7CisgICAg
YXV0byBleHRlbmRlZENvbG9yUmVmID0gRXh0ZW5kZWRDb2xvcjo6Y3JlYXRlKGMxLCBjMiwgYzMs
IGFscGhhLCBjb2xvclNwYWNlKTsKKyAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yID0gJmV4
dGVuZGVkQ29sb3JSZWYubGVha1JlZigpOworICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOworfQor
CitDb2xvciYgQ29sb3I6Om9wZXJhdG9yPShjb25zdCBDb2xvciYgb3RoZXIpCit7CisgICAgaWYg
KCp0aGlzID09IG90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBpZiAoaXNFeHRl
bmRlZCgpKQorICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigpOworCisg
ICAgbV9jb2xvckRhdGEgPSBvdGhlci5tX2NvbG9yRGF0YTsKKworICAgIGlmIChpc0V4dGVuZGVk
KCkpCisgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJlZigpOworICAgIHJldHVy
biAqdGhpczsKK30KKworQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oQ29sb3ImJiBvdGhlcikKK3sK
KyAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGlm
IChpc0V4dGVuZGVkKCkpCisgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVm
KCk7CisKKyAgICBtX2NvbG9yRGF0YSA9IG90aGVyLm1fY29sb3JEYXRhOworICAgIG90aGVyLm1f
Y29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IGludmFsaWRSR0JBQ29sb3I7CisKKyAgICByZXR1cm4g
KnRoaXM7Cit9CisKK1N0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvckhUTUwoKSBj
b25zdAoreworICAgIGlmIChpc09wYXF1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygn
IycsIGhleChyZWRDb21wb25lbnQoKSwgMiwgTG93ZXJjYXNlKSwgaGV4KGdyZWVuQ29tcG9uZW50
KCksIDIsIExvd2VyY2FzZSksIGhleChibHVlQ29tcG9uZW50KCksIDIsIExvd2VyY2FzZSkpOwor
ICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKCk7Cit9CisKK1N0cmluZyBDb2xvcjo6c2Vy
aWFsaXplZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJu
IGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7CisgICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRpb25G
b3JIVE1MKCk7Cit9CisKK3N0YXRpYyBjaGFyIGRlY2ltYWxEaWdpdCh1bnNpZ25lZCBudW1iZXIp
Cit7CisgICAgQVNTRVJUKG51bWJlciA8IDEwKTsKKyAgICByZXR1cm4gJzAnICsgbnVtYmVyOwor
fQorCitzdGF0aWMgc3RkOjphcnJheTxjaGFyLCA0PiBmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9u
YWxBbHBoYVZhbHVlKHVpbnQ4X3QgYWxwaGEpCit7CisgICAgQVNTRVJUKGFscGhhID4gMCk7Cisg
ICAgQVNTRVJUKGFscGhhIDwgMHhGRik7CisgICAgaWYgKCgoYWxwaGEgKiAxMDAgKyAweDdGKSAv
IDB4RkYgKiAweEZGICsgNTApIC8gMTAwICE9IGFscGhhKQorICAgICAgICByZXR1cm4geyB7IGRl
Y2ltYWxEaWdpdChhbHBoYSAqIDEwIC8gMHhGRiAlIDEwKSwgZGVjaW1hbERpZ2l0KGFscGhhICog
MTAwIC8gMHhGRiAlIDEwKSwgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwMDAgKyAweDdGKSAvIDB4
RkYgJSAxMCksICdcMCcgfSB9OworICAgIGlmIChpbnQgdGhpcmREaWdpdCA9IChhbHBoYSAqIDEw
MCArIDB4N0YpIC8gMHhGRiAlIDEwKQorICAgICAgICByZXR1cm4geyB7IGRlY2ltYWxEaWdpdChh
bHBoYSAqIDEwIC8gMHhGRiksIGRlY2ltYWxEaWdpdCh0aGlyZERpZ2l0KSwgJ1wwJywgJ1wwJyB9
IH07CisgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoKGFscGhhICogMTAgKyAweDdGKSAvIDB4
RkYpLCAnXDAnLCAnXDAnLCAnXDAnIH0gfTsKK30KKworU3RyaW5nIFNpbXBsZUNvbG9yOjpzZXJp
YWxpemF0aW9uRm9yQ1NTKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGFscGhhQ29tcG9uZW50KCkp
IHsKKyAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2JhKCIsIHJlZENv
bXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29tcG9uZW50KCks
ICIsIDApIik7CisgICAgY2FzZSAweEZGOgorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygicmdi
KCIsIHJlZENvbXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29t
cG9uZW50KCksICcpJyk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmco
InJnYmEoIiwgcmVkQ29tcG9uZW50KCksICIsICIsIGdyZWVuQ29tcG9uZW50KCksICIsICIsIGJs
dWVDb21wb25lbnQoKSwgIiwgMC4iLCBmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9uYWxBbHBoYVZh
bHVlKGFscGhhQ29tcG9uZW50KCkpLmRhdGEoKSwgJyknKTsKKyAgICB9Cit9CisKK1N0cmluZyBD
b2xvcjo6Y3NzVGV4dCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAg
cmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7CisgICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6
YXRpb25Gb3JDU1MoKTsKK30KKworU3RyaW5nIFJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRl
clRyZWVBc1RleHQoKSBjb25zdAoreworICAgIGlmIChhbHBoYUNvbXBvbmVudCgpIDwgMHhGRikK
KyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkQ29tcG9uZW50KCksIDIpLCBo
ZXgoZ3JlZW5Db21wb25lbnQoKSwgMiksIGhleChibHVlQ29tcG9uZW50KCksIDIpLCBoZXgoYWxw
aGFDb21wb25lbnQoKSwgMikpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENv
bXBvbmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVu
dCgpLCAyKSk7Cit9CisKK1N0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBj
b25zdAoreworICAgIC8vIEZJWE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29sb3JzLgorICAgIHJldHVy
biByZ2IoKS5zZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpOworfQorCitDb2xvciBD
b2xvcjo6bGlnaHQoKSBjb25zdAoreworICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2Ug
Zm9yIHNwZWVkLgorICAgIGlmIChyZ2IoKSA9PSBibGFjaykKKyAgICAgICAgcmV0dXJuIGxpZ2h0
ZW5lZEJsYWNrOworICAgIAorICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVy
ZigyNTYuMGYsIDAuMGYpOworCisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCk7CisKKyAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOworCisg
ICAgaWYgKHYgPT0gMC4wZikgeworICAgICAgICAvLyBMaWdodGVuZWQgYmxhY2sgd2l0aCBhbHBo
YS4KKyAgICAgICAgcmV0dXJuIENvbG9yKDB4NTQsIDB4NTQsIDB4NTQsIGFscGhhKCkpOworICAg
IH0KKworICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4zM2YpIC8g
djsKKworICAgIHJldHVybiBDb2xvcihzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICog
c2NhbGVGYWN0b3IpLAorICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxp
ZXIgKiBnICogc2NhbGVGYWN0b3IpLAorICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+
KG11bHRpcGxpZXIgKiBiICogc2NhbGVGYWN0b3IpLAorICAgICAgICAgICAgICAgICBhbHBoYSgp
KTsKK30KKworQ29sb3IgQ29sb3I6OmRhcmsoKSBjb25zdAoreworICAgIC8vIEhhcmRjb2RlIHRo
aXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgorICAgIGlmIChyZ2IoKSA9PSB3aGl0ZSkKKyAgICAg
ICAgcmV0dXJuIGRhcmtlbmVkV2hpdGU7CisgICAgCisgICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0
b3IgPSBuZXh0YWZ0ZXJmKDI1Ni4wZiwgMC4wZik7CisKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9
IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKworICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIs
IGcsIGIgfSk7CisgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4z
M2YpIC8gdik7CisKKyAgICByZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVy
ICogciAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50Piht
dWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgICAgICAgICAg
YWxwaGEoKSk7Cit9CisKK2Jvb2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0Cit7CisgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KKyAgICBhdXRvIFty
LCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBmbG9hdCBsYXJnZXN0
Tm9uQWxwaGFDaGFubmVsID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOworICAgIHJldHVybiBhID4g
MC41ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPCAwLjU7Cit9CisKK2Zsb2F0IENvbG9yOjps
aWdodG5lc3MoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9p
ZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMg
Zm9yIEhTTC4KKyAgICByZXR1cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRz
TG9zc3koKSk7Cit9CisKK3N0YXRpYyBpbnQgYmxlbmRDb21wb25lbnQoaW50IGMsIGludCBhKQor
eworICAgIC8vIFdlIHVzZSB3aGl0ZS4KKyAgICBmbG9hdCBhbHBoYSA9IGEgLyAyNTUuMGY7Cisg
ICAgaW50IHdoaXRlQmxlbmQgPSAyNTUgLSBhOworICAgIGMgLT0gd2hpdGVCbGVuZDsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50PihjIC8gYWxwaGEpOworfQorCitjb25zdCBpbnQgY1N0YXJ0
QWxwaGEgPSAxNTM7IC8vIDYwJQorY29uc3QgaW50IGNFbmRBbHBoYSA9IDIwNDsgLy8gODAlOwor
Y29uc3QgaW50IGNBbHBoYUluY3JlbWVudCA9IDE3OyAvLyBJbmNyZW1lbnRzIGluIGJldHdlZW4u
CisKK0NvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYgc291cmNlKSBjb25zdAoreworICAg
IGlmICghaXNWaXNpYmxlKCkgfHwgc291cmNlLmlzT3BhcXVlKCkpCisgICAgICAgIHJldHVybiBz
b3VyY2U7CisKKyAgICBpZiAoIXNvdXJjZS5hbHBoYSgpKQorICAgICAgICByZXR1cm4gKnRoaXM7
CisKKyAgICBpbnQgZCA9IDI1NSAqIChhbHBoYSgpICsgc291cmNlLmFscGhhKCkpIC0gYWxwaGEo
KSAqIHNvdXJjZS5hbHBoYSgpOworICAgIGludCBhID0gZCAvIDI1NTsKKyAgICBpbnQgciA9IChy
ZWQoKSAqIGFscGhhKCkgKiAoMjU1IC0gc291cmNlLmFscGhhKCkpICsgMjU1ICogc291cmNlLmFs
cGhhKCkgKiBzb3VyY2UucmVkKCkpIC8gZDsKKyAgICBpbnQgZyA9IChncmVlbigpICogYWxwaGEo
KSAqICgyNTUgLSBzb3VyY2UuYWxwaGEoKSkgKyAyNTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJj
ZS5ncmVlbigpKSAvIGQ7CisgICAgaW50IGIgPSAoYmx1ZSgpICogYWxwaGEoKSAqICgyNTUgLSBz
b3VyY2UuYWxwaGEoKSkgKyAyNTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJjZS5ibHVlKCkpIC8g
ZDsKKyAgICByZXR1cm4gQ29sb3IociwgZywgYiwgYSk7Cit9CisKK0NvbG9yIENvbG9yOjpibGVu
ZFdpdGhXaGl0ZSgpIGNvbnN0Cit7CisgICAgLy8gSWYgdGhlIGNvbG9yIGNvbnRhaW5zIGFscGhh
IGFscmVhZHksIHdlIGxlYXZlIGl0IGFsb25lLgorICAgIGlmICghaXNPcGFxdWUoKSkKKyAgICAg
ICAgcmV0dXJuICp0aGlzOworCisgICAgQ29sb3IgbmV3Q29sb3I7CisgICAgZm9yIChpbnQgYWxw
aGEgPSBjU3RhcnRBbHBoYTsgYWxwaGEgPD0gY0VuZEFscGhhOyBhbHBoYSArPSBjQWxwaGFJbmNy
ZW1lbnQpIHsKKyAgICAgICAgLy8gV2UgaGF2ZSBhIHNvbGlkIGNvbG9yLiAgQ29udmVydCB0byBh
biBlcXVpdmFsZW50IGNvbG9yIHRoYXQgbG9va3MgdGhlIHNhbWUgd2hlbiBibGVuZGVkIHdpdGgg
d2hpdGUKKyAgICAgICAgLy8gYXQgdGhlIGN1cnJlbnQgYWxwaGEuICBUcnkgdXNpbmcgbGVzcyB0
cmFuc3BhcmVuY3kgaWYgdGhlIG51bWJlcnMgZW5kIHVwIGJlaW5nIG5lZ2F0aXZlLgorICAgICAg
ICBpbnQgciA9IGJsZW5kQ29tcG9uZW50KHJlZCgpLCBhbHBoYSk7CisgICAgICAgIGludCBnID0g
YmxlbmRDb21wb25lbnQoZ3JlZW4oKSwgYWxwaGEpOworICAgICAgICBpbnQgYiA9IGJsZW5kQ29t
cG9uZW50KGJsdWUoKSwgYWxwaGEpOworICAgICAgICAKKyAgICAgICAgbmV3Q29sb3IgPSBDb2xv
cihyLCBnLCBiLCBhbHBoYSk7CisKKyAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49IDAgJiYgYiA+
PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGlzU2VtYW50aWMoKSkK
KyAgICAgICAgbmV3Q29sb3Iuc2V0SXNTZW1hbnRpYygpOworICAgIHJldHVybiBuZXdDb2xvcjsK
K30KKworQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0IGFtb3Vu
dCkgY29uc3QKK3sKKyAgICBmbG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkg
PyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5hbHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGFscGhhKCkpIC8gMjU1KTsKKyAgICByZXR1cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwor
fQorCitDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0
aXZlUm91bmRpbmcoZmxvYXQgYW1vdW50KSBjb25zdAoreworICAgIGZsb2F0IG5ld0FscGhhID0g
YW1vdW50ICogKGlzRXh0ZW5kZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhh
KCkgOiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEoKSkgLyAyNTUpOworICAgIHJldHVybiBjb2xv
cldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Cit9CisKK0NvbG9y
IENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKK3sKKyAgICBpZiAoaXNF
eHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yLT5yZWQoKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRh
dGEuZXh0ZW5kZWRDb2xvci0+Ymx1ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xv
ci0+Y29sb3JTcGFjZSgpIH07CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1
bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGlu
Zy4KKyAgICBpbnQgbmV3QWxwaGEgPSBhbHBoYSAqIDI1NTsKKworICAgIENvbG9yIHJlc3VsdCA9
IHsgcmVkKCksIGdyZWVuKCksIGJsdWUoKSwgbmV3QWxwaGEgfTsKKyAgICBpZiAoaXNTZW1hbnRp
YygpKQorICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK0NvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGlu
ZyhmbG9hdCBhbHBoYSkgY29uc3QKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBy
ZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xvckRh
dGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Ymx1
ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07CisK
KyAgICBDb2xvciByZXN1bHQgPSBTaW1wbGVDb2xvciB7IChyZ2IoKS52YWx1ZSgpICYgMHgwMEZG
RkZGRikgfCBjb2xvckZsb2F0VG9SR0JBQnl0ZShhbHBoYSkgPDwgMjQgfTsKKyAgICBpZiAoaXNT
ZW1hbnRpYygpKQorICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0ZDo6cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IENvbG9y
Ojpjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQo
KSkgeworICAgICAgICBhdXRvJiBleHRlbmRlZENvbG9yID0gYXNFeHRlbmRlZCgpOworICAgICAg
ICByZXR1cm4geyBleHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSwgZXh0ZW5kZWRDb2xvci5jaGFu
bmVscygpIH07CisgICAgfQorCisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRD
b21wb25lbnRzIHsgcmVkKCkgLyAyNTUuMGYsIGdyZWVuKCkgLyAyNTUuMGYsIGJsdWUoKSAvIDI1
NS4wZiwgIGFscGhhKCkgLyAyNTUuMGYgfSB9OworfQorCitTaW1wbGVDb2xvciBDb2xvcjo6dG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdAoreworICAgIGlmICghaXNFeHRlbmRlZCgpKQor
ICAgICAgICByZXR1cm4gcmdiKCk7CisKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFD
b21wb25lbnRzTG9zc3koKTsKKyAgICByZXR1cm4gbWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywg
YiwgYSk7Cit9CisKK0Zsb2F0Q29tcG9uZW50cyBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpIGNvbnN0Cit7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNw
YWNlQW5kQ29tcG9uZW50cygpOworICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgeworICAgIGNhc2Ug
Q29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7CisgICAgY2FzZSBD
b2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVu
dHMoY29tcG9uZW50cyk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAg
IHJldHVybiBwM1RvU1JHQihjb21wb25lbnRzKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNv
bnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVuZGVkKCkg
JiYgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9PSBiLmFz
RXh0ZW5kZWQoKTsKKworICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQo
KSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJv
bSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gRklYTUU6IEV4
dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorICAgIC8vIFdlIG5l
ZWQgdG8gcHJlc2VydmUgdGhlIHN0YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2Yg
dGhlIGFuaW1hdGlvbgorICAgIGlmIChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCisg
ICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgLy8gU2luY2UgbWFrZVByZW11bHRpcGxpZWRS
R0JBKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCisgICAgYXV0byBw
cmVtdWx0RnJvbSA9IGZyb20uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShmcm9tLnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50OworICAgIGF1dG8g
cHJlbXVsdFRvID0gdG8uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQSh0by50b1NSR0JB
U2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKKworICAgIFJHQkEzMiBw
cmVtdWx0QmxlbmRlZCA9IG1ha2VSR0JBKAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0
RnJvbS5yZWRDb21wb25lbnQoKSwgcHJlbXVsdFRvLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyks
CisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmdyZWVuQ29tcG9uZW50KCksIHBy
ZW11bHRUby5ncmVlbkNvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJs
ZW5kKHByZW11bHRGcm9tLmJsdWVDb21wb25lbnQoKSwgcHJlbXVsdFRvLmJsdWVDb21wb25lbnQo
KSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5hbHBoYUNv
bXBvbmVudCgpLCBwcmVtdWx0VG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCisgICAgKTsK
KworICAgIHJldHVybiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShwcmVtdWx0QmxlbmRlZCk7Cit9
CisKK0NvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25z
dCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kZWRD
b2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisgICAgLy8gV2UgbmVlZCB0byBw
cmVzZXJ2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhbGlkIGZsYWcgYXQgdGhlIGVuZCBvZiB0aGUgYW5p
bWF0aW9uCisgICAgaWYgKHByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xv
ckxvc3N5KCk7CisgICAgYXV0byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5
KCk7CisKKyAgICByZXR1cm4geworICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWRD
b21wb25lbnQoKSwgdG9TUkdCLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdl
YkNvcmU6OmJsZW5kKGZyb21TUkdCLmdyZWVuQ29tcG9uZW50KCksIHRvU1JHQi5ncmVlbkNvbXBv
bmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWVD
b21wb25lbnQoKSwgdG9TUkdCLmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tU1JHQi5hbHBoYUNvbXBvbmVudCgpLCB0b1NSR0IuYWxwaGFDb21w
b25lbnQoKSwgcHJvZ3Jlc3MpCisgICAgfTsKK30KKwordm9pZCBDb2xvcjo6dGFnQXNWYWxpZCgp
Cit7CisgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzIHw9IHZhbGlkUkdCQUNvbG9yOworfQor
Citjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0Cit7CisgICAg
QVNTRVJUKGlzRXh0ZW5kZWQoKSk7CisgICAgcmV0dXJuICptX2NvbG9yRGF0YS5leHRlbmRlZENv
bG9yOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBD
b2xvciYgY29sb3IpCit7CisgICAgcmV0dXJuIHRzIDw8IGNvbG9yLm5hbWVGb3JSZW5kZXJUcmVl
QXNUZXh0KCk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENv
bG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKKyAgICBj
YXNlIENvbG9yU3BhY2U6OlNSR0I6CisgICAgICAgIHRzIDw8ICJzUkdCIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAgIHRzIDw8ICJMaW5l
YXJSR0IiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoK
KyAgICAgICAgdHMgPDwgIkRpc3BsYXlQMyI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMg
b246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcApfX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVDb2xvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIxMDQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI0LDEwICsyNCw4IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkNvbG9yLmgiCisjaW5jbHVkZSAiU2ltcGxlQ29sb3IuaCIKIAotI2luY2x1ZGUgIkFuaW1h
dGlvblV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkNvbG9yVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
SGFzaFRvb2xzLmgiCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KICNpbmNsdWRlIDx3dGYv
SGV4TnVtYmVyLmg+CkBAIC0zNyw5ICszNSw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBsaWdodGVuZWRCbGFjayB7IDB4RkY1NDU0NTQg
fTsKLXN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgZGFya2VuZWRXaGl0ZSB7IDB4RkZBQkFC
QUIgfTsKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNp
Z25lZCBjLCB1bnNpZ25lZCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKQogewogICAgIHJldHVybiBm
YXN0RGl2aWRlQnkyNTUoY2VpbGluZyA/IGMgKiBhICsgMjU0IDogYyAqIGEpOwpAQCAtNzQsMTIg
KzY5LDYgQEAgUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKFJHQkEzMiBwaQogICAgIHJl
dHVybiBwaXhlbENvbG9yOwogfQogCi1zdGF0aWMgaW50IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZs
b2F0IGYpCi17Ci0gICAgLy8gV2UgdXNlIGxyb3VuZGYgYW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRh
ZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5kaW5nCi0gICAgcmV0dXJuIHN0ZDo6bWF4
KDAsIHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4obHJvdW5kZigyNTUuMGYgKiBmKSksIDI1NSkp
OwotfQotCiBSR0JBMzIgbWFrZVJHQkEzMkZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxv
YXQgYiwgZmxvYXQgYSkKIHsKICAgICByZXR1cm4gbWFrZVJHQkEoY29sb3JGbG9hdFRvUkdCQUJ5
dGUociksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGcpLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShiKSwg
Y29sb3JGbG9hdFRvUkdCQUJ5dGUoYSkpOwpAQCAtMTA1LDE4OSArOTQsNiBAQCBSR0JBMzIgbWFr
ZVJHQkFGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgCiAgICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcs
IGIsIHN0YXRpY19jYXN0PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIGEpKTsKIH0KIAotLy8g
b3JpZ2luYWxseSBtb3ZlZCBoZXJlIGZyb20gdGhlIENTUyBwYXJzZXIKLXRlbXBsYXRlIDx0eXBl
bmFtZSBDaGFyYWN0ZXJUeXBlPgotc3RhdGljIGlubGluZSBib29sIHBhcnNlSGV4Q29sb3JJbnRl
cm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgsIFJHQkEzMiYg
cmdiKQotewotICAgIGlmIChsZW5ndGggIT0gMyAmJiBsZW5ndGggIT0gNCAmJiBsZW5ndGggIT0g
NiAmJiBsZW5ndGggIT0gOCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHVuc2lnbmVkIHZh
bHVlID0gMDsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFpc0FTQ0lJSGV4RGlnaXQobmFtZVtpXSkpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIHZhbHVlIDw8PSA0OwotICAgICAgICB2YWx1ZSB8PSB0b0FTQ0lJSGV4
VmFsdWUobmFtZVtpXSk7Ci0gICAgfQotICAgIGlmIChsZW5ndGggPT0gNikgewotICAgICAgICBy
Z2IgPSB7IDB4RkYwMDAwMDAgfCB2YWx1ZSB9OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9
Ci0gICAgaWYgKGxlbmd0aCA9PSA4KSB7Ci0gICAgICAgIC8vIFdlIHBhcnNlZCB0aGUgdmFsdWVz
IGludG8gUkdCQSBvcmRlciwgYnV0IHRoZSBSR0JBMzIgdHlwZQotICAgICAgICAvLyBleHBlY3Rz
IHRoZW0gdG8gYmUgaW4gQVJHQiBvcmRlciwgc28gd2UgcmlnaHQgcm90YXRlIGVpZ2h0IGJpdHMu
Ci0gICAgICAgIHJnYiA9IHsgdmFsdWUgPDwgMjQgfCB2YWx1ZSA+PiA4IH07Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLSAgICBpZiAobGVuZ3RoID09IDQpIHsKLSAgICAgICAgLy8gI2Fi
Y2QgY29udmVydHMgdG8gZGRhYWJiY2MgaW4gUkdCQTMyLgotICAgICAgICByZ2IgPSB7ICh2YWx1
ZSAmIDB4RikgPDwgMjggfCAodmFsdWUgJiAweEYpIDw8IDI0Ci0gICAgICAgICAgICB8ICh2YWx1
ZSAmIDB4RjAwMCkgPDwgOCB8ICh2YWx1ZSAmIDB4RjAwMCkgPDwgNAotICAgICAgICAgICAgfCAo
dmFsdWUgJiAweEYwMCkgPDwgNCB8ICh2YWx1ZSAmIDB4RjAwKQotICAgICAgICAgICAgfCAodmFs
dWUgJiAweEYwKSB8ICh2YWx1ZSAmIDB4RjApID4+IDQgfTsKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgfQotICAgIC8vICNhYmMgY29udmVydHMgdG8gI2FhYmJjYwotICAgIHJnYiA9IHsgMHhG
RjAwMDAwMAotICAgICAgICB8ICh2YWx1ZSAmIDB4RjAwKSA8PCAxMiB8ICh2YWx1ZSAmIDB4RjAw
KSA8PCA4Ci0gICAgICAgIHwgKHZhbHVlICYgMHhGMCkgPDwgOCB8ICh2YWx1ZSAmIDB4RjApIDw8
IDQKLSAgICAgICAgfCAodmFsdWUgJiAweEYpIDw8IDQgfCAodmFsdWUgJiAweEYpIH07Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29sb3I6OnBhcnNlSGV4Q29sb3IoY29uc3QgTENoYXIq
IG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMyJiByZ2IpCi17Ci0gICAgcmV0dXJuIHBhcnNl
SGV4Q29sb3JJbnRlcm5hbChuYW1lLCBsZW5ndGgsIHJnYik7Ci19Ci0KLWJvb2wgQ29sb3I6OnBh
cnNlSGV4Q29sb3IoY29uc3QgVUNoYXIqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMyJiBy
Z2IpCi17Ci0gICAgcmV0dXJuIHBhcnNlSGV4Q29sb3JJbnRlcm5hbChuYW1lLCBsZW5ndGgsIHJn
Yik7Ci19Ci0KLWJvb2wgQ29sb3I6OnBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lLCBS
R0JBMzImIHJnYikKLXsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOwotICAg
IGlmICghbGVuZ3RoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG5hbWUuaXM4Qml0
KCkpCi0gICAgICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczgoKSwgbmFt
ZS5sZW5ndGgoKSwgcmdiKTsKLSAgICByZXR1cm4gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3Rl
cnMxNigpLCBuYW1lLmxlbmd0aCgpLCByZ2IpOwotfQotCi1ib29sIENvbG9yOjpwYXJzZUhleENv
bG9yKGNvbnN0IFN0cmluZ1ZpZXcmIG5hbWUsIFJHQkEzMiYgcmdiKQotewotICAgIHVuc2lnbmVk
IGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICBpZiAobmFtZS5pczhCaXQoKSkKLSAgICAgICAgcmV0dXJuIHBhcnNlSGV4
Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpLCBuYW1lLmxlbmd0aCgpLCByZ2IpOwotICAgIHJldHVy
biBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2KCksIG5hbWUubGVuZ3RoKCksIHJnYik7
Ci19Ci0KLWludCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYgYzEsIGNvbnN0IENvbG9y
JiBjMikKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBpcyBhc3N1bWluZyB0aGF0IHRoZSBjb2xvcnMg
YXJlIGluIHRoZSBzYW1lIGNvbG9yc3BhY2UuCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHBy
b2JhYmx5IHJldHVybiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciwgYnV0IG1hbnkgb2YgdGhlIGNh
bGwKLSAgICAvLyBzaXRlcyBoYXZlIHBpY2tlZCBjb21wYXJpc29uIHZhbHVlcyBiYXNlZCBvbiBm
ZWVsLiBXZSdkIG5lZWQgdG8gYnJlYWsgb3V0Ci0gICAgLy8gb3VyIGxvZ2FyaXRobSB0YWJsZXMg
dG8gY2hhbmdlIHRoZW0gOikKLSAgICBpbnQgYzFSZWQgPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5h
c0V4dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMS5yZWQoKTsKLSAgICBpbnQgYzFHcmVlbiA9IGMx
LmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzEuZ3JlZW4o
KTsKLSAgICBpbnQgYzFCbHVlID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmJs
dWUoKSAqIDI1NSA6IGMxLmJsdWUoKTsKLSAgICBpbnQgYzJSZWQgPSBjMi5pc0V4dGVuZGVkKCkg
PyBjMi5hc0V4dGVuZGVkKCkucmVkKCkgKiAyNTUgOiBjMi5yZWQoKTsKLSAgICBpbnQgYzJHcmVl
biA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5ncmVlbigpICogMjU1IDogYzIu
Z3JlZW4oKTsKLSAgICBpbnQgYzJCbHVlID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRl
ZCgpLmJsdWUoKSAqIDI1NSA6IGMyLmJsdWUoKTsKLSAgICBpbnQgZFIgPSBjMVJlZCAtIGMyUmVk
OwotICAgIGludCBkRyA9IGMxR3JlZW4gLSBjMkdyZWVuOwotICAgIGludCBkQiA9IGMxQmx1ZSAt
IGMyQmx1ZTsKLSAgICByZXR1cm4gZFIgKiBkUiArIGRHICogZEcgKyBkQiAqIGRCOwotfQotCi1z
dGF0aWMgaW5saW5lIGNvbnN0IE5hbWVkQ29sb3IqIGZpbmROYW1lZENvbG9yKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKLXsKLSAgICBjaGFyIGJ1ZmZlcls2NF07IC8vIGVhc2lseSBiaWcgZW5vdWdoIGZv
ciB0aGUgbG9uZ2VzdCBjb2xvciBuYW1lCi0gICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5n
dGgoKTsKLSAgICBpZiAobGVuZ3RoID4gc2l6ZW9mKGJ1ZmZlcikgLSAxKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgVUNoYXIgYyA9IG5hbWVbaV07Ci0gICAgICAgIGlmICghYyB8fCAhV1RGOjppc0FT
Q0lJKGMpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGJ1ZmZlcltpXSA9
IHRvQVNDSUlMb3dlcihzdGF0aWNfY2FzdDxjaGFyPihjKSk7Ci0gICAgfQotICAgIGJ1ZmZlclts
ZW5ndGhdID0gJ1wwJzsKLSAgICByZXR1cm4gZmluZENvbG9yKGJ1ZmZlciwgbGVuZ3RoKTsKLX0K
LQotQ29sb3I6OkNvbG9yKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBpZiAobmFtZVswXSA9
PSAnIycpIHsKLSAgICAgICAgUkdCQTMyIGNvbG9yOwotICAgICAgICBib29sIHZhbGlkOwotCi0g
ICAgICAgIGlmIChuYW1lLmlzOEJpdCgpKQotICAgICAgICAgICAgdmFsaWQgPSBwYXJzZUhleENv
bG9yKG5hbWUuY2hhcmFjdGVyczgoKSArIDEsIG5hbWUubGVuZ3RoKCkgLSAxLCBjb2xvcik7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHZhbGlkID0gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJh
Y3RlcnMxNigpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKLQotICAgICAgICBpZiAo
dmFsaWQpCi0gICAgICAgICAgICBzZXRSR0IoY29sb3IpOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChhdXRvKiBmb3VuZENvbG9yID0gZmluZE5hbWVkQ29sb3IobmFtZSkpCi0gICAgICAgICAg
ICBzZXRSR0IoeyBmb3VuZENvbG9yLT5BUkdCVmFsdWUgfSk7Ci0gICAgfQotfQotCi1Db2xvcjo6
Q29sb3IoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBpZiAobmFtZVswXSA9PSAnIycpIHsKLSAg
ICAgICAgU2ltcGxlQ29sb3IgY29sb3I7Ci0gICAgICAgIGlmIChwYXJzZUhleENvbG9yKHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgTENoYXIqPigmbmFtZVsxXSksIHN0ZDo6c3RybGVuKCZuYW1lWzFd
KSwgY29sb3IpKQotICAgICAgICAgICAgc2V0UkdCKGNvbG9yKTsKLSAgICB9IGVsc2UgaWYgKGF1
dG8qIGZvdW5kQ29sb3IgPSBmaW5kQ29sb3IobmFtZSwgc3RybGVuKG5hbWUpKSkKLSAgICAgICAg
c2V0UkdCKHsgZm91bmRDb2xvci0+QVJHQlZhbHVlIH0pOwotfQotCi1Db2xvcjo6Q29sb3IoY29u
c3QgQ29sb3ImIG90aGVyKQotICAgIDogbV9jb2xvckRhdGEob3RoZXIubV9jb2xvckRhdGEpCi17
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xv
ci0+cmVmKCk7Ci19Ci0KLUNvbG9yOjpDb2xvcihDb2xvciYmIG90aGVyKQotewotICAgICp0aGlz
ID0gV1RGTW92ZShvdGhlcik7Ci19Ci0KLUNvbG9yOjpDb2xvcihmbG9hdCBjMSwgZmxvYXQgYzIs
IGZsb2F0IGMzLCBmbG9hdCBhbHBoYSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIC8v
IFplcm8gdGhlIHVuaW9uLCBqdXN0IGluIGNhc2UgYSAzMi1iaXQgc3lzdGVtIG9ubHkgYXNzaWdu
cyB0aGUKLSAgICAvLyB0b3AgMzIgYml0cyB3aGVuIGNvcHlpbmcgdGhlIGV4dGVuZGVkQ29sb3Ig
cG9pbnRlciBiZWxvdy4KLSAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSAwOwotICAgIGF1
dG8gZXh0ZW5kZWRDb2xvclJlZiA9IEV4dGVuZGVkQ29sb3I6OmNyZWF0ZShjMSwgYzIsIGMzLCBh
bHBoYSwgY29sb3JTcGFjZSk7Ci0gICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvciA9ICZleHRl
bmRlZENvbG9yUmVmLmxlYWtSZWYoKTsKLSAgICBBU1NFUlQoaXNFeHRlbmRlZCgpKTsKLX0KLQot
Q29sb3ImIENvbG9yOjpvcGVyYXRvcj0oY29uc3QgQ29sb3ImIG90aGVyKQotewotICAgIGlmICgq
dGhpcyA9PSBvdGhlcikKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgaWYgKGlzRXh0ZW5k
ZWQoKSkKLSAgICAgICAgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+ZGVyZWYoKTsKLQotICAg
IG1fY29sb3JEYXRhID0gb3RoZXIubV9jb2xvckRhdGE7Ci0KLSAgICBpZiAoaXNFeHRlbmRlZCgp
KQotICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWYoKTsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KLUNvbG9yJiBDb2xvcjo6b3BlcmF0b3I9KENvbG9yJiYgb3RoZXIpCi17Ci0g
ICAgaWYgKCp0aGlzID09IG90aGVyKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBpZiAo
aXNFeHRlbmRlZCgpKQotICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigp
OwotCi0gICAgbV9jb2xvckRhdGEgPSBvdGhlci5tX2NvbG9yRGF0YTsKLSAgICBvdGhlci5tX2Nv
bG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBpbnZhbGlkUkdCQUNvbG9yOwotCi0gICAgcmV0dXJuICp0
aGlzOwotfQotCiBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29u
c3QKIHsKICAgICBpZiAoaXNPcGFxdWUoKSkKQEAgLTI5NSwxMyArMTAxLDYgQEAgU3RyaW5nIFNp
bXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9ySFRNTAogICAgIHJldHVybiBzZXJpYWxpemF0aW9u
Rm9yQ1NTKCk7CiB9CiAKLVN0cmluZyBDb2xvcjo6c2VyaWFsaXplZCgpIGNvbnN0Ci17Ci0gICAg
aWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7
Ci0gICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRpb25Gb3JIVE1MKCk7Ci19Ci0KIHN0YXRpYyBj
aGFyIGRlY2ltYWxEaWdpdCh1bnNpZ25lZCBudW1iZXIpCiB7CiAgICAgQVNTRVJUKG51bWJlciA8
IDEwKTsKQEAgLTMzMSwyODcgKzEzMCwxMSBAQCBTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6
YXRpb25Gb3JDU1MoCiAgICAgfQogfQogCi1TdHJpbmcgQ29sb3I6OmNzc1RleHQoKSBjb25zdAot
ewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuY3Nz
VGV4dCgpOwotICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0aW9uRm9yQ1NTKCk7Ci19Ci0KLVN0
cmluZyBSR0JBMzI6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3QKK1N0
cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25z
dAogewogICAgIGlmIChhbHBoYUNvbXBvbmVudCgpIDwgMHhGRikKICAgICAgICAgcmV0dXJuIG1h
a2VTdHJpbmcoJyMnLCBoZXgocmVkQ29tcG9uZW50KCksIDIpLCBoZXgoZ3JlZW5Db21wb25lbnQo
KSwgMiksIGhleChibHVlQ29tcG9uZW50KCksIDIpLCBoZXgoYWxwaGFDb21wb25lbnQoKSwgMikp
OwogICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBvbmVudCgpLCAyKSwgaGV4
KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVudCgpLCAyKSk7CiB9CiAKLVN0
cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdAotewotICAgIC8vIEZJ
WE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29sb3JzLgotICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0
aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpOwotfQotCi1Db2xvciBDb2xvcjo6bGlnaHQoKSBjb25z
dAotewotICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgotICAgIGlm
IChyZ2IoKSA9PSBibGFjaykKLSAgICAgICAgcmV0dXJuIGxpZ2h0ZW5lZEJsYWNrOwotICAgIAot
ICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOwot
Ci0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0KLSAg
ICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwotCi0gICAgaWYgKHYgPT0gMC4wZikg
ewotICAgICAgICAvLyBMaWdodGVuZWQgYmxhY2sgd2l0aCBhbHBoYS4KLSAgICAgICAgcmV0dXJu
IENvbG9yKDB4NTQsIDB4NTQsIDB4NTQsIGFscGhhKCkpOwotICAgIH0KLQotICAgIGZsb2F0IG11
bHRpcGxpZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4zM2YpIC8gdjsKLQotICAgIHJldHVybiBD
b2xvcihzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiByICogc2NhbGVGYWN0b3IpLAotICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBnICogc2NhbGVGYWN0
b3IpLAotICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQ+KG11bHRpcGxpZXIgKiBiICog
c2NhbGVGYWN0b3IpLAotICAgICAgICAgICAgICAgICBhbHBoYSgpKTsKLX0KLQotQ29sb3IgQ29s
b3I6OmRhcmsoKSBjb25zdAotewotICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9y
IHNwZWVkLgotICAgIGlmIChyZ2IoKSA9PSB3aGl0ZSkKLSAgICAgICAgcmV0dXJuIGRhcmtlbmVk
V2hpdGU7Ci0gICAgCi0gICAgY29uc3QgZmxvYXQgc2NhbGVGYWN0b3IgPSBuZXh0YWZ0ZXJmKDI1
Ni4wZiwgMC4wZik7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRz
TG9zc3koKTsKLQotICAgIGZsb2F0IHYgPSBzdGQ6Om1heCh7IHIsIGcsIGIgfSk7Ci0gICAgZmxv
YXQgbXVsdGlwbGllciA9IHN0ZDo6bWF4KDAuMGYsICh2IC0gMC4zM2YpIC8gdik7Ci0KLSAgICBy
ZXR1cm4gQ29sb3Ioc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9y
KSwKLSAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNj
YWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVy
ICogYiAqIHNjYWxlRmFjdG9yKSwKLSAgICAgICAgICAgICAgICAgYWxwaGEoKSk7Ci19Ci0KLWJv
b2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0Ci17Ci0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHBy
b2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JH
QkFDb21wb25lbnRzTG9zc3koKTsKLSAgICBmbG9hdCBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsID0g
c3RkOjptYXgoeyByLCBnLCBiIH0pOwotICAgIHJldHVybiBhID4gMC41ICYmIGxhcmdlc3ROb25B
bHBoYUNoYW5uZWwgPCAwLjU7Ci19Ci0KLWZsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdAot
ewotICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9uIHRvIHNS
R0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMgZm9yIEhTTC4KLSAgICByZXR1
cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7Ci19Ci0KLXN0
YXRpYyBpbnQgYmxlbmRDb21wb25lbnQoaW50IGMsIGludCBhKQotewotICAgIC8vIFdlIHVzZSB3
aGl0ZS4KLSAgICBmbG9hdCBhbHBoYSA9IGEgLyAyNTUuMGY7Ci0gICAgaW50IHdoaXRlQmxlbmQg
PSAyNTUgLSBhOwotICAgIGMgLT0gd2hpdGVCbGVuZDsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50PihjIC8gYWxwaGEpOwotfQotCi1jb25zdCBpbnQgY1N0YXJ0QWxwaGEgPSAxNTM7IC8vIDYw
JQotY29uc3QgaW50IGNFbmRBbHBoYSA9IDIwNDsgLy8gODAlOwotY29uc3QgaW50IGNBbHBoYUlu
Y3JlbWVudCA9IDE3OyAvLyBJbmNyZW1lbnRzIGluIGJldHdlZW4uCi0KLUNvbG9yIENvbG9yOjpi
bGVuZChjb25zdCBDb2xvciYgc291cmNlKSBjb25zdAotewotICAgIGlmICghaXNWaXNpYmxlKCkg
fHwgc291cmNlLmlzT3BhcXVlKCkpCi0gICAgICAgIHJldHVybiBzb3VyY2U7Ci0KLSAgICBpZiAo
IXNvdXJjZS5hbHBoYSgpKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBpbnQgZCA9IDI1
NSAqIChhbHBoYSgpICsgc291cmNlLmFscGhhKCkpIC0gYWxwaGEoKSAqIHNvdXJjZS5hbHBoYSgp
OwotICAgIGludCBhID0gZCAvIDI1NTsKLSAgICBpbnQgciA9IChyZWQoKSAqIGFscGhhKCkgKiAo
MjU1IC0gc291cmNlLmFscGhhKCkpICsgMjU1ICogc291cmNlLmFscGhhKCkgKiBzb3VyY2UucmVk
KCkpIC8gZDsKLSAgICBpbnQgZyA9IChncmVlbigpICogYWxwaGEoKSAqICgyNTUgLSBzb3VyY2Uu
YWxwaGEoKSkgKyAyNTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJjZS5ncmVlbigpKSAvIGQ7Ci0g
ICAgaW50IGIgPSAoYmx1ZSgpICogYWxwaGEoKSAqICgyNTUgLSBzb3VyY2UuYWxwaGEoKSkgKyAy
NTUgKiBzb3VyY2UuYWxwaGEoKSAqIHNvdXJjZS5ibHVlKCkpIC8gZDsKLSAgICByZXR1cm4gQ29s
b3IociwgZywgYiwgYSk7Ci19Ci0KLUNvbG9yIENvbG9yOjpibGVuZFdpdGhXaGl0ZSgpIGNvbnN0
Ci17Ci0gICAgLy8gSWYgdGhlIGNvbG9yIGNvbnRhaW5zIGFscGhhIGFscmVhZHksIHdlIGxlYXZl
IGl0IGFsb25lLgotICAgIGlmICghaXNPcGFxdWUoKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwot
Ci0gICAgQ29sb3IgbmV3Q29sb3I7Ci0gICAgZm9yIChpbnQgYWxwaGEgPSBjU3RhcnRBbHBoYTsg
YWxwaGEgPD0gY0VuZEFscGhhOyBhbHBoYSArPSBjQWxwaGFJbmNyZW1lbnQpIHsKLSAgICAgICAg
Ly8gV2UgaGF2ZSBhIHNvbGlkIGNvbG9yLiAgQ29udmVydCB0byBhbiBlcXVpdmFsZW50IGNvbG9y
IHRoYXQgbG9va3MgdGhlIHNhbWUgd2hlbiBibGVuZGVkIHdpdGggd2hpdGUKLSAgICAgICAgLy8g
YXQgdGhlIGN1cnJlbnQgYWxwaGEuICBUcnkgdXNpbmcgbGVzcyB0cmFuc3BhcmVuY3kgaWYgdGhl
IG51bWJlcnMgZW5kIHVwIGJlaW5nIG5lZ2F0aXZlLgotICAgICAgICBpbnQgciA9IGJsZW5kQ29t
cG9uZW50KHJlZCgpLCBhbHBoYSk7Ci0gICAgICAgIGludCBnID0gYmxlbmRDb21wb25lbnQoZ3Jl
ZW4oKSwgYWxwaGEpOwotICAgICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGJsdWUoKSwgYWxw
aGEpOwotICAgICAgICAKLSAgICAgICAgbmV3Q29sb3IgPSBDb2xvcihyLCBnLCBiLCBhbHBoYSk7
Ci0KLSAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49IDAgJiYgYiA+PSAwKQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAgbmV3Q29sb3Iu
c2V0SXNTZW1hbnRpYygpOwotICAgIHJldHVybiBuZXdDb2xvcjsKLX0KLQotQ29sb3IgQ29sb3I6
OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0IGFtb3VudCkgY29uc3QKLXsKLSAgICBm
bG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkgPyBtX2NvbG9yRGF0YS5leHRl
bmRlZENvbG9yLT5hbHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKCkpIC8gMjU1KTsK
LSAgICByZXR1cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwotfQotCi1Db2xvciBDb2xvcjo6
Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQg
YW1vdW50KSBjb25zdAotewotICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogKGlzRXh0ZW5k
ZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkgOiBzdGF0aWNfY2FzdDxm
bG9hdD4oYWxwaGEoKSkgLyAyNTUpOwotICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Ci19Ci0KLUNvbG9yIENvbG9yOjpjb2xvcldpdGhB
bHBoYShmbG9hdCBhbHBoYSkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAg
ICByZXR1cm4gQ29sb3IgeyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xv
ckRhdGEuZXh0ZW5kZWRDb2xvci0+Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+
Ymx1ZSgpLCBhbHBoYSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07
Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJv
bSBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZy4KLSAgICBpbnQgbmV3QWxw
aGEgPSBhbHBoYSAqIDI1NTsKLQotICAgIENvbG9yIHJlc3VsdCA9IHsgcmVkKCksIGdyZWVuKCks
IGJsdWUoKSwgbmV3QWxwaGEgfTsKLSAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAgICByZXN1
bHQuc2V0SXNTZW1hbnRpYygpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLUNvbG9yIENvbG9y
Ojpjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9hdCBhbHBoYSkgY29u
c3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gQ29sb3IgeyBtX2Nv
bG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWQoKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+
Z3JlZW4oKSwgbV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+Ymx1ZSgpLCBhbHBoYSwgbV9jb2xv
ckRhdGEuZXh0ZW5kZWRDb2xvci0+Y29sb3JTcGFjZSgpIH07Ci0KLSAgICBDb2xvciByZXN1bHQg
PSBTaW1wbGVDb2xvciB7IChyZ2IoKS52YWx1ZSgpICYgMHgwMEZGRkZGRikgfCBjb2xvckZsb2F0
VG9SR0JBQnl0ZShhbHBoYSkgPDwgMjQgfTsKLSAgICBpZiAoaXNTZW1hbnRpYygpKQotICAgICAg
ICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0ZDo6
cGFpcjxDb2xvclNwYWNlLCBGbG9hdENvbXBvbmVudHM+IENvbG9yOjpjb2xvclNwYWNlQW5kQ29t
cG9uZW50cygpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkgewotICAgICAgICBhdXRv
JiBleHRlbmRlZENvbG9yID0gYXNFeHRlbmRlZCgpOwotICAgICAgICByZXR1cm4geyBleHRlbmRl
ZENvbG9yLmNvbG9yU3BhY2UoKSwgZXh0ZW5kZWRDb2xvci5jaGFubmVscygpIH07Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgcmVkKCkg
LyAyNTUuMGYsIGdyZWVuKCkgLyAyNTUuMGYsIGJsdWUoKSAvIDI1NS4wZiwgIGFscGhhKCkgLyAy
NTUuMGYgfSB9OwotfQotCi1TaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9z
c3koKSBjb25zdAotewotICAgIGlmICghaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gcmdi
KCk7Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsK
LSAgICByZXR1cm4gbWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywgYiwgYSk7Ci19Ci0KLUZsb2F0
Q29tcG9uZW50cyBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0Ci17Ci0gICAg
YXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygp
OwotICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgewotICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoK
LSAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJS
R0I6Ci0gICAgICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29tcG9uZW50cyk7Ci0g
ICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6Ci0gICAgICAgIHJldHVybiBwM1RvU1JHQihj
b21wb25lbnRzKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJu
IHsgfTsKLX0KLQotYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiBhLCBjb25z
dCBDb2xvciYgYikKLXsKLSAgICBpZiAoYS5pc0V4dGVuZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkp
Ci0gICAgICAgIHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9PSBiLmFzRXh0ZW5kZWQoKTsKLQotICAg
IEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSk7Ci0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1Db2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVk
cyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgotICAgIC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhl
IHN0YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbgotICAg
IGlmIChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCi0gICAgICAgIHJldHVybiBDb2xv
cigpOwotCi0gICAgLy8gU2luY2UgbWFrZVByZW11bHRpcGxpZWRSR0JBKCkgYmFpbHMgb24gemVy
byBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCi0gICAgYXV0byBwcmVtdWx0RnJvbSA9IGZyb20u
YWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGF1dG8gcHJlbXVsdFRvID0gdG8uYWxw
aGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQSh0by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
KSA6IENvbG9yOjp0cmFuc3BhcmVudDsKLQotICAgIFJHQkEzMiBwcmVtdWx0QmxlbmRlZCA9IG1h
a2VSR0JBKAotICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5yZWRDb21wb25lbnQo
KSwgcHJlbXVsdFRvLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6
OmJsZW5kKHByZW11bHRGcm9tLmdyZWVuQ29tcG9uZW50KCksIHByZW11bHRUby5ncmVlbkNvbXBv
bmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmJs
dWVDb21wb25lbnQoKSwgcHJlbXVsdFRvLmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5hbHBoYUNvbXBvbmVudCgpLCBwcmVtdWx0
VG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCi0gICAgKTsKLQotICAgIHJldHVybiBtYWtl
VW5QcmVtdWx0aXBsaWVkUkdCQShwcmVtdWx0QmxlbmRlZCk7Ci19Ci0KLUNvbG9yIGJsZW5kV2l0
aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKLXsKLSAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhh
bmRsZSBjb2xvciBzcGFjZXMuCi0gICAgLy8gV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUg
b2YgdGhlIHZhbGlkIGZsYWcgYXQgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uCi0gICAgaWYgKHBy
b2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0gICAgYXV0
byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0KLSAgICByZXR1cm4g
ewotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWRDb21wb25lbnQoKSwgdG9TUkdC
LnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCi0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21T
UkdCLmdyZWVuQ29tcG9uZW50KCksIHRvU1JHQi5ncmVlbkNvbXBvbmVudCgpLCBwcm9ncmVzcyks
Ci0gICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWVDb21wb25lbnQoKSwgdG9TUkdC
LmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9t
U1JHQi5hbHBoYUNvbXBvbmVudCgpLCB0b1NSR0IuYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3Mp
Ci0gICAgfTsKLX0KLQotdm9pZCBDb2xvcjo6dGFnQXNWYWxpZCgpCi17Ci0gICAgbV9jb2xvckRh
dGEucmdiYUFuZEZsYWdzIHw9IHZhbGlkUkdCQUNvbG9yOwotfQotCi1jb25zdCBFeHRlbmRlZENv
bG9yJiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGlzRXh0ZW5kZWQo
KSk7Ci0gICAgcmV0dXJuICptX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yOwotfQotCi1UZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0g
ICAgcmV0dXJuIHRzIDw8IGNvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCk7Ci19Ci0KLVRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbG9yU3BhY2UgY29sb3JTcGFj
ZSkKLXsKLSAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKLSAgICBjYXNlIENvbG9yU3BhY2U6OlNS
R0I6Ci0gICAgICAgIHRzIDw8ICJzUkdCIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2xv
clNwYWNlOjpMaW5lYXJSR0I6Ci0gICAgICAgIHRzIDw8ICJMaW5lYXJSR0IiOwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKLSAgICAgICAgdHMgPDwgIkRp
c3BsYXlQMyI7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24gMjYyMTA0KQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOjI2MjEwNCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKKyNpbmNsdWRlICJF
eHRlbmRlZENvbG9yLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNtYXRoPgor
I2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoRnVuY3Rpb25zLmg+CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvTENoYXIuaD4KKworI2lmIFVTRShDRykKK3R5cGVkZWYgc3RydWN0
IENHQ29sb3IqIENHQ29sb3JSZWY7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKK3N0cnVj
dCBfRDNEQ09MT1JWQUxVRTsKK3R5cGVkZWYgX0QzRENPTE9SVkFMVUUgRDNEQ09MT1JWQUxVRTsK
K3R5cGVkZWYgRDNEQ09MT1JWQUxVRSBEMkRfQ09MT1JfRjsKK3R5cGVkZWYgRDJEX0NPTE9SX0Yg
RDJEMV9DT0xPUl9GOworc3RydWN0IEQyRF9WRUNUT1JfNEY7Cit0eXBlZGVmIEQyRF9WRUNUT1Jf
NEYgRDJEMV9WRUNUT1JfNEY7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKEdUSykKK3R5cGVkZWYg
c3RydWN0IF9HZGtSR0JBIEdka1JHQkE7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdHJ1Y3QgRmxvYXRDb21wb25lbnRzOworCisvLyBDb2xvciB2YWx1ZSB3aXRoIDgtYml0IGNv
bXBvbmVudHMgZm9yIHJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYS4KKy8vIEZvciBoaXN0b3Jp
Y2FsIHJlYXNvbnMsIHN0b3JlZCBhcyBhIDMyLWJpdCBpbnRlZ2VyLCB3aXRoIGFscGhhIGluIHRo
ZSBoaWdoIGJpdHM6IEFSR0IuCitjbGFzcyBTaW1wbGVDb2xvciB7CitwdWJsaWM6CisgICAgY29u
c3RleHByIFNpbXBsZUNvbG9yKHVpbnQzMl90IHZhbHVlID0gMCkgOiBtX3ZhbHVlIHsgdmFsdWUg
fSB7IH0KKworICAgIGNvbnN0ZXhwciB1aW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWU7IH0KKworICAgIGNvbnN0ZXhwciB1aW50OF90IHJlZENvbXBvbmVudCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUgPj4gMTY7IH0KKyAgICBjb25zdGV4cHIgdWludDhfdCBncmVlbkNvbXBv
bmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUgPj4gODsgfQorICAgIGNvbnN0ZXhwciB1aW50
OF90IGJsdWVDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgY29uc3Rl
eHByIHVpbnQ4X3QgYWxwaGFDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDI0
OyB9CisKKyAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGFscGhh
Q29tcG9uZW50KCkgPT0gMHhGRjsgfQorICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgpIGNv
bnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCk7IH0KKworICAgIFN0cmluZyBzZXJpYWxpemF0
aW9uRm9ySFRNTCgpIGNvbnN0OworICAgIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKCkgY29u
c3Q7CisgICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKK307CisKK2Jvb2wgb3Bl
cmF0b3I9PShTaW1wbGVDb2xvciwgU2ltcGxlQ29sb3IpOworYm9vbCBvcGVyYXRvciE9KFNpbXBs
ZUNvbG9yLCBTaW1wbGVDb2xvcik7CisKKy8vIEZJWE1FOiBSZW1vdmUgdGhpcyBhZnRlciBtaWdy
YXRpbmcgdG8gdGhlIG5ldyBuYW1lLgordXNpbmcgUkdCQTMyID0gU2ltcGxlQ29sb3I7CisKK2Nv
bnN0ZXhwciBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKTsKK2NvbnN0ZXhwciBS
R0JBMzIgbWFrZVJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpOworCitSR0JBMzIgbWFr
ZVByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhLCBib29sIGNlaWxp
bmcgPSB0cnVlKTsKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKTsKK1JHQkEz
MiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CitS
R0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyKTsKKworV0VCQ09SRV9FWFBPUlQg
UkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZs
b2F0IGEpOworV0VCQ09SRV9FWFBPUlQgUkdCQTMyIG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaCwg
ZmxvYXQgcywgZmxvYXQgbCwgZmxvYXQgYSk7CitSR0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0EoZmxv
YXQgYywgZmxvYXQgbSwgZmxvYXQgeSwgZmxvYXQgaywgZmxvYXQgYSk7CisKK3VpbnQ4X3Qgcm91
bmRBbmRDbGFtcENvbG9yQ2hhbm5lbChpbnQpOwordWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JD
aGFubmVsKGZsb2F0KTsKKworY2xhc3MgQ29sb3IgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIENvbG9yKCkgeyB9CisKKyAgICAvLyBGSVhNRTogUmVtb3ZlIGFs
bCB0aGVzZSBjb25zdHJ1Y3RvcnMgYW5kIGNyZWF0aW9uIGZ1bmN0aW9ucyBhbmQgcmVwbGFjZSB0
aGUgb25lcyB0aGF0IGFyZSBzdGlsbCBuZWVkZWQgd2l0aCBmcmVlIGZ1bmN0aW9ucy4KKworICAg
IENvbG9yKFJHQkEzMiBjb2xvciwgYm9vbCB2YWxpZCA9IHRydWUpCisgICAgeworICAgICAgICBp
ZiAodmFsaWQpCisgICAgICAgICAgICBzZXRSR0IoY29sb3IpOworICAgIH0KKworICAgIGVudW0g
U2VtYW50aWNUYWcgeyBTZW1hbnRpYyB9OworICAgIENvbG9yKFJHQkEzMiBjb2xvciwgU2VtYW50
aWNUYWcpCisgICAgeworICAgICAgICBzZXRSR0IoY29sb3IpOworICAgICAgICBzZXRJc1NlbWFu
dGljKCk7CisgICAgfQorCisgICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQgYikKKyAgICB7Cisg
ICAgICAgIHNldFJHQihyLCBnLCBiKTsKKyAgICB9CisKKyAgICBDb2xvcihpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQShyLCBnLCBiLCBh
KSk7CisgICAgfQorCisgICAgQ29sb3IoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQg
YSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQTMyRnJvbUZsb2F0cyhyLCBnLCBiLCBh
KSk7CisgICAgfQorCisgICAgLy8gQ3JlYXRlcyBhIG5ldyBjb2xvciBmcm9tIHRoZSBzcGVjaWZp
YyBDTVlLIGFuZCBhbHBoYSB2YWx1ZXMuCisgICAgQ29sb3IoZmxvYXQgYywgZmxvYXQgbSwgZmxv
YXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKKyAgICB7CisgICAgICAgIHNldFJHQihtYWtlUkdCQUZy
b21DTVlLQShjLCBtLCB5LCBrLCBhKSk7CisgICAgfQorCisgICAgV0VCQ09SRV9FWFBPUlQgZXhw
bGljaXQgQ29sb3IoY29uc3QgU3RyaW5nJik7CisgICAgZXhwbGljaXQgQ29sb3IoY29uc3QgY2hh
ciopOworCisgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBl
KQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgaW52YWxp
ZFJHQkFDb2xvciwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlr
ZSBhbiBFeHRlbmRlZENvbG9yIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoIShkZWxldGVkSGFz
aFZhbHVlICYgdmFsaWRSR0JBQ29sb3JCaXQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUg
bXVzdCBub3QgbG9vayBsaWtlIGEgdmFsaWQgUkdCQTMyIENvbG9yIik7CisgICAgICAgIHN0YXRp
Y19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAmICgxIDw8IDQpLCAiQ29sb3IncyBkZWxldGVkIGhh
c2ggdmFsdWUgbXVzdCBoYXZlIHNvbWUgYml0cyBzZXQgdGhhdCBhbiBSR0JBMzIgQ29sb3Igd291
bGRuJ3QgaGF2ZSIpOworICAgICAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBkZWxldGVk
SGFzaFZhbHVlOworICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7CisgICAgfQorCisgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID09IGRlbGV0ZWRIYXNoVmFsdWU7CisgICAgfQor
CisgICAgZXhwbGljaXQgQ29sb3IoV1RGOjpIYXNoVGFibGVFbXB0eVZhbHVlVHlwZSkKKyAgICB7
CisgICAgICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiBpbnZhbGlkUkdCQUNvbG9y
LCAiQ29sb3IncyBlbXB0eSBoYXNoIHZhbHVlIG11c3Qgbm90IGxvb2sgbGlrZSBhbiBFeHRlbmRl
ZENvbG9yIik7CisgICAgICAgIHN0YXRpY19hc3NlcnQoZW1wdHlIYXNoVmFsdWUgJiAoMSA8PCA0
KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRo
YXQgYW4gUkdCQTMyIENvbG9yIHdvdWxkbid0IGhhdmUiKTsKKyAgICAgICAgbV9jb2xvckRhdGEu
cmdiYUFuZEZsYWdzID0gZW1wdHlIYXNoVmFsdWU7CisgICAgICAgIEFTU0VSVCghaXNFeHRlbmRl
ZCgpKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNyZWF0ZXMgYW4gRXh0ZW5kZWRDb2xvci4KKyAg
ICAvLyBGSVhNRTogSWYgdGhlIGNvbG9yU3BhY2UgaXMgc1JHQiBhbmQgdGhlIHZhbHVlcyBjYW4g
YWxsIGJlCisgICAgLy8gY29udmVydGVkIGV4YWN0bHkgdG8gaW50ZWdlcnMsIHdlIHNob3VsZCBt
YWtlIGEgbm9ybWFsIENvbG9yLgorICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKGZsb2F0LCBmbG9h
dCwgZmxvYXQsIGZsb2F0LCBDb2xvclNwYWNlKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
KGNvbnN0IENvbG9yJik7CisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3ImJik7CisKKyAg
ICB+Q29sb3IoKQorICAgIHsKKyAgICAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgICAg
IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CisgICAgfQorCisgICAgLy8gUmV0
dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gSFRNTDUKKyAgICAvLyA8aHR0
cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjZmlsbC1h
bmQtc3Ryb2tlLXN0eWxlcz4gKDEwIFNlcHRlbWJlciAyMDE1KQorICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBzZXJpYWxpemVkKCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
Y3NzVGV4dCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBh
cyBlaXRoZXIgI1JSR0dCQiBvciAjUlJHR0JCQUEKKyAgICBTdHJpbmcgbmFtZUZvclJlbmRlclRy
ZWVBc1RleHQoKSBjb25zdDsKKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlz
RXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgdmFsaWRSR0JBQ29sb3JC
aXQpOyB9CisKKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgp
ID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogcmdiKCkuaXNPcGFxdWUoKTsgfQorICAg
IGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRl
ZCgpLmFscGhhKCkgPiAwLjAgOiByZ2IoKS5pc1Zpc2libGUoKTsgfQorCisgICAgaW50IHJlZCgp
IGNvbnN0IHsgcmV0dXJuIHJnYigpLnJlZENvbXBvbmVudCgpOyB9CisgICAgaW50IGdyZWVuKCkg
Y29uc3QgeyByZXR1cm4gcmdiKCkuZ3JlZW5Db21wb25lbnQoKTsgfQorICAgIGludCBibHVlKCkg
Y29uc3QgeyByZXR1cm4gcmdiKCkuYmx1ZUNvbXBvbmVudCgpOyB9CisgICAgaW50IGFscGhhKCkg
Y29uc3QgeyByZXR1cm4gcmdiKCkuYWxwaGFDb21wb25lbnQoKTsgfQorCisgICAgZmxvYXQgYWxw
aGFBc0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFs
cGhhKCkgOiBzdGF0aWNfY2FzdDxmbG9hdD4ocmdiKCkuYWxwaGFDb21wb25lbnQoKSkgLyAweEZG
OyB9CisKKyAgICBSR0JBMzIgcmdiKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21w
b25lbnRzPiBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpIGNvbnN0OworCisgICAgLy8gVGhpcyB3
aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdCLgorICAgIFdF
QkNPUkVfRVhQT1JUIFNpbXBsZUNvbG9yIHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3Q7
CisKKyAgICAvLyBUaGlzIHdpbGwgY29udmVydCBub24tc1JHQiBjb2xvcnNwYWNlIGNvbG9ycyBp
bnRvIHNSR0IuCisgICAgV0VCQ09SRV9FWFBPUlQgRmxvYXRDb21wb25lbnRzIHRvU1JHQkFDb21w
b25lbnRzTG9zc3koKSBjb25zdDsKKworICAgIENvbG9yIGxpZ2h0KCkgY29uc3Q7CisgICAgQ29s
b3IgZGFyaygpIGNvbnN0OworCisgICAgYm9vbCBpc0RhcmsoKSBjb25zdDsKKyAgICAKKyAgICBX
RUJDT1JFX0VYUE9SVCBmbG9hdCBsaWdodG5lc3MoKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMg
YW4gaW1wbGVtZW50YXRpb24gb2YgUG9ydGVyLUR1ZmYncyAic291cmNlLW92ZXIiIGVxdWF0aW9u
CisgICAgQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImKSBjb25zdDsKKyAgICBDb2xvciBibGVuZFdp
dGhXaGl0ZSgpIGNvbnN0OworCisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnko
ZmxvYXQpIGNvbnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKKwor
ICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIEFsdGVybmF0aXZlUm91bmRpbmcgdmFy
aWFudHMgYnkgc2V0dGxpbmcgb24gYSByb3VuZGluZyBiZWhhdmlvci4KKyAgICBDb2xvciBjb2xv
cldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxm
bG9hdD4pIGNvbnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdB
bHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsKKyAgICBDb2xvciBjb2xvcldpdGhBbHBo
YVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4pIGNvbnN0OworICAgIFdF
QkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5n
KGZsb2F0KSBjb25zdDsKKworICAgIENvbG9yIG9wYXF1ZUNvbG9yKCkgY29uc3QgeyByZXR1cm4g
Y29sb3JXaXRoQWxwaGEoMS4wZik7IH0KKworICAgIC8vIFRydWUgaWYgdGhlIGNvbG9yIG9yaWdp
bmF0ZWQgZnJvbSBhIENTUyBzZW1hbnRpYyBjb2xvciBuYW1lLgorICAgIGJvb2wgaXNTZW1hbnRp
YygpIGNvbnN0IHsgcmV0dXJuICFpc0V4dGVuZGVkKCkgJiYgKG1fY29sb3JEYXRhLnJnYmFBbmRG
bGFncyAmIGlzU2VtYW50aWNSQkdBQ29sb3JCaXQpOyB9CisKKyNpZiBQTEFURk9STShHVEspCisg
ICAgQ29sb3IoY29uc3QgR2RrUkdCQSYpOworICAgIG9wZXJhdG9yIEdka1JHQkEoKSBjb25zdDsK
KyNlbmRpZgorCisjaWYgVVNFKENHKQorICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENHQ29sb3JS
ZWYpOworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENHQ29sb3JSZWYsIFNlbWFudGljVGFnKTsK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oV0lOKQorICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKEQy
RDFfQ09MT1JfRik7CisgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgRDJEMV9DT0xPUl9GKCkg
Y29uc3Q7CisgICAgV0VCQ09SRV9FWFBPUlQgb3BlcmF0b3IgRDJEMV9WRUNUT1JfNEYoKSBjb25z
dDsKKyNlbmRpZgorCisgICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcm
LCBSR0JBMzImKTsKKyAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZ1Zp
ZXcmLCBSR0JBMzImKTsKKyAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IExDaGFy
KiwgdW5zaWduZWQsIFJHQkEzMiYpOworICAgIHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCwgUkdCQTMyJik7CisKKyAgICBzdGF0aWMgY29uc3RleHByIFNp
bXBsZUNvbG9yIGJsYWNrIHsgMHhGRjAwMDAwMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgU2lt
cGxlQ29sb3Igd2hpdGUgeyAweEZGRkZGRkZGIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1w
bGVDb2xvciBkYXJrR3JheSB7IDB4RkY4MDgwODAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNp
bXBsZUNvbG9yIGdyYXkgeyAweEZGQTBBMEEwIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1w
bGVDb2xvciBsaWdodEdyYXkgeyAweEZGQzBDMEMwIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBT
aW1wbGVDb2xvciB0cmFuc3BhcmVudCB7IDB4MDAwMDAwMDAgfTsKKyAgICBzdGF0aWMgY29uc3Rl
eHByIFNpbXBsZUNvbG9yIGN5YW4geyAweEZGMDBGRkZGIH07CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBTaW1wbGVDb2xvciB5ZWxsb3cgeyAweEZGRkZGRjAwIH07CisKKyNpZiBQTEFURk9STShJT1Nf
RkFNSUxZKQorICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgY29tcG9zaXRpb25GaWxs
IHsgMHgzQ0FGQzBFMyB9OworI2Vsc2UKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9y
IGNvbXBvc2l0aW9uRmlsbCB7IDB4RkZFMURENTUgfTsKKyNlbmRpZgorCisgICAgYm9vbCBpc0V4
dGVuZGVkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKG1fY29sb3JEYXRhLnJnYmFB
bmRGbGFncyAmIGludmFsaWRSR0JBQ29sb3IpOworICAgIH0KKyAgICBXRUJDT1JFX0VYUE9SVCBj
b25zdCBFeHRlbmRlZENvbG9yJiBhc0V4dGVuZGVkKCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VY
UE9SVCBDb2xvciYgb3BlcmF0b3I9KGNvbnN0IENvbG9yJik7CisgICAgV0VCQ09SRV9FWFBPUlQg
Q29sb3ImIG9wZXJhdG9yPShDb2xvciYmKTsKKworICAgIC8vIEV4dGVuZGVkIGFuZCBub24tZXh0
ZW5kZWQgY29sb3JzIHdpbGwgYWx3YXlzIGJlIG5vbi1lcXVhbC4KKyAgICBmcmllbmQgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7CisgICAgZnJpZW5kIGJv
b2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3IoY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9y
JiBiKTsKKworICAgIHN0YXRpYyBib29sIGlzQmxhY2tDb2xvcihjb25zdCBDb2xvciYpOworICAg
IHN0YXRpYyBib29sIGlzV2hpdGVDb2xvcihjb25zdCBDb2xvciYpOworCisgICAgdGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4gdm9pZCBlbmNvZGUoRW5jb2RlciYpIGNvbnN0OworICAgIHRlbXBsYXRl
PGNsYXNzIERlY29kZXI+IHN0YXRpYyBPcHRpb25hbDxDb2xvcj4gZGVjb2RlKERlY29kZXImKTsK
KworcHJpdmF0ZToKKyAgICB2b2lkIHNldFJHQihpbnQgciwgaW50IGcsIGludCBiKSB7IHNldFJH
QihtYWtlUkdCKHIsIGcsIGIpKTsgfQorICAgIHZvaWQgc2V0UkdCKFJHQkEzMik7CisgICAgdm9p
ZCBzZXRJc1NlbWFudGljKCkgeyBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgfD0gaXNTZW1hbnRp
Y1JCR0FDb2xvckJpdDsgfQorCisgICAgLy8gMHhfX19fX19fMDAgaXMgYW4gRXh0ZW5kZWRDb2xv
ciBwb2ludGVyLgorICAgIC8vIDB4X19fX19fXzAxIGlzIGFuIGludmFsaWQgUkdCQTMyLgorICAg
IC8vIDB4X19fX19fXzExIGlzIGEgdmFsaWQgUkdCQTMyLgorICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBleHRlbmRlZENvbG9yID0gMHgwOworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpbnZh
bGlkUkdCQUNvbG9yID0gMHgxOworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCB2YWxpZFJHQkFD
b2xvckJpdCA9IDB4MjsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRSR0JBQ29sb3Ig
PSAweDM7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGlzU2VtYW50aWNSQkdBQ29sb3JCaXQg
PSAweDQ7CisKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgZGVsZXRlZEhhc2hWYWx1ZSA9IDB4
RkZGRkZGRkZGRkZGRkZGRDsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgZW1wdHlIYXNoVmFs
dWUgPSAweEZGRkZGRkZGRkZGRkZGRkI7CisKKyAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHRhZ0Fz
VmFsaWQoKTsKKworICAgIHVuaW9uIHsKKyAgICAgICAgdWludDY0X3QgcmdiYUFuZEZsYWdzIHsg
aW52YWxpZFJHQkFDb2xvciB9OworICAgICAgICBFeHRlbmRlZENvbG9yKiBleHRlbmRlZENvbG9y
OworICAgIH0gbV9jb2xvckRhdGE7Cit9OworCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3Im
LCBjb25zdCBDb2xvciYpOworYm9vbCBvcGVyYXRvciE9KGNvbnN0IENvbG9yJiwgY29uc3QgQ29s
b3ImKTsKKworLy8gT25lIG9yIGJvdGggbXVzdCBiZSBleHRlbmRlZCBjb2xvcnMuCitXRUJDT1JF
X0VYUE9SVCBib29sIGV4dGVuZGVkQ29sb3JzRXF1YWwoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xv
ciYpOworCitDb2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpOworQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29s
b3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKTsKKworaW50IGRpZmZl
cmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKKwordWludDE2X3QgZmFz
dE11bHRpcGx5QnkyNTUodWludDE2X3QgdmFsdWUpOwordWludDE2X3QgZmFzdERpdmlkZUJ5MjU1
KHVpbnQxNl90KTsKKworI2lmIFVTRShDRykKK1dFQkNPUkVfRVhQT1JUIENHQ29sb3JSZWYgY2Fj
aGVkQ0dDb2xvcihjb25zdCBDb2xvciYpOworI2VuZGlmCisKK1dFQkNPUkVfRVhQT1JUIFdURjo6
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBDb2xvciYpOwor
V0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVh
bSYsIENvbG9yU3BhY2UpOworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yIGEs
IFNpbXBsZUNvbG9yIGIpCit7CisgICAgcmV0dXJuIGEudmFsdWUoKSA9PSBiLnZhbHVlKCk7Cit9
CisKK2lubGluZSBib29sIG9wZXJhdG9yIT0oU2ltcGxlQ29sb3IgYSwgU2ltcGxlQ29sb3IgYikK
K3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVuZGVkKCkg
fHwgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBleHRlbmRlZENvbG9yc0VxdWFsKGEs
IGIpOworCisgICAgcmV0dXJuIGEubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID09IGIubV9jb2xv
ckRhdGEucmdiYUFuZEZsYWdzOworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IENv
bG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICByZXR1cm4gIShhID09IGIpOworfQorCitp
bmxpbmUgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29u
c3QgQ29sb3ImIGIpCit7CisgICAgaWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgp
KQorICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKKyAgICByZXR1cm4g
KGEubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgfkNvbG9yOjppc1NlbWFudGljUkJHQUNvbG9y
Qml0KSA9PSAoYi5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNS
QkdBQ29sb3JCaXQpOworfQorCitpbmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAor
eworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCkuaGFz
aCgpOworCisgICAgcmV0dXJuIFdURjo6aW50SGFzaChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3Mp
OworfQorCitpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGludCB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oMjU1LCB2YWx1ZSkpOworfQor
CitpbmxpbmUgdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGZsb2F0IHZhbHVlKQor
eworICAgIHJldHVybiBzdGQ6Om1heCgwLmYsIHN0ZDo6bWluKDI1NS5mLCBzdGQ6OnJvdW5kKHZh
bHVlKSkpOworfQorCitpbmxpbmUgdWludDE2X3QgZmFzdE11bHRpcGx5QnkyNTUodWludDE2X3Qg
dmFsdWUpCit7CisgICAgcmV0dXJuICh2YWx1ZSA8PCA4KSAtIHZhbHVlOworfQorCitpbmxpbmUg
dWludDE2X3QgZmFzdERpdmlkZUJ5MjU1KHVpbnQxNl90IHZhbHVlKQoreworICAgIC8vIFdoaWxl
IHRoaXMgaXMgYW4gYXBwcm94aW1hdGUgYWxnb3JpdGhtIGZvciBkaXZpc2lvbiBieSAyNTUsIGl0
IGdpdmVzIHBlcmZlY3RseSBhY2N1cmF0ZSByZXN1bHRzIGZvciAxNi1iaXQgdmFsdWVzLgorICAg
IC8vIEZJWE1FOiBTaW5jZSB0aGlzIGdpdmVzIGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2LWJpdCB2
YWx1ZXMsIHdlIHNob3VsZCBnZXQgdGhpcyBvcHRpbWl6YXRpb24gaW50byBjb21waWxlcnMgbGlr
ZSBjbGFuZy4KKyAgICB1aW50MTZfdCBhcHByb3hpbWF0aW9uID0gdmFsdWUgPj4gODsKKyAgICB1
aW50MTZfdCByZW1haW5kZXIgPSB2YWx1ZSAtIChhcHByb3hpbWF0aW9uICogMjU1KSArIDE7Cisg
ICAgcmV0dXJuIGFwcHJveGltYXRpb24gKyAocmVtYWluZGVyID4+IDgpOworfQorCitpbmxpbmUg
Q29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKK3sKKyAgICByZXR1cm4gYWxwaGEg
PyBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhhbHBo
YS52YWx1ZSgpKSA6ICp0aGlzOworfQorCitpbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFs
cGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29uc3QK
K3sKKyAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3Vu
ZGluZyhhbHBoYS52YWx1ZSgpKSA6ICp0aGlzOworfQorCitpbmxpbmUgUkdCQTMyIENvbG9yOjpy
Z2IoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgQVNTRVJUKCFpc0V4dGVuZGVk
KCkpIGhlcmUsIG9yIHByb2R1Y2UKKyAgICAvLyBhbiBSR0JBMzIgZXF1aXZhbGVudCBmb3IgYW4g
RXh0ZW5kZWRDb2xvci4gSWRlYWxseSB0aGUgZm9ybWVyLAorICAgIC8vIHNvIHdlIGNhbiBhdWRp
dCBhbGwgdGhlIHJnYigpIGNhbGwgc2l0ZXMgdG8gaGFuZGxlIGV4dGVuZGVkLgorICAgIHJldHVy
biB7IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPj4gMzIp
IH07Cit9CisKK2lubGluZSB2b2lkIENvbG9yOjpzZXRSR0IoUkdCQTMyIHJnYikKK3sKKyAgICBt
X2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBzdGF0aWNfY2FzdDx1aW50NjRfdD4ocmdiLnZhbHVl
KCkpIDw8IDMyOworICAgIHRhZ0FzVmFsaWQoKTsKK30KKworaW5saW5lIGJvb2wgQ29sb3I6Omlz
QmxhY2tDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yLmlzRXh0ZW5k
ZWQoKSkgeworICAgICAgICBjb25zdCBFeHRlbmRlZENvbG9yJiBleHRlbmRlZENvbG9yID0gY29s
b3IuYXNFeHRlbmRlZCgpOworICAgICAgICByZXR1cm4gIWV4dGVuZGVkQ29sb3IucmVkKCkgJiYg
IWV4dGVuZGVkQ29sb3IuZ3JlZW4oKSAmJiAhZXh0ZW5kZWRDb2xvci5ibHVlKCkgJiYgZXh0ZW5k
ZWRDb2xvci5hbHBoYSgpID09IDE7CisgICAgfQorCisgICAgcmV0dXJuIGNvbG9yLnJnYigpID09
IENvbG9yOjpibGFjazsKK30KKworaW5saW5lIGJvb2wgQ29sb3I6OmlzV2hpdGVDb2xvcihjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkgeworICAgICAg
ICBjb25zdCBFeHRlbmRlZENvbG9yJiBleHRlbmRlZENvbG9yID0gY29sb3IuYXNFeHRlbmRlZCgp
OworICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvci5yZWQoKSA9PSAxICYmIGV4dGVuZGVkQ29s
b3IuZ3JlZW4oKSA9PSAxICYmIGV4dGVuZGVkQ29sb3IuYmx1ZSgpID09IDEgJiYgZXh0ZW5kZWRD
b2xvci5hbHBoYSgpID09IDE7CisgICAgfQorICAgIAorICAgIHJldHVybiBjb2xvci5yZ2IoKSA9
PSBDb2xvcjo6d2hpdGU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIEVuY29kZXI+Cit2b2lkIENvbG9y
OjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgp
KSB7CisgICAgICAgIGVuY29kZXIgPDwgdHJ1ZTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVu
ZGVkKCkucmVkKCk7CisgICAgICAgIGVuY29kZXIgPDwgYXNFeHRlbmRlZCgpLmdyZWVuKCk7Cisg
ICAgICAgIGVuY29kZXIgPDwgYXNFeHRlbmRlZCgpLmJsdWUoKTsKKyAgICAgICAgZW5jb2RlciA8
PCBhc0V4dGVuZGVkKCkuYWxwaGEoKTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCku
Y29sb3JTcGFjZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZW5jb2RlciA8PCBm
YWxzZTsKKworICAgIGlmICghaXNWYWxpZCgpKSB7CisgICAgICAgIGVuY29kZXIgPDwgZmFsc2U7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgZW5j
b2RlIHdoZXRoZXIgdGhlIGNvbG9yIGlzIHNlbWFudGljLgorCisgICAgdWludDMyX3QgdmFsdWUg
PSByZ2IoKS52YWx1ZSgpOworCisgICAgZW5jb2RlciA8PCB0cnVlOworICAgIGVuY29kZXIgPDwg
dmFsdWU7Cit9CisKK3RlbXBsYXRlPGNsYXNzIERlY29kZXI+CitPcHRpb25hbDxDb2xvcj4gQ29s
b3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGJvb2wgaXNFeHRlbmRlZDsKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzRXh0ZW5kZWQpKQorICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OworCisgICAgaWYgKGlzRXh0ZW5kZWQpIHsKKyAgICAgICAgZmxvYXQgcmVkOworICAg
ICAgICBmbG9hdCBncmVlbjsKKyAgICAgICAgZmxvYXQgYmx1ZTsKKyAgICAgICAgZmxvYXQgYWxw
aGE7CisgICAgICAgIENvbG9yU3BhY2UgY29sb3JTcGFjZTsKKyAgICAgICAgaWYgKCFkZWNvZGVy
LmRlY29kZShyZWQpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLmRlY29kZShncmVlbikpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGJsdWUpKQorICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShhbHBoYSkpCisg
ICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGNvbG9yU3BhY2UpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAg
ICAgcmV0dXJuIENvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCBjb2xvclNwYWNlKTsKKyAg
ICB9CisKKyAgICBib29sIGlzVmFsaWQ7CisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc1ZhbGlk
KSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAgIGlmICghaXNWYWxpZCkKKyAg
ICAgICAgcmV0dXJuIENvbG9yKCk7CisKKyAgICB1aW50MzJfdCB2YWx1ZTsKKyAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKworICAg
IHJldHVybiBDb2xvciB7IFNpbXBsZUNvbG9yIHsgdmFsdWUgfSB9OworfQorCitjb25zdGV4cHIg
UkdCQTMyIG1ha2VSR0IoaW50IHIsIGludCBnLCBpbnQgYikKK3sKKyAgICByZXR1cm4gbWFrZVJH
QkEociwgZywgYiwgMHhGRik7Cit9CisKK2NvbnN0ZXhwciBSR0JBMzIgbWFrZVJHQkEoaW50IHIs
IGludCBnLCBpbnQgYiwgaW50IGEpCit7CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGEsIDB4RkYpKSA8PCAyNCB8IHN0ZDo6bWF4KDAsIHN0
ZDo6bWluKHIsIDB4RkYpKSA8PCAxNiB8IHN0ZDo6bWF4KDAsIHN0ZDo6bWluKGcsIDB4RkYpKSA8
PCA4IHwgc3RkOjptYXgoMCwgc3RkOjptaW4oYiwgMHhGRikpKSB9OworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKK25hbWVzcGFjZSBXVEYgewordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8V2ViQ29yZTo6Q29sb3I+OwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJD
b3JlOjpDb2xvcj47Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5
bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3Iu
aAkocmV2aXNpb24gMjYyMTA0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlQ29sb3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjUsMzcgKzI1LDE0IEBACiAKICNwcmFn
bWEgb25jZQogCi0jaW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkV4dGVuZGVkQ29s
b3IuaCIKKyNpbmNsdWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4K
ICNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CisjaW5jbHVkZSA8
dHVwbGU+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0
aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0xD
aGFyLmg+Ci0KLSNpZiBVU0UoQ0cpCi10eXBlZGVmIHN0cnVjdCBDR0NvbG9yKiBDR0NvbG9yUmVm
OwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4pCi1zdHJ1Y3QgX0QzRENPTE9SVkFMVUU7Ci10
eXBlZGVmIF9EM0RDT0xPUlZBTFVFIEQzRENPTE9SVkFMVUU7Ci10eXBlZGVmIEQzRENPTE9SVkFM
VUUgRDJEX0NPTE9SX0Y7Ci10eXBlZGVmIEQyRF9DT0xPUl9GIEQyRDFfQ09MT1JfRjsKLXN0cnVj
dCBEMkRfVkVDVE9SXzRGOwotdHlwZWRlZiBEMkRfVkVDVE9SXzRGIEQyRDFfVkVDVE9SXzRGOwot
I2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi10eXBlZGVmIHN0cnVjdCBfR2RrUkdCQSBHZGtS
R0JBOwotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IEZsb2F0Q29tcG9u
ZW50czsKLQogLy8gQ29sb3IgdmFsdWUgd2l0aCA4LWJpdCBjb21wb25lbnRzIGZvciByZWQsIGdy
ZWVuLCBibHVlLCBhbmQgYWxwaGEuCiAvLyBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBzdG9yZWQg
YXMgYSAzMi1iaXQgaW50ZWdlciwgd2l0aCBhbHBoYSBpbiB0aGUgaGlnaCBiaXRzOiBBUkdCLgog
Y2xhc3MgU2ltcGxlQ29sb3IgewpAQCAtNjksNiArNDYsOCBAQCBwdWJsaWM6CiAgICAgY29uc3Rl
eHByIHVpbnQ4X3QgYmx1ZUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAg
ICBjb25zdGV4cHIgdWludDhfdCBhbHBoYUNvbXBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWUgPj4gMjQ7IH0KIAorICAgIGNvbnN0ZXhwciBmbG9hdCBhbHBoYUNvbXBvbmVudEFzRmxvYXQo
KSBjb25zdCB7IHJldHVybiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGFDb21wb25lbnQoKSkgLyAw
eEZGOyB9CisKICAgICBjb25zdGV4cHIgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGFs
cGhhQ29tcG9uZW50KCkgPT0gMHhGRjsgfQogICAgIGNvbnN0ZXhwciBib29sIGlzVmlzaWJsZSgp
IGNvbnN0IHsgcmV0dXJuIGFscGhhQ29tcG9uZW50KCk7IH0KIApAQCAtNzYsNiArNTUsMjIgQEAg
cHVibGljOgogICAgIFN0cmluZyBzZXJpYWxpemF0aW9uRm9yQ1NTKCkgY29uc3Q7CiAgICAgU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3Q7CiAKKyAgICBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgY29sb3JXaXRoQWxwaGEodWludDhfdCBhbHBoYSkgY29uc3QgeyBy
ZXR1cm4geyAobV92YWx1ZSAmIDB4MDBGRkZGRkYpIHwgYWxwaGEgPDwgMjQgfTsgfQorCisgICAg
dGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KKyAgICBjb25zdGV4cHIgdWludDhfdCBnZXQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChOIDwgNCk7CisgICAgICAgIGlmIGNvbnN0
ZXhwciAoIU4pCisgICAgICAgICAgICByZXR1cm4gcmVkQ29tcG9uZW50KCk7CisgICAgICAgIGVs
c2UgaWYgY29uc3RleHByIChOID09IDEpCisgICAgICAgICAgICByZXR1cm4gZ3JlZW5Db21wb25l
bnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMikKKyAgICAgICAgICAgIHJl
dHVybiBibHVlQ29tcG9uZW50KCk7CisgICAgICAgIGVsc2UgaWYgY29uc3RleHByIChOID09IDMp
CisgICAgICAgICAgICByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsKKyAgICB9CisKIHByaXZhdGU6
CiAgICAgdWludDMyX3QgbV92YWx1ZSB7IDAgfTsKIH07CkBAIC0xMDEsMjQ0ICs5NiwxMSBAQCBS
R0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgCiB1aW50OF90IHJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwoaW50KTsKIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENvbG9yQ2hhbm5l
bChmbG9hdCk7CiAKLWNsYXNzIENvbG9yIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBDb2xvcigpIHsgfQotCi0gICAgLy8gRklYTUU6IFJlbW92ZSBhbGwgdGhl
c2UgY29uc3RydWN0b3JzIGFuZCBjcmVhdGlvbiBmdW5jdGlvbnMgYW5kIHJlcGxhY2UgdGhlIG9u
ZXMgdGhhdCBhcmUgc3RpbGwgbmVlZGVkIHdpdGggZnJlZSBmdW5jdGlvbnMuCi0KLSAgICBDb2xv
cihSR0JBMzIgY29sb3IsIGJvb2wgdmFsaWQgPSB0cnVlKQotICAgIHsKLSAgICAgICAgaWYgKHZh
bGlkKQotICAgICAgICAgICAgc2V0UkdCKGNvbG9yKTsKLSAgICB9Ci0KLSAgICBlbnVtIFNlbWFu
dGljVGFnIHsgU2VtYW50aWMgfTsKLSAgICBDb2xvcihSR0JBMzIgY29sb3IsIFNlbWFudGljVGFn
KQotICAgIHsKLSAgICAgICAgc2V0UkdCKGNvbG9yKTsKLSAgICAgICAgc2V0SXNTZW1hbnRpYygp
OwotICAgIH0KLQotICAgIENvbG9yKGludCByLCBpbnQgZywgaW50IGIpCi0gICAgewotICAgICAg
ICBzZXRSR0IociwgZywgYik7Ci0gICAgfQotCi0gICAgQ29sb3IoaW50IHIsIGludCBnLCBpbnQg
YiwgaW50IGEpCi0gICAgewotICAgICAgICBzZXRSR0IobWFrZVJHQkEociwgZywgYiwgYSkpOwot
ICAgIH0KLQotICAgIENvbG9yKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCi0g
ICAgewotICAgICAgICBzZXRSR0IobWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywgYiwgYSkpOwot
ICAgIH0KLQotICAgIC8vIENyZWF0ZXMgYSBuZXcgY29sb3IgZnJvbSB0aGUgc3BlY2lmaWMgQ01Z
SyBhbmQgYWxwaGEgdmFsdWVzLgotICAgIENvbG9yKGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHks
IGZsb2F0IGssIGZsb2F0IGEpCi0gICAgewotICAgICAgICBzZXRSR0IobWFrZVJHQkFGcm9tQ01Z
S0EoYywgbSwgeSwgaywgYSkpOwotICAgIH0KLQotICAgIFdFQkNPUkVfRVhQT1JUIGV4cGxpY2l0
IENvbG9yKGNvbnN0IFN0cmluZyYpOwotICAgIGV4cGxpY2l0IENvbG9yKGNvbnN0IGNoYXIqKTsK
LQotICAgIGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAg
ICB7Ci0gICAgICAgIHN0YXRpY19hc3NlcnQoZGVsZXRlZEhhc2hWYWx1ZSAmIGludmFsaWRSR0JB
Q29sb3IsICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4g
RXh0ZW5kZWRDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KCEoZGVsZXRlZEhhc2hWYWx1
ZSAmIHZhbGlkUkdCQUNvbG9yQml0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZhbHVlIG11c3Qg
bm90IGxvb2sgbGlrZSBhIHZhbGlkIFJHQkEzMiBDb2xvciIpOwotICAgICAgICBzdGF0aWNfYXNz
ZXJ0KGRlbGV0ZWRIYXNoVmFsdWUgJiAoMSA8PCA0KSwgIkNvbG9yJ3MgZGVsZXRlZCBoYXNoIHZh
bHVlIG11c3QgaGF2ZSBzb21lIGJpdHMgc2V0IHRoYXQgYW4gUkdCQTMyIENvbG9yIHdvdWxkbid0
IGhhdmUiKTsKLSAgICAgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gZGVsZXRlZEhhc2hW
YWx1ZTsKLSAgICAgICAgQVNTRVJUKCFpc0V4dGVuZGVkKCkpOwotICAgIH0KLQotICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1f
Y29sb3JEYXRhLnJnYmFBbmRGbGFncyA9PSBkZWxldGVkSGFzaFZhbHVlOwotICAgIH0KLQotICAg
IGV4cGxpY2l0IENvbG9yKFdURjo6SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpCi0gICAgewotICAg
ICAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgaW52YWxpZFJHQkFDb2xvciwgIkNv
bG9yJ3MgZW1wdHkgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYW4gRXh0ZW5kZWRDb2xv
ciIpOwotICAgICAgICBzdGF0aWNfYXNzZXJ0KGVtcHR5SGFzaFZhbHVlICYgKDEgPDwgNCksICJD
b2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFu
IFJHQkEzMiBDb2xvciB3b3VsZG4ndCBoYXZlIik7Ci0gICAgICAgIG1fY29sb3JEYXRhLnJnYmFB
bmRGbGFncyA9IGVtcHR5SGFzaFZhbHVlOwotICAgICAgICBBU1NFUlQoIWlzRXh0ZW5kZWQoKSk7
Ci0gICAgfQotCi0gICAgLy8gVGhpcyBjcmVhdGVzIGFuIEV4dGVuZGVkQ29sb3IuCi0gICAgLy8g
RklYTUU6IElmIHRoZSBjb2xvclNwYWNlIGlzIHNSR0IgYW5kIHRoZSB2YWx1ZXMgY2FuIGFsbCBi
ZQotICAgIC8vIGNvbnZlcnRlZCBleGFjdGx5IHRvIGludGVnZXJzLCB3ZSBzaG91bGQgbWFrZSBh
IG5vcm1hbCBDb2xvci4KLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihmbG9hdCwgZmxvYXQsIGZs
b2F0LCBmbG9hdCwgQ29sb3JTcGFjZSk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihjb25z
dCBDb2xvciYpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKENvbG9yJiYpOwotCi0gICAgfkNv
bG9yKCkKLSAgICB7Ci0gICAgICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgICAgICBtX2Nv
bG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigpOwotICAgIH0KLQotICAgIC8vIFJldHVybnMg
dGhlIGNvbG9yIHNlcmlhbGl6ZWQgYWNjb3JkaW5nIHRvIEhUTUw1Ci0gICAgLy8gPGh0dHBzOi8v
aHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI2ZpbGwtYW5kLXN0
cm9rZS1zdHlsZXM+ICgxMCBTZXB0ZW1iZXIgMjAxNSkKLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJp
bmcgc2VyaWFsaXplZCgpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIGNzc1Rl
eHQoKSBjb25zdDsKLQotICAgIC8vIFJldHVybnMgdGhlIGNvbG9yIHNlcmlhbGl6ZWQgYXMgZWl0
aGVyICNSUkdHQkIgb3IgI1JSR0dCQkFBCi0gICAgU3RyaW5nIG5hbWVGb3JSZW5kZXJUcmVlQXNU
ZXh0KCkgY29uc3Q7Ci0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBpc0V4dGVu
ZGVkKCkgfHwgKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIHZhbGlkUkdCQUNvbG9yQml0KTsg
fQotCi0gICAgYm9vbCBpc09wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFz
RXh0ZW5kZWQoKS5hbHBoYSgpID09IDEuMCA6IHJnYigpLmlzT3BhcXVlKCk7IH0KLSAgICBib29s
IGlzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5h
bHBoYSgpID4gMC4wIDogcmdiKCkuaXNWaXNpYmxlKCk7IH0KLQotICAgIGludCByZWQoKSBjb25z
dCB7IHJldHVybiByZ2IoKS5yZWRDb21wb25lbnQoKTsgfQotICAgIGludCBncmVlbigpIGNvbnN0
IHsgcmV0dXJuIHJnYigpLmdyZWVuQ29tcG9uZW50KCk7IH0KLSAgICBpbnQgYmx1ZSgpIGNvbnN0
IHsgcmV0dXJuIHJnYigpLmJsdWVDb21wb25lbnQoKTsgfQotICAgIGludCBhbHBoYSgpIGNvbnN0
IHsgcmV0dXJuIHJnYigpLmFscGhhQ29tcG9uZW50KCk7IH0KLQotICAgIGZsb2F0IGFscGhhQXNG
bG9hdCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5kZWQoKSA/IGFzRXh0ZW5kZWQoKS5hbHBoYSgp
IDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KHJnYigpLmFscGhhQ29tcG9uZW50KCkpIC8gMHhGRjsgfQot
Ci0gICAgUkdCQTMyIHJnYigpIGNvbnN0OwotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Owot
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50
cz4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKLQotICAgIC8vIFRoaXMgd2lsbCBj
b252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KLSAgICBXRUJDT1JF
X0VYUE9SVCBTaW1wbGVDb2xvciB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0OwotCi0g
ICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBz
UkdCLgotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0Q29tcG9uZW50cyB0b1NSR0JBQ29tcG9uZW50
c0xvc3N5KCkgY29uc3Q7Ci0KLSAgICBDb2xvciBsaWdodCgpIGNvbnN0OwotICAgIENvbG9yIGRh
cmsoKSBjb25zdDsKLQotICAgIGJvb2wgaXNEYXJrKCkgY29uc3Q7Ci0gICAgCi0gICAgV0VCQ09S
RV9FWFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIGlzIGFuIGlt
cGxlbWVudGF0aW9uIG9mIFBvcnRlci1EdWZmJ3MgInNvdXJjZS1vdmVyIiBlcXVhdGlvbgotICAg
IENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJikgY29uc3Q7Ci0gICAgQ29sb3IgYmxlbmRXaXRoV2hp
dGUoKSBjb25zdDsKLQotICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0
KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYShmbG9hdCkgY29uc3Q7Ci0KLSAgICAv
LyBGSVhNRTogUmVtb3ZlIHRoZSBuZWVkIGZvciBBbHRlcm5hdGl2ZVJvdW5kaW5nIHZhcmlhbnRz
IGJ5IHNldHRsaW5nIG9uIGEgcm91bmRpbmcgYmVoYXZpb3IuCi0gICAgQ29sb3IgY29sb3JXaXRo
QWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+
KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJu
YXRpdmVSb3VuZGluZyhmbG9hdCkgY29uc3Q7Ci0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFVc2lu
Z0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+KSBjb25zdDsKLSAgICBXRUJDT1JF
X0VYUE9SVCBDb2xvciBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhmbG9h
dCkgY29uc3Q7Ci0KLSAgICBDb2xvciBvcGFxdWVDb2xvcigpIGNvbnN0IHsgcmV0dXJuIGNvbG9y
V2l0aEFscGhhKDEuMGYpOyB9Ci0KLSAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVk
IGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3IgbmFtZS4KLSAgICBib29sIGlzU2VtYW50aWMoKSBj
b25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3Mg
JiBpc1NlbWFudGljUkJHQUNvbG9yQml0KTsgfQotCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIENv
bG9yKGNvbnN0IEdka1JHQkEmKTsKLSAgICBvcGVyYXRvciBHZGtSR0JBKCkgY29uc3Q7Ci0jZW5k
aWYKLQotI2lmIFVTRShDRykKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmKTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmLCBTZW1hbnRpY1RhZyk7Ci0jZW5k
aWYKLQotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihEMkQxX0NP
TE9SX0YpOwotICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIEQyRDFfQ09MT1JfRigpIGNvbnN0
OwotICAgIFdFQkNPUkVfRVhQT1JUIG9wZXJhdG9yIEQyRDFfVkVDVE9SXzRGKCkgY29uc3Q7Ci0j
ZW5kaWYKLQotICAgIHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nJiwgUkdC
QTMyJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmdWaWV3Jiwg
UkdCQTMyJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBMQ2hhciosIHVu
c2lnbmVkLCBSR0JBMzImKTsKLSAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFVD
aGFyKiwgdW5zaWduZWQsIFJHQkEzMiYpOwotCi0gICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVD
b2xvciBibGFjayB7IDB4RkYwMDAwMDAgfTsKLSAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNv
bG9yIHdoaXRlIHsgMHhGRkZGRkZGRiB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29s
b3IgZGFya0dyYXkgeyAweEZGODA4MDgwIH07Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVD
b2xvciBncmF5IHsgMHhGRkEwQTBBMCB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29s
b3IgbGlnaHRHcmF5IHsgMHhGRkMwQzBDMCB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxl
Q29sb3IgdHJhbnNwYXJlbnQgeyAweDAwMDAwMDAwIH07Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBT
aW1wbGVDb2xvciBjeWFuIHsgMHhGRjAwRkZGRiB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2lt
cGxlQ29sb3IgeWVsbG93IHsgMHhGRkZGRkYwMCB9OwotCi0jaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKLSAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGNvbXBvc2l0aW9uRmlsbCB7IDB4
M0NBRkMwRTMgfTsKLSNlbHNlCi0gICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb21w
b3NpdGlvbkZpbGwgeyAweEZGRTFERDU1IH07Ci0jZW5kaWYKLQotICAgIGJvb2wgaXNFeHRlbmRl
ZCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gIShtX2NvbG9yRGF0YS5yZ2JhQW5kRmxh
Z3MgJiBpbnZhbGlkUkdCQUNvbG9yKTsKLSAgICB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgY29uc3Qg
RXh0ZW5kZWRDb2xvciYgYXNFeHRlbmRlZCgpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQg
Q29sb3ImIG9wZXJhdG9yPShjb25zdCBDb2xvciYpOwotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
JiBvcGVyYXRvcj0oQ29sb3ImJik7Ci0KLSAgICAvLyBFeHRlbmRlZCBhbmQgbm9uLWV4dGVuZGVk
IGNvbG9ycyB3aWxsIGFsd2F5cyBiZSBub24tZXF1YWwuCi0gICAgZnJpZW5kIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwotICAgIGZyaWVuZCBib29sIGVx
dWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYik7
Ci0KLSAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBzdGF0
aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKLQotICAgIHRlbXBsYXRlPGNsYXNz
IEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFz
cyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVyJik7Ci0KLXBy
aXZhdGU6Ci0gICAgdm9pZCBzZXRSR0IoaW50IHIsIGludCBnLCBpbnQgYikgeyBzZXRSR0IobWFr
ZVJHQihyLCBnLCBiKSk7IH0KLSAgICB2b2lkIHNldFJHQihSR0JBMzIpOwotICAgIHZvaWQgc2V0
SXNTZW1hbnRpYygpIHsgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzIHw9IGlzU2VtYW50aWNSQkdB
Q29sb3JCaXQ7IH0KLQotICAgIC8vIDB4X19fX19fXzAwIGlzIGFuIEV4dGVuZGVkQ29sb3IgcG9p
bnRlci4KLSAgICAvLyAweF9fX19fX18wMSBpcyBhbiBpbnZhbGlkIFJHQkEzMi4KLSAgICAvLyAw
eF9fX19fX18xMSBpcyBhIHZhbGlkIFJHQkEzMi4KLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qg
ZXh0ZW5kZWRDb2xvciA9IDB4MDsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaW52YWxpZFJH
QkFDb2xvciA9IDB4MTsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgdmFsaWRSR0JBQ29sb3JC
aXQgPSAweDI7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHZhbGlkUkdCQUNvbG9yID0gMHgz
OwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpc1NlbWFudGljUkJHQUNvbG9yQml0ID0gMHg0
OwotCi0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGRlbGV0ZWRIYXNoVmFsdWUgPSAweEZGRkZG
RkZGRkZGRkZGRkQ7Ci0gICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGVtcHR5SGFzaFZhbHVlID0g
MHhGRkZGRkZGRkZGRkZGRkZCOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB0YWdBc1ZhbGlk
KCk7Ci0KLSAgICB1bmlvbiB7Ci0gICAgICAgIHVpbnQ2NF90IHJnYmFBbmRGbGFncyB7IGludmFs
aWRSR0JBQ29sb3IgfTsKLSAgICAgICAgRXh0ZW5kZWRDb2xvciogZXh0ZW5kZWRDb2xvcjsKLSAg
ICB9IG1fY29sb3JEYXRhOwotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiwgY29u
c3QgQ29sb3ImKTsKLWJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7
Ci0KLS8vIE9uZSBvciBib3RoIG11c3QgYmUgZXh0ZW5kZWQgY29sb3JzLgotV0VCQ09SRV9FWFBP
UlQgYm9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsK
LQotQ29sb3IgYmxlbmQoY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91Ymxl
IHByb2dyZXNzKTsKLUNvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBm
cm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7Ci0KLWludCBkaWZmZXJlbmNl
U3F1YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Ci0KIHVpbnQxNl90IGZhc3RNdWx0
aXBseUJ5MjU1KHVpbnQxNl90IHZhbHVlKTsKIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50
MTZfdCk7CiAKLSNpZiBVU0UoQ0cpCi1XRUJDT1JFX0VYUE9SVCBDR0NvbG9yUmVmIGNhY2hlZENH
Q29sb3IoY29uc3QgQ29sb3ImKTsKLSNlbmRpZgordWludDhfdCBjb2xvckZsb2F0VG9SR0JBQnl0
ZShmbG9hdCBmKTsKIAotV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENvbG9yJik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQ29sb3JTcGFjZSk7CiAKIGlu
bGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29sb3IgYSwgU2ltcGxlQ29sb3IgYikKIHsKQEAg
LTM1MCwzNCArMTEyLDYgQEAgaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBT
aQogICAgIHJldHVybiAhKGEgPT0gYik7CiB9CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQotewotICAgIGlmIChhLmlzRXh0ZW5kZWQoKSB8
fCBiLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGV4dGVuZGVkQ29sb3JzRXF1YWwoYSwg
Yik7Ci0KLSAgICByZXR1cm4gYS5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPT0gYi5tX2NvbG9y
RGF0YS5yZ2JhQW5kRmxhZ3M7Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29s
b3ImIGEsIGNvbnN0IENvbG9yJiBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KLWlu
bGluZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25z
dCBDb2xvciYgYikKLXsKLSAgICBpZiAoYS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkp
Ci0gICAgICAgIHJldHVybiBleHRlbmRlZENvbG9yc0VxdWFsKGEsIGIpOwotICAgIHJldHVybiAo
YS5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50aWNSQkdBQ29sb3JC
aXQpID09IChiLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1JC
R0FDb2xvckJpdCk7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5oYXNo
KCk7Ci0KLSAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyk7
Ci19Ci0KIGlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVl
KQogewogICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbigyNTUsIHZhbHVlKSk7CkBAIC00
MDIsMTE2ICsxMzYsMTEgQEAgaW5saW5lIHVpbnQxNl90IGZhc3REaXZpZGVCeTI1NSh1aW50MTZf
dAogICAgIHJldHVybiBhcHByb3hpbWF0aW9uICsgKHJlbWFpbmRlciA+PiA4KTsKIH0KIAotaW5s
aW5lIENvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRp
dmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGFs
cGhhID8gY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmco
YWxwaGEudmFsdWUoKSkgOiAqdGhpczsKLX0KLQotaW5saW5lIENvbG9yIENvbG9yOjpjb2xvcldp
dGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4gYWxwaGEpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGFscGhhID8gY29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZl
Um91bmRpbmcoYWxwaGEudmFsdWUoKSkgOiAqdGhpczsKLX0KLQotaW5saW5lIFJHQkEzMiBDb2xv
cjo6cmdiKCkgY29uc3QKK2lubGluZSB1aW50OF90IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGZsb2F0
IGYpCiB7Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQoKSkgaGVy
ZSwgb3IgcHJvZHVjZQotICAgIC8vIGFuIFJHQkEzMiBlcXVpdmFsZW50IGZvciBhbiBFeHRlbmRl
ZENvbG9yLiBJZGVhbGx5IHRoZSBmb3JtZXIsCi0gICAgLy8gc28gd2UgY2FuIGF1ZGl0IGFsbCB0
aGUgcmdiKCkgY2FsbCBzaXRlcyB0byBoYW5kbGUgZXh0ZW5kZWQuCi0gICAgcmV0dXJuIHsgc3Rh
dGljX2Nhc3Q8dWludDMyX3Q+KG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA+PiAzMikgfTsKLX0K
LQotaW5saW5lIHZvaWQgQ29sb3I6OnNldFJHQihSR0JBMzIgcmdiKQotewotICAgIG1fY29sb3JE
YXRhLnJnYmFBbmRGbGFncyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90PihyZ2IudmFsdWUoKSkgPDwg
MzI7Ci0gICAgdGFnQXNWYWxpZCgpOwotfQotCi1pbmxpbmUgYm9vbCBDb2xvcjo6aXNCbGFja0Nv
bG9yKGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKSB7
Ci0gICAgICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGV4dGVuZGVkQ29sb3IgPSBjb2xvci5hc0V4
dGVuZGVkKCk7Ci0gICAgICAgIHJldHVybiAhZXh0ZW5kZWRDb2xvci5yZWQoKSAmJiAhZXh0ZW5k
ZWRDb2xvci5ncmVlbigpICYmICFleHRlbmRlZENvbG9yLmJsdWUoKSAmJiBleHRlbmRlZENvbG9y
LmFscGhhKCkgPT0gMTsKLSAgICB9Ci0KLSAgICByZXR1cm4gY29sb3IucmdiKCkgPT0gQ29sb3I6
OmJsYWNrOwotfQotCi1pbmxpbmUgYm9vbCBDb2xvcjo6aXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9y
JiBjb2xvcikKLXsKLSAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGNvbnN0
IEV4dGVuZGVkQ29sb3ImIGV4dGVuZGVkQ29sb3IgPSBjb2xvci5hc0V4dGVuZGVkKCk7Ci0gICAg
ICAgIHJldHVybiBleHRlbmRlZENvbG9yLnJlZCgpID09IDEgJiYgZXh0ZW5kZWRDb2xvci5ncmVl
bigpID09IDEgJiYgZXh0ZW5kZWRDb2xvci5ibHVlKCkgPT0gMSAmJiBleHRlbmRlZENvbG9yLmFs
cGhhKCkgPT0gMTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNvbG9yLnJnYigpID09IENvbG9y
Ojp3aGl0ZTsKLX0KLQotdGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4KLXZvaWQgQ29sb3I6OmVuY29k
ZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAotewotICAgIGlmIChpc0V4dGVuZGVkKCkpIHsKLSAg
ICAgICAgZW5jb2RlciA8PCB0cnVlOwotICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5y
ZWQoKTsKLSAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuZ3JlZW4oKTsKLSAgICAgICAg
ZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuYmx1ZSgpOwotICAgICAgICBlbmNvZGVyIDw8IGFzRXh0
ZW5kZWQoKS5hbHBoYSgpOwotICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5jb2xvclNw
YWNlKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlbmNvZGVyIDw8IGZhbHNlOwot
Ci0gICAgaWYgKCFpc1ZhbGlkKCkpIHsKLSAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBlbmNvZGUgd2hl
dGhlciB0aGUgY29sb3IgaXMgc2VtYW50aWMuCi0KLSAgICB1aW50MzJfdCB2YWx1ZSA9IHJnYigp
LnZhbHVlKCk7Ci0KLSAgICBlbmNvZGVyIDw8IHRydWU7Ci0gICAgZW5jb2RlciA8PCB2YWx1ZTsK
LX0KLQotdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KLU9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVj
b2RlKERlY29kZXImIGRlY29kZXIpCi17Ci0gICAgYm9vbCBpc0V4dGVuZGVkOwotICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoaXNFeHRlbmRlZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0KLSAgICBpZiAoaXNFeHRlbmRlZCkgewotICAgICAgICBmbG9hdCByZWQ7Ci0gICAgICAgIGZs
b2F0IGdyZWVuOwotICAgICAgICBmbG9hdCBibHVlOwotICAgICAgICBmbG9hdCBhbHBoYTsKLSAg
ICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlOwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KHJlZCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICBpZiAoIWRl
Y29kZXIuZGVjb2RlKGdyZWVuKSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0g
ICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYmx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwotICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGFscGhhKSkKLSAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29s
b3JTcGFjZSkpCi0gICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICByZXR1
cm4gQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIGNvbG9yU3BhY2UpOwotICAgIH0KLQot
ICAgIGJvb2wgaXNWYWxpZDsKLSAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWQpKQotICAg
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgaWYgKCFpc1ZhbGlkKQotICAgICAgICBy
ZXR1cm4gQ29sb3IoKTsKLQotICAgIHVpbnQzMl90IHZhbHVlOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUodmFsdWUpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotCi0gICAgcmV0dXJu
IENvbG9yIHsgU2ltcGxlQ29sb3IgeyB2YWx1ZSB9IH07CisgICAgLy8gRklYTUU6IENvbnNvbGlk
YXRlIHdpdGggY2xhbXBlZENvbG9yQ29tcG9uZW50KCkuCisgICAgLy8gV2UgdXNlIGxyb3VuZGYg
YW5kIDI1NSBpbnN0ZWFkIG9mIG5leHRhZnRlcmYoMjU2LCAwKSB0byBtYXRjaCBDRydzIHJvdW5k
aW5nCisgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6bWluKHN0YXRpY19jYXN0PGludD4obHJv
dW5kZigyNTUuMGYgKiBmKSksIDI1NSkpOwogfQogCiBjb25zdGV4cHIgUkdCQTMyIG1ha2VSR0Io
aW50IHIsIGludCBnLCBpbnQgYikKQEAgLTUyNiw3ICsxNTUsMTYgQEAgY29uc3RleHByIFJHQkEz
MiBtYWtlUkdCQShpbnQgciwgaW50IGcsIAogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKLW5h
bWVzcGFjZSBXVEYgewotdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViQ29yZTo6Q29s
b3I+OwotdGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxXZWJDb3JlOjpDb2xvcj47CituYW1l
c3BhY2Ugc3RkIHsKKwordGVtcGxhdGU8PgorY2xhc3MgdHVwbGVfc2l6ZTxXZWJDb3JlOjpTaW1w
bGVDb2xvcj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6OnNpemVfdCwgND4g
eworfTsKKwordGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KK2NsYXNzIHR1cGxlX2VsZW1lbnQ8Tiwg
V2ViQ29yZTo6U2ltcGxlQ29sb3I+IHsKK3B1YmxpYzoKKyAgICB1c2luZyB0eXBlID0gdWludDhf
dDsKK307CisKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400171</attachid>
            <date>2020-05-24 11:12:27 -0700</date>
            <delta_ts>2020-05-24 11:13:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>p2.diff</filename>
            <type>text/plain</type>
            <size>41754</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xv
ci5jcHAJKHJldmlzaW9uIDI2MjEwOSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvQ29sb3IuY3BwOjI2MjEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2xvci5oIgorCisjaW5jbHVkZSAiQW5pbWF0aW9uVXRp
bGl0aWVzLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJIYXNoVG9v
bHMuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1i
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBsaWdodGVuZWRC
bGFjayB7IDB4RkY1NDU0NTQgfTsKK3N0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgZGFya2Vu
ZWRXaGl0ZSB7IDB4RkZBQkFCQUIgfTsKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBwcmVtdWx0
aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25lZCBhLCBib29sIGNlaWxpbmcgPSB0cnVl
KQoreworICAgIHJldHVybiBmYXN0RGl2aWRlQnkyNTUoY2VpbGluZyA/IGMgKiBhICsgMjU0IDog
YyAqIGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHVucHJlbXVsdGlwbGllZENoYW5u
ZWwodW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAgICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5
MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKworUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShp
bnQgciwgaW50IGcsIGludCBiLCBpbnQgYSwgYm9vbCBjZWlsaW5nKQoreworICAgIHJldHVybiBt
YWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhLCBjZWlsaW5nKSwgcHJlbXVsdGlwbGll
ZENoYW5uZWwoZywgYSwgY2VpbGluZyksIHByZW11bHRpcGxpZWRDaGFubmVsKGIsIGEsIGNlaWxp
bmcpLCBhKTsKK30KKworUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShSR0JBMzIgcGl4ZWxD
b2xvcikKK3sKKyAgICBpZiAocGl4ZWxDb2xvci5pc09wYXF1ZSgpKQorICAgICAgICByZXR1cm4g
cGl4ZWxDb2xvcjsKKyAgICByZXR1cm4gbWFrZVByZW11bHRpcGxpZWRSR0JBKHBpeGVsQ29sb3Iu
cmVkQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuZ3JlZW5Db21wb25lbnQoKSwgcGl4ZWxDb2xvci5i
bHVlQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYWxwaGFDb21wb25lbnQoKSk7Cit9CisKK1JHQkEz
MiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sK
KyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBhKSwgdW5wcmVt
dWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7
Cit9CisKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShSR0JBMzIgcGl4ZWxDb2xvcikK
K3sKKyAgICBpZiAocGl4ZWxDb2xvci5pc1Zpc2libGUoKSAmJiAhcGl4ZWxDb2xvci5pc09wYXF1
ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEocGl4ZWxDb2xvci5y
ZWRDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5ncmVlbkNvbXBvbmVudCgpLCBwaXhlbENvbG9yLmJs
dWVDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5hbHBoYUNvbXBvbmVudCgpKTsKKyAgICByZXR1cm4g
cGl4ZWxDb2xvcjsKK30KKworc3RhdGljIGludCBjb2xvckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBm
KQoreworICAgIC8vIFdlIHVzZSBscm91bmRmIGFuZCAyNTUgaW5zdGVhZCBvZiBuZXh0YWZ0ZXJm
KDI1NiwgMCkgdG8gbWF0Y2ggQ0cncyByb3VuZGluZworICAgIHJldHVybiBzdGQ6Om1heCgwLCBz
dGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYoMjU1LjBmICogZikpLCAyNTUpKTsKK30K
KworUkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZsb2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIs
IGZsb2F0IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JBKGNvbG9yRmxvYXRUb1JHQkFCeXRlKHIp
LCBjb2xvckZsb2F0VG9SR0JBQnl0ZShnKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYiksIGNvbG9y
RmxvYXRUb1JHQkFCeXRlKGEpKTsKK30KKworUkdCQTMyIG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQg
aHVlLCBmbG9hdCBzYXR1cmF0aW9uLCBmbG9hdCBsaWdodG5lc3MsIGZsb2F0IGFscGhhKQorewor
ICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMjU1LjA7CisgICAgRmxvYXRDb21wb25lbnRz
IGZsb2F0UmVzdWx0ID0gaHNsVG9TUkdCKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFs
cGhhIH0pOworICAgIHJldHVybiBtYWtlUkdCQSgKKyAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQu
Y29tcG9uZW50c1swXSAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQu
Y29tcG9uZW50c1sxXSAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQu
Y29tcG9uZW50c1syXSAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgcm91bmQoZmxvYXRSZXN1bHQu
Y29tcG9uZW50c1szXSAqIHNjYWxlRmFjdG9yKSk7Cit9CisKK1JHQkEzMiBtYWtlUkdCQUZyb21D
TVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQoreworICAg
IGRvdWJsZSBjb2xvcnMgPSAxIC0gazsKKyAgICBpbnQgciA9IHN0YXRpY19jYXN0PGludD4obmV4
dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEgLSBjKSkpOworICAgIGludCBnID0gc3RhdGlj
X2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIG0pKSk7CisgICAg
aW50IGIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAqICgx
IC0geSkpKTsKKyAgICByZXR1cm4gbWFrZVJHQkEociwgZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KG5leHRhZnRlcigyNTYsIDApICogYSkpOworfQorCisvLyBvcmlnaW5hbGx5IG1vdmVkIGhlcmUg
ZnJvbSB0aGUgQ1NTIHBhcnNlcgordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Citz
dGF0aWMgaW5saW5lIGJvb2wgcGFyc2VIZXhDb2xvckludGVybmFsKGNvbnN0IENoYXJhY3RlclR5
cGUqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMyJiByZ2IpCit7CisgICAgaWYgKGxlbmd0
aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAhPSA2ICYmIGxlbmd0aCAhPSA4KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgdW5zaWduZWQgdmFsdWUgPSAwOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBpZiAoIWlzQVNDSUlIZXhE
aWdpdChuYW1lW2ldKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgdmFsdWUg
PDw9IDQ7CisgICAgICAgIHZhbHVlIHw9IHRvQVNDSUlIZXhWYWx1ZShuYW1lW2ldKTsKKyAgICB9
CisgICAgaWYgKGxlbmd0aCA9PSA2KSB7CisgICAgICAgIHJnYiA9IHsgMHhGRjAwMDAwMCB8IHZh
bHVlIH07CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAobGVuZ3RoID09IDgp
IHsKKyAgICAgICAgLy8gV2UgcGFyc2VkIHRoZSB2YWx1ZXMgaW50byBSR0JBIG9yZGVyLCBidXQg
dGhlIFJHQkEzMiB0eXBlCisgICAgICAgIC8vIGV4cGVjdHMgdGhlbSB0byBiZSBpbiBBUkdCIG9y
ZGVyLCBzbyB3ZSByaWdodCByb3RhdGUgZWlnaHQgYml0cy4KKyAgICAgICAgcmdiID0geyB2YWx1
ZSA8PCAyNCB8IHZhbHVlID4+IDggfTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IGlmIChsZW5ndGggPT0gNCkgeworICAgICAgICAvLyAjYWJjZCBjb252ZXJ0cyB0byBkZGFhYmJj
YyBpbiBSR0JBMzIuCisgICAgICAgIHJnYiA9IHsgKHZhbHVlICYgMHhGKSA8PCAyOCB8ICh2YWx1
ZSAmIDB4RikgPDwgMjQKKyAgICAgICAgICAgIHwgKHZhbHVlICYgMHhGMDAwKSA8PCA4IHwgKHZh
bHVlICYgMHhGMDAwKSA8PCA0CisgICAgICAgICAgICB8ICh2YWx1ZSAmIDB4RjAwKSA8PCA0IHwg
KHZhbHVlICYgMHhGMDApCisgICAgICAgICAgICB8ICh2YWx1ZSAmIDB4RjApIHwgKHZhbHVlICYg
MHhGMCkgPj4gNCB9OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgLy8gI2FiYyBj
b252ZXJ0cyB0byAjYWFiYmNjCisgICAgcmdiID0geyAweEZGMDAwMDAwCisgICAgICAgIHwgKHZh
bHVlICYgMHhGMDApIDw8IDEyIHwgKHZhbHVlICYgMHhGMDApIDw8IDgKKyAgICAgICAgfCAodmFs
dWUgJiAweEYwKSA8PCA4IHwgKHZhbHVlICYgMHhGMCkgPDwgNAorICAgICAgICB8ICh2YWx1ZSAm
IDB4RikgPDwgNCB8ICh2YWx1ZSAmIDB4RikgfTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBMQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3Ro
LCBSR0JBMzImIHJnYikKK3sKKyAgICByZXR1cm4gcGFyc2VIZXhDb2xvckludGVybmFsKG5hbWUs
IGxlbmd0aCwgcmdiKTsKK30KKworYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBVQ2hh
ciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikKK3sKKyAgICByZXR1cm4gcGFy
c2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwgcmdiKTsKK30KKworYm9vbCBDb2xvcjo6
cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUsIFJHQkEzMiYgcmdiKQoreworICAgIHVu
c2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAobmFtZS5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIHBh
cnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpLCBuYW1lLmxlbmd0aCgpLCByZ2IpOworICAg
IHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2KCksIG5hbWUubGVuZ3RoKCks
IHJnYik7Cit9CisKK2Jvb2wgQ29sb3I6OnBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nVmlldyYg
bmFtZSwgUkdCQTMyJiByZ2IpCit7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgo
KTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChuYW1l
LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gcGFyc2VIZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4
KCksIG5hbWUubGVuZ3RoKCksIHJnYik7CisgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5j
aGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5ndGgoKSwgcmdiKTsKK30KKworaW50IGRpZmZlcmVuY2VT
cXVhcmVkKGNvbnN0IENvbG9yJiBjMSwgY29uc3QgQ29sb3ImIGMyKQoreworICAgIC8vIEZJWE1F
OiBUaGlzIGlzIGFzc3VtaW5nIHRoYXQgdGhlIGNvbG9ycyBhcmUgaW4gdGhlIHNhbWUgY29sb3Jz
cGFjZS4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFibHkgcmV0dXJuIGEgZmxvYXRp
bmcgcG9pbnQgbnVtYmVyLCBidXQgbWFueSBvZiB0aGUgY2FsbAorICAgIC8vIHNpdGVzIGhhdmUg
cGlja2VkIGNvbXBhcmlzb24gdmFsdWVzIGJhc2VkIG9uIGZlZWwuIFdlJ2QgbmVlZCB0byBicmVh
ayBvdXQKKyAgICAvLyBvdXIgbG9nYXJpdGhtIHRhYmxlcyB0byBjaGFuZ2UgdGhlbSA6KQorICAg
IGludCBjMVJlZCA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1
NSA6IGMxLnJnYigpLnJlZENvbXBvbmVudCgpOworICAgIGludCBjMUdyZWVuID0gYzEuaXNFeHRl
bmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBjMS5yZ2IoKS5ncmVlbkNv
bXBvbmVudCgpOworICAgIGludCBjMUJsdWUgPSBjMS5pc0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVu
ZGVkKCkuYmx1ZSgpICogMjU1IDogYzEucmdiKCkuYmx1ZUNvbXBvbmVudCgpOworICAgIGludCBj
MlJlZCA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMy
LnJnYigpLnJlZENvbXBvbmVudCgpOworICAgIGludCBjMkdyZWVuID0gYzIuaXNFeHRlbmRlZCgp
ID8gYzIuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBjMi5yZ2IoKS5ncmVlbkNvbXBvbmVu
dCgpOworICAgIGludCBjMkJsdWUgPSBjMi5pc0V4dGVuZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCku
Ymx1ZSgpICogMjU1IDogYzIucmdiKCkuYmx1ZUNvbXBvbmVudCgpOworICAgIGludCBkUiA9IGMx
UmVkIC0gYzJSZWQ7CisgICAgaW50IGRHID0gYzFHcmVlbiAtIGMyR3JlZW47CisgICAgaW50IGRC
ID0gYzFCbHVlIC0gYzJCbHVlOworICAgIHJldHVybiBkUiAqIGRSICsgZEcgKiBkRyArIGRCICog
ZEI7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgTmFtZWRDb2xvciogZmluZE5hbWVkQ29sb3Io
Y29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGNoYXIgYnVmZmVyWzY0XTsgLy8gZWFzaWx5IGJp
ZyBlbm91Z2ggZm9yIHRoZSBsb25nZXN0IGNvbG9yIG5hbWUKKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSBuYW1lLmxlbmd0aCgpOworICAgIGlmIChsZW5ndGggPiBzaXplb2YoYnVmZmVyKSAtIDEpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgeworICAgICAgICBVQ2hhciBjID0gbmFtZVtpXTsKKyAgICAgICAgaWYgKCFjIHx8
ICFXVEY6OmlzQVNDSUkoYykpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
YnVmZmVyW2ldID0gdG9BU0NJSUxvd2VyKHN0YXRpY19jYXN0PGNoYXI+KGMpKTsKKyAgICB9Cisg
ICAgYnVmZmVyW2xlbmd0aF0gPSAnXDAnOworICAgIHJldHVybiBmaW5kQ29sb3IoYnVmZmVyLCBs
ZW5ndGgpOworfQorCitDb2xvcjo6Q29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGlm
IChuYW1lWzBdID09ICcjJykgeworICAgICAgICBSR0JBMzIgY29sb3I7CisgICAgICAgIGJvb2wg
dmFsaWQ7CisKKyAgICAgICAgaWYgKG5hbWUuaXM4Qml0KCkpCisgICAgICAgICAgICB2YWxpZCA9
IHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEs
IGNvbG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsaWQgPSBwYXJzZUhleENvbG9y
KG5hbWUuY2hhcmFjdGVyczE2KCkgKyAxLCBuYW1lLmxlbmd0aCgpIC0gMSwgY29sb3IpOworCisg
ICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHNldFJHQihjb2xvcik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgaWYgKGF1dG8qIGZvdW5kQ29sb3IgPSBmaW5kTmFtZWRDb2xvcihuYW1lKSkK
KyAgICAgICAgICAgIHNldFJHQih7IGZvdW5kQ29sb3ItPkFSR0JWYWx1ZSB9KTsKKyAgICB9Cit9
CisKK0NvbG9yOjpDb2xvcihjb25zdCBjaGFyKiBuYW1lKQoreworICAgIGlmIChuYW1lWzBdID09
ICcjJykgeworICAgICAgICBTaW1wbGVDb2xvciBjb2xvcjsKKyAgICAgICAgaWYgKHBhcnNlSGV4
Q29sb3IocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCZuYW1lWzFdKSwgc3RkOjpzdHJs
ZW4oJm5hbWVbMV0pLCBjb2xvcikpCisgICAgICAgICAgICBzZXRSR0IoY29sb3IpOworICAgIH0g
ZWxzZSBpZiAoYXV0byogZm91bmRDb2xvciA9IGZpbmRDb2xvcihuYW1lLCBzdHJsZW4obmFtZSkp
KQorICAgICAgICBzZXRSR0IoeyBmb3VuZENvbG9yLT5BUkdCVmFsdWUgfSk7Cit9CisKK0NvbG9y
OjpDb2xvcihjb25zdCBDb2xvciYgb3RoZXIpCisgICAgOiBtX2NvbG9yRGF0YShvdGhlci5tX2Nv
bG9yRGF0YSkKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBtX2NvbG9yRGF0YS5l
eHRlbmRlZENvbG9yLT5yZWYoKTsKK30KKworQ29sb3I6OkNvbG9yKENvbG9yJiYgb3RoZXIpCit7
CisgICAgKnRoaXMgPSBXVEZNb3ZlKG90aGVyKTsKK30KKworQ29sb3I6OkNvbG9yKGZsb2F0IGMx
LCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xvclNwYWNlIGNvbG9yU3BhY2Up
CisgICAgOiBDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEsIGMyLCBjMywgYWxwaGEsIGNv
bG9yU3BhY2UpKQoreworfQorCitDb2xvcjo6Q29sb3IoUmVmPEV4dGVuZGVkQ29sb3I+JiYgZXh0
ZW5kZWRDb2xvcikKK3sKKyAgICAvLyBaZXJvIHRoZSB1bmlvbiwganVzdCBpbiBjYXNlIGEgMzIt
Yml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCisgICAgLy8gdG9wIDMyIGJpdHMgd2hlbiBjb3B5
aW5nIHRoZSBleHRlbmRlZENvbG9yIHBvaW50ZXIgYmVsb3cuCisgICAgbV9jb2xvckRhdGEucmdi
YUFuZEZsYWdzID0gMDsKKyAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yID0gJmV4dGVuZGVk
Q29sb3IubGVha1JlZigpOworICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOworfQorCitDb2xvciYg
Q29sb3I6Om9wZXJhdG9yPShjb25zdCBDb2xvciYgb3RoZXIpCit7CisgICAgaWYgKCp0aGlzID09
IG90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQor
ICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJlZigpOworCisgICAgbV9jb2xv
ckRhdGEgPSBvdGhlci5tX2NvbG9yRGF0YTsKKworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAg
ICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJlZigpOworICAgIHJldHVybiAqdGhpczsK
K30KKworQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oQ29sb3ImJiBvdGhlcikKK3sKKyAgICBpZiAo
KnRoaXMgPT0gb3RoZXIpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGlmIChpc0V4dGVu
ZGVkKCkpCisgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CisKKyAg
ICBtX2NvbG9yRGF0YSA9IG90aGVyLm1fY29sb3JEYXRhOworICAgIG90aGVyLm1fY29sb3JEYXRh
LnJnYmFBbmRGbGFncyA9IGludmFsaWRSR0JBQ29sb3I7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9
CisKK1N0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvckhUTUwoKSBjb25zdAorewor
ICAgIGlmIChpc09wYXF1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChy
ZWRDb21wb25lbnQoKSwgMiwgTG93ZXJjYXNlKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIsIExv
d2VyY2FzZSksIGhleChibHVlQ29tcG9uZW50KCksIDIsIExvd2VyY2FzZSkpOworICAgIHJldHVy
biBzZXJpYWxpemF0aW9uRm9yQ1NTKCk7Cit9CisKK1N0cmluZyBDb2xvcjo6c2VyaWFsaXplZCgp
IGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIGFzRXh0ZW5k
ZWQoKS5jc3NUZXh0KCk7CisgICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRpb25Gb3JIVE1MKCk7
Cit9CisKK3N0YXRpYyBjaGFyIGRlY2ltYWxEaWdpdCh1bnNpZ25lZCBudW1iZXIpCit7CisgICAg
QVNTRVJUKG51bWJlciA8IDEwKTsKKyAgICByZXR1cm4gJzAnICsgbnVtYmVyOworfQorCitzdGF0
aWMgc3RkOjphcnJheTxjaGFyLCA0PiBmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9uYWxBbHBoYVZh
bHVlKHVpbnQ4X3QgYWxwaGEpCit7CisgICAgQVNTRVJUKGFscGhhID4gMCk7CisgICAgQVNTRVJU
KGFscGhhIDwgMHhGRik7CisgICAgaWYgKCgoYWxwaGEgKiAxMDAgKyAweDdGKSAvIDB4RkYgKiAw
eEZGICsgNTApIC8gMTAwICE9IGFscGhhKQorICAgICAgICByZXR1cm4geyB7IGRlY2ltYWxEaWdp
dChhbHBoYSAqIDEwIC8gMHhGRiAlIDEwKSwgZGVjaW1hbERpZ2l0KGFscGhhICogMTAwIC8gMHhG
RiAlIDEwKSwgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwMDAgKyAweDdGKSAvIDB4RkYgJSAxMCks
ICdcMCcgfSB9OworICAgIGlmIChpbnQgdGhpcmREaWdpdCA9IChhbHBoYSAqIDEwMCArIDB4N0Yp
IC8gMHhGRiAlIDEwKQorICAgICAgICByZXR1cm4geyB7IGRlY2ltYWxEaWdpdChhbHBoYSAqIDEw
IC8gMHhGRiksIGRlY2ltYWxEaWdpdCh0aGlyZERpZ2l0KSwgJ1wwJywgJ1wwJyB9IH07CisgICAg
cmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoKGFscGhhICogMTAgKyAweDdGKSAvIDB4RkYpLCAnXDAn
LCAnXDAnLCAnXDAnIH0gfTsKK30KKworU3RyaW5nIFNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9u
Rm9yQ1NTKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGFscGhhQ29tcG9uZW50KCkpIHsKKyAgICBj
YXNlIDA6CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2JhKCIsIHJlZENvbXBvbmVudCgp
LCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29tcG9uZW50KCksICIsIDApIik7
CisgICAgY2FzZSAweEZGOgorICAgICAgICByZXR1cm4gbWFrZVN0cmluZygicmdiKCIsIHJlZENv
bXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29tcG9uZW50KCks
ICcpJyk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInJnYmEoIiwg
cmVkQ29tcG9uZW50KCksICIsICIsIGdyZWVuQ29tcG9uZW50KCksICIsICIsIGJsdWVDb21wb25l
bnQoKSwgIiwgMC4iLCBmcmFjdGlvbkRpZ2l0c0ZvckZyYWN0aW9uYWxBbHBoYVZhbHVlKGFscGhh
Q29tcG9uZW50KCkpLmRhdGEoKSwgJyknKTsKKyAgICB9Cit9CisKK1N0cmluZyBDb2xvcjo6Y3Nz
VGV4dCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIGFz
RXh0ZW5kZWQoKS5jc3NUZXh0KCk7CisgICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRpb25Gb3JD
U1MoKTsKK30KKworU3RyaW5nIFJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1Rl
eHQoKSBjb25zdAoreworICAgIGlmIChhbHBoYUNvbXBvbmVudCgpIDwgMHhGRikKKyAgICAgICAg
cmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkQ29tcG9uZW50KCksIDIpLCBoZXgoZ3JlZW5D
b21wb25lbnQoKSwgMiksIGhleChibHVlQ29tcG9uZW50KCksIDIpLCBoZXgoYWxwaGFDb21wb25l
bnQoKSwgMikpOworICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBvbmVudCgp
LCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVudCgpLCAyKSk7
Cit9CisKK1N0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdAorewor
ICAgIC8vIEZJWE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29sb3JzLgorICAgIHJldHVybiByZ2IoKS5z
ZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgpOworfQorCitDb2xvciBDb2xvcjo6bGln
aHQoKSBjb25zdAoreworICAgIC8vIEhhcmRjb2RlIHRoaXMgY29tbW9uIGNhc2UgZm9yIHNwZWVk
LgorICAgIGlmIChyZ2IoKSA9PSBibGFjaykKKyAgICAgICAgcmV0dXJuIGxpZ2h0ZW5lZEJsYWNr
OworICAgIAorICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYs
IDAuMGYpOworCisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5
KCk7CisKKyAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOworCisgICAgaWYgKHYg
PT0gMC4wZikKKyAgICAgICAgcmV0dXJuIGxpZ2h0ZW5lZEJsYWNrLmNvbG9yV2l0aEFscGhhKGFs
cGhhKCkpOworCisgICAgZmxvYXQgbXVsdGlwbGllciA9IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMz
ZikgLyB2OworCisgICAgcmV0dXJuIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBs
aWVyICogciAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBs
aWVyICogZyAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBs
aWVyICogYiAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgYWxwaGEoKQorICAgIH07Cit9CisKK0Nv
bG9yIENvbG9yOjpkYXJrKCkgY29uc3QKK3sKKyAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBj
YXNlIGZvciBzcGVlZC4KKyAgICBpZiAocmdiKCkgPT0gd2hpdGUpCisgICAgICAgIHJldHVybiBk
YXJrZW5lZFdoaXRlOworICAgIAorICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gbmV4dGFm
dGVyZigyNTYuMGYsIDAuMGYpOworCisgICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29t
cG9uZW50c0xvc3N5KCk7CisKKyAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOwor
ICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1heCgwLjBmLCAodiAtIDAuMzNmKSAvIHYpOwor
CisgICAgcmV0dXJuIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAq
IHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAq
IHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAq
IHNjYWxlRmFjdG9yKSwKKyAgICAgICAgYWxwaGEoKQorICAgIH07Cit9CisKK2Jvb2wgQ29sb3I6
OmlzRGFyaygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJl
IHVzaW5nIGx1bWluYW5jZS4KKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25l
bnRzTG9zc3koKTsKKyAgICBmbG9hdCBsYXJnZXN0Tm9uQWxwaGFDaGFubmVsID0gc3RkOjptYXgo
eyByLCBnLCBiIH0pOworICAgIHJldHVybiBhID4gMC41ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5u
ZWwgPCAwLjU7Cit9CisKK2Zsb2F0IENvbG9yOjpsaWdodG5lc3MoKSBjb25zdAoreworICAgIC8v
IEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9pZCBjb252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2
aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMgZm9yIEhTTC4KKyAgICByZXR1cm4gV2ViQ29y
ZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRzTG9zc3koKSk7Cit9CisKK0NvbG9yIENvbG9y
OjpibGVuZChjb25zdCBDb2xvciYgc291cmNlKSBjb25zdAoreworICAgIGlmICghaXNWaXNpYmxl
KCkgfHwgc291cmNlLmlzT3BhcXVlKCkpCisgICAgICAgIHJldHVybiBzb3VyY2U7CisKKyAgICBp
ZiAoIXNvdXJjZS5hbHBoYSgpKQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICBhdXRvIFtz
ZWxmUiwgc2VsZkcsIHNlbGZCLCBzZWxmQV0gPSB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwor
ICAgIGF1dG8gW3NvdXJjZVIsIHNvdXJjZUcsIHNvdXJjZUIsIHNvdXJjZUFdID0gc291cmNlLnRv
U1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisKKyAgICBpbnQgZCA9IDB4RkYgKiAoc2VsZkEgKyBz
b3VyY2VBKSAtIHNlbGZBICogc291cmNlQTsKKyAgICBpbnQgYSA9IGQgLyAweEZGOworICAgIGlu
dCByID0gKHNlbGZSICogc2VsZkEgKiAoMHhGRiAtIHNvdXJjZUEpICsgMHhGRiAqIHNvdXJjZUEg
KiBzb3VyY2VSKSAvIGQ7CisgICAgaW50IGcgPSAoc2VsZkcgKiBzZWxmQSAqICgweEZGIC0gc291
cmNlQSkgKyAweEZGICogc291cmNlQSAqIHNvdXJjZUcpIC8gZDsKKyAgICBpbnQgYiA9IChzZWxm
QiAqIHNlbGZBICogKDB4RkYgLSBzb3VyY2VBKSArIDB4RkYgKiBzb3VyY2VBICogc291cmNlQikg
LyBkOworCisgICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcsIGIsIGEpOworfQorCitDb2xvciBDb2xv
cjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAoreworICAgIGNvbnN0ZXhwciBpbnQgc3RhcnRBbHBo
YSA9IDE1MzsgLy8gNjAlCisgICAgY29uc3RleHByIGludCBlbmRBbHBoYSA9IDIwNDsgLy8gODAl
OworICAgIGNvbnN0ZXhwciBpbnQgYWxwaGFJbmNyZW1lbnQgPSAxNzsKKworICAgIGF1dG8gYmxl
bmRDb21wb25lbnQgPSBbXShpbnQgYywgaW50IGEpIC0+IGludCB7CisgICAgICAgIGZsb2F0IGFs
cGhhID0gYSAvIDI1NS4wZjsKKyAgICAgICAgaW50IHdoaXRlQmxlbmQgPSAyNTUgLSBhOworICAg
ICAgICBjIC09IHdoaXRlQmxlbmQ7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGMg
LyBhbHBoYSk7CisgICAgfTsKKworICAgIC8vIElmIHRoZSBjb2xvciBjb250YWlucyBhbHBoYSBh
bHJlYWR5LCB3ZSBsZWF2ZSBpdCBhbG9uZS4KKyAgICBpZiAoIWlzT3BhcXVlKCkpCisgICAgICAg
IHJldHVybiAqdGhpczsKKworICAgIGF1dG8gW2V4aXN0aW5nUiwgZXhpc3RpbmdHLCBleGlzdGlu
Z0IsIGV4aXN0aW5nQWxwaGFdID0gdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsKKworICAgIENv
bG9yIHJlc3VsdDsKKyAgICBmb3IgKGludCBhbHBoYSA9IHN0YXJ0QWxwaGE7IGFscGhhIDw9IGVu
ZEFscGhhOyBhbHBoYSArPSBhbHBoYUluY3JlbWVudCkgeworICAgICAgICAvLyBXZSBoYXZlIGEg
c29saWQgY29sb3IuICBDb252ZXJ0IHRvIGFuIGVxdWl2YWxlbnQgY29sb3IgdGhhdCBsb29rcyB0
aGUgc2FtZSB3aGVuIGJsZW5kZWQgd2l0aCB3aGl0ZQorICAgICAgICAvLyBhdCB0aGUgY3VycmVu
dCBhbHBoYS4gIFRyeSB1c2luZyBsZXNzIHRyYW5zcGFyZW5jeSBpZiB0aGUgbnVtYmVycyBlbmQg
dXAgYmVpbmcgbmVnYXRpdmUuCisgICAgICAgIGludCByID0gYmxlbmRDb21wb25lbnQoZXhpc3Rp
bmdSLCBhbHBoYSk7CisgICAgICAgIGludCBnID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdHLCBh
bHBoYSk7CisgICAgICAgIGludCBiID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdCLCBhbHBoYSk7
CisgICAgICAgIAorICAgICAgICByZXN1bHQgPSBtYWtlUkdCQShyLCBnLCBiLCBhbHBoYSk7CisK
KyAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49IDAgJiYgYiA+PSAwKQorICAgICAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdoeSBpcyBwcmVzZXJ2aW5nIHRoZSBzZW1hbnRp
YyBiaXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJlPworICAgIGlmIChpc1NlbWFudGljKCkp
CisgICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5KGZsb2F0IGFtb3VudCkg
Y29uc3QKK3sKKyAgICBmbG9hdCBuZXdBbHBoYSA9IGFtb3VudCAqIChpc0V4dGVuZGVkKCkgPyBt
X2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5hbHBoYSgpIDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFs
cGhhKCkpIC8gMjU1KTsKKyAgICByZXR1cm4gY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOworfQor
CitDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZl
Um91bmRpbmcoZmxvYXQgYW1vdW50KSBjb25zdAoreworICAgIGZsb2F0IG5ld0FscGhhID0gYW1v
dW50ICogKGlzRXh0ZW5kZWQoKSA/IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmFscGhhKCkg
OiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEoKSkgLyAyNTUpOworICAgIHJldHVybiBjb2xvcldp
dGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhuZXdBbHBoYSk7Cit9CisKK0NvbG9yIENv
bG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKK3sKKyAgICBpZiAoaXNFeHRl
bmRlZCgpKSB7CisgICAgICAgIGF1dG8mIGV4dGVuZGVkQ29sb3IgPSBhc0V4dGVuZGVkKCk7Cisg
ICAgICAgIHJldHVybiBDb2xvciB7IGV4dGVuZGVkQ29sb3IucmVkKCksIGV4dGVuZGVkQ29sb3Iu
Z3JlZW4oKSwgZXh0ZW5kZWRDb2xvci5ibHVlKCksIGFscGhhLCBleHRlbmRlZENvbG9yLmNvbG9y
U3BhY2UoKSB9OworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVu
Y3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5n
LgorICAgIHVpbnQ4X3QgbmV3QWxwaGEgPSBhbHBoYSAqIDB4RkY7CisKKyAgICBDb2xvciByZXN1
bHQgPSByZ2IoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CisgICAgaWYgKGlzU2VtYW50aWMo
KSkKKyAgICAgICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmco
ZmxvYXQgYWxwaGEpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkgeworICAgICAgICBh
dXRvJiBleHRlbmRlZENvbG9yID0gYXNFeHRlbmRlZCgpOworICAgICAgICByZXR1cm4gQ29sb3Ig
eyBleHRlbmRlZENvbG9yLnJlZCgpLCBleHRlbmRlZENvbG9yLmdyZWVuKCksIGV4dGVuZGVkQ29s
b3IuYmx1ZSgpLCBhbHBoYSwgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCkgfTsKKyAgICB9CisK
KyAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBj
b2xvcldpdGhBbHBoYVVzaW5nLgorICAgIHVpbnQ4X3QgbmV3QWxwaGEgPSBjb2xvckZsb2F0VG9S
R0JBQnl0ZShhbHBoYSk7CisKKyAgICBDb2xvciByZXN1bHQgPSByZ2IoKS5jb2xvcldpdGhBbHBo
YShuZXdBbHBoYSk7CisgICAgaWYgKGlzU2VtYW50aWMoKSkKKyAgICAgICAgcmVzdWx0LnNldElz
U2VtYW50aWMoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb2xvciBDb2xvcjo6aW52ZXJ0
ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29uc3QKK3sKKyAgICBpZiAoaXNFeHRlbmRl
ZCgpKQorICAgICAgICByZXR1cm4gQ29sb3IgeyBhc0V4dGVuZGVkKCkuaW52ZXJ0ZWRDb2xvcldp
dGhBbHBoYShhbHBoYSkgfTsKKworICAgIGF1dG8gW3IsIGcsIGIsIGV4aXN0aW5nQWxwaGFdID0g
cmdiKCk7CisgICAgcmV0dXJuIHsgMHhGRiAtIHIsIDB4RkYgLSBnLCAweEZGIC0gYiwgY29sb3JG
bG9hdFRvUkdCQUJ5dGUoYWxwaGEpIH07Cit9CisKK0NvbG9yIENvbG9yOjpzZW1hbnRpY0NvbG9y
KCkgY29uc3QKK3sKKyAgICBpZiAoaXNTZW1hbnRpYygpKQorICAgICAgICByZXR1cm4gKnRoaXM7
CisKKyAgICByZXR1cm4geyB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpLCBTZW1hbnRpYyB9Owor
fQorCitzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRDb21wb25lbnRzPiBDb2xvcjo6Y29sb3JT
cGFjZUFuZENvbXBvbmVudHMoKSBjb25zdAoreworICAgIGlmIChpc0V4dGVuZGVkKCkpIHsKKyAg
ICAgICAgYXV0byYgZXh0ZW5kZWRDb2xvciA9IGFzRXh0ZW5kZWQoKTsKKyAgICAgICAgcmV0dXJu
IHsgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCksIGV4dGVuZGVkQ29sb3IuY2hhbm5lbHMoKSB9
OworICAgIH0KKworICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gcmdiKCk7CisgICAgcmV0dXJuIHsg
Q29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRzIHsgciAvIDI1NS4wZiwgZyAvIDI1NS4w
ZiwgYiAvIDI1NS4wZiwgIGEgLyAyNTUuMGYgfSB9OworfQorCitTaW1wbGVDb2xvciBDb2xvcjo6
dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdAoreworICAgIGlmICghaXNFeHRlbmRlZCgp
KQorICAgICAgICByZXR1cm4gcmdiKCk7CisKKyAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JH
QkFDb21wb25lbnRzTG9zc3koKTsKKyAgICByZXR1cm4gbWFrZVJHQkEzMkZyb21GbG9hdHMociwg
ZywgYiwgYSk7Cit9CisKK0Zsb2F0Q29tcG9uZW50cyBDb2xvcjo6dG9TUkdCQUNvbXBvbmVudHNM
b3NzeSgpIGNvbnN0Cit7CisgICAgYXV0byBbY29sb3JTcGFjZSwgY29tcG9uZW50c10gPSBjb2xv
clNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgeworICAgIGNh
c2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgcmV0dXJuIGNvbXBvbmVudHM7CisgICAgY2Fz
ZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAgIHJldHVybiBsaW5lYXJUb1JHQkNvbXBv
bmVudHMoY29tcG9uZW50cyk7CisgICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5UDM6CisgICAg
ICAgIHJldHVybiBwM1RvU1JHQihjb21wb25lbnRzKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworYm9vbCBleHRlbmRlZENvbG9yc0VxdWFs
KGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVuZGVk
KCkgJiYgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBhLmFzRXh0ZW5kZWQoKSA9PSBi
LmFzRXh0ZW5kZWQoKTsKKworICAgIEFTU0VSVChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5k
ZWQoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitDb2xvciBibGVuZChjb25zdCBDb2xvciYg
ZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gRklYTUU6
IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgorICAgIC8vIFdl
IG5lZWQgdG8gcHJlc2VydmUgdGhlIHN0YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQg
b2YgdGhlIGFuaW1hdGlvbgorICAgIGlmIChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkp
CisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAgLy8gU2luY2UgbWFrZVByZW11bHRpcGxp
ZWRSR0JBKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3BlY2lhbC1jYXNlIHRoYXQuCisgICAgYXV0
byBwcmVtdWx0RnJvbSA9IGZyb20uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShmcm9t
LnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDogQ29sb3I6OnRyYW5zcGFyZW50OworICAgIGF1
dG8gcHJlbXVsdFRvID0gdG8uYWxwaGEoKSA/IG1ha2VQcmVtdWx0aXBsaWVkUkdCQSh0by50b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKKworICAgIFJHQkEz
MiBwcmVtdWx0QmxlbmRlZCA9IG1ha2VSR0JBKAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVt
dWx0RnJvbS5yZWRDb21wb25lbnQoKSwgcHJlbXVsdFRvLnJlZENvbXBvbmVudCgpLCBwcm9ncmVz
cyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmdyZWVuQ29tcG9uZW50KCks
IHByZW11bHRUby5ncmVlbkNvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6
OmJsZW5kKHByZW11bHRGcm9tLmJsdWVDb21wb25lbnQoKSwgcHJlbXVsdFRvLmJsdWVDb21wb25l
bnQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5hbHBo
YUNvbXBvbmVudCgpLCBwcmVtdWx0VG8uYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCisgICAg
KTsKKworICAgIHJldHVybiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShwcmVtdWx0QmxlbmRlZCk7
Cit9CisKK0NvbG9yIGJsZW5kV2l0aG91dFByZW11bHRpcGx5KGNvbnN0IENvbG9yJiBmcm9tLCBj
b25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBGSVhNRTogRXh0ZW5k
ZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBzcGFjZXMuCisgICAgLy8gV2UgbmVlZCB0
byBwcmVzZXJ2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhbGlkIGZsYWcgYXQgdGhlIGVuZCBvZiB0aGUg
YW5pbWF0aW9uCisgICAgaWYgKHByb2dyZXNzID09IDEgJiYgIXRvLmlzVmFsaWQoKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gZnJvbVNSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVD
b2xvckxvc3N5KCk7CisgICAgYXV0byB0b1NSR0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxv
c3N5KCk7CisKKyAgICByZXR1cm4geworICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5y
ZWRDb21wb25lbnQoKSwgdG9TUkdCLnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAg
IFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmdyZWVuQ29tcG9uZW50KCksIHRvU1JHQi5ncmVlbkNv
bXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmJs
dWVDb21wb25lbnQoKSwgdG9TUkdCLmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAorICAgICAg
ICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5hbHBoYUNvbXBvbmVudCgpLCB0b1NSR0IuYWxwaGFD
b21wb25lbnQoKSwgcHJvZ3Jlc3MpCisgICAgfTsKK30KKwordm9pZCBDb2xvcjo6dGFnQXNWYWxp
ZCgpCit7CisgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzIHw9IHZhbGlkUkdCQUNvbG9yOwor
fQorCitjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6YXNFeHRlbmRlZCgpIGNvbnN0Cit7Cisg
ICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CisgICAgcmV0dXJuICptX2NvbG9yRGF0YS5leHRlbmRl
ZENvbG9yOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25z
dCBDb2xvciYgY29sb3IpCit7CisgICAgcmV0dXJuIHRzIDw8IGNvbG9yLm5hbWVGb3JSZW5kZXJU
cmVlQXNUZXh0KCk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMs
IENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKKyAg
ICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6CisgICAgICAgIHRzIDw8ICJzUkdCIjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAgIHRzIDw8ICJM
aW5lYXJSR0IiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQ
MzoKKyAgICAgICAgdHMgPDwgIkRpc3BsYXlQMyI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKClByb3BlcnR5IGNoYW5n
ZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMjIC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHJldmlzaW9uIDI2MjEwOSkJKGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoyNjIxMDkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjAgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xvclNwYWNlLmgiCisjaW5j
bHVkZSAiRXh0ZW5kZWRDb2xvci5oIgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxj
bWF0aD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+CisKKyNpZiBVU0UoQ0cpCit0eXBlZGVm
IHN0cnVjdCBDR0NvbG9yKiBDR0NvbG9yUmVmOworI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4p
CitzdHJ1Y3QgX0QzRENPTE9SVkFMVUU7Cit0eXBlZGVmIF9EM0RDT0xPUlZBTFVFIEQzRENPTE9S
VkFMVUU7Cit0eXBlZGVmIEQzRENPTE9SVkFMVUUgRDJEX0NPTE9SX0Y7Cit0eXBlZGVmIEQyRF9D
T0xPUl9GIEQyRDFfQ09MT1JfRjsKK3N0cnVjdCBEMkRfVkVDVE9SXzRGOwordHlwZWRlZiBEMkRf
VkVDVE9SXzRGIEQyRDFfVkVDVE9SXzRGOworI2VuZGlmCisKKyNpZiBQTEFURk9STShHVEspCit0
eXBlZGVmIHN0cnVjdCBfR2RrUkdCQSBHZGtSR0JBOworI2VuZGlmCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RydWN0IEZsb2F0Q29tcG9uZW50czsKKworLy8gQ29sb3IgdmFsdWUgd2l0aCA4
LWJpdCBjb21wb25lbnRzIGZvciByZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEuCisvLyBGb3Ig
aGlzdG9yaWNhbCByZWFzb25zLCBzdG9yZWQgYXMgYSAzMi1iaXQgaW50ZWdlciwgd2l0aCBhbHBo
YSBpbiB0aGUgaGlnaCBiaXRzOiBBUkdCLgorY2xhc3MgU2ltcGxlQ29sb3IgeworcHVibGljOgor
ICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvcih1aW50MzJfdCB2YWx1ZSA9IDApIDogbV92YWx1ZSB7
IHZhbHVlIH0geyB9CisKKyAgICBjb25zdGV4cHIgdWludDMyX3QgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CisKKyAgICBjb25zdGV4cHIgdWludDhfdCByZWRDb21wb25lbnQoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDE2OyB9CisgICAgY29uc3RleHByIHVpbnQ4X3QgZ3Jl
ZW5Db21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDg7IH0KKyAgICBjb25zdGV4
cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAg
IGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZSA+PiAyNDsgfQorCisgICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYUNvbXBvbmVudCgpKSAvIDB4
RkY7IH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gYWxw
aGFDb21wb25lbnQoKSA9PSAweEZGOyB9CisgICAgY29uc3RleHByIGJvb2wgaXNWaXNpYmxlKCkg
Y29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsgfQorCisgICAgU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JIVE1MKCkgY29uc3Q7CisgICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoKSBj
b25zdDsKKyAgICBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25z
dDsKKworICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb2xvcldpdGhBbHBoYSh1aW50OF90IGFs
cGhhKSBjb25zdCB7IHJldHVybiB7IChtX3ZhbHVlICYgMHgwMEZGRkZGRikgfCBhbHBoYSA8PCAy
NCB9OyB9CisKKyAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgorICAgIGNvbnN0ZXhwciB1aW50
OF90IGdldCgpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KE4gPCA0KTsKKyAg
ICAgICAgaWYgY29uc3RleHByICghTikKKyAgICAgICAgICAgIHJldHVybiByZWRDb21wb25lbnQo
KTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMSkKKyAgICAgICAgICAgIHJldHVy
biBncmVlbkNvbXBvbmVudCgpOworICAgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAyKQor
ICAgICAgICAgICAgcmV0dXJuIGJsdWVDb21wb25lbnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25z
dGV4cHIgKE4gPT0gMykKKyAgICAgICAgICAgIHJldHVybiBhbHBoYUNvbXBvbmVudCgpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX3ZhbHVlIHsgMCB9OworfTsKKworYm9vbCBv
cGVyYXRvcj09KFNpbXBsZUNvbG9yLCBTaW1wbGVDb2xvcik7Citib29sIG9wZXJhdG9yIT0oU2lt
cGxlQ29sb3IsIFNpbXBsZUNvbG9yKTsKKworLy8gRklYTUU6IFJlbW92ZSB0aGlzIGFmdGVyIG1p
Z3JhdGluZyB0byB0aGUgbmV3IG5hbWUuCit1c2luZyBSR0JBMzIgPSBTaW1wbGVDb2xvcjsKKwor
Y29uc3RleHByIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50IGIpOworY29uc3RleHBy
IFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSk7CisKK1JHQkEzMiBt
YWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEsIGJvb2wgY2Vp
bGluZyA9IHRydWUpOworUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdCQShSR0JBMzIpOworUkdC
QTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKTsK
K1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShSR0JBMzIpOworCitXRUJDT1JFX0VYUE9S
VCBSR0JBMzIgbWFrZVJHQkEzMkZyb21GbG9hdHMoZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwg
ZmxvYXQgYSk7CitXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkFGcm9tSFNMQShmbG9hdCBo
LCBmbG9hdCBzLCBmbG9hdCBsLCBmbG9hdCBhKTsKK1JHQkEzMiBtYWtlUkdCQUZyb21DTVlLQShm
bG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKTsKKwordWludDhfdCBy
b3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGludCk7Cit1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwoZmxvYXQpOworCitjbGFzcyBDb2xvciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgQ29sb3IoKSB7IH0KKworICAgIC8vIEZJWE1FOiBSZW1vdmUg
YWxsIHRoZXNlIGNvbnN0cnVjdG9ycyBhbmQgY3JlYXRpb24gZnVuY3Rpb25zIGFuZCByZXBsYWNl
IHRoZSBvbmVzIHRoYXQgYXJlIHN0aWxsIG5lZWRlZCB3aXRoIGZyZWUgZnVuY3Rpb25zLgorCisg
ICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkKKyAgICB7CisgICAgICAg
IGlmICh2YWxpZCkKKyAgICAgICAgICAgIHNldFJHQihjb2xvcik7CisgICAgfQorCisgICAgZW51
bSBTZW1hbnRpY1RhZyB7IFNlbWFudGljIH07CisgICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBTZW1h
bnRpY1RhZykKKyAgICB7CisgICAgICAgIHNldFJHQihjb2xvcik7CisgICAgICAgIHNldElzU2Vt
YW50aWMoKTsKKyAgICB9CisKKyAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQorICAgIHsK
KyAgICAgICAgc2V0UkdCKHIsIGcsIGIpOworICAgIH0KKworICAgIENvbG9yKGludCByLCBpbnQg
ZywgaW50IGIsIGludCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCKG1ha2VSR0JBKHIsIGcsIGIs
IGEpKTsKKyAgICB9CisKKyAgICBDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9h
dCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCKG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIsIGcsIGIs
IGEpKTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGVzIGEgbmV3IGNvbG9yIGZyb20gdGhlIHNwZWNp
ZmljIENNWUsgYW5kIGFscGhhIHZhbHVlcy4KKyAgICBDb2xvcihmbG9hdCBjLCBmbG9hdCBtLCBm
bG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCKG1ha2VSR0JB
RnJvbUNNWUtBKGMsIG0sIHksIGssIGEpKTsKKyAgICB9CisKKyAgICBXRUJDT1JFX0VYUE9SVCBl
eHBsaWNpdCBDb2xvcihjb25zdCBTdHJpbmcmKTsKKyAgICBleHBsaWNpdCBDb2xvcihjb25zdCBj
aGFyKik7CisKKyAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5
cGUpCisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNoVmFsdWUgJiBpbnZh
bGlkUkdCQUNvbG9yLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBs
aWtlIGFuIEV4dGVuZGVkQ29sb3IiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydCghKGRlbGV0ZWRI
YXNoVmFsdWUgJiB2YWxpZFJHQkFDb2xvckJpdCksICJDb2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1
ZSBtdXN0IG5vdCBsb29rIGxpa2UgYSB2YWxpZCBSR0JBMzIgQ29sb3IiKTsKKyAgICAgICAgc3Rh
dGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRlbGV0ZWQg
aGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIFJHQkEzMiBDb2xvciB3
b3VsZG4ndCBoYXZlIik7CisgICAgICAgIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IGRlbGV0
ZWRIYXNoVmFsdWU7CisgICAgICAgIEFTU0VSVCghaXNFeHRlbmRlZCgpKTsKKyAgICB9CisKKyAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPT0gZGVsZXRlZEhhc2hWYWx1ZTsKKyAgICB9
CisKKyAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlKQorICAg
IHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmIGludmFsaWRSR0JBQ29s
b3IsICJDb2xvcidzIGVtcHR5IGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtlIGFuIEV4dGVu
ZGVkQ29sb3IiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmICgxIDw8
IDQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBoYXZlIHNvbWUgYml0cyBzZXQg
dGhhdCBhbiBSR0JBMzIgQ29sb3Igd291bGRuJ3QgaGF2ZSIpOworICAgICAgICBtX2NvbG9yRGF0
YS5yZ2JhQW5kRmxhZ3MgPSBlbXB0eUhhc2hWYWx1ZTsKKyAgICAgICAgQVNTRVJUKCFpc0V4dGVu
ZGVkKCkpOworICAgIH0KKworICAgIC8vIFRoaXMgY3JlYXRlcyBhbiBFeHRlbmRlZENvbG9yLgor
ICAgIC8vIEZJWE1FOiBJZiB0aGUgY29sb3JTcGFjZSBpcyBzUkdCIGFuZCB0aGUgdmFsdWVzIGNh
biBhbGwgYmUKKyAgICAvLyBjb252ZXJ0ZWQgZXhhY3RseSB0byBpbnRlZ2Vycywgd2Ugc2hvdWxk
IG1ha2UgYSBub3JtYWwgQ29sb3IuCisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoZmxvYXQsIGZs
b2F0LCBmbG9hdCwgZmxvYXQsIENvbG9yU3BhY2UpOworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
KFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKKworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yKGNvbnN0
IENvbG9yJik7CisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3ImJik7CisKKyAgICB+Q29s
b3IoKQorICAgIHsKKyAgICAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgICAgIG1fY29s
b3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0
aGUgY29sb3Igc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gSFRNTDUKKyAgICAvLyA8aHR0cHM6Ly9o
dG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjZmlsbC1hbmQtc3Ry
b2tlLXN0eWxlcz4gKDEwIFNlcHRlbWJlciAyMDE1KQorICAgIFdFQkNPUkVfRVhQT1JUIFN0cmlu
ZyBzZXJpYWxpemVkKCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgY3NzVGV4
dCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBhcyBlaXRo
ZXIgI1JSR0dCQiBvciAjUlJHR0JCQUEKKyAgICBTdHJpbmcgbmFtZUZvclJlbmRlclRyZWVBc1Rl
eHQoKSBjb25zdDsKKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlzRXh0ZW5k
ZWQoKSB8fCAobV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgdmFsaWRSR0JBQ29sb3JCaXQpOyB9
CisKKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNF
eHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogcmdiKCkuaXNPcGFxdWUoKTsgfQorICAgIGJvb2wg
aXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFs
cGhhKCkgPiAwLjAgOiByZ2IoKS5pc1Zpc2libGUoKTsgfQorCisgICAgaW50IGFscGhhKCkgY29u
c3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgKiAyNTUgOiBy
Z2IoKS5hbHBoYUNvbXBvbmVudCgpOyB9CisgICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkgY29uc3Qg
eyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiByZ2IoKS5hbHBo
YUNvbXBvbmVudEFzRmxvYXQoKTsgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OworCisg
ICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4g
Y29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKKworICAgIC8vIFRoaXMgd2lsbCBjb252
ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KKyAgICBXRUJDT1JFX0VY
UE9SVCBTaW1wbGVDb2xvciB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0OworCisgICAg
Ly8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50byBzUkdC
LgorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0Q29tcG9uZW50cyB0b1NSR0JBQ29tcG9uZW50c0xv
c3N5KCkgY29uc3Q7CisKKyAgICBDb2xvciBsaWdodCgpIGNvbnN0OworICAgIENvbG9yIGRhcmso
KSBjb25zdDsKKworICAgIGJvb2wgaXNEYXJrKCkgY29uc3Q7CisgICAgCisgICAgV0VCQ09SRV9F
WFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkgY29uc3Q7CisKKyAgICAvLyBUaGlzIGlzIGFuIGltcGxl
bWVudGF0aW9uIG9mIFBvcnRlci1EdWZmJ3MgInNvdXJjZS1vdmVyIiBlcXVhdGlvbgorICAgIENv
bG9yIGJsZW5kKGNvbnN0IENvbG9yJikgY29uc3Q7CisgICAgQ29sb3IgYmxlbmRXaXRoV2hpdGUo
KSBjb25zdDsKKworICAgIENvbG9yIGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEp
IGNvbnN0OworCisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxvYXQpIGNv
bnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKKworICAgIC8vIEZJ
WE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIEFsdGVybmF0aXZlUm91bmRpbmcgdmFyaWFudHMgYnkg
c2V0dGxpbmcgb24gYSByb3VuZGluZyBiZWhhdmlvci4KKyAgICBDb2xvciBjb2xvcldpdGhBbHBo
YU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4pIGNv
bnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2
ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsKKyAgICBDb2xvciBjb2xvcldpdGhBbHBoYVVzaW5nQWx0
ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4pIGNvbnN0OworICAgIFdFQkNPUkVfRVhQ
T1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBj
b25zdDsKKworICAgIENvbG9yIG9wYXF1ZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gY29sb3JXaXRo
QWxwaGEoMS4wZik7IH0KKyAgICBDb2xvciBzZW1hbnRpY0NvbG9yKCkgY29uc3Q7CisKKyAgICAv
LyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBDU1Mgc2VtYW50aWMgY29sb3Ig
bmFtZS4KKyAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiAhaXNFeHRlbmRlZCgp
ICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiBpc1NlbWFudGljUkJHQUNvbG9yQml0KTsg
fQorCisjaWYgUExBVEZPUk0oR1RLKQorICAgIENvbG9yKGNvbnN0IEdka1JHQkEmKTsKKyAgICBv
cGVyYXRvciBHZGtSR0JBKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFVTRShDRykKKyAgICBXRUJD
T1JFX0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihD
R0NvbG9yUmVmLCBTZW1hbnRpY1RhZyk7CisgICAgZnJpZW5kIFdFQkNPUkVfRVhQT1JUIENHQ29s
b3JSZWYgY2FjaGVkQ0dDb2xvcihjb25zdCBDb2xvciYpOworI2VuZGlmCisKKyNpZiBQTEFURk9S
TShXSU4pCisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoRDJEMV9DT0xPUl9GKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdDsKKyAgICBXRUJDT1JFX0VY
UE9SVCBvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0OworI2VuZGlmCisKKyAgICBzdGF0
aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYsIFJHQkEzMiYpOworICAgIHN0YXRp
YyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nVmlldyYsIFJHQkEzMiYpOworICAgIHN0
YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgTENoYXIqLCB1bnNpZ25lZCwgUkdCQTMyJik7
CisgICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBVQ2hhciosIHVuc2lnbmVkLCBS
R0JBMzImKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgYmxhY2sgeyAweEZG
MDAwMDAwIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciB3aGl0ZSB7IDB4RkZG
RkZGRkYgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGRhcmtHcmF5IHsgMHhG
RjgwODA4MCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgZ3JheSB7IDB4RkZB
MEEwQTAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGxpZ2h0R3JheSB7IDB4
RkZDMEMwQzAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIHRyYW5zcGFyZW50
IHsgMHgwMDAwMDAwMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgY3lhbiB7
IDB4RkYwMEZGRkYgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIHllbGxvdyB7
IDB4RkZGRkZGMDAgfTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCisgICAgc3RhdGljIGNv
bnN0ZXhwciBTaW1wbGVDb2xvciBjb21wb3NpdGlvbkZpbGwgeyAweDNDQUZDMEUzIH07CisjZWxz
ZQorICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgY29tcG9zaXRpb25GaWxsIHsgMHhG
RkUxREQ1NSB9OworI2VuZGlmCisKKyAgICBib29sIGlzRXh0ZW5kZWQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICEobV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgaW52YWxpZFJHQkFD
b2xvcik7CisgICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGFz
RXh0ZW5kZWQoKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVyYXRvcj0o
Y29uc3QgQ29sb3ImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYgb3BlcmF0b3I9KENvbG9y
JiYpOworCisgICAgLy8gRXh0ZW5kZWQgYW5kIG5vbi1leHRlbmRlZCBjb2xvcnMgd2lsbCBhbHdh
eXMgYmUgbm9uLWVxdWFsLgorICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3Im
IGEsIGNvbnN0IENvbG9yJiBiKTsKKyAgICBmcmllbmQgYm9vbCBlcXVhbElnbm9yaW5nU2VtYW50
aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOworCisgICAgZnJpZW5kIGlu
dCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CisKKyAgICBz
dGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAgICBzdGF0aWMgYm9vbCBp
c1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKKworICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+
IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVy
PiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVyJik7CisKK3ByaXZhdGU6Cisg
ICAgUkdCQTMyIHJnYigpIGNvbnN0OworICAgIHZvaWQgc2V0UkdCKGludCByLCBpbnQgZywgaW50
IGIpIHsgc2V0UkdCKG1ha2VSR0IociwgZywgYikpOyB9CisgICAgdm9pZCBzZXRSR0IoUkdCQTMy
KTsKKyAgICB2b2lkIHNldElzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyB8
PSBpc1NlbWFudGljUkJHQUNvbG9yQml0OyB9CisKKyAgICAvLyAweF9fX19fX18wMCBpcyBhbiBF
eHRlbmRlZENvbG9yIHBvaW50ZXIuCisgICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52YWxpZCBS
R0JBMzIuCisgICAgLy8gMHhfX19fX19fMTEgaXMgYSB2YWxpZCBSR0JBMzIuCisgICAgc3RhdGlj
IGNvbnN0IHVpbnQ2NF90IGV4dGVuZGVkQ29sb3IgPSAweDA7CisgICAgc3RhdGljIGNvbnN0IHVp
bnQ2NF90IGludmFsaWRSR0JBQ29sb3IgPSAweDE7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90
IHZhbGlkUkdCQUNvbG9yQml0ID0gMHgyOworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCB2YWxp
ZFJHQkFDb2xvciA9IDB4MzsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaXNTZW1hbnRpY1JC
R0FDb2xvckJpdCA9IDB4NDsKKworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWxldGVkSGFz
aFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZEOworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBl
bXB0eUhhc2hWYWx1ZSA9IDB4RkZGRkZGRkZGRkZGRkZGQjsKKworICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgdGFnQXNWYWxpZCgpOworCisgICAgdW5pb24geworICAgICAgICB1aW50NjRfdCByZ2Jh
QW5kRmxhZ3MgeyBpbnZhbGlkUkdCQUNvbG9yIH07CisgICAgICAgIEV4dGVuZGVkQ29sb3IqIGV4
dGVuZGVkQ29sb3I7CisgICAgfSBtX2NvbG9yRGF0YTsKK307CisKK2Jvb2wgb3BlcmF0b3I9PShj
b25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Citib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3Im
LCBjb25zdCBDb2xvciYpOworCisvLyBPbmUgb3IgYm90aCBtdXN0IGJlIGV4dGVuZGVkIGNvbG9y
cy4KK1dFQkNPUkVfRVhQT1JUIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBDb2xvciYs
IGNvbnN0IENvbG9yJik7CisKK0NvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBD
b2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7CitDb2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBs
eShjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpOwor
CitpbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOworCit1
aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSk7Cit1aW50MTZfdCBmYXN0
RGl2aWRlQnkyNTUodWludDE2X3QpOworCisjaWYgVVNFKENHKQorV0VCQ09SRV9FWFBPUlQgQ0dD
b2xvclJlZiBjYWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJik7CisjZW5kaWYKKworV0VCQ09SRV9F
WFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0
IENvbG9yJik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgQ29sb3JTcGFjZSk7CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oU2lt
cGxlQ29sb3IgYSwgU2ltcGxlQ29sb3IgYikKK3sKKyAgICByZXR1cm4gYS52YWx1ZSgpID09IGIu
dmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBTaW1w
bGVDb2xvciBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQoreworICAgIGlmIChhLmlz
RXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIGV4dGVuZGVkQ29s
b3JzRXF1YWwoYSwgYik7CisKKyAgICByZXR1cm4gYS5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3Mg
PT0gYi5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3M7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9y
IT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQoreworICAgIHJldHVybiAhKGEgPT0g
Yik7Cit9CisKK2lubGluZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRpY0NvbG9yKGNvbnN0IENv
bG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4dGVuZGVkKCkgfHwgYi5p
c0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBleHRlbmRlZENvbG9yc0VxdWFsKGEsIGIpOwor
ICAgIHJldHVybiAoYS5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiB+Q29sb3I6OmlzU2VtYW50
aWNSQkdBQ29sb3JCaXQpID09IChiLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIH5Db2xvcjo6
aXNTZW1hbnRpY1JCR0FDb2xvckJpdCk7Cit9CisKK2lubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFz
aCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0dXJuIGFzRXh0
ZW5kZWQoKS5oYXNoKCk7CisKKyAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JEYXRhLnJn
YmFBbmRGbGFncyk7Cit9CisKK2lubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5u
ZWwoaW50IHZhbHVlKQoreworICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbigyNTUsIHZh
bHVlKSk7Cit9CisKK2lubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZmxv
YXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oMjU1LmYsIHN0
ZDo6cm91bmQodmFsdWUpKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1
NSh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlIDw8IDgpIC0gdmFsdWU7Cit9
CisKK2lubGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QgdmFsdWUpCit7Cisg
ICAgLy8gV2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0aG0gZm9yIGRpdmlzaW9u
IGJ5IDI1NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2LWJpdCB2
YWx1ZXMuCisgICAgLy8gRklYTUU6IFNpbmNlIHRoaXMgZ2l2ZXMgYWNjdXJhdGUgcmVzdWx0cyBm
b3IgMTYtYml0IHZhbHVlcywgd2Ugc2hvdWxkIGdldCB0aGlzIG9wdGltaXphdGlvbiBpbnRvIGNv
bXBpbGVycyBsaWtlIGNsYW5nLgorICAgIHVpbnQxNl90IGFwcHJveGltYXRpb24gPSB2YWx1ZSA+
PiA4OworICAgIHVpbnQxNl90IHJlbWFpbmRlciA9IHZhbHVlIC0gKGFwcHJveGltYXRpb24gKiAy
NTUpICsgMTsKKyAgICByZXR1cm4gYXBwcm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4gOCk7Cit9
CisKK2lubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0Fs
dGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAoreworICAgIHJl
dHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7Cit9CisKK2lubGluZSBDb2xvciBDb2xvcjo6
Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+IGFs
cGhhKSBjb25zdAoreworICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhVXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7Cit9CisKK2lubGluZSBSR0JB
MzIgQ29sb3I6OnJnYigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBBU1NFUlQo
IWlzRXh0ZW5kZWQoKSkgaGVyZSwgb3IgcHJvZHVjZQorICAgIC8vIGFuIFJHQkEzMiBlcXVpdmFs
ZW50IGZvciBhbiBFeHRlbmRlZENvbG9yLiBJZGVhbGx5IHRoZSBmb3JtZXIsCisgICAgLy8gc28g
d2UgY2FuIGF1ZGl0IGFsbCB0aGUgcmdiKCkgY2FsbCBzaXRlcyB0byBoYW5kbGUgZXh0ZW5kZWQu
CisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fY29sb3JEYXRhLnJnYmFBbmRG
bGFncyA+PiAzMikgfTsKK30KKworaW5saW5lIHZvaWQgQ29sb3I6OnNldFJHQihSR0JBMzIgcmdi
KQoreworICAgIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihyZ2IudmFsdWUoKSkgPDwgMzI7CisgICAgdGFnQXNWYWxpZCgpOworfQorCitpbmxpbmUgYm9v
bCBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAoY29s
b3IuaXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGV4dGVuZGVk
Q29sb3IgPSBjb2xvci5hc0V4dGVuZGVkKCk7CisgICAgICAgIHJldHVybiAhZXh0ZW5kZWRDb2xv
ci5yZWQoKSAmJiAhZXh0ZW5kZWRDb2xvci5ncmVlbigpICYmICFleHRlbmRlZENvbG9yLmJsdWUo
KSAmJiBleHRlbmRlZENvbG9yLmFscGhhKCkgPT0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gY29s
b3IucmdiKCkgPT0gQ29sb3I6OmJsYWNrOworfQorCitpbmxpbmUgYm9vbCBDb2xvcjo6aXNXaGl0
ZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgp
KSB7CisgICAgICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGV4dGVuZGVkQ29sb3IgPSBjb2xvci5h
c0V4dGVuZGVkKCk7CisgICAgICAgIHJldHVybiBleHRlbmRlZENvbG9yLnJlZCgpID09IDEgJiYg
ZXh0ZW5kZWRDb2xvci5ncmVlbigpID09IDEgJiYgZXh0ZW5kZWRDb2xvci5ibHVlKCkgPT0gMSAm
JiBleHRlbmRlZENvbG9yLmFscGhhKCkgPT0gMTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGNv
bG9yLnJnYigpID09IENvbG9yOjp3aGl0ZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRW5jb2Rlcj4K
K3ZvaWQgQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAoreworICAgIGlmIChp
c0V4dGVuZGVkKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCB0cnVlOworICAgICAgICBlbmNvZGVy
IDw8IGFzRXh0ZW5kZWQoKS5yZWQoKTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCku
Z3JlZW4oKTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuYmx1ZSgpOworICAgICAg
ICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5hbHBoYSgpOworICAgICAgICBlbmNvZGVyIDw8IGFz
RXh0ZW5kZWQoKS5jb2xvclNwYWNlKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBl
bmNvZGVyIDw8IGZhbHNlOworCisgICAgaWYgKCFpc1ZhbGlkKCkpIHsKKyAgICAgICAgZW5jb2Rl
ciA8PCBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBlbmNvZGUgd2hldGhlciB0aGUgY29sb3IgaXMgc2VtYW50aWMuCisKKyAgICB1aW50
MzJfdCB2YWx1ZSA9IHJnYigpLnZhbHVlKCk7CisKKyAgICBlbmNvZGVyIDw8IHRydWU7CisgICAg
ZW5jb2RlciA8PCB2YWx1ZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4KK09wdGlvbmFs
PENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7CisgICAgYm9vbCBpc0V4
dGVuZGVkOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFeHRlbmRlZCkpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoaXNFeHRlbmRlZCkgeworICAgICAgICBmbG9h
dCByZWQ7CisgICAgICAgIGZsb2F0IGdyZWVuOworICAgICAgICBmbG9hdCBibHVlOworICAgICAg
ICBmbG9hdCBhbHBoYTsKKyAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlOworICAgICAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKHJlZCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdyZWVuKSkKKyAgICAgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoYmx1ZSkpCisgICAg
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2Rl
KGFscGhhKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlmICgh
ZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworICAgICAgICByZXR1cm4gQ29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIGNvbG9y
U3BhY2UpOworICAgIH0KKworICAgIGJvb2wgaXNWYWxpZDsKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKGlzVmFsaWQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgaWYgKCFp
c1ZhbGlkKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIHVpbnQzMl90IHZhbHVlOwor
ICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OworCisgICAgcmV0dXJuIENvbG9yIHsgU2ltcGxlQ29sb3IgeyB2YWx1ZSB9IH07Cit9CisK
K2NvbnN0ZXhwciBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKQoreworICAgIHJl
dHVybiBtYWtlUkdCQShyLCBnLCBiLCAweEZGKTsKK30KKworY29uc3RleHByIFJHQkEzMiBtYWtl
UkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1cm4geyBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3RkOjptYXgoMCwgc3RkOjptaW4oYSwgMHhGRikpIDw8IDI0IHwgc3Rk
OjptYXgoMCwgc3RkOjptaW4ociwgMHhGRikpIDw8IDE2IHwgc3RkOjptYXgoMCwgc3RkOjptaW4o
ZywgMHhGRikpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAweEZGKSkpIH07Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpDb2xvcj47Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNo
VHJhaXRzPFdlYkNvcmU6OkNvbG9yPjsKK30KKworbmFtZXNwYWNlIHN0ZCB7CisKK3RlbXBsYXRl
PD4KK2NsYXNzIHR1cGxlX3NpemU8V2ViQ29yZTo6U2ltcGxlQ29sb3I+IDogcHVibGljIHN0ZDo6
aW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIDQ+IHsKK307CisKK3RlbXBsYXRlPHN0ZDo6
c2l6ZV90IE4+CitjbGFzcyB0dXBsZV9lbGVtZW50PE4sIFdlYkNvcmU6OlNpbXBsZUNvbG9yPiB7
CitwdWJsaWM6CisgICAgdXNpbmcgdHlwZSA9IHVpbnQ4X3Q7Cit9OworCit9CgpQcm9wZXJ0eSBj
aGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5o
Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCArMSAjIworbmF0aXZlClwg
Tm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>400172</attachid>
            <date>2020-05-24 11:20:02 -0700</date>
            <delta_ts>2020-05-24 12:13:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-212309-20200524112001.patch</filename>
            <type>text/plain</type>
            <size>96780</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2MjEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExMSBAQAorMjAyMC0wNS0yNCAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgRXh0ZW5kZWQgQ29sb3IgQ2xlYW51
cDogTW92ZSBTaW1wbGVDb2xvciBpbnRvIGl0cyBvd24gZmlsZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjMwOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgU2ltcGxlQ29sb3IgaW50byBpdHMg
b3duIGZpbGVzLiBJdCdzIGFib3V0IHRpbWUuCisKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwcmVtdWx0aXBsaWVkQ2hhbm5lbCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjp1bnByZW11bHRpcGxpZWRDaGFubmVsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Om1ha2VQcmVtdWx0aXBsaWVkUkdCQSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpt
YWtlVW5QcmVtdWx0aXBsaWVkUkdCQSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb2xv
ckZsb2F0VG9SR0JBQnl0ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUkdCQTMy
RnJvbUZsb2F0cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjptYWtlUkdCQUZyb21IU0xB
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSR0JBRnJvbUNNWUtBKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9ySFRNTCBj
b25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpkZWNpbWFsRGlnaXQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6ZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlv
bkZvckNTUyBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSR0JBMzI6OnNlcmlh
bGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6
OlNpbXBsZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjp2
YWx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6cmVk
Q29tcG9uZW50IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9y
OjpncmVlbkNvbXBvbmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVDb2xvcjo6Ymx1ZUNvbXBvbmVudCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlQ29sb3I6OmFscGhhQ29tcG9uZW50QXNGbG9hdCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6aXNPcGFxdWUgY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmlzVmlzaWJsZSBjb25zdCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Y29sb3JXaXRoQWxwaGEgY29u
c3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlQ29sb3I6OmdldCBjb25zdCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpyb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZhc3RNdWx0aXBseUJ5MjU1KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmZhc3REaXZpZGVCeTI1NSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjptYWtlUkdCKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1ha2VSR0JBKTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHA6IENv
cGllZCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcC4KKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCBjb25zdCk6Cisg
ICAgICAgICgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29sb3JGbG9hdFRvUkdCQUJ5
dGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VIZXhDb2xvckludGVybmFsKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpwYXJzZUhleENvbG9yKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmRpZmZlcmVuY2VTcXVhcmVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OmZpbmROYW1lZENvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BlcmF0
b3I9KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpzZXJpYWxpemVkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpjc3NUZXh0IGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6Om5hbWVG
b3JSZW5kZXJUcmVlQXNUZXh0IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpsaWdodCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6ZGFy
ayBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNEYXJrIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpsaWdodG5lc3MgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6YmxlbmRDb21wb25lbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q29sb3I6OmJsZW5kIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkNvbG9yOjpibGVuZFdpdGhXaGl0ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkgY29uc3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkNvbG9yOjpjb2xvcldpdGhBbHBoYSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9yU3BhY2VBbmRDb21wb25lbnRz
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0b1NSR0JBU2ltcGxl
Q29sb3JMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6dG9T
UkdCQUNvbXBvbmVudHNMb3NzeSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpl
eHRlbmRlZENvbG9yc0VxdWFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmJsZW5kV2l0aG91dFByZW11bHRpcGx5KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjp0YWdBc1ZhbGlkKTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNvbG9yOjphc0V4dGVuZGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmg6IENvcGllZCBmcm9tIHBsYXRmb3JtL2dyYXBoaWNzL0NvbG9y
LmguCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6YWxwaGFDb21wb25lbnRBc0Zsb2F0
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUNvbG9yOjpjb2xvcldpdGhBbHBoYSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVDb2xvcjo6Z2V0IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNvbG9yRmxvYXRUb1JHQkFCeXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNv
bG9yOjpDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6
On5Db2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNWYWxpZCBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aXNPcGFxdWUgY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzVmlzaWJsZSBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6cmVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpncmVlbiBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpDb2xvcjo6Ymx1ZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6YWxwaGEgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmFscGhh
QXNGbG9hdCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6b3BhcXVl
Q29sb3IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzU2VtYW50
aWMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmlzRXh0ZW5kZWQg
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OnNldFJHQik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6c2V0SXNTZW1hbnRpYyk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjplcXVhbElnbm9yaW5nU2VtYW50aWNDb2xvcik6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZl
Um91bmRpbmcgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmNvbG9y
V2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkNvbG9yOjpyZ2IgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q29sb3I6OmlzQmxhY2tDb2xvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpDb2xv
cjo6aXNXaGl0ZUNvbG9yKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjplbmNv
ZGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Q29sb3I6OmRlY29kZSk6IERl
bGV0ZWQuCisKIDIwMjAtMDUtMjQgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICBbTEZDXVtURkNdIElnbm9yZSBzZWN0aW9uIGJvcmRlcnMgZXZlbiB3aGVuIGJvcmRl
ciBjb2xsYXBzZSBpcyBvZmYuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI2MjEw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTEx
ODQsNiArMTE4NCw3IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5oCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvUmVuZGVyaW5nTW9kZS5oCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvUm91bmRlZFJlY3Qu
aAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9TdHJpbmdUcnVuY2F0b3IuaAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RhYlNpemUuaAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaApJbmRleDogU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlz
aW9uIDI2MjEwOSkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0xOTM3LDYgKzE5MzcsNyBAQCBwbGF0Zm9ybS9ncmFwaGljcy9SZWdpb24uY3BwCiBwbGF0
Zm9ybS9ncmFwaGljcy9SZW1vdGVWaWRlb1NhbXBsZS5jcHAKIHBsYXRmb3JtL2dyYXBoaWNzL1Jv
dW5kZWRSZWN0LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU2hhZG93Qmx1ci5jcHAKK3BsYXRmb3Jt
L2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3RyaW5nVHJ1bmNh
dG9yLmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9y
LmNwcAogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI2MjEw
OSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtMjI0MSw2ICsyMjQxLDcgQEAKIAkJN0MyRkE2MTIxRUE5NUEzQzAw
QTAzMTA4IC8qIFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0MyRkE2MTAxRUE5NUEzMjAwQTAzMTA4IC8q
IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMzBEOTg0MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fi
b3J0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gN0MzMEQ5ODAxRjgxNUFDMTAwMjY4MzU2IC8qIEpTQWJvcnRDb250cm9sbGVyLmggKi87
IH07CiAJCTdDMzBEOTg2MUY4MTVBRUMwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzMwRDk4MTFGODE1QUMx
MDAyNjgzNTYgLyogSlNBYm9ydFNpZ25hbC5oICovOyB9OworCQk3QzMxQzg4RTI0N0FENTk1MDA1
QkYzMTkgLyogU2ltcGxlQ29sb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDdDMzFDODhDMjQ3QUQ1OTUwMDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTdDMzMwQTAy
MURGOEZBQzYwMEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDMzMwQTAxMURGOEZBQzYw
MEQzMzk1QyAvKiBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3QzMzMEEwODFERjlGOTUxMDBEMzM5
NUMgLyogSlNQb3NpdGlvbk9wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDMzMwQTA2MURGOUY5NTEwMEQzMzk1QyAvKiBKU1Bvc2l0aW9uT3B0
aW9ucy5oICovOyB9OwogCQk3QzNBOTFFNjFDOTYzQjg4MDBEMUE3RTMgLyogQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3QzNBOTFFNTFDOTYzQjg4MDBEMUE3RTMgLyogQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk5NzQsNiAr
OTk3NSw4IEBACiAJCTdDMzBEOTgwMUY4MTVBQzEwMDI2ODM1NiAvKiBKU0Fib3J0Q29udHJvbGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fib3J0Q29udHJvbGxlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzMwRDk4MTFGODE1QUMxMDAyNjgzNTYg
LyogSlNBYm9ydFNpZ25hbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Fi
b3J0U2lnbmFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDMzBEOTgyMUY4MTVB
QzIwMDI2ODM1NiAvKiBKU0Fib3J0U2lnbmFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEpTQWJvcnRTaWduYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk3QzMxQzg4QTI0N0FENTk0MDA1QkYzMTkgLyogU2ltcGxlQ29sb3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlQ29sb3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk3QzMxQzg4QzI0N0FENTk1MDA1QkYzMTkgLyogU2ltcGxlQ29s
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxlQ29sb3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0MzMzBBMDExREY4RkFDNjAwRDMzOTVDIC8qIEdy
YXBoaWNzQ29udGV4dEdMQXR0cmlidXRlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBHcmFwaGljc0NvbnRleHRHTEF0dHJpYnV0ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJN0MzMzBBMDMxREY5RTk1QjAwRDMzOTVDIC8qIFBvc2l0aW9uT3B0aW9ucy5pZGwg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gUG9zaXRpb25PcHRpb25zLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
N0MzMzBBMDUxREY5Rjk1MTAwRDMzOTVDIC8qIEpTUG9zaXRpb25PcHRpb25zLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTUG9zaXRpb25PcHRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI1NTk0LDYgKzI1NTk3LDggQEAKIAkJCQlBNzNG
OTVGRDEyQzk3QkZFMDAzMUFBRjkgLyogUm91bmRlZFJlY3QuaCAqLywKIAkJCQkwRjNERDQ0RDEy
RjVFQTFCMDAwRDkxOTAgLyogU2hhZG93Qmx1ci5jcHAgKi8sCiAJCQkJMEYzREQ0NEUxMkY1RUEx
QjAwMEQ5MTkwIC8qIFNoYWRvd0JsdXIuaCAqLywKKwkJCQk3QzMxQzg4QTI0N0FENTk0MDA1QkYz
MTkgLyogU2ltcGxlQ29sb3IuY3BwICovLAorCQkJCTdDMzFDODhDMjQ3QUQ1OTUwMDVCRjMxOSAv
KiBTaW1wbGVDb2xvci5oICovLAogCQkJCUNENjQxRUIyMTgxOEY1RUQwMEVFNEM0MSAvKiBTb3Vy
Y2VCdWZmZXJQcml2YXRlLmggKi8sCiAJCQkJQ0RDOEI1QUMxODA0QUU1RDAwMTZFNjg1IC8qIFNv
dXJjZUJ1ZmZlclByaXZhdGVDbGllbnQuaCAqLywKIAkJCQk3QzgzREU4NTFEMDRDQkQ0MDBGRUJD
RjMgLyogU3ByaW5nU29sdmVyLmggKi8sCkBAIC0zMzUzNyw2ICszMzU0Miw3IEBACiAJCQkJQ0Qz
MzZGNjQxN0ZBMEE0RDAwREREQ0QwIC8qIFZpZGVvVHJhY2tQcml2YXRlQVZGLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDRDMzNkY2ODE3RkEwQUM2MDBERERDRDAgLyogVmlkZW9UcmFja1ByaXZhdGVB
VkZPYmpDLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDhCNUE0MzE4MEQxNDlBMDA4QjhFNjUgLyog
VmlkZW9UcmFja1ByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTdDMzFDODhFMjQ3QUQ1OTUwMDVCRjMxOSAvKiBTaW1wbGVDb2xvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDcwRTgxRDExQkYyNzY1NjAwMUZEQTQ4IC8qIFZpZGVvVHJhY2tQcml2YXRlTWVkaWFT
dHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUNFRjQxOENGMTE3OTY3OEMwMDlEMTEyQyAvKiBW
aWV3cG9ydEFyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjZGOUE4MzkxOEEwNDZBQzAw
QUVCODhBIC8qIFZpZXdwb3J0Q29uZmlndXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwCShyZXZpc2lvbiAyNjIx
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwLDcxICs0MCw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0YXRpYyBj
b25zdGV4cHIgU2ltcGxlQ29sb3IgbGlnaHRlbmVkQmxhY2sgeyAweEZGNTQ1NDU0IH07CiBzdGF0
aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGRhcmtlbmVkV2hpdGUgeyAweEZGQUJBQkFCIH07CiAK
LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgcHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywg
dW5zaWduZWQgYSwgYm9vbCBjZWlsaW5nID0gdHJ1ZSkKLXsKLSAgICByZXR1cm4gZmFzdERpdmlk
ZUJ5MjU1KGNlaWxpbmcgPyBjICogYSArIDI1NCA6IGMgKiBhKTsKLX0KLQotc3RhdGljIGlubGlu
ZSB1bnNpZ25lZCB1bnByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVkIGMsIHVuc2lnbmVkIGEp
Ci17Ci0gICAgcmV0dXJuIChmYXN0TXVsdGlwbHlCeTI1NShjKSArIGEgLSAxKSAvIGE7Ci19Ci0K
LVJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEs
IGJvb2wgY2VpbGluZykKLXsKLSAgICByZXR1cm4gbWFrZVJHQkEocHJlbXVsdGlwbGllZENoYW5u
ZWwociwgYSwgY2VpbGluZyksIHByZW11bHRpcGxpZWRDaGFubmVsKGcsIGEsIGNlaWxpbmcpLCBw
cmVtdWx0aXBsaWVkQ2hhbm5lbChiLCBhLCBjZWlsaW5nKSwgYSk7Ci19Ci0KLVJHQkEzMiBtYWtl
UHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyIHBpeGVsQ29sb3IpCi17Ci0gICAgaWYgKHBpeGVsQ29s
b3IuaXNPcGFxdWUoKSkKLSAgICAgICAgcmV0dXJuIHBpeGVsQ29sb3I7Ci0gICAgcmV0dXJuIG1h
a2VQcmVtdWx0aXBsaWVkUkdCQShwaXhlbENvbG9yLnJlZENvbXBvbmVudCgpLCBwaXhlbENvbG9y
LmdyZWVuQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYmx1ZUNvbXBvbmVudCgpLCBwaXhlbENvbG9y
LmFscGhhQ29tcG9uZW50KCkpOwotfQotCi1SR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEo
aW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCi17Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHVucHJl
bXVsdGlwbGllZENoYW5uZWwociwgYSksIHVucHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSksIHVu
cHJlbXVsdGlwbGllZENoYW5uZWwoYiwgYSksIGEpOwotfQotCi1SR0JBMzIgbWFrZVVuUHJlbXVs
dGlwbGllZFJHQkEoUkdCQTMyIHBpeGVsQ29sb3IpCi17Ci0gICAgaWYgKHBpeGVsQ29sb3IuaXNW
aXNpYmxlKCkgJiYgIXBpeGVsQ29sb3IuaXNPcGFxdWUoKSkKLSAgICAgICAgcmV0dXJuIG1ha2VV
blByZW11bHRpcGxpZWRSR0JBKHBpeGVsQ29sb3IucmVkQ29tcG9uZW50KCksIHBpeGVsQ29sb3Iu
Z3JlZW5Db21wb25lbnQoKSwgcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCksIHBpeGVsQ29sb3Iu
YWxwaGFDb21wb25lbnQoKSk7Ci0gICAgcmV0dXJuIHBpeGVsQ29sb3I7Ci19Ci0KLXN0YXRpYyBp
bnQgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKLXsKLSAgICAvLyBXZSB1c2UgbHJvdW5k
ZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91
bmRpbmcKLSAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50Pihs
cm91bmRmKDI1NS4wZiAqIGYpKSwgMjU1KSk7Ci19Ci0KLVJHQkEzMiBtYWtlUkdCQTMyRnJvbUZs
b2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBiLCBmbG9hdCBhKQotewotICAgIHJldHVybiBt
YWtlUkdCQShjb2xvckZsb2F0VG9SR0JBQnl0ZShyKSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZyks
IGNvbG9yRmxvYXRUb1JHQkFCeXRlKGIpLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShhKSk7Ci19Ci0K
LVJHQkEzMiBtYWtlUkdCQUZyb21IU0xBKGZsb2F0IGh1ZSwgZmxvYXQgc2F0dXJhdGlvbiwgZmxv
YXQgbGlnaHRuZXNzLCBmbG9hdCBhbHBoYSkKLXsKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3Rv
ciA9IDI1NS4wOwotICAgIEZsb2F0Q29tcG9uZW50cyBmbG9hdFJlc3VsdCA9IGhzbFRvU1JHQih7
IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYSB9KTsKLSAgICByZXR1cm4gbWFrZVJH
QkEoCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMF0gKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMV0gKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbMl0gKiBzY2FsZUZhY3Rv
ciksCi0gICAgICAgIHJvdW5kKGZsb2F0UmVzdWx0LmNvbXBvbmVudHNbM10gKiBzY2FsZUZhY3Rv
cikpOwotfQotCi1SR0JBMzIgbWFrZVJHQkFGcm9tQ01ZS0EoZmxvYXQgYywgZmxvYXQgbSwgZmxv
YXQgeSwgZmxvYXQgaywgZmxvYXQgYSkKLXsKLSAgICBkb3VibGUgY29sb3JzID0gMSAtIGs7Ci0g
ICAgaW50IHIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRlcigyNTYsIDApICogKGNvbG9ycyAq
ICgxIC0gYykpKTsKLSAgICBpbnQgZyA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1Niwg
MCkgKiAoY29sb3JzICogKDEgLSBtKSkpOwotICAgIGludCBiID0gc3RhdGljX2Nhc3Q8aW50Pihu
ZXh0YWZ0ZXIoMjU2LCAwKSAqIChjb2xvcnMgKiAoMSAtIHkpKSk7Ci0gICAgcmV0dXJuIG1ha2VS
R0JBKHIsIGcsIGIsIHN0YXRpY19jYXN0PGZsb2F0PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIGEpKTsK
LX0KLQogLy8gb3JpZ2luYWxseSBtb3ZlZCBoZXJlIGZyb20gdGhlIENTUyBwYXJzZXIKIHRlbXBs
YXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgogc3RhdGljIGlubGluZSBib29sIHBhcnNlSGV4
Q29sb3JJbnRlcm5hbChjb25zdCBDaGFyYWN0ZXJUeXBlKiBuYW1lLCB1bnNpZ25lZCBsZW5ndGgs
IFJHQkEzMiYgcmdiKQpAQCAtMjkyLDEzICsyMjcsNiBAQCBDb2xvciYgQ29sb3I6Om9wZXJhdG9y
PShDb2xvciYmIG90aGVyKQogICAgIHJldHVybiAqdGhpczsKIH0KIAotU3RyaW5nIFNpbXBsZUNv
bG9yOjpzZXJpYWxpemF0aW9uRm9ySFRNTCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzT3BhcXVlKCkp
Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBvbmVudCgpLCAyLCBM
b3dlcmNhc2UpLCBoZXgoZ3JlZW5Db21wb25lbnQoKSwgMiwgTG93ZXJjYXNlKSwgaGV4KGJsdWVD
b21wb25lbnQoKSwgMiwgTG93ZXJjYXNlKSk7Ci0gICAgcmV0dXJuIHNlcmlhbGl6YXRpb25Gb3JD
U1MoKTsKLX0KLQogU3RyaW5nIENvbG9yOjpzZXJpYWxpemVkKCkgY29uc3QKIHsKICAgICBpZiAo
aXNFeHRlbmRlZCgpKQpAQCAtMzA2LDM1ICsyMzQsNiBAQCBTdHJpbmcgQ29sb3I6OnNlcmlhbGl6
ZWQoKSBjb25zdAogICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0aW9uRm9ySFRNTCgpOwogfQog
Ci1zdGF0aWMgY2hhciBkZWNpbWFsRGlnaXQodW5zaWduZWQgbnVtYmVyKQotewotICAgIEFTU0VS
VChudW1iZXIgPCAxMCk7Ci0gICAgcmV0dXJuICcwJyArIG51bWJlcjsKLX0KLQotc3RhdGljIHN0
ZDo6YXJyYXk8Y2hhciwgND4gZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1ZSh1
aW50OF90IGFscGhhKQotewotICAgIEFTU0VSVChhbHBoYSA+IDApOwotICAgIEFTU0VSVChhbHBo
YSA8IDB4RkYpOwotICAgIGlmICgoKGFscGhhICogMTAwICsgMHg3RikgLyAweEZGICogMHhGRiAr
IDUwKSAvIDEwMCAhPSBhbHBoYSkKLSAgICAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoYWxw
aGEgKiAxMCAvIDB4RkYgJSAxMCksIGRlY2ltYWxEaWdpdChhbHBoYSAqIDEwMCAvIDB4RkYgJSAx
MCksIGRlY2ltYWxEaWdpdCgoYWxwaGEgKiAxMDAwICsgMHg3RikgLyAweEZGICUgMTApLCAnXDAn
IH0gfTsKLSAgICBpZiAoaW50IHRoaXJkRGlnaXQgPSAoYWxwaGEgKiAxMDAgKyAweDdGKSAvIDB4
RkYgJSAxMCkKLSAgICAgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoYWxwaGEgKiAxMCAvIDB4
RkYpLCBkZWNpbWFsRGlnaXQodGhpcmREaWdpdCksICdcMCcsICdcMCcgfSB9OwotICAgIHJldHVy
biB7IHsgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEwICsgMHg3RikgLyAweEZGKSwgJ1wwJywgJ1ww
JywgJ1wwJyB9IH07Ci19Ci0KLVN0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvckNT
UygpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChhbHBoYUNvbXBvbmVudCgpKSB7Ci0gICAgY2FzZSAw
OgotICAgICAgICByZXR1cm4gbWFrZVN0cmluZygicmdiYSgiLCByZWRDb21wb25lbnQoKSwgIiwg
IiwgZ3JlZW5Db21wb25lbnQoKSwgIiwgIiwgYmx1ZUNvbXBvbmVudCgpLCAiLCAwKSIpOwotICAg
IGNhc2UgMHhGRjoKLSAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoInJnYigiLCByZWRDb21wb25l
bnQoKSwgIiwgIiwgZ3JlZW5Db21wb25lbnQoKSwgIiwgIiwgYmx1ZUNvbXBvbmVudCgpLCAnKScp
OwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJyZ2JhKCIsIHJlZENv
bXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBibHVlQ29tcG9uZW50KCks
ICIsIDAuIiwgZnJhY3Rpb25EaWdpdHNGb3JGcmFjdGlvbmFsQWxwaGFWYWx1ZShhbHBoYUNvbXBv
bmVudCgpKS5kYXRhKCksICcpJyk7Ci0gICAgfQotfQotCiBTdHJpbmcgQ29sb3I6OmNzc1RleHQo
KSBjb25zdAogewogICAgIGlmIChpc0V4dGVuZGVkKCkpCkBAIC0zNDIsMTMgKzI0MSw2IEBAIFN0
cmluZyBDb2xvcjo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHJnYigpLnNlcmlhbGl6YXRp
b25Gb3JDU1MoKTsKIH0KIAotU3RyaW5nIFJHQkEzMjo6c2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQoKSBjb25zdAotewotICAgIGlmIChhbHBoYUNvbXBvbmVudCgpIDwgMHhGRikKLSAg
ICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkQ29tcG9uZW50KCksIDIpLCBoZXgo
Z3JlZW5Db21wb25lbnQoKSwgMiksIGhleChibHVlQ29tcG9uZW50KCksIDIpLCBoZXgoYWxwaGFD
b21wb25lbnQoKSwgMikpOwotICAgIHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBv
bmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVudCgp
LCAyKSk7Ci19Ci0KIFN0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRlclRyZWVBc1RleHQoKSBjb25z
dAogewogICAgIC8vIEZJWE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29sb3JzLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCShyZXZpc2lvbiAyNjIxMDkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNyw2ICsyNyw3IEBACiAKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiRXh0
ZW5kZWRDb2xvci5oIgorI2luY2x1ZGUgIlNpbXBsZUNvbG9yLmgiCiAjaW5jbHVkZSA8YWxnb3Jp
dGhtPgogI2luY2x1ZGUgPGNtYXRoPgogI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KQEAgLTU2
LDY5ICs1Nyw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RydWN0IEZsb2F0Q29tcG9uZW50
czsKIAotLy8gQ29sb3IgdmFsdWUgd2l0aCA4LWJpdCBjb21wb25lbnRzIGZvciByZWQsIGdyZWVu
LCBibHVlLCBhbmQgYWxwaGEuCi0vLyBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBzdG9yZWQgYXMg
YSAzMi1iaXQgaW50ZWdlciwgd2l0aCBhbHBoYSBpbiB0aGUgaGlnaCBiaXRzOiBBUkdCLgotY2xh
c3MgU2ltcGxlQ29sb3IgewotcHVibGljOgotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvcih1aW50
MzJfdCB2YWx1ZSA9IDApIDogbV92YWx1ZSB7IHZhbHVlIH0geyB9Ci0KLSAgICBjb25zdGV4cHIg
dWludDMyX3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLSAgICBjb25zdGV4
cHIgdWludDhfdCByZWRDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDE2OyB9
Ci0gICAgY29uc3RleHByIHVpbnQ4X3QgZ3JlZW5Db21wb25lbnQoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlID4+IDg7IH0KLSAgICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQotICAgIGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9u
ZW50KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZSA+PiAyNDsgfQotCi0gICAgY29uc3RleHByIGZs
b2F0IGFscGhhQ29tcG9uZW50QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZs
b2F0PihhbHBoYUNvbXBvbmVudCgpKSAvIDB4RkY7IH0KLQotICAgIGNvbnN0ZXhwciBib29sIGlz
T3BhcXVlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9Ci0gICAg
Y29uc3RleHByIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQo
KTsgfQotCi0gICAgU3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29uc3Q7Ci0gICAgU3Ry
aW5nIHNlcmlhbGl6YXRpb25Gb3JDU1MoKSBjb25zdDsKLSAgICBTdHJpbmcgc2VyaWFsaXphdGlv
bkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdDsKLQotICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xv
ciBjb2xvcldpdGhBbHBoYSh1aW50OF90IGFscGhhKSBjb25zdCB7IHJldHVybiB7IChtX3ZhbHVl
ICYgMHgwMEZGRkZGRikgfCBhbHBoYSA8PCAyNCB9OyB9Ci0KLSAgICB0ZW1wbGF0ZTxzdGQ6OnNp
emVfdCBOPgotICAgIGNvbnN0ZXhwciB1aW50OF90IGdldCgpIGNvbnN0Ci0gICAgewotICAgICAg
ICBzdGF0aWNfYXNzZXJ0KE4gPCA0KTsKLSAgICAgICAgaWYgY29uc3RleHByICghTikKLSAgICAg
ICAgICAgIHJldHVybiByZWRDb21wb25lbnQoKTsKLSAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIg
KE4gPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBncmVlbkNvbXBvbmVudCgpOwotICAgICAgICBl
bHNlIGlmIGNvbnN0ZXhwciAoTiA9PSAyKQotICAgICAgICAgICAgcmV0dXJuIGJsdWVDb21wb25l
bnQoKTsKLSAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMykKLSAgICAgICAgICAgIHJl
dHVybiBhbHBoYUNvbXBvbmVudCgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICB1aW50MzJfdCBt
X3ZhbHVlIHsgMCB9OwotfTsKLQotYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yLCBTaW1wbGVD
b2xvcik7Ci1ib29sIG9wZXJhdG9yIT0oU2ltcGxlQ29sb3IsIFNpbXBsZUNvbG9yKTsKLQotLy8g
RklYTUU6IFJlbW92ZSB0aGlzIGFmdGVyIG1pZ3JhdGluZyB0byB0aGUgbmV3IG5hbWUuCi11c2lu
ZyBSR0JBMzIgPSBTaW1wbGVDb2xvcjsKLQotY29uc3RleHByIFJHQkEzMiBtYWtlUkdCKGludCBy
LCBpbnQgZywgaW50IGIpOwotY29uc3RleHByIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcs
IGludCBiLCBpbnQgYSk7Ci0KLVJHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGlu
dCBnLCBpbnQgYiwgaW50IGEsIGJvb2wgY2VpbGluZyA9IHRydWUpOwotUkdCQTMyIG1ha2VQcmVt
dWx0aXBsaWVkUkdCQShSR0JBMzIpOwotUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGlu
dCByLCBpbnQgZywgaW50IGIsIGludCBhKTsKLVJHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdC
QShSR0JBMzIpOwotCi1XRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkEzMkZyb21GbG9hdHMo
ZmxvYXQgciwgZmxvYXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7Ci1XRUJDT1JFX0VYUE9SVCBSR0JB
MzIgbWFrZVJHQkFGcm9tSFNMQShmbG9hdCBoLCBmbG9hdCBzLCBmbG9hdCBsLCBmbG9hdCBhKTsK
LVJHQkEzMiBtYWtlUkdCQUZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9h
dCBrLCBmbG9hdCBhKTsKLQotdWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGludCk7
Ci11aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZmxvYXQpOwotCiBjbGFzcyBDb2xv
ciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0zNTAsOSArMjg4
LDYgQEAgQ29sb3IgYmxlbmRXaXRob3V0UHJlbXVsdGlwbHkoY29uc3QgQ29sbwogCiBpbnQgZGlm
ZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCi11aW50MTZfdCBm
YXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSk7Ci11aW50MTZfdCBmYXN0RGl2aWRlQnky
NTUodWludDE2X3QpOwotCiAjaWYgVVNFKENHKQogV0VCQ09SRV9FWFBPUlQgQ0dDb2xvclJlZiBj
YWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJik7CiAjZW5kaWYKQEAgLTM2MCwxNiArMjk1LDYgQEAg
V0VCQ09SRV9FWFBPUlQgQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKAogV0VCQ09SRV9FWFBPUlQg
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENvbG9y
Jik7CiBXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgQ29sb3JTcGFjZSk7CiAKLWlubGluZSBib29sIG9wZXJhdG9yPT0oU2ltcGxlQ29s
b3IgYSwgU2ltcGxlQ29sb3IgYikKLXsKLSAgICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFsdWUo
KTsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1wbGVDb2xvciBhLCBTaW1wbGVDb2xv
ciBiKQotewotICAgIHJldHVybiAhKGEgPT0gYik7Ci19Ci0KIGlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQogewogICAgIGlmIChhLmlzRXh0ZW5k
ZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSkKQEAgLTM5OCwzMCArMzIzLDYgQEAgaW5saW5lIHVuc2ln
bmVkIENvbG9yOjpoYXNoKCkgY29uc3QKICAgICByZXR1cm4gV1RGOjppbnRIYXNoKG1fY29sb3JE
YXRhLnJnYmFBbmRGbGFncyk7CiB9CiAKLWlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xv
ckNoYW5uZWwoaW50IHZhbHVlKQotewotICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbigy
NTUsIHZhbHVlKSk7Ci19Ci0KLWlubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBDb2xvckNoYW5u
ZWwoZmxvYXQgdmFsdWUpCi17Ci0gICAgcmV0dXJuIHN0ZDo6bWF4KDAuZiwgc3RkOjptaW4oMjU1
LmYsIHN0ZDo6cm91bmQodmFsdWUpKSk7Ci19Ci0KLWlubGluZSB1aW50MTZfdCBmYXN0TXVsdGlw
bHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKLXsKLSAgICByZXR1cm4gKHZhbHVlIDw8IDgpIC0gdmFs
dWU7Ci19Ci0KLWlubGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QgdmFsdWUp
Ci17Ci0gICAgLy8gV2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0aG0gZm9yIGRp
dmlzaW9uIGJ5IDI1NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJlc3VsdHMgZm9yIDE2
LWJpdCB2YWx1ZXMuCi0gICAgLy8gRklYTUU6IFNpbmNlIHRoaXMgZ2l2ZXMgYWNjdXJhdGUgcmVz
dWx0cyBmb3IgMTYtYml0IHZhbHVlcywgd2Ugc2hvdWxkIGdldCB0aGlzIG9wdGltaXphdGlvbiBp
bnRvIGNvbXBpbGVycyBsaWtlIGNsYW5nLgotICAgIHVpbnQxNl90IGFwcHJveGltYXRpb24gPSB2
YWx1ZSA+PiA4OwotICAgIHVpbnQxNl90IHJlbWFpbmRlciA9IHZhbHVlIC0gKGFwcHJveGltYXRp
b24gKiAyNTUpICsgMTsKLSAgICByZXR1cm4gYXBwcm94aW1hdGlvbiArIChyZW1haW5kZXIgPj4g
OCk7Ci19Ci0KIGlubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnlV
c2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAogewog
ICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5h
dGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7CkBAIC01MzQsMzMgKzQzNSw5IEBA
IE9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGQKICAgICByZXR1cm4gQ29s
b3IgeyBTaW1wbGVDb2xvciB7IHZhbHVlIH0gfTsKIH0KIAotY29uc3RleHByIFJHQkEzMiBtYWtl
UkdCKGludCByLCBpbnQgZywgaW50IGIpCi17Ci0gICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcsIGIs
IDB4RkYpOwotfQotCi1jb25zdGV4cHIgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgaW50
IGIsIGludCBhKQotewotICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdGQ6Om1h
eCgwLCBzdGQ6Om1pbihhLCAweEZGKSkgPDwgMjQgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihyLCAw
eEZGKSkgPDwgMTYgfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihnLCAweEZGKSkgPDwgOCB8IHN0ZDo6
bWF4KDAsIHN0ZDo6bWluKGIsIDB4RkYpKSkgfTsKLX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiBuYW1lc3BhY2UgV1RGIHsKIHRlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPFdlYkNv
cmU6OkNvbG9yPjsKIHRlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8V2ViQ29yZTo6Q29sb3I+
OwogfQotCi1uYW1lc3BhY2Ugc3RkIHsKLQotdGVtcGxhdGU8PgotY2xhc3MgdHVwbGVfc2l6ZTxX
ZWJDb3JlOjpTaW1wbGVDb2xvcj4gOiBwdWJsaWMgc3RkOjppbnRlZ3JhbF9jb25zdGFudDxzdGQ6
OnNpemVfdCwgND4gewotfTsKLQotdGVtcGxhdGU8c3RkOjpzaXplX3QgTj4KLWNsYXNzIHR1cGxl
X2VsZW1lbnQ8TiwgV2ViQ29yZTo6U2ltcGxlQ29sb3I+IHsKLXB1YmxpYzoKLSAgICB1c2luZyB0
eXBlID0gdWludDhfdDsKLX07Ci0KLX0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAJKHJldmlzaW9uIDI2MjEwOSkJKGZyb20gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuY3BwOjI2MjEwOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb2xvci5oIgor
CisjaW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiQ29sb3JVdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJIYXNoVG9vbHMuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorI2luY2x1ZGUgPHd0Zi9IZXhOdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0ZXhw
ciBTaW1wbGVDb2xvciBsaWdodGVuZWRCbGFjayB7IDB4RkY1NDU0NTQgfTsKK3N0YXRpYyBjb25z
dGV4cHIgU2ltcGxlQ29sb3IgZGFya2VuZWRXaGl0ZSB7IDB4RkZBQkFCQUIgfTsKKworc3RhdGlj
IGlubGluZSB1bnNpZ25lZCBwcmVtdWx0aXBsaWVkQ2hhbm5lbCh1bnNpZ25lZCBjLCB1bnNpZ25l
ZCBhLCBib29sIGNlaWxpbmcgPSB0cnVlKQoreworICAgIHJldHVybiBmYXN0RGl2aWRlQnkyNTUo
Y2VpbGluZyA/IGMgKiBhICsgMjU0IDogYyAqIGEpOworfQorCitzdGF0aWMgaW5saW5lIHVuc2ln
bmVkIHVucHJlbXVsdGlwbGllZENoYW5uZWwodW5zaWduZWQgYywgdW5zaWduZWQgYSkKK3sKKyAg
ICByZXR1cm4gKGZhc3RNdWx0aXBseUJ5MjU1KGMpICsgYSAtIDEpIC8gYTsKK30KKworUkdCQTMy
IG1ha2VQcmVtdWx0aXBsaWVkUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSwgYm9vbCBj
ZWlsaW5nKQoreworICAgIHJldHVybiBtYWtlUkdCQShwcmVtdWx0aXBsaWVkQ2hhbm5lbChyLCBh
LCBjZWlsaW5nKSwgcHJlbXVsdGlwbGllZENoYW5uZWwoZywgYSwgY2VpbGluZyksIHByZW11bHRp
cGxpZWRDaGFubmVsKGIsIGEsIGNlaWxpbmcpLCBhKTsKK30KKworUkdCQTMyIG1ha2VQcmVtdWx0
aXBsaWVkUkdCQShSR0JBMzIgcGl4ZWxDb2xvcikKK3sKKyAgICBpZiAocGl4ZWxDb2xvci5pc09w
YXF1ZSgpKQorICAgICAgICByZXR1cm4gcGl4ZWxDb2xvcjsKKyAgICByZXR1cm4gbWFrZVByZW11
bHRpcGxpZWRSR0JBKHBpeGVsQ29sb3IucmVkQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuZ3JlZW5D
b21wb25lbnQoKSwgcGl4ZWxDb2xvci5ibHVlQ29tcG9uZW50KCksIHBpeGVsQ29sb3IuYWxwaGFD
b21wb25lbnQoKSk7Cit9CisKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShpbnQgciwg
aW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICByZXR1cm4gbWFrZVJHQkEodW5wcmVtdWx0aXBs
aWVkQ2hhbm5lbChyLCBhKSwgdW5wcmVtdWx0aXBsaWVkQ2hhbm5lbChnLCBhKSwgdW5wcmVtdWx0
aXBsaWVkQ2hhbm5lbChiLCBhKSwgYSk7Cit9CisKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVk
UkdCQShSR0JBMzIgcGl4ZWxDb2xvcikKK3sKKyAgICBpZiAocGl4ZWxDb2xvci5pc1Zpc2libGUo
KSAmJiAhcGl4ZWxDb2xvci5pc09wYXF1ZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuUHJlbXVs
dGlwbGllZFJHQkEocGl4ZWxDb2xvci5yZWRDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5ncmVlbkNv
bXBvbmVudCgpLCBwaXhlbENvbG9yLmJsdWVDb21wb25lbnQoKSwgcGl4ZWxDb2xvci5hbHBoYUNv
bXBvbmVudCgpKTsKKyAgICByZXR1cm4gcGl4ZWxDb2xvcjsKK30KKworc3RhdGljIGludCBjb2xv
ckZsb2F0VG9SR0JBQnl0ZShmbG9hdCBmKQoreworICAgIC8vIFdlIHVzZSBscm91bmRmIGFuZCAy
NTUgaW5zdGVhZCBvZiBuZXh0YWZ0ZXJmKDI1NiwgMCkgdG8gbWF0Y2ggQ0cncyByb3VuZGluZwor
ICAgIHJldHVybiBzdGQ6Om1heCgwLCBzdGQ6Om1pbihzdGF0aWNfY2FzdDxpbnQ+KGxyb3VuZGYo
MjU1LjBmICogZikpLCAyNTUpKTsKK30KKworUkdCQTMyIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGZs
b2F0IHIsIGZsb2F0IGcsIGZsb2F0IGIsIGZsb2F0IGEpCit7CisgICAgcmV0dXJuIG1ha2VSR0JB
KGNvbG9yRmxvYXRUb1JHQkFCeXRlKHIpLCBjb2xvckZsb2F0VG9SR0JBQnl0ZShnKSwgY29sb3JG
bG9hdFRvUkdCQUJ5dGUoYiksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGEpKTsKK30KKworUkdCQTMy
IG1ha2VSR0JBRnJvbUhTTEEoZmxvYXQgaHVlLCBmbG9hdCBzYXR1cmF0aW9uLCBmbG9hdCBsaWdo
dG5lc3MsIGZsb2F0IGFscGhhKQoreworICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFjdG9yID0gMjU1
LjA7CisgICAgRmxvYXRDb21wb25lbnRzIGZsb2F0UmVzdWx0ID0gaHNsVG9TUkdCKHsgaHVlLCBz
YXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pOworICAgIHJldHVybiBtYWtlUkdCQSgKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1swXSAqIHNjYWxlRmFjdG9yKSwKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1sxXSAqIHNjYWxlRmFjdG9yKSwKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1syXSAqIHNjYWxlRmFjdG9yKSwKKyAg
ICAgICAgcm91bmQoZmxvYXRSZXN1bHQuY29tcG9uZW50c1szXSAqIHNjYWxlRmFjdG9yKSk7Cit9
CisKK1JHQkEzMiBtYWtlUkdCQUZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBm
bG9hdCBrLCBmbG9hdCBhKQoreworICAgIGRvdWJsZSBjb2xvcnMgPSAxIC0gazsKKyAgICBpbnQg
ciA9IHN0YXRpY19jYXN0PGludD4obmV4dGFmdGVyKDI1NiwgMCkgKiAoY29sb3JzICogKDEgLSBj
KSkpOworICAgIGludCBnID0gc3RhdGljX2Nhc3Q8aW50PihuZXh0YWZ0ZXIoMjU2LCAwKSAqIChj
b2xvcnMgKiAoMSAtIG0pKSk7CisgICAgaW50IGIgPSBzdGF0aWNfY2FzdDxpbnQ+KG5leHRhZnRl
cigyNTYsIDApICogKGNvbG9ycyAqICgxIC0geSkpKTsKKyAgICByZXR1cm4gbWFrZVJHQkEociwg
ZywgYiwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KG5leHRhZnRlcigyNTYsIDApICogYSkpOworfQorCisv
LyBvcmlnaW5hbGx5IG1vdmVkIGhlcmUgZnJvbSB0aGUgQ1NTIHBhcnNlcgordGVtcGxhdGUgPHR5
cGVuYW1lIENoYXJhY3RlclR5cGU+CitzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VIZXhDb2xvcklu
dGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMy
JiByZ2IpCit7CisgICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAh
PSA2ICYmIGxlbmd0aCAhPSA4KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdW5zaWduZWQg
dmFsdWUgPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewor
ICAgICAgICBpZiAoIWlzQVNDSUlIZXhEaWdpdChuYW1lW2ldKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgdmFsdWUgPDw9IDQ7CisgICAgICAgIHZhbHVlIHw9IHRvQVNDSUlI
ZXhWYWx1ZShuYW1lW2ldKTsKKyAgICB9CisgICAgaWYgKGxlbmd0aCA9PSA2KSB7CisgICAgICAg
IHJnYiA9IHsgMHhGRjAwMDAwMCB8IHZhbHVlIH07CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICBpZiAobGVuZ3RoID09IDgpIHsKKyAgICAgICAgLy8gV2UgcGFyc2VkIHRoZSB2YWx1
ZXMgaW50byBSR0JBIG9yZGVyLCBidXQgdGhlIFJHQkEzMiB0eXBlCisgICAgICAgIC8vIGV4cGVj
dHMgdGhlbSB0byBiZSBpbiBBUkdCIG9yZGVyLCBzbyB3ZSByaWdodCByb3RhdGUgZWlnaHQgYml0
cy4KKyAgICAgICAgcmdiID0geyB2YWx1ZSA8PCAyNCB8IHZhbHVlID4+IDggfTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChsZW5ndGggPT0gNCkgeworICAgICAgICAvLyAj
YWJjZCBjb252ZXJ0cyB0byBkZGFhYmJjYyBpbiBSR0JBMzIuCisgICAgICAgIHJnYiA9IHsgKHZh
bHVlICYgMHhGKSA8PCAyOCB8ICh2YWx1ZSAmIDB4RikgPDwgMjQKKyAgICAgICAgICAgIHwgKHZh
bHVlICYgMHhGMDAwKSA8PCA4IHwgKHZhbHVlICYgMHhGMDAwKSA8PCA0CisgICAgICAgICAgICB8
ICh2YWx1ZSAmIDB4RjAwKSA8PCA0IHwgKHZhbHVlICYgMHhGMDApCisgICAgICAgICAgICB8ICh2
YWx1ZSAmIDB4RjApIHwgKHZhbHVlICYgMHhGMCkgPj4gNCB9OworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgLy8gI2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjCisgICAgcmdiID0geyAw
eEZGMDAwMDAwCisgICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDEyIHwgKHZhbHVlICYgMHhG
MDApIDw8IDgKKyAgICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4IHwgKHZhbHVlICYgMHhGMCkg
PDwgNAorICAgICAgICB8ICh2YWx1ZSAmIDB4RikgPDwgNCB8ICh2YWx1ZSAmIDB4RikgfTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBMQ2hh
ciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikKK3sKKyAgICByZXR1cm4gcGFy
c2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwgcmdiKTsKK30KKworYm9vbCBDb2xvcjo6
cGFyc2VIZXhDb2xvcihjb25zdCBVQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzIm
IHJnYikKK3sKKyAgICByZXR1cm4gcGFyc2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwg
cmdiKTsKK30KKworYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUs
IFJHQkEzMiYgcmdiKQoreworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Cisg
ICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAobmFtZS5pczhC
aXQoKSkKKyAgICAgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpLCBu
YW1lLmxlbmd0aCgpLCByZ2IpOworICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFj
dGVyczE2KCksIG5hbWUubGVuZ3RoKCksIHJnYik7Cit9CisKK2Jvb2wgQ29sb3I6OnBhcnNlSGV4
Q29sb3IoY29uc3QgU3RyaW5nVmlldyYgbmFtZSwgUkdCQTMyJiByZ2IpCit7CisgICAgdW5zaWdu
ZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChuYW1lLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gcGFyc2VI
ZXhDb2xvcihuYW1lLmNoYXJhY3RlcnM4KCksIG5hbWUubGVuZ3RoKCksIHJnYik7CisgICAgcmV0
dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5ndGgoKSwgcmdi
KTsKK30KKworaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiBjMSwgY29uc3QgQ29s
b3ImIGMyKQoreworICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFzc3VtaW5nIHRoYXQgdGhlIGNvbG9y
cyBhcmUgaW4gdGhlIHNhbWUgY29sb3JzcGFjZS4KKyAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
cHJvYmFibHkgcmV0dXJuIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBidXQgbWFueSBvZiB0aGUg
Y2FsbAorICAgIC8vIHNpdGVzIGhhdmUgcGlja2VkIGNvbXBhcmlzb24gdmFsdWVzIGJhc2VkIG9u
IGZlZWwuIFdlJ2QgbmVlZCB0byBicmVhayBvdXQKKyAgICAvLyBvdXIgbG9nYXJpdGhtIHRhYmxl
cyB0byBjaGFuZ2UgdGhlbSA6KQorICAgIGludCBjMVJlZCA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMx
LmFzRXh0ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMxLnJnYigpLnJlZENvbXBvbmVudCgpOworICAg
IGludCBjMUdyZWVuID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmdyZWVuKCkg
KiAyNTUgOiBjMS5yZ2IoKS5ncmVlbkNvbXBvbmVudCgpOworICAgIGludCBjMUJsdWUgPSBjMS5p
c0V4dGVuZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1IDogYzEucmdiKCkuYmx1
ZUNvbXBvbmVudCgpOworICAgIGludCBjMlJlZCA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0
ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMyLnJnYigpLnJlZENvbXBvbmVudCgpOworICAgIGludCBj
MkdyZWVuID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUg
OiBjMi5yZ2IoKS5ncmVlbkNvbXBvbmVudCgpOworICAgIGludCBjMkJsdWUgPSBjMi5pc0V4dGVu
ZGVkKCkgPyBjMi5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1IDogYzIucmdiKCkuYmx1ZUNvbXBv
bmVudCgpOworICAgIGludCBkUiA9IGMxUmVkIC0gYzJSZWQ7CisgICAgaW50IGRHID0gYzFHcmVl
biAtIGMyR3JlZW47CisgICAgaW50IGRCID0gYzFCbHVlIC0gYzJCbHVlOworICAgIHJldHVybiBk
UiAqIGRSICsgZEcgKiBkRyArIGRCICogZEI7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgTmFt
ZWRDb2xvciogZmluZE5hbWVkQ29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIGNoYXIg
YnVmZmVyWzY0XTsgLy8gZWFzaWx5IGJpZyBlbm91Z2ggZm9yIHRoZSBsb25nZXN0IGNvbG9yIG5h
bWUKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOworICAgIGlmIChsZW5ndGgg
PiBzaXplb2YoYnVmZmVyKSAtIDEpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBVQ2hhciBjID0gbmFt
ZVtpXTsKKyAgICAgICAgaWYgKCFjIHx8ICFXVEY6OmlzQVNDSUkoYykpCisgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgYnVmZmVyW2ldID0gdG9BU0NJSUxvd2VyKHN0YXRpY19j
YXN0PGNoYXI+KGMpKTsKKyAgICB9CisgICAgYnVmZmVyW2xlbmd0aF0gPSAnXDAnOworICAgIHJl
dHVybiBmaW5kQ29sb3IoYnVmZmVyLCBsZW5ndGgpOworfQorCitDb2xvcjo6Q29sb3IoY29uc3Qg
U3RyaW5nJiBuYW1lKQoreworICAgIGlmIChuYW1lWzBdID09ICcjJykgeworICAgICAgICBSR0JB
MzIgY29sb3I7CisgICAgICAgIGJvb2wgdmFsaWQ7CisKKyAgICAgICAgaWYgKG5hbWUuaXM4Qml0
KCkpCisgICAgICAgICAgICB2YWxpZCA9IHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgp
ICsgMSwgbmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgdmFsaWQgPSBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2KCkgKyAxLCBuYW1lLmxl
bmd0aCgpIC0gMSwgY29sb3IpOworCisgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHNl
dFJHQihjb2xvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGF1dG8qIGZvdW5kQ29sb3Ig
PSBmaW5kTmFtZWRDb2xvcihuYW1lKSkKKyAgICAgICAgICAgIHNldFJHQih7IGZvdW5kQ29sb3It
PkFSR0JWYWx1ZSB9KTsKKyAgICB9Cit9CisKK0NvbG9yOjpDb2xvcihjb25zdCBjaGFyKiBuYW1l
KQoreworICAgIGlmIChuYW1lWzBdID09ICcjJykgeworICAgICAgICBTaW1wbGVDb2xvciBjb2xv
cjsKKyAgICAgICAgaWYgKHBhcnNlSGV4Q29sb3IocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hh
cio+KCZuYW1lWzFdKSwgc3RkOjpzdHJsZW4oJm5hbWVbMV0pLCBjb2xvcikpCisgICAgICAgICAg
ICBzZXRSR0IoY29sb3IpOworICAgIH0gZWxzZSBpZiAoYXV0byogZm91bmRDb2xvciA9IGZpbmRD
b2xvcihuYW1lLCBzdHJsZW4obmFtZSkpKQorICAgICAgICBzZXRSR0IoeyBmb3VuZENvbG9yLT5B
UkdCVmFsdWUgfSk7Cit9CisKK0NvbG9yOjpDb2xvcihjb25zdCBDb2xvciYgb3RoZXIpCisgICAg
OiBtX2NvbG9yRGF0YShvdGhlci5tX2NvbG9yRGF0YSkKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgp
KQorICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWYoKTsKK30KKworQ29sb3I6
OkNvbG9yKENvbG9yJiYgb3RoZXIpCit7CisgICAgKnRoaXMgPSBXVEZNb3ZlKG90aGVyKTsKK30K
KworQ29sb3I6OkNvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhh
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCisgICAgOiBDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVh
dGUoYzEsIGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UpKQoreworfQorCitDb2xvcjo6Q29sb3Io
UmVmPEV4dGVuZGVkQ29sb3I+JiYgZXh0ZW5kZWRDb2xvcikKK3sKKyAgICAvLyBaZXJvIHRoZSB1
bmlvbiwganVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCisgICAg
Ly8gdG9wIDMyIGJpdHMgd2hlbiBjb3B5aW5nIHRoZSBleHRlbmRlZENvbG9yIHBvaW50ZXIgYmVs
b3cuCisgICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gMDsKKyAgICBtX2NvbG9yRGF0YS5l
eHRlbmRlZENvbG9yID0gJmV4dGVuZGVkQ29sb3IubGVha1JlZigpOworICAgIEFTU0VSVChpc0V4
dGVuZGVkKCkpOworfQorCitDb2xvciYgQ29sb3I6Om9wZXJhdG9yPShjb25zdCBDb2xvciYgb3Ro
ZXIpCit7CisgICAgaWYgKCp0aGlzID09IG90aGVyKQorICAgICAgICByZXR1cm4gKnRoaXM7CisK
KyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9y
LT5kZXJlZigpOworCisgICAgbV9jb2xvckRhdGEgPSBvdGhlci5tX2NvbG9yRGF0YTsKKworICAg
IGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJl
ZigpOworICAgIHJldHVybiAqdGhpczsKK30KKworQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oQ29s
b3ImJiBvdGhlcikKK3sKKyAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCisgICAgICAgIHJldHVybiAq
dGhpczsKKworICAgIGlmIChpc0V4dGVuZGVkKCkpCisgICAgICAgIG1fY29sb3JEYXRhLmV4dGVu
ZGVkQ29sb3ItPmRlcmVmKCk7CisKKyAgICBtX2NvbG9yRGF0YSA9IG90aGVyLm1fY29sb3JEYXRh
OworICAgIG90aGVyLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IGludmFsaWRSR0JBQ29sb3I7
CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1N0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXph
dGlvbkZvckhUTUwoKSBjb25zdAoreworICAgIGlmIChpc09wYXF1ZSgpKQorICAgICAgICByZXR1
cm4gbWFrZVN0cmluZygnIycsIGhleChyZWRDb21wb25lbnQoKSwgMiwgTG93ZXJjYXNlKSwgaGV4
KGdyZWVuQ29tcG9uZW50KCksIDIsIExvd2VyY2FzZSksIGhleChibHVlQ29tcG9uZW50KCksIDIs
IExvd2VyY2FzZSkpOworICAgIHJldHVybiBzZXJpYWxpemF0aW9uRm9yQ1NTKCk7Cit9CisKK1N0
cmluZyBDb2xvcjo6c2VyaWFsaXplZCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkK
KyAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7CisgICAgcmV0dXJuIHJnYigp
LnNlcmlhbGl6YXRpb25Gb3JIVE1MKCk7Cit9CisKK3N0YXRpYyBjaGFyIGRlY2ltYWxEaWdpdCh1
bnNpZ25lZCBudW1iZXIpCit7CisgICAgQVNTRVJUKG51bWJlciA8IDEwKTsKKyAgICByZXR1cm4g
JzAnICsgbnVtYmVyOworfQorCitzdGF0aWMgc3RkOjphcnJheTxjaGFyLCA0PiBmcmFjdGlvbkRp
Z2l0c0ZvckZyYWN0aW9uYWxBbHBoYVZhbHVlKHVpbnQ4X3QgYWxwaGEpCit7CisgICAgQVNTRVJU
KGFscGhhID4gMCk7CisgICAgQVNTRVJUKGFscGhhIDwgMHhGRik7CisgICAgaWYgKCgoYWxwaGEg
KiAxMDAgKyAweDdGKSAvIDB4RkYgKiAweEZGICsgNTApIC8gMTAwICE9IGFscGhhKQorICAgICAg
ICByZXR1cm4geyB7IGRlY2ltYWxEaWdpdChhbHBoYSAqIDEwIC8gMHhGRiAlIDEwKSwgZGVjaW1h
bERpZ2l0KGFscGhhICogMTAwIC8gMHhGRiAlIDEwKSwgZGVjaW1hbERpZ2l0KChhbHBoYSAqIDEw
MDAgKyAweDdGKSAvIDB4RkYgJSAxMCksICdcMCcgfSB9OworICAgIGlmIChpbnQgdGhpcmREaWdp
dCA9IChhbHBoYSAqIDEwMCArIDB4N0YpIC8gMHhGRiAlIDEwKQorICAgICAgICByZXR1cm4geyB7
IGRlY2ltYWxEaWdpdChhbHBoYSAqIDEwIC8gMHhGRiksIGRlY2ltYWxEaWdpdCh0aGlyZERpZ2l0
KSwgJ1wwJywgJ1wwJyB9IH07CisgICAgcmV0dXJuIHsgeyBkZWNpbWFsRGlnaXQoKGFscGhhICog
MTAgKyAweDdGKSAvIDB4RkYpLCAnXDAnLCAnXDAnLCAnXDAnIH0gfTsKK30KKworU3RyaW5nIFNp
bXBsZUNvbG9yOjpzZXJpYWxpemF0aW9uRm9yQ1NTKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGFs
cGhhQ29tcG9uZW50KCkpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5n
KCJyZ2JhKCIsIHJlZENvbXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgpLCAiLCAiLCBi
bHVlQ29tcG9uZW50KCksICIsIDApIik7CisgICAgY2FzZSAweEZGOgorICAgICAgICByZXR1cm4g
bWFrZVN0cmluZygicmdiKCIsIHJlZENvbXBvbmVudCgpLCAiLCAiLCBncmVlbkNvbXBvbmVudCgp
LCAiLCAiLCBibHVlQ29tcG9uZW50KCksICcpJyk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIG1ha2VTdHJpbmcoInJnYmEoIiwgcmVkQ29tcG9uZW50KCksICIsICIsIGdyZWVuQ29tcG9u
ZW50KCksICIsICIsIGJsdWVDb21wb25lbnQoKSwgIiwgMC4iLCBmcmFjdGlvbkRpZ2l0c0ZvckZy
YWN0aW9uYWxBbHBoYVZhbHVlKGFscGhhQ29tcG9uZW50KCkpLmRhdGEoKSwgJyknKTsKKyAgICB9
Cit9CisKK1N0cmluZyBDb2xvcjo6Y3NzVGV4dCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5k
ZWQoKSkKKyAgICAgICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5jc3NUZXh0KCk7CisgICAgcmV0dXJu
IHJnYigpLnNlcmlhbGl6YXRpb25Gb3JDU1MoKTsKK30KKworU3RyaW5nIFJHQkEzMjo6c2VyaWFs
aXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoKSBjb25zdAoreworICAgIGlmIChhbHBoYUNvbXBv
bmVudCgpIDwgMHhGRikKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcoJyMnLCBoZXgocmVkQ29t
cG9uZW50KCksIDIpLCBoZXgoZ3JlZW5Db21wb25lbnQoKSwgMiksIGhleChibHVlQ29tcG9uZW50
KCksIDIpLCBoZXgoYWxwaGFDb21wb25lbnQoKSwgMikpOworICAgIHJldHVybiBtYWtlU3RyaW5n
KCcjJywgaGV4KHJlZENvbXBvbmVudCgpLCAyKSwgaGV4KGdyZWVuQ29tcG9uZW50KCksIDIpLCBo
ZXgoYmx1ZUNvbXBvbmVudCgpLCAyKSk7Cit9CisKK1N0cmluZyBDb2xvcjo6bmFtZUZvclJlbmRl
clRyZWVBc1RleHQoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBIYW5kbGUgZXh0ZW5kZWQgY29s
b3JzLgorICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgp
OworfQorCitDb2xvciBDb2xvcjo6bGlnaHQoKSBjb25zdAoreworICAgIC8vIEhhcmRjb2RlIHRo
aXMgY29tbW9uIGNhc2UgZm9yIHNwZWVkLgorICAgIGlmIChyZ2IoKSA9PSBibGFjaykKKyAgICAg
ICAgcmV0dXJuIGxpZ2h0ZW5lZEJsYWNrOworICAgIAorICAgIGNvbnN0IGZsb2F0IHNjYWxlRmFj
dG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOworCisgICAgYXV0byBbciwgZywgYiwgYV0g
PSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisKKyAgICBmbG9hdCB2ID0gc3RkOjptYXgoeyBy
LCBnLCBiIH0pOworCisgICAgaWYgKHYgPT0gMC4wZikKKyAgICAgICAgcmV0dXJuIGxpZ2h0ZW5l
ZEJsYWNrLmNvbG9yV2l0aEFscGhhKGFscGhhKCkpOworCisgICAgZmxvYXQgbXVsdGlwbGllciA9
IHN0ZDo6bWluKDEuMGYsIHYgKyAwLjMzZikgLyB2OworCisgICAgcmV0dXJuIHsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAg
c3RhdGljX2Nhc3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAg
YWxwaGEoKQorICAgIH07Cit9CisKK0NvbG9yIENvbG9yOjpkYXJrKCkgY29uc3QKK3sKKyAgICAv
LyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVlZC4KKyAgICBpZiAocmdiKCkgPT0g
d2hpdGUpCisgICAgICAgIHJldHVybiBkYXJrZW5lZFdoaXRlOworICAgIAorICAgIGNvbnN0IGZs
b2F0IHNjYWxlRmFjdG9yID0gbmV4dGFmdGVyZigyNTYuMGYsIDAuMGYpOworCisgICAgYXV0byBb
ciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCk7CisKKyAgICBmbG9hdCB2ID0g
c3RkOjptYXgoeyByLCBnLCBiIH0pOworICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1heCgw
LjBmLCAodiAtIDAuMzNmKSAvIHYpOworCisgICAgcmV0dXJuIHsKKyAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihtdWx0aXBsaWVyICogciAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihtdWx0aXBsaWVyICogZyAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgc3RhdGljX2Nh
c3Q8aW50PihtdWx0aXBsaWVyICogYiAqIHNjYWxlRmFjdG9yKSwKKyAgICAgICAgYWxwaGEoKQor
ICAgIH07Cit9CisKK2Jvb2wgQ29sb3I6OmlzRGFyaygpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIHByb2JhYmx5IGJlIHVzaW5nIGx1bWluYW5jZS4KKyAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICBmbG9hdCBsYXJnZXN0Tm9u
QWxwaGFDaGFubmVsID0gc3RkOjptYXgoeyByLCBnLCBiIH0pOworICAgIHJldHVybiBhID4gMC41
ICYmIGxhcmdlc3ROb25BbHBoYUNoYW5uZWwgPCAwLjU7Cit9CisKK2Zsb2F0IENvbG9yOjpsaWdo
dG5lc3MoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBUaGlzIGNhbiBwcm9iYWJseSBhdm9pZCBj
b252ZXJzaW9uIHRvIHNSR0IgYnkgaGF2aW5nIHBlci1jb2xvcnNwYWNlIGFsZ29yaXRobXMgZm9y
IEhTTC4KKyAgICByZXR1cm4gV2ViQ29yZTo6bGlnaHRuZXNzKHRvU1JHQkFDb21wb25lbnRzTG9z
c3koKSk7Cit9CisKK0NvbG9yIENvbG9yOjpibGVuZChjb25zdCBDb2xvciYgc291cmNlKSBjb25z
dAoreworICAgIGlmICghaXNWaXNpYmxlKCkgfHwgc291cmNlLmlzT3BhcXVlKCkpCisgICAgICAg
IHJldHVybiBzb3VyY2U7CisKKyAgICBpZiAoIXNvdXJjZS5hbHBoYSgpKQorICAgICAgICByZXR1
cm4gKnRoaXM7CisKKyAgICBhdXRvIFtzZWxmUiwgc2VsZkcsIHNlbGZCLCBzZWxmQV0gPSB0b1NS
R0JBU2ltcGxlQ29sb3JMb3NzeSgpOworICAgIGF1dG8gW3NvdXJjZVIsIHNvdXJjZUcsIHNvdXJj
ZUIsIHNvdXJjZUFdID0gc291cmNlLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisKKyAgICBp
bnQgZCA9IDB4RkYgKiAoc2VsZkEgKyBzb3VyY2VBKSAtIHNlbGZBICogc291cmNlQTsKKyAgICBp
bnQgYSA9IGQgLyAweEZGOworICAgIGludCByID0gKHNlbGZSICogc2VsZkEgKiAoMHhGRiAtIHNv
dXJjZUEpICsgMHhGRiAqIHNvdXJjZUEgKiBzb3VyY2VSKSAvIGQ7CisgICAgaW50IGcgPSAoc2Vs
ZkcgKiBzZWxmQSAqICgweEZGIC0gc291cmNlQSkgKyAweEZGICogc291cmNlQSAqIHNvdXJjZUcp
IC8gZDsKKyAgICBpbnQgYiA9IChzZWxmQiAqIHNlbGZBICogKDB4RkYgLSBzb3VyY2VBKSArIDB4
RkYgKiBzb3VyY2VBICogc291cmNlQikgLyBkOworCisgICAgcmV0dXJuIG1ha2VSR0JBKHIsIGcs
IGIsIGEpOworfQorCitDb2xvciBDb2xvcjo6YmxlbmRXaXRoV2hpdGUoKSBjb25zdAoreworICAg
IGNvbnN0ZXhwciBpbnQgc3RhcnRBbHBoYSA9IDE1MzsgLy8gNjAlCisgICAgY29uc3RleHByIGlu
dCBlbmRBbHBoYSA9IDIwNDsgLy8gODAlOworICAgIGNvbnN0ZXhwciBpbnQgYWxwaGFJbmNyZW1l
bnQgPSAxNzsKKworICAgIGF1dG8gYmxlbmRDb21wb25lbnQgPSBbXShpbnQgYywgaW50IGEpIC0+
IGludCB7CisgICAgICAgIGZsb2F0IGFscGhhID0gYSAvIDI1NS4wZjsKKyAgICAgICAgaW50IHdo
aXRlQmxlbmQgPSAyNTUgLSBhOworICAgICAgICBjIC09IHdoaXRlQmxlbmQ7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KGMgLyBhbHBoYSk7CisgICAgfTsKKworICAgIC8vIElmIHRo
ZSBjb2xvciBjb250YWlucyBhbHBoYSBhbHJlYWR5LCB3ZSBsZWF2ZSBpdCBhbG9uZS4KKyAgICBp
ZiAoIWlzT3BhcXVlKCkpCisgICAgICAgIHJldHVybiAqdGhpczsKKworICAgIGF1dG8gW2V4aXN0
aW5nUiwgZXhpc3RpbmdHLCBleGlzdGluZ0IsIGV4aXN0aW5nQWxwaGFdID0gdG9TUkdCQVNpbXBs
ZUNvbG9yTG9zc3koKTsKKworICAgIENvbG9yIHJlc3VsdDsKKyAgICBmb3IgKGludCBhbHBoYSA9
IHN0YXJ0QWxwaGE7IGFscGhhIDw9IGVuZEFscGhhOyBhbHBoYSArPSBhbHBoYUluY3JlbWVudCkg
eworICAgICAgICAvLyBXZSBoYXZlIGEgc29saWQgY29sb3IuICBDb252ZXJ0IHRvIGFuIGVxdWl2
YWxlbnQgY29sb3IgdGhhdCBsb29rcyB0aGUgc2FtZSB3aGVuIGJsZW5kZWQgd2l0aCB3aGl0ZQor
ICAgICAgICAvLyBhdCB0aGUgY3VycmVudCBhbHBoYS4gIFRyeSB1c2luZyBsZXNzIHRyYW5zcGFy
ZW5jeSBpZiB0aGUgbnVtYmVycyBlbmQgdXAgYmVpbmcgbmVnYXRpdmUuCisgICAgICAgIGludCBy
ID0gYmxlbmRDb21wb25lbnQoZXhpc3RpbmdSLCBhbHBoYSk7CisgICAgICAgIGludCBnID0gYmxl
bmRDb21wb25lbnQoZXhpc3RpbmdHLCBhbHBoYSk7CisgICAgICAgIGludCBiID0gYmxlbmRDb21w
b25lbnQoZXhpc3RpbmdCLCBhbHBoYSk7CisgICAgICAgIAorICAgICAgICByZXN1bHQgPSBtYWtl
UkdCQShyLCBnLCBiLCBhbHBoYSk7CisKKyAgICAgICAgaWYgKHIgPj0gMCAmJiBnID49IDAgJiYg
YiA+PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLy8gRklYTUU6IFdoeSBp
cyBwcmVzZXJ2aW5nIHRoZSBzZW1hbnRpYyBiaXQgZGVzaXJlZCBhbmQvb3IgY29ycmVjdCBoZXJl
PworICAgIGlmIChpc1NlbWFudGljKCkpCisgICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVs
dGlwbGllZEJ5KGZsb2F0IGFtb3VudCkgY29uc3QKK3sKKyAgICBmbG9hdCBuZXdBbHBoYSA9IGFt
b3VudCAqIChpc0V4dGVuZGVkKCkgPyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5hbHBoYSgp
IDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKCkpIC8gMjU1KTsKKyAgICByZXR1cm4gY29sb3JX
aXRoQWxwaGEobmV3QWxwaGEpOworfQorCitDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYW1vdW50KSBjb25zdAorewor
ICAgIGZsb2F0IG5ld0FscGhhID0gYW1vdW50ICogKGlzRXh0ZW5kZWQoKSA/IG1fY29sb3JEYXRh
LmV4dGVuZGVkQ29sb3ItPmFscGhhKCkgOiBzdGF0aWNfY2FzdDxmbG9hdD4oYWxwaGEoKSkgLyAy
NTUpOworICAgIHJldHVybiBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhu
ZXdBbHBoYSk7Cit9CisKK0NvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkg
Y29uc3QKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGF1dG8mIGV4dGVuZGVk
Q29sb3IgPSBhc0V4dGVuZGVkKCk7CisgICAgICAgIHJldHVybiBDb2xvciB7IGV4dGVuZGVkQ29s
b3IucmVkKCksIGV4dGVuZGVkQ29sb3IuZ3JlZW4oKSwgZXh0ZW5kZWRDb2xvci5ibHVlKCksIGFs
cGhhLCBleHRlbmRlZENvbG9yLmNvbG9yU3BhY2UoKSB9OworICAgIH0KKworICAgIC8vIEZJWE1F
OiBUaGlzIGlzIHdoZXJlIHRoaXMgZnVuY3Rpb24gZGlmZmVycyBmcm9tIGNvbG9yV2l0aEFscGhh
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nLgorICAgIHVpbnQ4X3QgbmV3QWxwaGEgPSBhbHBoYSAq
IDB4RkY7CisKKyAgICBDb2xvciByZXN1bHQgPSByZ2IoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBo
YSk7CisgICAgaWYgKGlzU2VtYW50aWMoKSkKKyAgICAgICAgcmVzdWx0LnNldElzU2VtYW50aWMo
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFV
c2luZ0FsdGVybmF0aXZlUm91bmRpbmcoZmxvYXQgYWxwaGEpIGNvbnN0Cit7CisgICAgaWYgKGlz
RXh0ZW5kZWQoKSkgeworICAgICAgICBhdXRvJiBleHRlbmRlZENvbG9yID0gYXNFeHRlbmRlZCgp
OworICAgICAgICByZXR1cm4gQ29sb3IgeyBleHRlbmRlZENvbG9yLnJlZCgpLCBleHRlbmRlZENv
bG9yLmdyZWVuKCksIGV4dGVuZGVkQ29sb3IuYmx1ZSgpLCBhbHBoYSwgZXh0ZW5kZWRDb2xvci5j
b2xvclNwYWNlKCkgfTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlz
IGZ1bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVzaW5nLgorICAgIHVpbnQ4X3Qg
bmV3QWxwaGEgPSBjb2xvckZsb2F0VG9SR0JBQnl0ZShhbHBoYSk7CisKKyAgICBDb2xvciByZXN1
bHQgPSByZ2IoKS5jb2xvcldpdGhBbHBoYShuZXdBbHBoYSk7CisgICAgaWYgKGlzU2VtYW50aWMo
KSkKKyAgICAgICAgcmVzdWx0LnNldElzU2VtYW50aWMoKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitDb2xvciBDb2xvcjo6aW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShmbG9hdCBhbHBoYSkgY29u
c3QKK3sKKyAgICBpZiAoaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gQ29sb3IgeyBhc0V4
dGVuZGVkKCkuaW52ZXJ0ZWRDb2xvcldpdGhBbHBoYShhbHBoYSkgfTsKKworICAgIGF1dG8gW3Is
IGcsIGIsIGV4aXN0aW5nQWxwaGFdID0gcmdiKCk7CisgICAgcmV0dXJuIHsgMHhGRiAtIHIsIDB4
RkYgLSBnLCAweEZGIC0gYiwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoYWxwaGEpIH07Cit9CisKK0Nv
bG9yIENvbG9yOjpzZW1hbnRpY0NvbG9yKCkgY29uc3QKK3sKKyAgICBpZiAoaXNTZW1hbnRpYygp
KQorICAgICAgICByZXR1cm4gKnRoaXM7CisKKyAgICByZXR1cm4geyB0b1NSR0JBU2ltcGxlQ29s
b3JMb3NzeSgpLCBTZW1hbnRpYyB9OworfQorCitzdGQ6OnBhaXI8Q29sb3JTcGFjZSwgRmxvYXRD
b21wb25lbnRzPiBDb2xvcjo6Y29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdAoreworICAg
IGlmIChpc0V4dGVuZGVkKCkpIHsKKyAgICAgICAgYXV0byYgZXh0ZW5kZWRDb2xvciA9IGFzRXh0
ZW5kZWQoKTsKKyAgICAgICAgcmV0dXJuIHsgZXh0ZW5kZWRDb2xvci5jb2xvclNwYWNlKCksIGV4
dGVuZGVkQ29sb3IuY2hhbm5lbHMoKSB9OworICAgIH0KKworICAgIGF1dG8gW3IsIGcsIGIsIGFd
ID0gcmdiKCk7CisgICAgcmV0dXJuIHsgQ29sb3JTcGFjZTo6U1JHQiwgRmxvYXRDb21wb25lbnRz
IHsgciAvIDI1NS4wZiwgZyAvIDI1NS4wZiwgYiAvIDI1NS4wZiwgIGEgLyAyNTUuMGYgfSB9Owor
fQorCitTaW1wbGVDb2xvciBDb2xvcjo6dG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSBjb25zdAor
eworICAgIGlmICghaXNFeHRlbmRlZCgpKQorICAgICAgICByZXR1cm4gcmdiKCk7CisKKyAgICBh
dXRvIFtyLCBnLCBiLCBhXSA9IHRvU1JHQkFDb21wb25lbnRzTG9zc3koKTsKKyAgICByZXR1cm4g
bWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywgYiwgYSk7Cit9CisKK0Zsb2F0Q29tcG9uZW50cyBD
b2xvcjo6dG9TUkdCQUNvbXBvbmVudHNMb3NzeSgpIGNvbnN0Cit7CisgICAgYXV0byBbY29sb3JT
cGFjZSwgY29tcG9uZW50c10gPSBjb2xvclNwYWNlQW5kQ29tcG9uZW50cygpOworICAgIHN3aXRj
aCAoY29sb3JTcGFjZSkgeworICAgIGNhc2UgQ29sb3JTcGFjZTo6U1JHQjoKKyAgICAgICAgcmV0
dXJuIGNvbXBvbmVudHM7CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5lYXJSR0I6CisgICAgICAg
IHJldHVybiBsaW5lYXJUb1JHQkNvbXBvbmVudHMoY29tcG9uZW50cyk7CisgICAgY2FzZSBDb2xv
clNwYWNlOjpEaXNwbGF5UDM6CisgICAgICAgIHJldHVybiBwM1RvU1JHQihjb21wb25lbnRzKTsK
KyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwor
Ym9vbCBleHRlbmRlZENvbG9yc0VxdWFsKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikK
K3sKKyAgICBpZiAoYS5pc0V4dGVuZGVkKCkgJiYgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJl
dHVybiBhLmFzRXh0ZW5kZWQoKSA9PSBiLmFzRXh0ZW5kZWQoKTsKKworICAgIEFTU0VSVChhLmlz
RXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitD
b2xvciBibGVuZChjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCit7CisgICAgLy8gRklYTUU6IEV4dGVuZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUg
Y29sb3Igc3BhY2VzLgorICAgIC8vIFdlIG5lZWQgdG8gcHJlc2VydmUgdGhlIHN0YXRlIG9mIHRo
ZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2YgdGhlIGFuaW1hdGlvbgorICAgIGlmIChwcm9ncmVz
cyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBDb2xvcigpOworCisgICAg
Ly8gU2luY2UgbWFrZVByZW11bHRpcGxpZWRSR0JBKCkgYmFpbHMgb24gemVybyBhbHBoYSwgc3Bl
Y2lhbC1jYXNlIHRoYXQuCisgICAgYXV0byBwcmVtdWx0RnJvbSA9IGZyb20uYWxwaGEoKSA/IG1h
a2VQcmVtdWx0aXBsaWVkUkdCQShmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkpIDogQ29s
b3I6OnRyYW5zcGFyZW50OworICAgIGF1dG8gcHJlbXVsdFRvID0gdG8uYWxwaGEoKSA/IG1ha2VQ
cmVtdWx0aXBsaWVkUkdCQSh0by50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0
cmFuc3BhcmVudDsKKworICAgIFJHQkEzMiBwcmVtdWx0QmxlbmRlZCA9IG1ha2VSR0JBKAorICAg
ICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5yZWRDb21wb25lbnQoKSwgcHJlbXVsdFRv
LnJlZENvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11
bHRGcm9tLmdyZWVuQ29tcG9uZW50KCksIHByZW11bHRUby5ncmVlbkNvbXBvbmVudCgpLCBwcm9n
cmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKHByZW11bHRGcm9tLmJsdWVDb21wb25lbnQo
KSwgcHJlbXVsdFRvLmJsdWVDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3Jl
OjpibGVuZChwcmVtdWx0RnJvbS5hbHBoYUNvbXBvbmVudCgpLCBwcmVtdWx0VG8uYWxwaGFDb21w
b25lbnQoKSwgcHJvZ3Jlc3MpCisgICAgKTsKKworICAgIHJldHVybiBtYWtlVW5QcmVtdWx0aXBs
aWVkUkdCQShwcmVtdWx0QmxlbmRlZCk7Cit9CisKK0NvbG9yIGJsZW5kV2l0aG91dFByZW11bHRp
cGx5KGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykK
K3sKKyAgICAvLyBGSVhNRTogRXh0ZW5kZWRDb2xvciAtIG5lZWRzIHRvIGhhbmRsZSBjb2xvciBz
cGFjZXMuCisgICAgLy8gV2UgbmVlZCB0byBwcmVzZXJ2ZSB0aGUgc3RhdGUgb2YgdGhlIHZhbGlk
IGZsYWcgYXQgdGhlIGVuZCBvZiB0aGUgYW5pbWF0aW9uCisgICAgaWYgKHByb2dyZXNzID09IDEg
JiYgIXRvLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gZnJvbVNS
R0IgPSBmcm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisgICAgYXV0byB0b1NSR0IgPSBm
cm9tLnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7CisKKyAgICByZXR1cm4geworICAgICAgICBX
ZWJDb3JlOjpibGVuZChmcm9tU1JHQi5yZWRDb21wb25lbnQoKSwgdG9TUkdCLnJlZENvbXBvbmVu
dCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdlYkNvcmU6OmJsZW5kKGZyb21TUkdCLmdyZWVuQ29t
cG9uZW50KCksIHRvU1JHQi5ncmVlbkNvbXBvbmVudCgpLCBwcm9ncmVzcyksCisgICAgICAgIFdl
YkNvcmU6OmJsZW5kKGZyb21TUkdCLmJsdWVDb21wb25lbnQoKSwgdG9TUkdCLmJsdWVDb21wb25l
bnQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5hbHBoYUNv
bXBvbmVudCgpLCB0b1NSR0IuYWxwaGFDb21wb25lbnQoKSwgcHJvZ3Jlc3MpCisgICAgfTsKK30K
Kwordm9pZCBDb2xvcjo6dGFnQXNWYWxpZCgpCit7CisgICAgbV9jb2xvckRhdGEucmdiYUFuZEZs
YWdzIHw9IHZhbGlkUkdCQUNvbG9yOworfQorCitjb25zdCBFeHRlbmRlZENvbG9yJiBDb2xvcjo6
YXNFeHRlbmRlZCgpIGNvbnN0Cit7CisgICAgQVNTRVJUKGlzRXh0ZW5kZWQoKSk7CisgICAgcmV0
dXJuICptX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yOworfQorCitUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgcmV0dXJuIHRz
IDw8IGNvbG9yLm5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCk7Cit9CisKK1RleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKK3sKKyAgICBz
d2l0Y2ggKGNvbG9yU3BhY2UpIHsKKyAgICBjYXNlIENvbG9yU3BhY2U6OlNSR0I6CisgICAgICAg
IHRzIDw8ICJzUkdCIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb2xvclNwYWNlOjpMaW5l
YXJSR0I6CisgICAgICAgIHRzIDw8ICJMaW5lYXJSR0IiOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIENvbG9yU3BhY2U6OkRpc3BsYXlQMzoKKyAgICAgICAgdHMgPDwgIkRpc3BsYXlQMyI7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKClByb3BlcnR5IGNoYW5nZXMgb246IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1NpbXBsZUNvbG9yLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiMj
IC0wLDAgKzEgIyMKK25hdGl2ZQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIHByb3BlcnR5CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuY3Bw
CShyZXZpc2lvbiAyNjIxMDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
aW1wbGVDb2xvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDIyICsyNCwxNSBAQAogICovCiAK
ICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIlNpbXBs
ZUNvbG9yLmgiCiAKLSNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJD
b2xvclV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkhhc2hUb29scy5oIgogI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CiAjaW5jbHVkZSA8d3RmL0hleE51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9N
YXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1
ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0
aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGxpZ2h0ZW5lZEJsYWNrIHsgMHhGRjU0NTQ1NCB9Owot
c3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBkYXJrZW5lZFdoaXRlIHsgMHhGRkFCQUJBQiB9
OwotCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHByZW11bHRpcGxpZWRDaGFubmVsKHVuc2lnbmVk
IGMsIHVuc2lnbmVkIGEsIGJvb2wgY2VpbGluZyA9IHRydWUpCiB7CiAgICAgcmV0dXJuIGZhc3RE
aXZpZGVCeTI1NShjZWlsaW5nID8gYyAqIGEgKyAyNTQgOiBjICogYSk7CkBAIC03NCwxMiArNjcs
NiBAQCBSR0JBMzIgbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEoUkdCQTMyIHBpCiAgICAgcmV0dXJu
IHBpeGVsQ29sb3I7CiB9CiAKLXN0YXRpYyBpbnQgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQg
ZikKLXsKLSAgICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4dGFmdGVy
ZigyNTYsIDApIHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcKLSAgICByZXR1cm4gc3RkOjptYXgoMCwg
c3RkOjptaW4oc3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMjU1KSk7Ci19
Ci0KIFJHQkEzMiBtYWtlUkdCQTMyRnJvbUZsb2F0cyhmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBi
LCBmbG9hdCBhKQogewogICAgIHJldHVybiBtYWtlUkdCQShjb2xvckZsb2F0VG9SR0JBQnl0ZShy
KSwgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZyksIGNvbG9yRmxvYXRUb1JHQkFCeXRlKGIpLCBjb2xv
ckZsb2F0VG9SR0JBQnl0ZShhKSk7CkBAIC0xMDUsMTkzICs5Miw2IEBAIFJHQkEzMiBtYWtlUkdC
QUZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCAKICAgICByZXR1cm4gbWFrZVJHQkEociwgZywgYiwg
c3RhdGljX2Nhc3Q8ZmxvYXQ+KG5leHRhZnRlcigyNTYsIDApICogYSkpOwogfQogCi0vLyBvcmln
aW5hbGx5IG1vdmVkIGhlcmUgZnJvbSB0aGUgQ1NTIHBhcnNlcgotdGVtcGxhdGUgPHR5cGVuYW1l
IENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VIZXhDb2xvckludGVybmFs
KGNvbnN0IENoYXJhY3RlclR5cGUqIG5hbWUsIHVuc2lnbmVkIGxlbmd0aCwgUkdCQTMyJiByZ2Ip
Ci17Ci0gICAgaWYgKGxlbmd0aCAhPSAzICYmIGxlbmd0aCAhPSA0ICYmIGxlbmd0aCAhPSA2ICYm
IGxlbmd0aCAhPSA4KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgdW5zaWduZWQgdmFsdWUg
PSAwOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAg
ICBpZiAoIWlzQVNDSUlIZXhEaWdpdChuYW1lW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgdmFsdWUgPDw9IDQ7Ci0gICAgICAgIHZhbHVlIHw9IHRvQVNDSUlIZXhWYWx1
ZShuYW1lW2ldKTsKLSAgICB9Ci0gICAgaWYgKGxlbmd0aCA9PSA2KSB7Ci0gICAgICAgIHJnYiA9
IHsgMHhGRjAwMDAwMCB8IHZhbHVlIH07Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAg
ICBpZiAobGVuZ3RoID09IDgpIHsKLSAgICAgICAgLy8gV2UgcGFyc2VkIHRoZSB2YWx1ZXMgaW50
byBSR0JBIG9yZGVyLCBidXQgdGhlIFJHQkEzMiB0eXBlCi0gICAgICAgIC8vIGV4cGVjdHMgdGhl
bSB0byBiZSBpbiBBUkdCIG9yZGVyLCBzbyB3ZSByaWdodCByb3RhdGUgZWlnaHQgYml0cy4KLSAg
ICAgICAgcmdiID0geyB2YWx1ZSA8PCAyNCB8IHZhbHVlID4+IDggfTsKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotICAgIGlmIChsZW5ndGggPT0gNCkgewotICAgICAgICAvLyAjYWJjZCBj
b252ZXJ0cyB0byBkZGFhYmJjYyBpbiBSR0JBMzIuCi0gICAgICAgIHJnYiA9IHsgKHZhbHVlICYg
MHhGKSA8PCAyOCB8ICh2YWx1ZSAmIDB4RikgPDwgMjQKLSAgICAgICAgICAgIHwgKHZhbHVlICYg
MHhGMDAwKSA8PCA4IHwgKHZhbHVlICYgMHhGMDAwKSA8PCA0Ci0gICAgICAgICAgICB8ICh2YWx1
ZSAmIDB4RjAwKSA8PCA0IHwgKHZhbHVlICYgMHhGMDApCi0gICAgICAgICAgICB8ICh2YWx1ZSAm
IDB4RjApIHwgKHZhbHVlICYgMHhGMCkgPj4gNCB9OwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgLy8gI2FiYyBjb252ZXJ0cyB0byAjYWFiYmNjCi0gICAgcmdiID0geyAweEZGMDAw
MDAwCi0gICAgICAgIHwgKHZhbHVlICYgMHhGMDApIDw8IDEyIHwgKHZhbHVlICYgMHhGMDApIDw8
IDgKLSAgICAgICAgfCAodmFsdWUgJiAweEYwKSA8PCA4IHwgKHZhbHVlICYgMHhGMCkgPDwgNAot
ICAgICAgICB8ICh2YWx1ZSAmIDB4RikgPDwgNCB8ICh2YWx1ZSAmIDB4RikgfTsKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBMQ2hhciogbmFt
ZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikKLXsKLSAgICByZXR1cm4gcGFyc2VIZXhD
b2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwgcmdiKTsKLX0KLQotYm9vbCBDb2xvcjo6cGFyc2VI
ZXhDb2xvcihjb25zdCBVQ2hhciogbmFtZSwgdW5zaWduZWQgbGVuZ3RoLCBSR0JBMzImIHJnYikK
LXsKLSAgICByZXR1cm4gcGFyc2VIZXhDb2xvckludGVybmFsKG5hbWUsIGxlbmd0aCwgcmdiKTsK
LX0KLQotYm9vbCBDb2xvcjo6cGFyc2VIZXhDb2xvcihjb25zdCBTdHJpbmcmIG5hbWUsIFJHQkEz
MiYgcmdiKQotewotICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7Ci0gICAgaWYg
KCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobmFtZS5pczhCaXQoKSkK
LSAgICAgICAgcmV0dXJuIHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpLCBuYW1lLmxl
bmd0aCgpLCByZ2IpOwotICAgIHJldHVybiBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2
KCksIG5hbWUubGVuZ3RoKCksIHJnYik7Ci19Ci0KLWJvb2wgQ29sb3I6OnBhcnNlSGV4Q29sb3Io
Y29uc3QgU3RyaW5nVmlldyYgbmFtZSwgUkdCQTMyJiByZ2IpCi17Ci0gICAgdW5zaWduZWQgbGVu
Z3RoID0gbmFtZS5sZW5ndGgoKTsKLSAgICBpZiAoIWxlbmd0aCkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChuYW1lLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gcGFyc2VIZXhDb2xv
cihuYW1lLmNoYXJhY3RlcnM4KCksIG5hbWUubGVuZ3RoKCksIHJnYik7Ci0gICAgcmV0dXJuIHBh
cnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzMTYoKSwgbmFtZS5sZW5ndGgoKSwgcmdiKTsKLX0K
LQotaW50IGRpZmZlcmVuY2VTcXVhcmVkKGNvbnN0IENvbG9yJiBjMSwgY29uc3QgQ29sb3ImIGMy
KQotewotICAgIC8vIEZJWE1FOiBUaGlzIGlzIGFzc3VtaW5nIHRoYXQgdGhlIGNvbG9ycyBhcmUg
aW4gdGhlIHNhbWUgY29sb3JzcGFjZS4KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgcHJvYmFi
bHkgcmV0dXJuIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLCBidXQgbWFueSBvZiB0aGUgY2FsbAot
ICAgIC8vIHNpdGVzIGhhdmUgcGlja2VkIGNvbXBhcmlzb24gdmFsdWVzIGJhc2VkIG9uIGZlZWwu
IFdlJ2QgbmVlZCB0byBicmVhayBvdXQKLSAgICAvLyBvdXIgbG9nYXJpdGhtIHRhYmxlcyB0byBj
aGFuZ2UgdGhlbSA6KQotICAgIGludCBjMVJlZCA9IGMxLmlzRXh0ZW5kZWQoKSA/IGMxLmFzRXh0
ZW5kZWQoKS5yZWQoKSAqIDI1NSA6IGMxLnJnYigpLnJlZENvbXBvbmVudCgpOwotICAgIGludCBj
MUdyZWVuID0gYzEuaXNFeHRlbmRlZCgpID8gYzEuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUg
OiBjMS5yZ2IoKS5ncmVlbkNvbXBvbmVudCgpOwotICAgIGludCBjMUJsdWUgPSBjMS5pc0V4dGVu
ZGVkKCkgPyBjMS5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1IDogYzEucmdiKCkuYmx1ZUNvbXBv
bmVudCgpOwotICAgIGludCBjMlJlZCA9IGMyLmlzRXh0ZW5kZWQoKSA/IGMyLmFzRXh0ZW5kZWQo
KS5yZWQoKSAqIDI1NSA6IGMyLnJnYigpLnJlZENvbXBvbmVudCgpOwotICAgIGludCBjMkdyZWVu
ID0gYzIuaXNFeHRlbmRlZCgpID8gYzIuYXNFeHRlbmRlZCgpLmdyZWVuKCkgKiAyNTUgOiBjMi5y
Z2IoKS5ncmVlbkNvbXBvbmVudCgpOwotICAgIGludCBjMkJsdWUgPSBjMi5pc0V4dGVuZGVkKCkg
PyBjMi5hc0V4dGVuZGVkKCkuYmx1ZSgpICogMjU1IDogYzIucmdiKCkuYmx1ZUNvbXBvbmVudCgp
OwotICAgIGludCBkUiA9IGMxUmVkIC0gYzJSZWQ7Ci0gICAgaW50IGRHID0gYzFHcmVlbiAtIGMy
R3JlZW47Ci0gICAgaW50IGRCID0gYzFCbHVlIC0gYzJCbHVlOwotICAgIHJldHVybiBkUiAqIGRS
ICsgZEcgKiBkRyArIGRCICogZEI7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3QgTmFtZWRDb2xv
ciogZmluZE5hbWVkQ29sb3IoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGNoYXIgYnVmZmVy
WzY0XTsgLy8gZWFzaWx5IGJpZyBlbm91Z2ggZm9yIHRoZSBsb25nZXN0IGNvbG9yIG5hbWUKLSAg
ICB1bnNpZ25lZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOwotICAgIGlmIChsZW5ndGggPiBzaXpl
b2YoYnVmZmVyKSAtIDEpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBVQ2hhciBjID0gbmFtZVtpXTsK
LSAgICAgICAgaWYgKCFjIHx8ICFXVEY6OmlzQVNDSUkoYykpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgYnVmZmVyW2ldID0gdG9BU0NJSUxvd2VyKHN0YXRpY19jYXN0PGNo
YXI+KGMpKTsKLSAgICB9Ci0gICAgYnVmZmVyW2xlbmd0aF0gPSAnXDAnOwotICAgIHJldHVybiBm
aW5kQ29sb3IoYnVmZmVyLCBsZW5ndGgpOwotfQotCi1Db2xvcjo6Q29sb3IoY29uc3QgU3RyaW5n
JiBuYW1lKQotewotICAgIGlmIChuYW1lWzBdID09ICcjJykgewotICAgICAgICBSR0JBMzIgY29s
b3I7Ci0gICAgICAgIGJvb2wgdmFsaWQ7Ci0KLSAgICAgICAgaWYgKG5hbWUuaXM4Qml0KCkpCi0g
ICAgICAgICAgICB2YWxpZCA9IHBhcnNlSGV4Q29sb3IobmFtZS5jaGFyYWN0ZXJzOCgpICsgMSwg
bmFtZS5sZW5ndGgoKSAtIDEsIGNvbG9yKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgdmFs
aWQgPSBwYXJzZUhleENvbG9yKG5hbWUuY2hhcmFjdGVyczE2KCkgKyAxLCBuYW1lLmxlbmd0aCgp
IC0gMSwgY29sb3IpOwotCi0gICAgICAgIGlmICh2YWxpZCkKLSAgICAgICAgICAgIHNldFJHQihj
b2xvcik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGF1dG8qIGZvdW5kQ29sb3IgPSBmaW5k
TmFtZWRDb2xvcihuYW1lKSkKLSAgICAgICAgICAgIHNldFJHQih7IGZvdW5kQ29sb3ItPkFSR0JW
YWx1ZSB9KTsKLSAgICB9Ci19Ci0KLUNvbG9yOjpDb2xvcihjb25zdCBjaGFyKiBuYW1lKQotewot
ICAgIGlmIChuYW1lWzBdID09ICcjJykgewotICAgICAgICBTaW1wbGVDb2xvciBjb2xvcjsKLSAg
ICAgICAgaWYgKHBhcnNlSGV4Q29sb3IocmVpbnRlcnByZXRfY2FzdDxjb25zdCBMQ2hhcio+KCZu
YW1lWzFdKSwgc3RkOjpzdHJsZW4oJm5hbWVbMV0pLCBjb2xvcikpCi0gICAgICAgICAgICBzZXRS
R0IoY29sb3IpOwotICAgIH0gZWxzZSBpZiAoYXV0byogZm91bmRDb2xvciA9IGZpbmRDb2xvcihu
YW1lLCBzdHJsZW4obmFtZSkpKQotICAgICAgICBzZXRSR0IoeyBmb3VuZENvbG9yLT5BUkdCVmFs
dWUgfSk7Ci19Ci0KLUNvbG9yOjpDb2xvcihjb25zdCBDb2xvciYgb3RoZXIpCi0gICAgOiBtX2Nv
bG9yRGF0YShvdGhlci5tX2NvbG9yRGF0YSkKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAg
ICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5yZWYoKTsKLX0KLQotQ29sb3I6OkNvbG9y
KENvbG9yJiYgb3RoZXIpCi17Ci0gICAgKnRoaXMgPSBXVEZNb3ZlKG90aGVyKTsKLX0KLQotQ29s
b3I6OkNvbG9yKGZsb2F0IGMxLCBmbG9hdCBjMiwgZmxvYXQgYzMsIGZsb2F0IGFscGhhLCBDb2xv
clNwYWNlIGNvbG9yU3BhY2UpCi0gICAgOiBDb2xvcihFeHRlbmRlZENvbG9yOjpjcmVhdGUoYzEs
IGMyLCBjMywgYWxwaGEsIGNvbG9yU3BhY2UpKQotewotfQotCi1Db2xvcjo6Q29sb3IoUmVmPEV4
dGVuZGVkQ29sb3I+JiYgZXh0ZW5kZWRDb2xvcikKLXsKLSAgICAvLyBaZXJvIHRoZSB1bmlvbiwg
anVzdCBpbiBjYXNlIGEgMzItYml0IHN5c3RlbSBvbmx5IGFzc2lnbnMgdGhlCi0gICAgLy8gdG9w
IDMyIGJpdHMgd2hlbiBjb3B5aW5nIHRoZSBleHRlbmRlZENvbG9yIHBvaW50ZXIgYmVsb3cuCi0g
ICAgbV9jb2xvckRhdGEucmdiYUFuZEZsYWdzID0gMDsKLSAgICBtX2NvbG9yRGF0YS5leHRlbmRl
ZENvbG9yID0gJmV4dGVuZGVkQ29sb3IubGVha1JlZigpOwotICAgIEFTU0VSVChpc0V4dGVuZGVk
KCkpOwotfQotCi1Db2xvciYgQ29sb3I6Om9wZXJhdG9yPShjb25zdCBDb2xvciYgb3RoZXIpCi17
Ci0gICAgaWYgKCp0aGlzID09IG90aGVyKQotICAgICAgICByZXR1cm4gKnRoaXM7Ci0KLSAgICBp
ZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5kZXJl
ZigpOwotCi0gICAgbV9jb2xvckRhdGEgPSBvdGhlci5tX2NvbG9yRGF0YTsKLQotICAgIGlmIChp
c0V4dGVuZGVkKCkpCi0gICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPnJlZigpOwot
ICAgIHJldHVybiAqdGhpczsKLX0KLQotQ29sb3ImIENvbG9yOjpvcGVyYXRvcj0oQ29sb3ImJiBv
dGhlcikKLXsKLSAgICBpZiAoKnRoaXMgPT0gb3RoZXIpCi0gICAgICAgIHJldHVybiAqdGhpczsK
LQotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29s
b3ItPmRlcmVmKCk7Ci0KLSAgICBtX2NvbG9yRGF0YSA9IG90aGVyLm1fY29sb3JEYXRhOwotICAg
IG90aGVyLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IGludmFsaWRSR0JBQ29sb3I7Ci0KLSAg
ICByZXR1cm4gKnRoaXM7Ci19Ci0KIFN0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZv
ckhUTUwoKSBjb25zdAogewogICAgIGlmIChpc09wYXF1ZSgpKQpAQCAtMjk5LDEzICs5OSw2IEBA
IFN0cmluZyBTaW1wbGVDb2xvcjo6c2VyaWFsaXphdGlvbkZvckhUTUwKICAgICByZXR1cm4gc2Vy
aWFsaXphdGlvbkZvckNTUygpOwogfQogCi1TdHJpbmcgQ29sb3I6OnNlcmlhbGl6ZWQoKSBjb25z
dAotewotICAgIGlmIChpc0V4dGVuZGVkKCkpCi0gICAgICAgIHJldHVybiBhc0V4dGVuZGVkKCku
Y3NzVGV4dCgpOwotICAgIHJldHVybiByZ2IoKS5zZXJpYWxpemF0aW9uRm9ySFRNTCgpOwotfQot
CiBzdGF0aWMgY2hhciBkZWNpbWFsRGlnaXQodW5zaWduZWQgbnVtYmVyKQogewogICAgIEFTU0VS
VChudW1iZXIgPCAxMCk7CkBAIC0zMzUsMzE5ICsxMjgsMTEgQEAgU3RyaW5nIFNpbXBsZUNvbG9y
OjpzZXJpYWxpemF0aW9uRm9yQ1NTKAogICAgIH0KIH0KIAotU3RyaW5nIENvbG9yOjpjc3NUZXh0
KCkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYXNFeHRl
bmRlZCgpLmNzc1RleHQoKTsKLSAgICByZXR1cm4gcmdiKCkuc2VyaWFsaXphdGlvbkZvckNTUygp
OwotfQotCi1TdHJpbmcgUkdCQTMyOjpzZXJpYWxpemF0aW9uRm9yUmVuZGVyVHJlZUFzVGV4dCgp
IGNvbnN0CitTdHJpbmcgU2ltcGxlQ29sb3I6OnNlcmlhbGl6YXRpb25Gb3JSZW5kZXJUcmVlQXNU
ZXh0KCkgY29uc3QKIHsKICAgICBpZiAoYWxwaGFDb21wb25lbnQoKSA8IDB4RkYpCiAgICAgICAg
IHJldHVybiBtYWtlU3RyaW5nKCcjJywgaGV4KHJlZENvbXBvbmVudCgpLCAyKSwgaGV4KGdyZWVu
Q29tcG9uZW50KCksIDIpLCBoZXgoYmx1ZUNvbXBvbmVudCgpLCAyKSwgaGV4KGFscGhhQ29tcG9u
ZW50KCksIDIpKTsKICAgICByZXR1cm4gbWFrZVN0cmluZygnIycsIGhleChyZWRDb21wb25lbnQo
KSwgMiksIGhleChncmVlbkNvbXBvbmVudCgpLCAyKSwgaGV4KGJsdWVDb21wb25lbnQoKSwgMikp
OwogfQogCi1TdHJpbmcgQ29sb3I6Om5hbWVGb3JSZW5kZXJUcmVlQXNUZXh0KCkgY29uc3QKLXsK
LSAgICAvLyBGSVhNRTogSGFuZGxlIGV4dGVuZGVkIGNvbG9ycy4KLSAgICByZXR1cm4gcmdiKCku
c2VyaWFsaXphdGlvbkZvclJlbmRlclRyZWVBc1RleHQoKTsKLX0KLQotQ29sb3IgQ29sb3I6Omxp
Z2h0KCkgY29uc3QKLXsKLSAgICAvLyBIYXJkY29kZSB0aGlzIGNvbW1vbiBjYXNlIGZvciBzcGVl
ZC4KLSAgICBpZiAocmdiKCkgPT0gYmxhY2spCi0gICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFj
azsKLSAgICAKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IG5leHRhZnRlcmYoMjU2LjBm
LCAwLjBmKTsKLQotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNvbXBvbmVudHNMb3Nz
eSgpOwotCi0gICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsKLQotICAgIGlmICh2
ID09IDAuMGYpCi0gICAgICAgIHJldHVybiBsaWdodGVuZWRCbGFjay5jb2xvcldpdGhBbHBoYShh
bHBoYSgpKTsKLQotICAgIGZsb2F0IG11bHRpcGxpZXIgPSBzdGQ6Om1pbigxLjBmLCB2ICsgMC4z
M2YpIC8gdjsKLQotICAgIHJldHVybiB7Ci0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlw
bGllciAqIHIgKiBzY2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlw
bGllciAqIGcgKiBzY2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlw
bGllciAqIGIgKiBzY2FsZUZhY3RvciksCi0gICAgICAgIGFscGhhKCkKLSAgICB9OwotfQotCi1D
b2xvciBDb2xvcjo6ZGFyaygpIGNvbnN0Ci17Ci0gICAgLy8gSGFyZGNvZGUgdGhpcyBjb21tb24g
Y2FzZSBmb3Igc3BlZWQuCi0gICAgaWYgKHJnYigpID09IHdoaXRlKQotICAgICAgICByZXR1cm4g
ZGFya2VuZWRXaGl0ZTsKLSAgICAKLSAgICBjb25zdCBmbG9hdCBzY2FsZUZhY3RvciA9IG5leHRh
ZnRlcmYoMjU2LjBmLCAwLjBmKTsKLQotICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gdG9TUkdCQUNv
bXBvbmVudHNMb3NzeSgpOwotCi0gICAgZmxvYXQgdiA9IHN0ZDo6bWF4KHsgciwgZywgYiB9KTsK
LSAgICBmbG9hdCBtdWx0aXBsaWVyID0gc3RkOjptYXgoMC4wZiwgKHYgLSAwLjMzZikgLyB2KTsK
LQotICAgIHJldHVybiB7Ci0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIHIg
KiBzY2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGcg
KiBzY2FsZUZhY3RvciksCi0gICAgICAgIHN0YXRpY19jYXN0PGludD4obXVsdGlwbGllciAqIGIg
KiBzY2FsZUZhY3RvciksCi0gICAgICAgIGFscGhhKCkKLSAgICB9OwotfQotCi1ib29sIENvbG9y
Ojppc0RhcmsoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBwcm9iYWJseSBi
ZSB1c2luZyBsdW1pbmFuY2UuCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCk7Ci0gICAgZmxvYXQgbGFyZ2VzdE5vbkFscGhhQ2hhbm5lbCA9IHN0ZDo6bWF4
KHsgciwgZywgYiB9KTsKLSAgICByZXR1cm4gYSA+IDAuNSAmJiBsYXJnZXN0Tm9uQWxwaGFDaGFu
bmVsIDwgMC41OwotfQotCi1mbG9hdCBDb2xvcjo6bGlnaHRuZXNzKCkgY29uc3QKLXsKLSAgICAv
LyBGSVhNRTogVGhpcyBjYW4gcHJvYmFibHkgYXZvaWQgY29udmVyc2lvbiB0byBzUkdCIGJ5IGhh
dmluZyBwZXItY29sb3JzcGFjZSBhbGdvcml0aG1zIGZvciBIU0wuCi0gICAgcmV0dXJuIFdlYkNv
cmU6OmxpZ2h0bmVzcyh0b1NSR0JBQ29tcG9uZW50c0xvc3N5KCkpOwotfQotCi1Db2xvciBDb2xv
cjo6YmxlbmQoY29uc3QgQ29sb3ImIHNvdXJjZSkgY29uc3QKLXsKLSAgICBpZiAoIWlzVmlzaWJs
ZSgpIHx8IHNvdXJjZS5pc09wYXF1ZSgpKQotICAgICAgICByZXR1cm4gc291cmNlOwotCi0gICAg
aWYgKCFzb3VyY2UuYWxwaGEoKSkKLSAgICAgICAgcmV0dXJuICp0aGlzOwotCi0gICAgYXV0byBb
c2VsZlIsIHNlbGZHLCBzZWxmQiwgc2VsZkFdID0gdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKTsK
LSAgICBhdXRvIFtzb3VyY2VSLCBzb3VyY2VHLCBzb3VyY2VCLCBzb3VyY2VBXSA9IHNvdXJjZS50
b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpOwotCi0gICAgaW50IGQgPSAweEZGICogKHNlbGZBICsg
c291cmNlQSkgLSBzZWxmQSAqIHNvdXJjZUE7Ci0gICAgaW50IGEgPSBkIC8gMHhGRjsKLSAgICBp
bnQgciA9IChzZWxmUiAqIHNlbGZBICogKDB4RkYgLSBzb3VyY2VBKSArIDB4RkYgKiBzb3VyY2VB
ICogc291cmNlUikgLyBkOwotICAgIGludCBnID0gKHNlbGZHICogc2VsZkEgKiAoMHhGRiAtIHNv
dXJjZUEpICsgMHhGRiAqIHNvdXJjZUEgKiBzb3VyY2VHKSAvIGQ7Ci0gICAgaW50IGIgPSAoc2Vs
ZkIgKiBzZWxmQSAqICgweEZGIC0gc291cmNlQSkgKyAweEZGICogc291cmNlQSAqIHNvdXJjZUIp
IC8gZDsKLQotICAgIHJldHVybiBtYWtlUkdCQShyLCBnLCBiLCBhKTsKLX0KLQotQ29sb3IgQ29s
b3I6OmJsZW5kV2l0aFdoaXRlKCkgY29uc3QKLXsKLSAgICBjb25zdGV4cHIgaW50IHN0YXJ0QWxw
aGEgPSAxNTM7IC8vIDYwJQotICAgIGNvbnN0ZXhwciBpbnQgZW5kQWxwaGEgPSAyMDQ7IC8vIDgw
JTsKLSAgICBjb25zdGV4cHIgaW50IGFscGhhSW5jcmVtZW50ID0gMTc7Ci0KLSAgICBhdXRvIGJs
ZW5kQ29tcG9uZW50ID0gW10oaW50IGMsIGludCBhKSAtPiBpbnQgewotICAgICAgICBmbG9hdCBh
bHBoYSA9IGEgLyAyNTUuMGY7Ci0gICAgICAgIGludCB3aGl0ZUJsZW5kID0gMjU1IC0gYTsKLSAg
ICAgICAgYyAtPSB3aGl0ZUJsZW5kOwotICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pihj
IC8gYWxwaGEpOwotICAgIH07Ci0KLSAgICAvLyBJZiB0aGUgY29sb3IgY29udGFpbnMgYWxwaGEg
YWxyZWFkeSwgd2UgbGVhdmUgaXQgYWxvbmUuCi0gICAgaWYgKCFpc09wYXF1ZSgpKQotICAgICAg
ICByZXR1cm4gKnRoaXM7Ci0KLSAgICBhdXRvIFtleGlzdGluZ1IsIGV4aXN0aW5nRywgZXhpc3Rp
bmdCLCBleGlzdGluZ0FscGhhXSA9IHRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCk7Ci0KLSAgICBD
b2xvciByZXN1bHQ7Ci0gICAgZm9yIChpbnQgYWxwaGEgPSBzdGFydEFscGhhOyBhbHBoYSA8PSBl
bmRBbHBoYTsgYWxwaGEgKz0gYWxwaGFJbmNyZW1lbnQpIHsKLSAgICAgICAgLy8gV2UgaGF2ZSBh
IHNvbGlkIGNvbG9yLiAgQ29udmVydCB0byBhbiBlcXVpdmFsZW50IGNvbG9yIHRoYXQgbG9va3Mg
dGhlIHNhbWUgd2hlbiBibGVuZGVkIHdpdGggd2hpdGUKLSAgICAgICAgLy8gYXQgdGhlIGN1cnJl
bnQgYWxwaGEuICBUcnkgdXNpbmcgbGVzcyB0cmFuc3BhcmVuY3kgaWYgdGhlIG51bWJlcnMgZW5k
IHVwIGJlaW5nIG5lZ2F0aXZlLgotICAgICAgICBpbnQgciA9IGJsZW5kQ29tcG9uZW50KGV4aXN0
aW5nUiwgYWxwaGEpOwotICAgICAgICBpbnQgZyA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nRywg
YWxwaGEpOwotICAgICAgICBpbnQgYiA9IGJsZW5kQ29tcG9uZW50KGV4aXN0aW5nQiwgYWxwaGEp
OwotICAgICAgICAKLSAgICAgICAgcmVzdWx0ID0gbWFrZVJHQkEociwgZywgYiwgYWxwaGEpOwot
Ci0gICAgICAgIGlmIChyID49IDAgJiYgZyA+PSAwICYmIGIgPj0gMCkKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIC8vIEZJWE1FOiBXaHkgaXMgcHJlc2VydmluZyB0aGUgc2VtYW50
aWMgYml0IGRlc2lyZWQgYW5kL29yIGNvcnJlY3QgaGVyZT8KLSAgICBpZiAoaXNTZW1hbnRpYygp
KQotICAgICAgICByZXN1bHQuc2V0SXNTZW1hbnRpYygpOwotICAgIHJldHVybiByZXN1bHQ7Ci19
Ci0KLUNvbG9yIENvbG9yOjpjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeShmbG9hdCBhbW91bnQp
IGNvbnN0Ci17Ci0gICAgZmxvYXQgbmV3QWxwaGEgPSBhbW91bnQgKiAoaXNFeHRlbmRlZCgpID8g
bV9jb2xvckRhdGEuZXh0ZW5kZWRDb2xvci0+YWxwaGEoKSA6IHN0YXRpY19jYXN0PGZsb2F0Pihh
bHBoYSgpKSAvIDI1NSk7Ci0gICAgcmV0dXJuIGNvbG9yV2l0aEFscGhhKG5ld0FscGhhKTsKLX0K
LQotQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRlcm5hdGl2
ZVJvdW5kaW5nKGZsb2F0IGFtb3VudCkgY29uc3QKLXsKLSAgICBmbG9hdCBuZXdBbHBoYSA9IGFt
b3VudCAqIChpc0V4dGVuZGVkKCkgPyBtX2NvbG9yRGF0YS5leHRlbmRlZENvbG9yLT5hbHBoYSgp
IDogc3RhdGljX2Nhc3Q8ZmxvYXQ+KGFscGhhKCkpIC8gMjU1KTsKLSAgICByZXR1cm4gY29sb3JX
aXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcobmV3QWxwaGEpOwotfQotCi1Db2xvciBD
b2xvcjo6Y29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRXh0
ZW5kZWQoKSkgewotICAgICAgICBhdXRvJiBleHRlbmRlZENvbG9yID0gYXNFeHRlbmRlZCgpOwot
ICAgICAgICByZXR1cm4gQ29sb3IgeyBleHRlbmRlZENvbG9yLnJlZCgpLCBleHRlbmRlZENvbG9y
LmdyZWVuKCksIGV4dGVuZGVkQ29sb3IuYmx1ZSgpLCBhbHBoYSwgZXh0ZW5kZWRDb2xvci5jb2xv
clNwYWNlKCkgfTsKLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBpcyB3aGVyZSB0aGlzIGZ1
bmN0aW9uIGRpZmZlcnMgZnJvbSBjb2xvcldpdGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGlu
Zy4KLSAgICB1aW50OF90IG5ld0FscGhhID0gYWxwaGEgKiAweEZGOwotCi0gICAgQ29sb3IgcmVz
dWx0ID0gcmdiKCkuY29sb3JXaXRoQWxwaGEobmV3QWxwaGEpOwotICAgIGlmIChpc1NlbWFudGlj
KCkpCi0gICAgICAgIHJlc3VsdC5zZXRJc1NlbWFudGljKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5n
KGZsb2F0IGFscGhhKSBjb25zdAotewotICAgIGlmIChpc0V4dGVuZGVkKCkpIHsKLSAgICAgICAg
YXV0byYgZXh0ZW5kZWRDb2xvciA9IGFzRXh0ZW5kZWQoKTsKLSAgICAgICAgcmV0dXJuIENvbG9y
IHsgZXh0ZW5kZWRDb2xvci5yZWQoKSwgZXh0ZW5kZWRDb2xvci5ncmVlbigpLCBleHRlbmRlZENv
bG9yLmJsdWUoKSwgYWxwaGEsIGV4dGVuZGVkQ29sb3IuY29sb3JTcGFjZSgpIH07Ci0gICAgfQot
Ci0gICAgLy8gRklYTUU6IFRoaXMgaXMgd2hlcmUgdGhpcyBmdW5jdGlvbiBkaWZmZXJzIGZyb20g
Y29sb3JXaXRoQWxwaGFVc2luZy4KLSAgICB1aW50OF90IG5ld0FscGhhID0gY29sb3JGbG9hdFRv
UkdCQUJ5dGUoYWxwaGEpOwotCi0gICAgQ29sb3IgcmVzdWx0ID0gcmdiKCkuY29sb3JXaXRoQWxw
aGEobmV3QWxwaGEpOwotICAgIGlmIChpc1NlbWFudGljKCkpCi0gICAgICAgIHJlc3VsdC5zZXRJ
c1NlbWFudGljKCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotQ29sb3IgQ29sb3I6OmludmVy
dGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQgYWxwaGEpIGNvbnN0Ci17Ci0gICAgaWYgKGlzRXh0ZW5k
ZWQoKSkKLSAgICAgICAgcmV0dXJuIENvbG9yIHsgYXNFeHRlbmRlZCgpLmludmVydGVkQ29sb3JX
aXRoQWxwaGEoYWxwaGEpIH07Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBleGlzdGluZ0FscGhhXSA9
IHJnYigpOwotICAgIHJldHVybiB7IDB4RkYgLSByLCAweEZGIC0gZywgMHhGRiAtIGIsIGNvbG9y
RmxvYXRUb1JHQkFCeXRlKGFscGhhKSB9OwotfQotCi1Db2xvciBDb2xvcjo6c2VtYW50aWNDb2xv
cigpIGNvbnN0Ci17Ci0gICAgaWYgKGlzU2VtYW50aWMoKSkKLSAgICAgICAgcmV0dXJuICp0aGlz
OwotCi0gICAgcmV0dXJuIHsgdG9TUkdCQVNpbXBsZUNvbG9yTG9zc3koKSwgU2VtYW50aWMgfTsK
LX0KLQotc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9uZW50cz4gQ29sb3I6OmNvbG9y
U3BhY2VBbmRDb21wb25lbnRzKCkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKSB7Ci0g
ICAgICAgIGF1dG8mIGV4dGVuZGVkQ29sb3IgPSBhc0V4dGVuZGVkKCk7Ci0gICAgICAgIHJldHVy
biB7IGV4dGVuZGVkQ29sb3IuY29sb3JTcGFjZSgpLCBleHRlbmRlZENvbG9yLmNoYW5uZWxzKCkg
fTsKLSAgICB9Ci0KLSAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHJnYigpOwotICAgIHJldHVybiB7
IENvbG9yU3BhY2U6OlNSR0IsIEZsb2F0Q29tcG9uZW50cyB7IHIgLyAyNTUuMGYsIGcgLyAyNTUu
MGYsIGIgLyAyNTUuMGYsICBhIC8gMjU1LjBmIH0gfTsKLX0KLQotU2ltcGxlQ29sb3IgQ29sb3I6
OnRvU1JHQkFTaW1wbGVDb2xvckxvc3N5KCkgY29uc3QKLXsKLSAgICBpZiAoIWlzRXh0ZW5kZWQo
KSkKLSAgICAgICAgcmV0dXJuIHJnYigpOwotCi0gICAgYXV0byBbciwgZywgYiwgYV0gPSB0b1NS
R0JBQ29tcG9uZW50c0xvc3N5KCk7Ci0gICAgcmV0dXJuIG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIs
IGcsIGIsIGEpOwotfQotCi1GbG9hdENvbXBvbmVudHMgQ29sb3I6OnRvU1JHQkFDb21wb25lbnRz
TG9zc3koKSBjb25zdAotewotICAgIGF1dG8gW2NvbG9yU3BhY2UsIGNvbXBvbmVudHNdID0gY29s
b3JTcGFjZUFuZENvbXBvbmVudHMoKTsKLSAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKLSAgICBj
YXNlIENvbG9yU3BhY2U6OlNSR0I6Ci0gICAgICAgIHJldHVybiBjb21wb25lbnRzOwotICAgIGNh
c2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOgotICAgICAgICByZXR1cm4gbGluZWFyVG9SR0JDb21w
b25lbnRzKGNvbXBvbmVudHMpOwotICAgIGNhc2UgQ29sb3JTcGFjZTo6RGlzcGxheVAzOgotICAg
ICAgICByZXR1cm4gcDNUb1NSR0IoY29tcG9uZW50cyk7Ci0gICAgfQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiB7IH07Ci19Ci0KLWJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVh
bChjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCi17Ci0gICAgaWYgKGEuaXNFeHRlbmRl
ZCgpICYmIGIuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gYS5hc0V4dGVuZGVkKCkgPT0g
Yi5hc0V4dGVuZGVkKCk7Ci0KLSAgICBBU1NFUlQoYS5pc0V4dGVuZGVkKCkgfHwgYi5pc0V4dGVu
ZGVkKCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQ29sb3IgYmxlbmQoY29uc3QgQ29sb3Im
IGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIC8vIEZJWE1F
OiBFeHRlbmRlZENvbG9yIC0gbmVlZHMgdG8gaGFuZGxlIGNvbG9yIHNwYWNlcy4KLSAgICAvLyBX
ZSBuZWVkIHRvIHByZXNlcnZlIHRoZSBzdGF0ZSBvZiB0aGUgdmFsaWQgZmxhZyBhdCB0aGUgZW5k
IG9mIHRoZSBhbmltYXRpb24KLSAgICBpZiAocHJvZ3Jlc3MgPT0gMSAmJiAhdG8uaXNWYWxpZCgp
KQotICAgICAgICByZXR1cm4gQ29sb3IoKTsKLQotICAgIC8vIFNpbmNlIG1ha2VQcmVtdWx0aXBs
aWVkUkdCQSgpIGJhaWxzIG9uIHplcm8gYWxwaGEsIHNwZWNpYWwtY2FzZSB0aGF0LgotICAgIGF1
dG8gcHJlbXVsdEZyb20gPSBmcm9tLmFscGhhKCkgPyBtYWtlUHJlbXVsdGlwbGllZFJHQkEoZnJv
bS50b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpKSA6IENvbG9yOjp0cmFuc3BhcmVudDsKLSAgICBh
dXRvIHByZW11bHRUbyA9IHRvLmFscGhhKCkgPyBtYWtlUHJlbXVsdGlwbGllZFJHQkEodG8udG9T
UkdCQVNpbXBsZUNvbG9yTG9zc3koKSkgOiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0KLSAgICBSR0JB
MzIgcHJlbXVsdEJsZW5kZWQgPSBtYWtlUkdCQSgKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJl
bXVsdEZyb20ucmVkQ29tcG9uZW50KCksIHByZW11bHRUby5yZWRDb21wb25lbnQoKSwgcHJvZ3Jl
c3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChwcmVtdWx0RnJvbS5ncmVlbkNvbXBvbmVudCgp
LCBwcmVtdWx0VG8uZ3JlZW5Db21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3Jl
OjpibGVuZChwcmVtdWx0RnJvbS5ibHVlQ29tcG9uZW50KCksIHByZW11bHRUby5ibHVlQ29tcG9u
ZW50KCksIHByb2dyZXNzKSwKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQocHJlbXVsdEZyb20uYWxw
aGFDb21wb25lbnQoKSwgcHJlbXVsdFRvLmFscGhhQ29tcG9uZW50KCksIHByb2dyZXNzKQotICAg
ICk7Ci0KLSAgICByZXR1cm4gbWFrZVVuUHJlbXVsdGlwbGllZFJHQkEocHJlbXVsdEJsZW5kZWQp
OwotfQotCi1Db2xvciBibGVuZFdpdGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwg
Y29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gRklYTUU6IEV4dGVu
ZGVkQ29sb3IgLSBuZWVkcyB0byBoYW5kbGUgY29sb3Igc3BhY2VzLgotICAgIC8vIFdlIG5lZWQg
dG8gcHJlc2VydmUgdGhlIHN0YXRlIG9mIHRoZSB2YWxpZCBmbGFnIGF0IHRoZSBlbmQgb2YgdGhl
IGFuaW1hdGlvbgotICAgIGlmIChwcm9ncmVzcyA9PSAxICYmICF0by5pc1ZhbGlkKCkpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0KLSAgICBhdXRvIGZyb21TUkdCID0gZnJvbS50b1NSR0JBU2ltcGxl
Q29sb3JMb3NzeSgpOwotICAgIGF1dG8gdG9TUkdCID0gZnJvbS50b1NSR0JBU2ltcGxlQ29sb3JM
b3NzeSgpOwotCi0gICAgcmV0dXJuIHsKLSAgICAgICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0Iu
cmVkQ29tcG9uZW50KCksIHRvU1JHQi5yZWRDb21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAg
ICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5ncmVlbkNvbXBvbmVudCgpLCB0b1NSR0IuZ3JlZW5D
b21wb25lbnQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBXZWJDb3JlOjpibGVuZChmcm9tU1JHQi5i
bHVlQ29tcG9uZW50KCksIHRvU1JHQi5ibHVlQ29tcG9uZW50KCksIHByb2dyZXNzKSwKLSAgICAg
ICAgV2ViQ29yZTo6YmxlbmQoZnJvbVNSR0IuYWxwaGFDb21wb25lbnQoKSwgdG9TUkdCLmFscGhh
Q29tcG9uZW50KCksIHByb2dyZXNzKQotICAgIH07Ci19Ci0KLXZvaWQgQ29sb3I6OnRhZ0FzVmFs
aWQoKQotewotICAgIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyB8PSB2YWxpZFJHQkFDb2xvcjsK
LX0KLQotY29uc3QgRXh0ZW5kZWRDb2xvciYgQ29sb3I6OmFzRXh0ZW5kZWQoKSBjb25zdAotewot
ICAgIEFTU0VSVChpc0V4dGVuZGVkKCkpOwotICAgIHJldHVybiAqbV9jb2xvckRhdGEuZXh0ZW5k
ZWRDb2xvcjsKLX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ29sb3ImIGNvbG9yKQotewotICAgIHJldHVybiB0cyA8PCBjb2xvci5uYW1lRm9yUmVuZGVy
VHJlZUFzVGV4dCgpOwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCi17Ci0gICAgc3dpdGNoIChjb2xvclNwYWNlKSB7Ci0g
ICAgY2FzZSBDb2xvclNwYWNlOjpTUkdCOgotICAgICAgICB0cyA8PCAic1JHQiI7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ29sb3JTcGFjZTo6TGluZWFyUkdCOgotICAgICAgICB0cyA8PCAi
TGluZWFyUkdCIjsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDb2xvclNwYWNlOjpEaXNwbGF5
UDM6Ci0gICAgICAgIHRzIDw8ICJEaXNwbGF5UDMiOwotICAgICAgICBicmVhazsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRzOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgJKHJldmlzaW9uIDI2
MjEwOSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoyNjIx
MDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVDb2xvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAz
LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDb2xv
clNwYWNlLmgiCisjaW5jbHVkZSAiRXh0ZW5kZWRDb2xvci5oIgorI2luY2x1ZGUgPGFsZ29yaXRo
bT4KKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgorI2luY2x1
ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+CisKKyNpZiBV
U0UoQ0cpCit0eXBlZGVmIHN0cnVjdCBDR0NvbG9yKiBDR0NvbG9yUmVmOworI2VuZGlmCisKKyNp
ZiBQTEFURk9STShXSU4pCitzdHJ1Y3QgX0QzRENPTE9SVkFMVUU7Cit0eXBlZGVmIF9EM0RDT0xP
UlZBTFVFIEQzRENPTE9SVkFMVUU7Cit0eXBlZGVmIEQzRENPTE9SVkFMVUUgRDJEX0NPTE9SX0Y7
Cit0eXBlZGVmIEQyRF9DT0xPUl9GIEQyRDFfQ09MT1JfRjsKK3N0cnVjdCBEMkRfVkVDVE9SXzRG
OwordHlwZWRlZiBEMkRfVkVDVE9SXzRGIEQyRDFfVkVDVE9SXzRGOworI2VuZGlmCisKKyNpZiBQ
TEFURk9STShHVEspCit0eXBlZGVmIHN0cnVjdCBfR2RrUkdCQSBHZGtSR0JBOworI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RydWN0IEZsb2F0Q29tcG9uZW50czsKKworLy8gQ29s
b3IgdmFsdWUgd2l0aCA4LWJpdCBjb21wb25lbnRzIGZvciByZWQsIGdyZWVuLCBibHVlLCBhbmQg
YWxwaGEuCisvLyBGb3IgaGlzdG9yaWNhbCByZWFzb25zLCBzdG9yZWQgYXMgYSAzMi1iaXQgaW50
ZWdlciwgd2l0aCBhbHBoYSBpbiB0aGUgaGlnaCBiaXRzOiBBUkdCLgorY2xhc3MgU2ltcGxlQ29s
b3IgeworcHVibGljOgorICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvcih1aW50MzJfdCB2YWx1ZSA9
IDApIDogbV92YWx1ZSB7IHZhbHVlIH0geyB9CisKKyAgICBjb25zdGV4cHIgdWludDMyX3QgdmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICBjb25zdGV4cHIgdWludDhfdCBy
ZWRDb21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDE2OyB9CisgICAgY29uc3Rl
eHByIHVpbnQ4X3QgZ3JlZW5Db21wb25lbnQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlID4+IDg7
IH0KKyAgICBjb25zdGV4cHIgdWludDhfdCBibHVlQ29tcG9uZW50KCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQorICAgIGNvbnN0ZXhwciB1aW50OF90IGFscGhhQ29tcG9uZW50KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZSA+PiAyNDsgfQorCisgICAgY29uc3RleHByIGZsb2F0IGFscGhhQ29t
cG9uZW50QXNGbG9hdCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PGZsb2F0PihhbHBoYUNv
bXBvbmVudCgpKSAvIDB4RkY7IH0KKworICAgIGNvbnN0ZXhwciBib29sIGlzT3BhcXVlKCkgY29u
c3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKSA9PSAweEZGOyB9CisgICAgY29uc3RleHByIGJv
b2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gYWxwaGFDb21wb25lbnQoKTsgfQorCisgICAg
U3RyaW5nIHNlcmlhbGl6YXRpb25Gb3JIVE1MKCkgY29uc3Q7CisgICAgU3RyaW5nIHNlcmlhbGl6
YXRpb25Gb3JDU1MoKSBjb25zdDsKKyAgICBTdHJpbmcgc2VyaWFsaXphdGlvbkZvclJlbmRlclRy
ZWVBc1RleHQoKSBjb25zdDsKKworICAgIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb2xvcldpdGhB
bHBoYSh1aW50OF90IGFscGhhKSBjb25zdCB7IHJldHVybiB7IChtX3ZhbHVlICYgMHgwMEZGRkZG
RikgfCBhbHBoYSA8PCAyNCB9OyB9CisKKyAgICB0ZW1wbGF0ZTxzdGQ6OnNpemVfdCBOPgorICAg
IGNvbnN0ZXhwciB1aW50OF90IGdldCgpIGNvbnN0CisgICAgeworICAgICAgICBzdGF0aWNfYXNz
ZXJ0KE4gPCA0KTsKKyAgICAgICAgaWYgY29uc3RleHByICghTikKKyAgICAgICAgICAgIHJldHVy
biByZWRDb21wb25lbnQoKTsKKyAgICAgICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMSkKKyAg
ICAgICAgICAgIHJldHVybiBncmVlbkNvbXBvbmVudCgpOworICAgICAgICBlbHNlIGlmIGNvbnN0
ZXhwciAoTiA9PSAyKQorICAgICAgICAgICAgcmV0dXJuIGJsdWVDb21wb25lbnQoKTsKKyAgICAg
ICAgZWxzZSBpZiBjb25zdGV4cHIgKE4gPT0gMykKKyAgICAgICAgICAgIHJldHVybiBhbHBoYUNv
bXBvbmVudCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICB1aW50MzJfdCBtX3ZhbHVlIHsgMCB9
OworfTsKKworYm9vbCBvcGVyYXRvcj09KFNpbXBsZUNvbG9yLCBTaW1wbGVDb2xvcik7Citib29s
IG9wZXJhdG9yIT0oU2ltcGxlQ29sb3IsIFNpbXBsZUNvbG9yKTsKKworLy8gRklYTUU6IFJlbW92
ZSB0aGlzIGFmdGVyIG1pZ3JhdGluZyB0byB0aGUgbmV3IG5hbWUuCit1c2luZyBSR0JBMzIgPSBT
aW1wbGVDb2xvcjsKKworY29uc3RleHByIFJHQkEzMiBtYWtlUkdCKGludCByLCBpbnQgZywgaW50
IGIpOworY29uc3RleHByIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQg
YSk7CisKK1JHQkEzMiBtYWtlUHJlbXVsdGlwbGllZFJHQkEoaW50IHIsIGludCBnLCBpbnQgYiwg
aW50IGEsIGJvb2wgY2VpbGluZyA9IHRydWUpOworUkdCQTMyIG1ha2VQcmVtdWx0aXBsaWVkUkdC
QShSR0JBMzIpOworUkdCQTMyIG1ha2VVblByZW11bHRpcGxpZWRSR0JBKGludCByLCBpbnQgZywg
aW50IGIsIGludCBhKTsKK1JHQkEzMiBtYWtlVW5QcmVtdWx0aXBsaWVkUkdCQShSR0JBMzIpOwor
CitXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkEzMkZyb21GbG9hdHMoZmxvYXQgciwgZmxv
YXQgZywgZmxvYXQgYiwgZmxvYXQgYSk7CitXRUJDT1JFX0VYUE9SVCBSR0JBMzIgbWFrZVJHQkFG
cm9tSFNMQShmbG9hdCBoLCBmbG9hdCBzLCBmbG9hdCBsLCBmbG9hdCBhKTsKK1JHQkEzMiBtYWtl
UkdCQUZyb21DTVlLQShmbG9hdCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBh
KTsKKwordWludDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGludCk7Cit1aW50OF90IHJv
dW5kQW5kQ2xhbXBDb2xvckNoYW5uZWwoZmxvYXQpOworCitjbGFzcyBDb2xvciB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQ29sb3IoKSB7IH0KKworICAgIC8v
IEZJWE1FOiBSZW1vdmUgYWxsIHRoZXNlIGNvbnN0cnVjdG9ycyBhbmQgY3JlYXRpb24gZnVuY3Rp
b25zIGFuZCByZXBsYWNlIHRoZSBvbmVzIHRoYXQgYXJlIHN0aWxsIG5lZWRlZCB3aXRoIGZyZWUg
ZnVuY3Rpb25zLgorCisgICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkK
KyAgICB7CisgICAgICAgIGlmICh2YWxpZCkKKyAgICAgICAgICAgIHNldFJHQihjb2xvcik7Cisg
ICAgfQorCisgICAgZW51bSBTZW1hbnRpY1RhZyB7IFNlbWFudGljIH07CisgICAgQ29sb3IoUkdC
QTMyIGNvbG9yLCBTZW1hbnRpY1RhZykKKyAgICB7CisgICAgICAgIHNldFJHQihjb2xvcik7Cisg
ICAgICAgIHNldElzU2VtYW50aWMoKTsKKyAgICB9CisKKyAgICBDb2xvcihpbnQgciwgaW50IGcs
IGludCBiKQorICAgIHsKKyAgICAgICAgc2V0UkdCKHIsIGcsIGIpOworICAgIH0KKworICAgIENv
bG9yKGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCKG1h
a2VSR0JBKHIsIGcsIGIsIGEpKTsKKyAgICB9CisKKyAgICBDb2xvcihmbG9hdCByLCBmbG9hdCBn
LCBmbG9hdCBiLCBmbG9hdCBhKQorICAgIHsKKyAgICAgICAgc2V0UkdCKG1ha2VSR0JBMzJGcm9t
RmxvYXRzKHIsIGcsIGIsIGEpKTsKKyAgICB9CisKKyAgICAvLyBDcmVhdGVzIGEgbmV3IGNvbG9y
IGZyb20gdGhlIHNwZWNpZmljIENNWUsgYW5kIGFscGhhIHZhbHVlcy4KKyAgICBDb2xvcihmbG9h
dCBjLCBmbG9hdCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQorICAgIHsKKyAgICAgICAg
c2V0UkdCKG1ha2VSR0JBRnJvbUNNWUtBKGMsIG0sIHksIGssIGEpKTsKKyAgICB9CisKKyAgICBX
RUJDT1JFX0VYUE9SVCBleHBsaWNpdCBDb2xvcihjb25zdCBTdHJpbmcmKTsKKyAgICBleHBsaWNp
dCBDb2xvcihjb25zdCBjaGFyKik7CisKKyAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgeworICAgICAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRI
YXNoVmFsdWUgJiBpbnZhbGlkUkdCQUNvbG9yLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUg
bXVzdCBub3QgbG9vayBsaWtlIGFuIEV4dGVuZGVkQ29sb3IiKTsKKyAgICAgICAgc3RhdGljX2Fz
c2VydCghKGRlbGV0ZWRIYXNoVmFsdWUgJiB2YWxpZFJHQkFDb2xvckJpdCksICJDb2xvcidzIGRl
bGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYSB2YWxpZCBSR0JBMzIgQ29sb3Ii
KTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgKDEgPDwgNCksICJD
b2xvcidzIGRlbGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFu
IFJHQkEzMiBDb2xvciB3b3VsZG4ndCBoYXZlIik7CisgICAgICAgIG1fY29sb3JEYXRhLnJnYmFB
bmRGbGFncyA9IGRlbGV0ZWRIYXNoVmFsdWU7CisgICAgICAgIEFTU0VSVCghaXNFeHRlbmRlZCgp
KTsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPT0gZGVsZXRlZEhh
c2hWYWx1ZTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5
VmFsdWVUeXBlKQorICAgIHsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAm
IGludmFsaWRSR0JBQ29sb3IsICJDb2xvcidzIGVtcHR5IGhhc2ggdmFsdWUgbXVzdCBub3QgbG9v
ayBsaWtlIGFuIEV4dGVuZGVkQ29sb3IiKTsKKyAgICAgICAgc3RhdGljX2Fzc2VydChlbXB0eUhh
c2hWYWx1ZSAmICgxIDw8IDQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBoYXZl
IHNvbWUgYml0cyBzZXQgdGhhdCBhbiBSR0JBMzIgQ29sb3Igd291bGRuJ3QgaGF2ZSIpOworICAg
ICAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBlbXB0eUhhc2hWYWx1ZTsKKyAgICAgICAg
QVNTRVJUKCFpc0V4dGVuZGVkKCkpOworICAgIH0KKworICAgIC8vIFRoaXMgY3JlYXRlcyBhbiBF
eHRlbmRlZENvbG9yLgorICAgIC8vIEZJWE1FOiBJZiB0aGUgY29sb3JTcGFjZSBpcyBzUkdCIGFu
ZCB0aGUgdmFsdWVzIGNhbiBhbGwgYmUKKyAgICAvLyBjb252ZXJ0ZWQgZXhhY3RseSB0byBpbnRl
Z2Vycywgd2Ugc2hvdWxkIG1ha2UgYSBub3JtYWwgQ29sb3IuCisgICAgV0VCQ09SRV9FWFBPUlQg
Q29sb3IoZmxvYXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIENvbG9yU3BhY2UpOworICAgIFdFQkNP
UkVfRVhQT1JUIENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKKworICAgIFdFQkNPUkVfRVhQ
T1JUIENvbG9yKGNvbnN0IENvbG9yJik7CisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3Im
Jik7CisKKyAgICB+Q29sb3IoKQorICAgIHsKKyAgICAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAg
ICAgICAgICAgIG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7CisgICAgfQorCisg
ICAgLy8gUmV0dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gSFRNTDUKKyAg
ICAvLyA8aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0
bWwjZmlsbC1hbmQtc3Ryb2tlLXN0eWxlcz4gKDEwIFNlcHRlbWJlciAyMDE1KQorICAgIFdFQkNP
UkVfRVhQT1JUIFN0cmluZyBzZXJpYWxpemVkKCkgY29uc3Q7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBTdHJpbmcgY3NzVGV4dCgpIGNvbnN0OworCisgICAgLy8gUmV0dXJucyB0aGUgY29sb3Igc2Vy
aWFsaXplZCBhcyBlaXRoZXIgI1JSR0dCQiBvciAjUlJHR0JCQUEKKyAgICBTdHJpbmcgbmFtZUZv
clJlbmRlclRyZWVBc1RleHQoKSBjb25zdDsKKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIGlzRXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgdmFsaWRS
R0JBQ29sb3JCaXQpOyB9CisKKyAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNF
eHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogcmdiKCkuaXNPcGFxdWUo
KTsgfQorICAgIGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8g
YXNFeHRlbmRlZCgpLmFscGhhKCkgPiAwLjAgOiByZ2IoKS5pc1Zpc2libGUoKTsgfQorCisgICAg
aW50IGFscGhhKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFs
cGhhKCkgKiAyNTUgOiByZ2IoKS5hbHBoYUNvbXBvbmVudCgpOyB9CisgICAgZmxvYXQgYWxwaGFB
c0Zsb2F0KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhh
KCkgOiByZ2IoKS5hbHBoYUNvbXBvbmVudEFzRmxvYXQoKTsgfQorCisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0OworCisgICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZs
b2F0Q29tcG9uZW50cz4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKKworICAgIC8v
IFRoaXMgd2lsbCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4K
KyAgICBXRUJDT1JFX0VYUE9SVCBTaW1wbGVDb2xvciB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgp
IGNvbnN0OworCisgICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBj
b2xvcnMgaW50byBzUkdCLgorICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0Q29tcG9uZW50cyB0b1NS
R0JBQ29tcG9uZW50c0xvc3N5KCkgY29uc3Q7CisKKyAgICBDb2xvciBsaWdodCgpIGNvbnN0Owor
ICAgIENvbG9yIGRhcmsoKSBjb25zdDsKKworICAgIGJvb2wgaXNEYXJrKCkgY29uc3Q7CisgICAg
CisgICAgV0VCQ09SRV9FWFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkgY29uc3Q7CisKKyAgICAvLyBU
aGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIFBvcnRlci1EdWZmJ3MgInNvdXJjZS1vdmVyIiBl
cXVhdGlvbgorICAgIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJikgY29uc3Q7CisgICAgQ29sb3Ig
YmxlbmRXaXRoV2hpdGUoKSBjb25zdDsKKworICAgIENvbG9yIGludmVydGVkQ29sb3JXaXRoQWxw
aGEoZmxvYXQgYWxwaGEpIGNvbnN0OworCisgICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBs
aWVkQnkoZmxvYXQpIGNvbnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25z
dDsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIEFsdGVybmF0aXZlUm91bmRp
bmcgdmFyaWFudHMgYnkgc2V0dGxpbmcgb24gYSByb3VuZGluZyBiZWhhdmlvci4KKyAgICBDb2xv
ciBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRp
b25hbDxmbG9hdD4pIGNvbnN0OworICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5
VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsKKyAgICBDb2xvciBjb2xvcldp
dGhBbHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4pIGNvbnN0Owor
ICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJv
dW5kaW5nKGZsb2F0KSBjb25zdDsKKworICAgIENvbG9yIG9wYXF1ZUNvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gY29sb3JXaXRoQWxwaGEoMS4wZik7IH0KKyAgICBDb2xvciBzZW1hbnRpY0NvbG9yKCkg
Y29uc3Q7CisKKyAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBDU1Mg
c2VtYW50aWMgY29sb3IgbmFtZS4KKyAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVy
biAhaXNFeHRlbmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiBpc1NlbWFudGlj
UkJHQUNvbG9yQml0KTsgfQorCisjaWYgUExBVEZPUk0oR1RLKQorICAgIENvbG9yKGNvbnN0IEdk
a1JHQkEmKTsKKyAgICBvcGVyYXRvciBHZGtSR0JBKCkgY29uc3Q7CisjZW5kaWYKKworI2lmIFVT
RShDRykKKyAgICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmKTsKKyAgICBXRUJDT1JF
X0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmLCBTZW1hbnRpY1RhZyk7CisgICAgZnJpZW5kIFdFQkNP
UkVfRVhQT1JUIENHQ29sb3JSZWYgY2FjaGVkQ0dDb2xvcihjb25zdCBDb2xvciYpOworI2VuZGlm
CisKKyNpZiBQTEFURk9STShXSU4pCisgICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoRDJEMV9DT0xP
Ul9GKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdDsK
KyAgICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0OworI2Vu
ZGlmCisKKyAgICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYsIFJHQkEz
MiYpOworICAgIHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nVmlldyYsIFJH
QkEzMiYpOworICAgIHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgTENoYXIqLCB1bnNp
Z25lZCwgUkdCQTMyJik7CisgICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBVQ2hh
ciosIHVuc2lnbmVkLCBSR0JBMzImKTsKKworICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29s
b3IgYmxhY2sgeyAweEZGMDAwMDAwIH07CisgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xv
ciB3aGl0ZSB7IDB4RkZGRkZGRkYgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9y
IGRhcmtHcmF5IHsgMHhGRjgwODA4MCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29s
b3IgZ3JheSB7IDB4RkZBMEEwQTAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9y
IGxpZ2h0R3JheSB7IDB4RkZDMEMwQzAgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNv
bG9yIHRyYW5zcGFyZW50IHsgMHgwMDAwMDAwMCB9OworICAgIHN0YXRpYyBjb25zdGV4cHIgU2lt
cGxlQ29sb3IgY3lhbiB7IDB4RkYwMEZGRkYgfTsKKyAgICBzdGF0aWMgY29uc3RleHByIFNpbXBs
ZUNvbG9yIHllbGxvdyB7IDB4RkZGRkZGMDAgfTsKKworI2lmIFBMQVRGT1JNKElPU19GQU1JTFkp
CisgICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb21wb3NpdGlvbkZpbGwgeyAweDND
QUZDMEUzIH07CisjZWxzZQorICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgY29tcG9z
aXRpb25GaWxsIHsgMHhGRkUxREQ1NSB9OworI2VuZGlmCisKKyAgICBib29sIGlzRXh0ZW5kZWQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEobV9jb2xvckRhdGEucmdiYUFuZEZsYWdz
ICYgaW52YWxpZFJHQkFDb2xvcik7CisgICAgfQorICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEV4
dGVuZGVkQ29sb3ImIGFzRXh0ZW5kZWQoKSBjb25zdDsKKworICAgIFdFQkNPUkVfRVhQT1JUIENv
bG9yJiBvcGVyYXRvcj0oY29uc3QgQ29sb3ImKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYg
b3BlcmF0b3I9KENvbG9yJiYpOworCisgICAgLy8gRXh0ZW5kZWQgYW5kIG5vbi1leHRlbmRlZCBj
b2xvcnMgd2lsbCBhbHdheXMgYmUgbm9uLWVxdWFsLgorICAgIGZyaWVuZCBib29sIG9wZXJhdG9y
PT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKTsKKyAgICBmcmllbmQgYm9vbCBlcXVh
bElnbm9yaW5nU2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwor
CisgICAgZnJpZW5kIGludCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENv
bG9yJik7CisKKyAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKKyAg
ICBzdGF0aWMgYm9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKKworICAgIHRlbXBsYXRl
PGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVyJik7
CisKK3ByaXZhdGU6CisgICAgUkdCQTMyIHJnYigpIGNvbnN0OworICAgIHZvaWQgc2V0UkdCKGlu
dCByLCBpbnQgZywgaW50IGIpIHsgc2V0UkdCKG1ha2VSR0IociwgZywgYikpOyB9CisgICAgdm9p
ZCBzZXRSR0IoUkdCQTMyKTsKKyAgICB2b2lkIHNldElzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRh
LnJnYmFBbmRGbGFncyB8PSBpc1NlbWFudGljUkJHQUNvbG9yQml0OyB9CisKKyAgICAvLyAweF9f
X19fX18wMCBpcyBhbiBFeHRlbmRlZENvbG9yIHBvaW50ZXIuCisgICAgLy8gMHhfX19fX19fMDEg
aXMgYW4gaW52YWxpZCBSR0JBMzIuCisgICAgLy8gMHhfX19fX19fMTEgaXMgYSB2YWxpZCBSR0JB
MzIuCisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGV4dGVuZGVkQ29sb3IgPSAweDA7CisgICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGludmFsaWRSR0JBQ29sb3IgPSAweDE7CisgICAgc3RhdGlj
IGNvbnN0IHVpbnQ2NF90IHZhbGlkUkdCQUNvbG9yQml0ID0gMHgyOworICAgIHN0YXRpYyBjb25z
dCB1aW50NjRfdCB2YWxpZFJHQkFDb2xvciA9IDB4MzsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0
X3QgaXNTZW1hbnRpY1JCR0FDb2xvckJpdCA9IDB4NDsKKworICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBkZWxldGVkSGFzaFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZEOworICAgIHN0YXRpYyBj
b25zdCB1aW50NjRfdCBlbXB0eUhhc2hWYWx1ZSA9IDB4RkZGRkZGRkZGRkZGRkZGQjsKKworICAg
IFdFQkNPUkVfRVhQT1JUIHZvaWQgdGFnQXNWYWxpZCgpOworCisgICAgdW5pb24geworICAgICAg
ICB1aW50NjRfdCByZ2JhQW5kRmxhZ3MgeyBpbnZhbGlkUkdCQUNvbG9yIH07CisgICAgICAgIEV4
dGVuZGVkQ29sb3IqIGV4dGVuZGVkQ29sb3I7CisgICAgfSBtX2NvbG9yRGF0YTsKK307CisKK2Jv
b2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Citib29sIG9wZXJhdG9y
IT0oY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOworCisvLyBPbmUgb3IgYm90aCBtdXN0IGJl
IGV4dGVuZGVkIGNvbG9ycy4KK1dFQkNPUkVfRVhQT1JUIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVh
bChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CisKK0NvbG9yIGJsZW5kKGNvbnN0IENvbG9y
JiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7CitDb2xvciBibGVuZFdp
dGhvdXRQcmVtdWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpOworCitpbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImLCBjb25z
dCBDb2xvciYpOworCit1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSk7
Cit1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QpOworCisjaWYgVVNFKENHKQorV0VC
Q09SRV9FWFBPUlQgQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJik7CisjZW5k
aWYKKworV0VCQ09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4
dFN0cmVhbSYsIGNvbnN0IENvbG9yJik7CitXRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQ29sb3JTcGFjZSk7CisKK2lubGluZSBib29s
IG9wZXJhdG9yPT0oU2ltcGxlQ29sb3IgYSwgU2ltcGxlQ29sb3IgYikKK3sKKyAgICByZXR1cm4g
YS52YWx1ZSgpID09IGIudmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShTaW1w
bGVDb2xvciBhLCBTaW1wbGVDb2xvciBiKQoreworICAgIHJldHVybiAhKGEgPT0gYik7Cit9CisK
K2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQor
eworICAgIGlmIChhLmlzRXh0ZW5kZWQoKSB8fCBiLmlzRXh0ZW5kZWQoKSkKKyAgICAgICAgcmV0
dXJuIGV4dGVuZGVkQ29sb3JzRXF1YWwoYSwgYik7CisKKyAgICByZXR1cm4gYS5tX2NvbG9yRGF0
YS5yZ2JhQW5kRmxhZ3MgPT0gYi5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3M7Cit9CisKK2lubGlu
ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQoreworICAg
IHJldHVybiAhKGEgPT0gYik7Cit9CisKK2lubGluZSBib29sIGVxdWFsSWdub3JpbmdTZW1hbnRp
Y0NvbG9yKGNvbnN0IENvbG9yJiBhLCBjb25zdCBDb2xvciYgYikKK3sKKyAgICBpZiAoYS5pc0V4
dGVuZGVkKCkgfHwgYi5pc0V4dGVuZGVkKCkpCisgICAgICAgIHJldHVybiBleHRlbmRlZENvbG9y
c0VxdWFsKGEsIGIpOworICAgIHJldHVybiAoYS5tX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiB+
Q29sb3I6OmlzU2VtYW50aWNSQkdBQ29sb3JCaXQpID09IChiLm1fY29sb3JEYXRhLnJnYmFBbmRG
bGFncyAmIH5Db2xvcjo6aXNTZW1hbnRpY1JCR0FDb2xvckJpdCk7Cit9CisKK2lubGluZSB1bnNp
Z25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0Cit7CisgICAgaWYgKGlzRXh0ZW5kZWQoKSkKKyAgICAg
ICAgcmV0dXJuIGFzRXh0ZW5kZWQoKS5oYXNoKCk7CisKKyAgICByZXR1cm4gV1RGOjppbnRIYXNo
KG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyk7Cit9CisKK2lubGluZSB1aW50OF90IHJvdW5kQW5k
Q2xhbXBDb2xvckNoYW5uZWwoaW50IHZhbHVlKQoreworICAgIHJldHVybiBzdGQ6Om1heCgwLCBz
dGQ6Om1pbigyNTUsIHZhbHVlKSk7Cit9CisKK2lubGluZSB1aW50OF90IHJvdW5kQW5kQ2xhbXBD
b2xvckNoYW5uZWwoZmxvYXQgdmFsdWUpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KDAuZiwgc3Rk
OjptaW4oMjU1LmYsIHN0ZDo6cm91bmQodmFsdWUpKSk7Cit9CisKK2lubGluZSB1aW50MTZfdCBm
YXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSkKK3sKKyAgICByZXR1cm4gKHZhbHVlIDw8
IDgpIC0gdmFsdWU7Cit9CisKK2lubGluZSB1aW50MTZfdCBmYXN0RGl2aWRlQnkyNTUodWludDE2
X3QgdmFsdWUpCit7CisgICAgLy8gV2hpbGUgdGhpcyBpcyBhbiBhcHByb3hpbWF0ZSBhbGdvcml0
aG0gZm9yIGRpdmlzaW9uIGJ5IDI1NSwgaXQgZ2l2ZXMgcGVyZmVjdGx5IGFjY3VyYXRlIHJlc3Vs
dHMgZm9yIDE2LWJpdCB2YWx1ZXMuCisgICAgLy8gRklYTUU6IFNpbmNlIHRoaXMgZ2l2ZXMgYWNj
dXJhdGUgcmVzdWx0cyBmb3IgMTYtYml0IHZhbHVlcywgd2Ugc2hvdWxkIGdldCB0aGlzIG9wdGlt
aXphdGlvbiBpbnRvIGNvbXBpbGVycyBsaWtlIGNsYW5nLgorICAgIHVpbnQxNl90IGFwcHJveGlt
YXRpb24gPSB2YWx1ZSA+PiA4OworICAgIHVpbnQxNl90IHJlbWFpbmRlciA9IHZhbHVlIC0gKGFw
cHJveGltYXRpb24gKiAyNTUpICsgMTsKKyAgICByZXR1cm4gYXBwcm94aW1hdGlvbiArIChyZW1h
aW5kZXIgPj4gOCk7Cit9CisKK2lubGluZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFNdWx0
aXBsaWVkQnlVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0aW9uYWw8ZmxvYXQ+IGFscGhhKSBj
b25zdAoreworICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNp
bmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7Cit9CisKK2lubGlu
ZSBDb2xvciBDb2xvcjo6Y29sb3JXaXRoQWxwaGFVc2luZ0FsdGVybmF0aXZlUm91bmRpbmcoT3B0
aW9uYWw8ZmxvYXQ+IGFscGhhKSBjb25zdAoreworICAgIHJldHVybiBhbHBoYSA/IGNvbG9yV2l0
aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGFscGhhLnZhbHVlKCkpIDogKnRoaXM7Cit9
CisKK2lubGluZSBSR0JBMzIgQ29sb3I6OnJnYigpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IFdl
IHNob3VsZCBBU1NFUlQoIWlzRXh0ZW5kZWQoKSkgaGVyZSwgb3IgcHJvZHVjZQorICAgIC8vIGFu
IFJHQkEzMiBlcXVpdmFsZW50IGZvciBhbiBFeHRlbmRlZENvbG9yLiBJZGVhbGx5IHRoZSBmb3Jt
ZXIsCisgICAgLy8gc28gd2UgY2FuIGF1ZGl0IGFsbCB0aGUgcmdiKCkgY2FsbCBzaXRlcyB0byBo
YW5kbGUgZXh0ZW5kZWQuCisgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KG1fY29s
b3JEYXRhLnJnYmFBbmRGbGFncyA+PiAzMikgfTsKK30KKworaW5saW5lIHZvaWQgQ29sb3I6OnNl
dFJHQihSR0JBMzIgcmdiKQoreworICAgIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9IHN0YXRp
Y19jYXN0PHVpbnQ2NF90PihyZ2IudmFsdWUoKSkgPDwgMzI7CisgICAgdGFnQXNWYWxpZCgpOwor
fQorCitpbmxpbmUgYm9vbCBDb2xvcjo6aXNCbGFja0NvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikK
K3sKKyAgICBpZiAoY29sb3IuaXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGNvbnN0IEV4dGVuZGVk
Q29sb3ImIGV4dGVuZGVkQ29sb3IgPSBjb2xvci5hc0V4dGVuZGVkKCk7CisgICAgICAgIHJldHVy
biAhZXh0ZW5kZWRDb2xvci5yZWQoKSAmJiAhZXh0ZW5kZWRDb2xvci5ncmVlbigpICYmICFleHRl
bmRlZENvbG9yLmJsdWUoKSAmJiBleHRlbmRlZENvbG9yLmFscGhhKCkgPT0gMTsKKyAgICB9CisK
KyAgICByZXR1cm4gY29sb3IucmdiKCkgPT0gQ29sb3I6OmJsYWNrOworfQorCitpbmxpbmUgYm9v
bCBDb2xvcjo6aXNXaGl0ZUNvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKK3sKKyAgICBpZiAoY29s
b3IuaXNFeHRlbmRlZCgpKSB7CisgICAgICAgIGNvbnN0IEV4dGVuZGVkQ29sb3ImIGV4dGVuZGVk
Q29sb3IgPSBjb2xvci5hc0V4dGVuZGVkKCk7CisgICAgICAgIHJldHVybiBleHRlbmRlZENvbG9y
LnJlZCgpID09IDEgJiYgZXh0ZW5kZWRDb2xvci5ncmVlbigpID09IDEgJiYgZXh0ZW5kZWRDb2xv
ci5ibHVlKCkgPT0gMSAmJiBleHRlbmRlZENvbG9yLmFscGhhKCkgPT0gMTsKKyAgICB9CisgICAg
CisgICAgcmV0dXJuIGNvbG9yLnJnYigpID09IENvbG9yOjp3aGl0ZTsKK30KKwordGVtcGxhdGU8
Y2xhc3MgRW5jb2Rlcj4KK3ZvaWQgQ29sb3I6OmVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAoreworICAgIGlmIChpc0V4dGVuZGVkKCkpIHsKKyAgICAgICAgZW5jb2RlciA8PCB0cnVlOwor
ICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5yZWQoKTsKKyAgICAgICAgZW5jb2RlciA8
PCBhc0V4dGVuZGVkKCkuZ3JlZW4oKTsKKyAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCku
Ymx1ZSgpOworICAgICAgICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5hbHBoYSgpOworICAgICAg
ICBlbmNvZGVyIDw8IGFzRXh0ZW5kZWQoKS5jb2xvclNwYWNlKCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBlbmNvZGVyIDw8IGZhbHNlOworCisgICAgaWYgKCFpc1ZhbGlkKCkpIHsK
KyAgICAgICAgZW5jb2RlciA8PCBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBlbmNvZGUgd2hldGhlciB0aGUgY29sb3IgaXMgc2VtYW50
aWMuCisKKyAgICB1aW50MzJfdCB2YWx1ZSA9IHJnYigpLnZhbHVlKCk7CisKKyAgICBlbmNvZGVy
IDw8IHRydWU7CisgICAgZW5jb2RlciA8PCB2YWx1ZTsKK30KKwordGVtcGxhdGU8Y2xhc3MgRGVj
b2Rlcj4KK09wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCit7
CisgICAgYm9vbCBpc0V4dGVuZGVkOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUoaXNFeHRlbmRl
ZCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICBpZiAoaXNFeHRlbmRlZCkg
eworICAgICAgICBmbG9hdCByZWQ7CisgICAgICAgIGZsb2F0IGdyZWVuOworICAgICAgICBmbG9h
dCBibHVlOworICAgICAgICBmbG9hdCBhbHBoYTsKKyAgICAgICAgQ29sb3JTcGFjZSBjb2xvclNw
YWNlOworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHJlZCkpCisgICAgICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAoIWRlY29kZXIuZGVjb2RlKGdyZWVuKSkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoYmx1ZSkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBpZiAo
IWRlY29kZXIuZGVjb2RlKGFscGhhKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoY29sb3JTcGFjZSkpCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICByZXR1cm4gQ29sb3IocmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEsIGNvbG9yU3BhY2UpOworICAgIH0KKworICAgIGJvb2wgaXNWYWxpZDsKKyAgICBp
ZiAoIWRlY29kZXIuZGVjb2RlKGlzVmFsaWQpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OworCisgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICByZXR1cm4gQ29sb3IoKTsKKworICAgIHVp
bnQzMl90IHZhbHVlOworICAgIGlmICghZGVjb2Rlci5kZWNvZGUodmFsdWUpKQorICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworCisgICAgcmV0dXJuIENvbG9yIHsgU2ltcGxlQ29sb3IgeyB2
YWx1ZSB9IH07Cit9CisKK2NvbnN0ZXhwciBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGlu
dCBiKQoreworICAgIHJldHVybiBtYWtlUkdCQShyLCBnLCBiLCAweEZGKTsKK30KKworY29uc3Rl
eHByIFJHQkEzMiBtYWtlUkdCQShpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3sKKyAgICBy
ZXR1cm4geyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjptYXgoMCwgc3RkOjptaW4oYSwgMHhG
RikpIDw8IDI0IHwgc3RkOjptYXgoMCwgc3RkOjptaW4ociwgMHhGRikpIDw8IDE2IHwgc3RkOjpt
YXgoMCwgc3RkOjptaW4oZywgMHhGRikpIDw8IDggfCBzdGQ6Om1heCgwLCBzdGQ6Om1pbihiLCAw
eEZGKSkpIH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworbmFtZXNwYWNlIFdURiB7
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxXZWJDb3JlOjpDb2xvcj47Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFdlYkNvcmU6OkNvbG9yPjsKK30KKworbmFtZXNwYWNlIHN0
ZCB7CisKK3RlbXBsYXRlPD4KK2NsYXNzIHR1cGxlX3NpemU8V2ViQ29yZTo6U2ltcGxlQ29sb3I+
IDogcHVibGljIHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQ8c3RkOjpzaXplX3QsIDQ+IHsKK307CisK
K3RlbXBsYXRlPHN0ZDo6c2l6ZV90IE4+CitjbGFzcyB0dXBsZV9lbGVtZW50PE4sIFdlYkNvcmU6
OlNpbXBsZUNvbG9yPiB7CitwdWJsaWM6CisgICAgdXNpbmcgdHlwZSA9IHVpbnQ4X3Q7Cit9Owor
Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TaW1wbGVDb2xvci5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKIyMgLTAsMCAr
MSAjIworbmF0aXZlClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgcHJvcGVydHkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUNvbG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3IuaAkocmV2aXNpb24g
MjYyMTA5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlQ29sb3Iu
aAkod29ya2luZyBjb3B5KQpAQCAtMjUsMzcgKzI1LDEzIEBACiAKICNwcmFnbWEgb25jZQogCi0j
aW5jbHVkZSAiQ29sb3JTcGFjZS5oIgotI2luY2x1ZGUgIkV4dGVuZGVkQ29sb3IuaCIKKyNpbmNs
dWRlICJDb2xvclV0aWxpdGllcy5oIgogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxj
bWF0aD4KLSNpbmNsdWRlIDx1bmljb2RlL3VjaGFyLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KLSNpbmNsdWRlIDx3dGYvSGFzaEZ1bmN0aW9ucy5oPgotI2luY2x1ZGUgPHd0Zi9PcHRpb25h
bC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0xDaGFyLmg+Ci0KLSNpZiBVU0UoQ0cpCi10eXBlZGVm
IHN0cnVjdCBDR0NvbG9yKiBDR0NvbG9yUmVmOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShXSU4p
Ci1zdHJ1Y3QgX0QzRENPTE9SVkFMVUU7Ci10eXBlZGVmIF9EM0RDT0xPUlZBTFVFIEQzRENPTE9S
VkFMVUU7Ci10eXBlZGVmIEQzRENPTE9SVkFMVUUgRDJEX0NPTE9SX0Y7Ci10eXBlZGVmIEQyRF9D
T0xPUl9GIEQyRDFfQ09MT1JfRjsKLXN0cnVjdCBEMkRfVkVDVE9SXzRGOwotdHlwZWRlZiBEMkRf
VkVDVE9SXzRGIEQyRDFfVkVDVE9SXzRGOwotI2VuZGlmCi0KLSNpZiBQTEFURk9STShHVEspCi10
eXBlZGVmIHN0cnVjdCBfR2RrUkdCQSBHZGtSR0JBOwotI2VuZGlmCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotc3RydWN0IEZsb2F0Q29tcG9uZW50czsKLQogLy8gQ29sb3IgdmFsdWUgd2l0aCA4
LWJpdCBjb21wb25lbnRzIGZvciByZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEuCiAvLyBGb3Ig
aGlzdG9yaWNhbCByZWFzb25zLCBzdG9yZWQgYXMgYSAzMi1iaXQgaW50ZWdlciwgd2l0aCBhbHBo
YSBpbiB0aGUgaGlnaCBiaXRzOiBBUkdCLgogY2xhc3MgU2ltcGxlQ29sb3IgewpAQCAtMTE5LDI0
NiArOTUsMTAgQEAgUkdCQTMyIG1ha2VSR0JBRnJvbUNNWUtBKGZsb2F0IGMsIGZsb2F0IAogdWlu
dDhfdCByb3VuZEFuZENsYW1wQ29sb3JDaGFubmVsKGludCk7CiB1aW50OF90IHJvdW5kQW5kQ2xh
bXBDb2xvckNoYW5uZWwoZmxvYXQpOwogCi1jbGFzcyBDb2xvciB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQ29sb3IoKSB7IH0KLQotICAgIC8vIEZJWE1FOiBS
ZW1vdmUgYWxsIHRoZXNlIGNvbnN0cnVjdG9ycyBhbmQgY3JlYXRpb24gZnVuY3Rpb25zIGFuZCBy
ZXBsYWNlIHRoZSBvbmVzIHRoYXQgYXJlIHN0aWxsIG5lZWRlZCB3aXRoIGZyZWUgZnVuY3Rpb25z
LgotCi0gICAgQ29sb3IoUkdCQTMyIGNvbG9yLCBib29sIHZhbGlkID0gdHJ1ZSkKLSAgICB7Ci0g
ICAgICAgIGlmICh2YWxpZCkKLSAgICAgICAgICAgIHNldFJHQihjb2xvcik7Ci0gICAgfQotCi0g
ICAgZW51bSBTZW1hbnRpY1RhZyB7IFNlbWFudGljIH07Ci0gICAgQ29sb3IoUkdCQTMyIGNvbG9y
LCBTZW1hbnRpY1RhZykKLSAgICB7Ci0gICAgICAgIHNldFJHQihjb2xvcik7Ci0gICAgICAgIHNl
dElzU2VtYW50aWMoKTsKLSAgICB9Ci0KLSAgICBDb2xvcihpbnQgciwgaW50IGcsIGludCBiKQot
ICAgIHsKLSAgICAgICAgc2V0UkdCKHIsIGcsIGIpOwotICAgIH0KLQotICAgIENvbG9yKGludCBy
LCBpbnQgZywgaW50IGIsIGludCBhKQotICAgIHsKLSAgICAgICAgc2V0UkdCKG1ha2VSR0JBKHIs
IGcsIGIsIGEpKTsKLSAgICB9Ci0KLSAgICBDb2xvcihmbG9hdCByLCBmbG9hdCBnLCBmbG9hdCBi
LCBmbG9hdCBhKQotICAgIHsKLSAgICAgICAgc2V0UkdCKG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIs
IGcsIGIsIGEpKTsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGVzIGEgbmV3IGNvbG9yIGZyb20gdGhl
IHNwZWNpZmljIENNWUsgYW5kIGFscGhhIHZhbHVlcy4KLSAgICBDb2xvcihmbG9hdCBjLCBmbG9h
dCBtLCBmbG9hdCB5LCBmbG9hdCBrLCBmbG9hdCBhKQotICAgIHsKLSAgICAgICAgc2V0UkdCKG1h
a2VSR0JBRnJvbUNNWUtBKGMsIG0sIHksIGssIGEpKTsKLSAgICB9Ci0KLSAgICBXRUJDT1JFX0VY
UE9SVCBleHBsaWNpdCBDb2xvcihjb25zdCBTdHJpbmcmKTsKLSAgICBleHBsaWNpdCBDb2xvcihj
b25zdCBjaGFyKik7Ci0KLSAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCi0gICAgewotICAgICAgICBzdGF0aWNfYXNzZXJ0KGRlbGV0ZWRIYXNoVmFsdWUg
JiBpbnZhbGlkUkdCQUNvbG9yLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBub3Qg
bG9vayBsaWtlIGFuIEV4dGVuZGVkQ29sb3IiKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydCghKGRl
bGV0ZWRIYXNoVmFsdWUgJiB2YWxpZFJHQkFDb2xvckJpdCksICJDb2xvcidzIGRlbGV0ZWQgaGFz
aCB2YWx1ZSBtdXN0IG5vdCBsb29rIGxpa2UgYSB2YWxpZCBSR0JBMzIgQ29sb3IiKTsKLSAgICAg
ICAgc3RhdGljX2Fzc2VydChkZWxldGVkSGFzaFZhbHVlICYgKDEgPDwgNCksICJDb2xvcidzIGRl
bGV0ZWQgaGFzaCB2YWx1ZSBtdXN0IGhhdmUgc29tZSBiaXRzIHNldCB0aGF0IGFuIFJHQkEzMiBD
b2xvciB3b3VsZG4ndCBoYXZlIik7Ci0gICAgICAgIG1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyA9
IGRlbGV0ZWRIYXNoVmFsdWU7Ci0gICAgICAgIEFTU0VSVCghaXNFeHRlbmRlZCgpKTsKLSAgICB9
Ci0KLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPT0gZGVsZXRlZEhhc2hWYWx1ZTsK
LSAgICB9Ci0KLSAgICBleHBsaWNpdCBDb2xvcihXVEY6Okhhc2hUYWJsZUVtcHR5VmFsdWVUeXBl
KQotICAgIHsKLSAgICAgICAgc3RhdGljX2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAmIGludmFsaWRS
R0JBQ29sb3IsICJDb2xvcidzIGVtcHR5IGhhc2ggdmFsdWUgbXVzdCBub3QgbG9vayBsaWtlIGFu
IEV4dGVuZGVkQ29sb3IiKTsKLSAgICAgICAgc3RhdGljX2Fzc2VydChlbXB0eUhhc2hWYWx1ZSAm
ICgxIDw8IDQpLCAiQ29sb3IncyBkZWxldGVkIGhhc2ggdmFsdWUgbXVzdCBoYXZlIHNvbWUgYml0
cyBzZXQgdGhhdCBhbiBSR0JBMzIgQ29sb3Igd291bGRuJ3QgaGF2ZSIpOwotICAgICAgICBtX2Nv
bG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBlbXB0eUhhc2hWYWx1ZTsKLSAgICAgICAgQVNTRVJUKCFp
c0V4dGVuZGVkKCkpOwotICAgIH0KLQotICAgIC8vIFRoaXMgY3JlYXRlcyBhbiBFeHRlbmRlZENv
bG9yLgotICAgIC8vIEZJWE1FOiBJZiB0aGUgY29sb3JTcGFjZSBpcyBzUkdCIGFuZCB0aGUgdmFs
dWVzIGNhbiBhbGwgYmUKLSAgICAvLyBjb252ZXJ0ZWQgZXhhY3RseSB0byBpbnRlZ2Vycywgd2Ug
c2hvdWxkIG1ha2UgYSBub3JtYWwgQ29sb3IuCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoZmxv
YXQsIGZsb2F0LCBmbG9hdCwgZmxvYXQsIENvbG9yU3BhY2UpOwotICAgIFdFQkNPUkVfRVhQT1JU
IENvbG9yKFJlZjxFeHRlbmRlZENvbG9yPiYmKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9y
KGNvbnN0IENvbG9yJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoQ29sb3ImJik7Ci0KLSAg
ICB+Q29sb3IoKQotICAgIHsKLSAgICAgICAgaWYgKGlzRXh0ZW5kZWQoKSkKLSAgICAgICAgICAg
IG1fY29sb3JEYXRhLmV4dGVuZGVkQ29sb3ItPmRlcmVmKCk7Ci0gICAgfQotCi0gICAgLy8gUmV0
dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBhY2NvcmRpbmcgdG8gSFRNTDUKLSAgICAvLyA8aHR0
cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjZmlsbC1h
bmQtc3Ryb2tlLXN0eWxlcz4gKDEwIFNlcHRlbWJlciAyMDE1KQotICAgIFdFQkNPUkVfRVhQT1JU
IFN0cmluZyBzZXJpYWxpemVkKCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcg
Y3NzVGV4dCgpIGNvbnN0OwotCi0gICAgLy8gUmV0dXJucyB0aGUgY29sb3Igc2VyaWFsaXplZCBh
cyBlaXRoZXIgI1JSR0dCQiBvciAjUlJHR0JCQUEKLSAgICBTdHJpbmcgbmFtZUZvclJlbmRlclRy
ZWVBc1RleHQoKSBjb25zdDsKLQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIGlz
RXh0ZW5kZWQoKSB8fCAobV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgdmFsaWRSR0JBQ29sb3JC
aXQpOyB9Ci0KLSAgICBib29sIGlzT3BhcXVlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgp
ID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgPT0gMS4wIDogcmdiKCkuaXNPcGFxdWUoKTsgfQotICAg
IGJvb2wgaXNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRl
ZCgpLmFscGhhKCkgPiAwLjAgOiByZ2IoKS5pc1Zpc2libGUoKTsgfQotCi0gICAgaW50IGFscGhh
KCkgY29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgKiAy
NTUgOiByZ2IoKS5hbHBoYUNvbXBvbmVudCgpOyB9Ci0gICAgZmxvYXQgYWxwaGFBc0Zsb2F0KCkg
Y29uc3QgeyByZXR1cm4gaXNFeHRlbmRlZCgpID8gYXNFeHRlbmRlZCgpLmFscGhhKCkgOiByZ2Io
KS5hbHBoYUNvbXBvbmVudEFzRmxvYXQoKTsgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgc3RkOjpwYWlyPENvbG9yU3BhY2UsIEZsb2F0Q29tcG9u
ZW50cz4gY29sb3JTcGFjZUFuZENvbXBvbmVudHMoKSBjb25zdDsKLQotICAgIC8vIFRoaXMgd2ls
bCBjb252ZXJ0IG5vbi1zUkdCIGNvbG9yc3BhY2UgY29sb3JzIGludG8gc1JHQi4KLSAgICBXRUJD
T1JFX0VYUE9SVCBTaW1wbGVDb2xvciB0b1NSR0JBU2ltcGxlQ29sb3JMb3NzeSgpIGNvbnN0Owot
Ci0gICAgLy8gVGhpcyB3aWxsIGNvbnZlcnQgbm9uLXNSR0IgY29sb3JzcGFjZSBjb2xvcnMgaW50
byBzUkdCLgotICAgIFdFQkNPUkVfRVhQT1JUIEZsb2F0Q29tcG9uZW50cyB0b1NSR0JBQ29tcG9u
ZW50c0xvc3N5KCkgY29uc3Q7Ci0KLSAgICBDb2xvciBsaWdodCgpIGNvbnN0OwotICAgIENvbG9y
IGRhcmsoKSBjb25zdDsKLQotICAgIGJvb2wgaXNEYXJrKCkgY29uc3Q7Ci0gICAgCi0gICAgV0VC
Q09SRV9FWFBPUlQgZmxvYXQgbGlnaHRuZXNzKCkgY29uc3Q7Ci0KLSAgICAvLyBUaGlzIGlzIGFu
IGltcGxlbWVudGF0aW9uIG9mIFBvcnRlci1EdWZmJ3MgInNvdXJjZS1vdmVyIiBlcXVhdGlvbgot
ICAgIENvbG9yIGJsZW5kKGNvbnN0IENvbG9yJikgY29uc3Q7Ci0gICAgQ29sb3IgYmxlbmRXaXRo
V2hpdGUoKSBjb25zdDsKLQotICAgIENvbG9yIGludmVydGVkQ29sb3JXaXRoQWxwaGEoZmxvYXQg
YWxwaGEpIGNvbnN0OwotCi0gICAgQ29sb3IgY29sb3JXaXRoQWxwaGFNdWx0aXBsaWVkQnkoZmxv
YXQpIGNvbnN0OwotICAgIENvbG9yIGNvbG9yV2l0aEFscGhhKGZsb2F0KSBjb25zdDsKLQotICAg
IC8vIEZJWE1FOiBSZW1vdmUgdGhlIG5lZWQgZm9yIEFsdGVybmF0aXZlUm91bmRpbmcgdmFyaWFu
dHMgYnkgc2V0dGxpbmcgb24gYSByb3VuZGluZyBiZWhhdmlvci4KLSAgICBDb2xvciBjb2xvcldp
dGhBbHBoYU11bHRpcGxpZWRCeVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9h
dD4pIGNvbnN0OwotICAgIENvbG9yIGNvbG9yV2l0aEFscGhhTXVsdGlwbGllZEJ5VXNpbmdBbHRl
cm5hdGl2ZVJvdW5kaW5nKGZsb2F0KSBjb25zdDsKLSAgICBDb2xvciBjb2xvcldpdGhBbHBoYVVz
aW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhPcHRpb25hbDxmbG9hdD4pIGNvbnN0OwotICAgIFdFQkNP
UkVfRVhQT1JUIENvbG9yIGNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKGZs
b2F0KSBjb25zdDsKLQotICAgIENvbG9yIG9wYXF1ZUNvbG9yKCkgY29uc3QgeyByZXR1cm4gY29s
b3JXaXRoQWxwaGEoMS4wZik7IH0KLSAgICBDb2xvciBzZW1hbnRpY0NvbG9yKCkgY29uc3Q7Ci0K
LSAgICAvLyBUcnVlIGlmIHRoZSBjb2xvciBvcmlnaW5hdGVkIGZyb20gYSBDU1Mgc2VtYW50aWMg
Y29sb3IgbmFtZS4KLSAgICBib29sIGlzU2VtYW50aWMoKSBjb25zdCB7IHJldHVybiAhaXNFeHRl
bmRlZCgpICYmIChtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgJiBpc1NlbWFudGljUkJHQUNvbG9y
Qml0KTsgfQotCi0jaWYgUExBVEZPUk0oR1RLKQotICAgIENvbG9yKGNvbnN0IEdka1JHQkEmKTsK
LSAgICBvcGVyYXRvciBHZGtSR0JBKCkgY29uc3Q7Ci0jZW5kaWYKLQotI2lmIFVTRShDRykKLSAg
ICBXRUJDT1JFX0VYUE9SVCBDb2xvcihDR0NvbG9yUmVmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBD
b2xvcihDR0NvbG9yUmVmLCBTZW1hbnRpY1RhZyk7Ci0gICAgZnJpZW5kIFdFQkNPUkVfRVhQT1JU
IENHQ29sb3JSZWYgY2FjaGVkQ0dDb2xvcihjb25zdCBDb2xvciYpOwotI2VuZGlmCi0KLSNpZiBQ
TEFURk9STShXSU4pCi0gICAgV0VCQ09SRV9FWFBPUlQgQ29sb3IoRDJEMV9DT0xPUl9GKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBvcGVyYXRvciBEMkQxX0NPTE9SX0YoKSBjb25zdDsKLSAgICBXRUJD
T1JFX0VYUE9SVCBvcGVyYXRvciBEMkQxX1ZFQ1RPUl80RigpIGNvbnN0OwotI2VuZGlmCi0KLSAg
ICBzdGF0aWMgYm9vbCBwYXJzZUhleENvbG9yKGNvbnN0IFN0cmluZyYsIFJHQkEzMiYpOwotICAg
IHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgU3RyaW5nVmlldyYsIFJHQkEzMiYpOwot
ICAgIHN0YXRpYyBib29sIHBhcnNlSGV4Q29sb3IoY29uc3QgTENoYXIqLCB1bnNpZ25lZCwgUkdC
QTMyJik7Ci0gICAgc3RhdGljIGJvb2wgcGFyc2VIZXhDb2xvcihjb25zdCBVQ2hhciosIHVuc2ln
bmVkLCBSR0JBMzImKTsKLQotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgYmxhY2sg
eyAweEZGMDAwMDAwIH07Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciB3aGl0ZSB7
IDB4RkZGRkZGRkYgfTsKLSAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGRhcmtHcmF5
IHsgMHhGRjgwODA4MCB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgZ3JheSB7
IDB4RkZBMEEwQTAgfTsKLSAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIGxpZ2h0R3Jh
eSB7IDB4RkZDMEMwQzAgfTsKLSAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIHRyYW5z
cGFyZW50IHsgMHgwMDAwMDAwMCB9OwotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3Ig
Y3lhbiB7IDB4RkYwMEZGRkYgfTsKLSAgICBzdGF0aWMgY29uc3RleHByIFNpbXBsZUNvbG9yIHll
bGxvdyB7IDB4RkZGRkZGMDAgfTsKLQotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3Rh
dGljIGNvbnN0ZXhwciBTaW1wbGVDb2xvciBjb21wb3NpdGlvbkZpbGwgeyAweDNDQUZDMEUzIH07
Ci0jZWxzZQotICAgIHN0YXRpYyBjb25zdGV4cHIgU2ltcGxlQ29sb3IgY29tcG9zaXRpb25GaWxs
IHsgMHhGRkUxREQ1NSB9OwotI2VuZGlmCi0KLSAgICBib29sIGlzRXh0ZW5kZWQoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuICEobV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYgaW52YWxp
ZFJHQkFDb2xvcik7Ci0gICAgfQotICAgIFdFQkNPUkVfRVhQT1JUIGNvbnN0IEV4dGVuZGVkQ29s
b3ImIGFzRXh0ZW5kZWQoKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIENvbG9yJiBvcGVy
YXRvcj0oY29uc3QgQ29sb3ImKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBDb2xvciYgb3BlcmF0b3I9
KENvbG9yJiYpOwotCi0gICAgLy8gRXh0ZW5kZWQgYW5kIG5vbi1leHRlbmRlZCBjb2xvcnMgd2ls
bCBhbHdheXMgYmUgbm9uLWVxdWFsLgotICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKTsKLSAgICBmcmllbmQgYm9vbCBlcXVhbElnbm9yaW5n
U2VtYW50aWNDb2xvcihjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpOwotCi0gICAgZnJp
ZW5kIGludCBkaWZmZXJlbmNlU3F1YXJlZChjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Ci0K
LSAgICBzdGF0aWMgYm9vbCBpc0JsYWNrQ29sb3IoY29uc3QgQ29sb3ImKTsKLSAgICBzdGF0aWMg
Ym9vbCBpc1doaXRlQ29sb3IoY29uc3QgQ29sb3ImKTsKLQotICAgIHRlbXBsYXRlPGNsYXNzIEVu
Y29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKLSAgICB0ZW1wbGF0ZTxjbGFzcyBE
ZWNvZGVyPiBzdGF0aWMgT3B0aW9uYWw8Q29sb3I+IGRlY29kZShEZWNvZGVyJik7Ci0KLXByaXZh
dGU6Ci0gICAgUkdCQTMyIHJnYigpIGNvbnN0OwotICAgIHZvaWQgc2V0UkdCKGludCByLCBpbnQg
ZywgaW50IGIpIHsgc2V0UkdCKG1ha2VSR0IociwgZywgYikpOyB9Ci0gICAgdm9pZCBzZXRSR0Io
UkdCQTMyKTsKLSAgICB2b2lkIHNldElzU2VtYW50aWMoKSB7IG1fY29sb3JEYXRhLnJnYmFBbmRG
bGFncyB8PSBpc1NlbWFudGljUkJHQUNvbG9yQml0OyB9Ci0KLSAgICAvLyAweF9fX19fX18wMCBp
cyBhbiBFeHRlbmRlZENvbG9yIHBvaW50ZXIuCi0gICAgLy8gMHhfX19fX19fMDEgaXMgYW4gaW52
YWxpZCBSR0JBMzIuCi0gICAgLy8gMHhfX19fX19fMTEgaXMgYSB2YWxpZCBSR0JBMzIuCi0gICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IGV4dGVuZGVkQ29sb3IgPSAweDA7Ci0gICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IGludmFsaWRSR0JBQ29sb3IgPSAweDE7Ci0gICAgc3RhdGljIGNvbnN0IHVp
bnQ2NF90IHZhbGlkUkdCQUNvbG9yQml0ID0gMHgyOwotICAgIHN0YXRpYyBjb25zdCB1aW50NjRf
dCB2YWxpZFJHQkFDb2xvciA9IDB4MzsKLSAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaXNTZW1h
bnRpY1JCR0FDb2xvckJpdCA9IDB4NDsKLQotICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBkZWxl
dGVkSGFzaFZhbHVlID0gMHhGRkZGRkZGRkZGRkZGRkZEOwotICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBlbXB0eUhhc2hWYWx1ZSA9IDB4RkZGRkZGRkZGRkZGRkZGQjsKLQotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgdGFnQXNWYWxpZCgpOwotCi0gICAgdW5pb24gewotICAgICAgICB1aW50NjRf
dCByZ2JhQW5kRmxhZ3MgeyBpbnZhbGlkUkdCQUNvbG9yIH07Ci0gICAgICAgIEV4dGVuZGVkQ29s
b3IqIGV4dGVuZGVkQ29sb3I7Ci0gICAgfSBtX2NvbG9yRGF0YTsKLX07Ci0KLWJvb2wgb3BlcmF0
b3I9PShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7Ci1ib29sIG9wZXJhdG9yIT0oY29uc3Qg
Q29sb3ImLCBjb25zdCBDb2xvciYpOwotCi0vLyBPbmUgb3IgYm90aCBtdXN0IGJlIGV4dGVuZGVk
IGNvbG9ycy4KLVdFQkNPUkVfRVhQT1JUIGJvb2wgZXh0ZW5kZWRDb2xvcnNFcXVhbChjb25zdCBD
b2xvciYsIGNvbnN0IENvbG9yJik7Ci0KLUNvbG9yIGJsZW5kKGNvbnN0IENvbG9yJiBmcm9tLCBj
b25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcyk7Ci1Db2xvciBibGVuZFdpdGhvdXRQcmVt
dWx0aXBseShjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpOwotCi1pbnQgZGlmZmVyZW5jZVNxdWFyZWQoY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYp
OwotCiB1aW50MTZfdCBmYXN0TXVsdGlwbHlCeTI1NSh1aW50MTZfdCB2YWx1ZSk7CiB1aW50MTZf
dCBmYXN0RGl2aWRlQnkyNTUodWludDE2X3QpOwogCi0jaWYgVVNFKENHKQotV0VCQ09SRV9FWFBP
UlQgQ0dDb2xvclJlZiBjYWNoZWRDR0NvbG9yKGNvbnN0IENvbG9yJik7Ci0jZW5kaWYKLQotV0VC
Q09SRV9FWFBPUlQgV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYs
IGNvbnN0IENvbG9yJik7Ci1XRUJDT1JFX0VYUE9SVCBXVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9y
PDwoV1RGOjpUZXh0U3RyZWFtJiwgQ29sb3JTcGFjZSk7Cit1aW50OF90IGNvbG9yRmxvYXRUb1JH
QkFCeXRlKGZsb2F0KTsKIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShTaW1wbGVDb2xvciBhLCBT
aW1wbGVDb2xvciBiKQogewpAQCAtMzcwLDM0ICsxMTAsNiBAQCBpbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KFNpbXBsZUNvbG9yIGEsIFNpCiAgICAgcmV0dXJuICEoYSA9PSBiKTsKIH0KIAotaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCi17Ci0gICAg
aWYgKGEuaXNFeHRlbmRlZCgpIHx8IGIuaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1cm4gZXh0
ZW5kZWRDb2xvcnNFcXVhbChhLCBiKTsKLQotICAgIHJldHVybiBhLm1fY29sb3JEYXRhLnJnYmFB
bmRGbGFncyA9PSBiLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFnczsKLX0KLQotaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBDb2xvciYgYSwgY29uc3QgQ29sb3ImIGIpCi17Ci0gICAgcmV0dXJu
ICEoYSA9PSBiKTsKLX0KLQotaW5saW5lIGJvb2wgZXF1YWxJZ25vcmluZ1NlbWFudGljQ29sb3Io
Y29uc3QgQ29sb3ImIGEsIGNvbnN0IENvbG9yJiBiKQotewotICAgIGlmIChhLmlzRXh0ZW5kZWQo
KSB8fCBiLmlzRXh0ZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuIGV4dGVuZGVkQ29sb3JzRXF1YWwo
YSwgYik7Ci0gICAgcmV0dXJuIChhLm1fY29sb3JEYXRhLnJnYmFBbmRGbGFncyAmIH5Db2xvcjo6
aXNTZW1hbnRpY1JCR0FDb2xvckJpdCkgPT0gKGIubV9jb2xvckRhdGEucmdiYUFuZEZsYWdzICYg
fkNvbG9yOjppc1NlbWFudGljUkJHQUNvbG9yQml0KTsKLX0KLQotaW5saW5lIHVuc2lnbmVkIENv
bG9yOjpoYXNoKCkgY29uc3QKLXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKQotICAgICAgICByZXR1
cm4gYXNFeHRlbmRlZCgpLmhhc2goKTsKLQotICAgIHJldHVybiBXVEY6OmludEhhc2gobV9jb2xv
ckRhdGEucmdiYUFuZEZsYWdzKTsKLX0KLQogaW5saW5lIHVpbnQ4X3Qgcm91bmRBbmRDbGFtcENv
bG9yQ2hhbm5lbChpbnQgdmFsdWUpCiB7CiAgICAgcmV0dXJuIHN0ZDo6bWF4KDAsIHN0ZDo6bWlu
KDI1NSwgdmFsdWUpKTsKQEAgLTQyMiwxMTYgKzEzNCwxMSBAQCBpbmxpbmUgdWludDE2X3QgZmFz
dERpdmlkZUJ5MjU1KHVpbnQxNl90CiAgICAgcmV0dXJuIGFwcHJveGltYXRpb24gKyAocmVtYWlu
ZGVyID4+IDgpOwogfQogCi1pbmxpbmUgQ29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhTXVsdGlw
bGllZEJ5VXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlvbmFsPGZsb2F0PiBhbHBoYSkgY29u
c3QKLXsKLSAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhBbHBoYU11bHRpcGxpZWRCeVVzaW5n
QWx0ZXJuYXRpdmVSb3VuZGluZyhhbHBoYS52YWx1ZSgpKSA6ICp0aGlzOwotfQotCi1pbmxpbmUg
Q29sb3IgQ29sb3I6OmNvbG9yV2l0aEFscGhhVXNpbmdBbHRlcm5hdGl2ZVJvdW5kaW5nKE9wdGlv
bmFsPGZsb2F0PiBhbHBoYSkgY29uc3QKLXsKLSAgICByZXR1cm4gYWxwaGEgPyBjb2xvcldpdGhB
bHBoYVVzaW5nQWx0ZXJuYXRpdmVSb3VuZGluZyhhbHBoYS52YWx1ZSgpKSA6ICp0aGlzOwotfQot
Ci1pbmxpbmUgUkdCQTMyIENvbG9yOjpyZ2IoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgQVNTRVJUKCFpc0V4dGVuZGVkKCkpIGhlcmUsIG9yIHByb2R1Y2UKLSAgICAvLyBhbiBS
R0JBMzIgZXF1aXZhbGVudCBmb3IgYW4gRXh0ZW5kZWRDb2xvci4gSWRlYWxseSB0aGUgZm9ybWVy
LAotICAgIC8vIHNvIHdlIGNhbiBhdWRpdCBhbGwgdGhlIHJnYigpIGNhbGwgc2l0ZXMgdG8gaGFu
ZGxlIGV4dGVuZGVkLgotICAgIHJldHVybiB7IHN0YXRpY19jYXN0PHVpbnQzMl90PihtX2NvbG9y
RGF0YS5yZ2JhQW5kRmxhZ3MgPj4gMzIpIH07Ci19Ci0KLWlubGluZSB2b2lkIENvbG9yOjpzZXRS
R0IoUkdCQTMyIHJnYikKLXsKLSAgICBtX2NvbG9yRGF0YS5yZ2JhQW5kRmxhZ3MgPSBzdGF0aWNf
Y2FzdDx1aW50NjRfdD4ocmdiLnZhbHVlKCkpIDw8IDMyOwotICAgIHRhZ0FzVmFsaWQoKTsKLX0K
LQotaW5saW5lIGJvb2wgQ29sb3I6OmlzQmxhY2tDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17
Ci0gICAgaWYgKGNvbG9yLmlzRXh0ZW5kZWQoKSkgewotICAgICAgICBjb25zdCBFeHRlbmRlZENv
bG9yJiBleHRlbmRlZENvbG9yID0gY29sb3IuYXNFeHRlbmRlZCgpOwotICAgICAgICByZXR1cm4g
IWV4dGVuZGVkQ29sb3IucmVkKCkgJiYgIWV4dGVuZGVkQ29sb3IuZ3JlZW4oKSAmJiAhZXh0ZW5k
ZWRDb2xvci5ibHVlKCkgJiYgZXh0ZW5kZWRDb2xvci5hbHBoYSgpID09IDE7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGNvbG9yLnJnYigpID09IENvbG9yOjpibGFjazsKLX0KLQotaW5saW5lIGJvb2wg
Q29sb3I6OmlzV2hpdGVDb2xvcihjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKGNvbG9y
LmlzRXh0ZW5kZWQoKSkgewotICAgICAgICBjb25zdCBFeHRlbmRlZENvbG9yJiBleHRlbmRlZENv
bG9yID0gY29sb3IuYXNFeHRlbmRlZCgpOwotICAgICAgICByZXR1cm4gZXh0ZW5kZWRDb2xvci5y
ZWQoKSA9PSAxICYmIGV4dGVuZGVkQ29sb3IuZ3JlZW4oKSA9PSAxICYmIGV4dGVuZGVkQ29sb3Iu
Ymx1ZSgpID09IDEgJiYgZXh0ZW5kZWRDb2xvci5hbHBoYSgpID09IDE7Ci0gICAgfQotICAgIAot
ICAgIHJldHVybiBjb2xvci5yZ2IoKSA9PSBDb2xvcjo6d2hpdGU7Ci19Ci0KLXRlbXBsYXRlPGNs
YXNzIEVuY29kZXI+Ci12b2lkIENvbG9yOjplbmNvZGUoRW5jb2RlciYgZW5jb2RlcikgY29uc3QK
LXsKLSAgICBpZiAoaXNFeHRlbmRlZCgpKSB7Ci0gICAgICAgIGVuY29kZXIgPDwgdHJ1ZTsKLSAg
ICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkucmVkKCk7Ci0gICAgICAgIGVuY29kZXIgPDwg
YXNFeHRlbmRlZCgpLmdyZWVuKCk7Ci0gICAgICAgIGVuY29kZXIgPDwgYXNFeHRlbmRlZCgpLmJs
dWUoKTsKLSAgICAgICAgZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuYWxwaGEoKTsKLSAgICAgICAg
ZW5jb2RlciA8PCBhc0V4dGVuZGVkKCkuY29sb3JTcGFjZSgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgZW5jb2RlciA8PCBmYWxzZTsKLQotICAgIGlmICghaXNWYWxpZCgpKSB7Ci0g
ICAgICAgIGVuY29kZXIgPDwgZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgZW5jb2RlIHdoZXRoZXIgdGhlIGNvbG9yIGlzIHNlbWFudGlj
LgotCi0gICAgdWludDMyX3QgdmFsdWUgPSByZ2IoKS52YWx1ZSgpOwotCi0gICAgZW5jb2RlciA8
PCB0cnVlOwotICAgIGVuY29kZXIgPDwgdmFsdWU7Ci19Ci0KLXRlbXBsYXRlPGNsYXNzIERlY29k
ZXI+Ci1PcHRpb25hbDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQoraW5s
aW5lIHVpbnQ4X3QgY29sb3JGbG9hdFRvUkdCQUJ5dGUoZmxvYXQgZikKIHsKLSAgICBib29sIGlz
RXh0ZW5kZWQ7Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZShpc0V4dGVuZGVkKSkKLSAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKLQotICAgIGlmIChpc0V4dGVuZGVkKSB7Ci0gICAgICAgIGZs
b2F0IHJlZDsKLSAgICAgICAgZmxvYXQgZ3JlZW47Ci0gICAgICAgIGZsb2F0IGJsdWU7Ci0gICAg
ICAgIGZsb2F0IGFscGhhOwotICAgICAgICBDb2xvclNwYWNlIGNvbG9yU3BhY2U7Ci0gICAgICAg
IGlmICghZGVjb2Rlci5kZWNvZGUocmVkKSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNvZGUoZ3JlZW4pKQotICAgICAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgaWYgKCFkZWNvZGVyLmRlY29kZShibHVlKSkKLSAg
ICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGlmICghZGVjb2Rlci5kZWNv
ZGUoYWxwaGEpKQotICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgaWYg
KCFkZWNvZGVyLmRlY29kZShjb2xvclNwYWNlKSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0gICAgICAgIHJldHVybiBDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSwgY29s
b3JTcGFjZSk7Ci0gICAgfQotCi0gICAgYm9vbCBpc1ZhbGlkOwotICAgIGlmICghZGVjb2Rlci5k
ZWNvZGUoaXNWYWxpZCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0KLSAgICBpZiAo
IWlzVmFsaWQpCi0gICAgICAgIHJldHVybiBDb2xvcigpOwotCi0gICAgdWludDMyX3QgdmFsdWU7
Ci0gICAgaWYgKCFkZWNvZGVyLmRlY29kZSh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7Ci0KLSAgICByZXR1cm4gQ29sb3IgeyBTaW1wbGVDb2xvciB7IHZhbHVlIH0gfTsKKyAg
ICAvLyBGSVhNRTogQ29uc29saWRhdGUgd2l0aCBjbGFtcGVkQ29sb3JDb21wb25lbnQoKS4KKyAg
ICAvLyBXZSB1c2UgbHJvdW5kZiBhbmQgMjU1IGluc3RlYWQgb2YgbmV4dGFmdGVyZigyNTYsIDAp
IHRvIG1hdGNoIENHJ3Mgcm91bmRpbmcKKyAgICByZXR1cm4gc3RkOjptYXgoMCwgc3RkOjptaW4o
c3RhdGljX2Nhc3Q8aW50Pihscm91bmRmKDI1NS4wZiAqIGYpKSwgMjU1KSk7CiB9CiAKIGNvbnN0
ZXhwciBSR0JBMzIgbWFrZVJHQihpbnQgciwgaW50IGcsIGludCBiKQpAQCAtNTQ2LDExICsxNTMs
NiBAQCBjb25zdGV4cHIgUkdCQTMyIG1ha2VSR0JBKGludCByLCBpbnQgZywgCiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKIAotbmFtZXNwYWNlIFdURiB7Ci10ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxXZWJDb3JlOjpDb2xvcj47Ci10ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPFdl
YkNvcmU6OkNvbG9yPjsKLX0KLQogbmFtZXNwYWNlIHN0ZCB7CiAKIHRlbXBsYXRlPD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>