<?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>203397</bug_id>
          
          <creation_ts>2019-10-24 21:21:45 -0700</creation_ts>
          <short_desc>Move code around in CSSCalculationValue.cpp</short_desc>
          <delta_ts>2019-10-25 10:17:23 -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>CSS</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="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1583653</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-10-24 21:21:45 -0700</bug_when>
    <thetext>Move code around in CSSCalculationValue.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583656</commentid>
    <comment_count>1</comment_count>
      <attachid>381876</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-10-24 21:23:04 -0700</bug_when>
    <thetext>Created attachment 381876
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583885</commentid>
    <comment_count>2</comment_count>
      <attachid>381876</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-25 10:16:30 -0700</bug_when>
    <thetext>Comment on attachment 381876
Patch

Clearing flags on attachment: 381876

Committed r251595: &lt;https://trac.webkit.org/changeset/251595&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583886</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-25 10:16:32 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1583887</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-25 10:17:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/56622305&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>381876</attachid>
            <date>2019-10-24 21:23:04 -0700</date>
            <delta_ts>2019-10-25 10:16:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-203397-20191024212303.patch</filename>
            <type>text/plain</type>
            <size>53502</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjUxNTc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjY0MWU5ODdjZWEwYzc2
M2FjZGFkZWZjNWE1NzUzMTU5MWI2YWI5ZS4uNGM1NWIyMWFhNjZlMWJkZDM3MzE3NzJkM2E2OGU0
YmIxYTQxODZkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ4IEBACisyMDE5LTEwLTI0ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIE1vdmUgY29kZSBh
cm91bmQgaW4gQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMzM5NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIExhcmdlIGFtb3VudHMgb2YgY29kZSB3ZXJlIGluIGlu
bGluZSAoYnV0IHZpcnR1YWwpIGZ1bmN0aW9ucyBpbiBDU1NDYWxjUHJpbWl0aXZlVmFsdWUsIENT
U0NhbGNPcGVyYXRpb24KKyAgICAgICAgYW5kIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlciwg
bWFraW5nIGl0IGhhcmQgdG8gbmF2aWdhdGUgYXJvdW5kIHRoaXMgZmlsZS4gTW92ZSBjb2RlIGlu
dG8KKyAgICAgICAgb3V0LW9mLWxpbmUgZnVuY3Rpb25zLiBObyBiZWhhdmlvciBjaGFuZ2VzLgor
CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbiBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmRvdWJsZVZhbHVlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y29tcHV0ZUxlbmd0
aFB4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y29s
bGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlOjplcXVhbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb246OmNyZWF0ZU1p
bk9yTWF4KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb246OmNyZWF0ZVNpbXBs
aWZpZWQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbjo6cHJpbWl0aXZlVHlw
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uOjpjcmVhdGVDYWxj
RXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uOjpk
b3VibGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uOjpj
b21wdXRlTGVuZ3RoUHggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlv
bjo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbjo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlv
bmFsRGVwZW5kZW5jaWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRp
b246OmJ1aWxkQ3NzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uOjpj
dXN0b21DU1NUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb246
OmVxdWFscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uOjpldmFs
dWF0ZU9wZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBh
cnNlcjo6cGFyc2VDYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9k
ZVBhcnNlcjo6cGFyc2VWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0RlcHRoQW5kSW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJz
ZVZhbHVlVGVybSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXI6OnBhcnNlVmFsdWVNdWx0aXBsaWNhdGl2ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUFkZGl0aXZlVmFsdWVFeHByZXNz
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFy
c2VNaW5NYXhFeHByZXNzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlcjo6cGFyc2VWYWx1ZUV4cHJlc3Npb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
Q2FsY1ZhbHVlOjpjdXN0b21DU1NUZXh0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nh
bGNWYWx1ZTo6ZXF1YWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6
Y2xhbXBUb1Blcm1pdHRlZFJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNW
YWx1ZTo6ZG91YmxlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVl
Ojpjb21wdXRlTGVuZ3RoUHggY29uc3QpOgorCiAyMDE5LTEwLTIzICBSeW9zdWtlIE5pd2EgIDxy
bml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIEFkZCBhIG1lY2hhbmlzbSB0byBmaW5kIGFuZCBt
YW5pcHVsYXRlIHRleHQgYnkgcGFyYWdyYXBocwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1
bGF0aW9uVmFsdWUuY3BwCmluZGV4IDliZTc1MWRlZmRlNzA5MDMwYWYyODE1ZjE4YTg5NThjZGZh
YjU2MzguLjI2MDQ1NTA5ZjQ5OTgxMmVhMDdiNmFiZDcxODNmMmY4ZDJhODczYTQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKQEAgLTE0OSwzMyArMTQ5LDYg
QEAgc3RhdGljIGJvb2wgaGFzRG91YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBl
IHR5cGUpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TdHJpbmcgQ1NTQ2FsY1ZhbHVlOjpjdXN0
b21DU1NUZXh0KCkgY29uc3QKLXsKLSAgICBhdXRvIGV4cHJlc3Npb24gPSBtX2V4cHJlc3Npb24t
PmN1c3RvbUNTU1RleHQoKTsKLSAgICBpZiAoZXhwcmVzc2lvblswXSA9PSAnKCcpCi0gICAgICAg
IHJldHVybiBtYWtlU3RyaW5nKCJjYWxjIiwgZXhwcmVzc2lvbik7Ci0gICAgcmV0dXJuIG1ha2VT
dHJpbmcoImNhbGMoIiwgZXhwcmVzc2lvbiwgJyknKTsKLX0KLQotYm9vbCBDU1NDYWxjVmFsdWU6
OmVxdWFscyhjb25zdCBDU1NDYWxjVmFsdWUmIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBj
b21wYXJlQ1NTVmFsdWUobV9leHByZXNzaW9uLCBvdGhlci5tX2V4cHJlc3Npb24pOwotfQotCi1p
bmxpbmUgZG91YmxlIENTU0NhbGNWYWx1ZTo6Y2xhbXBUb1Blcm1pdHRlZFJhbmdlKGRvdWJsZSB2
YWx1ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgJiYg
dmFsdWUgPCAwID8gMCA6IHZhbHVlOwotfQotCi1kb3VibGUgQ1NTQ2FsY1ZhbHVlOjpkb3VibGVW
YWx1ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNsYW1wVG9QZXJtaXR0ZWRSYW5nZShtX2V4cHJl
c3Npb24tPmRvdWJsZVZhbHVlKCkpOwotfQotCi1kb3VibGUgQ1NTQ2FsY1ZhbHVlOjpjb21wdXRl
TGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNsYW1wVG9QZXJtaXR0ZWRSYW5nZShtX2V4cHJlc3Npb24t
PmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSkpOwotfQogCiBjbGFzcyBDU1NDYWxjUHJp
bWl0aXZlVmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKQEAgLTE5OCw5NyArMTcxLDExMCBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gIW1fdmFsdWUtPmRvdWJsZVZhbHVlKCk7CiAgICAgfQogCisgICAgYm9v
bCBlcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QgZmluYWw7
CisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3NzQ2FsY1ByaW1pdGl2ZVZh
bHVlOyB9CisKKyAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgp
IGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OlVu
aXRUeXBlKG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7CisgICAgfQorCisgICAgc3RkOjp1bmlx
dWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBkb3VibGVW
YWx1ZSgpIGNvbnN0IGZpbmFsOworCisgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7CisgICAgdm9pZCBjb2xsZWN0
RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+Jikg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBl
bmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0IGZpbmFsOworCiAgICAgU3Ry
aW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdCBmaW5hbAogICAgIHsKICAgICAgICAgcmV0dXJuIG1f
dmFsdWUtPmNzc1RleHQoKTsKICAgICB9CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QgZmluYWwKK3ByaXZhdGU6CisgICAgZXhwbGlj
aXQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlKFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSwg
Ym9vbCBpc0ludGVnZXIpCisgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKHVuaXRDYXRl
Z29yeSgoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlKXZhbHVlLT5wcmltaXRpdmVUeXBlKCkp
LCBpc0ludGVnZXIpCisgICAgICAgICwgbV92YWx1ZShXVEZNb3ZlKHZhbHVlKSkKICAgICB7Ci0g
ICAgICAgIHN3aXRjaCAoY2F0ZWdvcnkoKSkgewotICAgICAgICBjYXNlIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok51bWJlcjoKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNz
aW9uTnVtYmVyPihtX3ZhbHVlLT5mbG9hdFZhbHVlKCkpOwotICAgICAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKLSAgICAgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNF
eHByZXNzaW9uTGVuZ3RoPihMZW5ndGgobV92YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oY29u
dmVyc2lvbkRhdGEpLCBXZWJDb3JlOjpGaXhlZCkpOwotICAgICAgICBjYXNlIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnQ6Ci0gICAgICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudExlbmd0aDogewotICAgICAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Np
b25MZW5ndGg+KG1fdmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEZsb2F0Q29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uPihjb252ZXJzaW9uRGF0YSkpOwotICAgICAgICB9Ci0gICAgICAg
IC8vIE9ubHkgdHlwZXMgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGEgTGVuZ3RoIGV4cHJlc3Npb24g
Y2FuIGJlIGNvbnZlcnRlZAotICAgICAgICAvLyB0byBhIENhbGNFeHByZXNzaW9uTm9kZS4gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciBtYWtlcyBubyBzZW5zZSBhcyBhIExlbmd0
aC4KLSAgICAgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgotICAg
ICAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOgotICAgICAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6Ci0gICAgICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
RnJlcXVlbmN5OgotICAgICAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgotICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIH0KLSAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KIAotICAgIGRv
dWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBpZiAoaGFzRG91
YmxlVmFsdWUocHJpbWl0aXZlVHlwZSgpKSkKLSAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlLT5k
b3VibGVWYWx1ZSgpOworICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbV92YWx1ZTsKK307CisK
K3N0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjYXRlZ29yeSgpKSB7CisgICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6CisgICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPENhbGNFeHByZXNzaW9uTnVtYmVyPihtX3ZhbHVlLT5mbG9hdFZhbHVlKCkpOworICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgorICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4oTGVuZ3RoKG1fdmFsdWUtPmNvbXB1dGVMZW5ndGg8Zmxv
YXQ+KGNvbnZlcnNpb25EYXRhKSwgV2ViQ29yZTo6Rml4ZWQpKTsKKyAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50TGVuZ3RoOiB7CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVu
Z3RoPihtX3ZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRGbG9hdENvbnZlcnNpb24gfCBQZXJj
ZW50Q29udmVyc2lvbj4oY29udmVyc2lvbkRhdGEpKTsKKyAgICB9CisgICAgLy8gT25seSB0eXBl
cyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYSBMZW5ndGggZXhwcmVzc2lvbiBjYW4gYmUgY29udmVy
dGVkCisgICAgLy8gdG8gYSBDYWxjRXhwcmVzc2lvbk5vZGUuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnROdW1iZXIgbWFrZXMgbm8gc2Vuc2UgYXMgYSBMZW5ndGguCisgICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6QW5nbGU6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOgorICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OgorICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXI6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CiAKLSAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAg
ICAgc3dpdGNoIChjYXRlZ29yeSgpKSB7Ci0gICAgICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TGVuZ3RoOgotICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmNvbXB1dGVMZW5ndGg8ZG91
YmxlPihjb252ZXJzaW9uRGF0YSk7Ci0gICAgICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudDoKLSAgICAgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6Ci0gICAg
ICAgICAgICByZXR1cm4gbV92YWx1ZS0+ZG91YmxlVmFsdWUoKTsKLSAgICAgICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgotICAgICAgICBjYXNlIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6Ci0gICAgICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6QW5nbGU6Ci0gICAgICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToKLSAgICAg
ICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6Ci0gICAgICAgIGNhc2UgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Citkb3VibGUgQ1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlOjpkb3VibGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgaWYgKGhhc0RvdWJsZVZhbHVlKHBy
aW1pdGl2ZVR5cGUoKSkpCisgICAgICAgIHJldHVybiBtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpOwor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitkb3VibGUgQ1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjYXRlZ29y
eSgpKSB7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6CisgICAgICAgIHJl
dHVybiBtX3ZhbHVlLT5jb21wdXRlTGVuZ3RoPGRvdWJsZT4oY29udmVyc2lvbkRhdGEpOworICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDoKKyAgICBjYXNlIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok51bWJlcjoKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmRvdWJsZVZhbHVlKCk7
CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgorICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OkFuZ2xlOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToKKyAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKKyAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyOgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gMDsKK30KIAotICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0
aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdCBm
aW5hbAotICAgIHsKLSAgICAgICAgbV92YWx1ZS0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXModmFsdWVzKTsKLSAgICB9Cit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6
Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0
eUlEPiYgdmFsdWVzKSBjb25zdAoreworICAgIG1fdmFsdWUtPmNvbGxlY3REaXJlY3RDb21wdXRh
dGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Cit9CiAKLSAgICB2b2lkIGNvbGxlY3REaXJlY3RS
b290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1
ZXMpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBtX3ZhbHVlLT5jb2xsZWN0RGlyZWN0Um9v
dENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKLSAgICB9Cit2b2lkIENTU0NhbGNQ
cmltaXRpdmVWYWx1ZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVz
KEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKK3sKKyAgICBtX3ZhbHVlLT5j
b2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKK30KIAot
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0
IGZpbmFsCi0gICAgewotICAgICAgICBpZiAodHlwZSgpICE9IG90aGVyLnR5cGUoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKK2Jvb2wgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjplcXVhbHMo
Y29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAodHlw
ZSgpICE9IG90aGVyLnR5cGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IGNvbXBhcmVDU1NWYWx1ZShtX3ZhbHVlLCBzdGF0aWNfY2FzdDxjb25zdCBDU1NDYWxjUHJpbWl0
aXZlVmFsdWUmPihvdGhlcikubV92YWx1ZSk7Cit9CiAKLSAgICAgICAgcmV0dXJuIGNvbXBhcmVD
U1NWYWx1ZShtX3ZhbHVlLCBzdGF0aWNfY2FzdDxjb25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWUm
PihvdGhlcikubV92YWx1ZSk7Ci0gICAgfQogCi0gICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gQ3NzQ2FsY1ByaW1pdGl2ZVZhbHVlOyB9Ci0gICAgQ1NTUHJpbWl0aXZlVmFsdWU6
OlVuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0
dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZShtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkp
OwotICAgIH0KIAotcHJpdmF0ZToKLSAgICBleHBsaWNpdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWUo
UmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlLCBib29sIGlzSW50ZWdlcikKLSAgICAgICAg
OiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUodW5pdENhdGVnb3J5KChDU1NQcmltaXRpdmVWYWx1ZTo6
VW5pdFR5cGUpdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSksIGlzSW50ZWdlcikKLSAgICAgICAgLCBt
X3ZhbHVlKFdURk1vdmUodmFsdWUpKQotICAgIHsKLSAgICB9CiAKLSAgICBSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+IG1fdmFsdWU7Ci19OwogCiBzdGF0aWMgY29uc3QgQ2FsY3VsYXRpb25DYXRlZ29y
eSBhZGRTdWJ0cmFjdFJlc3VsdFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ2FsY3VsYXRpb25DYXRl
Z29yeTo6QW5nbGUpXVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ2FsY3VsYXRpb25DYXRlZ29yeTo6
QW5nbGUpXSA9IHsKIC8vICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciAgICAgICAgIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnQgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIgIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgKQEAgLTM4NiwzNjQgKzM3MiwzNjMgQEAgc3RhdGlj
IGJvb2wgaXNTYW1lUGFpcihDYWxjdWxhdGlvbkNhdGVnb3J5IGEsIENhbGN1bGF0aW9uQ2F0ZWdv
cnkgYiwgQ2FsY3VsYXRpb24KIGNsYXNzIENTU0NhbGNPcGVyYXRpb24gZmluYWwgOiBwdWJsaWMg
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1
YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRpb24+IGNyZWF0ZShDYWxjT3Bl
cmF0b3Igb3AsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZlB0
cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQorICAgIHN0YXRpYyBSZWZQdHI8
Q1NTQ2FsY09wZXJhdGlvbj4gY3JlYXRlKENhbGNPcGVyYXRvciwgUmVmUHRyPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBy
aWdodFNpZGUpOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbj4gY3JlYXRlTWlu
T3JNYXgoQ2FsY09wZXJhdG9yLCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYg
dmFsdWVzLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOworICAgIHN0
YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVTaW1wbGlmaWVkKENhbGNP
cGVyYXRvciwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwgUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByaWdodFNpZGUpOworCitwcml2YXRlOgorICAgIENT
U0NhbGNPcGVyYXRpb24oQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY09wZXJhdG9y
IG9wLCBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGxlZnRTaWRlLCBSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiYmIHJpZ2h0U2lkZSkKKyAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUoY2F0ZWdvcnksIGlzSW50ZWdlclJlc3VsdChvcCwgbGVmdFNpZGUuZ2V0KCksIHJpZ2h0U2lk
ZS5nZXQoKSkpCisgICAgICAgICwgbV9vcGVyYXRvcihvcCkKICAgICB7Ci0gICAgICAgIGlmICgh
bGVmdFNpZGUgfHwgIXJpZ2h0U2lkZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICBtX2NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CisgICAgICAgIG1fY2hp
bGRyZW4udW5jaGVja2VkQXBwZW5kKFdURk1vdmUobGVmdFNpZGUpKTsKKyAgICAgICAgbV9jaGls
ZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShyaWdodFNpZGUpKTsKKyAgICB9CiAKLSAgICAg
ICAgQVNTRVJUKGxlZnRTaWRlLT5jYXRlZ29yeSgpIDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3Ro
ZXIpOwotICAgICAgICBBU1NFUlQocmlnaHRTaWRlLT5jYXRlZ29yeSgpIDwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIpOworICAgIENTU0NhbGNPcGVyYXRpb24oQ2FsY3VsYXRpb25DYXRlZ29y
eSBjYXRlZ29yeSwgQ2FsY09wZXJhdG9yIG9wLCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4+JiYgY2hpbGRyZW4pCisgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNhdGVn
b3J5LCBpc0ludGVnZXJSZXN1bHQob3AsIGNoaWxkcmVuKSkKKyAgICAgICAgLCBtX29wZXJhdG9y
KG9wKQorICAgICAgICAsIG1fY2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpCisgICAgeworICAg
IH0KIAotICAgICAgICBhdXRvIG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkoKmxlZnRT
aWRlLCAqcmlnaHRTaWRlLCBvcCk7Ci0gICAgICAgIGlmIChuZXdDYXRlZ29yeSA9PSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpPdGhlcikKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgIFR5
cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENzc0NhbGNPcGVyYXRpb247IH0KIAotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb24obmV3Q2F0ZWdvcnksIG9w
LCBsZWZ0U2lkZS5yZWxlYXNlTm9uTnVsbCgpLCByaWdodFNpZGUucmVsZWFzZU5vbk51bGwoKSkp
OworICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIHJldHVybiAh
ZG91YmxlVmFsdWUoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRp
b24+IGNyZWF0ZU1pbk9yTWF4KENhbGNPcGVyYXRvciBvcCwgVmVjdG9yPFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+PiYmIHZhbHVlcywgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNh
dGVnb3J5KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG9wID09IENhbGNPcGVyYXRvcjo6TWluIHx8
IG9wID09IENhbGNPcGVyYXRvcjo6TWF4KTsKKyAgICBib29sIGVxdWFscyhjb25zdCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKIAotICAgICAgICBPcHRpb25hbDxDYWxjdWxh
dGlvbkNhdGVnb3J5PiBjYXRlZ29yeSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgZm9yIChhdXRv
JiB2YWx1ZSA6IHZhbHVlcykgewotICAgICAgICAgICAgYXV0byB2YWx1ZUNhdGVnb3J5ID0gcmVz
b2x2ZWRUeXBlRm9yTWluT3JNYXgodmFsdWUtPmNhdGVnb3J5KCksIGRlc3RpbmF0aW9uQ2F0ZWdv
cnkpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNF
eHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsK
IAotICAgICAgICAgICAgQVNTRVJUKHZhbHVlQ2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcik7Ci0gICAgICAgICAgICBpZiAoIWNhdGVnb3J5KSB7Ci0gICAgICAgICAgICAgICAg
aWYgKHZhbHVlQ2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0g
dmFsdWVDYXRlZ29yeTsKLSAgICAgICAgICAgIH0KKyAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBkb3VibGVWYWx1
ZSgpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOwogCi0gICAgICAgICAgICBpZiAoY2F0
ZWdvcnkgIT0gdmFsdWVDYXRlZ29yeSkgewotICAgICAgICAgICAgICAgIGlmIChpc1NhbWVQYWly
KGNhdGVnb3J5LnZhbHVlKCksIHZhbHVlQ2F0ZWdvcnksIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxl
bmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgY2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOwot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgaWYgKGlzU2FtZVBhaXIoY2F0ZWdvcnkudmFsdWUoKSwgdmFsdWVDYXRlZ29yeSwg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
TnVtYmVyKSkgewotICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlBlcmNlbnROdW1iZXI7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQorICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBl
bmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQg
Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJv
cGVydHlJRD4mKSBjb25zdCBmaW5hbDsKIAotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENT
U0NhbGNPcGVyYXRpb24oY2F0ZWdvcnkudmFsdWUoKSwgb3AsIFdURk1vdmUodmFsdWVzKSkpOwot
ICAgIH0KKyAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0IGZpbmFsOwogCi0gICAgc3Rh
dGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZVNpbXBsaWZpZWQoQ2FsY09w
ZXJhdG9yIG9wLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGxlZnRTaWRlLCBSZWZQ
dHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJpZ2h0U2lkZSkKKyAgICBzdGF0aWMgQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlKiBnZXROdW1iZXJTaWRlKENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbGVm
dFNpZGUsIENTU0NhbGNFeHByZXNzaW9uTm9kZSYgcmlnaHRTaWRlKQogICAgIHsKLSAgICAgICAg
aWYgKCFsZWZ0U2lkZSB8fCAhcmlnaHRTaWRlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIGlmIChsZWZ0U2lkZS5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlcikKKyAgICAgICAgICAgIHJldHVybiAmbGVmdFNpZGU7CisgICAgICAgIGlmIChyaWdo
dFNpZGUuY2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAg
ICAgICByZXR1cm4gJnJpZ2h0U2lkZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQog
Ci0gICAgICAgIGF1dG8gbGVmdENhdGVnb3J5ID0gbGVmdFNpZGUtPmNhdGVnb3J5KCk7Ci0gICAg
ICAgIGF1dG8gcmlnaHRDYXRlZ29yeSA9IHJpZ2h0U2lkZS0+Y2F0ZWdvcnkoKTsKLSAgICAgICAg
QVNTRVJUKGxlZnRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKLSAgICAg
ICAgQVNTRVJUKHJpZ2h0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7Cisg
ICAgZG91YmxlIGV2YWx1YXRlKGNvbnN0IFZlY3Rvcjxkb3VibGU+JiBjaGlsZHJlbikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBldmFsdWF0ZU9wZXJhdG9yKG1fb3BlcmF0b3IsIGNoaWxk
cmVuKTsKKyAgICB9CiAKLSAgICAgICAgYm9vbCBpc0ludGVnZXIgPSBpc0ludGVnZXJSZXN1bHQo
b3AsICpsZWZ0U2lkZSwgKnJpZ2h0U2lkZSk7CisgICAgc3RhdGljIGRvdWJsZSBldmFsdWF0ZU9w
ZXJhdG9yKENhbGNPcGVyYXRvciwgY29uc3QgVmVjdG9yPGRvdWJsZT4mKTsKKyAgICBzdGF0aWMg
U3RyaW5nIGJ1aWxkQ3NzVGV4dChWZWN0b3I8U3RyaW5nPiwgQ2FsY09wZXJhdG9yKTsKIAotICAg
ICAgICAvLyBTaW1wbGlmeSBudW1iZXJzLgotICAgICAgICBpZiAobGVmdENhdGVnb3J5ID09IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciAmJiByaWdodENhdGVnb3J5ID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok51bWJlcikgewotICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlIGV2YWx1YXRpb25UeXBlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVI7Ci0gICAg
ICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoZXZhbHVhdGVPcGVy
YXRvcihvcCwgeyBsZWZ0U2lkZS0+ZG91YmxlVmFsdWUoKSwgcmlnaHRTaWRlLT5kb3VibGVWYWx1
ZSgpIH0pLCBldmFsdWF0aW9uVHlwZSwgaXNJbnRlZ2VyKTsKLSAgICAgICAgfQorICAgIGNvbnN0
IENhbGNPcGVyYXRvciBtX29wZXJhdG9yOworICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPj4gbV9jaGlsZHJlbjsKK307CiAKLSAgICAgICAgLy8gU2ltcGxpZnkgYWRkaXRpb24g
YW5kIHN1YnRyYWN0aW9uIGJldHdlZW4gc2FtZSB0eXBlcy4KLSAgICAgICAgaWYgKG9wID09IENh
bGNPcGVyYXRvcjo6QWRkIHx8IG9wID09IENhbGNPcGVyYXRvcjo6U3VidHJhY3QpIHsKLSAgICAg
ICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgPT0gcmlnaHRTaWRlLT5jYXRlZ29yeSgpKSB7Ci0gICAg
ICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlIGxlZnRUeXBlID0gbGVmdFNp
ZGUtPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgICAgICAgICBpZiAoaGFzRG91YmxlVmFsdWUo
bGVmdFR5cGUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0
VHlwZSByaWdodFR5cGUgPSByaWdodFNpZGUtPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGxlZnRUeXBlID09IHJpZ2h0VHlwZSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShldmFsdWF0ZU9wZXJhdG9y
KG9wLCB7IGxlZnRTaWRlLT5kb3VibGVWYWx1ZSgpLCByaWdodFNpZGUtPmRvdWJsZVZhbHVlKCkg
fSksIGxlZnRUeXBlLCBpc0ludGVnZXIpOwotICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRp
dmVWYWx1ZTo6VW5pdENhdGVnb3J5IGxlZnRVbml0Q2F0ZWdvcnkgPSBDU1NQcmltaXRpdmVWYWx1
ZTo6dW5pdENhdGVnb3J5KGxlZnRUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGxlZnRV
bml0Q2F0ZWdvcnkgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OlVPdGhlciAmJiBsZWZ0VW5pdENhdGVn
b3J5ID09IENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0Q2F0ZWdvcnkocmlnaHRUeXBlKSkgewotICAg
ICAgICAgICAgICAgICAgICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlIGNhbm9uaWNh
bFR5cGUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y2Fub25pY2FsVW5pdFR5cGVGb3JDYXRlZ29yeShs
ZWZ0VW5pdENhdGVnb3J5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5vbmljYWxU
eXBlICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRvdWJsZSBsZWZ0VmFsdWUgPSBsZWZ0U2lkZS0+ZG91YmxlVmFsdWUoKSAq
IENTU1ByaW1pdGl2ZVZhbHVlOjpjb252ZXJzaW9uVG9DYW5vbmljYWxVbml0c1NjYWxlRmFjdG9y
KGxlZnRUeXBlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgcmlnaHRWYWx1
ZSA9IHJpZ2h0U2lkZS0+ZG91YmxlVmFsdWUoKSAqIENTU1ByaW1pdGl2ZVZhbHVlOjpjb252ZXJz
aW9uVG9DYW5vbmljYWxVbml0c1NjYWxlRmFjdG9yKHJpZ2h0VHlwZSk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGV2YWx1
YXRlT3BlcmF0b3Iob3AsIHsgbGVmdFZhbHVlLCByaWdodFZhbHVlIH0pLCBjYW5vbmljYWxUeXBl
LCBpc0ludGVnZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2Ug
ewotICAgICAgICAgICAgLy8gU2ltcGxpZnkgbXVsdGlwbHlpbmcgb3IgZGl2aWRpbmcgYnkgYSBu
dW1iZXIgZm9yIHNpbXBsaWZpYWJsZSB0eXBlcy4KLSAgICAgICAgICAgIEFTU0VSVChvcCA9PSBD
YWxjT3BlcmF0b3I6Ok11bHRpcGx5IHx8IG9wID09IENhbGNPcGVyYXRvcjo6RGl2aWRlKTsKLSAg
ICAgICAgICAgIGF1dG8qIG51bWJlclNpZGUgPSBnZXROdW1iZXJTaWRlKCpsZWZ0U2lkZSwgKnJp
Z2h0U2lkZSk7Ci0gICAgICAgICAgICBpZiAoIW51bWJlclNpZGUpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIGNyZWF0ZShvcCwgbGVmdFNpZGUucmVsZWFzZU5vbk51bGwoKSwgcmlnaHRTaWRlLnJl
bGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAgaWYgKG51bWJlclNpZGUgPT0gbGVmdFNpZGUg
JiYgb3AgPT0gQ2FsY09wZXJhdG9yOjpEaXZpZGUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgICAgICBhdXRvJiBvdGhlclNpZGUgPSBsZWZ0U2lkZSA9PSBudW1iZXJT
aWRlID8gKnJpZ2h0U2lkZSA6ICpsZWZ0U2lkZTsKK1JlZlB0cjxDU1NDYWxjT3BlcmF0aW9uPiBD
U1NDYWxjT3BlcmF0aW9uOjpjcmVhdGUoQ2FsY09wZXJhdG9yIG9wLCBSZWZQdHI8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiYmIGxlZnRTaWRlLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYm
IHJpZ2h0U2lkZSkKK3sKKyAgICBpZiAoIWxlZnRTaWRlIHx8ICFyaWdodFNpZGUpCisgICAgICAg
IHJldHVybiBudWxscHRyOwogCi0gICAgICAgICAgICBkb3VibGUgbnVtYmVyID0gbnVtYmVyU2lk
ZS0+ZG91YmxlVmFsdWUoKTsKLSAgICAgICAgICAgIGlmICghc3RkOjppc2Zpbml0ZShudW1iZXIp
KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaWYgKG9wID09
IENhbGNPcGVyYXRvcjo6RGl2aWRlICYmICFudW1iZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgQVNTRVJUKGxlZnRTaWRlLT5jYXRlZ29yeSgpIDwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIpOworICAgIEFTU0VSVChyaWdodFNpZGUtPmNhdGVnb3J5KCkgPCBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7CiAKLSAgICAgICAgICAgIGF1dG8gb3RoZXJUeXBlID0g
b3RoZXJTaWRlLnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgICAgIGlmIChoYXNEb3VibGVWYWx1
ZShvdGhlclR5cGUpKQotICAgICAgICAgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShldmFsdWF0ZU9wZXJhdG9yKG9wLCB7IG90aGVyU2lkZS5kb3VibGVWYWx1ZSgp
LCBudW1iZXIgfSksIG90aGVyVHlwZSwgaXNJbnRlZ2VyKTsKLSAgICAgICAgfQorICAgIGF1dG8g
bmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSgqbGVmdFNpZGUsICpyaWdodFNpZGUsIG9w
KTsKKyAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpCisg
ICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgICAgIHJldHVybiBjcmVhdGUob3AsIGxlZnRT
aWRlLnJlbGVhc2VOb25OdWxsKCksIHJpZ2h0U2lkZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjT3BlcmF0aW9uKG5ld0NhdGVnb3J5LCBv
cCwgbGVmdFNpZGUucmVsZWFzZU5vbk51bGwoKSwgcmlnaHRTaWRlLnJlbGVhc2VOb25OdWxsKCkp
KTsKK30KIAotcHJpdmF0ZToKLSAgICBib29sIGlzWmVybygpIGNvbnN0IGZpbmFsCi0gICAgewot
ICAgICAgICByZXR1cm4gIWRvdWJsZVZhbHVlKCk7Ci0gICAgfQorUmVmUHRyPENTU0NhbGNPcGVy
YXRpb24+IENTU0NhbGNPcGVyYXRpb246OmNyZWF0ZU1pbk9yTWF4KENhbGNPcGVyYXRvciBvcCwg
VmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcywgQ2FsY3VsYXRpb25D
YXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQoreworICAgIEFTU0VSVChvcCA9PSBDYWxjT3Bl
cmF0b3I6Ok1pbiB8fCBvcCA9PSBDYWxjT3BlcmF0b3I6Ok1heCk7CiAKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QgZmluYWwKLSAgICB7
Ci0gICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4gbm9k
ZXM7Ci0gICAgICAgIG5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbi5zaXpl
KCkpOworICAgIE9wdGlvbmFsPENhbGN1bGF0aW9uQ2F0ZWdvcnk+IGNhdGVnb3J5ID0gV1RGOjpu
dWxsb3B0OworICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpIHsKKyAgICAgICAgYXV0byB2
YWx1ZUNhdGVnb3J5ID0gcmVzb2x2ZWRUeXBlRm9yTWluT3JNYXgodmFsdWUtPmNhdGVnb3J5KCks
IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOwogCi0gICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2No
aWxkcmVuKSB7Ci0gICAgICAgICAgICBhdXRvIG5vZGUgPSBjaGlsZC0+Y3JlYXRlQ2FsY0V4cHJl
c3Npb24oY29udmVyc2lvbkRhdGEpOwotICAgICAgICAgICAgaWYgKCFub2RlKQorICAgICAgICBB
U1NFUlQodmFsdWVDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKKyAgICAg
ICAgaWYgKCFjYXRlZ29yeSkgeworICAgICAgICAgICAgaWYgKHZhbHVlQ2F0ZWdvcnkgPT0gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICBub2Rlcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShub2RlKSk7CisgICAg
ICAgICAgICBjYXRlZ29yeSA9IHZhbHVlQ2F0ZWdvcnk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KFdURk1vdmUobm9kZXMpLCBt
X29wZXJhdG9yKTsKLSAgICB9CiAKLSAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdCBmaW5h
bAotICAgIHsKLSAgICAgICAgVmVjdG9yPGRvdWJsZT4gZG91YmxlVmFsdWVzOwotICAgICAgICBm
b3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgICAgIGRvdWJsZVZhbHVlcy5h
cHBlbmQoY2hpbGQtPmRvdWJsZVZhbHVlKCkpOwotICAgICAgICByZXR1cm4gZXZhbHVhdGUoZG91
YmxlVmFsdWVzKTsKKyAgICAgICAgaWYgKGNhdGVnb3J5ICE9IHZhbHVlQ2F0ZWdvcnkpIHsKKyAg
ICAgICAgICAgIGlmIChpc1NhbWVQYWlyKGNhdGVnb3J5LnZhbHVlKCksIHZhbHVlQ2F0ZWdvcnks
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dExlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnRMZW5ndGg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoaXNTYW1lUGFpcihjYXRlZ29yeS52YWx1ZSgpLCB2YWx1ZUNh
dGVnb3J5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnROdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgY2F0ZWdvcnkgPSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KICAgICB9
CiAKLSAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgVmVjdG9y
PGRvdWJsZT4gZG91YmxlVmFsdWVzOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGls
ZHJlbikKLSAgICAgICAgICAgIGRvdWJsZVZhbHVlcy5hcHBlbmQoY2hpbGQtPmNvbXB1dGVMZW5n
dGhQeChjb252ZXJzaW9uRGF0YSkpOwotICAgICAgICByZXR1cm4gZXZhbHVhdGUoZG91YmxlVmFs
dWVzKTsKLSAgICB9CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjT3BlcmF0aW9uKGNh
dGVnb3J5LnZhbHVlKCksIG9wLCBXVEZNb3ZlKHZhbHVlcykpKTsKK30KIAotICAgIHZvaWQgY29s
bGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlE
PiYgdmFsdWVzKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6
IG1fY2hpbGRyZW4pCi0gICAgICAgICAgICBjaGlsZC0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXModmFsdWVzKTsKLSAgICB9CitSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiBDU1NDYWxjT3BlcmF0aW9uOjpjcmVhdGVTaW1wbGlmaWVkKENhbGNPcGVyYXRvciBvcCwg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwgUmVmUHRyPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4mJiByaWdodFNpZGUpCit7CisgICAgaWYgKCFsZWZ0U2lkZSB8fCAhcmln
aHRTaWRlKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHZvaWQgY29sbGVjdERpcmVj
dFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZh
bHVlcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2No
aWxkcmVuKQotICAgICAgICAgICAgY2hpbGQtPmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25h
bERlcGVuZGVuY2llcyh2YWx1ZXMpOwotICAgIH0KKyAgICBhdXRvIGxlZnRDYXRlZ29yeSA9IGxl
ZnRTaWRlLT5jYXRlZ29yeSgpOworICAgIGF1dG8gcmlnaHRDYXRlZ29yeSA9IHJpZ2h0U2lkZS0+
Y2F0ZWdvcnkoKTsKKyAgICBBU1NFUlQobGVmdENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6T3RoZXIpOworICAgIEFTU0VSVChyaWdodENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6T3RoZXIpOwogCi0gICAgc3RhdGljIFN0cmluZyBidWlsZENzc1RleHQoVmVjdG9yPFN0cmlu
Zz4gY2hpbGRFeHByZXNzaW9ucywgQ2FsY09wZXJhdG9yIG9wKQotICAgIHsKLSAgICAgICAgU3Ry
aW5nQnVpbGRlciByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoJygnKTsKLSAgICAgICAg
c3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOgotICAgICAgICBj
YXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpN
dWx0aXBseToKLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZToKLSAgICAgICAgICAg
IEFTU0VSVChjaGlsZEV4cHJlc3Npb25zLnNpemUoKSA9PSAyKTsKLSAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoY2hpbGRFeHByZXNzaW9uc1swXSk7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5k
KCcgJyk7Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0PGNoYXI+KG9wKSk7
Ci0gICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKGNoaWxkRXhwcmVzc2lvbnNbMV0pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQ2FsY09wZXJhdG9yOjpNaW46Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6Ci0g
ICAgICAgICAgICBBU1NFUlQoIWNoaWxkRXhwcmVzc2lvbnMuaXNFbXB0eSgpKTsKLSAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGZ1bmN0aW9uTmFtZSA9IG9wID09IENhbGNPcGVyYXRvcjo6TWluID8g
Im1pbigiIDogIm1heCgiOwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChmdW5jdGlvbk5hbWUp
OwotICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjaGlsZEV4cHJlc3Npb25zWzBdKTsKLSAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgY2hpbGRFeHByZXNzaW9ucy5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoJywnKTsKLSAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKCcgJyk7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjaGls
ZEV4cHJlc3Npb25zW2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoJyknKTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBwZW5kKCcpJyk7CisgICAgYm9v
bCBpc0ludGVnZXIgPSBpc0ludGVnZXJSZXN1bHQob3AsICpsZWZ0U2lkZSwgKnJpZ2h0U2lkZSk7
CiAKLSAgICAgICAgcmV0dXJuIHJlc3VsdC50b1N0cmluZygpOworICAgIC8vIFNpbXBsaWZ5IG51
bWJlcnMuCisgICAgaWYgKGxlZnRDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIgJiYgcmlnaHRDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpIHsKKyAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlIGV2YWx1YXRpb25UeXBlID0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19OVU1CRVI7CisgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShldmFsdWF0ZU9wZXJhdG9yKG9wLCB7IGxlZnRTaWRlLT5kb3VibGVWYWx1
ZSgpLCByaWdodFNpZGUtPmRvdWJsZVZhbHVlKCkgfSksIGV2YWx1YXRpb25UeXBlLCBpc0ludGVn
ZXIpOwogICAgIH0KIAotICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3QgZmluYWwKLSAg
ICB7Ci0gICAgICAgIFZlY3RvcjxTdHJpbmc+IGNzc1RleHRzOwotICAgICAgICBmb3IgKGF1dG8m
IGNoaWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgICAgIGNzc1RleHRzLmFwcGVuZChjaGlsZC0+
Y3VzdG9tQ1NTVGV4dCgpKTsKLSAgICAgICAgcmV0dXJuIGJ1aWxkQ3NzVGV4dChjc3NUZXh0cywg
bV9vcGVyYXRvcik7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlJiBleHApIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBpZiAodHlwZSgpICE9
IGV4cC50eXBlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgY29uc3Qg
Q1NTQ2FsY09wZXJhdGlvbiYgb3RoZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBDU1NDYWxjT3BlcmF0
aW9uJj4oZXhwKTsKKyAgICAvLyBTaW1wbGlmeSBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24gYmV0
d2VlbiBzYW1lIHR5cGVzLgorICAgIGlmIChvcCA9PSBDYWxjT3BlcmF0b3I6OkFkZCB8fCBvcCA9
PSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0KSB7CisgICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgPT0g
cmlnaHRTaWRlLT5jYXRlZ29yeSgpKSB7CisgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6
VW5pdFR5cGUgbGVmdFR5cGUgPSBsZWZ0U2lkZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICAg
ICAgaWYgKGhhc0RvdWJsZVZhbHVlKGxlZnRUeXBlKSkgeworICAgICAgICAgICAgICAgIENTU1By
aW1pdGl2ZVZhbHVlOjpVbml0VHlwZSByaWdodFR5cGUgPSByaWdodFNpZGUtPnByaW1pdGl2ZVR5
cGUoKTsKKyAgICAgICAgICAgICAgICBpZiAobGVmdFR5cGUgPT0gcmlnaHRUeXBlKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoZXZhbHVh
dGVPcGVyYXRvcihvcCwgeyBsZWZ0U2lkZS0+ZG91YmxlVmFsdWUoKSwgcmlnaHRTaWRlLT5kb3Vi
bGVWYWx1ZSgpIH0pLCBsZWZ0VHlwZSwgaXNJbnRlZ2VyKTsKKyAgICAgICAgICAgICAgICBDU1NQ
cmltaXRpdmVWYWx1ZTo6VW5pdENhdGVnb3J5IGxlZnRVbml0Q2F0ZWdvcnkgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6dW5pdENhdGVnb3J5KGxlZnRUeXBlKTsKKyAgICAgICAgICAgICAgICBpZiAobGVm
dFVuaXRDYXRlZ29yeSAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6VU90aGVyICYmIGxlZnRVbml0Q2F0
ZWdvcnkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRDYXRlZ29yeShyaWdodFR5cGUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZSBjYW5vbmljYWxU
eXBlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNhbm9uaWNhbFVuaXRUeXBlRm9yQ2F0ZWdvcnkobGVm
dFVuaXRDYXRlZ29yeSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5vbmljYWxUeXBlICE9
IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTikgeworICAgICAgICAgICAgICAgICAgICAg
ICAgZG91YmxlIGxlZnRWYWx1ZSA9IGxlZnRTaWRlLT5kb3VibGVWYWx1ZSgpICogQ1NTUHJpbWl0
aXZlVmFsdWU6OmNvbnZlcnNpb25Ub0Nhbm9uaWNhbFVuaXRzU2NhbGVGYWN0b3IobGVmdFR5cGUp
OworICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlIHJpZ2h0VmFsdWUgPSByaWdodFNpZGUt
PmRvdWJsZVZhbHVlKCkgKiBDU1NQcmltaXRpdmVWYWx1ZTo6Y29udmVyc2lvblRvQ2Fub25pY2Fs
VW5pdHNTY2FsZUZhY3RvcihyaWdodFR5cGUpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGV2YWx1YXRlT3BlcmF0b3Iob3AsIHsg
bGVmdFZhbHVlLCByaWdodFZhbHVlIH0pLCBjYW5vbmljYWxUeXBlLCBpc0ludGVnZXIpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gU2ltcGxpZnkgbXVsdGlwbHlpbmcgb3Ig
ZGl2aWRpbmcgYnkgYSBudW1iZXIgZm9yIHNpbXBsaWZpYWJsZSB0eXBlcy4KKyAgICAgICAgQVNT
RVJUKG9wID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHkgfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpE
aXZpZGUpOworICAgICAgICBhdXRvKiBudW1iZXJTaWRlID0gZ2V0TnVtYmVyU2lkZSgqbGVmdFNp
ZGUsICpyaWdodFNpZGUpOworICAgICAgICBpZiAoIW51bWJlclNpZGUpCisgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlKG9wLCBsZWZ0U2lkZS5yZWxlYXNlTm9uTnVsbCgpLCByaWdodFNpZGUucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgICAgIGlmIChudW1iZXJTaWRlID09IGxlZnRTaWRlICYmIG9w
ID09IENhbGNPcGVyYXRvcjo6RGl2aWRlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIGF1dG8mIG90aGVyU2lkZSA9IGxlZnRTaWRlID09IG51bWJlclNpZGUgPyAqcmlnaHRT
aWRlIDogKmxlZnRTaWRlOwogCi0gICAgICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSAhPSBvdGhl
ci5tX2NoaWxkcmVuLnNpemUoKSB8fCBtX29wZXJhdG9yICE9IG90aGVyLm1fb3BlcmF0b3IpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRvdWJsZSBudW1iZXIgPSBudW1iZXJT
aWRlLT5kb3VibGVWYWx1ZSgpOworICAgICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUobnVtYmVyKSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBpZiAob3AgPT0gQ2FsY09wZXJh
dG9yOjpEaXZpZGUgJiYgIW51bWJlcikKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgewot
ICAgICAgICAgICAgaWYgKCFjb21wYXJlQ1NTVmFsdWUobV9jaGlsZHJlbltpXSwgb3RoZXIubV9j
aGlsZHJlbltpXSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0g
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBhdXRvIG90aGVyVHlwZSA9IG90aGVyU2lkZS5w
cmltaXRpdmVUeXBlKCk7CisgICAgICAgIGlmIChoYXNEb3VibGVWYWx1ZShvdGhlclR5cGUpKQor
ICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGV2YWx1YXRl
T3BlcmF0b3Iob3AsIHsgb3RoZXJTaWRlLmRvdWJsZVZhbHVlKCksIG51bWJlciB9KSwgb3RoZXJU
eXBlLCBpc0ludGVnZXIpOwogICAgIH0KIAotICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIENzc0NhbGNPcGVyYXRpb247IH0KKyAgICByZXR1cm4gY3JlYXRlKG9wLCBsZWZ0U2lk
ZS5yZWxlYXNlTm9uTnVsbCgpLCByaWdodFNpZGUucmVsZWFzZU5vbk51bGwoKSk7Cit9CiAKLSAg
ICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IGZpbmFs
Ci0gICAgewotICAgICAgICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKLSAgICAgICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6CitDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGUgQ1NT
Q2FsY09wZXJhdGlvbjo6cHJpbWl0aXZlVHlwZSgpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjYXRl
Z29yeSgpKSB7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6CiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAotICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4p
Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok51bWJlcik7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVu
KQorICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok51bWJlcik7CiAjZW5kaWYKLSAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX05VTUJFUjsKLSAgICAgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5n
dGg6Ci0gICAgICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDogewotICAgICAg
ICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV047Ci0gICAgICAgICAgICBpZiAobV9jaGlsZHJl
bi5zaXplKCkgPT0gMikgewotICAgICAgICAgICAgICAgIGlmIChtX2NoaWxkcmVuWzBdLT5jYXRl
Z29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fY2hpbGRyZW5bMV0tPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgICAgICAg
ICBpZiAobV9jaGlsZHJlblsxXS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpO
dW1iZXIpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtX2NoaWxkcmVuWzBdLT5wcmltaXRp
dmVUeXBlKCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6
VW5pdFR5cGUgZmlyc3RUeXBlID0gbV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpOwotICAg
ICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAg
ICBpZiAoZmlyc3RUeXBlICE9IGNoaWxkLT5wcmltaXRpdmVUeXBlKCkpCi0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV047Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gZmlyc3RUeXBlOwotICAgICAgICB9Ci0gICAgICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6Ci0gICAgICAgICAgICByZXR1cm4gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19ERUc7Ci0gICAgICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
VGltZToKLSAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01TOwotICAg
ICAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKLSAgICAgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0haOwotICAgICAgICBjYXNlIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6Ci0gICAgICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudE51bWJlcjoKLSAgICAgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhl
cjoKKyAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSOworICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudDogeworICAgICAgICBpZiAobV9jaGlsZHJlbi5pc0VtcHR5KCkpCiAgICAg
ICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOOworICAgICAgICBp
ZiAobV9jaGlsZHJlbi5zaXplKCkgPT0gMikgeworICAgICAgICAgICAgaWYgKG1fY2hpbGRyZW5b
MF0tPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQorICAgICAgICAg
ICAgICAgIHJldHVybiBtX2NoaWxkcmVuWzFdLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgICAg
ICBpZiAobV9jaGlsZHJlblsxXS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpO
dW1iZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5
cGUoKTsKICAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlIGZpcnN0VHlwZSA9IG1fY2hpbGRyZW5bMF0tPnBy
aW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsK
KyAgICAgICAgICAgIGlmIChmaXJzdFR5cGUgIT0gY2hpbGQtPnByaW1pdGl2ZVR5cGUoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBmaXJzdFR5cGU7CisgICAgfQorICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6QW5nbGU6CisgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0RFRzsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6CisgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX01TOworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6RnJlcXVlbmN5OgorICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19I
WjsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6CisgICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgorICAgIGNhc2UgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6T3RoZXI6CiAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X1VOS05PV047CiAgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VOS05PV047Cit9CiAKLSAgICBDU1NDYWxjT3BlcmF0aW9u
KENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIENhbGNPcGVyYXRvciBvcCwgUmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4m
JiByaWdodFNpZGUpCi0gICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNhdGVnb3J5LCBp
c0ludGVnZXJSZXN1bHQob3AsIGxlZnRTaWRlLmdldCgpLCByaWdodFNpZGUuZ2V0KCkpKQotICAg
ICAgICAsIG1fb3BlcmF0b3Iob3ApCi0gICAgewotICAgICAgICBtX2NoaWxkcmVuLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoMik7Ci0gICAgICAgIG1fY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUobGVmdFNpZGUpKTsKLSAgICAgICAgbV9jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZShyaWdodFNpZGUpKTsKLSAgICB9CitzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25O
b2RlPiBDU1NDYWxjT3BlcmF0aW9uOjpjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+IG5vZGVzOworICAgIG5vZGVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbi5zaXplKCkpOwogCi0gICAgQ1NTQ2FsY09w
ZXJhdGlvbihDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Igb3AsIFZl
Y3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiBjaGlsZHJlbikKLSAgICAgICAgOiBD
U1NDYWxjRXhwcmVzc2lvbk5vZGUoY2F0ZWdvcnksIGlzSW50ZWdlclJlc3VsdChvcCwgY2hpbGRy
ZW4pKQotICAgICAgICAsIG1fb3BlcmF0b3Iob3ApCi0gICAgICAgICwgbV9jaGlsZHJlbihXVEZN
b3ZlKGNoaWxkcmVuKSkKLSAgICB7CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4p
IHsKKyAgICAgICAgYXV0byBub2RlID0gY2hpbGQtPmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnZl
cnNpb25EYXRhKTsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIG5vZGVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5vZGUpKTsKICAgICB9
CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KFdURk1vdmUo
bm9kZXMpLCBtX29wZXJhdG9yKTsKK30KIAotICAgIHN0YXRpYyBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUqIGdldE51bWJlclNpZGUoQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBsZWZ0U2lkZSwgQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlJiByaWdodFNpZGUpCi0gICAgewotICAgICAgICBpZiAobGVmdFNpZGUu
Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAgICAgICBy
ZXR1cm4gJmxlZnRTaWRlOwotICAgICAgICBpZiAocmlnaHRTaWRlLmNhdGVnb3J5KCkgPT0gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuICZyaWdodFNpZGU7
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KK2RvdWJsZSBDU1NDYWxjT3BlcmF0aW9u
Ojpkb3VibGVWYWx1ZSgpIGNvbnN0Cit7CisgICAgVmVjdG9yPGRvdWJsZT4gZG91YmxlVmFsdWVz
OworICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQorICAgICAgICBkb3VibGVWYWx1
ZXMuYXBwZW5kKGNoaWxkLT5kb3VibGVWYWx1ZSgpKTsKKyAgICByZXR1cm4gZXZhbHVhdGUoZG91
YmxlVmFsdWVzKTsKK30KIAotICAgIGRvdWJsZSBldmFsdWF0ZShjb25zdCBWZWN0b3I8ZG91Ymxl
PiYgY2hpbGRyZW4pIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZXZhbHVhdGVPcGVyYXRv
cihtX29wZXJhdG9yLCBjaGlsZHJlbik7Ci0gICAgfQorZG91YmxlIENTU0NhbGNPcGVyYXRpb246
OmNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJz
aW9uRGF0YSkgY29uc3QKK3sKKyAgICBWZWN0b3I8ZG91YmxlPiBkb3VibGVWYWx1ZXM7CisgICAg
Zm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAgIGRvdWJsZVZhbHVlcy5hcHBl
bmQoY2hpbGQtPmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSkpOworICAgIHJldHVybiBl
dmFsdWF0ZShkb3VibGVWYWx1ZXMpOworfQogCi0gICAgc3RhdGljIGRvdWJsZSBldmFsdWF0ZU9w
ZXJhdG9yKENhbGNPcGVyYXRvciBvcCwgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGNoaWxkcmVuKQot
ICAgIHsKLSAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6
QWRkOgotICAgICAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSA9PSAyKTsKLSAgICAgICAg
ICAgIHJldHVybiBjaGlsZHJlblswXSArIGNoaWxkcmVuWzFdOwotICAgICAgICBjYXNlIENhbGNP
cGVyYXRvcjo6U3VidHJhY3Q6Ci0gICAgICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpID09
IDIpOwotICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzBdIC0gY2hpbGRyZW5bMV07Ci0gICAg
ICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToKLSAgICAgICAgICAgIEFTU0VSVChjaGls
ZHJlbi5zaXplKCkgPT0gMik7Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGRyZW5bMF0gKiBjaGls
ZHJlblsxXTsKLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZToKLSAgICAgICAgICAg
IEFTU0VSVChjaGlsZHJlbi5zaXplKCkgPT0gMSB8fCBjaGlsZHJlbi5zaXplKCkgPT0gMik7Ci0g
ICAgICAgICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09IDEpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2hpbGRyZW5bMF0gLyBjaGlsZHJlblsxXTsKLSAgICAgICAgY2FzZSBDYWxjT3Bl
cmF0b3I6Ok1pbjogewotICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4o
KTsKLSAgICAgICAgICAgIGRvdWJsZSBtaW5pbXVtID0gY2hpbGRyZW5bMF07Ci0gICAgICAgICAg
ICBmb3IgKGF1dG8gY2hpbGQgOiBjaGlsZHJlbikKLSAgICAgICAgICAgICAgICBtaW5pbXVtID0g
c3RkOjptaW4obWluaW11bSwgY2hpbGQpOwotICAgICAgICAgICAgcmV0dXJuIG1pbmltdW07Ci0g
ICAgICAgIH0KLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogewotICAgICAgICAgICAg
aWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgICAgIGRvdWJsZSBtYXhp
bXVtID0gY2hpbGRyZW5bMF07Ci0gICAgICAgICAgICBmb3IgKGF1dG8gY2hpbGQgOiBjaGlsZHJl
bikKLSAgICAgICAgICAgICAgICBtYXhpbXVtID0gc3RkOjptYXgobWF4aW11bSwgY2hpbGQpOwot
ICAgICAgICAgICAgcmV0dXJuIG1heGltdW07Ci0gICAgICAgIH0KK3ZvaWQgQ1NTQ2FsY09wZXJh
dGlvbjo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQ
cm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAoreworICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2No
aWxkcmVuKQorICAgICAgICBjaGlsZC0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRl
bmNpZXModmFsdWVzKTsKK30KKwordm9pZCBDU1NDYWxjT3BlcmF0aW9uOjpjb2xsZWN0RGlyZWN0
Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFs
dWVzKSBjb25zdAoreworICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQorICAgICAg
ICBjaGlsZC0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVl
cyk7Cit9CisKK1N0cmluZyBDU1NDYWxjT3BlcmF0aW9uOjpidWlsZENzc1RleHQoVmVjdG9yPFN0
cmluZz4gY2hpbGRFeHByZXNzaW9ucywgQ2FsY09wZXJhdG9yIG9wKQoreworICAgIFN0cmluZ0J1
aWxkZXIgcmVzdWx0OworICAgIHJlc3VsdC5hcHBlbmQoJygnKTsKKyAgICBzd2l0Y2ggKG9wKSB7
CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3Vi
dHJhY3Q6CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OgorICAgIGNhc2UgQ2FsY09w
ZXJhdG9yOjpEaXZpZGU6CisgICAgICAgIEFTU0VSVChjaGlsZEV4cHJlc3Npb25zLnNpemUoKSA9
PSAyKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChjaGlsZEV4cHJlc3Npb25zWzBdKTsKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZCgnICcpOworICAgICAgICByZXN1bHQuYXBwZW5kKHN0YXRpY19jYXN0
PGNoYXI+KG9wKSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChjaGlsZEV4cHJlc3Npb25zWzFdKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBD
YWxjT3BlcmF0b3I6Ok1pbjoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OgorICAgICAgICBB
U1NFUlQoIWNoaWxkRXhwcmVzc2lvbnMuaXNFbXB0eSgpKTsKKyAgICAgICAgY29uc3QgY2hhciog
ZnVuY3Rpb25OYW1lID0gb3AgPT0gQ2FsY09wZXJhdG9yOjpNaW4gPyAibWluKCIgOiAibWF4KCI7
CisgICAgICAgIHJlc3VsdC5hcHBlbmQoZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChjaGlsZEV4cHJlc3Npb25zWzBdKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkg
PCBjaGlsZEV4cHJlc3Npb25zLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCcsJyk7CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCcgJyk7CisgICAgICAgICAgICBy
ZXN1bHQuYXBwZW5kKGNoaWxkRXhwcmVzc2lvbnNbaV0pOwogICAgICAgICB9Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmVzdWx0LmFw
cGVuZCgnKScpOwogICAgIH0KKyAgICByZXN1bHQuYXBwZW5kKCcpJyk7CiAKLSAgICBjb25zdCBD
YWxjT3BlcmF0b3IgbV9vcGVyYXRvcjsKLSAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4+IG1fY2hpbGRyZW47Ci19OworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30K
IAotc3RhdGljIFBhcnNlU3RhdGUgY2hlY2tEZXB0aEFuZEluZGV4KGludCogZGVwdGgsIENTU1Bh
cnNlclRva2VuUmFuZ2UgdG9rZW5zKQorU3RyaW5nIENTU0NhbGNPcGVyYXRpb246OmN1c3RvbUNT
U1RleHQoKSBjb25zdAogewotICAgICgqZGVwdGgpKys7Ci0gICAgaWYgKHRva2Vucy5hdEVuZCgp
KQotICAgICAgICByZXR1cm4gTm9Nb3JlVG9rZW5zOwotICAgIGlmICgqZGVwdGggPiBtYXhFeHBy
ZXNzaW9uRGVwdGgpCi0gICAgICAgIHJldHVybiBUb29EZWVwOwotICAgIHJldHVybiBPSzsKKyAg
ICBWZWN0b3I8U3RyaW5nPiBjc3NUZXh0czsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGls
ZHJlbikKKyAgICAgICAgY3NzVGV4dHMuYXBwZW5kKGNoaWxkLT5jdXN0b21DU1NUZXh0KCkpOwor
ICAgIHJldHVybiBidWlsZENzc1RleHQoY3NzVGV4dHMsIG1fb3BlcmF0b3IpOwogfQogCitib29s
IENTU0NhbGNPcGVyYXRpb246OmVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGV4
cCkgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IGV4cC50eXBlKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGNvbnN0IENTU0NhbGNPcGVyYXRpb24mIG90aGVyID0gc3RhdGljX2Nh
c3Q8Y29uc3QgQ1NTQ2FsY09wZXJhdGlvbiY+KGV4cCk7CisKKyAgICBpZiAobV9jaGlsZHJlbi5z
aXplKCkgIT0gb3RoZXIubV9jaGlsZHJlbi5zaXplKCkgfHwgbV9vcGVyYXRvciAhPSBvdGhlci5t
X29wZXJhdG9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFjb21wYXJlQ1NT
VmFsdWUobV9jaGlsZHJlbltpXSwgb3RoZXIubV9jaGlsZHJlbltpXSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitkb3VibGUgQ1NTQ2Fs
Y09wZXJhdGlvbjo6ZXZhbHVhdGVPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3AsIGNvbnN0IFZlY3Rv
cjxkb3VibGU+JiBjaGlsZHJlbikKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBDYWxj
T3BlcmF0b3I6OkFkZDoKKyAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSA9PSAyKTsKKyAg
ICAgICAgcmV0dXJuIGNoaWxkcmVuWzBdICsgY2hpbGRyZW5bMV07CisgICAgY2FzZSBDYWxjT3Bl
cmF0b3I6OlN1YnRyYWN0OgorICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpID09IDIpOwor
ICAgICAgICByZXR1cm4gY2hpbGRyZW5bMF0gLSBjaGlsZHJlblsxXTsKKyAgICBjYXNlIENhbGNP
cGVyYXRvcjo6TXVsdGlwbHk6CisgICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkgPT0gMik7
CisgICAgICAgIHJldHVybiBjaGlsZHJlblswXSAqIGNoaWxkcmVuWzFdOworICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpEaXZpZGU6CisgICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkgPT0gMSB8
fCBjaGlsZHJlbi5zaXplKCkgPT0gMik7CisgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0g
MSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpOworICAgICAgICByZXR1cm4gY2hpbGRyZW5bMF0gLyBjaGlsZHJlblsxXTsKKyAgICBj
YXNlIENhbGNPcGVyYXRvcjo6TWluOiB7CisgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9O
YU4oKTsKKyAgICAgICAgZG91YmxlIG1pbmltdW0gPSBjaGlsZHJlblswXTsKKyAgICAgICAgZm9y
IChhdXRvIGNoaWxkIDogY2hpbGRyZW4pCisgICAgICAgICAgICBtaW5pbXVtID0gc3RkOjptaW4o
bWluaW11bSwgY2hpbGQpOworICAgICAgICByZXR1cm4gbWluaW11bTsKKyAgICB9CisgICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok1heDogeworICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7CisgICAgICAgIGRvdWJsZSBtYXhpbXVtID0gY2hpbGRyZW5bMF07CisgICAgICAgIGZvciAo
YXV0byBjaGlsZCA6IGNoaWxkcmVuKQorICAgICAgICAgICAgbWF4aW11bSA9IHN0ZDo6bWF4KG1h
eGltdW0sIGNoaWxkKTsKKyAgICAgICAgcmV0dXJuIG1heGltdW07CisgICAgfQorICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworCiBjbGFzcyBDU1ND
YWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IENTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlcihDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdv
cnkpCiAgICAgICAgIDogbV9kZXN0aW5hdGlvbkNhdGVnb3J5KGRlc3RpbmF0aW9uQ2F0ZWdvcnkp
CiAgICAgeyB9CiAKLSAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBwYXJzZUNhbGMo
Q1NTUGFyc2VyVG9rZW5SYW5nZSB0b2tlbnMsIENTU1ZhbHVlSUQgZnVuY3Rpb24pCi0gICAgewot
ICAgICAgICBWYWx1ZSByZXN1bHQ7Ci0gICAgICAgIHRva2Vucy5jb25zdW1lV2hpdGVzcGFjZSgp
OwotICAgICAgICBib29sIG9rID0gZmFsc2U7Ci0gICAgICAgIGlmIChmdW5jdGlvbiA9PSBDU1NW
YWx1ZUNhbGMgfHwgZnVuY3Rpb24gPT0gQ1NTVmFsdWVXZWJraXRDYWxjKQotICAgICAgICAgICAg
b2sgPSBwYXJzZVZhbHVlRXhwcmVzc2lvbih0b2tlbnMsIDAsICZyZXN1bHQpOwotICAgICAgICBl
bHNlIGlmIChmdW5jdGlvbiA9PSBDU1NWYWx1ZU1pbiB8fCBmdW5jdGlvbiA9PSBDU1NWYWx1ZU1h
eCkKLSAgICAgICAgICAgIG9rID0gcGFyc2VNaW5NYXhFeHByZXNzaW9uKHRva2VucywgZnVuY3Rp
b24sIDAsICZyZXN1bHQpOwotICAgICAgICBpZiAoIW9rIHx8ICF0b2tlbnMuYXRFbmQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gcmVzdWx0LnZhbHVlOwot
ICAgIH0KKyAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBwYXJzZUNhbGMoQ1NTUGFy
c2VyVG9rZW5SYW5nZSwgQ1NTVmFsdWVJRCBmdW5jdGlvbik7CiAgICAgCiBwcml2YXRlOgogICAg
IHN0cnVjdCBWYWx1ZSB7CkBAIC03NTYsMTQyICs3NDEsMTc1IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICByZXR1cm4gdG9rZW4uZGVsaW1pdGVyKCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
KworICAgIGJvb2wgcGFyc2VWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgVmFsdWUqIHJlc3Vs
dCk7CisgICAgYm9vbCBwYXJzZVZhbHVlVGVybShDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRl
cHRoLCBWYWx1ZSogcmVzdWx0KTsKKyAgICBib29sIHBhcnNlVmFsdWVNdWx0aXBsaWNhdGl2ZUV4
cHJlc3Npb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGludCBkZXB0aCwgVmFsdWUqIHJlc3VsdCk7
CisgICAgYm9vbCBwYXJzZUFkZGl0aXZlVmFsdWVFeHByZXNzaW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmLCBpbnQgZGVwdGgsIFZhbHVlKiByZXN1bHQpOworICAgIGJvb2wgcGFyc2VNaW5NYXhFeHBy
ZXNzaW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZUlEIG1pbk1heEZ1bmN0aW9uLCBp
bnQgZGVwdGgsIFZhbHVlKiByZXN1bHQpOworICAgIGJvb2wgcGFyc2VWYWx1ZUV4cHJlc3Npb24o
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIGludCBkZXB0aCwgVmFsdWUqIHJlc3VsdCk7CisKKyAgICBD
YWxjdWxhdGlvbkNhdGVnb3J5IG1fZGVzdGluYXRpb25DYXRlZ29yeTsKK307CisKKworUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJz
ZUNhbGMoQ1NTUGFyc2VyVG9rZW5SYW5nZSB0b2tlbnMsIENTU1ZhbHVlSUQgZnVuY3Rpb24pCit7
CisgICAgVmFsdWUgcmVzdWx0OworICAgIHRva2Vucy5jb25zdW1lV2hpdGVzcGFjZSgpOworICAg
IGJvb2wgb2sgPSBmYWxzZTsKKyAgICBpZiAoZnVuY3Rpb24gPT0gQ1NTVmFsdWVDYWxjIHx8IGZ1
bmN0aW9uID09IENTU1ZhbHVlV2Via2l0Q2FsYykKKyAgICAgICAgb2sgPSBwYXJzZVZhbHVlRXhw
cmVzc2lvbih0b2tlbnMsIDAsICZyZXN1bHQpOworICAgIGVsc2UgaWYgKGZ1bmN0aW9uID09IENT
U1ZhbHVlTWluIHx8IGZ1bmN0aW9uID09IENTU1ZhbHVlTWF4KQorICAgICAgICBvayA9IHBhcnNl
TWluTWF4RXhwcmVzc2lvbih0b2tlbnMsIGZ1bmN0aW9uLCAwLCAmcmVzdWx0KTsKKyAgICBpZiAo
IW9rIHx8ICF0b2tlbnMuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0
dXJuIHJlc3VsdC52YWx1ZTsKK30KKworYm9vbCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6
OnBhcnNlVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBWYWx1ZSogcmVzdWx0KQor
eworICAgIENTU1BhcnNlclRva2VuIHRva2VuID0gdG9rZW5zLmNvbnN1bWVJbmNsdWRpbmdXaGl0
ZXNwYWNlKCk7CisgICAgaWYgKCEodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuIHx8IHRva2Vu
LnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IERpbWVuc2lvblRv
a2VuKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIGJvb2wgcGFyc2VWYWx1ZShD
U1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIFZhbHVlKiByZXN1bHQpCi0gICAgewotICAgICAg
ICBDU1NQYXJzZXJUb2tlbiB0b2tlbiA9IHRva2Vucy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpOwotICAgICAgICBpZiAoISh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4gfHwgdG9rZW4u
dHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9r
ZW4pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgQ1NTUHJp
bWl0aXZlVmFsdWU6OlVuaXRUeXBlIHR5cGUgPSB0b2tlbi51bml0VHlwZSgpOwotICAgICAgICBp
ZiAodW5pdENhdGVnb3J5KHR5cGUpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgYm9vbCBpc0ludGVnZXIg
PSB0b2tlbi5udW1lcmljVmFsdWVUeXBlKCkgPT0gSW50ZWdlclZhbHVlVHlwZSB8fCAodG9rZW4u
bnVtZXJpY1ZhbHVlVHlwZSgpID09IE51bWJlclZhbHVlVHlwZSAmJiB0b2tlbi5udW1lcmljVmFs
dWUoKSA9PSB0cnVuYyh0b2tlbi5udW1lcmljVmFsdWUoKSkpOwotICAgICAgICByZXN1bHQtPnZh
bHVlID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgdHlwZSksIGlzSW50ZWdlcik7Ci0gICAgICAgIAot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9CisgICAgQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRU
eXBlIHR5cGUgPSB0b2tlbi51bml0VHlwZSgpOworICAgIGlmICh1bml0Q2F0ZWdvcnkodHlwZSkg
PT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAKLSAgICBib29sIHBhcnNlVmFsdWVUZXJtKENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2Vucywg
aW50IGRlcHRoLCBWYWx1ZSogcmVzdWx0KQotICAgIHsKLSAgICAgICAgaWYgKGNoZWNrRGVwdGhB
bmRJbmRleCgmZGVwdGgsIHRva2VucykgIT0gT0spCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgYm9vbCBpc0ludGVnZXIgPSB0b2tlbi5udW1lcmljVmFsdWVUeXBlKCkgPT0gSW50ZWdl
clZhbHVlVHlwZSB8fCAodG9rZW4ubnVtZXJpY1ZhbHVlVHlwZSgpID09IE51bWJlclZhbHVlVHlw
ZSAmJiB0b2tlbi5udW1lcmljVmFsdWUoKSA9PSB0cnVuYyh0b2tlbi5udW1lcmljVmFsdWUoKSkp
OworICAgIHJlc3VsdC0+dmFsdWUgPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHRva2VuLm51bWVyaWNWYWx1ZSgpLCB0eXBlKSwgaXNJbnRl
Z2VyKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KIAotICAgICAgICBhdXRvIGZ1bmN0aW9u
SWQgPSB0b2tlbnMucGVlaygpLmZ1bmN0aW9uSWQoKTsKLSAgICAgICAgCi0gICAgICAgIGlmICh0
b2tlbnMucGVlaygpLnR5cGUoKSA9PSBMZWZ0UGFyZW50aGVzaXNUb2tlbiB8fCBmdW5jdGlvbklk
ID09IENTU1ZhbHVlQ2FsYykgewotICAgICAgICAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBpbm5l
clJhbmdlID0gdG9rZW5zLmNvbnN1bWVCbG9jaygpOwotICAgICAgICAgICAgdG9rZW5zLmNvbnN1
bWVXaGl0ZXNwYWNlKCk7Ci0gICAgICAgICAgICBpbm5lclJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNl
KCk7Ci0gICAgICAgICAgICByZXR1cm4gcGFyc2VWYWx1ZUV4cHJlc3Npb24oaW5uZXJSYW5nZSwg
ZGVwdGgsIHJlc3VsdCk7Ci0gICAgICAgIH0KK3N0YXRpYyBQYXJzZVN0YXRlIGNoZWNrRGVwdGhB
bmRJbmRleChpbnQqIGRlcHRoLCBDU1NQYXJzZXJUb2tlblJhbmdlIHRva2VucykKK3sKKyAgICAo
KmRlcHRoKSsrOworICAgIGlmICh0b2tlbnMuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIE5vTW9y
ZVRva2VuczsKKyAgICBpZiAoKmRlcHRoID4gbWF4RXhwcmVzc2lvbkRlcHRoKQorICAgICAgICBy
ZXR1cm4gVG9vRGVlcDsKKyAgICByZXR1cm4gT0s7Cit9CiAKLSAgICAgICAgaWYgKGZ1bmN0aW9u
SWQgPT0gQ1NTVmFsdWVNYXggfHwgZnVuY3Rpb25JZCA9PSBDU1NWYWx1ZU1pbikgewotICAgICAg
ICAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBpbm5lclJhbmdlID0gdG9rZW5zLmNvbnN1bWVCbG9j
aygpOwotICAgICAgICAgICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0gICAgICAgICAg
ICBpbm5lclJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gcGFy
c2VNaW5NYXhFeHByZXNzaW9uKGlubmVyUmFuZ2UsIGZ1bmN0aW9uSWQsIGRlcHRoLCByZXN1bHQp
OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gcGFyc2VWYWx1ZSh0b2tlbnMs
IHJlc3VsdCk7Citib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VWYWx1ZVRl
cm0oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBpbnQgZGVwdGgsIFZhbHVlKiByZXN1bHQp
Cit7CisgICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleCgmZGVwdGgsIHRva2VucykgIT0gT0spCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZnVuY3Rpb25JZCA9IHRva2Vucy5wZWVr
KCkuZnVuY3Rpb25JZCgpOworICAgIAorICAgIGlmICh0b2tlbnMucGVlaygpLnR5cGUoKSA9PSBM
ZWZ0UGFyZW50aGVzaXNUb2tlbiB8fCBmdW5jdGlvbklkID09IENTU1ZhbHVlQ2FsYykgeworICAg
ICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGlubmVyUmFuZ2UgPSB0b2tlbnMuY29uc3VtZUJsb2Nr
KCk7CisgICAgICAgIHRva2Vucy5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgICAgICBpbm5lclJh
bmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgICAgIHJldHVybiBwYXJzZVZhbHVlRXhwcmVz
c2lvbihpbm5lclJhbmdlLCBkZXB0aCwgcmVzdWx0KTsKKyAgICB9CisKKyAgICBpZiAoZnVuY3Rp
b25JZCA9PSBDU1NWYWx1ZU1heCB8fCBmdW5jdGlvbklkID09IENTU1ZhbHVlTWluKSB7CisgICAg
ICAgIENTU1BhcnNlclRva2VuUmFuZ2UgaW5uZXJSYW5nZSA9IHRva2Vucy5jb25zdW1lQmxvY2so
KTsKKyAgICAgICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgICAgIGlubmVyUmFu
Z2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlTWluTWF4RXhwcmVz
c2lvbihpbm5lclJhbmdlLCBmdW5jdGlvbklkLCBkZXB0aCwgcmVzdWx0KTsKICAgICB9CiAgICAg
Ci0gICAgYm9vbCBwYXJzZVZhbHVlTXVsdGlwbGljYXRpdmVFeHByZXNzaW9uKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHRva2VucywgaW50IGRlcHRoLCBWYWx1ZSogcmVzdWx0KQotICAgIHsKLSAgICAg
ICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleCgmZGVwdGgsIHRva2VucykgIT0gT0spCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHBhcnNlVmFsdWUodG9rZW5zLCByZXN1bHQp
OworfQorCitib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VWYWx1ZU11bHRp
cGxpY2F0aXZlRXhwcmVzc2lvbihDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGludCBkZXB0
aCwgVmFsdWUqIHJlc3VsdCkKK3sKKyAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KCZkZXB0aCwg
dG9rZW5zKSAhPSBPSykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGlmICghcGFy
c2VWYWx1ZVRlcm0odG9rZW5zLCBkZXB0aCwgcmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIAorICAgIHdoaWxlICghdG9rZW5zLmF0RW5kKCkpIHsKKyAgICAgICAgY2hhciBvcGVy
YXRvckNoYXJhY3RlciA9IG9wZXJhdG9yVmFsdWUodG9rZW5zLnBlZWsoKSk7CisgICAgICAgIGlm
IChvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6Ok11
bHRpcGx5KSAmJiBvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3Bl
cmF0b3I6OkRpdmlkZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdG9rZW5zLmNvbnN1
bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIAotICAgICAgICBpZiAoIXBhcnNlVmFs
dWVUZXJtKHRva2VucywgZGVwdGgsIHJlc3VsdCkpCisgICAgICAgIFZhbHVlIHJoczsKKyAgICAg
ICAgaWYgKCFwYXJzZVZhbHVlVGVybSh0b2tlbnMsIGRlcHRoLCAmcmhzKSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIHdoaWxlICghdG9rZW5zLmF0RW5kKCkp
IHsKLSAgICAgICAgICAgIGNoYXIgb3BlcmF0b3JDaGFyYWN0ZXIgPSBvcGVyYXRvclZhbHVlKHRv
a2Vucy5wZWVrKCkpOwotICAgICAgICAgICAgaWYgKG9wZXJhdG9yQ2hhcmFjdGVyICE9IHN0YXRp
Y19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpICYmIG9wZXJhdG9yQ2hhcmFjdGVy
ICE9IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6RGl2aWRlKSkKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIHRva2Vucy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFj
ZSgpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZSByaHM7Ci0gICAgICAgICAgICBp
ZiAoIXBhcnNlVmFsdWVUZXJtKHRva2VucywgZGVwdGgsICZyaHMpKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9
IENTU0NhbGNPcGVyYXRpb246OmNyZWF0ZVNpbXBsaWZpZWQoc3RhdGljX2Nhc3Q8Q2FsY09wZXJh
dG9yPihvcGVyYXRvckNoYXJhY3RlciksIFdURk1vdmUocmVzdWx0LT52YWx1ZSksIFdURk1vdmUo
cmhzLnZhbHVlKSk7Ci0KLSAgICAgICAgICAgIGlmICghcmVzdWx0LT52YWx1ZSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICByZXN1bHQtPnZhbHVlID0gQ1NTQ2FsY09wZXJhdGlvbjo6Y3JlYXRl
U2ltcGxpZmllZChzdGF0aWNfY2FzdDxDYWxjT3BlcmF0b3I+KG9wZXJhdG9yQ2hhcmFjdGVyKSwg
V1RGTW92ZShyZXN1bHQtPnZhbHVlKSwgV1RGTW92ZShyaHMudmFsdWUpKTsKKworICAgICAgICBp
ZiAoIXJlc3VsdC0+dmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAg
IAotICAgIGJvb2wgcGFyc2VBZGRpdGl2ZVZhbHVlRXhwcmVzc2lvbihDU1NQYXJzZXJUb2tlblJh
bmdlJiB0b2tlbnMsIGludCBkZXB0aCwgVmFsdWUqIHJlc3VsdCkKLSAgICB7Ci0gICAgICAgIGlm
IChjaGVja0RlcHRoQW5kSW5kZXgoJmRlcHRoLCB0b2tlbnMpICE9IE9LKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIENTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlcjo6cGFyc2VBZGRpdGl2ZVZhbHVlRXhwcmVzc2lvbihDU1NQYXJzZXJUb2tl
blJhbmdlJiB0b2tlbnMsIGludCBkZXB0aCwgVmFsdWUqIHJlc3VsdCkKK3sKKyAgICBpZiAoY2hl
Y2tEZXB0aEFuZEluZGV4KCZkZXB0aCwgdG9rZW5zKSAhPSBPSykKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIAorICAgIGlmICghcGFyc2VWYWx1ZU11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbih0
b2tlbnMsIGRlcHRoLCByZXN1bHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAg
d2hpbGUgKCF0b2tlbnMuYXRFbmQoKSkgeworICAgICAgICBjaGFyIG9wZXJhdG9yQ2hhcmFjdGVy
ID0gb3BlcmF0b3JWYWx1ZSh0b2tlbnMucGVlaygpKTsKKyAgICAgICAgaWYgKG9wZXJhdG9yQ2hh
cmFjdGVyICE9IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6QWRkKSAmJiBvcGVyYXRv
ckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OlN1YnRyYWN0KSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoKCZ0b2tlbnMucGVlaygpIC0gMSktPnR5
cGUoKSAhPSBXaGl0ZXNwYWNlVG9rZW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGNh
bGMoMXB4KyAycHgpIGlzIGludmFsaWQKKyAgICAgICAgdG9rZW5zLmNvbnN1bWUoKTsKKyAgICAg
ICAgaWYgKHRva2Vucy5wZWVrKCkudHlwZSgpICE9IFdoaXRlc3BhY2VUb2tlbikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsgLy8gY2FsYygxcHggKzJweCkgaXMgaW52YWxpZAorICAgICAgICB0
b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKICAgICAgICAgCi0gICAgICAgIGlm
ICghcGFyc2VWYWx1ZU11bHRpcGxpY2F0aXZlRXhwcmVzc2lvbih0b2tlbnMsIGRlcHRoLCByZXN1
bHQpKQorICAgICAgICBWYWx1ZSByaHM7CisgICAgICAgIGlmICghcGFyc2VWYWx1ZU11bHRpcGxp
Y2F0aXZlRXhwcmVzc2lvbih0b2tlbnMsIGRlcHRoLCAmcmhzKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgCi0gICAgICAgIHdoaWxlICghdG9rZW5zLmF0RW5kKCkpIHsKLSAg
ICAgICAgICAgIGNoYXIgb3BlcmF0b3JDaGFyYWN0ZXIgPSBvcGVyYXRvclZhbHVlKHRva2Vucy5w
ZWVrKCkpOwotICAgICAgICAgICAgaWYgKG9wZXJhdG9yQ2hhcmFjdGVyICE9IHN0YXRpY19jYXN0
PGNoYXI+KENhbGNPcGVyYXRvcjo6QWRkKSAmJiBvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNf
Y2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OlN1YnRyYWN0KSkKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGlmICgoJnRva2Vucy5wZWVrKCkgLSAxKS0+dHlwZSgpICE9IFdoaXRl
c3BhY2VUb2tlbikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGNhbGMoMXB4KyAy
cHgpIGlzIGludmFsaWQKLSAgICAgICAgICAgIHRva2Vucy5jb25zdW1lKCk7Ci0gICAgICAgICAg
ICBpZiAodG9rZW5zLnBlZWsoKS50eXBlKCkgIT0gV2hpdGVzcGFjZVRva2VuKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gY2FsYygxcHggKzJweCkgaXMgaW52YWxpZAotICAgICAg
ICAgICAgdG9rZW5zLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIFZhbHVlIHJoczsKLSAgICAgICAgICAgIGlmICghcGFyc2VWYWx1ZU11bHRp
cGxpY2F0aXZlRXhwcmVzc2lvbih0b2tlbnMsIGRlcHRoLCAmcmhzKSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHJlc3VsdC0+dmFsdWUg
PSBDU1NDYWxjT3BlcmF0aW9uOjpjcmVhdGVTaW1wbGlmaWVkKHN0YXRpY19jYXN0PENhbGNPcGVy
YXRvcj4ob3BlcmF0b3JDaGFyYWN0ZXIpLCBXVEZNb3ZlKHJlc3VsdC0+dmFsdWUpLCBXVEZNb3Zl
KHJocy52YWx1ZSkpOwotICAgICAgICAgICAgaWYgKCFyZXN1bHQtPnZhbHVlKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0gICAgfQotCi0gICAgYm9vbCBwYXJzZU1pbk1heEV4cHJlc3Npb24oQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgdG9rZW5zLCBDU1NWYWx1ZUlEIG1pbk1heEZ1bmN0aW9uLCBpbnQgZGVwdGgs
IFZhbHVlKiByZXN1bHQpCi0gICAgewotICAgICAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KCZk
ZXB0aCwgdG9rZW5zKSAhPSBPSykKKyAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNPcGVy
YXRpb246OmNyZWF0ZVNpbXBsaWZpZWQoc3RhdGljX2Nhc3Q8Q2FsY09wZXJhdG9yPihvcGVyYXRv
ckNoYXJhY3RlciksIFdURk1vdmUocmVzdWx0LT52YWx1ZSksIFdURk1vdmUocmhzLnZhbHVlKSk7
CisgICAgICAgIGlmICghcmVzdWx0LT52YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisgICAgCisgICAgcmV0dXJuIHRydWU7Cit9CiAKLSAgICAgICAgQ2FsY09wZXJhdG9y
IG9wID0gKG1pbk1heEZ1bmN0aW9uID09IENTU1ZhbHVlTWluKSA/IENhbGNPcGVyYXRvcjo6TWlu
IDogQ2FsY09wZXJhdG9yOjpNYXg7Citib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6
cGFyc2VNaW5NYXhFeHByZXNzaW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgQ1NTVmFs
dWVJRCBtaW5NYXhGdW5jdGlvbiwgaW50IGRlcHRoLCBWYWx1ZSogcmVzdWx0KQoreworICAgIGlm
IChjaGVja0RlcHRoQW5kSW5kZXgoJmRlcHRoLCB0b2tlbnMpICE9IE9LKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICAgICAgVmFsdWUgdmFsdWU7Ci0gICAgICAgIGlmICghcGFyc2VWYWx1
ZUV4cHJlc3Npb24odG9rZW5zLCBkZXB0aCwgJnZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBDYWxjT3BlcmF0b3Igb3AgPSAobWluTWF4RnVuY3Rpb24gPT0gQ1NTVmFsdWVN
aW4pID8gQ2FsY09wZXJhdG9yOjpNaW4gOiBDYWxjT3BlcmF0b3I6Ok1heDsKIAotICAgICAgICBW
ZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5vZGVzOwotICAgICAgICBub2Rlcy5h
cHBlbmQodmFsdWUudmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgVmFsdWUgdmFsdWU7Cisg
ICAgaWYgKCFwYXJzZVZhbHVlRXhwcmVzc2lvbih0b2tlbnMsIGRlcHRoLCAmdmFsdWUpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgd2hpbGUgKCF0b2tlbnMuYXRFbmQoKSkgewot
ICAgICAgICAgICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0gICAgICAgICAgICBpZiAo
dG9rZW5zLmNvbnN1bWUoKS50eXBlKCkgIT0gQ29tbWFUb2tlbikKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAg
ICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5vZGVzOworICAgIG5vZGVzLmFw
cGVuZCh2YWx1ZS52YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKIAotICAgICAgICAgICAgaWYgKCFw
YXJzZVZhbHVlRXhwcmVzc2lvbih0b2tlbnMsIGRlcHRoLCAmdmFsdWUpKQotICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB3aGlsZSAoIXRva2Vucy5hdEVuZCgpKSB7CisgICAgICAg
IHRva2Vucy5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgICAgICBpZiAodG9rZW5zLmNvbnN1bWUo
KS50eXBlKCkgIT0gQ29tbWFUb2tlbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAKLSAgICAgICAgICAgIG5vZGVzLmFwcGVu
ZCh2YWx1ZS52YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgfQorICAgICAgICBpZiAo
IXBhcnNlVmFsdWVFeHByZXNzaW9uKHRva2VucywgZGVwdGgsICZ2YWx1ZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgcmVzdWx0LT52YWx1ZSA9IENTU0NhbGNPcGVyYXRp
b246OmNyZWF0ZU1pbk9yTWF4KG9wLCBXVEZNb3ZlKG5vZGVzKSwgbV9kZXN0aW5hdGlvbkNhdGVn
b3J5KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdC0+dmFsdWU7CisgICAgICAgIG5vZGVzLmFwcGVu
ZCh2YWx1ZS52YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICB9CiAKLSAgICBib29sIHBhcnNl
VmFsdWVFeHByZXNzaW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgaW50IGRlcHRoLCBW
YWx1ZSogcmVzdWx0KQotICAgIHsKLSAgICAgICAgcmV0dXJuIHBhcnNlQWRkaXRpdmVWYWx1ZUV4
cHJlc3Npb24odG9rZW5zLCBkZXB0aCwgcmVzdWx0KTsKLSAgICB9CisgICAgcmVzdWx0LT52YWx1
ZSA9IENTU0NhbGNPcGVyYXRpb246OmNyZWF0ZU1pbk9yTWF4KG9wLCBXVEZNb3ZlKG5vZGVzKSwg
bV9kZXN0aW5hdGlvbkNhdGVnb3J5KTsKKyAgICByZXR1cm4gcmVzdWx0LT52YWx1ZTsKK30KKwor
Ym9vbCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlVmFsdWVFeHByZXNzaW9uKENT
U1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgaW50IGRlcHRoLCBWYWx1ZSogcmVzdWx0KQorewor
ICAgIHJldHVybiBwYXJzZUFkZGl0aXZlVmFsdWVFeHByZXNzaW9uKHRva2VucywgZGVwdGgsIHJl
c3VsdCk7Cit9CiAKLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IG1fZGVzdGluYXRpb25DYXRlZ29y
eTsKLX07CiAKIHN0YXRpYyBpbmxpbmUgUmVmUHRyPENTU0NhbGNPcGVyYXRpb24+IGNyZWF0ZUJs
ZW5kSGFsZihjb25zdCBMZW5ndGgmIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBm
bG9hdCBwcm9ncmVzcykKIHsKQEAgLTk2Myw2ICs5ODEsMzQgQEAgc3RhdGljIFJlZlB0cjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBMZW5ndGgmIGxlbmd0aCwgY29uc3Qg
UmVuZGUKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorU3RyaW5nIENTU0NhbGNWYWx1ZTo6Y3Vz
dG9tQ1NTVGV4dCgpIGNvbnN0Cit7CisgICAgYXV0byBleHByZXNzaW9uID0gbV9leHByZXNzaW9u
LT5jdXN0b21DU1NUZXh0KCk7CisgICAgaWYgKGV4cHJlc3Npb25bMF0gPT0gJygnKQorICAgICAg
ICByZXR1cm4gbWFrZVN0cmluZygiY2FsYyIsIGV4cHJlc3Npb24pOworICAgIHJldHVybiBtYWtl
U3RyaW5nKCJjYWxjKCIsIGV4cHJlc3Npb24sICcpJyk7Cit9CisKK2Jvb2wgQ1NTQ2FsY1ZhbHVl
OjplcXVhbHMoY29uc3QgQ1NTQ2FsY1ZhbHVlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4g
Y29tcGFyZUNTU1ZhbHVlKG1fZXhwcmVzc2lvbiwgb3RoZXIubV9leHByZXNzaW9uKTsKK30KKwor
aW5saW5lIGRvdWJsZSBDU1NDYWxjVmFsdWU6OmNsYW1wVG9QZXJtaXR0ZWRSYW5nZShkb3VibGUg
dmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlICYm
IHZhbHVlIDwgMCA/IDAgOiB2YWx1ZTsKK30KKworZG91YmxlIENTU0NhbGNWYWx1ZTo6ZG91Ymxl
VmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBjbGFtcFRvUGVybWl0dGVkUmFuZ2UobV9leHBy
ZXNzaW9uLT5kb3VibGVWYWx1ZSgpKTsKK30KKworZG91YmxlIENTU0NhbGNWYWx1ZTo6Y29tcHV0
ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRh
KSBjb25zdAoreworICAgIHJldHVybiBjbGFtcFRvUGVybWl0dGVkUmFuZ2UobV9leHByZXNzaW9u
LT5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lvbkRhdGEpKTsKK30KKwogUmVmUHRyPENTU0NhbGNW
YWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9u
Q2F0ZWdvcnksIFZhbHVlUmFuZ2UgcmFuZ2UpCiB7CiAgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
UGFyc2VyIHBhcnNlcihkZXN0aW5hdGlvbkNhdGVnb3J5KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>