<?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>130986</bug_id>
          
          <creation_ts>2014-03-31 13:57:02 -0700</creation_ts>
          <short_desc>Rename TileCache to LegacyTileCache</short_desc>
          <delta_ts>2014-04-05 06:35:03 -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>Layout and Rendering</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>995982</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-03-31 13:57:02 -0700</bug_when>
    <thetext>All the support classes too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995985</commentid>
    <comment_count>1</comment_count>
      <attachid>228201</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-03-31 14:01:47 -0700</bug_when>
    <thetext>Created attachment 228201
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>995987</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-31 14:03:04 -0700</bug_when>
    <thetext>Attachment 228201 did not pass style-queue:


ERROR: Source/WebCore/platform/ios/LegacyTileGridTile.h:26:  #ifndef header guard has wrong style, please use: LegacyTileGridTile_h  [build/header_guard] [5]
ERROR: Source/WebCore/platform/ios/wak/WAKWindow.h:43:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 2 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>996002</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-03-31 14:19:08 -0700</bug_when>
    <thetext>https://trac.webkit.org/r166529</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>997882</commentid>
    <comment_count>4</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2014-04-05 06:35:03 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; https://trac.webkit.org/r166529

Build fix for iOS:  &lt;http://trac.webkit.org/r166832&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>228201</attachid>
            <date>2014-03-31 14:01:47 -0700</date>
            <delta_ts>2014-03-31 14:05:55 -0700</delta_ts>
            <desc>patch</desc>
            <filename>legacy-tile-cache.patch</filename>
            <type>text/plain</type>
            <size>254313</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NjUyMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE0LTAzLTMxICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW5hbWUgVGlsZUNhY2hlIHRv
IExlZ2FjeVRpbGVDYWNoZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMwOTg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgUmVuYW1lIGlPUyBXZWJLaXQxIHRpbGUgY2FjaGUgY2xhc3NlcyB0byByZWZsZWN0
IGl0cyBzdGF0dXMuCisgICAgICAgIFRoaXMgYWxzbyBmcmVlcyBzb21lIGdvb2QgdHlwZSBuYW1l
cy4KKworICAgICAgICBUaWxlQ2FjaGUgLT4gTGVnYWN5VGlsZUNhY2hlCisgICAgICAgIFRpbGVH
cmlkIC0+IExlZ2FjeVRpbGVHcmlkCisgICAgICAgIFRpbGVHcmlkVGlsZSAtPiBMZWdhY3lUaWxl
R3JpZFRpbGUKKyAgICAgICAgZXRjLgorCiAyMDE0LTAzLTMxICBIYW5zIE11bGxlciAgPGhtdWxs
ZXJAYWRvYmUuY29tPgogCiAgICAgICAgIFtDU1MgU2hhcGVzXSBTaW1wbGlmeSBSYXN0ZXJTaGFw
ZSBpbXBsZW1lbnRhdGlvbgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDE2NjQ1
MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDc5LDYgKzI0NzksOCBAQCBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDE1ZHJhd05hdGl2
CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDIyc2V0RW1vamlEcmF3aW5nRW5hYmxlZEVi
CiBfX1pON1dlYkNvcmUxNUdyYXBoaWNzQ29udGV4dDIzc2V0SXNBY2NlbGVyYXRlZENvbnRleHRF
YgogX19aTjdXZWJDb3JlMTVHcmFwaGljc0NvbnRleHRDMUVQOUNHQ29udGV4dGIKK19fWk43V2Vi
Q29yZTE1TGVnYWN5VGlsZUNhY2hlMTRkcmFpbkxheWVyUG9vbEV2CitfX1pON1dlYkNvcmUxNUxl
Z2FjeVRpbGVDYWNoZTIwc2V0TGF5ZXJQb29sQ2FwYWNpdHlFagogX19aTjdXZWJDb3JlMTVRdWlj
a0xvb2tIYW5kbGUxMG5zUmVzcG9uc2VFdgogX19aTjdXZWJDb3JlMTVRdWlja0xvb2tIYW5kbGUx
NGRpZFJlY2VpdmVEYXRhRVBLOF9fQ0ZEYXRhCiBfX1pON1dlYkNvcmUxNVF1aWNrTG9va0hhbmRs
ZTE2ZGlkRmluaXNoTG9hZGluZ0V2CkBAIC0yNjMzLDggKzI2MzUsNiBAQCBfX1pON1dlYkNvcmU5
RnJhbWVWaWV3MzNyZWN0Rm9yVmlld3BvcnRDCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3MzVzZXRV
c2VDdXN0b21GaXhlZFBvc2l0aW9uTGF5b3V0UmVjdEViCiBfX1pON1dlYkNvcmU5RnJhbWVWaWV3
MzZzY2hlZHVsZUxheWVyRmx1c2hBbGxvd2luZ1Rocm90dGxpbmdFdgogX19aTjdXZWJDb3JlOVBh
Z2VHcm91cDE3cmVtb3ZlVmlzaXRlZExpbmtFUktOU18zVVJMRQotX19aTjdXZWJDb3JlOVRpbGVD
YWNoZTE0ZHJhaW5MYXllclBvb2xFdgotX19aTjdXZWJDb3JlOVRpbGVDYWNoZTIwc2V0TGF5ZXJQ
b29sQ2FwYWNpdHlFagogX19aTks3V2ViQ29yZTEwRmxvYXRQb2ludGN2N0NHUG9pbnRFdgogX19a
Tks3V2ViQ29yZTEwU2Nyb2xsVmlldzIxdW5vYnNjdXJlZENvbnRlbnRSZWN0RU5TXzE0U2Nyb2xs
YWJsZUFyZWEzNlZpc2libGVDb250ZW50UmVjdEluY2x1ZGVzU2Nyb2xsYmFyc0UKIF9fWk5LN1dl
YkNvcmUxNERvY3VtZW50TG9hZGVyMTZyZXNwb25zZU1JTUVUeXBlRXYKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9u
IDE2NjQ1MykKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTk3NCw4ICs1OTc0LDggQEAKIAkJRTFGRjhGNkMxODBE
QjVCRTAwMTMyNjc0IC8qIENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRkY4RjZBMTgwREI1QkUwMDEzMjY3
NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5jcHAgKi87IH07CiAJCUUxRkY4RjZEMTgwREI1
QkUwMDEzMjY3NCAvKiBDcnlwdG9BbGdvcml0aG1SZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTFGRjhGNkIxODBEQjVCRTAwMTMyNjc0IC8q
IENyeXB0b0FsZ29yaXRobVJlZ2lzdHJ5LmggKi87IH07CiAJCUU0MDFDMjc1MTdDRTUzRUMwMEM0
MUEzNSAvKiBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNDAxQzI3NDE3Q0U1M0VDMDBDNDFBMzUgLyogRWxl
bWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07Ci0JCUU0MjRBMzlFMTMzMERGMDEwMENGNkRDOSAvKiBUaWxlR3JpZFRp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MjRB
MzlEMTMzMERGMDEwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUuaCAqLzsgfTsKLQkJRTQyNEEzQTAx
MzMwREYxRTAwQ0Y2REM5IC8qIFRpbGVHcmlkVGlsZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MjRBMzlGMTMzMERGMUUwMENGNkRDOSAvKiBUaWxl
R3JpZFRpbGUubW0gKi87IH07CisJCUU0MjRBMzlFMTMzMERGMDEwMENGNkRDOSAvKiBMZWdhY3lU
aWxlR3JpZFRpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0MjRBMzlEMTMzMERGMDEwMENGNkRDOSAvKiBMZWdhY3lUaWxlR3JpZFRpbGUuaCAqLzsg
fTsKKwkJRTQyNEEzQTAxMzMwREYxRTAwQ0Y2REM5IC8qIExlZ2FjeVRpbGVHcmlkVGlsZS5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0MjRBMzlGMTMz
MERGMUUwMENGNkRDOSAvKiBMZWdhY3lUaWxlR3JpZFRpbGUubW0gKi87IH07CiAJCUU0MjVBNDlB
MTgyOTJCODQwMDIwQ0ZDRiAvKiBDb2xsZWN0aW9uSW5kZXhDYWNoZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyNUE0OTkxODI5MkI4NDAwMjBDRkNG
IC8qIENvbGxlY3Rpb25JbmRleENhY2hlLmggKi87IH07CiAJCUU0Mjk1RkE0MTJCMDYxNEUwMEQx
QUNFMCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTQyOTVGQTMxMkIwNjE0RTAwRDFBQ0UwIC8qIFJlc291cmNl
TG9hZFByaW9yaXR5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRTQzMTA1QjgxNjc1MEYwQzAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTQzMTA1QjcxNjc1
MEYwQzAwREIyRkI4IC8qIE5vZGVUcmF2ZXJzYWwuY3BwICovOyB9OwpAQCAtNjA1NiwxMCArNjA1
NiwxMCBAQAogCQlFNEFGRDAwRTBEQUYzMzU1MDBGNUY1NUMgLyogU01JTFRpbWVDb250YWluZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUZEMDA4
MERBRjMzNTQwMEY1RjU1QyAvKiBTTUlMVGltZUNvbnRhaW5lci5oICovOyB9OwogCQlFNEFGRDAw
RjBEQUYzMzU1MDBGNUY1NUMgLyogU1ZHU01JTEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRkQwMDkwREFGMzM1NDAwRjVGNTVDIC8q
IFNWR1NNSUxFbGVtZW50LmNwcCAqLzsgfTsKIAkJRTRBRkQwMTAwREFGMzM1NTAwRjVGNTVDIC8q
IFNWR1NNSUxFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNEFGRDAwQTBEQUYzMzU0MDBGNUY1NUMgLyogU1ZHU01JTEVsZW1lbnQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlFNEI2NUE1ODEz
MkZBOEU3MDA3MEU3QkUgLyogVGlsZUdyaWQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjY1QTU3MTMyRkE4RTcwMDcwRTdCRSAvKiBUaWxlR3JpZC5o
ICovOyB9OwotCQlFNEI2NUE1QTEzMkZBQUY5MDA3MEU3QkUgLyogVGlsZUdyaWQubW0gaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEI2NUE1OTEzMkZBQUY5
MDA3MEU3QkUgLyogVGlsZUdyaWQubW0gKi87IH07Ci0JCUU0QjY1QTVDMTMyRkFDQjAwMDcwRTdC
RSAvKiBUaWxlTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QjY1QTVCMTMyRkFDQjAwMDcwRTdCRSAvKiBUaWxlTGF5ZXIuaCAqLzsgfTsKLQkJ
RTRCNjVBNUUxMzJGQURCNjAwNzBFN0JFIC8qIFRpbGVMYXllci5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjY1QTVEMTMyRkFEQjYwMDcwRTdCRSAv
KiBUaWxlTGF5ZXIubW0gKi87IH07CisJCUU0QjY1QTU4MTMyRkE4RTcwMDcwRTdCRSAvKiBMZWdh
Y3lUaWxlR3JpZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTRCNjVBNTcxMzJGQThFNzAwNzBFN0JFIC8qIExlZ2FjeVRpbGVHcmlkLmggKi87IH07CisJ
CUU0QjY1QTVBMTMyRkFBRjkwMDcwRTdCRSAvKiBMZWdhY3lUaWxlR3JpZC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QjY1QTU5MTMyRkFBRjkwMDcw
RTdCRSAvKiBMZWdhY3lUaWxlR3JpZC5tbSAqLzsgfTsKKwkJRTRCNjVBNUMxMzJGQUNCMDAwNzBF
N0JFIC8qIExlZ2FjeVRpbGVMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTRCNjVBNUIxMzJGQUNCMDAwNzBFN0JFIC8qIExlZ2FjeVRpbGVMYXll
ci5oICovOyB9OworCQlFNEI2NUE1RTEzMkZBREI2MDA3MEU3QkUgLyogTGVnYWN5VGlsZUxheWVy
Lm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRCNjVB
NUQxMzJGQURCNjAwNzBFN0JFIC8qIExlZ2FjeVRpbGVMYXllci5tbSAqLzsgfTsKIAkJRTRCQkVE
MEUxNEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEJCRUQwQzE0
RjQwMjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCAqLzsg
fTsKIAkJRTRCQkVEMEYxNEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRCQkVEMEQxNEY0MDI1RDAwM0YwQjk4IC8qIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bi5oICovOyB9OwogCQlFNEJCRUQ0QzE0RkNEQkExMDAzRjBCOTggLyogU3R5bGVSdWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QkJFRDRBMTRG
Q0RCQTEwMDNGMEI5OCAvKiBTdHlsZVJ1bGUuY3BwICovOyB9OwpAQCAtNjA2OCw4ICs2MDY4LDgg
QEAKIAkJRTRDMTc4OUIwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRDMTc4OTYwRUU2OTAz
ODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0QzI3OTU4MENGOTc0MTkwMEU5N0I5OCAvKiBSZW5k
ZXJNZWRpYS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFNEMyNzk1NjBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuY3BwICovOyB9OwogCQlF
NEMyNzk1OTBDRjk3NDE5MDBFOTdCOTggLyogUmVuZGVyTWVkaWEuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzI3OTU3MENGOTc0MTkwMEU5N0I5OCAv
KiBSZW5kZXJNZWRpYS5oICovOyB9OwotCQlFNEMzQjFGQTBGMEU0MTYxMDA5NjkzRjYgLyogVGls
ZUNhY2hlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
NEMzQjFGOTBGMEU0MTYxMDA5NjkzRjYgLyogVGlsZUNhY2hlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJRTRDM0IxRkMwRjBFNDE3MDAwOTY5M0Y2
IC8qIFRpbGVDYWNoZS5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEU0QzNCMUZCMEYwRTQxNzAwMDk2OTNGNiAvKiBUaWxlQ2FjaGUubW0gKi87IH07CisJ
CUU0QzNCMUZBMEYwRTQxNjEwMDk2OTNGNiAvKiBMZWdhY3lUaWxlQ2FjaGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QzNCMUY5MEYwRTQxNjEwMDk2
OTNGNiAvKiBMZWdhY3lUaWxlQ2FjaGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQlFNEMzQjFGQzBGMEU0MTcwMDA5NjkzRjYgLyogTGVnYWN5VGls
ZUNhY2hlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRDM0IxRkIwRjBFNDE3MDAwOTY5M0Y2IC8qIExlZ2FjeVRpbGVDYWNoZS5tbSAqLzsgfTsKIAkJ
RTRDOTFBMEUxODAyMzQzMTAwQTE3RjZEIC8qIFRleHRQYWludFN0eWxlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEM5MUEwRDE4MDIzNDMxMDBBMTdG
NkQgLyogVGV4dFBhaW50U3R5bGUuaCAqLzsgfTsKIAkJRTRDOTFBMTAxODAyMzQzOTAwQTE3RjZE
IC8qIFRleHRQYWludFN0eWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEU0QzkxQTBGMTgwMjM0MzkwMEExN0Y2RCAvKiBUZXh0UGFpbnRTdHlsZS5j
cHAgKi87IH07CiAJCUU0QzkxQTE2MTgwOTk5RjEwMEExN0Y2RCAvKiBSZW5kZXJUZXh0TGluZUJv
eGVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEM5
MUExNTE4MDk5OUYxMDBBMTdGNkQgLyogUmVuZGVyVGV4dExpbmVCb3hlcy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC02MDg1LDggKzYwODUsOCBA
QAogCQlFNEQ5ODhCNjE3QkZFQjIxMDA4NEZCODggLyogVGV4dE5vZGVUcmF2ZXJzYWwuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTREOTg4QjUxN0JG
RUIyMTAwODRGQjg4IC8qIFRleHROb2RlVHJhdmVyc2FsLmNwcCAqLzsgfTsKIAkJRTRERUFBMTcx
N0E5M0RDMzAwMEUwNDMwIC8qIFN0eWxlUmVzb2x2ZVRyZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRERUFBMTUxN0E5M0RDMzAwMEUwNDMwIC8q
IFN0eWxlUmVzb2x2ZVRyZWUuY3BwICovOyB9OwogCQlFNERFQUExODE3QTkzREMzMDAwRTA0MzAg
LyogU3R5bGVSZXNvbHZlVHJlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTRERUFBMTYxN0E5M0RDMzAwMEUwNDMwIC8qIFN0eWxlUmVzb2x2ZVRyZWUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlFNEUz
OUFGQjEzMzBFRkE4MDAzQUIyNzQgLyogVGlsZUxheWVyUG9vbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRFMzlBRkExMzMwRUZBODAwM0FCMjc0IC8q
IFRpbGVMYXllclBvb2wuaCAqLzsgfTsKLQkJRTRFMzlBRkQxMzMwRUZDNjAwM0FCMjc0IC8qIFRp
bGVMYXllclBvb2wubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFNEUzOUFGQzEzMzBFRkM1MDAzQUIyNzQgLyogVGlsZUxheWVyUG9vbC5tbSAqLzsgfTsK
KwkJRTRFMzlBRkIxMzMwRUZBODAwM0FCMjc0IC8qIExlZ2FjeVRpbGVMYXllclBvb2wuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTM5QUZBMTMzMEVG
QTgwMDNBQjI3NCAvKiBMZWdhY3lUaWxlTGF5ZXJQb29sLmggKi87IH07CisJCUU0RTM5QUZEMTMz
MEVGQzYwMDNBQjI3NCAvKiBMZWdhY3lUaWxlTGF5ZXJQb29sLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRFMzlBRkMxMzMwRUZDNTAwM0FCMjc0IC8q
IExlZ2FjeVRpbGVMYXllclBvb2wubW0gKi87IH07CiAJCUU0RTlCMTE5MTgxMDkxNkYwMDNBQ0NE
RiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0RTlCMTE4MTgxMDkxNkYwMDNBQ0NERiAvKiBTaW1wbGVM
aW5lTGF5b3V0UmVzb2x2ZXIuaCAqLzsgfTsKIAkJRTRFOUIxMUIxODE0NTY5MjAwM0FDQ0RGIC8q
IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRFOUIxMUExODE0NTY5MjAwM0FDQ0RGIC8qIFNpbXBsZUxp
bmVMYXlvdXRGdW5jdGlvbnMuY3BwICovOyB9OwogCQlFNEU5QjExRDE4MTQ1NjlDMDAzQUNDREYg
LyogU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRFOUIxMUMxODE0NTY5QzAwM0FDQ0RGIC8qIFNpbXBsZUxp
bmVMYXlvdXRGdW5jdGlvbnMuaCAqLzsgfTsKQEAgLTEzMzYzLDggKzEzMzYzLDggQEAKIAkJRTQw
NkYzRkIxMTk4MzA3RDAwOUQ1OUQ2IC8qIENvbG9yRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDb2xvckRhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFNDFFQTAzODExOTgzNkRCMDA3MTBCQzUgLyogQ1NTUHJvcGVydHlOYW1lcy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQcm9wZXJ0eU5hbWVzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQxRUEwMzkxMTk4Mzc0OTAwNzEwQkM1
IC8qIENTU1ZhbHVlS2V5d29yZHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ1NTVmFsdWVLZXl3b3Jkcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CUU0MjRBMzlEMTMzMERGMDEwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gVGlsZUdyaWRUaWxlLmg7IHBhdGggPSBpb3MvVGlsZUdyaWRU
aWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0MjRBMzlGMTMzMERGMUUwMENG
NkRDOSAvKiBUaWxlR3JpZFRpbGUubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7
IG5hbWUgPSBUaWxlR3JpZFRpbGUubW07IHBhdGggPSBpb3MvVGlsZUdyaWRUaWxlLm1tOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNDI0QTM5RDEzMzBERjAxMDBDRjZEQzkgLyogTGVn
YWN5VGlsZUdyaWRUaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExlZ2Fj
eVRpbGVHcmlkVGlsZS5oOyBwYXRoID0gaW9zL0xlZ2FjeVRpbGVHcmlkVGlsZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlFNDI0QTM5RjEzMzBERjFFMDBDRjZEQzkgLyogTGVnYWN5
VGlsZUdyaWRUaWxlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0g
TGVnYWN5VGlsZUdyaWRUaWxlLm1tOyBwYXRoID0gaW9zL0xlZ2FjeVRpbGVHcmlkVGlsZS5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTQyNUE0OTkxODI5MkI4NDAwMjBDRkNGIC8q
IENvbGxlY3Rpb25JbmRleENhY2hlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENvbGxlY3Rpb25JbmRleENhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
Mjk1RkEzMTJCMDYxNEUwMEQxQUNFMCAvKiBSZXNvdXJjZUxvYWRQcmlvcml0eS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXNvdXJjZUxvYWRQcmlvcml0eS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFNDMxMDVCNzE2NzUwRjBDMDBEQjJGQjggLyogTm9kZVRy
YXZlcnNhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBOb2RlVHJh
dmVyc2FsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNDU0LDEwICsxMzQ1
NCwxMCBAQAogCQlFNEI0MjM4MDBDQkZCNzNDMDBBRjJFQ0UgLyogSlNIVE1MTWVkaWFFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTSFRNTE1lZGlhRWxlbWVudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEI0MjM4NTBDQkZCNzNDMDBBRjJFQ0Ug
LyogSlNQcm9ncmVzc0V2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTUHJvZ3Jlc3NFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
QjQyMzg2MENCRkI3M0MwMEFGMkVDRSAvKiBKU1Byb2dyZXNzRXZlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNQcm9ncmVzc0V2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUU0QjY1QTU3MTMyRkE4RTcwMDcwRTdCRSAvKiBUaWxlR3JpZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBUaWxlR3JpZC5oOyBwYXRoID0gaW9zL1RpbGVH
cmlkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0QjY1QTU5MTMyRkFBRjkwMDcw
RTdCRSAvKiBUaWxlR3JpZC5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgbmFt
ZSA9IFRpbGVHcmlkLm1tOyBwYXRoID0gaW9zL1RpbGVHcmlkLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQlFNEI2NUE1QjEzMkZBQ0IwMDA3MEU3QkUgLyogVGlsZUxheWVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFRpbGVMYXllci5oOyBwYXRoID0gaW9zL1Rp
bGVMYXllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlFNEI2NUE1RDEzMkZBREI2
MDA3MEU3QkUgLyogVGlsZUxheWVyLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3Bw
OyBuYW1lID0gVGlsZUxheWVyLm1tOyBwYXRoID0gaW9zL1RpbGVMYXllci5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRCNjVBNTcxMzJGQThFNzAwNzBFN0JFIC8qIExlZ2FjeVRp
bGVHcmlkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IExlZ2FjeVRpbGVHcmlk
Lmg7IHBhdGggPSBpb3MvTGVnYWN5VGlsZUdyaWQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTRCNjVBNTkxMzJGQUFGOTAwNzBFN0JFIC8qIExlZ2FjeVRpbGVHcmlkLm1tICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBuYW1lID0gTGVnYWN5VGlsZUdyaWQubW07IHBh
dGggPSBpb3MvTGVnYWN5VGlsZUdyaWQubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUU0QjY1QTVCMTMyRkFDQjAwMDcwRTdCRSAvKiBMZWdhY3lUaWxlTGF5ZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTGVnYWN5VGlsZUxheWVyLmg7IHBhdGggPSBpb3MvTGVn
YWN5VGlsZUxheWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QjY1QTVEMTMy
RkFEQjYwMDcwRTdCRSAvKiBMZWdhY3lUaWxlTGF5ZXIubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5vYmpjcHA7IG5hbWUgPSBMZWdhY3lUaWxlTGF5ZXIubW07IHBhdGggPSBpb3MvTGVnYWN5
VGlsZUxheWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEJCRUQwQzE0RjQw
MjVEMDAzRjBCOTggLyogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJh
dGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QkJFRDBEMTRGNDAyNUQw
MDNGMEI5OCAvKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QkJFRDRBMTRGQ0RCQTEwMDNGMEI5OCAvKiBT
dHlsZVJ1bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVS
dWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNDY2LDggKzEzNDY2LDgg
QEAKIAkJRTRDMTc4OTYwRUU2OTAzODAwODI0RDY5IC8qIENTU1NlbGVjdG9yTGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NTZWxlY3Rvckxpc3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTYwQ0Y5NzQxOTAwRTk3Qjk4IC8qIFJlbmRlck1l
ZGlhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFJlbmRlck1lZGlh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDMjc5NTcwQ0Y5NzQxOTAwRTk3
Qjk4IC8qIFJlbmRlck1lZGlhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlck1lZGlhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUU0QzNCMUY5MEYwRTQx
NjEwMDk2OTNGNiAvKiBUaWxlQ2FjaGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gVGlsZUNhY2hlLmg7IHBhdGggPSBpb3MvVGlsZUNhY2hlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCUU0QzNCMUZCMEYwRTQxNzAwMDk2OTNGNiAvKiBUaWxlQ2FjaGUubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUaWxlQ2FjaGUubW07IHBhdGgg
PSBpb3MvVGlsZUNhY2hlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEMzQjFG
OTBGMEU0MTYxMDA5NjkzRjYgLyogTGVnYWN5VGlsZUNhY2hlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IExlZ2FjeVRpbGVDYWNoZS5oOyBwYXRoID0gaW9zL0xlZ2FjeVRpbGVD
YWNoZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEMzQjFGQjBGMEU0MTcwMDA5
NjkzRjYgLyogTGVnYWN5VGlsZUNhY2hlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2Jq
Y3BwOyBuYW1lID0gTGVnYWN5VGlsZUNhY2hlLm1tOyBwYXRoID0gaW9zL0xlZ2FjeVRpbGVDYWNo
ZS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRDOTFBMEQxODAyMzQzMTAwQTE3
RjZEIC8qIFRleHRQYWludFN0eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFRleHRQYWludFN0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QzkxQTBG
MTgwMjM0MzkwMEExN0Y2RCAvKiBUZXh0UGFpbnRTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0UGFpbnRTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUU0QzkxQTE1MTgwOTk5RjEwMEExN0Y2RCAvKiBSZW5kZXJUZXh0TGluZUJv
eGVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclRleHRMaW5lQm94
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTEzNDgzLDggKzEzNDgzLDggQEAK
IAkJRTREOTg4QjUxN0JGRUIyMTAwODRGQjg4IC8qIFRleHROb2RlVHJhdmVyc2FsLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHROb2RlVHJhdmVyc2FsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRERUFBMTUxN0E5M0RDMzAwMEUwNDMwIC8q
IFN0eWxlUmVzb2x2ZVRyZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gU3R5bGVSZXNvbHZlVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0
REVBQTE2MTdBOTNEQzMwMDBFMDQzMCAvKiBTdHlsZVJlc29sdmVUcmVlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlUmVzb2x2ZVRyZWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKLQkJRTRFMzlBRkExMzMwRUZBODAwM0FCMjc0IC8qIFRpbGVMYXllclBvb2wu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gVGlsZUxheWVyUG9vbC5oOyBwYXRo
ID0gaW9zL1RpbGVMYXllclBvb2wuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRTRF
MzlBRkMxMzMwRUZDNTAwM0FCMjc0IC8qIFRpbGVMYXllclBvb2wubW0gKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5vYmpjcHA7IG5hbWUgPSBUaWxlTGF5ZXJQb29sLm1tOyBwYXRoID0gaW9zL1Rp
bGVMYXllclBvb2wubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RTM5QUZBMTMz
MEVGQTgwMDNBQjI3NCAvKiBMZWdhY3lUaWxlTGF5ZXJQb29sLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IExlZ2FjeVRpbGVMYXllclBvb2wuaDsgcGF0aCA9IGlvcy9MZWdhY3lU
aWxlTGF5ZXJQb29sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0RTM5QUZDMTMz
MEVGQzUwMDNBQjI3NCAvKiBMZWdhY3lUaWxlTGF5ZXJQb29sLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBuYW1lID0gTGVnYWN5VGlsZUxheWVyUG9vbC5tbTsgcGF0aCA9IGlv
cy9MZWdhY3lUaWxlTGF5ZXJQb29sLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlF
NEU5QjExODE4MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEU5QjExQTE4MTQ1NjkyMDAzQUNDREYg
LyogU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTRFOUIxMUMxODE0NTY5QzAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVM
YXlvdXRGdW5jdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltcGxl
TGluZUxheW91dEZ1bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTgx
MzgsMTggKzE4MTM4LDE4IEBACiAJCQkJRTQ1MzkwQUQwRUFGRjRCNTAwMzY5NUM4IC8qIFN5c3Rl
bU1lbW9yeUlPUy5jcHAgKi8sCiAJCQkJNDRDOTkxOUQwRjNEMjEwRTAwNTg2NjcwIC8qIFRoZW1l
SU9TLmggKi8sCiAJCQkJNDRDOTkxOUUwRjNEMjEwRTAwNTg2NjcwIC8qIFRoZW1lSU9TLm1tICov
LAotCQkJCUU0QzNCMUY5MEYwRTQxNjEwMDk2OTNGNiAvKiBUaWxlQ2FjaGUuaCAqLywKLQkJCQlF
NEMzQjFGQjBGMEU0MTcwMDA5NjkzRjYgLyogVGlsZUNhY2hlLm1tICovLAorCQkJCUU0QzNCMUY5
MEYwRTQxNjEwMDk2OTNGNiAvKiBMZWdhY3lUaWxlQ2FjaGUuaCAqLywKKwkJCQlFNEMzQjFGQjBG
MEU0MTcwMDA5NjkzRjYgLyogTGVnYWN5VGlsZUNhY2hlLm1tICovLAogCQkJCTFGNzJCRjA4MTg3
RkQ0MjcwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9yeUhhbmRsZXJJT1MuY3BwICovLAog
CQkJCTFGNzJCRjA5MTg3RkQ0MjcwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9yeUhhbmRs
ZXJJT1MuaCAqLywKLQkJCQlFNEI2NUE1NzEzMkZBOEU3MDA3MEU3QkUgLyogVGlsZUdyaWQuaCAq
LywKLQkJCQlFNEI2NUE1OTEzMkZBQUY5MDA3MEU3QkUgLyogVGlsZUdyaWQubW0gKi8sCi0JCQkJ
RTQyNEEzOUQxMzMwREYwMTAwQ0Y2REM5IC8qIFRpbGVHcmlkVGlsZS5oICovLAotCQkJCUU0MjRB
MzlGMTMzMERGMUUwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUubW0gKi8sCi0JCQkJRTRCNjVBNUIx
MzJGQUNCMDAwNzBFN0JFIC8qIFRpbGVMYXllci5oICovLAotCQkJCUU0QjY1QTVEMTMyRkFEQjYw
MDcwRTdCRSAvKiBUaWxlTGF5ZXIubW0gKi8sCi0JCQkJRTRFMzlBRkExMzMwRUZBODAwM0FCMjc0
IC8qIFRpbGVMYXllclBvb2wuaCAqLywKLQkJCQlFNEUzOUFGQzEzMzBFRkM1MDAzQUIyNzQgLyog
VGlsZUxheWVyUG9vbC5tbSAqLywKKwkJCQlFNEI2NUE1NzEzMkZBOEU3MDA3MEU3QkUgLyogTGVn
YWN5VGlsZUdyaWQuaCAqLywKKwkJCQlFNEI2NUE1OTEzMkZBQUY5MDA3MEU3QkUgLyogTGVnYWN5
VGlsZUdyaWQubW0gKi8sCisJCQkJRTQyNEEzOUQxMzMwREYwMTAwQ0Y2REM5IC8qIExlZ2FjeVRp
bGVHcmlkVGlsZS5oICovLAorCQkJCUU0MjRBMzlGMTMzMERGMUUwMENGNkRDOSAvKiBMZWdhY3lU
aWxlR3JpZFRpbGUubW0gKi8sCisJCQkJRTRCNjVBNUIxMzJGQUNCMDAwNzBFN0JFIC8qIExlZ2Fj
eVRpbGVMYXllci5oICovLAorCQkJCUU0QjY1QTVEMTMyRkFEQjYwMDcwRTdCRSAvKiBMZWdhY3lU
aWxlTGF5ZXIubW0gKi8sCisJCQkJRTRFMzlBRkExMzMwRUZBODAwM0FCMjc0IC8qIExlZ2FjeVRp
bGVMYXllclBvb2wuaCAqLywKKwkJCQlFNEUzOUFGQzEzMzBFRkM1MDAzQUIyNzQgLyogTGVnYWN5
VGlsZUxheWVyUG9vbC5tbSAqLywKIAkJCQkzMTQwMzc5NzEyNEJFQTdGMDBBRjQwRTQgLyogV2Vi
Q29yZU1vdGlvbk1hbmFnZXIuaCAqLywKIAkJCQkzMTQwMzc5ODEyNEJFQTdGMDBBRjQwRTQgLyog
V2ViQ29yZU1vdGlvbk1hbmFnZXIubW0gKi8sCiAJCQkJNDRDM0NGRTcxNTU2QkU1RDAwMDEzNjA5
IC8qIFdlYkNvcmVTeXN0ZW1JbnRlcmZhY2VJT1MuaCAqLywKQEAgLTI1OTUxLDE0ICsyNTk1MSwx
NCBAQAogCQkJCTBGNjM4M0RFMTg2MTVCMjkwMDNFNURCNSAvKiBUaHJlYWRlZFNjcm9sbGluZ1Ry
ZWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRkY1N0EzMEYwMTI1NUIwMDg5MUVCQiAvKiBUaHJl
YWRHbG9iYWxEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxODVCQ0YyOTBGMzI3OUNFMDAwRUEy
NjIgLyogVGhyZWFkVGltZXJzLmggaW4gSGVhZGVycyAqLywKLQkJCQlFNEMzQjFGQTBGMEU0MTYx
MDA5NjkzRjYgLyogVGlsZUNhY2hlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEMzQjFGQTBGMEU0
MTYxMDA5NjkzRjYgLyogTGVnYWN5VGlsZUNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxQUE3
MTYwQjE0OUJDNERCMDAxNkVDMTkgLyogVGlsZUNvbnRyb2xsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTFGNzJCRjBCMTg3RkQ0NUMwMDA5QkNCMyAvKiBUaWxlQ29udHJvbGxlck1lbW9yeUhhbmRs
ZXJJT1MuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBRjg5QTQyMTUxOEZERUEwMEU1NDdCNSAvKiBU
aWxlZEJhY2tpbmcuaCBpbiBIZWFkZXJzICovLAotCQkJCUU0QjY1QTU4MTMyRkE4RTcwMDcwRTdC
RSAvKiBUaWxlR3JpZC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTQyNEEzOUUxMzMwREYwMTAwQ0Y2
REM5IC8qIFRpbGVHcmlkVGlsZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTRCNjVBNUMxMzJGQUNC
MDAwNzBFN0JFIC8qIFRpbGVMYXllci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRTRFMzlBRkIxMzMw
RUZBODAwM0FCMjc0IC8qIFRpbGVMYXllclBvb2wuaCBpbiBIZWFkZXJzICovLAorCQkJCUU0QjY1
QTU4MTMyRkE4RTcwMDcwRTdCRSAvKiBMZWdhY3lUaWxlR3JpZC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJRTQyNEEzOUUxMzMwREYwMTAwQ0Y2REM5IC8qIExlZ2FjeVRpbGVHcmlkVGlsZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRTRCNjVBNUMxMzJGQUNCMDAwNzBFN0JFIC8qIExlZ2FjeVRpbGVMYXll
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJRTRFMzlBRkIxMzMwRUZBODAwM0FCMjc0IC8qIExlZ2Fj
eVRpbGVMYXllclBvb2wuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5ODc3MEYzMTI0MkM1MzUwMDIy
MjZCQSAvKiBUaWxpbmdEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlGNTVCM0REQzEyNTFGMTJE
MDAzRUYyNjkgLyogVGltZUlucHV0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzU1M0NGRTgx
MDhGNDczRjAwRUEyODFFIC8qIFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8s
CkBAIC0yOTIwMywxMyArMjkyMDMsMTMgQEAKIAkJCQkwRjYzODNERDE4NjE1QjI5MDAzRTVEQjUg
LyogVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxRkY1N0E2
MEYwMTI1NkIwMDg5MUVCQiAvKiBUaHJlYWRHbG9iYWxEYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE4NUJDRjI4MEYzMjc5Q0UwMDBFQTI2MiAvKiBUaHJlYWRUaW1lcnMuY3BwIGluIFNvdXJj
ZXMgKi8sCi0JCQkJRTRDM0IxRkMwRjBFNDE3MDAwOTY5M0Y2IC8qIFRpbGVDYWNoZS5tbSBpbiBT
b3VyY2VzICovLAorCQkJCUU0QzNCMUZDMEYwRTQxNzAwMDk2OTNGNiAvKiBMZWdhY3lUaWxlQ2Fj
aGUubW0gaW4gU291cmNlcyAqLywKIAkJCQkxQUE3MTYwQTE0OUJDNERCMDAxNkVDMTkgLyogVGls
ZUNvbnRyb2xsZXIubW0gaW4gU291cmNlcyAqLywKIAkJCQkxRjcyQkYwQTE4N0ZENDQ5MDAwOUJD
QjMgLyogVGlsZUNvbnRyb2xsZXJNZW1vcnlIYW5kbGVySU9TLmNwcCBpbiBTb3VyY2VzICovLAot
CQkJCUU0QjY1QTVBMTMyRkFBRjkwMDcwRTdCRSAvKiBUaWxlR3JpZC5tbSBpbiBTb3VyY2VzICov
LAotCQkJCUU0MjRBM0EwMTMzMERGMUUwMENGNkRDOSAvKiBUaWxlR3JpZFRpbGUubW0gaW4gU291
cmNlcyAqLywKLQkJCQlFNEI2NUE1RTEzMkZBREI2MDA3MEU3QkUgLyogVGlsZUxheWVyLm1tIGlu
IFNvdXJjZXMgKi8sCi0JCQkJRTRFMzlBRkQxMzMwRUZDNjAwM0FCMjc0IC8qIFRpbGVMYXllclBv
b2wubW0gaW4gU291cmNlcyAqLywKKwkJCQlFNEI2NUE1QTEzMkZBQUY5MDA3MEU3QkUgLyogTGVn
YWN5VGlsZUdyaWQubW0gaW4gU291cmNlcyAqLywKKwkJCQlFNDI0QTNBMDEzMzBERjFFMDBDRjZE
QzkgLyogTGVnYWN5VGlsZUdyaWRUaWxlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJRTRCNjVBNUUx
MzJGQURCNjAwNzBFN0JFIC8qIExlZ2FjeVRpbGVMYXllci5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CUU0RTM5QUZEMTMzMEVGQzYwMDNBQjI3NCAvKiBMZWdhY3lUaWxlTGF5ZXJQb29sLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNDk4NzcwRjIxMjQyQzUzNTAwMjIyNkJBIC8qIFRpbGluZ0RhdGEuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRjU1QjNEREIxMjUxRjEyRDAwM0VGMjY5IC8qIFRpbWVJbnB1
dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzU1M0NGRTkxMDhGNDczRjAwRUEyODFFIC8q
IFRpbWVsaW5lUmVjb3JkRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9uIDE2NjQ1MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWVWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMTEgKzk1LDExIEBACiAKICNp
ZiBQTEFURk9STShJT1MpCiAjaW5jbHVkZSAiRG9jdW1lbnRMb2FkZXIuaCIKKyNpbmNsdWRlICJM
ZWdhY3lUaWxlQ2FjaGUuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVtb3J5
Q2FjaGUuaCIKICNpbmNsdWRlICJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIKICNpbmNsdWRlICJT
eXN0ZW1NZW1vcnkuaCIKLSNpbmNsdWRlICJUaWxlQ2FjaGUuaCIKICNlbmRpZgogCiAjaWYgRU5B
QkxFKFBMVUdJTl9QUk9YWV9GT1JfVklERU8pCkBAIC0zNzgsOCArMzc4LDggQEAgdm9pZCBGcmFt
ZVZpZXc6OmNsZWFyKCkKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gVG8gYXZvaWQgZmxhc2hl
cyBvZiB3aGl0ZSwgZGlzYWJsZSB0aWxlIHVwZGF0ZXMgaW1tZWRpYXRlbHkgd2hlbiB2aWV3IGlz
IGNsZWFyZWQgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHBhZ2UgbG9hZC4KICAgICAvLyBUaWxpbmcg
d2lsbCBiZSByZS1lbmFibGVkIGZyb20gVUlLaXQgdmlhIFtXQUtXaW5kb3cgc2V0VGlsaW5nTW9k
ZTpdIHdoZW4gd2UgaGF2ZSBjb250ZW50IHRvIGRyYXcuCi0gICAgaWYgKFRpbGVDYWNoZSogdGls
ZUNhY2hlID0gdGhpcy0+dGlsZUNhY2hlKCkpCi0gICAgICAgIHRpbGVDYWNoZS0+c2V0VGlsaW5n
TW9kZShUaWxlQ2FjaGU6OkRpc2FibGVkKTsKKyAgICBpZiAoTGVnYWN5VGlsZUNhY2hlKiB0aWxl
Q2FjaGUgPSBsZWdhY3lUaWxlQ2FjaGUoKSkKKyAgICAgICAgdGlsZUNhY2hlLT5zZXRUaWxpbmdN
b2RlKExlZ2FjeVRpbGVDYWNoZTo6RGlzYWJsZWQpOwogI2VuZGlmCiB9CiAKQEAgLTg2MCw3ICs4
NjAsNyBAQCBib29sIEZyYW1lVmlldzo6Zmx1c2hDb21wb3NpdGluZ1N0YXRlRm9yCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBpZiAoVGlsZUNhY2hlKiB0
aWxlQ2FjaGUgPSB0aGlzLT50aWxlQ2FjaGUoKSkKKyAgICBpZiAoTGVnYWN5VGlsZUNhY2hlKiB0
aWxlQ2FjaGUgPSBsZWdhY3lUaWxlQ2FjaGUoKSkKICAgICAgICAgdGlsZUNhY2hlLT5kb1BlbmRp
bmdSZXBhaW50cygpOwogI2VuZGlmCiAKQEAgLTIyNDMsNyArMjI0Myw3IEBAIHZvaWQgRnJhbWVW
aWV3OjphZGp1c3RUaWxlZEJhY2tpbmdDb3ZlcmEKICAgICBpZiAocmVuZGVyVmlldyAmJiByZW5k
ZXJWaWV3LT5sYXllcigpLT5iYWNraW5nKCkpCiAgICAgICAgIHJlbmRlclZpZXctPmxheWVyKCkt
PmJhY2tpbmcoKS0+YWRqdXN0VGlsZWRCYWNraW5nQ292ZXJhZ2UoKTsKICNpZiBQTEFURk9STShJ
T1MpCi0gICAgaWYgKFRpbGVDYWNoZSogdGlsZUNhY2hlID0gdGhpcy0+dGlsZUNhY2hlKCkpCisg
ICAgaWYgKExlZ2FjeVRpbGVDYWNoZSogdGlsZUNhY2hlID0gbGVnYWN5VGlsZUNhY2hlKCkpCiAg
ICAgICAgIHRpbGVDYWNoZS0+c2V0U3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkKG1fc3Bl
Y3VsYXRpdmVUaWxpbmdFbmFibGVkKTsKICNlbmRpZgogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU2Nyb2xsVmlldy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Njcm9sbFZpZXcuaAkocmV2aXNpb24gMTY2NDUzKQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU2Nyb2xsVmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCw4ICs2MCw4IEBAIGNsYXNz
IFdBS1ZpZXc7CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhvc3RXaW5kb3c7CitjbGFz
cyBMZWdhY3lUaWxlQ2FjaGU7CiBjbGFzcyBTY3JvbGxiYXI7Ci1jbGFzcyBUaWxlQ2FjaGU7CiAK
IGNsYXNzIFNjcm9sbFZpZXcgOiBwdWJsaWMgV2lkZ2V0LCBwdWJsaWMgU2Nyb2xsYWJsZUFyZWEg
ewogcHVibGljOgpAQCAtMTkwLDcgKzE5MCw3IEBAIHB1YmxpYzoKICAgICBGbG9hdFJlY3QgY29t
cHV0ZUNvdmVyYWdlUmVjdChkb3VibGUgaG9yaXpvbnRhbE1hcmdpbiwgZG91YmxlIHZlcnRpY2Fs
TWFyZ2luKSBjb25zdDsKIAogICAgIHZvaWQgc2V0QWN0dWFsU2Nyb2xsUG9zaXRpb24oY29uc3Qg
SW50UG9pbnQmKTsKLSAgICBUaWxlQ2FjaGUqIHRpbGVDYWNoZSgpOworICAgIExlZ2FjeVRpbGVD
YWNoZSogbGVnYWN5VGlsZUNhY2hlKCk7CiAjZW5kaWYKIAogICAgIC8vIHZpc2libGVDb250ZW50
UmVjdCgpLnNpemUoKSBpcyBjb21wdXRlZCBmcm9tIHVuc2NhbGVkVW5vYnNjdXJlZFZpc2libGVD
b250ZW50U2l6ZSgpIGRpdmlkZWQgYnkgdGhlIHZhbHVlIG9mIHZpc2libGVDb250ZW50U2NhbGVG
YWN0b3IuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTGVnYWN5VGlsZUNhY2hl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVD
YWNoZS5oCShyZXZpc2lvbiAxNjY0NTMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9UaWxlQ2FjaGUuaDoxNjY0NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTGVn
YWN5VGlsZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFRpbGVDYWNoZV9oCisjZGVmaW5lIFRpbGVDYWNoZV9oCisKKyNpZiBQTEFU
Rk9STShJT1MpCisKKyNpbmNsdWRlICJDb2xvci5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgor
I2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiVGlt
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRy
Lmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5n
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBD
QUxheWVyOworQGNsYXNzIFRpbGVDYWNoZVRvbWJzdG9uZTsKK0BjbGFzcyBUaWxlTGF5ZXI7CitA
Y2xhc3MgV0FLV2luZG93OworI2Vsc2UKK2NsYXNzIENBTGF5ZXI7CitjbGFzcyBUaWxlQ2FjaGVU
b21ic3RvbmU7CitjbGFzcyBUaWxlTGF5ZXI7CitjbGFzcyBXQUtXaW5kb3c7CisjZW5kaWYKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUaWxlR3JpZDsKKworY2xhc3MgVGlsZUNhY2hl
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShUaWxlQ2FjaGUpOworcHVibGljOgorICAgIFRp
bGVDYWNoZShXQUtXaW5kb3cqKTsKKyAgICB+VGlsZUNhY2hlKCk7CisKKyAgICBDR0Zsb2F0IHNj
cmVlblNjYWxlKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldE5lZWRzRGlzcGxheSgpOworICAgIHZv
aWQgc2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICAKKyAgICB2b2lk
IGxheW91dFRpbGVzKCk7CisgICAgdm9pZCBsYXlvdXRUaWxlc05vdygpOworICAgIHZvaWQgbGF5
b3V0VGlsZXNOb3dGb3JSZWN0KGNvbnN0IEludFJlY3QmKTsKKyAgICB2b2lkIHJlbW92ZUFsbE5v
blZpc2libGVUaWxlcygpOworICAgIHZvaWQgcmVtb3ZlQWxsVGlsZXMoKTsKKyAgICB2b2lkIHJl
bW92ZUZvcmVncm91bmRUaWxlcygpOworCisgICAgLy8gSWYgJ2NvbnRlbnRSZXBsYWNlbWVudElt
YWdlJyBpcyBub3QgTlVMTCwgZHJhd0xheWVyKCkgZHJhd3MKKyAgICAvLyBjb250ZW50UmVwbGFj
ZW1lbnRJbWFnZSBpbnN0ZWFkIG9mIHRoZSBwYWdlIGNvbnRlbnQuIFdlIGFzc3VtZSB0aGUKKyAg
ICAvLyBpbWFnZSBpcyB0byBiZSBkcmF3biBhdCB0aGUgb3JpZ2luIGFuZCBzY2FsZWQgdG8gbWF0
Y2ggZGV2aWNlIHBpeGVscy4KKyAgICB2b2lkIHNldENvbnRlbnRSZXBsYWNlbWVudEltYWdlKFJl
dGFpblB0cjxDR0ltYWdlUmVmPik7CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvbnRlbnRS
ZXBsYWNlbWVudEltYWdlKCkgY29uc3Q7CisKKyAgICB2b2lkIHNldFRpbGVCb3JkZXJzVmlzaWJs
ZShib29sKTsKKyAgICBib29sIHRpbGVCb3JkZXJzVmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dGlsZUJvcmRlcnNWaXNpYmxlOyB9CisKKyAgICB2b2lkIHNldFRpbGVQYWludENvdW50ZXJzVmlz
aWJsZShib29sKTsKKyAgICBib29sIHRpbGVQYWludENvdW50ZXJzVmlzaWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdGlsZVBhaW50Q291bnRlcnNWaXNpYmxlOyB9CisKKyAgICB2b2lkIHNldEFjY2Vs
ZXJhdGVkRHJhd2luZ0VuYWJsZWQoYm9vbCBlbmFibGVkKSB7IG1fYWNjZWxlcmF0ZWREcmF3aW5n
RW5hYmxlZCA9IGVuYWJsZWQ7IH0KKyAgICBib29sIGFjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQo
KSBjb25zdCB7IHJldHVybiBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQ7IH0KKworICAgIHZv
aWQgc2V0S2VlcHNab29tZWRPdXRUaWxlcyhib29sKTsKKyAgICBib29sIGtlZXBzWm9vbWVkT3V0
VGlsZXMoKSBjb25zdCB7IHJldHVybiBtX2tlZXBzWm9vbWVkT3V0VGlsZXM7IH0KKworICAgIHZv
aWQgc2V0Wm9vbWVkT3V0U2NhbGUoZmxvYXQpOworICAgIGZsb2F0IHpvb21lZE91dFNjYWxlKCkg
Y29uc3Q7CisgICAgCisgICAgdm9pZCBzZXRDdXJyZW50U2NhbGUoZmxvYXQpOworICAgIGZsb2F0
IGN1cnJlbnRTY2FsZSgpIGNvbnN0OworICAgIAorICAgIGJvb2wgdGlsZXNPcGFxdWUoKSBjb25z
dDsKKyAgICB2b2lkIHNldFRpbGVzT3BhcXVlKGJvb2wpOworICAgIAorICAgIGVudW0gVGlsaW5n
TW9kZSB7CisgICAgICAgIE5vcm1hbCwKKyAgICAgICAgTWluaW1hbCwKKyAgICAgICAgUGFubmlu
ZywKKyAgICAgICAgWm9vbWluZywKKyAgICAgICAgRGlzYWJsZWQsCisgICAgICAgIFNjcm9sbFRv
VG9wCisgICAgfTsKKyAgICBUaWxpbmdNb2RlIHRpbGluZ01vZGUoKSBjb25zdCB7IHJldHVybiBt
X3RpbGluZ01vZGU7IH0KKyAgICB2b2lkIHNldFRpbGluZ01vZGUoVGlsaW5nTW9kZSk7CisKKyAg
ICB0eXBlZGVmIGVudW0geworICAgICAgICBUaWxpbmdEaXJlY3Rpb25VcCwKKyAgICAgICAgVGls
aW5nRGlyZWN0aW9uRG93biwKKyAgICAgICAgVGlsaW5nRGlyZWN0aW9uTGVmdCwKKyAgICAgICAg
VGlsaW5nRGlyZWN0aW9uUmlnaHQsCisgICAgfSBUaWxpbmdEaXJlY3Rpb247CisgICAgdm9pZCBz
ZXRUaWxpbmdEaXJlY3Rpb24oVGlsaW5nRGlyZWN0aW9uKTsKKyAgICBUaWxpbmdEaXJlY3Rpb24g
dGlsaW5nRGlyZWN0aW9uKCkgY29uc3Q7CisKKyAgICBib29sIGhhc1BlbmRpbmdEcmF3KCkgY29u
c3Q7CisKKyAgICB2b2lkIGhvc3RMYXllclNpemVDaGFuZ2VkKCk7CisKKyAgICBzdGF0aWMgdm9p
ZCBzZXRMYXllclBvb2xDYXBhY2l0eSh1bnNpZ25lZCk7CisgICAgc3RhdGljIHZvaWQgZHJhaW5M
YXllclBvb2woKTsKKworICAgIC8vIExvZ2dpbmcKKyAgICB2b2lkIGR1bXBUaWxlcygpOworCisg
ICAgLy8gSW50ZXJuYWwKKyAgICB2b2lkIGRvTGF5b3V0VGlsZXMoKTsKKyAgICB2b2lkIGRyYXdM
YXllcihUaWxlTGF5ZXIqLCBDR0NvbnRleHRSZWYpOworICAgIHZvaWQgcHJlcGFyZVRvRHJhdygp
OworICAgIHZvaWQgZmluaXNoZWRDcmVhdGluZ1RpbGVzKGJvb2wgZGlkQ3JlYXRlVGlsZXMsIGJv
b2wgY3JlYXRlTW9yZSk7CisgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0SW5MYXllcihDQUxheWVy
ICopIGNvbnN0OworICAgIENBTGF5ZXIqIGhvc3RMYXllcigpIGNvbnN0OworICAgIHVuc2lnbmVk
IHRpbGVDYXBhY2l0eUZvckdyaWQoVGlsZUdyaWQqKTsKKyAgICBDb2xvciBjb2xvckZvckdyaWRU
aWxlQm9yZGVyKFRpbGVHcmlkKikgY29uc3Q7CisKKyAgICB2b2lkIGRvUGVuZGluZ1JlcGFpbnRz
KCk7CisKKyAgICBib29sIGlzU3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZDsgfQorICAgIHZvaWQg
c2V0U3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkKGJvb2wpOworICAgIAorICAgIGVudW0g
U3luY2hyb25vdXNUaWxlQ3JlYXRpb25Nb2RlIHsgQ292ZXJWaXNpYmxlT25seSwgQ292ZXJTcGVj
dWxhdGl2ZSB9OworCitwcml2YXRlOgorICAgIFRpbGVHcmlkKiBhY3RpdmVUaWxlR3JpZCgpIGNv
bnN0OworICAgIFRpbGVHcmlkKiBpbmFjdGl2ZVRpbGVHcmlkKCkgY29uc3Q7CisKKyAgICB2b2lk
IHVwZGF0ZVRpbGluZ01vZGUoKTsKKyAgICBib29sIGlzVGlsZUludmFsaWRhdGlvblN1c3BlbmRl
ZCgpIGNvbnN0OworICAgIGJvb2wgaXNUaWxlQ3JlYXRpb25TdXNwZW5kZWQoKSBjb25zdDsKKyAg
ICB2b2lkIGZsdXNoU2F2ZWREaXNwbGF5UmVjdHMoKTsKKyAgICB2b2lkIGludmFsaWRhdGVUaWxl
cyhjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworICAgIHZvaWQgc2V0Wm9vbWVkT3V0U2NhbGVJ
bnRlcm5hbChmbG9hdCk7CisgICAgdm9pZCBjb21taXRTY2FsZUNoYW5nZSgpOworICAgIHZvaWQg
YnJpbmdBY3RpdmVUaWxlR3JpZFRvRnJvbnQoKTsKKyAgICB2b2lkIGFkanVzdFRpbGVHcmlkVHJh
bnNmb3JtcygpOworICAgIHZvaWQgcmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzSW50ZXJuYWwoKTsK
KyAgICB2b2lkIGNyZWF0ZVRpbGVzSW5BY3RpdmVHcmlkKFN5bmNocm9ub3VzVGlsZUNyZWF0aW9u
TW9kZSk7CisgICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5nUmVwYWludCgpOwor
CisgICAgdm9pZCB0aWxlQ3JlYXRpb25UaW1lckZpcmVkKFRpbWVyPFRpbGVDYWNoZT4qKTsKKwor
ICAgIHZvaWQgZHJhd1JlcGxhY2VtZW50SW1hZ2UoVGlsZUxheWVyKiwgQ0dDb250ZXh0UmVmLCBD
R0ltYWdlUmVmKTsKKyAgICB2b2lkIGRyYXdXaW5kb3dDb250ZW50KFRpbGVMYXllciosIENHQ29u
dGV4dFJlZiwgQ0dSZWN0IGRpcnR5UmVjdCk7CisKKyAgICBXQUtXaW5kb3cqIG1fd2luZG93Owor
CisgICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2U7CisK
KyAgICBib29sIG1fa2VlcHNab29tZWRPdXRUaWxlczsKKworICAgIGJvb2wgbV9oYXNQZW5kaW5n
TGF5b3V0VGlsZXM7CisgICAgYm9vbCBtX2hhc1BlbmRpbmdVcGRhdGVUaWxpbmdNb2RlOworICAg
IC8vIEVuc3VyZSB0aGVyZSBhcmUgbm8gYXN5bmMgY2FsbHMgb24gYSBkZWFkIHRpbGUgY2FjaGUu
CisgICAgUmV0YWluUHRyPFRpbGVDYWNoZVRvbWJzdG9uZT4gbV90b21ic3RvbmU7CisKKyAgICBU
aWxpbmdNb2RlIG1fdGlsaW5nTW9kZTsKKyAgICBUaWxpbmdEaXJlY3Rpb24gbV90aWxpbmdEaXJl
Y3Rpb247CisKKyAgICBJbnRTaXplIG1fdGlsZVNpemU7CisgICAgYm9vbCBtX3RpbGVzT3BhcXVl
OworCisgICAgYm9vbCBtX3RpbGVCb3JkZXJzVmlzaWJsZTsKKyAgICBib29sIG1fdGlsZVBhaW50
Q291bnRlcnNWaXNpYmxlOworICAgIGJvb2wgbV9hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkOwor
ICAgIGJvb2wgbV9pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZDsKKworICAgIGJvb2wg
bV9kaWRDYWxsV2lsbFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nOworICAgIE93blB0cjxUaWxlR3Jp
ZD4gbV96b29tZWRPdXRUaWxlR3JpZDsKKyAgICBPd25QdHI8VGlsZUdyaWQ+IG1fem9vbWVkSW5U
aWxlR3JpZDsKKworICAgIFRpbWVyPFRpbGVDYWNoZT4gbV90aWxlQ3JlYXRpb25UaW1lcjsKKwor
ICAgIFZlY3RvcjxJbnRSZWN0PiBtX3NhdmVkRGlzcGxheVJlY3RzOworCisgICAgZmxvYXQgbV9j
dXJyZW50U2NhbGU7CisKKyAgICBmbG9hdCBtX3BlbmRpbmdTY2FsZTsKKyAgICBmbG9hdCBtX3Bl
bmRpbmdab29tZWRPdXRTY2FsZTsKKworICAgIG11dGFibGUgTXV0ZXggbV90aWxlTXV0ZXg7Cisg
ICAgbXV0YWJsZSBNdXRleCBtX3NhdmVkRGlzcGxheVJlY3RNdXRleDsKKyAgICBtdXRhYmxlIE11
dGV4IG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2VNdXRleDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKworI2VuZGlmIC8vIFRpbGVDYWNo
ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTGVnYWN5VGlsZUNhY2hlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVDYWNo
ZS5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTGVnYWN5
VGlsZUNhY2hlLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDggQEAKICAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFRpbGVDYWNoZV9oCi0jZGVm
aW5lIFRpbGVDYWNoZV9oCisjaWZuZGVmIExlZ2FjeVRpbGVDYWNoZV9oCisjZGVmaW5lIExlZ2Fj
eVRpbGVDYWNoZV9oCiAKICNpZiBQTEFURk9STShJT1MpCiAKQEAgLTQzLDI1ICs0MywyNSBAQAog
CiAjaWZkZWYgX19PQkpDX18KIEBjbGFzcyBDQUxheWVyOwotQGNsYXNzIFRpbGVDYWNoZVRvbWJz
dG9uZTsKLUBjbGFzcyBUaWxlTGF5ZXI7CitAY2xhc3MgTGVnYWN5VGlsZUNhY2hlVG9tYnN0b25l
OworQGNsYXNzIExlZ2FjeVRpbGVMYXllcjsKIEBjbGFzcyBXQUtXaW5kb3c7CiAjZWxzZQogY2xh
c3MgQ0FMYXllcjsKLWNsYXNzIFRpbGVDYWNoZVRvbWJzdG9uZTsKLWNsYXNzIFRpbGVMYXllcjsK
K2NsYXNzIExlZ2FjeVRpbGVDYWNoZVRvbWJzdG9uZTsKK2NsYXNzIExlZ2FjeVRpbGVMYXllcjsK
IGNsYXNzIFdBS1dpbmRvdzsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IFRpbGVHcmlkOworY2xhc3MgTGVnYWN5VGlsZUdyaWQ7CiAKLWNsYXNzIFRpbGVDYWNoZSB7Ci0g
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGlsZUNhY2hlKTsKK2NsYXNzIExlZ2FjeVRpbGVDYWNo
ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGVnYWN5VGlsZUNhY2hlKTsKIHB1YmxpYzoK
LSAgICBUaWxlQ2FjaGUoV0FLV2luZG93Kik7Ci0gICAgflRpbGVDYWNoZSgpOworICAgIExlZ2Fj
eVRpbGVDYWNoZShXQUtXaW5kb3cqKTsKKyAgICB+TGVnYWN5VGlsZUNhY2hlKCk7CiAKICAgICBD
R0Zsb2F0IHNjcmVlblNjYWxlKCkgY29uc3Q7CiAKQEAgLTEzNCwxMyArMTM0LDEzIEBAIHB1Ymxp
YzoKIAogICAgIC8vIEludGVybmFsCiAgICAgdm9pZCBkb0xheW91dFRpbGVzKCk7Ci0gICAgdm9p
ZCBkcmF3TGF5ZXIoVGlsZUxheWVyKiwgQ0dDb250ZXh0UmVmKTsKKyAgICB2b2lkIGRyYXdMYXll
cihMZWdhY3lUaWxlTGF5ZXIqLCBDR0NvbnRleHRSZWYpOwogICAgIHZvaWQgcHJlcGFyZVRvRHJh
dygpOwogICAgIHZvaWQgZmluaXNoZWRDcmVhdGluZ1RpbGVzKGJvb2wgZGlkQ3JlYXRlVGlsZXMs
IGJvb2wgY3JlYXRlTW9yZSk7CiAgICAgRmxvYXRSZWN0IHZpc2libGVSZWN0SW5MYXllcihDQUxh
eWVyICopIGNvbnN0OwogICAgIENBTGF5ZXIqIGhvc3RMYXllcigpIGNvbnN0OwotICAgIHVuc2ln
bmVkIHRpbGVDYXBhY2l0eUZvckdyaWQoVGlsZUdyaWQqKTsKLSAgICBDb2xvciBjb2xvckZvckdy
aWRUaWxlQm9yZGVyKFRpbGVHcmlkKikgY29uc3Q7CisgICAgdW5zaWduZWQgdGlsZUNhcGFjaXR5
Rm9yR3JpZChMZWdhY3lUaWxlR3JpZCopOworICAgIENvbG9yIGNvbG9yRm9yR3JpZFRpbGVCb3Jk
ZXIoTGVnYWN5VGlsZUdyaWQqKSBjb25zdDsKIAogICAgIHZvaWQgZG9QZW5kaW5nUmVwYWludHMo
KTsKIApAQCAtMTUwLDggKzE1MCw4IEBAIHB1YmxpYzoKICAgICBlbnVtIFN5bmNocm9ub3VzVGls
ZUNyZWF0aW9uTW9kZSB7IENvdmVyVmlzaWJsZU9ubHksIENvdmVyU3BlY3VsYXRpdmUgfTsKIAog
cHJpdmF0ZToKLSAgICBUaWxlR3JpZCogYWN0aXZlVGlsZUdyaWQoKSBjb25zdDsKLSAgICBUaWxl
R3JpZCogaW5hY3RpdmVUaWxlR3JpZCgpIGNvbnN0OworICAgIExlZ2FjeVRpbGVHcmlkKiBhY3Rp
dmVUaWxlR3JpZCgpIGNvbnN0OworICAgIExlZ2FjeVRpbGVHcmlkKiBpbmFjdGl2ZVRpbGVHcmlk
KCkgY29uc3Q7CiAKICAgICB2b2lkIHVwZGF0ZVRpbGluZ01vZGUoKTsKICAgICBib29sIGlzVGls
ZUludmFsaWRhdGlvblN1c3BlbmRlZCgpIGNvbnN0OwpAQCAtMTY2LDEwICsxNjYsMTAgQEAgcHJp
dmF0ZToKICAgICB2b2lkIGNyZWF0ZVRpbGVzSW5BY3RpdmVHcmlkKFN5bmNocm9ub3VzVGlsZUNy
ZWF0aW9uTW9kZSk7CiAgICAgdm9pZCBzY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5nUmVwYWlu
dCgpOwogCi0gICAgdm9pZCB0aWxlQ3JlYXRpb25UaW1lckZpcmVkKFRpbWVyPFRpbGVDYWNoZT4q
KTsKKyAgICB2b2lkIHRpbGVDcmVhdGlvblRpbWVyRmlyZWQoVGltZXI8TGVnYWN5VGlsZUNhY2hl
PiopOwogCi0gICAgdm9pZCBkcmF3UmVwbGFjZW1lbnRJbWFnZShUaWxlTGF5ZXIqLCBDR0NvbnRl
eHRSZWYsIENHSW1hZ2VSZWYpOwotICAgIHZvaWQgZHJhd1dpbmRvd0NvbnRlbnQoVGlsZUxheWVy
KiwgQ0dDb250ZXh0UmVmLCBDR1JlY3QgZGlydHlSZWN0KTsKKyAgICB2b2lkIGRyYXdSZXBsYWNl
bWVudEltYWdlKExlZ2FjeVRpbGVMYXllciosIENHQ29udGV4dFJlZiwgQ0dJbWFnZVJlZik7Cisg
ICAgdm9pZCBkcmF3V2luZG93Q29udGVudChMZWdhY3lUaWxlTGF5ZXIqLCBDR0NvbnRleHRSZWYs
IENHUmVjdCBkaXJ0eVJlY3QpOwogCiAgICAgV0FLV2luZG93KiBtX3dpbmRvdzsKIApAQCAtMTgw
LDcgKzE4MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1BlbmRpbmdMYXlvdXRUaWxlczsK
ICAgICBib29sIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01vZGU7CiAgICAgLy8gRW5zdXJlIHRo
ZXJlIGFyZSBubyBhc3luYyBjYWxscyBvbiBhIGRlYWQgdGlsZSBjYWNoZS4KLSAgICBSZXRhaW5Q
dHI8VGlsZUNhY2hlVG9tYnN0b25lPiBtX3RvbWJzdG9uZTsKKyAgICBSZXRhaW5QdHI8TGVnYWN5
VGlsZUNhY2hlVG9tYnN0b25lPiBtX3RvbWJzdG9uZTsKIAogICAgIFRpbGluZ01vZGUgbV90aWxp
bmdNb2RlOwogICAgIFRpbGluZ0RpcmVjdGlvbiBtX3RpbGluZ0RpcmVjdGlvbjsKQEAgLTE5NCwx
MCArMTk0LDEwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRp
b25FbmFibGVkOwogCiAgICAgYm9vbCBtX2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21p
bmc7Ci0gICAgT3duUHRyPFRpbGVHcmlkPiBtX3pvb21lZE91dFRpbGVHcmlkOwotICAgIE93blB0
cjxUaWxlR3JpZD4gbV96b29tZWRJblRpbGVHcmlkOworICAgIE93blB0cjxMZWdhY3lUaWxlR3Jp
ZD4gbV96b29tZWRPdXRUaWxlR3JpZDsKKyAgICBPd25QdHI8TGVnYWN5VGlsZUdyaWQ+IG1fem9v
bWVkSW5UaWxlR3JpZDsKIAotICAgIFRpbWVyPFRpbGVDYWNoZT4gbV90aWxlQ3JlYXRpb25UaW1l
cjsKKyAgICBUaW1lcjxMZWdhY3lUaWxlQ2FjaGU+IG1fdGlsZUNyZWF0aW9uVGltZXI7CiAKICAg
ICBWZWN0b3I8SW50UmVjdD4gbV9zYXZlZERpc3BsYXlSZWN0czsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVDYWNoZS5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTGVnYWN5VGlsZUNhY2hlLm1tCShyZXZpc2lvbiAxNjY0
NTMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlQ2FjaGUubW06MTY2NDUz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVDYWNoZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDgyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJUaWxlQ2FjaGUuaCIKKworI2lmIFBMQVRGT1JNKElPUykKKworI2lu
Y2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIKKyNp
bmNsdWRlICJTeXN0ZW1NZW1vcnkuaCIKKyNpbmNsdWRlICJUaWxlR3JpZC5oIgorI2luY2x1ZGUg
IlRpbGVHcmlkVGlsZS5oIgorI2luY2x1ZGUgIlRpbGVMYXllci5oIgorI2luY2x1ZGUgIlRpbGVM
YXllclBvb2wuaCIKKyNpbmNsdWRlICJXQUtXaW5kb3cuaCIKKyNpbmNsdWRlICJXS0dyYXBoaWNz
LmgiCisjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgIldlYkNv
cmVUaHJlYWRSdW4uaCIKKyNpbmNsdWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KKyNpbmNs
dWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNvcmVQcml2YXRlLmg+CisjaW5jbHVkZSA8d3RmL0N1cnJl
bnRUaW1lLmg+CisKK0BpbnRlcmZhY2UgV0FLVmlldyAoV2ViVmlld0V4dHJhcykKKy0gKHZvaWQp
X2Rpc3BhdGNoVGlsZURpZERyYXc6KENBTGF5ZXIqKXRpbGU7CistICh2b2lkKV93aWxsU3RhcnRT
Y3JvbGxpbmdPclpvb21pbmc7CistICh2b2lkKV9kaWRGaW5pc2hTY3JvbGxpbmdPclpvb21pbmc7
CistICh2b2lkKV9kaXNwYXRjaFRpbGVEaWREcmF3OworLSAodm9pZClfc2NoZWR1bGVMYXllckZs
dXNoRm9yUGVuZGluZ1RpbGVDYWNoZVJlcGFpbnQ7CitAZW5kCisKK0BpbnRlcmZhY2UgVGlsZUNh
Y2hlVG9tYnN0b25lIDogTlNPYmplY3QgeworICAgIEJPT0wgZGVhZDsKK30KK0Bwcm9wZXJ0eShn
ZXR0ZXI9aXNEZWFkKSBCT09MIGRlYWQ7CisKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFRpbGVD
YWNoZVRvbWJzdG9uZQorCitAc3ludGhlc2l6ZSBkZWFkOworCitAZW5kCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworVGlsZUNhY2hlOjpUaWxlQ2FjaGUoV0FLV2luZG93KiB3aW5kb3cpCisgICAg
OiBtX3dpbmRvdyh3aW5kb3cpCisgICAgLCBtX2tlZXBzWm9vbWVkT3V0VGlsZXMoZmFsc2UpCisg
ICAgLCBtX2hhc1BlbmRpbmdMYXlvdXRUaWxlcyhmYWxzZSkKKyAgICAsIG1faGFzUGVuZGluZ1Vw
ZGF0ZVRpbGluZ01vZGUoZmFsc2UpCisgICAgLCBtX3RvbWJzdG9uZShhZG9wdE5TKFtbVGlsZUNh
Y2hlVG9tYnN0b25lIGFsbG9jXSBpbml0XSkpCisgICAgLCBtX3RpbGluZ01vZGUoTm9ybWFsKQor
ICAgICwgbV90aWxpbmdEaXJlY3Rpb24oVGlsaW5nRGlyZWN0aW9uRG93bikKKyAgICAsIG1fdGls
ZVNpemUoNTEyLCA1MTIpCisgICAgLCBtX3RpbGVzT3BhcXVlKHRydWUpCisgICAgLCBtX3RpbGVC
b3JkZXJzVmlzaWJsZShmYWxzZSkKKyAgICAsIG1fdGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKGZh
bHNlKQorICAgICwgbV9hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKGZhbHNlKQorICAgICwgbV9p
c1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCh0cnVlKQorICAgICwgbV9kaWRDYWxsV2ls
bFN0YXJ0U2Nyb2xsaW5nT3Jab29taW5nKGZhbHNlKQorICAgICwgbV96b29tZWRPdXRUaWxlR3Jp
ZChQYXNzT3duUHRyPFRpbGVHcmlkPigpKQorICAgICwgbV96b29tZWRJblRpbGVHcmlkKFBhc3NP
d25QdHI8VGlsZUdyaWQ+KCkpCisgICAgLCBtX3RpbGVDcmVhdGlvblRpbWVyKHRoaXMsICZUaWxl
Q2FjaGU6OnRpbGVDcmVhdGlvblRpbWVyRmlyZWQpCisgICAgLCBtX2N1cnJlbnRTY2FsZSgxLmYp
CisgICAgLCBtX3BlbmRpbmdTY2FsZSgwKQorICAgICwgbV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUo
MCkKK3sKKyAgICBtX3pvb21lZE91dFRpbGVHcmlkID0gVGlsZUdyaWQ6OmNyZWF0ZSh0aGlzLCBt
X3RpbGVTaXplKTsKKyAgICBbaG9zdExheWVyKCkgaW5zZXJ0U3VibGF5ZXI6bV96b29tZWRPdXRU
aWxlR3JpZC0+dGlsZUhvc3RMYXllcigpIGF0SW5kZXg6MF07CisgICAgaG9zdExheWVyU2l6ZUNo
YW5nZWQoKTsKK30KKworVGlsZUNhY2hlOjp+VGlsZUNhY2hlKCkKK3sKKyAgICBbbV90b21ic3Rv
bmUuZ2V0KCkgc2V0RGVhZDp0cnVlXTsKK30KKworQ0dGbG9hdCBUaWxlQ2FjaGU6OnNjcmVlblNj
YWxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gW21fd2luZG93IHNjcmVlblNjYWxlXTsKK30KKwor
Q0FMYXllciogVGlsZUNhY2hlOjpob3N0TGF5ZXIoKSBjb25zdAoreworICAgIHJldHVybiBbbV93
aW5kb3cgaG9zdExheWVyXTsKK30KKworRmxvYXRSZWN0IFRpbGVDYWNoZTo6dmlzaWJsZVJlY3RJ
bkxheWVyKENBTGF5ZXIgKmxheWVyKSBjb25zdAoreworICAgIHJldHVybiBbbGF5ZXIgY29udmVy
dFJlY3Q6W21fd2luZG93IGV4dGVuZGVkVmlzaWJsZVJlY3RdIGZyb21MYXllcjpob3N0TGF5ZXIo
KV07Cit9CisKK2Jvb2wgVGlsZUNhY2hlOjp0aWxlc09wYXF1ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdGlsZXNPcGFxdWU7Cit9CisgICAgCitUaWxlR3JpZCogVGlsZUNhY2hlOjphY3RpdmVU
aWxlR3JpZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2tlZXBzWm9vbWVkT3V0VGlsZXMpCisgICAg
ICAgIHJldHVybiBtX3pvb21lZE91dFRpbGVHcmlkLmdldCgpOworICAgIGlmIChtX3RpbGluZ01v
ZGUgPT0gWm9vbWluZykKKyAgICAgICAgcmV0dXJuIG1fem9vbWVkT3V0VGlsZUdyaWQuZ2V0KCk7
CisgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCAmJiBtX2N1cnJlbnRTY2FsZSA9PSBtX3pvb21l
ZEluVGlsZUdyaWQtPnNjYWxlKCkpCisgICAgICAgIHJldHVybiBtX3pvb21lZEluVGlsZUdyaWQu
Z2V0KCk7CisgICAgcmV0dXJuIG1fem9vbWVkT3V0VGlsZUdyaWQuZ2V0KCk7Cit9CisKK1RpbGVH
cmlkKiBUaWxlQ2FjaGU6OmluYWN0aXZlVGlsZUdyaWQoKSBjb25zdAoreworICAgIHJldHVybiBh
Y3RpdmVUaWxlR3JpZCgpID09IG1fem9vbWVkT3V0VGlsZUdyaWQgPyBtX3pvb21lZEluVGlsZUdy
aWQuZ2V0KCkgOiBtX3pvb21lZE91dFRpbGVHcmlkLmdldCgpOworfQorCit2b2lkIFRpbGVDYWNo
ZTo6c2V0VGlsZXNPcGFxdWUoYm9vbCBvcGFxdWUpCit7CisgICAgaWYgKG1fdGlsZXNPcGFxdWUg
PT0gb3BhcXVlKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90
aWxlTXV0ZXgpOworCisgICAgbV90aWxlc09wYXF1ZSA9IG9wYXF1ZTsKKyAgICBtX3pvb21lZE91
dFRpbGVHcmlkLT51cGRhdGVUaWxlT3BhY2l0eSgpOworICAgIGlmIChtX3pvb21lZEluVGlsZUdy
aWQpCisgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+dXBkYXRlVGlsZU9wYWNpdHkoKTsKK30K
Kwordm9pZCBUaWxlQ2FjaGU6OmRvTGF5b3V0VGlsZXMoKQoreworICAgIGlmIChpc1RpbGVDcmVh
dGlvblN1c3BlbmRlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90aWxlTXV0ZXgpOworICAgIFRpbGVHcmlkKiBhY3RpdmVHcmlkID0gYWN0aXZlVGlsZUdy
aWQoKTsKKyAgICAvLyBFdmVuIHRob3VnaCB3ZSBhcmVuJ3QgYWN0dWFsbHkgY3JlYXRpbmcgdGls
ZXMgaW4gdGhlIGluYWN0aXZlIGdyaWQsIHdlCisgICAgLy8gc3RpbGwgbmVlZCB0byBkcm9wIGlu
dmFsaWQgdGlsZXMgaW4gcmVzcG9uc2UgdG8gYSBsYXlvdXQuCisgICAgLy8gU2VlIDxyZGFyOi8v
cHJvYmxlbS85ODM5ODY3Pi4KKyAgICBpZiAoVGlsZUdyaWQqIGluYWN0aXZlR3JpZCA9IGluYWN0
aXZlVGlsZUdyaWQoKSkKKyAgICAgICAgaW5hY3RpdmVHcmlkLT5kcm9wSW52YWxpZFRpbGVzKCk7
CisgICAgaWYgKGFjdGl2ZUdyaWQtPmNoZWNrRG9TaW5nbGVUaWxlTGF5b3V0KCkpCisgICAgICAg
IHJldHVybjsKKyAgICBjcmVhdGVUaWxlc0luQWN0aXZlR3JpZChDb3ZlclZpc2libGVPbmx5KTsK
K30KKwordm9pZCBUaWxlQ2FjaGU6Omhvc3RMYXllclNpemVDaGFuZ2VkKCkKK3sKKyAgICBtX3pv
b21lZE91dFRpbGVHcmlkLT51cGRhdGVIb3N0TGF5ZXJTaXplKCk7CisgICAgaWYgKG1fem9vbWVk
SW5UaWxlR3JpZCkKKyAgICAgICAgbV96b29tZWRJblRpbGVHcmlkLT51cGRhdGVIb3N0TGF5ZXJT
aXplKCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXRLZWVwc1pvb21lZE91dFRpbGVzKGJvb2wg
a2VlcCkKK3sKKyAgICBtX2tlZXBzWm9vbWVkT3V0VGlsZXMgPSBrZWVwOworfQorCit2b2lkIFRp
bGVDYWNoZTo6c2V0Q3VycmVudFNjYWxlKGZsb2F0IHNjYWxlKQoreworICAgIEFTU0VSVChzY2Fs
ZSA+IDApOworCisgICAgaWYgKGN1cnJlbnRTY2FsZSgpID09IHNjYWxlKSB7CisgICAgICAgIG1f
cGVuZGluZ1NjYWxlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX3BlbmRpbmdT
Y2FsZSA9IHNjYWxlOworICAgIGlmIChtX3RpbGluZ01vZGUgPT0gRGlzYWJsZWQpCisgICAgICAg
IHJldHVybjsKKyAgICBjb21taXRTY2FsZUNoYW5nZSgpOworCisgICAgaWYgKCFrZWVwc1pvb21l
ZE91dFRpbGVzKCkgJiYgIWlzVGlsZUludmFsaWRhdGlvblN1c3BlbmRlZCgpKSB7CisgICAgICAg
IC8vIFRpbGUgaW52YWxpZGF0aW9uIGlzIG5vcm1hbGx5IHN1c3BlbmRlZCBkdXJpbmcgem9vbWlu
ZyBieSBVSUtpdCBidXQgc29tZSBhcHBsaWNhdGlvbnMKKyAgICAgICAgLy8gdXNpbmcgY3VzdG9t
IHNjcm9sbHZpZXdzIG1heSB6b29tIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgY2FsbGJhY2tzLiBJ
bnZhbGlkYXRlIHRoZSB0aWxlcyBleHBsaWNpdGx5LgorICAgICAgICBNdXRleExvY2tlciBsb2Nr
ZXIobV90aWxlTXV0ZXgpOworICAgICAgICBhY3RpdmVUaWxlR3JpZCgpLT5kcm9wQWxsVGlsZXMo
KTsKKyAgICAgICAgYWN0aXZlVGlsZUdyaWQoKS0+Y3JlYXRlVGlsZXMoQ292ZXJWaXNpYmxlT25s
eSk7CisgICAgfQorfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0Wm9vbWVkT3V0U2NhbGUoZmxvYXQg
c2NhbGUpCit7CisgICAgQVNTRVJUKHNjYWxlID4gMCk7CisKKyAgICBpZiAoem9vbWVkT3V0U2Nh
bGUoKSA9PSBzY2FsZSkgeworICAgICAgICBtX3BlbmRpbmdab29tZWRPdXRTY2FsZSA9IDA7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUgPSBzY2Fs
ZTsKKyAgICBpZiAobV90aWxpbmdNb2RlID09IERpc2FibGVkKQorICAgICAgICByZXR1cm47Cisg
ICAgY29tbWl0U2NhbGVDaGFuZ2UoKTsKK30KKyAgICAKK3ZvaWQgVGlsZUNhY2hlOjpjb21taXRT
Y2FsZUNoYW5nZSgpCit7CisgICAgQVNTRVJUKG1fcGVuZGluZ1pvb21lZE91dFNjYWxlIHx8IG1f
cGVuZGluZ1NjYWxlKTsKKyAgICBBU1NFUlQobV90aWxpbmdNb2RlICE9IERpc2FibGVkKTsKKyAg
ICAKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworCisgICAgaWYgKG1fcGVu
ZGluZ1pvb21lZE91dFNjYWxlKSB7CisgICAgICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnNldFNj
YWxlKG1fcGVuZGluZ1pvb21lZE91dFNjYWxlKTsKKyAgICAgICAgbV9wZW5kaW5nWm9vbWVkT3V0
U2NhbGUgPSAwOworICAgIH0KKyAgICAKKyAgICBpZiAoIW1fa2VlcHNab29tZWRPdXRUaWxlcykg
eworICAgICAgICBBU1NFUlQoYWN0aXZlVGlsZUdyaWQoKSA9PSBtX3pvb21lZE91dFRpbGVHcmlk
KTsKKyAgICAgICAgaWYgKG1fcGVuZGluZ1NjYWxlKSB7CisgICAgICAgICAgICBtX2N1cnJlbnRT
Y2FsZSA9IG1fcGVuZGluZ1NjYWxlOworICAgICAgICAgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+
c2V0U2NhbGUobV9jdXJyZW50U2NhbGUpOworICAgICAgICB9CisgICAgICAgIG1fcGVuZGluZ1Nj
YWxlID0gMDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChtX3BlbmRpbmdTY2Fs
ZSkgeworICAgICAgICBtX2N1cnJlbnRTY2FsZSA9IG1fcGVuZGluZ1NjYWxlOworICAgICAgICBt
X3BlbmRpbmdTY2FsZSA9IDA7CisgICAgfQorCisgICAgaWYgKG1fY3VycmVudFNjYWxlICE9IG1f
em9vbWVkT3V0VGlsZUdyaWQtPnNjYWxlKCkpIHsKKyAgICAgICAgaWYgKCFtX3pvb21lZEluVGls
ZUdyaWQpIHsKKyAgICAgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZCA9IFRpbGVHcmlkOjpjcmVh
dGUodGhpcywgbV90aWxlU2l6ZSk7CisgICAgICAgICAgICBbaG9zdExheWVyKCkgYWRkU3VibGF5
ZXI6bV96b29tZWRJblRpbGVHcmlkLT50aWxlSG9zdExheWVyKCldOworICAgICAgICAgICAgaG9z
dExheWVyU2l6ZUNoYW5nZWQoKTsKKyAgICAgICAgfQorICAgICAgICBtX3pvb21lZEluVGlsZUdy
aWQtPnNldFNjYWxlKG1fY3VycmVudFNjYWxlKTsKKyAgICB9CisKKyAgICAvLyBLZWVwIHRoZSBj
dXJyZW50IG9yZGVyaW5nIGR1cmluZyB6b29taW5nLgorICAgIGlmIChtX3RpbGluZ01vZGUgIT0g
Wm9vbWluZykKKyAgICAgICAgYnJpbmdBY3RpdmVUaWxlR3JpZFRvRnJvbnQoKTsKKworICAgIGFk
anVzdFRpbGVHcmlkVHJhbnNmb3JtcygpOworICAgIGxheW91dFRpbGVzKCk7Cit9CisKK3ZvaWQg
VGlsZUNhY2hlOjpicmluZ0FjdGl2ZVRpbGVHcmlkVG9Gcm9udCgpCit7CisgICAgVGlsZUdyaWQq
IGFjdGl2ZUdyaWQgPSBhY3RpdmVUaWxlR3JpZCgpOworICAgIFRpbGVHcmlkKiBvdGhlckdyaWQg
PSBpbmFjdGl2ZVRpbGVHcmlkKCk7CisgICAgaWYgKCFvdGhlckdyaWQpCisgICAgICAgIHJldHVy
bjsKKyAgICBDQUxheWVyKiBmcm9udExheWVyID0gYWN0aXZlR3JpZC0+dGlsZUhvc3RMYXllcigp
OworICAgIENBTGF5ZXIqIG90aGVyTGF5ZXIgPSBvdGhlckdyaWQtPnRpbGVIb3N0TGF5ZXIoKTsK
KyAgICBbaG9zdExheWVyKCkgaW5zZXJ0U3VibGF5ZXI6ZnJvbnRMYXllciBhYm92ZTpvdGhlckxh
eWVyXTsKK30KKyAgICAKK3ZvaWQgVGlsZUNhY2hlOjphZGp1c3RUaWxlR3JpZFRyYW5zZm9ybXMo
KQoreworICAgIENBTGF5ZXIqIHpvb21lZE91dEhvc3RMYXllciA9IG1fem9vbWVkT3V0VGlsZUdy
aWQtPnRpbGVIb3N0TGF5ZXIoKTsKKyAgICBmbG9hdCB0cmFuc2Zvcm1TY2FsZSA9IGN1cnJlbnRT
Y2FsZSgpIC8gem9vbWVkT3V0U2NhbGUoKTsKKyAgICBbem9vbWVkT3V0SG9zdExheWVyIHNldFRy
YW5zZm9ybTpDQVRyYW5zZm9ybTNETWFrZVNjYWxlKHRyYW5zZm9ybVNjYWxlLCB0cmFuc2Zvcm1T
Y2FsZSwgMS4wZildOworICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0ZUhvc3RMYXllclNp
emUoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OmxheW91dFRpbGVzKCkKK3sKKyAgICBpZiAobV9o
YXNQZW5kaW5nTGF5b3V0VGlsZXMpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhc1BlbmRpbmdM
YXlvdXRUaWxlcyA9IHRydWU7CisKKyAgICBUaWxlQ2FjaGVUb21ic3RvbmUgKnRvbWJzdG9uZSA9
IG1fdG9tYnN0b25lLmdldCgpOworICAgIFdlYlRocmVhZFJ1biheeworICAgICAgICBpZiAoW3Rv
bWJzdG9uZSBpc0RlYWRdKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2hhc1BlbmRp
bmdMYXlvdXRUaWxlcyA9IGZhbHNlOworICAgICAgICBkb0xheW91dFRpbGVzKCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpsYXlvdXRUaWxlc05vdygpCit7CisgICAgQVNTRVJUKFdl
YlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKTsKKworICAgIC8vIGxheW91dFRpbGVzTm93KCkg
aXMgY2FsbGVkIGFmdGVyIGEgem9vbSwgd2hpbGUgdGhlIHRpbGUgbW9kZSBpcyBzdGlsbCBzZXQg
dG8gWm9vbWluZy4KKyAgICAvLyBJZiB3ZSBjaGVja2VkIGZvciBpc1RpbGVDcmVhdGlvblN1c3Bl
bmRlZCBoZXJlLCB0aGF0IHdvdWxkIGNhdXNlIDxyZGFyOi8vcHJvYmxlbS84NDM0MTEyPiAoUGFn
ZSBmbGFzaGVzIGFmdGVyIHpvb21pbmcgaW4vb3V0KS4KKyAgICBpZiAobV90aWxpbmdNb2RlID09
IERpc2FibGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgLy8gRklYTUU6IGxheW91dFRp
bGVzTm93IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgc3RhdGUgaGFzIGJlZW4gc2V0IHRvIG5vbi16
b29taW5nIGFuZCB0aGUgYWN0aXZlIGdyaWQgaXMgdGhlIGZpbmFsIG9uZS4gCisgICAgLy8gRml4
IHRoaXMgaW4gVUlLaXQgc2lkZSAocGVyaGFwcyBhbHNvIGdldHRpbmcgcmlkIG9mIHRoaXMgY2Fs
bCkgYW5kIHJlbW92ZSB0aGlzIGNvZGUgYWZ0ZXJ3YXJkcy4KKyAgICAvLyA8cmRhcjovL3Byb2Js
ZW0vOTY3Mjk5Mz4KKyAgICBUaWxpbmdNb2RlIHNhdmVkVGlsaW5nTW9kZSA9IG1fdGlsaW5nTW9k
ZTsKKyAgICBpZiAobV90aWxpbmdNb2RlID09IFpvb21pbmcpCisgICAgICAgIG1fdGlsaW5nTW9k
ZSA9IE1pbmltYWw7CisKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAg
IFRpbGVHcmlkKiBhY3RpdmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKKyAgICBpZiAoYWN0aXZl
R3JpZC0+Y2hlY2tEb1NpbmdsZVRpbGVMYXlvdXQoKSkgeworICAgICAgICBtX3RpbGluZ01vZGUg
PSBzYXZlZFRpbGluZ01vZGU7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY3JlYXRlVGls
ZXNJbkFjdGl2ZUdyaWQoQ292ZXJWaXNpYmxlT25seSk7CisgICAgbV90aWxpbmdNb2RlID0gc2F2
ZWRUaWxpbmdNb2RlOworfQorCit2b2lkIFRpbGVDYWNoZTo6bGF5b3V0VGlsZXNOb3dGb3JSZWN0
KGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2VkT3JE
aXNhYmxlZCgpKTsKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworCisgICAg
YWN0aXZlVGlsZUdyaWQoKS0+YWRkVGlsZXNDb3ZlcmluZ1JlY3QocmVjdCk7Cit9CisKK3ZvaWQg
VGlsZUNhY2hlOjpyZW1vdmVBbGxOb25WaXNpYmxlVGlsZXMoKQoreworICAgIE11dGV4TG9ja2Vy
IGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgcmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzSW50ZXJu
YWwoKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6OnJlbW92ZUFsbE5vblZpc2libGVUaWxlc0ludGVy
bmFsKCkKK3sKKyAgICBUaWxlR3JpZCogYWN0aXZlR3JpZCA9IGFjdGl2ZVRpbGVHcmlkKCk7Cisg
ICAgaWYgKGtlZXBzWm9vbWVkT3V0VGlsZXMoKSAmJiBhY3RpdmVHcmlkID09IG1fem9vbWVkSW5U
aWxlR3JpZCAmJiBhY3RpdmVHcmlkLT5oYXNUaWxlcygpKQorICAgICAgICBtX3pvb21lZE91dFRp
bGVHcmlkLT5kcm9wQWxsVGlsZXMoKTsKKworICAgIEludFJlY3QgYWN0aXZlVGlsZUJvdW5kcyA9
IGFjdGl2ZUdyaWQtPmJvdW5kcygpOworICAgIGlmIChhY3RpdmVUaWxlQm91bmRzLndpZHRoKCkg
PD0gbV90aWxlU2l6ZS53aWR0aCgpICYmIGFjdGl2ZVRpbGVCb3VuZHMuaGVpZ2h0KCkgPD0gbV90
aWxlU2l6ZS5oZWlnaHQoKSkgeworICAgICAgICAvLyBJZiB0aGUgdmlldyBpcyBzbWFsbGVyIHRo
YW4gYSB0aWxlLCBrZWVwIHRoZSB0aWxlIGV2ZW4gaWYgaXQgaXMgbm90IHZpc2libGUuCisgICAg
ICAgIGFjdGl2ZUdyaWQtPmRyb3BUaWxlc091dHNpZGVSZWN0KGFjdGl2ZVRpbGVCb3VuZHMpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYWN0aXZlR3JpZC0+ZHJvcFRpbGVzT3V0c2lk
ZVJlY3QoYWN0aXZlR3JpZC0+dmlzaWJsZVJlY3QoKSk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpy
ZW1vdmVBbGxUaWxlcygpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsK
KyAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wQWxsVGlsZXMoKTsKKyAgICBpZiAobV96b29t
ZWRJblRpbGVHcmlkKQorICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPmRyb3BBbGxUaWxlcygp
OworfQorCit2b2lkIFRpbGVDYWNoZTo6cmVtb3ZlRm9yZWdyb3VuZFRpbGVzKCkKK3sKKyAgICBN
dXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgIGlmICgha2VlcHNab29tZWRPdXRU
aWxlcygpKQorICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wQWxsVGlsZXMoKTsKKyAg
ICBpZiAobV96b29tZWRJblRpbGVHcmlkKQorICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPmRy
b3BBbGxUaWxlcygpOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0Q29udGVudFJlcGxhY2VtZW50
SW1hZ2UoUmV0YWluUHRyPENHSW1hZ2VSZWY+IGNvbnRlbnRSZXBsYWNlbWVudEltYWdlKQorewor
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NvbnRlbnRSZXBsYWNlbWVudEltYWdlTXV0ZXgpOwor
ICAgIG1fY29udGVudFJlcGxhY2VtZW50SW1hZ2UgPSBjb250ZW50UmVwbGFjZW1lbnRJbWFnZTsK
K30KKworUmV0YWluUHRyPENHSW1hZ2VSZWY+IFRpbGVDYWNoZTo6Y29udGVudFJlcGxhY2VtZW50
SW1hZ2UoKSBjb25zdAoreworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NvbnRlbnRSZXBsYWNl
bWVudEltYWdlTXV0ZXgpOworICAgIHJldHVybiBtX2NvbnRlbnRSZXBsYWNlbWVudEltYWdlOwor
fQorCit2b2lkIFRpbGVDYWNoZTo6c2V0VGlsZUJvcmRlcnNWaXNpYmxlKGJvb2wgZmxhZykKK3sK
KyAgICBpZiAoZmxhZyA9PSBtX3RpbGVCb3JkZXJzVmlzaWJsZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgbV90aWxlQm9yZGVyc1Zpc2libGUgPSBmbGFnOworICAgIG1fem9vbWVkT3V0VGlsZUdy
aWQtPnVwZGF0ZVRpbGVCb3JkZXJWaXNpYmlsaXR5KCk7CisgICAgaWYgKG1fem9vbWVkSW5UaWxl
R3JpZCkKKyAgICAgICAgbV96b29tZWRJblRpbGVHcmlkLT51cGRhdGVUaWxlQm9yZGVyVmlzaWJp
bGl0eSgpOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0VGlsZVBhaW50Q291bnRlcnNWaXNpYmxl
KGJvb2wgZmxhZykKK3sKKyAgICBtX3RpbGVQYWludENvdW50ZXJzVmlzaWJsZSA9IGZsYWc7Cisg
ICAgLy8gVGhlIG51bWJlcnMgd2lsbCBzaG93IHVwIHRoZSBuZXh0IHRpbWUgdGhlIHRpbGVzIHBh
aW50LgorfQorCit2b2lkIFRpbGVDYWNoZTo6ZmluaXNoZWRDcmVhdGluZ1RpbGVzKGJvb2wgZGlk
Q3JlYXRlVGlsZXMsIGJvb2wgY3JlYXRlTW9yZSkKK3sKKyAgICAvLyBXZSBuZWVkIHRvIGVuc3Vy
ZSB0aGF0IGFsbCB0aWxlcyBhcmUgc2hvd2luZyB0aGUgc2FtZSB2ZXJzaW9uIG9mIHRoZSBjb250
ZW50LgorICAgIGlmIChkaWRDcmVhdGVUaWxlcyAmJiAhbV9zYXZlZERpc3BsYXlSZWN0cy5pc0Vt
cHR5KCkpCisgICAgICAgIGZsdXNoU2F2ZWREaXNwbGF5UmVjdHMoKTsKKworICAgIGlmIChrZWVw
c1pvb21lZE91dFRpbGVzKCkpIHsKKyAgICAgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCAmJiBh
Y3RpdmVUaWxlR3JpZCgpID09IG1fem9vbWVkT3V0VGlsZUdyaWQgJiYgbV90aWxpbmdNb2RlICE9
IFpvb21pbmcgJiYgbV96b29tZWRJblRpbGVHcmlkLT5oYXNUaWxlcygpKSB7CisgICAgICAgICAg
ICAvLyBUaGlzIENBIHRyYW5zYWN0aW9uIHdpbGwgY292ZXIgdGhlIHNjcmVlbiB3aXRoIHRvcCBs
ZXZlbCB0aWxlcy4KKyAgICAgICAgICAgIC8vIFdlIGNhbiByZW1vdmUgem9vbWVkLWluIHRpbGVz
IHdpdGhvdXQgZmxhc2hpbmcuCisgICAgICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPmRyb3BB
bGxUaWxlcygpOworICAgICAgICB9IGVsc2UgaWYgKGFjdGl2ZVRpbGVHcmlkKCkgPT0gbV96b29t
ZWRJblRpbGVHcmlkKSB7CisgICAgICAgICAgICAvLyBQYXNzIHRoZSBtaW5pbXVtIHBvc3NpYmxl
IGRpc3RhbmNlIHRvIGNvbnNpZGVyIGFsbCB0aWxlcywgZXZlbiB2aXNpYmxlIG9uZXMuCisgICAg
ICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wRGlzdGFudFRpbGVzKDAsIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6bWluKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
S2VlcCBjcmVhdGluZyB0aWxlcyB1bnRpbCB0aGUgd2hvbGUgY292ZXJSZWN0IGlzIGNvdmVyZWQu
CisgICAgaWYgKGNyZWF0ZU1vcmUpCisgICAgICAgIG1fdGlsZUNyZWF0aW9uVGltZXIuc3RhcnRP
bmVTaG90KDApOworfQorCit2b2lkIFRpbGVDYWNoZTo6dGlsZUNyZWF0aW9uVGltZXJGaXJlZChU
aW1lcjxUaWxlQ2FjaGU+KikKK3sKKyAgICBpZiAoaXNUaWxlQ3JlYXRpb25TdXNwZW5kZWQoKSkK
KyAgICAgICAgcmV0dXJuOworICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7Cisg
ICAgY3JlYXRlVGlsZXNJbkFjdGl2ZUdyaWQoQ292ZXJTcGVjdWxhdGl2ZSk7Cit9CisKK3ZvaWQg
VGlsZUNhY2hlOjpjcmVhdGVUaWxlc0luQWN0aXZlR3JpZChTeW5jaHJvbm91c1RpbGVDcmVhdGlv
bk1vZGUgbW9kZSkKK3sKKyAgICBpZiAobWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuaGFzUmVjZWl2
ZWRNZW1vcnlQcmVzc3VyZSgpKSB7CisgICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIlVuZGVy
IG1lbW9yeSBwcmVzc3VyZSBhdDogJXMiLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKKyAgICAgICAg
cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzSW50ZXJuYWwoKTsKKyAgICB9CisgICAgYWN0aXZlVGls
ZUdyaWQoKS0+Y3JlYXRlVGlsZXMobW9kZSk7Cit9CisKK3Vuc2lnbmVkIFRpbGVDYWNoZTo6dGls
ZUNhcGFjaXR5Rm9yR3JpZChUaWxlR3JpZCogZ3JpZCkKK3sKKyAgICBzdGF0aWMgdW5zaWduZWQg
Y2FwYWNpdHk7CisgICAgaWYgKCFjYXBhY2l0eSkgeworICAgICAgICBzaXplX3QgdG90YWxNZW1v
cnkgPSBzeXN0ZW1Ub3RhbE1lbW9yeSgpOworICAgICAgICB0b3RhbE1lbW9yeSAvPSAxMDI0ICog
MTAyNDsKKyAgICAgICAgaWYgKHRvdGFsTWVtb3J5ID49IDEwMjQpCisgICAgICAgICAgICBjYXBh
Y2l0eSA9IDEyOCAqIDEwMjQgKiAxMDI0OworICAgICAgICBlbHNlIGlmICh0b3RhbE1lbW9yeSA+
PSA1MTIpCisgICAgICAgICAgICBjYXBhY2l0eSA9IDY0ICogMTAyNCAqIDEwMjQ7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGNhcGFjaXR5ID0gMzIgKiAxMDI0ICogMTAyNDsKKyAgICB9CisK
KyAgICBpbnQgZ3JpZENhcGFjaXR5OworCisgICAgaW50IG1lbW9yeUxldmVsID0gc3lzdGVtTWVt
b3J5TGV2ZWwoKTsKKyAgICBpZiAobWVtb3J5TGV2ZWwgPCAxNSkKKyAgICAgICAgZ3JpZENhcGFj
aXR5ID0gY2FwYWNpdHkgLyA0OworICAgIGVsc2UgaWYgKG1lbW9yeUxldmVsIDwgMjApCisgICAg
ICAgIGdyaWRDYXBhY2l0eSA9IGNhcGFjaXR5IC8gMjsKKyAgICBlbHNlIGlmIChtZW1vcnlMZXZl
bCA8IDMwKSAKKyAgICAgICAgZ3JpZENhcGFjaXR5ID0gY2FwYWNpdHkgKiAzIC8gNDsKKyAgICBl
bHNlCisgICAgICAgIGdyaWRDYXBhY2l0eSA9IGNhcGFjaXR5OworCisgICAgaWYgKGtlZXBzWm9v
bWVkT3V0VGlsZXMoKSAmJiBncmlkID09IG1fem9vbWVkT3V0VGlsZUdyaWQpIHsKKyAgICAgICAg
aWYgKGFjdGl2ZVRpbGVHcmlkKCkgPT0gbV96b29tZWRPdXRUaWxlR3JpZCkKKyAgICAgICAgICAg
IHJldHVybiBncmlkQ2FwYWNpdHk7CisgICAgICAgIHJldHVybiBncmlkQ2FwYWNpdHkgLyA0Owor
ICAgIH0KKyAgICByZXR1cm4gZ3JpZENhcGFjaXR5ICogMyAvIDQ7Cit9CisKK0NvbG9yIFRpbGVD
YWNoZTo6Y29sb3JGb3JHcmlkVGlsZUJvcmRlcihUaWxlR3JpZCogZ3JpZCkgY29uc3QKK3sKKyAg
ICBpZiAoZ3JpZCA9PSBtX3pvb21lZE91dFRpbGVHcmlkKQorICAgICAgICByZXR1cm4gQ29sb3Io
LjNmLCAuMGYsIDAuNGYsIDAuNWYpOworCisgICAgcmV0dXJuIENvbG9yKC4wZiwgLjBmLCAwLjRm
LCAwLjVmKTsKK30KKworc3RhdGljIGJvb2wgc2hvdWxkUmVwYWludEluUGllY2VzKGNvbnN0IENH
UmVjdCYgZGlydHlSZWN0LCBDR1NSZWdpb25PYmogZGlydHlSZWdpb24sIENHRmxvYXQgY29udGVu
dHNTY2FsZSkKK3sKKyAgICAvLyBFc3RpbWF0ZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgdXNl
IHRoZSB1bmlvbmVkIHJlY3Qgb3IgdGhlIGluZGl2aWR1YWwgcmVjdHMuCisgICAgLy8gV2UgZG8g
dGhpcyBieSBjb21wdXRpbmcgdGhlIHBlcmNlbnRhZ2Ugb2YgIndhc3RlZCBzcGFjZSIgaW4gdGhl
IHVuaW9uLiBJZiB0aGF0IHdhc3RlZCBzcGFjZQorICAgIC8vIGlzIHRvbyBsYXJnZSwgdGhlbiB3
ZSB3aWxsIGRvIGluZGl2aWR1YWwgcmVjdCBwYWludGluZyBpbnN0ZWFkLgorICAgIGZsb2F0IHNp
bmdsZVBpeGVscyA9IDA7CisgICAgdW5zaWduZWQgcmVjdENvdW50ID0gMDsKKworICAgIENHU1Jl
Z2lvbkVudW1lcmF0b3JPYmogZW51bWVyYXRvciA9IENHU1JlZ2lvbkVudW1lcmF0b3IoZGlydHlS
ZWdpb24pOworICAgIENHUmVjdCAqc3ViUmVjdDsKKyAgICB3aGlsZSAoKHN1YlJlY3QgPSBDR1NO
ZXh0UmVjdChlbnVtZXJhdG9yKSkpIHsKKyAgICAgICAgKytyZWN0Q291bnQ7CisgICAgICAgIHNp
bmdsZVBpeGVscyArPSBzdWJSZWN0LT5zaXplLndpZHRoICogc3ViUmVjdC0+c2l6ZS5oZWlnaHQ7
CisgICAgfQorICAgIHNpbmdsZVBpeGVscyAvPSAoY29udGVudHNTY2FsZSAqIGNvbnRlbnRzU2Nh
bGUpOworICAgIENHU1JlbGVhc2VSZWdpb25FbnVtZXJhdG9yKGVudW1lcmF0b3IpOworCisgICAg
Y29uc3QgdW5zaWduZWQgY1JlY3RUaHJlc2hvbGQgPSAxMDsKKyAgICBpZiAocmVjdENvdW50IDwg
MiB8fCByZWN0Q291bnQgPiBjUmVjdFRocmVzaG9sZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgY29uc3QgZmxvYXQgY1dhc3RlZFNwYWNlVGhyZXNob2xkID0gMC41MGY7CisgICAgZmxv
YXQgdW5pb25QaXhlbHMgPSBkaXJ0eVJlY3Quc2l6ZS53aWR0aCAqIGRpcnR5UmVjdC5zaXplLmhl
aWdodDsKKyAgICBmbG9hdCB3YXN0ZWRTcGFjZSA9IDEuZiAtIChzaW5nbGVQaXhlbHMgLyB1bmlv
blBpeGVscyk7CisgICAgcmV0dXJuIHdhc3RlZFNwYWNlID4gY1dhc3RlZFNwYWNlVGhyZXNob2xk
OworfQorCit2b2lkIFRpbGVDYWNoZTo6ZHJhd1JlcGxhY2VtZW50SW1hZ2UoVGlsZUxheWVyKiBs
YXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQsIENHSW1hZ2VSZWYgaW1hZ2UpCit7CisgICAgQ0dD
b250ZXh0U2V0UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDEsIDEsIDEpOworICAgIENHQ29udGV4
dEZpbGxSZWN0KGNvbnRleHQsIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KSk7
CisKKyAgICBDR0Zsb2F0IGNvbnRlbnRzU2NhbGUgPSBbbGF5ZXIgY29udGVudHNTY2FsZV07Cisg
ICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSAvIGNvbnRlbnRzU2NhbGUsIC0xIC8gY29u
dGVudHNTY2FsZSk7CisgICAgQ0dSZWN0IGltYWdlUmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgQ0dJ
bWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpOworICAgIENHQ29u
dGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAwLCAtaW1hZ2VSZWN0LnNpemUuaGVpZ2h0KTsKKyAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgaW1hZ2VSZWN0LCBpbWFnZSk7Cit9CisKK3Zv
aWQgVGlsZUNhY2hlOjpkcmF3V2luZG93Q29udGVudChUaWxlTGF5ZXIqIGxheWVyLCBDR0NvbnRl
eHRSZWYgY29udGV4dCwgQ0dSZWN0IGRpcnR5UmVjdCkKK3sKKyAgICBDR1JlY3QgZnJhbWUgPSBb
bGF5ZXIgZnJhbWVdOworICAgIFdLRm9udEFudGlhbGlhc2luZ1N0YXRlU2F2ZXIgZm9udEFudGlh
bGlhc2luZ1N0YXRlKGNvbnRleHQsIFttX3dpbmRvdyB1c2VPcmllbnRhdGlvbkRlcGVuZGVudEZv
bnRBbnRpYWxpYXNpbmddICYmIFtsYXllciBpc09wYXF1ZV0pOworICAgIGZvbnRBbnRpYWxpYXNp
bmdTdGF0ZS5zZXR1cChbV0FLV2luZG93IGhhc0xhbmRzY2FwZU9yaWVudGF0aW9uXSk7CisKKyAg
ICBDR1NSZWdpb25PYmogZHJhd1JlZ2lvbiA9IChDR1NSZWdpb25PYmopW2xheWVyIHJlZ2lvbkJl
aW5nRHJhd25dOworICAgIENHRmxvYXQgY29udGVudHNTY2FsZSA9IFtsYXllciBjb250ZW50c1Nj
YWxlXTsKKyAgICBpZiAoZHJhd1JlZ2lvbiAmJiBzaG91bGRSZXBhaW50SW5QaWVjZXMoZGlydHlS
ZWN0LCBkcmF3UmVnaW9uLCBjb250ZW50c1NjYWxlKSkgeworICAgICAgICAvLyBVc2UgZmluZSBn
cmFpbmVkIHJlcGFpbnQgcmVjdGFuZ2xlcyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIHBhaW50
ZWQgcGl4ZWxzLgorICAgICAgICBDR1NSZWdpb25FbnVtZXJhdG9yT2JqIGVudW1lcmF0b3IgPSBD
R1NSZWdpb25FbnVtZXJhdG9yKGRyYXdSZWdpb24pOworICAgICAgICBDR1JlY3QgKnN1YlJlY3Q7
CisgICAgICAgIHdoaWxlICgoc3ViUmVjdCA9IENHU05leHRSZWN0KGVudW1lcmF0b3IpKSkgewor
ICAgICAgICAgICAgQ0dSZWN0IGFkanVzdGVkU3ViUmVjdCA9ICpzdWJSZWN0OworICAgICAgICAg
ICAgYWRqdXN0ZWRTdWJSZWN0Lm9yaWdpbi54IC89IGNvbnRlbnRzU2NhbGU7CisgICAgICAgICAg
ICBhZGp1c3RlZFN1YlJlY3Qub3JpZ2luLnkgPSBmcmFtZS5zaXplLmhlaWdodCAtIChhZGp1c3Rl
ZFN1YlJlY3Qub3JpZ2luLnkgKyBhZGp1c3RlZFN1YlJlY3Quc2l6ZS5oZWlnaHQpIC8gY29udGVu
dHNTY2FsZTsKKyAgICAgICAgICAgIGFkanVzdGVkU3ViUmVjdC5zaXplLndpZHRoIC89IGNvbnRl
bnRzU2NhbGU7CisgICAgICAgICAgICBhZGp1c3RlZFN1YlJlY3Quc2l6ZS5oZWlnaHQgLz0gY29u
dGVudHNTY2FsZTsKKworICAgICAgICAgICAgQ0dSZWN0IHN1YlJlY3RJblN1cGVyID0gW2hvc3RM
YXllcigpIGNvbnZlcnRSZWN0OmFkanVzdGVkU3ViUmVjdCBmcm9tTGF5ZXI6bGF5ZXJdOworICAg
ICAgICAgICAgW21fd2luZG93IGRpc3BsYXlSZWN0OnN1YlJlY3RJblN1cGVyXTsKKyAgICAgICAg
fQorICAgICAgICBDR1NSZWxlYXNlUmVnaW9uRW51bWVyYXRvcihlbnVtZXJhdG9yKTsKKyAgICB9
IGVsc2UgeworICAgICAgICAvLyBTaW1wbGUgcmVwYWludAorICAgICAgICBDR1JlY3QgZGlydHlS
ZWN0SW5TdXBlciA9IFtob3N0TGF5ZXIoKSBjb252ZXJ0UmVjdDpkaXJ0eVJlY3QgZnJvbUxheWVy
OmxheWVyXTsKKyAgICAgICAgW21fd2luZG93IGRpc3BsYXlSZWN0OmRpcnR5UmVjdEluU3VwZXJd
OworICAgIH0KKworICAgIGZvbnRBbnRpYWxpYXNpbmdTdGF0ZS5yZXN0b3JlKCk7Cit9CisKK3Zv
aWQgVGlsZUNhY2hlOjpkcmF3TGF5ZXIoVGlsZUxheWVyKiBsYXllciwgQ0dDb250ZXh0UmVmIGNv
bnRleHQpCit7CisgICAgLy8gVGhlIHdlYiBsb2NrIHVubG9jayBvYnNlcnZlciBydW5zIGFmdGVy
IENBIGNvbW1pdCBvYnNlcnZlci4KKyAgICBpZiAoIVdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxl
ZCgpKSB7CisgICAgICAgIExPR19FUlJPUigiRHJhd2luZyB3aXRob3V0IGhvbGRpbmcgdGhlIHdl
YiB0aHJlYWQgbG9jayIpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICBXS1NldEN1cnJlbnRHcmFwaGljc0NvbnRleHQoY29udGV4dCk7CisKKyAgICBDR1JlY3Qg
ZGlydHlSZWN0ID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOworICAgIENH
UmVjdCBmcmFtZSA9IFtsYXllciBmcmFtZV07CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNv
bnRleHQsIC1mcmFtZS5vcmlnaW4ueCwgLWZyYW1lLm9yaWdpbi55KTsKKyAgICBDR1JlY3Qgc2Nh
bGVkRnJhbWUgPSBbaG9zdExheWVyKCkgY29udmVydFJlY3Q6W2xheWVyIGJvdW5kc10gZnJvbUxh
eWVyOmxheWVyXTsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCBmcmFtZS5zaXplLndp
ZHRoIC8gc2NhbGVkRnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQgLyBzY2FsZWRG
cmFtZS5zaXplLmhlaWdodCk7CisKKyAgICBpZiAoUmV0YWluUHRyPENHSW1hZ2U+IGNvbnRlbnRS
ZXBsYWNlbWVudEltYWdlID0gdGhpcy0+Y29udGVudFJlcGxhY2VtZW50SW1hZ2UoKSkKKyAgICAg
ICAgZHJhd1JlcGxhY2VtZW50SW1hZ2UobGF5ZXIsIGNvbnRleHQsIGNvbnRlbnRSZXBsYWNlbWVu
dEltYWdlLmdldCgpKTsKKyAgICBlbHNlCisgICAgICAgIGRyYXdXaW5kb3dDb250ZW50KGxheWVy
LCBjb250ZXh0LCBkaXJ0eVJlY3QpOworCisgICAgKytsYXllci5wYWludENvdW50OworICAgIGlm
IChtX3RpbGVQYWludENvdW50ZXJzVmlzaWJsZSkgeworICAgICAgICBjaGFyIHRleHRbMTZdOwor
ICAgICAgICBzbnByaW50Zih0ZXh0LCBzaXplb2YodGV4dCksICIlZCIsIGxheWVyLnBhaW50Q291
bnQpOworCisgICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CisKKyAgICAgICAg
Q0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmln
aW4ueSk7CisgICAgICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjb250ZXh0LCBj
YWNoZWRDR0NvbG9yKGNvbG9yRm9yR3JpZFRpbGVCb3JkZXIoW2xheWVyIHRpbGVHcmlkXSksIENv
bG9yU3BhY2VEZXZpY2VSR0IpKTsKKyAgICAgICAgCisgICAgICAgIENHUmVjdCBsYWJlbEJvdW5k
cyA9IFtsYXllciBib3VuZHNdOworICAgICAgICBsYWJlbEJvdW5kcy5zaXplLndpZHRoID0gMTAg
KyAxMiAqIHN0cmxlbih0ZXh0KTsKKyAgICAgICAgbGFiZWxCb3VuZHMuc2l6ZS5oZWlnaHQgPSAy
NTsKKyAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgbGFiZWxCb3VuZHMpOworCisg
ICAgICAgIGlmIChhY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpCisgICAgICAgICAgICBDR0Nv
bnRleHRTZXRSR0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMCwgMCwgMC40Zik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLCAxLCAx
LCAwLjZmKTsKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisjcHJhZ21hIGNsYW5nIGRp
YWdub3N0aWMgaWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKKyAgICAgICAgQ0dD
b250ZXh0U2V0VGV4dE1hdHJpeChjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSgx
LCAtMSkpOworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlh
Z25vc3RpYyBpZ25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgorICAgICAgICBDR0Nv
bnRleHRTZWxlY3RGb250KGNvbnRleHQsICJIZWx2ZXRpY2EiLCAyNSwga0NHRW5jb2RpbmdNYWNS
b21hbik7CisgICAgICAgIENHQ29udGV4dFNob3dUZXh0QXRQb2ludChjb250ZXh0LCBsYWJlbEJv
dW5kcy5vcmlnaW4ueCArIDMsIGxhYmVsQm91bmRzLm9yaWdpbi55ICsgMjAsIHRleHQsIHN0cmxl
bih0ZXh0KSk7CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisgICAgCisgICAgICAgIENH
Q29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7ICAgICAgICAKKyAgICB9CisKKyAgICBXQUtW
aWV3KiB2aWV3ID0gW21fd2luZG93IGNvbnRlbnRWaWV3XTsKKyAgICBbdmlldyBwZXJmb3JtU2Vs
ZWN0b3I6QHNlbGVjdG9yKF9kaXNwYXRjaFRpbGVEaWREcmF3Oikgd2l0aE9iamVjdDpsYXllciBh
ZnRlckRlbGF5OjAuMF07Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXkoKQor
eworICAgIHNldE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KDAsIDAsIHN0ZDo6bnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsKK30K
Kwordm9pZCBUaWxlQ2FjaGU6OnNjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCkK
K3sKKyAgICBXQUtWaWV3KiB2aWV3ID0gW21fd2luZG93IGNvbnRlbnRWaWV3XTsKKyAgICBbdmll
dyBfc2NoZWR1bGVMYXllckZsdXNoRm9yUGVuZGluZ1RpbGVDYWNoZVJlcGFpbnRdOworfQorCit2
b2lkIFRpbGVDYWNoZTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5
UmVjdCkKK3sKKyAgICBNdXRleExvY2tlciBsb2NrZXIobV9zYXZlZERpc3BsYXlSZWN0TXV0ZXgp
OworICAgIGJvb2wgYWRkZWRGaXJzdFJlY3QgPSBtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHko
KTsKKyAgICBtX3NhdmVkRGlzcGxheVJlY3RzLmFwcGVuZChkaXJ0eVJlY3QpOworICAgIGlmICgh
YWRkZWRGaXJzdFJlY3QpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBDb21wb3NpdGluZyBsYXll
ciBmbHVzaCB3aWxsIGNhbGwgYmFjayB0byBkb1BlbmRpbmdSZXBhaW50cygpLiBUaGUgZmx1c2gg
bWF5IGJlIHRocm90dGxlZCBhbmQgbm90IGhhcHBlbiBpbW1lZGlhdGVseS4KKyAgICBzY2hlZHVs
ZUxheWVyRmx1c2hGb3JQZW5kaW5nUmVwYWludCgpOworfQorCit2b2lkIFRpbGVDYWNoZTo6aW52
YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3sKKyAgICBBU1NFUlQoIW1f
dGlsZU11dGV4LnRyeUxvY2soKSk7CisKKyAgICBUaWxlR3JpZCogYWN0aXZlR3JpZCA9IGFjdGl2
ZVRpbGVHcmlkKCk7CisgICAgaWYgKCFrZWVwc1pvb21lZE91dFRpbGVzKCkpIHsKKyAgICAgICAg
YWN0aXZlR3JpZC0+aW52YWxpZGF0ZVRpbGVzKGRpcnR5UmVjdCk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgRmxvYXRSZWN0IHNjYWxlZFJlY3QgPSBkaXJ0eVJlY3Q7CisgICAgc2NhbGVk
UmVjdC5zY2FsZSh6b29tZWRPdXRTY2FsZSgpIC8gY3VycmVudFNjYWxlKCkpOworICAgIEludFJl
Y3Qgem9vbWVkT3V0RGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzY2FsZWRSZWN0KTsKKyAg
ICBpZiAoYWN0aXZlR3JpZCA9PSBtX3pvb21lZE91dFRpbGVHcmlkKSB7CisgICAgICAgIGJvb2wg
ZHVtbXk7CisgICAgICAgIEludFJlY3QgY292ZXJSZWN0ID0gbV96b29tZWRPdXRUaWxlR3JpZC0+
Y2FsY3VsYXRlQ292ZXJSZWN0KG1fem9vbWVkT3V0VGlsZUdyaWQtPnZpc2libGVSZWN0KCksIGR1
bW15KTsKKyAgICAgICAgLy8gSW5zdGVhZCBvZiByZXBhaW50aW5nIGEgdGlsZSBvdXRzaWRlIHRo
ZSBjb3ZlciByZWN0LCBqdXN0IHJlbW92ZSBpdC4KKyAgICAgICAgbV96b29tZWRPdXRUaWxlR3Jp
ZC0+ZHJvcFRpbGVzQmV0d2VlblJlY3RzKHpvb21lZE91dERpcnR5UmVjdCwgY292ZXJSZWN0KTsK
KyAgICAgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+aW52YWxpZGF0ZVRpbGVzKHpvb21lZE91dERp
cnR5UmVjdCk7CisgICAgICAgIC8vIFdlIG5lZWQgdG8gaW52YWxpZGF0ZSB6b29tZWQgaW4gdGls
ZXMgYXMgd2VsbCB3aGlsZSB6b29taW5nLCBzaW5jZQorICAgICAgICAvLyB3ZSBjb3VsZCBzd2l0
Y2ggYmFjayB0byB0aGUgem9vbWVkIGluIGdyaWQgd2l0aG91dCBkcm9wcGluZyBpdHMKKyAgICAg
ICAgLy8gdGlsZXMuICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk5NDY3NTk+LgorICAgICAgICBpZiAo
bV90aWxpbmdNb2RlID09IFpvb21pbmcgJiYgbV96b29tZWRJblRpbGVHcmlkKQorICAgICAgICAg
ICAgbV96b29tZWRJblRpbGVHcmlkLT5pbnZhbGlkYXRlVGlsZXMoZGlydHlSZWN0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fem9vbWVkSW5UaWxlR3JpZC0+aGFzVGlsZXMo
KSkgeworICAgICAgICAvLyBJZiBubyB0aWxlcyBoYXZlIGJlZW4gY3JlYXRlZCB5ZXQgZm9yIHRo
ZSB6b29tZWQgaW4gZ3JpZCwgd2UgY2FuJ3QgZHJvcCB0aGUgem9vbWVkIG91dCB0aWxlcy4KKyAg
ICAgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+aW52YWxpZGF0ZVRpbGVzKHpvb21lZE91dERpcnR5
UmVjdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+
ZHJvcFRpbGVzSW50ZXJzZWN0aW5nUmVjdCh6b29tZWRPdXREaXJ0eVJlY3QpOworICAgIG1fem9v
bWVkSW5UaWxlR3JpZC0+aW52YWxpZGF0ZVRpbGVzKGRpcnR5UmVjdCk7Cit9CisgICAgCitib29s
IFRpbGVDYWNoZTo6aXNUaWxlQ3JlYXRpb25TdXNwZW5kZWQoKSBjb25zdCAKK3sKKyAgICByZXR1
cm4gKCFrZWVwc1pvb21lZE91dFRpbGVzKCkgJiYgbV90aWxpbmdNb2RlID09IFpvb21pbmcpIHx8
IG1fdGlsaW5nTW9kZSA9PSBEaXNhYmxlZDsKK30KKworYm9vbCBUaWxlQ2FjaGU6OmlzVGlsZUlu
dmFsaWRhdGlvblN1c3BlbmRlZCgpIGNvbnN0IAoreyAKKyAgICByZXR1cm4gbV90aWxpbmdNb2Rl
ID09IFpvb21pbmcgfHwgbV90aWxpbmdNb2RlID09IFBhbm5pbmcgfHwgbV90aWxpbmdNb2RlID09
IFNjcm9sbFRvVG9wIHx8IG1fdGlsaW5nTW9kZSA9PSBEaXNhYmxlZDsgCit9CisKK3ZvaWQgVGls
ZUNhY2hlOjp1cGRhdGVUaWxpbmdNb2RlKCkKK3sKKyAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJy
ZW50KCkgfHwgIVdlYlRocmVhZElzRW5hYmxlZCgpKTsKKworICAgIFdBS1ZpZXcqIHZpZXcgPSBb
bV93aW5kb3cgY29udGVudFZpZXddOworCisgICAgaWYgKG1fdGlsaW5nTW9kZSA9PSBab29taW5n
IHx8IG1fdGlsaW5nTW9kZSA9PSBQYW5uaW5nIHx8IG1fdGlsaW5nTW9kZSA9PSBTY3JvbGxUb1Rv
cCkgeworICAgICAgICBpZiAoIW1fZGlkQ2FsbFdpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZykg
eworICAgICAgICAgICAgW3ZpZXcgX3dpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZ107CisgICAg
ICAgICAgICBtX2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmcgPSB0cnVlOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKG1fZGlkQ2FsbFdpbGxTdGFydFNjcm9s
bGluZ09yWm9vbWluZykgeworICAgICAgICAgICAgW3ZpZXcgX2RpZEZpbmlzaFNjcm9sbGluZ09y
Wm9vbWluZ107CisgICAgICAgICAgICBtX2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21p
bmcgPSBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBpZiAobV90aWxpbmdNb2RlID09IERpc2Fi
bGVkKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3RpbGVNdXRleCk7CisgICAgICAgIGNyZWF0ZVRpbGVzSW5BY3RpdmVHcmlkKENvdmVyVmlzaWJs
ZU9ubHkpOworCisgICAgICAgIGlmICghbV9zYXZlZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBzY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5nUmVwYWludCgpOworICAgIH0K
K30KKwordm9pZCBUaWxlQ2FjaGU6OnNldFRpbGluZ01vZGUoVGlsaW5nTW9kZSB0aWxpbmdNb2Rl
KQoreworICAgIGlmICh0aWxpbmdNb2RlID09IG1fdGlsaW5nTW9kZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGJvb2wgd2FzWm9vbWluZyA9IChtX3RpbGluZ01vZGUgPT0gWm9vbWluZyk7CisgICAg
bV90aWxpbmdNb2RlID0gdGlsaW5nTW9kZTsKKworICAgIGlmICgobV9wZW5kaW5nWm9vbWVkT3V0
U2NhbGUgfHwgbV9wZW5kaW5nU2NhbGUpICYmIG1fdGlsaW5nTW9kZSAhPSBEaXNhYmxlZCkKKyAg
ICAgICAgY29tbWl0U2NhbGVDaGFuZ2UoKTsKKyAgICBlbHNlIGlmICh3YXNab29taW5nKSB7Cisg
ICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7CisgICAgICAgIGJyaW5nQWN0
aXZlVGlsZUdyaWRUb0Zyb250KCk7CisgICAgfQorCisgICAgaWYgKG1faGFzUGVuZGluZ1VwZGF0
ZVRpbGluZ01vZGUpCisgICAgICAgIHJldHVybjsKKyAgICBtX2hhc1BlbmRpbmdVcGRhdGVUaWxp
bmdNb2RlID0gdHJ1ZTsKKworICAgIFRpbGVDYWNoZVRvbWJzdG9uZSAqdG9tYnN0b25lID0gbV90
b21ic3RvbmUuZ2V0KCk7CisgICAgV2ViVGhyZWFkUnVuKF57CisgICAgICAgIGlmIChbdG9tYnN0
b25lIGlzRGVhZF0pCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1faGFzUGVuZGluZ1Vw
ZGF0ZVRpbGluZ01vZGUgPSBmYWxzZTsKKyAgICAgICAgdXBkYXRlVGlsaW5nTW9kZSgpOworICAg
IH0pOworfQorCit2b2lkIFRpbGVDYWNoZTo6c2V0VGlsaW5nRGlyZWN0aW9uKFRpbGluZ0RpcmVj
dGlvbiB0aWxpbmdEaXJlY3Rpb24pCit7CisgICAgbV90aWxpbmdEaXJlY3Rpb24gPSB0aWxpbmdE
aXJlY3Rpb247Cit9CisKK1RpbGVDYWNoZTo6VGlsaW5nRGlyZWN0aW9uIFRpbGVDYWNoZTo6dGls
aW5nRGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aWxpbmdEaXJlY3Rpb247Cit9
CisgICAgCitmbG9hdCBUaWxlQ2FjaGU6Onpvb21lZE91dFNjYWxlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gbV96b29tZWRPdXRUaWxlR3JpZC0+c2NhbGUoKTsKK30KKworZmxvYXQgVGlsZUNhY2hl
OjpjdXJyZW50U2NhbGUoKSBjb25zdAoreworICAgIHJldHVybiBtX2N1cnJlbnRTY2FsZTsKK30K
Kwordm9pZCBUaWxlQ2FjaGU6OmRvUGVuZGluZ1JlcGFpbnRzKCkKK3sKKyAgICBpZiAobV9zYXZl
ZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXNUaWxl
SW52YWxpZGF0aW9uU3VzcGVuZGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBNdXRleExvY2tl
ciBsb2NrZXIobV90aWxlTXV0ZXgpOworICAgIGZsdXNoU2F2ZWREaXNwbGF5UmVjdHMoKTsKK30K
Kwordm9pZCBUaWxlQ2FjaGU6OmZsdXNoU2F2ZWREaXNwbGF5UmVjdHMoKQoreworICAgIEFTU0VS
VCghbV90aWxlTXV0ZXgudHJ5TG9jaygpKTsKKyAgICBBU1NFUlQoIW1fc2F2ZWREaXNwbGF5UmVj
dHMuaXNFbXB0eSgpKTsKKworICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKKyAgICB7CisgICAg
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NhdmVkRGlzcGxheVJlY3RNdXRleCk7CisgICAgICAg
IG1fc2F2ZWREaXNwbGF5UmVjdHMuc3dhcChyZWN0cyk7CisgICAgfQorICAgIHNpemVfdCBzaXpl
ID0gcmVjdHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgc2l6ZTsgKytuKQor
ICAgICAgICBpbnZhbGlkYXRlVGlsZXMocmVjdHNbbl0pOworfQorCit2b2lkIFRpbGVDYWNoZTo6
c2V0U3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKK3sKKyAgICBp
ZiAobV9pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCA9PSBlbmFibGVkKQorICAgICAg
ICByZXR1cm47CisgICAgbV9pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCA9IGVuYWJs
ZWQ7CisgICAgaWYgKG1faXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQpCisgICAgICAg
IG1fdGlsZUNyZWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOworfQorCitib29sIFRpbGVDYWNo
ZTo6aGFzUGVuZGluZ0RyYXcoKSBjb25zdAoreworICAgIHJldHVybiAhbV9zYXZlZERpc3BsYXlS
ZWN0cy5pc0VtcHR5KCk7Cit9CisKK3ZvaWQgVGlsZUNhY2hlOjpwcmVwYXJlVG9EcmF3KCkKK3sK
KyAgICAvLyBUaGlzIHdpbGwgdHJpZ2dlciBkb2N1bWVudCByZWxheW91dCBpZiBuZWVkZWQuCisg
ICAgW1ttX3dpbmRvdyBjb250ZW50Vmlld10gdmlld1dpbGxEcmF3XTsKKworICAgIGlmICghbV9z
YXZlZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2Vy
KG1fdGlsZU11dGV4KTsKKyAgICAgICAgZmx1c2hTYXZlZERpc3BsYXlSZWN0cygpOworICAgIH0K
K30KKwordm9pZCBUaWxlQ2FjaGU6OnNldExheWVyUG9vbENhcGFjaXR5KHVuc2lnbmVkIGNhcGFj
aXR5KQoreworICAgIFRpbGVMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+c2V0Q2FwYWNpdHkoY2Fw
YWNpdHkpOworfQorCit2b2lkIFRpbGVDYWNoZTo6ZHJhaW5MYXllclBvb2woKQoreworICAgIFRp
bGVMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+ZHJhaW4oKTsKK30KKwordm9pZCBUaWxlQ2FjaGU6
OmR1bXBUaWxlcygpCit7CisgICAgTlNMb2coQCI9PT09PT09PT09PT09PT09PSIpOworICAgIE5T
TG9nKEAiWk9PTUVEIE9VVCIpOworICAgIGlmIChtX3pvb21lZE91dFRpbGVHcmlkID09IGFjdGl2
ZVRpbGVHcmlkKCkpCisgICAgICAgIE5TTG9nKEAiPEFDVElWRT4iKTsKKyAgICBtX3pvb21lZE91
dFRpbGVHcmlkLT5kdW1wVGlsZXMoKTsKKyAgICBOU0xvZyhAIj09PT09PT09PT09PT09PT09Iik7
CisgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCkgeworICAgICAgICBOU0xvZyhAIlpPT01FRCBJ
TiIpOworICAgICAgICBpZiAobV96b29tZWRJblRpbGVHcmlkID09IGFjdGl2ZVRpbGVHcmlkKCkp
CisgICAgICAgICAgICBOU0xvZyhAIjxBQ1RJVkU+Iik7CisgICAgICAgIG1fem9vbWVkSW5UaWxl
R3JpZC0+ZHVtcFRpbGVzKCk7CisgICAgICAgIE5TTG9nKEAiPT09PT09PT09PT09PT09PT0iKTsK
KyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlQ2FjaGUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVD
YWNoZS5tbQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xl
Z2FjeVRpbGVDYWNoZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsMTcgKzI0LDE3IEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRpbGVDYWNoZS5oIgorI2luY2x1ZGUg
IkxlZ2FjeVRpbGVDYWNoZS5oIgogCiAjaWYgUExBVEZPUk0oSU9TKQogCisjaW5jbHVkZSAiTGVn
YWN5VGlsZUdyaWQuaCIKKyNpbmNsdWRlICJMZWdhY3lUaWxlR3JpZFRpbGUuaCIKKyNpbmNsdWRl
ICJMZWdhY3lUaWxlTGF5ZXIuaCIKKyNpbmNsdWRlICJMZWdhY3lUaWxlTGF5ZXJQb29sLmgiCiAj
aW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lbW9yeVByZXNzdXJlSGFuZGxlci5oIgog
I2luY2x1ZGUgIlN5c3RlbU1lbW9yeS5oIgotI2luY2x1ZGUgIlRpbGVHcmlkLmgiCi0jaW5jbHVk
ZSAiVGlsZUdyaWRUaWxlLmgiCi0jaW5jbHVkZSAiVGlsZUxheWVyLmgiCi0jaW5jbHVkZSAiVGls
ZUxheWVyUG9vbC5oIgogI2luY2x1ZGUgIldBS1dpbmRvdy5oIgogI2luY2x1ZGUgIldLR3JhcGhp
Y3MuaCIKICNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgiCkBAIC01MSwxNCArNTEs
MTQgQEAgLSAodm9pZClfZGlzcGF0Y2hUaWxlRGlkRHJhdzsKIC0gKHZvaWQpX3NjaGVkdWxlTGF5
ZXJGbHVzaEZvclBlbmRpbmdUaWxlQ2FjaGVSZXBhaW50OwogQGVuZAogCi1AaW50ZXJmYWNlIFRp
bGVDYWNoZVRvbWJzdG9uZSA6IE5TT2JqZWN0IHsKK0BpbnRlcmZhY2UgTGVnYWN5VGlsZUNhY2hl
VG9tYnN0b25lIDogTlNPYmplY3QgewogICAgIEJPT0wgZGVhZDsKIH0KIEBwcm9wZXJ0eShnZXR0
ZXI9aXNEZWFkKSBCT09MIGRlYWQ7CiAKIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIFRpbGVDYWNo
ZVRvbWJzdG9uZQorQGltcGxlbWVudGF0aW9uIExlZ2FjeVRpbGVDYWNoZVRvbWJzdG9uZQogCiBA
c3ludGhlc2l6ZSBkZWFkOwogCkBAIC02NiwxMiArNjYsMTIgQEAgQGludGVyZmFjZSBUaWxlQ2Fj
aGVUb21ic3RvbmUgOiBOU09iamVjdAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVRpbGVDYWNo
ZTo6VGlsZUNhY2hlKFdBS1dpbmRvdyogd2luZG93KQorTGVnYWN5VGlsZUNhY2hlOjpMZWdhY3lU
aWxlQ2FjaGUoV0FLV2luZG93KiB3aW5kb3cpCiAgICAgOiBtX3dpbmRvdyh3aW5kb3cpCiAgICAg
LCBtX2tlZXBzWm9vbWVkT3V0VGlsZXMoZmFsc2UpCiAgICAgLCBtX2hhc1BlbmRpbmdMYXlvdXRU
aWxlcyhmYWxzZSkKICAgICAsIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01vZGUoZmFsc2UpCi0g
ICAgLCBtX3RvbWJzdG9uZShhZG9wdE5TKFtbVGlsZUNhY2hlVG9tYnN0b25lIGFsbG9jXSBpbml0
XSkpCisgICAgLCBtX3RvbWJzdG9uZShhZG9wdE5TKFtbTGVnYWN5VGlsZUNhY2hlVG9tYnN0b25l
IGFsbG9jXSBpbml0XSkpCiAgICAgLCBtX3RpbGluZ01vZGUoTm9ybWFsKQogICAgICwgbV90aWxp
bmdEaXJlY3Rpb24oVGlsaW5nRGlyZWN0aW9uRG93bikKICAgICAsIG1fdGlsZVNpemUoNTEyLCA1
MTIpCkBAIC04MSw0NCArODEsNDQgQEAgVGlsZUNhY2hlOjpUaWxlQ2FjaGUoV0FLV2luZG93KiB3
aW5kb3cpCiAgICAgLCBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQoZmFsc2UpCiAgICAgLCBt
X2lzU3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkKHRydWUpCiAgICAgLCBtX2RpZENhbGxX
aWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmcoZmFsc2UpCi0gICAgLCBtX3pvb21lZE91dFRpbGVH
cmlkKFBhc3NPd25QdHI8VGlsZUdyaWQ+KCkpCi0gICAgLCBtX3pvb21lZEluVGlsZUdyaWQoUGFz
c093blB0cjxUaWxlR3JpZD4oKSkKLSAgICAsIG1fdGlsZUNyZWF0aW9uVGltZXIodGhpcywgJlRp
bGVDYWNoZTo6dGlsZUNyZWF0aW9uVGltZXJGaXJlZCkKKyAgICAsIG1fem9vbWVkT3V0VGlsZUdy
aWQoUGFzc093blB0cjxMZWdhY3lUaWxlR3JpZD4oKSkKKyAgICAsIG1fem9vbWVkSW5UaWxlR3Jp
ZChQYXNzT3duUHRyPExlZ2FjeVRpbGVHcmlkPigpKQorICAgICwgbV90aWxlQ3JlYXRpb25UaW1l
cih0aGlzLCAmTGVnYWN5VGlsZUNhY2hlOjp0aWxlQ3JlYXRpb25UaW1lckZpcmVkKQogICAgICwg
bV9jdXJyZW50U2NhbGUoMS5mKQogICAgICwgbV9wZW5kaW5nU2NhbGUoMCkKICAgICAsIG1fcGVu
ZGluZ1pvb21lZE91dFNjYWxlKDApCiB7Ci0gICAgbV96b29tZWRPdXRUaWxlR3JpZCA9IFRpbGVH
cmlkOjpjcmVhdGUodGhpcywgbV90aWxlU2l6ZSk7CisgICAgbV96b29tZWRPdXRUaWxlR3JpZCA9
IExlZ2FjeVRpbGVHcmlkOjpjcmVhdGUodGhpcywgbV90aWxlU2l6ZSk7CiAgICAgW2hvc3RMYXll
cigpIGluc2VydFN1YmxheWVyOm1fem9vbWVkT3V0VGlsZUdyaWQtPnRpbGVIb3N0TGF5ZXIoKSBh
dEluZGV4OjBdOwogICAgIGhvc3RMYXllclNpemVDaGFuZ2VkKCk7CiB9CiAKLVRpbGVDYWNoZTo6
flRpbGVDYWNoZSgpCitMZWdhY3lUaWxlQ2FjaGU6On5MZWdhY3lUaWxlQ2FjaGUoKQogewogICAg
IFttX3RvbWJzdG9uZS5nZXQoKSBzZXREZWFkOnRydWVdOwogfQogCi1DR0Zsb2F0IFRpbGVDYWNo
ZTo6c2NyZWVuU2NhbGUoKSBjb25zdAorQ0dGbG9hdCBMZWdhY3lUaWxlQ2FjaGU6OnNjcmVlblNj
YWxlKCkgY29uc3QKIHsKICAgICByZXR1cm4gW21fd2luZG93IHNjcmVlblNjYWxlXTsKIH0KIAot
Q0FMYXllciogVGlsZUNhY2hlOjpob3N0TGF5ZXIoKSBjb25zdAorQ0FMYXllciogTGVnYWN5VGls
ZUNhY2hlOjpob3N0TGF5ZXIoKSBjb25zdAogewogICAgIHJldHVybiBbbV93aW5kb3cgaG9zdExh
eWVyXTsKIH0KIAotRmxvYXRSZWN0IFRpbGVDYWNoZTo6dmlzaWJsZVJlY3RJbkxheWVyKENBTGF5
ZXIgKmxheWVyKSBjb25zdAorRmxvYXRSZWN0IExlZ2FjeVRpbGVDYWNoZTo6dmlzaWJsZVJlY3RJ
bkxheWVyKENBTGF5ZXIgKmxheWVyKSBjb25zdAogewogICAgIHJldHVybiBbbGF5ZXIgY29udmVy
dFJlY3Q6W21fd2luZG93IGV4dGVuZGVkVmlzaWJsZVJlY3RdIGZyb21MYXllcjpob3N0TGF5ZXIo
KV07CiB9CiAKLWJvb2wgVGlsZUNhY2hlOjp0aWxlc09wYXF1ZSgpIGNvbnN0Citib29sIExlZ2Fj
eVRpbGVDYWNoZTo6dGlsZXNPcGFxdWUoKSBjb25zdAogewogICAgIHJldHVybiBtX3RpbGVzT3Bh
cXVlOwogfQogICAgIAotVGlsZUdyaWQqIFRpbGVDYWNoZTo6YWN0aXZlVGlsZUdyaWQoKSBjb25z
dAorTGVnYWN5VGlsZUdyaWQqIExlZ2FjeVRpbGVDYWNoZTo6YWN0aXZlVGlsZUdyaWQoKSBjb25z
dAogewogICAgIGlmICghbV9rZWVwc1pvb21lZE91dFRpbGVzKQogICAgICAgICByZXR1cm4gbV96
b29tZWRPdXRUaWxlR3JpZC5nZXQoKTsKQEAgLTEyOSwxMiArMTI5LDEyIEBAIFRpbGVHcmlkKiBU
aWxlQ2FjaGU6OmFjdGl2ZVRpbGVHcmlkKCkgY28KICAgICByZXR1cm4gbV96b29tZWRPdXRUaWxl
R3JpZC5nZXQoKTsKIH0KIAotVGlsZUdyaWQqIFRpbGVDYWNoZTo6aW5hY3RpdmVUaWxlR3JpZCgp
IGNvbnN0CitMZWdhY3lUaWxlR3JpZCogTGVnYWN5VGlsZUNhY2hlOjppbmFjdGl2ZVRpbGVHcmlk
KCkgY29uc3QKIHsKICAgICByZXR1cm4gYWN0aXZlVGlsZUdyaWQoKSA9PSBtX3pvb21lZE91dFRp
bGVHcmlkID8gbV96b29tZWRJblRpbGVHcmlkLmdldCgpIDogbV96b29tZWRPdXRUaWxlR3JpZC5n
ZXQoKTsKIH0KIAotdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVzT3BhcXVlKGJvb2wgb3BhcXVlKQor
dm9pZCBMZWdhY3lUaWxlQ2FjaGU6OnNldFRpbGVzT3BhcXVlKGJvb2wgb3BhcXVlKQogewogICAg
IGlmIChtX3RpbGVzT3BhcXVlID09IG9wYXF1ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ3LDM2
ICsxNDcsMzYgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVzT3BhcXVlKGJvb2wgb3BhcQogICAg
ICAgICBtX3pvb21lZEluVGlsZUdyaWQtPnVwZGF0ZVRpbGVPcGFjaXR5KCk7CiB9CiAKLXZvaWQg
VGlsZUNhY2hlOjpkb0xheW91dFRpbGVzKCkKK3ZvaWQgTGVnYWN5VGlsZUNhY2hlOjpkb0xheW91
dFRpbGVzKCkKIHsKICAgICBpZiAoaXNUaWxlQ3JlYXRpb25TdXNwZW5kZWQoKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKLSAgICBUaWxl
R3JpZCogYWN0aXZlR3JpZCA9IGFjdGl2ZVRpbGVHcmlkKCk7CisgICAgTGVnYWN5VGlsZUdyaWQq
IGFjdGl2ZUdyaWQgPSBhY3RpdmVUaWxlR3JpZCgpOwogICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGFy
ZW4ndCBhY3R1YWxseSBjcmVhdGluZyB0aWxlcyBpbiB0aGUgaW5hY3RpdmUgZ3JpZCwgd2UKICAg
ICAvLyBzdGlsbCBuZWVkIHRvIGRyb3AgaW52YWxpZCB0aWxlcyBpbiByZXNwb25zZSB0byBhIGxh
eW91dC4KICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk4Mzk4Njc+LgotICAgIGlmIChUaWxl
R3JpZCogaW5hY3RpdmVHcmlkID0gaW5hY3RpdmVUaWxlR3JpZCgpKQorICAgIGlmIChMZWdhY3lU
aWxlR3JpZCogaW5hY3RpdmVHcmlkID0gaW5hY3RpdmVUaWxlR3JpZCgpKQogICAgICAgICBpbmFj
dGl2ZUdyaWQtPmRyb3BJbnZhbGlkVGlsZXMoKTsKICAgICBpZiAoYWN0aXZlR3JpZC0+Y2hlY2tE
b1NpbmdsZVRpbGVMYXlvdXQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGNyZWF0ZVRpbGVzSW5B
Y3RpdmVHcmlkKENvdmVyVmlzaWJsZU9ubHkpOwogfQogCi12b2lkIFRpbGVDYWNoZTo6aG9zdExh
eWVyU2l6ZUNoYW5nZWQoKQordm9pZCBMZWdhY3lUaWxlQ2FjaGU6Omhvc3RMYXllclNpemVDaGFu
Z2VkKCkKIHsKICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT51cGRhdGVIb3N0TGF5ZXJTaXplKCk7
CiAgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCkKICAgICAgICAgbV96b29tZWRJblRpbGVHcmlk
LT51cGRhdGVIb3N0TGF5ZXJTaXplKCk7CiB9CiAKLXZvaWQgVGlsZUNhY2hlOjpzZXRLZWVwc1pv
b21lZE91dFRpbGVzKGJvb2wga2VlcCkKK3ZvaWQgTGVnYWN5VGlsZUNhY2hlOjpzZXRLZWVwc1pv
b21lZE91dFRpbGVzKGJvb2wga2VlcCkKIHsKICAgICBtX2tlZXBzWm9vbWVkT3V0VGlsZXMgPSBr
ZWVwOwogfQogCi12b2lkIFRpbGVDYWNoZTo6c2V0Q3VycmVudFNjYWxlKGZsb2F0IHNjYWxlKQor
dm9pZCBMZWdhY3lUaWxlQ2FjaGU6OnNldEN1cnJlbnRTY2FsZShmbG9hdCBzY2FsZSkKIHsKICAg
ICBBU1NFUlQoc2NhbGUgPiAwKTsKIApAQCAtMTk4LDcgKzE5OCw3IEBAIHZvaWQgVGlsZUNhY2hl
OjpzZXRDdXJyZW50U2NhbGUoZmxvYXQgc2MKICAgICB9CiB9CiAKLXZvaWQgVGlsZUNhY2hlOjpz
ZXRab29tZWRPdXRTY2FsZShmbG9hdCBzY2FsZSkKK3ZvaWQgTGVnYWN5VGlsZUNhY2hlOjpzZXRa
b29tZWRPdXRTY2FsZShmbG9hdCBzY2FsZSkKIHsKICAgICBBU1NFUlQoc2NhbGUgPiAwKTsKIApA
QCAtMjEyLDcgKzIxMiw3IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRab29tZWRPdXRTY2FsZShmbG9h
dCAKICAgICBjb21taXRTY2FsZUNoYW5nZSgpOwogfQogICAgIAotdm9pZCBUaWxlQ2FjaGU6OmNv
bW1pdFNjYWxlQ2hhbmdlKCkKK3ZvaWQgTGVnYWN5VGlsZUNhY2hlOjpjb21taXRTY2FsZUNoYW5n
ZSgpCiB7CiAgICAgQVNTRVJUKG1fcGVuZGluZ1pvb21lZE91dFNjYWxlIHx8IG1fcGVuZGluZ1Nj
YWxlKTsKICAgICBBU1NFUlQobV90aWxpbmdNb2RlICE9IERpc2FibGVkKTsKQEAgLTI0MSw3ICsy
NDEsNyBAQCB2b2lkIFRpbGVDYWNoZTo6Y29tbWl0U2NhbGVDaGFuZ2UoKQogCiAgICAgaWYgKG1f
Y3VycmVudFNjYWxlICE9IG1fem9vbWVkT3V0VGlsZUdyaWQtPnNjYWxlKCkpIHsKICAgICAgICAg
aWYgKCFtX3pvb21lZEluVGlsZUdyaWQpIHsKLSAgICAgICAgICAgIG1fem9vbWVkSW5UaWxlR3Jp
ZCA9IFRpbGVHcmlkOjpjcmVhdGUodGhpcywgbV90aWxlU2l6ZSk7CisgICAgICAgICAgICBtX3pv
b21lZEluVGlsZUdyaWQgPSBMZWdhY3lUaWxlR3JpZDo6Y3JlYXRlKHRoaXMsIG1fdGlsZVNpemUp
OwogICAgICAgICAgICAgW2hvc3RMYXllcigpIGFkZFN1YmxheWVyOm1fem9vbWVkSW5UaWxlR3Jp
ZC0+dGlsZUhvc3RMYXllcigpXTsKICAgICAgICAgICAgIGhvc3RMYXllclNpemVDaGFuZ2VkKCk7
CiAgICAgICAgIH0KQEAgLTI1NiwxMCArMjU2LDEwIEBAIHZvaWQgVGlsZUNhY2hlOjpjb21taXRT
Y2FsZUNoYW5nZSgpCiAgICAgbGF5b3V0VGlsZXMoKTsKIH0KIAotdm9pZCBUaWxlQ2FjaGU6OmJy
aW5nQWN0aXZlVGlsZUdyaWRUb0Zyb250KCkKK3ZvaWQgTGVnYWN5VGlsZUNhY2hlOjpicmluZ0Fj
dGl2ZVRpbGVHcmlkVG9Gcm9udCgpCiB7Ci0gICAgVGlsZUdyaWQqIGFjdGl2ZUdyaWQgPSBhY3Rp
dmVUaWxlR3JpZCgpOwotICAgIFRpbGVHcmlkKiBvdGhlckdyaWQgPSBpbmFjdGl2ZVRpbGVHcmlk
KCk7CisgICAgTGVnYWN5VGlsZUdyaWQqIGFjdGl2ZUdyaWQgPSBhY3RpdmVUaWxlR3JpZCgpOwor
ICAgIExlZ2FjeVRpbGVHcmlkKiBvdGhlckdyaWQgPSBpbmFjdGl2ZVRpbGVHcmlkKCk7CiAgICAg
aWYgKCFvdGhlckdyaWQpCiAgICAgICAgIHJldHVybjsKICAgICBDQUxheWVyKiBmcm9udExheWVy
ID0gYWN0aXZlR3JpZC0+dGlsZUhvc3RMYXllcigpOwpAQCAtMjY3LDcgKzI2Nyw3IEBAIHZvaWQg
VGlsZUNhY2hlOjpicmluZ0FjdGl2ZVRpbGVHcmlkVG9Gcm8KICAgICBbaG9zdExheWVyKCkgaW5z
ZXJ0U3VibGF5ZXI6ZnJvbnRMYXllciBhYm92ZTpvdGhlckxheWVyXTsKIH0KICAgICAKLXZvaWQg
VGlsZUNhY2hlOjphZGp1c3RUaWxlR3JpZFRyYW5zZm9ybXMoKQordm9pZCBMZWdhY3lUaWxlQ2Fj
aGU6OmFkanVzdFRpbGVHcmlkVHJhbnNmb3JtcygpCiB7CiAgICAgQ0FMYXllciogem9vbWVkT3V0
SG9zdExheWVyID0gbV96b29tZWRPdXRUaWxlR3JpZC0+dGlsZUhvc3RMYXllcigpOwogICAgIGZs
b2F0IHRyYW5zZm9ybVNjYWxlID0gY3VycmVudFNjYWxlKCkgLyB6b29tZWRPdXRTY2FsZSgpOwpA
QCAtMjc1LDEzICsyNzUsMTMgQEAgdm9pZCBUaWxlQ2FjaGU6OmFkanVzdFRpbGVHcmlkVHJhbnNm
b3JtcwogICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0ZUhvc3RMYXllclNpemUoKTsKIH0K
IAotdm9pZCBUaWxlQ2FjaGU6OmxheW91dFRpbGVzKCkKK3ZvaWQgTGVnYWN5VGlsZUNhY2hlOjps
YXlvdXRUaWxlcygpCiB7CiAgICAgaWYgKG1faGFzUGVuZGluZ0xheW91dFRpbGVzKQogICAgICAg
ICByZXR1cm47CiAgICAgbV9oYXNQZW5kaW5nTGF5b3V0VGlsZXMgPSB0cnVlOwogCi0gICAgVGls
ZUNhY2hlVG9tYnN0b25lICp0b21ic3RvbmUgPSBtX3RvbWJzdG9uZS5nZXQoKTsKKyAgICBMZWdh
Y3lUaWxlQ2FjaGVUb21ic3RvbmUgKnRvbWJzdG9uZSA9IG1fdG9tYnN0b25lLmdldCgpOwogICAg
IFdlYlRocmVhZFJ1biheewogICAgICAgICBpZiAoW3RvbWJzdG9uZSBpc0RlYWRdKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMjkwLDcgKzI5MCw3IEBAIHZvaWQgVGlsZUNhY2hlOjpsYXlvdXRU
aWxlcygpCiAgICAgfSk7CiB9CiAKLXZvaWQgVGlsZUNhY2hlOjpsYXlvdXRUaWxlc05vdygpCit2
b2lkIExlZ2FjeVRpbGVDYWNoZTo6bGF5b3V0VGlsZXNOb3coKQogewogICAgIEFTU0VSVChXZWJU
aHJlYWRJc0xvY2tlZE9yRGlzYWJsZWQoKSk7CiAKQEAgLTMwNyw3ICszMDcsNyBAQCB2b2lkIFRp
bGVDYWNoZTo6bGF5b3V0VGlsZXNOb3coKQogICAgICAgICBtX3RpbGluZ01vZGUgPSBNaW5pbWFs
OwogCiAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKLSAgICBUaWxlR3JpZCog
YWN0aXZlR3JpZCA9IGFjdGl2ZVRpbGVHcmlkKCk7CisgICAgTGVnYWN5VGlsZUdyaWQqIGFjdGl2
ZUdyaWQgPSBhY3RpdmVUaWxlR3JpZCgpOwogICAgIGlmIChhY3RpdmVHcmlkLT5jaGVja0RvU2lu
Z2xlVGlsZUxheW91dCgpKSB7CiAgICAgICAgIG1fdGlsaW5nTW9kZSA9IHNhdmVkVGlsaW5nTW9k
ZTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzE2LDcgKzMxNiw3IEBAIHZvaWQgVGlsZUNhY2hlOjps
YXlvdXRUaWxlc05vdygpCiAgICAgbV90aWxpbmdNb2RlID0gc2F2ZWRUaWxpbmdNb2RlOwogfQog
Ci12b2lkIFRpbGVDYWNoZTo6bGF5b3V0VGlsZXNOb3dGb3JSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpCit2b2lkIExlZ2FjeVRpbGVDYWNoZTo6bGF5b3V0VGlsZXNOb3dGb3JSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7CiAgICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgp
KTsKICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOwpAQCAtMzI0LDE1ICszMjQs
MTUgQEAgdm9pZCBUaWxlQ2FjaGU6OmxheW91dFRpbGVzTm93Rm9yUmVjdChjbwogICAgIGFjdGl2
ZVRpbGVHcmlkKCktPmFkZFRpbGVzQ292ZXJpbmdSZWN0KHJlY3QpOwogfQogCi12b2lkIFRpbGVD
YWNoZTo6cmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzKCkKK3ZvaWQgTGVnYWN5VGlsZUNhY2hlOjpy
ZW1vdmVBbGxOb25WaXNpYmxlVGlsZXMoKQogewogICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3Rp
bGVNdXRleCk7CiAgICAgcmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzSW50ZXJuYWwoKTsKIH0KIAot
dm9pZCBUaWxlQ2FjaGU6OnJlbW92ZUFsbE5vblZpc2libGVUaWxlc0ludGVybmFsKCkKK3ZvaWQg
TGVnYWN5VGlsZUNhY2hlOjpyZW1vdmVBbGxOb25WaXNpYmxlVGlsZXNJbnRlcm5hbCgpCiB7Ci0g
ICAgVGlsZUdyaWQqIGFjdGl2ZUdyaWQgPSBhY3RpdmVUaWxlR3JpZCgpOworICAgIExlZ2FjeVRp
bGVHcmlkKiBhY3RpdmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKICAgICBpZiAoa2VlcHNab29t
ZWRPdXRUaWxlcygpICYmIGFjdGl2ZUdyaWQgPT0gbV96b29tZWRJblRpbGVHcmlkICYmIGFjdGl2
ZUdyaWQtPmhhc1RpbGVzKCkpCiAgICAgICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPmRyb3BBbGxU
aWxlcygpOwogCkBAIC0zNDYsNyArMzQ2LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnJlbW92ZUFsbE5v
blZpc2libGVUaWxlcwogICAgIGFjdGl2ZUdyaWQtPmRyb3BUaWxlc091dHNpZGVSZWN0KGFjdGl2
ZUdyaWQtPnZpc2libGVSZWN0KCkpOwogfQogCi12b2lkIFRpbGVDYWNoZTo6cmVtb3ZlQWxsVGls
ZXMoKQordm9pZCBMZWdhY3lUaWxlQ2FjaGU6OnJlbW92ZUFsbFRpbGVzKCkKIHsKICAgICBNdXRl
eExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOwogICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPmRy
b3BBbGxUaWxlcygpOwpAQCAtMzU0LDcgKzM1NCw3IEBAIHZvaWQgVGlsZUNhY2hlOjpyZW1vdmVB
bGxUaWxlcygpCiAgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+ZHJvcEFsbFRpbGVzKCk7CiB9
CiAKLXZvaWQgVGlsZUNhY2hlOjpyZW1vdmVGb3JlZ3JvdW5kVGlsZXMoKQordm9pZCBMZWdhY3lU
aWxlQ2FjaGU6OnJlbW92ZUZvcmVncm91bmRUaWxlcygpCiB7CiAgICAgTXV0ZXhMb2NrZXIgbG9j
a2VyKG1fdGlsZU11dGV4KTsKICAgICBpZiAoIWtlZXBzWm9vbWVkT3V0VGlsZXMoKSkKQEAgLTM2
MywxOSArMzYzLDE5IEBAIHZvaWQgVGlsZUNhY2hlOjpyZW1vdmVGb3JlZ3JvdW5kVGlsZXMoKQog
ICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPmRyb3BBbGxUaWxlcygpOwogfQogCi12b2lkIFRp
bGVDYWNoZTo6c2V0Q29udGVudFJlcGxhY2VtZW50SW1hZ2UoUmV0YWluUHRyPENHSW1hZ2VSZWY+
IGNvbnRlbnRSZXBsYWNlbWVudEltYWdlKQordm9pZCBMZWdhY3lUaWxlQ2FjaGU6OnNldENvbnRl
bnRSZXBsYWNlbWVudEltYWdlKFJldGFpblB0cjxDR0ltYWdlUmVmPiBjb250ZW50UmVwbGFjZW1l
bnRJbWFnZSkKIHsKICAgICBNdXRleExvY2tlciBsb2NrZXIobV9jb250ZW50UmVwbGFjZW1lbnRJ
bWFnZU11dGV4KTsKICAgICBtX2NvbnRlbnRSZXBsYWNlbWVudEltYWdlID0gY29udGVudFJlcGxh
Y2VtZW50SW1hZ2U7CiB9CiAKLVJldGFpblB0cjxDR0ltYWdlUmVmPiBUaWxlQ2FjaGU6OmNvbnRl
bnRSZXBsYWNlbWVudEltYWdlKCkgY29uc3QKK1JldGFpblB0cjxDR0ltYWdlUmVmPiBMZWdhY3lU
aWxlQ2FjaGU6OmNvbnRlbnRSZXBsYWNlbWVudEltYWdlKCkgY29uc3QKIHsKICAgICBNdXRleExv
Y2tlciBsb2NrZXIobV9jb250ZW50UmVwbGFjZW1lbnRJbWFnZU11dGV4KTsKICAgICByZXR1cm4g
bV9jb250ZW50UmVwbGFjZW1lbnRJbWFnZTsKIH0KIAotdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGVC
b3JkZXJzVmlzaWJsZShib29sIGZsYWcpCit2b2lkIExlZ2FjeVRpbGVDYWNoZTo6c2V0VGlsZUJv
cmRlcnNWaXNpYmxlKGJvb2wgZmxhZykKIHsKICAgICBpZiAoZmxhZyA9PSBtX3RpbGVCb3JkZXJz
VmlzaWJsZSkKICAgICAgICAgcmV0dXJuOwpAQCAtMzg2LDEzICszODYsMTMgQEAgdm9pZCBUaWxl
Q2FjaGU6OnNldFRpbGVCb3JkZXJzVmlzaWJsZShibwogICAgICAgICBtX3pvb21lZEluVGlsZUdy
aWQtPnVwZGF0ZVRpbGVCb3JkZXJWaXNpYmlsaXR5KCk7CiB9CiAKLXZvaWQgVGlsZUNhY2hlOjpz
ZXRUaWxlUGFpbnRDb3VudGVyc1Zpc2libGUoYm9vbCBmbGFnKQordm9pZCBMZWdhY3lUaWxlQ2Fj
aGU6OnNldFRpbGVQYWludENvdW50ZXJzVmlzaWJsZShib29sIGZsYWcpCiB7CiAgICAgbV90aWxl
UGFpbnRDb3VudGVyc1Zpc2libGUgPSBmbGFnOwogICAgIC8vIFRoZSBudW1iZXJzIHdpbGwgc2hv
dyB1cCB0aGUgbmV4dCB0aW1lIHRoZSB0aWxlcyBwYWludC4KIH0KIAotdm9pZCBUaWxlQ2FjaGU6
OmZpbmlzaGVkQ3JlYXRpbmdUaWxlcyhib29sIGRpZENyZWF0ZVRpbGVzLCBib29sIGNyZWF0ZU1v
cmUpCit2b2lkIExlZ2FjeVRpbGVDYWNoZTo6ZmluaXNoZWRDcmVhdGluZ1RpbGVzKGJvb2wgZGlk
Q3JlYXRlVGlsZXMsIGJvb2wgY3JlYXRlTW9yZSkKIHsKICAgICAvLyBXZSBuZWVkIHRvIGVuc3Vy
ZSB0aGF0IGFsbCB0aWxlcyBhcmUgc2hvd2luZyB0aGUgc2FtZSB2ZXJzaW9uIG9mIHRoZSBjb250
ZW50LgogICAgIGlmIChkaWRDcmVhdGVUaWxlcyAmJiAhbV9zYXZlZERpc3BsYXlSZWN0cy5pc0Vt
cHR5KCkpCkBAIC00MTQsNyArNDE0LDcgQEAgdm9pZCBUaWxlQ2FjaGU6OmZpbmlzaGVkQ3JlYXRp
bmdUaWxlcyhibwogICAgICAgICBtX3RpbGVDcmVhdGlvblRpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
IH0KIAotdm9pZCBUaWxlQ2FjaGU6OnRpbGVDcmVhdGlvblRpbWVyRmlyZWQoVGltZXI8VGlsZUNh
Y2hlPiopCit2b2lkIExlZ2FjeVRpbGVDYWNoZTo6dGlsZUNyZWF0aW9uVGltZXJGaXJlZChUaW1l
cjxMZWdhY3lUaWxlQ2FjaGU+KikKIHsKICAgICBpZiAoaXNUaWxlQ3JlYXRpb25TdXNwZW5kZWQo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtNDIyLDcgKzQyMiw3IEBAIHZvaWQgVGlsZUNhY2hlOjp0
aWxlQ3JlYXRpb25UaW1lckZpcmVkKFQKICAgICBjcmVhdGVUaWxlc0luQWN0aXZlR3JpZChDb3Zl
clNwZWN1bGF0aXZlKTsKIH0KIAotdm9pZCBUaWxlQ2FjaGU6OmNyZWF0ZVRpbGVzSW5BY3RpdmVH
cmlkKFN5bmNocm9ub3VzVGlsZUNyZWF0aW9uTW9kZSBtb2RlKQordm9pZCBMZWdhY3lUaWxlQ2Fj
aGU6OmNyZWF0ZVRpbGVzSW5BY3RpdmVHcmlkKFN5bmNocm9ub3VzVGlsZUNyZWF0aW9uTW9kZSBt
b2RlKQogewogICAgIGlmIChtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNSZWNlaXZlZE1lbW9y
eVByZXNzdXJlKCkpIHsKICAgICAgICAgTE9HKE1lbW9yeVByZXNzdXJlLCAiVW5kZXIgbWVtb3J5
IHByZXNzdXJlIGF0OiAlcyIsIF9fUFJFVFRZX0ZVTkNUSU9OX18pOwpAQCAtNDMxLDcgKzQzMSw3
IEBAIHZvaWQgVGlsZUNhY2hlOjpjcmVhdGVUaWxlc0luQWN0aXZlR3JpZCgKICAgICBhY3RpdmVU
aWxlR3JpZCgpLT5jcmVhdGVUaWxlcyhtb2RlKTsKIH0KIAotdW5zaWduZWQgVGlsZUNhY2hlOjp0
aWxlQ2FwYWNpdHlGb3JHcmlkKFRpbGVHcmlkKiBncmlkKQordW5zaWduZWQgTGVnYWN5VGlsZUNh
Y2hlOjp0aWxlQ2FwYWNpdHlGb3JHcmlkKExlZ2FjeVRpbGVHcmlkKiBncmlkKQogewogICAgIHN0
YXRpYyB1bnNpZ25lZCBjYXBhY2l0eTsKICAgICBpZiAoIWNhcGFjaXR5KSB7CkBAIC00NjUsNyAr
NDY1LDcgQEAgdW5zaWduZWQgVGlsZUNhY2hlOjp0aWxlQ2FwYWNpdHlGb3JHcmlkKAogICAgIHJl
dHVybiBncmlkQ2FwYWNpdHkgKiAzIC8gNDsKIH0KIAotQ29sb3IgVGlsZUNhY2hlOjpjb2xvckZv
ckdyaWRUaWxlQm9yZGVyKFRpbGVHcmlkKiBncmlkKSBjb25zdAorQ29sb3IgTGVnYWN5VGlsZUNh
Y2hlOjpjb2xvckZvckdyaWRUaWxlQm9yZGVyKExlZ2FjeVRpbGVHcmlkKiBncmlkKSBjb25zdAog
ewogICAgIGlmIChncmlkID09IG1fem9vbWVkT3V0VGlsZUdyaWQpCiAgICAgICAgIHJldHVybiBD
b2xvciguM2YsIC4wZiwgMC40ZiwgMC41Zik7CkBAIC01MDAsNyArNTAwLDcgQEAgc3RhdGljIGJv
b2wgc2hvdWxkUmVwYWludEluUGllY2VzKGNvbnN0IAogICAgIHJldHVybiB3YXN0ZWRTcGFjZSA+
IGNXYXN0ZWRTcGFjZVRocmVzaG9sZDsKIH0KIAotdm9pZCBUaWxlQ2FjaGU6OmRyYXdSZXBsYWNl
bWVudEltYWdlKFRpbGVMYXllciogbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0ltYWdl
UmVmIGltYWdlKQordm9pZCBMZWdhY3lUaWxlQ2FjaGU6OmRyYXdSZXBsYWNlbWVudEltYWdlKExl
Z2FjeVRpbGVMYXllciogbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0LCBDR0ltYWdlUmVmIGlt
YWdlKQogewogICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLCAxLCAxLCAx
KTsKICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBDR0NvbnRleHRHZXRDbGlwQm91bmRp
bmdCb3goY29udGV4dCkpOwpAQCAtNTEyLDcgKzUxMiw3IEBAIHZvaWQgVGlsZUNhY2hlOjpkcmF3
UmVwbGFjZW1lbnRJbWFnZShUaWwKICAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgaW1h
Z2VSZWN0LCBpbWFnZSk7CiB9CiAKLXZvaWQgVGlsZUNhY2hlOjpkcmF3V2luZG93Q29udGVudChU
aWxlTGF5ZXIqIGxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dSZWN0IGRpcnR5UmVjdCkK
K3ZvaWQgTGVnYWN5VGlsZUNhY2hlOjpkcmF3V2luZG93Q29udGVudChMZWdhY3lUaWxlTGF5ZXIq
IGxheWVyLCBDR0NvbnRleHRSZWYgY29udGV4dCwgQ0dSZWN0IGRpcnR5UmVjdCkKIHsKICAgICBD
R1JlY3QgZnJhbWUgPSBbbGF5ZXIgZnJhbWVdOwogICAgIFdLRm9udEFudGlhbGlhc2luZ1N0YXRl
U2F2ZXIgZm9udEFudGlhbGlhc2luZ1N0YXRlKGNvbnRleHQsIFttX3dpbmRvdyB1c2VPcmllbnRh
dGlvbkRlcGVuZGVudEZvbnRBbnRpYWxpYXNpbmddICYmIFtsYXllciBpc09wYXF1ZV0pOwpAQCAt
NTQ0LDcgKzU0NCw3IEBAIHZvaWQgVGlsZUNhY2hlOjpkcmF3V2luZG93Q29udGVudChUaWxlTGEK
ICAgICBmb250QW50aWFsaWFzaW5nU3RhdGUucmVzdG9yZSgpOwogfQogCi12b2lkIFRpbGVDYWNo
ZTo6ZHJhd0xheWVyKFRpbGVMYXllciogbGF5ZXIsIENHQ29udGV4dFJlZiBjb250ZXh0KQordm9p
ZCBMZWdhY3lUaWxlQ2FjaGU6OmRyYXdMYXllcihMZWdhY3lUaWxlTGF5ZXIqIGxheWVyLCBDR0Nv
bnRleHRSZWYgY29udGV4dCkKIHsKICAgICAvLyBUaGUgd2ViIGxvY2sgdW5sb2NrIG9ic2VydmVy
IHJ1bnMgYWZ0ZXIgQ0EgY29tbWl0IG9ic2VydmVyLgogICAgIGlmICghV2ViVGhyZWFkSXNMb2Nr
ZWRPckRpc2FibGVkKCkpIHsKQEAgLTYwMCwxOCArNjAwLDE4IEBAIHZvaWQgVGlsZUNhY2hlOjpk
cmF3TGF5ZXIoVGlsZUxheWVyKiBsYXkKICAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6QHNlbGVj
dG9yKF9kaXNwYXRjaFRpbGVEaWREcmF3Oikgd2l0aE9iamVjdDpsYXllciBhZnRlckRlbGF5OjAu
MF07CiB9CiAKLXZvaWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXkoKQordm9pZCBMZWdhY3lU
aWxlQ2FjaGU6OnNldE5lZWRzRGlzcGxheSgpCiB7CiAgICAgc2V0TmVlZHNEaXNwbGF5SW5SZWN0
KEludFJlY3QoMCwgMCwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKSkpOwogfQogCi12b2lkIFRpbGVDYWNoZTo6c2NoZWR1bGVM
YXllckZsdXNoRm9yUGVuZGluZ1JlcGFpbnQoKQordm9pZCBMZWdhY3lUaWxlQ2FjaGU6OnNjaGVk
dWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCkKIHsKICAgICBXQUtWaWV3KiB2aWV3ID0g
W21fd2luZG93IGNvbnRlbnRWaWV3XTsKICAgICBbdmlldyBfc2NoZWR1bGVMYXllckZsdXNoRm9y
UGVuZGluZ1RpbGVDYWNoZVJlcGFpbnRdOwogfQogCi12b2lkIFRpbGVDYWNoZTo6c2V0TmVlZHNE
aXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3ZvaWQgTGVnYWN5VGlsZUNh
Y2hlOjpzZXROZWVkc0Rpc3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQogewog
ICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3NhdmVkRGlzcGxheVJlY3RNdXRleCk7CiAgICAgYm9v
bCBhZGRlZEZpcnN0UmVjdCA9IG1fc2F2ZWREaXNwbGF5UmVjdHMuaXNFbXB0eSgpOwpAQCAtNjIy
LDExICs2MjIsMTEgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldE5lZWRzRGlzcGxheUluUmVjdChjbwog
ICAgIHNjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCk7CiB9CiAKLXZvaWQgVGls
ZUNhY2hlOjppbnZhbGlkYXRlVGlsZXMoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KQordm9pZCBM
ZWdhY3lUaWxlQ2FjaGU6OmludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3Qp
CiB7CiAgICAgQVNTRVJUKCFtX3RpbGVNdXRleC50cnlMb2NrKCkpOwogCi0gICAgVGlsZUdyaWQq
IGFjdGl2ZUdyaWQgPSBhY3RpdmVUaWxlR3JpZCgpOworICAgIExlZ2FjeVRpbGVHcmlkKiBhY3Rp
dmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKICAgICBpZiAoIWtlZXBzWm9vbWVkT3V0VGlsZXMo
KSkgewogICAgICAgICBhY3RpdmVHcmlkLT5pbnZhbGlkYXRlVGlsZXMoZGlydHlSZWN0KTsKICAg
ICAgICAgcmV0dXJuOwpAQCAtNjU2LDE3ICs2NTYsMTcgQEAgdm9pZCBUaWxlQ2FjaGU6OmludmFs
aWRhdGVUaWxlcyhjb25zdCBJbgogICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+aW52YWxpZGF0ZVRp
bGVzKGRpcnR5UmVjdCk7CiB9CiAgICAgCi1ib29sIFRpbGVDYWNoZTo6aXNUaWxlQ3JlYXRpb25T
dXNwZW5kZWQoKSBjb25zdCAKK2Jvb2wgTGVnYWN5VGlsZUNhY2hlOjppc1RpbGVDcmVhdGlvblN1
c3BlbmRlZCgpIGNvbnN0IAogewogICAgIHJldHVybiAoIWtlZXBzWm9vbWVkT3V0VGlsZXMoKSAm
JiBtX3RpbGluZ01vZGUgPT0gWm9vbWluZykgfHwgbV90aWxpbmdNb2RlID09IERpc2FibGVkOwog
fQogCi1ib29sIFRpbGVDYWNoZTo6aXNUaWxlSW52YWxpZGF0aW9uU3VzcGVuZGVkKCkgY29uc3Qg
Citib29sIExlZ2FjeVRpbGVDYWNoZTo6aXNUaWxlSW52YWxpZGF0aW9uU3VzcGVuZGVkKCkgY29u
c3QgCiB7IAogICAgIHJldHVybiBtX3RpbGluZ01vZGUgPT0gWm9vbWluZyB8fCBtX3RpbGluZ01v
ZGUgPT0gUGFubmluZyB8fCBtX3RpbGluZ01vZGUgPT0gU2Nyb2xsVG9Ub3AgfHwgbV90aWxpbmdN
b2RlID09IERpc2FibGVkOyAKIH0KIAotdm9pZCBUaWxlQ2FjaGU6OnVwZGF0ZVRpbGluZ01vZGUo
KQordm9pZCBMZWdhY3lUaWxlQ2FjaGU6OnVwZGF0ZVRpbGluZ01vZGUoKQogewogICAgIEFTU0VS
VChXZWJUaHJlYWRJc0N1cnJlbnQoKSB8fCAhV2ViVGhyZWFkSXNFbmFibGVkKCkpOwogCkBAIC02
OTMsNyArNjkzLDcgQEAgdm9pZCBUaWxlQ2FjaGU6OnVwZGF0ZVRpbGluZ01vZGUoKQogICAgIH0K
IH0KIAotdm9pZCBUaWxlQ2FjaGU6OnNldFRpbGluZ01vZGUoVGlsaW5nTW9kZSB0aWxpbmdNb2Rl
KQordm9pZCBMZWdhY3lUaWxlQ2FjaGU6OnNldFRpbGluZ01vZGUoVGlsaW5nTW9kZSB0aWxpbmdN
b2RlKQogewogICAgIGlmICh0aWxpbmdNb2RlID09IG1fdGlsaW5nTW9kZSkKICAgICAgICAgcmV0
dXJuOwpAQCAtNzExLDcgKzcxMSw3IEBAIHZvaWQgVGlsZUNhY2hlOjpzZXRUaWxpbmdNb2RlKFRp
bGluZ01vZGUKICAgICAgICAgcmV0dXJuOwogICAgIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01v
ZGUgPSB0cnVlOwogCi0gICAgVGlsZUNhY2hlVG9tYnN0b25lICp0b21ic3RvbmUgPSBtX3RvbWJz
dG9uZS5nZXQoKTsKKyAgICBMZWdhY3lUaWxlQ2FjaGVUb21ic3RvbmUgKnRvbWJzdG9uZSA9IG1f
dG9tYnN0b25lLmdldCgpOwogICAgIFdlYlRocmVhZFJ1biheewogICAgICAgICBpZiAoW3RvbWJz
dG9uZSBpc0RlYWRdKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzIwLDI3ICs3MjAsMjcgQEAg
dm9pZCBUaWxlQ2FjaGU6OnNldFRpbGluZ01vZGUoVGlsaW5nTW9kZQogICAgIH0pOwogfQogCi12
b2lkIFRpbGVDYWNoZTo6c2V0VGlsaW5nRGlyZWN0aW9uKFRpbGluZ0RpcmVjdGlvbiB0aWxpbmdE
aXJlY3Rpb24pCit2b2lkIExlZ2FjeVRpbGVDYWNoZTo6c2V0VGlsaW5nRGlyZWN0aW9uKFRpbGlu
Z0RpcmVjdGlvbiB0aWxpbmdEaXJlY3Rpb24pCiB7CiAgICAgbV90aWxpbmdEaXJlY3Rpb24gPSB0
aWxpbmdEaXJlY3Rpb247CiB9CiAKLVRpbGVDYWNoZTo6VGlsaW5nRGlyZWN0aW9uIFRpbGVDYWNo
ZTo6dGlsaW5nRGlyZWN0aW9uKCkgY29uc3QKK0xlZ2FjeVRpbGVDYWNoZTo6VGlsaW5nRGlyZWN0
aW9uIExlZ2FjeVRpbGVDYWNoZTo6dGlsaW5nRGlyZWN0aW9uKCkgY29uc3QKIHsKICAgICByZXR1
cm4gbV90aWxpbmdEaXJlY3Rpb247CiB9CiAgICAgCi1mbG9hdCBUaWxlQ2FjaGU6Onpvb21lZE91
dFNjYWxlKCkgY29uc3QKK2Zsb2F0IExlZ2FjeVRpbGVDYWNoZTo6em9vbWVkT3V0U2NhbGUoKSBj
b25zdAogewogICAgIHJldHVybiBtX3pvb21lZE91dFRpbGVHcmlkLT5zY2FsZSgpOwogfQogCi1m
bG9hdCBUaWxlQ2FjaGU6OmN1cnJlbnRTY2FsZSgpIGNvbnN0CitmbG9hdCBMZWdhY3lUaWxlQ2Fj
aGU6OmN1cnJlbnRTY2FsZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY3VycmVudFNjYWxlOwog
fQogCi12b2lkIFRpbGVDYWNoZTo6ZG9QZW5kaW5nUmVwYWludHMoKQordm9pZCBMZWdhY3lUaWxl
Q2FjaGU6OmRvUGVuZGluZ1JlcGFpbnRzKCkKIHsKICAgICBpZiAobV9zYXZlZERpc3BsYXlSZWN0
cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTc1MCw3ICs3NTAsNyBAQCB2b2lkIFRp
bGVDYWNoZTo6ZG9QZW5kaW5nUmVwYWludHMoKQogICAgIGZsdXNoU2F2ZWREaXNwbGF5UmVjdHMo
KTsKIH0KIAotdm9pZCBUaWxlQ2FjaGU6OmZsdXNoU2F2ZWREaXNwbGF5UmVjdHMoKQordm9pZCBM
ZWdhY3lUaWxlQ2FjaGU6OmZsdXNoU2F2ZWREaXNwbGF5UmVjdHMoKQogewogICAgIEFTU0VSVCgh
bV90aWxlTXV0ZXgudHJ5TG9jaygpKTsKICAgICBBU1NFUlQoIW1fc2F2ZWREaXNwbGF5UmVjdHMu
aXNFbXB0eSgpKTsKQEAgLTc2NSw3ICs3NjUsNyBAQCB2b2lkIFRpbGVDYWNoZTo6Zmx1c2hTYXZl
ZERpc3BsYXlSZWN0cygpCiAgICAgICAgIGludmFsaWRhdGVUaWxlcyhyZWN0c1tuXSk7CiB9CiAK
LXZvaWQgVGlsZUNhY2hlOjpzZXRTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQoYm9vbCBl
bmFibGVkKQordm9pZCBMZWdhY3lUaWxlQ2FjaGU6OnNldFNwZWN1bGF0aXZlVGlsZUNyZWF0aW9u
RW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAgICAgaWYgKG1faXNTcGVjdWxhdGl2ZVRpbGVDcmVh
dGlvbkVuYWJsZWQgPT0gZW5hYmxlZCkKICAgICAgICAgcmV0dXJuOwpAQCAtNzc0LDEyICs3NzQs
MTIgQEAgdm9pZCBUaWxlQ2FjaGU6OnNldFNwZWN1bGF0aXZlVGlsZUNyZWF0aQogICAgICAgICBt
X3RpbGVDcmVhdGlvblRpbWVyLnN0YXJ0T25lU2hvdCgwKTsKIH0KIAotYm9vbCBUaWxlQ2FjaGU6
Omhhc1BlbmRpbmdEcmF3KCkgY29uc3QKK2Jvb2wgTGVnYWN5VGlsZUNhY2hlOjpoYXNQZW5kaW5n
RHJhdygpIGNvbnN0CiB7CiAgICAgcmV0dXJuICFtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHko
KTsKIH0KIAotdm9pZCBUaWxlQ2FjaGU6OnByZXBhcmVUb0RyYXcoKQordm9pZCBMZWdhY3lUaWxl
Q2FjaGU6OnByZXBhcmVUb0RyYXcoKQogewogICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIGRvY3Vt
ZW50IHJlbGF5b3V0IGlmIG5lZWRlZC4KICAgICBbW21fd2luZG93IGNvbnRlbnRWaWV3XSB2aWV3
V2lsbERyYXddOwpAQCAtNzkwLDE3ICs3OTAsMTcgQEAgdm9pZCBUaWxlQ2FjaGU6OnByZXBhcmVU
b0RyYXcoKQogICAgIH0KIH0KIAotdm9pZCBUaWxlQ2FjaGU6OnNldExheWVyUG9vbENhcGFjaXR5
KHVuc2lnbmVkIGNhcGFjaXR5KQordm9pZCBMZWdhY3lUaWxlQ2FjaGU6OnNldExheWVyUG9vbENh
cGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5KQogewotICAgIFRpbGVMYXllclBvb2w6OnNoYXJlZFBv
b2woKS0+c2V0Q2FwYWNpdHkoY2FwYWNpdHkpOworICAgIExlZ2FjeVRpbGVMYXllclBvb2w6OnNo
YXJlZFBvb2woKS0+c2V0Q2FwYWNpdHkoY2FwYWNpdHkpOwogfQogCi12b2lkIFRpbGVDYWNoZTo6
ZHJhaW5MYXllclBvb2woKQordm9pZCBMZWdhY3lUaWxlQ2FjaGU6OmRyYWluTGF5ZXJQb29sKCkK
IHsKLSAgICBUaWxlTGF5ZXJQb29sOjpzaGFyZWRQb29sKCktPmRyYWluKCk7CisgICAgTGVnYWN5
VGlsZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5kcmFpbigpOwogfQogCi12b2lkIFRpbGVDYWNo
ZTo6ZHVtcFRpbGVzKCkKK3ZvaWQgTGVnYWN5VGlsZUNhY2hlOjpkdW1wVGlsZXMoKQogewogICAg
IE5TTG9nKEAiPT09PT09PT09PT09PT09PT0iKTsKICAgICBOU0xvZyhAIlpPT01FRCBPVVQiKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlR3JpZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlR3JpZC5oCShy
ZXZpc2lvbiAxNjY0NTMpCShmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3Jp
ZC5oOjE2NjQ1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlR3Jp
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBUaWxlR3JpZF9oCisjZGVmaW5lIFRpbGVHcmlkX2gKKworI2lmIFBMQVRGT1JNKElPUykKKwor
I2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5jbHVkZSAiSW50UG9pbnRIYXNoLmgiCisjaW5jbHVk
ZSAiSW50UmVjdC5oIgorI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJUaWxlQ2FjaGUu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgor
CisjZGVmaW5lIExPR19USUxJTkcgMAorCitAY2xhc3MgQ0FMYXllcjsKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBUaWxlR3JpZFRpbGU7CisKK2NsYXNzIFRpbGVHcmlkIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShUaWxlR3JpZCk7CitwdWJsaWM6CisgICAgdHlwZWRlZiBJbnRQ
b2ludCBUaWxlSW5kZXg7CisKKyAgICBzdGF0aWMgUGFzc093blB0cjxUaWxlR3JpZD4gY3JlYXRl
KFRpbGVDYWNoZSogY2FjaGUsIGNvbnN0IEludFNpemUmIHRpbGVTaXplKSB7IHJldHVybiBhZG9w
dFB0cihuZXcgVGlsZUdyaWQoY2FjaGUsIHRpbGVTaXplKSk7IH0KKworICAgIH5UaWxlR3JpZCgp
OworCisgICAgVGlsZUNhY2hlKiB0aWxlQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3RpbGVDYWNo
ZTsgfQorCisgICAgQ0FMYXllciAqdGlsZUhvc3RMYXllcigpIGNvbnN0OworICAgIEludFJlY3Qg
Ym91bmRzKCkgY29uc3Q7CisgICAgdW5zaWduZWQgdGlsZUNvdW50KCkgY29uc3Q7CisKKyAgICBm
bG9hdCBzY2FsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2NhbGU7IH0KKyAgICB2b2lkIHNldFNjYWxl
KGZsb2F0IHNjYWxlKSB7IG1fc2NhbGUgPSBzY2FsZTsgfQorCisgICAgSW50UmVjdCB2aXNpYmxl
UmVjdCgpIGNvbnN0OworCisgICAgdm9pZCBjcmVhdGVUaWxlcyhUaWxlQ2FjaGU6OlN5bmNocm9u
b3VzVGlsZUNyZWF0aW9uTW9kZSk7CisKKyAgICB2b2lkIGRyb3BBbGxUaWxlcygpOworICAgIHZv
aWQgZHJvcEludmFsaWRUaWxlcygpOworICAgIHZvaWQgZHJvcFRpbGVzT3V0c2lkZVJlY3QoY29u
c3QgSW50UmVjdCYpOworICAgIHZvaWQgZHJvcFRpbGVzSW50ZXJzZWN0aW5nUmVjdChjb25zdCBJ
bnRSZWN0Jik7CisgICAgLy8gRHJvcHMgdGlsZXMgdGhhdCBpbnRlcnNlY3QgZHJvcFJlY3QgYnV0
IGRvIG5vdCBpbnRlcnNlY3Qga2VlcFJlY3QuCisgICAgdm9pZCBkcm9wVGlsZXNCZXR3ZWVuUmVj
dHMoY29uc3QgSW50UmVjdCYgZHJvcFJlY3QsIGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KTsKKyAg
ICBib29sIGRyb3BEaXN0YW50VGlsZXModW5zaWduZWQgdGlsZXNOZWVkZWQsIGRvdWJsZSBzaG9y
dGVzdERpc3RhbmNlKTsKKworICAgIHZvaWQgYWRkVGlsZXNDb3ZlcmluZ1JlY3QoY29uc3QgSW50
UmVjdCYpOworCisgICAgYm9vbCB0aWxlc0NvdmVyKGNvbnN0IEludFJlY3QmKSBjb25zdDsKKyAg
ICB2b2lkIGNlbnRlclRpbGVHcmlkT3JpZ2luKGNvbnN0IEludFJlY3QmIHZpc2libGVSZWN0KTsK
KyAgICB2b2lkIGludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpOworCisg
ICAgdm9pZCB1cGRhdGVUaWxlT3BhY2l0eSgpOworICAgIHZvaWQgdXBkYXRlVGlsZUJvcmRlclZp
c2liaWxpdHkoKTsKKyAgICB2b2lkIHVwZGF0ZUhvc3RMYXllclNpemUoKTsKKyAgICBib29sIGNo
ZWNrRG9TaW5nbGVUaWxlTGF5b3V0KCk7CisKKyAgICBib29sIGhhc1RpbGVzKCkgY29uc3QgeyBy
ZXR1cm4gIW1fdGlsZXMuaXNFbXB0eSgpOyB9CisKKyAgICBJbnRSZWN0IGNhbGN1bGF0ZUNvdmVy
UmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgYm9vbCYgY2VudGVyR3JpZCk7CisKKyAg
ICAvLyBMb2dnaW5nCisgICAgdm9pZCBkdW1wVGlsZXMoKTsKKworcHJpdmF0ZToKKyAgICBkb3Vi
bGUgdGlsZURpc3RhbmNlMihjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVj
dCYgdGlsZVJlY3QpIGNvbnN0OworICAgIHVuc2lnbmVkIHRpbGVCeXRlU2l6ZSgpIGNvbnN0Owor
CisgICAgdm9pZCBhZGRUaWxlRm9ySW5kZXgoY29uc3QgVGlsZUluZGV4Jik7CisKKyAgICBQYXNz
UmVmUHRyPFRpbGVHcmlkVGlsZT4gdGlsZUZvckluZGV4KGNvbnN0IFRpbGVJbmRleCYpIGNvbnN0
OworICAgIEludFJlY3QgdGlsZVJlY3RGb3JJbmRleChjb25zdCBUaWxlSW5kZXgmKSBjb25zdDsK
KyAgICBQYXNzUmVmUHRyPFRpbGVHcmlkVGlsZT4gdGlsZUZvclBvaW50KGNvbnN0IEludFBvaW50
JikgY29uc3Q7CisgICAgVGlsZUluZGV4IHRpbGVJbmRleEZvclBvaW50KGNvbnN0IEludFBvaW50
JikgY29uc3Q7CisKKyAgICBJbnRSZWN0IGFkanVzdENvdmVyUmVjdEZvclBhZ2VCb3VuZHMoY29u
c3QgSW50UmVjdCYpIGNvbnN0OworICAgIGJvb2wgc2hvdWxkVXNlTWluaW1hbFRpbGVDb3ZlcmFn
ZSgpIGNvbnN0OworCitwcml2YXRlOiAgICAgICAgCisgICAgVGlsZUdyaWQoVGlsZUNhY2hlKiwg
Y29uc3QgSW50U2l6ZSYpOworCisgICAgVGlsZUNhY2hlKiBtX3RpbGVDYWNoZTsKKyAgICBSZXRh
aW5QdHI8Q0FMYXllcj4gbV90aWxlSG9zdExheWVyOworCisgICAgSW50UG9pbnQgbV9vcmlnaW47
CisgICAgSW50U2l6ZSBtX3RpbGVTaXplOworCisgICAgZmxvYXQgbV9zY2FsZTsKKworICAgIHR5
cGVkZWYgSGFzaE1hcDxUaWxlSW5kZXgsIFJlZlB0cjxUaWxlR3JpZFRpbGU+PiBUaWxlTWFwOwor
ICAgIFRpbGVNYXAgbV90aWxlczsKKworICAgIEludFJlY3QgbV92YWxpZEJvdW5kczsKK307CisK
K3N0YXRpYyBpbmxpbmUgSW50UG9pbnQgdG9wTGVmdChjb25zdCBJbnRSZWN0JiByZWN0KQorewor
ICAgIHJldHVybiByZWN0LmxvY2F0aW9uKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgSW50UG9pbnQg
Ym90dG9tUmlnaHQoY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQo
cmVjdC5tYXhYKCkgLSAxLCByZWN0Lm1heFkoKSAtIDEpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBQTEFURk9STShJT1MpCisjZW5kaWYgLy8gVGlsZUdyaWRfaApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVHcmlkLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVHcmlkLmgJKHdv
cmtpbmcgY29weSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlR3Jp
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBUaWxlR3JpZF9oCi0jZGVmaW5lIFRpbGVH
cmlkX2gKKyNpZm5kZWYgTGVnYWN5VGlsZUdyaWRfaAorI2RlZmluZSBMZWdhY3lUaWxlR3JpZF9o
CiAKICNpZiBQTEFURk9STShJT1MpCiAKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJJbnRQ
b2ludEhhc2guaCIKICNpbmNsdWRlICJJbnRSZWN0LmgiCiAjaW5jbHVkZSAiSW50U2l6ZS5oIgot
I2luY2x1ZGUgIlRpbGVDYWNoZS5oIgorI2luY2x1ZGUgIkxlZ2FjeVRpbGVDYWNoZS5oIgogI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgpAQCAtNDYsMTggKzQ2LDE4IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgVGlsZUdyaWRUaWxlOworY2xhc3MgTGVnYWN5VGlsZUdyaWRUaWxlOwog
Ci1jbGFzcyBUaWxlR3JpZCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGlsZUdyaWQpOwor
Y2xhc3MgTGVnYWN5VGlsZUdyaWQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExlZ2FjeVRp
bGVHcmlkKTsKIHB1YmxpYzoKICAgICB0eXBlZGVmIEludFBvaW50IFRpbGVJbmRleDsKIAotICAg
IHN0YXRpYyBQYXNzT3duUHRyPFRpbGVHcmlkPiBjcmVhdGUoVGlsZUNhY2hlKiBjYWNoZSwgY29u
c3QgSW50U2l6ZSYgdGlsZVNpemUpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBUaWxlR3JpZChjYWNo
ZSwgdGlsZVNpemUpKTsgfQorICAgIHN0YXRpYyBQYXNzT3duUHRyPExlZ2FjeVRpbGVHcmlkPiBj
cmVhdGUoTGVnYWN5VGlsZUNhY2hlKiBjYWNoZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpIHsg
cmV0dXJuIGFkb3B0UHRyKG5ldyBMZWdhY3lUaWxlR3JpZChjYWNoZSwgdGlsZVNpemUpKTsgfQog
Ci0gICAgflRpbGVHcmlkKCk7CisgICAgfkxlZ2FjeVRpbGVHcmlkKCk7CiAKLSAgICBUaWxlQ2Fj
aGUqIHRpbGVDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZUNhY2hlOyB9CisgICAgTGVnYWN5
VGlsZUNhY2hlKiB0aWxlQ2FjaGUoKSBjb25zdCB7IHJldHVybiBtX3RpbGVDYWNoZTsgfQogCiAg
ICAgQ0FMYXllciAqdGlsZUhvc3RMYXllcigpIGNvbnN0OwogICAgIEludFJlY3QgYm91bmRzKCkg
Y29uc3Q7CkBAIC02OCw3ICs2OCw3IEBAIHB1YmxpYzoKIAogICAgIEludFJlY3QgdmlzaWJsZVJl
Y3QoKSBjb25zdDsKIAotICAgIHZvaWQgY3JlYXRlVGlsZXMoVGlsZUNhY2hlOjpTeW5jaHJvbm91
c1RpbGVDcmVhdGlvbk1vZGUpOworICAgIHZvaWQgY3JlYXRlVGlsZXMoTGVnYWN5VGlsZUNhY2hl
OjpTeW5jaHJvbm91c1RpbGVDcmVhdGlvbk1vZGUpOwogCiAgICAgdm9pZCBkcm9wQWxsVGlsZXMo
KTsKICAgICB2b2lkIGRyb3BJbnZhbGlkVGlsZXMoKTsKQEAgLTEwMiwxOCArMTAyLDE4IEBAIHBy
aXZhdGU6CiAKICAgICB2b2lkIGFkZFRpbGVGb3JJbmRleChjb25zdCBUaWxlSW5kZXgmKTsKIAot
ICAgIFBhc3NSZWZQdHI8VGlsZUdyaWRUaWxlPiB0aWxlRm9ySW5kZXgoY29uc3QgVGlsZUluZGV4
JikgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxMZWdhY3lUaWxlR3JpZFRpbGU+IHRpbGVGb3JJbmRl
eChjb25zdCBUaWxlSW5kZXgmKSBjb25zdDsKICAgICBJbnRSZWN0IHRpbGVSZWN0Rm9ySW5kZXgo
Y29uc3QgVGlsZUluZGV4JikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxUaWxlR3JpZFRpbGU+IHRp
bGVGb3JQb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8TGVnYWN5
VGlsZUdyaWRUaWxlPiB0aWxlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKICAgICBU
aWxlSW5kZXggdGlsZUluZGV4Rm9yUG9pbnQoY29uc3QgSW50UG9pbnQmKSBjb25zdDsKIAogICAg
IEludFJlY3QgYWRqdXN0Q292ZXJSZWN0Rm9yUGFnZUJvdW5kcyhjb25zdCBJbnRSZWN0JikgY29u
c3Q7CiAgICAgYm9vbCBzaG91bGRVc2VNaW5pbWFsVGlsZUNvdmVyYWdlKCkgY29uc3Q7CiAKIHBy
aXZhdGU6ICAgICAgICAKLSAgICBUaWxlR3JpZChUaWxlQ2FjaGUqLCBjb25zdCBJbnRTaXplJik7
CisgICAgTGVnYWN5VGlsZUdyaWQoTGVnYWN5VGlsZUNhY2hlKiwgY29uc3QgSW50U2l6ZSYpOwog
Ci0gICAgVGlsZUNhY2hlKiBtX3RpbGVDYWNoZTsKKyAgICBMZWdhY3lUaWxlQ2FjaGUqIG1fdGls
ZUNhY2hlOwogICAgIFJldGFpblB0cjxDQUxheWVyPiBtX3RpbGVIb3N0TGF5ZXI7CiAKICAgICBJ
bnRQb2ludCBtX29yaWdpbjsKQEAgLTEyMSw3ICsxMjEsNyBAQCBwcml2YXRlOiAgICAgICAgCiAK
ICAgICBmbG9hdCBtX3NjYWxlOwogCi0gICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVJbmRleCwgUmVm
UHRyPFRpbGVHcmlkVGlsZT4+IFRpbGVNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFRpbGVJbmRl
eCwgUmVmUHRyPExlZ2FjeVRpbGVHcmlkVGlsZT4+IFRpbGVNYXA7CiAgICAgVGlsZU1hcCBtX3Rp
bGVzOwogCiAgICAgSW50UmVjdCBtX3ZhbGlkQm91bmRzOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVHcmlkLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlR3JpZC5tbQkocmV2aXNpb24gMTY2NDUzKQkoZnJv
bSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW06MTY2NDUzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVHcmlkLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlRpbGVHcmlkLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJNZW1v
cnlQcmVzc3VyZUhhbmRsZXIuaCIKKyNpbmNsdWRlICJTeXN0ZW1NZW1vcnkuaCIKKyNpbmNsdWRl
ICJUaWxlR3JpZFRpbGUuaCIKKyNpbmNsdWRlICJUaWxlTGF5ZXIuaCIKKyNpbmNsdWRlICJUaWxl
TGF5ZXJQb29sLmgiCisjaW5jbHVkZSAiV0FLV2luZG93LmgiCisjaW5jbHVkZSA8Q29yZUdyYXBo
aWNzL0NvcmVHcmFwaGljc1ByaXZhdGUuaD4KKyNpbmNsdWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNv
cmUuaD4KKyNpbmNsdWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNvcmVQcml2YXRlLmg+CisjaW5jbHVk
ZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworVGlsZUdyaWQ6OlRpbGVHcmlkKFRpbGVDYWNoZSogdGlsZUNhY2hlLCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSkKKyAgICA6IG1fdGlsZUNhY2hlKHRpbGVDYWNoZSkKKyAgICAsIG1fdGls
ZUhvc3RMYXllcihhZG9wdE5TKFtbVGlsZUhvc3RMYXllciBhbGxvY10gaW5pdFdpdGhUaWxlR3Jp
ZDp0aGlzXSkpCisgICAgLCBtX3RpbGVTaXplKHRpbGVTaXplKQorICAgICwgbV9zY2FsZSgxKQor
ICAgICwgbV92YWxpZEJvdW5kcygwLCAwLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgp
LCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSAKK3sKK30KKyAgICAKK1RpbGVHcmlk
Ojp+VGlsZUdyaWQoKQoreworICAgIFttX3RpbGVIb3N0TGF5ZXIgcmVtb3ZlRnJvbVN1cGVybGF5
ZXJdOworfQorCitJbnRSZWN0IFRpbGVHcmlkOjp2aXNpYmxlUmVjdCgpIGNvbnN0Cit7CisgICAg
SW50UmVjdCB2aXNpYmxlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QobV90aWxlQ2FjaGUtPnZpc2li
bGVSZWN0SW5MYXllcihtX3RpbGVIb3N0TGF5ZXIuZ2V0KCkpKTsKKworICAgIC8vIFdoZW4gZmFz
dCBzY3JvbGxpbmcgdG8gdGhlIHRvcCwgbW92ZSB0aGUgdmlzaWJsZSByZWN0IHRoZXJlIGltbWVk
aWF0ZWx5IHNvIHdlIGhhdmUgdGlsZXMgd2hlbiB0aGUgc2Nyb2xsaW5nIGNvbXBsZXRlcy4KKyAg
ICBpZiAobV90aWxlQ2FjaGUtPnRpbGluZ01vZGUoKSA9PSBUaWxlQ2FjaGU6OlNjcm9sbFRvVG9w
KQorICAgICAgICB2aXNpYmxlUmVjdC5zZXRZKDApOworCisgICAgcmV0dXJuIHZpc2libGVSZWN0
OworfQorCit2b2lkIFRpbGVHcmlkOjpkcm9wQWxsVGlsZXMoKQoreworICAgIG1fdGlsZXMuY2xl
YXIoKTsKK30KKwordm9pZCBUaWxlR3JpZDo6ZHJvcFRpbGVzSW50ZXJzZWN0aW5nUmVjdChjb25z
dCBJbnRSZWN0JiBkcm9wUmVjdCkKK3sKKyAgICBkcm9wVGlsZXNCZXR3ZWVuUmVjdHMoZHJvcFJl
Y3QsIEludFJlY3QoKSk7Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OmRyb3BUaWxlc091dHNpZGVSZWN0
KGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KQoreworICAgIGRyb3BUaWxlc0JldHdlZW5SZWN0cyhJ
bnRSZWN0KDAsIDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCkpLCBrZWVwUmVjdCk7Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OmRy
b3BUaWxlc0JldHdlZW5SZWN0cyhjb25zdCBJbnRSZWN0JiBkcm9wUmVjdCwgY29uc3QgSW50UmVj
dCYga2VlcFJlY3QpCit7CisgICAgVmVjdG9yPFRpbGVJbmRleD4gdG9SZW1vdmU7CisgICAgZm9y
IChjb25zdCBhdXRvJiB0aWxlIDogbV90aWxlcykgeworICAgICAgICBjb25zdCBUaWxlSW5kZXgm
IGluZGV4ID0gdGlsZS5rZXk7CisgICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSB0aWxlLnZhbHVl
LT5yZWN0KCk7CisgICAgICAgIGlmICh0aWxlUmVjdC5pbnRlcnNlY3RzKGRyb3BSZWN0KSAmJiAh
dGlsZVJlY3QuaW50ZXJzZWN0cyhrZWVwUmVjdCkpCisgICAgICAgICAgICB0b1JlbW92ZS5hcHBl
bmQoaW5kZXgpOworICAgIH0KKyAgICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRvUmVtb3ZlLnNp
emUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgcmVtb3ZlQ291bnQ7ICsrbikKKyAg
ICAgICAgbV90aWxlcy5yZW1vdmUodG9SZW1vdmVbbl0pOworfQorCit1bnNpZ25lZCBUaWxlR3Jp
ZDo6dGlsZUJ5dGVTaXplKCkgY29uc3QKK3sKKyAgICBJbnRTaXplIHRpbGVQaXhlbFNpemUgPSBt
X3RpbGVTaXplOworICAgIHRpbGVQaXhlbFNpemUuc2NhbGUobV90aWxlQ2FjaGUtPnNjcmVlblNj
YWxlKCkpOworICAgIHJldHVybiBUaWxlTGF5ZXJQb29sOjpieXRlc0JhY2tpbmdMYXllcldpdGhQ
aXhlbFNpemUodGlsZVBpeGVsU2l6ZSk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3Rh
dGljIGJvb2wgaXNGYXJ0aGVyQXdheShjb25zdCBzdGQ6OnBhaXI8ZG91YmxlLCBUPiYgYSwgY29u
c3Qgc3RkOjpwYWlyPGRvdWJsZSwgVD4mIGIpCit7CisgICAgcmV0dXJuIGEuZmlyc3QgPiBiLmZp
cnN0OworfQorCitib29sIFRpbGVHcmlkOjpkcm9wRGlzdGFudFRpbGVzKHVuc2lnbmVkIHRpbGVz
TmVlZGVkLCBkb3VibGUgc2hvcnRlc3REaXN0YW5jZSkKK3sKKyAgICB1bnNpZ25lZCBieXRlc1Bl
clRpbGUgPSB0aWxlQnl0ZVNpemUoKTsKKyAgICB1bnNpZ25lZCBieXRlc05lZWRlZCA9IHRpbGVz
TmVlZGVkICogYnl0ZXNQZXJUaWxlOworICAgIHVuc2lnbmVkIGJ5dGVzVXNlZCA9IHRpbGVDb3Vu
dCgpICogYnl0ZXNQZXJUaWxlOworICAgIHVuc2lnbmVkIG1heGltdW1CeXRlcyA9IG1fdGlsZUNh
Y2hlLT50aWxlQ2FwYWNpdHlGb3JHcmlkKHRoaXMpOworCisgICAgaW50IGJ5dGVzVG9SZWNsYWlt
ID0gaW50KGJ5dGVzVXNlZCkgLSAoaW50KG1heGltdW1CeXRlcykgLSBieXRlc05lZWRlZCk7Cisg
ICAgaWYgKGJ5dGVzVG9SZWNsYWltIDw9IDApCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
dW5zaWduZWQgdGlsZXNUb1JlbW92ZUNvdW50ID0gYnl0ZXNUb1JlY2xhaW0gLyBieXRlc1BlclRp
bGU7CisKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdGhpcy0+dmlzaWJsZVJlY3QoKTsKKyAg
ICBWZWN0b3I8c3RkOjpwYWlyPGRvdWJsZSwgVGlsZUluZGV4Pj4gdG9SZW1vdmU7CisgICAgZm9y
IChjb25zdCBhdXRvJiB0aWxlIDogbV90aWxlcykgeworICAgICAgICBjb25zdCBUaWxlSW5kZXgm
IGluZGV4ID0gdGlsZS5rZXk7CisgICAgICAgIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0ID0gdGls
ZS52YWx1ZS0+cmVjdCgpOworICAgICAgICBkb3VibGUgZGlzdGFuY2UgPSB0aWxlRGlzdGFuY2Uy
KHZpc2libGVSZWN0LCB0aWxlUmVjdCk7CisgICAgICAgIGlmIChkaXN0YW5jZSA8PSBzaG9ydGVz
dERpc3RhbmNlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHRvUmVtb3ZlLmFwcGVu
ZChzdGQ6Om1ha2VfcGFpcihkaXN0YW5jZSwgaW5kZXgpKTsKKyAgICAgICAgc3RkOjpwdXNoX2hl
YXAodG9SZW1vdmUuYmVnaW4oKSwgdG9SZW1vdmUuZW5kKCksIHN0ZDo6cHRyX2Z1bihpc0ZhcnRo
ZXJBd2F5PFRpbGVJbmRleD4pKTsKKyAgICAgICAgaWYgKHRvUmVtb3ZlLnNpemUoKSA+IHRpbGVz
VG9SZW1vdmVDb3VudCkgeworICAgICAgICAgICAgc3RkOjpwb3BfaGVhcCh0b1JlbW92ZS5iZWdp
bigpLCB0b1JlbW92ZS5lbmQoKSwgc3RkOjpwdHJfZnVuKGlzRmFydGhlckF3YXk8VGlsZUluZGV4
PikpOworICAgICAgICAgICAgdG9SZW1vdmUucmVtb3ZlTGFzdCgpOworICAgICAgICB9CisgICAg
fQorICAgIHNpemVfdCByZW1vdmVDb3VudCA9IHRvUmVtb3ZlLnNpemUoKTsKKyAgICBmb3IgKHNp
emVfdCBuID0gMDsgbiA8IHJlbW92ZUNvdW50OyArK24pCisgICAgICAgIG1fdGlsZXMucmVtb3Zl
KHRvUmVtb3ZlW25dLnNlY29uZCk7CisKKyAgICBpZiAoIXNob3J0ZXN0RGlzdGFuY2UpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIHRpbGVDb3VudCgpICogYnl0ZXNQZXJUaWxl
ICsgYnl0ZXNOZWVkZWQgPD0gbWF4aW11bUJ5dGVzOworfQorCit2b2lkIFRpbGVHcmlkOjphZGRU
aWxlc0NvdmVyaW5nUmVjdChjb25zdCBJbnRSZWN0JiByZWN0VG9Db3ZlcikKK3sKKyAgICAvLyBX
ZSBuZXZlciBkcmF3IGFueXRoaW5nIG91dHNpZGUgb2Ygb3VyIGJvdW5kcy4KKyAgICBJbnRSZWN0
IHJlY3QocmVjdFRvQ292ZXIpOworICAgIHJlY3QuaW50ZXJzZWN0KGJvdW5kcygpKTsKKyAgICBp
ZiAocmVjdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFRpbGVJbmRleCB0b3BM
ZWZ0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludCh0b3BMZWZ0KHJlY3QpKTsKKyAgICBUaWxlSW5k
ZXggYm90dG9tUmlnaHRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KGJvdHRvbVJpZ2h0KHJlY3Qp
KTsKKyAgICBmb3IgKGludCB5SW5kZXggPSB0b3BMZWZ0SW5kZXgueSgpOyB5SW5kZXggPD0gYm90
dG9tUmlnaHRJbmRleC55KCk7ICsreUluZGV4KSB7CisgICAgICAgIGZvciAoaW50IHhJbmRleCA9
IHRvcExlZnRJbmRleC54KCk7IHhJbmRleCA8PSBib3R0b21SaWdodEluZGV4LngoKTsgKyt4SW5k
ZXgpIHsKKyAgICAgICAgICAgIFRpbGVJbmRleCBpbmRleCh4SW5kZXgsIHlJbmRleCk7CisgICAg
ICAgICAgICBpZiAoIXRpbGVGb3JJbmRleChpbmRleCkpCisgICAgICAgICAgICAgICAgYWRkVGls
ZUZvckluZGV4KGluZGV4KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBUaWxlR3JpZDo6
YWRkVGlsZUZvckluZGV4KGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpCit7CisgICAgbV90aWxlcy5z
ZXQoaW5kZXgsIFRpbGVHcmlkVGlsZTo6Y3JlYXRlKHRoaXMsIHRpbGVSZWN0Rm9ySW5kZXgoaW5k
ZXgpKSk7Cit9CisKK0NBTGF5ZXIqIFRpbGVHcmlkOjp0aWxlSG9zdExheWVyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV90aWxlSG9zdExheWVyLmdldCgpOworfQorCitJbnRSZWN0IFRpbGVHcmlk
Ojpib3VuZHMoKSBjb25zdAoreworICAgIHJldHVybiBJbnRSZWN0KEludFBvaW50KCksIEludFNp
emUoW3RpbGVIb3N0TGF5ZXIoKSBzaXplXSkpOworfQorCitQYXNzUmVmUHRyPFRpbGVHcmlkVGls
ZT4gVGlsZUdyaWQ6OnRpbGVGb3JJbmRleChjb25zdCBUaWxlSW5kZXgmIGluZGV4KSBjb25zdAor
eworICAgIHJldHVybiBtX3RpbGVzLmdldChpbmRleCk7Cit9CisKK0ludFJlY3QgVGlsZUdyaWQ6
OnRpbGVSZWN0Rm9ySW5kZXgoY29uc3QgVGlsZUluZGV4JiBpbmRleCkgY29uc3QKK3sKKyAgICBJ
bnRSZWN0IHJlY3QoaW5kZXgueCgpICogbV90aWxlU2l6ZS53aWR0aCgpIC0gKG1fb3JpZ2luLngo
KSA/IG1fdGlsZVNpemUud2lkdGgoKSAtIG1fb3JpZ2luLngoKSA6IDApLAorICAgICAgICAgICAg
ICAgICBpbmRleC55KCkgKiBtX3RpbGVTaXplLmhlaWdodCgpIC0gKG1fb3JpZ2luLnkoKSA/IG1f
dGlsZVNpemUuaGVpZ2h0KCkgLSBtX29yaWdpbi55KCkgOiAwKSwKKyAgICAgICAgICAgICAgICAg
bV90aWxlU2l6ZS53aWR0aCgpLAorICAgICAgICAgICAgICAgICBtX3RpbGVTaXplLmhlaWdodCgp
KTsKKyAgICByZWN0LmludGVyc2VjdChib3VuZHMoKSk7CisgICAgcmV0dXJuIHJlY3Q7Cit9CisK
K1RpbGVHcmlkOjpUaWxlSW5kZXggVGlsZUdyaWQ6OnRpbGVJbmRleEZvclBvaW50KGNvbnN0IElu
dFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9vcmlnaW4ueCgpIDwgbV90aWxl
U2l6ZS53aWR0aCgpKTsKKyAgICBBU1NFUlQobV9vcmlnaW4ueSgpIDwgbV90aWxlU2l6ZS5oZWln
aHQoKSk7CisgICAgaW50IHggPSAocG9pbnQueCgpICsgKG1fb3JpZ2luLngoKSA/IG1fdGlsZVNp
emUud2lkdGgoKSAtIG1fb3JpZ2luLngoKSA6IDApKSAvIG1fdGlsZVNpemUud2lkdGgoKTsKKyAg
ICBpbnQgeSA9IChwb2ludC55KCkgKyAobV9vcmlnaW4ueSgpID8gbV90aWxlU2l6ZS5oZWlnaHQo
KSAtIG1fb3JpZ2luLnkoKSA6IDApKSAvIG1fdGlsZVNpemUuaGVpZ2h0KCk7CisgICAgcmV0dXJu
IFRpbGVJbmRleChzdGQ6Om1heCh4LCAwKSwgc3RkOjptYXgoeSwgMCkpOworfQorCit2b2lkIFRp
bGVHcmlkOjpjZW50ZXJUaWxlR3JpZE9yaWdpbihjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkK
K3sKKyAgICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICB1bnNpZ25lZCBtaW5pbXVtSG9yaXpvbnRhbFRpbGVzID0gMSArICh2aXNpYmxlUmVjdC53aWR0
aCgpIC0gMSkgLyBtX3RpbGVTaXplLndpZHRoKCk7CisgICAgdW5zaWduZWQgbWluaW11bVZlcnRp
Y2FsVGlsZXMgPSAxICsgKHZpc2libGVSZWN0LmhlaWdodCgpIC0gMSkgLyBtX3RpbGVTaXplLmhl
aWdodCgpOworICAgIFRpbGVJbmRleCBjdXJyZW50VG9wTGVmdEluZGV4ID0gdGlsZUluZGV4Rm9y
UG9pbnQodG9wTGVmdCh2aXNpYmxlUmVjdCkpOworICAgIFRpbGVJbmRleCBjdXJyZW50Qm90dG9t
UmlnaHRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KGJvdHRvbVJpZ2h0KHZpc2libGVSZWN0KSk7
CisgICAgdW5zaWduZWQgY3VycmVudEhvcml6b250YWxUaWxlcyA9IGN1cnJlbnRCb3R0b21SaWdo
dEluZGV4LngoKSAtIGN1cnJlbnRUb3BMZWZ0SW5kZXgueCgpICsgMTsKKyAgICB1bnNpZ25lZCBj
dXJyZW50VmVydGljYWxUaWxlcyA9IGN1cnJlbnRCb3R0b21SaWdodEluZGV4LnkoKSAtIGN1cnJl
bnRUb3BMZWZ0SW5kZXgueSgpICsgMTsKKworICAgIC8vIElmIHdlIGhhdmUgdGlsZXMgYWxyZWFk
eSwgb25seSBjZW50ZXIgaWYgd2Ugd291bGQgZ2V0IGJlbmVmaXRzIGZyb20gYm90aCBkaXJlY3Rp
b25zIChhcyB3ZSBuZWVkIHRvIHRocm93IG91dCBleGlzdGluZyB0aWxlcykuCisgICAgaWYgKHRp
bGVDb3VudCgpICYmIChjdXJyZW50SG9yaXpvbnRhbFRpbGVzID09IG1pbmltdW1Ib3Jpem9udGFs
VGlsZXMgfHwgY3VycmVudFZlcnRpY2FsVGlsZXMgPT0gbWluaW11bVZlcnRpY2FsVGlsZXMpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBJbnRQb2ludCBuZXdPcmlnaW4oMCwgMCk7CisgICAgSW50
U2l6ZSBzaXplID0gYm91bmRzKCkuc2l6ZSgpOworICAgIGlmIChzaXplLndpZHRoKCkgPiBtX3Rp
bGVTaXplLndpZHRoKCkpIHsKKyAgICAgICAgbmV3T3JpZ2luLnNldFgoKHZpc2libGVSZWN0Lngo
KSAtIChtaW5pbXVtSG9yaXpvbnRhbFRpbGVzICogbV90aWxlU2l6ZS53aWR0aCgpIC0gdmlzaWJs
ZVJlY3Qud2lkdGgoKSkgLyAyKSAlIG1fdGlsZVNpemUud2lkdGgoKSk7CisgICAgICAgIGlmIChu
ZXdPcmlnaW4ueCgpIDwgMCkKKyAgICAgICAgICAgIG5ld09yaWdpbi5zZXRYKDApOworICAgIH0K
KyAgICBpZiAoc2l6ZS5oZWlnaHQoKSA+IG1fdGlsZVNpemUuaGVpZ2h0KCkpIHsKKyAgICAgICAg
bmV3T3JpZ2luLnNldFkoKHZpc2libGVSZWN0LnkoKSAtIChtaW5pbXVtVmVydGljYWxUaWxlcyAq
IG1fdGlsZVNpemUuaGVpZ2h0KCkgLSB2aXNpYmxlUmVjdC5oZWlnaHQoKSkgLyAyKSAlIG1fdGls
ZVNpemUuaGVpZ2h0KCkpOworICAgICAgICBpZiAobmV3T3JpZ2luLnkoKSA8IDApCisgICAgICAg
ICAgICBuZXdPcmlnaW4uc2V0WSgwKTsKKyAgICB9CisKKyAgICAvLyBEcm9wIGFsbCBleGlzdGlu
ZyB0aWxlcyBpZiB0aGUgb3JpZ2luIG1vdmVkLgorICAgIGlmIChuZXdPcmlnaW4gPT0gbV9vcmln
aW4pCisgICAgICAgIHJldHVybjsKKyAgICBtX3RpbGVzLmNsZWFyKCk7CisgICAgbV9vcmlnaW4g
PSBuZXdPcmlnaW47Cit9CisKK1Bhc3NSZWZQdHI8VGlsZUdyaWRUaWxlPiBUaWxlR3JpZDo6dGls
ZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGls
ZUZvckluZGV4KHRpbGVJbmRleEZvclBvaW50KHBvaW50KSk7Cit9CisKK2Jvb2wgVGlsZUdyaWQ6
OnRpbGVzQ292ZXIoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICByZXR1cm4gdGls
ZUZvclBvaW50KHJlY3QubG9jYXRpb24oKSkgJiYgdGlsZUZvclBvaW50KEludFBvaW50KHJlY3Qu
bWF4WCgpIC0gMSwgcmVjdC55KCkpKSAmJgorICAgIHRpbGVGb3JQb2ludChJbnRQb2ludChyZWN0
LngoKSwgcmVjdC5tYXhZKCkgLSAxKSkgJiYgdGlsZUZvclBvaW50KEludFBvaW50KHJlY3QubWF4
WCgpIC0gMSwgcmVjdC5tYXhZKCkgLSAxKSk7Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OnVwZGF0ZVRp
bGVPcGFjaXR5KCkKK3sKKyAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgp
OworICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKytpdCkKKyAgICAgICAgW2l0LT52YWx1ZS0+dGlsZUxheWVyKCkgc2V0T3BhcXVlOm1f
dGlsZUNhY2hlLT50aWxlc09wYXF1ZSgpXTsKK30KKwordm9pZCBUaWxlR3JpZDo6dXBkYXRlVGls
ZUJvcmRlclZpc2liaWxpdHkoKQoreworICAgIFRpbGVNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGls
ZXMuZW5kKCk7CisgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpdC0+dmFsdWUtPnNob3dCb3JkZXIobV90aWxl
Q2FjaGUtPnRpbGVCb3JkZXJzVmlzaWJsZSgpKTsKK30KKwordW5zaWduZWQgVGlsZUdyaWQ6OnRp
bGVDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdGlsZXMuc2l6ZSgpOworfQorCitib29s
IFRpbGVHcmlkOjpjaGVja0RvU2luZ2xlVGlsZUxheW91dCgpCit7CisgICAgSW50U2l6ZSBzaXpl
ID0gYm91bmRzKCkuc2l6ZSgpOworICAgIGlmIChzaXplLndpZHRoKCkgPiBtX3RpbGVTaXplLndp
ZHRoKCkgfHwgc2l6ZS5oZWlnaHQoKSA+IG1fdGlsZVNpemUuaGVpZ2h0KCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmIChtX29yaWdpbiAhPSBJbnRQb2ludCgwLCAwKSkgeworICAg
ICAgICBtX3RpbGVzLmNsZWFyKCk7CisgICAgICAgIG1fb3JpZ2luID0gSW50UG9pbnQoMCwgMCk7
CisgICAgfQorCisgICAgZHJvcEludmFsaWRUaWxlcygpOworCisgICAgaWYgKHNpemUuaXNFbXB0
eSgpKSB7CisgICAgICAgIEFTU0VSVCghbV90aWxlcy5nZXQoVGlsZUluZGV4KDAsIDApKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIFRpbGVJbmRleCBvcmlnaW5JbmRleCgw
LCAwKTsKKyAgICBpZiAoIW1fdGlsZXMuZ2V0KG9yaWdpbkluZGV4KSkKKyAgICAgICAgbV90aWxl
cy5zZXQob3JpZ2luSW5kZXgsIFRpbGVHcmlkVGlsZTo6Y3JlYXRlKHRoaXMsIHRpbGVSZWN0Rm9y
SW5kZXgob3JpZ2luSW5kZXgpKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBUaWxl
R3JpZDo6dXBkYXRlSG9zdExheWVyU2l6ZSgpCit7CisgICAgQ0FMYXllciogaG9zdExheWVyID0g
bV90aWxlQ2FjaGUtPmhvc3RMYXllcigpOworICAgIENHUmVjdCB0aWxlSG9zdEJvdW5kcyA9IFto
b3N0TGF5ZXIgY29udmVydFJlY3Q6W2hvc3RMYXllciBib3VuZHNdIHRvTGF5ZXI6dGlsZUhvc3RM
YXllcigpXTsKKyAgICBDR1NpemUgdHJhbnNmb3JtZWRTaXplOworICAgIHRyYW5zZm9ybWVkU2l6
ZS53aWR0aCA9IENHUm91bmQodGlsZUhvc3RCb3VuZHMuc2l6ZS53aWR0aCk7CisgICAgdHJhbnNm
b3JtZWRTaXplLmhlaWdodCA9IENHUm91bmQodGlsZUhvc3RCb3VuZHMuc2l6ZS5oZWlnaHQpOwor
CisgICAgQ0dSZWN0IGJvdW5kcyA9IFt0aWxlSG9zdExheWVyKCkgYm91bmRzXTsKKyAgICBpZiAo
Q0dTaXplRXF1YWxUb1NpemUoYm91bmRzLnNpemUsIHRyYW5zZm9ybWVkU2l6ZSkpCisgICAgICAg
IHJldHVybjsKKyAgICBib3VuZHMuc2l6ZSA9IHRyYW5zZm9ybWVkU2l6ZTsKKyAgICBbdGlsZUhv
c3RMYXllcigpIHNldEJvdW5kczpib3VuZHNdOworfQorCit2b2lkIFRpbGVHcmlkOjpkcm9wSW52
YWxpZFRpbGVzKCkKK3sKKyAgICBJbnRSZWN0IGJvdW5kcyA9IHRoaXMtPmJvdW5kcygpOworICAg
IEludFJlY3QgZHJvcEJvdW5kcyA9IGludGVyc2VjdGlvbihtX3ZhbGlkQm91bmRzLCBib3VuZHMp
OworICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRvUmVtb3ZlOworICAgIGZvciAoY29uc3QgYXV0byYg
dGlsZSA6IG1fdGlsZXMpIHsKKyAgICAgICAgY29uc3QgVGlsZUluZGV4JiBpbmRleCA9IHRpbGUu
a2V5OworICAgICAgICBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCA9IHRpbGUudmFsdWUtPnJlY3Qo
KTsKKyAgICAgICAgSW50UmVjdCBleHBlY3RlZFRpbGVSZWN0ID0gdGlsZVJlY3RGb3JJbmRleChp
bmRleCk7CisgICAgICAgIGlmIChleHBlY3RlZFRpbGVSZWN0ICE9IHRpbGVSZWN0IHx8ICFkcm9w
Qm91bmRzLmNvbnRhaW5zKHRpbGVSZWN0KSkKKyAgICAgICAgICAgIHRvUmVtb3ZlLmFwcGVuZChp
bmRleCk7CisgICAgfQorICAgIHVuc2lnbmVkIHJlbW92ZUNvdW50ID0gdG9SZW1vdmUuc2l6ZSgp
OworICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCByZW1vdmVDb3VudDsgKytuKQorICAgICAg
ICBtX3RpbGVzLnJlbW92ZSh0b1JlbW92ZVtuXSk7CisKKyAgICBtX3ZhbGlkQm91bmRzID0gYm91
bmRzOworfQorCit2b2lkIFRpbGVHcmlkOjppbnZhbGlkYXRlVGlsZXMoY29uc3QgSW50UmVjdCYg
ZGlydHlSZWN0KQoreworICAgIGlmICghaGFzVGlsZXMoKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgSW50UmVjdCBib3VuZHMgPSB0aGlzLT5ib3VuZHMoKTsKKyAgICBpZiAoaW50ZXJzZWN0aW9u
KGJvdW5kcywgbV92YWxpZEJvdW5kcykgIT0gbV92YWxpZEJvdW5kcykgeworICAgICAgICAvLyBU
aGUgYm91bmRzIGhhdmUgZ290IHNtYWxsZXIuIEV2ZXJ5dGhpbmcgb3V0c2lkZSB3aWxsIGFsc28g
YmUgY29uc2lkZXJlZCBpbnZhbGlkIGFuZCB3aWxsIGJlIGRyb3BwZWQgYnkgZHJvcEludmFsaWRU
aWxlcygpLgorICAgICAgICAvLyBEdWUgdG8gZGlydHlSZWN0IGJlaW5nIGxpbWl0ZWQgdG8gY3Vy
cmVudCBib3VuZHMgdGhlIHRpbGVzIHRoYXQgYXJlIHRlbXBvcmFyaWx5IG91dHNpZGUgbWlnaHQg
bWlzcyBpbnZhbGlkYXRpb24gCisgICAgICAgIC8vIGNvbXBsZXRlbHkgb3Rod2Vyd2lzZS4KKyAg
ICAgICAgbV92YWxpZEJvdW5kcyA9IGJvdW5kczsKKyAgICB9CisKKyAgICBWZWN0b3I8VGlsZUlu
ZGV4PiBpbnZhbGlkYXRlZFRpbGVzOworCisgICAgaWYgKGRpcnR5UmVjdC53aWR0aCgpID4gbV90
aWxlU2l6ZS53aWR0aCgpICogNCB8fCBkaXJ0eVJlY3QuaGVpZ2h0KCkgPiBtX3RpbGVTaXplLmhl
aWdodCgpICogNCkgeworICAgICAgICAvLyBGb3IgbGFyZ2UgaW52YWxpZGF0ZXMsIGl0ZXJhdGUg
b3ZlciBsaXZlIHRpbGVzLgorICAgICAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVz
LmVuZCgpOworICAgICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFRpbGVHcmlkVGlsZSogdGlsZSA9
IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgICAgIGlmICghdGlsZS0+cmVjdCgpLmludGVyc2Vj
dHMoZGlydHlSZWN0KSkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGls
ZS0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKKyAgICAgICAgICAgIGludmFsaWRhdGVkVGls
ZXMuYXBwZW5kKGl0LT5rZXkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgVGls
ZUluZGV4IHRvcExlZnRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KHRvcExlZnQoZGlydHlSZWN0
KSk7CisgICAgICAgIFRpbGVJbmRleCBib3R0b21SaWdodEluZGV4ID0gdGlsZUluZGV4Rm9yUG9p
bnQoYm90dG9tUmlnaHQoZGlydHlSZWN0KSk7CisgICAgICAgIGZvciAoaW50IHlJbmRleCA9IHRv
cExlZnRJbmRleC55KCk7IHlJbmRleCA8PSBib3R0b21SaWdodEluZGV4LnkoKTsgKyt5SW5kZXgp
IHsKKyAgICAgICAgICAgIGZvciAoaW50IHhJbmRleCA9IHRvcExlZnRJbmRleC54KCk7IHhJbmRl
eCA8PSBib3R0b21SaWdodEluZGV4LngoKTsgKyt4SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBU
aWxlSW5kZXggaW5kZXgoeEluZGV4LCB5SW5kZXgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxU
aWxlR3JpZFRpbGU+IHRpbGUgPSB0aWxlRm9ySW5kZXgoaW5kZXgpOworICAgICAgICAgICAgICAg
IGlmICghdGlsZSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgaWYgKCF0aWxlLT5yZWN0KCkuaW50ZXJzZWN0cyhkaXJ0eVJlY3QpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB0aWxlLT5pbnZhbGlkYXRlUmVjdChk
aXJ0eVJlY3QpOworICAgICAgICAgICAgICAgIGludmFsaWRhdGVkVGlsZXMuYXBwZW5kKGluZGV4
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoaW52YWxpZGF0ZWRU
aWxlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKyAgICAvLyBXaGVuIHVzaW5nIG1pbmlt
YWwgY292ZXJhZ2UsIGRyb3Agc3BlY3VsYXRpdmUgdGlsZXMgaW5zdGVhZCBvZiB1cGRhdGluZyB0
aGVtLgorICAgIGlmICghc2hvdWxkVXNlTWluaW1hbFRpbGVDb3ZlcmFnZSgpKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKG1fdGlsZUNhY2hlLT50aWxpbmdNb2RlKCkgIT0gVGlsZUNhY2hlOjpN
aW5pbWFsICYmIG1fdGlsZUNhY2hlLT50aWxpbmdNb2RlKCkgIT0gVGlsZUNhY2hlOjpOb3JtYWwp
CisgICAgICAgIHJldHVybjsKKyAgICBJbnRSZWN0IHZpc2libGVSZWN0ID0gdGhpcy0+dmlzaWJs
ZVJlY3QoKTsKKyAgICB1bnNpZ25lZCBjb3VudCA9IGludmFsaWRhdGVkVGlsZXMuc2l6ZSgpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIFJlZlB0
cjxUaWxlR3JpZFRpbGU+IHRpbGUgPSB0aWxlRm9ySW5kZXgoaW52YWxpZGF0ZWRUaWxlc1tpXSk7
CisgICAgICAgIGlmICghdGlsZS0+cmVjdCgpLmludGVyc2VjdHModmlzaWJsZVJlY3QpKQorICAg
ICAgICAgICAgbV90aWxlcy5yZW1vdmUoaW52YWxpZGF0ZWRUaWxlc1tpXSk7CisgICAgfQorfQor
Citib29sIFRpbGVHcmlkOjpzaG91bGRVc2VNaW5pbWFsVGlsZUNvdmVyYWdlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV90aWxlQ2FjaGUtPnRpbGluZ01vZGUoKSA9PSBUaWxlQ2FjaGU6Ok1pbmlt
YWwKKyAgICAgICAgfHwgIW1fdGlsZUNhY2hlLT5pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5h
YmxlZCgpCisgICAgICAgIHx8IG1lbW9yeVByZXNzdXJlSGFuZGxlcigpLmhhc1JlY2VpdmVkTWVt
b3J5UHJlc3N1cmUoKTsKK30KKworSW50UmVjdCBUaWxlR3JpZDo6YWRqdXN0Q292ZXJSZWN0Rm9y
UGFnZUJvdW5kcyhjb25zdCBJbnRSZWN0JiByZWN0KSBjb25zdAoreworICAgIC8vIEFkanVzdCB0
aGUgcmVjdCBzbyB0aGF0IGl0IHN0YXlzIHdpdGhpbiB0aGUgYm91bmRzIGFuZCBrZWVwcyB0aGUg
cGl4ZWwgc2l6ZS4KKyAgICBJbnRSZWN0IGJvdW5kcyA9IHRoaXMtPmJvdW5kcygpOworICAgIElu
dFJlY3QgYWRqdXN0ZWRSZWN0ID0gcmVjdDsKKyAgICBhZGp1c3RlZFJlY3QubW92ZShyZWN0Lngo
KSA8IGJvdW5kcy54KCkgPyBib3VuZHMueCgpIC0gcmVjdC54KCkgOiAwLAorICAgICAgICAgICAg
ICByZWN0LnkoKSA8IGJvdW5kcy55KCkgPyBib3VuZHMueSgpIC0gcmVjdC55KCkgOiAwKTsKKyAg
ICBhZGp1c3RlZFJlY3QubW92ZShyZWN0Lm1heFgoKSA+IGJvdW5kcy5tYXhYKCkgPyBib3VuZHMu
bWF4WCgpIC0gcmVjdC5tYXhYKCkgOiAwLAorICAgICAgICAgICAgICByZWN0Lm1heFkoKSA+IGJv
dW5kcy5tYXhZKCkgPyBib3VuZHMubWF4WSgpIC0gcmVjdC5tYXhZKCkgOiAwKTsKKyAgICBhZGp1
c3RlZFJlY3QgPSBpbnRlcnNlY3Rpb24oYm91bmRzLCBhZGp1c3RlZFJlY3QpOworICAgIGlmIChh
ZGp1c3RlZFJlY3QgPT0gcmVjdCB8fCBhZGp1c3RlZFJlY3QuaXNFbXB0eSgpIHx8IHNob3VsZFVz
ZU1pbmltYWxUaWxlQ292ZXJhZ2UoKSkKKyAgICAgICAgcmV0dXJuIGFkanVzdGVkUmVjdDsKKyAg
ICBpbnQgcGl4ZWxzID0gYWRqdXN0ZWRSZWN0LndpZHRoKCkgKiBhZGp1c3RlZFJlY3QuaGVpZ2h0
KCk7CisgICAgaWYgKGFkanVzdGVkUmVjdC53aWR0aCgpICE9IHJlY3Qud2lkdGgoKSkKKyAgICAg
ICAgYWRqdXN0ZWRSZWN0LmluZmxhdGVZKChwaXhlbHMgLyBhZGp1c3RlZFJlY3Qud2lkdGgoKSAt
IGFkanVzdGVkUmVjdC5oZWlnaHQoKSkgLyAyKTsKKyAgICBlbHNlIGlmIChhZGp1c3RlZFJlY3Qu
aGVpZ2h0KCkgIT0gcmVjdC5oZWlnaHQoKSkKKyAgICAgICAgYWRqdXN0ZWRSZWN0LmluZmxhdGVY
KChwaXhlbHMgLyBhZGp1c3RlZFJlY3QuaGVpZ2h0KCkgLSBhZGp1c3RlZFJlY3Qud2lkdGgoKSkg
LyAyKTsKKyAgICByZXR1cm4gaW50ZXJzZWN0aW9uKGFkanVzdGVkUmVjdCwgYm91bmRzKTsKK30K
KworSW50UmVjdCBUaWxlR3JpZDo6Y2FsY3VsYXRlQ292ZXJSZWN0KGNvbnN0IEludFJlY3QmIHZp
c2libGVSZWN0LCBib29sJiBjZW50ZXJHcmlkKQoreworICAgIC8vIFVzZSBtaW5pbXVtIGNvdmVy
UmVjdCBpZiB3ZSBhcmUgdW5kZXIgbWVtb3J5IHByZXNzdXJlLgorICAgIGlmIChzaG91bGRVc2VN
aW5pbWFsVGlsZUNvdmVyYWdlKCkpIHsKKyAgICAgICAgY2VudGVyR3JpZCA9IHRydWU7CisgICAg
ICAgIHJldHVybiB2aXNpYmxlUmVjdDsKKyAgICB9CisgICAgSW50UmVjdCBjb3ZlclJlY3QgPSB2
aXNpYmxlUmVjdDsKKyAgICBjZW50ZXJHcmlkID0gZmFsc2U7CisgICAgY292ZXJSZWN0LmluZmxh
dGVYKHZpc2libGVSZWN0LndpZHRoKCkgLyAyKTsKKyAgICBjb3ZlclJlY3QuaW5mbGF0ZVkodmlz
aWJsZVJlY3QuaGVpZ2h0KCkpOworICAgIHJldHVybiBhZGp1c3RDb3ZlclJlY3RGb3JQYWdlQm91
bmRzKGNvdmVyUmVjdCk7Cit9CisKK2RvdWJsZSBUaWxlR3JpZDo6dGlsZURpc3RhbmNlMihjb25z
dCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpIGNvbnN0Cit7
CisgICAgLy8gVGhlICJkaXN0YW5jZSIgY2FsY3VsYXRlZCBoZXJlIGlzIHVzZWQgdG8gcGljayB3
aGljaCB0aWxlIHRvIGNhY2hlIG5leHQuIFRoZSBpZGVhIGlzIHRvIGNyZWF0ZSB0aG9zZQorICAg
IC8vIGNsb3Nlc3QgdG8gdGhlIGN1cnJlbnQgdmlld3BvcnQgZmlyc3Qgc28gdGhlIHVzZXIgaXMg
bW9yZSBsaWtlbHkgdG8gc2VlIGFscmVhZHkgcmVuZGVyZWQgY29udGVudCB3ZSBzaGUKKyAgICAv
LyBzY3JvbGxzLiBUaGUgY2FsY3VsYXRpb24gaXMgd2VpZ2h0ZWQgdG8gcHJlZmVyIHZlcnRpY2Fs
IGFuZCBkb3dud2FyZCBkaXJlY3Rpb24uCisgICAgaWYgKHZpc2libGVSZWN0LmludGVyc2VjdHMo
dGlsZVJlY3QpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBJbnRQb2ludCB2aXNpYmxlQ2VudGVy
ID0gdmlzaWJsZVJlY3QubG9jYXRpb24oKSArIEludFNpemUodmlzaWJsZVJlY3Qud2lkdGgoKSAv
IDIsIHZpc2libGVSZWN0LmhlaWdodCgpIC8gMik7CisgICAgSW50UG9pbnQgdGlsZUNlbnRlciA9
IHRpbGVSZWN0LmxvY2F0aW9uKCkgKyBJbnRTaXplKHRpbGVSZWN0LndpZHRoKCkgLyAyLCB0aWxl
UmVjdC5oZWlnaHQoKSAvIDIpOworICAgIAorICAgIGRvdWJsZSBob3Jpem9udGFsQmlhcyA9IDEu
MDsKKyAgICBkb3VibGUgbGVmdHdhcmRCaWFzID0gMS4wOworICAgIGRvdWJsZSByaWdodHdhcmRC
aWFzID0gMS4wOworCisgICAgZG91YmxlIHZlcnRpY2FsQmlhcyA9IDEuMDsKKyAgICBkb3VibGUg
dXB3YXJkQmlhcyA9IDEuMDsKKyAgICBkb3VibGUgZG93bndhcmRCaWFzID0gMS4wOworCisgICAg
Y29uc3QgZG91YmxlIHRpbGluZ0JpYXNWZXJ5TGlrZWx5ID0gMC44OworICAgIGNvbnN0IGRvdWJs
ZSB0aWxpbmdCaWFzTGlrZWx5ID0gMC45OworCisgICAgc3dpdGNoIChtX3RpbGVDYWNoZS0+dGls
aW5nRGlyZWN0aW9uKCkpIHsKKyAgICBjYXNlIFRpbGVDYWNoZTo6VGlsaW5nRGlyZWN0aW9uVXA6
CisgICAgICAgIHZlcnRpY2FsQmlhcyA9IHRpbGluZ0JpYXNWZXJ5TGlrZWx5OworICAgICAgICB1
cHdhcmRCaWFzID0gdGlsaW5nQmlhc0xpa2VseTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBU
aWxlQ2FjaGU6OlRpbGluZ0RpcmVjdGlvbkRvd246CisgICAgICAgIHZlcnRpY2FsQmlhcyA9IHRp
bGluZ0JpYXNWZXJ5TGlrZWx5OworICAgICAgICBkb3dud2FyZEJpYXMgPSB0aWxpbmdCaWFzTGlr
ZWx5OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRpbGVDYWNoZTo6VGlsaW5nRGlyZWN0aW9u
TGVmdDoKKyAgICAgICAgaG9yaXpvbnRhbEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxpa2VseTsKKyAg
ICAgICAgbGVmdHdhcmRCaWFzID0gdGlsaW5nQmlhc0xpa2VseTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBUaWxlQ2FjaGU6OlRpbGluZ0RpcmVjdGlvblJpZ2h0OgorICAgICAgICBob3Jpem9u
dGFsQmlhcyA9IHRpbGluZ0JpYXNWZXJ5TGlrZWx5OworICAgICAgICByaWdodHdhcmRCaWFzID0g
dGlsaW5nQmlhc0xpa2VseTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZG91YmxlIHhT
Y2FsZSA9IGhvcml6b250YWxCaWFzICogdmlzaWJsZVJlY3QuaGVpZ2h0KCkgLyB2aXNpYmxlUmVj
dC53aWR0aCgpICogKHRpbGVDZW50ZXIueCgpID49IHZpc2libGVDZW50ZXIueCgpID8gcmlnaHR3
YXJkQmlhcyA6IGxlZnR3YXJkQmlhcyk7CisgICAgZG91YmxlIHlTY2FsZSA9IHZlcnRpY2FsQmlh
cyAqIHZpc2libGVSZWN0LndpZHRoKCkgLyB2aXNpYmxlUmVjdC5oZWlnaHQoKSAqICh0aWxlQ2Vu
dGVyLnkoKSA+PSB2aXNpYmxlQ2VudGVyLnkoKSA/IGRvd253YXJkQmlhcyA6IHVwd2FyZEJpYXMp
OworCisgICAgZG91YmxlIHhEaXN0YW5jZSA9IHhTY2FsZSAqICh0aWxlQ2VudGVyLngoKSAtIHZp
c2libGVDZW50ZXIueCgpKTsKKyAgICBkb3VibGUgeURpc3RhbmNlID0geVNjYWxlICogKHRpbGVD
ZW50ZXIueSgpIC0gdmlzaWJsZUNlbnRlci55KCkpOworCisgICAgZG91YmxlIGRpc3RhbmNlMiA9
IHhEaXN0YW5jZSAqIHhEaXN0YW5jZSArIHlEaXN0YW5jZSAqIHlEaXN0YW5jZTsKKyAgICByZXR1
cm4gZGlzdGFuY2UyOworfQorCit2b2lkIFRpbGVHcmlkOjpjcmVhdGVUaWxlcyhUaWxlQ2FjaGU6
OlN5bmNocm9ub3VzVGlsZUNyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCit7CisgICAgSW50UmVj
dCB2aXNpYmxlUmVjdCA9IHRoaXMtPnZpc2libGVSZWN0KCk7CisgICAgaWYgKHZpc2libGVSZWN0
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRHJvcCB0aWxlcyB0aGF0IGFy
ZSB3cm9uZyBzaXplIG9yIG91dHNpZGUgdGhlIGZyYW1lIChiZWNhdXNlIHRoZSBmcmFtZSBoYXMg
YmVlbiByZXNpemVkKS4KKyAgICBkcm9wSW52YWxpZFRpbGVzKCk7CisKKyAgICBib29sIGNlbnRl
ckdyaWQ7CisgICAgSW50UmVjdCBjb3ZlclJlY3QgPSBjYWxjdWxhdGVDb3ZlclJlY3QodmlzaWJs
ZVJlY3QsIGNlbnRlckdyaWQpOworCisgICAgLy8gSWYgdGlsZSBzaXplIGlzIGJpZ2dlciB0aGFu
IHRoZSB2aWV3LCBjZW50ZXJpbmcgbWluaW1pemVzIHRoZSBwYWludGluZyBuZWVkZWQgdG8gY292
ZXIgdGhlIHNjcmVlbi4KKyAgICAvLyBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGFmdGVyIHpv
b21pbmcgCisgICAgY2VudGVyR3JpZCA9IGNlbnRlckdyaWQgfHwgIXRpbGVDb3VudCgpOworICAg
IGlmIChjZW50ZXJHcmlkKQorICAgICAgICBjZW50ZXJUaWxlR3JpZE9yaWdpbih2aXNpYmxlUmVj
dCk7CisKKyAgICBkb3VibGUgc2hvcnRlc3REaXN0YW5jZSA9IHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6aW5maW5pdHkoKTsKKyAgICBkb3VibGUgY292ZXJlZERpc3RhbmNlID0gMDsKKyAg
ICBWZWN0b3I8VGlsZUdyaWQ6OlRpbGVJbmRleD4gdGlsZXNUb0NyZWF0ZTsKKyAgICB1bnNpZ25l
ZCBwZW5kaW5nVGlsZUNvdW50ID0gMDsKKworICAgIFRpbGVHcmlkOjpUaWxlSW5kZXggdG9wTGVm
dEluZGV4ID0gdGlsZUluZGV4Rm9yUG9pbnQodG9wTGVmdChjb3ZlclJlY3QpKTsKKyAgICBUaWxl
R3JpZDo6VGlsZUluZGV4IGJvdHRvbVJpZ2h0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludChib3R0
b21SaWdodChjb3ZlclJlY3QpKTsKKyAgICBmb3IgKGludCB5SW5kZXggPSB0b3BMZWZ0SW5kZXgu
eSgpOyB5SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC55KCk7ICsreUluZGV4KSB7CisgICAgICAg
IGZvciAoaW50IHhJbmRleCA9IHRvcExlZnRJbmRleC54KCk7IHhJbmRleCA8PSBib3R0b21SaWdo
dEluZGV4LngoKTsgKyt4SW5kZXgpIHsKKyAgICAgICAgICAgIFRpbGVHcmlkOjpUaWxlSW5kZXgg
aW5kZXgoeEluZGV4LCB5SW5kZXgpOworICAgICAgICAgICAgLy8gQ3VycmVudGx5IHZpc2libGUg
dGlsZXMgaGF2ZSBkaXN0YW5jZSBvZiAwIGFuZCBnZXQgYWxsIGNyZWF0ZWQgaW4gdGhlIHNhbWUg
dHJhbnNhY3Rpb24uCisgICAgICAgICAgICBkb3VibGUgZGlzdGFuY2UgPSB0aWxlRGlzdGFuY2Uy
KHZpc2libGVSZWN0LCB0aWxlUmVjdEZvckluZGV4KGluZGV4KSk7CisgICAgICAgICAgICBpZiAo
ZGlzdGFuY2UgPiBjb3ZlcmVkRGlzdGFuY2UpCisgICAgICAgICAgICAgICAgY292ZXJlZERpc3Rh
bmNlID0gZGlzdGFuY2U7CisgICAgICAgICAgICBpZiAodGlsZUZvckluZGV4KGluZGV4KSkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICsrcGVuZGluZ1RpbGVDb3VudDsK
KyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IHNob3J0ZXN0RGlzdGFuY2UpCisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPCBzaG9ydGVzdERpc3Rh
bmNlKSB7CisgICAgICAgICAgICAgICAgdGlsZXNUb0NyZWF0ZS5jbGVhcigpOworICAgICAgICAg
ICAgICAgIHNob3J0ZXN0RGlzdGFuY2UgPSBkaXN0YW5jZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHRpbGVzVG9DcmVhdGUuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHNpemVfdCB0aWxlc1RvQ3JlYXRlQ291bnQgPSB0aWxlc1RvQ3JlYXRlLnNpemUoKTsKKwor
ICAgIC8vIFRpbGUgY3JlYXRpb24gdGltZXIgd2lsbCBpbnZva2UgdGhpcyBmdW5jdGlvbiBhZ2Fp
biBpbiBDb3ZlclNwZWN1bGF0aXZlIG1vZGUuCisgICAgYm9vbCBjYW5kaWRhdGVUaWxlc0FyZVNw
ZWN1bGF0aXZlID0gc2hvcnRlc3REaXN0YW5jZSA+IDA7CisgICAgaWYgKGNyZWF0aW9uTW9kZSA9
PSBUaWxlQ2FjaGU6OkNvdmVyVmlzaWJsZU9ubHkgJiYgY2FuZGlkYXRlVGlsZXNBcmVTcGVjdWxh
dGl2ZSkKKyAgICAgICAgdGlsZXNUb0NyZWF0ZUNvdW50ID0gMDsKKworICAgIC8vIEV2ZW4gaWYg
d2UgZG9uJ3QgY3JlYXRlIGFueSB0aWxlcywgd2Ugc2hvdWxkIHN0aWxsIGRyb3AgZGlzdGFudCB0
aWxlcworICAgIC8vIGluIGNhc2UgY292ZXJSZWN0IGdvdCBzbWFsbGVyLgorICAgIGRvdWJsZSBr
ZWVwRGlzdGFuY2UgPSBzdGQ6Om1pbihzaG9ydGVzdERpc3RhbmNlLCBjb3ZlcmVkRGlzdGFuY2Up
OworICAgIGlmICghZHJvcERpc3RhbnRUaWxlcyh0aWxlc1RvQ3JlYXRlQ291bnQsIGtlZXBEaXN0
YW5jZSkpCisgICAgICAgIHJldHVybjsKKworICAgIEFTU0VSVChwZW5kaW5nVGlsZUNvdW50ID49
IHRpbGVzVG9DcmVhdGVDb3VudCk7CisgICAgaWYgKCFwZW5kaW5nVGlsZUNvdW50KQorICAgICAg
ICByZXR1cm47CisKKyAgICBmb3IgKHNpemVfdCBuID0gMDsgbiA8IHRpbGVzVG9DcmVhdGVDb3Vu
dDsgKytuKQorICAgICAgICBhZGRUaWxlRm9ySW5kZXgodGlsZXNUb0NyZWF0ZVtuXSk7CisKKyAg
ICBib29sIGRpZENyZWF0ZVRpbGVzID0gISF0aWxlc1RvQ3JlYXRlQ291bnQ7CisgICAgYm9vbCBj
cmVhdGVNb3JlVGlsZXMgPSBwZW5kaW5nVGlsZUNvdW50ID4gdGlsZXNUb0NyZWF0ZUNvdW50Owor
ICAgIG1fdGlsZUNhY2hlLT5maW5pc2hlZENyZWF0aW5nVGlsZXMoZGlkQ3JlYXRlVGlsZXMsIGNy
ZWF0ZU1vcmVUaWxlcyk7Cit9CisKK3ZvaWQgVGlsZUdyaWQ6OmR1bXBUaWxlcygpCit7CisgICAg
SW50UmVjdCB2aXNpYmxlUmVjdCA9IHRoaXMtPnZpc2libGVSZWN0KCk7CisgICAgTlNMb2coQCJ0
cmFuc2Zvcm1lZCB2aXNpYmxlUmVjdCA9IFslNmQgJTZkICU2ZCAlNmRdIiwgdmlzaWJsZVJlY3Qu
eCgpLCB2aXNpYmxlUmVjdC55KCksIHZpc2libGVSZWN0LndpZHRoKCksIHZpc2libGVSZWN0Lmhl
aWdodCgpKTsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQg
PSBtX3RpbGVzLmVuZCgpOworICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVz
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBUaWxlSW5kZXgmIGluZGV4ID0g
aXQtPmtleTsKKyAgICAgICAgSW50UmVjdCB0aWxlUmVjdCA9IGl0LT52YWx1ZS0+cmVjdCgpOwor
ICAgICAgICBOU0xvZyhAIiMlLTNkICglM2QgJTNkKSAtIFslNmQgJTZkICU2ZCAlNmRdJUAiLCAr
K2ksIGluZGV4LngoKSwgaW5kZXgueSgpLCB0aWxlUmVjdC54KCksIHRpbGVSZWN0LnkoKSwgdGls
ZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIHRpbGVSZWN0LmludGVyc2VjdHModmlz
aWJsZVJlY3QpID8gQCIgKiIgOiBAIiIpOworICAgICAgICBOU0xvZyhAIiAgICAgJUAiLCBbaXQt
PnZhbHVlLT50aWxlTGF5ZXIoKSBjb250ZW50c10pOworICAgIH0KK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVHcmlkLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlR3JpZC5tbQkod29ya2luZyBjb3B5KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVHcmlkLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC0yNCwxNSArMjQsMTUgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5j
bHVkZSAiVGlsZUdyaWQuaCIKKyNpbmNsdWRlICJMZWdhY3lUaWxlR3JpZC5oIgogCiAjaWYgUExB
VEZPUk0oSU9TKQogCiAjaW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVIYW5kbGVyLmgiCiAjaW5jbHVk
ZSAiU3lzdGVtTWVtb3J5LmgiCi0jaW5jbHVkZSAiVGlsZUdyaWRUaWxlLmgiCi0jaW5jbHVkZSAi
VGlsZUxheWVyLmgiCi0jaW5jbHVkZSAiVGlsZUxheWVyUG9vbC5oIgorI2luY2x1ZGUgIkxlZ2Fj
eVRpbGVHcmlkVGlsZS5oIgorI2luY2x1ZGUgIkxlZ2FjeVRpbGVMYXllci5oIgorI2luY2x1ZGUg
IkxlZ2FjeVRpbGVMYXllclBvb2wuaCIKICNpbmNsdWRlICJXQUtXaW5kb3cuaCIKICNpbmNsdWRl
IDxDb3JlR3JhcGhpY3MvQ29yZUdyYXBoaWNzUHJpdmF0ZS5oPgogI2luY2x1ZGUgPFF1YXJ0ekNv
cmUvUXVhcnR6Q29yZS5oPgpAQCAtNDIsNDcgKzQyLDQ3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotVGlsZUdyaWQ6OlRpbGVHcmlkKFRpbGVDYWNoZSogdGlsZUNhY2hlLCBjb25zdCBJbnRT
aXplJiB0aWxlU2l6ZSkKK0xlZ2FjeVRpbGVHcmlkOjpMZWdhY3lUaWxlR3JpZChMZWdhY3lUaWxl
Q2FjaGUqIHRpbGVDYWNoZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNpemUpCiAgICAgOiBtX3RpbGVD
YWNoZSh0aWxlQ2FjaGUpCi0gICAgLCBtX3RpbGVIb3N0TGF5ZXIoYWRvcHROUyhbW1RpbGVIb3N0
TGF5ZXIgYWxsb2NdIGluaXRXaXRoVGlsZUdyaWQ6dGhpc10pKQorICAgICwgbV90aWxlSG9zdExh
eWVyKGFkb3B0TlMoW1tMZWdhY3lUaWxlSG9zdExheWVyIGFsbG9jXSBpbml0V2l0aFRpbGVHcmlk
OnRoaXNdKSkKICAgICAsIG1fdGlsZVNpemUodGlsZVNpemUpCiAgICAgLCBtX3NjYWxlKDEpCiAg
ICAgLCBtX3ZhbGlkQm91bmRzKDAsIDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCks
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpIAogewogfQogICAgIAotVGlsZUdyaWQ6
On5UaWxlR3JpZCgpCitMZWdhY3lUaWxlR3JpZDo6fkxlZ2FjeVRpbGVHcmlkKCkKIHsKICAgICBb
bV90aWxlSG9zdExheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKIH0KIAotSW50UmVjdCBUaWxl
R3JpZDo6dmlzaWJsZVJlY3QoKSBjb25zdAorSW50UmVjdCBMZWdhY3lUaWxlR3JpZDo6dmlzaWJs
ZVJlY3QoKSBjb25zdAogewogICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KG1fdGlsZUNhY2hlLT52aXNpYmxlUmVjdEluTGF5ZXIobV90aWxlSG9zdExheWVyLmdldCgp
KSk7CiAKICAgICAvLyBXaGVuIGZhc3Qgc2Nyb2xsaW5nIHRvIHRoZSB0b3AsIG1vdmUgdGhlIHZp
c2libGUgcmVjdCB0aGVyZSBpbW1lZGlhdGVseSBzbyB3ZSBoYXZlIHRpbGVzIHdoZW4gdGhlIHNj
cm9sbGluZyBjb21wbGV0ZXMuCi0gICAgaWYgKG1fdGlsZUNhY2hlLT50aWxpbmdNb2RlKCkgPT0g
VGlsZUNhY2hlOjpTY3JvbGxUb1RvcCkKKyAgICBpZiAobV90aWxlQ2FjaGUtPnRpbGluZ01vZGUo
KSA9PSBMZWdhY3lUaWxlQ2FjaGU6OlNjcm9sbFRvVG9wKQogICAgICAgICB2aXNpYmxlUmVjdC5z
ZXRZKDApOwogCiAgICAgcmV0dXJuIHZpc2libGVSZWN0OwogfQogCi12b2lkIFRpbGVHcmlkOjpk
cm9wQWxsVGlsZXMoKQordm9pZCBMZWdhY3lUaWxlR3JpZDo6ZHJvcEFsbFRpbGVzKCkKIHsKICAg
ICBtX3RpbGVzLmNsZWFyKCk7CiB9CiAKLXZvaWQgVGlsZUdyaWQ6OmRyb3BUaWxlc0ludGVyc2Vj
dGluZ1JlY3QoY29uc3QgSW50UmVjdCYgZHJvcFJlY3QpCit2b2lkIExlZ2FjeVRpbGVHcmlkOjpk
cm9wVGlsZXNJbnRlcnNlY3RpbmdSZWN0KGNvbnN0IEludFJlY3QmIGRyb3BSZWN0KQogewogICAg
IGRyb3BUaWxlc0JldHdlZW5SZWN0cyhkcm9wUmVjdCwgSW50UmVjdCgpKTsKIH0KIAotdm9pZCBU
aWxlR3JpZDo6ZHJvcFRpbGVzT3V0c2lkZVJlY3QoY29uc3QgSW50UmVjdCYga2VlcFJlY3QpCit2
b2lkIExlZ2FjeVRpbGVHcmlkOjpkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25zdCBJbnRSZWN0JiBr
ZWVwUmVjdCkKIHsKICAgICBkcm9wVGlsZXNCZXR3ZWVuUmVjdHMoSW50UmVjdCgwLCAwLCBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKSwga2VlcFJlY3QpOwogfQogCi12b2lkIFRpbGVHcmlkOjpkcm9wVGlsZXNCZXR3ZWVuUmVj
dHMoY29uc3QgSW50UmVjdCYgZHJvcFJlY3QsIGNvbnN0IEludFJlY3QmIGtlZXBSZWN0KQordm9p
ZCBMZWdhY3lUaWxlR3JpZDo6ZHJvcFRpbGVzQmV0d2VlblJlY3RzKGNvbnN0IEludFJlY3QmIGRy
b3BSZWN0LCBjb25zdCBJbnRSZWN0JiBrZWVwUmVjdCkKIHsKICAgICBWZWN0b3I8VGlsZUluZGV4
PiB0b1JlbW92ZTsKICAgICBmb3IgKGNvbnN0IGF1dG8mIHRpbGUgOiBtX3RpbGVzKSB7CkBAIC05
NiwxMSArOTYsMTEgQEAgdm9pZCBUaWxlR3JpZDo6ZHJvcFRpbGVzQmV0d2VlblJlY3RzKGNvbgog
ICAgICAgICBtX3RpbGVzLnJlbW92ZSh0b1JlbW92ZVtuXSk7CiB9CiAKLXVuc2lnbmVkIFRpbGVH
cmlkOjp0aWxlQnl0ZVNpemUoKSBjb25zdAordW5zaWduZWQgTGVnYWN5VGlsZUdyaWQ6OnRpbGVC
eXRlU2l6ZSgpIGNvbnN0CiB7CiAgICAgSW50U2l6ZSB0aWxlUGl4ZWxTaXplID0gbV90aWxlU2l6
ZTsKICAgICB0aWxlUGl4ZWxTaXplLnNjYWxlKG1fdGlsZUNhY2hlLT5zY3JlZW5TY2FsZSgpKTsK
LSAgICByZXR1cm4gVGlsZUxheWVyUG9vbDo6Ynl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXpl
KHRpbGVQaXhlbFNpemUpOworICAgIHJldHVybiBMZWdhY3lUaWxlTGF5ZXJQb29sOjpieXRlc0Jh
Y2tpbmdMYXllcldpdGhQaXhlbFNpemUodGlsZVBpeGVsU2l6ZSk7CiB9CiAKIHRlbXBsYXRlIDx0
eXBlbmFtZSBUPgpAQCAtMTA5LDcgKzEwOSw3IEBAIHN0YXRpYyBib29sIGlzRmFydGhlckF3YXko
Y29uc3Qgc3RkOjpwYWkKICAgICByZXR1cm4gYS5maXJzdCA+IGIuZmlyc3Q7CiB9CiAKLWJvb2wg
VGlsZUdyaWQ6OmRyb3BEaXN0YW50VGlsZXModW5zaWduZWQgdGlsZXNOZWVkZWQsIGRvdWJsZSBz
aG9ydGVzdERpc3RhbmNlKQorYm9vbCBMZWdhY3lUaWxlR3JpZDo6ZHJvcERpc3RhbnRUaWxlcyh1
bnNpZ25lZCB0aWxlc05lZWRlZCwgZG91YmxlIHNob3J0ZXN0RGlzdGFuY2UpCiB7CiAgICAgdW5z
aWduZWQgYnl0ZXNQZXJUaWxlID0gdGlsZUJ5dGVTaXplKCk7CiAgICAgdW5zaWduZWQgYnl0ZXNO
ZWVkZWQgPSB0aWxlc05lZWRlZCAqIGJ5dGVzUGVyVGlsZTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBi
b29sIFRpbGVHcmlkOjpkcm9wRGlzdGFudFRpbGVzKHVuc2lnbmVkCiAgICAgcmV0dXJuIHRpbGVD
b3VudCgpICogYnl0ZXNQZXJUaWxlICsgYnl0ZXNOZWVkZWQgPD0gbWF4aW11bUJ5dGVzOwogfQog
Ci12b2lkIFRpbGVHcmlkOjphZGRUaWxlc0NvdmVyaW5nUmVjdChjb25zdCBJbnRSZWN0JiByZWN0
VG9Db3ZlcikKK3ZvaWQgTGVnYWN5VGlsZUdyaWQ6OmFkZFRpbGVzQ292ZXJpbmdSZWN0KGNvbnN0
IEludFJlY3QmIHJlY3RUb0NvdmVyKQogewogICAgIC8vIFdlIG5ldmVyIGRyYXcgYW55dGhpbmcg
b3V0c2lkZSBvZiBvdXIgYm91bmRzLgogICAgIEludFJlY3QgcmVjdChyZWN0VG9Db3Zlcik7CkBA
IC0xNjYsMjcgKzE2NiwyNyBAQCB2b2lkIFRpbGVHcmlkOjphZGRUaWxlc0NvdmVyaW5nUmVjdChj
b25zCiAgICAgfQogfQogCi12b2lkIFRpbGVHcmlkOjphZGRUaWxlRm9ySW5kZXgoY29uc3QgVGls
ZUluZGV4JiBpbmRleCkKK3ZvaWQgTGVnYWN5VGlsZUdyaWQ6OmFkZFRpbGVGb3JJbmRleChjb25z
dCBUaWxlSW5kZXgmIGluZGV4KQogewotICAgIG1fdGlsZXMuc2V0KGluZGV4LCBUaWxlR3JpZFRp
bGU6OmNyZWF0ZSh0aGlzLCB0aWxlUmVjdEZvckluZGV4KGluZGV4KSkpOworICAgIG1fdGlsZXMu
c2V0KGluZGV4LCBMZWdhY3lUaWxlR3JpZFRpbGU6OmNyZWF0ZSh0aGlzLCB0aWxlUmVjdEZvcklu
ZGV4KGluZGV4KSkpOwogfQogCi1DQUxheWVyKiBUaWxlR3JpZDo6dGlsZUhvc3RMYXllcigpIGNv
bnN0CitDQUxheWVyKiBMZWdhY3lUaWxlR3JpZDo6dGlsZUhvc3RMYXllcigpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG1fdGlsZUhvc3RMYXllci5nZXQoKTsKIH0KIAotSW50UmVjdCBUaWxlR3JpZDo6
Ym91bmRzKCkgY29uc3QKK0ludFJlY3QgTGVnYWN5VGlsZUdyaWQ6OmJvdW5kcygpIGNvbnN0CiB7
CiAgICAgcmV0dXJuIEludFJlY3QoSW50UG9pbnQoKSwgSW50U2l6ZShbdGlsZUhvc3RMYXllcigp
IHNpemVdKSk7CiB9CiAKLVBhc3NSZWZQdHI8VGlsZUdyaWRUaWxlPiBUaWxlR3JpZDo6dGlsZUZv
ckluZGV4KGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpIGNvbnN0CitQYXNzUmVmUHRyPExlZ2FjeVRp
bGVHcmlkVGlsZT4gTGVnYWN5VGlsZUdyaWQ6OnRpbGVGb3JJbmRleChjb25zdCBUaWxlSW5kZXgm
IGluZGV4KSBjb25zdAogewogICAgIHJldHVybiBtX3RpbGVzLmdldChpbmRleCk7CiB9CiAKLUlu
dFJlY3QgVGlsZUdyaWQ6OnRpbGVSZWN0Rm9ySW5kZXgoY29uc3QgVGlsZUluZGV4JiBpbmRleCkg
Y29uc3QKK0ludFJlY3QgTGVnYWN5VGlsZUdyaWQ6OnRpbGVSZWN0Rm9ySW5kZXgoY29uc3QgVGls
ZUluZGV4JiBpbmRleCkgY29uc3QKIHsKICAgICBJbnRSZWN0IHJlY3QoaW5kZXgueCgpICogbV90
aWxlU2l6ZS53aWR0aCgpIC0gKG1fb3JpZ2luLngoKSA/IG1fdGlsZVNpemUud2lkdGgoKSAtIG1f
b3JpZ2luLngoKSA6IDApLAogICAgICAgICAgICAgICAgICBpbmRleC55KCkgKiBtX3RpbGVTaXpl
LmhlaWdodCgpIC0gKG1fb3JpZ2luLnkoKSA/IG1fdGlsZVNpemUuaGVpZ2h0KCkgLSBtX29yaWdp
bi55KCkgOiAwKSwKQEAgLTE5Niw3ICsxOTYsNyBAQCBJbnRSZWN0IFRpbGVHcmlkOjp0aWxlUmVj
dEZvckluZGV4KGNvbnN0CiAgICAgcmV0dXJuIHJlY3Q7CiB9CiAKLVRpbGVHcmlkOjpUaWxlSW5k
ZXggVGlsZUdyaWQ6OnRpbGVJbmRleEZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29u
c3QKK0xlZ2FjeVRpbGVHcmlkOjpUaWxlSW5kZXggTGVnYWN5VGlsZUdyaWQ6OnRpbGVJbmRleEZv
clBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9vcmln
aW4ueCgpIDwgbV90aWxlU2l6ZS53aWR0aCgpKTsKICAgICBBU1NFUlQobV9vcmlnaW4ueSgpIDwg
bV90aWxlU2l6ZS5oZWlnaHQoKSk7CkBAIC0yMDUsNyArMjA1LDcgQEAgVGlsZUdyaWQ6OlRpbGVJ
bmRleCBUaWxlR3JpZDo6dGlsZUluZGV4RgogICAgIHJldHVybiBUaWxlSW5kZXgoc3RkOjptYXgo
eCwgMCksIHN0ZDo6bWF4KHksIDApKTsKIH0KIAotdm9pZCBUaWxlR3JpZDo6Y2VudGVyVGlsZUdy
aWRPcmlnaW4oY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpCit2b2lkIExlZ2FjeVRpbGVHcmlk
OjpjZW50ZXJUaWxlR3JpZE9yaWdpbihjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCkKIHsKICAg
ICBpZiAodmlzaWJsZVJlY3QuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0yNDEsMzcg
KzI0MSwzNyBAQCB2b2lkIFRpbGVHcmlkOjpjZW50ZXJUaWxlR3JpZE9yaWdpbihjb25zCiAgICAg
bV9vcmlnaW4gPSBuZXdPcmlnaW47CiB9CiAKLVBhc3NSZWZQdHI8VGlsZUdyaWRUaWxlPiBUaWxl
R3JpZDo6dGlsZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkgY29uc3QKK1Bhc3NSZWZQ
dHI8TGVnYWN5VGlsZUdyaWRUaWxlPiBMZWdhY3lUaWxlR3JpZDo6dGlsZUZvclBvaW50KGNvbnN0
IEludFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICByZXR1cm4gdGlsZUZvckluZGV4KHRpbGVJ
bmRleEZvclBvaW50KHBvaW50KSk7CiB9CiAKLWJvb2wgVGlsZUdyaWQ6OnRpbGVzQ292ZXIoY29u
c3QgSW50UmVjdCYgcmVjdCkgY29uc3QKK2Jvb2wgTGVnYWN5VGlsZUdyaWQ6OnRpbGVzQ292ZXIo
Y29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICByZXR1cm4gdGlsZUZvclBvaW50KHJl
Y3QubG9jYXRpb24oKSkgJiYgdGlsZUZvclBvaW50KEludFBvaW50KHJlY3QubWF4WCgpIC0gMSwg
cmVjdC55KCkpKSAmJgogICAgIHRpbGVGb3JQb2ludChJbnRQb2ludChyZWN0LngoKSwgcmVjdC5t
YXhZKCkgLSAxKSkgJiYgdGlsZUZvclBvaW50KEludFBvaW50KHJlY3QubWF4WCgpIC0gMSwgcmVj
dC5tYXhZKCkgLSAxKSk7CiB9CiAKLXZvaWQgVGlsZUdyaWQ6OnVwZGF0ZVRpbGVPcGFjaXR5KCkK
K3ZvaWQgTGVnYWN5VGlsZUdyaWQ6OnVwZGF0ZVRpbGVPcGFjaXR5KCkKIHsKICAgICBUaWxlTWFw
OjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0
b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgW2l0LT52
YWx1ZS0+dGlsZUxheWVyKCkgc2V0T3BhcXVlOm1fdGlsZUNhY2hlLT50aWxlc09wYXF1ZSgpXTsK
IH0KIAotdm9pZCBUaWxlR3JpZDo6dXBkYXRlVGlsZUJvcmRlclZpc2liaWxpdHkoKQordm9pZCBM
ZWdhY3lUaWxlR3JpZDo6dXBkYXRlVGlsZUJvcmRlclZpc2liaWxpdHkoKQogewogICAgIFRpbGVN
YXA6Oml0ZXJhdG9yIGVuZCA9IG1fdGlsZXMuZW5kKCk7CiAgICAgZm9yIChUaWxlTWFwOjppdGVy
YXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQogICAgICAgICBpdC0+
dmFsdWUtPnNob3dCb3JkZXIobV90aWxlQ2FjaGUtPnRpbGVCb3JkZXJzVmlzaWJsZSgpKTsKIH0K
IAotdW5zaWduZWQgVGlsZUdyaWQ6OnRpbGVDb3VudCgpIGNvbnN0Cit1bnNpZ25lZCBMZWdhY3lU
aWxlR3JpZDo6dGlsZUNvdW50KCkgY29uc3QKIHsKICAgICByZXR1cm4gbV90aWxlcy5zaXplKCk7
CiB9CiAKLWJvb2wgVGlsZUdyaWQ6OmNoZWNrRG9TaW5nbGVUaWxlTGF5b3V0KCkKK2Jvb2wgTGVn
YWN5VGlsZUdyaWQ6OmNoZWNrRG9TaW5nbGVUaWxlTGF5b3V0KCkKIHsKICAgICBJbnRTaXplIHNp
emUgPSBib3VuZHMoKS5zaXplKCk7CiAgICAgaWYgKHNpemUud2lkdGgoKSA+IG1fdGlsZVNpemUu
d2lkdGgoKSB8fCBzaXplLmhlaWdodCgpID4gbV90aWxlU2l6ZS5oZWlnaHQoKSkKQEAgLTI5MSwx
MiArMjkxLDEyIEBAIGJvb2wgVGlsZUdyaWQ6OmNoZWNrRG9TaW5nbGVUaWxlTGF5b3V0KCkKIAog
ICAgIFRpbGVJbmRleCBvcmlnaW5JbmRleCgwLCAwKTsKICAgICBpZiAoIW1fdGlsZXMuZ2V0KG9y
aWdpbkluZGV4KSkKLSAgICAgICAgbV90aWxlcy5zZXQob3JpZ2luSW5kZXgsIFRpbGVHcmlkVGls
ZTo6Y3JlYXRlKHRoaXMsIHRpbGVSZWN0Rm9ySW5kZXgob3JpZ2luSW5kZXgpKSk7CisgICAgICAg
IG1fdGlsZXMuc2V0KG9yaWdpbkluZGV4LCBMZWdhY3lUaWxlR3JpZFRpbGU6OmNyZWF0ZSh0aGlz
LCB0aWxlUmVjdEZvckluZGV4KG9yaWdpbkluZGV4KSkpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXZvaWQgVGlsZUdyaWQ6OnVwZGF0ZUhvc3RMYXllclNpemUoKQordm9pZCBMZWdhY3lUaWxl
R3JpZDo6dXBkYXRlSG9zdExheWVyU2l6ZSgpCiB7CiAgICAgQ0FMYXllciogaG9zdExheWVyID0g
bV90aWxlQ2FjaGUtPmhvc3RMYXllcigpOwogICAgIENHUmVjdCB0aWxlSG9zdEJvdW5kcyA9IFto
b3N0TGF5ZXIgY29udmVydFJlY3Q6W2hvc3RMYXllciBib3VuZHNdIHRvTGF5ZXI6dGlsZUhvc3RM
YXllcigpXTsKQEAgLTMxMSw3ICszMTEsNyBAQCB2b2lkIFRpbGVHcmlkOjp1cGRhdGVIb3N0TGF5
ZXJTaXplKCkKICAgICBbdGlsZUhvc3RMYXllcigpIHNldEJvdW5kczpib3VuZHNdOwogfQogCi12
b2lkIFRpbGVHcmlkOjpkcm9wSW52YWxpZFRpbGVzKCkKK3ZvaWQgTGVnYWN5VGlsZUdyaWQ6OmRy
b3BJbnZhbGlkVGlsZXMoKQogewogICAgIEludFJlY3QgYm91bmRzID0gdGhpcy0+Ym91bmRzKCk7
CiAgICAgSW50UmVjdCBkcm9wQm91bmRzID0gaW50ZXJzZWN0aW9uKG1fdmFsaWRCb3VuZHMsIGJv
dW5kcyk7CkBAIC0zMzAsNyArMzMwLDcgQEAgdm9pZCBUaWxlR3JpZDo6ZHJvcEludmFsaWRUaWxl
cygpCiAgICAgbV92YWxpZEJvdW5kcyA9IGJvdW5kczsKIH0KIAotdm9pZCBUaWxlR3JpZDo6aW52
YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKK3ZvaWQgTGVnYWN5VGlsZUdy
aWQ6OmludmFsaWRhdGVUaWxlcyhjb25zdCBJbnRSZWN0JiBkaXJ0eVJlY3QpCiB7CiAgICAgaWYg
KCFoYXNUaWxlcygpKQogICAgICAgICByZXR1cm47CkBAIC0zNDksNyArMzQ5LDcgQEAgdm9pZCBU
aWxlR3JpZDo6aW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludAogICAgICAgICAvLyBGb3IgbGFyZ2Ug
aW52YWxpZGF0ZXMsIGl0ZXJhdGUgb3ZlciBsaXZlIHRpbGVzLgogICAgICAgICBUaWxlTWFwOjpp
dGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwogICAgICAgICBmb3IgKFRpbGVNYXA6Oml0ZXJh
dG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgICAg
IFRpbGVHcmlkVGlsZSogdGlsZSA9IGl0LT52YWx1ZS5nZXQoKTsKKyAgICAgICAgICAgIExlZ2Fj
eVRpbGVHcmlkVGlsZSogdGlsZSA9IGl0LT52YWx1ZS5nZXQoKTsKICAgICAgICAgICAgIGlmICgh
dGlsZS0+cmVjdCgpLmludGVyc2VjdHMoZGlydHlSZWN0KSkKICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgdGlsZS0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsKQEAgLTM2
MSw3ICszNjEsNyBAQCB2b2lkIFRpbGVHcmlkOjppbnZhbGlkYXRlVGlsZXMoY29uc3QgSW50CiAg
ICAgICAgIGZvciAoaW50IHlJbmRleCA9IHRvcExlZnRJbmRleC55KCk7IHlJbmRleCA8PSBib3R0
b21SaWdodEluZGV4LnkoKTsgKyt5SW5kZXgpIHsKICAgICAgICAgICAgIGZvciAoaW50IHhJbmRl
eCA9IHRvcExlZnRJbmRleC54KCk7IHhJbmRleCA8PSBib3R0b21SaWdodEluZGV4LngoKTsgKyt4
SW5kZXgpIHsKICAgICAgICAgICAgICAgICBUaWxlSW5kZXggaW5kZXgoeEluZGV4LCB5SW5kZXgp
OwotICAgICAgICAgICAgICAgIFJlZlB0cjxUaWxlR3JpZFRpbGU+IHRpbGUgPSB0aWxlRm9ySW5k
ZXgoaW5kZXgpOworICAgICAgICAgICAgICAgIFJlZlB0cjxMZWdhY3lUaWxlR3JpZFRpbGU+IHRp
bGUgPSB0aWxlRm9ySW5kZXgoaW5kZXgpOwogICAgICAgICAgICAgICAgIGlmICghdGlsZSkKICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWYgKCF0aWxlLT5y
ZWN0KCkuaW50ZXJzZWN0cyhkaXJ0eVJlY3QpKQpAQCAtMzc2LDI1ICszNzYsMjUgQEAgdm9pZCBU
aWxlR3JpZDo6aW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludAogICAgIC8vIFdoZW4gdXNpbmcgbWlu
aW1hbCBjb3ZlcmFnZSwgZHJvcCBzcGVjdWxhdGl2ZSB0aWxlcyBpbnN0ZWFkIG9mIHVwZGF0aW5n
IHRoZW0uCiAgICAgaWYgKCFzaG91bGRVc2VNaW5pbWFsVGlsZUNvdmVyYWdlKCkpCiAgICAgICAg
IHJldHVybjsKLSAgICBpZiAobV90aWxlQ2FjaGUtPnRpbGluZ01vZGUoKSAhPSBUaWxlQ2FjaGU6
Ok1pbmltYWwgJiYgbV90aWxlQ2FjaGUtPnRpbGluZ01vZGUoKSAhPSBUaWxlQ2FjaGU6Ok5vcm1h
bCkKKyAgICBpZiAobV90aWxlQ2FjaGUtPnRpbGluZ01vZGUoKSAhPSBMZWdhY3lUaWxlQ2FjaGU6
Ok1pbmltYWwgJiYgbV90aWxlQ2FjaGUtPnRpbGluZ01vZGUoKSAhPSBMZWdhY3lUaWxlQ2FjaGU6
Ok5vcm1hbCkKICAgICAgICAgcmV0dXJuOwogICAgIEludFJlY3QgdmlzaWJsZVJlY3QgPSB0aGlz
LT52aXNpYmxlUmVjdCgpOwogICAgIHVuc2lnbmVkIGNvdW50ID0gaW52YWxpZGF0ZWRUaWxlcy5z
aXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAg
ICAgUmVmUHRyPFRpbGVHcmlkVGlsZT4gdGlsZSA9IHRpbGVGb3JJbmRleChpbnZhbGlkYXRlZFRp
bGVzW2ldKTsKKyAgICAgICAgUmVmUHRyPExlZ2FjeVRpbGVHcmlkVGlsZT4gdGlsZSA9IHRpbGVG
b3JJbmRleChpbnZhbGlkYXRlZFRpbGVzW2ldKTsKICAgICAgICAgaWYgKCF0aWxlLT5yZWN0KCku
aW50ZXJzZWN0cyh2aXNpYmxlUmVjdCkpCiAgICAgICAgICAgICBtX3RpbGVzLnJlbW92ZShpbnZh
bGlkYXRlZFRpbGVzW2ldKTsKICAgICB9CiB9CiAKLWJvb2wgVGlsZUdyaWQ6OnNob3VsZFVzZU1p
bmltYWxUaWxlQ292ZXJhZ2UoKSBjb25zdAorYm9vbCBMZWdhY3lUaWxlR3JpZDo6c2hvdWxkVXNl
TWluaW1hbFRpbGVDb3ZlcmFnZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fdGlsZUNhY2hlLT50
aWxpbmdNb2RlKCkgPT0gVGlsZUNhY2hlOjpNaW5pbWFsCisgICAgcmV0dXJuIG1fdGlsZUNhY2hl
LT50aWxpbmdNb2RlKCkgPT0gTGVnYWN5VGlsZUNhY2hlOjpNaW5pbWFsCiAgICAgICAgIHx8ICFt
X3RpbGVDYWNoZS0+aXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQoKQogICAgICAgICB8
fCBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNSZWNlaXZlZE1lbW9yeVByZXNzdXJlKCk7CiB9
CiAKLUludFJlY3QgVGlsZUdyaWQ6OmFkanVzdENvdmVyUmVjdEZvclBhZ2VCb3VuZHMoY29uc3Qg
SW50UmVjdCYgcmVjdCkgY29uc3QKK0ludFJlY3QgTGVnYWN5VGlsZUdyaWQ6OmFkanVzdENvdmVy
UmVjdEZvclBhZ2VCb3VuZHMoY29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICAvLyBB
ZGp1c3QgdGhlIHJlY3Qgc28gdGhhdCBpdCBzdGF5cyB3aXRoaW4gdGhlIGJvdW5kcyBhbmQga2Vl
cHMgdGhlIHBpeGVsIHNpemUuCiAgICAgSW50UmVjdCBib3VuZHMgPSB0aGlzLT5ib3VuZHMoKTsK
QEAgLTQxNCw3ICs0MTQsNyBAQCBJbnRSZWN0IFRpbGVHcmlkOjphZGp1c3RDb3ZlclJlY3RGb3JQ
YWdlCiAgICAgcmV0dXJuIGludGVyc2VjdGlvbihhZGp1c3RlZFJlY3QsIGJvdW5kcyk7CiB9CiAK
LUludFJlY3QgVGlsZUdyaWQ6OmNhbGN1bGF0ZUNvdmVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNp
YmxlUmVjdCwgYm9vbCYgY2VudGVyR3JpZCkKK0ludFJlY3QgTGVnYWN5VGlsZUdyaWQ6OmNhbGN1
bGF0ZUNvdmVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwgYm9vbCYgY2VudGVyR3Jp
ZCkKIHsKICAgICAvLyBVc2UgbWluaW11bSBjb3ZlclJlY3QgaWYgd2UgYXJlIHVuZGVyIG1lbW9y
eSBwcmVzc3VyZS4KICAgICBpZiAoc2hvdWxkVXNlTWluaW1hbFRpbGVDb3ZlcmFnZSgpKSB7CkBA
IC00MjgsNyArNDI4LDcgQEAgSW50UmVjdCBUaWxlR3JpZDo6Y2FsY3VsYXRlQ292ZXJSZWN0KGNv
bgogICAgIHJldHVybiBhZGp1c3RDb3ZlclJlY3RGb3JQYWdlQm91bmRzKGNvdmVyUmVjdCk7CiB9
CiAKLWRvdWJsZSBUaWxlR3JpZDo6dGlsZURpc3RhbmNlMihjb25zdCBJbnRSZWN0JiB2aXNpYmxl
UmVjdCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpIGNvbnN0Citkb3VibGUgTGVnYWN5VGlsZUdy
aWQ6OnRpbGVEaXN0YW5jZTIoY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJl
Y3QmIHRpbGVSZWN0KSBjb25zdAogewogICAgIC8vIFRoZSAiZGlzdGFuY2UiIGNhbGN1bGF0ZWQg
aGVyZSBpcyB1c2VkIHRvIHBpY2sgd2hpY2ggdGlsZSB0byBjYWNoZSBuZXh0LiBUaGUgaWRlYSBp
cyB0byBjcmVhdGUgdGhvc2UKICAgICAvLyBjbG9zZXN0IHRvIHRoZSBjdXJyZW50IHZpZXdwb3J0
IGZpcnN0IHNvIHRoZSB1c2VyIGlzIG1vcmUgbGlrZWx5IHRvIHNlZSBhbHJlYWR5IHJlbmRlcmVk
IGNvbnRlbnQgd2Ugc2hlCkBAIC00NTAsMTkgKzQ1MCwxOSBAQCBkb3VibGUgVGlsZUdyaWQ6OnRp
bGVEaXN0YW5jZTIoY29uc3QgSW50CiAgICAgY29uc3QgZG91YmxlIHRpbGluZ0JpYXNMaWtlbHkg
PSAwLjk7CiAKICAgICBzd2l0Y2ggKG1fdGlsZUNhY2hlLT50aWxpbmdEaXJlY3Rpb24oKSkgewot
ICAgIGNhc2UgVGlsZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb25VcDoKKyAgICBjYXNlIExlZ2FjeVRp
bGVDYWNoZTo6VGlsaW5nRGlyZWN0aW9uVXA6CiAgICAgICAgIHZlcnRpY2FsQmlhcyA9IHRpbGlu
Z0JpYXNWZXJ5TGlrZWx5OwogICAgICAgICB1cHdhcmRCaWFzID0gdGlsaW5nQmlhc0xpa2VseTsK
ICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBUaWxlQ2FjaGU6OlRpbGluZ0RpcmVjdGlvbkRvd246
CisgICAgY2FzZSBMZWdhY3lUaWxlQ2FjaGU6OlRpbGluZ0RpcmVjdGlvbkRvd246CiAgICAgICAg
IHZlcnRpY2FsQmlhcyA9IHRpbGluZ0JpYXNWZXJ5TGlrZWx5OwogICAgICAgICBkb3dud2FyZEJp
YXMgPSB0aWxpbmdCaWFzTGlrZWx5OwogICAgICAgICBicmVhazsKLSAgICBjYXNlIFRpbGVDYWNo
ZTo6VGlsaW5nRGlyZWN0aW9uTGVmdDoKKyAgICBjYXNlIExlZ2FjeVRpbGVDYWNoZTo6VGlsaW5n
RGlyZWN0aW9uTGVmdDoKICAgICAgICAgaG9yaXpvbnRhbEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxp
a2VseTsKICAgICAgICAgbGVmdHdhcmRCaWFzID0gdGlsaW5nQmlhc0xpa2VseTsKICAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBUaWxlQ2FjaGU6OlRpbGluZ0RpcmVjdGlvblJpZ2h0OgorICAgIGNh
c2UgTGVnYWN5VGlsZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb25SaWdodDoKICAgICAgICAgaG9yaXpv
bnRhbEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxpa2VseTsKICAgICAgICAgcmlnaHR3YXJkQmlhcyA9
IHRpbGluZ0JpYXNMaWtlbHk7CiAgICAgICAgIGJyZWFrOwpAQCAtNDc4LDcgKzQ3OCw3IEBAIGRv
dWJsZSBUaWxlR3JpZDo6dGlsZURpc3RhbmNlMihjb25zdCBJbnQKICAgICByZXR1cm4gZGlzdGFu
Y2UyOwogfQogCi12b2lkIFRpbGVHcmlkOjpjcmVhdGVUaWxlcyhUaWxlQ2FjaGU6OlN5bmNocm9u
b3VzVGlsZUNyZWF0aW9uTW9kZSBjcmVhdGlvbk1vZGUpCit2b2lkIExlZ2FjeVRpbGVHcmlkOjpj
cmVhdGVUaWxlcyhMZWdhY3lUaWxlQ2FjaGU6OlN5bmNocm9ub3VzVGlsZUNyZWF0aW9uTW9kZSBj
cmVhdGlvbk1vZGUpCiB7CiAgICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHRoaXMtPnZpc2libGVS
ZWN0KCk7CiAgICAgaWYgKHZpc2libGVSZWN0LmlzRW1wdHkoKSkKQEAgLTQ5OCwxNCArNDk4LDE0
IEBAIHZvaWQgVGlsZUdyaWQ6OmNyZWF0ZVRpbGVzKFRpbGVDYWNoZTo6U3kKIAogICAgIGRvdWJs
ZSBzaG9ydGVzdERpc3RhbmNlID0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0
eSgpOwogICAgIGRvdWJsZSBjb3ZlcmVkRGlzdGFuY2UgPSAwOwotICAgIFZlY3RvcjxUaWxlR3Jp
ZDo6VGlsZUluZGV4PiB0aWxlc1RvQ3JlYXRlOworICAgIFZlY3RvcjxMZWdhY3lUaWxlR3JpZDo6
VGlsZUluZGV4PiB0aWxlc1RvQ3JlYXRlOwogICAgIHVuc2lnbmVkIHBlbmRpbmdUaWxlQ291bnQg
PSAwOwogCi0gICAgVGlsZUdyaWQ6OlRpbGVJbmRleCB0b3BMZWZ0SW5kZXggPSB0aWxlSW5kZXhG
b3JQb2ludCh0b3BMZWZ0KGNvdmVyUmVjdCkpOwotICAgIFRpbGVHcmlkOjpUaWxlSW5kZXggYm90
dG9tUmlnaHRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KGJvdHRvbVJpZ2h0KGNvdmVyUmVjdCkp
OworICAgIExlZ2FjeVRpbGVHcmlkOjpUaWxlSW5kZXggdG9wTGVmdEluZGV4ID0gdGlsZUluZGV4
Rm9yUG9pbnQodG9wTGVmdChjb3ZlclJlY3QpKTsKKyAgICBMZWdhY3lUaWxlR3JpZDo6VGlsZUlu
ZGV4IGJvdHRvbVJpZ2h0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludChib3R0b21SaWdodChjb3Zl
clJlY3QpKTsKICAgICBmb3IgKGludCB5SW5kZXggPSB0b3BMZWZ0SW5kZXgueSgpOyB5SW5kZXgg
PD0gYm90dG9tUmlnaHRJbmRleC55KCk7ICsreUluZGV4KSB7CiAgICAgICAgIGZvciAoaW50IHhJ
bmRleCA9IHRvcExlZnRJbmRleC54KCk7IHhJbmRleCA8PSBib3R0b21SaWdodEluZGV4LngoKTsg
Kyt4SW5kZXgpIHsKLSAgICAgICAgICAgIFRpbGVHcmlkOjpUaWxlSW5kZXggaW5kZXgoeEluZGV4
LCB5SW5kZXgpOworICAgICAgICAgICAgTGVnYWN5VGlsZUdyaWQ6OlRpbGVJbmRleCBpbmRleCh4
SW5kZXgsIHlJbmRleCk7CiAgICAgICAgICAgICAvLyBDdXJyZW50bHkgdmlzaWJsZSB0aWxlcyBo
YXZlIGRpc3RhbmNlIG9mIDAgYW5kIGdldCBhbGwgY3JlYXRlZCBpbiB0aGUgc2FtZSB0cmFuc2Fj
dGlvbi4KICAgICAgICAgICAgIGRvdWJsZSBkaXN0YW5jZSA9IHRpbGVEaXN0YW5jZTIodmlzaWJs
ZVJlY3QsIHRpbGVSZWN0Rm9ySW5kZXgoaW5kZXgpKTsKICAgICAgICAgICAgIGlmIChkaXN0YW5j
ZSA+IGNvdmVyZWREaXN0YW5jZSkKQEAgLTUyNyw3ICs1MjcsNyBAQCB2b2lkIFRpbGVHcmlkOjpj
cmVhdGVUaWxlcyhUaWxlQ2FjaGU6OlN5CiAKICAgICAvLyBUaWxlIGNyZWF0aW9uIHRpbWVyIHdp
bGwgaW52b2tlIHRoaXMgZnVuY3Rpb24gYWdhaW4gaW4gQ292ZXJTcGVjdWxhdGl2ZSBtb2RlLgog
ICAgIGJvb2wgY2FuZGlkYXRlVGlsZXNBcmVTcGVjdWxhdGl2ZSA9IHNob3J0ZXN0RGlzdGFuY2Ug
PiAwOwotICAgIGlmIChjcmVhdGlvbk1vZGUgPT0gVGlsZUNhY2hlOjpDb3ZlclZpc2libGVPbmx5
ICYmIGNhbmRpZGF0ZVRpbGVzQXJlU3BlY3VsYXRpdmUpCisgICAgaWYgKGNyZWF0aW9uTW9kZSA9
PSBMZWdhY3lUaWxlQ2FjaGU6OkNvdmVyVmlzaWJsZU9ubHkgJiYgY2FuZGlkYXRlVGlsZXNBcmVT
cGVjdWxhdGl2ZSkKICAgICAgICAgdGlsZXNUb0NyZWF0ZUNvdW50ID0gMDsKIAogICAgIC8vIEV2
ZW4gaWYgd2UgZG9uJ3QgY3JlYXRlIGFueSB0aWxlcywgd2Ugc2hvdWxkIHN0aWxsIGRyb3AgZGlz
dGFudCB0aWxlcwpAQCAtNTQ4LDcgKzU0OCw3IEBAIHZvaWQgVGlsZUdyaWQ6OmNyZWF0ZVRpbGVz
KFRpbGVDYWNoZTo6U3kKICAgICBtX3RpbGVDYWNoZS0+ZmluaXNoZWRDcmVhdGluZ1RpbGVzKGRp
ZENyZWF0ZVRpbGVzLCBjcmVhdGVNb3JlVGlsZXMpOwogfQogCi12b2lkIFRpbGVHcmlkOjpkdW1w
VGlsZXMoKQordm9pZCBMZWdhY3lUaWxlR3JpZDo6ZHVtcFRpbGVzKCkKIHsKICAgICBJbnRSZWN0
IHZpc2libGVSZWN0ID0gdGhpcy0+dmlzaWJsZVJlY3QoKTsKICAgICBOU0xvZyhAInRyYW5zZm9y
bWVkIHZpc2libGVSZWN0ID0gWyU2ZCAlNmQgJTZkICU2ZF0iLCB2aXNpYmxlUmVjdC54KCksIHZp
c2libGVSZWN0LnkoKSwgdmlzaWJsZVJlY3Qud2lkdGgoKSwgdmlzaWJsZVJlY3QuaGVpZ2h0KCkp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVHcmlkVGlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlR3Jp
ZFRpbGUuaAkocmV2aXNpb24gMTY2NDUzKQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvVGlsZUdyaWRUaWxlLmg6MTY2NDUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L0xlZ2FjeVRpbGVHcmlkVGlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZuZGVmIFRpbGVHcmlkVGlsZV9oCisjZGVmaW5lIFRpbGVHcmlkVGlsZV9o
CisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJJbnRSZWN0LmgiCisjaW5jbHVkZSA8
d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgorCitAY2xhc3MgVGlsZUxheWVyOworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFRpbGVHcmlkOworCisvLyBSZWZjb3VudCB0aGUgdGlsZXMgc28gdGhleSB3b3Jr
IG5pY2VseSBpbiB2ZWN0b3IgYW5kIHdlIGtub3cgd2hlbiB0byByZW1vdmUgdGhlIHRpbGUgbGF5
ZXIgZnJvbSB0aGUgcGFyZW50LgorY2xhc3MgVGlsZUdyaWRUaWxlIDogcHVibGljIFJlZkNvdW50
ZWQ8VGlsZUdyaWRUaWxlPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8VGlsZUdy
aWRUaWxlPiBjcmVhdGUoVGlsZUdyaWQqIGdyaWQsIGNvbnN0IEludFJlY3QmIHJlY3QpIHsgcmV0
dXJuIGFkb3B0UmVmPFRpbGVHcmlkVGlsZT4obmV3IFRpbGVHcmlkVGlsZShncmlkLCByZWN0KSk7
IH0KKyAgICB+VGlsZUdyaWRUaWxlKCk7CisKKyAgICBUaWxlTGF5ZXIqIHRpbGVMYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fdGlsZUxheWVyLmdldCgpOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlUmVj
dChjb25zdCBJbnRSZWN0JiByZWN0SW5TdXJmYWNlKTsKKyAgICBJbnRSZWN0IHJlY3QoKSBjb25z
dCB7IHJldHVybiBtX3JlY3Q7IH0KKyAgICB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgdGls
ZVJlY3QpOworICAgIHZvaWQgc2hvd0JvcmRlcihib29sKTsKKworcHJpdmF0ZToKKyAgICBUaWxl
R3JpZFRpbGUoVGlsZUdyaWQqLCBjb25zdCBJbnRSZWN0Jik7CisKKyAgICBUaWxlR3JpZCogbV90
aWxlR3JpZDsKKyAgICBSZXRhaW5QdHI8VGlsZUxheWVyPiBtX3RpbGVMYXllcjsKKyAgICBJbnRS
ZWN0IG1fcmVjdDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFBM
QVRGT1JNKElPUykKKyNlbmRpZiAvLyBUaWxlR3JpZFRpbGVfaApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVHcmlkVGlsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlR3JpZFRpbGUuaAkod29ya2luZyBjb3B5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVHcmlkVGlsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBUaWxlR3JpZFRpbGVfaAotI2RlZmluZSBUaWxlR3Jp
ZFRpbGVfaAorI2lmbmRlZiBMZWdhY3lMZWdhY3lUaWxlR3JpZFRpbGVfaAorI2RlZmluZSBMZWdh
Y3lMZWdhY3lUaWxlR3JpZFRpbGVfaAogCiAjaWYgUExBVEZPUk0oSU9TKQogCkBAIC0zMywzMyAr
MzMsMzMgQEAKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0
ci5oPgogCi1AY2xhc3MgVGlsZUxheWVyOworQGNsYXNzIExlZ2FjeVRpbGVMYXllcjsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBUaWxlR3JpZDsKK2NsYXNzIExlZ2FjeVRpbGVHcmlk
OwogCiAvLyBSZWZjb3VudCB0aGUgdGlsZXMgc28gdGhleSB3b3JrIG5pY2VseSBpbiB2ZWN0b3Ig
YW5kIHdlIGtub3cgd2hlbiB0byByZW1vdmUgdGhlIHRpbGUgbGF5ZXIgZnJvbSB0aGUgcGFyZW50
LgotY2xhc3MgVGlsZUdyaWRUaWxlIDogcHVibGljIFJlZkNvdW50ZWQ8VGlsZUdyaWRUaWxlPiB7
CitjbGFzcyBMZWdhY3lUaWxlR3JpZFRpbGUgOiBwdWJsaWMgUmVmQ291bnRlZDxMZWdhY3lUaWxl
R3JpZFRpbGU+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxUaWxlR3JpZFRpbGU+
IGNyZWF0ZShUaWxlR3JpZCogZ3JpZCwgY29uc3QgSW50UmVjdCYgcmVjdCkgeyByZXR1cm4gYWRv
cHRSZWY8VGlsZUdyaWRUaWxlPihuZXcgVGlsZUdyaWRUaWxlKGdyaWQsIHJlY3QpKTsgfQotICAg
IH5UaWxlR3JpZFRpbGUoKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxMZWdhY3lUaWxlR3JpZFRp
bGU+IGNyZWF0ZShMZWdhY3lUaWxlR3JpZCogZ3JpZCwgY29uc3QgSW50UmVjdCYgcmVjdCkgeyBy
ZXR1cm4gYWRvcHRSZWY8TGVnYWN5VGlsZUdyaWRUaWxlPihuZXcgTGVnYWN5VGlsZUdyaWRUaWxl
KGdyaWQsIHJlY3QpKTsgfQorICAgIH5MZWdhY3lUaWxlR3JpZFRpbGUoKTsKIAotICAgIFRpbGVM
YXllciogdGlsZUxheWVyKCkgY29uc3QgeyByZXR1cm4gbV90aWxlTGF5ZXIuZ2V0KCk7IH0KKyAg
ICBMZWdhY3lUaWxlTGF5ZXIqIHRpbGVMYXllcigpIGNvbnN0IHsgcmV0dXJuIG1fdGlsZUxheWVy
LmdldCgpOyB9CiAgICAgdm9pZCBpbnZhbGlkYXRlUmVjdChjb25zdCBJbnRSZWN0JiByZWN0SW5T
dXJmYWNlKTsKICAgICBJbnRSZWN0IHJlY3QoKSBjb25zdCB7IHJldHVybiBtX3JlY3Q7IH0KICAg
ICB2b2lkIHNldFJlY3QoY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpOwogICAgIHZvaWQgc2hvd0Jv
cmRlcihib29sKTsKIAogcHJpdmF0ZToKLSAgICBUaWxlR3JpZFRpbGUoVGlsZUdyaWQqLCBjb25z
dCBJbnRSZWN0Jik7CisgICAgTGVnYWN5VGlsZUdyaWRUaWxlKExlZ2FjeVRpbGVHcmlkKiwgY29u
c3QgSW50UmVjdCYpOwogCi0gICAgVGlsZUdyaWQqIG1fdGlsZUdyaWQ7Ci0gICAgUmV0YWluUHRy
PFRpbGVMYXllcj4gbV90aWxlTGF5ZXI7CisgICAgTGVnYWN5VGlsZUdyaWQqIG1fdGlsZUdyaWQ7
CisgICAgUmV0YWluUHRyPExlZ2FjeVRpbGVMYXllcj4gbV90aWxlTGF5ZXI7CiAgICAgSW50UmVj
dCBtX3JlY3Q7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBQTEFU
Rk9STShJT1MpCi0jZW5kaWYgLy8gVGlsZUdyaWRUaWxlX2gKKyNlbmRpZiAvLyBMZWdhY3lUaWxl
R3JpZFRpbGVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVH
cmlkVGlsZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTGVn
YWN5VGlsZUdyaWRUaWxlLm1tCShyZXZpc2lvbiAxNjY0NTMpCShmcm9tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUubW06MTY2NDUzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVHcmlkVGlsZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJU
aWxlR3JpZC5oIgorCisjaWYgUExBVEZPUk0oSU9TKQorCisjaW5jbHVkZSAiQ29sb3IuaCIKKyNp
bmNsdWRlICJUaWxlQ2FjaGUuaCIKKyNpbmNsdWRlICJUaWxlR3JpZFRpbGUuaCIKKyNpbmNsdWRl
ICJUaWxlTGF5ZXIuaCIKKyNpbmNsdWRlICJUaWxlTGF5ZXJQb29sLmgiCisjaW5jbHVkZSAiV0FL
V2luZG93LmgiCisjaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+CisjaW5jbHVkZSA8
UXVhcnR6Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5oPgorI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNp
bmNsdWRlIDxmdW5jdGlvbmFsPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyNpZiBMT0dfVElM
SU5HCitzdGF0aWMgaW50IHRvdGFsVGlsZUNvdW50OworI2VuZGlmCisKK1RpbGVHcmlkVGlsZTo6
VGlsZUdyaWRUaWxlKFRpbGVHcmlkKiB0aWxlR3JpZCwgY29uc3QgSW50UmVjdCYgdGlsZVJlY3Qp
CisgICAgOiBtX3RpbGVHcmlkKHRpbGVHcmlkKQorICAgICwgbV9yZWN0KHRpbGVSZWN0KQorewor
ICAgIEFTU0VSVCghdGlsZVJlY3QuaXNFbXB0eSgpKTsKKyAgICBJbnRTaXplIHBpeGVsU2l6ZSht
X3JlY3Quc2l6ZSgpKTsKKyAgICBjb25zdCBDR0Zsb2F0IHNjcmVlblNjYWxlID0gbV90aWxlR3Jp
ZC0+dGlsZUNhY2hlKCktPnNjcmVlblNjYWxlKCk7CisgICAgcGl4ZWxTaXplLnNjYWxlKHNjcmVl
blNjYWxlKTsKKyAgICBtX3RpbGVMYXllciA9IFRpbGVMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+
dGFrZUxheWVyV2l0aFNpemUocGl4ZWxTaXplKTsKKyAgICBpZiAoIW1fdGlsZUxheWVyKSB7Cisj
aWYgTE9HX1RJTElORworICAgICAgICBOU0xvZyhAInVuYWJsZSB0byByZXVzZSBsYXllciB3aXRo
IHNpemUgJWQgeCAlZCwgY3JlYXRpbmcgb25lIiwgcGl4ZWxTaXplLndpZHRoKCksIHBpeGVsU2l6
ZS5oZWlnaHQoKSk7CisjZW5kaWYKKyAgICAgICAgbV90aWxlTGF5ZXIgPSBhZG9wdE5TKFtbVGls
ZUxheWVyIGFsbG9jXSBpbml0XSk7CisgICAgfQorICAgIFRpbGVMYXllciogbGF5ZXIgPSBtX3Rp
bGVMYXllci5nZXQoKTsKKyAgICBbbGF5ZXIgc2V0VGlsZUdyaWQ6dGlsZUdyaWRdOworICAgIFts
YXllciBzZXRPcGFxdWU6bV90aWxlR3JpZC0+dGlsZUNhY2hlKCktPnRpbGVzT3BhcXVlKCldOwor
ICAgIFtsYXllciBzZXRFZGdlQW50aWFsaWFzaW5nTWFzazowXTsKKyAgICBbbGF5ZXIgc2V0TmVl
ZHNMYXlvdXRPbkdlb21ldHJ5Q2hhbmdlOk5PXTsKKyAgICBbbGF5ZXIgc2V0Q29udGVudHNTY2Fs
ZTpzY3JlZW5TY2FsZV07CisgICAgW2xheWVyIHNldEFjY2VsZXJhdGVzRHJhd2luZzptX3RpbGVH
cmlkLT50aWxlQ2FjaGUoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpXTsKKworICAgIC8v
IEhvc3QgbGF5ZXIgbWF5IGhhdmUgb3RoZXIgc3VibGF5ZXJzLiBLZWVwIHRoZSB0aWxlIGxheWVy
cyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheQorICAgIC8vIHNvIHRoZXkgYXJlIHBhaW50
ZWQgYmVoaW5kIGV2ZXJ5dGhpbmcgZWxzZS4KKyAgICBbdGlsZUdyaWQtPnRpbGVIb3N0TGF5ZXIo
KSBpbnNlcnRTdWJsYXllcjpsYXllciBhdEluZGV4OnRpbGVHcmlkLT50aWxlQ291bnQoKV07Cisg
ICAgW2xheWVyIHNldEZyYW1lOm1fcmVjdF07CisgICAgaW52YWxpZGF0ZVJlY3QobV9yZWN0KTsK
KyAgICBzaG93Qm9yZGVyKG1fdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT50aWxlQm9yZGVyc1Zpc2li
bGUoKSk7CisKKyNpZiBMT0dfVElMSU5HCisgICAgKyt0b3RhbFRpbGVDb3VudDsKKyAgICBOU0xv
ZyhAIm5ldyBUaWxlICglZCwlZCkgJWQgJWQsIGNvdW50ICVkIiwgdGlsZVJlY3QueCgpLCB0aWxl
UmVjdC55KCksIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCB0b3RhbFRpbGVD
b3VudCk7CisjZW5kaWYKK30KKworVGlsZUdyaWRUaWxlOjp+VGlsZUdyaWRUaWxlKCkgCit7Cisg
ICAgW3RpbGVMYXllcigpIHNldFRpbGVHcmlkOjBdOworICAgIFt0aWxlTGF5ZXIoKSByZW1vdmVG
cm9tU3VwZXJsYXllcl07CisgICAgVGlsZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5hZGRMYXll
cih0aWxlTGF5ZXIoKSk7CisjaWYgTE9HX1RJTElORworICAgIC0tdG90YWxUaWxlQ291bnQ7Cisg
ICAgTlNMb2coQCJkZWxldGUgVGlsZSAoJWQsJWQpICVkICVkLCBjb3VudCAlZCIsIG1fcmVjdC54
KCksIG1fcmVjdC55KCksIG1fcmVjdC53aWR0aCgpLCBtX3JlY3QuaGVpZ2h0KCksIHRvdGFsVGls
ZUNvdW50KTsKKyNlbmRpZgorfQorCit2b2lkIFRpbGVHcmlkVGlsZTo6aW52YWxpZGF0ZVJlY3Qo
Y29uc3QgSW50UmVjdCYgd2luZG93RGlydHlSZWN0KQoreworICAgIEludFJlY3QgZGlydHlSZWN0
ID0gaW50ZXJzZWN0aW9uKHdpbmRvd0RpcnR5UmVjdCwgbV9yZWN0KTsKKyAgICBpZiAoZGlydHlS
ZWN0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGRpcnR5UmVjdC5tb3ZlKEludFBv
aW50KCkgLSBtX3JlY3QubG9jYXRpb24oKSk7CisgICAgW3RpbGVMYXllcigpIHNldE5lZWRzRGlz
cGxheUluUmVjdDpkaXJ0eVJlY3RdOworCisgICAgaWYgKG1fdGlsZUdyaWQtPnRpbGVDYWNoZSgp
LT50aWxlUGFpbnRDb3VudGVyc1Zpc2libGUoKSkKKyAgICAgICAgW3RpbGVMYXllcigpIHNldE5l
ZWRzRGlzcGxheUluUmVjdDpDR1JlY3RNYWtlKDAsIDAsIDQ2LCAyNSldOworfQorCit2b2lkIFRp
bGVHcmlkVGlsZTo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKK3sKKyAgICBpZiAo
bV9yZWN0ID09IHRpbGVSZWN0KQorICAgICAgICByZXR1cm47CisgICAgbV9yZWN0ID0gdGlsZVJl
Y3Q7CisgICAgVGlsZUxheWVyKiBsYXllciA9IG1fdGlsZUxheWVyLmdldCgpOworICAgIFtsYXll
ciBzZXRGcmFtZTptX3JlY3RdOworICAgIFtsYXllciBzZXROZWVkc0Rpc3BsYXldOworfQorCit2
b2lkIFRpbGVHcmlkVGlsZTo6c2hvd0JvcmRlcihib29sIGZsYWcpCit7CisgICAgVGlsZUxheWVy
KiBsYXllciA9IG1fdGlsZUxheWVyLmdldCgpOworICAgIGlmIChmbGFnKSB7CisgICAgICAgIFts
YXllciBzZXRCb3JkZXJDb2xvcjpjYWNoZWRDR0NvbG9yKG1fdGlsZUdyaWQtPnRpbGVDYWNoZSgp
LT5jb2xvckZvckdyaWRUaWxlQm9yZGVyKG1fdGlsZUdyaWQpLCBDb2xvclNwYWNlRGV2aWNlUkdC
KV07CisgICAgICAgIFtsYXllciBzZXRCb3JkZXJXaWR0aDowLjVmXTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBbbGF5ZXIgc2V0Qm9yZGVyQ29sb3I6bmlsXTsKKyAgICAgICAgW2xheWVyIHNldEJv
cmRlcldpZHRoOjBdOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gUExBVEZPUk0oSU9TKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xl
Z2FjeVRpbGVHcmlkVGlsZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvTGVnYWN5VGlsZUdyaWRUaWxlLm1tCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvTGVnYWN5VGlsZUdyaWRUaWxlLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCwxNSArMjQsMTUgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAi
VGlsZUdyaWQuaCIKKyNpbmNsdWRlICJMZWdhY3lUaWxlR3JpZFRpbGUuaCIKIAogI2lmIFBMQVRG
T1JNKElPUykKIAogI2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiVGlsZUNhY2hlLmgiCi0j
aW5jbHVkZSAiVGlsZUdyaWRUaWxlLmgiCi0jaW5jbHVkZSAiVGlsZUxheWVyLmgiCi0jaW5jbHVk
ZSAiVGlsZUxheWVyUG9vbC5oIgorI2luY2x1ZGUgIkxlZ2FjeVRpbGVDYWNoZS5oIgorI2luY2x1
ZGUgIkxlZ2FjeVRpbGVHcmlkLmgiCisjaW5jbHVkZSAiTGVnYWN5VGlsZUxheWVyLmgiCisjaW5j
bHVkZSAiTGVnYWN5VGlsZUxheWVyUG9vbC5oIgogI2luY2x1ZGUgIldBS1dpbmRvdy5oIgogI2lu
Y2x1ZGUgPFF1YXJ0ekNvcmUvUXVhcnR6Q29yZS5oPgogI2luY2x1ZGUgPFF1YXJ0ekNvcmUvUXVh
cnR6Q29yZVByaXZhdGUuaD4KQEAgLTQ1LDcgKzQ1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
c3RhdGljIGludCB0b3RhbFRpbGVDb3VudDsKICNlbmRpZgogCi1UaWxlR3JpZFRpbGU6OlRpbGVH
cmlkVGlsZShUaWxlR3JpZCogdGlsZUdyaWQsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KQorTGVn
YWN5VGlsZUdyaWRUaWxlOjpMZWdhY3lUaWxlR3JpZFRpbGUoTGVnYWN5VGlsZUdyaWQqIHRpbGVH
cmlkLCBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKICAgICA6IG1fdGlsZUdyaWQodGlsZUdyaWQp
CiAgICAgLCBtX3JlY3QodGlsZVJlY3QpCiB7CkBAIC01MywxNCArNTMsMTQgQEAgVGlsZUdyaWRU
aWxlOjpUaWxlR3JpZFRpbGUoVGlsZUdyaWQqIHRpbAogICAgIEludFNpemUgcGl4ZWxTaXplKG1f
cmVjdC5zaXplKCkpOwogICAgIGNvbnN0IENHRmxvYXQgc2NyZWVuU2NhbGUgPSBtX3RpbGVHcmlk
LT50aWxlQ2FjaGUoKS0+c2NyZWVuU2NhbGUoKTsKICAgICBwaXhlbFNpemUuc2NhbGUoc2NyZWVu
U2NhbGUpOwotICAgIG1fdGlsZUxheWVyID0gVGlsZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT50
YWtlTGF5ZXJXaXRoU2l6ZShwaXhlbFNpemUpOworICAgIG1fdGlsZUxheWVyID0gTGVnYWN5VGls
ZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT50YWtlTGF5ZXJXaXRoU2l6ZShwaXhlbFNpemUpOwog
ICAgIGlmICghbV90aWxlTGF5ZXIpIHsKICNpZiBMT0dfVElMSU5HCiAgICAgICAgIE5TTG9nKEAi
dW5hYmxlIHRvIHJldXNlIGxheWVyIHdpdGggc2l6ZSAlZCB4ICVkLCBjcmVhdGluZyBvbmUiLCBw
aXhlbFNpemUud2lkdGgoKSwgcGl4ZWxTaXplLmhlaWdodCgpKTsKICNlbmRpZgotICAgICAgICBt
X3RpbGVMYXllciA9IGFkb3B0TlMoW1tUaWxlTGF5ZXIgYWxsb2NdIGluaXRdKTsKKyAgICAgICAg
bV90aWxlTGF5ZXIgPSBhZG9wdE5TKFtbTGVnYWN5VGlsZUxheWVyIGFsbG9jXSBpbml0XSk7CiAg
ICAgfQotICAgIFRpbGVMYXllciogbGF5ZXIgPSBtX3RpbGVMYXllci5nZXQoKTsKKyAgICBMZWdh
Y3lUaWxlTGF5ZXIqIGxheWVyID0gbV90aWxlTGF5ZXIuZ2V0KCk7CiAgICAgW2xheWVyIHNldFRp
bGVHcmlkOnRpbGVHcmlkXTsKICAgICBbbGF5ZXIgc2V0T3BhcXVlOm1fdGlsZUdyaWQtPnRpbGVD
YWNoZSgpLT50aWxlc09wYXF1ZSgpXTsKICAgICBbbGF5ZXIgc2V0RWRnZUFudGlhbGlhc2luZ01h
c2s6MF07CkBAIC04MSwxOCArODEsMTggQEAgVGlsZUdyaWRUaWxlOjpUaWxlR3JpZFRpbGUoVGls
ZUdyaWQqIHRpbAogI2VuZGlmCiB9CiAKLVRpbGVHcmlkVGlsZTo6flRpbGVHcmlkVGlsZSgpIAor
TGVnYWN5VGlsZUdyaWRUaWxlOjp+TGVnYWN5VGlsZUdyaWRUaWxlKCkgCiB7CiAgICAgW3RpbGVM
YXllcigpIHNldFRpbGVHcmlkOjBdOwogICAgIFt0aWxlTGF5ZXIoKSByZW1vdmVGcm9tU3VwZXJs
YXllcl07Ci0gICAgVGlsZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5hZGRMYXllcih0aWxlTGF5
ZXIoKSk7CisgICAgTGVnYWN5VGlsZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpLT5hZGRMYXllcih0
aWxlTGF5ZXIoKSk7CiAjaWYgTE9HX1RJTElORwogICAgIC0tdG90YWxUaWxlQ291bnQ7CiAgICAg
TlNMb2coQCJkZWxldGUgVGlsZSAoJWQsJWQpICVkICVkLCBjb3VudCAlZCIsIG1fcmVjdC54KCks
IG1fcmVjdC55KCksIG1fcmVjdC53aWR0aCgpLCBtX3JlY3QuaGVpZ2h0KCksIHRvdGFsVGlsZUNv
dW50KTsKICNlbmRpZgogfQogCi12b2lkIFRpbGVHcmlkVGlsZTo6aW52YWxpZGF0ZVJlY3QoY29u
c3QgSW50UmVjdCYgd2luZG93RGlydHlSZWN0KQordm9pZCBMZWdhY3lUaWxlR3JpZFRpbGU6Omlu
dmFsaWRhdGVSZWN0KGNvbnN0IEludFJlY3QmIHdpbmRvd0RpcnR5UmVjdCkKIHsKICAgICBJbnRS
ZWN0IGRpcnR5UmVjdCA9IGludGVyc2VjdGlvbih3aW5kb3dEaXJ0eVJlY3QsIG1fcmVjdCk7CiAg
ICAgaWYgKGRpcnR5UmVjdC5pc0VtcHR5KCkpCkBAIC0xMDQsMTkgKzEwNCwxOSBAQCB2b2lkIFRp
bGVHcmlkVGlsZTo6aW52YWxpZGF0ZVJlY3QoY29uc3QgCiAgICAgICAgIFt0aWxlTGF5ZXIoKSBz
ZXROZWVkc0Rpc3BsYXlJblJlY3Q6Q0dSZWN0TWFrZSgwLCAwLCA0NiwgMjUpXTsKIH0KIAotdm9p
ZCBUaWxlR3JpZFRpbGU6OnNldFJlY3QoY29uc3QgSW50UmVjdCYgdGlsZVJlY3QpCit2b2lkIExl
Z2FjeVRpbGVHcmlkVGlsZTo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCkKIHsKICAg
ICBpZiAobV9yZWN0ID09IHRpbGVSZWN0KQogICAgICAgICByZXR1cm47CiAgICAgbV9yZWN0ID0g
dGlsZVJlY3Q7Ci0gICAgVGlsZUxheWVyKiBsYXllciA9IG1fdGlsZUxheWVyLmdldCgpOworICAg
IExlZ2FjeVRpbGVMYXllciogbGF5ZXIgPSBtX3RpbGVMYXllci5nZXQoKTsKICAgICBbbGF5ZXIg
c2V0RnJhbWU6bV9yZWN0XTsKICAgICBbbGF5ZXIgc2V0TmVlZHNEaXNwbGF5XTsKIH0KIAotdm9p
ZCBUaWxlR3JpZFRpbGU6OnNob3dCb3JkZXIoYm9vbCBmbGFnKQordm9pZCBMZWdhY3lUaWxlR3Jp
ZFRpbGU6OnNob3dCb3JkZXIoYm9vbCBmbGFnKQogewotICAgIFRpbGVMYXllciogbGF5ZXIgPSBt
X3RpbGVMYXllci5nZXQoKTsKKyAgICBMZWdhY3lUaWxlTGF5ZXIqIGxheWVyID0gbV90aWxlTGF5
ZXIuZ2V0KCk7CiAgICAgaWYgKGZsYWcpIHsKICAgICAgICAgW2xheWVyIHNldEJvcmRlckNvbG9y
OmNhY2hlZENHQ29sb3IobV90aWxlR3JpZC0+dGlsZUNhY2hlKCktPmNvbG9yRm9yR3JpZFRpbGVC
b3JkZXIobV90aWxlR3JpZCksIENvbG9yU3BhY2VEZXZpY2VSR0IpXTsKICAgICAgICAgW2xheWVy
IHNldEJvcmRlcldpZHRoOjAuNWZdOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L0xlZ2FjeVRpbGVMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9MZWdhY3lUaWxlTGF5ZXIuaAkocmV2aXNpb24gMTY2NDUzKQkoZnJvbSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyLmg6MTY2NDUzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFRpbGVMYXllcl9oCisjZGVmaW5lIFRpbGVMYXll
cl9oCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlIDxRdWFydHpDb3JlL0NBTGF5ZXIu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgVGlsZUdyaWQ7Cit9OworCitAaW50ZXJm
YWNlIFRpbGVMYXllciA6IENBTGF5ZXIgeworICAgIFdlYkNvcmU6OlRpbGVHcmlkKiBfdGlsZUdy
aWQ7CisgICAgdW5zaWduZWQgX3BhaW50Q291bnQ7Cit9CitAcHJvcGVydHkgKG5vbmF0b21pYykg
dW5zaWduZWQgcGFpbnRDb3VudDsKK0Bwcm9wZXJ0eSAobm9uYXRvbWljKSBXZWJDb3JlOjpUaWxl
R3JpZCogdGlsZUdyaWQ7CisrIChUaWxlTGF5ZXIgKilsYXllckJlaW5nUGFpbnRlZDsKK0BlbmQK
KworQGludGVyZmFjZSBUaWxlSG9zdExheWVyIDogQ0FMYXllciB7CisgICAgV2ViQ29yZTo6VGls
ZUdyaWQqIF90aWxlR3JpZDsKK30KKy0gKGlkKWluaXRXaXRoVGlsZUdyaWQ6KFdlYkNvcmU6OlRp
bGVHcmlkKil0aWxlR3JpZDsKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKKyNlbmRp
ZiAvLyBUaWxlTGF5ZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2Fj
eVRpbGVMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9M
ZWdhY3lUaWxlTGF5ZXIuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0xlZ2FjeVRpbGVMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywzMCArMjMsMzAg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFRp
bGVMYXllcl9oCi0jZGVmaW5lIFRpbGVMYXllcl9oCisjaWZuZGVmIExlZ2FjeVRpbGVMYXllcl9o
CisjZGVmaW5lIExlZ2FjeVRpbGVMYXllcl9oCiAKICNpZiBQTEFURk9STShJT1MpCiAKICNpbmNs
dWRlIDxRdWFydHpDb3JlL0NBTGF5ZXIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3Mg
VGlsZUdyaWQ7CitjbGFzcyBMZWdhY3lUaWxlR3JpZDsKIH07CiAKLUBpbnRlcmZhY2UgVGlsZUxh
eWVyIDogQ0FMYXllciB7Ci0gICAgV2ViQ29yZTo6VGlsZUdyaWQqIF90aWxlR3JpZDsKK0BpbnRl
cmZhY2UgTGVnYWN5VGlsZUxheWVyIDogQ0FMYXllciB7CisgICAgV2ViQ29yZTo6TGVnYWN5VGls
ZUdyaWQqIF90aWxlR3JpZDsKICAgICB1bnNpZ25lZCBfcGFpbnRDb3VudDsKIH0KIEBwcm9wZXJ0
eSAobm9uYXRvbWljKSB1bnNpZ25lZCBwYWludENvdW50OwotQHByb3BlcnR5IChub25hdG9taWMp
IFdlYkNvcmU6OlRpbGVHcmlkKiB0aWxlR3JpZDsKLSsgKFRpbGVMYXllciAqKWxheWVyQmVpbmdQ
YWludGVkOworQHByb3BlcnR5IChub25hdG9taWMpIFdlYkNvcmU6OkxlZ2FjeVRpbGVHcmlkKiB0
aWxlR3JpZDsKKysgKExlZ2FjeVRpbGVMYXllciAqKWxheWVyQmVpbmdQYWludGVkOwogQGVuZAog
Ci1AaW50ZXJmYWNlIFRpbGVIb3N0TGF5ZXIgOiBDQUxheWVyIHsKLSAgICBXZWJDb3JlOjpUaWxl
R3JpZCogX3RpbGVHcmlkOworQGludGVyZmFjZSBMZWdhY3lUaWxlSG9zdExheWVyIDogQ0FMYXll
ciB7CisgICAgV2ViQ29yZTo6TGVnYWN5VGlsZUdyaWQqIF90aWxlR3JpZDsKIH0KLS0gKGlkKWlu
aXRXaXRoVGlsZUdyaWQ6KFdlYkNvcmU6OlRpbGVHcmlkKil0aWxlR3JpZDsKKy0gKGlkKWluaXRX
aXRoVGlsZUdyaWQ6KFdlYkNvcmU6OkxlZ2FjeVRpbGVHcmlkKil0aWxlR3JpZDsKIEBlbmQKIAog
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9MZWdhY3lUaWxlTGF5ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL0xlZ2FjeVRpbGVMYXllci5tbQkocmV2aXNpb24gMTY2NDUzKQkoZnJvbSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyLm1tOjE2NjQ1MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlTGF5ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
VGlsZUxheWVyLmgiCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNsdWRlICJUaWxlQ2FjaGUu
aCIKKyNpbmNsdWRlICJUaWxlR3JpZC5oIgorI2luY2x1ZGUgIldlYkNvcmVUaHJlYWQuaCIKKwor
QGltcGxlbWVudGF0aW9uIFRpbGVIb3N0TGF5ZXIKKy0gKGlkKWluaXRXaXRoVGlsZUdyaWQ6KFdl
YkNvcmU6OlRpbGVHcmlkKil0aWxlR3JpZAoreworICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07Cisg
ICAgaWYgKCFzZWxmKQorICAgICAgICByZXR1cm4gbmlsOworICAgIF90aWxlR3JpZCA9IHRpbGVH
cmlkOworICAgIFtzZWxmIHNldEFuY2hvclBvaW50OkNHUG9pbnRaZXJvXTsKKyAgICByZXR1cm4g
c2VsZjsKK30KKworLSAoaWQ8Q0FBY3Rpb24+KWFjdGlvbkZvcktleTooTlNTdHJpbmcgKilrZXkK
K3sKKyAgICBVTlVTRURfUEFSQU0oa2V5KTsKKyAgICAvLyBEaXNhYmxlIGFsbCBkZWZhdWx0IGFj
dGlvbnMKKyAgICByZXR1cm4gbmlsOworfQorCistICh2b2lkKXJlbmRlckluQ29udGV4dDooQ0dD
b250ZXh0UmVmKWNvbnRleHQKK3sKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAg
IFdlYlRocmVhZExvY2soKTsKKyAgICBfdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT5kb0xheW91dFRp
bGVzKCk7CisgICAgW3N1cGVyIHJlbmRlckluQ29udGV4dDpjb250ZXh0XTsKK30KK0BlbmQKKwor
QGltcGxlbWVudGF0aW9uIFRpbGVMYXllcgorQHN5bnRoZXNpemUgcGFpbnRDb3VudCA9IF9wYWlu
dENvdW50OworQHN5bnRoZXNpemUgdGlsZUdyaWQgPSBfdGlsZUdyaWQ7CisKK3N0YXRpYyBUaWxl
TGF5ZXIgKmxheWVyQmVpbmdQYWludGVkOworCistICh2b2lkKXNldE5lZWRzRGlzcGxheUluUmVj
dDooQ0dSZWN0KXJlY3QKK3sKKyAgICBbc2VsZiBzZXROZWVkc0xheW91dF07CisgICAgW3N1cGVy
IHNldE5lZWRzRGlzcGxheUluUmVjdDpyZWN0XTsKK30KKworLSAodm9pZClsYXlvdXRTdWJsYXll
cnMKK3sKKyAgICBpZiAocHRocmVhZF9tYWluX25wKCkpCisgICAgICAgIFdlYlRocmVhZExvY2so
KTsKKyAgICAvLyBUaGlzIG1heSB0cmlnZ2VyIFdlYktpdCBsYXlvdXQgYW5kIGdlbmVyYXRlIG1v
cmUgcmVwYWludCByZWN0cy4KKyAgICBpZiAoX3RpbGVHcmlkKQorICAgICAgICBfdGlsZUdyaWQt
PnRpbGVDYWNoZSgpLT5wcmVwYXJlVG9EcmF3KCk7Cit9CisKKy0gKHZvaWQpZHJhd0luQ29udGV4
dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKK3sKKyAgICBpZiAoX3RpbGVHcmlkKQorICAgICAgICBf
dGlsZUdyaWQtPnRpbGVDYWNoZSgpLT5kcmF3TGF5ZXIoc2VsZiwgY29udGV4dCk7Cit9CisKKy0g
KGlkPENBQWN0aW9uPilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Cit7CisgICAgVU5VU0VE
X1BBUkFNKGtleSk7CisgICAgLy8gRGlzYWJsZSBhbGwgZGVmYXVsdCBhY3Rpb25zCisgICAgcmV0
dXJuIG5pbDsKK30KKworKyAoVGlsZUxheWVyICopbGF5ZXJCZWluZ1BhaW50ZWQKK3sKKyAgICBy
ZXR1cm4gbGF5ZXJCZWluZ1BhaW50ZWQ7Cit9CisKK0BlbmQKKworI2VuZGlmIC8vIFBMQVRGT1JN
KElPUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9MZWdhY3lUaWxlTGF5ZXIu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVM
YXllci5tbQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xl
Z2FjeVRpbGVMYXllci5tbQkod29ya2luZyBjb3B5KQpAQCAtMjQsMTYgKzI0LDE2IEBACiAgKi8K
IAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRpbGVMYXllci5oIgorI2luY2x1ZGUg
IkxlZ2FjeVRpbGVMYXllci5oIgogCiAjaWYgUExBVEZPUk0oSU9TKQogCi0jaW5jbHVkZSAiVGls
ZUNhY2hlLmgiCi0jaW5jbHVkZSAiVGlsZUdyaWQuaCIKKyNpbmNsdWRlICJMZWdhY3lUaWxlQ2Fj
aGUuaCIKKyNpbmNsdWRlICJMZWdhY3lUaWxlR3JpZC5oIgogI2luY2x1ZGUgIldlYkNvcmVUaHJl
YWQuaCIKIAotQGltcGxlbWVudGF0aW9uIFRpbGVIb3N0TGF5ZXIKLS0gKGlkKWluaXRXaXRoVGls
ZUdyaWQ6KFdlYkNvcmU6OlRpbGVHcmlkKil0aWxlR3JpZAorQGltcGxlbWVudGF0aW9uIExlZ2Fj
eVRpbGVIb3N0TGF5ZXIKKy0gKGlkKWluaXRXaXRoVGlsZUdyaWQ6KFdlYkNvcmU6OkxlZ2FjeVRp
bGVHcmlkKil0aWxlR3JpZAogewogICAgIHNlbGYgPSBbc3VwZXIgaW5pdF07CiAgICAgaWYgKCFz
ZWxmKQpAQCAtNTksMTEgKzU5LDExIEBAIC0gKHZvaWQpcmVuZGVySW5Db250ZXh0OihDR0NvbnRl
eHRSZWYpY28KIH0KIEBlbmQKIAotQGltcGxlbWVudGF0aW9uIFRpbGVMYXllcgorQGltcGxlbWVu
dGF0aW9uIExlZ2FjeVRpbGVMYXllcgogQHN5bnRoZXNpemUgcGFpbnRDb3VudCA9IF9wYWludENv
dW50OwogQHN5bnRoZXNpemUgdGlsZUdyaWQgPSBfdGlsZUdyaWQ7CiAKLXN0YXRpYyBUaWxlTGF5
ZXIgKmxheWVyQmVpbmdQYWludGVkOworc3RhdGljIExlZ2FjeVRpbGVMYXllciAqbGF5ZXJCZWlu
Z1BhaW50ZWQ7CiAKIC0gKHZvaWQpc2V0TmVlZHNEaXNwbGF5SW5SZWN0OihDR1JlY3QpcmVjdAog
ewpAQCAtOTMsNyArOTMsNyBAQCAtIChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5OihOU1N0cmlu
ZyAqCiAgICAgcmV0dXJuIG5pbDsKIH0KIAotKyAoVGlsZUxheWVyICopbGF5ZXJCZWluZ1BhaW50
ZWQKKysgKExlZ2FjeVRpbGVMYXllciAqKWxheWVyQmVpbmdQYWludGVkCiB7CiAgICAgcmV0dXJu
IGxheWVyQmVpbmdQYWludGVkOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L0xlZ2FjeVRpbGVMYXllclBvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvTGVnYWN5VGlsZUxheWVyUG9vbC5oCShyZXZpc2lvbiAxNjY0NTMpCShmcm9tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXJQb29sLmg6MTY2NDUzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVMYXllclBvb2wuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBUaWxlTGF5ZXJQb29s
X2gKKyNkZWZpbmUgVGlsZUxheWVyUG9vbF9oCisKKyNpZiBQTEFURk9STShJT1MpCisKKyNpbmNs
dWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiSW50U2l6ZUhhc2guaCIKKyNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Cisj
aW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL093blB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkaW5nLmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitAY2xhc3MgVGlsZUxheWVyOworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFRpbGVMYXllclBvb2wgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFRpbGVMYXllclBvb2wpOworcHVibGljOgorICAgIHN0YXRpYyBUaWxlTGF5ZXJQb29sKiBz
aGFyZWRQb29sKCk7CisKKyAgICB2b2lkIGFkZExheWVyKGNvbnN0IFJldGFpblB0cjxUaWxlTGF5
ZXI+Jik7CisgICAgUmV0YWluUHRyPFRpbGVMYXllcj4gdGFrZUxheWVyV2l0aFNpemUoY29uc3Qg
SW50U2l6ZSYpOworCisgICAgLy8gVGhlIG1heGltdW0gc2l6ZSBvZiBhbGwgcXVldWVkIGxheWVy
cyBpbiBieXRlcy4KKyAgICB1bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fw
YWNpdHk7IH0KKyAgICB2b2lkIHNldENhcGFjaXR5KHVuc2lnbmVkKTsKKyAgICB2b2lkIGRyYWlu
KCk7CisKKyAgICB1bnNpZ25lZCBkZWNheWVkQ2FwYWNpdHkoKSBjb25zdDsKKworICAgIHN0YXRp
YyB1bnNpZ25lZCBieXRlc0JhY2tpbmdMYXllcldpdGhQaXhlbFNpemUoY29uc3QgSW50U2l6ZSYp
OworCitwcml2YXRlOgorICAgIFRpbGVMYXllclBvb2woKTsKKworICAgIHR5cGVkZWYgRGVxdWU8
UmV0YWluUHRyPFRpbGVMYXllcj4gPiBMYXllckxpc3Q7CisKKyAgICBib29sIGNhblJldXNlTGF5
ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKSBjb25zdCB7IHJldHVybiBtX2NhcGFjaXR5
ICYmICFzaXplLmlzRW1wdHkoKTsgfQorICAgIHZvaWQgc2NoZWR1bGVQcnVuZSgpOworICAgIHZv
aWQgcHJ1bmUoKTsKKyAgICB0eXBlZGVmIGVudW0geyBMZWF2ZVVuY2hhbmdlZCwgTWFya0FzVXNl
ZCB9IEFjY2Vzc1R5cGU7CisgICAgTGF5ZXJMaXN0JiBsaXN0T2ZMYXllcnNXaXRoU2l6ZShjb25z
dCBJbnRTaXplJiwgQWNjZXNzVHlwZSA9IExlYXZlVW5jaGFuZ2VkKTsKKworICAgIEhhc2hNYXA8
SW50U2l6ZSwgTGF5ZXJMaXN0PiBtX3JldXNlTGlzdHM7CisgICAgLy8gT3JkZXJlZCBieSByZWNl
bnQgdXNlLiBUaGUgbGFzdCBzaXplIGlzIHRoZSBtb3N0IHJlY2VudGx5IHVzZWQuCisgICAgVmVj
dG9yPEludFNpemU+IG1fc2l6ZXNJblBydW5lT3JkZXI7CisgICAgdW5zaWduZWQgbV90b3RhbEJ5
dGVzOworICAgIHVuc2lnbmVkIG1fY2FwYWNpdHk7CisgICAgTXV0ZXggbV9sYXllclBvb2xNdXRl
eDsKKworICAgIGRvdWJsZSBtX2xhc3RBZGRUaW1lOworICAgIGJvb2wgbV9uZWVkc1BydW5lOwor
CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPFRpbGVMYXllclBvb2w+OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gUExBVEZPUk0oSU9TKQorI2VuZGlmIC8vIFRp
bGVMYXllclBvb2xfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRp
bGVMYXllclBvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
TGVnYWN5VGlsZUxheWVyUG9vbC5oCSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9pb3MvTGVnYWN5VGlsZUxheWVyUG9vbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4
ICsyMyw4IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lm
bmRlZiBUaWxlTGF5ZXJQb29sX2gKLSNkZWZpbmUgVGlsZUxheWVyUG9vbF9oCisjaWZuZGVmIExl
Z2FjeVRpbGVMYXllclBvb2xfaAorI2RlZmluZSBMZWdhY3lUaWxlTGF5ZXJQb29sX2gKIAogI2lm
IFBMQVRGT1JNKElPUykKIApAQCAtMzksMTcgKzM5LDE3IEBACiAjaW5jbHVkZSA8d3RmL1RocmVh
ZGluZy5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAotQGNsYXNzIFRpbGVMYXllcjsKK0Bj
bGFzcyBMZWdhY3lUaWxlTGF5ZXI7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgVGls
ZUxheWVyUG9vbCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVGlsZUxheWVyUG9vbCk7Citj
bGFzcyBMZWdhY3lUaWxlTGF5ZXJQb29sIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMZWdh
Y3lUaWxlTGF5ZXJQb29sKTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgVGlsZUxheWVyUG9vbCogc2hh
cmVkUG9vbCgpOworICAgIHN0YXRpYyBMZWdhY3lUaWxlTGF5ZXJQb29sKiBzaGFyZWRQb29sKCk7
CiAKLSAgICB2b2lkIGFkZExheWVyKGNvbnN0IFJldGFpblB0cjxUaWxlTGF5ZXI+Jik7Ci0gICAg
UmV0YWluUHRyPFRpbGVMYXllcj4gdGFrZUxheWVyV2l0aFNpemUoY29uc3QgSW50U2l6ZSYpOwor
ICAgIHZvaWQgYWRkTGF5ZXIoY29uc3QgUmV0YWluUHRyPExlZ2FjeVRpbGVMYXllcj4mKTsKKyAg
ICBSZXRhaW5QdHI8TGVnYWN5VGlsZUxheWVyPiB0YWtlTGF5ZXJXaXRoU2l6ZShjb25zdCBJbnRT
aXplJik7CiAKICAgICAvLyBUaGUgbWF4aW11bSBzaXplIG9mIGFsbCBxdWV1ZWQgbGF5ZXJzIGlu
IGJ5dGVzLgogICAgIHVuc2lnbmVkIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gbV9jYXBhY2l0
eTsgfQpAQCAtNjEsOSArNjEsOSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHVuc2lnbmVkIGJ5dGVz
QmFja2luZ0xheWVyV2l0aFBpeGVsU2l6ZShjb25zdCBJbnRTaXplJik7CiAKIHByaXZhdGU6Ci0g
ICAgVGlsZUxheWVyUG9vbCgpOworICAgIExlZ2FjeVRpbGVMYXllclBvb2woKTsKIAotICAgIHR5
cGVkZWYgRGVxdWU8UmV0YWluUHRyPFRpbGVMYXllcj4gPiBMYXllckxpc3Q7CisgICAgdHlwZWRl
ZiBEZXF1ZTxSZXRhaW5QdHI8TGVnYWN5VGlsZUxheWVyPiA+IExheWVyTGlzdDsKIAogICAgIGJv
b2wgY2FuUmV1c2VMYXllcldpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUpIGNvbnN0IHsgcmV0
dXJuIG1fY2FwYWNpdHkgJiYgIXNpemUuaXNFbXB0eSgpOyB9CiAgICAgdm9pZCBzY2hlZHVsZVBy
dW5lKCk7CkBAIC04MSw3ICs4MSw3IEBAIHByaXZhdGU6CiAgICAgZG91YmxlIG1fbGFzdEFkZFRp
bWU7CiAgICAgYm9vbCBtX25lZWRzUHJ1bmU7CiAKLSAgICBmcmllbmQgTmV2ZXJEZXN0cm95ZWQ8
VGlsZUxheWVyUG9vbD47CisgICAgZnJpZW5kIE5ldmVyRGVzdHJveWVkPExlZ2FjeVRpbGVMYXll
clBvb2w+OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVMYXllclBvb2wubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVMYXllclBvb2wubW0JKHJldmlzaW9u
IDE2NjQ1MykJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXllclBvb2wu
bW06MTY2NDUzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVMYXll
clBvb2wubW0JKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGlsZUxheWVyUG9vbC5oIgorCisjaWYgUExB
VEZPUk0oSU9TKQorCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lbW9yeVByZXNz
dXJlSGFuZGxlci5oIgorI2luY2x1ZGUgIlRpbGVMYXllci5oIgorI2luY2x1ZGUgIlRpbGVHcmlk
LmgiCisjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0IGRvdWJsZSBj
YXBhY2l0eURlY2F5VGltZSA9IDU7CisKK1RpbGVMYXllclBvb2w6OlRpbGVMYXllclBvb2woKQor
ICAgIDogbV90b3RhbEJ5dGVzKDApCisgICAgLCBtX2NhcGFjaXR5KDApCisgICAgLCBtX2xhc3RB
ZGRUaW1lKDApCisgICAgLCBtX25lZWRzUHJ1bmUoZmFsc2UpCit7Cit9CisKK1RpbGVMYXllclBv
b2wqIFRpbGVMYXllclBvb2w6OnNoYXJlZFBvb2woKQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ry
b3llZDxUaWxlTGF5ZXJQb29sPiBzaGFyZWRQb29sOworICAgIHJldHVybiAmc2hhcmVkUG9vbC5n
ZXQoKTsKK30KKwordW5zaWduZWQgVGlsZUxheWVyUG9vbDo6Ynl0ZXNCYWNraW5nTGF5ZXJXaXRo
UGl4ZWxTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAgcmV0dXJuIHNpemUud2lkdGgo
KSAqIHNpemUuaGVpZ2h0KCkgKiA0OworfQorCitUaWxlTGF5ZXJQb29sOjpMYXllckxpc3QmIFRp
bGVMYXllclBvb2w6Omxpc3RPZkxheWVyc1dpdGhTaXplKGNvbnN0IEludFNpemUmIHNpemUsIEFj
Y2Vzc1R5cGUgYWNjZXNzVHlwZSkKK3sKKyAgICBBU1NFUlQoIW1fbGF5ZXJQb29sTXV0ZXgudHJ5
TG9jaygpKTsKKyAgICBIYXNoTWFwPEludFNpemUsIExheWVyTGlzdD46Oml0ZXJhdG9yIGl0ID0g
bV9yZXVzZUxpc3RzLmZpbmQoc2l6ZSk7CisgICAgaWYgKGl0ID09IG1fcmV1c2VMaXN0cy5lbmQo
KSkgeworICAgICAgICBpdCA9IG1fcmV1c2VMaXN0cy5hZGQoc2l6ZSwgTGF5ZXJMaXN0KCkpLml0
ZXJhdG9yOworICAgICAgICBtX3NpemVzSW5QcnVuZU9yZGVyLmFwcGVuZChzaXplKTsKKyAgICB9
IGVsc2UgaWYgKGFjY2Vzc1R5cGUgPT0gTWFya0FzVXNlZCkgeworICAgICAgICBtX3NpemVzSW5Q
cnVuZU9yZGVyLnJlbW92ZShtX3NpemVzSW5QcnVuZU9yZGVyLnJldmVyc2VGaW5kKHNpemUpKTsK
KyAgICAgICAgbV9zaXplc0luUHJ1bmVPcmRlci5hcHBlbmQoc2l6ZSk7CisgICAgfQorICAgIHJl
dHVybiBpdC0+dmFsdWU7Cit9CisKK3ZvaWQgVGlsZUxheWVyUG9vbDo6YWRkTGF5ZXIoY29uc3Qg
UmV0YWluUHRyPFRpbGVMYXllcj4mIGxheWVyKQoreworICAgIEludFNpemUgbGF5ZXJTaXplKFts
YXllci5nZXQoKSBmcmFtZV0uc2l6ZSk7CisgICAgbGF5ZXJTaXplLnNjYWxlKFtsYXllci5nZXQo
KSBjb250ZW50c1NjYWxlXSk7CisgICAgaWYgKCFjYW5SZXVzZUxheWVyV2l0aFNpemUobGF5ZXJT
aXplKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKG1lbW9yeVByZXNzdXJlSGFuZGxlcigp
Lmhhc1JlY2VpdmVkTWVtb3J5UHJlc3N1cmUoKSkgeworICAgICAgICBMT0coTWVtb3J5UHJlc3N1
cmUsICJVbmRlciBtZW1vcnkgcHJlc3N1cmU6ICVzLCB0b3RhbEJ5dGVzOiAlZCIsIF9fUFJFVFRZ
X0ZVTkNUSU9OX18sIG1fdG90YWxCeXRlcyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBNdXRleExvY2tlciBsb2NrZXIobV9sYXllclBvb2xNdXRleCk7CisgICAgbGlzdE9mTGF5ZXJz
V2l0aFNpemUobGF5ZXJTaXplKS5wcmVwZW5kKGxheWVyKTsKKyAgICBtX3RvdGFsQnl0ZXMgKz0g
Ynl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKGxheWVyU2l6ZSk7CisKKyAgICBtX2xhc3RB
ZGRUaW1lID0gY3VycmVudFRpbWUoKTsKKyAgICBzY2hlZHVsZVBydW5lKCk7Cit9CisKK1JldGFp
blB0cjxUaWxlTGF5ZXI+IFRpbGVMYXllclBvb2w6OnRha2VMYXllcldpdGhTaXplKGNvbnN0IElu
dFNpemUmIHNpemUpCit7CisgICAgaWYgKCFjYW5SZXVzZUxheWVyV2l0aFNpemUoc2l6ZSkpCisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbGF5ZXJQb29sTXV0
ZXgpOworICAgIExheWVyTGlzdCYgcmV1c2VMaXN0ID0gbGlzdE9mTGF5ZXJzV2l0aFNpemUoc2l6
ZSwgTWFya0FzVXNlZCk7CisgICAgaWYgKHJldXNlTGlzdC5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgbV90b3RhbEJ5dGVzIC09IGJ5dGVzQmFja2luZ0xheWVyV2l0aFBpeGVs
U2l6ZShzaXplKTsKKyAgICByZXR1cm4gcmV1c2VMaXN0LnRha2VGaXJzdCgpOworfQorCit2b2lk
IFRpbGVMYXllclBvb2w6OnNldENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5KQoreworICAgIE11
dGV4TG9ja2VyIHJldXNlTG9ja2VyKG1fbGF5ZXJQb29sTXV0ZXgpOworICAgIGlmIChjYXBhY2l0
eSA8IG1fY2FwYWNpdHkpCisgICAgICAgIHNjaGVkdWxlUHJ1bmUoKTsKKyAgICBtX2NhcGFjaXR5
ID0gY2FwYWNpdHk7Cit9CisgICAgCit1bnNpZ25lZCBUaWxlTGF5ZXJQb29sOjpkZWNheWVkQ2Fw
YWNpdHkoKSBjb25zdAoreworICAgIC8vIERlY2F5IHRvIG9uZSBxdWFydGVyIG92ZXIgY2FwYWNp
dHlEZWNheVRpbWUKKyAgICBkb3VibGUgdGltZVNpbmNlTGFzdEFkZCA9IGN1cnJlbnRUaW1lKCkg
LSBtX2xhc3RBZGRUaW1lOworICAgIGlmICh0aW1lU2luY2VMYXN0QWRkID4gY2FwYWNpdHlEZWNh
eVRpbWUpCisgICAgICAgIHJldHVybiBtX2NhcGFjaXR5IC8gNDsKKyAgICBmbG9hdCBkZWNheVBy
b2dlc3MgPSBmbG9hdCh0aW1lU2luY2VMYXN0QWRkIC8gY2FwYWNpdHlEZWNheVRpbWUpOworICAg
IHJldHVybiBtX2NhcGFjaXR5IC8gNCArIG1fY2FwYWNpdHkgKiAzIC8gNCAqICgxLmYgLSBkZWNh
eVByb2dlc3MpOworfQorCit2b2lkIFRpbGVMYXllclBvb2w6OnNjaGVkdWxlUHJ1bmUoKQorewor
ICAgIEFTU0VSVCghbV9sYXllclBvb2xNdXRleC50cnlMb2NrKCkpOworICAgIGlmIChtX25lZWRz
UHJ1bmUpCisgICAgICAgIHJldHVybjsKKyAgICBtX25lZWRzUHJ1bmUgPSB0cnVlOworICAgIGRp
c3BhdGNoX3RpbWVfdCBuZXh0UHJ1bmVUaW1lID0gZGlzcGF0Y2hfdGltZShESVNQQVRDSF9USU1F
X05PVywgMSAqIE5TRUNfUEVSX1NFQyk7CisgICAgZGlzcGF0Y2hfYWZ0ZXIobmV4dFBydW5lVGlt
ZSwgZGlzcGF0Y2hfZ2V0X2dsb2JhbF9xdWV1ZShESVNQQVRDSF9RVUVVRV9QUklPUklUWV9ERUZB
VUxULCAwKSwgXnsKKyAgICAgICAgcHJ1bmUoKTsKKyAgICB9KTsKK30KKwordm9pZCBUaWxlTGF5
ZXJQb29sOjpwcnVuZSgpCit7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fbGF5ZXJQb29sTXV0
ZXgpOworICAgIEFTU0VSVChtX25lZWRzUHJ1bmUpOworICAgIG1fbmVlZHNQcnVuZSA9IGZhbHNl
OworICAgIHVuc2lnbmVkIHNocmlua1RvID0gZGVjYXllZENhcGFjaXR5KCk7CisgICAgd2hpbGUg
KG1fdG90YWxCeXRlcyA+IHNocmlua1RvKSB7CisgICAgICAgIEFTU0VSVCghbV9zaXplc0luUHJ1
bmVPcmRlci5pc0VtcHR5KCkpOworICAgICAgICBJbnRTaXplIHNpemVUb0Ryb3AgPSBtX3NpemVz
SW5QcnVuZU9yZGVyLmZpcnN0KCk7CisgICAgICAgIExheWVyTGlzdCYgb2xkZXN0UmV1c2VMaXN0
ID0gbV9yZXVzZUxpc3RzLmZpbmQoc2l6ZVRvRHJvcCktPnZhbHVlOworICAgICAgICBpZiAob2xk
ZXN0UmV1c2VMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgbV9yZXVzZUxpc3RzLnJlbW92
ZShzaXplVG9Ecm9wKTsKKyAgICAgICAgICAgIG1fc2l6ZXNJblBydW5lT3JkZXIucmVtb3ZlKDAp
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyNpZiBMT0dfVElMSU5HCisgICAg
ICAgIE5TTG9nKEAiZHJvcHBpbmcgbGF5ZXIgb2Ygc2l6ZSAlZCB4ICVkIiwgc2l6ZVRvRHJvcC53
aWR0aCgpLCBzaXplVG9Ecm9wLmhlaWdodCgpKTsKKyNlbmRpZgorICAgICAgICBtX3RvdGFsQnl0
ZXMgLT0gYnl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKHNpemVUb0Ryb3ApOworICAgICAg
ICAvLyBUaGUgbGFzdCBlbGVtZW50IGluIHRoZSBsaXN0IGlzIHRoZSBvbGRlc3QsIGhlbmNlIG1v
c3QgbGlrZWx5IG5vdCB0bworICAgICAgICAvLyBzdGlsbCBoYXZlIGEgYmFja2luZyBzdG9yZS4K
KyAgICAgICAgb2xkZXN0UmV1c2VMaXN0LnJlbW92ZUxhc3QoKTsKKyAgICB9CisgICAgaWYgKGN1
cnJlbnRUaW1lKCkgLSBtX2xhc3RBZGRUaW1lIDw9IGNhcGFjaXR5RGVjYXlUaW1lKQorICAgICAg
ICBzY2hlZHVsZVBydW5lKCk7Cit9CisKK3ZvaWQgVGlsZUxheWVyUG9vbDo6ZHJhaW4oKQorewor
ICAgIE11dGV4TG9ja2VyIHJldXNlTG9ja2VyKG1fbGF5ZXJQb29sTXV0ZXgpOworICAgIG1fcmV1
c2VMaXN0cy5jbGVhcigpOworICAgIG1fc2l6ZXNJblBydW5lT3JkZXIuY2xlYXIoKTsKKyAgICBt
X3RvdGFsQnl0ZXMgPSAwOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvTGVnYWN5
VGlsZUxheWVyUG9vbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvTGVnYWN5VGlsZUxheWVyUG9vbC5tbQkod29ya2luZyBjb3B5KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL0xlZ2FjeVRpbGVMYXllclBvb2wubW0JKHdvcmtpbmcgY29weSkKQEAg
LTI0LDE0ICsyNCwxNCBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJU
aWxlTGF5ZXJQb29sLmgiCisjaW5jbHVkZSAiTGVnYWN5VGlsZUxheWVyUG9vbC5oIgogCiAjaWYg
UExBVEZPUk0oSU9TKQogCisjaW5jbHVkZSAiTGVnYWN5VGlsZUxheWVyLmgiCisjaW5jbHVkZSAi
TGVnYWN5VGlsZUdyaWQuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVtb3J5
UHJlc3N1cmVIYW5kbGVyLmgiCi0jaW5jbHVkZSAiVGlsZUxheWVyLmgiCi0jaW5jbHVkZSAiVGls
ZUdyaWQuaCIKICNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRlIDx3dGYvTmV2
ZXJEZXN0cm95ZWQuaD4KIApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHN0YXRpYyBjb25zdCBkb3VibGUgY2FwYWNpdHlEZWNheVRpbWUgPSA1OwogCi1UaWxlTGF5ZXJQ
b29sOjpUaWxlTGF5ZXJQb29sKCkKK0xlZ2FjeVRpbGVMYXllclBvb2w6OkxlZ2FjeVRpbGVMYXll
clBvb2woKQogICAgIDogbV90b3RhbEJ5dGVzKDApCiAgICAgLCBtX2NhcGFjaXR5KDApCiAgICAg
LCBtX2xhc3RBZGRUaW1lKDApCkBAIC00NywxOCArNDcsMTggQEAgVGlsZUxheWVyUG9vbDo6VGls
ZUxheWVyUG9vbCgpCiB7CiB9CiAKLVRpbGVMYXllclBvb2wqIFRpbGVMYXllclBvb2w6OnNoYXJl
ZFBvb2woKQorTGVnYWN5VGlsZUxheWVyUG9vbCogTGVnYWN5VGlsZUxheWVyUG9vbDo6c2hhcmVk
UG9vbCgpCiB7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFRpbGVMYXllclBvb2w+IHNoYXJl
ZFBvb2w7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPExlZ2FjeVRpbGVMYXllclBvb2w+IHNo
YXJlZFBvb2w7CiAgICAgcmV0dXJuICZzaGFyZWRQb29sLmdldCgpOwogfQogCi11bnNpZ25lZCBU
aWxlTGF5ZXJQb29sOjpieXRlc0JhY2tpbmdMYXllcldpdGhQaXhlbFNpemUoY29uc3QgSW50U2l6
ZSYgc2l6ZSkKK3Vuc2lnbmVkIExlZ2FjeVRpbGVMYXllclBvb2w6OmJ5dGVzQmFja2luZ0xheWVy
V2l0aFBpeGVsU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIHJldHVybiBzaXplLndp
ZHRoKCkgKiBzaXplLmhlaWdodCgpICogNDsKIH0KIAotVGlsZUxheWVyUG9vbDo6TGF5ZXJMaXN0
JiBUaWxlTGF5ZXJQb29sOjpsaXN0T2ZMYXllcnNXaXRoU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
LCBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUpCitMZWdhY3lUaWxlTGF5ZXJQb29sOjpMYXllckxpc3Qm
IExlZ2FjeVRpbGVMYXllclBvb2w6Omxpc3RPZkxheWVyc1dpdGhTaXplKGNvbnN0IEludFNpemUm
IHNpemUsIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSkKIHsKICAgICBBU1NFUlQoIW1fbGF5ZXJQb29s
TXV0ZXgudHJ5TG9jaygpKTsKICAgICBIYXNoTWFwPEludFNpemUsIExheWVyTGlzdD46Oml0ZXJh
dG9yIGl0ID0gbV9yZXVzZUxpc3RzLmZpbmQoc2l6ZSk7CkBAIC03Miw3ICs3Miw3IEBAIFRpbGVM
YXllclBvb2w6OkxheWVyTGlzdCYgVGlsZUxheWVyUG9vbDoKICAgICByZXR1cm4gaXQtPnZhbHVl
OwogfQogCi12b2lkIFRpbGVMYXllclBvb2w6OmFkZExheWVyKGNvbnN0IFJldGFpblB0cjxUaWxl
TGF5ZXI+JiBsYXllcikKK3ZvaWQgTGVnYWN5VGlsZUxheWVyUG9vbDo6YWRkTGF5ZXIoY29uc3Qg
UmV0YWluUHRyPExlZ2FjeVRpbGVMYXllcj4mIGxheWVyKQogewogICAgIEludFNpemUgbGF5ZXJT
aXplKFtsYXllci5nZXQoKSBmcmFtZV0uc2l6ZSk7CiAgICAgbGF5ZXJTaXplLnNjYWxlKFtsYXll
ci5nZXQoKSBjb250ZW50c1NjYWxlXSk7CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgVGlsZUxheWVy
UG9vbDo6YWRkTGF5ZXIoY29uc3QgUmV0YWkKICAgICBzY2hlZHVsZVBydW5lKCk7CiB9CiAKLVJl
dGFpblB0cjxUaWxlTGF5ZXI+IFRpbGVMYXllclBvb2w6OnRha2VMYXllcldpdGhTaXplKGNvbnN0
IEludFNpemUmIHNpemUpCitSZXRhaW5QdHI8TGVnYWN5VGlsZUxheWVyPiBMZWdhY3lUaWxlTGF5
ZXJQb29sOjp0YWtlTGF5ZXJXaXRoU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQogewogICAgIGlm
ICghY2FuUmV1c2VMYXllcldpdGhTaXplKHNpemUpKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAt
MTA0LDcgKzEwNCw3IEBAIFJldGFpblB0cjxUaWxlTGF5ZXI+IFRpbGVMYXllclBvb2w6OnRha2UK
ICAgICByZXR1cm4gcmV1c2VMaXN0LnRha2VGaXJzdCgpOwogfQogCi12b2lkIFRpbGVMYXllclBv
b2w6OnNldENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5KQordm9pZCBMZWdhY3lUaWxlTGF5ZXJQ
b29sOjpzZXRDYXBhY2l0eSh1bnNpZ25lZCBjYXBhY2l0eSkKIHsKICAgICBNdXRleExvY2tlciBy
ZXVzZUxvY2tlcihtX2xheWVyUG9vbE11dGV4KTsKICAgICBpZiAoY2FwYWNpdHkgPCBtX2NhcGFj
aXR5KQpAQCAtMTEyLDcgKzExMiw3IEBAIHZvaWQgVGlsZUxheWVyUG9vbDo6c2V0Q2FwYWNpdHko
dW5zaWduZWQKICAgICBtX2NhcGFjaXR5ID0gY2FwYWNpdHk7CiB9CiAgICAgCi11bnNpZ25lZCBU
aWxlTGF5ZXJQb29sOjpkZWNheWVkQ2FwYWNpdHkoKSBjb25zdAordW5zaWduZWQgTGVnYWN5VGls
ZUxheWVyUG9vbDo6ZGVjYXllZENhcGFjaXR5KCkgY29uc3QKIHsKICAgICAvLyBEZWNheSB0byBv
bmUgcXVhcnRlciBvdmVyIGNhcGFjaXR5RGVjYXlUaW1lCiAgICAgZG91YmxlIHRpbWVTaW5jZUxh
c3RBZGQgPSBjdXJyZW50VGltZSgpIC0gbV9sYXN0QWRkVGltZTsKQEAgLTEyMiw3ICsxMjIsNyBA
QCB1bnNpZ25lZCBUaWxlTGF5ZXJQb29sOjpkZWNheWVkQ2FwYWNpdHkoCiAgICAgcmV0dXJuIG1f
Y2FwYWNpdHkgLyA0ICsgbV9jYXBhY2l0eSAqIDMgLyA0ICogKDEuZiAtIGRlY2F5UHJvZ2Vzcyk7
CiB9CiAKLXZvaWQgVGlsZUxheWVyUG9vbDo6c2NoZWR1bGVQcnVuZSgpCit2b2lkIExlZ2FjeVRp
bGVMYXllclBvb2w6OnNjaGVkdWxlUHJ1bmUoKQogewogICAgIEFTU0VSVCghbV9sYXllclBvb2xN
dXRleC50cnlMb2NrKCkpOwogICAgIGlmIChtX25lZWRzUHJ1bmUpCkBAIC0xMzQsNyArMTM0LDcg
QEAgdm9pZCBUaWxlTGF5ZXJQb29sOjpzY2hlZHVsZVBydW5lKCkKICAgICB9KTsKIH0KIAotdm9p
ZCBUaWxlTGF5ZXJQb29sOjpwcnVuZSgpCit2b2lkIExlZ2FjeVRpbGVMYXllclBvb2w6OnBydW5l
KCkKIHsKICAgICBNdXRleExvY2tlciBsb2NrZXIobV9sYXllclBvb2xNdXRleCk7CiAgICAgQVNT
RVJUKG1fbmVlZHNQcnVuZSk7CkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBUaWxlTGF5ZXJQb29s
OjpwcnVuZSgpCiAgICAgICAgIHNjaGVkdWxlUHJ1bmUoKTsKIH0KIAotdm9pZCBUaWxlTGF5ZXJQ
b29sOjpkcmFpbigpCit2b2lkIExlZ2FjeVRpbGVMYXllclBvb2w6OmRyYWluKCkKIHsKICAgICBN
dXRleExvY2tlciByZXVzZUxvY2tlcihtX2xheWVyUG9vbE11dGV4KTsKICAgICBtX3JldXNlTGlz
dHMuY2xlYXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxWaWV3
SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9TY3JvbGxW
aWV3SU9TLm1tCShyZXZpc2lvbiAxNjY0NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9p
b3MvU2Nyb2xsVmlld0lPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM2LDcgKzIzNiw3IEBAIElu
dFNpemUgU2Nyb2xsVmlldzo6cGxhdGZvcm1WaXNpYmxlQ29udGUKICAgICByZXR1cm4gSW50U2l6
ZSgpOwogfQogCi1UaWxlQ2FjaGUqIFNjcm9sbFZpZXc6OnRpbGVDYWNoZSgpCitMZWdhY3lUaWxl
Q2FjaGUqIFNjcm9sbFZpZXc6OmxlZ2FjeVRpbGVDYWNoZSgpCiB7CiAgICAgLy8gTWFrZSB0aWxl
IGNhY2hlIHBvaW50ZXIgYXZhaWxhYmxlIHZpYSB0aGUgbWFpbiBmcmFtZSBvbmx5LiBUaWxlIGNh
Y2hlIGludGVyYWN0aW9uIHNob3VsZCBiZSBtYW5hZ2VkIGJ5CiAgICAgLy8gdGhlIG1haW4gZnJh
bWUgYW5kIHRoaXMgYXZvaWRzIGhhdmluZyB0byBhZGQgcGFyZW50IGNoZWNrcyB0byBhbGwgY2Fs
bCBzaXRlcy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlQ2FjaGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUNhY2hlLmgJKHJl
dmlzaW9uIDE2NjQ1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlQ2FjaGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMSwyMTggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYg
VGlsZUNhY2hlX2gKLSNkZWZpbmUgVGlsZUNhY2hlX2gKLQotI2lmIFBMQVRGT1JNKElPUykKLQot
I2luY2x1ZGUgIkNvbG9yLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCi0jaW5jbHVkZSAiSW50
UmVjdC5oIgotI2luY2x1ZGUgIkludFNpemUuaCIKLSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNsdWRl
IDx3dGYvUGFzc093blB0ci5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVk
ZSA8d3RmL1JldGFpblB0ci5oPgotI2luY2x1ZGUgPHd0Zi9UaHJlYWRpbmcuaD4KLSNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+Ci0KLSNpZmRlZiBfX09CSkNfXwotQGNsYXNzIENBTGF5ZXI7Ci1AY2xh
c3MgVGlsZUNhY2hlVG9tYnN0b25lOwotQGNsYXNzIFRpbGVMYXllcjsKLUBjbGFzcyBXQUtXaW5k
b3c7Ci0jZWxzZQotY2xhc3MgQ0FMYXllcjsKLWNsYXNzIFRpbGVDYWNoZVRvbWJzdG9uZTsKLWNs
YXNzIFRpbGVMYXllcjsKLWNsYXNzIFdBS1dpbmRvdzsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIFRpbGVHcmlkOwotCi1jbGFzcyBUaWxlQ2FjaGUgewotICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFRpbGVDYWNoZSk7Ci1wdWJsaWM6Ci0gICAgVGlsZUNhY2hlKFdBS1dp
bmRvdyopOwotICAgIH5UaWxlQ2FjaGUoKTsKLQotICAgIENHRmxvYXQgc2NyZWVuU2NhbGUoKSBj
b25zdDsKLQotICAgIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCk7Ci0gICAgdm9pZCBzZXROZWVkc0Rp
c3BsYXlJblJlY3QoY29uc3QgSW50UmVjdCYpOwotICAgIAotICAgIHZvaWQgbGF5b3V0VGlsZXMo
KTsKLSAgICB2b2lkIGxheW91dFRpbGVzTm93KCk7Ci0gICAgdm9pZCBsYXlvdXRUaWxlc05vd0Zv
clJlY3QoY29uc3QgSW50UmVjdCYpOwotICAgIHZvaWQgcmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVz
KCk7Ci0gICAgdm9pZCByZW1vdmVBbGxUaWxlcygpOwotICAgIHZvaWQgcmVtb3ZlRm9yZWdyb3Vu
ZFRpbGVzKCk7Ci0KLSAgICAvLyBJZiAnY29udGVudFJlcGxhY2VtZW50SW1hZ2UnIGlzIG5vdCBO
VUxMLCBkcmF3TGF5ZXIoKSBkcmF3cwotICAgIC8vIGNvbnRlbnRSZXBsYWNlbWVudEltYWdlIGlu
c3RlYWQgb2YgdGhlIHBhZ2UgY29udGVudC4gV2UgYXNzdW1lIHRoZQotICAgIC8vIGltYWdlIGlz
IHRvIGJlIGRyYXduIGF0IHRoZSBvcmlnaW4gYW5kIHNjYWxlZCB0byBtYXRjaCBkZXZpY2UgcGl4
ZWxzLgotICAgIHZvaWQgc2V0Q29udGVudFJlcGxhY2VtZW50SW1hZ2UoUmV0YWluUHRyPENHSW1h
Z2VSZWY+KTsKLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gY29udGVudFJlcGxhY2VtZW50SW1h
Z2UoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0VGlsZUJvcmRlcnNWaXNpYmxlKGJvb2wpOwotICAg
IGJvb2wgdGlsZUJvcmRlcnNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV90aWxlQm9yZGVyc1Zp
c2libGU7IH0KLQotICAgIHZvaWQgc2V0VGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKGJvb2wpOwot
ICAgIGJvb2wgdGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKCkgY29uc3QgeyByZXR1cm4gbV90aWxl
UGFpbnRDb3VudGVyc1Zpc2libGU7IH0KLQotICAgIHZvaWQgc2V0QWNjZWxlcmF0ZWREcmF3aW5n
RW5hYmxlZChib29sIGVuYWJsZWQpIHsgbV9hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkID0gZW5h
YmxlZDsgfQotICAgIGJvb2wgYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZCgpIGNvbnN0IHsgcmV0
dXJuIG1fYWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxlZDsgfQotCi0gICAgdm9pZCBzZXRLZWVwc1pv
b21lZE91dFRpbGVzKGJvb2wpOwotICAgIGJvb2wga2VlcHNab29tZWRPdXRUaWxlcygpIGNvbnN0
IHsgcmV0dXJuIG1fa2VlcHNab29tZWRPdXRUaWxlczsgfQotCi0gICAgdm9pZCBzZXRab29tZWRP
dXRTY2FsZShmbG9hdCk7Ci0gICAgZmxvYXQgem9vbWVkT3V0U2NhbGUoKSBjb25zdDsKLSAgICAK
LSAgICB2b2lkIHNldEN1cnJlbnRTY2FsZShmbG9hdCk7Ci0gICAgZmxvYXQgY3VycmVudFNjYWxl
KCkgY29uc3Q7Ci0gICAgCi0gICAgYm9vbCB0aWxlc09wYXF1ZSgpIGNvbnN0OwotICAgIHZvaWQg
c2V0VGlsZXNPcGFxdWUoYm9vbCk7Ci0gICAgCi0gICAgZW51bSBUaWxpbmdNb2RlIHsKLSAgICAg
ICAgTm9ybWFsLAotICAgICAgICBNaW5pbWFsLAotICAgICAgICBQYW5uaW5nLAotICAgICAgICBa
b29taW5nLAotICAgICAgICBEaXNhYmxlZCwKLSAgICAgICAgU2Nyb2xsVG9Ub3AKLSAgICB9Owot
ICAgIFRpbGluZ01vZGUgdGlsaW5nTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fdGlsaW5nTW9kZTsg
fQotICAgIHZvaWQgc2V0VGlsaW5nTW9kZShUaWxpbmdNb2RlKTsKLQotICAgIHR5cGVkZWYgZW51
bSB7Ci0gICAgICAgIFRpbGluZ0RpcmVjdGlvblVwLAotICAgICAgICBUaWxpbmdEaXJlY3Rpb25E
b3duLAotICAgICAgICBUaWxpbmdEaXJlY3Rpb25MZWZ0LAotICAgICAgICBUaWxpbmdEaXJlY3Rp
b25SaWdodCwKLSAgICB9IFRpbGluZ0RpcmVjdGlvbjsKLSAgICB2b2lkIHNldFRpbGluZ0RpcmVj
dGlvbihUaWxpbmdEaXJlY3Rpb24pOwotICAgIFRpbGluZ0RpcmVjdGlvbiB0aWxpbmdEaXJlY3Rp
b24oKSBjb25zdDsKLQotICAgIGJvb2wgaGFzUGVuZGluZ0RyYXcoKSBjb25zdDsKLQotICAgIHZv
aWQgaG9zdExheWVyU2l6ZUNoYW5nZWQoKTsKLQotICAgIHN0YXRpYyB2b2lkIHNldExheWVyUG9v
bENhcGFjaXR5KHVuc2lnbmVkKTsKLSAgICBzdGF0aWMgdm9pZCBkcmFpbkxheWVyUG9vbCgpOwot
Ci0gICAgLy8gTG9nZ2luZwotICAgIHZvaWQgZHVtcFRpbGVzKCk7Ci0KLSAgICAvLyBJbnRlcm5h
bAotICAgIHZvaWQgZG9MYXlvdXRUaWxlcygpOwotICAgIHZvaWQgZHJhd0xheWVyKFRpbGVMYXll
ciosIENHQ29udGV4dFJlZik7Ci0gICAgdm9pZCBwcmVwYXJlVG9EcmF3KCk7Ci0gICAgdm9pZCBm
aW5pc2hlZENyZWF0aW5nVGlsZXMoYm9vbCBkaWRDcmVhdGVUaWxlcywgYm9vbCBjcmVhdGVNb3Jl
KTsKLSAgICBGbG9hdFJlY3QgdmlzaWJsZVJlY3RJbkxheWVyKENBTGF5ZXIgKikgY29uc3Q7Ci0g
ICAgQ0FMYXllciogaG9zdExheWVyKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgdGlsZUNhcGFjaXR5
Rm9yR3JpZChUaWxlR3JpZCopOwotICAgIENvbG9yIGNvbG9yRm9yR3JpZFRpbGVCb3JkZXIoVGls
ZUdyaWQqKSBjb25zdDsKLQotICAgIHZvaWQgZG9QZW5kaW5nUmVwYWludHMoKTsKLQotICAgIGJv
b2wgaXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
U3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkOyB9Ci0gICAgdm9pZCBzZXRTcGVjdWxhdGl2
ZVRpbGVDcmVhdGlvbkVuYWJsZWQoYm9vbCk7Ci0gICAgCi0gICAgZW51bSBTeW5jaHJvbm91c1Rp
bGVDcmVhdGlvbk1vZGUgeyBDb3ZlclZpc2libGVPbmx5LCBDb3ZlclNwZWN1bGF0aXZlIH07Ci0K
LXByaXZhdGU6Ci0gICAgVGlsZUdyaWQqIGFjdGl2ZVRpbGVHcmlkKCkgY29uc3Q7Ci0gICAgVGls
ZUdyaWQqIGluYWN0aXZlVGlsZUdyaWQoKSBjb25zdDsKLQotICAgIHZvaWQgdXBkYXRlVGlsaW5n
TW9kZSgpOwotICAgIGJvb2wgaXNUaWxlSW52YWxpZGF0aW9uU3VzcGVuZGVkKCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc1RpbGVDcmVhdGlvblN1c3BlbmRlZCgpIGNvbnN0OwotICAgIHZvaWQgZmx1c2hT
YXZlZERpc3BsYXlSZWN0cygpOwotICAgIHZvaWQgaW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJl
Y3QmIGRpcnR5UmVjdCk7Ci0gICAgdm9pZCBzZXRab29tZWRPdXRTY2FsZUludGVybmFsKGZsb2F0
KTsKLSAgICB2b2lkIGNvbW1pdFNjYWxlQ2hhbmdlKCk7Ci0gICAgdm9pZCBicmluZ0FjdGl2ZVRp
bGVHcmlkVG9Gcm9udCgpOwotICAgIHZvaWQgYWRqdXN0VGlsZUdyaWRUcmFuc2Zvcm1zKCk7Ci0g
ICAgdm9pZCByZW1vdmVBbGxOb25WaXNpYmxlVGlsZXNJbnRlcm5hbCgpOwotICAgIHZvaWQgY3Jl
YXRlVGlsZXNJbkFjdGl2ZUdyaWQoU3luY2hyb25vdXNUaWxlQ3JlYXRpb25Nb2RlKTsKLSAgICB2
b2lkIHNjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCk7Ci0KLSAgICB2b2lkIHRp
bGVDcmVhdGlvblRpbWVyRmlyZWQoVGltZXI8VGlsZUNhY2hlPiopOwotCi0gICAgdm9pZCBkcmF3
UmVwbGFjZW1lbnRJbWFnZShUaWxlTGF5ZXIqLCBDR0NvbnRleHRSZWYsIENHSW1hZ2VSZWYpOwot
ICAgIHZvaWQgZHJhd1dpbmRvd0NvbnRlbnQoVGlsZUxheWVyKiwgQ0dDb250ZXh0UmVmLCBDR1Jl
Y3QgZGlydHlSZWN0KTsKLQotICAgIFdBS1dpbmRvdyogbV93aW5kb3c7Ci0KLSAgICBSZXRhaW5Q
dHI8Q0dJbWFnZVJlZj4gbV9jb250ZW50UmVwbGFjZW1lbnRJbWFnZTsKLQotICAgIGJvb2wgbV9r
ZWVwc1pvb21lZE91dFRpbGVzOwotCi0gICAgYm9vbCBtX2hhc1BlbmRpbmdMYXlvdXRUaWxlczsK
LSAgICBib29sIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01vZGU7Ci0gICAgLy8gRW5zdXJlIHRo
ZXJlIGFyZSBubyBhc3luYyBjYWxscyBvbiBhIGRlYWQgdGlsZSBjYWNoZS4KLSAgICBSZXRhaW5Q
dHI8VGlsZUNhY2hlVG9tYnN0b25lPiBtX3RvbWJzdG9uZTsKLQotICAgIFRpbGluZ01vZGUgbV90
aWxpbmdNb2RlOwotICAgIFRpbGluZ0RpcmVjdGlvbiBtX3RpbGluZ0RpcmVjdGlvbjsKLQotICAg
IEludFNpemUgbV90aWxlU2l6ZTsKLSAgICBib29sIG1fdGlsZXNPcGFxdWU7Ci0KLSAgICBib29s
IG1fdGlsZUJvcmRlcnNWaXNpYmxlOwotICAgIGJvb2wgbV90aWxlUGFpbnRDb3VudGVyc1Zpc2li
bGU7Ci0gICAgYm9vbCBtX2FjY2VsZXJhdGVkRHJhd2luZ0VuYWJsZWQ7Ci0gICAgYm9vbCBtX2lz
U3BlY3VsYXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkOwotCi0gICAgYm9vbCBtX2RpZENhbGxXaWxs
U3RhcnRTY3JvbGxpbmdPclpvb21pbmc7Ci0gICAgT3duUHRyPFRpbGVHcmlkPiBtX3pvb21lZE91
dFRpbGVHcmlkOwotICAgIE93blB0cjxUaWxlR3JpZD4gbV96b29tZWRJblRpbGVHcmlkOwotCi0g
ICAgVGltZXI8VGlsZUNhY2hlPiBtX3RpbGVDcmVhdGlvblRpbWVyOwotCi0gICAgVmVjdG9yPElu
dFJlY3Q+IG1fc2F2ZWREaXNwbGF5UmVjdHM7Ci0KLSAgICBmbG9hdCBtX2N1cnJlbnRTY2FsZTsK
LQotICAgIGZsb2F0IG1fcGVuZGluZ1NjYWxlOwotICAgIGZsb2F0IG1fcGVuZGluZ1pvb21lZE91
dFNjYWxlOwotCi0gICAgbXV0YWJsZSBNdXRleCBtX3RpbGVNdXRleDsKLSAgICBtdXRhYmxlIE11
dGV4IG1fc2F2ZWREaXNwbGF5UmVjdE11dGV4OwotICAgIG11dGFibGUgTXV0ZXggbV9jb250ZW50
UmVwbGFjZW1lbnRJbWFnZU11dGV4OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gUExBVEZPUk0oSU9TKQotCi0jZW5kaWYgLy8gVGlsZUNhY2hlX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlQ2FjaGUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVDYWNoZS5tbQkocmV2aXNpb24gMTY2NDUzKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVDYWNoZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMSw4MjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJUaWxlQ2FjaGUuaCIKLQotI2lmIFBMQVRGT1JNKElPUykKLQotI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKLSNpbmNsdWRlICJNZW1vcnlQcmVzc3VyZUhhbmRsZXIuaCIKLSNpbmNsdWRlICJT
eXN0ZW1NZW1vcnkuaCIKLSNpbmNsdWRlICJUaWxlR3JpZC5oIgotI2luY2x1ZGUgIlRpbGVHcmlk
VGlsZS5oIgotI2luY2x1ZGUgIlRpbGVMYXllci5oIgotI2luY2x1ZGUgIlRpbGVMYXllclBvb2wu
aCIKLSNpbmNsdWRlICJXQUtXaW5kb3cuaCIKLSNpbmNsdWRlICJXS0dyYXBoaWNzLmgiCi0jaW5j
bHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgotI2luY2x1ZGUgIldlYkNvcmVUaHJlYWRS
dW4uaCIKLSNpbmNsdWRlIDxRdWFydHpDb3JlL1F1YXJ0ekNvcmUuaD4KLSNpbmNsdWRlIDxRdWFy
dHpDb3JlL1F1YXJ0ekNvcmVQcml2YXRlLmg+Ci0jaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+
Ci0KLUBpbnRlcmZhY2UgV0FLVmlldyAoV2ViVmlld0V4dHJhcykKLS0gKHZvaWQpX2Rpc3BhdGNo
VGlsZURpZERyYXc6KENBTGF5ZXIqKXRpbGU7Ci0tICh2b2lkKV93aWxsU3RhcnRTY3JvbGxpbmdP
clpvb21pbmc7Ci0tICh2b2lkKV9kaWRGaW5pc2hTY3JvbGxpbmdPclpvb21pbmc7Ci0tICh2b2lk
KV9kaXNwYXRjaFRpbGVEaWREcmF3OwotLSAodm9pZClfc2NoZWR1bGVMYXllckZsdXNoRm9yUGVu
ZGluZ1RpbGVDYWNoZVJlcGFpbnQ7Ci1AZW5kCi0KLUBpbnRlcmZhY2UgVGlsZUNhY2hlVG9tYnN0
b25lIDogTlNPYmplY3QgewotICAgIEJPT0wgZGVhZDsKLX0KLUBwcm9wZXJ0eShnZXR0ZXI9aXNE
ZWFkKSBCT09MIGRlYWQ7Ci0KLUBlbmQKLQotQGltcGxlbWVudGF0aW9uIFRpbGVDYWNoZVRvbWJz
dG9uZQotCi1Ac3ludGhlc2l6ZSBkZWFkOwotCi1AZW5kCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotVGlsZUNhY2hlOjpUaWxlQ2FjaGUoV0FLV2luZG93KiB3aW5kb3cpCi0gICAgOiBtX3dpbmRv
dyh3aW5kb3cpCi0gICAgLCBtX2tlZXBzWm9vbWVkT3V0VGlsZXMoZmFsc2UpCi0gICAgLCBtX2hh
c1BlbmRpbmdMYXlvdXRUaWxlcyhmYWxzZSkKLSAgICAsIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGlu
Z01vZGUoZmFsc2UpCi0gICAgLCBtX3RvbWJzdG9uZShhZG9wdE5TKFtbVGlsZUNhY2hlVG9tYnN0
b25lIGFsbG9jXSBpbml0XSkpCi0gICAgLCBtX3RpbGluZ01vZGUoTm9ybWFsKQotICAgICwgbV90
aWxpbmdEaXJlY3Rpb24oVGlsaW5nRGlyZWN0aW9uRG93bikKLSAgICAsIG1fdGlsZVNpemUoNTEy
LCA1MTIpCi0gICAgLCBtX3RpbGVzT3BhcXVlKHRydWUpCi0gICAgLCBtX3RpbGVCb3JkZXJzVmlz
aWJsZShmYWxzZSkKLSAgICAsIG1fdGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKGZhbHNlKQotICAg
ICwgbV9hY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKGZhbHNlKQotICAgICwgbV9pc1NwZWN1bGF0
aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCh0cnVlKQotICAgICwgbV9kaWRDYWxsV2lsbFN0YXJ0U2Ny
b2xsaW5nT3Jab29taW5nKGZhbHNlKQotICAgICwgbV96b29tZWRPdXRUaWxlR3JpZChQYXNzT3du
UHRyPFRpbGVHcmlkPigpKQotICAgICwgbV96b29tZWRJblRpbGVHcmlkKFBhc3NPd25QdHI8VGls
ZUdyaWQ+KCkpCi0gICAgLCBtX3RpbGVDcmVhdGlvblRpbWVyKHRoaXMsICZUaWxlQ2FjaGU6OnRp
bGVDcmVhdGlvblRpbWVyRmlyZWQpCi0gICAgLCBtX2N1cnJlbnRTY2FsZSgxLmYpCi0gICAgLCBt
X3BlbmRpbmdTY2FsZSgwKQotICAgICwgbV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUoMCkKLXsKLSAg
ICBtX3pvb21lZE91dFRpbGVHcmlkID0gVGlsZUdyaWQ6OmNyZWF0ZSh0aGlzLCBtX3RpbGVTaXpl
KTsKLSAgICBbaG9zdExheWVyKCkgaW5zZXJ0U3VibGF5ZXI6bV96b29tZWRPdXRUaWxlR3JpZC0+
dGlsZUhvc3RMYXllcigpIGF0SW5kZXg6MF07Ci0gICAgaG9zdExheWVyU2l6ZUNoYW5nZWQoKTsK
LX0KLQotVGlsZUNhY2hlOjp+VGlsZUNhY2hlKCkKLXsKLSAgICBbbV90b21ic3RvbmUuZ2V0KCkg
c2V0RGVhZDp0cnVlXTsKLX0KLQotQ0dGbG9hdCBUaWxlQ2FjaGU6OnNjcmVlblNjYWxlKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gW21fd2luZG93IHNjcmVlblNjYWxlXTsKLX0KLQotQ0FMYXllciog
VGlsZUNhY2hlOjpob3N0TGF5ZXIoKSBjb25zdAotewotICAgIHJldHVybiBbbV93aW5kb3cgaG9z
dExheWVyXTsKLX0KLQotRmxvYXRSZWN0IFRpbGVDYWNoZTo6dmlzaWJsZVJlY3RJbkxheWVyKENB
TGF5ZXIgKmxheWVyKSBjb25zdAotewotICAgIHJldHVybiBbbGF5ZXIgY29udmVydFJlY3Q6W21f
d2luZG93IGV4dGVuZGVkVmlzaWJsZVJlY3RdIGZyb21MYXllcjpob3N0TGF5ZXIoKV07Ci19Ci0K
LWJvb2wgVGlsZUNhY2hlOjp0aWxlc09wYXF1ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdGls
ZXNPcGFxdWU7Ci19Ci0gICAgCi1UaWxlR3JpZCogVGlsZUNhY2hlOjphY3RpdmVUaWxlR3JpZCgp
IGNvbnN0Ci17Ci0gICAgaWYgKCFtX2tlZXBzWm9vbWVkT3V0VGlsZXMpCi0gICAgICAgIHJldHVy
biBtX3pvb21lZE91dFRpbGVHcmlkLmdldCgpOwotICAgIGlmIChtX3RpbGluZ01vZGUgPT0gWm9v
bWluZykKLSAgICAgICAgcmV0dXJuIG1fem9vbWVkT3V0VGlsZUdyaWQuZ2V0KCk7Ci0gICAgaWYg
KG1fem9vbWVkSW5UaWxlR3JpZCAmJiBtX2N1cnJlbnRTY2FsZSA9PSBtX3pvb21lZEluVGlsZUdy
aWQtPnNjYWxlKCkpCi0gICAgICAgIHJldHVybiBtX3pvb21lZEluVGlsZUdyaWQuZ2V0KCk7Ci0g
ICAgcmV0dXJuIG1fem9vbWVkT3V0VGlsZUdyaWQuZ2V0KCk7Ci19Ci0KLVRpbGVHcmlkKiBUaWxl
Q2FjaGU6OmluYWN0aXZlVGlsZUdyaWQoKSBjb25zdAotewotICAgIHJldHVybiBhY3RpdmVUaWxl
R3JpZCgpID09IG1fem9vbWVkT3V0VGlsZUdyaWQgPyBtX3pvb21lZEluVGlsZUdyaWQuZ2V0KCkg
OiBtX3pvb21lZE91dFRpbGVHcmlkLmdldCgpOwotfQotCi12b2lkIFRpbGVDYWNoZTo6c2V0VGls
ZXNPcGFxdWUoYm9vbCBvcGFxdWUpCi17Ci0gICAgaWYgKG1fdGlsZXNPcGFxdWUgPT0gb3BhcXVl
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgp
OwotCi0gICAgbV90aWxlc09wYXF1ZSA9IG9wYXF1ZTsKLSAgICBtX3pvb21lZE91dFRpbGVHcmlk
LT51cGRhdGVUaWxlT3BhY2l0eSgpOwotICAgIGlmIChtX3pvb21lZEluVGlsZUdyaWQpCi0gICAg
ICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+dXBkYXRlVGlsZU9wYWNpdHkoKTsKLX0KLQotdm9pZCBU
aWxlQ2FjaGU6OmRvTGF5b3V0VGlsZXMoKQotewotICAgIGlmIChpc1RpbGVDcmVhdGlvblN1c3Bl
bmRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxl
TXV0ZXgpOwotICAgIFRpbGVHcmlkKiBhY3RpdmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKLSAg
ICAvLyBFdmVuIHRob3VnaCB3ZSBhcmVuJ3QgYWN0dWFsbHkgY3JlYXRpbmcgdGlsZXMgaW4gdGhl
IGluYWN0aXZlIGdyaWQsIHdlCi0gICAgLy8gc3RpbGwgbmVlZCB0byBkcm9wIGludmFsaWQgdGls
ZXMgaW4gcmVzcG9uc2UgdG8gYSBsYXlvdXQuCi0gICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS85
ODM5ODY3Pi4KLSAgICBpZiAoVGlsZUdyaWQqIGluYWN0aXZlR3JpZCA9IGluYWN0aXZlVGlsZUdy
aWQoKSkKLSAgICAgICAgaW5hY3RpdmVHcmlkLT5kcm9wSW52YWxpZFRpbGVzKCk7Ci0gICAgaWYg
KGFjdGl2ZUdyaWQtPmNoZWNrRG9TaW5nbGVUaWxlTGF5b3V0KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBjcmVhdGVUaWxlc0luQWN0aXZlR3JpZChDb3ZlclZpc2libGVPbmx5KTsKLX0KLQotdm9p
ZCBUaWxlQ2FjaGU6Omhvc3RMYXllclNpemVDaGFuZ2VkKCkKLXsKLSAgICBtX3pvb21lZE91dFRp
bGVHcmlkLT51cGRhdGVIb3N0TGF5ZXJTaXplKCk7Ci0gICAgaWYgKG1fem9vbWVkSW5UaWxlR3Jp
ZCkKLSAgICAgICAgbV96b29tZWRJblRpbGVHcmlkLT51cGRhdGVIb3N0TGF5ZXJTaXplKCk7Ci19
Ci0KLXZvaWQgVGlsZUNhY2hlOjpzZXRLZWVwc1pvb21lZE91dFRpbGVzKGJvb2wga2VlcCkKLXsK
LSAgICBtX2tlZXBzWm9vbWVkT3V0VGlsZXMgPSBrZWVwOwotfQotCi12b2lkIFRpbGVDYWNoZTo6
c2V0Q3VycmVudFNjYWxlKGZsb2F0IHNjYWxlKQotewotICAgIEFTU0VSVChzY2FsZSA+IDApOwot
Ci0gICAgaWYgKGN1cnJlbnRTY2FsZSgpID09IHNjYWxlKSB7Ci0gICAgICAgIG1fcGVuZGluZ1Nj
YWxlID0gMDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBtX3BlbmRpbmdTY2FsZSA9IHNj
YWxlOwotICAgIGlmIChtX3RpbGluZ01vZGUgPT0gRGlzYWJsZWQpCi0gICAgICAgIHJldHVybjsK
LSAgICBjb21taXRTY2FsZUNoYW5nZSgpOwotCi0gICAgaWYgKCFrZWVwc1pvb21lZE91dFRpbGVz
KCkgJiYgIWlzVGlsZUludmFsaWRhdGlvblN1c3BlbmRlZCgpKSB7Ci0gICAgICAgIC8vIFRpbGUg
aW52YWxpZGF0aW9uIGlzIG5vcm1hbGx5IHN1c3BlbmRlZCBkdXJpbmcgem9vbWluZyBieSBVSUtp
dCBidXQgc29tZSBhcHBsaWNhdGlvbnMKLSAgICAgICAgLy8gdXNpbmcgY3VzdG9tIHNjcm9sbHZp
ZXdzIG1heSB6b29tIHdpdGhvdXQgdHJpZ2dlcmluZyB0aGUgY2FsbGJhY2tzLiBJbnZhbGlkYXRl
IHRoZSB0aWxlcyBleHBsaWNpdGx5LgotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxl
TXV0ZXgpOwotICAgICAgICBhY3RpdmVUaWxlR3JpZCgpLT5kcm9wQWxsVGlsZXMoKTsKLSAgICAg
ICAgYWN0aXZlVGlsZUdyaWQoKS0+Y3JlYXRlVGlsZXMoQ292ZXJWaXNpYmxlT25seSk7Ci0gICAg
fQotfQotCi12b2lkIFRpbGVDYWNoZTo6c2V0Wm9vbWVkT3V0U2NhbGUoZmxvYXQgc2NhbGUpCi17
Ci0gICAgQVNTRVJUKHNjYWxlID4gMCk7Ci0KLSAgICBpZiAoem9vbWVkT3V0U2NhbGUoKSA9PSBz
Y2FsZSkgewotICAgICAgICBtX3BlbmRpbmdab29tZWRPdXRTY2FsZSA9IDA7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0gICAgbV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUgPSBzY2FsZTsKLSAgICBp
ZiAobV90aWxpbmdNb2RlID09IERpc2FibGVkKQotICAgICAgICByZXR1cm47Ci0gICAgY29tbWl0
U2NhbGVDaGFuZ2UoKTsKLX0KLSAgICAKLXZvaWQgVGlsZUNhY2hlOjpjb21taXRTY2FsZUNoYW5n
ZSgpCi17Ci0gICAgQVNTRVJUKG1fcGVuZGluZ1pvb21lZE91dFNjYWxlIHx8IG1fcGVuZGluZ1Nj
YWxlKTsKLSAgICBBU1NFUlQobV90aWxpbmdNb2RlICE9IERpc2FibGVkKTsKLSAgICAKLSAgICBN
dXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOwotCi0gICAgaWYgKG1fcGVuZGluZ1pvb21l
ZE91dFNjYWxlKSB7Ci0gICAgICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnNldFNjYWxlKG1fcGVu
ZGluZ1pvb21lZE91dFNjYWxlKTsKLSAgICAgICAgbV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUgPSAw
OwotICAgIH0KLSAgICAKLSAgICBpZiAoIW1fa2VlcHNab29tZWRPdXRUaWxlcykgewotICAgICAg
ICBBU1NFUlQoYWN0aXZlVGlsZUdyaWQoKSA9PSBtX3pvb21lZE91dFRpbGVHcmlkKTsKLSAgICAg
ICAgaWYgKG1fcGVuZGluZ1NjYWxlKSB7Ci0gICAgICAgICAgICBtX2N1cnJlbnRTY2FsZSA9IG1f
cGVuZGluZ1NjYWxlOwotICAgICAgICAgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+c2V0U2NhbGUo
bV9jdXJyZW50U2NhbGUpOwotICAgICAgICB9Ci0gICAgICAgIG1fcGVuZGluZ1NjYWxlID0gMDsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChtX3BlbmRpbmdTY2FsZSkgewotICAg
ICAgICBtX2N1cnJlbnRTY2FsZSA9IG1fcGVuZGluZ1NjYWxlOwotICAgICAgICBtX3BlbmRpbmdT
Y2FsZSA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fY3VycmVudFNjYWxlICE9IG1fem9vbWVkT3V0
VGlsZUdyaWQtPnNjYWxlKCkpIHsKLSAgICAgICAgaWYgKCFtX3pvb21lZEluVGlsZUdyaWQpIHsK
LSAgICAgICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZCA9IFRpbGVHcmlkOjpjcmVhdGUodGhpcywg
bV90aWxlU2l6ZSk7Ci0gICAgICAgICAgICBbaG9zdExheWVyKCkgYWRkU3VibGF5ZXI6bV96b29t
ZWRJblRpbGVHcmlkLT50aWxlSG9zdExheWVyKCldOwotICAgICAgICAgICAgaG9zdExheWVyU2l6
ZUNoYW5nZWQoKTsKLSAgICAgICAgfQotICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPnNldFNj
YWxlKG1fY3VycmVudFNjYWxlKTsKLSAgICB9Ci0KLSAgICAvLyBLZWVwIHRoZSBjdXJyZW50IG9y
ZGVyaW5nIGR1cmluZyB6b29taW5nLgotICAgIGlmIChtX3RpbGluZ01vZGUgIT0gWm9vbWluZykK
LSAgICAgICAgYnJpbmdBY3RpdmVUaWxlR3JpZFRvRnJvbnQoKTsKLQotICAgIGFkanVzdFRpbGVH
cmlkVHJhbnNmb3JtcygpOwotICAgIGxheW91dFRpbGVzKCk7Ci19Ci0KLXZvaWQgVGlsZUNhY2hl
OjpicmluZ0FjdGl2ZVRpbGVHcmlkVG9Gcm9udCgpCi17Ci0gICAgVGlsZUdyaWQqIGFjdGl2ZUdy
aWQgPSBhY3RpdmVUaWxlR3JpZCgpOwotICAgIFRpbGVHcmlkKiBvdGhlckdyaWQgPSBpbmFjdGl2
ZVRpbGVHcmlkKCk7Ci0gICAgaWYgKCFvdGhlckdyaWQpCi0gICAgICAgIHJldHVybjsKLSAgICBD
QUxheWVyKiBmcm9udExheWVyID0gYWN0aXZlR3JpZC0+dGlsZUhvc3RMYXllcigpOwotICAgIENB
TGF5ZXIqIG90aGVyTGF5ZXIgPSBvdGhlckdyaWQtPnRpbGVIb3N0TGF5ZXIoKTsKLSAgICBbaG9z
dExheWVyKCkgaW5zZXJ0U3VibGF5ZXI6ZnJvbnRMYXllciBhYm92ZTpvdGhlckxheWVyXTsKLX0K
LSAgICAKLXZvaWQgVGlsZUNhY2hlOjphZGp1c3RUaWxlR3JpZFRyYW5zZm9ybXMoKQotewotICAg
IENBTGF5ZXIqIHpvb21lZE91dEhvc3RMYXllciA9IG1fem9vbWVkT3V0VGlsZUdyaWQtPnRpbGVI
b3N0TGF5ZXIoKTsKLSAgICBmbG9hdCB0cmFuc2Zvcm1TY2FsZSA9IGN1cnJlbnRTY2FsZSgpIC8g
em9vbWVkT3V0U2NhbGUoKTsKLSAgICBbem9vbWVkT3V0SG9zdExheWVyIHNldFRyYW5zZm9ybTpD
QVRyYW5zZm9ybTNETWFrZVNjYWxlKHRyYW5zZm9ybVNjYWxlLCB0cmFuc2Zvcm1TY2FsZSwgMS4w
ZildOwotICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0ZUhvc3RMYXllclNpemUoKTsKLX0K
LQotdm9pZCBUaWxlQ2FjaGU6OmxheW91dFRpbGVzKCkKLXsKLSAgICBpZiAobV9oYXNQZW5kaW5n
TGF5b3V0VGlsZXMpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hhc1BlbmRpbmdMYXlvdXRUaWxl
cyA9IHRydWU7Ci0KLSAgICBUaWxlQ2FjaGVUb21ic3RvbmUgKnRvbWJzdG9uZSA9IG1fdG9tYnN0
b25lLmdldCgpOwotICAgIFdlYlRocmVhZFJ1biheewotICAgICAgICBpZiAoW3RvbWJzdG9uZSBp
c0RlYWRdKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX2hhc1BlbmRpbmdMYXlvdXRU
aWxlcyA9IGZhbHNlOwotICAgICAgICBkb0xheW91dFRpbGVzKCk7Ci0gICAgfSk7Ci19Ci0KLXZv
aWQgVGlsZUNhY2hlOjpsYXlvdXRUaWxlc05vdygpCi17Ci0gICAgQVNTRVJUKFdlYlRocmVhZElz
TG9ja2VkT3JEaXNhYmxlZCgpKTsKLQotICAgIC8vIGxheW91dFRpbGVzTm93KCkgaXMgY2FsbGVk
IGFmdGVyIGEgem9vbSwgd2hpbGUgdGhlIHRpbGUgbW9kZSBpcyBzdGlsbCBzZXQgdG8gWm9vbWlu
Zy4KLSAgICAvLyBJZiB3ZSBjaGVja2VkIGZvciBpc1RpbGVDcmVhdGlvblN1c3BlbmRlZCBoZXJl
LCB0aGF0IHdvdWxkIGNhdXNlIDxyZGFyOi8vcHJvYmxlbS84NDM0MTEyPiAoUGFnZSBmbGFzaGVz
IGFmdGVyIHpvb21pbmcgaW4vb3V0KS4KLSAgICBpZiAobV90aWxpbmdNb2RlID09IERpc2FibGVk
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgLy8gRklYTUU6IGxheW91dFRpbGVzTm93IHNo
b3VsZCBiZSBjYWxsZWQgYWZ0ZXIgc3RhdGUgaGFzIGJlZW4gc2V0IHRvIG5vbi16b29taW5nIGFu
ZCB0aGUgYWN0aXZlIGdyaWQgaXMgdGhlIGZpbmFsIG9uZS4gCi0gICAgLy8gRml4IHRoaXMgaW4g
VUlLaXQgc2lkZSAocGVyaGFwcyBhbHNvIGdldHRpbmcgcmlkIG9mIHRoaXMgY2FsbCkgYW5kIHJl
bW92ZSB0aGlzIGNvZGUgYWZ0ZXJ3YXJkcy4KLSAgICAvLyA8cmRhcjovL3Byb2JsZW0vOTY3Mjk5
Mz4KLSAgICBUaWxpbmdNb2RlIHNhdmVkVGlsaW5nTW9kZSA9IG1fdGlsaW5nTW9kZTsKLSAgICBp
ZiAobV90aWxpbmdNb2RlID09IFpvb21pbmcpCi0gICAgICAgIG1fdGlsaW5nTW9kZSA9IE1pbmlt
YWw7Ci0KLSAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOwotICAgIFRpbGVHcmlk
KiBhY3RpdmVHcmlkID0gYWN0aXZlVGlsZUdyaWQoKTsKLSAgICBpZiAoYWN0aXZlR3JpZC0+Y2hl
Y2tEb1NpbmdsZVRpbGVMYXlvdXQoKSkgewotICAgICAgICBtX3RpbGluZ01vZGUgPSBzYXZlZFRp
bGluZ01vZGU7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgY3JlYXRlVGlsZXNJbkFjdGl2
ZUdyaWQoQ292ZXJWaXNpYmxlT25seSk7Ci0gICAgbV90aWxpbmdNb2RlID0gc2F2ZWRUaWxpbmdN
b2RlOwotfQotCi12b2lkIFRpbGVDYWNoZTo6bGF5b3V0VGlsZXNOb3dGb3JSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCi17Ci0gICAgQVNTRVJUKFdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgp
KTsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV90aWxlTXV0ZXgpOwotCi0gICAgYWN0aXZlVGls
ZUdyaWQoKS0+YWRkVGlsZXNDb3ZlcmluZ1JlY3QocmVjdCk7Ci19Ci0KLXZvaWQgVGlsZUNhY2hl
OjpyZW1vdmVBbGxOb25WaXNpYmxlVGlsZXMoKQotewotICAgIE11dGV4TG9ja2VyIGxvY2tlciht
X3RpbGVNdXRleCk7Ci0gICAgcmVtb3ZlQWxsTm9uVmlzaWJsZVRpbGVzSW50ZXJuYWwoKTsKLX0K
LQotdm9pZCBUaWxlQ2FjaGU6OnJlbW92ZUFsbE5vblZpc2libGVUaWxlc0ludGVybmFsKCkKLXsK
LSAgICBUaWxlR3JpZCogYWN0aXZlR3JpZCA9IGFjdGl2ZVRpbGVHcmlkKCk7Ci0gICAgaWYgKGtl
ZXBzWm9vbWVkT3V0VGlsZXMoKSAmJiBhY3RpdmVHcmlkID09IG1fem9vbWVkSW5UaWxlR3JpZCAm
JiBhY3RpdmVHcmlkLT5oYXNUaWxlcygpKQotICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5k
cm9wQWxsVGlsZXMoKTsKLQotICAgIEludFJlY3QgYWN0aXZlVGlsZUJvdW5kcyA9IGFjdGl2ZUdy
aWQtPmJvdW5kcygpOwotICAgIGlmIChhY3RpdmVUaWxlQm91bmRzLndpZHRoKCkgPD0gbV90aWxl
U2l6ZS53aWR0aCgpICYmIGFjdGl2ZVRpbGVCb3VuZHMuaGVpZ2h0KCkgPD0gbV90aWxlU2l6ZS5o
ZWlnaHQoKSkgewotICAgICAgICAvLyBJZiB0aGUgdmlldyBpcyBzbWFsbGVyIHRoYW4gYSB0aWxl
LCBrZWVwIHRoZSB0aWxlIGV2ZW4gaWYgaXQgaXMgbm90IHZpc2libGUuCi0gICAgICAgIGFjdGl2
ZUdyaWQtPmRyb3BUaWxlc091dHNpZGVSZWN0KGFjdGl2ZVRpbGVCb3VuZHMpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgfQotCi0gICAgYWN0aXZlR3JpZC0+ZHJvcFRpbGVzT3V0c2lkZVJlY3QoYWN0
aXZlR3JpZC0+dmlzaWJsZVJlY3QoKSk7Ci19Ci0KLXZvaWQgVGlsZUNhY2hlOjpyZW1vdmVBbGxU
aWxlcygpCi17Ci0gICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11dGV4KTsKLSAgICBtX3pv
b21lZE91dFRpbGVHcmlkLT5kcm9wQWxsVGlsZXMoKTsKLSAgICBpZiAobV96b29tZWRJblRpbGVH
cmlkKQotICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPmRyb3BBbGxUaWxlcygpOwotfQotCi12
b2lkIFRpbGVDYWNoZTo6cmVtb3ZlRm9yZWdyb3VuZFRpbGVzKCkKLXsKLSAgICBNdXRleExvY2tl
ciBsb2NrZXIobV90aWxlTXV0ZXgpOwotICAgIGlmICgha2VlcHNab29tZWRPdXRUaWxlcygpKQot
ICAgICAgICBtX3pvb21lZE91dFRpbGVHcmlkLT5kcm9wQWxsVGlsZXMoKTsKLSAgICBpZiAobV96
b29tZWRJblRpbGVHcmlkKQotICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPmRyb3BBbGxUaWxl
cygpOwotfQotCi12b2lkIFRpbGVDYWNoZTo6c2V0Q29udGVudFJlcGxhY2VtZW50SW1hZ2UoUmV0
YWluUHRyPENHSW1hZ2VSZWY+IGNvbnRlbnRSZXBsYWNlbWVudEltYWdlKQotewotICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX2NvbnRlbnRSZXBsYWNlbWVudEltYWdlTXV0ZXgpOwotICAgIG1fY29u
dGVudFJlcGxhY2VtZW50SW1hZ2UgPSBjb250ZW50UmVwbGFjZW1lbnRJbWFnZTsKLX0KLQotUmV0
YWluUHRyPENHSW1hZ2VSZWY+IFRpbGVDYWNoZTo6Y29udGVudFJlcGxhY2VtZW50SW1hZ2UoKSBj
b25zdAotewotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2NvbnRlbnRSZXBsYWNlbWVudEltYWdl
TXV0ZXgpOwotICAgIHJldHVybiBtX2NvbnRlbnRSZXBsYWNlbWVudEltYWdlOwotfQotCi12b2lk
IFRpbGVDYWNoZTo6c2V0VGlsZUJvcmRlcnNWaXNpYmxlKGJvb2wgZmxhZykKLXsKLSAgICBpZiAo
ZmxhZyA9PSBtX3RpbGVCb3JkZXJzVmlzaWJsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV90
aWxlQm9yZGVyc1Zpc2libGUgPSBmbGFnOwotICAgIG1fem9vbWVkT3V0VGlsZUdyaWQtPnVwZGF0
ZVRpbGVCb3JkZXJWaXNpYmlsaXR5KCk7Ci0gICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCkKLSAg
ICAgICAgbV96b29tZWRJblRpbGVHcmlkLT51cGRhdGVUaWxlQm9yZGVyVmlzaWJpbGl0eSgpOwot
fQotCi12b2lkIFRpbGVDYWNoZTo6c2V0VGlsZVBhaW50Q291bnRlcnNWaXNpYmxlKGJvb2wgZmxh
ZykKLXsKLSAgICBtX3RpbGVQYWludENvdW50ZXJzVmlzaWJsZSA9IGZsYWc7Ci0gICAgLy8gVGhl
IG51bWJlcnMgd2lsbCBzaG93IHVwIHRoZSBuZXh0IHRpbWUgdGhlIHRpbGVzIHBhaW50LgotfQot
Ci12b2lkIFRpbGVDYWNoZTo6ZmluaXNoZWRDcmVhdGluZ1RpbGVzKGJvb2wgZGlkQ3JlYXRlVGls
ZXMsIGJvb2wgY3JlYXRlTW9yZSkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGFs
bCB0aWxlcyBhcmUgc2hvd2luZyB0aGUgc2FtZSB2ZXJzaW9uIG9mIHRoZSBjb250ZW50LgotICAg
IGlmIChkaWRDcmVhdGVUaWxlcyAmJiAhbV9zYXZlZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkpCi0g
ICAgICAgIGZsdXNoU2F2ZWREaXNwbGF5UmVjdHMoKTsKLQotICAgIGlmIChrZWVwc1pvb21lZE91
dFRpbGVzKCkpIHsKLSAgICAgICAgaWYgKG1fem9vbWVkSW5UaWxlR3JpZCAmJiBhY3RpdmVUaWxl
R3JpZCgpID09IG1fem9vbWVkT3V0VGlsZUdyaWQgJiYgbV90aWxpbmdNb2RlICE9IFpvb21pbmcg
JiYgbV96b29tZWRJblRpbGVHcmlkLT5oYXNUaWxlcygpKSB7Ci0gICAgICAgICAgICAvLyBUaGlz
IENBIHRyYW5zYWN0aW9uIHdpbGwgY292ZXIgdGhlIHNjcmVlbiB3aXRoIHRvcCBsZXZlbCB0aWxl
cy4KLSAgICAgICAgICAgIC8vIFdlIGNhbiByZW1vdmUgem9vbWVkLWluIHRpbGVzIHdpdGhvdXQg
Zmxhc2hpbmcuCi0gICAgICAgICAgICBtX3pvb21lZEluVGlsZUdyaWQtPmRyb3BBbGxUaWxlcygp
OwotICAgICAgICB9IGVsc2UgaWYgKGFjdGl2ZVRpbGVHcmlkKCkgPT0gbV96b29tZWRJblRpbGVH
cmlkKSB7Ci0gICAgICAgICAgICAvLyBQYXNzIHRoZSBtaW5pbXVtIHBvc3NpYmxlIGRpc3RhbmNl
IHRvIGNvbnNpZGVyIGFsbCB0aWxlcywgZXZlbiB2aXNpYmxlIG9uZXMuCi0gICAgICAgICAgICBt
X3pvb21lZE91dFRpbGVHcmlkLT5kcm9wRGlzdGFudFRpbGVzKDAsIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZG91YmxlPjo6bWluKCkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gS2VlcCBjcmVh
dGluZyB0aWxlcyB1bnRpbCB0aGUgd2hvbGUgY292ZXJSZWN0IGlzIGNvdmVyZWQuCi0gICAgaWYg
KGNyZWF0ZU1vcmUpCi0gICAgICAgIG1fdGlsZUNyZWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDAp
OwotfQotCi12b2lkIFRpbGVDYWNoZTo6dGlsZUNyZWF0aW9uVGltZXJGaXJlZChUaW1lcjxUaWxl
Q2FjaGU+KikKLXsKLSAgICBpZiAoaXNUaWxlQ3JlYXRpb25TdXNwZW5kZWQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7Ci0gICAgY3JlYXRl
VGlsZXNJbkFjdGl2ZUdyaWQoQ292ZXJTcGVjdWxhdGl2ZSk7Ci19Ci0KLXZvaWQgVGlsZUNhY2hl
OjpjcmVhdGVUaWxlc0luQWN0aXZlR3JpZChTeW5jaHJvbm91c1RpbGVDcmVhdGlvbk1vZGUgbW9k
ZSkKLXsKLSAgICBpZiAobWVtb3J5UHJlc3N1cmVIYW5kbGVyKCkuaGFzUmVjZWl2ZWRNZW1vcnlQ
cmVzc3VyZSgpKSB7Ci0gICAgICAgIExPRyhNZW1vcnlQcmVzc3VyZSwgIlVuZGVyIG1lbW9yeSBw
cmVzc3VyZSBhdDogJXMiLCBfX1BSRVRUWV9GVU5DVElPTl9fKTsKLSAgICAgICAgcmVtb3ZlQWxs
Tm9uVmlzaWJsZVRpbGVzSW50ZXJuYWwoKTsKLSAgICB9Ci0gICAgYWN0aXZlVGlsZUdyaWQoKS0+
Y3JlYXRlVGlsZXMobW9kZSk7Ci19Ci0KLXVuc2lnbmVkIFRpbGVDYWNoZTo6dGlsZUNhcGFjaXR5
Rm9yR3JpZChUaWxlR3JpZCogZ3JpZCkKLXsKLSAgICBzdGF0aWMgdW5zaWduZWQgY2FwYWNpdHk7
Ci0gICAgaWYgKCFjYXBhY2l0eSkgewotICAgICAgICBzaXplX3QgdG90YWxNZW1vcnkgPSBzeXN0
ZW1Ub3RhbE1lbW9yeSgpOwotICAgICAgICB0b3RhbE1lbW9yeSAvPSAxMDI0ICogMTAyNDsKLSAg
ICAgICAgaWYgKHRvdGFsTWVtb3J5ID49IDEwMjQpCi0gICAgICAgICAgICBjYXBhY2l0eSA9IDEy
OCAqIDEwMjQgKiAxMDI0OwotICAgICAgICBlbHNlIGlmICh0b3RhbE1lbW9yeSA+PSA1MTIpCi0g
ICAgICAgICAgICBjYXBhY2l0eSA9IDY0ICogMTAyNCAqIDEwMjQ7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGNhcGFjaXR5ID0gMzIgKiAxMDI0ICogMTAyNDsKLSAgICB9Ci0KLSAgICBpbnQg
Z3JpZENhcGFjaXR5OwotCi0gICAgaW50IG1lbW9yeUxldmVsID0gc3lzdGVtTWVtb3J5TGV2ZWwo
KTsKLSAgICBpZiAobWVtb3J5TGV2ZWwgPCAxNSkKLSAgICAgICAgZ3JpZENhcGFjaXR5ID0gY2Fw
YWNpdHkgLyA0OwotICAgIGVsc2UgaWYgKG1lbW9yeUxldmVsIDwgMjApCi0gICAgICAgIGdyaWRD
YXBhY2l0eSA9IGNhcGFjaXR5IC8gMjsKLSAgICBlbHNlIGlmIChtZW1vcnlMZXZlbCA8IDMwKSAK
LSAgICAgICAgZ3JpZENhcGFjaXR5ID0gY2FwYWNpdHkgKiAzIC8gNDsKLSAgICBlbHNlCi0gICAg
ICAgIGdyaWRDYXBhY2l0eSA9IGNhcGFjaXR5OwotCi0gICAgaWYgKGtlZXBzWm9vbWVkT3V0VGls
ZXMoKSAmJiBncmlkID09IG1fem9vbWVkT3V0VGlsZUdyaWQpIHsKLSAgICAgICAgaWYgKGFjdGl2
ZVRpbGVHcmlkKCkgPT0gbV96b29tZWRPdXRUaWxlR3JpZCkKLSAgICAgICAgICAgIHJldHVybiBn
cmlkQ2FwYWNpdHk7Ci0gICAgICAgIHJldHVybiBncmlkQ2FwYWNpdHkgLyA0OwotICAgIH0KLSAg
ICByZXR1cm4gZ3JpZENhcGFjaXR5ICogMyAvIDQ7Ci19Ci0KLUNvbG9yIFRpbGVDYWNoZTo6Y29s
b3JGb3JHcmlkVGlsZUJvcmRlcihUaWxlR3JpZCogZ3JpZCkgY29uc3QKLXsKLSAgICBpZiAoZ3Jp
ZCA9PSBtX3pvb21lZE91dFRpbGVHcmlkKQotICAgICAgICByZXR1cm4gQ29sb3IoLjNmLCAuMGYs
IDAuNGYsIDAuNWYpOwotCi0gICAgcmV0dXJuIENvbG9yKC4wZiwgLjBmLCAwLjRmLCAwLjVmKTsK
LX0KLQotc3RhdGljIGJvb2wgc2hvdWxkUmVwYWludEluUGllY2VzKGNvbnN0IENHUmVjdCYgZGly
dHlSZWN0LCBDR1NSZWdpb25PYmogZGlydHlSZWdpb24sIENHRmxvYXQgY29udGVudHNTY2FsZSkK
LXsKLSAgICAvLyBFc3RpbWF0ZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgdXNlIHRoZSB1bmlv
bmVkIHJlY3Qgb3IgdGhlIGluZGl2aWR1YWwgcmVjdHMuCi0gICAgLy8gV2UgZG8gdGhpcyBieSBj
b21wdXRpbmcgdGhlIHBlcmNlbnRhZ2Ugb2YgIndhc3RlZCBzcGFjZSIgaW4gdGhlIHVuaW9uLiBJ
ZiB0aGF0IHdhc3RlZCBzcGFjZQotICAgIC8vIGlzIHRvbyBsYXJnZSwgdGhlbiB3ZSB3aWxsIGRv
IGluZGl2aWR1YWwgcmVjdCBwYWludGluZyBpbnN0ZWFkLgotICAgIGZsb2F0IHNpbmdsZVBpeGVs
cyA9IDA7Ci0gICAgdW5zaWduZWQgcmVjdENvdW50ID0gMDsKLQotICAgIENHU1JlZ2lvbkVudW1l
cmF0b3JPYmogZW51bWVyYXRvciA9IENHU1JlZ2lvbkVudW1lcmF0b3IoZGlydHlSZWdpb24pOwot
ICAgIENHUmVjdCAqc3ViUmVjdDsKLSAgICB3aGlsZSAoKHN1YlJlY3QgPSBDR1NOZXh0UmVjdChl
bnVtZXJhdG9yKSkpIHsKLSAgICAgICAgKytyZWN0Q291bnQ7Ci0gICAgICAgIHNpbmdsZVBpeGVs
cyArPSBzdWJSZWN0LT5zaXplLndpZHRoICogc3ViUmVjdC0+c2l6ZS5oZWlnaHQ7Ci0gICAgfQot
ICAgIHNpbmdsZVBpeGVscyAvPSAoY29udGVudHNTY2FsZSAqIGNvbnRlbnRzU2NhbGUpOwotICAg
IENHU1JlbGVhc2VSZWdpb25FbnVtZXJhdG9yKGVudW1lcmF0b3IpOwotCi0gICAgY29uc3QgdW5z
aWduZWQgY1JlY3RUaHJlc2hvbGQgPSAxMDsKLSAgICBpZiAocmVjdENvdW50IDwgMiB8fCByZWN0
Q291bnQgPiBjUmVjdFRocmVzaG9sZCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29u
c3QgZmxvYXQgY1dhc3RlZFNwYWNlVGhyZXNob2xkID0gMC41MGY7Ci0gICAgZmxvYXQgdW5pb25Q
aXhlbHMgPSBkaXJ0eVJlY3Quc2l6ZS53aWR0aCAqIGRpcnR5UmVjdC5zaXplLmhlaWdodDsKLSAg
ICBmbG9hdCB3YXN0ZWRTcGFjZSA9IDEuZiAtIChzaW5nbGVQaXhlbHMgLyB1bmlvblBpeGVscyk7
Ci0gICAgcmV0dXJuIHdhc3RlZFNwYWNlID4gY1dhc3RlZFNwYWNlVGhyZXNob2xkOwotfQotCi12
b2lkIFRpbGVDYWNoZTo6ZHJhd1JlcGxhY2VtZW50SW1hZ2UoVGlsZUxheWVyKiBsYXllciwgQ0dD
b250ZXh0UmVmIGNvbnRleHQsIENHSW1hZ2VSZWYgaW1hZ2UpCi17Ci0gICAgQ0dDb250ZXh0U2V0
UkdCRmlsbENvbG9yKGNvbnRleHQsIDEsIDEsIDEsIDEpOwotICAgIENHQ29udGV4dEZpbGxSZWN0
KGNvbnRleHQsIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KSk7Ci0KLSAgICBD
R0Zsb2F0IGNvbnRlbnRzU2NhbGUgPSBbbGF5ZXIgY29udGVudHNTY2FsZV07Ci0gICAgQ0dDb250
ZXh0U2NhbGVDVE0oY29udGV4dCwgMSAvIGNvbnRlbnRzU2NhbGUsIC0xIC8gY29udGVudHNTY2Fs
ZSk7Ci0gICAgQ0dSZWN0IGltYWdlUmVjdCA9IENHUmVjdE1ha2UoMCwgMCwgQ0dJbWFnZUdldFdp
ZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpOwotICAgIENHQ29udGV4dFRyYW5z
bGF0ZUNUTShjb250ZXh0LCAwLCAtaW1hZ2VSZWN0LnNpemUuaGVpZ2h0KTsKLSAgICBDR0NvbnRl
eHREcmF3SW1hZ2UoY29udGV4dCwgaW1hZ2VSZWN0LCBpbWFnZSk7Ci19Ci0KLXZvaWQgVGlsZUNh
Y2hlOjpkcmF3V2luZG93Q29udGVudChUaWxlTGF5ZXIqIGxheWVyLCBDR0NvbnRleHRSZWYgY29u
dGV4dCwgQ0dSZWN0IGRpcnR5UmVjdCkKLXsKLSAgICBDR1JlY3QgZnJhbWUgPSBbbGF5ZXIgZnJh
bWVdOwotICAgIFdLRm9udEFudGlhbGlhc2luZ1N0YXRlU2F2ZXIgZm9udEFudGlhbGlhc2luZ1N0
YXRlKGNvbnRleHQsIFttX3dpbmRvdyB1c2VPcmllbnRhdGlvbkRlcGVuZGVudEZvbnRBbnRpYWxp
YXNpbmddICYmIFtsYXllciBpc09wYXF1ZV0pOwotICAgIGZvbnRBbnRpYWxpYXNpbmdTdGF0ZS5z
ZXR1cChbV0FLV2luZG93IGhhc0xhbmRzY2FwZU9yaWVudGF0aW9uXSk7Ci0KLSAgICBDR1NSZWdp
b25PYmogZHJhd1JlZ2lvbiA9IChDR1NSZWdpb25PYmopW2xheWVyIHJlZ2lvbkJlaW5nRHJhd25d
OwotICAgIENHRmxvYXQgY29udGVudHNTY2FsZSA9IFtsYXllciBjb250ZW50c1NjYWxlXTsKLSAg
ICBpZiAoZHJhd1JlZ2lvbiAmJiBzaG91bGRSZXBhaW50SW5QaWVjZXMoZGlydHlSZWN0LCBkcmF3
UmVnaW9uLCBjb250ZW50c1NjYWxlKSkgewotICAgICAgICAvLyBVc2UgZmluZSBncmFpbmVkIHJl
cGFpbnQgcmVjdGFuZ2xlcyB0byBtaW5pbWl6ZSB0aGUgYW1vdW50IG9mIHBhaW50ZWQgcGl4ZWxz
LgotICAgICAgICBDR1NSZWdpb25FbnVtZXJhdG9yT2JqIGVudW1lcmF0b3IgPSBDR1NSZWdpb25F
bnVtZXJhdG9yKGRyYXdSZWdpb24pOwotICAgICAgICBDR1JlY3QgKnN1YlJlY3Q7Ci0gICAgICAg
IHdoaWxlICgoc3ViUmVjdCA9IENHU05leHRSZWN0KGVudW1lcmF0b3IpKSkgewotICAgICAgICAg
ICAgQ0dSZWN0IGFkanVzdGVkU3ViUmVjdCA9ICpzdWJSZWN0OwotICAgICAgICAgICAgYWRqdXN0
ZWRTdWJSZWN0Lm9yaWdpbi54IC89IGNvbnRlbnRzU2NhbGU7Ci0gICAgICAgICAgICBhZGp1c3Rl
ZFN1YlJlY3Qub3JpZ2luLnkgPSBmcmFtZS5zaXplLmhlaWdodCAtIChhZGp1c3RlZFN1YlJlY3Qu
b3JpZ2luLnkgKyBhZGp1c3RlZFN1YlJlY3Quc2l6ZS5oZWlnaHQpIC8gY29udGVudHNTY2FsZTsK
LSAgICAgICAgICAgIGFkanVzdGVkU3ViUmVjdC5zaXplLndpZHRoIC89IGNvbnRlbnRzU2NhbGU7
Ci0gICAgICAgICAgICBhZGp1c3RlZFN1YlJlY3Quc2l6ZS5oZWlnaHQgLz0gY29udGVudHNTY2Fs
ZTsKLQotICAgICAgICAgICAgQ0dSZWN0IHN1YlJlY3RJblN1cGVyID0gW2hvc3RMYXllcigpIGNv
bnZlcnRSZWN0OmFkanVzdGVkU3ViUmVjdCBmcm9tTGF5ZXI6bGF5ZXJdOwotICAgICAgICAgICAg
W21fd2luZG93IGRpc3BsYXlSZWN0OnN1YlJlY3RJblN1cGVyXTsKLSAgICAgICAgfQotICAgICAg
ICBDR1NSZWxlYXNlUmVnaW9uRW51bWVyYXRvcihlbnVtZXJhdG9yKTsKLSAgICB9IGVsc2Ugewot
ICAgICAgICAvLyBTaW1wbGUgcmVwYWludAotICAgICAgICBDR1JlY3QgZGlydHlSZWN0SW5TdXBl
ciA9IFtob3N0TGF5ZXIoKSBjb252ZXJ0UmVjdDpkaXJ0eVJlY3QgZnJvbUxheWVyOmxheWVyXTsK
LSAgICAgICAgW21fd2luZG93IGRpc3BsYXlSZWN0OmRpcnR5UmVjdEluU3VwZXJdOwotICAgIH0K
LQotICAgIGZvbnRBbnRpYWxpYXNpbmdTdGF0ZS5yZXN0b3JlKCk7Ci19Ci0KLXZvaWQgVGlsZUNh
Y2hlOjpkcmF3TGF5ZXIoVGlsZUxheWVyKiBsYXllciwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCi17
Ci0gICAgLy8gVGhlIHdlYiBsb2NrIHVubG9jayBvYnNlcnZlciBydW5zIGFmdGVyIENBIGNvbW1p
dCBvYnNlcnZlci4KLSAgICBpZiAoIVdlYlRocmVhZElzTG9ja2VkT3JEaXNhYmxlZCgpKSB7Ci0g
ICAgICAgIExPR19FUlJPUigiRHJhd2luZyB3aXRob3V0IGhvbGRpbmcgdGhlIHdlYiB0aHJlYWQg
bG9jayIpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0KLSAgICBXS1Nl
dEN1cnJlbnRHcmFwaGljc0NvbnRleHQoY29udGV4dCk7Ci0KLSAgICBDR1JlY3QgZGlydHlSZWN0
ID0gQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpOwotICAgIENHUmVjdCBmcmFt
ZSA9IFtsYXllciBmcmFtZV07Ci0gICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIC1m
cmFtZS5vcmlnaW4ueCwgLWZyYW1lLm9yaWdpbi55KTsKLSAgICBDR1JlY3Qgc2NhbGVkRnJhbWUg
PSBbaG9zdExheWVyKCkgY29udmVydFJlY3Q6W2xheWVyIGJvdW5kc10gZnJvbUxheWVyOmxheWVy
XTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCBmcmFtZS5zaXplLndpZHRoIC8gc2Nh
bGVkRnJhbWUuc2l6ZS53aWR0aCwgZnJhbWUuc2l6ZS5oZWlnaHQgLyBzY2FsZWRGcmFtZS5zaXpl
LmhlaWdodCk7Ci0KLSAgICBpZiAoUmV0YWluUHRyPENHSW1hZ2U+IGNvbnRlbnRSZXBsYWNlbWVu
dEltYWdlID0gdGhpcy0+Y29udGVudFJlcGxhY2VtZW50SW1hZ2UoKSkKLSAgICAgICAgZHJhd1Jl
cGxhY2VtZW50SW1hZ2UobGF5ZXIsIGNvbnRleHQsIGNvbnRlbnRSZXBsYWNlbWVudEltYWdlLmdl
dCgpKTsKLSAgICBlbHNlCi0gICAgICAgIGRyYXdXaW5kb3dDb250ZW50KGxheWVyLCBjb250ZXh0
LCBkaXJ0eVJlY3QpOwotCi0gICAgKytsYXllci5wYWludENvdW50OwotICAgIGlmIChtX3RpbGVQ
YWludENvdW50ZXJzVmlzaWJsZSkgewotICAgICAgICBjaGFyIHRleHRbMTZdOwotICAgICAgICBz
bnByaW50Zih0ZXh0LCBzaXplb2YodGV4dCksICIlZCIsIGxheWVyLnBhaW50Q291bnQpOwotCi0g
ICAgICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0KLSAgICAgICAgQ0dDb250ZXh0
VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGZyYW1lLm9yaWdpbi54LCBmcmFtZS5vcmlnaW4ueSk7Ci0g
ICAgICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjb250ZXh0LCBjYWNoZWRDR0Nv
bG9yKGNvbG9yRm9yR3JpZFRpbGVCb3JkZXIoW2xheWVyIHRpbGVHcmlkXSksIENvbG9yU3BhY2VE
ZXZpY2VSR0IpKTsKLSAgICAgICAgCi0gICAgICAgIENHUmVjdCBsYWJlbEJvdW5kcyA9IFtsYXll
ciBib3VuZHNdOwotICAgICAgICBsYWJlbEJvdW5kcy5zaXplLndpZHRoID0gMTAgKyAxMiAqIHN0
cmxlbih0ZXh0KTsKLSAgICAgICAgbGFiZWxCb3VuZHMuc2l6ZS5oZWlnaHQgPSAyNTsKLSAgICAg
ICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgbGFiZWxCb3VuZHMpOwotCi0gICAgICAgIGlm
IChhY2NlbGVyYXRlZERyYXdpbmdFbmFibGVkKCkpCi0gICAgICAgICAgICBDR0NvbnRleHRTZXRS
R0JGaWxsQ29sb3IoY29udGV4dCwgMSwgMCwgMCwgMC40Zik7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIENHQ29udGV4dFNldFJHQkZpbGxDb2xvcihjb250ZXh0LCAxLCAxLCAxLCAwLjZmKTsK
LSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMg
aWdub3JlZCAiLVdkZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIKLSAgICAgICAgQ0dDb250ZXh0U2V0
VGV4dE1hdHJpeChjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybU1ha2VTY2FsZSgxLCAtMSkpOwot
I3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBp
Z25vcmVkICItV2RlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIgotICAgICAgICBDR0NvbnRleHRTZWxl
Y3RGb250KGNvbnRleHQsICJIZWx2ZXRpY2EiLCAyNSwga0NHRW5jb2RpbmdNYWNSb21hbik7Ci0g
ICAgICAgIENHQ29udGV4dFNob3dUZXh0QXRQb2ludChjb250ZXh0LCBsYWJlbEJvdW5kcy5vcmln
aW4ueCArIDMsIGxhYmVsQm91bmRzLm9yaWdpbi55ICsgMjAsIHRleHQsIHN0cmxlbih0ZXh0KSk7
Ci0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCi0gICAgCi0gICAgICAgIENHQ29udGV4dFJl
c3RvcmVHU3RhdGUoY29udGV4dCk7ICAgICAgICAKLSAgICB9Ci0KLSAgICBXQUtWaWV3KiB2aWV3
ID0gW21fd2luZG93IGNvbnRlbnRWaWV3XTsKLSAgICBbdmlldyBwZXJmb3JtU2VsZWN0b3I6QHNl
bGVjdG9yKF9kaXNwYXRjaFRpbGVEaWREcmF3Oikgd2l0aE9iamVjdDpsYXllciBhZnRlckRlbGF5
OjAuMF07Ci19Ci0KLXZvaWQgVGlsZUNhY2hlOjpzZXROZWVkc0Rpc3BsYXkoKQotewotICAgIHNl
dE5lZWRzRGlzcGxheUluUmVjdChJbnRSZWN0KDAsIDAsIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50
Pjo6bWF4KCksIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKTsKLX0KLQotdm9pZCBU
aWxlQ2FjaGU6OnNjaGVkdWxlTGF5ZXJGbHVzaEZvclBlbmRpbmdSZXBhaW50KCkKLXsKLSAgICBX
QUtWaWV3KiB2aWV3ID0gW21fd2luZG93IGNvbnRlbnRWaWV3XTsKLSAgICBbdmlldyBfc2NoZWR1
bGVMYXllckZsdXNoRm9yUGVuZGluZ1RpbGVDYWNoZVJlcGFpbnRdOwotfQotCi12b2lkIFRpbGVD
YWNoZTo6c2V0TmVlZHNEaXNwbGF5SW5SZWN0KGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsK
LSAgICBNdXRleExvY2tlciBsb2NrZXIobV9zYXZlZERpc3BsYXlSZWN0TXV0ZXgpOwotICAgIGJv
b2wgYWRkZWRGaXJzdFJlY3QgPSBtX3NhdmVkRGlzcGxheVJlY3RzLmlzRW1wdHkoKTsKLSAgICBt
X3NhdmVkRGlzcGxheVJlY3RzLmFwcGVuZChkaXJ0eVJlY3QpOwotICAgIGlmICghYWRkZWRGaXJz
dFJlY3QpCi0gICAgICAgIHJldHVybjsKLSAgICAvLyBDb21wb3NpdGluZyBsYXllciBmbHVzaCB3
aWxsIGNhbGwgYmFjayB0byBkb1BlbmRpbmdSZXBhaW50cygpLiBUaGUgZmx1c2ggbWF5IGJlIHRo
cm90dGxlZCBhbmQgbm90IGhhcHBlbiBpbW1lZGlhdGVseS4KLSAgICBzY2hlZHVsZUxheWVyRmx1
c2hGb3JQZW5kaW5nUmVwYWludCgpOwotfQotCi12b2lkIFRpbGVDYWNoZTo6aW52YWxpZGF0ZVRp
bGVzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkKLXsKLSAgICBBU1NFUlQoIW1fdGlsZU11dGV4
LnRyeUxvY2soKSk7Ci0KLSAgICBUaWxlR3JpZCogYWN0aXZlR3JpZCA9IGFjdGl2ZVRpbGVHcmlk
KCk7Ci0gICAgaWYgKCFrZWVwc1pvb21lZE91dFRpbGVzKCkpIHsKLSAgICAgICAgYWN0aXZlR3Jp
ZC0+aW52YWxpZGF0ZVRpbGVzKGRpcnR5UmVjdCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgRmxvYXRSZWN0IHNjYWxlZFJlY3QgPSBkaXJ0eVJlY3Q7Ci0gICAgc2NhbGVkUmVjdC5zY2Fs
ZSh6b29tZWRPdXRTY2FsZSgpIC8gY3VycmVudFNjYWxlKCkpOwotICAgIEludFJlY3Qgem9vbWVk
T3V0RGlydHlSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzY2FsZWRSZWN0KTsKLSAgICBpZiAoYWN0
aXZlR3JpZCA9PSBtX3pvb21lZE91dFRpbGVHcmlkKSB7Ci0gICAgICAgIGJvb2wgZHVtbXk7Ci0g
ICAgICAgIEludFJlY3QgY292ZXJSZWN0ID0gbV96b29tZWRPdXRUaWxlR3JpZC0+Y2FsY3VsYXRl
Q292ZXJSZWN0KG1fem9vbWVkT3V0VGlsZUdyaWQtPnZpc2libGVSZWN0KCksIGR1bW15KTsKLSAg
ICAgICAgLy8gSW5zdGVhZCBvZiByZXBhaW50aW5nIGEgdGlsZSBvdXRzaWRlIHRoZSBjb3ZlciBy
ZWN0LCBqdXN0IHJlbW92ZSBpdC4KLSAgICAgICAgbV96b29tZWRPdXRUaWxlR3JpZC0+ZHJvcFRp
bGVzQmV0d2VlblJlY3RzKHpvb21lZE91dERpcnR5UmVjdCwgY292ZXJSZWN0KTsKLSAgICAgICAg
bV96b29tZWRPdXRUaWxlR3JpZC0+aW52YWxpZGF0ZVRpbGVzKHpvb21lZE91dERpcnR5UmVjdCk7
Ci0gICAgICAgIC8vIFdlIG5lZWQgdG8gaW52YWxpZGF0ZSB6b29tZWQgaW4gdGlsZXMgYXMgd2Vs
bCB3aGlsZSB6b29taW5nLCBzaW5jZQotICAgICAgICAvLyB3ZSBjb3VsZCBzd2l0Y2ggYmFjayB0
byB0aGUgem9vbWVkIGluIGdyaWQgd2l0aG91dCBkcm9wcGluZyBpdHMKLSAgICAgICAgLy8gdGls
ZXMuICBTZWUgPHJkYXI6Ly9wcm9ibGVtLzk5NDY3NTk+LgotICAgICAgICBpZiAobV90aWxpbmdN
b2RlID09IFpvb21pbmcgJiYgbV96b29tZWRJblRpbGVHcmlkKQotICAgICAgICAgICAgbV96b29t
ZWRJblRpbGVHcmlkLT5pbnZhbGlkYXRlVGlsZXMoZGlydHlSZWN0KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICBpZiAoIW1fem9vbWVkSW5UaWxlR3JpZC0+aGFzVGlsZXMoKSkgewotICAg
ICAgICAvLyBJZiBubyB0aWxlcyBoYXZlIGJlZW4gY3JlYXRlZCB5ZXQgZm9yIHRoZSB6b29tZWQg
aW4gZ3JpZCwgd2UgY2FuJ3QgZHJvcCB0aGUgem9vbWVkIG91dCB0aWxlcy4KLSAgICAgICAgbV96
b29tZWRPdXRUaWxlR3JpZC0+aW52YWxpZGF0ZVRpbGVzKHpvb21lZE91dERpcnR5UmVjdCk7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgbV96b29tZWRPdXRUaWxlR3JpZC0+ZHJvcFRpbGVz
SW50ZXJzZWN0aW5nUmVjdCh6b29tZWRPdXREaXJ0eVJlY3QpOwotICAgIG1fem9vbWVkSW5UaWxl
R3JpZC0+aW52YWxpZGF0ZVRpbGVzKGRpcnR5UmVjdCk7Ci19Ci0gICAgCi1ib29sIFRpbGVDYWNo
ZTo6aXNUaWxlQ3JlYXRpb25TdXNwZW5kZWQoKSBjb25zdCAKLXsKLSAgICByZXR1cm4gKCFrZWVw
c1pvb21lZE91dFRpbGVzKCkgJiYgbV90aWxpbmdNb2RlID09IFpvb21pbmcpIHx8IG1fdGlsaW5n
TW9kZSA9PSBEaXNhYmxlZDsKLX0KLQotYm9vbCBUaWxlQ2FjaGU6OmlzVGlsZUludmFsaWRhdGlv
blN1c3BlbmRlZCgpIGNvbnN0IAoteyAKLSAgICByZXR1cm4gbV90aWxpbmdNb2RlID09IFpvb21p
bmcgfHwgbV90aWxpbmdNb2RlID09IFBhbm5pbmcgfHwgbV90aWxpbmdNb2RlID09IFNjcm9sbFRv
VG9wIHx8IG1fdGlsaW5nTW9kZSA9PSBEaXNhYmxlZDsgCi19Ci0KLXZvaWQgVGlsZUNhY2hlOjp1
cGRhdGVUaWxpbmdNb2RlKCkKLXsKLSAgICBBU1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkgfHwg
IVdlYlRocmVhZElzRW5hYmxlZCgpKTsKLQotICAgIFdBS1ZpZXcqIHZpZXcgPSBbbV93aW5kb3cg
Y29udGVudFZpZXddOwotCi0gICAgaWYgKG1fdGlsaW5nTW9kZSA9PSBab29taW5nIHx8IG1fdGls
aW5nTW9kZSA9PSBQYW5uaW5nIHx8IG1fdGlsaW5nTW9kZSA9PSBTY3JvbGxUb1RvcCkgewotICAg
ICAgICBpZiAoIW1fZGlkQ2FsbFdpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZykgewotICAgICAg
ICAgICAgW3ZpZXcgX3dpbGxTdGFydFNjcm9sbGluZ09yWm9vbWluZ107Ci0gICAgICAgICAgICBt
X2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmcgPSB0cnVlOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fZGlkQ2FsbFdpbGxTdGFydFNjcm9sbGluZ09yWm9v
bWluZykgewotICAgICAgICAgICAgW3ZpZXcgX2RpZEZpbmlzaFNjcm9sbGluZ09yWm9vbWluZ107
Ci0gICAgICAgICAgICBtX2RpZENhbGxXaWxsU3RhcnRTY3JvbGxpbmdPclpvb21pbmcgPSBmYWxz
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAobV90aWxpbmdNb2RlID09IERpc2FibGVkKQotICAg
ICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRl
eCk7Ci0gICAgICAgIGNyZWF0ZVRpbGVzSW5BY3RpdmVHcmlkKENvdmVyVmlzaWJsZU9ubHkpOwot
Ci0gICAgICAgIGlmICghbV9zYXZlZERpc3BsYXlSZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgICAg
ICBzY2hlZHVsZUxheWVyRmx1c2hGb3JQZW5kaW5nUmVwYWludCgpOwotICAgIH0KLX0KLQotdm9p
ZCBUaWxlQ2FjaGU6OnNldFRpbGluZ01vZGUoVGlsaW5nTW9kZSB0aWxpbmdNb2RlKQotewotICAg
IGlmICh0aWxpbmdNb2RlID09IG1fdGlsaW5nTW9kZSkKLSAgICAgICAgcmV0dXJuOwotICAgIGJv
b2wgd2FzWm9vbWluZyA9IChtX3RpbGluZ01vZGUgPT0gWm9vbWluZyk7Ci0gICAgbV90aWxpbmdN
b2RlID0gdGlsaW5nTW9kZTsKLQotICAgIGlmICgobV9wZW5kaW5nWm9vbWVkT3V0U2NhbGUgfHwg
bV9wZW5kaW5nU2NhbGUpICYmIG1fdGlsaW5nTW9kZSAhPSBEaXNhYmxlZCkKLSAgICAgICAgY29t
bWl0U2NhbGVDaGFuZ2UoKTsKLSAgICBlbHNlIGlmICh3YXNab29taW5nKSB7Ci0gICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtX3RpbGVNdXRleCk7Ci0gICAgICAgIGJyaW5nQWN0aXZlVGlsZUdy
aWRUb0Zyb250KCk7Ci0gICAgfQotCi0gICAgaWYgKG1faGFzUGVuZGluZ1VwZGF0ZVRpbGluZ01v
ZGUpCi0gICAgICAgIHJldHVybjsKLSAgICBtX2hhc1BlbmRpbmdVcGRhdGVUaWxpbmdNb2RlID0g
dHJ1ZTsKLQotICAgIFRpbGVDYWNoZVRvbWJzdG9uZSAqdG9tYnN0b25lID0gbV90b21ic3RvbmUu
Z2V0KCk7Ci0gICAgV2ViVGhyZWFkUnVuKF57Ci0gICAgICAgIGlmIChbdG9tYnN0b25lIGlzRGVh
ZF0pCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1faGFzUGVuZGluZ1VwZGF0ZVRpbGlu
Z01vZGUgPSBmYWxzZTsKLSAgICAgICAgdXBkYXRlVGlsaW5nTW9kZSgpOwotICAgIH0pOwotfQot
Ci12b2lkIFRpbGVDYWNoZTo6c2V0VGlsaW5nRGlyZWN0aW9uKFRpbGluZ0RpcmVjdGlvbiB0aWxp
bmdEaXJlY3Rpb24pCi17Ci0gICAgbV90aWxpbmdEaXJlY3Rpb24gPSB0aWxpbmdEaXJlY3Rpb247
Ci19Ci0KLVRpbGVDYWNoZTo6VGlsaW5nRGlyZWN0aW9uIFRpbGVDYWNoZTo6dGlsaW5nRGlyZWN0
aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV90aWxpbmdEaXJlY3Rpb247Ci19Ci0gICAgCi1m
bG9hdCBUaWxlQ2FjaGU6Onpvb21lZE91dFNjYWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV96
b29tZWRPdXRUaWxlR3JpZC0+c2NhbGUoKTsKLX0KLQotZmxvYXQgVGlsZUNhY2hlOjpjdXJyZW50
U2NhbGUoKSBjb25zdAotewotICAgIHJldHVybiBtX2N1cnJlbnRTY2FsZTsKLX0KLQotdm9pZCBU
aWxlQ2FjaGU6OmRvUGVuZGluZ1JlcGFpbnRzKCkKLXsKLSAgICBpZiAobV9zYXZlZERpc3BsYXlS
ZWN0cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBpZiAoaXNUaWxlSW52YWxpZGF0
aW9uU3VzcGVuZGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBNdXRleExvY2tlciBsb2NrZXIo
bV90aWxlTXV0ZXgpOwotICAgIGZsdXNoU2F2ZWREaXNwbGF5UmVjdHMoKTsKLX0KLQotdm9pZCBU
aWxlQ2FjaGU6OmZsdXNoU2F2ZWREaXNwbGF5UmVjdHMoKQotewotICAgIEFTU0VSVCghbV90aWxl
TXV0ZXgudHJ5TG9jaygpKTsKLSAgICBBU1NFUlQoIW1fc2F2ZWREaXNwbGF5UmVjdHMuaXNFbXB0
eSgpKTsKLQotICAgIFZlY3RvcjxJbnRSZWN0PiByZWN0czsKLSAgICB7Ci0gICAgICAgIE11dGV4
TG9ja2VyIGxvY2tlcihtX3NhdmVkRGlzcGxheVJlY3RNdXRleCk7Ci0gICAgICAgIG1fc2F2ZWRE
aXNwbGF5UmVjdHMuc3dhcChyZWN0cyk7Ci0gICAgfQotICAgIHNpemVfdCBzaXplID0gcmVjdHMu
c2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IG4gPSAwOyBuIDwgc2l6ZTsgKytuKQotICAgICAgICBp
bnZhbGlkYXRlVGlsZXMocmVjdHNbbl0pOwotfQotCi12b2lkIFRpbGVDYWNoZTo6c2V0U3BlY3Vs
YXRpdmVUaWxlQ3JlYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBpZiAobV9pc1Nw
ZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCA9PSBlbmFibGVkKQotICAgICAgICByZXR1cm47
Ci0gICAgbV9pc1NwZWN1bGF0aXZlVGlsZUNyZWF0aW9uRW5hYmxlZCA9IGVuYWJsZWQ7Ci0gICAg
aWYgKG1faXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQpCi0gICAgICAgIG1fdGlsZUNy
ZWF0aW9uVGltZXIuc3RhcnRPbmVTaG90KDApOwotfQotCi1ib29sIFRpbGVDYWNoZTo6aGFzUGVu
ZGluZ0RyYXcoKSBjb25zdAotewotICAgIHJldHVybiAhbV9zYXZlZERpc3BsYXlSZWN0cy5pc0Vt
cHR5KCk7Ci19Ci0KLXZvaWQgVGlsZUNhY2hlOjpwcmVwYXJlVG9EcmF3KCkKLXsKLSAgICAvLyBU
aGlzIHdpbGwgdHJpZ2dlciBkb2N1bWVudCByZWxheW91dCBpZiBuZWVkZWQuCi0gICAgW1ttX3dp
bmRvdyBjb250ZW50Vmlld10gdmlld1dpbGxEcmF3XTsKLQotICAgIGlmICghbV9zYXZlZERpc3Bs
YXlSZWN0cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fdGlsZU11
dGV4KTsKLSAgICAgICAgZmx1c2hTYXZlZERpc3BsYXlSZWN0cygpOwotICAgIH0KLX0KLQotdm9p
ZCBUaWxlQ2FjaGU6OnNldExheWVyUG9vbENhcGFjaXR5KHVuc2lnbmVkIGNhcGFjaXR5KQotewot
ICAgIFRpbGVMYXllclBvb2w6OnNoYXJlZFBvb2woKS0+c2V0Q2FwYWNpdHkoY2FwYWNpdHkpOwot
fQotCi12b2lkIFRpbGVDYWNoZTo6ZHJhaW5MYXllclBvb2woKQotewotICAgIFRpbGVMYXllclBv
b2w6OnNoYXJlZFBvb2woKS0+ZHJhaW4oKTsKLX0KLQotdm9pZCBUaWxlQ2FjaGU6OmR1bXBUaWxl
cygpCi17Ci0gICAgTlNMb2coQCI9PT09PT09PT09PT09PT09PSIpOwotICAgIE5TTG9nKEAiWk9P
TUVEIE9VVCIpOwotICAgIGlmIChtX3pvb21lZE91dFRpbGVHcmlkID09IGFjdGl2ZVRpbGVHcmlk
KCkpCi0gICAgICAgIE5TTG9nKEAiPEFDVElWRT4iKTsKLSAgICBtX3pvb21lZE91dFRpbGVHcmlk
LT5kdW1wVGlsZXMoKTsKLSAgICBOU0xvZyhAIj09PT09PT09PT09PT09PT09Iik7Ci0gICAgaWYg
KG1fem9vbWVkSW5UaWxlR3JpZCkgewotICAgICAgICBOU0xvZyhAIlpPT01FRCBJTiIpOwotICAg
ICAgICBpZiAobV96b29tZWRJblRpbGVHcmlkID09IGFjdGl2ZVRpbGVHcmlkKCkpCi0gICAgICAg
ICAgICBOU0xvZyhAIjxBQ1RJVkU+Iik7Ci0gICAgICAgIG1fem9vbWVkSW5UaWxlR3JpZC0+ZHVt
cFRpbGVzKCk7Ci0gICAgICAgIE5TTG9nKEAiPT09PT09PT09PT09PT09PT0iKTsKLSAgICB9Ci19
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZC5oCShyZXZpc2lvbiAxNjY0NTMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWQuaAkod29ya2luZyBjb3B5
KQpAQCAtMSwxNDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGlsZUdyaWRfaAotI2Rl
ZmluZSBUaWxlR3JpZF9oCi0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNpbmNsdWRlICJJbnRQb2lu
dC5oIgotI2luY2x1ZGUgIkludFBvaW50SGFzaC5oIgotI2luY2x1ZGUgIkludFJlY3QuaCIKLSNp
bmNsdWRlICJJbnRTaXplLmgiCi0jaW5jbHVkZSAiVGlsZUNhY2hlLmgiCi0jaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYv
T3duUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvUGFz
c1JlZlB0ci5oPgotI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotI2RlZmluZSBMT0dfVElM
SU5HIDAKLQotQGNsYXNzIENBTGF5ZXI7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3Mg
VGlsZUdyaWRUaWxlOwotCi1jbGFzcyBUaWxlR3JpZCB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoVGlsZUdyaWQpOwotcHVibGljOgotICAgIHR5cGVkZWYgSW50UG9pbnQgVGlsZUluZGV4Owot
Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8VGlsZUdyaWQ+IGNyZWF0ZShUaWxlQ2FjaGUqIGNhY2hl
LCBjb25zdCBJbnRTaXplJiB0aWxlU2l6ZSkgeyByZXR1cm4gYWRvcHRQdHIobmV3IFRpbGVHcmlk
KGNhY2hlLCB0aWxlU2l6ZSkpOyB9Ci0KLSAgICB+VGlsZUdyaWQoKTsKLQotICAgIFRpbGVDYWNo
ZSogdGlsZUNhY2hlKCkgY29uc3QgeyByZXR1cm4gbV90aWxlQ2FjaGU7IH0KLQotICAgIENBTGF5
ZXIgKnRpbGVIb3N0TGF5ZXIoKSBjb25zdDsKLSAgICBJbnRSZWN0IGJvdW5kcygpIGNvbnN0Owot
ICAgIHVuc2lnbmVkIHRpbGVDb3VudCgpIGNvbnN0OwotCi0gICAgZmxvYXQgc2NhbGUoKSBjb25z
dCB7IHJldHVybiBtX3NjYWxlOyB9Ci0gICAgdm9pZCBzZXRTY2FsZShmbG9hdCBzY2FsZSkgeyBt
X3NjYWxlID0gc2NhbGU7IH0KLQotICAgIEludFJlY3QgdmlzaWJsZVJlY3QoKSBjb25zdDsKLQot
ICAgIHZvaWQgY3JlYXRlVGlsZXMoVGlsZUNhY2hlOjpTeW5jaHJvbm91c1RpbGVDcmVhdGlvbk1v
ZGUpOwotCi0gICAgdm9pZCBkcm9wQWxsVGlsZXMoKTsKLSAgICB2b2lkIGRyb3BJbnZhbGlkVGls
ZXMoKTsKLSAgICB2b2lkIGRyb3BUaWxlc091dHNpZGVSZWN0KGNvbnN0IEludFJlY3QmKTsKLSAg
ICB2b2lkIGRyb3BUaWxlc0ludGVyc2VjdGluZ1JlY3QoY29uc3QgSW50UmVjdCYpOwotICAgIC8v
IERyb3BzIHRpbGVzIHRoYXQgaW50ZXJzZWN0IGRyb3BSZWN0IGJ1dCBkbyBub3QgaW50ZXJzZWN0
IGtlZXBSZWN0LgotICAgIHZvaWQgZHJvcFRpbGVzQmV0d2VlblJlY3RzKGNvbnN0IEludFJlY3Qm
IGRyb3BSZWN0LCBjb25zdCBJbnRSZWN0JiBrZWVwUmVjdCk7Ci0gICAgYm9vbCBkcm9wRGlzdGFu
dFRpbGVzKHVuc2lnbmVkIHRpbGVzTmVlZGVkLCBkb3VibGUgc2hvcnRlc3REaXN0YW5jZSk7Ci0K
LSAgICB2b2lkIGFkZFRpbGVzQ292ZXJpbmdSZWN0KGNvbnN0IEludFJlY3QmKTsKLQotICAgIGJv
b2wgdGlsZXNDb3Zlcihjb25zdCBJbnRSZWN0JikgY29uc3Q7Ci0gICAgdm9pZCBjZW50ZXJUaWxl
R3JpZE9yaWdpbihjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCk7Ci0gICAgdm9pZCBpbnZhbGlk
YXRlVGlsZXMoY29uc3QgSW50UmVjdCYgZGlydHlSZWN0KTsKLQotICAgIHZvaWQgdXBkYXRlVGls
ZU9wYWNpdHkoKTsKLSAgICB2b2lkIHVwZGF0ZVRpbGVCb3JkZXJWaXNpYmlsaXR5KCk7Ci0gICAg
dm9pZCB1cGRhdGVIb3N0TGF5ZXJTaXplKCk7Ci0gICAgYm9vbCBjaGVja0RvU2luZ2xlVGlsZUxh
eW91dCgpOwotCi0gICAgYm9vbCBoYXNUaWxlcygpIGNvbnN0IHsgcmV0dXJuICFtX3RpbGVzLmlz
RW1wdHkoKTsgfQotCi0gICAgSW50UmVjdCBjYWxjdWxhdGVDb3ZlclJlY3QoY29uc3QgSW50UmVj
dCYgdmlzaWJsZVJlY3QsIGJvb2wmIGNlbnRlckdyaWQpOwotCi0gICAgLy8gTG9nZ2luZwotICAg
IHZvaWQgZHVtcFRpbGVzKCk7Ci0KLXByaXZhdGU6Ci0gICAgZG91YmxlIHRpbGVEaXN0YW5jZTIo
Y29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KSBjb25z
dDsKLSAgICB1bnNpZ25lZCB0aWxlQnl0ZVNpemUoKSBjb25zdDsKLQotICAgIHZvaWQgYWRkVGls
ZUZvckluZGV4KGNvbnN0IFRpbGVJbmRleCYpOwotCi0gICAgUGFzc1JlZlB0cjxUaWxlR3JpZFRp
bGU+IHRpbGVGb3JJbmRleChjb25zdCBUaWxlSW5kZXgmKSBjb25zdDsKLSAgICBJbnRSZWN0IHRp
bGVSZWN0Rm9ySW5kZXgoY29uc3QgVGlsZUluZGV4JikgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxU
aWxlR3JpZFRpbGU+IHRpbGVGb3JQb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotICAgIFRp
bGVJbmRleCB0aWxlSW5kZXhGb3JQb2ludChjb25zdCBJbnRQb2ludCYpIGNvbnN0OwotCi0gICAg
SW50UmVjdCBhZGp1c3RDb3ZlclJlY3RGb3JQYWdlQm91bmRzKGNvbnN0IEludFJlY3QmKSBjb25z
dDsKLSAgICBib29sIHNob3VsZFVzZU1pbmltYWxUaWxlQ292ZXJhZ2UoKSBjb25zdDsKLQotcHJp
dmF0ZTogICAgICAgIAotICAgIFRpbGVHcmlkKFRpbGVDYWNoZSosIGNvbnN0IEludFNpemUmKTsK
LQotICAgIFRpbGVDYWNoZSogbV90aWxlQ2FjaGU7Ci0gICAgUmV0YWluUHRyPENBTGF5ZXI+IG1f
dGlsZUhvc3RMYXllcjsKLQotICAgIEludFBvaW50IG1fb3JpZ2luOwotICAgIEludFNpemUgbV90
aWxlU2l6ZTsKLQotICAgIGZsb2F0IG1fc2NhbGU7Ci0KLSAgICB0eXBlZGVmIEhhc2hNYXA8VGls
ZUluZGV4LCBSZWZQdHI8VGlsZUdyaWRUaWxlPj4gVGlsZU1hcDsKLSAgICBUaWxlTWFwIG1fdGls
ZXM7Ci0KLSAgICBJbnRSZWN0IG1fdmFsaWRCb3VuZHM7Ci19OwotCi1zdGF0aWMgaW5saW5lIElu
dFBvaW50IHRvcExlZnQoY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICByZXR1cm4gcmVjdC5s
b2NhdGlvbigpOwotfQotCi1zdGF0aWMgaW5saW5lIEludFBvaW50IGJvdHRvbVJpZ2h0KGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgcmV0dXJuIEludFBvaW50KHJlY3QubWF4WCgpIC0gMSwg
cmVjdC5tYXhZKCkgLSAxKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYg
Ly8gUExBVEZPUk0oSU9TKQotI2VuZGlmIC8vIFRpbGVHcmlkX2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvVGlsZUdyaWQubW0JKHJldmlzaW9uIDE2NjQ1MykKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSw1Njcg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUaWxl
R3JpZC5oIgotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW5jbHVkZSAiTWVtb3J5UHJlc3N1cmVI
YW5kbGVyLmgiCi0jaW5jbHVkZSAiU3lzdGVtTWVtb3J5LmgiCi0jaW5jbHVkZSAiVGlsZUdyaWRU
aWxlLmgiCi0jaW5jbHVkZSAiVGlsZUxheWVyLmgiCi0jaW5jbHVkZSAiVGlsZUxheWVyUG9vbC5o
IgotI2luY2x1ZGUgIldBS1dpbmRvdy5oIgotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9Db3JlR3Jh
cGhpY3NQcml2YXRlLmg+Ci0jaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlLmg+Ci0jaW5j
bHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5oPgotI2luY2x1ZGUgPGFsZ29yaXRo
bT4KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVRpbGVH
cmlkOjpUaWxlR3JpZChUaWxlQ2FjaGUqIHRpbGVDYWNoZSwgY29uc3QgSW50U2l6ZSYgdGlsZVNp
emUpCi0gICAgOiBtX3RpbGVDYWNoZSh0aWxlQ2FjaGUpCi0gICAgLCBtX3RpbGVIb3N0TGF5ZXIo
YWRvcHROUyhbW1RpbGVIb3N0TGF5ZXIgYWxsb2NdIGluaXRXaXRoVGlsZUdyaWQ6dGhpc10pKQot
ICAgICwgbV90aWxlU2l6ZSh0aWxlU2l6ZSkKLSAgICAsIG1fc2NhbGUoMSkKLSAgICAsIG1fdmFs
aWRCb3VuZHMoMCwgMCwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSwgc3RkOjpudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKSkgCi17Ci19Ci0gICAgCi1UaWxlR3JpZDo6flRpbGVHcmlk
KCkKLXsKLSAgICBbbV90aWxlSG9zdExheWVyIHJlbW92ZUZyb21TdXBlcmxheWVyXTsKLX0KLQot
SW50UmVjdCBUaWxlR3JpZDo6dmlzaWJsZVJlY3QoKSBjb25zdAotewotICAgIEludFJlY3Qgdmlz
aWJsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KG1fdGlsZUNhY2hlLT52aXNpYmxlUmVjdEluTGF5
ZXIobV90aWxlSG9zdExheWVyLmdldCgpKSk7Ci0KLSAgICAvLyBXaGVuIGZhc3Qgc2Nyb2xsaW5n
IHRvIHRoZSB0b3AsIG1vdmUgdGhlIHZpc2libGUgcmVjdCB0aGVyZSBpbW1lZGlhdGVseSBzbyB3
ZSBoYXZlIHRpbGVzIHdoZW4gdGhlIHNjcm9sbGluZyBjb21wbGV0ZXMuCi0gICAgaWYgKG1fdGls
ZUNhY2hlLT50aWxpbmdNb2RlKCkgPT0gVGlsZUNhY2hlOjpTY3JvbGxUb1RvcCkKLSAgICAgICAg
dmlzaWJsZVJlY3Quc2V0WSgwKTsKLQotICAgIHJldHVybiB2aXNpYmxlUmVjdDsKLX0KLQotdm9p
ZCBUaWxlR3JpZDo6ZHJvcEFsbFRpbGVzKCkKLXsKLSAgICBtX3RpbGVzLmNsZWFyKCk7Ci19Ci0K
LXZvaWQgVGlsZUdyaWQ6OmRyb3BUaWxlc0ludGVyc2VjdGluZ1JlY3QoY29uc3QgSW50UmVjdCYg
ZHJvcFJlY3QpCi17Ci0gICAgZHJvcFRpbGVzQmV0d2VlblJlY3RzKGRyb3BSZWN0LCBJbnRSZWN0
KCkpOwotfQotCi12b2lkIFRpbGVHcmlkOjpkcm9wVGlsZXNPdXRzaWRlUmVjdChjb25zdCBJbnRS
ZWN0JiBrZWVwUmVjdCkKLXsKLSAgICBkcm9wVGlsZXNCZXR3ZWVuUmVjdHMoSW50UmVjdCgwLCAw
LCBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpLCBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1heCgpKSwga2VlcFJlY3QpOwotfQotCi12b2lkIFRpbGVHcmlkOjpkcm9wVGlsZXNCZXR3
ZWVuUmVjdHMoY29uc3QgSW50UmVjdCYgZHJvcFJlY3QsIGNvbnN0IEludFJlY3QmIGtlZXBSZWN0
KQotewotICAgIFZlY3RvcjxUaWxlSW5kZXg+IHRvUmVtb3ZlOwotICAgIGZvciAoY29uc3QgYXV0
byYgdGlsZSA6IG1fdGlsZXMpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZGV4JiBpbmRleCA9IHRp
bGUua2V5OwotICAgICAgICBJbnRSZWN0IHRpbGVSZWN0ID0gdGlsZS52YWx1ZS0+cmVjdCgpOwot
ICAgICAgICBpZiAodGlsZVJlY3QuaW50ZXJzZWN0cyhkcm9wUmVjdCkgJiYgIXRpbGVSZWN0Lmlu
dGVyc2VjdHMoa2VlcFJlY3QpKQotICAgICAgICAgICAgdG9SZW1vdmUuYXBwZW5kKGluZGV4KTsK
LSAgICB9Ci0gICAgdW5zaWduZWQgcmVtb3ZlQ291bnQgPSB0b1JlbW92ZS5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBuID0gMDsgbiA8IHJlbW92ZUNvdW50OyArK24pCi0gICAgICAgIG1fdGls
ZXMucmVtb3ZlKHRvUmVtb3ZlW25dKTsKLX0KLQotdW5zaWduZWQgVGlsZUdyaWQ6OnRpbGVCeXRl
U2l6ZSgpIGNvbnN0Ci17Ci0gICAgSW50U2l6ZSB0aWxlUGl4ZWxTaXplID0gbV90aWxlU2l6ZTsK
LSAgICB0aWxlUGl4ZWxTaXplLnNjYWxlKG1fdGlsZUNhY2hlLT5zY3JlZW5TY2FsZSgpKTsKLSAg
ICByZXR1cm4gVGlsZUxheWVyUG9vbDo6Ynl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKHRp
bGVQaXhlbFNpemUpOwotfQotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0YXRpYyBib29sIGlz
RmFydGhlckF3YXkoY29uc3Qgc3RkOjpwYWlyPGRvdWJsZSwgVD4mIGEsIGNvbnN0IHN0ZDo6cGFp
cjxkb3VibGUsIFQ+JiBiKQotewotICAgIHJldHVybiBhLmZpcnN0ID4gYi5maXJzdDsKLX0KLQot
Ym9vbCBUaWxlR3JpZDo6ZHJvcERpc3RhbnRUaWxlcyh1bnNpZ25lZCB0aWxlc05lZWRlZCwgZG91
YmxlIHNob3J0ZXN0RGlzdGFuY2UpCi17Ci0gICAgdW5zaWduZWQgYnl0ZXNQZXJUaWxlID0gdGls
ZUJ5dGVTaXplKCk7Ci0gICAgdW5zaWduZWQgYnl0ZXNOZWVkZWQgPSB0aWxlc05lZWRlZCAqIGJ5
dGVzUGVyVGlsZTsKLSAgICB1bnNpZ25lZCBieXRlc1VzZWQgPSB0aWxlQ291bnQoKSAqIGJ5dGVz
UGVyVGlsZTsKLSAgICB1bnNpZ25lZCBtYXhpbXVtQnl0ZXMgPSBtX3RpbGVDYWNoZS0+dGlsZUNh
cGFjaXR5Rm9yR3JpZCh0aGlzKTsKLQotICAgIGludCBieXRlc1RvUmVjbGFpbSA9IGludChieXRl
c1VzZWQpIC0gKGludChtYXhpbXVtQnl0ZXMpIC0gYnl0ZXNOZWVkZWQpOwotICAgIGlmIChieXRl
c1RvUmVjbGFpbSA8PSAwKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHVuc2lnbmVkIHRp
bGVzVG9SZW1vdmVDb3VudCA9IGJ5dGVzVG9SZWNsYWltIC8gYnl0ZXNQZXJUaWxlOwotCi0gICAg
SW50UmVjdCB2aXNpYmxlUmVjdCA9IHRoaXMtPnZpc2libGVSZWN0KCk7Ci0gICAgVmVjdG9yPHN0
ZDo6cGFpcjxkb3VibGUsIFRpbGVJbmRleD4+IHRvUmVtb3ZlOwotICAgIGZvciAoY29uc3QgYXV0
byYgdGlsZSA6IG1fdGlsZXMpIHsKLSAgICAgICAgY29uc3QgVGlsZUluZGV4JiBpbmRleCA9IHRp
bGUua2V5OwotICAgICAgICBjb25zdCBJbnRSZWN0JiB0aWxlUmVjdCA9IHRpbGUudmFsdWUtPnJl
Y3QoKTsKLSAgICAgICAgZG91YmxlIGRpc3RhbmNlID0gdGlsZURpc3RhbmNlMih2aXNpYmxlUmVj
dCwgdGlsZVJlY3QpOwotICAgICAgICBpZiAoZGlzdGFuY2UgPD0gc2hvcnRlc3REaXN0YW5jZSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB0b1JlbW92ZS5hcHBlbmQoc3RkOjptYWtl
X3BhaXIoZGlzdGFuY2UsIGluZGV4KSk7Ci0gICAgICAgIHN0ZDo6cHVzaF9oZWFwKHRvUmVtb3Zl
LmJlZ2luKCksIHRvUmVtb3ZlLmVuZCgpLCBzdGQ6OnB0cl9mdW4oaXNGYXJ0aGVyQXdheTxUaWxl
SW5kZXg+KSk7Ci0gICAgICAgIGlmICh0b1JlbW92ZS5zaXplKCkgPiB0aWxlc1RvUmVtb3ZlQ291
bnQpIHsKLSAgICAgICAgICAgIHN0ZDo6cG9wX2hlYXAodG9SZW1vdmUuYmVnaW4oKSwgdG9SZW1v
dmUuZW5kKCksIHN0ZDo6cHRyX2Z1bihpc0ZhcnRoZXJBd2F5PFRpbGVJbmRleD4pKTsKLSAgICAg
ICAgICAgIHRvUmVtb3ZlLnJlbW92ZUxhc3QoKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBzaXpl
X3QgcmVtb3ZlQ291bnQgPSB0b1JlbW92ZS5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgbiA9IDA7
IG4gPCByZW1vdmVDb3VudDsgKytuKQotICAgICAgICBtX3RpbGVzLnJlbW92ZSh0b1JlbW92ZVtu
XS5zZWNvbmQpOwotCi0gICAgaWYgKCFzaG9ydGVzdERpc3RhbmNlKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIHJldHVybiB0aWxlQ291bnQoKSAqIGJ5dGVzUGVyVGlsZSArIGJ5dGVzTmVl
ZGVkIDw9IG1heGltdW1CeXRlczsKLX0KLQotdm9pZCBUaWxlR3JpZDo6YWRkVGlsZXNDb3Zlcmlu
Z1JlY3QoY29uc3QgSW50UmVjdCYgcmVjdFRvQ292ZXIpCi17Ci0gICAgLy8gV2UgbmV2ZXIgZHJh
dyBhbnl0aGluZyBvdXRzaWRlIG9mIG91ciBib3VuZHMuCi0gICAgSW50UmVjdCByZWN0KHJlY3RU
b0NvdmVyKTsKLSAgICByZWN0LmludGVyc2VjdChib3VuZHMoKSk7Ci0gICAgaWYgKHJlY3QuaXNF
bXB0eSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBUaWxlSW5kZXggdG9wTGVmdEluZGV4ID0g
dGlsZUluZGV4Rm9yUG9pbnQodG9wTGVmdChyZWN0KSk7Ci0gICAgVGlsZUluZGV4IGJvdHRvbVJp
Z2h0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludChib3R0b21SaWdodChyZWN0KSk7Ci0gICAgZm9y
IChpbnQgeUluZGV4ID0gdG9wTGVmdEluZGV4LnkoKTsgeUluZGV4IDw9IGJvdHRvbVJpZ2h0SW5k
ZXgueSgpOyArK3lJbmRleCkgewotICAgICAgICBmb3IgKGludCB4SW5kZXggPSB0b3BMZWZ0SW5k
ZXgueCgpOyB4SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC54KCk7ICsreEluZGV4KSB7Ci0gICAg
ICAgICAgICBUaWxlSW5kZXggaW5kZXgoeEluZGV4LCB5SW5kZXgpOwotICAgICAgICAgICAgaWYg
KCF0aWxlRm9ySW5kZXgoaW5kZXgpKQotICAgICAgICAgICAgICAgIGFkZFRpbGVGb3JJbmRleChp
bmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgVGlsZUdyaWQ6OmFkZFRpbGVGb3JJ
bmRleChjb25zdCBUaWxlSW5kZXgmIGluZGV4KQotewotICAgIG1fdGlsZXMuc2V0KGluZGV4LCBU
aWxlR3JpZFRpbGU6OmNyZWF0ZSh0aGlzLCB0aWxlUmVjdEZvckluZGV4KGluZGV4KSkpOwotfQot
Ci1DQUxheWVyKiBUaWxlR3JpZDo6dGlsZUhvc3RMYXllcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fdGlsZUhvc3RMYXllci5nZXQoKTsKLX0KLQotSW50UmVjdCBUaWxlR3JpZDo6Ym91bmRzKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gSW50UmVjdChJbnRQb2ludCgpLCBJbnRTaXplKFt0aWxlSG9z
dExheWVyKCkgc2l6ZV0pKTsKLX0KLQotUGFzc1JlZlB0cjxUaWxlR3JpZFRpbGU+IFRpbGVHcmlk
Ojp0aWxlRm9ySW5kZXgoY29uc3QgVGlsZUluZGV4JiBpbmRleCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV90aWxlcy5nZXQoaW5kZXgpOwotfQotCi1JbnRSZWN0IFRpbGVHcmlkOjp0aWxlUmVjdEZv
ckluZGV4KGNvbnN0IFRpbGVJbmRleCYgaW5kZXgpIGNvbnN0Ci17Ci0gICAgSW50UmVjdCByZWN0
KGluZGV4LngoKSAqIG1fdGlsZVNpemUud2lkdGgoKSAtIChtX29yaWdpbi54KCkgPyBtX3RpbGVT
aXplLndpZHRoKCkgLSBtX29yaWdpbi54KCkgOiAwKSwKLSAgICAgICAgICAgICAgICAgaW5kZXgu
eSgpICogbV90aWxlU2l6ZS5oZWlnaHQoKSAtIChtX29yaWdpbi55KCkgPyBtX3RpbGVTaXplLmhl
aWdodCgpIC0gbV9vcmlnaW4ueSgpIDogMCksCi0gICAgICAgICAgICAgICAgIG1fdGlsZVNpemUu
d2lkdGgoKSwKLSAgICAgICAgICAgICAgICAgbV90aWxlU2l6ZS5oZWlnaHQoKSk7Ci0gICAgcmVj
dC5pbnRlcnNlY3QoYm91bmRzKCkpOwotICAgIHJldHVybiByZWN0OwotfQotCi1UaWxlR3JpZDo6
VGlsZUluZGV4IFRpbGVHcmlkOjp0aWxlSW5kZXhGb3JQb2ludChjb25zdCBJbnRQb2ludCYgcG9p
bnQpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fb3JpZ2luLngoKSA8IG1fdGlsZVNpemUud2lkdGgo
KSk7Ci0gICAgQVNTRVJUKG1fb3JpZ2luLnkoKSA8IG1fdGlsZVNpemUuaGVpZ2h0KCkpOwotICAg
IGludCB4ID0gKHBvaW50LngoKSArIChtX29yaWdpbi54KCkgPyBtX3RpbGVTaXplLndpZHRoKCkg
LSBtX29yaWdpbi54KCkgOiAwKSkgLyBtX3RpbGVTaXplLndpZHRoKCk7Ci0gICAgaW50IHkgPSAo
cG9pbnQueSgpICsgKG1fb3JpZ2luLnkoKSA/IG1fdGlsZVNpemUuaGVpZ2h0KCkgLSBtX29yaWdp
bi55KCkgOiAwKSkgLyBtX3RpbGVTaXplLmhlaWdodCgpOwotICAgIHJldHVybiBUaWxlSW5kZXgo
c3RkOjptYXgoeCwgMCksIHN0ZDo6bWF4KHksIDApKTsKLX0KLQotdm9pZCBUaWxlR3JpZDo6Y2Vu
dGVyVGlsZUdyaWRPcmlnaW4oY29uc3QgSW50UmVjdCYgdmlzaWJsZVJlY3QpCi17Ci0gICAgaWYg
KHZpc2libGVSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdW5zaWduZWQg
bWluaW11bUhvcml6b250YWxUaWxlcyA9IDEgKyAodmlzaWJsZVJlY3Qud2lkdGgoKSAtIDEpIC8g
bV90aWxlU2l6ZS53aWR0aCgpOwotICAgIHVuc2lnbmVkIG1pbmltdW1WZXJ0aWNhbFRpbGVzID0g
MSArICh2aXNpYmxlUmVjdC5oZWlnaHQoKSAtIDEpIC8gbV90aWxlU2l6ZS5oZWlnaHQoKTsKLSAg
ICBUaWxlSW5kZXggY3VycmVudFRvcExlZnRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KHRvcExl
ZnQodmlzaWJsZVJlY3QpKTsKLSAgICBUaWxlSW5kZXggY3VycmVudEJvdHRvbVJpZ2h0SW5kZXgg
PSB0aWxlSW5kZXhGb3JQb2ludChib3R0b21SaWdodCh2aXNpYmxlUmVjdCkpOwotICAgIHVuc2ln
bmVkIGN1cnJlbnRIb3Jpem9udGFsVGlsZXMgPSBjdXJyZW50Qm90dG9tUmlnaHRJbmRleC54KCkg
LSBjdXJyZW50VG9wTGVmdEluZGV4LngoKSArIDE7Ci0gICAgdW5zaWduZWQgY3VycmVudFZlcnRp
Y2FsVGlsZXMgPSBjdXJyZW50Qm90dG9tUmlnaHRJbmRleC55KCkgLSBjdXJyZW50VG9wTGVmdElu
ZGV4LnkoKSArIDE7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIHRpbGVzIGFscmVhZHksIG9ubHkgY2Vu
dGVyIGlmIHdlIHdvdWxkIGdldCBiZW5lZml0cyBmcm9tIGJvdGggZGlyZWN0aW9ucyAoYXMgd2Ug
bmVlZCB0byB0aHJvdyBvdXQgZXhpc3RpbmcgdGlsZXMpLgotICAgIGlmICh0aWxlQ291bnQoKSAm
JiAoY3VycmVudEhvcml6b250YWxUaWxlcyA9PSBtaW5pbXVtSG9yaXpvbnRhbFRpbGVzIHx8IGN1
cnJlbnRWZXJ0aWNhbFRpbGVzID09IG1pbmltdW1WZXJ0aWNhbFRpbGVzKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgSW50UG9pbnQgbmV3T3JpZ2luKDAsIDApOwotICAgIEludFNpemUgc2l6ZSA9
IGJvdW5kcygpLnNpemUoKTsKLSAgICBpZiAoc2l6ZS53aWR0aCgpID4gbV90aWxlU2l6ZS53aWR0
aCgpKSB7Ci0gICAgICAgIG5ld09yaWdpbi5zZXRYKCh2aXNpYmxlUmVjdC54KCkgLSAobWluaW11
bUhvcml6b250YWxUaWxlcyAqIG1fdGlsZVNpemUud2lkdGgoKSAtIHZpc2libGVSZWN0LndpZHRo
KCkpIC8gMikgJSBtX3RpbGVTaXplLndpZHRoKCkpOwotICAgICAgICBpZiAobmV3T3JpZ2luLngo
KSA8IDApCi0gICAgICAgICAgICBuZXdPcmlnaW4uc2V0WCgwKTsKLSAgICB9Ci0gICAgaWYgKHNp
emUuaGVpZ2h0KCkgPiBtX3RpbGVTaXplLmhlaWdodCgpKSB7Ci0gICAgICAgIG5ld09yaWdpbi5z
ZXRZKCh2aXNpYmxlUmVjdC55KCkgLSAobWluaW11bVZlcnRpY2FsVGlsZXMgKiBtX3RpbGVTaXpl
LmhlaWdodCgpIC0gdmlzaWJsZVJlY3QuaGVpZ2h0KCkpIC8gMikgJSBtX3RpbGVTaXplLmhlaWdo
dCgpKTsKLSAgICAgICAgaWYgKG5ld09yaWdpbi55KCkgPCAwKQotICAgICAgICAgICAgbmV3T3Jp
Z2luLnNldFkoMCk7Ci0gICAgfQotCi0gICAgLy8gRHJvcCBhbGwgZXhpc3RpbmcgdGlsZXMgaWYg
dGhlIG9yaWdpbiBtb3ZlZC4KLSAgICBpZiAobmV3T3JpZ2luID09IG1fb3JpZ2luKQotICAgICAg
ICByZXR1cm47Ci0gICAgbV90aWxlcy5jbGVhcigpOwotICAgIG1fb3JpZ2luID0gbmV3T3JpZ2lu
OwotfQotCi1QYXNzUmVmUHRyPFRpbGVHcmlkVGlsZT4gVGlsZUdyaWQ6OnRpbGVGb3JQb2ludChj
b25zdCBJbnRQb2ludCYgcG9pbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRpbGVGb3JJbmRleCh0
aWxlSW5kZXhGb3JQb2ludChwb2ludCkpOwotfQotCi1ib29sIFRpbGVHcmlkOjp0aWxlc0NvdmVy
KGNvbnN0IEludFJlY3QmIHJlY3QpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHRpbGVGb3JQb2ludChy
ZWN0LmxvY2F0aW9uKCkpICYmIHRpbGVGb3JQb2ludChJbnRQb2ludChyZWN0Lm1heFgoKSAtIDEs
IHJlY3QueSgpKSkgJiYKLSAgICB0aWxlRm9yUG9pbnQoSW50UG9pbnQocmVjdC54KCksIHJlY3Qu
bWF4WSgpIC0gMSkpICYmIHRpbGVGb3JQb2ludChJbnRQb2ludChyZWN0Lm1heFgoKSAtIDEsIHJl
Y3QubWF4WSgpIC0gMSkpOwotfQotCi12b2lkIFRpbGVHcmlkOjp1cGRhdGVUaWxlT3BhY2l0eSgp
Ci17Ci0gICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAgICBmb3Ig
KFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQp
Ci0gICAgICAgIFtpdC0+dmFsdWUtPnRpbGVMYXllcigpIHNldE9wYXF1ZTptX3RpbGVDYWNoZS0+
dGlsZXNPcGFxdWUoKV07Ci19Ci0KLXZvaWQgVGlsZUdyaWQ6OnVwZGF0ZVRpbGVCb3JkZXJWaXNp
YmlsaXR5KCkKLXsKLSAgICBUaWxlTWFwOjppdGVyYXRvciBlbmQgPSBtX3RpbGVzLmVuZCgpOwot
ICAgIGZvciAoVGlsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX3RpbGVzLmJlZ2luKCk7IGl0ICE9IGVu
ZDsgKytpdCkKLSAgICAgICAgaXQtPnZhbHVlLT5zaG93Qm9yZGVyKG1fdGlsZUNhY2hlLT50aWxl
Qm9yZGVyc1Zpc2libGUoKSk7Ci19Ci0KLXVuc2lnbmVkIFRpbGVHcmlkOjp0aWxlQ291bnQoKSBj
b25zdAotewotICAgIHJldHVybiBtX3RpbGVzLnNpemUoKTsKLX0KLQotYm9vbCBUaWxlR3JpZDo6
Y2hlY2tEb1NpbmdsZVRpbGVMYXlvdXQoKQotewotICAgIEludFNpemUgc2l6ZSA9IGJvdW5kcygp
LnNpemUoKTsKLSAgICBpZiAoc2l6ZS53aWR0aCgpID4gbV90aWxlU2l6ZS53aWR0aCgpIHx8IHNp
emUuaGVpZ2h0KCkgPiBtX3RpbGVTaXplLmhlaWdodCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpZiAobV9vcmlnaW4gIT0gSW50UG9pbnQoMCwgMCkpIHsKLSAgICAgICAgbV90aWxl
cy5jbGVhcigpOwotICAgICAgICBtX29yaWdpbiA9IEludFBvaW50KDAsIDApOwotICAgIH0KLQot
ICAgIGRyb3BJbnZhbGlkVGlsZXMoKTsKLQotICAgIGlmIChzaXplLmlzRW1wdHkoKSkgewotICAg
ICAgICBBU1NFUlQoIW1fdGlsZXMuZ2V0KFRpbGVJbmRleCgwLCAwKSkpOwotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBUaWxlSW5kZXggb3JpZ2luSW5kZXgoMCwgMCk7Ci0gICAg
aWYgKCFtX3RpbGVzLmdldChvcmlnaW5JbmRleCkpCi0gICAgICAgIG1fdGlsZXMuc2V0KG9yaWdp
bkluZGV4LCBUaWxlR3JpZFRpbGU6OmNyZWF0ZSh0aGlzLCB0aWxlUmVjdEZvckluZGV4KG9yaWdp
bkluZGV4KSkpOwotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgVGlsZUdyaWQ6OnVwZGF0
ZUhvc3RMYXllclNpemUoKQotewotICAgIENBTGF5ZXIqIGhvc3RMYXllciA9IG1fdGlsZUNhY2hl
LT5ob3N0TGF5ZXIoKTsKLSAgICBDR1JlY3QgdGlsZUhvc3RCb3VuZHMgPSBbaG9zdExheWVyIGNv
bnZlcnRSZWN0Oltob3N0TGF5ZXIgYm91bmRzXSB0b0xheWVyOnRpbGVIb3N0TGF5ZXIoKV07Ci0g
ICAgQ0dTaXplIHRyYW5zZm9ybWVkU2l6ZTsKLSAgICB0cmFuc2Zvcm1lZFNpemUud2lkdGggPSBD
R1JvdW5kKHRpbGVIb3N0Qm91bmRzLnNpemUud2lkdGgpOwotICAgIHRyYW5zZm9ybWVkU2l6ZS5o
ZWlnaHQgPSBDR1JvdW5kKHRpbGVIb3N0Qm91bmRzLnNpemUuaGVpZ2h0KTsKLQotICAgIENHUmVj
dCBib3VuZHMgPSBbdGlsZUhvc3RMYXllcigpIGJvdW5kc107Ci0gICAgaWYgKENHU2l6ZUVxdWFs
VG9TaXplKGJvdW5kcy5zaXplLCB0cmFuc2Zvcm1lZFNpemUpKQotICAgICAgICByZXR1cm47Ci0g
ICAgYm91bmRzLnNpemUgPSB0cmFuc2Zvcm1lZFNpemU7Ci0gICAgW3RpbGVIb3N0TGF5ZXIoKSBz
ZXRCb3VuZHM6Ym91bmRzXTsKLX0KLQotdm9pZCBUaWxlR3JpZDo6ZHJvcEludmFsaWRUaWxlcygp
Ci17Ci0gICAgSW50UmVjdCBib3VuZHMgPSB0aGlzLT5ib3VuZHMoKTsKLSAgICBJbnRSZWN0IGRy
b3BCb3VuZHMgPSBpbnRlcnNlY3Rpb24obV92YWxpZEJvdW5kcywgYm91bmRzKTsKLSAgICBWZWN0
b3I8VGlsZUluZGV4PiB0b1JlbW92ZTsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHRpbGUgOiBtX3Rp
bGVzKSB7Ci0gICAgICAgIGNvbnN0IFRpbGVJbmRleCYgaW5kZXggPSB0aWxlLmtleTsKLSAgICAg
ICAgY29uc3QgSW50UmVjdCYgdGlsZVJlY3QgPSB0aWxlLnZhbHVlLT5yZWN0KCk7Ci0gICAgICAg
IEludFJlY3QgZXhwZWN0ZWRUaWxlUmVjdCA9IHRpbGVSZWN0Rm9ySW5kZXgoaW5kZXgpOwotICAg
ICAgICBpZiAoZXhwZWN0ZWRUaWxlUmVjdCAhPSB0aWxlUmVjdCB8fCAhZHJvcEJvdW5kcy5jb250
YWlucyh0aWxlUmVjdCkpCi0gICAgICAgICAgICB0b1JlbW92ZS5hcHBlbmQoaW5kZXgpOwotICAg
IH0KLSAgICB1bnNpZ25lZCByZW1vdmVDb3VudCA9IHRvUmVtb3ZlLnNpemUoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIG4gPSAwOyBuIDwgcmVtb3ZlQ291bnQ7ICsrbikKLSAgICAgICAgbV90aWxlcy5y
ZW1vdmUodG9SZW1vdmVbbl0pOwotCi0gICAgbV92YWxpZEJvdW5kcyA9IGJvdW5kczsKLX0KLQot
dm9pZCBUaWxlR3JpZDo6aW52YWxpZGF0ZVRpbGVzKGNvbnN0IEludFJlY3QmIGRpcnR5UmVjdCkK
LXsKLSAgICBpZiAoIWhhc1RpbGVzKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEludFJlY3Qg
Ym91bmRzID0gdGhpcy0+Ym91bmRzKCk7Ci0gICAgaWYgKGludGVyc2VjdGlvbihib3VuZHMsIG1f
dmFsaWRCb3VuZHMpICE9IG1fdmFsaWRCb3VuZHMpIHsKLSAgICAgICAgLy8gVGhlIGJvdW5kcyBo
YXZlIGdvdCBzbWFsbGVyLiBFdmVyeXRoaW5nIG91dHNpZGUgd2lsbCBhbHNvIGJlIGNvbnNpZGVy
ZWQgaW52YWxpZCBhbmQgd2lsbCBiZSBkcm9wcGVkIGJ5IGRyb3BJbnZhbGlkVGlsZXMoKS4KLSAg
ICAgICAgLy8gRHVlIHRvIGRpcnR5UmVjdCBiZWluZyBsaW1pdGVkIHRvIGN1cnJlbnQgYm91bmRz
IHRoZSB0aWxlcyB0aGF0IGFyZSB0ZW1wb3JhcmlseSBvdXRzaWRlIG1pZ2h0IG1pc3MgaW52YWxp
ZGF0aW9uIAotICAgICAgICAvLyBjb21wbGV0ZWx5IG90aHdlcndpc2UuCi0gICAgICAgIG1fdmFs
aWRCb3VuZHMgPSBib3VuZHM7Ci0gICAgfQotCi0gICAgVmVjdG9yPFRpbGVJbmRleD4gaW52YWxp
ZGF0ZWRUaWxlczsKLQotICAgIGlmIChkaXJ0eVJlY3Qud2lkdGgoKSA+IG1fdGlsZVNpemUud2lk
dGgoKSAqIDQgfHwgZGlydHlSZWN0LmhlaWdodCgpID4gbV90aWxlU2l6ZS5oZWlnaHQoKSAqIDQp
IHsKLSAgICAgICAgLy8gRm9yIGxhcmdlIGludmFsaWRhdGVzLCBpdGVyYXRlIG92ZXIgbGl2ZSB0
aWxlcy4KLSAgICAgICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5lbmQoKTsKLSAg
ICAgICAgZm9yIChUaWxlTWFwOjppdGVyYXRvciBpdCA9IG1fdGlsZXMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgICAgICBUaWxlR3JpZFRpbGUqIHRpbGUgPSBpdC0+dmFsdWUu
Z2V0KCk7Ci0gICAgICAgICAgICBpZiAoIXRpbGUtPnJlY3QoKS5pbnRlcnNlY3RzKGRpcnR5UmVj
dCkpCi0gICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHRpbGUtPmludmFsaWRh
dGVSZWN0KGRpcnR5UmVjdCk7Ci0gICAgICAgICAgICBpbnZhbGlkYXRlZFRpbGVzLmFwcGVuZChp
dC0+a2V5KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIFRpbGVJbmRleCB0b3BM
ZWZ0SW5kZXggPSB0aWxlSW5kZXhGb3JQb2ludCh0b3BMZWZ0KGRpcnR5UmVjdCkpOwotICAgICAg
ICBUaWxlSW5kZXggYm90dG9tUmlnaHRJbmRleCA9IHRpbGVJbmRleEZvclBvaW50KGJvdHRvbVJp
Z2h0KGRpcnR5UmVjdCkpOwotICAgICAgICBmb3IgKGludCB5SW5kZXggPSB0b3BMZWZ0SW5kZXgu
eSgpOyB5SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC55KCk7ICsreUluZGV4KSB7Ci0gICAgICAg
ICAgICBmb3IgKGludCB4SW5kZXggPSB0b3BMZWZ0SW5kZXgueCgpOyB4SW5kZXggPD0gYm90dG9t
UmlnaHRJbmRleC54KCk7ICsreEluZGV4KSB7Ci0gICAgICAgICAgICAgICAgVGlsZUluZGV4IGlu
ZGV4KHhJbmRleCwgeUluZGV4KTsKLSAgICAgICAgICAgICAgICBSZWZQdHI8VGlsZUdyaWRUaWxl
PiB0aWxlID0gdGlsZUZvckluZGV4KGluZGV4KTsKLSAgICAgICAgICAgICAgICBpZiAoIXRpbGUp
Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIGlmICghdGls
ZS0+cmVjdCgpLmludGVyc2VjdHMoZGlydHlSZWN0KSkKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgdGlsZS0+aW52YWxpZGF0ZVJlY3QoZGlydHlSZWN0KTsK
LSAgICAgICAgICAgICAgICBpbnZhbGlkYXRlZFRpbGVzLmFwcGVuZChpbmRleCk7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKGludmFsaWRhdGVkVGlsZXMuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgLy8gV2hlbiB1c2luZyBtaW5pbWFsIGNvdmVyYWdl
LCBkcm9wIHNwZWN1bGF0aXZlIHRpbGVzIGluc3RlYWQgb2YgdXBkYXRpbmcgdGhlbS4KLSAgICBp
ZiAoIXNob3VsZFVzZU1pbmltYWxUaWxlQ292ZXJhZ2UoKSkKLSAgICAgICAgcmV0dXJuOwotICAg
IGlmIChtX3RpbGVDYWNoZS0+dGlsaW5nTW9kZSgpICE9IFRpbGVDYWNoZTo6TWluaW1hbCAmJiBt
X3RpbGVDYWNoZS0+dGlsaW5nTW9kZSgpICE9IFRpbGVDYWNoZTo6Tm9ybWFsKQotICAgICAgICBy
ZXR1cm47Ci0gICAgSW50UmVjdCB2aXNpYmxlUmVjdCA9IHRoaXMtPnZpc2libGVSZWN0KCk7Ci0g
ICAgdW5zaWduZWQgY291bnQgPSBpbnZhbGlkYXRlZFRpbGVzLnNpemUoKTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBSZWZQdHI8VGlsZUdyaWRU
aWxlPiB0aWxlID0gdGlsZUZvckluZGV4KGludmFsaWRhdGVkVGlsZXNbaV0pOwotICAgICAgICBp
ZiAoIXRpbGUtPnJlY3QoKS5pbnRlcnNlY3RzKHZpc2libGVSZWN0KSkKLSAgICAgICAgICAgIG1f
dGlsZXMucmVtb3ZlKGludmFsaWRhdGVkVGlsZXNbaV0pOwotICAgIH0KLX0KLQotYm9vbCBUaWxl
R3JpZDo6c2hvdWxkVXNlTWluaW1hbFRpbGVDb3ZlcmFnZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fdGlsZUNhY2hlLT50aWxpbmdNb2RlKCkgPT0gVGlsZUNhY2hlOjpNaW5pbWFsCi0gICAgICAg
IHx8ICFtX3RpbGVDYWNoZS0+aXNTcGVjdWxhdGl2ZVRpbGVDcmVhdGlvbkVuYWJsZWQoKQotICAg
ICAgICB8fCBtZW1vcnlQcmVzc3VyZUhhbmRsZXIoKS5oYXNSZWNlaXZlZE1lbW9yeVByZXNzdXJl
KCk7Ci19Ci0KLUludFJlY3QgVGlsZUdyaWQ6OmFkanVzdENvdmVyUmVjdEZvclBhZ2VCb3VuZHMo
Y29uc3QgSW50UmVjdCYgcmVjdCkgY29uc3QKLXsKLSAgICAvLyBBZGp1c3QgdGhlIHJlY3Qgc28g
dGhhdCBpdCBzdGF5cyB3aXRoaW4gdGhlIGJvdW5kcyBhbmQga2VlcHMgdGhlIHBpeGVsIHNpemUu
Ci0gICAgSW50UmVjdCBib3VuZHMgPSB0aGlzLT5ib3VuZHMoKTsKLSAgICBJbnRSZWN0IGFkanVz
dGVkUmVjdCA9IHJlY3Q7Ci0gICAgYWRqdXN0ZWRSZWN0Lm1vdmUocmVjdC54KCkgPCBib3VuZHMu
eCgpID8gYm91bmRzLngoKSAtIHJlY3QueCgpIDogMCwKLSAgICAgICAgICAgICAgcmVjdC55KCkg
PCBib3VuZHMueSgpID8gYm91bmRzLnkoKSAtIHJlY3QueSgpIDogMCk7Ci0gICAgYWRqdXN0ZWRS
ZWN0Lm1vdmUocmVjdC5tYXhYKCkgPiBib3VuZHMubWF4WCgpID8gYm91bmRzLm1heFgoKSAtIHJl
Y3QubWF4WCgpIDogMCwKLSAgICAgICAgICAgICAgcmVjdC5tYXhZKCkgPiBib3VuZHMubWF4WSgp
ID8gYm91bmRzLm1heFkoKSAtIHJlY3QubWF4WSgpIDogMCk7Ci0gICAgYWRqdXN0ZWRSZWN0ID0g
aW50ZXJzZWN0aW9uKGJvdW5kcywgYWRqdXN0ZWRSZWN0KTsKLSAgICBpZiAoYWRqdXN0ZWRSZWN0
ID09IHJlY3QgfHwgYWRqdXN0ZWRSZWN0LmlzRW1wdHkoKSB8fCBzaG91bGRVc2VNaW5pbWFsVGls
ZUNvdmVyYWdlKCkpCi0gICAgICAgIHJldHVybiBhZGp1c3RlZFJlY3Q7Ci0gICAgaW50IHBpeGVs
cyA9IGFkanVzdGVkUmVjdC53aWR0aCgpICogYWRqdXN0ZWRSZWN0LmhlaWdodCgpOwotICAgIGlm
IChhZGp1c3RlZFJlY3Qud2lkdGgoKSAhPSByZWN0LndpZHRoKCkpCi0gICAgICAgIGFkanVzdGVk
UmVjdC5pbmZsYXRlWSgocGl4ZWxzIC8gYWRqdXN0ZWRSZWN0LndpZHRoKCkgLSBhZGp1c3RlZFJl
Y3QuaGVpZ2h0KCkpIC8gMik7Ci0gICAgZWxzZSBpZiAoYWRqdXN0ZWRSZWN0LmhlaWdodCgpICE9
IHJlY3QuaGVpZ2h0KCkpCi0gICAgICAgIGFkanVzdGVkUmVjdC5pbmZsYXRlWCgocGl4ZWxzIC8g
YWRqdXN0ZWRSZWN0LmhlaWdodCgpIC0gYWRqdXN0ZWRSZWN0LndpZHRoKCkpIC8gMik7Ci0gICAg
cmV0dXJuIGludGVyc2VjdGlvbihhZGp1c3RlZFJlY3QsIGJvdW5kcyk7Ci19Ci0KLUludFJlY3Qg
VGlsZUdyaWQ6OmNhbGN1bGF0ZUNvdmVyUmVjdChjb25zdCBJbnRSZWN0JiB2aXNpYmxlUmVjdCwg
Ym9vbCYgY2VudGVyR3JpZCkKLXsKLSAgICAvLyBVc2UgbWluaW11bSBjb3ZlclJlY3QgaWYgd2Ug
YXJlIHVuZGVyIG1lbW9yeSBwcmVzc3VyZS4KLSAgICBpZiAoc2hvdWxkVXNlTWluaW1hbFRpbGVD
b3ZlcmFnZSgpKSB7Ci0gICAgICAgIGNlbnRlckdyaWQgPSB0cnVlOwotICAgICAgICByZXR1cm4g
dmlzaWJsZVJlY3Q7Ci0gICAgfQotICAgIEludFJlY3QgY292ZXJSZWN0ID0gdmlzaWJsZVJlY3Q7
Ci0gICAgY2VudGVyR3JpZCA9IGZhbHNlOwotICAgIGNvdmVyUmVjdC5pbmZsYXRlWCh2aXNpYmxl
UmVjdC53aWR0aCgpIC8gMik7Ci0gICAgY292ZXJSZWN0LmluZmxhdGVZKHZpc2libGVSZWN0Lmhl
aWdodCgpKTsKLSAgICByZXR1cm4gYWRqdXN0Q292ZXJSZWN0Rm9yUGFnZUJvdW5kcyhjb3ZlclJl
Y3QpOwotfQotCi1kb3VibGUgVGlsZUdyaWQ6OnRpbGVEaXN0YW5jZTIoY29uc3QgSW50UmVjdCYg
dmlzaWJsZVJlY3QsIGNvbnN0IEludFJlY3QmIHRpbGVSZWN0KSBjb25zdAotewotICAgIC8vIFRo
ZSAiZGlzdGFuY2UiIGNhbGN1bGF0ZWQgaGVyZSBpcyB1c2VkIHRvIHBpY2sgd2hpY2ggdGlsZSB0
byBjYWNoZSBuZXh0LiBUaGUgaWRlYSBpcyB0byBjcmVhdGUgdGhvc2UKLSAgICAvLyBjbG9zZXN0
IHRvIHRoZSBjdXJyZW50IHZpZXdwb3J0IGZpcnN0IHNvIHRoZSB1c2VyIGlzIG1vcmUgbGlrZWx5
IHRvIHNlZSBhbHJlYWR5IHJlbmRlcmVkIGNvbnRlbnQgd2Ugc2hlCi0gICAgLy8gc2Nyb2xscy4g
VGhlIGNhbGN1bGF0aW9uIGlzIHdlaWdodGVkIHRvIHByZWZlciB2ZXJ0aWNhbCBhbmQgZG93bndh
cmQgZGlyZWN0aW9uLgotICAgIGlmICh2aXNpYmxlUmVjdC5pbnRlcnNlY3RzKHRpbGVSZWN0KSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgSW50UG9pbnQgdmlzaWJsZUNlbnRlciA9IHZpc2libGVS
ZWN0LmxvY2F0aW9uKCkgKyBJbnRTaXplKHZpc2libGVSZWN0LndpZHRoKCkgLyAyLCB2aXNpYmxl
UmVjdC5oZWlnaHQoKSAvIDIpOwotICAgIEludFBvaW50IHRpbGVDZW50ZXIgPSB0aWxlUmVjdC5s
b2NhdGlvbigpICsgSW50U2l6ZSh0aWxlUmVjdC53aWR0aCgpIC8gMiwgdGlsZVJlY3QuaGVpZ2h0
KCkgLyAyKTsKLSAgICAKLSAgICBkb3VibGUgaG9yaXpvbnRhbEJpYXMgPSAxLjA7Ci0gICAgZG91
YmxlIGxlZnR3YXJkQmlhcyA9IDEuMDsKLSAgICBkb3VibGUgcmlnaHR3YXJkQmlhcyA9IDEuMDsK
LQotICAgIGRvdWJsZSB2ZXJ0aWNhbEJpYXMgPSAxLjA7Ci0gICAgZG91YmxlIHVwd2FyZEJpYXMg
PSAxLjA7Ci0gICAgZG91YmxlIGRvd253YXJkQmlhcyA9IDEuMDsKLQotICAgIGNvbnN0IGRvdWJs
ZSB0aWxpbmdCaWFzVmVyeUxpa2VseSA9IDAuODsKLSAgICBjb25zdCBkb3VibGUgdGlsaW5nQmlh
c0xpa2VseSA9IDAuOTsKLQotICAgIHN3aXRjaCAobV90aWxlQ2FjaGUtPnRpbGluZ0RpcmVjdGlv
bigpKSB7Ci0gICAgY2FzZSBUaWxlQ2FjaGU6OlRpbGluZ0RpcmVjdGlvblVwOgotICAgICAgICB2
ZXJ0aWNhbEJpYXMgPSB0aWxpbmdCaWFzVmVyeUxpa2VseTsKLSAgICAgICAgdXB3YXJkQmlhcyA9
IHRpbGluZ0JpYXNMaWtlbHk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGlsZUNhY2hlOjpU
aWxpbmdEaXJlY3Rpb25Eb3duOgotICAgICAgICB2ZXJ0aWNhbEJpYXMgPSB0aWxpbmdCaWFzVmVy
eUxpa2VseTsKLSAgICAgICAgZG93bndhcmRCaWFzID0gdGlsaW5nQmlhc0xpa2VseTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBUaWxlQ2FjaGU6OlRpbGluZ0RpcmVjdGlvbkxlZnQ6Ci0gICAg
ICAgIGhvcml6b250YWxCaWFzID0gdGlsaW5nQmlhc1ZlcnlMaWtlbHk7Ci0gICAgICAgIGxlZnR3
YXJkQmlhcyA9IHRpbGluZ0JpYXNMaWtlbHk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVGls
ZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb25SaWdodDoKLSAgICAgICAgaG9yaXpvbnRhbEJpYXMgPSB0
aWxpbmdCaWFzVmVyeUxpa2VseTsKLSAgICAgICAgcmlnaHR3YXJkQmlhcyA9IHRpbGluZ0JpYXNM
aWtlbHk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGRvdWJsZSB4U2NhbGUgPSBob3Jp
em9udGFsQmlhcyAqIHZpc2libGVSZWN0LmhlaWdodCgpIC8gdmlzaWJsZVJlY3Qud2lkdGgoKSAq
ICh0aWxlQ2VudGVyLngoKSA+PSB2aXNpYmxlQ2VudGVyLngoKSA/IHJpZ2h0d2FyZEJpYXMgOiBs
ZWZ0d2FyZEJpYXMpOwotICAgIGRvdWJsZSB5U2NhbGUgPSB2ZXJ0aWNhbEJpYXMgKiB2aXNpYmxl
UmVjdC53aWR0aCgpIC8gdmlzaWJsZVJlY3QuaGVpZ2h0KCkgKiAodGlsZUNlbnRlci55KCkgPj0g
dmlzaWJsZUNlbnRlci55KCkgPyBkb3dud2FyZEJpYXMgOiB1cHdhcmRCaWFzKTsKLQotICAgIGRv
dWJsZSB4RGlzdGFuY2UgPSB4U2NhbGUgKiAodGlsZUNlbnRlci54KCkgLSB2aXNpYmxlQ2VudGVy
LngoKSk7Ci0gICAgZG91YmxlIHlEaXN0YW5jZSA9IHlTY2FsZSAqICh0aWxlQ2VudGVyLnkoKSAt
IHZpc2libGVDZW50ZXIueSgpKTsKLQotICAgIGRvdWJsZSBkaXN0YW5jZTIgPSB4RGlzdGFuY2Ug
KiB4RGlzdGFuY2UgKyB5RGlzdGFuY2UgKiB5RGlzdGFuY2U7Ci0gICAgcmV0dXJuIGRpc3RhbmNl
MjsKLX0KLQotdm9pZCBUaWxlR3JpZDo6Y3JlYXRlVGlsZXMoVGlsZUNhY2hlOjpTeW5jaHJvbm91
c1RpbGVDcmVhdGlvbk1vZGUgY3JlYXRpb25Nb2RlKQotewotICAgIEludFJlY3QgdmlzaWJsZVJl
Y3QgPSB0aGlzLT52aXNpYmxlUmVjdCgpOwotICAgIGlmICh2aXNpYmxlUmVjdC5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIC8vIERyb3AgdGlsZXMgdGhhdCBhcmUgd3Jvbmcgc2l6
ZSBvciBvdXRzaWRlIHRoZSBmcmFtZSAoYmVjYXVzZSB0aGUgZnJhbWUgaGFzIGJlZW4gcmVzaXpl
ZCkuCi0gICAgZHJvcEludmFsaWRUaWxlcygpOwotCi0gICAgYm9vbCBjZW50ZXJHcmlkOwotICAg
IEludFJlY3QgY292ZXJSZWN0ID0gY2FsY3VsYXRlQ292ZXJSZWN0KHZpc2libGVSZWN0LCBjZW50
ZXJHcmlkKTsKLQotICAgIC8vIElmIHRpbGUgc2l6ZSBpcyBiaWdnZXIgdGhhbiB0aGUgdmlldywg
Y2VudGVyaW5nIG1pbmltaXplcyB0aGUgcGFpbnRpbmcgbmVlZGVkIHRvIGNvdmVyIHRoZSBzY3Jl
ZW4uCi0gICAgLy8gVGhpcyBpcyBlc3BlY2lhbGx5IHVzZWZ1bCBhZnRlciB6b29taW5nIAotICAg
IGNlbnRlckdyaWQgPSBjZW50ZXJHcmlkIHx8ICF0aWxlQ291bnQoKTsKLSAgICBpZiAoY2VudGVy
R3JpZCkKLSAgICAgICAgY2VudGVyVGlsZUdyaWRPcmlnaW4odmlzaWJsZVJlY3QpOwotCi0gICAg
ZG91YmxlIHNob3J0ZXN0RGlzdGFuY2UgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Omlu
ZmluaXR5KCk7Ci0gICAgZG91YmxlIGNvdmVyZWREaXN0YW5jZSA9IDA7Ci0gICAgVmVjdG9yPFRp
bGVHcmlkOjpUaWxlSW5kZXg+IHRpbGVzVG9DcmVhdGU7Ci0gICAgdW5zaWduZWQgcGVuZGluZ1Rp
bGVDb3VudCA9IDA7Ci0KLSAgICBUaWxlR3JpZDo6VGlsZUluZGV4IHRvcExlZnRJbmRleCA9IHRp
bGVJbmRleEZvclBvaW50KHRvcExlZnQoY292ZXJSZWN0KSk7Ci0gICAgVGlsZUdyaWQ6OlRpbGVJ
bmRleCBib3R0b21SaWdodEluZGV4ID0gdGlsZUluZGV4Rm9yUG9pbnQoYm90dG9tUmlnaHQoY292
ZXJSZWN0KSk7Ci0gICAgZm9yIChpbnQgeUluZGV4ID0gdG9wTGVmdEluZGV4LnkoKTsgeUluZGV4
IDw9IGJvdHRvbVJpZ2h0SW5kZXgueSgpOyArK3lJbmRleCkgewotICAgICAgICBmb3IgKGludCB4
SW5kZXggPSB0b3BMZWZ0SW5kZXgueCgpOyB4SW5kZXggPD0gYm90dG9tUmlnaHRJbmRleC54KCk7
ICsreEluZGV4KSB7Ci0gICAgICAgICAgICBUaWxlR3JpZDo6VGlsZUluZGV4IGluZGV4KHhJbmRl
eCwgeUluZGV4KTsKLSAgICAgICAgICAgIC8vIEN1cnJlbnRseSB2aXNpYmxlIHRpbGVzIGhhdmUg
ZGlzdGFuY2Ugb2YgMCBhbmQgZ2V0IGFsbCBjcmVhdGVkIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9u
LgotICAgICAgICAgICAgZG91YmxlIGRpc3RhbmNlID0gdGlsZURpc3RhbmNlMih2aXNpYmxlUmVj
dCwgdGlsZVJlY3RGb3JJbmRleChpbmRleCkpOwotICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4g
Y292ZXJlZERpc3RhbmNlKQotICAgICAgICAgICAgICAgIGNvdmVyZWREaXN0YW5jZSA9IGRpc3Rh
bmNlOwotICAgICAgICAgICAgaWYgKHRpbGVGb3JJbmRleChpbmRleCkpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICArK3BlbmRpbmdUaWxlQ291bnQ7Ci0gICAgICAgICAg
ICBpZiAoZGlzdGFuY2UgPiBzaG9ydGVzdERpc3RhbmNlKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgaWYgKGRpc3RhbmNlIDwgc2hvcnRlc3REaXN0YW5jZSkgewotICAg
ICAgICAgICAgICAgIHRpbGVzVG9DcmVhdGUuY2xlYXIoKTsKLSAgICAgICAgICAgICAgICBzaG9y
dGVzdERpc3RhbmNlID0gZGlzdGFuY2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0aWxl
c1RvQ3JlYXRlLmFwcGVuZChpbmRleCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBzaXplX3Qg
dGlsZXNUb0NyZWF0ZUNvdW50ID0gdGlsZXNUb0NyZWF0ZS5zaXplKCk7Ci0KLSAgICAvLyBUaWxl
IGNyZWF0aW9uIHRpbWVyIHdpbGwgaW52b2tlIHRoaXMgZnVuY3Rpb24gYWdhaW4gaW4gQ292ZXJT
cGVjdWxhdGl2ZSBtb2RlLgotICAgIGJvb2wgY2FuZGlkYXRlVGlsZXNBcmVTcGVjdWxhdGl2ZSA9
IHNob3J0ZXN0RGlzdGFuY2UgPiAwOwotICAgIGlmIChjcmVhdGlvbk1vZGUgPT0gVGlsZUNhY2hl
OjpDb3ZlclZpc2libGVPbmx5ICYmIGNhbmRpZGF0ZVRpbGVzQXJlU3BlY3VsYXRpdmUpCi0gICAg
ICAgIHRpbGVzVG9DcmVhdGVDb3VudCA9IDA7Ci0KLSAgICAvLyBFdmVuIGlmIHdlIGRvbid0IGNy
ZWF0ZSBhbnkgdGlsZXMsIHdlIHNob3VsZCBzdGlsbCBkcm9wIGRpc3RhbnQgdGlsZXMKLSAgICAv
LyBpbiBjYXNlIGNvdmVyUmVjdCBnb3Qgc21hbGxlci4KLSAgICBkb3VibGUga2VlcERpc3RhbmNl
ID0gc3RkOjptaW4oc2hvcnRlc3REaXN0YW5jZSwgY292ZXJlZERpc3RhbmNlKTsKLSAgICBpZiAo
IWRyb3BEaXN0YW50VGlsZXModGlsZXNUb0NyZWF0ZUNvdW50LCBrZWVwRGlzdGFuY2UpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQocGVuZGluZ1RpbGVDb3VudCA+PSB0aWxlc1RvQ3Jl
YXRlQ291bnQpOwotICAgIGlmICghcGVuZGluZ1RpbGVDb3VudCkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgZm9yIChzaXplX3QgbiA9IDA7IG4gPCB0aWxlc1RvQ3JlYXRlQ291bnQ7ICsrbikKLSAg
ICAgICAgYWRkVGlsZUZvckluZGV4KHRpbGVzVG9DcmVhdGVbbl0pOwotCi0gICAgYm9vbCBkaWRD
cmVhdGVUaWxlcyA9ICEhdGlsZXNUb0NyZWF0ZUNvdW50OwotICAgIGJvb2wgY3JlYXRlTW9yZVRp
bGVzID0gcGVuZGluZ1RpbGVDb3VudCA+IHRpbGVzVG9DcmVhdGVDb3VudDsKLSAgICBtX3RpbGVD
YWNoZS0+ZmluaXNoZWRDcmVhdGluZ1RpbGVzKGRpZENyZWF0ZVRpbGVzLCBjcmVhdGVNb3JlVGls
ZXMpOwotfQotCi12b2lkIFRpbGVHcmlkOjpkdW1wVGlsZXMoKQotewotICAgIEludFJlY3Qgdmlz
aWJsZVJlY3QgPSB0aGlzLT52aXNpYmxlUmVjdCgpOwotICAgIE5TTG9nKEAidHJhbnNmb3JtZWQg
dmlzaWJsZVJlY3QgPSBbJTZkICU2ZCAlNmQgJTZkXSIsIHZpc2libGVSZWN0LngoKSwgdmlzaWJs
ZVJlY3QueSgpLCB2aXNpYmxlUmVjdC53aWR0aCgpLCB2aXNpYmxlUmVjdC5oZWlnaHQoKSk7Ci0g
ICAgdW5zaWduZWQgaSA9IDA7Ci0gICAgVGlsZU1hcDo6aXRlcmF0b3IgZW5kID0gbV90aWxlcy5l
bmQoKTsKLSAgICBmb3IgKFRpbGVNYXA6Oml0ZXJhdG9yIGl0ID0gbV90aWxlcy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKLSAgICAgICAgVGlsZUluZGV4JiBpbmRleCA9IGl0LT5rZXk7Ci0g
ICAgICAgIEludFJlY3QgdGlsZVJlY3QgPSBpdC0+dmFsdWUtPnJlY3QoKTsKLSAgICAgICAgTlNM
b2coQCIjJS0zZCAoJTNkICUzZCkgLSBbJTZkICU2ZCAlNmQgJTZkXSVAIiwgKytpLCBpbmRleC54
KCksIGluZGV4LnkoKSwgdGlsZVJlY3QueCgpLCB0aWxlUmVjdC55KCksIHRpbGVSZWN0LndpZHRo
KCksIHRpbGVSZWN0LmhlaWdodCgpLCB0aWxlUmVjdC5pbnRlcnNlY3RzKHZpc2libGVSZWN0KSA/
IEAiICoiIDogQCIiKTsKLSAgICAgICAgTlNMb2coQCIgICAgICVAIiwgW2l0LT52YWx1ZS0+dGls
ZUxheWVyKCkgY29udGVudHNdKTsKLSAgICB9Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
LQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9UaWxlR3JpZFRpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9pb3MvVGlsZUdyaWRUaWxlLmgJKHJldmlzaW9uIDE2NjQ1MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2NSArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBUaWxlR3JpZFRpbGVfaAotI2RlZmluZSBUaWxlR3Jp
ZFRpbGVfaAotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW5jbHVkZSAiSW50UmVjdC5oIgotI2lu
Y2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgotI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KLQotQGNsYXNzIFRpbGVMYXllcjsKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBUaWxlR3JpZDsKLQotLy8gUmVmY291bnQgdGhlIHRpbGVzIHNvIHRo
ZXkgd29yayBuaWNlbHkgaW4gdmVjdG9yIGFuZCB3ZSBrbm93IHdoZW4gdG8gcmVtb3ZlIHRoZSB0
aWxlIGxheWVyIGZyb20gdGhlIHBhcmVudC4KLWNsYXNzIFRpbGVHcmlkVGlsZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPFRpbGVHcmlkVGlsZT4gewotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFRpbGVHcmlkVGlsZT4gY3JlYXRlKFRpbGVHcmlkKiBncmlkLCBjb25zdCBJbnRSZWN0JiByZWN0
KSB7IHJldHVybiBhZG9wdFJlZjxUaWxlR3JpZFRpbGU+KG5ldyBUaWxlR3JpZFRpbGUoZ3JpZCwg
cmVjdCkpOyB9Ci0gICAgflRpbGVHcmlkVGlsZSgpOwotCi0gICAgVGlsZUxheWVyKiB0aWxlTGF5
ZXIoKSBjb25zdCB7IHJldHVybiBtX3RpbGVMYXllci5nZXQoKTsgfQotICAgIHZvaWQgaW52YWxp
ZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgcmVjdEluU3VyZmFjZSk7Ci0gICAgSW50UmVjdCByZWN0
KCkgY29uc3QgeyByZXR1cm4gbV9yZWN0OyB9Ci0gICAgdm9pZCBzZXRSZWN0KGNvbnN0IEludFJl
Y3QmIHRpbGVSZWN0KTsKLSAgICB2b2lkIHNob3dCb3JkZXIoYm9vbCk7Ci0KLXByaXZhdGU6Ci0g
ICAgVGlsZUdyaWRUaWxlKFRpbGVHcmlkKiwgY29uc3QgSW50UmVjdCYpOwotCi0gICAgVGlsZUdy
aWQqIG1fdGlsZUdyaWQ7Ci0gICAgUmV0YWluUHRyPFRpbGVMYXllcj4gbV90aWxlTGF5ZXI7Ci0g
ICAgSW50UmVjdCBtX3JlY3Q7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRp
ZiAvLyBQTEFURk9STShJT1MpCi0jZW5kaWYgLy8gVGlsZUdyaWRUaWxlX2gKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlR3JpZFRpbGUubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkVGlsZS5tbQkocmV2aXNpb24gMTY2NDUz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVHcmlkVGlsZS5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtMSwxMzEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
LSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJUaWxlR3JpZC5oIgotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW5jbHVk
ZSAiQ29sb3IuaCIKLSNpbmNsdWRlICJUaWxlQ2FjaGUuaCIKLSNpbmNsdWRlICJUaWxlR3JpZFRp
bGUuaCIKLSNpbmNsdWRlICJUaWxlTGF5ZXIuaCIKLSNpbmNsdWRlICJUaWxlTGF5ZXJQb29sLmgi
Ci0jaW5jbHVkZSAiV0FLV2luZG93LmgiCi0jaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3Jl
Lmg+Ci0jaW5jbHVkZSA8UXVhcnR6Q29yZS9RdWFydHpDb3JlUHJpdmF0ZS5oPgotI2luY2x1ZGUg
PGFsZ29yaXRobT4KLSNpbmNsdWRlIDxmdW5jdGlvbmFsPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLSNpZiBMT0dfVElMSU5HCi1zdGF0aWMgaW50IHRvdGFsVGlsZUNvdW50OwotI2VuZGlmCi0K
LVRpbGVHcmlkVGlsZTo6VGlsZUdyaWRUaWxlKFRpbGVHcmlkKiB0aWxlR3JpZCwgY29uc3QgSW50
UmVjdCYgdGlsZVJlY3QpCi0gICAgOiBtX3RpbGVHcmlkKHRpbGVHcmlkKQotICAgICwgbV9yZWN0
KHRpbGVSZWN0KQotewotICAgIEFTU0VSVCghdGlsZVJlY3QuaXNFbXB0eSgpKTsKLSAgICBJbnRT
aXplIHBpeGVsU2l6ZShtX3JlY3Quc2l6ZSgpKTsKLSAgICBjb25zdCBDR0Zsb2F0IHNjcmVlblNj
YWxlID0gbV90aWxlR3JpZC0+dGlsZUNhY2hlKCktPnNjcmVlblNjYWxlKCk7Ci0gICAgcGl4ZWxT
aXplLnNjYWxlKHNjcmVlblNjYWxlKTsKLSAgICBtX3RpbGVMYXllciA9IFRpbGVMYXllclBvb2w6
OnNoYXJlZFBvb2woKS0+dGFrZUxheWVyV2l0aFNpemUocGl4ZWxTaXplKTsKLSAgICBpZiAoIW1f
dGlsZUxheWVyKSB7Ci0jaWYgTE9HX1RJTElORwotICAgICAgICBOU0xvZyhAInVuYWJsZSB0byBy
ZXVzZSBsYXllciB3aXRoIHNpemUgJWQgeCAlZCwgY3JlYXRpbmcgb25lIiwgcGl4ZWxTaXplLndp
ZHRoKCksIHBpeGVsU2l6ZS5oZWlnaHQoKSk7Ci0jZW5kaWYKLSAgICAgICAgbV90aWxlTGF5ZXIg
PSBhZG9wdE5TKFtbVGlsZUxheWVyIGFsbG9jXSBpbml0XSk7Ci0gICAgfQotICAgIFRpbGVMYXll
ciogbGF5ZXIgPSBtX3RpbGVMYXllci5nZXQoKTsKLSAgICBbbGF5ZXIgc2V0VGlsZUdyaWQ6dGls
ZUdyaWRdOwotICAgIFtsYXllciBzZXRPcGFxdWU6bV90aWxlR3JpZC0+dGlsZUNhY2hlKCktPnRp
bGVzT3BhcXVlKCldOwotICAgIFtsYXllciBzZXRFZGdlQW50aWFsaWFzaW5nTWFzazowXTsKLSAg
ICBbbGF5ZXIgc2V0TmVlZHNMYXlvdXRPbkdlb21ldHJ5Q2hhbmdlOk5PXTsKLSAgICBbbGF5ZXIg
c2V0Q29udGVudHNTY2FsZTpzY3JlZW5TY2FsZV07Ci0gICAgW2xheWVyIHNldEFjY2VsZXJhdGVz
RHJhd2luZzptX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+YWNjZWxlcmF0ZWREcmF3aW5nRW5hYmxl
ZCgpXTsKLQotICAgIC8vIEhvc3QgbGF5ZXIgbWF5IGhhdmUgb3RoZXIgc3VibGF5ZXJzLiBLZWVw
IHRoZSB0aWxlIGxheWVycyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheQotICAgIC8vIHNv
IHRoZXkgYXJlIHBhaW50ZWQgYmVoaW5kIGV2ZXJ5dGhpbmcgZWxzZS4KLSAgICBbdGlsZUdyaWQt
PnRpbGVIb3N0TGF5ZXIoKSBpbnNlcnRTdWJsYXllcjpsYXllciBhdEluZGV4OnRpbGVHcmlkLT50
aWxlQ291bnQoKV07Ci0gICAgW2xheWVyIHNldEZyYW1lOm1fcmVjdF07Ci0gICAgaW52YWxpZGF0
ZVJlY3QobV9yZWN0KTsKLSAgICBzaG93Qm9yZGVyKG1fdGlsZUdyaWQtPnRpbGVDYWNoZSgpLT50
aWxlQm9yZGVyc1Zpc2libGUoKSk7Ci0KLSNpZiBMT0dfVElMSU5HCi0gICAgKyt0b3RhbFRpbGVD
b3VudDsKLSAgICBOU0xvZyhAIm5ldyBUaWxlICglZCwlZCkgJWQgJWQsIGNvdW50ICVkIiwgdGls
ZVJlY3QueCgpLCB0aWxlUmVjdC55KCksIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdo
dCgpLCB0b3RhbFRpbGVDb3VudCk7Ci0jZW5kaWYKLX0KLQotVGlsZUdyaWRUaWxlOjp+VGlsZUdy
aWRUaWxlKCkgCi17Ci0gICAgW3RpbGVMYXllcigpIHNldFRpbGVHcmlkOjBdOwotICAgIFt0aWxl
TGF5ZXIoKSByZW1vdmVGcm9tU3VwZXJsYXllcl07Ci0gICAgVGlsZUxheWVyUG9vbDo6c2hhcmVk
UG9vbCgpLT5hZGRMYXllcih0aWxlTGF5ZXIoKSk7Ci0jaWYgTE9HX1RJTElORwotICAgIC0tdG90
YWxUaWxlQ291bnQ7Ci0gICAgTlNMb2coQCJkZWxldGUgVGlsZSAoJWQsJWQpICVkICVkLCBjb3Vu
dCAlZCIsIG1fcmVjdC54KCksIG1fcmVjdC55KCksIG1fcmVjdC53aWR0aCgpLCBtX3JlY3QuaGVp
Z2h0KCksIHRvdGFsVGlsZUNvdW50KTsKLSNlbmRpZgotfQotCi12b2lkIFRpbGVHcmlkVGlsZTo6
aW52YWxpZGF0ZVJlY3QoY29uc3QgSW50UmVjdCYgd2luZG93RGlydHlSZWN0KQotewotICAgIElu
dFJlY3QgZGlydHlSZWN0ID0gaW50ZXJzZWN0aW9uKHdpbmRvd0RpcnR5UmVjdCwgbV9yZWN0KTsK
LSAgICBpZiAoZGlydHlSZWN0LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGRpcnR5
UmVjdC5tb3ZlKEludFBvaW50KCkgLSBtX3JlY3QubG9jYXRpb24oKSk7Ci0gICAgW3RpbGVMYXll
cigpIHNldE5lZWRzRGlzcGxheUluUmVjdDpkaXJ0eVJlY3RdOwotCi0gICAgaWYgKG1fdGlsZUdy
aWQtPnRpbGVDYWNoZSgpLT50aWxlUGFpbnRDb3VudGVyc1Zpc2libGUoKSkKLSAgICAgICAgW3Rp
bGVMYXllcigpIHNldE5lZWRzRGlzcGxheUluUmVjdDpDR1JlY3RNYWtlKDAsIDAsIDQ2LCAyNSld
OwotfQotCi12b2lkIFRpbGVHcmlkVGlsZTo6c2V0UmVjdChjb25zdCBJbnRSZWN0JiB0aWxlUmVj
dCkKLXsKLSAgICBpZiAobV9yZWN0ID09IHRpbGVSZWN0KQotICAgICAgICByZXR1cm47Ci0gICAg
bV9yZWN0ID0gdGlsZVJlY3Q7Ci0gICAgVGlsZUxheWVyKiBsYXllciA9IG1fdGlsZUxheWVyLmdl
dCgpOwotICAgIFtsYXllciBzZXRGcmFtZTptX3JlY3RdOwotICAgIFtsYXllciBzZXROZWVkc0Rp
c3BsYXldOwotfQotCi12b2lkIFRpbGVHcmlkVGlsZTo6c2hvd0JvcmRlcihib29sIGZsYWcpCi17
Ci0gICAgVGlsZUxheWVyKiBsYXllciA9IG1fdGlsZUxheWVyLmdldCgpOwotICAgIGlmIChmbGFn
KSB7Ci0gICAgICAgIFtsYXllciBzZXRCb3JkZXJDb2xvcjpjYWNoZWRDR0NvbG9yKG1fdGlsZUdy
aWQtPnRpbGVDYWNoZSgpLT5jb2xvckZvckdyaWRUaWxlQm9yZGVyKG1fdGlsZUdyaWQpLCBDb2xv
clNwYWNlRGV2aWNlUkdCKV07Ci0gICAgICAgIFtsYXllciBzZXRCb3JkZXJXaWR0aDowLjVmXTsK
LSAgICB9IGVsc2UgewotICAgICAgICBbbGF5ZXIgc2V0Qm9yZGVyQ29sb3I6bmlsXTsKLSAgICAg
ICAgW2xheWVyIHNldEJvcmRlcldpZHRoOjBdOwotICAgIH0KLX0KLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYgLy8gUExBVEZPUk0oSU9TKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1RpbGVMYXllci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2lvcy9UaWxlTGF5ZXIuaAkocmV2aXNpb24gMTY2NDUzKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1RpbGVMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIFRpbGVMYXllcl9oCi0jZGVmaW5lIFRpbGVMYXllcl9o
Ci0KLSNpZiBQTEFURk9STShJT1MpCi0KLSNpbmNsdWRlIDxRdWFydHpDb3JlL0NBTGF5ZXIuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgVGlsZUdyaWQ7Ci19OwotCi1AaW50ZXJmYWNl
IFRpbGVMYXllciA6IENBTGF5ZXIgewotICAgIFdlYkNvcmU6OlRpbGVHcmlkKiBfdGlsZUdyaWQ7
Ci0gICAgdW5zaWduZWQgX3BhaW50Q291bnQ7Ci19Ci1AcHJvcGVydHkgKG5vbmF0b21pYykgdW5z
aWduZWQgcGFpbnRDb3VudDsKLUBwcm9wZXJ0eSAobm9uYXRvbWljKSBXZWJDb3JlOjpUaWxlR3Jp
ZCogdGlsZUdyaWQ7Ci0rIChUaWxlTGF5ZXIgKilsYXllckJlaW5nUGFpbnRlZDsKLUBlbmQKLQot
QGludGVyZmFjZSBUaWxlSG9zdExheWVyIDogQ0FMYXllciB7Ci0gICAgV2ViQ29yZTo6VGlsZUdy
aWQqIF90aWxlR3JpZDsKLX0KLS0gKGlkKWluaXRXaXRoVGlsZUdyaWQ6KFdlYkNvcmU6OlRpbGVH
cmlkKil0aWxlR3JpZDsKLUBlbmQKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLSNlbmRpZiAv
LyBUaWxlTGF5ZXJfaApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1RpbGVMYXll
ci5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVy
Lm1tCShyZXZpc2lvbiAxNjY0NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvVGls
ZUxheWVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xLDEwMyArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRpbGVMYXllci5oIgotCi0jaWYgUExBVEZP
Uk0oSU9TKQotCi0jaW5jbHVkZSAiVGlsZUNhY2hlLmgiCi0jaW5jbHVkZSAiVGlsZUdyaWQuaCIK
LSNpbmNsdWRlICJXZWJDb3JlVGhyZWFkLmgiCi0KLUBpbXBsZW1lbnRhdGlvbiBUaWxlSG9zdExh
eWVyCi0tIChpZClpbml0V2l0aFRpbGVHcmlkOihXZWJDb3JlOjpUaWxlR3JpZCopdGlsZUdyaWQK
LXsKLSAgICBzZWxmID0gW3N1cGVyIGluaXRdOwotICAgIGlmICghc2VsZikKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICBfdGlsZUdyaWQgPSB0aWxlR3JpZDsKLSAgICBbc2VsZiBzZXRBbmNob3JQ
b2ludDpDR1BvaW50WmVyb107Ci0gICAgcmV0dXJuIHNlbGY7Ci19Ci0KLS0gKGlkPENBQWN0aW9u
PilhY3Rpb25Gb3JLZXk6KE5TU3RyaW5nICopa2V5Ci17Ci0gICAgVU5VU0VEX1BBUkFNKGtleSk7
Ci0gICAgLy8gRGlzYWJsZSBhbGwgZGVmYXVsdCBhY3Rpb25zCi0gICAgcmV0dXJuIG5pbDsKLX0K
LQotLSAodm9pZClyZW5kZXJJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0Ci17Ci0gICAg
aWYgKHB0aHJlYWRfbWFpbl9ucCgpKQotICAgICAgICBXZWJUaHJlYWRMb2NrKCk7Ci0gICAgX3Rp
bGVHcmlkLT50aWxlQ2FjaGUoKS0+ZG9MYXlvdXRUaWxlcygpOwotICAgIFtzdXBlciByZW5kZXJJ
bkNvbnRleHQ6Y29udGV4dF07Ci19Ci1AZW5kCi0KLUBpbXBsZW1lbnRhdGlvbiBUaWxlTGF5ZXIK
LUBzeW50aGVzaXplIHBhaW50Q291bnQgPSBfcGFpbnRDb3VudDsKLUBzeW50aGVzaXplIHRpbGVH
cmlkID0gX3RpbGVHcmlkOwotCi1zdGF0aWMgVGlsZUxheWVyICpsYXllckJlaW5nUGFpbnRlZDsK
LQotLSAodm9pZClzZXROZWVkc0Rpc3BsYXlJblJlY3Q6KENHUmVjdClyZWN0Ci17Ci0gICAgW3Nl
bGYgc2V0TmVlZHNMYXlvdXRdOwotICAgIFtzdXBlciBzZXROZWVkc0Rpc3BsYXlJblJlY3Q6cmVj
dF07Ci19Ci0KLS0gKHZvaWQpbGF5b3V0U3VibGF5ZXJzCi17Ci0gICAgaWYgKHB0aHJlYWRfbWFp
bl9ucCgpKQotICAgICAgICBXZWJUaHJlYWRMb2NrKCk7Ci0gICAgLy8gVGhpcyBtYXkgdHJpZ2dl
ciBXZWJLaXQgbGF5b3V0IGFuZCBnZW5lcmF0ZSBtb3JlIHJlcGFpbnQgcmVjdHMuCi0gICAgaWYg
KF90aWxlR3JpZCkKLSAgICAgICAgX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+cHJlcGFyZVRvRHJh
dygpOwotfQotCi0tICh2b2lkKWRyYXdJbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0Ci17
Ci0gICAgaWYgKF90aWxlR3JpZCkKLSAgICAgICAgX3RpbGVHcmlkLT50aWxlQ2FjaGUoKS0+ZHJh
d0xheWVyKHNlbGYsIGNvbnRleHQpOwotfQotCi0tIChpZDxDQUFjdGlvbj4pYWN0aW9uRm9yS2V5
OihOU1N0cmluZyAqKWtleQotewotICAgIFVOVVNFRF9QQVJBTShrZXkpOwotICAgIC8vIERpc2Fi
bGUgYWxsIGRlZmF1bHQgYWN0aW9ucwotICAgIHJldHVybiBuaWw7Ci19Ci0KLSsgKFRpbGVMYXll
ciAqKWxheWVyQmVpbmdQYWludGVkCi17Ci0gICAgcmV0dXJuIGxheWVyQmVpbmdQYWludGVkOwot
fQotCi1AZW5kCi0KLSNlbmRpZiAvLyBQTEFURk9STShJT1MpCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvVGlsZUxheWVyUG9vbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXJQb29sLmgJKHJldmlzaW9uIDE2NjQ1MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXJQb29sLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgVGlsZUxheWVyUG9vbF9oCi0j
ZGVmaW5lIFRpbGVMYXllclBvb2xfaAotCi0jaWYgUExBVEZPUk0oSU9TKQotCi0jaW5jbHVkZSAi
SW50U2l6ZS5oIgotI2luY2x1ZGUgIkludFNpemVIYXNoLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIK
LSNpbmNsdWRlIDx3dGYvRGVxdWUuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KLSNpbmNs
dWRlIDx3dGYvUmV0YWluUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgotI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KLQotQGNsYXNzIFRpbGVMYXllcjsKLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi1jbGFzcyBUaWxlTGF5ZXJQb29sIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShU
aWxlTGF5ZXJQb29sKTsKLXB1YmxpYzoKLSAgICBzdGF0aWMgVGlsZUxheWVyUG9vbCogc2hhcmVk
UG9vbCgpOwotCi0gICAgdm9pZCBhZGRMYXllcihjb25zdCBSZXRhaW5QdHI8VGlsZUxheWVyPiYp
OwotICAgIFJldGFpblB0cjxUaWxlTGF5ZXI+IHRha2VMYXllcldpdGhTaXplKGNvbnN0IEludFNp
emUmKTsKLQotICAgIC8vIFRoZSBtYXhpbXVtIHNpemUgb2YgYWxsIHF1ZXVlZCBsYXllcnMgaW4g
Ynl0ZXMuCi0gICAgdW5zaWduZWQgY2FwYWNpdHkoKSBjb25zdCB7IHJldHVybiBtX2NhcGFjaXR5
OyB9Ci0gICAgdm9pZCBzZXRDYXBhY2l0eSh1bnNpZ25lZCk7Ci0gICAgdm9pZCBkcmFpbigpOwot
Ci0gICAgdW5zaWduZWQgZGVjYXllZENhcGFjaXR5KCkgY29uc3Q7Ci0KLSAgICBzdGF0aWMgdW5z
aWduZWQgYnl0ZXNCYWNraW5nTGF5ZXJXaXRoUGl4ZWxTaXplKGNvbnN0IEludFNpemUmKTsKLQot
cHJpdmF0ZToKLSAgICBUaWxlTGF5ZXJQb29sKCk7Ci0KLSAgICB0eXBlZGVmIERlcXVlPFJldGFp
blB0cjxUaWxlTGF5ZXI+ID4gTGF5ZXJMaXN0OwotCi0gICAgYm9vbCBjYW5SZXVzZUxheWVyV2l0
aFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkgY29uc3QgeyByZXR1cm4gbV9jYXBhY2l0eSAmJiAh
c2l6ZS5pc0VtcHR5KCk7IH0KLSAgICB2b2lkIHNjaGVkdWxlUHJ1bmUoKTsKLSAgICB2b2lkIHBy
dW5lKCk7Ci0gICAgdHlwZWRlZiBlbnVtIHsgTGVhdmVVbmNoYW5nZWQsIE1hcmtBc1VzZWQgfSBB
Y2Nlc3NUeXBlOwotICAgIExheWVyTGlzdCYgbGlzdE9mTGF5ZXJzV2l0aFNpemUoY29uc3QgSW50
U2l6ZSYsIEFjY2Vzc1R5cGUgPSBMZWF2ZVVuY2hhbmdlZCk7Ci0KLSAgICBIYXNoTWFwPEludFNp
emUsIExheWVyTGlzdD4gbV9yZXVzZUxpc3RzOwotICAgIC8vIE9yZGVyZWQgYnkgcmVjZW50IHVz
ZS4gVGhlIGxhc3Qgc2l6ZSBpcyB0aGUgbW9zdCByZWNlbnRseSB1c2VkLgotICAgIFZlY3RvcjxJ
bnRTaXplPiBtX3NpemVzSW5QcnVuZU9yZGVyOwotICAgIHVuc2lnbmVkIG1fdG90YWxCeXRlczsK
LSAgICB1bnNpZ25lZCBtX2NhcGFjaXR5OwotICAgIE11dGV4IG1fbGF5ZXJQb29sTXV0ZXg7Ci0K
LSAgICBkb3VibGUgbV9sYXN0QWRkVGltZTsKLSAgICBib29sIG1fbmVlZHNQcnVuZTsKLQotICAg
IGZyaWVuZCBOZXZlckRlc3Ryb3llZDxUaWxlTGF5ZXJQb29sPjsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIFBMQVRGT1JNKElPUykKLSNlbmRpZiAvLyBUaWxlTGF5
ZXJQb29sX2gKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXJQb29s
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9UaWxlTGF5ZXJQ
b29sLm1tCShyZXZpc2lvbiAxNjY0NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
VGlsZUxheWVyUG9vbC5tbQkod29ya2luZyBjb3B5KQpAQCAtMSwxNzQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUaWxlTGF5ZXJQb29sLmgiCi0K
LSNpZiBQTEFURk9STShJT1MpCi0KLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWVt
b3J5UHJlc3N1cmVIYW5kbGVyLmgiCi0jaW5jbHVkZSAiVGlsZUxheWVyLmgiCi0jaW5jbHVkZSAi
VGlsZUdyaWQuaCIKLSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3Qg
ZG91YmxlIGNhcGFjaXR5RGVjYXlUaW1lID0gNTsKLQotVGlsZUxheWVyUG9vbDo6VGlsZUxheWVy
UG9vbCgpCi0gICAgOiBtX3RvdGFsQnl0ZXMoMCkKLSAgICAsIG1fY2FwYWNpdHkoMCkKLSAgICAs
IG1fbGFzdEFkZFRpbWUoMCkKLSAgICAsIG1fbmVlZHNQcnVuZShmYWxzZSkKLXsKLX0KLQotVGls
ZUxheWVyUG9vbCogVGlsZUxheWVyUG9vbDo6c2hhcmVkUG9vbCgpCi17Ci0gICAgc3RhdGljIE5l
dmVyRGVzdHJveWVkPFRpbGVMYXllclBvb2w+IHNoYXJlZFBvb2w7Ci0gICAgcmV0dXJuICZzaGFy
ZWRQb29sLmdldCgpOwotfQotCi11bnNpZ25lZCBUaWxlTGF5ZXJQb29sOjpieXRlc0JhY2tpbmdM
YXllcldpdGhQaXhlbFNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICByZXR1cm4gc2l6
ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7Ci19Ci0KLVRpbGVMYXllclBvb2w6OkxheWVy
TGlzdCYgVGlsZUxheWVyUG9vbDo6bGlzdE9mTGF5ZXJzV2l0aFNpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSwgQWNjZXNzVHlwZSBhY2Nlc3NUeXBlKQotewotICAgIEFTU0VSVCghbV9sYXllclBvb2xN
dXRleC50cnlMb2NrKCkpOwotICAgIEhhc2hNYXA8SW50U2l6ZSwgTGF5ZXJMaXN0Pjo6aXRlcmF0
b3IgaXQgPSBtX3JldXNlTGlzdHMuZmluZChzaXplKTsKLSAgICBpZiAoaXQgPT0gbV9yZXVzZUxp
c3RzLmVuZCgpKSB7Ci0gICAgICAgIGl0ID0gbV9yZXVzZUxpc3RzLmFkZChzaXplLCBMYXllckxp
c3QoKSkuaXRlcmF0b3I7Ci0gICAgICAgIG1fc2l6ZXNJblBydW5lT3JkZXIuYXBwZW5kKHNpemUp
OwotICAgIH0gZWxzZSBpZiAoYWNjZXNzVHlwZSA9PSBNYXJrQXNVc2VkKSB7Ci0gICAgICAgIG1f
c2l6ZXNJblBydW5lT3JkZXIucmVtb3ZlKG1fc2l6ZXNJblBydW5lT3JkZXIucmV2ZXJzZUZpbmQo
c2l6ZSkpOwotICAgICAgICBtX3NpemVzSW5QcnVuZU9yZGVyLmFwcGVuZChzaXplKTsKLSAgICB9
Ci0gICAgcmV0dXJuIGl0LT52YWx1ZTsKLX0KLQotdm9pZCBUaWxlTGF5ZXJQb29sOjphZGRMYXll
cihjb25zdCBSZXRhaW5QdHI8VGlsZUxheWVyPiYgbGF5ZXIpCi17Ci0gICAgSW50U2l6ZSBsYXll
clNpemUoW2xheWVyLmdldCgpIGZyYW1lXS5zaXplKTsKLSAgICBsYXllclNpemUuc2NhbGUoW2xh
eWVyLmdldCgpIGNvbnRlbnRzU2NhbGVdKTsKLSAgICBpZiAoIWNhblJldXNlTGF5ZXJXaXRoU2l6
ZShsYXllclNpemUpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobWVtb3J5UHJlc3N1cmVI
YW5kbGVyKCkuaGFzUmVjZWl2ZWRNZW1vcnlQcmVzc3VyZSgpKSB7Ci0gICAgICAgIExPRyhNZW1v
cnlQcmVzc3VyZSwgIlVuZGVyIG1lbW9yeSBwcmVzc3VyZTogJXMsIHRvdGFsQnl0ZXM6ICVkIiwg
X19QUkVUVFlfRlVOQ1RJT05fXywgbV90b3RhbEJ5dGVzKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLQotICAgIE11dGV4TG9ja2VyIGxvY2tlcihtX2xheWVyUG9vbE11dGV4KTsKLSAgICBsaXN0
T2ZMYXllcnNXaXRoU2l6ZShsYXllclNpemUpLnByZXBlbmQobGF5ZXIpOwotICAgIG1fdG90YWxC
eXRlcyArPSBieXRlc0JhY2tpbmdMYXllcldpdGhQaXhlbFNpemUobGF5ZXJTaXplKTsKLQotICAg
IG1fbGFzdEFkZFRpbWUgPSBjdXJyZW50VGltZSgpOwotICAgIHNjaGVkdWxlUHJ1bmUoKTsKLX0K
LQotUmV0YWluUHRyPFRpbGVMYXllcj4gVGlsZUxheWVyUG9vbDo6dGFrZUxheWVyV2l0aFNpemUo
Y29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBpZiAoIWNhblJldXNlTGF5ZXJXaXRoU2l6ZShz
aXplKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9sYXll
clBvb2xNdXRleCk7Ci0gICAgTGF5ZXJMaXN0JiByZXVzZUxpc3QgPSBsaXN0T2ZMYXllcnNXaXRo
U2l6ZShzaXplLCBNYXJrQXNVc2VkKTsKLSAgICBpZiAocmV1c2VMaXN0LmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIG5pbDsKLSAgICBtX3RvdGFsQnl0ZXMgLT0gYnl0ZXNCYWNraW5nTGF5ZXJX
aXRoUGl4ZWxTaXplKHNpemUpOwotICAgIHJldHVybiByZXVzZUxpc3QudGFrZUZpcnN0KCk7Ci19
Ci0KLXZvaWQgVGlsZUxheWVyUG9vbDo6c2V0Q2FwYWNpdHkodW5zaWduZWQgY2FwYWNpdHkpCi17
Ci0gICAgTXV0ZXhMb2NrZXIgcmV1c2VMb2NrZXIobV9sYXllclBvb2xNdXRleCk7Ci0gICAgaWYg
KGNhcGFjaXR5IDwgbV9jYXBhY2l0eSkKLSAgICAgICAgc2NoZWR1bGVQcnVuZSgpOwotICAgIG1f
Y2FwYWNpdHkgPSBjYXBhY2l0eTsKLX0KLSAgICAKLXVuc2lnbmVkIFRpbGVMYXllclBvb2w6OmRl
Y2F5ZWRDYXBhY2l0eSgpIGNvbnN0Ci17Ci0gICAgLy8gRGVjYXkgdG8gb25lIHF1YXJ0ZXIgb3Zl
ciBjYXBhY2l0eURlY2F5VGltZQotICAgIGRvdWJsZSB0aW1lU2luY2VMYXN0QWRkID0gY3VycmVu
dFRpbWUoKSAtIG1fbGFzdEFkZFRpbWU7Ci0gICAgaWYgKHRpbWVTaW5jZUxhc3RBZGQgPiBjYXBh
Y2l0eURlY2F5VGltZSkKLSAgICAgICAgcmV0dXJuIG1fY2FwYWNpdHkgLyA0OwotICAgIGZsb2F0
IGRlY2F5UHJvZ2VzcyA9IGZsb2F0KHRpbWVTaW5jZUxhc3RBZGQgLyBjYXBhY2l0eURlY2F5VGlt
ZSk7Ci0gICAgcmV0dXJuIG1fY2FwYWNpdHkgLyA0ICsgbV9jYXBhY2l0eSAqIDMgLyA0ICogKDEu
ZiAtIGRlY2F5UHJvZ2Vzcyk7Ci19Ci0KLXZvaWQgVGlsZUxheWVyUG9vbDo6c2NoZWR1bGVQcnVu
ZSgpCi17Ci0gICAgQVNTRVJUKCFtX2xheWVyUG9vbE11dGV4LnRyeUxvY2soKSk7Ci0gICAgaWYg
KG1fbmVlZHNQcnVuZSkKLSAgICAgICAgcmV0dXJuOwotICAgIG1fbmVlZHNQcnVuZSA9IHRydWU7
Ci0gICAgZGlzcGF0Y2hfdGltZV90IG5leHRQcnVuZVRpbWUgPSBkaXNwYXRjaF90aW1lKERJU1BB
VENIX1RJTUVfTk9XLCAxICogTlNFQ19QRVJfU0VDKTsKLSAgICBkaXNwYXRjaF9hZnRlcihuZXh0
UHJ1bmVUaW1lLCBkaXNwYXRjaF9nZXRfZ2xvYmFsX3F1ZXVlKERJU1BBVENIX1FVRVVFX1BSSU9S
SVRZX0RFRkFVTFQsIDApLCBeewotICAgICAgICBwcnVuZSgpOwotICAgIH0pOwotfQotCi12b2lk
IFRpbGVMYXllclBvb2w6OnBydW5lKCkKLXsKLSAgICBNdXRleExvY2tlciBsb2NrZXIobV9sYXll
clBvb2xNdXRleCk7Ci0gICAgQVNTRVJUKG1fbmVlZHNQcnVuZSk7Ci0gICAgbV9uZWVkc1BydW5l
ID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgc2hyaW5rVG8gPSBkZWNheWVkQ2FwYWNpdHkoKTsKLSAg
ICB3aGlsZSAobV90b3RhbEJ5dGVzID4gc2hyaW5rVG8pIHsKLSAgICAgICAgQVNTRVJUKCFtX3Np
emVzSW5QcnVuZU9yZGVyLmlzRW1wdHkoKSk7Ci0gICAgICAgIEludFNpemUgc2l6ZVRvRHJvcCA9
IG1fc2l6ZXNJblBydW5lT3JkZXIuZmlyc3QoKTsKLSAgICAgICAgTGF5ZXJMaXN0JiBvbGRlc3RS
ZXVzZUxpc3QgPSBtX3JldXNlTGlzdHMuZmluZChzaXplVG9Ecm9wKS0+dmFsdWU7Ci0gICAgICAg
IGlmIChvbGRlc3RSZXVzZUxpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBtX3JldXNlTGlz
dHMucmVtb3ZlKHNpemVUb0Ryb3ApOwotICAgICAgICAgICAgbV9zaXplc0luUHJ1bmVPcmRlci5y
ZW1vdmUoMCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotI2lmIExPR19USUxJ
TkcKLSAgICAgICAgTlNMb2coQCJkcm9wcGluZyBsYXllciBvZiBzaXplICVkIHggJWQiLCBzaXpl
VG9Ecm9wLndpZHRoKCksIHNpemVUb0Ryb3AuaGVpZ2h0KCkpOwotI2VuZGlmCi0gICAgICAgIG1f
dG90YWxCeXRlcyAtPSBieXRlc0JhY2tpbmdMYXllcldpdGhQaXhlbFNpemUoc2l6ZVRvRHJvcCk7
Ci0gICAgICAgIC8vIFRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGxpc3QgaXMgdGhlIG9sZGVzdCwg
aGVuY2UgbW9zdCBsaWtlbHkgbm90IHRvCi0gICAgICAgIC8vIHN0aWxsIGhhdmUgYSBiYWNraW5n
IHN0b3JlLgotICAgICAgICBvbGRlc3RSZXVzZUxpc3QucmVtb3ZlTGFzdCgpOwotICAgIH0KLSAg
ICBpZiAoY3VycmVudFRpbWUoKSAtIG1fbGFzdEFkZFRpbWUgPD0gY2FwYWNpdHlEZWNheVRpbWUp
Ci0gICAgICAgIHNjaGVkdWxlUHJ1bmUoKTsKLX0KLQotdm9pZCBUaWxlTGF5ZXJQb29sOjpkcmFp
bigpCi17Ci0gICAgTXV0ZXhMb2NrZXIgcmV1c2VMb2NrZXIobV9sYXllclBvb2xNdXRleCk7Ci0g
ICAgbV9yZXVzZUxpc3RzLmNsZWFyKCk7Ci0gICAgbV9zaXplc0luUHJ1bmVPcmRlci5jbGVhcigp
OwotICAgIG1fdG90YWxCeXRlcyA9IDA7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQot
I2VuZGlmIC8vIFBMQVRGT1JNKElPUykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy93YWsvV0FLV2luZG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL3dhay9XQUtXaW5kb3cuaAkocmV2aXNpb24gMTY2NDUzKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL3dhay9XQUtXaW5kb3cuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTEgKzQw
LDExIEBACiAKICNpZmRlZiBfX2NwbHVzcGx1cwogbmFtZXNwYWNlIFdlYkNvcmUgewotICAgIGNs
YXNzIFRpbGVDYWNoZTsKKyAgICBjbGFzcyBMZWdhY3lUaWxlQ2FjaGU7CiB9Ci10eXBlZGVmIFdl
YkNvcmU6OlRpbGVDYWNoZSBUaWxlQ2FjaGU7Cit0eXBlZGVmIFdlYkNvcmU6OkxlZ2FjeVRpbGVD
YWNoZSBMZWdhY3lUaWxlQ2FjaGU7CiAjZWxzZQotdHlwZWRlZiBzdHJ1Y3QgVGlsZUNhY2hlIFRp
bGVDYWNoZTsKK3R5cGVkZWYgc3RydWN0IExlZ2FjeVRpbGVDYWNoZSBMZWdhY3lUaWxlQ2FjaGU7
CiAjZW5kaWYKIAogdHlwZWRlZiBlbnVtIHsKQEAgLTY5LDcgKzY5LDcgQEAgZXh0ZXJuIE5TU3Ry
aW5nICogY29uc3QgV0FLV2luZG93VmlzaWJpbAogQGludGVyZmFjZSBXQUtXaW5kb3cgOiBXQUtS
ZXNwb25kZXIKIHsKICAgICBDQUxheWVyKiBfaG9zdExheWVyOwotICAgIFRpbGVDYWNoZSogX3Rp
bGVDYWNoZTsKKyAgICBMZWdhY3lUaWxlQ2FjaGUqIF90aWxlQ2FjaGU7CiAgICAgQ0dSZWN0IF9m
cm96ZW5WaXNpYmxlUmVjdDsKICAgICBDQUxheWVyICpfcm9vdExheWVyOwogCkBAIC0xNjAsNyAr
MTYwLDcgQEAgZXh0ZXJuIE5TU3RyaW5nICogY29uc3QgV0FLV2luZG93VmlzaWJpbAogLSAoZmxv
YXQpY3VycmVudFRpbGVTY2FsZTsKIC0gKHZvaWQpc2V0S2VlcHNab29tZWRPdXRUaWxlczooQk9P
TClrZWVwc1pvb21lZE91dFRpbGVzOwogLSAoQk9PTClrZWVwc1pvb21lZE91dFRpbGVzOwotLSAo
VGlsZUNhY2hlICopdGlsZUNhY2hlOworLSAoTGVnYWN5VGlsZUNhY2hlICopdGlsZUNhY2hlOwog
CiAtICh2b2lkKWR1bXBUaWxlczsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L3dhay9XQUtXaW5kb3cubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL3dhay9XQUtXaW5kb3cubW0JKHJldmlzaW9uIDE2NjQ1MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy93YWsvV0FLV2luZG93Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsy
OCw3IEBACiAKICNpZiBQTEFURk9STShJT1MpCiAKLSNpbXBvcnQgIlRpbGVDYWNoZS5oIgorI2lt
cG9ydCAiTGVnYWN5VGlsZUNhY2hlLmgiCiAjaW1wb3J0ICJXQUtWaWV3UHJpdmF0ZS5oIgogI2lt
cG9ydCAiV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCAiV2ViQ29yZVRocmVhZFJ1
bi5oIgpAQCAtNzMsNyArNzMsNyBAQCAtIChpZClpbml0V2l0aExheWVyOihDQUxheWVyICopbGF5
ZXIKICAgICBfZnJhbWUgPSBbX2hvc3RMYXllciBmcmFtZV07CiAgICAgX3NjcmVlblNjYWxlID0g
d2tHZXRTY3JlZW5TY2FsZUZhY3RvcigpOwogICAgIAotICAgIF90aWxlQ2FjaGUgPSBuZXcgVGls
ZUNhY2hlKHNlbGYpOworICAgIF90aWxlQ2FjaGUgPSBuZXcgTGVnYWN5VGlsZUNhY2hlKHNlbGYp
OwogCiAgICAgX2Zyb3plblZpc2libGVSZWN0ID0gQ0dSZWN0TnVsbDsKIApAQCAtNDg0LDcgKzQ4
NCw3IEBAIC0gKHZvaWQpc2V0VGlsaW5nTW9kZTooV0FLV2luZG93VGlsaW5nTW8KIHsKICAgICBp
ZiAoIV90aWxlQ2FjaGUpCiAgICAgICAgIHJldHVybjsKLSAgICBfdGlsZUNhY2hlLT5zZXRUaWxp
bmdNb2RlKChUaWxlQ2FjaGU6OlRpbGluZ01vZGUpbW9kZSk7CisgICAgX3RpbGVDYWNoZS0+c2V0
VGlsaW5nTW9kZSgoTGVnYWN5VGlsZUNhY2hlOjpUaWxpbmdNb2RlKW1vZGUpOwogfQogCiAtIChX
QUtXaW5kb3dUaWxpbmdNb2RlKXRpbGluZ01vZGUKQEAgLTQ5OCw3ICs0OTgsNyBAQCAtICh2b2lk
KXNldFRpbGluZ0RpcmVjdGlvbjooV0FLVGlsaW5nRGlyCiB7CiAgICAgaWYgKCFfdGlsZUNhY2hl
KQogICAgICAgICByZXR1cm47Ci0gICAgX3RpbGVDYWNoZS0+c2V0VGlsaW5nRGlyZWN0aW9uKChU
aWxlQ2FjaGU6OlRpbGluZ0RpcmVjdGlvbil0aWxpbmdEaXJlY3Rpb24pOworICAgIF90aWxlQ2Fj
aGUtPnNldFRpbGluZ0RpcmVjdGlvbigoTGVnYWN5VGlsZUNhY2hlOjpUaWxpbmdEaXJlY3Rpb24p
dGlsaW5nRGlyZWN0aW9uKTsKIH0KIAogLSAoV0FLVGlsaW5nRGlyZWN0aW9uKXRpbGluZ0RpcmVj
dGlvbgpAQCAtNTUwLDcgKzU1MCw3IEBAIC0gKEJPT0wpa2VlcHNab29tZWRPdXRUaWxlcwogICAg
IHJldHVybiBfdGlsZUNhY2hlLT5rZWVwc1pvb21lZE91dFRpbGVzKCk7CiB9CiAKLS0gKFRpbGVD
YWNoZSopdGlsZUNhY2hlCistIChMZWdhY3lUaWxlQ2FjaGUqKXRpbGVDYWNoZQogewogICAgIHJl
dHVybiBfdGlsZUNhY2hlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAJKHJldmlzaW9uIDE2NjQ1MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NiwxMCArNjYsMTAgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVy
Lmg+CiAKICNpZiBQTEFURk9STShJT1MpCisjaW5jbHVkZSAiTGVnYWN5VGlsZUNhY2hlLmgiCiAj
aW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyU2Nyb2xsYmFyLmgiCi0jaW5jbHVkZSAiVGlsZUNhY2hlLmgiCiAjZW5kaWYKIAogI2lmIEVO
QUJMRShQTFVHSU5fUFJPWFlfRk9SX1ZJREVPKQpAQCAtMjY4MSwxNiArMjY4MSwxNiBAQCBmbG9h
dCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnBhZ2VTY2FsZUZhCiBmbG9hdCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OmNvbnRlbnRzU2NhbGVNdWx0aXBsaWVyRm9yTmV3VGlsZXMoY29uc3QgR3JhcGhp
Y3NMYXllciopIGNvbnN0CiB7CiAjaWYgUExBVEZPUk0oSU9TKQotICAgIFRpbGVDYWNoZSogdGls
ZUNhY2hlID0gbnVsbHB0cjsKKyAgICBMZWdhY3lUaWxlQ2FjaGUqIHRpbGVDYWNoZSA9IG51bGxw
dHI7CiAgICAgaWYgKFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCkpIHsKICAgICAgICAgaWYgKEZy
YW1lVmlldyogZnJhbWVWaWV3ID0gcGFnZS0+bWFpbkZyYW1lKCkudmlldygpKQotICAgICAgICAg
ICAgdGlsZUNhY2hlID0gZnJhbWVWaWV3LT50aWxlQ2FjaGUoKTsKKyAgICAgICAgICAgIHRpbGVD
YWNoZSA9IGZyYW1lVmlldy0+bGVnYWN5VGlsZUNhY2hlKCk7CiAgICAgfQogCiAgICAgaWYgKCF0
aWxlQ2FjaGUpCiAgICAgICAgIHJldHVybiAxOwogCi0gICAgcmV0dXJuIHRpbGVDYWNoZS0+dGls
aW5nTW9kZSgpID09IFRpbGVDYWNoZTo6Wm9vbWluZyA/IDAuMTI1IDogMTsKKyAgICByZXR1cm4g
dGlsZUNhY2hlLT50aWxpbmdNb2RlKCkgPT0gTGVnYWN5VGlsZUNhY2hlOjpab29taW5nID8gMC4x
MjUgOiAxOwogI2Vsc2UKICAgICByZXR1cm4gMTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTY2NTIyKQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTQtMDMtMzEgIEFudHRpIEtvaXZpc3RvICA8
YW50dGlAYXBwbGUuY29tPgorCisgICAgICAgIFJlbmFtZSBUaWxlQ2FjaGUgdG8gTGVnYWN5VGls
ZUNhY2hlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzA5ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKCtbV2ViVmlldyBkcmFpbkxheWVyUG9vbF0p
OgorICAgICAgICAoK1tXZWJWaWV3IF9zZXRUaWxlQ2FjaGVMYXllclBvb2xDYXBhY2l0eTpdKToK
KwogMjAxNC0wMy0yOCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAg
Rml4IHJlY2VudGx5LWludHJvZHVjZWQgb2ZmLWJ5LW9uZSBlcnJvciBpbiBjZW50ZXJUcnVuY2F0
ZVRvQnVmZmVyCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lv
biAxNjY0NTMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTIzMiwxMiArMjMyLDEyIEBACiAjaW1wb3J0IDxXZWJDb3JlL0ZvbnRDYWNo
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9HcmFwaGljc0xheWVyLmg+CiAjaW1wb3J0IDxXZWJDb3Jl
L0ljb25Db250cm9sbGVyLmg+CisjaW1wb3J0IDxXZWJDb3JlL0xlZ2FjeVRpbGVDYWNoZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9OZXR3b3JrU3RhdGVOb3RpZmllci5oPgogI2ltcG9ydCA8V2ViQ29y
ZS9SdW50aW1lQXBwbGljYXRpb25DaGVja3NJT1MuaD4KICNpbXBvcnQgPFdlYkNvcmUvU1FMaXRl
RGF0YWJhc2VUcmFja2VyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL1NtYXJ0UmVwbGFjZS5oPgogI2lt
cG9ydCA8V2ViQ29yZS9UZXh0UnVuLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL1RpbGVDYWNoZS5oPgog
I2ltcG9ydCA8V2ViQ29yZS9UaWxlQ29udHJvbGxlck1lbW9yeUhhbmRsZXJJT1MuaD4KICNpbXBv
cnQgPFdlYkNvcmUvV0FLV2luZG93Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL1dlYkNvcmVUaHJlYWQu
aD4KQEAgLTEzMzAsNyArMTMzMCw3IEBAICsgKHZvaWQpZHJhaW5MYXllclBvb2wKIHsKICAgICBB
U1NFUlQoV2ViVGhyZWFkSXNDdXJyZW50KCkpOwogICAgIFdlYktpdDo6TWVtb3J5TWVhc3VyZSBt
ZWFzdXJlcigiTWVtb3J5IHdhcm5pbmc6IERyYWluaW5nIGxheWVyIHBvb2wuIik7Ci0gICAgV2Vi
Q29yZTo6VGlsZUNhY2hlOjpkcmFpbkxheWVyUG9vbCgpOworICAgIFdlYkNvcmU6OkxlZ2FjeVRp
bGVDYWNoZTo6ZHJhaW5MYXllclBvb2woKTsKIH0KIAogKyAodm9pZClkaXNjYXJkQWxsQ29tcGls
ZWRDb2RlCkBAIC00NTQ5LDcgKzQ1NDksNyBAQCAtICh2b2lkKV9zZXRXZWJHTEVuYWJsZWQ6KEJP
T0wpZW5hYmxlZAogCiArICh2b2lkKV9zZXRUaWxlQ2FjaGVMYXllclBvb2xDYXBhY2l0eToodW5z
aWduZWQpY2FwYWNpdHkKIHsKLSAgICBUaWxlQ2FjaGU6OnNldExheWVyUG9vbENhcGFjaXR5KGNh
cGFjaXR5KTsKKyAgICBMZWdhY3lUaWxlQ2FjaGU6OnNldExheWVyUG9vbENhcGFjaXR5KGNhcGFj
aXR5KTsKIH0KICNlbmRpZiAvLyBQTEFURk9STShJT1MpCiAK
</data>
<flag name="review"
          id="252488"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>