<?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>224861</bug_id>
          
          <creation_ts>2021-04-21 02:27:58 -0700</creation_ts>
          <short_desc>Gigacage and DebugHeap compilation unit names clash with corresponding WTF names</short_desc>
          <delta_ts>2021-04-22 23:42:46 -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>bmalloc</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>DUPLICATE</resolution>
          <dup_id>175997</dup_id>
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=224860</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>annulen</cc>
    
    <cc>ap</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1752681</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-21 02:27:58 -0700</bug_when>
    <thetext>Gigacage and DebugHeap compilation unit names clash with corresponding WTF names

Causes link-time warnings

CompileC WTFAssertions.o
CompileC WTFConfig.o
CompileC WTFString.o
Libtool libWTF
/Volumes/.../usr/bin/libtool: warning same member name (DebugHeap.o) in output file used for input files: /Users/kkinnunen/Build/WTF.build/Debug/WTF.build/Objects-normal/x86_64/DebugHeap.o and: /Users/kkinnunen/Build/Debug/libbmalloc.a(DebugHeap.o) due to use of basename, truncation and blank padding
/Volumes/.../usr/bin/libtool: warning same member name (Gigacage.o) in output file used for input files: /Users/kkinnunen/Build/Debug/libbmalloc.a(Gigacage.o) and: /Users/kkinnunen/Build/WTF.build/Debug/WTF.build/Objects-normal/x86_64/Gigacage.o (due to use of basename, truncation, blank padding or duplicate input files)
Build Succeeded
Current settings: Configuration:Debug Arch:x86_64


=== BUILD TARGET TestWTF OF PROJECT TestWebKitAPI WITH CONFIGURATION Debug ===
Check dependencies
CompileC mainMac.o
Ld TestWTF
...
GenerateDSYMFile TestWTF.dSYM

warning: (x86_64)  could not find object file symbol for symbol __ZN7bmalloc9DebugHeapC2ERKNSt3__111scoped_lockIJNS_5MutexEEEE
warning: (x86_64)  could not find object file symbol for symbol __ZNSt3__113unordered_mapIPvmNS_4hashIS1_EENS_8equal_toIS1_EENS_9allocatorINS_4pairIKS1_mEEEEEC1Ev
warning: (x86_64)  could not find object file symbol for symbol __ZN7bmalloc9DebugHeapC1ERKNSt3__111scoped_lockIJNS_5MutexEEEE
warning: (x86_64)  could not find object file symbol for symbol __ZN7bmalloc9DebugHeap6mallocEmNS_13FailureActionE
warning: (x86_64)  could not find object file symbol for symbol __ZN7bmalloc9DebugHeap8memalignEmmNS_13FailureActionE
warning: (x86_64)  could not find object file symbol for symbol __ZN7bmalloc9DebugHeap7reallocEPvmNS_13FailureActionE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752682</commentid>
    <comment_count>1</comment_count>
      <attachid>426663</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-21 02:30:43 -0700</bug_when>
    <thetext>Created attachment 426663
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752974</commentid>
    <comment_count>2</comment_count>
      <attachid>426663</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2021-04-21 16:49:14 -0700</bug_when>
    <thetext>Comment on attachment 426663
Patch

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

&gt; Source/bmalloc/ChangeLog:8
&gt; +        Rename DebugHeap.cpp, Gigacage.cpp with B prefix to avoid clashing with WTF compilation units.

Is there no way to fix this without renaming? It seems impractical to change bmalloc whenever any client uses the same file name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753061</commentid>
    <comment_count>3</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-21 23:58:13 -0700</bug_when>
    <thetext>I think one alternative is to encode the project name in the .o file, but I couldn&apos;t find Xcode options for that.
E.g Compiling DebugHeap.cpp would produce libbmalloc-DebugHeap.o.
As in:
https://bugs.chromium.org/p/webrtc/issues/detail?id=6418</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753067</commentid>
    <comment_count>4</comment_count>
      <attachid>426663</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-22 00:14:35 -0700</bug_when>
    <thetext>Comment on attachment 426663
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753464</commentid>
    <comment_count>5</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-04-22 23:42:46 -0700</bug_when>
    <thetext>

*** This bug has been marked as a duplicate of bug 175997 ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426663</attachid>
            <date>2021-04-21 02:30:43 -0700</date>
            <delta_ts>2021-04-22 00:14:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224861-20210421123041.patch</filename>
            <type>text/plain</type>
            <size>42406</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2MzQ1CmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXggZTExMWRhODFjYzYxODVk
MDQ3MDBhNDZmYWUyYTJhMzk3YjMxZGE2NC4uNjViNDk0N2M2ZGExYTU1MzViNjVjYTU1YWRkZDY5
NThiZjIyZTM1YSAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIxLTA0LTIxICBLaW1t
byBLaW5udW5lbiAgPGtraW5udW5lbkBhcHBsZS5jb20+CisKKyAgICAgICAgR2lnYWNhZ2UgYW5k
IERlYnVnSGVhcCBjb21waWxhdGlvbiB1bml0IG5hbWVzIGNsYXNoIHdpdGggY29ycmVzcG9uZGlu
ZyBXVEYgbmFtZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIyNDg2MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFJlbmFtZSBEZWJ1Z0hlYXAuY3BwLCBHaWdhY2FnZS5jcHAgd2l0aCBCIHByZWZpeCB0byBh
dm9pZCBjbGFzaGluZyB3aXRoIFdURiBjb21waWxhdGlvbiB1bml0cy4KKworICAgICAgICAqIENN
YWtlTGlzdHMudHh0OgorICAgICAgICAqIGJtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBibWFsbG9jL0JEZWJ1Z0hlYXAuY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L2JtYWxsb2MvYm1hbGxvYy9EZWJ1Z0hlYXAuY3BwLgorICAgICAgICAqIGJtYWxsb2MvQkdpZ2Fj
YWdlLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuY3Bw
LgorCiAyMDIxLTA0LTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtibWFsbG9jXSBFbmFibGUgQWRhcHRpdmUgU2NhdmVuZ2VyIGZvciBNYWMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9ibWFsbG9jL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL2JtYWxsb2MvQ01h
a2VMaXN0cy50eHQKaW5kZXggMmJmZjFlNGIxNzc1NzNkNGQ0NGVkZDA3ZTNmZDdiMWEwOTdjYzY0
ZS4uMDBlOTBiODcyOTg5YjEyM2VmNzIyYWQ4YTBlNjk3ZjBiZTkyMDgyOSAxMDA2NDQKLS0tIGEv
U291cmNlL2JtYWxsb2MvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL2JtYWxsb2MvQ01ha2VM
aXN0cy50eHQKQEAgLTgsMTMgKzgsMTMgQEAgc2V0KGJtYWxsb2NfU09VUkNFUwogICAgIGJtYWxs
b2MvQWxsSXNvSGVhcHMuY3BwCiAgICAgYm1hbGxvYy9BbGxvY2F0b3IuY3BwCiAgICAgYm1hbGxv
Yy9BdmFpbGFibGVNZW1vcnkuY3BwCisgICAgYm1hbGxvYy9CRGVidWdIZWFwLmNwcAorICAgIGJt
YWxsb2MvQkdpZ2FjYWdlLmNwcAogICAgIGJtYWxsb2MvQ2FjaGUuY3BwCiAgICAgYm1hbGxvYy9D
cnlwdG9SYW5kb20uY3BwCiAgICAgYm1hbGxvYy9EZWFsbG9jYXRvci5jcHAKLSAgICBibWFsbG9j
L0RlYnVnSGVhcC5jcHAKICAgICBibWFsbG9jL0Vudmlyb25tZW50LmNwcAogICAgIGJtYWxsb2Mv
RnJlZUxpc3QuY3BwCi0gICAgYm1hbGxvYy9HaWdhY2FnZS5jcHAKICAgICBibWFsbG9jL0hlYXAu
Y3BwCiAgICAgYm1hbGxvYy9IZWFwQ29uc3RhbnRzLmNwcAogICAgIGJtYWxsb2MvSGVhcEtpbmQu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKaW5kZXggNWM1MDI1NGY3ODc2ZDRiNzc4MDUyZjBlMzVlNGFhZDg4ZGY3MzFhYi4uYjU4YTg5
MDQxMDc4YzgwZjQ5YzJhNjE3NzkwNjliOWNjODc5NDRlYyAxMDA2NDQKLS0tIGEvU291cmNlL2Jt
YWxsb2MvYm1hbGxvYy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjcsNyArMjcsNyBAQAog
CQkwRjVCRjE0NzFGMjJBOEIxMDAyOUQ5MUQgLyogSGVhcEtpbmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNUJGMTQ2MUYyMkE4QjEwMDI5RDkxRCAv
KiBIZWFwS2luZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGNUJGMTQ5MUYyMkE4RDgwMDI5RDkxRCAvKiBQZXJIZWFwS2luZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNDgxRjIyQThEODAw
MjlEOTFEIC8qIFBlckhlYXBLaW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEY1QkYxNEQxRjIyQjBDMzAwMjlEOTFEIC8qIEdpZ2FjYWdlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE0QzFG
MjJCMEMzMDAyOUQ5MUQgLyogR2lnYWNhZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjVCRjE0RjFGMjJERUFGMDAyOUQ5MUQgLyogR2lnYWNh
Z2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY1
QkYxNEUxRjIyREVBRjAwMjlEOTFEIC8qIEdpZ2FjYWdlLmNwcCAqLzsgfTsKKwkJMEY1QkYxNEYx
RjIyREVBRjAwMjlEOTFEIC8qIEJHaWdhY2FnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE0RTFGMjJERUFGMDAyOUQ5MUQgLyogQkdpZ2Fj
YWdlLmNwcCAqLzsgfTsKIAkJMEY1QkYxNTIxRjIyRTE1NzAwMjlEOTFEIC8qIFNjYXZlbmdlci5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE1
MDFGMjJFMTU3MDAyOUQ5MUQgLyogU2NhdmVuZ2VyLmNwcCAqLzsgfTsKIAkJMEY1QkYxNTMxRjIy
RTE1NzAwMjlEOTFEIC8qIFNjYXZlbmdlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEY1QkYxNTExRjIyRTE1NzAwMjlEOTFEIC8qIFNjYXZlbmdlci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNUJG
MTczMUYyM0M1NzEwMDI5RDkxRCAvKiBCRXhwb3J0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjVCRjE3MjFGMjNDNTcxMDAyOUQ5MUQgLyogQkV4cG9y
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04
MSw3ICs4MSw3IEBACiAJCTE0MEZBMDAzMTlDRTQyOUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MEZBMDAyMTlD
RTQyOUMwMEZGRDNDOCAvKiBCdW1wUmFuZ2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkxNDBGQTAwNTE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1l
dGFkYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAx
NDBGQTAwNDE5Q0U0QjY4MDBGRkQzQzggLyogTGluZU1ldGFkYXRhLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQxRDlCMDAxQzhFNTFDMDAwMEFC
QkEwIC8qIExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDE0MUQ5QUZGMUM4RTUxQzAwMDBBQkJBMCAvKiBMaXN0LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMTQyQjQ0MzYxRTI4MzlFNzAwMURBNkU5
IC8qIERlYnVnSGVhcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAxNDJCNDQzNDFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFwLmNwcCAqLzsgfTsK
KwkJMTQyQjQ0MzYxRTI4MzlFNzAwMURBNkU5IC8qIEJEZWJ1Z0hlYXAuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMTQyQjQ0MzQxRTI4MzlFNzAwMURB
NkU5IC8qIEJEZWJ1Z0hlYXAuY3BwICovOyB9OwogCQkxNDJCNDQzNzFFMjgzOUU3MDAxREE2RTkg
LyogRGVidWdIZWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxNDJCNDQzNTFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFwLmggKi87IH07CiAJCTE0
MkZDNjIyMjA5NjQwOUUwMEE5OTM2MiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdv
cmtzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDE0MkZDNjIxMjA5NjQwOUUw
MEE5OTM2MiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKIAkJMTQzQ0I4MUMxOTAyMkJD
OTAwQjE2QTQ1IC8qIE11dGV4LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDE0M0NCODFBMTkwMjJCQzkwMEIxNkE0NSAvKiBNdXRleC5jcHAgKi87IH07
CkBAIC0xNzgsNyArMTc4LDcgQEAKIAkJMEY1QkYxNDYxRjIyQThCMTAwMjlEOTFEIC8qIEhlYXBL
aW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEhlYXBLaW5kLmg7IHBhdGggPSBibWFsbG9jL0hlYXBLaW5k
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUJGMTQ4MUYyMkE4RDgwMDI5RDkx
RCAvKiBQZXJIZWFwS2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQZXJIZWFwS2luZC5oOyBwYXRoID0g
Ym1hbGxvYy9QZXJIZWFwS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjVC
RjE0QzFGMjJCMEMzMDAyOUQ5MUQgLyogR2lnYWNhZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gR2lnYWNh
Z2UuaDsgcGF0aCA9IGJtYWxsb2MvR2lnYWNhZ2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMEY1QkYxNEUxRjIyREVBRjAwMjlEOTFEIC8qIEdpZ2FjYWdlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEdpZ2FjYWdlLmNwcDsgcGF0aCA9IGJtYWxsb2MvR2lnYWNhZ2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjVCRjE0RTFGMjJERUFGMDAyOUQ5MUQgLyogQkdp
Z2FjYWdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEJHaWdhY2FnZS5jcHA7IHBhdGggPSBibWFs
bG9jL0JHaWdhY2FnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUJGMTUw
MUYyMkUxNTcwMDI5RDkxRCAvKiBTY2F2ZW5nZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gU2Nh
dmVuZ2VyLmNwcDsgcGF0aCA9IGJtYWxsb2MvU2NhdmVuZ2VyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEY1QkYxNTExRjIyRTE1NzAwMjlEOTFEIC8qIFNjYXZlbmdlci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBTY2F2ZW5nZXIuaDsgcGF0aCA9IGJtYWxsb2MvU2NhdmVuZ2VyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNUJGMTcyMUYyM0M1NzEwMDI5RDkxRCAvKiBC
RXhwb3J0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEJFeHBvcnQuaDsgcGF0aCA9IGJtYWxsb2MvQkV4cG9y
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJCTE0
MTdGNjRGMThCNzI4MEMwMDc2RkEzRiAvKiBTeXNjYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IFN5c2NhbGwuaDsgcGF0aCA9IGJtYWxsb2MvU3lzY2FsbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDFEOUFGRjFDOEU1MUMwMDAwQUJCQTAgLyogTGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBMaXN0Lmg7IHBhdGggPSBibWFsbG9j
L0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQyMUE4NzcxOEVFNDYyQTAw
QjRERDY4IC8qIEFsZ29yaXRobS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBbGdvcml0aG0uaDsgcGF0aCA9
IGJtYWxsb2MvQWxnb3JpdGhtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTE0MkI0
NDM0MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gRGVidWdIZWFwLmNwcDsgcGF0aCA9IGJtYWxsb2MvRGVidWdIZWFw
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMTQyQjQ0MzQxRTI4MzlFNzAwMURB
NkU5IC8qIEJEZWJ1Z0hlYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQkRlYnVnSGVhcC5jcHA7IHBhdGggPSBibWFsbG9jL0JEZWJ1Z0hlYXAuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxNDJCNDQzNTFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdI
ZWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERlYnVnSGVhcC5oOyBwYXRo
ID0gYm1hbGxvYy9EZWJ1Z0hlYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQy
RkM2MjEyMDk2NDA5RTAwQTk5MzYyIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7
IG5hbWUgPSBGb3VuZGF0aW9uLmZyYW1ld29yazsgcGF0aCA9IFN5c3RlbS9MaWJyYXJ5L0ZyYW1l
d29ya3MvRm91bmRhdGlvbi5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBTREtST09UOyB9OwogCQkx
NDNDQjgxQTE5MDIyQkM5MDBCMTZBNDUgLyogTXV0ZXguY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gTXV0ZXguY3BwOyBwYXRoID0gYm1hbGxvYy9NdXRleC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00ODEsMTIgKzQ4MSwxMiBAQAogCQkJCTc5Mzk4
ODVBMjA3NkVFQjUwMDc0QTJFNyAvKiBCdWxrRGVjb21taXQuaCAqLywKIAkJCQkxNDBGQTAwMjE5
Q0U0MjlDMDBGRkQzQzggLyogQnVtcFJhbmdlLmggKi8sCiAJCQkJMTQ3REM2RTIxQ0E1QjcwQjAw
NzI0RThEIC8qIENodW5rLmggKi8sCi0JCQkJMTQyQjQ0MzQxRTI4MzlFNzAwMURBNkU5IC8qIERl
YnVnSGVhcC5jcHAgKi8sCisJCQkJMTQyQjQ0MzQxRTI4MzlFNzAwMURBNkU5IC8qIEJEZWJ1Z0hl
YXAuY3BwICovLAogCQkJCTE0MkI0NDM1MUUyODM5RTcwMDFEQTZFOSAvKiBEZWJ1Z0hlYXAuaCAq
LywKIAkJCQkxNDg5NUQ4RjFBM0EzMTlDMDAwNjIzNUQgLyogRW52aXJvbm1lbnQuY3BwICovLAog
CQkJCTE0ODk1RDkwMUEzQTMxOUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVudC5oICovLAogCQkJCUZF
NDhCRDNBMjMyMUU4Q0MwMEYxMzZEMCAvKiBGYWlsdXJlQWN0aW9uLmggKi8sCi0JCQkJMEY1QkYx
NEUxRjIyREVBRjAwMjlEOTFEIC8qIEdpZ2FjYWdlLmNwcCAqLywKKwkJCQkwRjVCRjE0RTFGMjJE
RUFGMDAyOUQ5MUQgLyogQkdpZ2FjYWdlLmNwcCAqLywKIAkJCQkwRjVCRjE0QzFGMjJCMEMzMDAy
OUQ5MUQgLyogR2lnYWNhZ2UuaCAqLywKIAkJCQlGRUMzQTM5MjI0ODQ2QTZEMDAzOTVCNTQgLyog
R2lnYWNhZ2VDb25maWcuaCAqLywKIAkJCQlGRUMzQTM5NDI0ODQ3MUZFMDAzOTVCNTQgLyogR2ln
YWNhZ2VLaW5kLmggKi8sCkBAIC03NzAsMTAgKzc3MCwxMCBAQAogCQkJCTE0RjI3MUM0MThFQTM5
N0IwMDhDMTUyRiAvKiBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc0QjkzRjFGODk3
MTNFMDBCOTM1RDMgLyogQ3J5cHRvUmFuZG9tLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RjI3
MUM1MThFQTM5N0UwMDhDMTUyRiAvKiBEZWFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKLQkJ
CQkxNDJCNDQzNjFFMjgzOUU3MDAxREE2RTkgLyogRGVidWdIZWFwLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTE0MkI0NDM2MUUyODM5RTcwMDFEQTZFOSAvKiBCRGVidWdIZWFwLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0ODk1RDkxMUEzQTMxOUMwMDA2MjM1RCAvKiBFbnZpcm9ubWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjdFQjgzRTFGOTU0MUIwMDBGMUFCQ0IgLyogRnJlZUxpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEY1QkYxNEYxRjIyREVBRjAwMjlEOTFEIC8qIEdpZ2Fj
YWdlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNUJGMTRGMUYyMkRFQUYwMDI5RDkxRCAvKiBC
R2lnYWNhZ2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRGMjcxQzcxOEVBMzk5MDAwOEMxNTJG
IC8qIEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRUIxN0QxMTEyM0JGQ0Q0MjAwMjA5M0E3
IC8qIEhlYXBDb25zdGFudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZENTU3MzMxRjdFREI3
QjAwQjFGMEEzIC8qIEhlYXBLaW5kLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9CRGVidWdIZWFwLmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxs
b2MvQkRlYnVnSGVhcC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTg5YTQyNzUzYmMyYzM0MGQ0OTBlMjEwMmVj
ZGJkMGI0MTVlYzE5OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
QkRlYnVnSGVhcC5jcHAKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiRGVidWdIZWFwLmgiCisKKyNp
bmNsdWRlICJBbGdvcml0aG0uaCIKKyNpbmNsdWRlICJCQXNzZXJ0LmgiCisjaW5jbHVkZSAiQlBs
YXRmb3JtLmgiCisjaW5jbHVkZSAiVk1BbGxvY2F0ZS5oIgorI2luY2x1ZGUgPGNzdGRsaWI+Cisj
aW5jbHVkZSA8dGhyZWFkPgorCituYW1lc3BhY2UgYm1hbGxvYyB7CisKK0RlYnVnSGVhcCogZGVi
dWdIZWFwQ2FjaGUgeyBudWxscHRyIH07CisgICAgCitERUZJTkVfU1RBVElDX1BFUl9QUk9DRVNT
X1NUT1JBR0UoRGVidWdIZWFwKTsKKworI2lmIEJPUyhEQVJXSU4pCisKK0RlYnVnSGVhcDo6RGVi
dWdIZWFwKGNvbnN0IExvY2tIb2xkZXImKQorICAgIDogbV96b25lKG1hbGxvY19jcmVhdGVfem9u
ZSgwLCAwKSkKKyAgICAsIG1fcGFnZVNpemUodm1QYWdlU2l6ZSgpKQoreworICAgIG1hbGxvY19z
ZXRfem9uZV9uYW1lKG1fem9uZSwgIldlYktpdCBVc2luZyBTeXN0ZW0gTWFsbG9jIik7Cit9CisK
K3ZvaWQqIERlYnVnSGVhcDo6bWFsbG9jKHNpemVfdCBzaXplLCBGYWlsdXJlQWN0aW9uIGFjdGlv
bikKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtYWxsb2Nfem9uZV9tYWxsb2MobV96b25lLCBzaXpl
KTsKKyAgICBSRUxFQVNFX0JBU1NFUlQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51
bGwgfHwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkKiBEZWJ1Z0hlYXA6
Om1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBzaXplLCBGYWlsdXJlQWN0aW9uIGFj
dGlvbikKK3sKKyAgICB2b2lkKiByZXN1bHQgPSBtYWxsb2Nfem9uZV9tZW1hbGlnbihtX3pvbmUs
IGFsaWdubWVudCwgc2l6ZSk7CisgICAgUkVMRUFTRV9CQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJl
QWN0aW9uOjpSZXR1cm5OdWxsIHx8IHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCogRGVidWdIZWFwOjpyZWFsbG9jKHZvaWQqIG9iamVjdCwgc2l6ZV90IHNpemUsIEZhaWx1
cmVBY3Rpb24gYWN0aW9uKQoreworICAgIHZvaWQqIHJlc3VsdCA9IG1hbGxvY196b25lX3JlYWxs
b2MobV96b25lLCBvYmplY3QsIHNpemUpOworICAgIFJFTEVBU0VfQkFTU0VSVChhY3Rpb24gPT0g
RmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCB8fCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgRGVidWdIZWFwOjpmcmVlKHZvaWQqIG9iamVjdCkKK3sKKyAgICBtYWxsb2Nf
em9uZV9mcmVlKG1fem9uZSwgb2JqZWN0KTsKK30KKwordm9pZCBEZWJ1Z0hlYXA6OnNjYXZlbmdl
KCkKK3sKKyAgICAvLyBDdXJyZW50bHkgfGdvYWx8IGRvZXMgbm90IGFmZmVjdCBvbiB0aGUgYmVo
YXZpb3Igb2YgbWFsbG9jX3pvbmVfcHJlc3N1cmVfcmVsaWVmIGlmICgxKSB3ZSBvbmx5IHNjYXZl
bmdlIG9uZSB6b25lIGFuZCAoMikgaXQgaXMgbm90IG5hbm9tYWxsb2MuCisgICAgY29uc3RleHBy
IHNpemVfdCBnb2FsID0gMDsKKyAgICBtYWxsb2Nfem9uZV9wcmVzc3VyZV9yZWxpZWYobV96b25l
LCBnb2FsKTsKK30KKwordm9pZCBEZWJ1Z0hlYXA6OmR1bXAoKQoreworICAgIGNvbnN0ZXhwciBi
b29sIHZlcmJvc2UgPSB0cnVlOworICAgIG1hbGxvY196b25lX3ByaW50KG1fem9uZSwgdmVyYm9z
ZSk7Cit9CisKKyNlbHNlCisKK0RlYnVnSGVhcDo6RGVidWdIZWFwKGNvbnN0IExvY2tIb2xkZXIm
KQorICAgIDogbV9wYWdlU2l6ZSh2bVBhZ2VTaXplKCkpCit7Cit9CisKK3ZvaWQqIERlYnVnSGVh
cDo6bWFsbG9jKHNpemVfdCBzaXplLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKK3sKKyAgICB2b2lk
KiByZXN1bHQgPSA6Om1hbGxvYyhzaXplKTsKKyAgICBSRUxFQVNFX0JBU1NFUlQoYWN0aW9uID09
IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwgfHwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkKiBEZWJ1Z0hlYXA6Om1lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVf
dCBzaXplLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKK3sKKyAgICB2b2lkKiByZXN1bHQ7CisgICAg
aWYgKHBvc2l4X21lbWFsaWduKCZyZXN1bHQsIGFsaWdubWVudCwgc2l6ZSkpCisgICAgICAgIFJF
TEVBU0VfQkFTU0VSVChhY3Rpb24gPT0gRmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCB8fCByZXN1
bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQqIERlYnVnSGVhcDo6cmVhbGxvYyh2
b2lkKiBvYmplY3QsIHNpemVfdCBzaXplLCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKK3sKKyAgICB2
b2lkKiByZXN1bHQgPSA6OnJlYWxsb2Mob2JqZWN0LCBzaXplKTsKKyAgICBSRUxFQVNFX0JBU1NF
UlQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwgfHwgcmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIERlYnVnSGVhcDo6ZnJlZSh2b2lkKiBvYmplY3QpCit7
CisgICAgOjpmcmVlKG9iamVjdCk7Cit9CisKK3ZvaWQgRGVidWdIZWFwOjpzY2F2ZW5nZSgpCit7
Cit9CisKK3ZvaWQgRGVidWdIZWFwOjpkdW1wKCkKK3sKK30KKworI2VuZGlmCisKKy8vIEZJWE1F
OiBUaGlzIGxvb2tzIGFuIGF3ZnVsIGxvdCBsaWtlIHRoZSBjb2RlIGluIHd0Zi9HaWdhY2FnZS5j
cHAgZm9yIGxhcmdlIGFsbG9jYXRpb24uCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc1MDg2CisKK3ZvaWQqIERlYnVnSGVhcDo6bWVtYWxpZ25MYXJnZShzaXpl
X3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBhbGlnbm1lbnQgPSByb3VuZFVwVG9N
dWx0aXBsZU9mKG1fcGFnZVNpemUsIGFsaWdubWVudCk7CisgICAgc2l6ZSA9IHJvdW5kVXBUb011
bHRpcGxlT2YobV9wYWdlU2l6ZSwgc2l6ZSk7CisgICAgdm9pZCogcmVzdWx0ID0gdHJ5Vk1BbGxv
Y2F0ZShhbGlnbm1lbnQsIHNpemUpOworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB7CisgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG11dGV4KCkpOworICAg
ICAgICBtX3NpemVNYXBbcmVzdWx0XSA9IHNpemU7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgRGVidWdIZWFwOjpmcmVlTGFyZ2Uodm9pZCogYmFzZSkKK3sKKyAgICBpZiAo
IWJhc2UpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBzaXplX3Qgc2l6ZTsKKyAgICB7Cisg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG11dGV4KCkpOworICAgICAgICBzaXplID0gbV9zaXpl
TWFwW2Jhc2VdOworICAgICAgICBzaXplX3QgbnVtRXJhc2VkID0gbV9zaXplTWFwLmVyYXNlKGJh
c2UpOworICAgICAgICBSRUxFQVNFX0JBU1NFUlQobnVtRXJhc2VkID09IDEpOworICAgIH0KKyAg
ICAKKyAgICB2bURlYWxsb2NhdGUoYmFzZSwgc2l6ZSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIGJt
YWxsb2MKZGlmZiAtLWdpdCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQkdpZ2FjYWdlLmNwcCBi
L1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvQkdpZ2FjYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTM5OGRi
MGRjZDhiYmMzMGUyYTY5NmIzZTNmZTM2OWRjOTZmYzM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL2JtYWxsb2MvYm1hbGxvYy9CR2lnYWNhZ2UuY3BwCkBAIC0wLDAgKzEsMzAxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3LTIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
IkdpZ2FjYWdlLmgiCisKKyNpbmNsdWRlICJDcnlwdG9SYW5kb20uaCIKKyNpbmNsdWRlICJFbnZp
cm9ubWVudC5oIgorI2luY2x1ZGUgIk11dGV4LmgiCisjaW5jbHVkZSAiUHJvY2Vzc0NoZWNrLmgi
CisjaW5jbHVkZSAiU3RhdGljUGVyUHJvY2Vzcy5oIgorI2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIK
KyNpbmNsdWRlICJWZWN0b3IuaCIKKyNpbmNsdWRlICJibWFsbG9jLmgiCisjaW5jbHVkZSA8Y3N0
ZGlvPgorCisjaWYgQk9TKERBUldJTikKKyNpbmNsdWRlIDxtYWNoL21hY2guaD4KKyNlbmRpZgor
CisjaWYgR0lHQUNBR0VfRU5BQkxFRAorCituYW1lc3BhY2UgR2lnYWNhZ2UgeworCisjaWYgIUJF
TkFCTEUoVU5JRklFRF9BTkRfRlJFRVpBQkxFX0NPTkZJR19SRUNPUkQpCitDb25maWcgZ19naWdh
Y2FnZUNvbmZpZzsKKyNlbmRpZgorCitzdHJ1Y3QgQ2FsbGJhY2sgeworICAgIENhbGxiYWNrKCkg
eyB9CisgICAgCisgICAgQ2FsbGJhY2sodm9pZCAoKmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQgKmFy
Z3VtZW50KQorICAgICAgICA6IGZ1bmN0aW9uKGZ1bmN0aW9uKQorICAgICAgICAsIGFyZ3VtZW50
KGFyZ3VtZW50KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCAoKmZ1bmN0aW9uKSh2b2lk
KikgeyBudWxscHRyIH07CisgICAgdm9pZCogYXJndW1lbnQgeyBudWxscHRyIH07Cit9OworCit9
IC8vIG5hbWVzcGFjZSBHaWdhY2FnZQorCituYW1lc3BhY2UgYm1hbGxvYyB7CisKK3N0cnVjdCBQ
cmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzIDogcHVibGljIFN0YXRpY1BlclByb2Nlc3M8UHJpbWl0
aXZlRGlzYWJsZUNhbGxiYWNrcz4geworICAgIFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3MoY29u
c3QgTG9ja0hvbGRlciYpIHsgfQorICAgIAorICAgIFZlY3RvcjxHaWdhY2FnZTo6Q2FsbGJhY2s+
IGNhbGxiYWNrczsKK307CitERUNMQVJFX1NUQVRJQ19QRVJfUFJPQ0VTU19TVE9SQUdFKFByaW1p
dGl2ZURpc2FibGVDYWxsYmFja3MpOworREVGSU5FX1NUQVRJQ19QRVJfUFJPQ0VTU19TVE9SQUdF
KFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3MpOworCit9IC8vIG5hbWVzcGFjZSBibWFsbG9jCisK
K25hbWVzcGFjZSBHaWdhY2FnZSB7CisKKy8vIFRoaXMgaXMgZXhhY3RseSAzMkdCIGJlY2F1c2Ug
aW5zaWRlIEpTQywgaW5kZXhlZCBhY2Nlc3NlcyBmb3IgYXJyYXlzLCB0eXBlZCBhcnJheXMsIGV0
YywKKy8vIHVzZSB1bnNpZ25lZCAzMi1iaXQgaW50cyBhcyBpbmRpY2VzLiBUaGUgaXRlbXMgdGhv
c2UgaW5kaWNlcyBhY2Nlc3MgYXJlIDggYnl0ZXMgb3IgbGVzcworLy8gaW4gc2l6ZS4gMl4zMiAq
IDggPSAzMkdCLiBUaGlzIG1lYW5zIGlmIGFuIGFjY2VzcyBvbiBhIGNhZ2VkIHR5cGUgaGFwcGVu
cyB0byBnbyBvdXQgb2YKKy8vIGJvdW5kcywgdGhlIGFjY2VzcyBpcyBndWFyYW50ZWVkIHRvIGxh
bmQgc29tZXdoZXJlIGVsc2UgaW4gdGhlIGNhZ2Ugb3IgaW5zaWRlIHRoZSBydW53YXkuCisvLyBJ
ZiB0aGlzIHdlcmUgbGVzcyB0aGFuIDMyR0IsIHRob3NlIE9PQiBhY2Nlc3NlcyBjb3VsZCByZWFj
aCBvdXRzaWRlIG9mIHRoZSBjYWdlLgorY29uc3RleHByIHNpemVfdCBnaWdhY2FnZVJ1bndheSA9
IDMybGx1ICogYm1hbGxvYzo6U2l6ZXM6OkdCOworCitib29sIGRpc2FibGVQcmltaXRpdmVHaWdh
Y2FnZVJlcXVlc3RlZCA9IGZhbHNlOworCit1c2luZyBuYW1lc3BhY2UgYm1hbGxvYzsKKworbmFt
ZXNwYWNlIHsKKworc2l6ZV90IHJ1bndheVNpemUoS2luZCBraW5kKQoreworICAgIHN3aXRjaCAo
a2luZCkgeworICAgIGNhc2UgS2luZDo6UHJpbWl0aXZlOgorICAgICAgICByZXR1cm4gZ2lnYWNh
Z2VSdW53YXk7CisgICAgY2FzZSBLaW5kOjpKU1ZhbHVlOgorICAgICAgICByZXR1cm4gMDsKKyAg
ICBjYXNlIEtpbmQ6Ok51bWJlck9mS2luZHM6CisgICAgICAgIFJFTEVBU0VfQkFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK3ZvaWQgZW5zdXJlR2lnYWNhZ2UoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZUZsYWcsCisg
ICAgICAgIFtdIHsKKyAgICAgICAgICAgIFJFTEVBU0VfQkFTU0VSVCghZ19naWdhY2FnZUNvbmZp
Zy5lbnN1cmVHaWdhY2FnZUhhc0JlZW5DYWxsZWQpOworICAgICAgICAgICAgZ19naWdhY2FnZUNv
bmZpZy5lbnN1cmVHaWdhY2FnZUhhc0JlZW5DYWxsZWQgPSB0cnVlOworCisgICAgICAgICAgICBp
ZiAoIXNob3VsZEJlRW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworI2lmIEJF
TkFCTEUoVU5JRklFRF9BTkRfRlJFRVpBQkxFX0NPTkZJR19SRUNPUkQpCisgICAgICAgICAgICAv
LyBXZSBtaWdodCBvbmx5IGdldCBwYWdlIHNpemUgYWxpZ25tZW50LCBidXQgdGhhdCdzIGFsc28g
dGhlIG1pbmltdW0KKyAgICAgICAgICAgIC8vIGFsaWdubWVudCB3ZSBuZWVkIGZvciBmcmVlemlu
ZyB0aGUgQ29uZmlnLgorICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKCEocmVpbnRlcnByZXRf
Y2FzdDxzaXplX3Q+KCZnX2dpZ2FjYWdlQ29uZmlnKSAmICh2bVBhZ2VTaXplKCkgLSAxKSkpOwor
I2VuZGlmCisKKyAgICAgICAgICAgIEtpbmQgc2h1ZmZsZWRLaW5kc1tOdW1iZXJPZktpbmRzXTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBOdW1iZXJPZktpbmRzOyArK2kp
CisgICAgICAgICAgICAgICAgc2h1ZmZsZWRLaW5kc1tpXSA9IHN0YXRpY19jYXN0PEtpbmQ+KGkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSBqdXN0IGdvIGFoZWFkIGFuZCBhc3N1
bWUgdGhhdCA2NCBiaXRzIGlzIGVub3VnaCByYW5kb21uZXNzLiBUaGF0J3MgdHJpdmlhbGx5IHRy
dWUgcmlnaHQKKyAgICAgICAgICAgIC8vIG5vdywgYnV0IHdvdWxkIHN0b3AgYmVpbmcgdHJ1ZSBp
ZiB3ZSB3ZW50IGNyYXp5IHdpdGggZ2lnYWNhZ2VzLiBCYXNlZCBvbiBteSBtYXRoLCAyMSBpcyB0
aGUKKyAgICAgICAgICAgIC8vIGxhcmdlc3QgdmFsdWUgb2YgbiBzbyB0aGF0IG4hIDw9IDJeNjQu
CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KE51bWJlck9mS2luZHMgPD0gMjEsICJ0b28gbWFu
eSBraW5kcyIpOworICAgICAgICAgICAgdWludDY0X3QgcmFuZG9tOworICAgICAgICAgICAgY3J5
cHRvUmFuZG9tKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KCZyYW5kb20pLCBzaXpl
b2YocmFuZG9tKSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBOdW1iZXJPZktpbmRz
OyBpLS07KSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgbGltaXQgPSBpICsgMTsKKyAgICAg
ICAgICAgICAgICB1bnNpZ25lZCBqID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJhbmRvbSAlIGxp
bWl0KTsKKyAgICAgICAgICAgICAgICByYW5kb20gLz0gbGltaXQ7CisgICAgICAgICAgICAgICAg
c3RkOjpzd2FwKHNodWZmbGVkS2luZHNbaV0sIHNodWZmbGVkS2luZHNbal0pOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBhdXRvIGFsaWduVG8gPSBbXSAoS2luZCBraW5kLCBzaXplX3Qg
dG90YWxTaXplKSAtPiBzaXplX3QgeworICAgICAgICAgICAgICAgIHJldHVybiByb3VuZFVwVG9N
dWx0aXBsZU9mKGFsaWdubWVudChraW5kKSwgdG90YWxTaXplKTsKKyAgICAgICAgICAgIH07Cisg
ICAgICAgICAgICBhdXRvIGJ1bXAgPSBbXSAoS2luZCBraW5kLCBzaXplX3QgdG90YWxTaXplKSAt
PiBzaXplX3QgeworICAgICAgICAgICAgICAgIHJldHVybiB0b3RhbFNpemUgKyBtYXhTaXplKGtp
bmQpOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2l6ZV90IHRv
dGFsU2l6ZSA9IDA7CisgICAgICAgICAgICBzaXplX3QgbWF4QWxpZ25tZW50ID0gMDsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgZm9yIChLaW5kIGtpbmQgOiBzaHVmZmxlZEtpbmRzKSB7Cisg
ICAgICAgICAgICAgICAgdG90YWxTaXplID0gYnVtcChraW5kLCBhbGlnblRvKGtpbmQsIHRvdGFs
U2l6ZSkpOworICAgICAgICAgICAgICAgIHRvdGFsU2l6ZSArPSBydW53YXlTaXplKGtpbmQpOwor
ICAgICAgICAgICAgICAgIG1heEFsaWdubWVudCA9IHN0ZDo6bWF4KG1heEFsaWdubWVudCwgYWxp
Z25tZW50KGtpbmQpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRklYTUU6IFJh
bmRvbWl6ZSB3aGVyZSB0aGlzIGdvZXMuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1MjQ1CisgICAgICAgICAgICB2b2lkKiBiYXNlID0g
dHJ5Vk1BbGxvY2F0ZShtYXhBbGlnbm1lbnQsIHRvdGFsU2l6ZSwgVk1UYWc6OkpTR2lnYWNhZ2Up
OworICAgICAgICAgICAgaWYgKCFiYXNlKSB7CisgICAgICAgICAgICAgICAgaWYgKEdJR0FDQUdF
X0FMTE9DQVRJT05fQ0FOX0ZBSUwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBDb3VsZCBub3QgYWxsb2NhdGUgZ2ln
YWNhZ2UgbWVtb3J5IHdpdGggbWF4QWxpZ25tZW50ID0gJWx1LCB0b3RhbFNpemUgPSAlbHUuXG4i
LCBtYXhBbGlnbm1lbnQsIHRvdGFsU2l6ZSk7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRl
cnIsICIoTWFrZSBzdXJlIHlvdSBoYXZlIG5vdCBzZXQgYSB2aXJ0dWFsIG1lbW9yeSBsaW1pdC4p
XG4iKTsKKyAgICAgICAgICAgICAgICBCQ1JBU0goKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc2l6ZV90IG5leHRDYWdlID0gMDsKKyAgICAgICAgICAgIGZvciAoS2luZCBraW5kIDog
c2h1ZmZsZWRLaW5kcykgeworICAgICAgICAgICAgICAgIG5leHRDYWdlID0gYWxpZ25UbyhraW5k
LCBuZXh0Q2FnZSk7CisgICAgICAgICAgICAgICAgZ19naWdhY2FnZUNvbmZpZy5zZXRCYXNlUHRy
KGtpbmQsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJhc2UpICsgbmV4dENhZ2UpOworICAgICAg
ICAgICAgICAgIG5leHRDYWdlID0gYnVtcChraW5kLCBuZXh0Q2FnZSk7CisgICAgICAgICAgICAg
ICAgaWYgKHJ1bndheVNpemUoa2luZCkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNoYXIq
IHJ1bndheSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGJhc2UpICsgbmV4dENhZ2U7CisgICAg
ICAgICAgICAgICAgICAgIC8vIE1ha2UgT09CIGFjY2Vzc2VzIGludG8gdGhlIHJ1bndheSBjcmFz
aC4KKyAgICAgICAgICAgICAgICAgICAgdm1SZXZva2VQZXJtaXNzaW9ucyhydW53YXksIHJ1bndh
eVNpemUoa2luZCkpOworICAgICAgICAgICAgICAgICAgICBuZXh0Q2FnZSArPSBydW53YXlTaXpl
KGtpbmQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Z19naWdhY2FnZUNvbmZpZy5zdGFydCA9IGJhc2U7CisgICAgICAgICAgICBnX2dpZ2FjYWdlQ29u
ZmlnLnRvdGFsU2l6ZSA9IHRvdGFsU2l6ZTsKKyAgICAgICAgICAgIHZtRGVhbGxvY2F0ZVBoeXNp
Y2FsUGFnZXMoYmFzZSwgdG90YWxTaXplKTsKKyAgICAgICAgICAgIGdfZ2lnYWNhZ2VDb25maWcu
aXNFbmFibGVkID0gdHJ1ZTsKKyAgICAgICAgfSk7Cit9CisKK3ZvaWQgZGlzYWJsZVByaW1pdGl2
ZUdpZ2FjYWdlKCkKK3sKKyAgICBpZiAoZ19naWdhY2FnZUNvbmZpZy5kaXNhYmxpbmdQcmltaXRp
dmVHaWdhY2FnZUlzRm9yYmlkZGVuKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZBVEFMOiBE
aXNhYmxpbmcgUHJpbWl0aXZlIGdpZ2FjYWdlIGlzIGZvcmJpZGRlbiwgYnV0IHdlIGRvbid0IHdh
bnQgdGhhdCBpbiB0aGlzIHByb2Nlc3MuXG4iKTsKKworICAgIFJFTEVBU0VfQkFTU0VSVCghZ19n
aWdhY2FnZUNvbmZpZy5kaXNhYmxpbmdQcmltaXRpdmVHaWdhY2FnZUlzRm9yYmlkZGVuKTsKKwor
ICAgIGVuc3VyZUdpZ2FjYWdlKCk7CisgICAgZGlzYWJsZVByaW1pdGl2ZUdpZ2FjYWdlUmVxdWVz
dGVkID0gdHJ1ZTsKKyAgICBpZiAoIWdfZ2lnYWNhZ2VDb25maWcuYmFzZVB0cnNbUHJpbWl0aXZl
XSkgeworICAgICAgICAvLyBJdCB3YXMgbmV2ZXIgZW5hYmxlZC4gVGhhdCBtZWFucyB0aGF0IHdl
IG5ldmVyIGV2ZW4gc2F2ZWQgYW55IGNhbGxiYWNrcy4gT3IsIHdlIGhhZCBhbHJlYWR5IGRpc2Fi
bGVkCisgICAgICAgIC8vIGl0IGJlZm9yZSwgYW5kIGFscmVhZHkgY2FsbGVkIHRoZSBjYWxsYmFj
a3MuCisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUHJpbWl0aXZlRGlzYWJsZUNh
bGxiYWNrcyYgY2FsbGJhY2tzID0gKlByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6OmdldCgpOwor
ICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjptdXRl
eCgpKTsKKyAgICBmb3IgKENhbGxiYWNrJiBjYWxsYmFjayA6IGNhbGxiYWNrcy5jYWxsYmFja3Mp
CisgICAgICAgIGNhbGxiYWNrLmZ1bmN0aW9uKGNhbGxiYWNrLmFyZ3VtZW50KTsKKyAgICBjYWxs
YmFja3MuY2FsbGJhY2tzLnNocmluaygwKTsKK30KKwordm9pZCBhZGRQcmltaXRpdmVEaXNhYmxl
Q2FsbGJhY2sodm9pZCAoKmZ1bmN0aW9uKSh2b2lkKiksIHZvaWQqIGFyZ3VtZW50KQoreworICAg
IGVuc3VyZUdpZ2FjYWdlKCk7CisgICAgaWYgKCFnX2dpZ2FjYWdlQ29uZmlnLmJhc2VQdHJzW1By
aW1pdGl2ZV0pIHsKKyAgICAgICAgLy8gSXQgd2FzIGFscmVhZHkgZGlzYWJsZWQgb3Igd2Ugd2Vy
ZSBuZXZlciBhYmxlIHRvIGVuYWJsZSBpdC4KKyAgICAgICAgZnVuY3Rpb24oYXJndW1lbnQpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFByaW1pdGl2ZURpc2FibGVDYWxsYmFj
a3MmIGNhbGxiYWNrcyA9ICpQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjpnZXQoKTsKKyAgICBV
bmlxdWVMb2NrSG9sZGVyIGxvY2soUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrczo6bXV0ZXgoKSk7
CisgICAgY2FsbGJhY2tzLmNhbGxiYWNrcy5wdXNoKENhbGxiYWNrKGZ1bmN0aW9uLCBhcmd1bWVu
dCkpOworfQorCit2b2lkIHJlbW92ZVByaW1pdGl2ZURpc2FibGVDYWxsYmFjayh2b2lkICgqZnVu
Y3Rpb24pKHZvaWQqKSwgdm9pZCogYXJndW1lbnQpCit7CisgICAgUHJpbWl0aXZlRGlzYWJsZUNh
bGxiYWNrcyYgY2FsbGJhY2tzID0gKlByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6OmdldCgpOwor
ICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjptdXRl
eCgpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNhbGxiYWNrcy5jYWxsYmFja3Muc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGNhbGxiYWNrcy5jYWxsYmFja3NbaV0uZnVuY3Rpb24g
PT0gZnVuY3Rpb24KKyAgICAgICAgICAgICYmIGNhbGxiYWNrcy5jYWxsYmFja3NbaV0uYXJndW1l
bnQgPT0gYXJndW1lbnQpIHsKKyAgICAgICAgICAgIGNhbGxiYWNrcy5jYWxsYmFja3NbaV0gPSBj
YWxsYmFja3MuY2FsbGJhY2tzLmxhc3QoKTsKKyAgICAgICAgICAgIGNhbGxiYWNrcy5jYWxsYmFj
a3MucG9wKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0
YXRpYyBib29sIHZlcmlmeUdpZ2FjYWdlSXNFbmFibGVkKCkKK3sKKyAgICBib29sIGlzRW5hYmxl
ZCA9IGdfZ2lnYWNhZ2VDb25maWcuaXNFbmFibGVkOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgTnVtYmVyT2ZLaW5kczsgKytpKQorICAgICAgICBpc0VuYWJsZWQgPSBpc0VuYWJsZWQgJiYg
Z19naWdhY2FnZUNvbmZpZy5iYXNlUHRyc1tpXTsKKyAgICBpc0VuYWJsZWQgPSBpc0VuYWJsZWQg
JiYgZ19naWdhY2FnZUNvbmZpZy5zdGFydDsKKyAgICBpc0VuYWJsZWQgPSBpc0VuYWJsZWQgJiYg
Z19naWdhY2FnZUNvbmZpZy50b3RhbFNpemU7CisgICAgcmV0dXJuIGlzRW5hYmxlZDsKK30KKwor
dm9pZCBmb3JiaWREaXNhYmxpbmdQcmltaXRpdmVHaWdhY2FnZSgpCit7CisgICAgZW5zdXJlR2ln
YWNhZ2UoKTsKKyAgICBSRUxFQVNFX0JBU1NFUlQoZ19naWdhY2FnZUNvbmZpZy5zaG91bGRCZUVu
YWJsZWRIYXNCZWVuQ2FsbGVkCisgICAgICAgICYmIChHSUdBQ0FHRV9BTExPQ0FUSU9OX0NBTl9G
QUlMIHx8ICFnX2dpZ2FjYWdlQ29uZmlnLnNob3VsZEJlRW5hYmxlZCB8fCB2ZXJpZnlHaWdhY2Fn
ZUlzRW5hYmxlZCgpKSk7CisKKyAgICBpZiAoIWdfZ2lnYWNhZ2VDb25maWcuZGlzYWJsaW5nUHJp
bWl0aXZlR2lnYWNhZ2VJc0ZvcmJpZGRlbikKKyAgICAgICAgZ19naWdhY2FnZUNvbmZpZy5kaXNh
YmxpbmdQcmltaXRpdmVHaWdhY2FnZUlzRm9yYmlkZGVuID0gdHJ1ZTsKKyAgICBSRUxFQVNFX0JB
U1NFUlQoZGlzYWJsaW5nUHJpbWl0aXZlR2lnYWNhZ2VJc0ZvcmJpZGRlbigpKTsKK30KKworYm9v
bCBzaG91bGRCZUVuYWJsZWQoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlRmxh
ZzsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZUZsYWcsCisgICAgICAgIFtdIHsK
KyAgICAgICAgICAgIFJFTEVBU0VfQkFTU0VSVCghZ19naWdhY2FnZUNvbmZpZy5zaG91bGRCZUVu
YWJsZWRIYXNCZWVuQ2FsbGVkKTsKKyAgICAgICAgICAgIGdfZ2lnYWNhZ2VDb25maWcuc2hvdWxk
QmVFbmFibGVkSGFzQmVlbkNhbGxlZCA9IHRydWU7CisKKyAgICAgICAgICAgIGJvb2wgZGVidWdI
ZWFwRW5hYmxlZCA9IEVudmlyb25tZW50OjpnZXQoKS0+aXNEZWJ1Z0hlYXBFbmFibGVkKCk7Cisg
ICAgICAgICAgICBpZiAoZGVidWdIZWFwRW5hYmxlZCkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgIGlmICghZ2lnYWNhZ2VFbmFibGVkRm9yUHJvY2VzcygpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGNoYXIqIGdp
Z2FjYWdlRW5hYmxlZCA9IGdldGVudigiR0lHQUNBR0VfRU5BQkxFRCIpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFzdHJjYXNlY21wKGdpZ2FjYWdlRW5hYmxlZCwgIm5vIikgfHwgIXN0cmNhc2Vj
bXAoZ2lnYWNhZ2VFbmFibGVkLCAiZmFsc2UiKSB8fCAhc3RyY2FzZWNtcChnaWdhY2FnZUVuYWJs
ZWQsICIwIikpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5n
OiBkaXNhYmxpbmcgZ2lnYWNhZ2UgYmVjYXVzZSBHSUdBQ0FHRV9FTkFCTEVEPSVzIVxuIiwgZ2ln
YWNhZ2VFbmFibGVkKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoc3RyY2FzZWNtcChnaWdhY2FnZUVuYWJsZWQsICJ5ZXMiKSAmJiBzdHJj
YXNlY21wKGdpZ2FjYWdlRW5hYmxlZCwgInRydWUiKSAmJiBzdHJjYXNlY21wKGdpZ2FjYWdlRW5h
YmxlZCwgIjEiKSkKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5n
OiBpbnZhbGlkIGFyZ3VtZW50IHRvIEdJR0FDQUdFX0VOQUJMRUQ6ICVzXG4iLCBnaWdhY2FnZUVu
YWJsZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBnX2dpZ2Fj
YWdlQ29uZmlnLnNob3VsZEJlRW5hYmxlZCA9IHRydWU7CisgICAgICAgIH0pOworICAgIHJldHVy
biBnX2dpZ2FjYWdlQ29uZmlnLnNob3VsZEJlRW5hYmxlZDsKK30KKworc2l6ZV90IHNpemUoS2lu
ZCBraW5kKQoreworICAgIHJldHVybiBQZXJQcm9jZXNzPFBlckhlYXBLaW5kPEhlYXA+Pjo6Z2V0
KCktPmF0KGhlYXBLaW5kKGtpbmQpKS5naWdhY2FnZVNpemUoKTsKK30KKworc2l6ZV90IGZvb3Rw
cmludChLaW5kIGtpbmQpCit7CisgICAgcmV0dXJuIFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVh
cD4+OjpnZXQoKS0+YXQoaGVhcEtpbmQoa2luZCkpLmZvb3RwcmludCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBHaWdhY2FnZQorCisjZW5kaWYgLy8gR0lHQUNBR0VfRU5BQkxFRApkaWZmIC0tZ2l0
IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9EZWJ1Z0hlYXAuY3BwIGIvU291cmNlL2JtYWxsb2Mv
Ym1hbGxvYy9EZWJ1Z0hlYXAuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlODlh
NDI3NTNiYzJjMzQwZDQ5MGUyMTAyZWNkYmQwYjQxNWVjMTk4Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvRGVidWdI
ZWFwLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE2NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDE2LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAot
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgIkRlYnVnSGVhcC5o
IgotCi0jaW5jbHVkZSAiQWxnb3JpdGhtLmgiCi0jaW5jbHVkZSAiQkFzc2VydC5oIgotI2luY2x1
ZGUgIkJQbGF0Zm9ybS5oIgotI2luY2x1ZGUgIlZNQWxsb2NhdGUuaCIKLSNpbmNsdWRlIDxjc3Rk
bGliPgotI2luY2x1ZGUgPHRocmVhZD4KLQotbmFtZXNwYWNlIGJtYWxsb2MgewotCi1EZWJ1Z0hl
YXAqIGRlYnVnSGVhcENhY2hlIHsgbnVsbHB0ciB9OwotICAgIAotREVGSU5FX1NUQVRJQ19QRVJf
UFJPQ0VTU19TVE9SQUdFKERlYnVnSGVhcCk7Ci0KLSNpZiBCT1MoREFSV0lOKQotCi1EZWJ1Z0hl
YXA6OkRlYnVnSGVhcChjb25zdCBMb2NrSG9sZGVyJikKLSAgICA6IG1fem9uZShtYWxsb2NfY3Jl
YXRlX3pvbmUoMCwgMCkpCi0gICAgLCBtX3BhZ2VTaXplKHZtUGFnZVNpemUoKSkKLXsKLSAgICBt
YWxsb2Nfc2V0X3pvbmVfbmFtZShtX3pvbmUsICJXZWJLaXQgVXNpbmcgU3lzdGVtIE1hbGxvYyIp
OwotfQotCi12b2lkKiBEZWJ1Z0hlYXA6Om1hbGxvYyhzaXplX3Qgc2l6ZSwgRmFpbHVyZUFjdGlv
biBhY3Rpb24pCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gbWFsbG9jX3pvbmVfbWFsbG9jKG1fem9u
ZSwgc2l6ZSk7Ci0gICAgUkVMRUFTRV9CQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpS
ZXR1cm5OdWxsIHx8IHJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCogRGVi
dWdIZWFwOjptZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3Qgc2l6ZSwgRmFpbHVyZUFj
dGlvbiBhY3Rpb24pCi17Ci0gICAgdm9pZCogcmVzdWx0ID0gbWFsbG9jX3pvbmVfbWVtYWxpZ24o
bV96b25lLCBhbGlnbm1lbnQsIHNpemUpOwotICAgIFJFTEVBU0VfQkFTU0VSVChhY3Rpb24gPT0g
RmFpbHVyZUFjdGlvbjo6UmV0dXJuTnVsbCB8fCByZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLXZvaWQqIERlYnVnSGVhcDo6cmVhbGxvYyh2b2lkKiBvYmplY3QsIHNpemVfdCBzaXpl
LCBGYWlsdXJlQWN0aW9uIGFjdGlvbikKLXsKLSAgICB2b2lkKiByZXN1bHQgPSBtYWxsb2Nfem9u
ZV9yZWFsbG9jKG1fem9uZSwgb2JqZWN0LCBzaXplKTsKLSAgICBSRUxFQVNFX0JBU1NFUlQoYWN0
aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwgfHwgcmVzdWx0KTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi12b2lkIERlYnVnSGVhcDo6ZnJlZSh2b2lkKiBvYmplY3QpCi17Ci0gICAg
bWFsbG9jX3pvbmVfZnJlZShtX3pvbmUsIG9iamVjdCk7Ci19Ci0KLXZvaWQgRGVidWdIZWFwOjpz
Y2F2ZW5nZSgpCi17Ci0gICAgLy8gQ3VycmVudGx5IHxnb2FsfCBkb2VzIG5vdCBhZmZlY3Qgb24g
dGhlIGJlaGF2aW9yIG9mIG1hbGxvY196b25lX3ByZXNzdXJlX3JlbGllZiBpZiAoMSkgd2Ugb25s
eSBzY2F2ZW5nZSBvbmUgem9uZSBhbmQgKDIpIGl0IGlzIG5vdCBuYW5vbWFsbG9jLgotICAgIGNv
bnN0ZXhwciBzaXplX3QgZ29hbCA9IDA7Ci0gICAgbWFsbG9jX3pvbmVfcHJlc3N1cmVfcmVsaWVm
KG1fem9uZSwgZ29hbCk7Ci19Ci0KLXZvaWQgRGVidWdIZWFwOjpkdW1wKCkKLXsKLSAgICBjb25z
dGV4cHIgYm9vbCB2ZXJib3NlID0gdHJ1ZTsKLSAgICBtYWxsb2Nfem9uZV9wcmludChtX3pvbmUs
IHZlcmJvc2UpOwotfQotCi0jZWxzZQotCi1EZWJ1Z0hlYXA6OkRlYnVnSGVhcChjb25zdCBMb2Nr
SG9sZGVyJikKLSAgICA6IG1fcGFnZVNpemUodm1QYWdlU2l6ZSgpKQotewotfQotCi12b2lkKiBE
ZWJ1Z0hlYXA6Om1hbGxvYyhzaXplX3Qgc2l6ZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCi17Ci0g
ICAgdm9pZCogcmVzdWx0ID0gOjptYWxsb2Moc2l6ZSk7Ci0gICAgUkVMRUFTRV9CQVNTRVJUKGFj
dGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8IHJlc3VsdCk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotdm9pZCogRGVidWdIZWFwOjptZW1hbGlnbihzaXplX3QgYWxpZ25tZW50
LCBzaXplX3Qgc2l6ZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCi17Ci0gICAgdm9pZCogcmVzdWx0
OwotICAgIGlmIChwb3NpeF9tZW1hbGlnbigmcmVzdWx0LCBhbGlnbm1lbnQsIHNpemUpKQotICAg
ICAgICBSRUxFQVNFX0JBU1NFUlQoYWN0aW9uID09IEZhaWx1cmVBY3Rpb246OlJldHVybk51bGwg
fHwgcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi12b2lkKiBEZWJ1Z0hlYXA6OnJl
YWxsb2Modm9pZCogb2JqZWN0LCBzaXplX3Qgc2l6ZSwgRmFpbHVyZUFjdGlvbiBhY3Rpb24pCi17
Ci0gICAgdm9pZCogcmVzdWx0ID0gOjpyZWFsbG9jKG9iamVjdCwgc2l6ZSk7Ci0gICAgUkVMRUFT
RV9CQVNTRVJUKGFjdGlvbiA9PSBGYWlsdXJlQWN0aW9uOjpSZXR1cm5OdWxsIHx8IHJlc3VsdCk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotdm9pZCBEZWJ1Z0hlYXA6OmZyZWUodm9pZCogb2Jq
ZWN0KQotewotICAgIDo6ZnJlZShvYmplY3QpOwotfQotCi12b2lkIERlYnVnSGVhcDo6c2NhdmVu
Z2UoKQotewotfQotCi12b2lkIERlYnVnSGVhcDo6ZHVtcCgpCi17Ci19Ci0KLSNlbmRpZgotCi0v
LyBGSVhNRTogVGhpcyBsb29rcyBhbiBhd2Z1bCBsb3QgbGlrZSB0aGUgY29kZSBpbiB3dGYvR2ln
YWNhZ2UuY3BwIGZvciBsYXJnZSBhbGxvY2F0aW9uLgotLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE3NTA4NgotCi12b2lkKiBEZWJ1Z0hlYXA6Om1lbWFsaWduTGFy
Z2Uoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IHNpemUpCi17Ci0gICAgYWxpZ25tZW50ID0gcm91
bmRVcFRvTXVsdGlwbGVPZihtX3BhZ2VTaXplLCBhbGlnbm1lbnQpOwotICAgIHNpemUgPSByb3Vu
ZFVwVG9NdWx0aXBsZU9mKG1fcGFnZVNpemUsIHNpemUpOwotICAgIHZvaWQqIHJlc3VsdCA9IHRy
eVZNQWxsb2NhdGUoYWxpZ25tZW50LCBzaXplKTsKLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtdXRleCgp
KTsKLSAgICAgICAgbV9zaXplTWFwW3Jlc3VsdF0gPSBzaXplOwotICAgIH0KLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi12b2lkIERlYnVnSGVhcDo6ZnJlZUxhcmdlKHZvaWQqIGJhc2UpCi17Ci0g
ICAgaWYgKCFiYXNlKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgc2l6ZV90IHNpemU7Ci0g
ICAgewotICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtdXRleCgpKTsKLSAgICAgICAgc2l6ZSA9
IG1fc2l6ZU1hcFtiYXNlXTsKLSAgICAgICAgc2l6ZV90IG51bUVyYXNlZCA9IG1fc2l6ZU1hcC5l
cmFzZShiYXNlKTsKLSAgICAgICAgUkVMRUFTRV9CQVNTRVJUKG51bUVyYXNlZCA9PSAxKTsKLSAg
ICB9Ci0gICAgCi0gICAgdm1EZWFsbG9jYXRlKGJhc2UsIHNpemUpOwotfQotCi19IC8vIG5hbWVz
cGFjZSBibWFsbG9jCmRpZmYgLS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0dpZ2FjYWdl
LmNwcCBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAxYTM5OGRiMGRjZDhiYmMzMGUyYTY5NmIzZTNmZTM2OWRjOTZmYzM0
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9i
bWFsbG9jL2JtYWxsb2MvR2lnYWNhZ2UuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzAxICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0g
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0j
aW5jbHVkZSAiR2lnYWNhZ2UuaCIKLQotI2luY2x1ZGUgIkNyeXB0b1JhbmRvbS5oIgotI2luY2x1
ZGUgIkVudmlyb25tZW50LmgiCi0jaW5jbHVkZSAiTXV0ZXguaCIKLSNpbmNsdWRlICJQcm9jZXNz
Q2hlY2suaCIKLSNpbmNsdWRlICJTdGF0aWNQZXJQcm9jZXNzLmgiCi0jaW5jbHVkZSAiVk1BbGxv
Y2F0ZS5oIgotI2luY2x1ZGUgIlZlY3Rvci5oIgotI2luY2x1ZGUgImJtYWxsb2MuaCIKLSNpbmNs
dWRlIDxjc3RkaW8+Ci0KLSNpZiBCT1MoREFSV0lOKQotI2luY2x1ZGUgPG1hY2gvbWFjaC5oPgot
I2VuZGlmCi0KLSNpZiBHSUdBQ0FHRV9FTkFCTEVECi0KLW5hbWVzcGFjZSBHaWdhY2FnZSB7Ci0K
LSNpZiAhQkVOQUJMRShVTklGSUVEX0FORF9GUkVFWkFCTEVfQ09ORklHX1JFQ09SRCkKLUNvbmZp
ZyBnX2dpZ2FjYWdlQ29uZmlnOwotI2VuZGlmCi0KLXN0cnVjdCBDYWxsYmFjayB7Ci0gICAgQ2Fs
bGJhY2soKSB7IH0KLSAgICAKLSAgICBDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSwg
dm9pZCAqYXJndW1lbnQpCi0gICAgICAgIDogZnVuY3Rpb24oZnVuY3Rpb24pCi0gICAgICAgICwg
YXJndW1lbnQoYXJndW1lbnQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2b2lkICgqZnVuY3Rp
b24pKHZvaWQqKSB7IG51bGxwdHIgfTsKLSAgICB2b2lkKiBhcmd1bWVudCB7IG51bGxwdHIgfTsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIEdpZ2FjYWdlCi0KLW5hbWVzcGFjZSBibWFsbG9jIHsKLQot
c3RydWN0IFByaW1pdGl2ZURpc2FibGVDYWxsYmFja3MgOiBwdWJsaWMgU3RhdGljUGVyUHJvY2Vz
czxQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzPiB7Ci0gICAgUHJpbWl0aXZlRGlzYWJsZUNhbGxi
YWNrcyhjb25zdCBMb2NrSG9sZGVyJikgeyB9Ci0gICAgCi0gICAgVmVjdG9yPEdpZ2FjYWdlOjpD
YWxsYmFjaz4gY2FsbGJhY2tzOwotfTsKLURFQ0xBUkVfU1RBVElDX1BFUl9QUk9DRVNTX1NUT1JB
R0UoUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyk7Ci1ERUZJTkVfU1RBVElDX1BFUl9QUk9DRVNT
X1NUT1JBR0UoUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrcyk7Ci0KLX0gLy8gbmFtZXNwYWNlIGJt
YWxsb2MKLQotbmFtZXNwYWNlIEdpZ2FjYWdlIHsKLQotLy8gVGhpcyBpcyBleGFjdGx5IDMyR0Ig
YmVjYXVzZSBpbnNpZGUgSlNDLCBpbmRleGVkIGFjY2Vzc2VzIGZvciBhcnJheXMsIHR5cGVkIGFy
cmF5cywgZXRjLAotLy8gdXNlIHVuc2lnbmVkIDMyLWJpdCBpbnRzIGFzIGluZGljZXMuIFRoZSBp
dGVtcyB0aG9zZSBpbmRpY2VzIGFjY2VzcyBhcmUgOCBieXRlcyBvciBsZXNzCi0vLyBpbiBzaXpl
LiAyXjMyICogOCA9IDMyR0IuIFRoaXMgbWVhbnMgaWYgYW4gYWNjZXNzIG9uIGEgY2FnZWQgdHlw
ZSBoYXBwZW5zIHRvIGdvIG91dCBvZgotLy8gYm91bmRzLCB0aGUgYWNjZXNzIGlzIGd1YXJhbnRl
ZWQgdG8gbGFuZCBzb21ld2hlcmUgZWxzZSBpbiB0aGUgY2FnZSBvciBpbnNpZGUgdGhlIHJ1bndh
eS4KLS8vIElmIHRoaXMgd2VyZSBsZXNzIHRoYW4gMzJHQiwgdGhvc2UgT09CIGFjY2Vzc2VzIGNv
dWxkIHJlYWNoIG91dHNpZGUgb2YgdGhlIGNhZ2UuCi1jb25zdGV4cHIgc2l6ZV90IGdpZ2FjYWdl
UnVud2F5ID0gMzJsbHUgKiBibWFsbG9jOjpTaXplczo6R0I7Ci0KLWJvb2wgZGlzYWJsZVByaW1p
dGl2ZUdpZ2FjYWdlUmVxdWVzdGVkID0gZmFsc2U7Ci0KLXVzaW5nIG5hbWVzcGFjZSBibWFsbG9j
OwotCi1uYW1lc3BhY2UgewotCi1zaXplX3QgcnVud2F5U2l6ZShLaW5kIGtpbmQpCi17Ci0gICAg
c3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBLaW5kOjpQcmltaXRpdmU6Ci0gICAgICAgIHJldHVy
biBnaWdhY2FnZVJ1bndheTsKLSAgICBjYXNlIEtpbmQ6OkpTVmFsdWU6Ci0gICAgICAgIHJldHVy
biAwOwotICAgIGNhc2UgS2luZDo6TnVtYmVyT2ZLaW5kczoKLSAgICAgICAgUkVMRUFTRV9CQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi19IC8vIGFub255
bW91cyBuYW1lc3BhY2UKLQotdm9pZCBlbnN1cmVHaWdhY2FnZSgpCi17Ci0gICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKAotICAgICAgICBvbmNl
RmxhZywKLSAgICAgICAgW10gewotICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKCFnX2dpZ2Fj
YWdlQ29uZmlnLmVuc3VyZUdpZ2FjYWdlSGFzQmVlbkNhbGxlZCk7Ci0gICAgICAgICAgICBnX2dp
Z2FjYWdlQ29uZmlnLmVuc3VyZUdpZ2FjYWdlSGFzQmVlbkNhbGxlZCA9IHRydWU7Ci0KLSAgICAg
ICAgICAgIGlmICghc2hvdWxkQmVFbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
Ci0jaWYgQkVOQUJMRShVTklGSUVEX0FORF9GUkVFWkFCTEVfQ09ORklHX1JFQ09SRCkKLSAgICAg
ICAgICAgIC8vIFdlIG1pZ2h0IG9ubHkgZ2V0IHBhZ2Ugc2l6ZSBhbGlnbm1lbnQsIGJ1dCB0aGF0
J3MgYWxzbyB0aGUgbWluaW11bQotICAgICAgICAgICAgLy8gYWxpZ25tZW50IHdlIG5lZWQgZm9y
IGZyZWV6aW5nIHRoZSBDb25maWcuCi0gICAgICAgICAgICBSRUxFQVNFX0JBU1NFUlQoIShyZWlu
dGVycHJldF9jYXN0PHNpemVfdD4oJmdfZ2lnYWNhZ2VDb25maWcpICYgKHZtUGFnZVNpemUoKSAt
IDEpKSk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgS2luZCBzaHVmZmxlZEtpbmRzW051bWJlck9m
S2luZHNdOwotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IE51bWJlck9mS2lu
ZHM7ICsraSkKLSAgICAgICAgICAgICAgICBzaHVmZmxlZEtpbmRzW2ldID0gc3RhdGljX2Nhc3Q8
S2luZD4oaSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFdlIGp1c3QgZ28gYWhlYWQg
YW5kIGFzc3VtZSB0aGF0IDY0IGJpdHMgaXMgZW5vdWdoIHJhbmRvbW5lc3MuIFRoYXQncyB0cml2
aWFsbHkgdHJ1ZSByaWdodAotICAgICAgICAgICAgLy8gbm93LCBidXQgd291bGQgc3RvcCBiZWlu
ZyB0cnVlIGlmIHdlIHdlbnQgY3Jhenkgd2l0aCBnaWdhY2FnZXMuIEJhc2VkIG9uIG15IG1hdGgs
IDIxIGlzIHRoZQotICAgICAgICAgICAgLy8gbGFyZ2VzdCB2YWx1ZSBvZiBuIHNvIHRoYXQgbiEg
PD0gMl42NC4KLSAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoTnVtYmVyT2ZLaW5kcyA8PSAyMSwg
InRvbyBtYW55IGtpbmRzIik7Ci0gICAgICAgICAgICB1aW50NjRfdCByYW5kb207Ci0gICAgICAg
ICAgICBjcnlwdG9SYW5kb20ocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4oJnJhbmRv
bSksIHNpemVvZihyYW5kb20pKTsKLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IE51bWJl
ck9mS2luZHM7IGktLTspIHsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsaW1pdCA9IGkgKyAx
OwotICAgICAgICAgICAgICAgIHVuc2lnbmVkIGogPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmFu
ZG9tICUgbGltaXQpOwotICAgICAgICAgICAgICAgIHJhbmRvbSAvPSBsaW1pdDsKLSAgICAgICAg
ICAgICAgICBzdGQ6OnN3YXAoc2h1ZmZsZWRLaW5kc1tpXSwgc2h1ZmZsZWRLaW5kc1tqXSk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGF1dG8gYWxpZ25UbyA9IFtdIChLaW5kIGtpbmQs
IHNpemVfdCB0b3RhbFNpemUpIC0+IHNpemVfdCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJv
dW5kVXBUb011bHRpcGxlT2YoYWxpZ25tZW50KGtpbmQpLCB0b3RhbFNpemUpOwotICAgICAgICAg
ICAgfTsKLSAgICAgICAgICAgIGF1dG8gYnVtcCA9IFtdIChLaW5kIGtpbmQsIHNpemVfdCB0b3Rh
bFNpemUpIC0+IHNpemVfdCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRvdGFsU2l6ZSArIG1h
eFNpemUoa2luZCk7Ci0gICAgICAgICAgICB9OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBz
aXplX3QgdG90YWxTaXplID0gMDsKLSAgICAgICAgICAgIHNpemVfdCBtYXhBbGlnbm1lbnQgPSAw
OwotICAgICAgICAgICAgCi0gICAgICAgICAgICBmb3IgKEtpbmQga2luZCA6IHNodWZmbGVkS2lu
ZHMpIHsKLSAgICAgICAgICAgICAgICB0b3RhbFNpemUgPSBidW1wKGtpbmQsIGFsaWduVG8oa2lu
ZCwgdG90YWxTaXplKSk7Ci0gICAgICAgICAgICAgICAgdG90YWxTaXplICs9IHJ1bndheVNpemUo
a2luZCk7Ci0gICAgICAgICAgICAgICAgbWF4QWxpZ25tZW50ID0gc3RkOjptYXgobWF4QWxpZ25t
ZW50LCBhbGlnbm1lbnQoa2luZCkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBG
SVhNRTogUmFuZG9taXplIHdoZXJlIHRoaXMgZ29lcy4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzUyNDUKLSAgICAgICAgICAgIHZvaWQq
IGJhc2UgPSB0cnlWTUFsbG9jYXRlKG1heEFsaWdubWVudCwgdG90YWxTaXplLCBWTVRhZzo6SlNH
aWdhY2FnZSk7Ci0gICAgICAgICAgICBpZiAoIWJhc2UpIHsKLSAgICAgICAgICAgICAgICBpZiAo
R0lHQUNBR0VfQUxMT0NBVElPTl9DQU5fRkFJTCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRkFUQUw6IENvdWxkIG5vdCBhbGxv
Y2F0ZSBnaWdhY2FnZSBtZW1vcnkgd2l0aCBtYXhBbGlnbm1lbnQgPSAlbHUsIHRvdGFsU2l6ZSA9
ICVsdS5cbiIsIG1heEFsaWdubWVudCwgdG90YWxTaXplKTsKLSAgICAgICAgICAgICAgICBmcHJp
bnRmKHN0ZGVyciwgIihNYWtlIHN1cmUgeW91IGhhdmUgbm90IHNldCBhIHZpcnR1YWwgbWVtb3J5
IGxpbWl0LilcbiIpOwotICAgICAgICAgICAgICAgIEJDUkFTSCgpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBzaXplX3QgbmV4dENhZ2UgPSAwOwotICAgICAgICAgICAgZm9yIChLaW5k
IGtpbmQgOiBzaHVmZmxlZEtpbmRzKSB7Ci0gICAgICAgICAgICAgICAgbmV4dENhZ2UgPSBhbGln
blRvKGtpbmQsIG5leHRDYWdlKTsKLSAgICAgICAgICAgICAgICBnX2dpZ2FjYWdlQ29uZmlnLnNl
dEJhc2VQdHIoa2luZCwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmFzZSkgKyBuZXh0Q2FnZSk7
Ci0gICAgICAgICAgICAgICAgbmV4dENhZ2UgPSBidW1wKGtpbmQsIG5leHRDYWdlKTsKLSAgICAg
ICAgICAgICAgICBpZiAocnVud2F5U2l6ZShraW5kKSA+IDApIHsKLSAgICAgICAgICAgICAgICAg
ICAgY2hhciogcnVud2F5ID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oYmFzZSkgKyBuZXh0Q2Fn
ZTsKLSAgICAgICAgICAgICAgICAgICAgLy8gTWFrZSBPT0IgYWNjZXNzZXMgaW50byB0aGUgcnVu
d2F5IGNyYXNoLgotICAgICAgICAgICAgICAgICAgICB2bVJldm9rZVBlcm1pc3Npb25zKHJ1bndh
eSwgcnVud2F5U2l6ZShraW5kKSk7Ci0gICAgICAgICAgICAgICAgICAgIG5leHRDYWdlICs9IHJ1
bndheVNpemUoa2luZCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBnX2dpZ2FjYWdlQ29uZmlnLnN0YXJ0ID0gYmFzZTsKLSAgICAgICAgICAgIGdfZ2ln
YWNhZ2VDb25maWcudG90YWxTaXplID0gdG90YWxTaXplOwotICAgICAgICAgICAgdm1EZWFsbG9j
YXRlUGh5c2ljYWxQYWdlcyhiYXNlLCB0b3RhbFNpemUpOwotICAgICAgICAgICAgZ19naWdhY2Fn
ZUNvbmZpZy5pc0VuYWJsZWQgPSB0cnVlOwotICAgICAgICB9KTsKLX0KLQotdm9pZCBkaXNhYmxl
UHJpbWl0aXZlR2lnYWNhZ2UoKQotewotICAgIGlmIChnX2dpZ2FjYWdlQ29uZmlnLmRpc2FibGlu
Z1ByaW1pdGl2ZUdpZ2FjYWdlSXNGb3JiaWRkZW4pCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAi
RkFUQUw6IERpc2FibGluZyBQcmltaXRpdmUgZ2lnYWNhZ2UgaXMgZm9yYmlkZGVuLCBidXQgd2Ug
ZG9uJ3Qgd2FudCB0aGF0IGluIHRoaXMgcHJvY2Vzcy5cbiIpOwotCi0gICAgUkVMRUFTRV9CQVNT
RVJUKCFnX2dpZ2FjYWdlQ29uZmlnLmRpc2FibGluZ1ByaW1pdGl2ZUdpZ2FjYWdlSXNGb3JiaWRk
ZW4pOwotCi0gICAgZW5zdXJlR2lnYWNhZ2UoKTsKLSAgICBkaXNhYmxlUHJpbWl0aXZlR2lnYWNh
Z2VSZXF1ZXN0ZWQgPSB0cnVlOwotICAgIGlmICghZ19naWdhY2FnZUNvbmZpZy5iYXNlUHRyc1tQ
cmltaXRpdmVdKSB7Ci0gICAgICAgIC8vIEl0IHdhcyBuZXZlciBlbmFibGVkLiBUaGF0IG1lYW5z
IHRoYXQgd2UgbmV2ZXIgZXZlbiBzYXZlZCBhbnkgY2FsbGJhY2tzLiBPciwgd2UgaGFkIGFscmVh
ZHkgZGlzYWJsZWQKLSAgICAgICAgLy8gaXQgYmVmb3JlLCBhbmQgYWxyZWFkeSBjYWxsZWQgdGhl
IGNhbGxiYWNrcy4KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBQcmltaXRpdmVE
aXNhYmxlQ2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrczo6
Z2V0KCk7Ci0gICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKFByaW1pdGl2ZURpc2FibGVDYWxsYmFj
a3M6Om11dGV4KCkpOwotICAgIGZvciAoQ2FsbGJhY2smIGNhbGxiYWNrIDogY2FsbGJhY2tzLmNh
bGxiYWNrcykKLSAgICAgICAgY2FsbGJhY2suZnVuY3Rpb24oY2FsbGJhY2suYXJndW1lbnQpOwot
ICAgIGNhbGxiYWNrcy5jYWxsYmFja3Muc2hyaW5rKDApOwotfQotCi12b2lkIGFkZFByaW1pdGl2
ZURpc2FibGVDYWxsYmFjayh2b2lkICgqZnVuY3Rpb24pKHZvaWQqKSwgdm9pZCogYXJndW1lbnQp
Ci17Ci0gICAgZW5zdXJlR2lnYWNhZ2UoKTsKLSAgICBpZiAoIWdfZ2lnYWNhZ2VDb25maWcuYmFz
ZVB0cnNbUHJpbWl0aXZlXSkgewotICAgICAgICAvLyBJdCB3YXMgYWxyZWFkeSBkaXNhYmxlZCBv
ciB3ZSB3ZXJlIG5ldmVyIGFibGUgdG8gZW5hYmxlIGl0LgotICAgICAgICBmdW5jdGlvbihhcmd1
bWVudCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgUHJpbWl0aXZlRGlzYWJs
ZUNhbGxiYWNrcyYgY2FsbGJhY2tzID0gKlByaW1pdGl2ZURpc2FibGVDYWxsYmFja3M6OmdldCgp
OwotICAgIFVuaXF1ZUxvY2tIb2xkZXIgbG9jayhQcmltaXRpdmVEaXNhYmxlQ2FsbGJhY2tzOjpt
dXRleCgpKTsKLSAgICBjYWxsYmFja3MuY2FsbGJhY2tzLnB1c2goQ2FsbGJhY2soZnVuY3Rpb24s
IGFyZ3VtZW50KSk7Ci19Ci0KLXZvaWQgcmVtb3ZlUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrKHZv
aWQgKCpmdW5jdGlvbikodm9pZCopLCB2b2lkKiBhcmd1bWVudCkKLXsKLSAgICBQcmltaXRpdmVE
aXNhYmxlQ2FsbGJhY2tzJiBjYWxsYmFja3MgPSAqUHJpbWl0aXZlRGlzYWJsZUNhbGxiYWNrczo6
Z2V0KCk7Ci0gICAgVW5pcXVlTG9ja0hvbGRlciBsb2NrKFByaW1pdGl2ZURpc2FibGVDYWxsYmFj
a3M6Om11dGV4KCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmNhbGxi
YWNrcy5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoY2FsbGJhY2tzLmNhbGxiYWNrc1tpXS5m
dW5jdGlvbiA9PSBmdW5jdGlvbgotICAgICAgICAgICAgJiYgY2FsbGJhY2tzLmNhbGxiYWNrc1tp
XS5hcmd1bWVudCA9PSBhcmd1bWVudCkgewotICAgICAgICAgICAgY2FsbGJhY2tzLmNhbGxiYWNr
c1tpXSA9IGNhbGxiYWNrcy5jYWxsYmFja3MubGFzdCgpOwotICAgICAgICAgICAgY2FsbGJhY2tz
LmNhbGxiYWNrcy5wb3AoKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0K
LX0KLQotc3RhdGljIGJvb2wgdmVyaWZ5R2lnYWNhZ2VJc0VuYWJsZWQoKQotewotICAgIGJvb2wg
aXNFbmFibGVkID0gZ19naWdhY2FnZUNvbmZpZy5pc0VuYWJsZWQ7Ci0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBOdW1iZXJPZktpbmRzOyArK2kpCi0gICAgICAgIGlzRW5hYmxlZCA9IGlzRW5h
YmxlZCAmJiBnX2dpZ2FjYWdlQ29uZmlnLmJhc2VQdHJzW2ldOwotICAgIGlzRW5hYmxlZCA9IGlz
RW5hYmxlZCAmJiBnX2dpZ2FjYWdlQ29uZmlnLnN0YXJ0OwotICAgIGlzRW5hYmxlZCA9IGlzRW5h
YmxlZCAmJiBnX2dpZ2FjYWdlQ29uZmlnLnRvdGFsU2l6ZTsKLSAgICByZXR1cm4gaXNFbmFibGVk
OwotfQotCi12b2lkIGZvcmJpZERpc2FibGluZ1ByaW1pdGl2ZUdpZ2FjYWdlKCkKLXsKLSAgICBl
bnN1cmVHaWdhY2FnZSgpOwotICAgIFJFTEVBU0VfQkFTU0VSVChnX2dpZ2FjYWdlQ29uZmlnLnNo
b3VsZEJlRW5hYmxlZEhhc0JlZW5DYWxsZWQKLSAgICAgICAgJiYgKEdJR0FDQUdFX0FMTE9DQVRJ
T05fQ0FOX0ZBSUwgfHwgIWdfZ2lnYWNhZ2VDb25maWcuc2hvdWxkQmVFbmFibGVkIHx8IHZlcmlm
eUdpZ2FjYWdlSXNFbmFibGVkKCkpKTsKLQotICAgIGlmICghZ19naWdhY2FnZUNvbmZpZy5kaXNh
YmxpbmdQcmltaXRpdmVHaWdhY2FnZUlzRm9yYmlkZGVuKQotICAgICAgICBnX2dpZ2FjYWdlQ29u
ZmlnLmRpc2FibGluZ1ByaW1pdGl2ZUdpZ2FjYWdlSXNGb3JiaWRkZW4gPSB0cnVlOwotICAgIFJF
TEVBU0VfQkFTU0VSVChkaXNhYmxpbmdQcmltaXRpdmVHaWdhY2FnZUlzRm9yYmlkZGVuKCkpOwot
fQotCi1ib29sIHNob3VsZEJlRW5hYmxlZCgpCi17Ci0gICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2VGbGFnOwotICAgIHN0ZDo6Y2FsbF9vbmNlKAotICAgICAgICBvbmNlRmxhZywKLSAgICAg
ICAgW10gewotICAgICAgICAgICAgUkVMRUFTRV9CQVNTRVJUKCFnX2dpZ2FjYWdlQ29uZmlnLnNo
b3VsZEJlRW5hYmxlZEhhc0JlZW5DYWxsZWQpOwotICAgICAgICAgICAgZ19naWdhY2FnZUNvbmZp
Zy5zaG91bGRCZUVuYWJsZWRIYXNCZWVuQ2FsbGVkID0gdHJ1ZTsKLQotICAgICAgICAgICAgYm9v
bCBkZWJ1Z0hlYXBFbmFibGVkID0gRW52aXJvbm1lbnQ6OmdldCgpLT5pc0RlYnVnSGVhcEVuYWJs
ZWQoKTsKLSAgICAgICAgICAgIGlmIChkZWJ1Z0hlYXBFbmFibGVkKQotICAgICAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICAgICAgaWYgKCFnaWdhY2FnZUVuYWJsZWRGb3JQcm9jZXNzKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAo
Y2hhciogZ2lnYWNhZ2VFbmFibGVkID0gZ2V0ZW52KCJHSUdBQ0FHRV9FTkFCTEVEIikpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIXN0cmNhc2VjbXAoZ2lnYWNhZ2VFbmFibGVkLCAibm8iKSB8fCAh
c3RyY2FzZWNtcChnaWdhY2FnZUVuYWJsZWQsICJmYWxzZSIpIHx8ICFzdHJjYXNlY21wKGdpZ2Fj
YWdlRW5hYmxlZCwgIjAiKSkgewotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
Ildhcm5pbmc6IGRpc2FibGluZyBnaWdhY2FnZSBiZWNhdXNlIEdJR0FDQUdFX0VOQUJMRUQ9JXMh
XG4iLCBnaWdhY2FnZUVuYWJsZWQpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgfSBlbHNlIGlmIChzdHJjYXNlY21wKGdpZ2FjYWdlRW5hYmxlZCwgInllcyIp
ICYmIHN0cmNhc2VjbXAoZ2lnYWNhZ2VFbmFibGVkLCAidHJ1ZSIpICYmIHN0cmNhc2VjbXAoZ2ln
YWNhZ2VFbmFibGVkLCAiMSIpKQotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
Ildhcm5pbmc6IGludmFsaWQgYXJndW1lbnQgdG8gR0lHQUNBR0VfRU5BQkxFRDogJXNcbiIsIGdp
Z2FjYWdlRW5hYmxlZCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAg
IGdfZ2lnYWNhZ2VDb25maWcuc2hvdWxkQmVFbmFibGVkID0gdHJ1ZTsKLSAgICAgICAgfSk7Ci0g
ICAgcmV0dXJuIGdfZ2lnYWNhZ2VDb25maWcuc2hvdWxkQmVFbmFibGVkOwotfQotCi1zaXplX3Qg
c2l6ZShLaW5kIGtpbmQpCi17Ci0gICAgcmV0dXJuIFBlclByb2Nlc3M8UGVySGVhcEtpbmQ8SGVh
cD4+OjpnZXQoKS0+YXQoaGVhcEtpbmQoa2luZCkpLmdpZ2FjYWdlU2l6ZSgpOwotfQotCi1zaXpl
X3QgZm9vdHByaW50KEtpbmQga2luZCkKLXsKLSAgICByZXR1cm4gUGVyUHJvY2VzczxQZXJIZWFw
S2luZDxIZWFwPj46OmdldCgpLT5hdChoZWFwS2luZChraW5kKSkuZm9vdHByaW50KCk7Ci19Ci0K
LX0gLy8gbmFtZXNwYWNlIEdpZ2FjYWdlCi0KLSNlbmRpZiAvLyBHSUdBQ0FHRV9FTkFCTEVECg==
</data>
<flag name="review"
          id="447011"
          type_id="1"
          status="+"
          setter="ysuzuki"
    />
          </attachment>
      

    </bug>

</bugzilla>